diff --git a/apub-openssl/src/lib.rs b/apub-openssl/src/lib.rs index e6df060..4c14aed 100644 --- a/apub-openssl/src/lib.rs +++ b/apub-openssl/src/lib.rs @@ -36,18 +36,12 @@ impl OpenSsl { } } -impl<'a> apub_core::digest::Digest for OpenSslDigest { +impl apub_core::digest::Digest for OpenSslDigest { const NAME: &'static str = "SHA-256"; - fn build() -> Self { - OpenSslDigest { - digest: Sha256::new(), - } - } - - fn digest(mut self, input: &[u8]) -> String { + fn digest(&mut self, input: &[u8]) -> String { self.digest.update(input); - let bytes = self.digest.finish(); + let bytes = self.digest.clone().finish(); openssl::base64::encode_block(&bytes) } @@ -56,13 +50,21 @@ impl<'a> apub_core::digest::Digest for OpenSslDigest { self.digest.update(input); } - fn verify(self, encoded: &str) -> bool { - let bytes = self.digest.finish(); + fn verify(&mut self, encoded: &str) -> bool { + let bytes = self.digest.clone().finish(); openssl::base64::encode_block(&bytes) == encoded } } +impl apub_core::digest::DigestBuilder for OpenSslDigest { + fn build() -> Self { + OpenSslDigest { + digest: Sha256::new(), + } + } +} + impl apub_core::signature::Sign for OpenSslSigner { type Error = ErrorStack; @@ -77,6 +79,14 @@ impl apub_core::signature::Sign for OpenSslSigner { impl apub_core::signature::Verify for OpenSslVerifier { type Error = ErrorStack; + fn verify(&self, signing_string: &str, signature: &str) -> Result { + let mut verifier = Verifier::new(MessageDigest::sha256(), &self.public_key)?; + verifier.update(signing_string.as_bytes())?; + Ok(verifier.verify(&openssl::base64::decode_block(&signature)?)?) + } +} + +impl apub_core::signature::VerifyBuilder for OpenSslVerifier { fn build(public_key_pem: &str) -> Result where Self: Sized, @@ -85,12 +95,6 @@ impl apub_core::signature::Verify for OpenSslVerifier { public_key: PKey::public_key_from_pem(public_key_pem.as_bytes())?, }) } - - fn verify(&self, signing_string: &str, signature: &str) -> Result { - let mut verifier = Verifier::new(MessageDigest::sha256(), &self.public_key)?; - verifier.update(signing_string.as_bytes())?; - Ok(verifier.verify(&openssl::base64::decode_block(&signature)?)?) - } } impl apub_core::digest::DigestFactory for OpenSsl {