Add a couple sodium_memzero

This commit is contained in:
Frank Denis
2026-03-08 14:49:53 +01:00
parent 678c8f3435
commit 35dad2e7b5
3 changed files with 57 additions and 0 deletions
@@ -97,6 +97,7 @@ aes_decrypt(uint8_t out[16], const uint8_t in[16], const BlockVec *rkeys)
}
t = AES_DECRYPTLAST(t, rkeys[0]);
STORE128(out, t);
sodium_memzero(rkeys_inv, sizeof rkeys_inv);
}
static BlockVec
@@ -142,6 +143,7 @@ aes_decrypt_with_tweak(uint8_t out[16], const uint8_t in[16], const uint8_t twea
}
t = AES_DECRYPTLAST(t, XOR128(tweak_block, rkeys[0]));
STORE128(out, t);
sodium_memzero(rkeys_inv, sizeof rkeys_inv);
}
static BlockVec
@@ -192,6 +194,7 @@ aes_xex_decrypt(uint8_t out[16], const uint8_t in[16], const uint8_t tweak[16],
}
t = AES_DECRYPTLAST(t, XOR128(rkeys[0], tt));
STORE128(out, t);
sodium_memzero(rkeys_inv, sizeof rkeys_inv);
}
static void
@@ -201,6 +204,7 @@ encrypt(uint8_t *out, const uint8_t *in, const uint8_t *k)
expand_key(rkeys, k);
aes_encrypt(out, in, rkeys);
sodium_memzero(rkeys, sizeof rkeys);
}
static void
@@ -210,6 +214,7 @@ decrypt(uint8_t *out, const uint8_t *in, const uint8_t *k)
expand_key(rkeys, k);
aes_decrypt(out, in, rkeys);
sodium_memzero(rkeys, sizeof rkeys);
}
static void
@@ -220,6 +225,7 @@ nd_encrypt(uint8_t *out, const uint8_t *in, const uint8_t *t, const uint8_t *k)
expand_key(rkeys, k);
memcpy(out, t, 8);
aes_encrypt_with_tweak(out + 8, in, t, rkeys);
sodium_memzero(rkeys, sizeof rkeys);
}
static void
@@ -229,6 +235,7 @@ nd_decrypt(uint8_t *out, const uint8_t *in, const uint8_t *k)
expand_key(rkeys, k);
aes_decrypt_with_tweak(out, in + 8, in, rkeys);
sodium_memzero(rkeys, sizeof rkeys);
}
static void
@@ -257,6 +264,9 @@ ndx_encrypt(uint8_t *out, const uint8_t *in, const uint8_t *t, const uint8_t *k)
memcpy(out, t, 16);
aes_xex_encrypt(out + 16, in, t, tkeys, rkeys);
sodium_memzero(diff, sizeof diff);
sodium_memzero(rkeys, sizeof rkeys);
sodium_memzero(tkeys, sizeof tkeys);
}
static void
@@ -284,6 +294,9 @@ ndx_decrypt(uint8_t *out, const uint8_t *in, const uint8_t *k)
}
aes_xex_decrypt(out, in + 16, in, tkeys, rkeys);
sodium_memzero(diff, sizeof diff);
sodium_memzero(rkeys, sizeof rkeys);
sodium_memzero(tkeys, sizeof tkeys);
}
static int
@@ -405,6 +418,9 @@ pfx_encrypt(uint8_t *out, const uint8_t *in, const uint8_t *k)
}
memcpy(out, encrypted, 16);
sodium_memzero(diff, sizeof diff);
sodium_memzero(k2keys, sizeof k2keys);
sodium_memzero(k1keys, sizeof k1keys);
}
static void
@@ -477,6 +493,9 @@ pfx_decrypt(uint8_t *out, const uint8_t *in, const uint8_t *k)
}
memcpy(out, decrypted, 16);
sodium_memzero(diff, sizeof diff);
sodium_memzero(k2keys, sizeof k2keys);
sodium_memzero(k1keys, sizeof k1keys);
}
struct ipcrypt_implementation ipcrypt_aesni_implementation = {
@@ -126,6 +126,7 @@ aes_decrypt(uint8_t out[16], const uint8_t in[16], const BlockVec *rkeys)
t = AES_XDECRYPTLAST(t, rkeys_inv[i]);
t = XOR128(t, rkeys[0]);
STORE128(out, t);
sodium_memzero(rkeys_inv, sizeof rkeys_inv);
}
static BlockVec
@@ -171,6 +172,7 @@ aes_decrypt_with_tweak(uint8_t out[16], const uint8_t in[16], const uint8_t twea
t = AES_XDECRYPTLAST(t, XOR128(tweak_block_inv, rkeys_inv[i]));
t = XOR128(t, XOR128(tweak_block, rkeys[0]));
STORE128(out, t);
sodium_memzero(rkeys_inv, sizeof rkeys_inv);
}
static BlockVec
@@ -224,6 +226,7 @@ aes_xex_decrypt(uint8_t out[16], const uint8_t in[16], const uint8_t tweak[16],
t = AES_XDECRYPTLAST(t, rkeys_inv[i]);
t = XOR128_3(t, rkeys[0], tt);
STORE128(out, t);
sodium_memzero(rkeys_inv, sizeof rkeys_inv);
}
static void
@@ -233,6 +236,7 @@ encrypt(uint8_t *out, const uint8_t *in, const uint8_t *k)
expand_key(rkeys, k);
aes_encrypt(out, in, rkeys);
sodium_memzero(rkeys, sizeof rkeys);
}
static void
@@ -242,6 +246,7 @@ decrypt(uint8_t *out, const uint8_t *in, const uint8_t *k)
expand_key(rkeys, k);
aes_decrypt(out, in, rkeys);
sodium_memzero(rkeys, sizeof rkeys);
}
static void
@@ -252,6 +257,7 @@ nd_encrypt(uint8_t *out, const uint8_t *in, const uint8_t *t, const uint8_t *k)
expand_key(rkeys, k);
memcpy(out, t, 8);
aes_encrypt_with_tweak(out + 8, in, t, rkeys);
sodium_memzero(rkeys, sizeof rkeys);
}
static void
@@ -261,6 +267,7 @@ nd_decrypt(uint8_t *out, const uint8_t *in, const uint8_t *k)
expand_key(rkeys, k);
aes_decrypt_with_tweak(out, in + 8, in, rkeys);
sodium_memzero(rkeys, sizeof rkeys);
}
static void
@@ -289,6 +296,9 @@ ndx_encrypt(uint8_t *out, const uint8_t *in, const uint8_t *t, const uint8_t *k)
memcpy(out, t, 16);
aes_xex_encrypt(out + 16, in, t, tkeys, rkeys);
sodium_memzero(diff, sizeof diff);
sodium_memzero(rkeys, sizeof rkeys);
sodium_memzero(tkeys, sizeof tkeys);
}
static void
@@ -316,6 +326,9 @@ ndx_decrypt(uint8_t *out, const uint8_t *in, const uint8_t *k)
}
aes_xex_decrypt(out, in + 16, in, tkeys, rkeys);
sodium_memzero(diff, sizeof diff);
sodium_memzero(rkeys, sizeof rkeys);
sodium_memzero(tkeys, sizeof tkeys);
}
static int
@@ -440,6 +453,9 @@ pfx_encrypt(uint8_t *out, const uint8_t *in, const uint8_t *k)
}
memcpy(out, encrypted, 16);
sodium_memzero(diff, sizeof diff);
sodium_memzero(k2keys, sizeof k2keys);
sodium_memzero(k1keys, sizeof k1keys);
}
static void
@@ -514,6 +530,9 @@ pfx_decrypt(uint8_t *out, const uint8_t *in, const uint8_t *k)
}
memcpy(out, decrypted, 16);
sodium_memzero(diff, sizeof diff);
sodium_memzero(k2keys, sizeof k2keys);
sodium_memzero(k1keys, sizeof k1keys);
}
struct ipcrypt_implementation ipcrypt_armcrypto_implementation = {
@@ -64,6 +64,7 @@ aes_decrypt(uint8_t out[16], const uint8_t in[16], const KeySchedule rkeys)
}
t = AES_DECLAST(t, rkeys_inv[0]);
AES_BLOCK_STORE(out, t);
sodium_memzero(rkeys_inv, sizeof rkeys_inv);
}
static aes_block_t
@@ -116,6 +117,7 @@ aes_decrypt_with_tweak(uint8_t out[16], const uint8_t in[16], const uint8_t twea
}
t = AES_DECLAST(t, AES_BLOCK_XOR(tweak_block, rkeys_inv[0]));
AES_BLOCK_STORE(out, t);
sodium_memzero(rkeys_inv, sizeof rkeys_inv);
}
static aes_block_t
@@ -168,6 +170,7 @@ aes_xex_decrypt(uint8_t out[16], const uint8_t in[16], const uint8_t tweak[16],
}
t = AES_DECLAST(t, AES_BLOCK_XOR(rkeys_inv[0], tt));
AES_BLOCK_STORE(out, t);
sodium_memzero(rkeys_inv, sizeof rkeys_inv);
}
static void
@@ -177,6 +180,7 @@ encrypt(uint8_t *out, const uint8_t *in, const uint8_t *k)
expand_key(rkeys, k);
aes_encrypt(out, in, rkeys);
sodium_memzero(rkeys, sizeof rkeys);
}
static void
@@ -186,6 +190,7 @@ decrypt(uint8_t *out, const uint8_t *in, const uint8_t *k)
expand_key(rkeys, k);
aes_decrypt(out, in, rkeys);
sodium_memzero(rkeys, sizeof rkeys);
}
static void
@@ -196,6 +201,7 @@ nd_encrypt(uint8_t *out, const uint8_t *in, const uint8_t *t, const uint8_t *k)
expand_key(rkeys, k);
memcpy(out, t, 8);
aes_encrypt_with_tweak(out + 8, in, t, rkeys);
sodium_memzero(rkeys, sizeof rkeys);
}
static void
@@ -205,6 +211,7 @@ nd_decrypt(uint8_t *out, const uint8_t *in, const uint8_t *k)
expand_key(rkeys, k);
aes_decrypt_with_tweak(out, in + 8, in, rkeys);
sodium_memzero(rkeys, sizeof rkeys);
}
static void
@@ -233,6 +240,9 @@ ndx_encrypt(uint8_t *out, const uint8_t *in, const uint8_t *t, const uint8_t *k)
memcpy(out, t, 16);
aes_xex_encrypt(out + 16, in, t, tkeys, rkeys);
sodium_memzero(diff, sizeof diff);
sodium_memzero(rkeys, sizeof rkeys);
sodium_memzero(tkeys, sizeof tkeys);
}
static void
@@ -260,6 +270,9 @@ ndx_decrypt(uint8_t *out, const uint8_t *in, const uint8_t *k)
}
aes_xex_decrypt(out, in + 16, in, tkeys, rkeys);
sodium_memzero(diff, sizeof diff);
sodium_memzero(rkeys, sizeof rkeys);
sodium_memzero(tkeys, sizeof tkeys);
}
static int
@@ -381,6 +394,9 @@ pfx_encrypt(uint8_t *out, const uint8_t *in, const uint8_t *k)
}
memcpy(out, encrypted, 16);
sodium_memzero(diff, sizeof diff);
sodium_memzero(k2keys, sizeof k2keys);
sodium_memzero(k1keys, sizeof k1keys);
}
static void
@@ -453,6 +469,9 @@ pfx_decrypt(uint8_t *out, const uint8_t *in, const uint8_t *k)
}
memcpy(out, decrypted, 16);
sodium_memzero(diff, sizeof diff);
sodium_memzero(k2keys, sizeof k2keys);
sodium_memzero(k1keys, sizeof k1keys);
}
struct ipcrypt_implementation ipcrypt_soft_implementation = {