@@ -3948,6 +3948,17 @@ int DeriveKeys(WOLFSSL* ssl)
39483948 ret = StoreKeys (ssl , keyData , PROVISION_CLIENT_SERVER );
39493949 }
39503950
3951+ ForceZero (shaOutput , WC_SHA_DIGEST_SIZE );
3952+ ForceZero (md5Input , SECRET_LEN + WC_SHA_DIGEST_SIZE );
3953+ ForceZero (shaInput , KEY_PREFIX + SECRET_LEN + 2 * RAN_LEN );
3954+ ForceZero (keyData , KEY_PREFIX * WC_MD5_DIGEST_SIZE );
3955+ #ifdef WOLFSSL_CHECK_MEM_ZERO
3956+ wc_MemZero_Check (shaOutput , WC_SHA_DIGEST_SIZE );
3957+ wc_MemZero_Check (md5Input , SECRET_LEN + WC_SHA_DIGEST_SIZE );
3958+ wc_MemZero_Check (shaInput , KEY_PREFIX + SECRET_LEN + 2 * RAN_LEN );
3959+ wc_MemZero_Check (keyData , KEY_PREFIX * WC_MD5_DIGEST_SIZE );
3960+ #endif
3961+
39513962 WC_FREE_VAR_EX (shaOutput , NULL , DYNAMIC_TYPE_TMP_BUFFER );
39523963 WC_FREE_VAR_EX (md5Input , NULL , DYNAMIC_TYPE_TMP_BUFFER );
39533964 WC_FREE_VAR_EX (shaInput , NULL , DYNAMIC_TYPE_TMP_BUFFER );
@@ -3963,16 +3974,20 @@ static int CleanPreMaster(WOLFSSL* ssl)
39633974{
39643975 int i , ret , sz = (int )(ssl -> arrays -> preMasterSz );
39653976
3966- for (i = 0 ; i < sz ; i ++ )
3967- ssl -> arrays -> preMasterSecret [i ] = 0 ;
3977+ ForceZero (ssl -> arrays -> preMasterSecret , sz );
3978+ #ifdef WOLFSSL_CHECK_MEM_ZERO
3979+ wc_MemZero_Check (ssl -> arrays -> preMasterSecret , sz );
3980+ #endif
39683981
39693982 ret = wc_RNG_GenerateBlock (ssl -> rng , ssl -> arrays -> preMasterSecret ,
39703983 (word32 )(sz ));
39713984 if (ret != 0 )
39723985 return ret ;
39733986
3974- for (i = 0 ; i < sz ; i ++ )
3975- ssl -> arrays -> preMasterSecret [i ] = 0 ;
3987+ ForceZero (ssl -> arrays -> preMasterSecret , sz );
3988+ #ifdef WOLFSSL_CHECK_MEM_ZERO
3989+ wc_MemZero_Check (ssl -> arrays -> preMasterSecret , sz );
3990+ #endif
39763991
39773992 XFREE (ssl -> arrays -> preMasterSecret , ssl -> heap , DYNAMIC_TYPE_SECRET );
39783993 ssl -> arrays -> preMasterSecret = NULL ;
@@ -4096,6 +4111,13 @@ static int MakeSslMasterSecret(WOLFSSL* ssl)
40964111 ret = DeriveKeys (ssl );
40974112 }
40984113
4114+ ForceZero (md5Input , ENCRYPT_LEN + WC_SHA_DIGEST_SIZE );
4115+ ForceZero (shaInput , PREFIX + ENCRYPT_LEN + 2 * RAN_LEN );
4116+ #ifdef WOLFSSL_CHECK_MEM_ZERO
4117+ wc_MemZero_Check (md5Input , ENCRYPT_LEN + WC_SHA_DIGEST_SIZE );
4118+ wc_MemZero_Check (shaInput , PREFIX + ENCRYPT_LEN + 2 * RAN_LEN );
4119+ #endif
4120+
40994121 WC_FREE_VAR_EX (shaOutput , NULL , DYNAMIC_TYPE_TMP_BUFFER );
41004122 WC_FREE_VAR_EX (md5Input , NULL , DYNAMIC_TYPE_TMP_BUFFER );
41014123 WC_FREE_VAR_EX (shaInput , NULL , DYNAMIC_TYPE_TMP_BUFFER );
0 commit comments