v0.30.0: DiscInputs carries the disc's volume label (title)

Add `DiscInputs.volume_label: Option<String>` — the disc's human title (UDF/ISO
volume identifier, else BDMV <di:name>), populated by Disc::inputs() from the
scan. Identity only, no secret, not used in any AACS derivation; lets a key
source forward the title so a key service can catalog disc_hash → title.
This commit is contained in:
MattJackson
2026-06-06 09:05:15 -07:00
parent 4f1dbfd042
commit 7d58ba7b08
3 changed files with 17 additions and 1 deletions
+1 -1
View File
@@ -1,6 +1,6 @@
[package]
name = "libfreemkv"
version = "0.29.0"
version = "0.30.0"
edition = "2024"
rust-version = "1.86"
license = "AGPL-3.0-only"
+10
View File
@@ -1672,6 +1672,16 @@ impl Disc {
// Content samples need the disc reader, which scan does not retain;
// the caller fills these for sources that validate against ciphertext.
samples: Vec::new(),
// Human title: prefer the UDF/ISO volume identifier, fall back to the
// BDMV display name. Identity only — a key service may catalog it.
volume_label: {
let v = self.volume_id.trim();
if v.is_empty() {
self.meta_title.clone()
} else {
Some(v.to_string())
}
},
})
}
+6
View File
@@ -35,6 +35,12 @@ pub struct DiscInputs {
/// the disc reader, which the library's scan does not retain — so
/// [`crate::Disc::inputs`] leaves it empty for the caller to fill.
pub samples: Vec<Vec<u8>>,
/// The disc's human title — the UDF/ISO volume identifier (e.g.
/// `WICKED_FOR_GOOD`), falling back to the BDMV `<di:name>` when present.
/// `None` when not captured. Identity only, no secret; a key service may
/// record it (keyed by `disc_hash`) to build a hash→title catalog. Not used
/// in any AACS derivation.
pub volume_label: Option<String>,
}
/// A key source: a stateful provider that hands a disc's candidate [`Key`]s out