From 5e95740d9306b897d7ec09feb5b311f659017a52 Mon Sep 17 00:00:00 2001 From: Chris Conlon Date: Thu, 27 Aug 2015 11:45:40 -0600 Subject: [PATCH] Freescale: Add KSDK Bare Metal build, TRNG support --- src/internal.c | 9 ++++++ wolfcrypt/src/asn.c | 26 ++++++++++++++++ wolfcrypt/src/random.c | 17 +++++++++-- wolfssl/wolfcrypt/settings.h | 58 ++++++++++++++++++++++++------------ 4 files changed, 89 insertions(+), 21 deletions(-) diff --git a/src/internal.c b/src/internal.c index 374e2bd68..edc6cd33e 100644 --- a/src/internal.c +++ b/src/internal.c @@ -2497,6 +2497,15 @@ ProtocolVersion MakeDTLSv1_2(void) return (word32) mqxTime.SECONDS; } +#elif defined(FREESCALE_KSDK_BM) + + #include "fsl_pit_driver.h" + + word32 LowResTimer(void) + { + return PIT_DRV_GetUs(); + } + #elif defined(WOLFSSL_TIRTOS) word32 LowResTimer(void) diff --git a/wolfcrypt/src/asn.c b/wolfcrypt/src/asn.c index 1640072a4..73e446046 100644 --- a/wolfcrypt/src/asn.c +++ b/wolfcrypt/src/asn.c @@ -113,6 +113,11 @@ #define XTIME(t1) mqx_time((t1)) #define XGMTIME(c, t) mqx_gmtime((c), (t)) #define XVALIDATE_DATE(d, f, t) ValidateDate((d), (f), (t)) +#elif defined(FREESCALE_KSDK_BM) + #include + #define XTIME(t1) ksdk_time((t1)) + #define XGMTIME(c, t) gmtime((c)) + #define XVALIDATE_DATE(d, f, t) ValidateDate((d), (f), (t)) #elif defined(USER_TIME) /* user time, and gmtime compatible functions, there is a gmtime @@ -350,6 +355,27 @@ struct tm* mqx_gmtime(const time_t* clock, struct tm* tmpTime) #endif /* FREESCALE_MQX */ +#ifdef FREESCALE_KSDK_BM + +/* setting for PIT timer */ +#define PIT_INSTANCE 0 +#define PIT_CHANNEL 0 + +#include "fsl_pit_driver.h" + +time_t ksdk_time(time_t* timer) +{ + time_t localTime; + + if (timer == NULL) + timer = &localTime; + + *timer = (PIT_DRV_ReadTimerUs(PIT_INSTANCE, PIT_CHANNEL)) / 1000000; + return *timer; +} + +#endif /* FREESCALE_KSDK_BM */ + #ifdef WOLFSSL_TIRTOS time_t XTIME(time_t * timer) diff --git a/wolfcrypt/src/random.c b/wolfcrypt/src/random.c index dbf608f2e..ba0f3c66a 100755 --- a/wolfcrypt/src/random.c +++ b/wolfcrypt/src/random.c @@ -107,11 +107,15 @@ int wc_RNG_GenerateByte(WC_RNG* rng, byte* b) #ifndef EBSNET #include #endif + #elif defined(FREESCALE_TRNG) + #define TRNG_INSTANCE (0) + #include "fsl_device_registers.h" + #include "fsl_trng_driver.h" #else /* include headers that may be needed to get good seed */ #endif #endif /* USE_WINDOWS_API */ - + #ifdef HAVE_INTEL_RDGEN static int wc_InitRng_IntelRD(void) ; #if defined(HAVE_HASHDRBG) || defined(NO_RC4) @@ -1080,7 +1084,8 @@ int wc_GenerateSeed(OS_Seed* os, byte* output, word32 sz) } #endif /* WOLFSSL_MIC32MZ_RNG */ -#elif defined(FREESCALE_MQX) || defined(FREESCALE_KSDK_MQX) +#elif defined(FREESCALE_MQX) || defined(FREESCALE_KSDK_MQX) || \ + defined(FREESCALE_KSDK_BM) #ifdef FREESCALE_K70_RNGA /* @@ -1154,6 +1159,14 @@ int wc_GenerateSeed(OS_Seed* os, byte* output, word32 sz) return 0; } + #elif defined(FREESCALE_TRNG) + + int wc_GenerateSeed(OS_Seed* os, byte* output, word32 sz) + { + TRNG_DRV_GetRandomData(TRNG_INSTANCE, output, sz); + return(0); + } + #else #warning "write a real random seed!!!!, just for testing now" diff --git a/wolfssl/wolfcrypt/settings.h b/wolfssl/wolfcrypt/settings.h index 717ea6391..e6c5d690d 100644 --- a/wolfssl/wolfcrypt/settings.h +++ b/wolfssl/wolfcrypt/settings.h @@ -78,6 +78,9 @@ /* Uncomment next line if building for Freescale KSDK MQX/RTCS/MFS */ /* #define FREESCALE_KSDK_MQX */ +/* Uncomment next line if building for Freescale KSDK Bare Metal */ +/* #define FREESCALE_KSDK_BM */ + /* Uncomment next line if using STM32F2 */ /* #define WOLFSSL_STM32F2 */ @@ -461,15 +464,7 @@ #endif #ifdef FREESCALE_MQX - #define SIZEOF_LONG_LONG 8 - #define NO_WRITEV - #define NO_DEV_RANDOM - #define NO_RABBIT - #define NO_WOLFSSL_DIR - #define USE_FAST_MATH - #define TFM_TIMING_RESISTANT - #define FREESCALE_K70_RNGA - /* #define FREESCALE_K53_RNGB */ + #define FREESCALE_COMMON #include "mqx.h" #ifndef NO_FILESYSTEM #include "mfs.h" @@ -485,16 +480,7 @@ #endif #ifdef FREESCALE_KSDK_MQX - #define SIZEOF_LONG_LONG 8 - #define NO_WRITEV - #define NO_DEV_RANDOM - #define NO_RABBIT - #define NO_WOLFSSL_DIR - #define USE_FAST_MATH - #define TFM_TIMING_RESISTANT - #define NO_OLD_RNGNAME - #define FREESCALE_K70_RNGA - /* #define FREESCALE_K53_RNGB */ + #define FREESCALE_COMMON #include #ifndef NO_FILESYSTEM #if MQX_USE_IO_OLD @@ -513,6 +499,40 @@ #define XREALLOC(p, n, h, t) _mem_realloc((p), (n)) /* since MQX 4.1.2 */ #endif +#ifdef FREESCALE_KSDK_BM + #define FREESCALE_COMMON + #define WOLFSSL_USER_IO + #define SINGLE_THREADED + #define NO_FILESYSTEM + #define USE_WOLFSSL_MEMORY +#endif + +#ifdef FREESCALE_COMMON + #define SIZEOF_LONG_LONG 8 + #define NO_WRITEV + #define NO_DEV_RANDOM + #define NO_RABBIT + #define NO_WOLFSSL_DIR + #define USE_FAST_MATH + #define TFM_TIMING_RESISTANT + + #if FSL_FEATURE_SOC_ENET_COUNT == 0 + #define WOLFSSL_USER_IO + #endif + + /* random seed */ + #define NO_OLD_RNGNAME + #if FSL_FEATURE_SOC_TRNG_COUNT > 0 + #define FREESCALE_TRNG + #elif !defined(FREESCALE_KSDK_BM) + #define FREESCALE_K70_RNGA + /* #define FREESCALE_K53_RNGB */ + #endif + + /* HW crypto */ + /* #define FREESCALE_MMCAU */ +#endif + #ifdef WOLFSSL_STM32F2 #define SIZEOF_LONG_LONG 8 #define NO_DEV_RANDOM