Rahul Saha

80 papers A 1C 1Journal 68Unranked 9
YearRankTypeTitle / Venue / Authors
2026 J jnl
ICT Express
Sarvagya Singh, Rahul Saha, Gulshan Kumar, Anand Nayyar, Tae-Kyung Kim
2025 A conf
AsiaCCS
Tannishtha Devgun, Gulshan Kumar, Rahul Saha, Alessandro Brighente, Mauro Conti
2025 J jnl
IEEE Trans. Netw. Serv. Manag.
Gulshan Kumar, Rahul Saha, Mauro Conti, Tai-Hoon Kim
2025 J jnl
Complex Intell. Syst.
Gulshan Kumar, Rahul Saha, Mauro Conti, Tai-Hoon Kim
2025 J jnl
IEEE Access
Amandeep Verma, Rahul Saha, Gulshan Kumar, Alessandro Brighente, Mauro Conti, Tai-Hoon Kim
2025 J jnl
IACR Cryptol. ePrint Arch.
Gulshan Kumar, Rahul Saha, Mauro Conti, William J. Buchanan
2025 J jnl
IEEE Trans. Serv. Comput.
Gulshan Kumar, Rahul Saha, Mauro Conti, William J. Buchanan
2025 J jnl
CoRR
George Tsoukalas, Rahul Saha, Amitayush Thakur, Sabrina Reguyal, Swarat Chaudhuri
2025 C conf
SECRYPT
Belkacem Imine, Rahul Saha, Mauro Conti
2025 J jnl
ACM Trans. Intell. Syst. Technol.
Tannishtha Devgun, Rahul Saha, Gulshan Kumar, Mauro Conti
2025 J jnl
Clust. Comput.
Rahul Saha, Gulshan Kumar, Mauro Conti, Tai-Hoon Kim, In Seop Na, Vaibhav Markandey
2025 J jnl
IEEE Trans. Intell. Transp. Syst.
Gulshan Kumar, Rahul Saha, Mauro Conti, Joel J. P. C. Rodrigues
2025 J jnl
Inf. Process. Manag.
Gulshan Kumar, Rahul Saha, Mauro Conti, Tai-Hoon Kim
2024 J jnl
IEEE Internet Things J.
Rahul Saha, Gulshan Kumar, Mauro Conti, Tannishtha Devgun, Joel J. P. C. Rodrigues
2024 J jnl
IEEE Trans. Dependable Secur. Comput.
Rahul Saha, Gulshan Kumar, G. Geetha, Mauro Conti, William J. Buchanan
2024 J jnl
Internet Things
Gulshan Kumar, Rahul Saha, Mauro Conti, Tannishtha Devgun, Reji Thomas
2024 J jnl
Clust. Comput.
PLS Jayalaxmi, Manali Chakraborty, Rahul Saha, Gulshan Kumar, Mauro Conti
2024 J jnl
IEEE Access
Archana Chhabra, Rahul Saha, Gulshan Kumar, Tai-Hoon Kim
2024 J jnl
Comput. Commun.
Amandeep Verma, Rahul Saha, Gulshan Kumar, Mauro Conti
2024 conf
BCCA
Archana Chhabra, Rahul Saha, Mauro Conti
2024 J jnl
IEEE Access
Amandeep Verma, Rahul Saha, Gulshan Kumar, Mauro Conti, Tai-Hoon Kim
2024 J jnl
Clust. Comput.
Archana Chhabra, Rahul Saha, Gulshan Kumar
2024 J jnl
Clust. Comput.
Rekha Goyat, Gulshan Kumar, Rahul Saha, Mauro Conti
2024 J jnl
Clust. Comput.
Rekha Goyat, Gulshan Kumar, Rahul Saha, Mauro Conti, Reji Thomas, Tai-Hoon Kim
2024 J jnl
CoRR
Arindam Majee, Rahul Saha, Snehasish Roy, Srilekha Mandal, Sayan Chatterjee
2024 J jnl
Veh. Commun.
Amandeep Verma, Rahul Saha, Gulshan Kumar, Mauro Conti, Joel J. P. C. Rodrigues
2023 J jnl
IEEE Trans. Serv. Comput.
Rahul Saha, Gulshan Kumar, Tannishtha Devgun, William J. Buchanan, Reji Thomas, Mamoun Alazab, Tai-Hoon Kim, Joel J. P. C. Rodrigues
2023 J jnl
CoRR
Nilay Patel, Rahul Saha, Jeffrey Flanigan
2023 J jnl
IEEE Trans. Serv. Comput.
Gulshan Kumar, Rahul Saha, Mauro Conti, Reji Thomas, Tannishtha Devgun, Joel J. P. C. Rodrigues
2023 J jnl
IEEE Internet Things J.
Rekha Goyat, Gulshan Kumar, Mauro Conti, Tannishtha Devgun, Rahul Saha, Reji Thomas
2023 J jnl
Comput. Commun.
Gulshan Kumar, Rahul Saha, Mauro Conti, Tannishtha Devgun, Rekha Goyat, Joel J. P. C. Rodrigues
2023 conf
AICV
Irfan Ahmad Rather, Gulshan Kumar, Rahul Saha, Tai-Hoon Kim
2023 J jnl
Int. J. Commun. Syst.
Irfan Ahmad Rather, Gulshan Kumar, Rahul Saha
2023 J jnl
CoRR
Sean Welleck, Rahul Saha
2023 J jnl
Comput. Secur.
PLS Jayalaxmi, Rahul Saha, Gulshan Kumar, Mamoun Alazab, Mauro Conti, Xiaochun Cheng
2023 ed.
WCES
Geetha Ganesan, Sudip Roy, Rahul Saha
2022 J jnl
J. Netw. Comput. Appl.
Ashish Kumar, Rahul Saha, Mauro Conti, Gulshan Kumar, William J. Buchanan, Tai-Hoon Kim
2022 J jnl
Multim. Tools Appl.
Amandeep Verma, Rahul Saha, Neeraj Kumar, Gulshan Kumar, Tai-Hoon Kim
2022 J jnl
J. Syst. Archit.
Arshdeep Singh, Gulshan Kumar, Rahul Saha, Mauro Conti, Mamoun Alazab, Reji Thomas
2022 J jnl
J. Netw. Comput. Appl.
Mauro Conti, Gulshan Kumar, Pranav Nerurkar, Rahul Saha, Luigi Vigneri
2022 conf
ACM
Irfan Ahmad Rather, Gulshan Kumar, Rahul Saha
2022 J jnl
IEEE Internet Things J.
Rekha Goyat, Gulshan Kumar, Mamoun Alazab, Mauro Conti, Mritunjay Kumar Rai, Reji Thomas, Rahul Saha, Tai-Hoon Kim
2022 J jnl
IEEE Trans. Ind. Informatics
Rahul Saha, Gulshan Kumar, Mauro Conti, Tannishtha Devgun, Tai-Hoon Kim, Mamoun Alazab, Reji Thomas
2022 J jnl
Comput. Electr. Eng.
PLS Jayalaxmi, Gulshan Kumar, Rahul Saha, Mauro Conti, Tai-Hoon Kim, Reji Thomas
2022 J jnl
IEEE Internet Things J.
Rahul Saha, Gulshan Kumar, Neeraj Kumar, Tai-Hoon Kim, Tannishtha Devgun, Reji Thomas, Ahmed Barnawi
2022 J jnl
IEEE Access
PLS Jayalaxmi, Rahul Saha, Gulshan Kumar, Mauro Conti, Tai-Hoon Kim
2022 J jnl
Comput. Electr. Eng.
PLS Jayalaxmi, Rahul Saha, Gulshan Kumar, Tai-Hoon Kim
2022 conf
BCCA
Arshdeep Singh, Rahul Saha, Mauro Conti, Gulshan Kumar
2022 conf
WAI
PLS Jayalaxmi, Rahul Saha, Lalit Garg, Gulshan Kumar
2022 conf
M&N
Alessandro Brighente, Mauro Conti, Gulshan Kumar, Reza Ghanbari, Rahul Saha
2021 J jnl
IEEE Access
PLS Jayalaxmi, Rahul Saha, Gulshan Kumar, Neeraj Kumar, Tai-Hoon Kim
2021 J jnl
Future Gener. Comput. Syst.
Rekha Goyat, Gulshan Kumar, Mamoun Alazab, Rahul Saha, Reji Thomas, Mritunjay Kumar Rai
2021 J jnl
Int. J. Inf. Comput. Secur.
Rahul Saha, Gulshan Kumar, Mritunjay Kumar Rai, Hye-Jin Kim
2021 J jnl
Future Gener. Comput. Syst.
Gulshan Kumar, Rahul Saha, Chhagan Lal, Mauro Conti
2021 conf
Blockchain
Alessandro Brighente, Mauro Conti, Gulshan Kumar, Reza Ghanbari, Rahul Saha
2021 J jnl
IEEE Access
Tai-Hoon Kim, Gulshan Kumar, Rahul Saha, William J. Buchanan, Tannishtha Devgun, Reji Thomas
2021 J jnl
IEEE Trans. Veh. Technol.
Rahul Saha, Gulshan Kumar, G. Geetha, Tai-Hoon Kim, Mamoun Alazab, Reji Thomas, Mritunjay Kumar Rai, Joel J. P. C. Rodrigues
2021 conf
BCCA
Rahul Saha, Gulshan Kumar, Alessandro Brighente, Mauro Conti
2020 J jnl
IEEE Syst. J.
Gulshan Kumar, Rahul Saha, Mritunjay Kumar Rai, Reji Thomas, Tai-Hoon Kim
2020 J jnl
J. Inf. Secur. Appl.
Ashish Kumar, Rahul Saha, Mamoun Alazab, Gulshan Kumar
2020 J jnl
IEEE Internet Things J.
Gulshan Kumar, Rahul Saha, Mritunjay Kumar Rai, Reji Thomas, G. Geetha, Tai-Hoon Kim, Joel J. P. C. Rodrigues
2020 J jnl
IEEE Access
Tai-Hoon Kim, Gulshan Kumar, Rahul Saha, Mritunjay Kumar Rai, William J. Buchanan, Reji Thomas, Mamoun Alazab
2020 J jnl
IEEE Trans. Veh. Technol.
Gulshan Kumar, Rahul Saha, Mritunjay Kumar Rai, William J. Buchanan, Reji Thomas, G. Geetha, Tai-Hoon Kim, Joel J. P. C. Rodrigues
2020 J jnl
IEEE Access
Tai-Hoon Kim, Gulshan Kumar, Rahul Saha, Mamoun Alazab, William J. Buchanan, Mritunjay Kumar Rai, G. Geetha, Reji Thomas
2020 J jnl
CoRR
Gulshan Kumar, Rahul Saha, William J. Buchanan, G. Geetha, Reji Thomas, Tai-Hoon Kim, Mamoun Alazab
2019 J jnl
IEEE Access
Tai-Hoon Kim, Rekha Goyat, Mritunjay Kumar Rai, Gulshan Kumar, William J. Buchanan, Rahul Saha, Reji Thomas
2019 J jnl
Sensors
Rekha Goyat, Mritunjay Kumar Rai, Gulshan Kumar, Rahul Saha, Tai-Hoon Kim
2019 J jnl
Sensors
Gulshan Kumar, Rahul Saha, Mritunjay Kumar Rai, Reji Thomas, Tai-Hoon Kim, Se-Jung Lim, Jai Sukh Paul Singh
2019 J jnl
IEEE Access
Rahul Saha, G. Geetha, Gulshan Kumar, Tai-Hoon Kim, William J. Buchanan
2019 J jnl
IEEE Access
Rahul Saha, Gulshan Kumar, Mritunjay Kumar Rai, Reji Thomas, Se-Jung Lim
2019 J jnl
IEEE Internet Things J.
Gulshan Kumar, Rahul Saha, Mritunjay Kumar Rai, Reji Thomas, Tai-Hoon Kim
2018 J jnl
Int. J. Distributed Sens. Networks
Gulshan Kumar, Mritunjay Kumar Rai, Rahul Saha, Hye-Jin Kim
2018 J jnl
IEEE Access
Gulshan Kumar, Rahul Saha, Mritunjay Kumar Rai, Tai-Hoon Kim
2018 J jnl
Int. J. Inf. Secur. Priv.
Gulshan Kumar, Rahul Saha, Mandeep Singh, Mritunjay Kumar Rai
2018 J jnl
Secur. Commun. Networks
Rahul Saha, G. Geetha, Gulshan Kumar, Tai-Hoon Kim
2017 J jnl
Mob. Inf. Syst.
Gulshan Kumar, Mritunjay Kumar Rai, Hye-Jin Kim, Rahul Saha
2017 J jnl
J. Netw. Comput. Appl.
Gulshan Kumar, Mritunjay Kumar Rai, Rahul Saha
2015 J jnl
Int. J. Cyber Behav. Psychol. Learn.
Rahul Saha, G. Geetha, Gulshan Kumar
2011 conf
FGIT-SecTech
Rahul Saha, G. Geetha, Gang-soo Lee
2011 J jnl
CoRR
Rahul Saha, G. Geetha
tests/integration/test_pe_extractor.py
← Index tests/integration/test_pe_extractor.py python
"""
Integration tests for the PEExtractor base class.
"""
import pytest
from unittest.mock import Mock, patch, MagicMock

