diff --git a/src/libsodium/crypto_aead/aes256gcm/aesni/aead_aes256gcm_aesni.c b/src/libsodium/crypto_aead/aes256gcm/aesni/aead_aes256gcm_aesni.c index b9ce4b94..7ebccbe3 100644 --- a/src/libsodium/crypto_aead/aes256gcm/aesni/aead_aes256gcm_aesni.c +++ b/src/libsodium/crypto_aead/aes256gcm/aesni/aead_aes256gcm_aesni.c @@ -970,6 +970,7 @@ crypto_aead_aes256gcm_decrypt_detached(unsigned char *m, unsigned char *nsec, const unsigned char *k) { CRYPTO_ALIGN(16) crypto_aead_aes256gcm_state st; + int ret; PREFETCH_WRITE(m); PREFETCH_READ(c); @@ -977,8 +978,11 @@ crypto_aead_aes256gcm_decrypt_detached(unsigned char *m, unsigned char *nsec, crypto_aead_aes256gcm_beforenm(&st, k); - return crypto_aead_aes256gcm_decrypt_detached_afternm( + ret = crypto_aead_aes256gcm_decrypt_detached_afternm( m, nsec, c, clen, mac, ad, adlen, npub, (const crypto_aead_aes256gcm_state *) &st); + sodium_memzero(&st, sizeof st); + + return ret; } int diff --git a/src/libsodium/crypto_aead/aes256gcm/armcrypto/aead_aes256gcm_armcrypto.c b/src/libsodium/crypto_aead/aes256gcm/armcrypto/aead_aes256gcm_armcrypto.c index f7d7a5f1..60f40bdd 100644 --- a/src/libsodium/crypto_aead/aes256gcm/armcrypto/aead_aes256gcm_armcrypto.c +++ b/src/libsodium/crypto_aead/aes256gcm/armcrypto/aead_aes256gcm_armcrypto.c @@ -988,6 +988,7 @@ crypto_aead_aes256gcm_decrypt_detached(unsigned char *m, unsigned char *nsec, const unsigned char *k) { CRYPTO_ALIGN(16) crypto_aead_aes256gcm_state st; + int ret; PREFETCH_WRITE(m); PREFETCH_READ(c); @@ -995,8 +996,11 @@ crypto_aead_aes256gcm_decrypt_detached(unsigned char *m, unsigned char *nsec, crypto_aead_aes256gcm_beforenm(&st, k); - return crypto_aead_aes256gcm_decrypt_detached_afternm( + ret = crypto_aead_aes256gcm_decrypt_detached_afternm( m, nsec, c, clen, mac, ad, adlen, npub, (const crypto_aead_aes256gcm_state *) &st); + sodium_memzero(&st, sizeof st); + + return ret; } int