use cms::cert::x509::ext::pkix::name::GeneralName;
use cms::cert::x509::ext::Extensions;
use cms::cert::x509::spki::AlgorithmIdentifier;
#[cfg(feature = "tsa-client")]
use cms::content_info::ContentInfo;
#[cfg(feature = "tsa-client")]
use der::asn1::{BitString, Utf8StringRef};
use der::asn1::{GeneralizedTime, Int, OctetString};
use der::oid::ObjectIdentifier;
use der::{Any, Enumerated, Sequence};
#[derive(Clone, Copy, Debug, Enumerated, Eq, PartialEq, PartialOrd, Ord)]
#[asn1(type = "INTEGER")]
#[repr(u8)]
pub enum TspVersion {
V1 = 1,
}
pub type TsaPolicyId = ObjectIdentifier;
#[derive(Clone, Debug, Eq, PartialEq, Sequence)]
pub struct MessageImprint {
pub hash_algorithm: AlgorithmIdentifier<Any>,
pub hashed_message: OctetString,
}
#[cfg(feature = "tsa-client")]
#[derive(Clone, Debug, Eq, PartialEq, Sequence)]
pub struct TimeStampReq {
pub version: TspVersion,
pub message_imprint: MessageImprint,
#[asn1(optional = "true")]
pub req_policy: Option<TsaPolicyId>,
#[asn1(optional = "true")]
pub nonce: Option<Int>,
#[asn1(default = "Default::default")]
pub cert_req: bool,
#[asn1(context_specific = "0", tag_mode = "IMPLICIT", optional = "true")]
pub extensions: Option<Extensions>,
}
#[cfg(feature = "tsa-client")]
#[derive(Clone, Copy, Debug, Enumerated, Eq, PartialEq)]
#[asn1(type = "INTEGER")]
#[repr(u8)]
#[allow(missing_docs)]
pub enum PkiStatus {
Accepted = 0,
GrantedWithMods = 1,
Rejection = 2,
Waiting = 3,
RevocationWarning = 4,
RevocationNotification = 5,
KeyUpdateWarning = 6,
}
#[cfg(feature = "tsa-client")]
pub type PkiFreeText<'a> = alloc_vec::Vec<Utf8StringRef<'a>>;
#[cfg(feature = "tsa-client")]
use std::vec as alloc_vec;
#[cfg(feature = "tsa-client")]
#[derive(Clone, Debug, Eq, PartialEq, Sequence)]
#[allow(missing_docs)]
pub struct PkiStatusInfo<'a> {
pub status: PkiStatus,
#[asn1(optional = "true")]
pub status_string: Option<PkiFreeText<'a>>,
#[asn1(optional = "true")]
pub fail_info: Option<BitString>,
}
#[cfg(feature = "tsa-client")]
pub type TimeStampToken = ContentInfo;
#[cfg(feature = "tsa-client")]
#[derive(Clone, Debug, Eq, PartialEq, Sequence)]
pub struct TimeStampResp<'a> {
pub status: PkiStatusInfo<'a>,
#[asn1(optional = "true")]
pub time_stamp_token: Option<TimeStampToken>,
}
#[derive(Clone, Debug, Eq, PartialEq, Sequence)]
#[allow(missing_docs)]
pub struct Accuracy {
#[asn1(optional = "true")]
pub seconds: Option<u64>,
#[asn1(context_specific = "0", tag_mode = "IMPLICIT", optional = "true")]
pub millis: Option<i16>,
#[asn1(context_specific = "1", tag_mode = "IMPLICIT", optional = "true")]
pub micros: Option<i16>,
}
#[derive(Clone, Debug, Eq, PartialEq, Sequence)]
#[allow(missing_docs)]
pub struct TstInfo {
pub version: TspVersion,
pub policy: TsaPolicyId,
pub message_imprint: MessageImprint,
pub serial_number: Int,
pub gen_time: GeneralizedTime,
#[asn1(optional = "true")]
pub accuracy: Option<Accuracy>,
#[asn1(default = "Default::default")]
pub ordering: bool,
#[asn1(optional = "true")]
pub nonce: Option<Int>,
#[asn1(context_specific = "0", tag_mode = "EXPLICIT", optional = "true")]
pub tsa: Option<GeneralName>,
#[asn1(context_specific = "1", tag_mode = "IMPLICIT", optional = "true")]
pub extensions: Option<Extensions>,
}