Maciej Niedzwiecki

121 papers C 1Misc 14Journal 57Unranked 49
YearRankTypeTitle / Venue / Authors
2026 J jnl
Signal Process.
Lei Zhou, Hongqing Liu, Lu Gan, Yi Zhou, Maciej Niedzwiecki, Trieu-Kien Truong
2025 conf
CDC
Artur Gancza, Maciej Niedzwiecki
2025 J jnl
CoRR
Maciej Niedzwiecki, Artur Gancza, Wojciech Zulawinski, Agnieszka Wylomanska
2024 conf
EUSIPCO
Artur Gancza, Maciej Niedzwiecki
2024 J jnl
IEEE Trans. Signal Process.
Maciej Niedzwiecki, Artur Gancza
2024 conf
CDC
Maciej Niedzwiecki, Artur Gancza, Wojciech Zulawinski, Agnieszka Wylomanska
2023 conf
CDC
Maciej Niedzwiecki, Artur Gancza
2023 J jnl
Signal Process.
Maciej Niedzwiecki, Artur Gancza
2023 Misc conf
ICASSP
Maciej Niedzwiecki, Artur Gancza, Lu Shen, Yuriy V. Zakharov
2022 Misc conf
ICASSP
Maciej Niedzwiecki, Artur Gancza, Lu Shen, Yuriy V. Zakharov
2022 J jnl
Signal Process.
Maciej Niedzwiecki, Artur Gancza, Lu Shen, Yuriy V. Zakharov
2022 J jnl
Signal Process.
Lu Shen, Yuriy V. Zakharov, Maciej Niedzwiecki, Artur Gancza
2022 conf
CDC
Maciej Niedzwiecki, Artur Gancza
2021 J jnl
Autom.
Maciej Niedzwiecki, Marcin Ciolek, Artur Gancza, Piotr Kaczmarek
2021 J jnl
IEEE Access
Marcin Ciolek, Maciej Niedzwiecki, Artur Gancza
2021 conf
EUSIPCO
Artur Gancza, Maciej Niedzwiecki
2021 J jnl
IEEE Trans. Signal Process.
Artur Gancza, Maciej Niedzwiecki, Marcin Ciolek
2021 conf
CDC
Artur Gancza, Maciej Niedzwiecki
2020 conf
SPA
Maciej Niedzwiecki, Marcin Ciolek, Artur Gancza, Piotr Kaczmarek
2020 J jnl
Autom.
Maciej Niedzwiecki, Marcin Ciolek, Artur Gancza
2020 conf
CDC
Maciej Niedzwiecki, Artur Gancza, Marcin Ciolek
2019 conf
EUSIPCO
Maciej Niedzwiecki, Marcin Ciolek, Artur Gancza
2019 conf
EUSIPCO
Maciej Niedzwiecki, Marcin Ciolek
2019 J jnl
Autom.
Maciej Niedzwiecki, Marcin Ciolek
2019 J jnl
IEEE Trans. Autom. Control.
Maciej Niedzwiecki, Michal Meller, Damian Chojnacki
2019 conf
CDC
Maciej Niedzwiecki, Marcin Ciolek, Artur Gancza
2019 conf
EUSIPCO
Michal Meller, Maciej Niedzwiecki, Damian Chojnacki
2019 J jnl
IEEE Trans. Signal Process.
Maciej Niedzwiecki, Marcin Ciolek
2018 J jnl
Digit. Signal Process.
Maciej Niedzwiecki, Marcin Ciolek
2018 Misc conf
ICASSP
Maciej Niedzwiecki, Marcin Ciolek
2017 conf
TSP
Maciej Niedzwiecki, Marcin Ciolek
2017 Misc conf
ICASSP
Marcin Ciolek, Maciej Niedzwiecki
2017 conf
CDC
Maciej Niedzwiecki, Michal Meller, Damian Chojnacki
2017 J jnl
IEEE Trans. Signal Process.
Maciej Niedzwiecki, Marcin Ciolek
2017 J jnl
Autom.
Maciej Niedzwiecki, Marcin Ciolek, Yoshinobu Kajikawa
2017 conf
CDC
Michal Meller, Maciej Niedzwiecki, Damian Chojnacki, Adam Lasota
2017 conf
EUSIPCO
Maciej Niedzwiecki, Marcin Ciolek
2016 J jnl
IEEE Trans. Instrum. Meas.
Maciej Niedzwiecki, Przemyslaw Pietrzak
2016 Misc conf
ICASSP
Maciej Niedzwiecki, Marcin Ciolek, Yoshinobu Kajikawa
2015 Misc conf
ICASSP
Maciej Niedzwiecki, Michal Meller
2015 J jnl
IEEE J. Biomed. Health Informatics
Marcin Ciolek, Maciej Niedzwiecki, Stefan Sieklicki, Jacek Drozdowski, Janusz Siebert
2015 J jnl
IEEE ACM Trans. Audio Speech Lang. Process.
Maciej Niedzwiecki, Marcin Ciolek, Krzysztof Cisowski
2015 J jnl
Digit. Signal Process.
Maciej Niedzwiecki, Marcin Ciolek
2015 conf
EUSIPCO
Maciej Niedzwiecki, Michal Meller, Maciej Gajdzica
2014 conf
EUSIPCO
Marcin Ciolek, Maciej Niedzwiecki, Stefan Sieklicki, Jacek Drozdowski, Janusz Siebert
2014 conf
EUSIPCO
Maciej Niedzwiecki, Marcin Ciolek
2014 Misc conf
ICASSP
Maciej Niedzwiecki, Marcin Ciolek
2014 J jnl
Signal Process.
Michal Stanislaw Meller, Maciej Niedzwiecki
2013 conf
EUSIPCO
Michal Meler, Maciej Niedzwiecki
2013 J jnl
IEEE Trans. Speech Audio Process.
Maciej Niedzwiecki, Marcin Ciolek
2013 Misc conf
ICASSP
Maciej Niedzwiecki, Michal Stanislaw Meller, Yoshinobu Kajikawa, Dawid Lukwinski
2013 J jnl
Autom.
Maciej Niedzwiecki, Michal Stanislaw Meller
2013 C conf
ISPA
Michal Meller, Maciej Niedzwiecki
2013 J jnl
IEEE Trans. Autom. Control.
Maciej Niedzwiecki, Szymon Gackowski
2013 J jnl
Digit. Signal Process.
Michal Stanislaw Meller, Maciej Niedzwiecki
2013 Misc conf
ICASSP
Maciej Niedzwiecki, Marcin Ciolek
2012 conf
EUSIPCO
Maciej Niedzwiecki, Marcin Ciolek
2012 conf
ISSPA
Maciej Niedzwiecki, Michal Stanislaw Meller
2012 conf
EUSIPCO
Maciej Niedzwiecki, Michal Meler
2012 J jnl
IEEE Trans. Signal Process.
Maciej Niedzwiecki
2012 conf
CDC
Maciej Niedzwiecki, Szymon Gackowski
2012 conf
CDC
Michal Stanislaw Meller, Maciej Niedzwiecki
2011 J jnl
IEEE Trans. Signal Process.
Maciej Niedzwiecki, Michal Stanislaw Meller
2011 Misc conf
ICASSP
Maciej Niedzwiecki, Szymon Gackowski
2011 J jnl
Autom.
Maciej Niedzwiecki, Szymon Gackowski
2011 Misc conf
ICASSP
Maciej Niedzwiecki, Michal Stanislaw Meller
2010 conf
EUSIPCO
Michal Stanislaw Meller, Maciej Niedzwiecki
2010 J jnl
Autom.
Maciej Niedzwiecki
2010 J jnl
IEEE Trans. Signal Process.
Maciej Niedzwiecki
2010 conf
EUSIPCO
Maciej Niedzwiecki, Szymon Gackowski
2010 conf
CDC
Michal Stanislaw Meller, Maciej Niedzwiecki
2010 conf
ICCA
Maciej Niedzwiecki, Michal Stanislaw Meller
2009 J jnl
IEEE Trans. Signal Process.
Maciej Niedzwiecki, Michal Stanislaw Meller
2009 J jnl
IEEE Trans. Signal Process.
Maciej Niedzwiecki, Michal Stanislaw Meller
2009 J jnl
IEEE Trans. Autom. Control.
Maciej Niedzwiecki, Michal Stanislaw Meller
2009 J jnl
Autom.
Maciej Niedzwiecki, Piotr Kaczmarek
2009 Misc conf
ICASSP
Maciej Niedzwiecki, Michal Stanislaw Meller
2008 conf
EUSIPCO
Maciej Niedzwiecki
2008 Misc conf
ICASSP
Maciej Niedzwiecki
2008 J jnl
IEEE Trans. Signal Process.
Maciej Niedzwiecki, Adam Sobocinski
2008 conf
CDC
Maciej Niedzwiecki, Michal Stanislaw Meller
2008 J jnl
Autom.
Maciej Niedzwiecki
2008 J jnl
Autom.
Maciej Niedzwiecki
2008 J jnl
Autom.
Maciej Niedzwiecki
2008 J jnl
IEEE Trans. Signal Process.
Maciej Niedzwiecki
2008 conf
CDC
Maciej Niedzwiecki, Michal Stanislaw Meller
2007 J jnl
IEEE Signal Process. Lett.
Maciej Niedzwiecki, Adam Sobocinski
2007 conf
ICASSP (3)
Maciej Niedzwiecki, Piotr Kaczmarek
2007 J jnl
Autom.
Maciej Niedzwiecki, Adam Sobocinski
2007 J jnl
IEEE Trans. Signal Process.
Maciej Niedzwiecki, Adam Sobocinski
2007 conf
EUSIPCO
Maciej Niedzwiecki
2007 conf
EUSIPCO
Marcin Pazio, Maciej Niedzwiecki, Ryszard Kowalik, Jacek Lebiedz
2006 J jnl
IEEE Trans. Signal Process.
Maciej Niedzwiecki, Piotr Kaczmarek
2006 conf
EUSIPCO
Maciej Niedzwiecki, Adam Sobocinski
2006 conf
EUSIPCO
Maciej Niedzwiecki, Piotr Kaczmarek
2006 J jnl
IEEE Trans. Signal Process.
Maciej Niedzwiecki, Piotr Kaczmarek
2005 J jnl
Autom.
Maciej Niedzwiecki, Piotr Kaczmarek
2005 J jnl
IEEE Trans. Signal Process.
Maciej Niedzwiecki, Piotr Kaczmarek
2005 conf
CDC/ECC
Maciej Niedzwiecki, Piotr Kaczmarek
2005 J jnl
IEEE Trans. Signal Process.
Maciej Niedzwiecki, Piotr Kaczmarek
2005 conf
CDC/ECC
Maciej Niedzwiecki
2005 conf
EUSIPCO
Maciej Niedzwiecki, Piotr Kaczmarek
2004 conf
EUSIPCO
Maciej Niedzwiecki, Piotr Kaczmarek
2004 conf
ICASSP (2)
Maciej Niedzwiecki, Piotr Kaczmarek
2003 conf
ISSPA (2)
Szymon Ceranka, Maciej Niedzwiecki
2003 J jnl
IEEE Trans. Signal Process.
Maciej Niedzwiecki, Tomasz Klaput
2002 J jnl
IEEE Trans. Signal Process.
Maciej Niedzwiecki, Tomasz Klaput
2002 conf
EUSIPCO
Maciej Niedzwiecki, Tomasz Klaput, Piotr Kaczmarek
2001 conf
CDC
Maciej Niedzwiecki, Tomasz Klaput
2001 J jnl
IEEE Trans. Signal Process.
Maciej Niedzwiecki, Krzysztof Cisowski
2000 conf
EUSIPCO
Maciej Niedzwiecki, Tomasz Klaput
2000 Misc conf
ICASSP
Maciej Niedzwiecki, Tomasz Klaput
1999 conf
ISCAS (4)
Krzysztof Cisowski, Maciej Niedzwiecki
1996 J jnl
IEEE Trans. Signal Process.
Maciej Niedzwiecki, Krzysztof Cisowski
1996 conf
EUSIPCO
Maciej Niedzwiecki
1995 J jnl
IEEE Trans. Signal Process.
Maciej Niedzwiecki, William A. Sethares
1994 J jnl
Autom.
Maciej Niedzwiecki
1993 J jnl
IEEE Trans. Signal Process.
Maciej Niedzwiecki
1992 J jnl
IEEE Trans. Signal Process.
Maciej Niedzwiecki
1990 J jnl
IEEE Trans. Acoust. Speech Signal Process.
Maciej Niedzwiecki
1989 J jnl
Autom.
Maciej Niedzwiecki
tests/integration/test_base_extractor.py
← Index tests/integration/test_base_extractor.py python
"""
Integration tests for the base Extractor class.
"""
import pytest
import hashlib
import math
from unittest.mock import Mock, patch, MagicMock
from collections import Counter

