aws_nitro_enclaves_cose/
error.rs1use std::error::Error;
4use std::fmt;
5
6use serde_cbor::Error as CborError;
7
8#[cfg(feature = "key_kms")]
9use aws_sdk_kms::{
10 error::SdkError, operation::get_public_key::GetPublicKeyError, operation::sign::SignError,
11 operation::verify::VerifyError,
12};
13
14#[derive(Debug)]
15pub enum CoseError {
17 EntropyError(Box<dyn Error>),
19 HashingError(Box<dyn Error>),
21 SignatureError(Box<dyn Error>),
23 UnimplementedError,
26 UnsupportedError(String),
29 UnverifiedSignature,
31 SpecificationError(String),
33 SerializationError(CborError),
35 TagError(Option<u64>),
37 EncryptionError(Box<dyn Error>),
39 #[cfg(feature = "key_tpm")]
41 TpmError(tss_esapi::Error),
42 #[cfg(feature = "key_kms")]
44 AwsSignError(SdkError<SignError>),
45 #[cfg(feature = "key_kms")]
47 AwsVerifyError(SdkError<VerifyError>),
48 #[cfg(all(feature = "key_kms", feature = "key_openssl_pkey"))]
50 AwsGetPublicKeyError(SdkError<GetPublicKeyError>),
51}
52
53impl fmt::Display for CoseError {
54 fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
55 match self {
56 CoseError::EntropyError(e) => write!(f, "Entropy error: {}", e),
57 CoseError::HashingError(e) => write!(f, "Hashing failed: {}", e),
58 CoseError::SignatureError(e) => write!(f, "Signature error: {}", e),
59 CoseError::UnimplementedError => write!(f, "Not implemented"),
60 CoseError::UnsupportedError(e) => write!(f, "Not supported: {}", e),
61 CoseError::UnverifiedSignature => write!(f, "Unverified signature"),
62 CoseError::SpecificationError(e) => write!(f, "Specification error: {}", e),
63 CoseError::SerializationError(e) => write!(f, "Serialization error: {}", e),
64 CoseError::TagError(Some(tag)) => write!(f, "Tag {} was not expected", tag),
65 CoseError::TagError(None) => write!(f, "Expected tag is missing"),
66 CoseError::EncryptionError(e) => write!(f, "Encryption error: {}", e),
67 #[cfg(feature = "key_tpm")]
68 CoseError::TpmError(e) => write!(f, "TPM error: {}", e),
69 #[cfg(feature = "key_kms")]
70 CoseError::AwsSignError(e) => write!(f, "AWS sign error: {}", e),
71 #[cfg(feature = "key_kms")]
72 CoseError::AwsVerifyError(e) => write!(f, "AWS verify error: {}", e),
73 #[cfg(all(feature = "key_kms", feature = "key_openssl_pkey"))]
74 CoseError::AwsGetPublicKeyError(e) => write!(f, "AWS GetPublicKey error: {}", e),
75 }
76 }
77}
78
79impl Error for CoseError {
80 fn source(&self) -> Option<&(dyn Error + 'static)> {
81 match self {
82 CoseError::SignatureError(e) => e.source(),
83 CoseError::SerializationError(e) => Some(e),
84 _ => None,
85 }
86 }
87}