From e32b240ce2f4e573287744ecc5f41c547cbfce70 Mon Sep 17 00:00:00 2001 From: Kostas Chalkias Date: Thu, 4 Feb 2021 17:00:17 -0800 Subject: [PATCH] Reuse hashers by hasher.finalize_reset which is slightly faster than constructing the hasher object each time. --- src/key_exchange/tripledh.rs | 22 ++++++++++------------ src/map_to_curve.rs | 5 ++--- 2 files changed, 12 insertions(+), 15 deletions(-) diff --git a/src/key_exchange/tripledh.rs b/src/key_exchange/tripledh.rs index 61606b2..ce03567 100644 --- a/src/key_exchange/tripledh.rs +++ b/src/key_exchange/tripledh.rs @@ -129,19 +129,18 @@ impl KeyExchange for TripleDH { ] .concat(); - let mut hasher2 = D::new(); - hasher2.update(&transcript2); - let hashed_transcript_without_mac = hasher2.finalize(); + let mut hasher = D::new(); + hasher.update(&transcript2); + let hashed_transcript_without_mac = hasher.finalize_reset(); let mut mac_hasher = Hmac::::new_varkey(&km2).map_err(|_| InternalPakeError::HmacError)?; mac_hasher.update(&hashed_transcript_without_mac); let mac = mac_hasher.finalize().into_bytes(); - let mut hasher3 = D::new(); - hasher3.update(&transcript2); - hasher3.update(&mac); - let hashed_transcript = hasher3.finalize(); + hasher.update(&transcript2); + hasher.update(&mac); + let hashed_transcript = hasher.finalize(); Ok(( ke1_message.info, @@ -194,7 +193,7 @@ impl KeyExchange for TripleDH { let mut hasher = D::new(); hasher.update(&transcript); - let hashed_transcript_without_mac = hasher.finalize(); + let hashed_transcript_without_mac = hasher.finalize_reset(); let mut server_mac = Hmac::::new_varkey(&km2).map_err(|_| InternalPakeError::HmacError)?; @@ -206,10 +205,9 @@ impl KeyExchange for TripleDH { )); } - let mut hasher2 = D::new(); - hasher2.update(transcript); - hasher2.update(ke2_message.mac.to_vec()); - let hashed_transcript = hasher2.finalize(); + hasher.update(transcript); + hasher.update(ke2_message.mac.to_vec()); + let hashed_transcript = hasher.finalize(); let mut client_mac = Hmac::::new_varkey(&km3).map_err(|_| InternalPakeError::HmacError)?; diff --git a/src/map_to_curve.rs b/src/map_to_curve.rs index f3c5564..3875b88 100644 --- a/src/map_to_curve.rs +++ b/src/map_to_curve.rs @@ -84,17 +84,16 @@ pub(crate) fn expand_message_xmd( h.update(&b[0]); h.update(&i2osp(1, 1)); h.update(&dst_prime); - b.push(h.finalize().to_vec()); // b[1] + b.push(h.finalize_reset().to_vec()); // b[1] let mut uniform_bytes: Vec = Vec::new(); uniform_bytes.extend_from_slice(&b[1]); for i in 2..(ell + 1) { - let mut h = H::new(); h.update(xor(&b[0], &b[i - 1])?); h.update(&i2osp(i, 1)); h.update(&dst_prime); - b.push(h.finalize().to_vec()); // b[i] + b.push(h.finalize_reset().to_vec()); // b[i] uniform_bytes.extend_from_slice(&b[i]); }