use alloc::{boxed::Box, vec::Vec};
use der::{Choice, Sequence};
use crmf::controls::{EncryptedValue, PkiPublicationInfo};
use crate::header::CmpCertificate;
use crate::status::PkiStatusInfo;
#[derive(Clone, Debug, Eq, PartialEq, Sequence)]
#[allow(missing_docs)]
pub struct CertifiedKeyPair {
pub cert_or_enc_cert: CertOrEncCert,
#[asn1(
context_specific = "0",
tag_mode = "EXPLICIT",
constructed = "true",
optional = "true"
)]
pub priv_key: Option<EncryptedValue>,
#[asn1(
context_specific = "1",
tag_mode = "EXPLICIT",
constructed = "true",
optional = "true"
)]
pub publication_info: Option<PkiPublicationInfo>,
}
#[derive(Clone, Debug, Eq, PartialEq, Choice)]
#[allow(missing_docs)]
pub enum CertOrEncCert {
#[asn1(context_specific = "0", tag_mode = "EXPLICIT", constructed = "true")]
Certificate(Box<CmpCertificate>),
#[asn1(context_specific = "1", tag_mode = "EXPLICIT", constructed = "true")]
EncryptedCert(Box<EncryptedValue>),
}
#[derive(Clone, Debug, Eq, PartialEq, Sequence)]
#[allow(missing_docs)]
pub struct KeyRecRepContent<'a> {
pub status: PkiStatusInfo<'a>,
#[asn1(
context_specific = "0",
tag_mode = "EXPLICIT",
constructed = "true",
optional = "true"
)]
pub new_sig_cert: Option<CmpCertificate>,
#[asn1(
context_specific = "1",
tag_mode = "EXPLICIT",
constructed = "true",
optional = "true"
)]
pub ca_certs: Option<Vec<CmpCertificate>>,
#[asn1(
context_specific = "2",
tag_mode = "EXPLICIT",
constructed = "true",
optional = "true"
)]
pub key_pair_hist: Option<Vec<CertifiedKeyPair>>,
}