Skip to content

Commit bb0e07d

Browse files
committed
backport from 20251222-linuxkm-PK-initrng-optimize: wolfcrypt/src/rsa.c and wolfssl/wolfcrypt/rsa.h: make RsaKey.rng and wc_RsaSetRNG() available unconditionally, rather than only if WC_RSA_BLINDING, for use by wc_CheckRsaKey().
1 parent 0b165b0 commit bb0e07d

2 files changed

Lines changed: 28 additions & 22 deletions

File tree

wolfcrypt/src/rsa.c

Lines changed: 28 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -677,25 +677,37 @@ 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+
#endif
683+
WC_RNG *rng = NULL;
684+
#if !defined(WOLFSSL_SMALL_STACK) || defined(WOLFSSL_NO_MALLOC)
685+
WC_RNG rng_buf;
684686
#endif
685687
int ret = 0;
686688

689+
if (key == NULL)
690+
return BAD_FUNC_ARG;
691+
687692
#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);
693+
tmp = (mp_int*)XMALLOC(sizeof(mp_int), NULL, DYNAMIC_TYPE_RSA);
694+
if (tmp == NULL) {
694695
return MEMORY_E;
695696
}
696697
#endif
697698

698-
ret = wc_InitRng(rng);
699+
if (key->rng)
700+
rng = key->rng;
701+
else {
702+
#if !defined(WOLFSSL_SMALL_STACK) || defined(WOLFSSL_NO_MALLOC)
703+
rng = &rng_buf;
704+
#else
705+
rng = (WC_RNG *)XMALLOC(sizeof(*rng), NULL, DYNAMIC_TYPE_RNG);
706+
if (rng == NULL)
707+
return MEMORY_E;
708+
#endif
709+
ret = wc_InitRng(rng);
710+
}
699711

700712
if (ret == 0)
701713
SAVE_VECTOR_REGISTERS(ret = _svr_ret;);
@@ -705,11 +717,6 @@ int wc_CheckRsaKey(RsaKey* key)
705717
ret = MP_INIT_E;
706718
}
707719

708-
if (ret == 0) {
709-
if (key == NULL)
710-
ret = BAD_FUNC_ARG;
711-
}
712-
713720
if (ret == 0)
714721
ret = _ifc_pairwise_consistency_test(key, rng);
715722

@@ -801,10 +808,15 @@ int wc_CheckRsaKey(RsaKey* key)
801808

802809
RESTORE_VECTOR_REGISTERS();
803810

804-
wc_FreeRng(rng);
811+
if ((rng != NULL) && (rng != key->rng)) {
812+
wc_FreeRng(rng);
813+
#ifdef WOLFSSL_SMALL_STACK
814+
XFREE(rng, NULL, DYNAMIC_TYPE_RNG);
815+
#endif
816+
}
817+
805818
#ifdef WOLFSSL_SMALL_STACK
806819
XFREE(tmp, NULL, DYNAMIC_TYPE_RSA);
807-
XFREE(rng, NULL, DYNAMIC_TYPE_RNG);
808820
#endif
809821

810822
return ret;
@@ -4686,7 +4698,6 @@ int wc_MakeRsaKey(RsaKey* key, int size, long e, WC_RNG* rng)
46864698
#endif /* WOLFSSL_KEY_GEN */
46874699

46884700

4689-
#ifdef WC_RSA_BLINDING
46904701
int wc_RsaSetRNG(RsaKey* key, WC_RNG* rng)
46914702
{
46924703
if (key == NULL || rng == NULL)
@@ -4696,7 +4707,6 @@ int wc_RsaSetRNG(RsaKey* key, WC_RNG* rng)
46964707

46974708
return 0;
46984709
}
4699-
#endif /* WC_RSA_BLINDING */
47004710

47014711
#ifdef WC_RSA_NONBLOCK
47024712
int wc_RsaSetNonBlock(RsaKey* key, RsaNb* nb)

wolfssl/wolfcrypt/rsa.h

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -175,9 +175,7 @@ struct RsaKey {
175175
int type; /* public or private */
176176
int state;
177177
word32 dataLen;
178-
#ifdef WC_RSA_BLINDING
179178
WC_RNG* rng; /* for PrivateDecrypt blinding */
180-
#endif
181179
#ifdef WOLF_CRYPTO_CB
182180
int devId;
183181
#endif
@@ -313,9 +311,7 @@ WOLFSSL_API int wc_RsaPublicKeyDecodeRaw(const byte* n, word32 nSz,
313311
WOLFSSL_API int wc_RsaKeyToDer(RsaKey*, byte* output, word32 inLen);
314312
#endif
315313

316-
#ifdef WC_RSA_BLINDING
317314
WOLFSSL_API int wc_RsaSetRNG(RsaKey* key, WC_RNG* rng);
318-
#endif
319315
#ifdef WC_RSA_NONBLOCK
320316
WOLFSSL_API int wc_RsaSetNonBlock(RsaKey* key, RsaNb* nb);
321317
#ifdef WC_RSA_NONBLOCK_TIME

0 commit comments

Comments
 (0)