mirror of
https://github.com/jedisct1/libsodium.git
synced 2026-08-25 17:57:21 +09:00
Add a couple sodium_memzero
This commit is contained in:
@@ -97,6 +97,7 @@ aes_decrypt(uint8_t out[16], const uint8_t in[16], const BlockVec *rkeys)
|
|||||||
}
|
}
|
||||||
t = AES_DECRYPTLAST(t, rkeys[0]);
|
t = AES_DECRYPTLAST(t, rkeys[0]);
|
||||||
STORE128(out, t);
|
STORE128(out, t);
|
||||||
|
sodium_memzero(rkeys_inv, sizeof rkeys_inv);
|
||||||
}
|
}
|
||||||
|
|
||||||
static BlockVec
|
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]));
|
t = AES_DECRYPTLAST(t, XOR128(tweak_block, rkeys[0]));
|
||||||
STORE128(out, t);
|
STORE128(out, t);
|
||||||
|
sodium_memzero(rkeys_inv, sizeof rkeys_inv);
|
||||||
}
|
}
|
||||||
|
|
||||||
static BlockVec
|
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));
|
t = AES_DECRYPTLAST(t, XOR128(rkeys[0], tt));
|
||||||
STORE128(out, t);
|
STORE128(out, t);
|
||||||
|
sodium_memzero(rkeys_inv, sizeof rkeys_inv);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
@@ -201,6 +204,7 @@ encrypt(uint8_t *out, const uint8_t *in, const uint8_t *k)
|
|||||||
|
|
||||||
expand_key(rkeys, k);
|
expand_key(rkeys, k);
|
||||||
aes_encrypt(out, in, rkeys);
|
aes_encrypt(out, in, rkeys);
|
||||||
|
sodium_memzero(rkeys, sizeof rkeys);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
@@ -210,6 +214,7 @@ decrypt(uint8_t *out, const uint8_t *in, const uint8_t *k)
|
|||||||
|
|
||||||
expand_key(rkeys, k);
|
expand_key(rkeys, k);
|
||||||
aes_decrypt(out, in, rkeys);
|
aes_decrypt(out, in, rkeys);
|
||||||
|
sodium_memzero(rkeys, sizeof rkeys);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
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);
|
expand_key(rkeys, k);
|
||||||
memcpy(out, t, 8);
|
memcpy(out, t, 8);
|
||||||
aes_encrypt_with_tweak(out + 8, in, t, rkeys);
|
aes_encrypt_with_tweak(out + 8, in, t, rkeys);
|
||||||
|
sodium_memzero(rkeys, sizeof rkeys);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
@@ -229,6 +235,7 @@ nd_decrypt(uint8_t *out, const uint8_t *in, const uint8_t *k)
|
|||||||
|
|
||||||
expand_key(rkeys, k);
|
expand_key(rkeys, k);
|
||||||
aes_decrypt_with_tweak(out, in + 8, in, rkeys);
|
aes_decrypt_with_tweak(out, in + 8, in, rkeys);
|
||||||
|
sodium_memzero(rkeys, sizeof rkeys);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
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);
|
memcpy(out, t, 16);
|
||||||
aes_xex_encrypt(out + 16, in, t, tkeys, rkeys);
|
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
|
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);
|
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
|
static int
|
||||||
@@ -405,6 +418,9 @@ pfx_encrypt(uint8_t *out, const uint8_t *in, const uint8_t *k)
|
|||||||
}
|
}
|
||||||
|
|
||||||
memcpy(out, encrypted, 16);
|
memcpy(out, encrypted, 16);
|
||||||
|
sodium_memzero(diff, sizeof diff);
|
||||||
|
sodium_memzero(k2keys, sizeof k2keys);
|
||||||
|
sodium_memzero(k1keys, sizeof k1keys);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
@@ -477,6 +493,9 @@ pfx_decrypt(uint8_t *out, const uint8_t *in, const uint8_t *k)
|
|||||||
}
|
}
|
||||||
|
|
||||||
memcpy(out, decrypted, 16);
|
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 = {
|
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 = AES_XDECRYPTLAST(t, rkeys_inv[i]);
|
||||||
t = XOR128(t, rkeys[0]);
|
t = XOR128(t, rkeys[0]);
|
||||||
STORE128(out, t);
|
STORE128(out, t);
|
||||||
|
sodium_memzero(rkeys_inv, sizeof rkeys_inv);
|
||||||
}
|
}
|
||||||
|
|
||||||
static BlockVec
|
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 = AES_XDECRYPTLAST(t, XOR128(tweak_block_inv, rkeys_inv[i]));
|
||||||
t = XOR128(t, XOR128(tweak_block, rkeys[0]));
|
t = XOR128(t, XOR128(tweak_block, rkeys[0]));
|
||||||
STORE128(out, t);
|
STORE128(out, t);
|
||||||
|
sodium_memzero(rkeys_inv, sizeof rkeys_inv);
|
||||||
}
|
}
|
||||||
|
|
||||||
static BlockVec
|
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 = AES_XDECRYPTLAST(t, rkeys_inv[i]);
|
||||||
t = XOR128_3(t, rkeys[0], tt);
|
t = XOR128_3(t, rkeys[0], tt);
|
||||||
STORE128(out, t);
|
STORE128(out, t);
|
||||||
|
sodium_memzero(rkeys_inv, sizeof rkeys_inv);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
@@ -233,6 +236,7 @@ encrypt(uint8_t *out, const uint8_t *in, const uint8_t *k)
|
|||||||
|
|
||||||
expand_key(rkeys, k);
|
expand_key(rkeys, k);
|
||||||
aes_encrypt(out, in, rkeys);
|
aes_encrypt(out, in, rkeys);
|
||||||
|
sodium_memzero(rkeys, sizeof rkeys);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
@@ -242,6 +246,7 @@ decrypt(uint8_t *out, const uint8_t *in, const uint8_t *k)
|
|||||||
|
|
||||||
expand_key(rkeys, k);
|
expand_key(rkeys, k);
|
||||||
aes_decrypt(out, in, rkeys);
|
aes_decrypt(out, in, rkeys);
|
||||||
|
sodium_memzero(rkeys, sizeof rkeys);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
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);
|
expand_key(rkeys, k);
|
||||||
memcpy(out, t, 8);
|
memcpy(out, t, 8);
|
||||||
aes_encrypt_with_tweak(out + 8, in, t, rkeys);
|
aes_encrypt_with_tweak(out + 8, in, t, rkeys);
|
||||||
|
sodium_memzero(rkeys, sizeof rkeys);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
@@ -261,6 +267,7 @@ nd_decrypt(uint8_t *out, const uint8_t *in, const uint8_t *k)
|
|||||||
|
|
||||||
expand_key(rkeys, k);
|
expand_key(rkeys, k);
|
||||||
aes_decrypt_with_tweak(out, in + 8, in, rkeys);
|
aes_decrypt_with_tweak(out, in + 8, in, rkeys);
|
||||||
|
sodium_memzero(rkeys, sizeof rkeys);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
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);
|
memcpy(out, t, 16);
|
||||||
aes_xex_encrypt(out + 16, in, t, tkeys, rkeys);
|
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
|
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);
|
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
|
static int
|
||||||
@@ -440,6 +453,9 @@ pfx_encrypt(uint8_t *out, const uint8_t *in, const uint8_t *k)
|
|||||||
}
|
}
|
||||||
|
|
||||||
memcpy(out, encrypted, 16);
|
memcpy(out, encrypted, 16);
|
||||||
|
sodium_memzero(diff, sizeof diff);
|
||||||
|
sodium_memzero(k2keys, sizeof k2keys);
|
||||||
|
sodium_memzero(k1keys, sizeof k1keys);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
@@ -514,6 +530,9 @@ pfx_decrypt(uint8_t *out, const uint8_t *in, const uint8_t *k)
|
|||||||
}
|
}
|
||||||
|
|
||||||
memcpy(out, decrypted, 16);
|
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 = {
|
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]);
|
t = AES_DECLAST(t, rkeys_inv[0]);
|
||||||
AES_BLOCK_STORE(out, t);
|
AES_BLOCK_STORE(out, t);
|
||||||
|
sodium_memzero(rkeys_inv, sizeof rkeys_inv);
|
||||||
}
|
}
|
||||||
|
|
||||||
static aes_block_t
|
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]));
|
t = AES_DECLAST(t, AES_BLOCK_XOR(tweak_block, rkeys_inv[0]));
|
||||||
AES_BLOCK_STORE(out, t);
|
AES_BLOCK_STORE(out, t);
|
||||||
|
sodium_memzero(rkeys_inv, sizeof rkeys_inv);
|
||||||
}
|
}
|
||||||
|
|
||||||
static aes_block_t
|
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));
|
t = AES_DECLAST(t, AES_BLOCK_XOR(rkeys_inv[0], tt));
|
||||||
AES_BLOCK_STORE(out, t);
|
AES_BLOCK_STORE(out, t);
|
||||||
|
sodium_memzero(rkeys_inv, sizeof rkeys_inv);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
@@ -177,6 +180,7 @@ encrypt(uint8_t *out, const uint8_t *in, const uint8_t *k)
|
|||||||
|
|
||||||
expand_key(rkeys, k);
|
expand_key(rkeys, k);
|
||||||
aes_encrypt(out, in, rkeys);
|
aes_encrypt(out, in, rkeys);
|
||||||
|
sodium_memzero(rkeys, sizeof rkeys);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
@@ -186,6 +190,7 @@ decrypt(uint8_t *out, const uint8_t *in, const uint8_t *k)
|
|||||||
|
|
||||||
expand_key(rkeys, k);
|
expand_key(rkeys, k);
|
||||||
aes_decrypt(out, in, rkeys);
|
aes_decrypt(out, in, rkeys);
|
||||||
|
sodium_memzero(rkeys, sizeof rkeys);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
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);
|
expand_key(rkeys, k);
|
||||||
memcpy(out, t, 8);
|
memcpy(out, t, 8);
|
||||||
aes_encrypt_with_tweak(out + 8, in, t, rkeys);
|
aes_encrypt_with_tweak(out + 8, in, t, rkeys);
|
||||||
|
sodium_memzero(rkeys, sizeof rkeys);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
@@ -205,6 +211,7 @@ nd_decrypt(uint8_t *out, const uint8_t *in, const uint8_t *k)
|
|||||||
|
|
||||||
expand_key(rkeys, k);
|
expand_key(rkeys, k);
|
||||||
aes_decrypt_with_tweak(out, in + 8, in, rkeys);
|
aes_decrypt_with_tweak(out, in + 8, in, rkeys);
|
||||||
|
sodium_memzero(rkeys, sizeof rkeys);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
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);
|
memcpy(out, t, 16);
|
||||||
aes_xex_encrypt(out + 16, in, t, tkeys, rkeys);
|
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
|
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);
|
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
|
static int
|
||||||
@@ -381,6 +394,9 @@ pfx_encrypt(uint8_t *out, const uint8_t *in, const uint8_t *k)
|
|||||||
}
|
}
|
||||||
|
|
||||||
memcpy(out, encrypted, 16);
|
memcpy(out, encrypted, 16);
|
||||||
|
sodium_memzero(diff, sizeof diff);
|
||||||
|
sodium_memzero(k2keys, sizeof k2keys);
|
||||||
|
sodium_memzero(k1keys, sizeof k1keys);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
@@ -453,6 +469,9 @@ pfx_decrypt(uint8_t *out, const uint8_t *in, const uint8_t *k)
|
|||||||
}
|
}
|
||||||
|
|
||||||
memcpy(out, decrypted, 16);
|
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 = {
|
struct ipcrypt_implementation ipcrypt_soft_implementation = {
|
||||||
|
|||||||
Reference in New Issue
Block a user