]> Cypherpunks.ru repositories - pygost.git/blobdiff - pygost/gost34112012.py
Auto fill Streebog's cache
[pygost.git] / pygost / gost34112012.py
index 2e43fe1cb6c04e3c2d80189948b55aea400b67f9..ae7627bf23703cb4b8903385b32abb61d521bb67 100644 (file)
@@ -162,14 +162,8 @@ C = [hexdec("".join(s))[::-1] for s in (
     ),
 )]
 
-# Trade memory for CPU for part of L() calculations
-_Cache = None
-
 
-def _cache_ensure():
-    global _Cache
-    if _Cache is not None:
-        return
+def _lcache():
     cache = []
     for byteN in xrange(8):
         cache.append([0 for _ in xrange(256)])
@@ -182,7 +176,11 @@ def _cache_ensure():
                     res64 ^= A[(7 - byteN) * 8 + bitN]
                 val <<= 1
             cache[byteN][byteVal] = res64
-    _Cache = cache
+    return cache
+
+
+# Trade memory for CPU for part of L() calculations
+LCache = _lcache()
 
 
 def add512bit(a, b):
@@ -222,12 +220,11 @@ def PS(data):
 
 
 def L(data):
-    _cache_ensure()
     res = []
     for i in range(8):
         res64 = 0
         for j in range(8):
-            res64 ^= _Cache[j][data[8 * i + j]]
+            res64 ^= LCache[j][data[8 * i + j]]
         res.append(pack("<Q", res64))
     return b"".join(res)