1use crypto_core::Algorithm;
6use crypto_dispatch::AlgorithmError;
7use thiserror::Error;
8
9#[derive(Debug, Clone, Copy, PartialEq, Eq)]
11#[non_exhaustive]
12pub enum SignerFailureKind {
13 DispatchRejected,
15}
16
17impl core::fmt::Display for SignerFailureKind {
18 fn fmt(&self, formatter: &mut core::fmt::Formatter<'_>) -> core::fmt::Result {
19 let detail = match self {
20 SignerFailureKind::DispatchRejected => "dispatch rejected signing request",
21 };
22 write!(formatter, "{detail}")
23 }
24}
25
26#[derive(Debug, Error)]
28#[non_exhaustive]
29pub enum SignerError {
30 #[error("signer failed for {algorithm}: {kind}")]
32 SignFailed {
33 algorithm: Algorithm,
35 kind: SignerFailureKind,
37 #[source]
39 source: AlgorithmError,
40 },
41}
42
43#[derive(Debug, Clone, Copy, PartialEq, Eq)]
45#[non_exhaustive]
46pub enum VerifierFailureKind {
47 SignatureInvalid,
49 DispatchRejected,
52}
53
54impl core::fmt::Display for VerifierFailureKind {
55 fn fmt(&self, formatter: &mut core::fmt::Formatter<'_>) -> core::fmt::Result {
56 let detail = match self {
57 VerifierFailureKind::SignatureInvalid => "signature invalid",
58 VerifierFailureKind::DispatchRejected => "dispatch rejected verification request",
59 };
60 write!(formatter, "{detail}")
61 }
62}
63
64#[derive(Debug, Error)]
66#[non_exhaustive]
67pub enum VerifierError {
68 #[error("verification failed for {algorithm}: {kind}")]
70 VerifyFailed {
71 algorithm: Algorithm,
73 kind: VerifierFailureKind,
75 #[source]
77 source: AlgorithmError,
78 },
79}
80
81impl VerifierError {
82 pub fn is_signature_invalid(&self) -> bool {
85 matches!(
86 self,
87 VerifierError::VerifyFailed {
88 kind: VerifierFailureKind::SignatureInvalid,
89 ..
90 }
91 )
92 }
93}