use cbor::decoder::DecodeError;
use cbor::encoder::EncodeError;
#[cfg(feature = "json")]
use hex::FromHexError;
use openssl::aes;
use openssl::error;
#[cfg(feature = "json")]
use serde_json::Error;
use std::io;
pub type CoseResult = Result<(), CoseError>;
pub type CoseResultWithRet<A> = Result<A, CoseError>;
#[derive(Debug)]
pub enum CoseField {
Alg,
Crv,
KeyOp,
Kid,
StaticKid,
Kty,
Tag,
ContentType,
Iv,
BaseIv,
PartialIv,
Salt,
PartyUIdentity,
PartyUNonce,
PartyUOther,
PartyVIdentity,
PartyVNonce,
PartyVOther,
K,
X,
Y,
D,
N,
E,
RsaD,
P,
Q,
DP,
DQ,
QInv,
RI,
DI,
TI,
Other,
CounterSignature,
Payload,
Signature,
Ciphertext,
Mac,
KeyChain,
X5Bag,
X5Chain,
X5U,
X5T,
X5TAlg,
X5ChainSender,
X5TSender,
X5TSenderAlg,
X5USender,
Signer,
}
#[derive(Debug)]
pub enum CoseError {
Invalid(CoseField),
Missing(CoseField),
InvalidLabel(i32),
DuplicateLabel(i32),
InvalidContext(String),
MissingKey(),
AlgMismatch(),
InvalidCoseStructure(),
InvalidMethodMultipleAgents(),
DirectAlgMultipleRecipientsError(),
CryptoStackError(error::ErrorStack),
CryptoKeyError(aes::KeyError),
CryptoError(error::Error),
IoError(io::Error),
EncodeError(EncodeError),
DecodeError(DecodeError),
#[cfg(feature = "json")]
HexError(FromHexError),
#[cfg(feature = "json")]
SerdeJsonError(Error),
}
impl From<error::ErrorStack> for CoseError {
fn from(err: error::ErrorStack) -> CoseError {
CoseError::CryptoStackError(err)
}
}
impl From<error::Error> for CoseError {
fn from(err: error::Error) -> CoseError {
CoseError::CryptoError(err)
}
}
impl From<aes::KeyError> for CoseError {
fn from(err: aes::KeyError) -> CoseError {
CoseError::CryptoKeyError(err)
}
}
impl From<io::Error> for CoseError {
fn from(err: io::Error) -> CoseError {
CoseError::IoError(err)
}
}
impl From<EncodeError> for CoseError {
fn from(err: EncodeError) -> CoseError {
CoseError::EncodeError(err)
}
}
impl From<DecodeError> for CoseError {
fn from(err: DecodeError) -> CoseError {
CoseError::DecodeError(err)
}
}
#[cfg(feature = "json")]
impl From<FromHexError> for CoseError {
fn from(err: FromHexError) -> CoseError {
CoseError::HexError(err)
}
}
#[cfg(feature = "json")]
impl From<Error> for CoseError {
fn from(err: Error) -> CoseError {
CoseError::SerdeJsonError(err)
}
}