#[cfg(feature = "derive")]
use crate::Errorizable;
pub type Result<T> = core::result::Result<T, CertificateValidationError>;
#[cfg_attr(feature = "derive", derive(Errorizable))]
#[derive(Debug)]
pub enum CertificateValidationError {
#[cfg_attr(feature = "derive", error("Certificate has expired"))]
Expired,
#[cfg_attr(feature = "derive", error("Certificate is not yet valid"))]
NotYetValid,
#[cfg_attr(feature = "derive", error("Certificate has empty subject public key"))]
EmptyPublicKey,
#[cfg_attr(feature = "derive", error("Certificate has empty signature"))]
EmptySignature,
#[cfg_attr(feature = "derive", error("Invalid timestamp"))]
InvalidTimestamp,
#[cfg_attr(feature = "derive", error("Unsupported signature algorithm: {0}"))]
UnsupportedAlgorithm(der::asn1::ObjectIdentifier),
#[cfg_attr(feature = "derive", error("Invalid public key: {0}"))]
#[cfg_attr(feature = "derive", from)]
PublicKeyError(crate::crypto::sign::elliptic_curve::Error),
#[cfg_attr(feature = "derive", error("Signature verification failed: {0}"))]
#[cfg_attr(feature = "derive", from)]
SignatureVerificationFailed(signature::Error),
#[cfg_attr(feature = "derive", error("DER encoding error: {0}"))]
#[cfg_attr(feature = "derive", from)]
EncodingError(der::Error),
#[cfg_attr(
feature = "derive",
error("Signature algorithm mismatch between TBS certificate and certificate")
)]
AlgorithmMismatch,
#[cfg_attr(feature = "derive", error("SPKI error: {0}"))]
#[cfg_attr(feature = "derive", from)]
SpkiError(spki::Error),
#[cfg_attr(feature = "derive", error("Public key not in pinned set"))]
PublicKeyNotPinned,
#[cfg_attr(feature = "derive", error("Certificate fingerprint not in pinned set"))]
CertificateNotPinned,
#[cfg_attr(feature = "derive", error("Certificate is denied"))]
CertificateDenied,
#[cfg_attr(feature = "derive", error("Invalid certificate encoding"))]
InvalidCertificateEncoding,
#[cfg_attr(feature = "derive", error("Trust store is sealed"))]
StoreSealed,
#[cfg_attr(feature = "derive", error("Certificate not trusted"))]
CertificateNotTrusted,
#[cfg_attr(feature = "derive", error("Invalid certificate chain"))]
InvalidChain,
#[cfg_attr(feature = "derive", error("Empty certificate chain"))]
EmptyChain,
#[cfg_attr(feature = "derive", error("Operation not supported"))]
UnsupportedOperation,
#[cfg_attr(feature = "derive", error("SKID collision detected"))]
SkidCollision,
}
crate::impl_error_display!(CertificateValidationError {
Expired => "Certificate has expired",
NotYetValid => "Certificate is not yet valid",
EmptyPublicKey => "Certificate has empty subject public key",
EmptySignature => "Certificate has empty signature",
InvalidTimestamp => "Invalid timestamp",
UnsupportedAlgorithm(oid) => "Unsupported signature algorithm: {oid}",
PublicKeyError(e) => "Invalid public key: {e}",
SignatureVerificationFailed(e) => "Signature verification failed: {e}",
EncodingError(e) => "DER encoding error: {e}",
AlgorithmMismatch => "Signature algorithm mismatch between TBS certificate and certificate",
SpkiError(e) => "SPKI error: {e}",
PublicKeyNotPinned => "Public key not in pinned set",
CertificateNotPinned => "Certificate fingerprint not in pinned set",
CertificateDenied => "Certificate is denied",
InvalidCertificateEncoding => "Invalid certificate encoding",
StoreSealed => "Trust store is sealed",
CertificateNotTrusted => "Certificate not trusted",
InvalidChain => "Invalid certificate chain",
EmptyChain => "Empty certificate chain",
UnsupportedOperation => "Operation not supported",
SkidCollision => "SKID collision detected",
});