Files
@ cc4182acd584
Branch filter:
Location: Shamira/src/tests/test_condensed.py - annotation
cc4182acd584
2.3 KiB
text/x-python
reformatted whitespace with more respect for PEP-8
6511b6f4f6c0 6511b6f4f6c0 6511b6f4f6c0 6511b6f4f6c0 6511b6f4f6c0 6511b6f4f6c0 cc4182acd584 cc4182acd584 6511b6f4f6c0 6511b6f4f6c0 6511b6f4f6c0 6511b6f4f6c0 cc4182acd584 6511b6f4f6c0 6511b6f4f6c0 6511b6f4f6c0 6511b6f4f6c0 cc4182acd584 6511b6f4f6c0 6511b6f4f6c0 6511b6f4f6c0 cc4182acd584 6511b6f4f6c0 6511b6f4f6c0 6511b6f4f6c0 6511b6f4f6c0 cc4182acd584 6511b6f4f6c0 6511b6f4f6c0 cc4182acd584 6511b6f4f6c0 6511b6f4f6c0 cc4182acd584 6511b6f4f6c0 cc4182acd584 6511b6f4f6c0 6511b6f4f6c0 cc4182acd584 6511b6f4f6c0 6511b6f4f6c0 6511b6f4f6c0 cc4182acd584 6511b6f4f6c0 6511b6f4f6c0 6511b6f4f6c0 cc4182acd584 6511b6f4f6c0 cc4182acd584 cc4182acd584 6511b6f4f6c0 cc4182acd584 cc4182acd584 cc4182acd584 6511b6f4f6c0 6511b6f4f6c0 6511b6f4f6c0 6511b6f4f6c0 cc4182acd584 cc4182acd584 6511b6f4f6c0 6511b6f4f6c0 6511b6f4f6c0 6511b6f4f6c0 6511b6f4f6c0 cc4182acd584 cc4182acd584 cc4182acd584 cc4182acd584 6511b6f4f6c0 6511b6f4f6c0 6511b6f4f6c0 6511b6f4f6c0 b52e197db5a8 6511b6f4f6c0 cc4182acd584 b52e197db5a8 6511b6f4f6c0 6511b6f4f6c0 6511b6f4f6c0 b52e197db5a8 6511b6f4f6c0 6511b6f4f6c0 6511b6f4f6c0 6511b6f4f6c0 6511b6f4f6c0 6511b6f4f6c0 6511b6f4f6c0 cc4182acd584 | # GNU GPLv3, see LICENSE
import os
import random
from unittest import TestCase
from gf256 import _gfmul, evaluate
from shamira import generateRaw, generate
from condensed import *
class TestCondensed(TestCase):
_urandom = os.urandom
@classmethod
def setUpClass(cls):
random.seed(17)
os.urandom = lambda n: bytes(random.randint(0, 255) for i in range(n))
@classmethod
def tearDownClass(cls):
os.urandom = cls._urandom
def testGfmul(self):
for a in range(256):
for b in range(256):
self.assertEqual(_gfmul(a, b), gfmul(a, b))
def testGetConstantCoef(self):
self.assertEqual(getConstantCoef((1, 1), (2, 2), (3, 3)), 0)
random.seed(17)
randomMatches = 0
for i in range(10):
k = random.randint(2, 255)
# exact
res = self.checkCoefsMatch(k, k)
self.assertEqual(res[0], res[1])
# overdetermined
res = self.checkCoefsMatch(k, 256)
self.assertEqual(res[0], res[1])
# underdetermined => random
res = self.checkCoefsMatch(k, k-1)
if res[0]==res[1]:
randomMatches += 1
self.assertLess(randomMatches, 2) # with a chance (255/256)**10=0.96 there should be no match
def checkCoefsMatch(self, k, m):
coefs = [random.randint(0, 255) for i in range(k)]
points = [(j, evaluate(coefs, j)) for j in range(1, 256)]
random.shuffle(points)
return (getConstantCoef(*points[:m]), coefs[0])
def testGenerateReconstructRaw(self):
for (k, n) in [(2, 3), (254, 254)]:
shares = generateRaw(b"abcd", k, n)
random.shuffle(shares)
self.assertEqual(reconstructRaw(*shares[:k]), b"abcd")
self.assertNotEqual(reconstructRaw(*shares[:k-1]), b"abcd")
def testGenerateReconstruct(self):
for secret in ["abcde", "ěščřžý"]:
for (k, n) in [(2, 3), (254, 254)]:
with self.subTest(sec=secret, k=k, n=n):
shares = generate(secret, k, n)
random.shuffle(shares)
self.assertEqual(reconstruct(*shares[:k]), secret)
try:
self.assertNotEqual(reconstruct(*shares[:k-1]), secret)
except SException:
pass
shares = generate(b"\xfeaa", 2, 3)
with self.assertRaises(SException):
reconstruct(*shares)
def testDecode(self):
with self.assertRaises(SException):
decode("AAA")
decode("1.")
decode(".AAA")
decode("1AAA")
decode("1.AAAQEAY")
decode("1.AAAQEAy=")
decode("256.AAAQEAY=")
self.assertEqual(decode("2.AAAQEAY="), (2, b"\x00\x01\x02\x03"))
|