@@ -129,9 +129,10 @@ static void wc_xmss_digest_free(XmssState* state)
129129 * @return Other negative when digest algorithm initialization failed.
130130 */
131131static WC_INLINE int wc_xmss_state_init (XmssState * state ,
132- const XmssParams * params )
132+ const XmssParams * params , void * heap )
133133{
134134 state -> params = params ;
135+ state -> heap = heap ;
135136 state -> ret = 0 ;
136137 return wc_xmss_digest_init (state );
137138}
@@ -686,7 +687,7 @@ static int wc_xmsskey_alloc_sk(XmssKey* key)
686687 }
687688 if (ret == 0 ) {
688689 /* Allocate a buffer to hold secret key. */
689- key -> sk = (unsigned char * )XMALLOC (key -> sk_len , NULL ,
690+ key -> sk = (unsigned char * )XMALLOC (key -> sk_len , key -> heap ,
690691 DYNAMIC_TYPE_TMP_BUFFER );
691692 if (key -> sk == NULL ) {
692693 WOLFSSL_MSG ("error: malloc XMSS key->sk failed" );
@@ -738,12 +739,12 @@ static WC_INLINE int wc_xmsskey_signupdate(XmssKey* key, byte* sig,
738739 if (ret == 0 ) {
739740 WC_DECLARE_VAR (state , XmssState , 1 , 0 );
740741
741- WC_ALLOC_VAR_EX (state , XmssState , 1 , NULL , DYNAMIC_TYPE_TMP_BUFFER ,
742- ret = MEMORY_E );
742+ WC_ALLOC_VAR_EX (state , XmssState , 1 , key -> heap ,
743+ DYNAMIC_TYPE_TMP_BUFFER , ret = MEMORY_E );
743744 if (WC_VAR_OK (state ))
744745 {
745746 /* Initialize state for use in signing. */
746- ret = wc_xmss_state_init (state , key -> params );
747+ ret = wc_xmss_state_init (state , key -> params , key -> heap );
747748 if (ret == 0 ) {
748749 /* Read was good. Now sign and update the secret key in memory.
749750 */
@@ -771,7 +772,7 @@ static WC_INLINE int wc_xmsskey_signupdate(XmssKey* key, byte* sig,
771772 /* Free state after use. */
772773 wc_xmss_state_free (state );
773774 }
774- WC_FREE_VAR_EX (state , NULL , DYNAMIC_TYPE_TMP_BUFFER );
775+ WC_FREE_VAR_EX (state , key -> heap , DYNAMIC_TYPE_TMP_BUFFER );
775776 }
776777 }
777778
@@ -819,7 +820,6 @@ int wc_XmssKey_Init(XmssKey* key, void* heap, int devId)
819820{
820821 int ret = 0 ;
821822
822- (void ) heap ;
823823 (void ) devId ;
824824
825825 /* Validate parameters. */
@@ -830,6 +830,7 @@ int wc_XmssKey_Init(XmssKey* key, void* heap, int devId)
830830 if (ret == 0 ) {
831831 /* Zeroize key and set state to initialized. */
832832 ForceZero (key , sizeof (XmssKey ));
833+ key -> heap = heap ;
833834 key -> state = WC_XMSS_STATE_INITED ;
834835 }
835836
@@ -911,7 +912,7 @@ void wc_XmssKey_Free(XmssKey* key)
911912 if (key -> sk != NULL ) {
912913 /* Zeroize private key. */
913914 ForceZero (key -> sk , key -> sk_len );
914- XFREE (key -> sk , NULL , DYNAMIC_TYPE_TMP_BUFFER );
915+ XFREE (key -> sk , key -> heap , DYNAMIC_TYPE_TMP_BUFFER );
915916 key -> sk = NULL ;
916917 key -> sk_len = 0 ;
917918 }
@@ -1083,7 +1084,7 @@ int wc_XmssKey_MakeKey(XmssKey* key, WC_RNG* rng)
10831084 }
10841085#ifdef WOLFSSL_SMALL_STACK
10851086 if (ret == 0 ) {
1086- seed = (unsigned char * )XMALLOC (3 * key -> params -> n , NULL ,
1087+ seed = (unsigned char * )XMALLOC (3 * key -> params -> n , key -> heap ,
10871088 DYNAMIC_TYPE_TMP_BUFFER );
10881089 if (seed == NULL ) {
10891090 ret = MEMORY_E ;
@@ -1099,12 +1100,12 @@ int wc_XmssKey_MakeKey(XmssKey* key, WC_RNG* rng)
10991100 if (ret == 0 ) {
11001101 WC_DECLARE_VAR (state , XmssState , 1 , 0 );
11011102
1102- WC_ALLOC_VAR_EX (state , XmssState , 1 , NULL , DYNAMIC_TYPE_TMP_BUFFER ,
1103- ret = MEMORY_E );
1103+ WC_ALLOC_VAR_EX (state , XmssState , 1 , key -> heap ,
1104+ DYNAMIC_TYPE_TMP_BUFFER , ret = MEMORY_E );
11041105 if (WC_VAR_OK (state ))
11051106 {
11061107 /* Initialize state for use in key generation. */
1107- ret = wc_xmss_state_init (state , key -> params );
1108+ ret = wc_xmss_state_init (state , key -> params , key -> heap );
11081109 if (ret == 0 ) {
11091110 /* Finally make the private/public key pair. Immediately write
11101111 * it to NV storage and then clear from memory. */
@@ -1125,7 +1126,7 @@ int wc_XmssKey_MakeKey(XmssKey* key, WC_RNG* rng)
11251126 /* Free state after use. */
11261127 wc_xmss_state_free (state );
11271128 }
1128- WC_FREE_VAR_EX (state , NULL , DYNAMIC_TYPE_TMP_BUFFER );
1129+ WC_FREE_VAR_EX (state , key -> heap , DYNAMIC_TYPE_TMP_BUFFER );
11291130 }
11301131 }
11311132
@@ -1146,7 +1147,7 @@ int wc_XmssKey_MakeKey(XmssKey* key, WC_RNG* rng)
11461147 key -> state = WC_XMSS_STATE_OK ;
11471148 }
11481149
1149- WC_FREE_VAR_EX (seed , NULL , DYNAMIC_TYPE_TMP_BUFFER );
1150+ WC_FREE_VAR_EX (seed , key -> heap , DYNAMIC_TYPE_TMP_BUFFER );
11501151 return ret ;
11511152}
11521153
@@ -1623,19 +1624,19 @@ int wc_XmssKey_Verify(XmssKey* key, const byte* sig, word32 sigLen,
16231624 if (ret == 0 ) {
16241625 WC_DECLARE_VAR (state , XmssState , 1 , 0 );
16251626
1626- WC_ALLOC_VAR_EX (state , XmssState , 1 , NULL , DYNAMIC_TYPE_TMP_BUFFER ,
1627- ret = MEMORY_E );
1627+ WC_ALLOC_VAR_EX (state , XmssState , 1 , key -> heap ,
1628+ DYNAMIC_TYPE_TMP_BUFFER , ret = MEMORY_E );
16281629 if (WC_VAR_OK (state ))
16291630 {
16301631 /* Initialize state for use in verification. */
1631- ret = wc_xmss_state_init (state , key -> params );
1632+ ret = wc_xmss_state_init (state , key -> params , key -> heap );
16321633 if (ret == 0 ) {
16331634 /* Verify using either XMSS^MT function as it works for both. */
16341635 ret = wc_xmssmt_verify (state , m , mLen , sig , key -> pk );
16351636 /* Free state after use. */
16361637 wc_xmss_state_free (state );
16371638 }
1638- WC_FREE_VAR_EX (state , NULL , DYNAMIC_TYPE_TMP_BUFFER );
1639+ WC_FREE_VAR_EX (state , key -> heap , DYNAMIC_TYPE_TMP_BUFFER );
16391640 }
16401641 }
16411642
0 commit comments