Skip to main content

pqcrypto/
error.rs

1//! PQCrypto Error Types
2
3use thiserror::Error;
4
5/// Result type for PQCrypto operations
6pub type PqcResult<T> = Result<T, PqcError>;
7
8/// Error types for post-quantum cryptography
9#[derive(Error, Debug)]
10pub enum PqcError {
11    /// Algorithm not supported
12    #[error("Algorithm not supported: {0}")]
13    UnsupportedAlgorithm(String),
14
15    /// Invalid key format
16    #[error("Invalid key format: {0}")]
17    InvalidKey(String),
18
19    /// Invalid signature format
20    #[error("Invalid signature format: {0}")]
21    InvalidSignature(String),
22
23    /// Key generation failed
24    #[error("Key generation failed: {0}")]
25    KeyGenerationFailed(String),
26
27    /// Signing failed
28    #[error("Signing failed: {0}")]
29    SigningFailed(String),
30
31    /// Verification failed
32    #[error("Verification failed: {0}")]
33    VerificationFailed(String),
34
35    /// Encryption/Encapsulation failed
36    #[error("Encryption failed: {0}")]
37    EncryptionFailed(String),
38
39    /// Decapsulation failed
40    #[error("Decapsulation failed: {0}")]
41    DecapsulationFailed(String),
42
43    /// Hybrid composition failed
44    #[error("Hybrid composition failed: {0}")]
45    HybridFailed(String),
46
47    /// Serialization error
48    #[error("Serialization error: {0}")]
49    SerializationError(String),
50
51    /// liboqs not available
52    #[error("liboqs library not available")]
53    LiboqsNotAvailable,
54
55    /// Random number generation failed
56    #[error("Random number generation failed")]
57    RandomGenerationFailed,
58
59    /// Invalid parameter
60    #[error("Invalid parameter: {0}")]
61    InvalidParameter(String),
62}
63
64impl serde::Serialize for PqcError {
65    fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
66    where
67        S: serde::Serializer,
68    {
69        serializer.serialize_str(&self.to_string())
70    }
71}