@@ -265,7 +265,7 @@ macro_rules! blake2_mac_impl {
265265 core: $hash,
266266 buffer: LazyBuffer <<$hash as BlockSizeUser >:: BlockSize >,
267267 #[ cfg( feature = "reset" ) ]
268- key_block: Block <$hash >,
268+ key_block: Key < Self >,
269269 _out: PhantomData <OutSize >,
270270 }
271271
@@ -291,14 +291,17 @@ macro_rules! blake2_mac_impl {
291291 if kl > bs || salt. len( ) > qbs || persona. len( ) > qbs {
292292 return Err ( InvalidLength ) ;
293293 }
294- let mut key_block = Block :: <$hash>:: default ( ) ;
295- key_block[ ..kl] . copy_from_slice( key) ;
296- let buffer = LazyBuffer :: new( & key_block) ;
294+ let mut padded_key = Block :: <$hash>:: default ( ) ;
295+ padded_key[ ..kl] . copy_from_slice( key) ;
297296 Ok ( Self {
298297 core: <$hash>:: new_with_params( salt, persona, key. len( ) , OutSize :: USIZE ) ,
299- buffer,
298+ buffer: LazyBuffer :: new ( & padded_key ) ,
300299 #[ cfg( feature = "reset" ) ]
301- key_block,
300+ key_block: {
301+ let mut t = Key :: <Self >:: default ( ) ;
302+ t[ ..kl] . copy_from_slice( key) ;
303+ t
304+ } ,
302305 _out: PhantomData ,
303306 } )
304307 }
@@ -309,7 +312,7 @@ macro_rules! blake2_mac_impl {
309312 OutSize : ArrayLength <u8 > + IsLessOrEqual <$max_size>,
310313 LeEq <OutSize , $max_size>: NonZero ,
311314 {
312- type KeySize = <$hash as BlockSizeUser > :: BlockSize ;
315+ type KeySize = $max_size ;
313316 }
314317
315318 impl <OutSize > KeyInit for $name<OutSize >
@@ -318,9 +321,12 @@ macro_rules! blake2_mac_impl {
318321 LeEq <OutSize , $max_size>: NonZero ,
319322 {
320323 fn new( key: & Key <Self >) -> Self {
324+ let kl = key. len( ) ;
325+ let mut padded_key = Block :: <$hash>:: default ( ) ;
326+ padded_key[ ..kl] . copy_from_slice( key) ;
321327 Self {
322328 core: <$hash>:: new_with_params( key, & [ ] , key. len( ) , OutSize :: USIZE ) ,
323- buffer: LazyBuffer :: new( key ) ,
329+ buffer: LazyBuffer :: new( & padded_key ) ,
324330 #[ cfg( feature = "reset" ) ]
325331 key_block: key. clone( ) ,
326332 _out: PhantomData ,
@@ -329,16 +335,20 @@ macro_rules! blake2_mac_impl {
329335
330336 fn new_from_slice( key: & [ u8 ] ) -> Result <Self , InvalidLength > {
331337 let kl = key. len( ) ;
332- if kl > <$hash as BlockSizeUser >:: BlockSize :: USIZE {
338+ if kl > <Self as KeySizeUser >:: KeySize :: USIZE {
333339 return Err ( InvalidLength ) ;
334340 }
335- let mut key_block = Block :: <$hash>:: default ( ) ;
336- key_block [ ..kl] . copy_from_slice( key) ;
341+ let mut padded_key = Block :: <$hash>:: default ( ) ;
342+ padded_key [ ..kl] . copy_from_slice( key) ;
337343 Ok ( Self {
338344 core: <$hash>:: new_with_params( & [ ] , & [ ] , key. len( ) , OutSize :: USIZE ) ,
339- buffer: LazyBuffer :: new( & key_block ) ,
345+ buffer: LazyBuffer :: new( & padded_key ) ,
340346 #[ cfg( feature = "reset" ) ]
341- key_block,
347+ key_block: {
348+ let mut t = Key :: <Self >:: default ( ) ;
349+ t[ ..kl] . copy_from_slice( key) ;
350+ t
351+ } ,
342352 _out: PhantomData ,
343353 } )
344354 }
@@ -386,7 +396,10 @@ macro_rules! blake2_mac_impl {
386396 {
387397 fn reset( & mut self ) {
388398 self . core. reset( ) ;
389- self . buffer = LazyBuffer :: new( & self . key_block) ;
399+ let kl = self . key_block. len( ) ;
400+ let mut padded_key = Block :: <$hash>:: default ( ) ;
401+ padded_key[ ..kl] . copy_from_slice( & self . key_block) ;
402+ self . buffer = LazyBuffer :: new( & padded_key) ;
390403 }
391404 }
392405
@@ -398,17 +411,11 @@ macro_rules! blake2_mac_impl {
398411 {
399412 #[ inline]
400413 fn finalize_into_reset( & mut self , out: & mut Output <Self >) {
401- let Self {
402- core,
403- buffer,
404- key_block,
405- ..
406- } = self ;
414+ let Self { core, buffer, .. } = self ;
407415 let mut full_res = Default :: default ( ) ;
408416 core. finalize_variable_core( buffer, & mut full_res) ;
409417 out. copy_from_slice( & full_res[ ..OutSize :: USIZE ] ) ;
410- core. reset( ) ;
411- * buffer = LazyBuffer :: new( key_block) ;
418+ self . reset( ) ;
412419 }
413420 }
414421
0 commit comments