From 9ec65ed418d60ede262bd8695a830351a0eb8541 Mon Sep 17 00:00:00 2001 From: Mattia Moffa Date: Fri, 19 Jun 2026 04:01:03 +0200 Subject: [PATCH] Fix old SDK TRNG clock init, health-test and locking --- wolfcrypt/src/port/maxim/max3266x.c | 11 +++++++++++ wolfcrypt/src/random.c | 8 -------- 2 files changed, 11 insertions(+), 8 deletions(-) diff --git a/wolfcrypt/src/port/maxim/max3266x.c b/wolfcrypt/src/port/maxim/max3266x.c index 2de1d2a89d..5ec504bc0b 100644 --- a/wolfcrypt/src/port/maxim/max3266x.c +++ b/wolfcrypt/src/port/maxim/max3266x.c @@ -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; diff --git a/wolfcrypt/src/random.c b/wolfcrypt/src/random.c index a75d3400e7..9b6731cf9a 100644 --- a/wolfcrypt/src/random.c +++ b/wolfcrypt/src/random.c @@ -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);