@@ -129,19 +129,23 @@ enum {
129129
130130static void wc_RsaCleanup (RsaKey * key )
131131{
132- #if !defined(WOLFSSL_RSA_VERIFY_INLINE ) && !defined(WOLFSSL_NO_MALLOC )
133- if (key && key -> data ) {
132+ #if !defined(WOLFSSL_NO_MALLOC ) && (defined(WOLFSSL_ASYNC_CRYPT ) || \
133+ (!defined(WOLFSSL_RSA_VERIFY_ONLY ) && !defined(WOLFSSL_RSA_VERIFY_INLINE )))
134+ if (key != NULL ) {
135+ #ifndef WOLFSSL_RSA_PUBLIC_ONLY
136+ /* if private operation zero temp buffer */
137+ if ((key -> data != NULL && key -> dataLen > 0 ) &&
138+ (key -> type == RSA_PRIVATE_DECRYPT ||
139+ key -> type == RSA_PRIVATE_ENCRYPT )) {
140+ ForceZero (key -> data , key -> dataLen );
141+ }
142+ #endif
134143 /* make sure any allocated memory is free'd */
135144 if (key -> dataIsAlloc ) {
136- #ifndef WOLFSSL_RSA_PUBLIC_ONLY
137- if (key -> type == RSA_PRIVATE_DECRYPT ||
138- key -> type == RSA_PRIVATE_ENCRYPT ) {
139- ForceZero (key -> data , key -> dataLen );
140- }
141- #endif
142145 XFREE (key -> data , key -> heap , DYNAMIC_TYPE_WOLF_BIGINT );
143146 key -> dataIsAlloc = 0 ;
144147 }
148+
145149 key -> data = NULL ;
146150 key -> dataLen = 0 ;
147151 }
@@ -163,10 +167,11 @@ int wc_InitRsaKey_ex(RsaKey* key, void* heap, int devId)
163167 key -> type = RSA_TYPE_UNKNOWN ;
164168 key -> state = RSA_STATE_NONE ;
165169 key -> heap = heap ;
166- #if !defined(WOLFSSL_RSA_VERIFY_INLINE ) && !defined(WOLFSSL_NO_MALLOC )
170+ #if !defined(WOLFSSL_NO_MALLOC ) && (defined(WOLFSSL_ASYNC_CRYPT ) || \
171+ (!defined(WOLFSSL_RSA_VERIFY_ONLY ) && !defined(WOLFSSL_RSA_VERIFY_INLINE )))
167172 key -> dataIsAlloc = 0 ;
168- key -> data = NULL ;
169173#endif
174+ key -> data = NULL ;
170175 key -> dataLen = 0 ;
171176#ifdef WC_RSA_BLINDING
172177 key -> rng = NULL ;
@@ -3504,6 +3509,7 @@ static int RsaPrivateDecryptEx(const byte* in, word32 inLen, byte* out,
35043509 break ;
35053510 }
35063511 XMEMCPY (key -> data , in , inLen );
3512+ key -> dataLen = inLen ;
35073513 }
35083514 else {
35093515 key -> dataIsAlloc = 0 ;
@@ -3537,13 +3543,13 @@ static int RsaPrivateDecryptEx(const byte* in, word32 inLen, byte* out,
35373543 case RSA_STATE_DECRYPT_UNPAD :
35383544#if !defined(WOLFSSL_RSA_VERIFY_ONLY ) && !defined(WOLFSSL_RSA_VERIFY_INLINE ) && \
35393545 !defined(WOLFSSL_NO_MALLOC )
3540- ret = wc_RsaUnPad_ex (key -> data , key -> dataLen , & pad , pad_value , pad_type ,
3541- hash , mgf , label , labelSz , saltLen ,
3542- mp_count_bits (& key -> n ), key -> heap );
3546+ ret = wc_RsaUnPad_ex (key -> data ,
3547+ key -> dataLen , & pad , pad_value , pad_type , hash , mgf ,
3548+ label , labelSz , saltLen , mp_count_bits (& key -> n ), key -> heap );
35433549#else
3544- ret = wc_RsaUnPad_ex (out , key -> dataLen , & pad , pad_value , pad_type , hash ,
3545- mgf , label , labelSz , saltLen ,
3546- mp_count_bits (& key -> n ), key -> heap );
3550+ ret = wc_RsaUnPad_ex (out ,
3551+ key -> dataLen , & pad , pad_value , pad_type , hash , mgf , label ,
3552+ labelSz , saltLen , mp_count_bits (& key -> n ), key -> heap );
35473553#endif
35483554 if (rsa_type == RSA_PUBLIC_DECRYPT && ret > (int )outLen ) {
35493555 ret = RSA_BUFFER_E ;
0 commit comments