1use thiserror::Error;
4
5pub type PqcResult<T> = Result<T, PqcError>;
7
8#[derive(Error, Debug)]
10pub enum PqcError {
11 #[error("Algorithm not supported: {0}")]
13 UnsupportedAlgorithm(String),
14
15 #[error("Invalid key format: {0}")]
17 InvalidKey(String),
18
19 #[error("Invalid signature format: {0}")]
21 InvalidSignature(String),
22
23 #[error("Key generation failed: {0}")]
25 KeyGenerationFailed(String),
26
27 #[error("Signing failed: {0}")]
29 SigningFailed(String),
30
31 #[error("Verification failed: {0}")]
33 VerificationFailed(String),
34
35 #[error("Encryption failed: {0}")]
37 EncryptionFailed(String),
38
39 #[error("Decapsulation failed: {0}")]
41 DecapsulationFailed(String),
42
43 #[error("Hybrid composition failed: {0}")]
45 HybridFailed(String),
46
47 #[error("Serialization error: {0}")]
49 SerializationError(String),
50
51 #[error("liboqs library not available")]
53 LiboqsNotAvailable,
54
55 #[error("Random number generation failed")]
57 RandomGenerationFailed,
58
59 #[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}