Rached Tourki

81 papers A 1B 3C 6Misc 2Journal 37Unranked 32
YearRankTypeTitle / Venue / Authors
2019 J jnl
Microprocess. Microsystems
Med fehmi Chatmen, Adel Baganne, Rached Tourki
2018 conf
SSD
Afef Kchaou, Wajih El Hadj Youssef, Rached Tourki
2017 C conf
DDECS
Asma Mkhinini, Paolo Maistri, Régis Leveugle, Rached Tourki
2017 J jnl
J. Circuits Syst. Comput.
Fatma Sbiaa, Sonia Kotel, Zeghid Medien, Rached Tourki, Mohsen Machhout, Adel Baganne
2017 C conf
IDEAS
Sonia Kotel, Zeghid Medien, Mohsen Machhout, Rached Tourki
2016 C conf
CIT
Fatma Sbiaa, Sonia Kotel, Zeghid Medien, Rached Tourki, Mohsen Machhout, Adel Baganne
2016 conf
LATS
Afef Kchaou, W. El Hadj Youssef, Rached Tourki, Fraidy Bouesse, Pablo Ramos, Raoul Velazco
2016 conf
IDT
Asma Mkhinini, Paolo Maistri, Régis Leveugle, Rached Tourki, Mohsen Machhout
2016 J jnl
J. Real Time Image Process.
Taoufik Saidani, Mohamed Atri, Lazhar Khriji, Rached Tourki
2016 C conf
CIT
Sonia Kotel, Fatma Sbiaa, Zeghid Medien, Mohsen Machhout, Adel Baganne, Rached Tourki
2016 Misc conf
ATSIP
Nejmeddine Alimi, Younes Lahbib, Mohsen Machhout, Rached Tourki
2016 C conf
AICCSA
Sonia Kotel, Fatma Sbiaa, Zeghid Medien, Mohsen Machhout, Adel Baganne, Rached Tourki
2016 conf
IVSW
Nejmeddine Alimi, Younes Lahbib, Mohsen Machhout, Rached Tourki
2016 conf
IDT
Salaheddine Hamza Sfar, Rached Tourki, Imed E. Bennour
2015 conf
SSD
Fatma Sbiaa, Adel Baganne, Zeghid Medien, Rached Tourki
2015 J jnl
J. Circuits Syst. Comput.
Hassen Mestiri, Younes Lahbib, Mohsen Machhout, Rached Tourki
2015 J jnl
Comput. Math. Appl.
Jihene Malek, Ahmad Taher Azar, Boutheina Nasralli, Mehdi Tekari, Heykel Kamoun, Rached Tourki
2015 J jnl
J. Circuits Syst. Comput.
Noura Benhadjyoussef, Wajih Elhadjyoussef, Mohsen Machhout, Rached Tourki, Kholdoun Torki
2015 J jnl
Neural Comput. Appl.
Jihene Malek, Ahmad Taher Azar, Rached Tourki
2014 conf
ICCST
Noura Ben Hadjy Youssef, Wajih El Hadj Youssef, Mohsen Machhout, Rached Tourki, Kholdoun Torki
2014 J jnl
Int. J. Adv. Media Commun.
Marwa Chouchene, Fatma Ezahra Sayadi, Yahia F. Said, Mohamed Atri, Rached Tourki
2014 conf
ICCST
Noura Ben Hadjy Youssef, Wajih El Hadj Youssef, Mohsen Machhout, Rached Tourki, Kholdoun Torki
2014 conf
GSCIT
Randa Khemiri, Fatma Sayadi, Mohamed Atri, Rached Tourki
2014 Misc conf
ATSIP
Randa Khemiri, Fatma Sayadi, Taoufik Saidani, Marwa Chouchene, Haythem Bahri, Rached Tourki
2013 J jnl
Integr.
Majdi Elhaji, Abdelkrim Zitouni, Samy Meftali, Jean-Luc Dekeyser, Rached Tourki
2013 conf
SSD
Nourddine Abid, Brahim Attia, Abdelrim Zitouni, Rached Tourki
2013 conf
SSD
Fatma Kahri, Belgacem Bouallegue, Mohsen Machhout, Rached Tourki
2013 conf
SSD
Mariem Ben Abdallah, Jihene Malek, Rached Tourki, Julio Esclarín Monreal, Karl Krissian
2013 conf
SSD
Jihene Malek, Rached Tourki
2013 J jnl
Quantum Inf. Process.
Besma Othmani, Mohsen Machhout, Hafedh Belmabrouk, Rached Tourki, Houcine Mejri
2013 conf
SSD
A. Zoghlami, Mehrez Marzougui, Mohamed Atri, Rached Tourki
2013 conf
SSD
Marwa Chouchene, Fatma Ezahra Sayadi, Mohamed Atri, Rached Tourki
2013 J jnl
J. Electronic Imaging
Imen Charfi, Johel Mitéran, Julien Dubois, Mohamed Atri, Rached Tourki
2013 conf
SSD
Mehrez Marzougui, A. Zoghlami, Mohamed Atri, Rached Tourki
2013 conf
SSD
Brahim Attia, Nourddine Abid, Wissem Chouchen, Abdelkrim Zitouni, Rached Tourki
2012 conf
DTIS
Noura Benhadjyoussef, Mohsen Machhout, Wajih El Hadj Youssef, Rached Tourki
2012 conf
DTIS
Mounir Zid, Rached Tourki, Alberto Scandurra, Carlo Pistritto
2012 J jnl
CoRR
Adel Soudani, Thierry Divoux, Rached Tourki
2012 J jnl
Comput. Electr. Eng.
Adel Soudani, Thierry Divoux, Rached Tourki
2012 conf
SITIS
Imen Charfi, Johel Mitéran, Julien Dubois, Mohamed Atri, Rached Tourki
2012 B conf
ACIVS
Wajdi Elhamzi, Julien Dubois, Johel Mitéran, Mohamed Atri, Rached Tourki
2012 conf
ICCIT
Noura Benhadjyoussef, Hassen Mestiri, Mohsen Machhout, Rached Tourki
2012 J jnl
Int. J. Comput. Aided Eng. Technol.
Meriam Kallel, Younes Lahbib, Adel Baganne, Rached Tourki
2012 conf
DTIS
Hassen Mestiri, Mohsen Machhout, Rached Tourki
2012 J jnl
Des. Autom. Embed. Syst.
Majdi Elhaji, Pierre Boulet, Abdelkrim Zitouni, Samy Meftali, Jean-Luc Dekeyser, Rached Tourki
2011 J jnl
Microelectron. J.
Mounir Zid, Alberto Scandurra, Rached Tourki, Carlo Pistritto
2011 conf
DASIP
Majdi Elhaji, Brahim Attia, Abdelkrim Zitouni, Rached Tourki, Samy Meftali, Jean-Luc Dekeyser
2011 J jnl
Comput. Electr. Eng.
Monji Mohamed Zaidi, Ridha Ouni, Rached Tourki
2010 conf
ISSPIT
Majdi Elhaji, Abdelkrim Zitouni, Samy Meftali, Jean-Luc Dekeyser, Rached Tourki
2010 J jnl
Int. J. Comput.
Mohamed Atri, Wajdi Elhamzi, Rached Tourki
2010 J jnl
Trans. Data Priv.
Zeghid Medien, Mohsen Machhout, Belgacem Bouallegue, Lazhar Khriji, Adel Baganne, Rached Tourki
2010 conf
IDT
Brahim Attia, Wissem Chouchene, Abdelkrim Zitouni, Abid Nourdin, Rached Tourki
2010 J jnl
Int. J. Comput. Aided Eng. Technol.
Rafik Ben-Tekaya, Adel Baganne, Kholdoun Torki, Rached Tourki
2009 J jnl
J. Signal Process. Syst.
Jihene Malek, Abderrahim Sebri, Souhir Mabrouk, Kholdoun Torki, Rached Tourki
2009 J jnl
Int. J. Comput. Sci. Appl.
Mohsen Machhout, Guitouni Zied, Zeghid Medien, Rached Tourki
2009 J jnl
Comput. Stand. Interfaces
Sourour Karmani, Ridha Djemal, Rached Tourki
2009 J jnl
CoRR
Salah Hamdi, Adel Soudani, Rached Tourki
2009 J jnl
Tech. Sci. Informatiques
Mounir Zid, Abdelkrim Zitouni, Adel Baganne, Rached Tourki
2008 J jnl
Comput. Electr. Eng.
Abdelkrim Zitouni, Rached Tourki
2007 B conf
ARES
Zeghid Medien, Belgacem Bouallegue, Adel Baganne, Mohsen Machhout, Rached Tourki
2007 conf
ICECS
Rafik Ben-Tekaya, Adel Baganne, Rached Tourki
2007 conf
ICECS
Fatma Sayadi, Mohamed Atri, Rached Tourki
2007 J jnl
Microprocess. Microsystems
Younes Lahbib, Meriam Kallel, Ayoub Dhouib, Maher Hechkel, Antoine Perrin, Rached Tourki
2006 J jnl
J. VLSI Signal Process.
Fatma Sayadi, Emmanuel Casseau, Mohamed Atri, Mehrez Marzougui, Rached Tourki, Eric Martin
2005 J jnl
Comput. Stand. Interfaces
Ridha Djemal, Ayoub Dhouib, Samuel Dellacherie, Rached Tourki
2005 J jnl
Comput. Electr. Eng.
Younes Lahbib, Romain Kamdem, Mohamed-Lyes Benalycherif, Rached Tourki
2005 conf
ICECS
Yassine Ben Salem, Salem Nasri, Rached Tourki
2004 J jnl
Comput. Electr. Eng.
Mehrez Marzougui, Mohamed Abid, Adel Baganne, Rached Tourki
2004 J jnl
Comput. Stand. Interfaces
Hattab Guesmi, Ridha Djemal, Belgacem Bouallegue, Jean-Philippe Diguet, Rached Tourki
2002 J jnl
Fuzzy Sets Syst.
Jihene El Malek, Adel M. Alimi, Rached Tourki
2001 C conf
ISCC
Ridha Djemal, Belgacem Bouallegue, Jean-Philippe Diguet, Rached Tourki
2001 J jnl
Comput. Stand. Interfaces
Ridha Ouni, Adel Soudani, Salem Nasri, Kholdoun Torki, Mohamed Abid, Rached Tourki
2000 conf
EUSIPCO
Abdellatif Ben Rabaa, Rached Tourki
2000 J jnl
Real Time Imaging
Chokri Souani, Mohamed Atri, Mohamed Abid, Kholdoun Torki, Rached Tourki
2000 B conf
ICPR
Jihene El Malek, Rached Tourki, Adel M. Alimi
2000 J jnl
J. Syst. Archit.
Ridha Djemal, Guy Mazaré, Rached Tourki
2000 J jnl
Integr.
Chokri Souani, Mohamed Abid, Kholdoun Torki, Rached Tourki
1999 conf
ICANNGA
Jihene Elmalek, Rached Tourki
1998 conf
ICECS
Abdelkerim Zitouni, Mohamed Abid, Rached Tourki
1998 conf
ICC
Abdellatif Ben Rabaa, Abdelkerim Zitouni, Mohamed Abid, Rached Tourki
1998 A conf
FPGA
Abdellatif Mtibaa, Mohamed Abid, Rached Tourki
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