Neminath Hubballi

73 papers A 2B 5C 1Misc 14Journal 29Unranked 22
YearRankTypeTitle / Venue / Authors
2026 Misc ed.
ICISS
Neminath Hubballi, Rakesh M. Verma, Shyamasundar Rudrapatna K.
2026 conf
CCNC
Pankaj Chaudhary, Neminath Hubballi
2026 Misc conf
COMSNETS
Aditi Aralkar, Pankaj Chaudhary, Neminath Hubballi, Manjesh Kumar Hanawal
2025 J jnl
IEEE Access
Nayancy Gupta, Gourinath Banda, Neminath Hubballi, K. V. Srinivas
2025 J jnl
CoRR
Pankaj Chaudhary, Neminath Hubballi, Sameer G. Kulkarni
2025 Misc conf
ICNC
Pankaj Chaudhary, Neminath Hubballi
2025 J jnl
Comput. Networks
Pankaj Chaudhary, Neminath Hubballi
2025 Misc conf
ICNC
Neminath Hubballi, Pratibha Khandait
2024 J jnl
IEEE Trans. Netw. Serv. Manag.
Nisha Kumari Barsha, Neminath Hubballi
2024 conf
ICOIN
Neminath Hubballi, Pankaj Chaudhary
2024 conf
CCNC
Nisha Kumari Barsha, Neminath Hubballi
2024 J jnl
J. High Speed Networks
Pratibha Khandait, Neminath Hubballi
2024 conf
AINA (3)
Neminath Hubballi, Nisha Kumari Barsha
2024 conf
CCNC
Neminath Hubballi, Pankaj Chaudhary, Sameer G. Kulkarni
2024 J jnl
IEEE Trans. Ind. Informatics
Purna Kukadiya, Trapti Jain, Neminath Hubballi
2024 J jnl
J. Supercomput.
Shaurya Sood, Neminath Hubballi
2023 J jnl
IEEE Trans. Netw. Serv. Manag.
Namrata Tiwari, Neminath Hubballi
2023 C conf
ICCE
Neminath Hubballi, Yogendra Singh, Dipin Garg
2023 J jnl
Comput. Networks
Pankaj Chaudhary, Neminath Hubballi, Sameer G. Kulkarni
2022 J jnl
ACM Comput. Surv.
Nikhil Tripathi, Neminath Hubballi
2022 J jnl
Comput. Commun.
Neminath Hubballi, Pratibha Khandait
2022 Misc conf
ICISS
Shaurya Sood, Pritesh Palod, Neminath Hubballi
2022 Misc conf
ICISS
Neminath Hubballi, Kanishk Patel
2022 Misc conf
ICISS
Aniket Sangwan, Sarthak Jain, Neminath Hubballi
2021 J jnl
IET Networks
Pratibha Khandait, Neminath Hubballi, Bodhisatwa Mazumdar
2021 J jnl
Comput. Secur.
Nikhil Tripathi, Neminath Hubballi
2021 conf
ICDCN (Adjunct Volume)
Pratibha Khandait, Namrata Tiwari, Neminath Hubballi
2021 Misc conf
ICISS
Shaurya Sood, Manash Saikia, Neminath Hubballi
2021 J jnl
Integr.
Umar Aalam, Bodhisatwa Mazumdar, Neminath Hubballi
2020 J jnl
IEEE Trans. Netw. Serv. Manag.
Neminath Hubballi, Mayank Swarnkar, Mauro Conti
2020 J jnl
J. Netw. Syst. Manag.
Anuja Tayal, Neha Sharma, Neminath Hubballi, Maitreya Natu
2020 Misc conf
COMSNETS
Pratibha Khandait, Neminath Hubballi, Bodhisatwa Mazumdar
2020 Misc conf
COMSNETS
Amit Kumar Meena, Neminath Hubballi
2020 conf
IEEE ANTS
Amit Kumar Meena, Neminath Hubballi, Yogendra Singh, Vimal Bhatia, Katrin Franke
2020 A conf
AsiaCCS
Neminath Hubballi, Namrata Tiwari, Pratibha Khandait
2020 A conf
AsiaCCS
Pratibha Khandait, Neminath Hubballi, Katrin Franke
2020 J jnl
CoRR
Nikhil Tripathi, Neminath Hubballi
2020 J jnl
J. Netw. Syst. Manag.
Anuja Tayal, Neha Sharma, Neminath Hubballi, Maitreya Natu
2019 conf
INFOCOM Workshops
Neminath Hubballi, Amey Kiran Patel, Amit Kumar Meena, Nikhil Tripathi
2019 conf
ANTS
Vinti Agarwal, Neminath Hubballi, Ambika Shrestha Chitrakar, Katrin Franke
2019 J jnl
Secur. Priv.
Mayank Swarnkar, Neminath Hubballi
2018 conf
ANTS
Mayank Swarnkar, Neminath Hubballi, Nikhil Tripathi, Mauro Conti
2018 Misc conf
COMSNETS
Anuja Tayal, Neminath Hubballi, Maitreya Natu, Vaishali P. Sadaphal
2018 J jnl
IET Networks
Neminath Hubballi, Jonathan Santini
2018 J jnl
J. Comput. Virol. Hacking Tech.
Nikhil Tripathi, Neminath Hubballi
2018 J jnl
Comput. Secur.
Nikhil Tripathi, Neminath Hubballi
2017 J jnl
Comput. Secur.
Neminath Hubballi, Nikhil Tripathi
2017 J jnl
J. Inf. Secur. Appl.
Neminath Hubballi, Nikhil Tripathi
2017 B conf
GLOBECOM
Neminath Hubballi, Mayank Swarnkar
2017 conf
ANTS
Anuja Tayal, Neminath Hubballi, Nikhil Tripathi
2017 conf
ANTS
Nikhil Tripathi, Mayank Swarnkar, Neminath Hubballi
2017 J jnl
IEEE Trans. Inf. Forensics Secur.
Diksha Golait, Neminath Hubballi
2017 conf
ANTS
Himanshu Dogra, Sudhakar Verma, Neminath Hubballi, Mayank Swarnkar
2016 conf
ANTS
Nikhil Tripathi, Neminath Hubballi
2016 B conf
ARES
Neminath Hubballi, Himanshu Dogra
2016 B conf
ARES
Nikhil Tripathi, Neminath Hubballi, Yogendra Singh
2016 Misc conf
COMSNETS
Sainath Batthala, Neminath Hubballi, Maitreya Natu, Vaishali P. Sadaphal
2016 J jnl
Expert Syst. Appl.
Mayank Swarnkar, Neminath Hubballi
2016 B conf
ARES
Sainath Batthala, Mayank Swarnkar, Neminath Hubballi, Maitreya Natu
2015 conf
CAiSE Workshops
Sri Yogesh Dorbala, Kishore R., Neminath Hubballi
2015 conf
IEEE ANTS
Nikhil Tripathi, Neminath Hubballi
2015 conf
NCC
Jayeeta Datta, Neha Kataria, Neminath Hubballi
2015 conf
IEEE ANTS
Mayank Swarnkar, Neminath Hubballi
2014 J jnl
Comput. Commun.
Neminath Hubballi, Vinoth Suryanarayanan
2013 conf
PReMI
Neminath Hubballi, Deepanshu Goyal
2013 J jnl
Secur. Commun. Networks
Neminath Hubballi, Santosh Biswas, Sukumar Nandi
2012 Misc conf
COMSNETS
Neminath Hubballi
2011 conf
CICS
Ferdous A. Barbhuiya, Santosh Biswas, Neminath Hubballi, Sukumar Nandi
2011 J jnl
Secur. Commun. Networks
Neminath Hubballi, Santosh Biswas, Sukumar Nandi
2011 Misc conf
COMSNETS
Neminath Hubballi, Santosh Biswas, Sukumar Nandi
2010 conf
AST/UCMA/ISA/ACN
Neminath Hubballi, S. Roopa, Ritesh Ratti, Ferdous A. Barbhuiya, Santosh Biswas, Arijit Sur, Sukumar Nandi, Vivek Ramachandran
2010 conf
RSCTC
Bidyut Kr. Patra, Neminath Hubballi, Santosh Biswas, Sukumar Nandi
2010 B conf
ARES
Neminath Hubballi, Santosh Biswas, Sukumar Nandi
tests/unit/test_macho_dataclasses.py
← Index tests/unit/test_macho_dataclasses.py python
"""
Unit tests for Mach-O dataclasses.
"""
import pytest
from typing import List, Dict, Optional

