audit: cap the sparse-PTS reorder buffer, FMTS key state, zero KCD
Round-1 findings from the 10-phase release audit: - SparsePtsReorder buffered its current GOP with no bound, draining only on a keyframe — an open-GOP or crafted program stream that never signals one could hold the whole title in RAM. Force-complete the GOP at MAX_GOP_FRAMES, matching the MPEG-2 parser's backstop. - inject_unit_keys labelled a 2.1 FMTS disc as AACS 1.0 / bus-encryption off; FMTS is UHD-family, so synthesize the UHD version + bus encryption. - The compiled Key Correction Data was a non-zero 16-byte constant fed into the Media Key derivation. Per the no-compiled-keys rule it is now all-zero; the chain still cannot complete on a real disc (documented), so this is behaviour-neutral — all variant tests pass unchanged. - Fix stale doc references (broken `super::variants` intra-doc links, and `aacs::keys` comments) left by the module rename.
This commit is contained in:
+9
-11
@@ -62,19 +62,17 @@ use super::types::DeviceKey;
|
||||
|
||||
// ── Public constants ──────────────────────────────────────────────────────
|
||||
|
||||
/// AACS 2.1 Key Correction Data.
|
||||
/// AACS 2.1 Key Correction Data — a zero placeholder, NOT real key material.
|
||||
///
|
||||
/// **KCD is PER-LICENSEE** (per player manufacturer) — there is no single
|
||||
/// universal value, so this one constant cannot be correct across discs. We do
|
||||
/// NOT have the real per-manufacturer KCDs coded, and won't: libfreemkv compiles
|
||||
/// in no AACS key material (keydb.cfg is the single source of truth). The bytes
|
||||
/// below only let the chain's SHAPE exercise against synthetic fixtures; on a
|
||||
/// real variant disc they yield a wrong Media Key that the final
|
||||
/// Verify-Media-Key gate rejects. So the variant chain cannot complete on a real
|
||||
/// disc today — a key-acquisition gap, not a code gap.
|
||||
const KEY_CORRECTION_DATA: [u8; 16] = [
|
||||
0x3b, 0x62, 0x8a, 0x78, 0x29, 0x00, 0xca, 0x2f, 0xdb, 0xe7, 0x7a, 0x49, 0xfe, 0x22, 0xd6, 0x6e,
|
||||
];
|
||||
/// universal value. libfreemkv compiles in no AACS key material (keydb.cfg is
|
||||
/// the single source of truth), so this stays all-zero: the chain's SHAPE still
|
||||
/// runs, but on a real variant disc the derivation yields a wrong Media Key that
|
||||
/// the final Verify-Media-Key gate rejects. The variant chain therefore cannot
|
||||
/// complete on a real disc today — a key-acquisition gap, not a code gap. If a
|
||||
/// real per-licensee KCD is ever available it must come from keydb.cfg, never a
|
||||
/// compiled constant.
|
||||
const KEY_CORRECTION_DATA: [u8; 16] = [0u8; 16];
|
||||
|
||||
// ── MKB record walking ────────────────────────────────────────────────────
|
||||
|
||||
|
||||
Reference in New Issue
Block a user