#[cfg_attr(not(any(feature = "as2", feature = "as4")), allow(unused_imports))]
use super::*;
#[derive(Debug, Default, Clone)]
#[cfg(any(feature = "as2", feature = "as4"))]
pub(crate) struct TrustAnchorCache(pub(super) Arc<OnceLock<Vec<openssl::x509::X509>>>);
#[cfg(any(feature = "as2", feature = "as4"))]
impl PartialEq for TrustAnchorCache {
fn eq(&self, _: &Self) -> bool {
true }
}
#[cfg(any(feature = "as2", feature = "as4"))]
impl Eq for TrustAnchorCache {}
#[derive(Default, Clone)]
#[cfg(any(feature = "as2", feature = "as4"))]
pub(crate) struct X509StoreCache(pub(super) Arc<OnceLock<Arc<openssl::x509::store::X509Store>>>);
#[cfg(any(feature = "as2", feature = "as4"))]
impl std::fmt::Debug for X509StoreCache {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
f.debug_tuple("X509StoreCache")
.field(&self.0.get().is_some())
.finish()
}
}
#[cfg(any(feature = "as2", feature = "as4"))]
impl PartialEq for X509StoreCache {
fn eq(&self, _: &Self) -> bool {
true
}
}
#[cfg(any(feature = "as2", feature = "as4"))]
impl Eq for X509StoreCache {}
#[derive(Clone, PartialEq, Eq)]
pub struct CertHandle {
pub key_id: String,
pub fingerprint_sha256: String,
pub trust_anchor_pems: Vec<String>,
pub intermediate_ca_pems: Vec<String>,
pub signing_cert_pem: Option<String>,
pub signing_key_pem: Option<zeroize::Zeroizing<String>>,
pub recipient_cert_pem: Option<String>,
}
impl std::fmt::Debug for CertHandle {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
f.debug_struct("CertHandle")
.field("key_id", &self.key_id)
.field("fingerprint_sha256", &self.fingerprint_sha256)
.field("trust_anchor_pems", &self.trust_anchor_pems)
.field("intermediate_ca_pems", &self.intermediate_ca_pems)
.field("signing_cert_pem", &self.signing_cert_pem)
.field(
"signing_key_pem",
&self.signing_key_pem.as_ref().map(|_| "<redacted>"),
)
.field("recipient_cert_pem", &self.recipient_cert_pem)
.finish()
}
}
impl CertHandle {
pub fn new(key_id: impl Into<String>) -> Self {
Self {
key_id: key_id.into(),
fingerprint_sha256: String::new(),
trust_anchor_pems: Vec::new(),
intermediate_ca_pems: Vec::new(),
signing_cert_pem: None,
signing_key_pem: None,
recipient_cert_pem: None,
}
}
pub fn set_signing_key_pem(&mut self, key_pem: impl Into<String>) {
self.signing_key_pem = Some(zeroize::Zeroizing::new(key_pem.into()));
}
}