pub type Result<T> = core::result::Result<T, CertificateValidationError>;
#[derive(Debug)]
pub enum CertificateValidationError {
Expired,
NotYetValid,
EmptyPublicKey,
EmptySignature,
InvalidTimestamp,
UnsupportedAlgorithm(der::asn1::ObjectIdentifier),
EncodingError(der::Error),
AlgorithmMismatch,
SpkiError(spki::Error),
PublicKeyNotPinned,
CertificateNotPinned,
CertificateDenied,
InvalidCertificateEncoding,
StoreSealed,
CertificateNotTrusted,
InvalidChain,
EmptyChain,
UnsupportedOperation,
SkidCollision,
DigestTooShort,
IssuerNotCa,
MissingKeyCertSign,
PathLenExceeded,
UnprocessedCriticalExtension(der::asn1::ObjectIdentifier),
EndEntityIsCa,
CertificateRevoked,
RevocationStatusUnknown,
#[cfg(feature = "signature")]
PublicKeyError(crate::crypto::sign::elliptic_curve::Error),
#[cfg(feature = "signature")]
SignatureVerificationFailed(signature::Error),
}
crate::impl_error_display!(unconditional 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}",
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",
DigestTooShort => "Digest output too short for SKID",
IssuerNotCa => "Issuer certificate is not a CA",
MissingKeyCertSign => "Issuer keyUsage does not permit certificate signing",
PathLenExceeded => "Certification path length constraint exceeded",
UnprocessedCriticalExtension(oid) => "Unprocessed critical extension: {oid}",
EndEntityIsCa => "End-entity certificate asserts the CA basic constraint",
CertificateRevoked => "Certificate is revoked",
RevocationStatusUnknown => "Certificate revocation status could not be established",
#[cfg(feature = "signature")]
PublicKeyError(e) => "Invalid public key: {e}",
#[cfg(feature = "signature")]
SignatureVerificationFailed(e) => "Signature verification failed: {e}",
});
crate::impl_from!(der::Error => CertificateValidationError::EncodingError);
crate::impl_from!(spki::Error => CertificateValidationError::SpkiError);
#[cfg(feature = "signature")]
crate::impl_from!(crate::crypto::sign::elliptic_curve::Error => CertificateValidationError::PublicKeyError);
#[cfg(feature = "signature")]
crate::impl_from!(signature::Error => CertificateValidationError::SignatureVerificationFailed);