| @@ -63,11 +63,15 @@ def create_shares(data, k, nshares): | |||||
| data = bytes(data) | data = bytes(data) | ||||
| powers = (None, ) + tuple(GF2p8(x).powerseries(k - 1) for x in range(1, nshares + 1)) | |||||
| powers = (None, ) + tuple(GF2p8(x).powerseries(k - 1) for x in | |||||
| range(1, nshares + 1)) | |||||
| coeffs = [ [ x ] + [ random.randint(1, 255) for y in range(k - 1) ] for idx, x in enumerate(data) ] | |||||
| coeffs = [ [ x ] + [ random.randint(1, 255) for y in | |||||
| range(k - 1) ] for idx, x in enumerate(data) ] | |||||
| return [ (x, bytes([ int(evalpoly(coeffs[idx], powers[x])) for idx, val in enumerate(data) ])) for x in range(1, nshares + 1) ] | |||||
| return [ (x, bytes([ int(evalpoly(coeffs[idx], | |||||
| powers[x])) for idx, val in enumerate(data) ])) for x in | |||||
| range(1, nshares + 1) ] | |||||
| def recover_data(shares, k): | def recover_data(shares, k): | ||||
| '''Recover the value given shares, where k is needed. | '''Recover the value given shares, where k is needed. | ||||
| @@ -190,10 +194,12 @@ class TestShamirSS(unittest.TestCase): | |||||
| vals = [ GF2p8(random.randint(0, 255)) for x in range(5) ] | vals = [ GF2p8(random.randint(0, 255)) for x in range(5) ] | ||||
| r = evalpoly(vals, powers) | r = evalpoly(vals, powers) | ||||
| self.assertEqual(r, vals[0] + vals[1] * powers[1] + vals[2] * powers[2] + vals[3] * powers[3] + vals[4] * powers[4]) | |||||
| self.assertEqual(r, vals[0] + vals[1] * powers[1] + vals[2] * | |||||
| powers[2] + vals[3] * powers[3] + vals[4] * powers[4]) | |||||
| r = evalpoly(vals[:3], powers) | r = evalpoly(vals[:3], powers) | ||||
| self.assertEqual(r, vals[0] + vals[1] * powers[1] + vals[2] * powers[2]) | |||||
| self.assertEqual(r, vals[0] + vals[1] * powers[1] + vals[2] * | |||||
| powers[2]) | |||||
| def test_create_shares(self): | def test_create_shares(self): | ||||
| self.assertRaises(TypeError, create_shares, '', 1, 1) | self.assertRaises(TypeError, create_shares, '', 1, 1) | ||||
| @@ -222,7 +228,8 @@ class TestShamirSS(unittest.TestCase): | |||||
| self.assertEqual(a * ainv, 1) | self.assertEqual(a * ainv, 1) | ||||
| invcache = (None, ) + tuple(int(GF2p8(x) ** -1) for x in range(1, 256)) | |||||
| invcache = (None, ) + \ | |||||
| tuple(int(GF2p8(x) ** -1) for x in range(1, 256)) | |||||
| if GF2p8._invcache != invcache: # pragma: no cover | if GF2p8._invcache != invcache: # pragma: no cover | ||||
| print('inv cache:', repr(invcache)) | print('inv cache:', repr(invcache)) | ||||
| @@ -279,7 +286,9 @@ class TestShamirSS(unittest.TestCase): | |||||
| # Basic mul | # Basic mul | ||||
| self.assertEqual(GF2p8(0x80) * 2, 0x87) | self.assertEqual(GF2p8(0x80) * 2, 0x87) | ||||
| self.assertEqual(GF2p8(0x80) * 6, (0x80 * 6) ^ (0x187 << 1)) | |||||
| self.assertEqual(GF2p8(0x80) * 8, (0x80 * 8) ^ (0x187 << 2) ^ (0x187 << 1) ^ 0x187) | |||||
| self.assertEqual(GF2p8(0x80) * 6, | |||||
| (0x80 * 6) ^ (0x187 << 1)) | |||||
| self.assertEqual(GF2p8(0x80) * 8, | |||||
| (0x80 * 8) ^ (0x187 << 2) ^ (0x187 << 1) ^ 0x187) | |||||
| self.assertEqual(a + b - b, a) | self.assertEqual(a + b - b, a) | ||||