return FieldElt(me, n)
Field.register('f25519', C.MP(0).setbit(255) - 19)
+Field.register('fgoldi', C.MP(0).setbit(448) - C.MP(0).setbit(224) - 1)
def binop(k, op):
x = k.rand(); y = k.rand()
def sub(k): binop(k, lambda x, y: x - y)
@test
+def neg(k): unop(k, lambda x: -x)
+
+@test
def mul(k): binop(k, lambda x, y: x*y)
@test
def inv(k): unop(k, lambda x: x and x.inv() or k(0))
@test
+def quosqrt(k):
+ x = k.rand(); y = k.rand()
+ yy = +y
+ u = yy and x/y or k(0)
+ try: zz = u.sqrt()
+ except ValueError: print ' %s\n %s\n "" "";' % (x, y)
+ else: print ' %s\n %s\n %s\n %s;' % (x, y, zz, -zz)
+
+@test
def mulconst(k):
x = k.rand()
a = C.rand.range(1 << 20) - (1 << 19)
def mask(): return C.rand.range(2)*0xffffffff
@test
+def pick2(k):
+ x = k.rand(); y = k.rand(); m = mask()
+ print ' %s\n %s\n 0x%08x\n %s;' % (x, y, m, +(m and x or y))
+
+@test
+def condneg(k):
+ x = k.rand(); m = mask()
+ print ' %s\n 0x%08x\n %s;' % (x, m, x*(m and -1 or +1))
+
+@test
+def pickn(k):
+ n = C.rand.range(31) + 1
+ v = [k.rand() for i in xrange(n)]
+ i = C.rand.range(n)
+ print ' "%s"\n %d\n %s;' % ('\n '.join(map(str, v)), i, +v[i])
+
+@test
def condswap(k):
x = k.rand(); y = k.rand(); m = mask()
xx, yy = m and (+y, +x) or (+x, +y)