@@ -281,8 +281,6 @@ impl Hasher {
281
281
/// Feeds data into the hasher.
282
282
pub fn update ( & mut self , data : & [ u8 ] ) -> Result < ( ) , ErrorStack > {
283
283
match self . state {
284
- #[ cfg( ossl330) ]
285
- Squeeze => self . init ( ) ?,
286
284
Finalized => self . init ( ) ?,
287
285
_ => { }
288
286
}
@@ -301,9 +299,6 @@ impl Hasher {
301
299
/// The output will be as long as the buf.
302
300
#[ cfg( ossl330) ]
303
301
pub fn squeeze_xof ( & mut self , buf : & mut [ u8 ] ) -> Result < ( ) , ErrorStack > {
304
- if self . state == Finalized {
305
- self . init ( ) ?;
306
- }
307
302
unsafe {
308
303
cvt ( ffi:: EVP_DigestSqueeze (
309
304
self . ctx ,
@@ -318,8 +313,6 @@ impl Hasher {
318
313
/// Returns the hash of the data written and resets the non-XOF hasher.
319
314
pub fn finish ( & mut self ) -> Result < DigestBytes , ErrorStack > {
320
315
match self . state {
321
- #[ cfg( ossl330) ]
322
- Squeeze => self . init ( ) ?,
323
316
Finalized => self . init ( ) ?,
324
317
_ => { }
325
318
}
@@ -347,8 +340,6 @@ impl Hasher {
347
340
#[ cfg( ossl111) ]
348
341
pub fn finish_xof ( & mut self , buf : & mut [ u8 ] ) -> Result < ( ) , ErrorStack > {
349
342
match self . state {
350
- #[ cfg( ossl330) ]
351
- Squeeze => self . init ( ) ?,
352
343
Finalized => self . init ( ) ?,
353
344
_ => { }
354
345
}
@@ -595,9 +586,7 @@ mod tests {
595
586
let mut h = Hasher :: new ( digest) . unwrap ( ) ;
596
587
let mut buf = vec ! [ 0 ; digest. size( ) ] ;
597
588
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" ) ;
601
590
}
602
591
603
592
#[ cfg( ossl330) ]
@@ -608,10 +597,18 @@ mod tests {
608
597
let mut h = Hasher :: new ( digest) . unwrap ( ) ;
609
598
let mut buf = vec ! [ 0 ; digest. size( ) ] ;
610
599
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( ) ] ;
612
610
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" ) ;
615
612
}
616
613
617
614
#[ test]
0 commit comments