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:
+1
-1
@@ -1,6 +1,6 @@
|
|||||||
[package]
|
[package]
|
||||||
name = "libfreemkv"
|
name = "libfreemkv"
|
||||||
version = "0.29.0"
|
version = "0.30.0"
|
||||||
edition = "2024"
|
edition = "2024"
|
||||||
rust-version = "1.86"
|
rust-version = "1.86"
|
||||||
license = "AGPL-3.0-only"
|
license = "AGPL-3.0-only"
|
||||||
|
|||||||
@@ -1672,6 +1672,16 @@ impl Disc {
|
|||||||
// Content samples need the disc reader, which scan does not retain;
|
// Content samples need the disc reader, which scan does not retain;
|
||||||
// the caller fills these for sources that validate against ciphertext.
|
// the caller fills these for sources that validate against ciphertext.
|
||||||
samples: Vec::new(),
|
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())
|
||||||
|
}
|
||||||
|
},
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -35,6 +35,12 @@ pub struct DiscInputs {
|
|||||||
/// the disc reader, which the library's scan does not retain — so
|
/// the disc reader, which the library's scan does not retain — so
|
||||||
/// [`crate::Disc::inputs`] leaves it empty for the caller to fill.
|
/// [`crate::Disc::inputs`] leaves it empty for the caller to fill.
|
||||||
pub samples: Vec<Vec<u8>>,
|
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
|
/// A key source: a stateful provider that hands a disc's candidate [`Key`]s out
|
||||||
|
|||||||
Reference in New Issue
Block a user