Skip to main content

runar_keys/
error.rs

1//! Error types for the certificate system
2
3use thiserror::Error;
4
5/// Result type alias for certificate operations
6pub type Result<T> = std::result::Result<T, KeyError>;
7
8/// Comprehensive error types for certificate operations
9#[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
81// Convert from rcgen errors
82impl From<rcgen::Error> for KeyError {
83    fn from(err: rcgen::Error) -> Self {
84        KeyError::CertificateError(err.to_string())
85    }
86}
87
88// Convert from x509-parser errors
89impl 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}