//! AACS primitive types shared across the resolve chain. //! //! These structs describe AACS key material (device keys, host //! certificates, per-disc entries). They carry no parsing logic — the //! keydb.cfg format lives in the `freemkv-keysources` crate. libfreemkv //! owns only the crypto and these value types that flow through it. /// A device key for MKB subset-difference tree processing. #[derive(Debug, Clone)] pub struct DeviceKey { pub key: [u8; 16], pub node: u16, pub uv: u32, pub u_mask_shift: u8, } /// Host certificate + private key for AACS SCSI authentication. #[derive(Debug, Clone)] pub struct HostCert { /// AACS 1.0: 20 bytes. AACS 2.0: 32 bytes. pub private_key: [u8; 20], /// AACS 1.0: 92 bytes. AACS 2.0: 132 bytes. pub certificate: Vec, /// AACS 2.0 host private key (P-256, 32 bytes). None for AACS 1.0 only. pub private_key_v2: Option<[u8; 32]>, /// AACS 2.0 host certificate (type 0x11). None for AACS 1.0 only. pub certificate_v2: Option>, } /// A per-disc entry from the key database. #[derive(Debug, Clone)] pub struct DiscEntry { /// Disc hash (20 bytes, hex) pub disc_hash: String, /// Disc title pub title: String, /// Media Key (16 bytes) — from MKB processing pub media_key: Option<[u8; 16]>, /// Disc ID (16 bytes) pub disc_id: Option<[u8; 16]>, /// Volume Unique Key (16 bytes) — decrypts title keys pub vuk: Option<[u8; 16]>, /// Unit keys (title keys) indexed by CPS unit number pub unit_keys: Vec<(u32, [u8; 16])>, }