def test_add_point__neg(self):
        """ Negative test for ecgf2m_add_point(x1, y1, x2, y2, f, a=0b0) """
        # Not meant to be called with other values than int or long
        self.failUnlessRaises(ValueError, ar.ecgf2m_add_point, 0.0, 0b1111,0b111,0b111,0b10011)
        self.failUnlessRaises(ValueError, ar.ecgf2m_add_point, 0b1000, "asdf" ,0b111,0b111,0b10011)
	
        result = ar.ecgf2m_add_point(-0b111,0b111,0b1000,0b1111,0b10011)
        self.assertEqual(result, (0b1100, 0b110))
        result = ar.ecgf2m_add_point(0b111,0b111,-0b1000,0b1111,0b10011)
        self.assertEqual(result, (0b1100, 0b110))
        result = ar.ecgf2m_add_point(0b111,-0b111,0b1000,0b1111,0b10011)
        self.assertEqual(result, (0b1100, 0b110))
        result = ar.ecgf2m_add_point(0b111,0b111,0b1000,-0b1111,0b10011)
        self.assertEqual(result, (0b1100, 0b110))
        result = ar.ecgf2m_add_point(-0b111,-0b111,-0b1000,-0b1111,-0b10011)
        self.assertEqual(result, (0b1100, 0b110))
    def test_add_point__pos(self):
        """ Positive test for ecgf2m_add_point(x1, y1, x2, y2, f, a=0b0) 

        Sage test calculations::
            sage: F.<x> = GF(2)[]
            sage: KK.<y> = GF(2**4, name='y', modulus=x^4 + x + 1 )
            sage: E = EllipticCurve(KK, [1,0,0,0,1])
            sage: p1 = E.point((y^3, y^3 + y^2 + y + 1, 1))
            sage: p2 = E.point((y^2 + y + 1, y^2 + y + 1, 1))
            sage: p1+p2
            (y^3 + y^2 : y^2 + y : 1)
            sage: p1*2
            (y^2 + y : y^2 + y : 1)
            sage: p1+p1
            (y^2 + y : y^2 + y : 1)
            sage: p1+p1 == p1*2
            True
            sage: p2*2
            (1 : 1 : 1)
            sage: p2+p2
            (1 : 1 : 1)
            #-----------------------
            # Test point at infinity
            #-----------------------
            sage: p2 = E.point((y^3, y^2 + y + 1, 1))
            sage: p1+p2
            (0 : 1 : 0)
            sage: p3 = p1+p2
            sage: p3.xy()
            ---------------------------------------------------------------------------
            ZeroDivisionError
        """
	result = ar.ecgf2m_add_point(0b1000,0b1111,0b111,0b111,0b10011)
        self.assertEqual(result, (0b1100, 0b110))
	result = ar.ecgf2m_add_point(0b111,0b111,0b1000,0b1111,0b10011)
        self.assertEqual(result, (0b1100, 0b110))
	result = ar.ecgf2m_add_point(0b1000,0b1111,0b1000,0b111,0b10011)
        self.assertEqual(result, (0b0, 0b0)) #point at infinity
Example #3
0
    def affine_point_mul(self, k, x, y):
        Q = (0,0) # point at infinity
        first = True 

        for i in range(0,k.bit_length()):
            Q = ar.ecgf2m_dbl_point(Q[0],Q[1],self._fx,self._a)

            if (ar._bittest(k,(k.bit_length()-1) - i) == 0b1):
                if (first):
                    Q = (x,y)
                    first = False                    
                else:
                    Q = ar.ecgf2m_add_point(Q[0],Q[1],x,y,self._fx,self._a)
            #print "DBG:\ni=%d\nQ[0]=%s\nQ[1]=%s\n" % (i,hex(Q[0]),hex(Q[1]))
        return Q
Example #4
0
    def affine_point_mul(self, k, x, y):
        Q = (0, 0)  # point at infinity
        first = True

        for i in range(0, k.bit_length()):
            Q = ar.ecgf2m_dbl_point(Q[0], Q[1], self._fx, self._a)

            if (ar._bittest(k, (k.bit_length() - 1) - i) == 0b1):
                if (first):
                    Q = (x, y)
                    first = False
                else:
                    Q = ar.ecgf2m_add_point(Q[0], Q[1], x, y, self._fx,
                                            self._a)
            #print "DBG:\ni=%d\nQ[0]=%s\nQ[1]=%s\n" % (i,hex(Q[0]),hex(Q[1]))
        return Q