pytestmark = [pytest.mark.integration, pytest.mark.pe]


class TestPEExtractorInitialization:
    """Tests for PEExtractor initialization."""

    def test_pe_extractor_with_valid_pe(self, pe_binary_path, mock_logger):
        """Test PEExtractor initialization with valid PE file."""
        from redb.extractors.pe_extractors.pe_features import PEFeaturesExtractor

        with patch('redb.settings.ELASTIC_BINARIES_COLLECTION', 'test'):
            extractor = PEFeaturesExtractor(pe_binary_path, mock_logger)

            assert extractor.pe is not None
            assert extractor.filepath == pe_binary_path

    def test_pe_extractor_with_provided_pe_object(self, pe_binary_path, mock_logger, pe_object):
        """Test PEExtractor initialization with pre-existing PE object."""
        from redb.extractors.pe_extractors.pe_features import PEFeaturesExtractor

        with patch('redb.settings.ELASTIC_BINARIES_COLLECTION', 'test'):
            extractor = PEFeaturesExtractor(pe_binary_path, mock_logger, pe=pe_object)

            # Should use the provided PE object, not create a new one
            assert extractor.pe is pe_object

    def test_pe_extractor_with_invalid_file(self, elf_binary_path, mock_logger):
        """Test PEExtractor initialization with non-PE file."""
        from redb.extractors.pe_extractors.pe_features import PEFeaturesExtractor

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

            # Should return None for pe when file is not a valid PE
            assert extractor.pe is None
            # Logger should have recorded an error
            assert mock_logger.error.called