pytestmark = [pytest.mark.unit, pytest.mark.dataclass, pytest.mark.macho]


class TestMachODataclass:
    """Tests for MachO dataclass."""

    def test_macho_required_fields(self):
        """Test MachO dataclass with required fields."""
        from redb.models.dataclasses import MachO

        macho = MachO(
            magic=0xFEEDFACF,
            cputype=0x01000007,
            cpusubtype=0x00000003,
            filetype=2,
            ncmds=15,
            sizeofcmds=1024,
            flags=0x00200085,
            architecture=0x01000007,
            architectures=[0x01000007],
            magic_str="MH_MAGIC_64",
            cputype_str="CPU_TYPE_X86_64",
            cpusubtype_str="CPU_SUBTYPE_X86_64_ALL",
            filetype_str="MH_EXECUTE",
            flags_str=["MH_NOUNDEFS", "MH_DYLDLINK", "MH_TWOLEVEL", "MH_PIE"],
            architecture_str="x86_64",
            architectures_str=["x86_64"],
            is_64bit=True,
            is_signed=True
        )

        assert macho.magic == 0xFEEDFACF
        assert macho.cputype == 0x01000007
        assert macho.is_64bit is True
        assert macho.is_signed is True
        assert macho.magic_str == "MH_MAGIC_64"
        assert macho.filetype_str == "MH_EXECUTE"

    def test_macho_optional_fields_defaults(self):
        """Test MachO dataclass optional fields default to correct values."""
        from redb.models.dataclasses import MachO

        macho = MachO(
            magic=0xFEEDFACF,
            cputype=0x01000007,
            cpusubtype=0x00000003,
            filetype=2,
            ncmds=15,
            sizeofcmds=1024,
            flags=0x00200085,
            architecture=0x01000007,
            architectures=[0x01000007],
            magic_str="MH_MAGIC_64",
            cputype_str="CPU_TYPE_X86_64",
            cpusubtype_str="CPU_SUBTYPE_X86_64_ALL",
            filetype_str="MH_EXECUTE",
            flags_str=["MH_NOUNDEFS"],
            architecture_str="x86_64",
            architectures_str=["x86_64"],
            is_64bit=True,
            is_signed=False
        )

        assert macho.number_of_load_commands == 0
        assert macho.load_commands_set is None
        assert macho.number_of_segments == 0
        assert macho.number_of_dylibs == 0
        assert macho.number_of_imports == 0
        assert macho.number_of_exports == 0
        assert macho.entry_point is None
        assert macho.uuid is None
        assert macho.version_info is None
        assert macho.version_info_str is None

    def test_macho_with_all_fields(self):
        """Test MachO dataclass with all fields populated."""
        from redb.models.dataclasses import MachO

        macho = MachO(
            magic=0xFEEDFACF,
            cputype=0x01000007,
            cpusubtype=0x00000003,
            filetype=2,
            ncmds=15,
            sizeofcmds=1024,
            flags=0x00200085,
            architecture=0x01000007,
            architectures=[0x01000007],
            magic_str="MH_MAGIC_64",
            cputype_str="CPU_TYPE_X86_64",
            cpusubtype_str="CPU_SUBTYPE_X86_64_ALL",
            filetype_str="MH_EXECUTE",
            flags_str=["MH_PIE"],
            architecture_str="x86_64",
            architectures_str=["x86_64"],
            is_64bit=True,
            is_signed=True,
            number_of_load_commands=15,
            load_commands_set=["LC_SEGMENT_64", "LC_DYLD_INFO_ONLY"],
            number_of_segments=4,
            number_of_dylibs=5,
            number_of_imports=100,
            number_of_exports=10,
            entry_point=0x100001234,
            uuid="12345678-1234-1234-1234-123456789012",
            version_info={"min_os": "10.15"},
            version_info_str={"min_os": "macOS 10.15"}
        )

        assert macho.number_of_load_commands == 15
        assert macho.uuid == "12345678-1234-1234-1234-123456789012"
        assert macho.entry_point == 0x100001234


