Browse Source

sagetest actually tests something, though not all i want to test

master
Michael Hamburg 9 years ago
parent
commit
66c41fdbb6
1 changed files with 54 additions and 0 deletions
  1. +54
    -0
      test/test_decaf.sage

+ 54
- 0
test/test_decaf.sage View File

@@ -11,9 +11,43 @@ Tor = [p_tor4 * i for i in xrange(4)]
q = 2^446-0x8335dc163bb124b65129c96fde933d8d723a70aadc873d6d54a7bb0d
FQ = GF(q)

passing = True

# TODO: pathological cases
# TODO: Elligator
# TODO: double scalar mul

def random_array(length):
answer = "".join([chr(randint(0,255)) for i in xrange(length)])
return answer

def from_le(buf):
return sum([256^i * ord(x) for i,x in enumerate(buf)])

def youfail(why,n):
print ("Fail on test %d!"%n), why
global passing
passing = False
def run_test(i):
try:
s = DecafScalar.random()
t = DecafScalar.random()
p = DecafPoint.random()
q = DecafPoint.random()
s*p + t*q
if s*(t*p) != (s*t)*p:
raise Exception("Mul doesn't work")
(p+q-p-q).ser() # i guess...
except Exception, e:
youfail(e,i)

def run_all_tests(n = 100):
for testno in xrange(n):
run_test(testno)
if passing:
print "Passed all %d tests." % n

def to_le(x,n):
x = int(x)
if x >= 256^n:
@@ -57,6 +91,9 @@ class DecafScalar():
if csays != sagesays:
raise Exception("C and SAGE don't agree: %d %d" % (csays, sagesays))
return csays
def __ne__(self,other):
return not self==other
def __add__(self,other):
cstruct = DecafScalar._UNDER()
@@ -127,6 +164,12 @@ class DecafScalar():
raise Exception("scalar didn't decode")
return cls(cstruct,scalar)
@classmethod
def random(cls):
while True:
try: return cls.deser(random_array(56))
except Exception: pass

@staticmethod
def _c_ser(cstruct):
@@ -192,6 +235,9 @@ class DecafPoint():
if csays != sagesays:
raise Exception("C and SAGE don't agree: %d %d" % (csays, sagesays))
return csays
def __ne__(self,other):
return not self==other
def __add__(self,other):
cstruct = DecafPoint._UNDER()
@@ -249,6 +295,12 @@ class DecafPoint():
raise Exception("Point didn't decode")
return cls(cstruct,point)
@classmethod
def random(cls):
while True:
try: return cls.deser(random_array(56))
except Exception: pass

@staticmethod
def _c_ser(cstruct):
@@ -277,5 +329,7 @@ class DecafPoint():
print cs
raise Exception("Check failed!")
return True
run_all_tests()

Loading…
Cancel
Save