pytestmark = [pytest.mark.integration]


class TestExtractorStaticMethods:
    """Tests for static methods in Extractor class."""

    def test_process_binary_string_printable(self):
        """Test processing a printable binary string."""
        from redb.extractors.extractor import Extractor

        # Test with printable ASCII characters
        input_bytes = b"Hello World\x00\x00\x00"
        result = Extractor.process_binary_string(input_bytes)
        assert result == "Hello World"

    def test_process_binary_string_non_printable(self):
        """Test processing a string with non-printable characters."""
        from redb.extractors.extractor import Extractor

        # Test with non-printable characters
        input_bytes = b"\x01\x02Hello\x00"
        result = Extractor.process_binary_string(input_bytes)
        assert "\\x01" in result
        assert "\\x02" in result
        assert "Hello" in result

    def test_process_binary_string_empty(self):
        """Test processing an empty binary string."""
        from redb.extractors.extractor import Extractor

        input_bytes = b"\x00\x00\x00"
        result = Extractor.process_binary_string(input_bytes)
        assert result == ""

    def test_process_binary_string_all_printable(self):
        """Test processing a fully printable string."""
        from redb.extractors.extractor import Extractor

        input_bytes = b"TestString123"
        result = Extractor.process_binary_string(input_bytes)
        assert result == "TestString123"

    def test_remove_non_utf8_valid(self):
        """Test removing non-UTF8 characters from valid UTF8 string."""
        from redb.extractors.extractor import Extractor

        input_bytes = b"Hello World"
        result = Extractor.remove_non_utf8(input_bytes)
        assert result == b"Hello World"

    def test_remove_non_utf8_with_invalid(self):
        """Test removing non-UTF8 characters from mixed string."""
        from redb.extractors.extractor import Extractor

        # Mix of valid UTF8 and invalid bytes
        input_bytes = b"Hello\xff\xfeWorld"
        result = Extractor.remove_non_utf8(input_bytes)
        # Should remove the invalid bytes
        assert b"\xff" not in result
        assert b"\xfe" not in result
        assert b"Hello" in result
        assert b"World" in result

    def test_remove_non_utf8_empty(self):
        """Test removing non-UTF8 from empty string."""
        from redb.extractors.extractor import Extractor

        result = Extractor.remove_non_utf8(b"")
        assert result == b""


