James Brown

47 papers B 7Misc 3Journal 18Unranked 17
YearRankTypeTitle / Venue / Authors
2026 J jnl
Commun. ACM
Robert Sparrow, James Brown
2026 J jnl
CoRR
Tao Wu, Qing Xu, Xiangjian He, Oakleigh Weekes, James Brown, Wenting Duan
2025 J jnl
CoRR
Villanelle O'Reilly, Jonathan Cox, Georgios Leontidis, Marc Hanheide, Petra Bosilj, James Brown
2025 J jnl
CoRR
Mahmoud Abdulsalam, Usman A. Zahidi, Bradley Hurst, Simon Pearson, Grzegorz Cielniak, James Brown
2024 Misc conf
QCE
Tarini S. Hardikar, Kenneth Heitritter, James Brown, Ruhee D'Cunha, Abhishek Mitra, Shaun Weatherly, Yuan Liu, Matthew Otten, Troy A. Van Voorhis, Laura Gagliardi, Kanav Setia
2024 conf
ECCV Workshops (3)
Mahmoud Abdulsalam, Usman A. Zahidi, Bradley Hurst, Simon Pearson, Grzegorz Cielniak, James Brown
2023 J jnl
IEEE Access
James Brown, Kean Hong Tok, Rui Gao, Zhigang Ji, Weidong Zhang, John S. Marsland, Thomas Chiarella, Jacopo Franco, Ben Kaczer, Dimitri Linten, Jianfu Zhang
2023 conf
ASICON
Kean Hong Tok, Jian Fu Zhang, James Brown, Zhigang Ji, Weidong Zhang
2022 J jnl
CoRR
Olivier Jaubert, Javier Montalt-Tordera, James Brown, Daniel Knight, Simon R. Arridge, Jennifer Anne Steeden, Vivek Muthurangu
2021
James Brown
2018 conf
iThings/GreenCom/CPSCom/SmartData
Konstantinos Chalkias, James Brown, Mike Hearn, Tommy Lillehagen, Igor Nitto, Thomas Schroeter
2018 J jnl
IACR Cryptol. ePrint Arch.
Konstantinos Chalkias, James Brown, Mike Hearn, Tommy Lillehagen, Igor Nitto, Thomas Schroeter
2017 J jnl
EURASIP J. Inf. Secur.
James Brown, Mohd Anwar, Gerry V. Dozier
2016 B conf
ICCCN
Siobahn C. Day, James Brown, Zachery Thomas, India Gregory, Lowell Bass, Gerry V. Dozier
2016 B conf
ICCCN
James Brown, Mohd Anwar, Gerry V. Dozier
2016 conf
IEEE Symposium on Security and Privacy Workshops
James Brown, Mohd Anwar, Gerry V. Dozier
2016 Misc conf
IRI
James Brown, Mohd Anwar, Gerry V. Dozier
2015 Misc conf
CHI PLAY
James Brown, Kathrin Maria Gerling, Patrick Dickinson, Ben Kirman
2015 conf
LCN Workshops
Alex King, James Brown, John Edward Vidler, Utz Roedig
2015 conf
BCS HCI
James Brown
2014 J jnl
ACM Trans. Sens. Networks
Wolf-Bastian Pöttner, Hans Seidel, James Brown, Utz Roedig, Lars C. Wolf
2014 B conf
WiMob
Alex King, James Brown, Utz Roedig
2014 conf
PerCom Workshops
Carlo Alberto Boano, Kay Römer, James Brown, Utz Roedig, Marco Zuniga
2014 conf
LCN Workshops
James Brown, Utz Roedig, Carlo Alberto Boano, Kay Römer
2014 J jnl
SIGCAS Comput. Soc.
Vaibhav Garg, Emily K. Adams, Nathaniel Husted, James Brown
2014 conf
IPSN
Carlo Alberto Boano, Marco Zuniga, James Brown, Utz Roedig, Chamath Keppitiyagama, Kay Römer
2013 J jnl
IEEE Commun. Mag.
Mu Mu, Steven Simpson, Craig Bojko, Matthew Broadbent, James Brown, Andreas Mauthe, Nicholas J. P. Race, David Hutchison
2013 J jnl
ACM Trans. Sens. Networks
Tony O'Donovan, James Brown, Felix Büsching, Alberto Cardoso, José Cecílio, Jose Manuel do Ó, Pedro Furtado, Paulo Gil, Anja Jugel, Wolf-Bastian Pöttner, Utz Roedig, Jorge Sá Silva, Ricardo M. Silva, Cormac J. Sreenan, Vasos Vassiliou, Thiemo Voigt, Lars C. Wolf, Zinon Zinonos
2011 B conf
EWSN
James Brown, Ben McCarthy, Utz Roedig, Thiemo Voigt, Cormac J. Sreenan
2011 B conf
DCOSS
Wolf-Bastian Pöttner, Lars C. Wolf, José Cecílio, Pedro Furtado, Ricardo M. Silva, Jorge Sá Silva, Amâncio Santos, Paulo Gil, Alberto Cardoso, Zinon Zinonos, Jose Manuel do Ó, Ben McCarthy, James Brown, Utz Roedig, Tony O'Donovan, Cormac J. Sreenan, Zhitao He, Thiemo Voigt, Anja Jugel
2010 conf
SpringSim
Virginia P. Sisiopiku, Jugnu Chemmannur, James Brown
2010 conf
DH
James Brown, Howard Hotson, Neil Jefferies
2010 B conf
SECON
Tony O'Donovan, James Brown, Utz Roedig, Cormac J. Sreenan, J. do O, Adam Dunkels, Anja Klein, Jorge Sá Silva, Vasos Vassiliou, Lars C. Wolf
2010 conf
REALWSN
Paul Alcock, James Brown, Utz Roedig
2010 J jnl
BMC Bioinform.
Anil Aswani, Soile V. E. Keränen, James Brown, Charless C. Fowlkes, David W. Knowles, Mark D. Biggin, Peter J. Bickel, Claire J. Tomlin
2010 J jnl
IEEE Trans. Ind. Informatics
Carlo Alberto Boano, James Brown, Nicolas Tsiftes, Utz Roedig, Thiemo Voigt
2010 B conf
DCOSS
Petcharat Suriyachai, James Brown, Utz Roedig
2010 conf
HotEmNets
Utz Roedig, Sarah Rutlidge, James Brown, Andrew Scott
2009 conf
SENSAPPEAL
Carlo Alberto Boano, James Brown, Zhitao He, Utz Roedig, Thiemo Voigt
2008 conf
EuroSSC
Daniel Fitton, Vasughi Sundramoorthy, Gerd Kortuem, James Brown, Christos Efstratiou, Joe Finney, Nigel Davies
2007 J jnl
BMC Syst. Biol.
James Brown
2007 conf
Challenged Networks
James Brown, Joe Finney, Christos Efstratiou, Benjamin Green, Nigel Davies, Mark Lowton, Gerd Kortuem
2007 J jnl
Technol. Anal. Strateg. Manag.
Chris Hendry, Paul Harborne, James Brown
2007 J jnl
Technol. Anal. Strateg. Manag.
Paul Harborne, Chris Hendry, James Brown
2006 conf
EuroSSC
Mark Lowton, James Brown, Joe Finney, Gerd Kortuem
2006 J jnl
Comput. Sci. Eng.
James Brown
1998 ed.
APL
Paolo Di Chio, Antonio Annibali, Robert Bernecky, James Brown, Gitte Christensen
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