]> Cypherpunks.ru repositories - pygost.git/blobdiff - pygost/test_wrap.py
Fix wrap_cryptopro's sbox handling
[pygost.git] / pygost / test_wrap.py
index b9d376d5c5fe93822dc21a726b56a4b2b1f3fe2a..3a0d9758af3bd81b04045b9805ecbc71ee0a0f7c 100644 (file)
@@ -17,6 +17,7 @@
 from os import urandom
 from unittest import TestCase
 
+from pygost.gost28147 import DEFAULT_SBOX
 from pygost.gost3412 import GOST3412Kuznechik
 from pygost.gost3412 import GOST3412Magma
 from pygost.utils import hexdec
@@ -30,13 +31,14 @@ from pygost.wrap import wrap_gost
 
 class WrapGostTest(TestCase):
     def test_symmetric(self):
-        for _ in range(1 << 8):
-            kek = urandom(32)
-            cek = urandom(32)
-            ukm = urandom(8)
-            wrapped = wrap_gost(ukm, kek, cek)
-            unwrapped = unwrap_gost(kek, wrapped)
-            self.assertSequenceEqual(unwrapped, cek)
+        for sbox in (DEFAULT_SBOX, "id-tc26-gost-28147-param-Z"):
+            for _ in range(1 << 8):
+                kek = urandom(32)
+                cek = urandom(32)
+                ukm = urandom(8)
+                wrapped = wrap_gost(ukm, kek, cek, sbox=sbox)
+                unwrapped = unwrap_gost(kek, wrapped, sbox=sbox)
+                self.assertSequenceEqual(unwrapped, cek)
 
     def test_invalid_length(self):
         with self.assertRaises(ValueError):
@@ -47,13 +49,14 @@ class WrapGostTest(TestCase):
 
 class WrapCryptoproTest(TestCase):
     def test_symmetric(self):
-        for _ in range(1 << 8):
-            kek = urandom(32)
-            cek = urandom(32)
-            ukm = urandom(8)
-            wrapped = wrap_cryptopro(ukm, kek, cek)
-            unwrapped = unwrap_cryptopro(kek, wrapped)
-            self.assertSequenceEqual(unwrapped, cek)
+        for sbox in (DEFAULT_SBOX, "id-tc26-gost-28147-param-Z"):
+            for _ in range(1 << 8):
+                kek = urandom(32)
+                cek = urandom(32)
+                ukm = urandom(8)
+                wrapped = wrap_cryptopro(ukm, kek, cek, sbox=sbox)
+                unwrapped = unwrap_cryptopro(kek, wrapped, sbox=sbox)
+                self.assertSequenceEqual(unwrapped, cek)
 
 
 class TestVectorKExp15(TestCase):