1use 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
14pub type CoseResult = Result<(), CoseError>;
16pub type CoseResultWithRet<A> = Result<A, CoseError>;
18
19#[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}