From abff02532d78cdb3454d75a732fbe94fead154d2 Mon Sep 17 00:00:00 2001 From: Chris Conlon Date: Mon, 16 Sep 2013 14:43:33 -0600 Subject: [PATCH] add Freescale K53 RNGB support --- README | 9 ++++++++- ctaocrypt/src/random.c | 39 +++++++++++++++++++++++++++++++++++++++ 2 files changed, 47 insertions(+), 1 deletion(-) diff --git a/README b/README index 5870376bc..e66f71453 100644 --- a/README +++ b/README @@ -35,7 +35,14 @@ before calling SSL_new(); Though it's not recommended. *** end Notes *** -CyaSSL Release 2.8.0 (8/30/2013) +CyaSSL Release 2.9.0 (X/XX/XXXX) + +The Freescale Kinetis K53 RNGB documentation can be found in Chapter 33 of the +K53 Sub-Family Reference Manual: +http://cache.freescale.com/files/32bit/doc/ref_manual/K53P144M100SF2RM.pdf + + +*****************CyaSSL Release 2.8.0 (8/30/2013) Release 2.8.0 CyaSSL has bug fixes and new features including: - AES-GCM and AES-CCM use AES-NI diff --git a/ctaocrypt/src/random.c b/ctaocrypt/src/random.c index 4f167e8ea..88871951d 100644 --- a/ctaocrypt/src/random.c +++ b/ctaocrypt/src/random.c @@ -525,6 +525,45 @@ int GenerateSeed(OS_Seed* os, byte* output, word32 sz) return 0; } + + #elif defined(FREESCALE_K53_RNGB) + /* + * Generates a RNG seed using the Random Number Generator (RNGB) + * on the Kinetis K53. Documentation located in Chapter 33 of + * K53 Sub-Family Reference Manual (see note in the README for link). + */ + int GenerateSeed(OS_Seed* os, byte* output, word32 sz) + { + int i; + + /* turn on RNGB module */ + SIM_SCGC3 |= SIM_SCGC3_RNGB_MASK; + + /* reset RNGB */ + RNG_CMD |= RNG_CMD_SR_MASK; + + /* FIFO generate interrupt, return all zeros on underflow, + * set auto reseed */ + RNG_CR |= (RNG_CR_FUFMOD_MASK | RNG_CR_AR_MASK); + + /* gen seed, clear interrupts, clear errors */ + RNG_CMD |= (RNG_CMD_GS_MASK | RNG_CMD_CI_MASK | RNG_CMD_CE_MASK); + + /* wait for seeding to complete */ + while ((RNG_SR & RNG_SR_SDN_MASK) == 0) {} + + for (i = 0; i < sz; i++) { + + /* wait for a word to be available from FIFO */ + while((RNG_SR & RNG_SR_FIFO_LVL_MASK) == 0) {} + + /* get value */ + output[i] = RNG_OUT; + } + + return 0; + } + #else #warning "write a real random seed!!!!, just for testing now"