@@ -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