@@ -232,16 +232,18 @@ static int mlkemkey_get_k(const MlKemKey* key)
232232 */
233233static int mlkemkey_alloc_priv (MlKemKey * key , unsigned int k )
234234{
235+ word32 sz = (word32 )(k * MLKEM_N * sizeof (sword16 ));
235236 if (key -> priv != NULL ) {
236- ForceZero (key -> priv , k * MLKEM_N * sizeof ( sword16 ) );
237+ ForceZero (key -> priv , key -> privAllocSz );
237238 XFREE (key -> priv , key -> heap , DYNAMIC_TYPE_TMP_BUFFER );
238239 key -> priv = NULL ;
240+ key -> privAllocSz = 0 ;
239241 }
240- key -> priv = (sword16 * )XMALLOC (k * MLKEM_N * sizeof (sword16 ), key -> heap ,
241- DYNAMIC_TYPE_TMP_BUFFER );
242+ key -> priv = (sword16 * )XMALLOC (sz , key -> heap , DYNAMIC_TYPE_TMP_BUFFER );
242243 if (key -> priv == NULL ) {
243244 return MEMORY_E ;
244245 }
246+ key -> privAllocSz = sz ;
245247 return 0 ;
246248}
247249
@@ -434,6 +436,7 @@ int wc_MlKemKey_Init(MlKemKey* key, int type, void* heap, int devId)
434436 #ifdef WOLFSSL_MLKEM_DYNAMIC_KEYS
435437 key -> priv = NULL ;
436438 key -> pub = NULL ;
439+ key -> privAllocSz = 0 ;
437440 #ifdef WOLFSSL_MLKEM_CACHE_A
438441 key -> a = NULL ;
439442 #endif
@@ -539,11 +542,10 @@ int wc_MlKemKey_Free(MlKemKey* key)
539542 ForceZero (& key -> prf , sizeof (key -> prf ));
540543#ifdef WOLFSSL_MLKEM_DYNAMIC_KEYS
541544 if (key -> priv != NULL ) {
542- int k = mlkemkey_get_k (key );
543- ForceZero (key -> priv ,
544- (word32 )(k * MLKEM_N ) * (word32 )sizeof (sword16 ));
545+ ForceZero (key -> priv , key -> privAllocSz );
545546 XFREE (key -> priv , key -> heap , DYNAMIC_TYPE_TMP_BUFFER );
546547 key -> priv = NULL ;
548+ key -> privAllocSz = 0 ;
547549 }
548550 if (key -> pub != NULL ) {
549551 XFREE (key -> pub , key -> heap , DYNAMIC_TYPE_TMP_BUFFER );
@@ -2015,15 +2017,15 @@ int wc_MlKemKey_DecodePrivateKey(MlKemKey* key, const unsigned char* in,
20152017 /* Compute the hash of the public key. */
20162018 ret = MLKEM_HASH_H (& key -> hash , p , pubLen , key -> h );
20172019 if (ret != 0 ) {
2018- ForceZero (key -> priv , k * MLKEM_N );
2020+ ForceZero (key -> priv , k * MLKEM_N * sizeof ( sword16 ) );
20192021 }
20202022 }
20212023
20222024 if (ret == 0 ) {
20232025 p += pubLen ;
20242026 /* Compare computed public key hash with stored hash */
20252027 if (XMEMCMP (key -> h , p , WC_ML_KEM_SYM_SZ ) != 0 ) {
2026- ForceZero (key -> priv , k * MLKEM_N );
2028+ ForceZero (key -> priv , k * MLKEM_N * sizeof ( sword16 ) );
20272029 ret = MLKEM_PUB_HASH_E ;
20282030 }
20292031 }
0 commit comments