diff --git a/IDE/ROWLEY-CROSSWORKS-ARM/user_settings.h b/IDE/ROWLEY-CROSSWORKS-ARM/user_settings.h index 5641973c9..95a795e02 100644 --- a/IDE/ROWLEY-CROSSWORKS-ARM/user_settings.h +++ b/IDE/ROWLEY-CROSSWORKS-ARM/user_settings.h @@ -278,17 +278,21 @@ extern "C" { /* Size of returned HW RNG value */ #define CUSTOM_RAND_TYPE unsigned int +/* Seed source */ +extern unsigned int custom_rand_generate(void); +#undef CUSTOM_RAND_GENERATE +#define CUSTOM_RAND_GENERATE custom_rand_generate + /* Choose RNG method */ #if 1 /* Use built-in P-RNG (SHA256 based) with HW RNG */ /* P-RNG + HW RNG (P-RNG is ~8K) */ #undef HAVE_HASHDRBG #define HAVE_HASHDRBG - - extern unsigned int custom_rand_generate(void); - #undef CUSTOM_RAND_GENERATE - #define CUSTOM_RAND_GENERATE custom_rand_generate #else + #undef WC_NO_HASHDRBG + #define WC_NO_HASHDRBG + /* Bypass P-RNG and use only HW RNG */ extern int custom_rand_generate_block(unsigned char* output, unsigned int sz); #undef CUSTOM_RAND_GENERATE_BLOCK diff --git a/IDE/ROWLEY-CROSSWORKS-ARM/wolfssl.hzp b/IDE/ROWLEY-CROSSWORKS-ARM/wolfssl.hzp index 3deb98b3e..8b228c4c4 100644 --- a/IDE/ROWLEY-CROSSWORKS-ARM/wolfssl.hzp +++ b/IDE/ROWLEY-CROSSWORKS-ARM/wolfssl.hzp @@ -122,12 +122,26 @@ recurse="Yes" /> - + + + + + + + + + + + + + + + + + + + + diff --git a/wolfcrypt/src/random.c b/wolfcrypt/src/random.c index f2b6ec2da..0adbd6413 100644 --- a/wolfcrypt/src/random.c +++ b/wolfcrypt/src/random.c @@ -103,20 +103,25 @@ int wc_RNG_GenerateByte(WC_RNG* rng, byte* b) int wnr_timeout = 0; /* entropy timeout, mililseconds */ int wnr_mutex_init = 0; /* flag for mutex init */ wnr_context* wnr_ctx; /* global netRandom context */ -#elif !defined(NO_DEV_RANDOM) && !defined(CUSTOM_RAND_GENERATE) && \ - !defined(WOLFSSL_GENSEED_FORTEST) && !defined(WOLFSSL_MDK_ARM) && \ - !defined(WOLFSSL_IAR_ARM) && !defined(WOLFSSL_ROWLEY_ARM) && \ - !defined(WOLFSSL_EMBOS) - #include - #ifndef EBSNET - #include - #endif #elif defined(FREESCALE_KSDK_2_0_TRNG) #include "fsl_trng.h" #elif defined(FREESCALE_KSDK_2_0_RNGA) #include "fsl_rnga.h" + +#elif defined(NO_DEV_RANDOM) +#elif defined(CUSTOM_RAND_GENERATE) +#elif defined(CUSTOM_RAND_GENERATE_BLOCK) +#elif defined(WOLFSSL_GENSEED_FORTEST) +#elif defined(WOLFSSL_MDK_ARM) +#elif defined(WOLFSSL_IAR_ARM) +#elif defined(WOLFSSL_ROWLEY_ARM) +#elif defined(WOLFSSL_EMBOS) #else /* include headers that may be needed to get good seed */ + #include + #ifndef EBSNET + #include + #endif #endif @@ -602,13 +607,9 @@ int wc_RNG_GenerateBlock(WC_RNG* rng, byte* output, word32 sz) } #else - /* try using the generate seed direectly */ - ret = wc_GenerateSeed(&rng->seed, output, sz); - if (ret == 0) - return 0; - /* if we get here then there is an RNG configuration error */ ret = RNG_FAILURE_E; + #endif /* HAVE_HASHDRBG */ return ret; @@ -1590,6 +1591,11 @@ int wc_GenerateSeed(OS_Seed* os, byte* output, word32 sz) return 0; } +#elif defined(CUSTOM_RAND_GENERATE_BLOCK) + /* #define CUSTOM_RAND_GENERATE_BLOCK myRngFunc + * extern int myRngFunc(byte* output, word32 sz); + */ + #elif defined(WOLFSSL_SAFERTOS) #elif defined(WOLFSSL_LEANPSK) #elif defined(WOLFSSL_IAR_ARM) diff --git a/wolfcrypt/test/test.c b/wolfcrypt/test/test.c index 0981a0b04..c624a892b 100644 --- a/wolfcrypt/test/test.c +++ b/wolfcrypt/test/test.c @@ -1025,8 +1025,7 @@ int base64_test() int asn_test() { #ifndef NO_ASN_TIME - { - time_t now; + long now; /* Parameter Validation tests. */ if (wc_GetTime(NULL, sizeof(now)) != BAD_FUNC_ARG) @@ -1039,7 +1038,6 @@ int asn_test() return -102; if (now == 0) return -103; - } #endif return 0; diff --git a/wolfssl/wolfcrypt/random.h b/wolfssl/wolfcrypt/random.h index a4e068f1d..75fc5ebd9 100644 --- a/wolfssl/wolfcrypt/random.h +++ b/wolfssl/wolfcrypt/random.h @@ -35,11 +35,17 @@ extern "C" { #endif -/* Maximum generate block length */ + /* Maximum generate block length */ #ifndef RNG_MAX_BLOCK_LEN #define RNG_MAX_BLOCK_LEN (0x10000) #endif +/* Size of the BRBG seed */ +#ifndef DRBG_SEED_LEN + #define DRBG_SEED_LEN (440/8) +#endif + + #if defined(CUSTOM_RAND_GENERATE) && !defined(CUSTOM_RAND_TYPE) /* To maintain compatibility the default is byte */ #define CUSTOM_RAND_TYPE byte @@ -61,7 +67,6 @@ * 2. HAVE_INTEL_RDRAND: Uses the Intel RDRAND if supported by CPU. * 3. HAVE_HASHDRBG (requires SHA256 enabled): Uses SHA256 based P-RNG * seeded via wc_GenerateSeed. This is the default source. - * 4. Fallback to using wc_GenerateSeed directly. */ /* Seed source can be overriden by defining one of these: @@ -83,11 +88,7 @@ #elif defined(HAVE_WNR) /* allow whitewood as direct RNG source using wc_GenerateSeed directly */ #else - #ifndef _MSC_VER - #warning "No RNG source defined. Using wc_GenerateSeed directly" - #else - #pragma message("Warning: No RNG source defined. Using wc_GenerateSeed directly") - #endif + #error No RNG source defined! #endif #ifdef HAVE_WNR @@ -124,26 +125,25 @@ typedef struct OS_Seed { #define WC_RNG_TYPE_DEFINED #endif -#ifndef CUSTOM_RAND_GENERATE_BLOCK - -#define DRBG_SEED_LEN (440/8) - -struct DRBG; /* Private DRBG state */ - -/* Hash-based Deterministic Random Bit Generator */ -struct WC_RNG { #ifdef HAVE_HASHDRBG + /* Private DRBG state */ + struct DRBG; +#endif + +/* RNG context */ +struct WC_RNG { + OS_Seed seed; + void* heap; +#ifdef HAVE_HASHDRBG + /* Hash-based Deterministic Random Bit Generator */ struct DRBG* drbg; byte status; #endif - OS_Seed seed; - void* heap; #ifdef WOLFSSL_ASYNC_CRYPT AsyncCryptDev asyncDev; #endif }; -#endif /* !CUSTOM_RAND_GENERATE_BLOCK */ #endif /* HAVE_FIPS */ /* NO_OLD_RNGNAME removes RNG struct name to prevent possible type conflicts, @@ -152,6 +152,7 @@ struct WC_RNG { #define RNG WC_RNG #endif + WOLFSSL_LOCAL int wc_GenerateSeed(OS_Seed* os, byte* seed, word32 sz);