Matthew Jackson 02d50664ff css: relocate the CSS bus-auth into freemkv-unlock; all 3 unlockers wired
Stage 3: the CSS bus-authentication (the challenge-response that sets the
drive's ASF=1 to unlock scrambled-sector reads, plus crypt_key + the CSS
tables) moves out of libfreemkv into the self-contained src/css module, with
its own error type. CssUnlocker impls crate::Unlocker — matches DiscKind::Css,
self-guards against a non-DVD profile, runs the bus-auth, and returns an empty
Unlocked (CSS yields no VID/bus key; the keyless Stevenson descramble stays in
libfreemkv). The keyless descramble (lfsr/stevenson) is NOT moved — that's
content decryption, the consumer's job.

all_unlockers() now returns [LibreDrive, AacsCert, CssUnlocker] — the entire
unlock layer is built. libfreemkv rewires onto it in stage 4. 89 tests pass.
2026-06-29 19:36:28 -07:00

freemkv-unlock

Unlocker plugins for libfreemkv.

libfreemkv ships only the pluggable Unlocker trait + registry and stays firmware-clean — it contains no concrete unlock code. Each crate in this workspace implements one unlocker and is registered into libfreemkv by a single line in the consuming binary:

libfreemkv::register_unlocker(Box::new(my_unlocker::MyUnlocker::new()));

Removing an unlocker is deleting that one line and the dependency (delete-to-comply).

Members

Each member is a self-contained unlocker plugin — see its own README for details.

License: AGPL-3.0-only.

S
Description
firmware unlock crate — build dep for kdb (libfreemkv git-deps it)
Readme MIT
463 KiB
Languages
Rust 100%