class TestMachOSegmentDataclass:
    """Tests for MachOSegment dataclass."""

    def test_segment_creation(self):
        """Test MachOSegment dataclass creation."""
        from redb.models.dataclasses import MachOSegment

        segment = MachOSegment(
            segment_name="__TEXT",
            segment_vaddr=0x100000000,
            segment_vsize=0x1000,
            segment_offset=0,
            segment_size=0x1000,
            segment_max_vm_protection=7,
            segment_initial_vm_protection=5,
            segment_nsects=4,
            segment_flags=0,
            segment_entropy=6.5,
            segment_sha256="abc123def456789012345678901234567890123456789012345678901234"
        )

        assert segment.segment_name == "__TEXT"
        assert segment.segment_vaddr == 0x100000000
        assert segment.segment_entropy == 6.5


class TestMachOImportDataclass:
    """Tests for MachOImport dataclass."""

    def test_import_creation(self):
        """Test MachOImport dataclass creation."""
        from redb.models.dataclasses import MachOImport

        import_info = MachOImport(
            macho_imports_total=50,
            macho_import_libraryName=["libSystem.B.dylib", "CoreFoundation"],
            macho_import_functions=["_printf", "_malloc", "_free"]
        )

        assert import_info.macho_imports_total == 50
        assert len(import_info.macho_import_libraryName) == 2
        assert "_printf" in import_info.macho_import_functions

    def test_import_optional_fields(self):
        """Test MachOImport with optional fields as None."""
        from redb.models.dataclasses import MachOImport

        import_info = MachOImport(macho_imports_total=0)

        assert import_info.macho_imports_total == 0
        assert import_info.macho_import_libraryName is None
        assert import_info.macho_import_functions is None


