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