css: auth primitives operate on &mut dyn ScsiTransport; clean up bus_auth

Thread &mut dyn ScsiTransport through unlock_css_reads and its bus-auth /
disc-key primitives instead of &mut Drive — they only ever issued SCSI via
drive.scsi_mut(), so this is mechanical and lossless, and it makes the CSS
unlock speak the same transport interface as the registry Unlocker trait
(prerequisite for CSS becoming a uniform unlocker).

Also clean up the badly-named, half-dead bus_auth:
- rename bus_auth -> establish_authenticated_session: it is run for its
  side effect (sets the drive's ASF=1, unlocking scrambled-sector reads),
  which the name now states.
- drop the derived CSS bus key from the return + computation: it had no
  consumer (descrambling is keyless via the Stevenson attack), so it was
  dead crypto computed on every DVD unlock. Return just the negotiated AGID,
  which the caller genuinely needs for the best-effort disc-key REPORT KEY.
This commit is contained in:
Matthew Jackson
2026-06-29 16:01:07 -07:00
parent f682405973
commit 03820c68f8
2 changed files with 24 additions and 22 deletions
+1 -1
View File
@@ -1478,7 +1478,7 @@ impl Disc {
// unreliable). The real descramble key is recovered from the
// scrambled movie data itself via the known-plaintext attack — no
// player keys, no disc-key crack, no REPORT-KEY-derived title key.
if let Err(e) = crate::css::auth::unlock_css_reads(session, unlock_lba) {
if let Err(e) = crate::css::auth::unlock_css_reads(session.scsi_mut(), unlock_lba) {
tracing::warn!(
target: "freemkv::scan",
error_code = e.code(),