X-Git-Url: http://www.git.cypherpunks.ru/?a=blobdiff_plain;f=pygost%2Fgost3413.py;h=3a539d2e4b1f9097e78774ea3cf263df648a9d5a;hb=54735617392b3988c2e24b59e0c552d74736e320;hp=cdf82101203d919307b02f5db276dc4bb4800ddb;hpb=22d0a1d34cbf1466e01b59a8567af36cf315f328;p=pygost.git diff --git a/pygost/gost3413.py b/pygost/gost3413.py index cdf8210..3a539d2 100644 --- a/pygost/gost3413.py +++ b/pygost/gost3413.py @@ -1,11 +1,10 @@ # coding: utf-8 # PyGOST -- Pure Python GOST cryptographic functions library -# Copyright (C) 2015-2017 Sergey Matveev +# Copyright (C) 2015-2020 Sergey Matveev # # 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 @@ -75,7 +74,7 @@ def pad3(data, blocksize): def ecb_encrypt(encrypter, bs, pt): """ECB encryption mode of operation - :param encrypter: Encrypting function, that takes block as an input + :param encrypter: encrypting function, that takes block as an input :param int bs: cipher's blocksize :param bytes pt: already padded plaintext """ @@ -105,7 +104,7 @@ def ecb_decrypt(decrypter, bs, ct): def ctr(encrypter, bs, data, iv): """Counter mode of operation - :param encrypter: Encrypting function, that takes block as an input + :param encrypter: encrypting function, that takes block as an input :param int bs: cipher's blocksize :param bytes data: plaintext/ciphertext :param bytes iv: half blocksize-sized initialization vector @@ -125,14 +124,14 @@ def ctr(encrypter, bs, data, iv): def ofb(encrypter, bs, data, iv): """OFB mode of operation - :param encrypter: Encrypting function, that takes block as an input + :param encrypter: encrypting function, that takes block as an input :param int bs: cipher's blocksize :param bytes data: plaintext/ciphertext - :param bytes iv: double blocksize-sized initialization vector + :param bytes iv: blocksize-sized initialization vector For decryption you use the same function again. """ - if len(iv) < 2 * bs or len(iv) % bs != 0: + if len(iv) < bs or len(iv) % bs != 0: raise ValueError("Invalid IV size") r = [iv[i:i + bs] for i in range(0, len(iv), bs)] result = [] @@ -145,14 +144,14 @@ def ofb(encrypter, bs, data, iv): def cbc_encrypt(encrypter, bs, pt, iv): """CBC encryption mode of operation - :param encrypter: Encrypting function, that takes block as an input + :param encrypter: encrypting function, that takes block as an input :param int bs: cipher's blocksize :param bytes pt: already padded plaintext - :param bytes iv: double blocksize-sized initialization vector + :param bytes iv: blocksize-sized initialization vector """ if not pt or len(pt) % bs != 0: raise ValueError("Plaintext is not blocksize aligned") - if len(iv) < 2 * bs or len(iv) % bs != 0: + if len(iv) < bs or len(iv) % bs != 0: raise ValueError("Invalid IV size") r = [iv[i:i + bs] for i in range(0, len(iv), bs)] ct = [] @@ -168,11 +167,11 @@ def cbc_decrypt(decrypter, bs, ct, iv): :param decrypter: Decrypting function, that takes block as an input :param int bs: cipher's blocksize :param bytes ct: ciphertext - :param bytes iv: double blocksize-sized initialization vector + :param bytes iv: blocksize-sized initialization vector """ if not ct or len(ct) % bs != 0: raise ValueError("Ciphertext is not blocksize aligned") - if len(iv) < 2 * bs or len(iv) % bs != 0: + if len(iv) < bs or len(iv) % bs != 0: raise ValueError("Invalid IV size") r = [iv[i:i + bs] for i in range(0, len(iv), bs)] pt = [] @@ -186,12 +185,12 @@ def cbc_decrypt(decrypter, bs, ct, iv): def cfb_encrypt(encrypter, bs, pt, iv): """CFB encryption mode of operation - :param encrypter: Encrypting function, that takes block as an input + :param encrypter: encrypting function, that takes block as an input :param int bs: cipher's blocksize :param bytes pt: plaintext - :param bytes iv: double blocksize-sized initialization vector + :param bytes iv: blocksize-sized initialization vector """ - if len(iv) < 2 * bs or len(iv) % bs != 0: + if len(iv) < bs or len(iv) % bs != 0: raise ValueError("Invalid IV size") r = [iv[i:i + bs] for i in range(0, len(iv), bs)] ct = [] @@ -204,12 +203,12 @@ def cfb_encrypt(encrypter, bs, pt, iv): def cfb_decrypt(encrypter, bs, ct, iv): """CFB decryption mode of operation - :param encrypter: Encrypting function, that takes block as an input + :param encrypter: encrypting function, that takes block as an input :param int bs: cipher's blocksize :param bytes ct: ciphertext - :param bytes iv: double blocksize-sized initialization vector + :param bytes iv: blocksize-sized initialization vector """ - if len(iv) < 2 * bs or len(iv) % bs != 0: + if len(iv) < bs or len(iv) % bs != 0: raise ValueError("Invalid IV size") r = [iv[i:i + bs] for i in range(0, len(iv), bs)] pt = [] @@ -236,7 +235,7 @@ def _mac_ks(encrypter, bs): def mac(encrypter, bs, data): """MAC (known here as CMAC, OMAC1) mode of operation - :param encrypter: Encrypting function, that takes block as an input + :param encrypter: encrypting function, that takes block as an input :param int bs: cipher's blocksize :param bytes data: data to authenticate