decrypt: one content-detected decryption stage; keep going past damage

Every input decrypts through one stage that detects its content, with
strict stale-CPI handling and partial units only at EOF. Damage no
longer ends a rip where usable content remains (E7031, UDF FID,
MPLS/CLPI truncation, whole-disc E7032). M2TS output declares tracks in
an HDMV PMT and paces PCR; network:// allows LAN and loopback and
is_blocked_ip is public; parity goldens pin today's outputs.
This commit is contained in:
Matthew Jackson
2026-09-30 20:11:59 -07:00
parent cf2171e11a
commit 81ecc8acce
70 changed files with 4697 additions and 821 deletions
+4 -4
View File
@@ -20,13 +20,13 @@ fn css_descramble_sector_roundtrip_via_public_api() {
};
let mut sector = vec![0xAAu8; 2048];
// Real scrambled DVD sectors are MPEG-2 PS packs, and the public API now
// requires the pack start code as well as the flag bits — byte 0x14 means
// something else entirely in an IFO or UDF sector.
// A real scrambled DVD-Video pack: pack header, then a PES whose MPEG-2 flags byte (0x14)
// carries the scramble bits. Byte 0x14 means something else in an IFO or UDF sector.
sector[0x00..0x04].copy_from_slice(&[0x00, 0x00, 0x01, 0xBA]);
sector[4] = 0x44; // '01': a 13818-1 pack
sector[0x0D] = 0xF8; // pack_stuffing_length 0
sector[0x14] = 0x30;
sector[0x0E..0x12].copy_from_slice(&[0x00, 0x00, 0x01, 0xE0]);
sector[0x14] = 0xB0;
sector[0x54..0x59].copy_from_slice(&[0xDE, 0xAD, 0xBE, 0xEF, 0x42]);
let original = sector.clone();