use crypto_core::Algorithm;
use crypto_dispatch::AlgorithmError;
use thiserror::Error;
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
#[non_exhaustive]
pub enum SignerFailureKind {
DispatchRejected,
}
impl core::fmt::Display for SignerFailureKind {
fn fmt(&self, formatter: &mut core::fmt::Formatter<'_>) -> core::fmt::Result {
let detail = match self {
SignerFailureKind::DispatchRejected => "dispatch rejected signing request",
};
write!(formatter, "{detail}")
}
}
#[derive(Debug, Error)]
#[non_exhaustive]
pub enum SignerError {
#[error("signer failed for {algorithm}: {kind}")]
SignFailed {
algorithm: Algorithm,
kind: SignerFailureKind,
#[source]
source: AlgorithmError,
},
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
#[non_exhaustive]
pub enum VerifierFailureKind {
SignatureInvalid,
DispatchRejected,
}
impl core::fmt::Display for VerifierFailureKind {
fn fmt(&self, formatter: &mut core::fmt::Formatter<'_>) -> core::fmt::Result {
let detail = match self {
VerifierFailureKind::SignatureInvalid => "signature invalid",
VerifierFailureKind::DispatchRejected => "dispatch rejected verification request",
};
write!(formatter, "{detail}")
}
}
#[derive(Debug, Error)]
#[non_exhaustive]
pub enum VerifierError {
#[error("verification failed for {algorithm}: {kind}")]
VerifyFailed {
algorithm: Algorithm,
kind: VerifierFailureKind,
#[source]
source: AlgorithmError,
},
}
impl VerifierError {
pub fn is_signature_invalid(&self) -> bool {
matches!(
self,
VerifierError::VerifyFailed {
kind: VerifierFailureKind::SignatureInvalid,
..
}
)
}
}