]> Cypherpunks.ru repositories - pygost.git/commitdiff
VKO functions are the same, only hash function differs, simplify code
authorSergey Matveev <stargrave@stargrave.org>
Sat, 19 Nov 2016 21:17:40 +0000 (00:17 +0300)
committerSergey Matveev <stargrave@stargrave.org>
Sat, 19 Nov 2016 21:17:40 +0000 (00:17 +0300)
pygost/gost3410_vko.py
pygost/stubs/pygost/gost3410_vko.pyi

index 41b50f610440924c9b212396f7448e44fc9b2941..caf3b5bd2585d8e1dae25511045a19fc1f4c72ca 100644 (file)
@@ -33,13 +33,19 @@ def ukm_unmarshal(ukm):
     return bytes2long(ukm[::-1])
 
 
-def kek_34102001(curve, prv, pubkey, ukm):
+def kek(curve, prv, pub, ukm, mode):
+    key = curve.exp(prv, pub[0], pub[1])
+    key = curve.exp(ukm, key[0], key[1])
+    return pub_marshal(key, mode)
+
+
+def kek_34102001(curve, prv, pub, ukm):
     """ Make Diffie-Hellman computation (34.10-2001, 34.11-94)
 
     :param GOST3410Curve curve: curve to use
     :param long prv: private key
-    :param pubkey: public key
-    :type pubkey: (long, long)
+    :param pub: public key
+    :type pub: (long, long)
     :param long ukm: user keying material, VKO-factor
     :returns: Key Encryption Key (shared key)
     :rtype: bytes, 32 bytes
@@ -48,38 +54,35 @@ def kek_34102001(curve, prv, pubkey, ukm):
     :rfc:`4357` VKO GOST R 34.10-2001 with little-endian
     hash output.
     """
-    key = curve.exp(prv, pubkey[0], pubkey[1])
-    key = curve.exp(ukm, key[0], key[1])
-    return GOST341194(pub_marshal(key), "GostR3411_94_CryptoProParamSet").digest()
+    return GOST341194(
+        kek(curve, prv, pub, ukm, mode=2001),
+        "GostR3411_94_CryptoProParamSet",
+    ).digest()
 
 
-def kek_34102012256(curve, prv, pubkey, ukm=1):
+def kek_34102012256(curve, prv, pub, ukm=1):
     """ Make Diffie-Hellman computation (34.10-2012, 34.11-2012 256 bit)
 
     :param GOST3410Curve curve: curve to use
     :param long prv: private key
-    :param pubkey: public key
-    :type pubkey: (long, long)
+    :param pub: public key
+    :type pub: (long, long)
     :param long ukm: user keying material, VKO-factor
     :returns: Key Encryption Key (shared key)
     :rtype: bytes, 32 bytes
     """
-    key = curve.exp(prv, pubkey[0], pubkey[1])
-    key = curve.exp(ukm, key[0], key[1])
-    return GOST34112012256(pub_marshal(key, mode=2012)).digest()
+    return GOST34112012256(kek(curve, prv, pub, ukm, mode=2012)).digest()
 
 
-def kek_34102012512(curve, prv, pubkey, ukm=1):
+def kek_34102012512(curve, prv, pub, ukm=1):
     """ Make Diffie-Hellman computation (34.10-2012, 34.11-2012 512 bit)
 
     :param GOST3410Curve curve: curve to use
     :param long prv: private key
-    :param pubkey: public key
-    :type pubkey: (long, long)
+    :param pub: public key
+    :type pub: (long, long)
     :param long ukm: user keying material, VKO-factor
     :returns: Key Encryption Key (shared key)
     :rtype: bytes, 32 bytes
     """
-    key = curve.exp(prv, pubkey[0], pubkey[1])
-    key = curve.exp(ukm, key[0], key[1])
-    return GOST34112012512(pub_marshal(key, mode=2012)).digest()
+    return GOST34112012512(kek(curve, prv, pub, ukm, mode=2012)).digest()
index d023a1e91746ee411eacb24372da70b59597dd53..c6d35e5a0d19c7520e04251dad975af6b28acf3a 100644 (file)
@@ -5,10 +5,10 @@ from pygost.gost3410 import PublicKey
 def ukm_unmarshal(ukm: bytes) -> int: ...
 
 
-def kek_34102001(curve: GOST3410Curve, prv: int, pubkey: PublicKey, ukm: int) -> bytes: ...
+def kek_34102001(curve: GOST3410Curve, prv: int, pub: PublicKey, ukm: int) -> bytes: ...
 
 
-def kek_34102012256(curve: GOST3410Curve, prv: int, pubkey: PublicKey, ukm: int=...) -> bytes: ...
+def kek_34102012256(curve: GOST3410Curve, prv: int, pub: PublicKey, ukm: int=...) -> bytes: ...
 
 
-def kek_34102012512(curve: GOST3410Curve, prv: int, pubkey: PublicKey, ukm: int=...) -> bytes: ...
+def kek_34102012512(curve: GOST3410Curve, prv: int, pub: PublicKey, ukm: int=...) -> bytes: ...