Skip to content

Commit 50185c6

Browse files
authored
Zeroize memory in SHA3 implementation (#2171)
* Add OQS_MEM_aligned_secure_free convenience fn Signed-off-by: Aiden Fox Ivey <[email protected]> * Rewrite SHA3 aligned frees to zeroize Signed-off-by: Aiden Fox Ivey <[email protected]> --------- Signed-off-by: Aiden Fox Ivey <[email protected]>
1 parent 8f92606 commit 50185c6

File tree

4 files changed

+17
-7
lines changed

4 files changed

+17
-7
lines changed

src/common/common.c

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -411,6 +411,11 @@ void OQS_MEM_aligned_free(void *ptr) {
411411
#endif
412412
}
413413

414+
void OQS_MEM_aligned_secure_free(void *ptr, size_t len) {
415+
OQS_MEM_cleanse(ptr, len);
416+
OQS_MEM_aligned_free(ptr);
417+
}
418+
414419
OQS_API void *OQS_MEM_malloc(size_t size) {
415420
#if defined(OQS_USE_OPENSSL)
416421
return OSSL_FUNC(CRYPTO_malloc)(size, OPENSSL_FILE, OPENSSL_LINE);

src/common/common.h

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -274,6 +274,11 @@ void *OQS_MEM_aligned_alloc(size_t alignment, size_t size);
274274
*/
275275
void OQS_MEM_aligned_free(void *ptr);
276276

277+
/**
278+
* Free and zeroize memory allocated with OQS_MEM_aligned_alloc.
279+
*/
280+
void OQS_MEM_aligned_secure_free(void *ptr, size_t len);
281+
277282
#if defined(__cplusplus)
278283
} // extern "C"
279284
#endif

src/common/sha3/xkcp_sha3.c

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -224,7 +224,7 @@ static void SHA3_sha3_256_inc_finalize(uint8_t *output, OQS_SHA3_sha3_256_inc_ct
224224
}
225225

226226
static void SHA3_sha3_256_inc_ctx_release(OQS_SHA3_sha3_256_inc_ctx *state) {
227-
OQS_MEM_aligned_free(state->ctx);
227+
OQS_MEM_aligned_secure_free(state->ctx, KECCAK_CTX_BYTES);
228228
}
229229

230230
static void SHA3_sha3_256_inc_ctx_clone(OQS_SHA3_sha3_256_inc_ctx *dest, const OQS_SHA3_sha3_256_inc_ctx *src) {
@@ -260,7 +260,7 @@ static void SHA3_sha3_384_inc_finalize(uint8_t *output, OQS_SHA3_sha3_384_inc_ct
260260
}
261261

262262
static void SHA3_sha3_384_inc_ctx_release(OQS_SHA3_sha3_384_inc_ctx *state) {
263-
OQS_MEM_aligned_free(state->ctx);
263+
OQS_MEM_aligned_secure_free(state->ctx, KECCAK_CTX_BYTES);
264264
}
265265

266266
static void SHA3_sha3_384_inc_ctx_clone(OQS_SHA3_sha3_384_inc_ctx *dest, const OQS_SHA3_sha3_384_inc_ctx *src) {
@@ -297,7 +297,7 @@ static void SHA3_sha3_512_inc_finalize(uint8_t *output, OQS_SHA3_sha3_512_inc_ct
297297
}
298298

299299
static void SHA3_sha3_512_inc_ctx_release(OQS_SHA3_sha3_512_inc_ctx *state) {
300-
OQS_MEM_aligned_free(state->ctx);
300+
OQS_MEM_aligned_secure_free(state->ctx, KECCAK_CTX_BYTES);
301301
}
302302

303303
static void SHA3_sha3_512_inc_ctx_clone(OQS_SHA3_sha3_512_inc_ctx *dest, const OQS_SHA3_sha3_512_inc_ctx *src) {
@@ -344,7 +344,7 @@ static void SHA3_shake128_inc_ctx_clone(OQS_SHA3_shake128_inc_ctx *dest, const O
344344
}
345345

346346
static void SHA3_shake128_inc_ctx_release(OQS_SHA3_shake128_inc_ctx *state) {
347-
OQS_MEM_aligned_free(state->ctx);
347+
OQS_MEM_aligned_secure_free(state->ctx, KECCAK_CTX_BYTES);
348348
}
349349

350350
static void SHA3_shake128_inc_ctx_reset(OQS_SHA3_shake128_inc_ctx *state) {
@@ -383,7 +383,7 @@ static void SHA3_shake256_inc_squeeze(uint8_t *output, size_t outlen, OQS_SHA3_s
383383
}
384384

385385
static void SHA3_shake256_inc_ctx_release(OQS_SHA3_shake256_inc_ctx *state) {
386-
OQS_MEM_aligned_free(state->ctx);
386+
OQS_MEM_aligned_secure_free(state->ctx, KECCAK_CTX_BYTES);
387387
}
388388

389389
static void SHA3_shake256_inc_ctx_clone(OQS_SHA3_shake256_inc_ctx *dest, const OQS_SHA3_shake256_inc_ctx *src) {

src/common/sha3/xkcp_sha3x4.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -197,7 +197,7 @@ static void SHA3_shake128_x4_inc_ctx_clone(OQS_SHA3_shake128_x4_inc_ctx *dest, c
197197
}
198198

199199
static void SHA3_shake128_x4_inc_ctx_release(OQS_SHA3_shake128_x4_inc_ctx *state) {
200-
OQS_MEM_aligned_free(state->ctx);
200+
OQS_MEM_aligned_secure_free(state->ctx, KECCAK_X4_CTX_BYTES);
201201
}
202202

203203
static void SHA3_shake128_x4_inc_ctx_reset(OQS_SHA3_shake128_x4_inc_ctx *state) {
@@ -240,7 +240,7 @@ static void SHA3_shake256_x4_inc_ctx_clone(OQS_SHA3_shake256_x4_inc_ctx *dest, c
240240
}
241241

242242
static void SHA3_shake256_x4_inc_ctx_release(OQS_SHA3_shake256_x4_inc_ctx *state) {
243-
OQS_MEM_aligned_free(state->ctx);
243+
OQS_MEM_aligned_secure_free(state->ctx, KECCAK_X4_CTX_BYTES);
244244
}
245245

246246
static void SHA3_shake256_x4_inc_ctx_reset(OQS_SHA3_shake256_x4_inc_ctx *state) {

0 commit comments

Comments
 (0)