def u_FiniteField(char, modulus=None): """ Create FiniteField from modulus. modulus must be a form of PolynomialoverFp. """ if type(modulus) is list: # FIXME: Undefined variable 'FpPolynomial' poly_Fp = FpPolynomial(char, modulus) return u_finitefield.FiniteExtendedField(char, poly_Fp) if type(modulus) is u_finitefield.FinitePrimeFieldPolynomial: return u_finitefield.FiniteExtendedField(char, modulus) elif not modulus: return u_finitefield.FinitePrimeField(char)
def testWeilPairing(self): # this example was refered to Washington. e = elliptic.EC([0, 2], 7) P = [5, 1] Q = [0, 3] R = e.WeilPairing(3, P, Q) self.assertEqual(finitefield.FinitePrimeFieldElement(2, 7), R) # test case of extension field, characteristic 7 p = 7 r = 11 F = finitefield.FinitePrimeField(p) PX = uniutil.polynomial({0:3,1:3,2:2,3:1,4:4,5:1,6:1,10:1},F) Fx = finitefield.FiniteExtendedField(p,PX) E = elliptic.EC([F.one,-F.one],F) Ex = elliptic.EC([Fx.one,-Fx.one],Fx) P = [3,6] assert E.whetherOn(P) assert Ex.whetherOn(P) assert E.mul(11,P) == E.infpoint Qxcoord = Fx.createElement(6*7**9+7**8+7**6+6*7**3+6*7**2+7+6) Qycoord = Fx.createElement(3*7**9+6*7**8+4*7**7+2*7**6+5*7**4+5*7**3+7**2+7+3) Q = [Qxcoord,Qycoord] assert Ex.whetherOn(Q) assert Ex.mul(11,Q) == Ex.infpoint w = Ex.WeilPairing(11, P, Q) Wp = Fx.createElement(7**9 + 5*7**8 + 4*7**7 + 2*7**5 + 7**4 + 6*7**2) assert w == Wp