aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorDaniel Schadt <kingdread@gmx.de>2025-06-13 17:50:12 +0200
committerDaniel Schadt <kingdread@gmx.de>2025-06-13 17:50:12 +0200
commitd146075205d3115ebfb0cd560e224af47604f5c8 (patch)
tree3f14e3ffccc938ec86b7b10576b4f7251de532f0 /src
parent34cc371f5f47a4ce180bd81a3d7ecc3b53a3c67a (diff)
downloadzears-d146075205d3115ebfb0cd560e224af47604f5c8.tar.gz
zears-d146075205d3115ebfb0cd560e224af47604f5c8.tar.bz2
zears-d146075205d3115ebfb0cd560e224af47604f5c8.zip
don't (always) allocate in decrypt
This is the same thing we do in encrypt
Diffstat (limited to 'src')
-rw-r--r--src/lib.rs12
1 files changed, 10 insertions, 2 deletions
diff --git a/src/lib.rs b/src/lib.rs
index 908cc1f..e6c0c8d 100644
--- a/src/lib.rs
+++ b/src/lib.rs
@@ -359,8 +359,16 @@ fn decrypt<'a>(
let tau_block = Block::from_int(tau * 8);
let tau_bytes = tau_block.bytes();
- let mut tweaks = vec![&tau_bytes, nonce];
- tweaks.extend(ad);
+ let mut tweaks_vec;
+ let tweaks = match ad.len() {
+ 0 => &[&tau_bytes, nonce] as &[&[u8]],
+ 1 => &[&tau_bytes, nonce, ad[0]],
+ _ => {
+ tweaks_vec = vec![&tau_bytes, nonce];
+ tweaks_vec.extend(ad);
+ &tweaks_vec
+ }
+ };
if ciphertext.len() == tau as usize {
aez_prf(aez, &tweaks, ciphertext);