extmod/modurandom: Add "urandom" module.

Seedable and reproducible pseudo-random number generator. Implemented
functions are getrandbits(n) (n <= 32) and seed().

The algorithm used is Yasmarang by Ilya Levin:
http://www.literatecode.com/yasmarang
This commit is contained in:
Paul Sokolovsky
2016-01-17 12:10:28 +02:00
parent e7bee6b35e
commit a58a91eb04
8 changed files with 109 additions and 0 deletions

View File

@@ -101,6 +101,7 @@ extern const mp_obj_module_t mp_module_ure;
extern const mp_obj_module_t mp_module_uheapq;
extern const mp_obj_module_t mp_module_uhashlib;
extern const mp_obj_module_t mp_module_ubinascii;
extern const mp_obj_module_t mp_module_urandom;
extern const mp_obj_module_t mp_module_ussl;
extern const mp_obj_module_t mp_module_machine;
extern const mp_obj_module_t mp_module_lwip;

View File

@@ -783,6 +783,10 @@ typedef double mp_float_t;
#define MICROPY_PY_UBINASCII (0)
#endif
#ifndef MICROPY_PY_URANDOM
#define MICROPY_PY_URANDOM (0)
#endif
#ifndef MICROPY_PY_MACHINE
#define MICROPY_PY_MACHINE (0)
#endif

View File

@@ -184,6 +184,9 @@ STATIC const mp_rom_map_elem_t mp_builtin_module_table[] = {
#if MICROPY_PY_UBINASCII
{ MP_ROM_QSTR(MP_QSTR_ubinascii), MP_ROM_PTR(&mp_module_ubinascii) },
#endif
#if MICROPY_PY_URANDOM
{ MP_ROM_QSTR(MP_QSTR_urandom), MP_ROM_PTR(&mp_module_urandom) },
#endif
#if MICROPY_PY_USSL
{ MP_ROM_QSTR(MP_QSTR_ussl), MP_ROM_PTR(&mp_module_ussl) },
#endif

View File

@@ -168,6 +168,7 @@ PY_O_BASENAME = \
../extmod/modubinascii.o \
../extmod/machine_mem.o \
../extmod/modussl.o \
../extmod/modurandom.o \
../extmod/fsusermount.o \
../extmod/moduos_dupterm.o \

View File

@@ -671,3 +671,9 @@ Q(count)
#if MICROPY_PY_OS_DUPTERM
Q(dupterm)
#endif
#if MICROPY_PY_URANDOM
Q(urandom)
Q(getrandbits)
Q(seed)
#endif