From 36255bfbb4d48752025e8a1a52b690c2f029dca3 Mon Sep 17 00:00:00 2001 From: "Aode (lion)" Date: Fri, 19 Nov 2021 17:54:54 -0600 Subject: [PATCH] Digest: add verify methods --- apub-core/src/digest.rs | 2 ++ apub-openssl/src/lib.rs | 10 ++++++++++ apub-rustcrypto/src/lib.rs | 10 ++++++++++ 3 files changed, 22 insertions(+) diff --git a/apub-core/src/digest.rs b/apub-core/src/digest.rs index 4709868..cbb6cc6 100644 --- a/apub-core/src/digest.rs +++ b/apub-core/src/digest.rs @@ -3,6 +3,8 @@ pub trait Digest { fn build() -> Self; fn digest(self, input: &[u8]) -> String; + fn update(&mut self, input: &[u8]); + fn verify(self, encoded: &str) -> bool; } pub trait DigestFactory { diff --git a/apub-openssl/src/lib.rs b/apub-openssl/src/lib.rs index e01f0b8..e6df060 100644 --- a/apub-openssl/src/lib.rs +++ b/apub-openssl/src/lib.rs @@ -51,6 +51,16 @@ impl<'a> apub_core::digest::Digest for OpenSslDigest { openssl::base64::encode_block(&bytes) } + + fn update(&mut self, input: &[u8]) { + self.digest.update(input); + } + + fn verify(self, encoded: &str) -> bool { + let bytes = self.digest.finish(); + + openssl::base64::encode_block(&bytes) == encoded + } } impl apub_core::signature::Sign for OpenSslSigner { diff --git a/apub-rustcrypto/src/lib.rs b/apub-rustcrypto/src/lib.rs index 0ba5196..d97496f 100644 --- a/apub-rustcrypto/src/lib.rs +++ b/apub-rustcrypto/src/lib.rs @@ -60,6 +60,16 @@ impl apub_core::digest::Digest for Sha256Digest { base64::encode(&bytes) } + + fn update(&mut self, input: &[u8]) { + self.digest.update(input); + } + + fn verify(self, encoded: &str) -> bool { + let bytes = self.digest.finalize(); + + base64::encode(&bytes) == encoded + } } impl apub_core::signature::Sign for RsaSigner {