Coverage Report

Created: 2026-04-09 06:12

next uncovered line (L), next uncovered region (R), next uncovered branch (B)
/rust/registry/src/index.crates.io-1949cf8c6b5b557f/sec1-0.7.3/src/error.rs
Line
Count
Source
1
//! Error types
2
3
use core::fmt;
4
5
#[cfg(feature = "pem")]
6
use der::pem;
7
8
/// Result type with `sec1` crate's [`Error`] type.
9
pub type Result<T> = core::result::Result<T, Error>;
10
11
/// Error type
12
#[derive(Copy, Clone, Debug, Eq, PartialEq)]
13
#[non_exhaustive]
14
pub enum Error {
15
    /// ASN.1 DER-related errors.
16
    #[cfg(feature = "der")]
17
    Asn1(der::Error),
18
19
    /// Cryptographic errors.
20
    ///
21
    /// These can be used by EC implementations to signal that a key is
22
    /// invalid for cryptographic reasons. This means the document parsed
23
    /// correctly, but one of the values contained within was invalid, e.g.
24
    /// a number expected to be a prime was not a prime.
25
    Crypto,
26
27
    /// PKCS#8 errors.
28
    #[cfg(feature = "pkcs8")]
29
    Pkcs8(pkcs8::Error),
30
31
    /// Errors relating to the `Elliptic-Curve-Point-to-Octet-String` or
32
    /// `Octet-String-to-Elliptic-Curve-Point` encodings.
33
    PointEncoding,
34
35
    /// Version errors
36
    Version,
37
}
38
39
impl fmt::Display for Error {
40
0
    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
41
0
        match self {
42
            #[cfg(feature = "der")]
43
0
            Error::Asn1(err) => write!(f, "SEC1 ASN.1 error: {}", err),
44
0
            Error::Crypto => f.write_str("SEC1 cryptographic error"),
45
            #[cfg(feature = "pkcs8")]
46
            Error::Pkcs8(err) => write!(f, "{}", err),
47
0
            Error::PointEncoding => f.write_str("elliptic curve point encoding error"),
48
0
            Error::Version => f.write_str("SEC1 version error"),
49
        }
50
0
    }
51
}
52
53
#[cfg(feature = "der")]
54
impl From<der::Error> for Error {
55
0
    fn from(err: der::Error) -> Error {
56
0
        Error::Asn1(err)
57
0
    }
58
}
59
60
#[cfg(feature = "pem")]
61
impl From<pem::Error> for Error {
62
    fn from(err: pem::Error) -> Error {
63
        der::Error::from(err).into()
64
    }
65
}
66
67
#[cfg(feature = "pkcs8")]
68
impl From<pkcs8::Error> for Error {
69
    fn from(err: pkcs8::Error) -> Error {
70
        Error::Pkcs8(err)
71
    }
72
}
73
74
#[cfg(feature = "pkcs8")]
75
impl From<pkcs8::spki::Error> for Error {
76
    fn from(err: pkcs8::spki::Error) -> Error {
77
        Error::Pkcs8(pkcs8::Error::PublicKey(err))
78
    }
79
}
80
81
#[cfg(feature = "std")]
82
impl std::error::Error for Error {}