X-Git-Url: http://www.git.cypherpunks.ru/?a=blobdiff_plain;f=pygost%2Fgost34112012.py;h=ae7627bf23703cb4b8903385b32abb61d521bb67;hb=45e6d22a3b1aae4c7edafe129a23d4ae851db733;hp=b21b83c3f99b2b8dae94847fa4cf9b213fc1156a;hpb=31b08d5a78505f0ae1a144e58d023d84eda2cc6e;p=pygost.git diff --git a/pygost/gost34112012.py b/pygost/gost34112012.py index b21b83c..ae7627b 100644 --- a/pygost/gost34112012.py +++ b/pygost/gost34112012.py @@ -1,6 +1,6 @@ # coding: utf-8 # PyGOST -- Pure Python GOST cryptographic functions library -# Copyright (C) 2015-2020 Sergey Matveev +# Copyright (C) 2015-2021 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 @@ -163,6 +163,26 @@ C = [hexdec("".join(s))[::-1] for s in ( )] +def _lcache(): + cache = [] + for byteN in xrange(8): + cache.append([0 for _ in xrange(256)]) + for byteN in xrange(8): + for byteVal in xrange(256): + res64 = 0 + val = byteVal + for bitN in xrange(8): + if val & 0x80 > 0: + res64 ^= A[(7 - byteN) * 8 + bitN] + val <<= 1 + cache[byteN][byteVal] = res64 + return cache + + +# Trade memory for CPU for part of L() calculations +LCache = _lcache() + + def add512bit(a, b): """Add two 512 integers """ @@ -202,12 +222,9 @@ def PS(data): def L(data): res = [] for i in range(8): - val = unpack("