use std::fmt;
#[derive(Debug, PartialEq, Eq)]
#[non_exhaustive]
pub enum Error {
CouldNotParseCertificate,
CouldNotParseCertificationRequest,
CouldNotParseKeyPair,
#[cfg(feature = "x509-parser")]
InvalidNameType,
InvalidIpAddressOctetLength(usize),
KeyGenerationUnavailable,
#[cfg(feature = "x509-parser")]
UnsupportedExtension,
UnsupportedSignatureAlgorithm,
RingUnspecified,
RingKeyRejected(String),
CertificateKeyPairMismatch,
Time,
#[cfg(feature = "pem")]
PemError(String),
RemoteKeyError,
UnsupportedInCsr,
InvalidCrlNextUpdate,
IssuerNotCrlSigner,
}
impl fmt::Display for Error {
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
use self::Error::*;
match self {
CouldNotParseCertificate => write!(f, "Could not parse certificate")?,
CouldNotParseCertificationRequest => write!(
f,
"Could not parse certificate signing \
request"
)?,
CouldNotParseKeyPair => write!(f, "Could not parse key pair")?,
#[cfg(feature = "x509-parser")]
InvalidNameType => write!(f, "Invalid subject alternative name type")?,
InvalidIpAddressOctetLength(actual) => {
write!(f, "Invalid IP address octet length of {actual} bytes")?
},
KeyGenerationUnavailable => write!(
f,
"There is no support for generating \
keys for the given algorithm"
)?,
UnsupportedSignatureAlgorithm => write!(
f,
"The requested signature algorithm \
is not supported"
)?,
#[cfg(feature = "x509-parser")]
UnsupportedExtension => write!(f, "Unsupported extension requested in CSR")?,
RingUnspecified => write!(f, "Unspecified ring error")?,
RingKeyRejected(e) => write!(f, "Key rejected by ring: {}", e)?,
CertificateKeyPairMismatch => write!(
f,
"The provided certificate's signature \
algorithm is incompatible with the given key pair"
)?,
Time => write!(f, "Time error")?,
RemoteKeyError => write!(f, "Remote key error")?,
#[cfg(feature = "pem")]
PemError(e) => write!(f, "PEM error: {}", e)?,
UnsupportedInCsr => write!(f, "Certificate parameter unsupported in CSR")?,
InvalidCrlNextUpdate => write!(f, "Invalid CRL next update parameter")?,
IssuerNotCrlSigner => write!(
f,
"CRL issuer must specify no key usage, or key usage including cRLSign"
)?,
};
Ok(())
}
}
impl std::error::Error for Error {}
pub(crate) trait ExternalError<T>: Sized {
fn _err(self) -> Result<T, Error>;
}