diff options
Diffstat (limited to 'src/lib.rs')
-rw-r--r-- | src/lib.rs | 23 |
1 files changed, 10 insertions, 13 deletions
@@ -579,16 +579,13 @@ fn cipher_aez_core(mode: Mode, aez: &Aez, tweaks: Tweak, message: &mut [u8]) { blocks.set_m_y(c_y); } -fn pad_to_blocks(value: &[u8]) -> Vec<Block> { - let mut blocks = Vec::new(); - for chunk in value.chunks(16) { - if chunk.len() == 16 { - blocks.push(Block::from_slice(chunk)); +fn pad_to_blocks(value: &[u8]) -> impl Iterator<Item=Block> { + value.chunks(16) + .map(|chunk| if chunk.len() == 16 { + Block::from_slice(chunk) } else { - blocks.push(Block::from_slice(chunk).pad(chunk.len() * 8)); - } - } - blocks + Block::from_slice(chunk).pad(chunk.len() * 8) + }) } fn aez_hash(aez: &Aez, tweaks: Tweak) -> Block { @@ -609,12 +606,12 @@ fn aez_hash(aez: &Aez, tweaks: Tweak) -> Block { } } else { let blocks = pad_to_blocks(tweak); - for (l, chunk) in blocks.iter().enumerate() { + for (l, chunk) in blocks.enumerate() { ej.advance(); - if l == blocks.len() - 1 { - hash = hash ^ e(j.try_into().unwrap(), 0, aez, *chunk); + if l == tweak.len() / 16 { + hash = hash ^ e(j.try_into().unwrap(), 0, aez, chunk); } else { - hash = hash ^ ej.eval(*chunk); + hash = hash ^ ej.eval(chunk); } } } |