1use thiserror::Error;
2
3#[derive(Copy, Clone, Debug, Error)]
5pub enum Error {
6 #[error("OQS error")]
8 Oqs,
9 #[error("AES Key Wrap error")]
11 AesKw,
12 #[error("AES GCM error")]
14 AesGcm,
15 #[error("Invalid scheme name: {0}")]
17 InvalidSchemeName(#[from] derive_more::FromStrError),
18 #[error("Invalid scheme value: {0}")]
20 InvalidSchemeValue(#[from] derive_more::TryFromReprError<u8>),
21 #[error("Invalid scheme type: {0}")]
23 InvalidSchemeType(#[from] derive_more::TryIntoError<u8>),
24 #[error("Invalid encapsulation key size {0}")]
26 InvalidEncapsulationKey(usize),
27 #[error("Invalid capsule size {0}")]
29 InvalidCapsule(usize),
30 #[error("Capsule conversion error")]
32 CapsuleConversion,
33 #[error("Encapsulation key conversion error")]
35 EncapsulationKeyConversion,
36 #[error("Mismatched schemes among recipients")]
38 SchemeMismatch,
39 #[error("No recipients provided for envelope")]
41 NoRecipients,
42 #[error("Decapsulation key does not correspond to any capsule")]
44 InvalidDecapsulationKey,
45}
46
47impl From<oqs::Error> for Error {
48 fn from(_: oqs::Error) -> Self {
49 Error::Oqs
50 }
51}
52
53impl From<aes_kw::Error> for Error {
54 fn from(_: aes_kw::Error) -> Self {
55 Error::AesKw
56 }
57}
58
59impl From<aes_gcm::Error> for Error {
60 fn from(_: aes_gcm::Error) -> Self {
61 Error::AesGcm
62 }
63}
64
65pub type Result<T> = std::result::Result<T, Error>;