use thiserror::Error;
use crate::crypto::{
cose::{CertificateProfileError, CertificateTrustError},
raw_signature::{RawSignatureValidationError, RawSignerError},
time_stamp::TimeStampError,
};
#[derive(Debug, Error)]
pub enum CoseError {
#[error("missing signing certificate chain")]
MissingSigningCertificateChain,
#[error("multiple signing certificate chains detected")]
MultipleSigningCertificateChains,
#[error("no time stamp token found in sigTst or sigTst2 header")]
NoTimeStampToken,
#[error("the certificate was signed using an unsupported signature algorithm")]
UnsupportedSigningAlgorithm,
#[error("could not parse ECDSA signature")]
InvalidEcdsaSignature,
#[error("error while parsing CBOR ({0})")]
CborParsingError(String),
#[error("error while generating CBOR ({0})")]
CborGenerationError(String),
#[error(transparent)]
TimeStampError(#[from] TimeStampError),
#[error(transparent)]
CertificateProfileError(#[from] CertificateProfileError),
#[error(transparent)]
CertificateTrustError(#[from] CertificateTrustError),
#[error("the signature box is too small")]
BoxSizeTooSmall,
#[error(transparent)]
RawSignerError(#[from] RawSignerError),
#[error(transparent)]
RawSignatureValidationError(#[from] RawSignatureValidationError),
#[error("internal error ({0})")]
InternalError(String),
}