class TestPEExtractorMethods:
    """Tests for PEExtractor helper methods."""

    def test_check_dotnet_true(self, pe_binary_path, mock_logger):
        """Test _check_dotnet returns True for .NET PE."""
        from redb.extractors.pe_extractors.pe_features import PEFeaturesExtractor

        with patch('redb.settings.ELASTIC_BINARIES_COLLECTION', 'test'):
            extractor = PEFeaturesExtractor(pe_binary_path, mock_logger)

            # The test PE file is a .NET binary
            if extractor.pe is not None:
                result = extractor._check_dotnet()
                # d8637bdbcfc9112fcb1f0167b398e771 is a .NET binary
                assert result is True

    def test_check_dotnet_false(self, elf_binary_path, mock_logger):
        """Test _check_dotnet returns False for non-PE file."""
        from redb.extractors.pe_extractors.pe_features import PEFeaturesExtractor

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

            # Should return False when PE is None
            result = extractor._check_dotnet()
            assert result is False

    def test_is_signed_false(self, pe_binary_path, mock_logger):
        """Test _is_signed method."""
        from redb.extractors.pe_extractors.pe_features import PEFeaturesExtractor

        with patch('redb.settings.ELASTIC_BINARIES_COLLECTION', 'test'):
            extractor = PEFeaturesExtractor(pe_binary_path, mock_logger)

            if extractor.pe is not None:
                result = extractor._is_signed()
                # Result depends on the actual binary
                assert isinstance(result, bool)

    def test_has_overlay(self, pe_binary_path, mock_logger):
        """Test _has_overlay method."""
        from redb.extractors.pe_extractors.pe_features import PEFeaturesExtractor

        with patch('redb.settings.ELASTIC_BINARIES_COLLECTION', 'test'):
            extractor = PEFeaturesExtractor(pe_binary_path, mock_logger)

            if extractor.pe is not None:
                result = extractor._has_overlay()
                assert isinstance(result, bool)


