# coding: utf-8
# PyGOST -- Pure Python GOST cryptographic functions library
-# Copyright (C) 2015-2020 Sergey Matveev <stargrave@stargrave.org>
+# Copyright (C) 2015-2022 Sergey Matveev <stargrave@stargrave.org>
#
# 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
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):