@@ -22,7 +22,7 @@ use std::{error, io};
22
22
#[ cfg( not( feature = "std" ) ) ]
23
23
use core2:: { error, io} ;
24
24
25
- use { hex, sha1, sha256, sha512, ripemd160, siphash24} ;
25
+ use { hex, sha1, sha256, sha512, ripemd160, siphash24, hmac } ;
26
26
use HashEngine ;
27
27
use Error ;
28
28
@@ -85,11 +85,20 @@ impl io::Write for siphash24::HashEngine {
85
85
}
86
86
}
87
87
88
+ impl < T : :: Hash > io:: Write for hmac:: HmacEngine < T > {
89
+ fn flush ( & mut self ) -> io:: Result < ( ) > { Ok ( ( ) ) }
90
+
91
+ fn write ( & mut self , buf : & [ u8 ] ) -> io:: Result < usize > {
92
+ self . input ( buf) ;
93
+ Ok ( buf. len ( ) )
94
+ }
95
+ }
96
+
88
97
#[ cfg( test) ]
89
98
mod tests {
90
99
use super :: io:: Write ;
91
100
92
- use { sha1, sha256, sha256d, sha512, ripemd160, hash160, siphash24} ;
101
+ use { sha1, sha256, sha256d, sha512, ripemd160, hash160, siphash24, hmac } ;
93
102
use Hash ;
94
103
95
104
macro_rules! write_test {
@@ -171,4 +180,28 @@ mod tests {
171
180
"3a3ccefde9b5b1e3" ,
172
181
"ce456e4e4ecbc5bf" ,
173
182
) ;
183
+
184
+ #[ test]
185
+ fn hmac ( ) {
186
+ let mut engine = hmac:: HmacEngine :: < sha256:: Hash > :: new ( & [ 0xde , 0xad , 0xbe , 0xef ] ) ;
187
+ engine. write_all ( & [ ] ) . unwrap ( ) ;
188
+ assert_eq ! (
189
+ format!( "{}" , hmac:: Hmac :: from_engine( engine) ) ,
190
+ "bf5515149cf797955c4d3194cca42472883281951697c8375d9d9b107f384225"
191
+ ) ;
192
+
193
+ let mut engine = hmac:: HmacEngine :: < sha256:: Hash > :: new ( & [ 0xde , 0xad , 0xbe , 0xef ] ) ;
194
+ engine. write_all ( & [ 1 ; 256 ] ) . unwrap ( ) ;
195
+ assert_eq ! (
196
+ format!( "{}" , hmac:: Hmac :: from_engine( engine) ) ,
197
+ "59c9aca10c81c73cb4c196d94db741b6bf2050e0153d5a45f2526bff34675ac5"
198
+ ) ;
199
+
200
+ let mut engine = hmac:: HmacEngine :: < sha256:: Hash > :: new ( & [ 0xde , 0xad , 0xbe , 0xef ] ) ;
201
+ engine. write_all ( & [ 99 ; 64000 ] ) . unwrap ( ) ;
202
+ assert_eq ! (
203
+ format!( "{}" , hmac:: Hmac :: from_engine( engine) ) ,
204
+ "30df499717415a395379a1eaabe50038036e4abb5afc94aa55c952f4aa57be08"
205
+ ) ;
206
+ }
174
207
}
0 commit comments