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
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):
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):
: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):