class TestMachOExportDataclass:
    """Tests for MachOExport dataclass."""

    def test_export_creation(self):
        """Test MachOExport dataclass creation."""
        from redb.models.dataclasses import MachOExport

        export_info = MachOExport(
            macho_exports_total=10,
            macho_export_symbols=["_main", "_helper_func"]
        )

        assert export_info.macho_exports_total == 10
        assert "_main" in export_info.macho_export_symbols


class TestMachODylibDataclass:
    """Tests for MachODylib dataclass."""

    def test_dylib_creation(self):
        """Test MachODylib dataclass creation."""
        from redb.models.dataclasses import MachODylib

        dylib = MachODylib(
            dylib_name="/usr/lib/libSystem.B.dylib",
            dylib_timestamp=2,
            dylib_current_version=0x04E10200,
            dylib_compat_version=0x00010000
        )

        assert dylib.dylib_name == "/usr/lib/libSystem.B.dylib"
        assert dylib.dylib_timestamp == 2


class TestMachOLoadCommandDataclass:
    """Tests for MachOLoadCommand dataclass."""

    def test_load_command_creation(self):
        """Test MachOLoadCommand dataclass creation."""
        from redb.models.dataclasses import MachOLoadCommand

        lc = MachOLoadCommand(
            load_command=0x19,
            load_command_str="LC_SEGMENT_64",
            load_command_size=72
        )

        assert lc.load_command == 0x19
        assert lc.load_command_str == "LC_SEGMENT_64"
        assert lc.load_command_size == 72


class TestMachOUniversalDataclass:
    """Tests for MachOUniversal dataclass."""

    def test_universal_fat_binary(self):
        """Test MachOUniversal for FAT binary."""
        from redb.models.dataclasses import MachOUniversal

        universal = MachOUniversal(
            is_fat=True,
            architecture_count=2,
            architectures=["x86_64", "arm64"],
            architecture_info=[
                {"arch": "x86_64", "offset": 0x1000},
                {"arch": "arm64", "offset": 0x10000}
            ],
            fat_hash="abc123def456789012345678901234567890123456789012345678901234",
            fat_md5="abc123def456789012345678901234",
            fat_sha1="abc123def456789012345678901234567890"
        )

        assert universal.is_fat is True
        assert universal.architecture_count == 2
        assert "x86_64" in universal.architectures
        assert "arm64" in universal.architectures

    def test_universal_single_arch(self):
        """Test MachOUniversal for single-architecture binary."""
        from redb.models.dataclasses import MachOUniversal

        universal = MachOUniversal(
            is_fat=False,
            architecture_count=1,
            architectures=["arm64"],
            architecture_info=[{"arch": "arm64", "offset": 0}]
        )

        assert universal.is_fat is False
        assert universal.architecture_count == 1
        assert universal.fat_hash is None


