Skip to content

Index

πŸ€– AI-Generated Content

This documentation was generated with AI assistance and is still being audited. Some, or potentially a lot, of this information may be inaccurate. Learn more.

flavor.psp.format_2025.index

PSPF Index Block Structure - 8192 bytes total.

Classes

PSPFIndex

PSPF Index Block Structure - 8192 bytes total.

Functions
pack
pack() -> bytes

Pack index into binary format.

Source code in flavor/psp/format_2025/index.py
def pack(self) -> bytes:
    """Pack index into binary format."""
    data = struct.pack(
        self.FORMAT,
        self.format_version,
        0,  # Checksum placeholder
        self.package_size,
        self.launcher_size,
        self.metadata_offset,
        self.metadata_size,
        self.slot_table_offset,
        self.slot_table_size,
        self.slot_count,
        self.flags,
        self.public_key,
        self.metadata_checksum,
        self.integrity_signature,
        self.access_mode,
        self.cache_strategy,
        self.reserved_hint1,
        self.reserved_hint2,
        self.page_size,
        self.max_memory,
        self.min_memory,
        self.cpu_features,
        self.gpu_requirements,
        self.numa_hints,
        self.stream_chunk_size,
        self.build_timestamp,
        self.build_machine,
        self.source_hash,
        self.dependency_hash,
        self.license_id,
        self.provenance_uri,
        self.capabilities,
        self.requirements,
        self.extensions,
        self.compatibility,
        self.protocol_version,
        self.future_crypto,
        self.reserved,
    )

    # Calculate checksum with checksum field set to 0
    checksum = zlib.adler32(data) & 0xFFFFFFFF
    self.index_checksum = checksum

    # Repack with the correct checksum
    data = struct.pack(
        self.FORMAT,
        self.format_version,
        checksum,  # Actual checksum
        self.package_size,
        self.launcher_size,
        self.metadata_offset,
        self.metadata_size,
        self.slot_table_offset,
        self.slot_table_size,
        self.slot_count,
        self.flags,
        self.public_key,
        self.metadata_checksum,
        self.integrity_signature,
        self.access_mode,
        self.cache_strategy,
        self.reserved_hint1,
        self.reserved_hint2,
        self.page_size,
        self.max_memory,
        self.min_memory,
        self.cpu_features,
        self.gpu_requirements,
        self.numa_hints,
        self.stream_chunk_size,
        self.build_timestamp,
        self.build_machine,
        self.source_hash,
        self.dependency_hash,
        self.license_id,
        self.provenance_uri,
        self.capabilities,
        self.requirements,
        self.extensions,
        self.compatibility,
        self.protocol_version,
        self.future_crypto,
        self.reserved,
    )

    return data
unpack classmethod
unpack(data: bytes) -> PSPFIndex

Unpack index from binary data.

Source code in flavor/psp/format_2025/index.py
@classmethod
def unpack(cls, data: bytes) -> PSPFIndex:
    """Unpack index from binary data."""
    if len(data) != DEFAULT_HEADER_SIZE:
        raise ValueError(f"Index must be {DEFAULT_HEADER_SIZE} bytes, got {len(data)}")

    # Get the format string from a default instance
    format_str = cls().FORMAT
    unpacked = struct.unpack(format_str, data)

    return cls(
        format_version=unpacked[0],
        index_checksum=unpacked[1],
        package_size=unpacked[2],
        launcher_size=unpacked[3],
        metadata_offset=unpacked[4],
        metadata_size=unpacked[5],
        slot_table_offset=unpacked[6],
        slot_table_size=unpacked[7],
        slot_count=unpacked[8],
        flags=unpacked[9],
        public_key=unpacked[10],
        metadata_checksum=unpacked[11],
        integrity_signature=unpacked[12],
        access_mode=unpacked[13],
        cache_strategy=unpacked[14],
        reserved_hint1=unpacked[15],
        reserved_hint2=unpacked[16],
        page_size=unpacked[17],
        max_memory=unpacked[18],
        min_memory=unpacked[19],
        cpu_features=unpacked[20],
        gpu_requirements=unpacked[21],
        numa_hints=unpacked[22],
        stream_chunk_size=unpacked[23],
        build_timestamp=unpacked[24],
        build_machine=unpacked[25],
        source_hash=unpacked[26],
        dependency_hash=unpacked[27],
        license_id=unpacked[28],
        provenance_uri=unpacked[29],
        capabilities=unpacked[30],
        requirements=unpacked[31],
        extensions=unpacked[32],
        compatibility=unpacked[33],
        protocol_version=unpacked[34],
        future_crypto=unpacked[35],
        reserved=unpacked[36],
    )