#[cfg(not(feature = "std"))]
extern crate alloc;
#[cfg(not(feature = "std"))]
use alloc::vec::Vec;
pub use crate::cms::compressed_data::CompressedData;
pub use crate::cms::content_info::ContentInfo;
pub use crate::cms::enveloped_data::EncryptedContentInfo;
pub use crate::cms::signed_data::{EncapsulatedContentInfo, SignerInfo};
pub use crate::der::asn1::{Any, BitString, ObjectIdentifier, OctetString};
pub use crate::der::{Choice, Enumerated, Sequence};
pub use crate::pkcs12::digest_info::DigestInfo;
pub use crate::spki::{AlgorithmIdentifier, AlgorithmIdentifierOwned};
#[cfg(feature = "x509")]
pub use crate::x509::ext::pkix::{HashAlgorithm, SignatureAlgorithm};
#[repr(u8)]
#[derive(Enumerated, Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord)]
pub enum Version {
V0 = 0,
V1 = 1,
V2 = 2,
V3 = 3,
}
#[repr(u8)]
#[derive(Enumerated, Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord)]
pub enum MessagePriority {
LowEffort = 0,
Standard = 1,
HighThroughput = 2,
LowLatency = 3,
Expedited = 4,
NetworkControl = 5,
}
#[derive(Debug, Clone, PartialEq, Eq)]
#[cfg_attr(feature = "zeroize", derive(zeroize::ZeroizeOnDrop))]
pub struct Asn1Matrix {
pub n: u8,
pub data: Vec<u8>,
}
#[derive(der::Sequence, Default, Debug, Clone, PartialEq, Eq)]
#[cfg_attr(feature = "zeroize", derive(zeroize::ZeroizeOnDrop))]
pub struct Metadata {
pub id: Vec<u8>,
pub order: u64,
#[asn1(optional = "true")]
#[cfg_attr(feature = "zeroize", zeroize(skip))]
pub compactness: Option<CompressedData>,
#[asn1(context_specific = "0", optional = "true")]
#[cfg_attr(feature = "zeroize", zeroize(skip))]
pub integrity: Option<DigestInfo>,
#[asn1(context_specific = "1", optional = "true")]
#[cfg_attr(feature = "zeroize", zeroize(skip))]
pub confidentiality: Option<EncryptedContentInfo>,
#[asn1(context_specific = "2", optional = "true")]
#[cfg_attr(feature = "zeroize", zeroize(skip))]
pub priority: Option<MessagePriority>,
#[asn1(context_specific = "3", optional = "true")]
pub lifetime: Option<u64>,
#[asn1(context_specific = "4", optional = "true")]
#[cfg_attr(feature = "zeroize", zeroize(skip))]
pub previous_frame: Option<DigestInfo>,
#[asn1(context_specific = "5", optional = "true")]
pub matrix: Option<Asn1Matrix>,
}
#[derive(der::Sequence, Debug, Clone, PartialEq, Eq)]
#[cfg_attr(feature = "zeroize", derive(zeroize::ZeroizeOnDrop))]
pub struct Frame {
#[cfg_attr(feature = "zeroize", zeroize(skip))]
pub version: Version,
pub metadata: Metadata,
pub message: Vec<u8>,
#[asn1(context_specific = "0", optional = "true")]
#[cfg_attr(feature = "zeroize", zeroize(skip))]
pub integrity: Option<DigestInfo>,
#[asn1(context_specific = "1", optional = "true")]
#[cfg_attr(feature = "zeroize", zeroize(skip))]
pub nonrepudiation: Option<SignerInfo>,
}