diff --git a/.github/workflows/zephyr.yml b/.github/workflows/zephyr.yml index 004bf5ff9..decdba256 100644 --- a/.github/workflows/zephyr.yml +++ b/.github/workflows/zephyr.yml @@ -7,10 +7,13 @@ jobs: run_test: name: Build and run strategy: + fail-fast: false matrix: config: - zephyr-ref: v3.4.0 zephyr-sdk: 0.16.1 + - zephyr-ref: v3.5.0 + zephyr-sdk: 0.16.3 runs-on: ubuntu-latest # This should be a safe limit for the tests to run. timeout-minutes: 15 diff --git a/wolfcrypt/src/random.c b/wolfcrypt/src/random.c index b0bd2ddce..0d67d4726 100644 --- a/wolfcrypt/src/random.c +++ b/wolfcrypt/src/random.c @@ -3506,23 +3506,16 @@ int wc_GenerateSeed(OS_Seed* os, byte* output, word32 sz) * extern int myRngFunc(byte* output, word32 sz); */ -#elif defined(WOLFSSL_SAFERTOS) || defined(WOLFSSL_LEANPSK) || \ - defined(WOLFSSL_IAR_ARM) || defined(WOLFSSL_MDK_ARM) || \ - defined(WOLFSSL_uITRON4) || defined(WOLFSSL_uTKERNEL2) || \ - defined(WOLFSSL_LPC43xx) || defined(NO_STM32_RNG) || \ - defined(MBED) || defined(WOLFSSL_EMBOS) || \ - defined(WOLFSSL_GENSEED_FORTEST) || defined(WOLFSSL_CHIBIOS) || \ - defined(WOLFSSL_CONTIKI) || defined(WOLFSSL_AZSPHERE) - - /* these platforms do not have a default random seed and - you'll need to implement your own wc_GenerateSeed or define via - CUSTOM_RAND_GENERATE_BLOCK */ - - #define USE_TEST_GENSEED - #elif defined(WOLFSSL_ZEPHYR) + #include + + #if KERNEL_VERSION_NUMBER >= 0x30500 + #include + #else #include + #endif + #ifndef _POSIX_C_SOURCE #include #else @@ -3623,6 +3616,20 @@ int wc_GenerateSeed(OS_Seed* os, byte* output, word32 sz) return ret; } +#elif defined(WOLFSSL_SAFERTOS) || defined(WOLFSSL_LEANPSK) || \ + defined(WOLFSSL_IAR_ARM) || defined(WOLFSSL_MDK_ARM) || \ + defined(WOLFSSL_uITRON4) || defined(WOLFSSL_uTKERNEL2) || \ + defined(WOLFSSL_LPC43xx) || defined(NO_STM32_RNG) || \ + defined(MBED) || defined(WOLFSSL_EMBOS) || \ + defined(WOLFSSL_GENSEED_FORTEST) || defined(WOLFSSL_CHIBIOS) || \ + defined(WOLFSSL_CONTIKI) || defined(WOLFSSL_AZSPHERE) + + /* these platforms do not have a default random seed and + you'll need to implement your own wc_GenerateSeed or define via + CUSTOM_RAND_GENERATE_BLOCK */ + + #define USE_TEST_GENSEED + #elif defined(NO_DEV_RANDOM) #error "you need to write an os specific wc_GenerateSeed() here" diff --git a/wolfcrypt/src/wc_port.c b/wolfcrypt/src/wc_port.c index 6547996e7..28ae8ab09 100644 --- a/wolfcrypt/src/wc_port.c +++ b/wolfcrypt/src/wc_port.c @@ -3164,6 +3164,30 @@ time_t z_time(time_t * timer) { struct timespec ts; + #if defined(CONFIG_RTC) && \ + (defined(CONFIG_PICOLIBC) || defined(CONFIG_NEWLIB_LIBC)) + /* Try to obtain the actual time from an RTC */ + static const struct device *rtc = DEVICE_DT_GET(DT_NODELABEL(rtc)); + + if (device_is_ready(rtc)) { + struct rtc_time rtc_time; + struct tm *tm_time = rtc_time_to_tm(&rtc_time); + + int ret = rtc_get_time(rtc, &rtc_time); + + if (ret == 0) { + time_t epochTime = mktime(tm_time); + + if (timer != NULL) + *timer = epochTime; + + return epochTime; + } + } + #endif + + /* Fallback to uptime since boot. This works for relative times, but + * not for ASN.1 date validation */ if (clock_gettime(CLOCK_REALTIME, &ts) == 0) if (timer != NULL) *timer = ts.tv_sec; diff --git a/wolfssl/wolfcrypt/wc_port.h b/wolfssl/wolfcrypt/wc_port.h index 3ae3e41a7..2cd79590e 100644 --- a/wolfssl/wolfcrypt/wc_port.h +++ b/wolfssl/wolfcrypt/wc_port.h @@ -982,7 +982,15 @@ WOLFSSL_ABI WOLFSSL_API int wolfCrypt_Cleanup(void); #ifndef _POSIX_C_SOURCE #include #else - #include + #include + #endif + + #if defined(CONFIG_RTC) + #if defined(CONFIG_PICOLIBC) || defined(CONFIG_NEWLIB_LIBC) + #include + #else + #warning "RTC support needs picolibc or newlib (nano)" + #endif #endif time_t z_time(time_t *timer);