コード例 #1
0
 def testStructure(self):
     # this example was rechecked by MAGMA.
     e = elliptic.EC([0, 4], 997)
     f = elliptic.EC([-1, 0], 65537)
     g = elliptic.EC([0, 1], 65537)
     self.assertEqual((12, 84), e.structure())
     self.assertEqual((256, 256), f.structure())
     self.assertEqual((1, 65538), g.structure())
コード例 #2
0
    def testOrder(self):
        d = elliptic.EC([2, 6], 7)
        e = elliptic.EC([1, 3], 7)
        f = elliptic.EC([11, 3], 13)

        self.assertEqual(11, d.order())
        self.assertEqual(6, e.order())
        self.assertEqual(13, f.order())
コード例 #3
0
    def testPoint(self):
        d = elliptic.EC([2, 6], 7)
        e = elliptic.EC([1, 3], 7)
        f = elliptic.EC([11, 3], 13)

        self.assert_(d.whetherOn(d.point()))
        self.assert_(e.whetherOn(e.point()))
        self.assert_(f.whetherOn(f.point()))
コード例 #4
0
 def testEqualCh19(self):
     e = elliptic.EC([2, 1], 19)
     byNaive = e.naive()
     bySchoof = e.Schoof()
     self.assertEqual(byNaive, bySchoof)
     e = elliptic.EC([2, 5], 19)
     byNaive = e.naive()
     bySchoof = e.Schoof()
     self.assertEqual(byNaive, bySchoof)
コード例 #5
0
 def testEqualCh5(self):
     e = elliptic.EC([1, 4], 5)
     byNaive = e.naive()
     bySchoof = e.Schoof()
     self.assertEqual(byNaive, bySchoof)
     e = elliptic.EC([2, 0], 5)
     byNaive = e.naive()
     bySchoof = e.Schoof()
     self.assertEqual(byNaive, bySchoof)
     e = elliptic.EC([1, 3, 4, 0, 1], 5)
     byNaive = e.naive()
     bySchoof = e.Schoof()
     self.assertEqual(byNaive, bySchoof)
コード例 #6
0
    def setUp(self):
        self.a = elliptic.EC([0, -1, 1, 0, 0], 0)
        self.b = elliptic.EC([1, 0], 0)
        self.c = elliptic.EC([0, 17], 0)

        self.P1 = [-2, 3]
        self.P2 = [-1, 4]
        self.P3 = [2, 5]
        self.P4 = [4, 9]
        self.P5 = [8, 23]
        self.P6 = [43, 282]
        self.P7 = [52, 375]
        self.P8 = [5234, 378661]
コード例 #7
0
 def testEqualCh233(self):
     e = elliptic.EC([2, 1], 233)
     byNaive = e.naive()
     byShanksMestre = e.Shanks_Mestre()
     bySchoof = e.Schoof()
     self.assertEqual(byNaive, byShanksMestre)
     self.assertEqual(byNaive, bySchoof)
     # bug #2281173
     e = elliptic.EC([2, 5], 233)
     byNaive = e.naive()
     byShanksMestre = e.Shanks_Mestre()
     bySchoof = e.Schoof()
     self.assertEqual(byNaive, byShanksMestre)
     self.assertEqual(byNaive, bySchoof)
コード例 #8
0
 def testEqualCh7(self):
     e = elliptic.EC([1, 4], 7)
     byNaive = e.naive()
     bySchoof = e.Schoof()
     self.assertEqual(byNaive, bySchoof, str(e))
     e = elliptic.EC([2, 0], 7)
     byNaive = e.naive()
     bySchoof = e.Schoof()
     self.assertEqual(byNaive, bySchoof, str(e))
     e = elliptic.EC([1, 3, 4, 0, 1], 7)
     byNaive = e.naive()
     bySchoof = e.Schoof()
     self.assertEqual(byNaive, bySchoof,
                      repr(e))  # see EllipticTest.testStr
コード例 #9
0
 def testEqualCh65537(self):
     # 65537 is too large for naive method.
     e = elliptic.EC([0, 1], 65537)  # supersingular curve
     byShanksMestre = e.Shanks_Mestre()
     bySchoof = e.Schoof()
     self.assertEqual(0, byShanksMestre)
     self.assertEqual(0, bySchoof)
コード例 #10
0
 def testEqualCh311(self):
     e = elliptic.EC([12, 179], 311)
     byNaive = e.naive()
     byShanksMestre = e.Shanks_Mestre()
     bySchoof = e.Schoof()
     self.assertEqual(byNaive, byShanksMestre)
     self.assertEqual(byNaive, bySchoof)
