+
+
+class GOST3412Magma(object):
+ """GOST 34.12-2015 64-bit block cipher Магма (Magma)
+ """
+ blocksize = 8
+
+ def __init__(self, key):
+ """
+ :param key: encryption/decryption key
+ :type key: bytes, 32 bytes
+ """
+ # Backward compatibility key preparation for 28147-89 key schedule
+ self.key = b"".join(key[i * 4:i * 4 + 4][::-1] for i in range(8))
+ self.sbox = "id-tc26-gost-28147-param-Z"
+
+ def encrypt(self, blk):
+ return gost28147_ns2block(gost28147_encrypt(
+ self.sbox,
+ self.key,
+ gost28147_block2ns(blk[::-1]),
+ ))[::-1]
+
+ def decrypt(self, blk):
+ return gost28147_ns2block(gost28147_decrypt(
+ self.sbox,
+ self.key,
+ gost28147_block2ns(blk[::-1]),
+ ))[::-1]