class TestExtractorEntropyCalculation:
    """Tests for entropy calculation in Extractor class."""

    def test_calculate_entropy_empty_data(self, elf_binary_path, mock_logger):
        """Test entropy calculation with empty data."""
        from redb.extractors.basicproperties import BasicPropertiesExtractor

        with patch('redb.settings.ELASTIC_BINARIES_COLLECTION', 'test'):
            extractor = BasicPropertiesExtractor(elf_binary_path, mock_logger)
            result = extractor.calculate_entropy(b"")
            assert result == 0.0

    def test_calculate_entropy_uniform_data(self, elf_binary_path, mock_logger):
        """Test entropy calculation with uniform (low entropy) data."""
        from redb.extractors.basicproperties import BasicPropertiesExtractor

        with patch('redb.settings.ELASTIC_BINARIES_COLLECTION', 'test'):
            extractor = BasicPropertiesExtractor(elf_binary_path, mock_logger)
            # All same bytes = 0 entropy
            uniform_data = b"\x00" * 256
            result = extractor.calculate_entropy(uniform_data)
            assert result == 0.0

    def test_calculate_entropy_random_data(self, elf_binary_path, mock_logger, high_entropy_data):
        """Test entropy calculation with random (high entropy) data."""
        from redb.extractors.basicproperties import BasicPropertiesExtractor

        with patch('redb.settings.ELASTIC_BINARIES_COLLECTION', 'test'):
            extractor = BasicPropertiesExtractor(elf_binary_path, mock_logger)
            result = extractor.calculate_entropy(high_entropy_data)
            # Random data should have entropy close to 8 (max for bytes)
            assert result > 7.0

    def test_calculate_entropy_binary_data(self, elf_binary_path, mock_logger):
        """Test entropy calculation with binary data."""
        from redb.extractors.basicproperties import BasicPropertiesExtractor

        with patch('redb.settings.ELASTIC_BINARIES_COLLECTION', 'test'):
            extractor = BasicPropertiesExtractor(elf_binary_path, mock_logger)
            # Two equally distributed values = 1 bit entropy
            binary_data = b"\x00\x01" * 128
            result = extractor.calculate_entropy(binary_data)
            assert abs(result - 1.0) < 0.01

    def test_calculate_entropy_string_data(self, elf_binary_path, mock_logger):
        """Test entropy calculation with string data."""
        from redb.extractors.basicproperties import BasicPropertiesExtractor

        with patch('redb.settings.ELASTIC_BINARIES_COLLECTION', 'test'):
            extractor = BasicPropertiesExtractor(elf_binary_path, mock_logger)
            # String with two equally distributed characters
            string_data = "ab" * 100
            result = extractor.calculate_entropy(string_data)
            assert abs(result - 1.0) < 0.01


