Example #1
0
    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
Example #2
0
 def testWeilPairingIsFunction(self):
     # e2 is isomorphic to Z/256 x Z/256
     e2 = elliptic.EC([-1, 0], 65537)
     P1 = [
         finitefield.FinitePrimeFieldElement(30840, 65537),
         finitefield.FinitePrimeFieldElement(53250, 65537)
     ]
     self.failIf(256 % e2.pointorder(P1))
     P2 = [
         finitefield.FinitePrimeFieldElement(10657, 65537),
         finitefield.FinitePrimeFieldElement(46245, 65537)
     ]
     self.failIf(256 % e2.pointorder(P2))
     weil10 = set(e2.WeilPairing(256, P1, P2) for i in range(10))
     # since Weil pairing is a function, the result is always same
     self.assertEqual(1, len(weil10))
     # Weil pairing is a function E[m]xE[m] -> mu_m
     self.assertEqual(e2.basefield.one, weil10.pop()**256)
Example #3
0
 def testTatePairing_Extend(self):
     # this example was refered to Kim Nguyen.
     e = elliptic.EC([0, 4], 997)
     P = [0, 2]
     Q = [747, 776]
     R = e.TatePairing_Extend(3, P, P)
     W1 = e.TatePairing_Extend(3, P, Q)
     W2 = e.TatePairing_Extend(3, Q, P)
     self.assertEqual(e.basefield.one, R)
     self.assertEqual(finitefield.FinitePrimeFieldElement(304, 997), W1)
     self.assertEqual(W1, W2.inverse())
Example #4
0
 def toFinitePrimeFieldElement(self):
     """ get FinitePrimeField(2) element with bijective map.
     """
     if self.boolean:
         return finitefield.FinitePrimeFieldElement(1, 2)
     return finitefield.FinitePrimeFieldElement(0, 2)