http-signature-normalization/warp/src/digest/sha_2.rs
2022-11-28 18:34:13 -06:00

31 lines
769 B
Rust

use super::{DigestPart, DigestVerify};
use sha2::Digest;
fn verify<D>(verifier: &mut D, parts: &[DigestPart], payload: &[u8], name: &str) -> bool
where
D: Digest,
{
let part = if let Some(part) = parts.iter().find(|p| p.algorithm == name) {
part
} else {
return false;
};
verifier.input(payload);
let computed = base64::encode(&verifier.result_reset());
computed == part.digest
}
impl DigestVerify for sha2::Sha256 {
fn verify(&mut self, digests: &[DigestPart], payload: &[u8]) -> bool {
verify(self, digests, payload, "sha-256")
}
}
impl DigestVerify for sha2::Sha512 {
fn verify(&mut self, digests: &[DigestPart], payload: &[u8]) -> bool {
verify(self, digests, payload, "sha-512")
}
}