From 19adf1f3bb69ea971a4b6ad6a1d6c71f128cf814 Mon Sep 17 00:00:00 2001 From: Rahix <rahix@rahix.de> Date: Wed, 21 Aug 2019 22:30:39 +0200 Subject: [PATCH] feat(pycardium): Add os.urandom() Signed-off-by: Rahix <rahix@rahix.de> --- Documentation/pycardium/os.rst | 8 ++++++++ pycardium/modules/os.c | 13 +++++++++++++ pycardium/modules/qstrdefs.h | 1 + 3 files changed, 22 insertions(+) diff --git a/Documentation/pycardium/os.rst b/Documentation/pycardium/os.rst index 8097bf7f..32558663 100644 --- a/Documentation/pycardium/os.rst +++ b/Documentation/pycardium/os.rst @@ -21,6 +21,14 @@ CPython-Like :returns: A list of entities (files or subdirectories) in the directory ``dir``. +.. py:function:: urandom(n) + + Return ``n`` random bytes. + + :param int n: Number of random bytes to retrieve. + :returns: ``bytes()`` object with ``n`` random bytes. + + Epicardium-Specific ------------------- diff --git a/pycardium/modules/os.c b/pycardium/modules/os.c index c017e417..a693420b 100644 --- a/pycardium/modules/os.c +++ b/pycardium/modules/os.c @@ -135,6 +135,18 @@ static mp_obj_t mp_os_read_battery() } static MP_DEFINE_CONST_FUN_OBJ_0(read_battery_obj, mp_os_read_battery); +static mp_obj_t mp_os_urandom(mp_obj_t size_in) +{ + size_t size = mp_obj_get_int(size_in); + vstr_t vstr; + + vstr_init_len(&vstr, size); + epic_trng_read((uint8_t*)vstr.buf, size); + + return mp_obj_new_str_from_vstr(&mp_type_bytes, &vstr); +} +static MP_DEFINE_CONST_FUN_OBJ_1(urandom_obj, mp_os_urandom); + static const mp_rom_map_elem_t os_module_globals_table[] = { { MP_ROM_QSTR(MP_QSTR___name__), MP_ROM_QSTR(MP_QSTR_os) }, { MP_ROM_QSTR(MP_QSTR_exit), MP_ROM_PTR(&exit_obj) }, @@ -145,6 +157,7 @@ static const mp_rom_map_elem_t os_module_globals_table[] = { { MP_ROM_QSTR(MP_QSTR_mkdir), MP_ROM_PTR(&mkdir_obj) }, { MP_ROM_QSTR(MP_QSTR_rename), MP_ROM_PTR(&rename_obj) }, { MP_ROM_QSTR(MP_QSTR_read_battery), MP_ROM_PTR(&read_battery_obj) }, + { MP_ROM_QSTR(MP_QSTR_urandom), MP_ROM_PTR(&urandom_obj) }, }; static MP_DEFINE_CONST_DICT(os_module_globals, os_module_globals_table); diff --git a/pycardium/modules/qstrdefs.h b/pycardium/modules/qstrdefs.h index f78afd25..6574d436 100644 --- a/pycardium/modules/qstrdefs.h +++ b/pycardium/modules/qstrdefs.h @@ -106,6 +106,7 @@ Q(unlink) Q(mkdir) Q(rename) Q(read_battery) +Q(urandom) /* gpio */ Q(gpio) -- GitLab