def test_secretshare_split_combine_all_primes_sizes(self):
     for bits in Primes._PRIMES.keys():
         if bits == 512:
             continue
         secret = Secret()
         secret.random(bits)
         shamir = SecretShare(3, 5, secret=secret)
         shamir.split()
         shamir.shares = shamir.shares[1:4]
         secret_combined = shamir.combine()
         self.assertEqual(secret_combined.value, secret.value,
                          f'Secrets differ for {bits} bits')
 def test_secret_from_hex(self):
     secret = Secret()
     secret.from_hex('61636162')
     self.assertEqual(secret.value, 1633902946)
     secret = Secret()
     secret.from_hex('0x61636162')
     self.assertEqual(secret.value, 1633902946)
 def test_secret_from_base64(self):
     secret = Secret()
     secret.from_base64('YWNhYg==')
     self.assertEqual(secret.value, 1633902946)
     secret = Secret()
     secret.from_base64(b'YWNhYg==\n')
     self.assertEqual(secret.value, 1633902946)
 def test_secretshare_split(self):
     secret = Secret(1633902946)
     shamir = SecretShare(2, 3, secret=secret)
     shares = shamir.split()
     self.assertEqual(shares, shamir.shares)
     self.assertEqual(len(shares), 3)
     point = 1
     for share in shares:
         self.assertIsInstance(share, Share)
         self.assertEqual(share.point, point)
         point += 1
 def test_secretshare_init(self):
     secret = Secret(1633902946)
     threshold = 2
     share_count = 3
     shares = Share(1), Share(2)
     shamir = SecretShare(threshold,
                          share_count,
                          secret=secret,
                          shares=shares)
     self.assertEqual(shamir.threshold, threshold)
     self.assertEqual(shamir.share_count, share_count)
     self.assertEqual(shamir.secret, secret)
     self.assertEqual(shamir.shares, list(shares))
 def test_secretshare_setters_getters(self):
     shamir = SecretShare()
     shamir.threshold = 5
     self.assertEqual(shamir.threshold, 5)
     shamir.share_count = 7
     self.assertEqual(shamir.share_count, 7)
     shamir.secret = Secret(1633902946)
     self.assertEqual(shamir.secret.value, 1633902946)
     s1 = Share(1, 5)
     s2 = Share(2, 5)
     shamir.shares = s1, s2,
     self.assertEqual(shamir.shares[0], s1)
     self.assertEqual(shamir.shares[1], s2)
     self.assertEqual(shamir.max_share_count, 30)
 def test_secret_value(self):
     secret = Secret()
     for wrongtype in WRONGTYPES_INT:
         with self.assertRaises(TypeError):
             secret.value = wrongtype
     with self.assertRaises(ValueError):
         secret.value = 0
     with self.assertRaises(ValueError):
         secret.value = -1
     with self.assertRaises(ValueError):
         secret.value = Primes.biggest() + 1
 def test_secretshare_combine(self):
     shares_int = (
         (1, 50250691263452338915556183402696678272),
         (2, 100501382526904677831112366803759453598),
         (3, 150752073790357016746668550204822228924),
     )
     secret_expected = Secret(1633902946)
     shamir = SecretShare(2, 3)
     shamir.shares = []
     for share_int in shares_int[:2]:
         share = Share(*share_int)
         shamir.shares.append(share)
     secret = shamir.combine()
     self.assertEqual(shamir.secret, secret)
     self.assertEqual(secret.value, secret_expected.value)
     shamir.shares = []
     for share_int in shares_int[1:]:
         share = Share(*share_int)
         shamir.shares.append(share)
     shamir.combine()
     self.assertEqual(shamir.secret.value, secret_expected.value)
 def test_secret_from_bytes(self):
     secret = Secret()
     secret.from_bytes(b'acab')
     self.assertEqual(secret.value, 1633902946)
 def test_secret_bytes(self):
     secret = Secret(1633902946)
     self.assertEqual(bytes(secret), b'acab')
     self.assertEqual(secret.to_bytes(), b'acab')
 def test_secret_int(self):
     secret = Secret(1633902946)
     self.assertEqual(int(secret), 1633902946)
 def test_secret_repr(self):
     secret = Secret(1633902946)
     self.assertEqual(repr(secret), "Secret(value=1633902946)")
 def test_secret_str(self):
     secret = Secret(1633902946)
     self.assertEqual(str(secret), 'YWNhYg==')
 def test_secret_bit_length(self):
     secret = Secret(1633902946)
     self.assertEqual(secret.bit_length(), 31)
     secret = Secret(1)
     self.assertEqual(secret.bit_length(), 1)
 def test_secret_to_base64(self):
     secret = Secret(1633902946)
     self.assertEqual(secret.to_base64(), b'YWNhYg==\n')
 def test_secret_from_bytes(self):
     secret = Secret()
     for wrongtype in WRONGTYPES_BYTES:
         self.assertRaises(TypeError, secret.from_bytes, wrongtype)
     self.assertRaises(ValueError, secret.from_bytes, b'\x00')
 def test_secret_init(self):
     secret = Secret(1633902946)
     self.assertEqual(secret.value, 1633902946)
 def test_secret_to_hex(self):
     secret = Secret(1633902946)
     self.assertEqual(secret.to_hex(), '61636162')
 def test_secret_value(self):
     secret = Secret()
     secret.value = 1633902946
     self.assertEqual(secret.value, 1633902946)
 def test_secret_max_bits(self):
     self.assertEqual(Secret.max_bits(), 8192)
 def test_secret_random(self):
     # testing actual randomness is out of the scope
     secret1 = Secret()
     secret1.random()
     secret2 = Secret()
     secret2.random()
     self.assertNotEqual(secret1.value, secret2.value)
     self.assertLessEqual(secret1.value.bit_length(), Secret.max_bits())
     secret1.random(128)
     self.assertNotEqual(secret1, secret2)
     self.assertLessEqual(secret1.value.bit_length(), 128)
 def test_secret_max_bytes(self):
     self.assertEqual(Secret.max_bytes(), 1024)