1
0
mirror of https://github.com/trezor/trezor-firmware.git synced 2024-12-24 15:28:10 +00:00
trezor-firmware/storage/tests/python/src/prng.py
2019-04-25 16:50:56 +02:00

35 lines
705 B
Python

import sys
seed = 0
def random_buffer(length: int) -> bytes:
length = length
if length % 4 != 0:
raise ValueError("Use only for whole words (multiples of 4 bytes)")
b = bytearray(length)
for i in range(length):
if i % 4 == 0:
rand = random32().to_bytes(4, sys.byteorder)
b[i] = rand[i % 4]
return bytes(b)
def random_reseed(reseed: int = 0):
global seed
seed = reseed
def random32():
global seed
seed = (1664525 * seed + 1013904223) & 0xFFFFFFFF
return seed
def random_uniform(n: int):
max = 0xFFFFFFFF - (0xFFFFFFFF % n)
while True:
x = random32()
if x < max:
return x // (max // n)