Nashwa El-Bendary

77 papers B 2C 21Journal 15Unranked 37
YearRankTypeTitle / Venue / Authors
2025 J jnl
Inf.
Reham Hesham El-Deeb, Walid M. Abdelmoez, Nashwa El-Bendary
2025 J jnl
Big Data Cogn. Comput.
Asmaa Hashem Sweidan, Nashwa El-Bendary, Shereen A. Taie, Amira M. Idrees, Esraa Elhariri
2024 conf
ICCTA
Dina Essam Abd-Elhafeez, Yasser Ahmed Dahab, Nashwa El-Bendary, Osama Mohamed Badawy
2024 J jnl
ACM Trans. Asian Low Resour. Lang. Inf. Process.
Asmaa Hashem Sweidan, Nashwa El-Bendary, Esraa Elhariri
2023 J jnl
Inf. Fusion
Yuan Zhuang, Xiao Sun, You Li, Jianzhu Huai, Luchi Hua, Xiansheng Yang, Xiaoxiang Cao, Peng Zhang, Yue Cao, Longning Qi, Jun Yang, Nashwa El-Bendary, Naser El-Sheimy, John S. Thompson, Ruizhi Chen
2023 J jnl
CoRR
Bahaa-Eldin Ali Abdelghany, Ana Fernández Vilas, Manuel Fernández-Veiga, Nashwa El-Bendary, Ammar M. Hassan, Walid M. Abdelmoez
2022 J jnl
Algorithms
Esraa Elhariri, Nashwa El-Bendary, Shereen A. Taie
2022 conf
ICCTA
Mohamed Salah Awadallah, Francisco de Arriba-Pérez, Enrique Costa-Montenegro, Mohamed Kholief, Nashwa El-Bendary
2022 conf
ICCTA
Bahaa-Elden A. Abdelghany, Manuel Fernández-Veiga, Ana Fernández Vilas, Ammar M. Hassan, Walid M. Abdelmoez, Nashwa El-Bendary
2022 conf
PE-WASUN
Hadeel Abd El-Kareem Abd El-Moaty Saleh, Ana Fernández Vilas, Manuel Fernández-Veiga, Yasser El-Sonbaty, Nashwa El-Bendary
2022 conf
ICANN (2)
Asmaa Hashem Sweidan, Nashwa El-Bendary, Haytham Al-Feel
2021 conf
SOCO
Asmaa Hashem Sweidan, Nashwa El-Bendary, Haytham Al-Feel
2021 conf
ICCTA
Islam A. Monir, Nashwa El-Bendary, Mohamed Waleed Fakhr
2021 J jnl
IEEE Access
Asmaa Hashem Sweidan, Nashwa El-Bendary, Haytham Al-Feel
2020 J jnl
Appl. Soft Comput.
Ala'a El-Nabawy, Nashwa El-Bendary, Nahla A. Belal
2020 J jnl
IEEE Access
Esraa Elhariri, Nashwa El-Bendary, Shereen A. Taie
2019 C conf
ISDA
Heba Osman, Nashwa El-Bendary, Essam El Fakharany
2019 C conf
ISDA
Hadeer El-ziaat, Nashwa El-Bendary, Ramadan Moawad
2019 C conf
MEDES
Esraa Elhariri, Nashwa El-Bendary, Shereen A. Taie
2018 J jnl
J. Sensors
Qing Tan, Nashwa El-Bendary, Magdy A. Bayoumi, Xiaokun Zhang, Javier Sedano, José Ramón Villar
2017 conf
ICCTA
Ala'a El-Nabawy, Nahla A. Belal, Nashwa El-Bendary
2016 conf
ACTEA
Esraa Elhariri, Nashwa El-Bendary, Aboul Ella Hassanien
2016 B conf
KES
Nashwa El-Bendary, Esraa Elhariri, Maryam Hazman, Samir Mahmoud Saleh, Aboul Ella Hassanien
2016 J jnl
Appl. Soft Comput.
Aboul Ella Hassanien, Nashwa El-Bendary, Asmaa Hashem Sweidan, Abd El-karim Mohamed, Osman Mohammed Hegazy
2016 B conf
KES
Waleed Yamany, Nashwa El-Bendary, Aboul Ella Hassanien, Eid Emary
2016 ed.
AISI
Tarek Gaber, Aboul Ella Hassanien, Nashwa El-Bendary, Nilanjan Dey
2015 conf
AISI
Esraa Elhariri, Nashwa El-Bendary, Aboul Ella Hassanien
2015 conf
ECC
Asmaa Hashem Sweidan, Nashwa El-Bendary, Osman Mohammed Hegazy, Aboul Ella Hassanien
2015 ch.
Brain-Computer Interfaces
Mohamed Mostafa M. Fouad, Khalid Mohamed Amin, Nashwa El-Bendary, Aboul Ella Hassanien
2015 conf
AISI
Asmaa Hashem Sweidan, Nashwa El-Bendary, Aboul Ella Hassanien, Osman Mohammed Hegazy, Abd El-karim Mohamed
2015 conf
SoCPaR
Esraa Elhariri, Nashwa El-Bendary, Aboul Ella Hassanien, Ajith Abraham
2015 conf
AISI
Celia González Nespereira, Esraa Elhariri, Nashwa El-Bendary, Ana Fernández Vilas, Rebeca P. Díaz Redondo
2015 conf
ECC
Rehab Mahmoud, Nashwa El-Bendary, Hoda M. O. Mokhtar, Aboul Ella Hassanien, Hala A. Shaheen
2015 conf
AISI
Rehab Mahmoud, Nashwa El-Bendary, Hoda M. O. Mokhtar, Aboul Ella Hassanien
2015 J jnl
Expert Syst. Appl.
Nashwa El-Bendary, Esraa El Hariri, Aboul Ella Hassanien, Amr Badr
2015 conf
SoCPaR
Asmaa Hashem Sweidan, Nashwa El-Bendary, Aboul Ella Hassanien, Osman Mohammed Hegazy, Abd El-karim Mohamed
2014 J jnl
CoRR
Ahmed H. Asad, Ahmad Taher Azar, Nashwa El-Bendary, Aboul Ella Hassanien
2014 J jnl
Computing
Nashwa El-Bendary, Tai-Hoon Kim, Aboul Ella Hassanien, Mohamed Sami
2014 conf
IBICA
Mohamed Abdel Salam, Mahmood A. Mahmood, Yasser Mahmoud Awad, Maryam Hazman, Nashwa El-Bendary, Aboul Ella Hassanien, Mohamed F. Tolba, Samir Mahmoud Saleh
2014 C conf
HIS
Mai Nadi, Nashwa El-Bendary, Hamdi A. Mahmoud, Aboul Ella Hassanien
2014 conf
IBICA
Esraa Elhariri, Nashwa El-Bendary, Aboul Ella Hassanien, Amr Badr, Ahmed M. M. Hussein, Václav Snásel
2014 conf
IEEE Conf. on Intelligent Systems (2)
Adham Mohamed, Mohamed Mostafa M. Fouad, Esraa Elhariri, Nashwa El-Bendary, Hossam M. Zawbaa, Mohamed Tahoun, Aboul Ella Hassanien
2014 conf
IEEE Conf. on Intelligent Systems (2)
Usama Mokhtar, Nashwa El-Bendary, Aboul Ella Hassenian, Eid Emary, Mahmoud A. Mahmoud, Hesham A. Hefny, Mohamed F. Tolba
2013 conf
IBICA
Mahmood A. Mahmood, Nashwa El-Bendary, Jan Platos, Aboul Ella Hassanien, Hesham A. Hefny
2013 C conf
HIS
Mohamed Abd Elfattah, Nashwa El-Bendary, Mohamed Abu ElSoud, Aboul Ella Hassanien, Mohamed Fahmy Tolba
2013 C conf
HIS
Samar Mahmoud, Nashwa El-Bendary, Mahmood A. Mahmood, Aboul Ella Hassanien
2013 C conf
HIS
Mohamed Mostafa M. Fouad, Hossam M. Zawbaa, Nashwa El-Bendary, Aboul Ella Hassanien
2013 C conf
FedCSIS
Ahmed M. Anter, Ahmad Taher Azar, Aboul Ella Hassanien, Mohamed Abu ElSoud, Nashwa El-Bendary
2013 C conf
FedCSIS
Ahmed Hamdy, Nashwa El-Bendary, Ashraf Khodeir, Mohamed Mostafa M. Fouad, Aboul Ella Hassanien, Hesham A. Hefny
2013 C conf
ISI
Mahmood A. Mahmood, Nashwa El-Bendary, Aboul Ella Hassanien, Hesham A. Hefny
2013 C conf
HIS
Soumya Banerjee, Nashwa El-Bendary, Aboul Ella Hassanien, Mohamed Fahmy Tolba
2013 conf
SecNet
Qing Tan, Nashwa El-Bendary, Frédérique C. Pivot, Anthony Lam
2013 conf
IBICA
Esraa Elhariri, Nashwa El-Bendary, Mohamed Mostafa M. Fouad, Jan Platos, Aboul Ella Hassanien, Ahmed M. M. Hussein
2013 C conf
ISI
Mostafa A. Salama, Mohamed Mostafa M. Fouad, Nashwa El-Bendary, Aboul Ella Otifey Hassanien
2013 conf
IBICA
Mohamed Abd Elfattah, Nashwa El-Bendary, Mohamed Abu ElSoud, Jan Platos, Aboul Ella Hassanien
2013 C conf
FedCSIS
Mahmood A. Mahmood, Eiman Tamah Al-Shammari, Nashwa El-Bendary, Aboul Ella Hassanien, Hesham A. Hefny
2013 conf
IBICA
Waleed Yamany, Nashwa El-Bendary, Hossam M. Zawbaa, Aboul Ella Hassanien, Václav Snásel
2012 C conf
ISDA
Hossam M. Moftah, Walaa H. Elmasry, Nashwa El-Bendary, Aboul Ella Hassanien, Kazumi Nakamatsu
2012 C conf
FedCSIS
Walaa H. Elmasry, Nashwa El-Bendary, Aboul Ella Hassanien
2012 C conf
FedCSIS
Mohamed Sami, Nashwa El-Bendary, Aboul Ella Hassanien
2012 C conf
HIS
Mohamed Sami, Nashwa El-Bendary, Aboul Ella Hassanien
2012 C conf
HIS
Walaa H. Elmasry, Hossam M. Moftah, Nashwa El-Bendary, Aboul Ella Hassanien
2012 conf
FGIT
Mohamed Sami, Nashwa El-Bendary, Tai-Hoon Kim, Aboul Ella Hassanien
2011 conf
RSKT
Omar S. Soliman, Aboul Ella Hassanien, Neveen I. Ghali, Nashwa El-Bendary, Ruhul A. Sarker
2011 conf
SOCO
Omar S. Soliman, Aboul Ella Hassanien, Nashwa El-Bendary
2011 conf
SOCO
Nashwa El-Bendary, Aboul Ella Hassanien, Emilio Corchado, Robert C. Berwick
2011 conf
IHCI
Aboul Ella Hassanien, Nashwa El-Bendary, Milos Kudelka, Václav Snásel
2011 conf
SOCO
Aboul Ella Hassanien, Omar S. Soliman, Nashwa El-Bendary
2011 conf
ACN
Nashwa El-Bendary, Václav Snásel, Ghada Adam, Fatma Mansour, Neveen I. Ghali, Omar S. Soliman, Aboul Ella Hassanien
2011 C conf
MEDES
Soumya Banerjee, Nashwa El-Bendary, Hameed Al-Qaheri
2011 C conf
FedCSIS
Mostafa A. Salama, Nashwa El-Bendary, Aboul Ella Hassanien, Kenneth Revett, Aly A. Fahmy
2011 conf
FGIT-MulGraB (2)
Hossam M. Zawbaa, Nashwa El-Bendary, Aboul Ella Hassanien, Tai-Hoon Kim
2011 J jnl
Int. J. Reason. based Intell. Syst.
Nashwa El-Bendary, Hossam M. Zawbaa, Aboul Ella Hassanien, Václav Snásel
2011 conf
NaBIC
Hossam M. Zawbaa, Nashwa El-Bendary, Aboul Ella Hassanien, Ajith Abraham
2010 conf
CISIM
Nashwa El-Bendary, Hossam M. Zawbaa, Mahmoud S. Daoud, Aboul Ella Hassanien, Kazumi Nakamatsu
2010 conf
NaBIC
Nashwa El-Bendary, Hameed Al-Qaheri, Hossam M. Zawbaa, Mohamed Hamed, Aboul Ella Hassanien, Qiangfu Zhao, Ajith Abraham
2010 C conf
ISDA
Hossam M. Zawbaa, Nashwa El-Bendary, Aboul Ella Hassanien, Václav Snásel
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