# coding: utf-8
# PyGOST -- Pure Python GOST cryptographic functions library
-# Copyright (C) 2015-2018 Sergey Matveev <stargrave@stargrave.org>
+# Copyright (C) 2015-2020 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
-# the Free Software Foundation, either version 3 of the License, or
-# (at your option) any later version.
+# the Free Software Foundation, version 3 of the License.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
def test_gcl(self):
""" Test vectors from libgcl3
"""
- sbox = "Gost2814789_TestParamSet"
+ sbox = "id-Gost28147-89-TestParamSet"
key = hexdec(b"0475f6e05038fbfad2c7c390edb3ca3d1547124291ae1e8a2f79cd9ed2bcefbd")
plaintext = bytes(bytearray((
0x07, 0x06, 0x05, 0x04, 0x03, 0x02, 0x01, 0x00,
0x5a, 0x5f, 0xca, 0x58, 0x9a, 0xb2, 0x2d, 0xb2,
)))
encrypted = ecb_encrypt(key, plaintext, sbox=sbox)
- self.assertEqual(encrypted, ciphertext)
+ self.assertSequenceEqual(encrypted, ciphertext)
decrypted = ecb_decrypt(key, encrypted, sbox=sbox)
- self.assertEqual(decrypted, plaintext)
+ self.assertSequenceEqual(decrypted, plaintext)
def test_cryptopp(self):
""" Test vectors from Crypto++ 5.6.2
key = hexdec(key)
pt = hexdec(pt)
ct = hexdec(ct)
- self.assertEqual(ecb_encrypt(key, pt, sbox=sbox), ct)
+ self.assertSequenceEqual(ecb_encrypt(key, pt, sbox=sbox), ct)
def test_cryptomanager(self):
""" Test vector from http://cryptomanager.com/tv.html
"""
- sbox = "GostR3411_94_TestParamSet"
+ sbox = "id-GostR3411-94-TestParamSet"
key = hexdec(b"75713134B60FEC45A607BB83AA3746AF4FF99DA6D1B53B5B1B402A1BAA030D1B")
- self.assertEqual(
+ self.assertSequenceEqual(
ecb_encrypt(key, hexdec(b"1122334455667788"), sbox=sbox),
hexdec(b"03251E14F9D28ACB"),
)
""" Test vector from http://cryptomanager.com/tv.html
"""
key = hexdec(b"75713134B60FEC45A607BB83AA3746AF4FF99DA6D1B53B5B1B402A1BAA030D1B")
- sbox = "GostR3411_94_TestParamSet"
- self.assertEqual(
+ sbox = "id-GostR3411-94-TestParamSet"
+ self.assertSequenceEqual(
cfb_encrypt(
key,
hexdec(b"112233445566778899AABBCCDD800000"),
),
hexdec(b"6EE84586DD2BCA0CAD3616940E164242"),
)
- self.assertEqual(
+ self.assertSequenceEqual(
cfb_decrypt(
key,
hexdec(b"6EE84586DD2BCA0CAD3616940E164242"),
# First full block
step = encrypt(DEFAULT_SBOX, key, block2ns(iv))
step = strxor(plaintext[:8], ns2block(step))
- self.assertEqual(step, ciphertext[:8])
+ self.assertSequenceEqual(step, ciphertext[:8])
# Second full block
step = encrypt(DEFAULT_SBOX, key, block2ns(step))
step = strxor(plaintext[8:16], ns2block(step))
- self.assertEqual(step, ciphertext[8:16])
+ self.assertSequenceEqual(step, ciphertext[8:16])
# Third non-full block
step = encrypt(DEFAULT_SBOX, key, block2ns(step))
step = strxor(plaintext[16:] + 4 * b"\x00", ns2block(step))
- self.assertEqual(step[:4], ciphertext[16:])
+ self.assertSequenceEqual(step[:4], ciphertext[16:])
def test_random(self):
""" Random data with various sizes
iv = urandom(8)
for size in (5, 8, 16, 120):
pt = urandom(size)
- self.assertEqual(
- cfb_decrypt(key, cfb_encrypt(key, pt, iv), iv), pt,
+ self.assertSequenceEqual(
+ cfb_decrypt(key, cfb_encrypt(key, pt, iv), iv),
+ pt,
)
def test_gcl(self):
""" Test vectors from libgcl3
"""
- sbox = "Gost2814789_TestParamSet"
+ sbox = "id-Gost28147-89-TestParamSet"
key = hexdec(b"0475f6e05038fbfad2c7c390edb3ca3d1547124291ae1e8a2f79cd9ed2bcefbd")
plaintext = bytes(bytearray((
0x07, 0x06, 0x05, 0x04, 0x03, 0x02, 0x01, 0x00,
)))
iv = b"\x02\x01\x01\x01\x01\x01\x01\x01"
encrypted = cnt(key, plaintext, iv=iv, sbox=sbox)
- self.assertEqual(encrypted, ciphertext)
+ self.assertSequenceEqual(encrypted, ciphertext)
decrypted = cnt(key, encrypted, iv=iv, sbox=sbox)
- self.assertEqual(decrypted, plaintext)
+ self.assertSequenceEqual(decrypted, plaintext)
def test_gcl2(self):
""" Test vectors 2 from libgcl3
"""
- sbox = "Gost2814789_TestParamSet"
+ sbox = "id-Gost28147-89-TestParamSet"
key = hexdec(b"fc7ad2886f455b50d29008fa622b57d5c65b3c637202025799cadf0768519e8a")
plaintext = bytes(bytearray((
0x07, 0x06, 0x05, 0x04, 0x03, 0x02, 0x01, 0x00,
)))
iv = 8 * b"\x00"
encrypted = cnt(key, plaintext, iv=iv, sbox=sbox)
- self.assertEqual(encrypted, ciphertext)
+ self.assertSequenceEqual(encrypted, ciphertext)
decrypted = cnt(key, encrypted, iv=iv, sbox=sbox)
- self.assertEqual(decrypted, plaintext)
+ self.assertSequenceEqual(decrypted, plaintext)
class CBCTest(TestCase):
for pt in (b"foo", b"foobarba", b"foobarbaz", 16 * b"x"):
ct = cbc_encrypt(key, pt, iv)
dt = cbc_decrypt(key, ct)
- self.assertEqual(pt, dt)
+ self.assertSequenceEqual(pt, dt)
def test_iv_existence_check(self):
key = 32 * b"x"
key = urandom(32)
ct = cbc_encrypt(key, pt)
dt = cbc_decrypt(key, ct)
- self.assertEqual(pt, dt)
+ self.assertSequenceEqual(pt, dt)
class CFBMeshingTest(TestCase):
pt = b"\x00"
ct = cfb_encrypt(self.key, pt, mesh=True)
dec = cfb_decrypt(self.key, ct, mesh=True)
- self.assertEqual(pt, dec)
+ self.assertSequenceEqual(pt, dec)
def test_short(self):
pt = urandom(MESH_MAX_DATA - 1)
ct = cfb_encrypt(self.key, pt, mesh=True)
dec = cfb_decrypt(self.key, ct, mesh=True)
dec_plain = cfb_decrypt(self.key, ct)
- self.assertEqual(pt, dec)
- self.assertEqual(pt, dec_plain)
+ self.assertSequenceEqual(pt, dec)
+ self.assertSequenceEqual(pt, dec_plain)
def test_short_iv(self):
pt = urandom(MESH_MAX_DATA - 1)
ct = cfb_encrypt(self.key, pt, iv=self.iv, mesh=True)
dec = cfb_decrypt(self.key, ct, iv=self.iv, mesh=True)
dec_plain = cfb_decrypt(self.key, ct, iv=self.iv)
- self.assertEqual(pt, dec)
- self.assertEqual(pt, dec_plain)
+ self.assertSequenceEqual(pt, dec)
+ self.assertSequenceEqual(pt, dec_plain)
def test_longer_iv(self):
pt = urandom(MESH_MAX_DATA * 3)
ct = cfb_encrypt(self.key, pt, iv=self.iv, mesh=True)
dec = cfb_decrypt(self.key, ct, iv=self.iv, mesh=True)
dec_plain = cfb_decrypt(self.key, ct, iv=self.iv)
- self.assertEqual(pt, dec)
+ self.assertSequenceEqual(pt, dec)
self.assertNotEqual(pt, dec_plain)