314c365290bd6768688d7d090037583dac92f6ec
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.
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.
Languages
Rust
100%