class TestMachOCertificateDataclass:
    """Tests for MachOCertificate dataclass."""

    def test_certificate_creation(self):
        """Test MachOCertificate dataclass creation."""
        from redb.models.dataclasses import MachOCertificate

        cert = MachOCertificate(
            subject="CN=Apple Development",
            issuer="CN=Apple Worldwide Developer Relations",
            serial_number="123456789",
            not_before="2023-01-01T00:00:00Z",
            not_after="2024-01-01T00:00:00Z",
            thumbprint="abc123def456789012345678901234567890",
            certificate_type="leaf",
            order=0,
            algorithm="sha256WithRSAEncryption",
            common_name="Apple Development",
            organizational_unit="Development",
            organization="Apple Inc."
        )

        assert cert.subject == "CN=Apple Development"
        assert cert.certificate_type == "leaf"
        assert cert.order == 0


class TestMachOCodeDirectoryDataclass:
    """Tests for MachOCodeDirectory dataclass."""

    def test_code_directory_creation(self):
        """Test MachOCodeDirectory dataclass creation."""
        from redb.models.dataclasses import MachOCodeDirectory

        cd = MachOCodeDirectory(
            identifier="com.example.app",
            team_id="ABC123DEF",
            flags=0x10000,
            cd_hash="abc123def456789012345678901234567890123456789012345678901234"
        )

        assert cd.identifier == "com.example.app"
        assert cd.team_id == "ABC123DEF"
        assert cd.flags == 0x10000


class TestMachOCodeSigningInfoDataclass:
    """Tests for MachOCodeSigningInfo dataclass."""

    def test_code_signing_info_unsigned(self):
        """Test MachOCodeSigningInfo for unsigned binary."""
        from redb.models.dataclasses import MachOCodeSigningInfo

        info = MachOCodeSigningInfo(
            _id="abc123def456789012345678901234567890123456789012345678901234",
            signing_type="unsigned",
            has_signature=False,
            number_of_certificates=0
        )

        assert info.signing_type == "unsigned"
        assert info.has_signature is False
        assert info.number_of_certificates == 0

    def test_code_signing_info_signed(self):
        """Test MachOCodeSigningInfo for signed binary."""
        from redb.models.dataclasses import MachOCodeSigningInfo, MachOCodeDirectory

        cd = MachOCodeDirectory(
            identifier="com.example.app",
            team_id="ABC123DEF"
        )

        info = MachOCodeSigningInfo(
            _id="abc123def456789012345678901234567890123456789012345678901234",
            signing_type="certificate",
            has_signature=True,
            number_of_certificates=3,
            code_directories=[cd],
            entitlements={"com.apple.security.app-sandbox": True},
            has_hardened_runtime=True,
            has_library_validation=True
        )

        assert info.signing_type == "certificate"
        assert info.has_signature is True
        assert info.number_of_certificates == 3
        assert info.has_hardened_runtime is True

    def test_code_signing_info_adhoc(self):
        """Test MachOCodeSigningInfo for ad-hoc signed binary."""
        from redb.models.dataclasses import MachOCodeSigningInfo

        info = MachOCodeSigningInfo(
            _id="abc123def456789012345678901234567890123456789012345678901234",
            signing_type="ad-hoc",
            has_signature=True,
            number_of_certificates=0,
            arch_identifier="x86_64"
        )

        assert info.signing_type == "ad-hoc"
        assert info.number_of_certificates == 0
        assert info.arch_identifier == "x86_64"


class TestMachOEntitlementDataclass:
    """Tests for MachOEntitlement dataclass."""

    def test_entitlement_boolean(self):
        """Test MachOEntitlement with boolean value."""
        from redb.models.dataclasses import MachOEntitlement

        ent = MachOEntitlement(
            key="com.apple.security.app-sandbox",
            value_type="boolean",
            value_bool=True
        )

        assert ent.key == "com.apple.security.app-sandbox"
        assert ent.value_type == "boolean"
        assert ent.value_bool is True

    def test_entitlement_string(self):
        """Test MachOEntitlement with string value."""
        from redb.models.dataclasses import MachOEntitlement

        ent = MachOEntitlement(
            key="com.apple.developer.team-identifier",
            value_type="string",
            value_string="ABC123DEF"
        )

        assert ent.key == "com.apple.developer.team-identifier"
        assert ent.value_type == "string"
        assert ent.value_string == "ABC123DEF"

    def test_entitlement_array(self):
        """Test MachOEntitlement with array value."""
        from redb.models.dataclasses import MachOEntitlement

        ent = MachOEntitlement(
            key="com.apple.security.application-groups",
            value_type="array",
            value_array=["group.com.example.app", "group.com.example.shared"]
        )

        assert ent.key == "com.apple.security.application-groups"
        assert ent.value_type == "array"
        assert len(ent.value_array) == 2