summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorrobert-hh <robert@hammelrath.com>2021-06-06 08:11:20 +0200
committerDamien George <damien@micropython.org>2021-06-26 22:27:02 +1000
commita262faa2274e4c6297e735afe2a6c944ce58fd70 (patch)
tree6cfe205fbdd71e4189e6115e5fc42fd9a955bba6
parentf45412793e78cd5013b83b8de5219183eb53eca5 (diff)
mimxrt/moduos: Seed the PRNG on boot using the TRNG.
-rw-r--r--ports/mimxrt/moduos.c27
-rw-r--r--ports/mimxrt/mpconfigport.h3
2 files changed, 23 insertions, 7 deletions
diff --git a/ports/mimxrt/moduos.c b/ports/mimxrt/moduos.c
index fe914ce61..225cd4ddd 100644
--- a/ports/mimxrt/moduos.c
+++ b/ports/mimxrt/moduos.c
@@ -61,21 +61,34 @@ STATIC mp_obj_t os_uname(void) {
}
STATIC MP_DEFINE_CONST_FUN_OBJ_0(os_uname_obj, os_uname);
-STATIC mp_obj_t os_urandom(mp_obj_t num) {
- mp_int_t n = mp_obj_get_int(num);
- static bool initialized = false;
- vstr_t vstr;
- vstr_init_len(&vstr, n);
+static bool initialized = false;
- if (!initialized) {
- trng_config_t trngConfig;
+STATIC void trng_start(void) {
+ trng_config_t trngConfig;
+ if (!initialized) {
TRNG_GetDefaultConfig(&trngConfig);
trngConfig.sampleMode = kTRNG_SampleModeVonNeumann;
TRNG_Init(TRNG, &trngConfig);
initialized = true;
}
+}
+
+uint32_t trng_random_u32(void) {
+ uint32_t rngval;
+
+ trng_start();
+ TRNG_GetRandomData(TRNG, (uint8_t *)&rngval, 4);
+ return rngval;
+}
+
+STATIC mp_obj_t os_urandom(mp_obj_t num) {
+ mp_int_t n = mp_obj_get_int(num);
+ vstr_t vstr;
+ vstr_init_len(&vstr, n);
+
+ trng_start();
TRNG_GetRandomData(TRNG, vstr.buf, n);
return mp_obj_new_str_from_vstr(&mp_type_bytes, &vstr);
diff --git a/ports/mimxrt/mpconfigport.h b/ports/mimxrt/mpconfigport.h
index 49953bb57..8afdc8502 100644
--- a/ports/mimxrt/mpconfigport.h
+++ b/ports/mimxrt/mpconfigport.h
@@ -30,6 +30,8 @@
#include "mpconfigboard.h"
#include "fsl_common.h"
+uint32_t trng_random_u32(void);
+
// Memory allocation policies
#define MICROPY_GC_STACK_ENTRY_TYPE uint16_t
#define MICROPY_GC_ALLOC_THRESHOLD (0)
@@ -118,6 +120,7 @@
#define MICROPY_PY_UTIME_MP_HAL (1)
#define MICROPY_PY_URANDOM (1)
#define MICROPY_PY_URANDOM_EXTRA_FUNCS (1)
+#define MICROPY_PY_URANDOM_SEED_INIT_FUNC (trng_random_u32())
#define MICROPY_PY_USELECT (1)
#define MICROPY_PY_MACHINE (1)
#define MICROPY_PY_MACHINE_PIN_MAKE_NEW mp_pin_make_new