Matthew Jackson 314c365290 collapse freemkv-unlock into one crate; ld becomes a module
Replace the ld/aacs/css member-crate workspace with a single freemkv-unlock
crate: the generic Unlocker contract + SCSI transport contract at the crate
root (lib.rs, scsi.rs, error.rs), and the firmware unlocker as the self-
contained src/ld module. The contract is repo-agnostic raw types (DriveId,
HostCert, DiscKind, Unlocked, UnlockError) with NO libfreemkv dependency, so
libfreemkv will depend on this crate (one-way, no cycle) and dispatch via
all_unlockers(). ld now impl crate::Unlocker, takes its own DriveId (4 raw
fields, no INQUIRY parsing), and returns a raw Option<[u8;16]> VID. The old
aacs/css plugin wrappers are removed; their crypto moves in from libfreemkv in
the next stages. 31 tests pass.
2026-06-29 19:11:21 -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%