use crate::error::Error;
#[cfg(feature = "digest")]
use crate::digest::Update;
pub trait Verifier<S> {
fn verify(&self, msg: &[u8], signature: &S) -> Result<(), Error>;
}
pub trait MultipartVerifier<S> {
fn multipart_verify(&self, msg: &[&[u8]], signature: &S) -> Result<(), Error>;
}
#[cfg(feature = "digest")]
pub trait DigestVerifier<D: Update, S> {
fn verify_digest<F: Fn(&mut D) -> Result<(), Error>>(
&self,
f: F,
signature: &S,
) -> Result<(), Error>;
}
pub trait AsyncVerifier<S> {
async fn verify_async(&self, msg: &[u8], signature: &S) -> Result<(), Error>;
}
impl<S, T> AsyncVerifier<S> for T
where
T: Verifier<S>,
{
async fn verify_async(&self, msg: &[u8], signature: &S) -> Result<(), Error> {
self.verify(msg, signature)
}
}
pub trait AsyncMultipartVerifier<S> {
async fn multipart_verify_async(&self, msg: &[&[u8]], signature: &S) -> Result<(), Error>;
}
impl<S, T> AsyncMultipartVerifier<S> for T
where
T: MultipartVerifier<S>,
{
async fn multipart_verify_async(&self, msg: &[&[u8]], signature: &S) -> Result<(), Error> {
self.multipart_verify(msg, signature)
}
}
#[cfg(feature = "digest")]
pub trait AsyncDigestVerifier<D: Update, S> {
async fn verify_digest_async<F: AsyncFn(&mut D) -> Result<(), Error>>(
&self,
f: F,
signature: &S,
) -> Result<(), Error>;
}