use std::sync::Arc;
use zeroize::Zeroize;
#[cfg(feature = "as2")]
use crate::crypto::as2_smime::SmimeCipher;
#[derive(Debug, Clone, PartialEq, Eq)]
pub(crate) struct MimeEnvelope {
pub content_type: String,
pub body: Arc<[u8]>,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Default)]
#[non_exhaustive]
pub(crate) enum As2MicAlgorithm {
#[default]
Sha256,
Sha384,
Sha512,
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub(crate) struct As2SendPolicy {
pub sign: bool,
pub encrypt: bool,
pub compress: bool,
pub payload_content_type: Option<&'static str>,
pub mic_algorithm: As2MicAlgorithm,
#[cfg(feature = "as2")]
pub encryption_cipher: SmimeCipher,
pub as2_from_id: String,
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub(crate) struct ParsedMdn {
pub final_recipient: Option<String>,
pub original_message_id: Option<String>,
pub disposition: String,
pub received_content_mic: Option<String>,
pub is_signed: bool,
}
#[derive(Clone, PartialEq, Eq)]
pub struct As2MdnSigningCredentials {
pub signing_cert_pem: Vec<u8>,
pub signing_key_pem: Vec<u8>,
}
impl std::fmt::Debug for As2MdnSigningCredentials {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
f.debug_struct("As2MdnSigningCredentials")
.field("signing_cert_pem", &self.signing_cert_pem)
.field(
"signing_key_pem",
&crate::core::redact_present(!self.signing_key_pem.is_empty()),
)
.finish()
}
}
impl Drop for As2MdnSigningCredentials {
fn drop(&mut self) {
self.signing_key_pem.zeroize();
}
}