crypto_signer/
dispatch_verifier.rs1use crypto_core::Algorithm;
6use crypto_dispatch::AlgorithmError;
7
8use crate::{Verifier, VerifierError, VerifierFailureKind};
9
10#[derive(Debug)]
15pub struct DispatchVerifier {
16 alg: Algorithm,
17 public_key: Vec<u8>,
18}
19
20impl DispatchVerifier {
21 pub fn new(alg: Algorithm, public_key: Vec<u8>) -> Self {
23 Self { alg, public_key }
24 }
25
26 pub fn public_key(&self) -> &[u8] {
28 &self.public_key
29 }
30}
31
32impl Verifier for DispatchVerifier {
33 fn alg(&self) -> Algorithm {
34 self.alg
35 }
36
37 fn verify(&self, message: &[u8], signature: &[u8]) -> Result<(), VerifierError> {
38 crypto_dispatch::verify(self.alg, &self.public_key, message, signature).map_err(|source| {
39 let kind = match &source {
40 AlgorithmError::SignatureInvalid(_) => VerifierFailureKind::SignatureInvalid,
41 _ => VerifierFailureKind::DispatchRejected,
42 };
43 VerifierError::VerifyFailed {
44 algorithm: self.alg,
45 kind,
46 source,
47 }
48 })
49 }
50}