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/// Errors returned.
20#[derive(Debug)]
21pub enum CoseError {
22    InvalidAlg(),
23    InvalidCRV(),
24    InvalidD(),
25    InvalidY(),
26    InvalidX(),
27    InvalidKTY(),
28    InvalidTag(),
29    InvalidKeyOp(),
30    InvalidSignature(),
31    InvalidCounterSignature(),
32    InvalidMAC(),
33    InvalidKeyChain(),
34    MissingKTY(),
35    MissingCRV(),
36    MissingAlg(),
37    MissingKID(),
38    MissingIV(),
39    MissingPartialIV(),
40    MissingSalt(),
41    MissingStaticKID(),
42    MissingPartyUID(),
43    MissingPartyUNonce(),
44    MissingPartyUOther(),
45    MissingPartyVID(),
46    MissingPartyVNonce(),
47    MissingPartyVOther(),
48    MissingSignature(),
49    MissingPayload(),
50    MissingTag(),
51    MissingX(),
52    MissingY(),
53    MissingD(),
54    MissingK(),
55    MissingKey(),
56    MissingBaseIV(),
57    MissingSigner(),
58    MissingRecipient(),
59    MissingContentType(),
60    MissingCiphertext(),
61    MissingX5Bag(),
62    MissingX5Chain(),
63    MissingX5T(),
64    MissingX5U(),
65    MissingX5ChainSender(),
66    MissingX5TSender(),
67    MissingX5USender(),
68    MissingN(),
69    MissingE(),
70    MissingRsaD(),
71    MissingP(),
72    MissingQ(),
73    MissingDP(),
74    MissingDQ(),
75    MissingQINV(),
76    MissingOther(),
77    MissingRI(),
78    MissingDI(),
79    MissingTI(),
80    InvalidCoseStructure(),
81    DuplicateLabel(i32),
82    PartyUNonceOrSaltRequired(),
83    InvalidLabel(i32),
84    AlgsDontMatch(),
85    KeyOpNotSupported(),
86    InvalidMethodForContext(),
87    AlgOnlySupportsOneRecipient(),
88    InvalidContext(),
89    NotImplemented(String),
90    CryptoStackError(error::ErrorStack),
91    CryptoError(error::Error),
92    CryptoKeyError(aes::KeyError),
93    IoError(io::Error),
94    EncodeError(EncodeError),
95    DecodeError(DecodeError),
96    #[cfg(feature = "json")]
97    HexError(FromHexError),
98    #[cfg(feature = "json")]
99    SerdeJsonError(Error),
100}
101impl From<error::ErrorStack> for CoseError {
102    fn from(err: error::ErrorStack) -> CoseError {
103        CoseError::CryptoStackError(err)
104    }
105}
106impl From<error::Error> for CoseError {
107    fn from(err: error::Error) -> CoseError {
108        CoseError::CryptoError(err)
109    }
110}
111impl From<aes::KeyError> for CoseError {
112    fn from(err: aes::KeyError) -> CoseError {
113        CoseError::CryptoKeyError(err)
114    }
115}
116impl From<io::Error> for CoseError {
117    fn from(err: io::Error) -> CoseError {
118        CoseError::IoError(err)
119    }
120}
121
122impl From<EncodeError> for CoseError {
123    fn from(err: EncodeError) -> CoseError {
124        CoseError::EncodeError(err)
125    }
126}
127impl From<DecodeError> for CoseError {
128    fn from(err: DecodeError) -> CoseError {
129        CoseError::DecodeError(err)
130    }
131}
132#[cfg(feature = "json")]
133impl From<FromHexError> for CoseError {
134    fn from(err: FromHexError) -> CoseError {
135        CoseError::HexError(err)
136    }
137}
138#[cfg(feature = "json")]
139impl From<Error> for CoseError {
140    fn from(err: Error) -> CoseError {
141        CoseError::SerdeJsonError(err)
142    }
143}