Skip to content

Commit f57484d

Browse files
authored
Merge pull request #9616 from douzzer/20251230-persistent-drbg
20251230-persistent-drbg
2 parents b609fe2 + 0059f16 commit f57484d

24 files changed

Lines changed: 1643 additions & 592 deletions

.wolfssl_known_macro_extras

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -790,6 +790,7 @@ WOLFSSL_MONT_RED_CT
790790
WOLFSSL_MP_COND_COPY
791791
WOLFSSL_MP_INVMOD_CONSTANT_TIME
792792
WOLFSSL_MULTICIRCULATE_ALTNAMELIST
793+
WOLFSSL_NEW_PRIME_CHECK
793794
WOLFSSL_NONBLOCK_OCSP
794795
WOLFSSL_NOSHA3_384
795796
WOLFSSL_NOT_WINDOWS_API

configure.ac

Lines changed: 22 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1428,6 +1428,7 @@ then
14281428
test "$enable_md5" = "" && enable_md5=yes
14291429
test "$enable_anon" = "" && enable_anon=yes
14301430
test "$enable_ssh" = "" && test "$enable_hmac" != "no" && enable_ssh=yes
1431+
test "$enable_rng_bank" = "" && enable_rng_bank=yes
14311432

14321433
# the compiler optimizer generates a weird out-of-bounds bss reference for
14331434
# find_hole() in the FP_ECC implementation.
@@ -2208,6 +2209,19 @@ then
22082209
AM_CFLAGS="$AM_CFLAGS -DWC_NO_RNG"
22092210
fi
22102211

2212+
AC_ARG_ENABLE([rng-bank],
2213+
[AS_HELP_STRING([--enable-rng-bank],[Enable compiling and using RNG banks (default: disabled)])],
2214+
[ ENABLED_RNG_BANK=$enableval ],
2215+
[ ENABLED_RNG_BANK=$KERNEL_MODE_DEFAULTS ]
2216+
)
2217+
2218+
if test "$ENABLED_RNG_BANK" = "yes"
2219+
then
2220+
AS_IF([test "$ENABLED_RNG" = "no"],
2221+
AC_MSG_ERROR([--enable-rng-bank requires --enable-rng]))
2222+
AM_CFLAGS="$AM_CFLAGS -DWC_RNG_BANK_SUPPORT"
2223+
fi
2224+
22112225

