Files
@ b52e197db5a8
Branch filter:
Location: Shamira/src/tests/test_gf256.py - annotation
b52e197db5a8
1.6 KiB
text/x-python
better exception handling
8968eab714bc 8968eab714bc c1686e15f8d1 c1686e15f8d1 c1686e15f8d1 c1686e15f8d1 c1686e15f8d1 c1686e15f8d1 c1686e15f8d1 c1686e15f8d1 c1686e15f8d1 c1686e15f8d1 c1686e15f8d1 c1686e15f8d1 c1686e15f8d1 c1686e15f8d1 c1686e15f8d1 c1686e15f8d1 c1686e15f8d1 c1686e15f8d1 c1686e15f8d1 c1686e15f8d1 c1686e15f8d1 c1686e15f8d1 c1686e15f8d1 c1686e15f8d1 c1686e15f8d1 c1686e15f8d1 c1686e15f8d1 c1686e15f8d1 c1686e15f8d1 c1686e15f8d1 c1686e15f8d1 c1686e15f8d1 c1686e15f8d1 c1686e15f8d1 c1686e15f8d1 c1686e15f8d1 c1686e15f8d1 c1686e15f8d1 c1686e15f8d1 c1686e15f8d1 c1686e15f8d1 c1686e15f8d1 c1686e15f8d1 c1686e15f8d1 c1686e15f8d1 c1686e15f8d1 c1686e15f8d1 c1686e15f8d1 c1686e15f8d1 c1686e15f8d1 c1686e15f8d1 c1686e15f8d1 c1686e15f8d1 c1686e15f8d1 c1686e15f8d1 c1686e15f8d1 c1686e15f8d1 c1686e15f8d1 c1686e15f8d1 c1686e15f8d1 | # GNU GPLv3, see LICENSE
import random
import unittest
from unittest import TestCase
from gf256 import _gfmul
from gf256 import *
class TestGF256(TestCase):
def test_gfmul(self):
self.assertEqual(_gfmul(0,0), 0)
self.assertEqual(_gfmul(1,1), 1)
self.assertEqual(_gfmul(2,2), 4)
self.assertEqual(_gfmul(0,21), 0)
self.assertEqual(_gfmul(0x53,0xca), 0x01)
self.assertEqual(_gfmul(0xff,0xff), 0x13)
def testGfmul(self):
for a in range(256):
for b in range(256):
self.assertEqual(_gfmul(a,b), gfmul(a,b))
def testEvaluate(self):
for x in range(256):
(a0,a1,a2,a3)=(x,x>>1,x>>2,x>>3)
self.assertEqual(evaluate([17],x), 17) # constant polynomial
self.assertEqual(evaluate([a0,a1,a2,a3],0), x) # any polynomial at 0
self.assertEqual(evaluate([a0,a1,a2,a3],1), a0^a1^a2^a3) # polynomial at 1 == sum of coefficients
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])
if __name__ == '__main__':
unittest.main()
|