ferritls_core/policy.rs
1//! 批准策略:FIPS 140-3 下各算法的批准状态与批准模式门控。
2//!
3//! 依据 NIST SP 800-52r2(TLS 配置)与 FIPS 186-5 等:
4//!
5//! | 算法 | 状态 | 备注 |
6//! |---|---|---|
7//! | AES-128/256-GCM、AES-128-CCM | 批准 | TLS 1.3 批准套件 |
8//! | SHA-256/384/512、HMAC、HKDF | 批准 | |
9//! | ECDSA P-256/P-384、ECDH(同曲线) | 批准 | |
10//! | RSA-PSS、RSA-PKCS#1 v1.5(SHA-256+) | 批准 | PKCS#1 仅限证书验证等遗留用途 |
11//! | CTR-DRBG(SP 800-90A) | 批准 | FIPS 模式强制使用 |
12//! | X25519(独立使用) | 非批准 | 仅可作为 ML-KEM 混合组件进入(M8+ 预研) |
13//! | ChaCha20-Poly1305 | 非批准 | |
14//! | Ed25519 | 非批准 | FIPS 186-5 不含 EdDSA |
15//!
16//! “非批准”不等于“移除”:它们继续在非批准模式(默认 provider)提供,
17//! 但 [`crate::policy::fips_mode_enabled`] 为真时不得进入套件清单,上电
18//! 自检也不覆盖它们。
19
20/// 单个算法/原语在 FIPS 140-3 下的批准状态。
21#[derive(Clone, Copy, Debug, PartialEq, Eq)]
22pub enum Approval {
23 /// FIPS 批准:可进入批准模式的套件清单,上电自检必须覆盖。
24 Approved,
25 /// 非批准:仅在非批准模式提供(X25519、ChaCha20-Poly1305、Ed25519)。
26 NonApproved,
27}
28
29/// 当前构建是否处于批准模式(`fips` feature)。
30///
31/// 批准模式 = 仅批准算法 + 强制 CTR-DRBG + 上电自检路径。
32/// 它**不是**“已通过 CMVP 认证”的声明;认证落地前 rustls 侧 `fips()`
33/// 恒为 `false`(AGENTS.md 硬性规则 3/4)。
34pub fn fips_mode_enabled() -> bool {
35 cfg!(feature = "fips")
36}