use crate::{
calendar::{DateTime, Utc},
collections::Vector,
x509::{
CvCrl, CvPolicyMode,
cv::{cv_crl_expiration::CvCrlExpiration, cv_evaluation_depth::CvEvaluationDepth},
extensions::{ExtendedKeyUsage, KeyUsage},
},
};
#[derive(Clone, Debug, PartialEq)]
pub struct CvPolicy<B> {
cep: CvCrlExpiration,
crls: Vector<CvCrl<B>>,
evaluation_depth: CvEvaluationDepth,
extended_key_usage: ExtendedKeyUsage,
key_usage: KeyUsage,
mode: CvPolicyMode,
validation_time: DateTime<Utc>,
}
impl<B> CvPolicy<B> {
#[inline]
pub const fn new(validation_time: DateTime<Utc>) -> Self {
Self {
cep: CvCrlExpiration::Enforce,
crls: Vector::new(),
evaluation_depth: CvEvaluationDepth::Chain(8),
extended_key_usage: ExtendedKeyUsage::EMPTY,
key_usage: KeyUsage::new((0, 0)),
mode: CvPolicyMode::Strict,
validation_time: validation_time.trunc_to_sec(),
}
}
#[inline]
pub fn crls(&self) -> &[CvCrl<B>] {
&self.crls
}
#[inline]
pub const fn crls_mut(&mut self) -> &mut Vector<CvCrl<B>> {
&mut self.crls
}
#[inline]
pub const fn extended_key_usage(&self) -> &ExtendedKeyUsage {
&self.extended_key_usage
}
#[inline]
pub const fn extended_key_usage_mut(&mut self) -> &mut ExtendedKeyUsage {
&mut self.extended_key_usage
}
#[inline]
pub const fn evaluation_depth(&self) -> CvEvaluationDepth {
self.evaluation_depth
}
#[inline]
pub const fn evaluation_depth_mut(&mut self) -> &mut CvEvaluationDepth {
&mut self.evaluation_depth
}
#[inline]
pub const fn expiration_policy(&self) -> CvCrlExpiration {
self.cep
}
#[inline]
pub const fn expiration_policy_mut(&mut self) -> &mut CvCrlExpiration {
&mut self.cep
}
#[inline]
pub const fn key_usage(&self) -> &KeyUsage {
&self.key_usage
}
#[inline]
pub const fn key_usage_mut(&mut self) -> &mut KeyUsage {
&mut self.key_usage
}
#[inline]
pub const fn mode(&self) -> CvPolicyMode {
self.mode
}
#[inline]
pub const fn mode_mut(&mut self) -> &mut CvPolicyMode {
&mut self.mode
}
#[inline]
pub const fn set_validation_time(&mut self, value: DateTime<Utc>) {
self.validation_time = value.trunc_to_sec();
}
#[inline]
pub const fn validation_time(&self) -> &DateTime<Utc> {
&self.validation_time
}
}