cose/
errors.rs

1//! Errors returned by the module, including
2//! [rust-openssl](https://docs.rs/openssl/0.10.35/openssl/index.html) and
3//! [cbor-codec](https://twittner.gitlab.io/cbor-codec/cbor/) errors.
4use cbor::decoder::DecodeError;
5use cbor::encoder::EncodeError;
6#[cfg(feature = "json")]
7use hex::FromHexError;
8use openssl::aes;
9use openssl::error;
10#[cfg(feature = "json")]
11use serde_json::Error;
12use std::io;
13
14/// Errors that don't return anything.
15pub type CoseResult = Result<(), CoseError>;
16/// Results that return something.
17pub type CoseResultWithRet<A> = Result<A, CoseError>;
18
19#[derive(Debug)]
20pub enum CoseField {
21    Alg,
22    Crv,
23    KeyOp,
24    Kid,
25    StaticKid,
26    Kty,
27    Tag,
28    ContentType,
29    Iv,
30    BaseIv,
31    PartialIv,
32    Salt,
33    PartyUIdentity,
34    PartyUNonce,
35    PartyUOther,
36    PartyVIdentity,
37    PartyVNonce,
38    PartyVOther,
39    K,
40    X,
41    Y,
42    D,
43    N,
44    E,
45    RsaD,
46    P,
47    Q,
48    DP,
49    DQ,
50    QInv,
51    RI,
52    DI,
53    TI,
54    Other,
55    CounterSignature,
56    Payload,
57    Signature,
58    Ciphertext,
59    Mac,
60    KeyChain,
61    X5Bag,
62    X5Chain,
63    X5U,
64    X5T,
65    X5TAlg,
66    X5ChainSender,
67    X5TSender,
68    X5TSenderAlg,
69    X5USender,
70    Signer,
71}
72
73/// Errors returned.
74#[derive(Debug)]
75pub enum CoseError {
76    Invalid(CoseField),
77    Missing(CoseField),
78    InvalidLabel(i32),
79    DuplicateLabel(i32),
80    InvalidContext(String),
81    MissingKey(),
82    AlgMismatch(),
83    InvalidCoseStructure(),
84    InvalidMethodMultipleAgents(),
85    DirectAlgMultipleRecipientsError(),
86    CryptoStackError(error::ErrorStack),
87    CryptoKeyError(aes::KeyError),
88    CryptoError(error::Error),
89    IoError(io::Error),
90    EncodeError(EncodeError),
91    DecodeError(DecodeError),
92    #[cfg(feature = "json")]
93    HexError(FromHexError),
94    #[cfg(feature = "json")]
95    SerdeJsonError(Error),
96}
97impl From<error::ErrorStack> for CoseError {
98    fn from(err: error::ErrorStack) -> CoseError {
99        CoseError::CryptoStackError(err)
100    }
101}
102impl From<error::Error> for CoseError {
103    fn from(err: error::Error) -> CoseError {
104        CoseError::CryptoError(err)
105    }
106}
107impl From<aes::KeyError> for CoseError {
108    fn from(err: aes::KeyError) -> CoseError {
109        CoseError::CryptoKeyError(err)
110    }
111}
112impl From<io::Error> for CoseError {
113    fn from(err: io::Error) -> CoseError {
114        CoseError::IoError(err)
115    }
116}
117
118impl From<EncodeError> for CoseError {
119    fn from(err: EncodeError) -> CoseError {
120        CoseError::EncodeError(err)
121    }
122}
123impl From<DecodeError> for CoseError {
124    fn from(err: DecodeError) -> CoseError {
125        CoseError::DecodeError(err)
126    }
127}
128#[cfg(feature = "json")]
129impl From<FromHexError> for CoseError {
130    fn from(err: FromHexError) -> CoseError {
131        CoseError::HexError(err)
132    }
133}
134#[cfg(feature = "json")]
135impl From<Error> for CoseError {
136    fn from(err: Error) -> CoseError {
137        CoseError::SerdeJsonError(err)
138    }
139}