Matthew Jackson 22130bfe12 aacs: relocate the AACS cert handshake into freemkv-unlock
Stage 2: the AACS host-certificate handshake (the AKE + bus-key derivation +
P-160/P-256 EC crypto, ~2050 lines) moves out of libfreemkv into the
self-contained src/aacs module, with its own error type (the Aacs* failure
points + structured ScsiError) and an aes_ecb_decrypt helper. AacsCert impls
crate::Unlocker — matches DiscKind::Aacs, runs run_cert_handshake against the
host certs the consumer passes via UnlockCtx, and returns Unlocked { vid,
bus_key }. collect_host_certs stays in libfreemkv (it reads keysources). The
SCSI contract gains ScsiSense + the AACS/REPORT-KEY opcodes. libfreemkv is
untouched (still green); it rewires onto this in stage 4.

72 tests pass (the handshake brought its full EC-crypto test suite).
2026-06-29 19:33:07 -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%