6f34800884
If a port provides MICROPY_PY_URANDOM_SEED_INIT_FUNC as a source of randomness then this will be used when urandom.seed() is called without an argument (or with None as the argument) to seed the pRNG. Other related changes in this commit: - mod_urandom___init__ is changed to call seed() without arguments, instead of explicitly passing in the result of MICROPY_PY_URANDOM_SEED_INIT_FUNC. - mod_urandom___init__ will only ever seed the pRNG once (before it could seed it again if imported by, eg, random and then urandom). - The Yasmarang state is moved to the BSS for builds where the state is guaranteed to be initialised on import of the (u)random module. Signed-off-by: Damien George <damien@micropython.org>
31 lines
579 B
Python
31 lines
579 B
Python
# test urandom.seed() without any arguments
|
|
|
|
try:
|
|
import urandom as random
|
|
except ImportError:
|
|
try:
|
|
import random
|
|
except ImportError:
|
|
print("SKIP")
|
|
raise SystemExit
|
|
|
|
try:
|
|
random.seed()
|
|
except ValueError:
|
|
# no default seed on this platform
|
|
print("SKIP")
|
|
raise SystemExit
|
|
|
|
|
|
def rng_seq():
|
|
return [random.getrandbits(16) for _ in range(10)]
|
|
|
|
|
|
# seed with default and check that doesn't produce the same RNG sequence
|
|
random.seed()
|
|
seq = rng_seq()
|
|
random.seed()
|
|
print(seq == rng_seq())
|
|
random.seed(None)
|
|
print(seq == rng_seq())
|