pub struct EnrollmentProfile {Show 14 fields
pub name: String,
pub max_validity_days: u32,
pub key_usage: Vec<String>,
pub extended_key_usage: Vec<String>,
pub include_ski: bool,
pub include_aki: bool,
pub min_rsa_bits: u32,
pub min_ecdsa_curve: String,
pub ct_enabled: bool,
pub allowed_ml_dsa_levels: Vec<String>,
pub allowed_ml_kem_levels: Vec<String>,
pub allow_composite_ml_dsa: bool,
pub require_dual_cert: bool,
pub must_staple: bool,
}Expand description
Enrollment profile defining constraints for issued certificates.
Supports classical (RSA, ECDSA), post-quantum (ML-DSA, ML-KEM), and composite hybrid algorithms for PQC migration scenarios.
Fields§
§name: StringProfile name (referenced in OTP records and EST label config).
max_validity_days: u32Maximum validity period in days.
key_usage: Vec<String>Key usage flags to set (e.g., digitalSignature, keyEncipherment).
extended_key_usage: Vec<String>Extended key usage OIDs (e.g., serverAuth, clientAuth).
include_ski: boolWhether to include Subject Key Identifier.
include_aki: boolWhether to include Authority Key Identifier.
min_rsa_bits: u32Minimum RSA key size in bits.
min_ecdsa_curve: StringMinimum ECDSA curve (P-256, P-384).
ct_enabled: boolWhether to inject Certificate Transparency SCTs.
allowed_ml_dsa_levels: Vec<String>Allowed ML-DSA levels for signing key CSRs (FIPS 204). Empty means ML-DSA is not accepted for this profile. Values: “ml-dsa-44”, “ml-dsa-65”, “ml-dsa-87”.
allowed_ml_kem_levels: Vec<String>Allowed ML-KEM levels for KEM key CSRs (FIPS 203). Used with /serverkeygen for KRA-based key generation. Values: “ml-kem-512”, “ml-kem-768”, “ml-kem-1024”.
allow_composite_ml_dsa: boolWhether to accept composite ML-DSA+classical CSRs. Per draft-ietf-lamps-pq-composite-sigs-19.
require_dual_cert: boolRequire dual certificates (paired legacy + PQC) for hybrid migration scenarios per IDM-5563 lifecycle requirements. When true, a classical enrollment triggers automatic paired PQC enrollment (and vice versa) as linked certificates.
must_staple: boolInclude the TLS Feature Extension (RFC 7633, OID 1.3.6.1.5.5.7.1.24) in issued certificates.
RFC 7633 Section 4: when set, the issued certificate declares that the TLS server presenting it MUST provide an OCSP stapled response (status_request, TLS extension type 5) during the TLS handshake. Clients that understand this extension MUST abort the handshake if the server fails to staple a valid OCSP response.
This is required for NIAP CA PP compliance and is commonly referred to as “must-staple”.
When true, the certificate will contain:
TLS Feature Extension (id-pe-tlsfeature):
OID: 1.3.6.1.5.5.7.1.24
Value: SEQUENCE { INTEGER 5 } -- status_requestDefault: false.
Trait Implementations§
Source§impl Clone for EnrollmentProfile
impl Clone for EnrollmentProfile
Source§fn clone(&self) -> EnrollmentProfile
fn clone(&self) -> EnrollmentProfile
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreSource§impl Debug for EnrollmentProfile
impl Debug for EnrollmentProfile
Source§impl Default for EnrollmentProfile
impl Default for EnrollmentProfile
Source§impl<'de> Deserialize<'de> for EnrollmentProfile
impl<'de> Deserialize<'de> for EnrollmentProfile
Source§fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
Auto Trait Implementations§
impl Freeze for EnrollmentProfile
impl RefUnwindSafe for EnrollmentProfile
impl Send for EnrollmentProfile
impl Sync for EnrollmentProfile
impl Unpin for EnrollmentProfile
impl UnsafeUnpin for EnrollmentProfile
impl UnwindSafe for EnrollmentProfile
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
§impl<T> Instrument for T
impl<T> Instrument for T
§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read more