1use core::fmt;
4
5#[cfg(feature = "pem")]
6use der::pem;
7
8pub type Result<T> = core::result::Result<T, Error>;
10
11#[derive(Copy, Clone, Debug, Eq, PartialEq)]
13#[non_exhaustive]
14pub enum Error {
15 Asn1(der::Error),
17
18 Crypto,
25
26 KeyMalformed,
30
31 Version,
33}
34
35impl core::error::Error for Error {
36 fn source(&self) -> Option<&(dyn core::error::Error + 'static)> {
37 match self {
38 Error::Asn1(err) => Some(err),
39 _ => None,
40 }
41 }
42}
43
44impl fmt::Display for Error {
45 fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
46 match self {
47 Error::Asn1(err) => write!(f, "PKCS#1 ASN.1 error: {err}"),
48 Error::KeyMalformed => f.write_str("PKCS#1 cryptographic key data malformed"),
49 Error::Crypto => f.write_str("PKCS#1 cryptographic error"),
50 Error::Version => f.write_str("PKCS#1 version error"),
51 }
52 }
53}
54
55impl From<der::Error> for Error {
56 fn from(err: der::Error) -> Error {
57 Error::Asn1(err)
58 }
59}
60
61#[cfg(feature = "pem")]
62impl From<pem::Error> for Error {
63 fn from(err: pem::Error) -> Error {
64 der::Error::from(err).into()
65 }
66}