X-Git-Url: http://www.git.cypherpunks.ru/?p=pygost.git;a=blobdiff_plain;f=pygost%2Fgost3410.py;h=a2cc7cef015507d4db84955cd4a9b9ea392adf29;hp=433c8188f96144dd7457a308d1cf4c274b805376;hb=f3a3246bc9da027e0527b89204e1b95ed52af5c6;hpb=1de9c84a8488baccff5969c444d2794f13996353 diff --git a/pygost/gost3410.py b/pygost/gost3410.py index 433c818..a2cc7ce 100644 --- a/pygost/gost3410.py +++ b/pygost/gost3410.py @@ -64,9 +64,7 @@ class GOST3410Curve(object): self.cofactor = cofactor self.e = e self.d = d - r1 = self.y * self.y % self.p - r2 = ((self.x * self.x + self.a) * self.x + self.b) % self.p - if r1 != self.pos(r2): + if not self.contains((x, y)): raise ValueError("Invalid parameters") self._st = None @@ -81,6 +79,16 @@ class GOST3410Curve(object): return v + self.p return v + def contains(self, point): + """Is point on the curve? + + :type point: (long, long) + """ + x, y = point + r1 = y * y % self.p + r2 = ((x * x + self.a) * x + self.b) % self.p + return r1 == self.pos(r2) + def _add(self, p1x, p1y, p2x, p2y): if p1x == p2x and p1y == p2y: # double