class TestExtractorInitialization:
    """Tests for Extractor initialization."""

    def test_extractor_hashes_computed_on_init(self, elf_binary_path, mock_logger, known_hashes):
        """Test that hashes are computed during initialization."""
        from redb.extractors.basicproperties import BasicPropertiesExtractor

        with patch('redb.settings.ELASTIC_BINARIES_COLLECTION', 'test'):
            extractor = BasicPropertiesExtractor(elf_binary_path, mock_logger)

            assert extractor.md5 == known_hashes['md5']
            assert extractor.sha1 == known_hashes['sha1']
            assert extractor.sha256 == known_hashes['sha256']

    def test_extractor_hash_dataclass_created(self, elf_binary_path, mock_logger, known_hashes):
        """Test that Hash dataclass is created during initialization."""
        from redb.extractors.basicproperties import BasicPropertiesExtractor

        with patch('redb.settings.ELASTIC_BINARIES_COLLECTION', 'test'):
            extractor = BasicPropertiesExtractor(elf_binary_path, mock_logger)

            assert extractor.hash.md5 == known_hashes['md5']
            assert extractor.hash.sha1 == known_hashes['sha1']
            assert extractor.hash.sha256 == known_hashes['sha256']

    def test_extractor_binary_cached_property(self, elf_binary_path, mock_logger, elf_binary_content):
        """Test that binary content is loaded as cached property."""
        from redb.extractors.basicproperties import BasicPropertiesExtractor

        with patch('redb.settings.ELASTIC_BINARIES_COLLECTION', 'test'):
            extractor = BasicPropertiesExtractor(elf_binary_path, mock_logger)

            # Access binary property
            binary = extractor.binary
            assert binary == elf_binary_content

            # Second access should return cached value (same id)
            assert extractor.binary is binary

    def test_extractor_with_exporters(self, elf_binary_path, mock_logger, mock_print_exporter):
        """Test extractor initialization with exporters."""
        from redb.extractors.basicproperties import BasicPropertiesExtractor

        with patch('redb.settings.ELASTIC_BINARIES_COLLECTION', 'test'):
            extractor = BasicPropertiesExtractor(
                elf_binary_path,
                mock_logger,
                exporters=[mock_print_exporter]
            )

            assert len(extractor.exporters) == 1
            assert extractor.exporters[0] is mock_print_exporter

    def test_extractor_with_index_prefix(self, elf_binary_path, mock_logger):
        """Test extractor initialization with custom index prefix."""
        from redb.extractors.basicproperties import BasicPropertiesExtractor

        with patch('redb.settings.ELASTIC_BINARIES_COLLECTION', 'test'):
            extractor = BasicPropertiesExtractor(
                elf_binary_path,
                mock_logger,
                index_prefix="custom_prefix"
            )

            assert "custom_prefix" in extractor.elastic_index

    def test_extractor_known_benign_flag(self, elf_binary_path, mock_logger):
        """Test extractor with known_benign flag."""
        from redb.extractors.basicproperties import BasicPropertiesExtractor

        with patch('redb.settings.ELASTIC_BINARIES_COLLECTION', 'test'):
            extractor = BasicPropertiesExtractor(
                elf_binary_path,
                mock_logger,
                known_benign=True
            )

            assert extractor.known_benign is True
            assert extractor.known_malicious is False

    def test_extractor_known_malicious_flag(self, elf_binary_path, mock_logger):
        """Test extractor with known_malicious flag."""
        from redb.extractors.basicproperties import BasicPropertiesExtractor

        with patch('redb.settings.ELASTIC_BINARIES_COLLECTION', 'test'):
            extractor = BasicPropertiesExtractor(
                elf_binary_path,
                mock_logger,
                known_malicious=True
            )

            assert extractor.known_benign is False
            assert extractor.known_malicious is True


