Skip to content

Commit 4ad9249

Browse files
committed
do not silently reinit after squeeze
1 parent 70496c9 commit 4ad9249

File tree

1 file changed

+12
-15
lines changed

1 file changed

+12
-15
lines changed

openssl/src/hash.rs

Lines changed: 12 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -281,8 +281,6 @@ impl Hasher {
281281
/// Feeds data into the hasher.
282282
pub fn update(&mut self, data: &[u8]) -> Result<(), ErrorStack> {
283283
match self.state {
284-
#[cfg(ossl330)]
285-
Squeeze => self.init()?,
286284
Finalized => self.init()?,
287285
_ => {}
288286
}
@@ -301,9 +299,6 @@ impl Hasher {
301299
/// The output will be as long as the buf.
302300
#[cfg(ossl330)]
303301
pub fn squeeze_xof(&mut self, buf: &mut [u8]) -> Result<(), ErrorStack> {
304-
if self.state == Finalized {
305-
self.init()?;
306-
}
307302
unsafe {
308303
cvt(ffi::EVP_DigestSqueeze(
309304
self.ctx,
@@ -318,8 +313,6 @@ impl Hasher {
318313
/// Returns the hash of the data written and resets the non-XOF hasher.
319314
pub fn finish(&mut self) -> Result<DigestBytes, ErrorStack> {
320315
match self.state {
321-
#[cfg(ossl330)]
322-
Squeeze => self.init()?,
323316
Finalized => self.init()?,
324317
_ => {}
325318
}
@@ -347,8 +340,6 @@ impl Hasher {
347340
#[cfg(ossl111)]
348341
pub fn finish_xof(&mut self, buf: &mut [u8]) -> Result<(), ErrorStack> {
349342
match self.state {
350-
#[cfg(ossl330)]
351-
Squeeze => self.init()?,
352343
Finalized => self.init()?,
353344
_ => {}
354345
}
@@ -595,9 +586,7 @@ mod tests {
595586
let mut h = Hasher::new(digest).unwrap();
596587
let mut buf = vec![0; digest.size()];
597588
h.finish_xof(&mut buf).unwrap();
598-
h.squeeze_xof(&mut buf).unwrap();
599-
let null = hash(digest, &[]).unwrap();
600-
assert_eq!(&*buf, &*null);
589+
h.squeeze_xof(&mut buf).expect_err("squeezing after finalize should fail");
601590
}
602591

603592
#[cfg(ossl330)]
@@ -608,10 +597,18 @@ mod tests {
608597
let mut h = Hasher::new(digest).unwrap();
609598
let mut buf = vec![0; digest.size()];
610599
h.squeeze_xof(&mut buf).unwrap();
611-
h.update(&data).unwrap();
600+
h.update(&data).expect_err("updating after squeeze should fail");
601+
}
602+
603+
#[cfg(ossl330)]
604+
#[test]
605+
fn test_squeeze_then_finalize() {
606+
let digest = MessageDigest::shake_128();
607+
let data = Vec::from_hex(MD5_TESTS[6].0).unwrap();
608+
let mut h = Hasher::new(digest).unwrap();
609+
let mut buf = vec![0; digest.size()];
612610
h.squeeze_xof(&mut buf).unwrap();
613-
let null = hash(digest, &data).unwrap();
614-
assert_eq!(&*buf, &*null);
611+
h.finish_xof(&mut buf).expect_err("finalize after squeeze should fail");
615612
}
616613

617614
#[test]

0 commit comments

Comments
 (0)