Add DiscSession::resolve_keys and resolve_keys_for for base AACS keys
Hoist the AACS base-unit-key resolution glue the CLI and autorip hand-rolled around the existing primitives into one place: sample the largest title's ciphertext, run the ordered key sources first-valid-wins, bank the winning unit keys onto the disc, and build the read-time KeyFetch. - resolve_keys_for(reader, disc, sources): the free-function core, over any SectorSource (live drive or a scan_iso file reader). Returns the structured ResolutionTrace plus the KeyFetch; a non-AACS disc is a no-op (empty trace, no fetch). - DiscSession::resolve_keys(sources): samples through the session's reader (staged file reader if present, else the live drive), banks onto the scanned disc, and retains the KeyFetch on the session (key_fetch() accessor) for a later mux. - KeySourceFactory: the Arc source factory the consumer supplies (libfreemkv builds no key sources itself). Sampling is skipped when the factory yields no sources (resolution is a miss regardless) — no wasted disc read. Tests cover banking, the no-key path still building a fetch, and the CSS/None non-AACS no-op.
This commit is contained in:
+3
-1
@@ -146,7 +146,9 @@ pub use drive::{Drive, DriveStatus, find_drive};
|
||||
// stop hand-rolling `open → wait_ready → init → probe_disc → identify → scan`.
|
||||
// Owns the `Drive` by value; forwards consumer-built key material into
|
||||
// `ScanOptions` (the library derives no certs — see `KeySpec`).
|
||||
pub use session::{DeviceTarget, DiscSession, KeySpec, scan_iso};
|
||||
pub use session::{
|
||||
DeviceTarget, DiscSession, KeySourceFactory, KeySpec, ResolvedKeys, resolve_keys_for, scan_iso,
|
||||
};
|
||||
|
||||
// ─── Errors ─────────────────────────────────────────────────────────────────
|
||||
//
|
||||
|
||||
Reference in New Issue
Block a user