@@ -796,6 +796,8 @@ static int wc_HpkeEncap(Hpke* hpke, void* ephemeralKey, void* receiverKey,
796796 hpke -> Npk * 2 , sharedSecret );
797797 }
798798
799+ ForceZero (dh , hpke -> Ndh );
800+ ForceZero (kemContext , hpke -> Npk * 2 );
799801 WC_FREE_VAR_EX (dh , hpke -> heap , DYNAMIC_TYPE_TMP_BUFFER );
800802 WC_FREE_VAR_EX (kemContext , hpke -> heap , DYNAMIC_TYPE_TMP_BUFFER );
801803
@@ -816,6 +818,9 @@ static int wc_HpkeSetupBaseSender(Hpke* hpke, HpkeBaseContext* context,
816818#ifdef WOLFSSL_SMALL_STACK
817819 sharedSecret = (byte * )XMALLOC (hpke -> Nsecret , hpke -> heap ,
818820 DYNAMIC_TYPE_TMP_BUFFER );
821+ if (sharedSecret == NULL ) {
822+ return MEMORY_E ;
823+ }
819824#endif
820825
821826 /* encap */
@@ -827,6 +832,7 @@ static int wc_HpkeSetupBaseSender(Hpke* hpke, HpkeBaseContext* context,
827832 infoSz );
828833 }
829834
835+ ForceZero (sharedSecret , hpke -> Nsecret );
830836 WC_FREE_VAR_EX (sharedSecret , hpke -> heap , DYNAMIC_TYPE_TMP_BUFFER );
831837
832838 return ret ;
@@ -914,6 +920,7 @@ int wc_HpkeSealBase(Hpke* hpke, void* ephemeralKey, void* receiverKey,
914920
915921 PRIVATE_KEY_LOCK ();
916922
923+ ForceZero (context , sizeof (HpkeBaseContext ));
917924 WC_FREE_VAR_EX (context , hpke -> heap , DYNAMIC_TYPE_TMP_BUFFER );
918925
919926 return ret ;
@@ -1032,6 +1039,8 @@ static int wc_HpkeDecap(Hpke* hpke, void* receiverKey, const byte* pubKey,
10321039 hpke -> Npk * 2 , sharedSecret );
10331040 }
10341041
1042+ ForceZero (dh , hpke -> Ndh );
1043+ ForceZero (kemContext , hpke -> Npk * 2 );
10351044 WC_FREE_VAR_EX (dh , hpke -> heap , DYNAMIC_TYPE_TMP_BUFFER );
10361045 WC_FREE_VAR_EX (kemContext , hpke -> heap , DYNAMIC_TYPE_TMP_BUFFER );
10371046
@@ -1058,6 +1067,7 @@ static int wc_HpkeSetupBaseReceiver(Hpke* hpke, HpkeBaseContext* context,
10581067 infoSz );
10591068 }
10601069
1070+ ForceZero (sharedSecret , hpke -> Nsecret );
10611071 WC_FREE_VAR_EX (sharedSecret , hpke -> heap , DYNAMIC_TYPE_TMP_BUFFER );
10621072
10631073 return ret ;
@@ -1144,6 +1154,7 @@ int wc_HpkeOpenBase(Hpke* hpke, void* receiverKey, const byte* pubKey,
11441154
11451155 PRIVATE_KEY_LOCK ();
11461156
1157+ ForceZero (context , sizeof (HpkeBaseContext ));
11471158 WC_FREE_VAR_EX (context , hpke -> heap , DYNAMIC_TYPE_TMP_BUFFER );
11481159
11491160 return ret ;
0 commit comments