X-Git-Url: http://www.git.cypherpunks.ru/?a=blobdiff_plain;f=pygost%2Fwrap.py;h=eb3855fb8ce3d7f25c18f01ae53c61df610f1783;hb=3374d4b8a5a58941e309b13524067ffa8d410d45;hp=59f26bf773a878e419638b62377d9a5b985ce0b4;hpb=e8a28983794d026ccb59439a684dbdc363fcc8c6;p=pygost.git diff --git a/pygost/wrap.py b/pygost/wrap.py index 59f26bf..eb3855f 100644 --- a/pygost/wrap.py +++ b/pygost/wrap.py @@ -1,11 +1,10 @@ # coding: utf-8 # PyGOST -- Pure Python GOST cryptographic functions library -# Copyright (C) 2015-2018 Sergey Matveev +# Copyright (C) 2015-2022 Sergey Matveev # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 3 of the License, or -# (at your option) any later version. +# the Free Software Foundation, version 3 of the License. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of @@ -19,6 +18,7 @@ :rfc:`4357` key wrapping (28147-89 and CryptoPro). """ +from hmac import compare_digest from struct import pack from struct import unpack @@ -27,6 +27,8 @@ from pygost.gost28147 import DEFAULT_SBOX from pygost.gost28147 import ecb_decrypt from pygost.gost28147 import ecb_encrypt from pygost.gost28147_mac import MAC +from pygost.gost3413 import ctr +from pygost.gost3413 import mac def wrap_gost(ukm, kek, cek, sbox=DEFAULT_SBOX): @@ -77,7 +79,12 @@ def wrap_cryptopro(ukm, kek, cek, sbox=DEFAULT_SBOX): :returns: wrapped key :rtype: bytes, 44 bytes """ - return wrap_gost(ukm, diversify(kek, bytearray(ukm)), cek, sbox=sbox) + return wrap_gost( + ukm, + diversify(kek, bytearray(ukm), sbox=sbox), + cek, + sbox=sbox, + ) def unwrap_cryptopro(kek, data, sbox=DEFAULT_SBOX): @@ -112,3 +119,34 @@ def diversify(kek, ukm, sbox=DEFAULT_SBOX): iv = pack("