1.3.2: carry UnitKey.variant_number (all sources emit 0)
Construct unit keys via UnitKey::new; ordinary content is variant 0. Inherits libfreemkv 1.3.2. No behaviour change.
This commit is contained in:
@@ -1,5 +1,14 @@
|
|||||||
# Changelog
|
# Changelog
|
||||||
|
|
||||||
|
## [1.3.2] — 2026-07-10
|
||||||
|
|
||||||
|
### Changed
|
||||||
|
|
||||||
|
- Unit keys carry libfreemkv's new `UnitKey.variant_number`; every source
|
||||||
|
(keydb, online, VUK-derived) emits `0` — ordinary, non-forensic content —
|
||||||
|
via the `UnitKey::new` constructor. No behaviour change. Inherits
|
||||||
|
**libfreemkv 1.3.2**.
|
||||||
|
|
||||||
## [1.3.1] — 2026-07-10
|
## [1.3.1] — 2026-07-10
|
||||||
|
|
||||||
### Licensing
|
### Licensing
|
||||||
|
|||||||
+1
-1
@@ -1,6 +1,6 @@
|
|||||||
[package]
|
[package]
|
||||||
name = "freemkv-keysources"
|
name = "freemkv-keysources"
|
||||||
version = "1.3.1"
|
version = "1.3.2"
|
||||||
edition = "2024"
|
edition = "2024"
|
||||||
rust-version = "1.86"
|
rust-version = "1.86"
|
||||||
license = "MIT"
|
license = "MIT"
|
||||||
|
|||||||
+1
-4
@@ -184,10 +184,7 @@ impl KeydbSource {
|
|||||||
// 1. Terminal Unit Keys stored in the entry — directly usable, no
|
// 1. Terminal Unit Keys stored in the entry — directly usable, no
|
||||||
// derivation. Preserve the keydb's CPS numbering (idx = num - 1).
|
// derivation. Preserve the keydb's CPS numbering (idx = num - 1).
|
||||||
for (num, key) in &entry.unit_keys {
|
for (num, key) in &entry.unit_keys {
|
||||||
keys.push(UnitKey {
|
keys.push(UnitKey::new(num.saturating_sub(1), *key));
|
||||||
idx: num.saturating_sub(1),
|
|
||||||
key: *key,
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// The disc's encrypted title keys (from Unit_Key_RO.inf) — what every
|
// The disc's encrypted title keys (from Unit_Key_RO.inf) — what every
|
||||||
|
|||||||
+1
-4
@@ -47,10 +47,7 @@ pub(crate) fn uks_from_vuk(vuk: &[u8; 16], enc_title_keys: &[[u8; 16]]) -> Vec<U
|
|||||||
enc_title_keys
|
enc_title_keys
|
||||||
.iter()
|
.iter()
|
||||||
.enumerate()
|
.enumerate()
|
||||||
.map(|(i, e)| UnitKey {
|
.map(|(i, e)| UnitKey::new(i as u32, libfreemkv::aacs::derive::decrypt_unit_key(vuk, e)))
|
||||||
idx: i as u32,
|
|
||||||
key: libfreemkv::aacs::derive::decrypt_unit_key(vuk, e),
|
|
||||||
})
|
|
||||||
.collect()
|
.collect()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+1
-1
@@ -306,7 +306,7 @@ impl OnlineSource {
|
|||||||
// A terminal UK is used directly (CPS unit 0 → committed cps 1, matching
|
// A terminal UK is used directly (CPS unit 0 → committed cps 1, matching
|
||||||
// the old `Key::Unit(vec![(1, uk)])`).
|
// the old `Key::Unit(vec![(1, uk)])`).
|
||||||
if let Some(uk) = json.get("UK").and_then(|u| u.as_str()).and_then(parse_uk) {
|
if let Some(uk) = json.get("UK").and_then(|u| u.as_str()).and_then(parse_uk) {
|
||||||
return vec![UnitKey { idx: 0, key: uk }];
|
return vec![UnitKey::new(0, uk)];
|
||||||
}
|
}
|
||||||
// A VUK is derived to the terminal keys locally, via the disc's
|
// A VUK is derived to the terminal keys locally, via the disc's
|
||||||
// encrypted title keys from the context — the library owns the crypto.
|
// encrypted title keys from the context — the library owns the crypto.
|
||||||
|
|||||||
@@ -267,10 +267,7 @@ impl KeySource for ScriptedSource {
|
|||||||
}
|
}
|
||||||
|
|
||||||
fn uk(b: u8) -> UnitKey {
|
fn uk(b: u8) -> UnitKey {
|
||||||
UnitKey {
|
UnitKey::new(0, [b; 16])
|
||||||
idx: 0,
|
|
||||||
key: [b; 16],
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
|
|||||||
Reference in New Issue
Block a user