22122226
# DTLS-SCTP
22132227
AC_ARG_ENABLE([sctp],
@@ -3984,12 +3998,17 @@ then
39843998
fi
39853999

39864000
# AMD RDSEED
3987-
AC_ARG_ENABLE([amdrand],
3988-
[AS_HELP_STRING([--enable-amdrand],[Enable AMD rdseed as preferred RNG seeding source (default: disabled)])],
4001+
AC_ARG_ENABLE([amdrdseed],
4002+
[AS_HELP_STRING([--enable-amdrdseed],[Enable AMD rdseed as preferred RNG seeding source (default: disabled)])],
39894003
[ ENABLED_AMDRDSEED=$enableval ],
39904004
[ ENABLED_AMDRDSEED=no ]
39914005
)
39924006

4007+
AC_ARG_ENABLE([amdrand],
4008+
[AS_HELP_STRING([--enable-amdrand],[Enable AMD rdseed as preferred RNG seeding source (default: disabled)])],
4009+
[ ENABLED_AMDRDSEED=$enableval ]
4010+
)
4011+
39934012
if test "$ENABLED_AMDRDSEED" = "yes"
39944013
then
39954014
AM_CFLAGS="$AM_CFLAGS -DHAVE_AMD_RDSEED"
@@ -11079,6 +11098,7 @@ AM_CONDITIONAL([BUILD_ECCSI],[test "x$ENABLED_ECCSI" = "xyes" || test "x$ENABLED
1107911098
AM_CONDITIONAL([BUILD_SAKKE],[test "x$ENABLED_SAKKE" = "xyes" || test "x$ENABLED_USERSETTINGS" = "xyes"])
1108011099
AM_CONDITIONAL([BUILD_MEMORY],[test "x$ENABLED_MEMORY" = "xyes" || test "x$ENABLED_USERSETTINGS" = "xyes"])
1108111100
AM_CONDITIONAL([BUILD_MEMUSE],[test "x$ENABLED_ENTROPY_MEMUSE" = "xyes" || test "x$ENABLED_USERSETTINGS" = "xyes"])
11101+
AM_CONDITIONAL([BUILD_RNG_BANK],[test "$ENABLED_RNG_BANK" = "yes" || test "$ENABLED_USERSETTINGS" = "yes"])
1108211102
AM_CONDITIONAL([BUILD_RSA],[test "x$ENABLED_RSA" = "xyes" || test "x$ENABLED_USERSETTINGS" = "xyes"])
1108311103
AM_CONDITIONAL([BUILD_DH],[test "x$ENABLED_DH" != "xno" || test "x$ENABLED_USERSETTINGS" = "xyes"])
1108411104
AM_CONDITIONAL([BUILD_ASN],[test "x$ENABLED_ASN" != "xno" || test "x$ENABLED_RSA" = "xyes" || test "x$ENABLED_USERSETTINGS" = "xyes"])

linuxkm/linuxkm_wc_port.h

Lines changed: 13 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -937,7 +937,9 @@
937937
typeof(kfree) *kfree;
938938
typeof(ksize) *ksize;
939939

940+
#ifndef LINUXKM_LKCAPI_REGISTER_HASH_DRBG_DEFAULT
940941
typeof(get_random_bytes) *get_random_bytes;
942+
#endif
941943
#if LINUX_VERSION_CODE < KERNEL_VERSION(4, 0, 0)
942944
typeof(getnstimeofday) *getnstimeofday;
943945
#elif LINUX_VERSION_CODE < KERNEL_VERSION(5, 0, 0)
@@ -1072,9 +1074,7 @@
10721074

10731075
#endif /* !WOLFCRYPT_ONLY && !NO_CERTS */
10741076

1075-
#ifdef WOLFSSL_DEBUG_BACKTRACE_ERROR_CODES
10761077
typeof(dump_stack) *dump_stack;
1077-
#endif
10781078

10791079
#ifdef CONFIG_ARM64
10801080
#ifndef CONFIG_ARCH_TEGRA
@@ -1269,7 +1269,9 @@
12691269
#endif
12701270
#define ksize WC_PIE_INDIRECT_SYM(ksize)
12711271

1272+
#ifndef LINUXKM_LKCAPI_REGISTER_HASH_DRBG_DEFAULT
12721273
#define get_random_bytes WC_PIE_INDIRECT_SYM(get_random_bytes)
1274+
#endif
12731275
#if LINUX_VERSION_CODE < KERNEL_VERSION(4, 0, 0)
12741276
#define getnstimeofday WC_PIE_INDIRECT_SYM(getnstimeofday)
12751277
#elif LINUX_VERSION_CODE < KERNEL_VERSION(5, 0, 0)
@@ -1345,9 +1347,7 @@
13451347

13461348
#endif /* !WOLFCRYPT_ONLY && !NO_CERTS */
13471349

1348-
#ifdef WOLFSSL_DEBUG_BACKTRACE_ERROR_CODES
13491350
#define dump_stack WC_PIE_INDIRECT_SYM(dump_stack)
1350-
#endif
13511351

13521352
#undef preempt_count /* just in case -- not a macro on x86. */
13531353
#define preempt_count WC_PIE_INDIRECT_SYM(preempt_count)
@@ -1729,4 +1729,13 @@
17291729
#error unexpected BITS_PER_LONG value.
17301730
#endif
17311731

1732+
/* WC_DUMP_BACKTRACE_NONDEBUG is intended to dump a backtrace only if it hasn't
1733+
* already been dumped by the called function.
1734+
*/
1735+
#if defined(WOLFSSL_DEBUG_TRACE_ERROR_CODES) && defined(WOLFSSL_DEBUG_BACKTRACE_ERROR_CODES)
1736+
#define WC_DUMP_BACKTRACE_NONDEBUG WC_DO_NOTHING
1737+
#else
1738+
#define WC_DUMP_BACKTRACE_NONDEBUG dump_stack()
1739+
#endif
1740+
17321741
#endif /* LINUXKM_WC_PORT_H */

linuxkm/lkcapi_dh_glue.c

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -749,10 +749,7 @@ static int km_ffdhe_init(struct crypto_kpp *tfm, int name, word32 nbits)
749749
ctx->name = name;
750750
ctx->nbits = nbits;
751751

752-
if (WOLFSSL_ATOMIC_LOAD(linuxkm_lkcapi_registering_now))
753-
err = LKCAPI_INITRNG_FOR_SELFTEST(&ctx->rng);
754-
else
755-
err = wc_InitRng(&ctx->rng);
752+
err = LKCAPI_INITRNG(&ctx->rng);
756753
if (err) {
757754
#ifdef WOLFKM_DEBUG_DH
758755
pr_err("%s: init rng returned: %d\n", WOLFKM_DH_DRIVER, err);

linuxkm/lkcapi_ecdh_glue.c

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -387,10 +387,7 @@ static int km_ecdh_init(struct crypto_kpp *tfm, int curve_id)
387387
ctx->curve_len = (word32) ret;
388388
}
389389

390-
if (WOLFSSL_ATOMIC_LOAD(linuxkm_lkcapi_registering_now))
391-
ret = LKCAPI_INITRNG_FOR_SELFTEST(&ctx->rng);
392-
else
393-
ret = wc_InitRng(&ctx->rng);
390+
ret = LKCAPI_INITRNG(&ctx->rng);
394391
if (ret) {
395392
#ifdef WOLFKM_DEBUG_ECDH
396393
pr_err("%s: init rng returned: %d\n", WOLFKM_ECDH_DRIVER, ret);

linuxkm/lkcapi_rsa_glue.c

Lines changed: 7 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -634,14 +634,13 @@ static int km_rsa_ctx_init(struct km_rsa_ctx * ctx, int hash_oid)
634634
static inline int km_rsa_ctx_init_rng(struct km_rsa_ctx * ctx) {
635635
switch (ctx->rng.status) {
636636
case WC_DRBG_OK:
637+
#ifdef WC_RNG_BANK_SUPPORT
638+
case WC_DRBG_BANKREF:
639+
#endif
637640
return 0;
638641
case WC_DRBG_NOT_INIT:
639642
{
640-
int err;
641-
if (WOLFSSL_ATOMIC_LOAD(linuxkm_lkcapi_registering_now))
642-
err = LKCAPI_INITRNG_FOR_SELFTEST(&ctx->rng);
643-
else
644-
err = wc_InitRng(&ctx->rng);
643+
int err = LKCAPI_INITRNG(&ctx->rng);
645644
if (err) {
646645
pr_err("%s: init rng returned: %d\n", WOLFKM_RSA_DRIVER, err);
647646
if (err == WC_NO_ERR_TRACE(MEMORY_E))
@@ -2105,7 +2104,7 @@ static int linuxkm_test_rsa_driver(const char * driver, int nbits)
21052104
memset(&rng, 0, sizeof(rng));
21062105
memset(key, 0, sizeof(RsaKey));
21072106

2108-
ret = LKCAPI_INITRNG_FOR_SELFTEST(&rng);
2107+
ret = LKCAPI_INITRNG(&rng);
21092108

21102109
if (ret) {
21112110
pr_err("error: init rng returned: %d\n", ret);
@@ -2483,7 +2482,7 @@ static int linuxkm_test_pkcs1pad_driver(const char * driver, int nbits,
24832482
memset(&rng, 0, sizeof(rng));
24842483
memset(key, 0, sizeof(RsaKey));
24852484

2486-
ret = LKCAPI_INITRNG_FOR_SELFTEST(&rng);
2485+
ret = LKCAPI_INITRNG(&rng);
24872486
if (ret) {
24882487
pr_err("error: init rng returned: %d\n", ret);
24892488
goto test_pkcs1_end;
@@ -3007,7 +3006,7 @@ static int linuxkm_test_pkcs1_driver(const char * driver, int nbits,
30073006
memset(&rng, 0, sizeof(rng));
30083007
memset(key, 0, sizeof(RsaKey));
30093008

3010-
ret = LKCAPI_INITRNG_FOR_SELFTEST(&rng);
3009+
ret = LKCAPI_INITRNG(&rng);
30113010
if (ret) {
30123011
pr_err("error: init rng returned: %d\n", ret);
30133012
goto test_pkcs1_end;

0 commit comments

Comments
 (0)