pygost/gost3410_vko.py | 39 +++++++++++++++++++++------------------ pygost/stubs/pygost/gost3410_vko.pyi | 6 +++--- diff --git a/pygost/gost3410_vko.py b/pygost/gost3410_vko.py index 91e2a32ddfb5ae65238d5eb2aea6e5d50e9045db1604bf7358bf500db9057557..15b19ccc3c90ceefa94809652d6e1443846a0661b12a846315da9b9ce9f1fe1d 100644 --- a/pygost/gost3410_vko.py +++ b/pygost/gost3410_vko.py @@ -33,13 +33,19 @@ """ 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 @@ Shared Key Encryption Key computation is based on :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() diff --git a/pygost/stubs/pygost/gost3410_vko.pyi b/pygost/stubs/pygost/gost3410_vko.pyi index 08a754fdf49f2ee6f815382f6a0754606f3f8dbfebb8473e3e2b6c703a5a63b8..74d31cca08fad2686fe890ad7aecae88dd96e23fb89dce34adb4589afcc00e3b 100644 --- a/pygost/stubs/pygost/gost3410_vko.pyi +++ b/pygost/stubs/pygost/gost3410_vko.pyi @@ -5,10 +5,10 @@ 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: ...