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)]
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#[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}