From bffab9953e00c344eca7d9da6c18eeba31d93841 Mon Sep 17 00:00:00 2001 From: therealyingtong Date: Wed, 21 Oct 2020 22:33:22 +0800 Subject: [PATCH] Conditionally squeeze scalar hasher before interacting with base hasher --- src/transcript.rs | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) diff --git a/src/transcript.rs b/src/transcript.rs index 3deab50..5fc5488 100644 --- a/src/transcript.rs +++ b/src/transcript.rs @@ -91,9 +91,19 @@ impl, HScalar: Hasher> } } + fn conditional_scalar_squeeze(&mut self) { + if self.scalar_needs_squeezing { + let transcript_scalar_point = + C::Base::from_bytes(&(self.scalar_hasher.squeeze()).to_bytes()).unwrap(); + self.base_hasher.absorb(transcript_scalar_point); + self.scalar_needs_squeezing = false; + } + } + /// Absorb a curve point into the transcript by absorbing /// its x and y coordinates pub fn absorb_point(&mut self, point: &C) -> Result<(), ()> { + self.conditional_scalar_squeeze(); let tmp = point.get_xy(); if bool::from(tmp.is_none()) { return Err(()); @@ -106,6 +116,7 @@ impl, HScalar: Hasher> /// Absorb a base into the base_hasher pub fn absorb_base(&mut self, base: C::Base) { + self.conditional_scalar_squeeze(); self.base_hasher.absorb(base); } @@ -117,13 +128,7 @@ impl, HScalar: Hasher> /// Squeeze the transcript to obtain a C::Base value. pub fn squeeze(&mut self) -> C::Base { - if self.scalar_needs_squeezing { - let transcript_scalar_point = - C::Base::from_bytes(&(self.scalar_hasher.squeeze()).to_bytes()).unwrap(); - self.base_hasher.absorb(transcript_scalar_point); - self.scalar_needs_squeezing = false; - } - + self.conditional_scalar_squeeze(); self.base_hasher.squeeze() } }