use alloc::vec::Vec;
use der::asn1::{GeneralizedTime, OctetString, Utf8StringRef};
use der::{Enumerated, Sequence};
use spki::AlgorithmIdentifierOwned;
use x509_cert::ext::pkix::name::GeneralName;
use x509_cert::Certificate;
use crate::gen::InfoTypeAndValue;
#[derive(Clone, Debug, Eq, PartialEq, Sequence)]
#[allow(missing_docs)]
pub struct PkiHeader<'a> {
pub pvno: Pvno,
pub sender: GeneralName,
pub recipient: GeneralName,
#[asn1(
context_specific = "0",
tag_mode = "EXPLICIT",
constructed = "false",
optional = "true"
)]
pub message_time: Option<GeneralizedTime>,
#[asn1(
context_specific = "1",
tag_mode = "EXPLICIT",
constructed = "true",
optional = "true"
)]
pub protection_alg: Option<AlgorithmIdentifierOwned>,
#[asn1(
context_specific = "2",
tag_mode = "EXPLICIT",
constructed = "false",
optional = "true"
)]
pub sender_kid: Option<OctetString>,
#[asn1(
context_specific = "3",
tag_mode = "EXPLICIT",
constructed = "false",
optional = "true"
)]
pub recip_kid: Option<OctetString>,
#[asn1(
context_specific = "4",
tag_mode = "EXPLICIT",
constructed = "false",
optional = "true"
)]
pub trans_id: Option<OctetString>,
#[asn1(
context_specific = "5",
tag_mode = "EXPLICIT",
constructed = "false",
optional = "true"
)]
pub sender_nonce: Option<OctetString>,
#[asn1(
context_specific = "6",
tag_mode = "EXPLICIT",
constructed = "false",
optional = "true"
)]
pub recip_nonce: Option<OctetString>,
#[asn1(
context_specific = "7",
tag_mode = "EXPLICIT",
constructed = "true",
optional = "true"
)]
pub free_text: Option<PkiFreeText<'a>>,
#[asn1(
context_specific = "8",
tag_mode = "EXPLICIT",
constructed = "true",
optional = "true"
)]
pub general_info: Option<Vec<InfoTypeAndValue>>,
}
#[derive(Clone, Debug, Copy, PartialEq, Eq, Enumerated, Ord, PartialOrd)]
#[asn1(type = "INTEGER")]
#[repr(u8)]
#[allow(missing_docs)]
pub enum Pvno {
Cmp1999 = 1,
Cmp2000 = 2,
}
pub type PkiFreeText<'a> = Vec<Utf8StringRef<'a>>;
pub type CmpCertificate = Certificate;