mimxrt/moduos: Seed the PRNG on boot using the TRNG.
This commit is contained in:
parent
f45412793e
commit
a262faa227
@ -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_DEFINE_CONST_FUN_OBJ_0(os_uname_obj, os_uname);
|
||||||
|
|
||||||
STATIC mp_obj_t os_urandom(mp_obj_t num) {
|
static bool initialized = false;
|
||||||
mp_int_t n = mp_obj_get_int(num);
|
|
||||||
static bool initialized = false;
|
|
||||||
vstr_t vstr;
|
|
||||||
vstr_init_len(&vstr, n);
|
|
||||||
|
|
||||||
if (!initialized) {
|
STATIC void trng_start(void) {
|
||||||
trng_config_t trngConfig;
|
trng_config_t trngConfig;
|
||||||
|
|
||||||
|
if (!initialized) {
|
||||||
TRNG_GetDefaultConfig(&trngConfig);
|
TRNG_GetDefaultConfig(&trngConfig);
|
||||||
trngConfig.sampleMode = kTRNG_SampleModeVonNeumann;
|
trngConfig.sampleMode = kTRNG_SampleModeVonNeumann;
|
||||||
|
|
||||||
TRNG_Init(TRNG, &trngConfig);
|
TRNG_Init(TRNG, &trngConfig);
|
||||||
initialized = true;
|
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);
|
TRNG_GetRandomData(TRNG, vstr.buf, n);
|
||||||
|
|
||||||
return mp_obj_new_str_from_vstr(&mp_type_bytes, &vstr);
|
return mp_obj_new_str_from_vstr(&mp_type_bytes, &vstr);
|
||||||
|
|||||||
@ -30,6 +30,8 @@
|
|||||||
#include "mpconfigboard.h"
|
#include "mpconfigboard.h"
|
||||||
#include "fsl_common.h"
|
#include "fsl_common.h"
|
||||||
|
|
||||||
|
uint32_t trng_random_u32(void);
|
||||||
|
|
||||||
// Memory allocation policies
|
// Memory allocation policies
|
||||||
#define MICROPY_GC_STACK_ENTRY_TYPE uint16_t
|
#define MICROPY_GC_STACK_ENTRY_TYPE uint16_t
|
||||||
#define MICROPY_GC_ALLOC_THRESHOLD (0)
|
#define MICROPY_GC_ALLOC_THRESHOLD (0)
|
||||||
@ -118,6 +120,7 @@
|
|||||||
#define MICROPY_PY_UTIME_MP_HAL (1)
|
#define MICROPY_PY_UTIME_MP_HAL (1)
|
||||||
#define MICROPY_PY_URANDOM (1)
|
#define MICROPY_PY_URANDOM (1)
|
||||||
#define MICROPY_PY_URANDOM_EXTRA_FUNCS (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_USELECT (1)
|
||||||
#define MICROPY_PY_MACHINE (1)
|
#define MICROPY_PY_MACHINE (1)
|
||||||
#define MICROPY_PY_MACHINE_PIN_MAKE_NEW mp_pin_make_new
|
#define MICROPY_PY_MACHINE_PIN_MAKE_NEW mp_pin_make_new
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user