from common import * from trezor.crypto import random 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 = {} for h in "0123456789abcdef": c[h] = 0 for _ in range(8): b = random.bytes(1000) for h in hexlify(b): c[chr(h)] += 1 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))) if __name__ == "__main__": unittest.main()