class TestGeneratePEFileObject:
    """Tests for _generate_pefile_object method."""

    def test_generate_pefile_object_valid(self, pe_binary_path, mock_logger):
        """Test _generate_pefile_object with valid PE file."""
        from redb.extractors.pe_extractors.pe_features import PEFeaturesExtractor

        with patch('redb.settings.ELASTIC_BINARIES_COLLECTION', 'test'):
            extractor = PEFeaturesExtractor(pe_binary_path, mock_logger)

            # The PE object should be created successfully
            assert extractor.pe is not None

    def test_generate_pefile_object_invalid(self, temp_text_file, mock_logger):
        """Test _generate_pefile_object with invalid file."""
        from redb.extractors.pe_extractors.pe_features import PEFeaturesExtractor

        with patch('redb.settings.ELASTIC_BINARIES_COLLECTION', 'test'):
            extractor = PEFeaturesExtractor(temp_text_file, mock_logger)

            # Should return None for invalid PE
            assert extractor.pe is None


class TestGenerateDotNetFileObject:
    """Tests for _generate_dotnetfile_object method."""

    def test_generate_dotnetfile_object_valid(self, pe_binary_path, mock_logger):
        """Test _generate_dotnetfile_object with .NET PE file."""
        from redb.extractors.pe_extractors.pe_dotnet import PEDotNetExtractor

        with patch('redb.settings.ELASTIC_BINARIES_COLLECTION', 'test'):
            extractor = PEDotNetExtractor(pe_binary_path, mock_logger)

            if extractor.pe is not None and extractor._check_dotnet():
                dotnet, error = extractor._generate_dotnetfile_object()
                # Should create dotnet object for .NET PE
                assert dotnet is not None
                assert error is None

    def test_generate_dotnetfile_object_invalid(self, elf_binary_path, mock_logger):
        """Test _generate_dotnetfile_object with non-.NET file."""
        from redb.extractors.pe_extractors.pe_dotnet import PEDotNetExtractor

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

            dotnet, error = extractor._generate_dotnetfile_object()
            # Should return error for non-.NET file
            assert dotnet is None
            assert error is not None


