X-Git-Url: http://www.git.cypherpunks.ru/?a=blobdiff_plain;f=src%2Fcypherpunks.ru%2Fgogost%2Fgost28147%2Fcfb.go;h=dfcd8f7b7f9812ea3f23c52a34580cf3f6a8d8f8;hb=91562b3cf4aad503c493aa7b69abfbb07b46e63a;hp=5c39ffa8b76195c3e94f4ad7fa7757a5fc9afc41;hpb=014be6ab0719643d1e2996a360ab0619124b7e0e;p=gogost.git diff --git a/src/cypherpunks.ru/gogost/gost28147/cfb.go b/src/cypherpunks.ru/gogost/gost28147/cfb.go index 5c39ffa..dfcd8f7 100644 --- a/src/cypherpunks.ru/gogost/gost28147/cfb.go +++ b/src/cypherpunks.ru/gogost/gost28147/cfb.go @@ -1,10 +1,9 @@ // GoGOST -- Pure Go GOST cryptographic functions library -// Copyright (C) 2015-2017 Sergey Matveev +// Copyright (C) 2015-2019 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 @@ -21,8 +20,13 @@ type CFBEncrypter struct { iv []byte } -func (c *Cipher) NewCFBEncrypter(iv [BlockSize]byte) *CFBEncrypter { - return &CFBEncrypter{c, iv[:]} +func (c *Cipher) NewCFBEncrypter(iv []byte) *CFBEncrypter { + if len(iv) != BlockSize { + panic("iv length is not equal to blocksize") + } + encrypter := CFBEncrypter{c: c, iv: make([]byte, BlockSize)} + copy(encrypter.iv, iv) + return &encrypter } func (c *CFBEncrypter) XORKeyStream(dst, src []byte) { @@ -48,8 +52,13 @@ type CFBDecrypter struct { iv []byte } -func (c *Cipher) NewCFBDecrypter(iv [BlockSize]byte) *CFBDecrypter { - return &CFBDecrypter{c, iv[:]} +func (c *Cipher) NewCFBDecrypter(iv []byte) *CFBDecrypter { + if len(iv) != BlockSize { + panic("iv length is not equal to blocksize") + } + decrypter := CFBDecrypter{c: c, iv: make([]byte, BlockSize)} + copy(decrypter.iv, iv) + return &decrypter } func (c *CFBDecrypter) XORKeyStream(dst, src []byte) {