diff --git a/examples/benchmark/tls_bench.c b/examples/benchmark/tls_bench.c index 41268aaa2..3521cf744 100644 --- a/examples/benchmark/tls_bench.c +++ b/examples/benchmark/tls_bench.c @@ -1754,6 +1754,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:g")) != -1) { diff --git a/examples/client/client.c b/examples/client/client.c index 7e492e9ba..9ac5d6fd4 100644 --- a/examples/client/client.c +++ b/examples/client/client.c @@ -4185,6 +4185,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 6d1a234c4..081477eae 100644 --- a/examples/echoclient/echoclient.c +++ b/examples/echoclient/echoclient.c @@ -385,6 +385,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 a133a7e78..ba3d4d42f 100644 --- a/examples/echoserver/echoserver.c +++ b/examples/echoserver/echoserver.c @@ -546,6 +546,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 8022e50ed..6da77e975 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 5d14ca872..b8544c739 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 a846a36f5..a5d780d3e 100644 --- a/examples/server/server.c +++ b/examples/server/server.c @@ -3315,6 +3315,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 e5ed23b89..876cd37ed 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 315bcec64..def3bbfcd 100644 --- a/testsuite/testsuite.c +++ b/testsuite/testsuite.c @@ -133,6 +133,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 1ee4d17eb..3bec7e24a 100644 --- a/wolfcrypt/benchmark/benchmark.c +++ b/wolfcrypt/benchmark/benchmark.c @@ -2037,6 +2037,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 089a3b054..1857d5cd3 100644 --- a/wolfcrypt/src/random.c +++ b/wolfcrypt/src/random.c @@ -307,6 +307,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 @@ -821,10 +822,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 a9dd419b8..3c62374e4 100644 --- a/wolfcrypt/test/test.c +++ b/wolfcrypt/test/test.c @@ -1517,6 +1517,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 @@ -11667,9 +11671,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; @@ -11725,7 +11730,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 3450dfcd0..a3ac0e108 100644 --- a/wolfssl/wolfcrypt/asn_public.h +++ b/wolfssl/wolfcrypt/asn_public.h @@ -65,9 +65,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 #ifndef WC_DH_TYPE_DEFINED diff --git a/wolfssl/wolfcrypt/random.h b/wolfssl/wolfcrypt/random.h index 69cfd4867..f31a47a4f 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