diff options
author | robert-hh <robert@hammelrath.com> | 2021-06-06 08:11:20 +0200 |
---|---|---|
committer | Damien George <damien@micropython.org> | 2021-06-26 22:27:02 +1000 |
commit | a262faa2274e4c6297e735afe2a6c944ce58fd70 (patch) | |
tree | 6cfe205fbdd71e4189e6115e5fc42fd9a955bba6 | |
parent | f45412793e78cd5013b83b8de5219183eb53eca5 (diff) |
mimxrt/moduos: Seed the PRNG on boot using the TRNG.
-rw-r--r-- | ports/mimxrt/moduos.c | 27 | ||||
-rw-r--r-- | ports/mimxrt/mpconfigport.h | 3 |
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 |