00e56dbb7d2c91f07ea94d8b748c25fd28e43270
Reframe: an unlocker provides drive-features (speed/riplock — a property of the DRIVE, any disc) AND bus removal (AACS decrypt+VID / CSS), kept separate so a disc can take one without the other. A CSS DVD wants a matched drive's speed but must NOT take its firmware bus-unlock (breaks stock CSS). Add Unlocker::apply_drive_features (default no-op, self-gating). LibreDrive implements it with STOCK MMC commands only — SET STREAMING (0xB6), the modern riplock lift many slot-loading BD combos honor when they ignore the legacy SET CD SPEED (0xBB), then SET CD SPEED as fallback — so it is safe on a non-unlocked drive. New build_set_streaming() + tests.
freemkv-unlock
The unlock layer for the freemkv toolchain.
An unlocker removes a drive-level bus-encryption barrier so the drive serves readable (de-bus'd / de-scrambled) sectors. Content-key decryption is a separate concern — the consumer's job.
This crate defines the Unlocker contract and a generic SCSI transport
contract, and holds the self-contained unlocker modules. The consumer
(libfreemkv) depends on this crate and
dispatches through all_unlockers(); it never names an individual unlocker, and
clients of libfreemkv are oblivious to unlockers entirely (as they are to the
SCSI layer).
for u in freemkv_unlock::all_unlockers() {
if u.matches(&ctx) {
return u.unlock(&mut scsi, &ctx);
}
}
To remove an unlocker, delete its module directory and its one line in
all_unlockers() — nothing else changes.
License: AGPL-3.0-only.
Languages
Rust
100%