Skip to content

Commit e182645

Browse files
committed
zero PKCS12 key bag buffers before free
1 parent 897ce55 commit e182645

1 file changed

Lines changed: 10 additions & 0 deletions

File tree

wolfcrypt/src/pkcs12.c

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1976,6 +1976,7 @@ static int wc_PKCS12_create_key_bag(WC_PKCS12* pkcs12, WC_RNG* rng,
19761976
word32 sz;
19771977
word32 i;
19781978
word32 tmpSz;
1979+
word32 tmpAllocSz;
19791980
int ret;
19801981

19811982
/* get max size for shrouded key */
@@ -2014,6 +2015,7 @@ static int wc_PKCS12_create_key_bag(WC_PKCS12* pkcs12, WC_RNG* rng,
20142015
}
20152016

20162017
/* shroud key */
2018+
tmpAllocSz = length;
20172019
tmp = (byte*)XMALLOC(length, heap, DYNAMIC_TYPE_TMP_BUFFER);
20182020
if (tmp == NULL) {
20192021
return MEMORY_E;
@@ -2022,11 +2024,13 @@ static int wc_PKCS12_create_key_bag(WC_PKCS12* pkcs12, WC_RNG* rng,
20222024
ret = wc_PKCS12_shroud_key(pkcs12, rng, tmp, &length, key, keySz,
20232025
algo, pass, passSz, iter);
20242026
if (ret < 0) {
2027+
ForceZero(tmp, tmpAllocSz);
20252028
XFREE(tmp, heap, DYNAMIC_TYPE_TMP_BUFFER);
20262029
return ret;
20272030
}
20282031
length = (word32)ret;
20292032
XMEMCPY(out + idx, tmp, (size_t)length);
2033+
ForceZero(tmp, tmpAllocSz);
20302034
XFREE(tmp, heap, DYNAMIC_TYPE_TMP_BUFFER);
20312035
totalSz += length;
20322036

@@ -2357,6 +2361,7 @@ static byte* PKCS12_create_key_content(WC_PKCS12* pkcs12, int nidKey,
23572361
{
23582362
byte* keyBuf;
23592363
word32 keyBufSz = 0;
2364+
word32 keyBufAllocSz = 0;
23602365
byte* keyCi = NULL;
23612366
word32 tmpSz;
23622367
int ret;
@@ -2406,6 +2411,7 @@ static byte* PKCS12_create_key_content(WC_PKCS12* pkcs12, int nidKey,
24062411

24072412
/* account for sequence around bag */
24082413
keyBufSz += MAX_SEQ_SZ;
2414+
keyBufAllocSz = keyBufSz;
24092415
keyBuf = (byte*)XMALLOC(keyBufSz, heap, DYNAMIC_TYPE_TMP_BUFFER);
24102416
if (keyBuf == NULL) {
24112417
WOLFSSL_MSG("Memory error creating keyBuf buffer");
@@ -2415,6 +2421,7 @@ static byte* PKCS12_create_key_content(WC_PKCS12* pkcs12, int nidKey,
24152421
ret = wc_PKCS12_create_key_bag(pkcs12, rng, keyBuf + MAX_SEQ_SZ, &keyBufSz,
24162422
key, keySz, algo, iter, pass, (int)passSz);
24172423
if (ret < 0) {
2424+
ForceZero(keyBuf, keyBufAllocSz);
24182425
XFREE(keyBuf, heap, DYNAMIC_TYPE_TMP_BUFFER);
24192426
WOLFSSL_MSG("Error creating key bag");
24202427
return NULL;
@@ -2437,18 +2444,21 @@ static byte* PKCS12_create_key_content(WC_PKCS12* pkcs12, int nidKey,
24372444
ret = wc_PKCS12_encrypt_content(pkcs12, rng, NULL, keyCiSz,
24382445
NULL, keyBufSz, algo, pass, (int)passSz, iter, WC_PKCS12_DATA);
24392446
if (ret != WC_NO_ERR_TRACE(LENGTH_ONLY_E)) {
2447+
ForceZero(keyBuf, keyBufAllocSz);
24402448
XFREE(keyBuf, heap, DYNAMIC_TYPE_TMP_BUFFER);
24412449
WOLFSSL_MSG("Error getting key encrypt content size");
24422450
return NULL;
24432451
}
24442452
keyCi = (byte*)XMALLOC(*keyCiSz, heap, DYNAMIC_TYPE_TMP_BUFFER);
24452453
if (keyCi == NULL) {
2454+
ForceZero(keyBuf, keyBufAllocSz);
24462455
XFREE(keyBuf, heap, DYNAMIC_TYPE_TMP_BUFFER);
24472456
return NULL;
24482457
}
24492458

24502459
ret = wc_PKCS12_encrypt_content(pkcs12, rng, keyCi, keyCiSz,
24512460
keyBuf, keyBufSz, algo, pass, (int)passSz, iter, WC_PKCS12_DATA);
2461+
ForceZero(keyBuf, keyBufAllocSz);
24522462
XFREE(keyBuf, heap, DYNAMIC_TYPE_TMP_BUFFER);
24532463
if (ret < 0 ) {
24542464
XFREE(keyCi, heap, DYNAMIC_TYPE_TMP_BUFFER);

0 commit comments

Comments
 (0)