1use thiserror::Error;
4
5pub type Result<T> = std::result::Result<T, KeyError>;
7
8#[derive(Error, Debug)]
10pub enum KeyError {
11 #[error("Invalid key format: {0}")]
12 InvalidKeyFormat(String),
13
14 #[error("Certificate error: {0}")]
15 CertificateError(String),
16
17 #[error("Validation error: {0}")]
18 ValidationError(String),
19
20 #[error("Encoding error: {0}")]
21 EncodingError(String),
22
23 #[error("Signing error: {0}")]
24 SigningError(String),
25
26 #[error("Network error: {0}")]
27 NetworkError(String),
28
29 #[error("Unsupported algorithm: {0}")]
30 UnsupportedAlgorithm(String),
31
32 #[error("IO error: {0}")]
33 IoError(#[from] std::io::Error),
34
35 #[error("PKCS8 error: {0}")]
36 Pkcs8Error(#[from] pkcs8::Error),
37
38 #[error("ECDSA error: {0}")]
39 EcdsaError(#[from] p256::ecdsa::Error),
40
41 #[error("OpenSSL error: {0}")]
42 OpenSslError(#[from] openssl::error::ErrorStack),
43
44 #[error("X509 parser error: {0}")]
45 X509ParserError(String),
46
47 #[error("Certificate validation error: {0}")]
48 CertificateValidationError(String),
49
50 #[error("Chain validation error: {0}")]
51 ChainValidationError(String),
52
53 #[error("Invalid operation: {0}")]
54 InvalidOperation(String),
55
56 #[error("Key not found: {0}")]
57 KeyNotFound(String),
58
59 #[error("Certificate not found: {0}")]
60 CertificateNotFound(String),
61
62 #[error("Encryption error: {0}")]
63 EncryptionError(String),
64
65 #[error("Decryption error: {0}")]
66 DecryptionError(String),
67
68 #[error("Key derivation error: {0}")]
69 KeyDerivationError(String),
70
71 #[error("ECDH error: {0}")]
72 EcdhError(String),
73
74 #[error("Symmetric cipher error: {0}")]
75 SymmetricCipherError(String),
76
77 #[error("Key already initialized: {0}")]
78 KeyAlreadyInitialized(String),
79}
80
81impl From<rcgen::Error> for KeyError {
83 fn from(err: rcgen::Error) -> Self {
84 KeyError::CertificateError(err.to_string())
85 }
86}
87
88impl From<x509_parser::error::X509Error> for KeyError {
90 fn from(err: x509_parser::error::X509Error) -> Self {
91 KeyError::X509ParserError(err.to_string())
92 }
93}
94
95impl From<x509_parser::nom::Err<x509_parser::error::X509Error>> for KeyError {
96 fn from(err: x509_parser::nom::Err<x509_parser::error::X509Error>) -> Self {
97 KeyError::X509ParserError(format!("Parse error: {err}"))
98 }
99}