@@ -294,38 +294,46 @@ where
294
294
subkeys : & Array < DeoxysKey , B :: SubkeysSize > ,
295
295
tag : & mut Tag ,
296
296
) {
297
- if !buffer. is_empty ( ) {
298
- tweak[ 0 ] = TWEAK_M ;
297
+ if buffer. is_empty ( ) {
298
+ return ;
299
+ }
300
+ tweak[ 0 ] = TWEAK_M ;
299
301
300
- for ( index, data) in buffer. chunks ( 16 ) . enumerate ( ) {
301
- // Copy block number
302
- tweak[ 8 ..] . copy_from_slice ( & ( index as u64 ) . to_be_bytes ( ) ) ;
302
+ let ( chunks, tail) = Block :: slice_as_chunks ( buffer) ;
303
303
304
- if data . len ( ) == 16 {
305
- let mut block = Block :: default ( ) ;
306
- block . copy_from_slice ( data ) ;
304
+ for ( index , data ) in chunks . iter ( ) . enumerate ( ) {
305
+ // Copy block number
306
+ tweak [ 8 .. ] . copy_from_slice ( & ( index as u64 ) . to_be_bytes ( ) ) ;
307
307
308
- B :: encrypt_in_place ( & mut block, tweak, subkeys) ;
308
+ let mut block = * data;
309
+ B :: encrypt_in_place ( & mut block, tweak, subkeys) ;
309
310
310
- for ( t, b) in tag. iter_mut ( ) . zip ( block. iter ( ) ) {
311
- * t ^= b;
312
- }
313
- } else {
314
- // Last block
315
- tweak[ 0 ] = TWEAK_M_LAST ;
311
+ for ( t, b) in tag. iter_mut ( ) . zip ( block. iter ( ) ) {
312
+ * t ^= b;
313
+ }
314
+ }
316
315
317
- let mut block = Block :: default ( ) ;
318
- block[ 0 ..data. len ( ) ] . copy_from_slice ( data) ;
316
+ let index = chunks. len ( ) ;
317
+ let data = tail;
318
+ if data. is_empty ( ) {
319
+ return ;
320
+ }
319
321
320
- block[ data. len ( ) ] = 0x80 ;
322
+ // Copy block number
323
+ tweak[ 8 ..] . copy_from_slice ( & ( index as u64 ) . to_be_bytes ( ) ) ;
321
324
322
- B :: encrypt_in_place ( & mut block, tweak, subkeys) ;
325
+ // Last block
326
+ tweak[ 0 ] = TWEAK_M_LAST ;
323
327
324
- for ( t, b) in tag. iter_mut ( ) . zip ( block. iter ( ) ) {
325
- * t ^= b;
326
- }
327
- }
328
- }
328
+ let mut block = Block :: default ( ) ;
329
+ block[ 0 ..data. len ( ) ] . copy_from_slice ( data) ;
330
+
331
+ block[ data. len ( ) ] = 0x80 ;
332
+
333
+ B :: encrypt_in_place ( & mut block, tweak, subkeys) ;
334
+
335
+ for ( t, b) in tag. iter_mut ( ) . zip ( block. iter ( ) ) {
336
+ * t ^= b;
329
337
}
330
338
}
331
339
0 commit comments