diff --git a/Documentation/pycardium/os.rst b/Documentation/pycardium/os.rst index 8097bf7f8ec103bb53c263500129f9d6b498943e..325586631487d80b8658953ad5f7578bdf2ada58 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 c017e417e75a0dea115af340bb1b5a2b85c672e9..a693420b18979e8e1b835c85c71a943dd3c1ac9c 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 f78afd25ed5aba9b38ef3b29d845ef5d573e47a6..6574d4369ff0ae21be5c1217fa41daa347073feb 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)