5
5
#![ no_std]
6
6
7
7
extern crate block_buffer;
8
- extern crate byte_tools;
9
8
pub extern crate digest;
10
9
11
10
mod consts;
12
11
12
+ use block_buffer:: BlockBuffer ;
13
13
use core:: mem;
14
14
use digest:: generic_array:: GenericArray ;
15
15
pub use digest:: Digest ;
@@ -24,11 +24,11 @@ struct State<T> {
24
24
}
25
25
26
26
macro_rules! define_compressor {
27
- ( $compressor: ident, $word: ident, $buf : expr , $deserializer: ident , $uval: expr,
27
+ ( $compressor: ident, $word: ident, $Bufsz : ty , $deserializer: path , $uval: expr,
28
28
$rounds: expr, $shift0: expr, $shift1: expr, $shift2: expr, $shift3: expr) => {
29
29
#[ derive( Clone , Copy , Debug ) ]
30
30
struct $compressor {
31
- state: State <$word>
31
+ state: State <$word>,
32
32
}
33
33
34
34
impl $compressor {
@@ -38,7 +38,7 @@ macro_rules! define_compressor {
38
38
if carry { self . state. t[ 1 ] += 1 ; }
39
39
}
40
40
41
- fn put_block( & mut self , block: & [ u8 ; $buf ] ) {
41
+ fn put_block( & mut self , block: & GenericArray < u8 , $Bufsz> ) {
42
42
const U : [ $word; 16 ] = $uval;
43
43
44
44
#[ inline( always) ]
@@ -102,12 +102,12 @@ macro_rules! define_compressor {
102
102
}
103
103
104
104
macro_rules! define_hasher {
105
- ( $name: ident, $word: ident, $buf: expr, $Buffer : ident , $bits: expr, $Bytes: ident,
106
- $serializer: ident , $compressor: ident, $iv: expr) => {
107
- #[ derive( Clone , Copy ) ]
105
+ ( $name: ident, $word: ident, $buf: expr, $Bufsz : ty , $bits: expr, $Bytes: ident,
106
+ $serializer: path , $compressor: ident, $iv: expr) => {
107
+ #[ derive( Clone ) ]
108
108
pub struct $name {
109
109
compressor: $compressor,
110
- buffer: $Buffer
110
+ buffer: BlockBuffer <$Bufsz> ,
111
111
}
112
112
113
113
impl core:: fmt:: Debug for $name {
@@ -130,7 +130,7 @@ macro_rules! define_hasher {
130
130
nullt: false ,
131
131
}
132
132
} ,
133
- buffer: $Buffer :: default ( )
133
+ buffer: BlockBuffer :: default ( ) ,
134
134
}
135
135
}
136
136
}
@@ -140,9 +140,9 @@ macro_rules! define_hasher {
140
140
}
141
141
142
142
impl digest:: Input for $name {
143
- fn process ( & mut self , data: & [ u8 ] ) {
143
+ fn input< T : AsRef < [ u8 ] >> ( & mut self , data: T ) {
144
144
let compressor = & mut self . compressor;
145
- self . buffer. input( data, |block| {
145
+ self . buffer. input( data. as_ref ( ) , |block| {
146
146
compressor. increase_count( ( mem:: size_of:: <$word>( ) * 16 ) as $word) ;
147
147
compressor. put_block( block) ;
148
148
} ) ;
@@ -196,33 +196,35 @@ macro_rules! define_hasher {
196
196
out
197
197
}
198
198
}
199
- }
199
+
200
+ impl digest:: Reset for $name {
201
+ fn reset( & mut self ) {
202
+ * self = Self :: default ( )
203
+ }
204
+ }
205
+ } ;
200
206
}
201
207
202
- use block_buffer:: { BlockBuffer1024 , BlockBuffer512 } ;
203
- use byte_tools :: { read_u32_be , read_u64_be , write_u32_be , write_u64_be } ;
204
- use consts :: { BLAKE224_IV , BLAKE256_IV , BLAKE256_U , BLAKE384_IV , BLAKE512_IV , BLAKE512_U , PADDING ,
205
- SIGMA } ;
206
- use digest:: generic_array:: typenum:: { U28 , U32 , U48 , U64 } ;
208
+ use block_buffer:: byteorder :: { ByteOrder , BE } ;
209
+ use consts :: {
210
+ BLAKE224_IV , BLAKE256_IV , BLAKE256_U , BLAKE384_IV , BLAKE512_IV , BLAKE512_U , PADDING , SIGMA ,
211
+ } ;
212
+ use digest:: generic_array:: typenum:: { U128 , U28 , U32 , U48 , U64 } ;
207
213
208
214
#[ cfg_attr( rustfmt, rustfmt_skip) ]
209
- define_compressor ! ( Compressor256 , u32 , 64 , read_u32_be , BLAKE256_U , 14 , 16 , 12 , 8 , 7 ) ;
215
+ define_compressor ! ( Compressor256 , u32 , U64 , BE :: read_u32 , BLAKE256_U , 14 , 16 , 12 , 8 , 7 ) ;
210
216
211
217
#[ cfg_attr( rustfmt, rustfmt_skip) ]
212
- define_hasher ! (
213
- Blake224 , u32 , 64 , BlockBuffer512 , 224 , U28 , write_u32_be, Compressor256 , BLAKE224_IV ) ;
218
+ define_hasher ! ( Blake224 , u32 , 64 , U64 , 224 , U28 , BE :: write_u32, Compressor256 , BLAKE224_IV ) ;
214
219
215
220
#[ cfg_attr( rustfmt, rustfmt_skip) ]
216
- define_hasher ! (
217
- Blake256 , u32 , 64 , BlockBuffer512 , 256 , U32 , write_u32_be, Compressor256 , BLAKE256_IV ) ;
221
+ define_hasher ! ( Blake256 , u32 , 64 , U64 , 256 , U32 , BE :: write_u32, Compressor256 , BLAKE256_IV ) ;
218
222
219
223
#[ cfg_attr( rustfmt, rustfmt_skip) ]
220
- define_compressor ! ( Compressor512 , u64 , 128 , read_u64_be , BLAKE512_U , 16 , 32 , 25 , 16 , 11 ) ;
224
+ define_compressor ! ( Compressor512 , u64 , U128 , BE :: read_u64 , BLAKE512_U , 16 , 32 , 25 , 16 , 11 ) ;
221
225
222
226
#[ cfg_attr( rustfmt, rustfmt_skip) ]
223
- define_hasher ! (
224
- Blake384 , u64 , 128 , BlockBuffer1024 , 384 , U48 , write_u64_be, Compressor512 , BLAKE384_IV ) ;
227
+ define_hasher ! ( Blake384 , u64 , 128 , U128 , 384 , U48 , BE :: write_u64, Compressor512 , BLAKE384_IV ) ;
225
228
226
229
#[ cfg_attr( rustfmt, rustfmt_skip) ]
227
- define_hasher ! (
228
- Blake512 , u64 , 128 , BlockBuffer1024 , 512 , U64 , write_u64_be, Compressor512 , BLAKE512_IV ) ;
230
+ define_hasher ! ( Blake512 , u64 , 128 , U128 , 512 , U64 , BE :: write_u64, Compressor512 , BLAKE512_IV ) ;
0 commit comments