@@ -2,7 +2,6 @@ use std::convert::TryFrom;
2
2
3
3
use blake2b_simd:: { Params as Blake2bParams , State as Blake2b } ;
4
4
use blake2s_simd:: { Params as Blake2sParams , State as Blake2s } ;
5
- use digest:: Digest ;
6
5
7
6
use crate :: digests:: { wrap, Multihash , MultihashDigest , Multihasher } ;
8
7
use crate :: errors:: DecodeError ;
@@ -81,7 +80,7 @@ macro_rules! derive_digest {
81
80
/// Hash some input and return the Multihash digest.
82
81
#[ inline]
83
82
pub fn digest( data: & [ u8 ] ) -> Multihash {
84
- let digest = <$type>:: digest( & data) ;
83
+ let digest = <$type as digest :: Digest >:: digest( & data) ;
85
84
wrap( Self :: CODE , & digest)
86
85
}
87
86
}
@@ -103,19 +102,19 @@ macro_rules! derive_digest {
103
102
}
104
103
#[ inline]
105
104
fn input( & mut self , data: & [ u8 ] ) {
106
- self . 0 . input ( data)
105
+ <$type as digest :: Digest > :: update ( & mut self . 0 , data)
107
106
}
108
107
#[ inline]
109
108
fn result( self ) -> Multihash {
110
- wrap( Self :: CODE , self . 0 . result ( ) . as_slice( ) )
109
+ wrap( Self :: CODE , <$type as digest :: Digest > :: finalize ( self . 0 ) . as_slice( ) )
111
110
}
112
111
#[ inline]
113
112
fn result_reset( & mut self ) -> Multihash {
114
- wrap( Self :: CODE , self . 0 . result_reset ( ) . as_slice( ) )
113
+ wrap( Self :: CODE , <$type as digest :: Digest > :: finalize_reset ( & mut self . 0 ) . as_slice( ) )
115
114
}
116
115
#[ inline]
117
116
fn reset( & mut self ) {
118
- self . 0 . reset ( )
117
+ <$type as digest :: Digest > :: reset ( & mut self . 0 )
119
118
}
120
119
}
121
120
impl :: std:: io:: Write for $name {
@@ -212,7 +211,7 @@ macro_rules! derive_digest {
212
211
) * ) => {
213
212
$(
214
213
#[ $doc]
215
- #[ derive( Clone , Debug ) ]
214
+ #[ derive( Clone , Debug , Default ) ]
216
215
pub struct $name( $type) ;
217
216
impl $name {
218
217
#[ doc = $code_doc]
@@ -230,11 +229,6 @@ macro_rules! derive_digest {
230
229
Self :: digest( data)
231
230
}
232
231
}
233
- impl Default for $name {
234
- fn default ( ) -> Self {
235
- $name( blake3:: Hasher :: new( ) )
236
- }
237
- }
238
232
impl MultihashDigest <Code > for $name {
239
233
#[ inline]
240
234
fn code( & self ) -> Code {
@@ -321,6 +315,17 @@ impl_code! {
321
315
/// The Identity hasher.
322
316
#[ derive( Clone , Debug , Default ) ]
323
317
pub struct Identity ( Vec < u8 > ) ;
318
+ impl Identity {
319
+ /// The code of the Identity hasher, 0x00.
320
+ pub const CODE : Code = Code :: Identity ;
321
+ /// Hash some input and return the raw binary digest.
322
+ pub fn digest ( data : & [ u8 ] ) -> Multihash {
323
+ if ( data. len ( ) as u64 ) >= u64:: from ( std:: u32:: MAX ) {
324
+ panic ! ( "Input data for identity hash is too large, it needs to be less than 2^32." )
325
+ }
326
+ wrap ( Self :: CODE , data)
327
+ }
328
+ }
324
329
impl Multihasher < Code > for Identity {
325
330
const CODE : Code = Code :: Identity ;
326
331
#[ inline]
@@ -359,15 +364,15 @@ impl MultihashDigest<Code> for Identity {
359
364
self . 0 . clear ( )
360
365
}
361
366
}
362
- impl Identity {
363
- /// The code of the Identity hasher, 0x00.
364
- pub const CODE : Code = Code :: Identity ;
365
- /// Hash some input and return the raw binary digest.
366
- pub fn digest ( data : & [ u8 ] ) -> Multihash {
367
- if ( data . len ( ) as u64 ) >= u64 :: from ( std :: u32 :: MAX ) {
368
- panic ! ( "Input data for identity hash is too large, it needs to be less than 2^32." )
369
- }
370
- wrap ( Self :: CODE , data )
367
+ impl :: std :: io :: Write for Identity {
368
+ # [ inline ]
369
+ fn write ( & mut self , buf : & [ u8 ] ) -> :: std :: io :: Result < usize > {
370
+ < Identity as MultihashDigest < Code > > :: input ( self , buf ) ;
371
+ Ok ( buf . len ( ) )
372
+ }
373
+ # [ inline ]
374
+ fn flush ( & mut self ) -> :: std :: io :: Result < ( ) > {
375
+ Ok ( ( ) )
371
376
}
372
377
}
373
378
0 commit comments