Exemplo n.º 1
0
    def test_binpolydeg_neg(self):
        # Not meant to be called with other values than int or long
        self.failUnlessRaises(AttributeError, ar._binpolydeg, 0.0)

        self.failUnlessEqual(ar._binpolydeg(0b0), 0)

        self.failUnlessEqual(ar._binpolydeg(-0b1), 0)  # ignores signed
        self.failUnlessEqual(ar._binpolydeg(-0b0), 0)
        self.failUnlessEqual(ar._binpolydeg(-0b101), 2)
Exemplo n.º 2
0
    def test_binpolydeg_neg(self):
        # Not meant to be called with other values than int or long
        self.failUnlessRaises(AttributeError, ar._binpolydeg, 0.0)

        self.failUnlessEqual(ar._binpolydeg(0b0),0)

        self.failUnlessEqual(ar._binpolydeg(-0b1),0) # ignores signed
        self.failUnlessEqual(ar._binpolydeg(-0b0),0) 
        self.failUnlessEqual(ar._binpolydeg(-0b101),2)
Exemplo n.º 3
0
 def validate_pub_key(self, Q):
     # check: type
     if (((not type(Q[0]) is int) and (not type(Q[0]) is long))
             or ((not type(Q[1]) is int) and (not type(Q[1]) is long))):
         raise ValueError
     # check: point-at-infintiy
     if (Q[0] == 0 and Q[1] == 0):
         raise ex.InvalidECPublicKey(Q, "Point at infinity")
     # check: degree <= m-1
     if ((ar._binpolydeg(Q[0]) >= self._curve_m)
             or (ar._binpolydeg(Q[1]) >= self._curve_m)):
         raise ex.InvalidECPublicKey(Q, "Degree error")
     # check: point on curve
     if (self._curve.check_point_on_curve(Q) == 0):
         raise ex.InvalidECPublicKey(Q, "Point not on curve")
     return 1
Exemplo n.º 4
0
 def validate_pub_key(self, Q):
     # check: type
     if ((not type(Q[0]) is int) and (not type(Q[0]) is long)) or (
         (not type(Q[1]) is int) and (not type(Q[1]) is long)
     ):
         raise ValueError
     # check: point-at-infintiy
     if Q[0] == 0 and Q[1] == 0:
         raise ex.InvalidECPublicKey(Q, "Point at infinity")
     # check: degree <= m-1
     if (ar._binpolydeg(Q[0]) >= self._curve_m) or (ar._binpolydeg(Q[1]) >= self._curve_m):
         raise ex.InvalidECPublicKey(Q, "Degree error")
     # check: point on curve
     if self._curve.check_point_on_curve(Q) == 0:
         raise ex.InvalidECPublicKey(Q, "Point not on curve")
     return 1
Exemplo n.º 5
0
    def test_binpolydeg_pos(self):
        self.failUnlessEqual(ar._binpolydeg(0b1),0) # 1 
        self.failUnlessEqual(ar._binpolydeg(0b11),1) # x + 1
        self.failUnlessEqual(ar._binpolydeg(0b10),1) # x
        
        self.failUnlessEqual(ar._binpolydeg(0b101),2) # x^2 + 1
        self.failUnlessEqual(ar._binpolydeg(0b1000000),6) # x^6

        self.failUnlessEqual(ar._binpolydeg(0b10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000010100001),283)
        self.failUnlessEqual(ar._binpolydeg(15541351137805832567355695254588151253139254712417116170014499277911234281641667989665L),283)
Exemplo n.º 6
0
    def check_point_on_curve(self, P):
        """ Checks if point is on curve. 

        y^2 + x*y = x^3 + a*x^2 + b
        """
        x = P[0]
        y = P[1]
        if ((ar._binpolydeg(x) >= self._m) or (ar._binpolydeg(y) >= self._m)):
            return 0
        left = ar.gf2m_add(ar.gf2m_modmul(y, y, self._fx),
                           ar.gf2m_modmul(x, y, self._fx))
        right = ar.gf2m_add(
            ar.gf2m_add(
                ar.gf2m_modmul(ar.gf2m_modmul(x, x, self._fx), x, self._fx),
                ar.gf2m_modmul(self._a, ar.gf2m_modmul(x, x, self._fx),
                               self._fx)), self._b)
        if (left == right):
            return 1
        return 0
Exemplo n.º 7
0
    def check_point_on_curve(self, P):
        """ Checks if point is on curve. 

        y^2 + x*y = x^3 + a*x^2 + b
        """
        x = P[0]
        y = P[1]
        if ((ar._binpolydeg(x) >= self._m) or
            (ar._binpolydeg(y) >= self._m)):
                return 0
        left = ar.gf2m_add(ar.gf2m_modmul(y,y,self._fx),
                           ar.gf2m_modmul(x,y,self._fx))
        right = ar.gf2m_add(ar.gf2m_add(
                ar.gf2m_modmul(ar.gf2m_modmul(x,x,self._fx),x,self._fx),
                ar.gf2m_modmul(self._a,ar.gf2m_modmul(x,x,self._fx),self._fx)),
                self._b)
        if (left == right):
            return 1
        return 0
Exemplo n.º 8
0
    def test_binpolydeg_pos(self):
        self.failUnlessEqual(ar._binpolydeg(0b1), 0)  # 1
        self.failUnlessEqual(ar._binpolydeg(0b11), 1)  # x + 1
        self.failUnlessEqual(ar._binpolydeg(0b10), 1)  # x

        self.failUnlessEqual(ar._binpolydeg(0b101), 2)  # x^2 + 1
        self.failUnlessEqual(ar._binpolydeg(0b1000000), 6)  # x^6

        self.failUnlessEqual(
            ar._binpolydeg(
                0b10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000010100001
            ), 283)
        self.failUnlessEqual(
            ar._binpolydeg(
                15541351137805832567355695254588151253139254712417116170014499277911234281641667989665L
            ), 283)