class TestPEExtractorTag:
    """Tests for tag method in PE extractors."""

    def test_pe_features_tag(self, pe_binary_path, mock_logger):
        """Test that PEFeaturesExtractor returns correct tag."""
        from redb.extractors.pe_extractors.pe_features import PEFeaturesExtractor
        from redb.extractors.enum import Tag

        with patch('redb.settings.ELASTIC_BINARIES_COLLECTION', 'test'):
            extractor = PEFeaturesExtractor(pe_binary_path, mock_logger)
            assert extractor.tag() == Tag.PE_FEATURES.value

    def test_pe_import_tag(self, pe_binary_path, mock_logger):
        """Test that PEImportExtractor returns correct tag."""
        from redb.extractors.pe_extractors.pe_imports import PEImportExtractor
        from redb.extractors.enum import Tag

        with patch('redb.settings.ELASTIC_BINARIES_COLLECTION', 'test'):
            extractor = PEImportExtractor(pe_binary_path, mock_logger)
            assert extractor.tag() == Tag.PE_IMPORT.value

    def test_pe_section_tag(self, pe_binary_path, mock_logger):
        """Test that PESectionExtractor returns correct tag."""
        from redb.extractors.pe_extractors.pe_sections import PESectionExtractor
        from redb.extractors.enum import Tag

        with patch('redb.settings.ELASTIC_BINARIES_COLLECTION', 'test'):
            extractor = PESectionExtractor(pe_binary_path, mock_logger)
            assert extractor.tag() == Tag.PE_SECTION.value