class TestExtractorExportData:
    """Tests for export_data method."""

    def test_export_data_with_print_exporter(self, elf_binary_path, mock_logger, mock_print_exporter, capsys):
        """Test export_data with PrintExporter."""
        from redb.extractors.basicproperties import BasicPropertiesExtractor

        with patch('redb.settings.ELASTIC_BINARIES_COLLECTION', 'test'):
            extractor = BasicPropertiesExtractor(
                elf_binary_path,
                mock_logger,
                exporters=[mock_print_exporter]
            )

            result = extractor.export_data()
            # Should succeed with PrintExporter
            assert result is True

    def test_export_data_no_exporters(self, elf_binary_path, mock_logger):
        """Test export_data with no exporters configured."""
        from redb.extractors.basicproperties import BasicPropertiesExtractor

        with patch('redb.settings.ELASTIC_BINARIES_COLLECTION', 'test'):
            extractor = BasicPropertiesExtractor(
                elf_binary_path,
                mock_logger,
                exporters=[]
            )

            result = extractor.export_data()
            # Should succeed with no exporters (nothing to export)
            assert result is True


class TestExtractorEdgeCases:
    """Tests for edge cases in Extractor class."""

    def test_extractor_with_nonexistent_file(self, mock_logger):
        """Test extractor with non-existent file."""
        from redb.extractors.basicproperties import BasicPropertiesExtractor

        with patch('redb.settings.ELASTIC_BINARIES_COLLECTION', 'test'):
            with pytest.raises(FileNotFoundError):
                BasicPropertiesExtractor("/nonexistent/file.bin", mock_logger)

    def test_entropy_none_data(self, elf_binary_path, mock_logger):
        """Test entropy calculation with None returns 0."""
        from redb.extractors.basicproperties import BasicPropertiesExtractor

        with patch('redb.settings.ELASTIC_BINARIES_COLLECTION', 'test'):
            extractor = BasicPropertiesExtractor(elf_binary_path, mock_logger)
            result = extractor.calculate_entropy(None)
            assert result == 0.0

    def test_process_binary_string_high_bytes(self):
        """Test processing binary string with high byte values."""
        from redb.extractors.extractor import Extractor

        # Characters above 126 are non-printable
        input_bytes = b"\x7f\x80\x81\xff"
        result = Extractor.process_binary_string(input_bytes)
        assert "\\x7f" in result
        assert "\\x80" in result
        assert "\\xff" in result