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
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
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