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)