aacs: discover HD DVD AACS dir + title-key files instead of hardcoding /ANY!/VTKF000
The HD DVD AACS directory name and title-key filename are chosen by the authoring house, but the resolver hardcoded a single spelling (/ANY!/VTKF000.AACS, /ANY!/MKBROM.AACS, /ANY!/CONTENT_CERT.AACS). Real discs diverge: Freedom (Memory-Tech) names its AACS dir AAC! and ships VTKF090.AACS + VTKF100.AACS; Harry Potter carries VTKF000/001/002/099. On such a disc the hardcoded path finds nothing, so no MKB/title-key/cert is read and decryption silently can't engage. Replace the fixed HD DVD path constants with structural discovery: - find_hddvd_aacs_dir() locates the AACS dir as the root child dir ending in '!' that contains MKBROM.AACS (so the ..._BAK mirror is skipped; the dozens of decoy advanced-content '!' dirs are excluded by the MKBROM.AACS guard). - role_paths(udf, role) builds the ordered candidate list per role: the static BD/UHD /AACS/ paths first, then the discovered HD DVD files — MKBROM.AACS, CONTENT_CERT.AACS, and every VTKF*.AACS (sorted), not just VTKF000. - read_first() is now generic over &str / String so it takes the Vec<String>. BD/UHD unaffected (no '!' dir → discovery returns None, list is the /AACS/ constants exactly as before). Verified on real Freedom (AAC!/VTKF090+100) and Dukes (ANY!/VTKF000) ISOs; unit tests cover both shapes. Open item (TODO(hddvd-encrypted)): when a disc has multiple VTKF variants the correct one must be chosen by validating its VUK-derived key against a real encrypted unit rather than first-that-reads. Blocked on obtaining a genuinely encrypted HD DVD image — all HD DVD ISOs on hand are already-decrypted rips.
This commit is contained in:
@@ -4,6 +4,15 @@
|
||||
|
||||
### Fixed
|
||||
|
||||
- **HD DVD AACS key files are now found on every disc, not just the common
|
||||
layout.** The AACS directory and title-key filename on HD DVD are chosen by
|
||||
the authoring house, and freemkv previously assumed one fixed spelling
|
||||
(`/ANY!/VTKF000.AACS`). Discs that name their AACS directory differently (e.g.
|
||||
`AAC!` instead of `ANY!`) or ship numbered title-key files (`VTKF090.AACS` /
|
||||
`VTKF100.AACS` rather than `VTKF000.AACS`) are now handled: the AACS directory
|
||||
is located by its contents and every title-key file in it is picked up. Blu-ray
|
||||
and UHD are unaffected. (Selecting the correct title-key file when a disc
|
||||
carries several variants still needs verification against an encrypted HD DVD.)
|
||||
- **A dirty disc can no longer "rip clean" but decode with errors.** freemkv now
|
||||
asks the drive to *report* marginal reads instead of silently returning
|
||||
best-effort data as success — on smudged/scratched media a drive can hand back
|
||||
|
||||
Reference in New Issue
Block a user