openssl: update to builder traits, borrowed digest

This commit is contained in:
Aode (lion) 2021-11-20 13:16:48 -06:00
parent 643b9c0e3d
commit 77eed29eea

View file

@ -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<bool, Self::Error> {
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<Self, Self::Error>
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<bool, Self::Error> {
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 {