Skip to content

Commit a324b49

Browse files
authored
deoxys: reorganize authenticate_message (#671)
This is split off from #666
1 parent c0e37f6 commit a324b49

File tree

1 file changed

+32
-24
lines changed

1 file changed

+32
-24
lines changed

deoxys/src/modes.rs

+32-24
Original file line numberDiff line numberDiff line change
@@ -294,38 +294,46 @@ where
294294
subkeys: &Array<DeoxysKey, B::SubkeysSize>,
295295
tag: &mut Tag,
296296
) {
297-
if !buffer.is_empty() {
298-
tweak[0] = TWEAK_M;
297+
if buffer.is_empty() {
298+
return;
299+
}
300+
tweak[0] = TWEAK_M;
299301

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);
303303

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());
307307

308-
B::encrypt_in_place(&mut block, tweak, subkeys);
308+
let mut block = *data;
309+
B::encrypt_in_place(&mut block, tweak, subkeys);
309310

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+
}
316315

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+
}
319321

320-
block[data.len()] = 0x80;
322+
// Copy block number
323+
tweak[8..].copy_from_slice(&(index as u64).to_be_bytes());
321324

322-
B::encrypt_in_place(&mut block, tweak, subkeys);
325+
// Last block
326+
tweak[0] = TWEAK_M_LAST;
323327

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;
329337
}
330338
}
331339

0 commit comments

Comments
 (0)