class TestPEExtractorClickHouseTable:
    """Tests for get_clickhouse_table method in PE extractors."""

    def test_pe_features_clickhouse_table(self, pe_binary_path, mock_logger):
        """Test that PEFeaturesExtractor returns correct ClickHouse table name."""
        from redb.extractors.pe_extractors.pe_features import PEFeaturesExtractor

        with patch('redb.settings.ELASTIC_BINARIES_COLLECTION', 'test'):
            extractor = PEFeaturesExtractor(pe_binary_path, mock_logger)
            assert extractor.get_clickhouse_table() == "redb_pe_features"

    def test_pe_import_clickhouse_table(self, pe_binary_path, mock_logger):
        """Test that PEImportExtractor returns correct ClickHouse table name."""
        from redb.extractors.pe_extractors.pe_imports import PEImportExtractor

        with patch('redb.settings.ELASTIC_BINARIES_COLLECTION', 'test'):
            extractor = PEImportExtractor(pe_binary_path, mock_logger)
            assert extractor.get_clickhouse_table() == "redb_pe_imports"

    def test_pe_section_clickhouse_table(self, pe_binary_path, mock_logger):
        """Test that PESectionExtractor returns correct ClickHouse table name."""
        from redb.extractors.pe_extractors.pe_sections import PESectionExtractor

        with patch('redb.settings.ELASTIC_BINARIES_COLLECTION', 'test'):
            extractor = PESectionExtractor(pe_binary_path, mock_logger)
            assert extractor.get_clickhouse_table() == "redb_pe_sections"


class TestPEExtractorPrepareExportData:
    """Tests for prepare_export_data method in PE extractors."""

    def test_pe_features_prepare_export_elasticsearch(self, pe_binary_path, mock_logger):
        """Test prepare_export_data for Elasticsearch."""
        from redb.extractors.pe_extractors.pe_features import PEFeaturesExtractor

        with patch('redb.settings.ELASTIC_BINARIES_COLLECTION', 'test'):
            extractor = PEFeaturesExtractor(pe_binary_path, mock_logger)

            if extractor.pe is not None:
                # First extract
                extractor.extract()
                result = extractor.prepare_export_data("ElasticsearchExporter")
                # Should return the pe_features dataclass
                assert result is extractor.pe_features

    def test_pe_features_prepare_export_clickhouse(self, pe_binary_path, mock_logger):
        """Test prepare_export_data for ClickHouse."""
        from redb.extractors.pe_extractors.pe_features import PEFeaturesExtractor

        with patch('redb.settings.ELASTIC_BINARIES_COLLECTION', 'test'):
            extractor = PEFeaturesExtractor(pe_binary_path, mock_logger)

            if extractor.pe is not None:
                # First extract
                extractor.extract()
                result = extractor.prepare_export_data("ClickHouseExporter")

                # Should return tuple of (data, column_names, column_type_names)
                assert isinstance(result, tuple)
                assert len(result) == 3
                data, column_names, column_type_names = result
                assert isinstance(data, list)
                assert isinstance(column_names, list)
                assert isinstance(column_type_names, list)
                # Column names and types should match in length
                assert len(column_names) == len(column_type_names)