1
0
mirror of https://github.com/trezor/trezor-firmware.git synced 2024-11-27 01:48:17 +00:00
trezor-firmware/core/tests/test_trezor.crypto.random.py

48 lines
1.3 KiB
Python
Raw Normal View History

from common import * # isort:skip
from trezor.crypto import random
2017-12-16 01:11:26 +00:00
class TestCryptoRandom(unittest.TestCase):
def test_uniform(self):
c = {}
for i in range(15):
c[i] = 0
for _ in range(15000):
r = random.uniform(15)
c[r] += 1
for i in range(15):
self.assertAlmostEqual(c[r], 1000, delta=200)
def test_bytes_length(self):
for l in range(1024 + 1):
lst = random.bytes(l)
self.assertEqual(len(lst), l)
def test_bytes_big_length(self):
with self.assertRaises(ValueError):
random.bytes(10000)
def test_bytes_uniform(self):
for _ in range(100):
c = {}
2023-06-28 10:46:29 +00:00
for h in "0123456789abcdef":
c[h] = 0
for _ in range(8):
b = random.bytes(1000)
for h in hexlify(b):
c[chr(h)] += 1
2023-06-28 10:46:29 +00:00
for h in "0123456789abcdef":
self.assertAlmostEqual(c[h], 1000, delta=200)
def test_shuffle(self):
for l in range(256 + 1):
lst = list(range(l))
random.shuffle(lst)
self.assertEqual(len(lst), l)
self.assertEqual(sorted(lst), list(range(l)))
2017-12-16 01:11:26 +00:00
2023-06-28 10:46:29 +00:00
if __name__ == "__main__":
unittest.main()