use der::{
asn1::{Any, ObjectIdentifier, OctetString, SetOfVec},
Sequence, ValueOrd,
};
#[derive(Debug, Sequence)]
pub struct EncapsulatedContentInfo {
pub econtent_type: ObjectIdentifier,
#[asn1(context_specific = "0", tag_mode = "EXPLICIT", optional = "true")]
pub econtent: Option<Any>,
}
#[derive(Debug, Sequence, ValueOrd)]
pub struct AlgorithmIdentifier {
pub oid: ObjectIdentifier,
pub parameters: Option<Any>,
}
#[derive(Debug, Sequence, ValueOrd)]
pub struct Attribute {
pub oid: ObjectIdentifier,
pub values: SetOfVec<Any>,
}
pub type SignedAttributes = SetOfVec<Attribute>;
pub type MessageDigest = OctetString;
#[derive(Debug, Sequence, ValueOrd)]
pub struct SignerInfo {
pub version: u8,
pub sid: Any,
pub digest_algorithm: AlgorithmIdentifier,
#[asn1(context_specific = "0", tag_mode = "IMPLICIT", optional = "true")]
pub signed_attrs: Option<SignedAttributes>,
pub signature_algorithm: AlgorithmIdentifier,
pub signature: OctetString,
#[asn1(context_specific = "1", tag_mode = "IMPLICIT", optional = "true")]
pub unsigned_attrs: Option<SetOfVec<Any>>,
}
#[derive(Debug, Sequence)]
pub struct SignedData {
pub version: u8,
pub digest_algorithms: SetOfVec<AlgorithmIdentifier>,
pub encap_content_info: EncapsulatedContentInfo,
#[asn1(context_specific = "0", tag_mode = "IMPLICIT", optional = "true")]
pub certificates: Option<SetOfVec<Any>>,
#[asn1(context_specific = "1", tag_mode = "IMPLICIT", optional = "true")]
pub crls: Option<SetOfVec<Any>>,
pub signer_infos: SetOfVec<SignerInfo>,
}