product_policy/
uefi_security_policy.rs1pub(crate) trait UefiSecurityPolicyParams {
12 fn require_secure_boot(&self) -> bool;
13}
14
15#[expect(
19 private_bounds,
20 reason = "Params getters are intentionally crate-private; only default methods are public"
21)]
22pub trait UefiSecurityPolicy
23where
24 Self: UefiSecurityPolicyParams,
25{
26 fn validate_secure_boot_enabled(&self, on: bool) -> anyhow::Result<()> {
28 if self.require_secure_boot() && !on {
29 anyhow::bail!("product policy requires secure boot to be enabled");
30 }
31 Ok(())
32 }
33}
34
35#[cfg(test)]
36mod tests {
37 extern crate alloc;
38 use super::*;
39 use crate::sivm::SivmPolicy;
40 use alloc::string::ToString;
41
42 #[test]
43 fn secure_boot_flag_off_passes_either_way() {
44 let p = SivmPolicy::default();
45 assert!(p.validate_secure_boot_enabled(false).is_ok());
46 assert!(p.validate_secure_boot_enabled(true).is_ok());
47 }
48
49 #[test]
50 fn secure_boot_flag_on_passes_when_enabled() {
51 let p = SivmPolicy {
52 require_secure_boot: true,
53 ..Default::default()
54 };
55 assert!(p.validate_secure_boot_enabled(true).is_ok());
56 }
57
58 #[test]
59 fn secure_boot_flag_on_fails_when_disabled() {
60 let p = SivmPolicy {
61 require_secure_boot: true,
62 ..Default::default()
63 };
64 let err = p.validate_secure_boot_enabled(false).unwrap_err();
65 assert!(err.to_string().contains("secure boot"));
66 }
67}