コード例 #11
0
 def testLine(self):
     # FIXME: need more appropriate tests
     e = elliptic.EC([0, 0, 1, -1, 0], 17)
     P = [0, 0]
     self.assertEqual(e.basefield.zero, e.line(P, P, P))
     P2 = e.mul(2, P)
     self.assertEqual(e.basefield.zero,
                      e.line(P, P2, e.mul(-1, e.add(P, P2))))
コード例 #12
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
コード例 #13
0
 def testTatePairing(self):
     # this example was refered to Washington.
     # note that Tate pairing is only defined
     # up to a multiple by an lth power.
     e = elliptic.EC([-1, 1], 11)
     self.assertEqual(10, e.order())
     P = [e.basefield.createElement(3), e.basefield.createElement(6)]
     R = e.TatePairing(5, P, P)
     l = map(finitefield.FinitePrimeFieldElement, [5, 6], [11] * 2)
     self.assert_(R in l, R)
コード例 #14
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())
コード例 #15
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)
コード例 #16
0
 def testDivPoly(self):
     E = elliptic.EC([3, 4], 101)
     F101 = finitefield.FinitePrimeField.getInstance(E.ch)
     D = ({
         -1:
         uniutil.polynomial({0: -1}, F101),
         0:
         uniutil.polynomial({}, F101),
         1:
         uniutil.polynomial({0: 1}, F101),
         2:
         uniutil.polynomial({0: 2}, F101),
         3:
         uniutil.polynomial({
             0: 92,
             1: 48,
             2: 18,
             4: 3
         }, F101),
         4:
         uniutil.polynomial({
             0: 188,
             1: 10,
             2: 22,
             3: 118,
             4: 60,
             6: 4
         }, F101),
         5:
         uniutil.polynomial(
             {
                 0: 48,
                 1: 58,
                 2: 53,
                 3: 60,
                 4: 28,
                 5: 93,
                 6: 79,
                 7: 52,
                 8: 65,
                 9: 5,
                 10: 85,
                 12: 5
             }, F101),
         6:
         uniutil.polynomial(
             {
                 0: 18,
                 1: 24,
                 2: 88,
                 3: 32,
                 4: 128,
                 5: 44,
                 6: 152,
                 7: 56,
                 8: 84,
                 9: 192,
                 10: 174,
                 12: 114,
                 13: 124,
                 14: 28,
                 16: 6
             }, F101),
         7:
         uniutil.polynomial(
             {
                 0: 94,
                 1: 77,
                 2: 87,
                 3: 65,
                 4: 97,
                 5: 45,
                 6: 80,
                 7: 22,
                 8: 44,
                 9: 76,
                 10: 5,
                 11: 49,
                 12: 49,
                 13: 74,
                 14: 76,
                 15: 53,
                 16: 69,
                 17: 47,
                 18: 63,
                 19: 70,
                 20: 78,
                 21: 20,
                 22: 15,
                 24: 7
             }, F101),
         8:
         uniutil.polynomial(
             {
                 0: 32,
                 1: 100,
                 2: 58,
                 3: 20,
                 4: 124,
                 5: 160,
                 6: 82,
                 7: 132,
                 8: 158,
                 9: 96,
                 10: 154,
                 11: 106,
                 12: 134,
                 13: 140,
                 14: 10,
                 15: 36,
                 16: 72,
                 17: 56,
                 18: 116,
                 19: 190,
                 20: 134,
                 21: 182,
                 22: 74,
                 23: 186,
                 24: 50,
                 25: 186,
                 26: 122,
                 27: 68,
                 28: 136,
                 30: 8
             }, F101)
     }, [2, 3, 5, 7])
     self.assertEqual(D, E.divPoly([]))
コード例 #17
0
 def testChangePoint(self):
     self.assertEqual([-1, 1],
                      elliptic.EC([1, 2], 0).changePoint([1, 2],
                                                         [1, 2, 3, 4]))
コード例 #18
0
 def testChangeCurve(self):
     self.assertEqual(
         '8/1 * y + 6/1 * x * y + y ** 2=-10/1 * x - 3/1 * x ** 2 + x ** 3',
         str(elliptic.EC([2, 4], 0).changeCurve([1, 2, 3, 4])))
コード例 #19
0
 def testCh5(self):
     e = elliptic.EC([1, 4], 5)
     self.assertEqual(5 + 1 - e.trace(), e.order())
コード例 #20
0
 def testStr(self):
     e = elliptic.EC([1, 3, 4, 0, 1], 7)
     self.assert_(str(e))
コード例 #21
0
 def testSimple(self):
     self.assertEqual('y ** 2=8208 - 432 * x + x ** 3',
                      str(self.a.simple()))
     # ch > 0
     e = elliptic.EC([1, 1, 1, 3, 4], 7)
     self.assert_(e.simple())