From: Sergey Matveev Date: Sat, 19 Nov 2016 14:14:48 +0000 (+0300) Subject: Use public key tuple as an argument for convenience X-Git-Tag: 3.0~16 X-Git-Url: http://www.git.cypherpunks.ru/?p=pygost.git;a=commitdiff_plain;h=e28d82ef85c8cadc47c42ecbc345f9b096beff48 Use public key tuple as an argument for convenience --- diff --git a/pygost/gost3410.py b/pygost/gost3410.py index 4fce335..ed84f3e 100644 --- a/pygost/gost3410.py +++ b/pygost/gost3410.py @@ -120,10 +120,10 @@ class GOST3410Curve(object): >>> p, q, a, b, x, y = CURVE_PARAMS["GostR3410_2001_TestParamSet"] >>> curve = GOST3410Curve(p, q, a, b, x, y) - >>> priv = bytes2long(urandom(32)) - >>> signature = sign(curve, priv, GOST341194(data).digest()) - >>> pubX, pubY = public_key(curve, priv) - >>> verify(curve, pubX, pubY, GOST341194(data).digest(), signature) + >>> prv = prv_unmarshal(urandom(32)) + >>> signature = sign(curve, prv, GOST341194(data).digest()) + >>> pub = public_key(curve, prv) + >>> verify(curve, pub, GOST341194(data).digest(), signature) True """ def __init__(self, p, q, a, b, x, y): @@ -216,12 +216,11 @@ def sign(curve, private_key, digest, mode=2001): return long2bytes(s, size) + long2bytes(r, size) -def verify(curve, pubkeyX, pubkeyY, digest, signature, mode=2001): +def verify(curve, pub, digest, signature, mode=2001): """ Verify provided digest with the signature :param GOST3410Curve curve: curve to use - :param long pubkeyX: public key's X - :param long pubkeyY: public key's Y + :type pub: (long, long) :param digest: digest needed to check :type digest: bytes, 32 or 64 bytes :param signature: signature to verify with @@ -244,7 +243,7 @@ def verify(curve, pubkeyX, pubkeyY, digest, signature, mode=2001): z1 = s * v % q z2 = q - r * v % q p1x, p1y = curve.exp(z1) - q1x, q1y = curve.exp(z2, pubkeyX, pubkeyY) + q1x, q1y = curve.exp(z2, pub[0], pub[1]) lm = q1x - p1x if lm < 0: lm += p diff --git a/pygost/stubs/pygost/gost3410.pyi b/pygost/stubs/pygost/gost3410.pyi index aacb9ab..84028df 100644 --- a/pygost/stubs/pygost/gost3410.pyi +++ b/pygost/stubs/pygost/gost3410.pyi @@ -34,8 +34,7 @@ def sign( def verify( curve: GOST3410Curve, - pubkeyX: int, - pubkeyY: int, + pub: PublicKey, digest: bytes, signature: bytes, size: int=..., diff --git a/pygost/test_gost3410.py b/pygost/test_gost3410.py index 6a86f0b..8279ac3 100644 --- a/pygost/test_gost3410.py +++ b/pygost/test_gost3410.py @@ -73,8 +73,8 @@ class Test341001(TestCase): self.assertEqual(long2bytes(pubX), public_key_x) self.assertEqual(long2bytes(pubY), public_key_y) s = sign(c, private_key, digest) - self.assertTrue(verify(c, pubX, pubY, digest, s)) - self.assertTrue(verify(c, pubX, pubY, digest, signature)) + self.assertTrue(verify(c, (pubX, pubY), digest, s)) + self.assertTrue(verify(c, (pubX, pubY), digest, signature)) def test_sequence(self): c = GOST3410Curve(*CURVE_PARAMS["GostR3410_2001_TestParamSet"]) @@ -83,7 +83,7 @@ class Test341001(TestCase): for _ in range(20): digest = urandom(32) s = sign(c, private_key, digest, mode=2001) - self.assertTrue(verify(c, pubX, pubY, digest, s, mode=2001)) + self.assertTrue(verify(c, (pubX, pubY), digest, s, mode=2001)) class Test34102012(TestCase): @@ -216,8 +216,8 @@ class Test34102012(TestCase): self.assertEqual(long2bytes(pubX), public_key_x) self.assertEqual(long2bytes(pubY), public_key_y) s = sign(c, private_key, digest, mode=2012) - self.assertTrue(verify(c, pubX, pubY, digest, s, mode=2012)) - self.assertTrue(verify(c, pubX, pubY, digest, signature, mode=2012)) + self.assertTrue(verify(c, (pubX, pubY), digest, s, mode=2012)) + self.assertTrue(verify(c, (pubX, pubY), digest, signature, mode=2012)) def test_sequence(self): c = GOST3410Curve(*CURVE_PARAMS["GostR3410_2012_TC26_ParamSetA"]) @@ -226,5 +226,5 @@ class Test34102012(TestCase): for _ in range(20): digest = urandom(64) s = sign(c, private_key, digest, mode=2012) - self.assertTrue(verify(c, pubX, pubY, digest, s, mode=2012)) + self.assertTrue(verify(c, (pubX, pubY), digest, s, mode=2012)) self.assertNotIn(b"\x00" * 8, s)