AACS 2.0 full pipeline: handshake, bus key, decrypt, transparent API

- aacs.rs: content decryption (AES-CBC aligned units, bus decrypt, VUK
 derivation, unit key decrypt). 11 tests including synthetic roundtrip.
- aacs_handshake.rs: SCSI authentication (ECDH on AACS 160-bit curve,
 ECDSA sign/verify, AES-CMAC, bus key derivation, read_data_key).
 14 tests including EC order, ECDH shared secret, cert verification.
- disc.rs: transparent API — Disc::scan() detects AACS, authenticates,
 derives keys internally. ContentReader decrypts on the fly. App never
 sees AACS details.
- error.rs: AacsError (E7000) variant

BF v12 complete: 284 unique matches from 8 AWS instances.
This commit is contained in:
MattJackson
2026-04-06 20:40:52 -07:00
parent dbc5789406
commit 985d00f0a4
6 changed files with 1651 additions and 4 deletions
+5
View File
@@ -46,6 +46,9 @@ pub enum Error {
// 6xxx — Disc format errors
DiscError { detail: String },
// 7xxx — AACS errors
AacsError { detail: String },
}
impl Error {
@@ -65,6 +68,7 @@ impl Error {
Error::ScsiTimeout { .. } => 4001,
Error::IoError { .. } => 5000,
Error::DiscError { .. } => 6000,
Error::AacsError { .. } => 7000,
}
}
}
@@ -92,6 +96,7 @@ impl std::fmt::Display for Error {
Error::ScsiTimeout { opcode } => write!(f, "E4001: SCSI 0x{opcode:02x} timeout"),
Error::IoError { source } => write!(f, "E5000: {source}"),
Error::DiscError { detail } => write!(f, "E6000: disc: {detail}"),
Error::AacsError { detail } => write!(f, "E7000: AACS: {detail}"),
}
}
}