@@ -2,7 +2,6 @@ use std::convert::TryFrom;
22
33use blake2b_simd:: { Params as Blake2bParams , State as Blake2b } ;
44use blake2s_simd:: { Params as Blake2sParams , State as Blake2s } ;
5- use digest:: Digest ;
65
76use crate :: digests:: { wrap, Multihash , MultihashDigest , Multihasher } ;
87use crate :: errors:: DecodeError ;
@@ -81,7 +80,7 @@ macro_rules! derive_digest {
8180 /// Hash some input and return the Multihash digest.
8281 #[ inline]
8382 pub fn digest( data: & [ u8 ] ) -> Multihash {
84- let digest = <$type>:: digest( & data) ;
83+ let digest = <$type as digest :: Digest >:: digest( & data) ;
8584 wrap( Self :: CODE , & digest)
8685 }
8786 }
@@ -103,19 +102,19 @@ macro_rules! derive_digest {
103102 }
104103 #[ inline]
105104 fn input( & mut self , data: & [ u8 ] ) {
106- self . 0 . input ( data)
105+ <$type as digest :: Digest > :: update ( & mut self . 0 , data)
107106 }
108107 #[ inline]
109108 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( ) )
111110 }
112111 #[ inline]
113112 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( ) )
115114 }
116115 #[ inline]
117116 fn reset( & mut self ) {
118- self . 0 . reset ( )
117+ <$type as digest :: Digest > :: reset ( & mut self . 0 )
119118 }
120119 }
121120 impl :: std:: io:: Write for $name {
@@ -212,7 +211,7 @@ macro_rules! derive_digest {
212211 ) * ) => {
213212 $(
214213 #[ $doc]
215- #[ derive( Clone , Debug ) ]
214+ #[ derive( Clone , Debug , Default ) ]
216215 pub struct $name( $type) ;
217216 impl $name {
218217 #[ doc = $code_doc]
@@ -230,11 +229,6 @@ macro_rules! derive_digest {
230229 Self :: digest( data)
231230 }
232231 }
233- impl Default for $name {
234- fn default ( ) -> Self {
235- $name( blake3:: Hasher :: new( ) )
236- }
237- }
238232 impl MultihashDigest <Code > for $name {
239233 #[ inline]
240234 fn code( & self ) -> Code {
@@ -321,6 +315,17 @@ impl_code! {
321315/// The Identity hasher.
322316#[ derive( Clone , Debug , Default ) ]
323317pub 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+ }
324329impl Multihasher < Code > for Identity {
325330 const CODE : Code = Code :: Identity ;
326331 #[ inline]
@@ -359,15 +364,15 @@ impl MultihashDigest<Code> for Identity {
359364 self . 0 . clear ( )
360365 }
361366}
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 ( ( ) )
371376 }
372377}
373378
0 commit comments