mirror of
https://git.asonix.dog/asonix/http-signature-normalization.git
synced 2024-11-10 19:51:04 +00:00
154 lines
3.8 KiB
Rust
154 lines
3.8 KiB
Rust
|
use sha2::{Digest as _, Sha224, Sha256, Sha384, Sha512, Sha512Trunc224, Sha512Trunc256};
|
||
|
|
||
|
use super::{DigestCreate, DigestPart, DigestVerify};
|
||
|
|
||
|
impl DigestCreate for Sha224 {
|
||
|
const NAME: &'static str = "sha-224";
|
||
|
|
||
|
fn compute(&mut self, input: &[u8]) -> String {
|
||
|
self.input(input);
|
||
|
base64::encode(&self.result_reset())
|
||
|
}
|
||
|
}
|
||
|
|
||
|
impl DigestVerify for Sha224 {
|
||
|
fn verify(&mut self, parts: &[DigestPart], bytes: &[u8]) -> bool {
|
||
|
if let Some(part) = parts
|
||
|
.iter()
|
||
|
.find(|p| p.algorithm == <Self as DigestCreate>::NAME)
|
||
|
{
|
||
|
self.input(bytes);
|
||
|
let digest = base64::encode(&self.result_reset());
|
||
|
|
||
|
return part.digest == digest;
|
||
|
}
|
||
|
|
||
|
false
|
||
|
}
|
||
|
}
|
||
|
|
||
|
impl DigestCreate for Sha256 {
|
||
|
const NAME: &'static str = "sha-256";
|
||
|
|
||
|
fn compute(&mut self, input: &[u8]) -> String {
|
||
|
self.input(input);
|
||
|
base64::encode(&self.result_reset())
|
||
|
}
|
||
|
}
|
||
|
|
||
|
impl DigestVerify for Sha256 {
|
||
|
fn verify(&mut self, parts: &[DigestPart], bytes: &[u8]) -> bool {
|
||
|
if let Some(part) = parts
|
||
|
.iter()
|
||
|
.find(|p| p.algorithm == <Self as DigestCreate>::NAME)
|
||
|
{
|
||
|
self.input(bytes);
|
||
|
let digest = base64::encode(&self.result_reset());
|
||
|
|
||
|
return part.digest == digest;
|
||
|
}
|
||
|
|
||
|
false
|
||
|
}
|
||
|
}
|
||
|
|
||
|
impl DigestCreate for Sha384 {
|
||
|
const NAME: &'static str = "sha-384";
|
||
|
|
||
|
fn compute(&mut self, input: &[u8]) -> String {
|
||
|
self.input(input);
|
||
|
base64::encode(&self.result_reset())
|
||
|
}
|
||
|
}
|
||
|
|
||
|
impl DigestVerify for Sha384 {
|
||
|
fn verify(&mut self, parts: &[DigestPart], bytes: &[u8]) -> bool {
|
||
|
if let Some(part) = parts
|
||
|
.iter()
|
||
|
.find(|p| p.algorithm == <Self as DigestCreate>::NAME)
|
||
|
{
|
||
|
self.input(bytes);
|
||
|
let digest = base64::encode(&self.result_reset());
|
||
|
|
||
|
return part.digest == digest;
|
||
|
}
|
||
|
|
||
|
false
|
||
|
}
|
||
|
}
|
||
|
|
||
|
impl DigestCreate for Sha512 {
|
||
|
const NAME: &'static str = "sha-512";
|
||
|
|
||
|
fn compute(&mut self, input: &[u8]) -> String {
|
||
|
self.input(input);
|
||
|
base64::encode(&self.result_reset())
|
||
|
}
|
||
|
}
|
||
|
|
||
|
impl DigestVerify for Sha512 {
|
||
|
fn verify(&mut self, parts: &[DigestPart], bytes: &[u8]) -> bool {
|
||
|
if let Some(part) = parts
|
||
|
.iter()
|
||
|
.find(|p| p.algorithm == <Self as DigestCreate>::NAME)
|
||
|
{
|
||
|
self.input(bytes);
|
||
|
let digest = base64::encode(&self.result_reset());
|
||
|
|
||
|
return part.digest == digest;
|
||
|
}
|
||
|
|
||
|
false
|
||
|
}
|
||
|
}
|
||
|
|
||
|
impl DigestCreate for Sha512Trunc224 {
|
||
|
const NAME: &'static str = "sha-512-224";
|
||
|
|
||
|
fn compute(&mut self, input: &[u8]) -> String {
|
||
|
self.input(input);
|
||
|
base64::encode(&self.result_reset())
|
||
|
}
|
||
|
}
|
||
|
|
||
|
impl DigestVerify for Sha512Trunc224 {
|
||
|
fn verify(&mut self, parts: &[DigestPart], bytes: &[u8]) -> bool {
|
||
|
if let Some(part) = parts
|
||
|
.iter()
|
||
|
.find(|p| p.algorithm == <Self as DigestCreate>::NAME)
|
||
|
{
|
||
|
self.input(bytes);
|
||
|
let digest = base64::encode(&self.result_reset());
|
||
|
|
||
|
return part.digest == digest;
|
||
|
}
|
||
|
|
||
|
false
|
||
|
}
|
||
|
}
|
||
|
|
||
|
impl DigestCreate for Sha512Trunc256 {
|
||
|
const NAME: &'static str = "sha-512-256";
|
||
|
|
||
|
fn compute(&mut self, input: &[u8]) -> String {
|
||
|
self.input(input);
|
||
|
base64::encode(&self.result_reset())
|
||
|
}
|
||
|
}
|
||
|
|
||
|
impl DigestVerify for Sha512Trunc256 {
|
||
|
fn verify(&mut self, parts: &[DigestPart], bytes: &[u8]) -> bool {
|
||
|
if let Some(part) = parts
|
||
|
.iter()
|
||
|
.find(|p| p.algorithm == <Self as DigestCreate>::NAME)
|
||
|
{
|
||
|
self.input(bytes);
|
||
|
let digest = base64::encode(&self.result_reset());
|
||
|
|
||
|
return part.digest == digest;
|
||
|
}
|
||
|
|
||
|
false
|
||
|
}
|
||
|
}
|