mirror of
https://github.com/wolfSSL/wolfssl.git
synced 2026-07-09 06:20:52 +02:00
Fix old SDK TRNG clock init, health-test and locking
This commit is contained in:
@@ -625,7 +625,11 @@ int wc_MXC_TRNG_Random(unsigned char* output, unsigned int sz)
|
||||
if (status != 0) {
|
||||
return status;
|
||||
}
|
||||
#if defined(WOLFSSL_MAX3266X_OLD)
|
||||
status = TRNG_Init(NULL);
|
||||
#else
|
||||
status = MXC_TPU_Init(MXC_SYS_PERIPH_CLOCK_TRNG);
|
||||
#endif
|
||||
if (status == 0) {
|
||||
/* void return function */
|
||||
MXC_TPU_TRNG_Read(MXC_TRNG, output, sz);
|
||||
@@ -643,6 +647,13 @@ int wc_MXC_TRNG_Random(unsigned char* output, unsigned int sz)
|
||||
/* Implements TRNG on-demand health test (the older SDK does not provide one) */
|
||||
int wc_MXC_TRNG_HealthTest(void)
|
||||
{
|
||||
if (TRNG_Init(NULL) != 0) {
|
||||
MAX3266X_MSG("TRNG Device did not initialize");
|
||||
return RNG_FAILURE_E;
|
||||
}
|
||||
|
||||
while ((MXC_TRNG->st & MXC_F_TRNG_ST_RND_RDY) == 0) {}
|
||||
|
||||
/* Clear on-going test if necessary */
|
||||
if (MXC_TRNG->cn & MXC_F_TRNG_CN_ODHT) {
|
||||
MXC_TRNG->cn &= ~MXC_F_TRNG_CN_ODHT;
|
||||
|
||||
@@ -5193,30 +5193,22 @@ int wc_GenerateSeed(OS_Seed* os, byte* output, word32 sz)
|
||||
#elif defined(MAX3266X_RNG)
|
||||
int wc_GenerateSeed(OS_Seed* os, byte* output, word32 sz)
|
||||
{
|
||||
#ifdef WOLFSSL_MAX3266X
|
||||
int status;
|
||||
#endif /* WOLFSSL_MAX3266X */
|
||||
static int initDone = 0;
|
||||
(void)os;
|
||||
if (initDone == 0) {
|
||||
#ifdef WOLFSSL_MAX3266X
|
||||
status = wolfSSL_HwRngMutexLock();
|
||||
if (status != 0) {
|
||||
return status;
|
||||
}
|
||||
#endif /* WOLFSSL_MAX3266X */
|
||||
if(MXC_TRNG_HealthTest() != 0) {
|
||||
#ifdef DEBUG_WOLFSSL
|
||||
WOLFSSL_MSG("TRNG HW Health Test Failed");
|
||||
#endif /* DEBUG_WOLFSSL */
|
||||
#ifdef WOLFSSL_MAX3266X
|
||||
wolfSSL_HwRngMutexUnLock();
|
||||
#endif /* WOLFSSL_MAX3266X */
|
||||
return WC_HW_E;
|
||||
}
|
||||
#ifdef WOLFSSL_MAX3266X
|
||||
wolfSSL_HwRngMutexUnLock();
|
||||
#endif /* WOLFSSL_MAX3266X */
|
||||
initDone = 1;
|
||||
}
|
||||
return wc_MXC_TRNG_Random(output, sz);
|
||||
|
||||
Reference in New Issue
Block a user