diff --git a/examples/benchmark/tls_bench.c b/examples/benchmark/tls_bench.c index f130f28d1..b7ac7061f 100644 --- a/examples/benchmark/tls_bench.c +++ b/examples/benchmark/tls_bench.c @@ -1586,6 +1586,9 @@ int bench_tls(void* args) /* Initialize wolfSSL */ wolfSSL_Init(); +#ifdef WC_RNG_SEED_CB + wc_SetSeed_Cb(wc_GenerateSeed); +#endif /* Parse command line arguments */ while ((ch = mygetopt(argc, argv, "?" "udeil:p:t:vT:sch:P:mS:")) != -1) { diff --git a/examples/client/client.c b/examples/client/client.c index 79aece83e..e9313ce67 100644 --- a/examples/client/client.c +++ b/examples/client/client.c @@ -3809,6 +3809,9 @@ exit: wolfSSL_Debugging_ON(); #endif wolfSSL_Init(); +#ifdef WC_RNG_SEED_CB + wc_SetSeed_Cb(wc_GenerateSeed); +#endif ChangeToWolfRoot(); #ifndef NO_WOLFSSL_CLIENT diff --git a/examples/echoclient/echoclient.c b/examples/echoclient/echoclient.c index c9cdd13ea..b2e0aa0e3 100644 --- a/examples/echoclient/echoclient.c +++ b/examples/echoclient/echoclient.c @@ -387,6 +387,9 @@ void echoclient_test(void* args) #if defined(DEBUG_CYASSL) && !defined(WOLFSSL_MDK_SHELL) CyaSSL_Debugging_ON(); #endif +#ifdef WC_RNG_SEED_CB + wc_SetSeed_Cb(wc_GenerateSeed); +#endif #ifndef CYASSL_TIRTOS ChangeToWolfRoot(); #endif diff --git a/examples/echoserver/echoserver.c b/examples/echoserver/echoserver.c index 1ef3007f8..f5d082e02 100644 --- a/examples/echoserver/echoserver.c +++ b/examples/echoserver/echoserver.c @@ -558,6 +558,9 @@ THREAD_RETURN CYASSL_THREAD echoserver_test(void* args) CyaSSL_Init(); #if defined(DEBUG_CYASSL) && !defined(CYASSL_MDK_SHELL) CyaSSL_Debugging_ON(); +#endif +#ifdef WC_RNG_SEED_CB + wc_SetSeed_Cb(wc_GenerateSeed); #endif ChangeToWolfRoot(); #ifndef NO_WOLFSSL_SERVER diff --git a/examples/sctp/sctp-client-dtls.c b/examples/sctp/sctp-client-dtls.c index c0a222463..636007241 100644 --- a/examples/sctp/sctp-client-dtls.c +++ b/examples/sctp/sctp-client-dtls.c @@ -70,6 +70,9 @@ int main() const char* response = "hello there"; char buffer[80]; +#ifdef WC_RNG_SEED_CB + wc_SetSeed_Cb(wc_GenerateSeed); +#endif WOLFSSL_CTX* ctx = wolfSSL_CTX_new(wolfDTLSv1_2_client_method()); if (ctx == NULL) err_sys("ctx new dtls client failed"); diff --git a/examples/sctp/sctp-server-dtls.c b/examples/sctp/sctp-server-dtls.c index 50a20f241..62db17068 100644 --- a/examples/sctp/sctp-server-dtls.c +++ b/examples/sctp/sctp-server-dtls.c @@ -76,6 +76,9 @@ int main() const char* response = "well hello to you"; char buffer[80]; +#ifdef WC_RNG_SEED_CB + wc_SetSeed_Cb(wc_GenerateSeed); +#endif WOLFSSL_CTX* ctx = wolfSSL_CTX_new(wolfDTLSv1_2_server_method()); if (ctx == NULL) err_sys("ctx new dtls server failed"); diff --git a/examples/server/server.c b/examples/server/server.c index 05b6f2f54..9353165d9 100644 --- a/examples/server/server.c +++ b/examples/server/server.c @@ -2885,6 +2885,9 @@ exit: wolfSSL_Debugging_ON(); #endif wolfSSL_Init(); +#ifdef WC_RNG_SEED_CB + wc_SetSeed_Cb(wc_GenerateSeed); +#endif ChangeToWolfRoot(); #ifndef NO_WOLFSSL_SERVER diff --git a/tests/unit.c b/tests/unit.c index 670e1d198..63a43ff20 100644 --- a/tests/unit.c +++ b/tests/unit.c @@ -64,6 +64,9 @@ int unit_test(int argc, char** argv) wolfSSL_Debugging_ON(); #endif +#ifdef WC_RNG_SEED_CB + wc_SetSeed_Cb(wc_GenerateSeed); +#endif #ifdef HAVE_WNR if (wc_InitNetRandom(wnrConfig, NULL, 5000) != 0) err_sys("Whitewood netRandom global config failed"); diff --git a/testsuite/testsuite.c b/testsuite/testsuite.c index d390b5483..a1bbaaa5b 100644 --- a/testsuite/testsuite.c +++ b/testsuite/testsuite.c @@ -127,6 +127,9 @@ int testsuite_test(int argc, char** argv) #if defined(DEBUG_WOLFSSL) && !defined(HAVE_VALGRIND) wolfSSL_Debugging_ON(); #endif +#ifdef WC_RNG_SEED_CB + wc_SetSeed_Cb(wc_GenerateSeed); +#endif #if !defined(WOLFSSL_TIRTOS) ChangeToWolfRoot(); diff --git a/wolfcrypt/benchmark/benchmark.c b/wolfcrypt/benchmark/benchmark.c index b9e919dee..a0bedc88b 100644 --- a/wolfcrypt/benchmark/benchmark.c +++ b/wolfcrypt/benchmark/benchmark.c @@ -1972,6 +1972,9 @@ int benchmark_init(void) printf("wolfCrypt_Init failed %d\n", ret); return EXIT_FAILURE; } +#ifdef WC_RNG_SEED_CB + wc_SetSeed_Cb(wc_GenerateSeed); +#endif bench_stats_init(); diff --git a/wolfcrypt/src/random.c b/wolfcrypt/src/random.c index 1b2e8caa5..28cfbd6e8 100644 --- a/wolfcrypt/src/random.c +++ b/wolfcrypt/src/random.c @@ -304,6 +304,7 @@ int wc_SetSeed_Cb(wc_RngSeed_Cb cb) #define DRBG_FAILURE 1 #define DRBG_NEED_RESEED 2 #define DRBG_CONT_FAILURE 3 +#define DRBG_NO_SEED_CB 4 /* RNG health states */ #define DRBG_NOT_INIT 0 @@ -815,10 +816,10 @@ static int _InitRng(WC_RNG* rng, byte* nonce, word32 nonceSz, if (ret == 0) { #ifdef WC_RNG_SEED_CB if (seedCb == NULL) { - ret = DRBG_FAILURE; + ret = DRBG_NO_SEED_CB; } else { - ret = seedCb(seed, seedSz); + ret = seedCb(&rng->seed, seed, seedSz); if (ret != 0) { ret = DRBG_FAILURE; } diff --git a/wolfcrypt/test/test.c b/wolfcrypt/test/test.c index 4f0d86956..f7954470e 100644 --- a/wolfcrypt/test/test.c +++ b/wolfcrypt/test/test.c @@ -1441,6 +1441,10 @@ initDefaultName(); err_sys("Error with wolfCrypt_Init!\n", -1003); } +#ifdef WC_RNG_SEED_CB + wc_SetSeed_Cb(wc_GenerateSeed); +#endif + #ifdef HAVE_STACK_SIZE StackSizeCheck(&args, wolfcrypt_test); #else @@ -11405,9 +11409,10 @@ static int random_rng_test(void) #if defined(HAVE_HASHDRBG) && !defined(CUSTOM_RAND_GENERATE_BLOCK) #ifdef WC_RNG_SEED_CB -static int seed_cb(byte* output, word32 sz) +static int seed_cb(OS_Seed* os, byte* output, word32 sz) { word32 i; + (void)os; /* Known answer test. Set the seed to the same value every time. */ for (i = 0; i < sz; i++) output[i] = (byte)i; @@ -11463,7 +11468,7 @@ static int rng_seed_test(void) ret = -7011; goto exit; } - ret = wc_SetSeed_Cb(NULL); + ret = wc_SetSeed_Cb(wc_GenerateSeed); if (ret != 0) { ret = -7012; } diff --git a/wolfssl/wolfcrypt/asn_public.h b/wolfssl/wolfcrypt/asn_public.h index a293a21fe..450f845eb 100644 --- a/wolfssl/wolfcrypt/asn_public.h +++ b/wolfssl/wolfcrypt/asn_public.h @@ -56,9 +56,6 @@ This library defines the interface APIs for X509 certificates. #endif #ifndef WC_RNG_TYPE_DEFINED typedef struct WC_RNG WC_RNG; - #ifdef WC_RNG_SEED_CB - typedef int (*wc_RngSeed_Cb)(byte* seed, word32 sz); - #endif #define WC_RNG_TYPE_DEFINED #endif diff --git a/wolfssl/wolfcrypt/random.h b/wolfssl/wolfcrypt/random.h index 4050ad3f9..58e31fc7b 100644 --- a/wolfssl/wolfcrypt/random.h +++ b/wolfssl/wolfcrypt/random.h @@ -194,9 +194,13 @@ struct WC_RNG { #define RNG WC_RNG #endif - +#ifndef WC_RNG_SEED_CB WOLFSSL_LOCAL int wc_GenerateSeed(OS_Seed* os, byte* seed, word32 sz); +#else +WOLFSSL_API +int wc_GenerateSeed(OS_Seed* os, byte* seed, word32 sz); +#endif #ifdef HAVE_WNR @@ -236,7 +240,7 @@ WOLFSSL_API int wc_FreeRng(WC_RNG*); #endif #ifdef WC_RNG_SEED_CB - typedef int (*wc_RngSeed_Cb)(byte* seed, word32 sz); + typedef int (*wc_RngSeed_Cb)(OS_Seed* os, byte* seed, word32 sz); WOLFSSL_API int wc_SetSeed_Cb(wc_RngSeed_Cb cb); #endif