Wataru Sasaki

37 papers A* 1A 2Misc 1Journal 9Unranked 24
YearRankTypeTitle / Venue / Authors
2026 conf
ICDCN Companion
Keita Takeda, Wataru Sasaki, Shuhei Kosaka, Keiichi Yasumoto, Tomokazu Matsui, Hirohiko Suwa, Sumio Morioka, Takahiro Inagawa
2026 conf
ICDCN Companion
Shuhei Kosaka, Keiichi Yasumoto, Tomokazu Matsui, Hirohiko Suwa, Wataru Sasaki, Daisuke Wakao, Sumio Morioka, Takahiro Inagawa
2026 conf
ICDCN Companion
Minhyoung An, Wataru Sasaki, Hirohiko Suwa, Keiichi Yasumoto
2025 A* conf
CHI
Tadashi Okoshi, Zexiong Gao, Yi Zhen Tan, Takumi Karasawa, Takeshi Miki, Wataru Sasaki, Rajesh Krishna Balan
2025 J jnl
CoRR
Tadashi Okoshi, Zexiong Gao, Yi Zhen Tan, Takumi Karasawa, Takeshi Miki, Wataru Sasaki, Rajesh Krishna Balan
2025 J jnl
IEEE Trans. Affect. Comput.
Kaito Kojima, Yuna Takamori, Wataru Sasaki, Aki Kimura, Kensuke Ueda, Kazunori Iwata, Kazushi Mimura, Takeaki Shimokawa
2025 conf
UbiComp Companion
Minhyoung An, Wataru Sasaki, Yuto Shimmyo, Keiichi Yasumoto
2024 J jnl
Big Data
Wataru Sasaki, Satoki Hamanaka, Satoko Miyahara, Kota Tsubouchi, Jin Nakazawa, Tadashi Okoshi
2024 A conf
MobiSys
Satoki Hamanaka, Kazunori Sakamoto, Yuki Sasaki, Shinicihiro Mizuno, Yasunori Kawasaki, Wataru Sasaki, Jin Nakazawa, Tadashi Okoshi
2023 conf
IoT
Takumi Karasawa, Satoki Hamanaka, Taiga Kume, Wataru Sasaki, Jin Nakazawa, Tadashi Okoshi
2023 Misc conf
HotMobile
Satoki Hamanaka, Wataru Sasaki, Satoko Miyahara, Kota Tsubouchi, Jin Nakazawa, Tadashi Okoshi
2022 conf
UbiComp/ISWC Adjunct
Zexiong Gao, Satoki Hamanaka, Yuki Inui, Kentaro Goto, Hiroo Bekku, Wataru Sasaki, Tadashi Okoshi, Jin Nakazawa
2022 conf
UbiComp/ISWC Adjunct
Dimitris Spathis, Miguel Bordallo López, Shkurta Gashi, Wataru Sasaki, Shin Katayama
2021 conf
UbiComp/ISWC Adjunct
Satoki Hamanaka, Wataru Sasaki, Tadashi Okoshi, Jin Nakazawa, Kaori Yagasaki, Hiroko Komatsu
2021 conf
AINA (1)
Tomokazu Matsui, Kosei Onishi, Shinya Misaki, Hirohiko Suwa, Manato Fujimoto, Teruhiro Mizumoto, Wataru Sasaki, Aki Kimura, Kiyoyasu Maruyama, Keiichi Yasumoto
2021 J jnl
IEEE Access
Kohei Ohashi, Kosuke Nakanishi, Wataru Sasaki, Yuji Yasui, Shin Ishii
2021 J jnl
Soc. Netw. Anal. Min.
Wataru Sasaki, Yuuki Nishiyama, Tadashi Okoshi, Jin Nakazawa
2021 J jnl
CoRR
Wataru Sasaki, Hiroshi Kawane, Satoko Miyahara, Kota Tsubouchi, Tadashi Okoshi
2021 J jnl
CoRR
Yuuki Nishiyama, Yuui Kakino, Enishi Naka, Yuka Noda, Satsuki Hashiba, Yusuke Yamada, Wataru Sasaki, Tadashi Okoshi, Jin Nakazawa, Masaki Mori, Hisashi Mizutori, Kotomi Shiota, Tomohisa Nagano, Yuko Tokairin, Takaaki Kato
2020 conf
UbiComp/ISWC Adjunct
Tadashi Okoshi, Wataru Sasaki, Jin Nakazawa
2020 conf
UbiComp/ISWC Adjunct
Wataru Sasaki, Ryo Ozawa, Tadashi Okoshi, Jin Nakazawa, Kaori Yagasaki, Hiroko Komatsu
2020 conf
HCI (23)
Yuuki Nishiyama, Denzil Ferreira, Yusaku Eigen, Wataru Sasaki, Tadashi Okoshi, Jin Nakazawa, Anind K. Dey, Kaoru Sezaki
2020 J jnl
CoRR
Tadashi Okoshi, Wataru Sasaki, Hiroshi Kawane, Kota Tsubouchi
2020 conf
IEEE BigData
Kota Tsubouchi, Wataru Sasaki, Tadashi Okoshi, Jin Nakazawa
2020 conf
PerCom Workshops
Wataru Sasaki, Yusaku Eigen, Arturo Medela, Antonis Litke, Vanessa Clemente Núñez, Tadashi Okoshi, Jin Nakazawa
2020 conf
UbiComp/ISWC Adjunct
Yuuki Nishiyama, Denzil Ferreira, Wataru Sasaki, Tadashi Okoshi, Jin Nakazawa, Anind K. Dey, Kaoru Sezaki
2019 conf
UbiComp/ISWC Adjunct
Sopicha Stirapongsasuti, Wataru Sasaki, Keiichi Yasumoto
2019 conf
PerCom Workshops
Wataru Sasaki, Masashi Fujiwara, Manato Fujimoto, Hirohiko Suwa, Yutaka Arakawa, Keiichi Yasumoto
2018 conf
ICPP Workshops
Masashi Fujiwara, Kazuki Moriya, Wataru Sasaki, Manato Fujimoto, Yutaka Arakawa, Keiichi Yasumoto
2018 conf
UbiComp/ISWC Adjunct
Wataru Sasaki, Jin Nakazawa, Tadashi Okoshi
2018 conf
UbiComp/ISWC Adjunct
Yugo Nakamura, Yoshinori Umetsu, Jose Paolo Talusan, Keiichi Yasumoto, Wataru Sasaki, Masashi Takata, Yutaka Arakawa
2017 A conf
MobiSys
Wataru Sasaki, Mikio Obuchi, Kazuki Egashira, Naohiro Isokawa, Yuki Furukawa, Yuuki Nishiyama, Tadashi Okoshi, Jin Nakazawa
2017 J jnl
IEICE Trans. Inf. Syst.
Yasufumi Takama, Wataru Sasaki, Takafumi Okumura, Chi-Chih Yu, Lieu-Hen Chen, Hiroshi Ishikawa
2016 conf
UbiComp Adjunct
Mikio Obuchi, Wataru Sasaki, Tadashi Okoshi, Jin Nakazawa, Hideyuki Tokuda
2016 conf
IPSN
Wataru Sasaki, Yuki Furukawa, Yuuki Nishiyama, Tadashi Okoshi, Jin Nakazawa, Hideyuki Tokuda
2015 conf
WI-IAT (1)
Yasufumi Takama, Wataru Sasaki, Takafumi Okumura, Chi-Chih Yu, Lieu-Hen Chen, Hiroshi Ishikawa
2013 conf
TAAI
Wataru Sasaki, Yasufumi Takama
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