@@ -273,7 +273,7 @@ int wc_InitRsaKey_ex(RsaKey* key, void* heap, int devId)
273273 key -> data = NULL ;
274274#endif
275275 key -> dataLen = 0 ;
276- #ifdef WC_RSA_BLINDING
276+ #ifndef WC_NO_RNG
277277 key -> rng = NULL ;
278278#endif
279279
@@ -677,25 +677,44 @@ int wc_CheckRsaKey(RsaKey* key)
677677#endif
678678#ifdef WOLFSSL_SMALL_STACK
679679 mp_int * tmp = NULL ;
680- WC_RNG * rng = NULL ;
681680#else
682681 mp_int tmp [1 ];
683- WC_RNG rng [ 1 ] ;
682+ WC_RNG rng_buf ;
684683#endif
684+ WC_RNG * rng = NULL ;
685685 int ret = 0 ;
686686
687+ if (key == NULL )
688+ return BAD_FUNC_ARG ;
689+
687690#ifdef WOLFSSL_SMALL_STACK
688- rng = (WC_RNG * )XMALLOC (sizeof (WC_RNG ), NULL , DYNAMIC_TYPE_RNG );
689- if (rng != NULL )
690- tmp = (mp_int * )XMALLOC (sizeof (mp_int ), NULL , DYNAMIC_TYPE_RSA );
691- if (rng == NULL || tmp == NULL ) {
692- XFREE (rng , NULL , DYNAMIC_TYPE_RNG );
693- XFREE (tmp , NULL , DYNAMIC_TYPE_RSA );
691+ tmp = (mp_int * )XMALLOC (sizeof (mp_int ), NULL , DYNAMIC_TYPE_RSA );
692+ if (tmp == NULL ) {
694693 return MEMORY_E ;
695694 }
696695#endif
697696
698- ret = wc_InitRng (rng );
697+ if (key -> rng )
698+ rng = key -> rng ;
699+ else {
700+ #ifdef WOLFSSL_SMALL_STACK
701+ rng = (WC_RNG * )XMALLOC (sizeof (* rng ), NULL , DYNAMIC_TYPE_RNG );
702+ if (rng == NULL ) {
703+ XFREE (tmp , NULL , DYNAMIC_TYPE_RSA );
704+ return MEMORY_E ;
705+ }
706+ #else
707+ rng = & rng_buf ;
708+ #endif
709+ ret = wc_InitRng (rng );
710+ if (ret != 0 ) {
711+ #ifdef WOLFSSL_SMALL_STACK
712+ XFREE (tmp , NULL , DYNAMIC_TYPE_RSA );
713+ XFREE (rng , NULL , DYNAMIC_TYPE_RNG );
714+ #endif
715+ return ret ;
716+ }
717+ }
699718
700719 if (ret == 0 )
701720 SAVE_VECTOR_REGISTERS (ret = _svr_ret ;);
@@ -705,11 +724,6 @@ int wc_CheckRsaKey(RsaKey* key)
705724 ret = MP_INIT_E ;
706725 }
707726
708- if (ret == 0 ) {
709- if (key == NULL )
710- ret = BAD_FUNC_ARG ;
711- }
712-
713727 if (ret == 0 )
714728 ret = _ifc_pairwise_consistency_test (key , rng );
715729
@@ -801,10 +815,15 @@ int wc_CheckRsaKey(RsaKey* key)
801815
802816 RESTORE_VECTOR_REGISTERS ();
803817
804- wc_FreeRng (rng );
818+ if ((rng != NULL ) && (rng != key -> rng )) {
819+ wc_FreeRng (rng );
820+ #ifdef WOLFSSL_SMALL_STACK
821+ XFREE (rng , NULL , DYNAMIC_TYPE_RNG );
822+ #endif
823+ }
824+
805825#ifdef WOLFSSL_SMALL_STACK
806826 XFREE (tmp , NULL , DYNAMIC_TYPE_RSA );
807- XFREE (rng , NULL , DYNAMIC_TYPE_RNG );
808827#endif
809828
810829 return ret ;
@@ -4685,8 +4704,7 @@ int wc_MakeRsaKey(RsaKey* key, int size, long e, WC_RNG* rng)
46854704#endif /* !FIPS || FIPS_VER >= 2 */
46864705#endif /* WOLFSSL_KEY_GEN */
46874706
4688-
4689- #ifdef WC_RSA_BLINDING
4707+ #ifndef WC_NO_RNG
46904708int wc_RsaSetRNG (RsaKey * key , WC_RNG * rng )
46914709{
46924710 if (key == NULL || rng == NULL )
@@ -4696,7 +4714,7 @@ int wc_RsaSetRNG(RsaKey* key, WC_RNG* rng)
46964714
46974715 return 0 ;
46984716}
4699- #endif /* WC_RSA_BLINDING */
4717+ #endif /* !WC_NO_RNG */
47004718
47014719#ifdef WC_RSA_NONBLOCK
47024720int wc_RsaSetNonBlock (RsaKey * key , RsaNb * nb )
0 commit comments