Botan
1.11.15
|
#include <gost_28147.h>
Public Types | |
enum | |
typedef SCAN_Name | Spec |
Public Member Functions | |
size_t | block_size () const |
void | clear () |
BlockCipher * | clone () const |
void | decrypt (const byte in[], byte out[]) const |
void | decrypt (byte block[]) const |
template<typename Alloc > | |
void | decrypt (std::vector< byte, Alloc > &block) const |
template<typename Alloc , typename Alloc2 > | |
void | decrypt (const std::vector< byte, Alloc > &in, std::vector< byte, Alloc2 > &out) const |
void | decrypt_n (const byte in[], byte out[], size_t blocks) const |
void | encrypt (const byte in[], byte out[]) const |
void | encrypt (byte block[]) const |
template<typename Alloc > | |
void | encrypt (std::vector< byte, Alloc > &block) const |
template<typename Alloc , typename Alloc2 > | |
void | encrypt (const std::vector< byte, Alloc > &in, std::vector< byte, Alloc2 > &out) const |
void | encrypt_n (const byte in[], byte out[], size_t blocks) const |
GOST_28147_89 (const GOST_28147_89_Params ¶ms) | |
Key_Length_Specification | key_spec () const |
size_t | maximum_keylength () const |
size_t | minimum_keylength () const |
std::string | name () const |
size_t | parallel_bytes () const |
virtual size_t | parallelism () const |
void | set_key (const SymmetricKey &key) |
template<typename Alloc > | |
void | set_key (const std::vector< byte, Alloc > &key) |
void | set_key (const byte key[], size_t length) |
bool | valid_keylength (size_t length) const |
GOST 28147-89
Definition at line 52 of file gost_28147.h.
typedef SCAN_Name Botan::BlockCipher::Spec [inherited] |
Definition at line 22 of file block_cipher.h.
anonymous enum [inherited] |
Definition at line 153 of file block_cipher.h.
{ BLOCK_SIZE = BS };
Botan::GOST_28147_89::GOST_28147_89 | ( | const GOST_28147_89_Params & | params | ) |
params | the sbox parameters to use |
Definition at line 55 of file gost_28147.cpp.
References Botan::rotate_left(), and Botan::GOST_28147_89_Params::sbox_entry().
: SBOX(1024) { // Convert the parallel 4x4 sboxes into larger word-based sboxes for(size_t i = 0; i != 4; ++i) for(size_t j = 0; j != 256; ++j) { const u32bit T = (param.sbox_entry(2*i , j % 16)) | (param.sbox_entry(2*i+1, j / 16) << 4); SBOX[256*i+j] = rotate_left(T, (11+8*i) % 32); } }
size_t Botan::Block_Cipher_Fixed_Params< BS, KMIN, 0 , 1 >::block_size | ( | ) | const [inline, virtual, inherited] |
Implements Botan::BlockCipher.
Definition at line 154 of file block_cipher.h.
{ return BS; }
void Botan::GOST_28147_89::clear | ( | ) | [virtual] |
Implements Botan::SymmetricAlgorithm.
Definition at line 173 of file gost_28147.cpp.
References Botan::zap().
Referenced by Botan::GOST_34_11::clear().
{ zap(EK); }
BlockCipher* Botan::GOST_28147_89::clone | ( | ) | const [inline, virtual] |
Implements Botan::BlockCipher.
Definition at line 61 of file gost_28147.h.
{ return new GOST_28147_89(SBOX); }
void Botan::BlockCipher::decrypt | ( | const byte | in[], |
byte | out[] | ||
) | const [inline, inherited] |
Decrypt a block.
in | The ciphertext block to be decypted as a byte array. Must be of length block_size(). |
out | The byte array designated to hold the decrypted block. Must be of length block_size(). |
Definition at line 59 of file block_cipher.h.
Referenced by Botan::Camellia_128::decrypt_n(), Botan::DESX::decrypt_n(), Botan::Camellia_192::decrypt_n(), Botan::Camellia_256::decrypt_n(), Botan::XTS_Decryption::finish(), and Botan::CTS_Decryption::finish().
{ decrypt_n(in, out, 1); }
void Botan::BlockCipher::decrypt | ( | byte | block[] | ) | const [inline, inherited] |
Decrypt a block.
block | the ciphertext block to be decrypted Must be of length block_size(). Will hold the result when the function has finished. |
Definition at line 76 of file block_cipher.h.
{ decrypt_n(block, block, 1); }
void Botan::BlockCipher::decrypt | ( | std::vector< byte, Alloc > & | block | ) | const [inline, inherited] |
Decrypt one or more blocks
block | the input/output buffer (multiple of block_size()) |
Definition at line 93 of file block_cipher.h.
{ return decrypt_n(&block[0], &block[0], block.size() / block_size()); }
void Botan::BlockCipher::decrypt | ( | const std::vector< byte, Alloc > & | in, |
std::vector< byte, Alloc2 > & | out | ||
) | const [inline, inherited] |
Decrypt one or more blocks
in | the input buffer (multiple of block_size()) |
out | the output buffer (same size as in) |
Definition at line 116 of file block_cipher.h.
{ return decrypt_n(&in[0], &out[0], in.size() / block_size()); }
void Botan::GOST_28147_89::decrypt_n | ( | const byte | in[], |
byte | out[], | ||
size_t | blocks | ||
) | const [virtual] |
Decrypt one or more blocks
in | the input buffer (multiple of block_size()) |
out | the output buffer (same size as in) |
blocks | the number of blocks to process |
Implements Botan::BlockCipher.
Definition at line 137 of file gost_28147.cpp.
References Botan::Block_Cipher_Fixed_Params< 8, 32 >::BLOCK_SIZE, GOST_2ROUND, Botan::load_le< u32bit >(), and Botan::store_le().
{ for(size_t i = 0; i != blocks; ++i) { u32bit N1 = load_le<u32bit>(in, 0); u32bit N2 = load_le<u32bit>(in, 1); GOST_2ROUND(N1, N2, 0, 1); GOST_2ROUND(N1, N2, 2, 3); GOST_2ROUND(N1, N2, 4, 5); GOST_2ROUND(N1, N2, 6, 7); for(size_t j = 0; j != 3; ++j) { GOST_2ROUND(N1, N2, 7, 6); GOST_2ROUND(N1, N2, 5, 4); GOST_2ROUND(N1, N2, 3, 2); GOST_2ROUND(N1, N2, 1, 0); } store_le(out, N2, N1); in += BLOCK_SIZE; out += BLOCK_SIZE; } }
void Botan::BlockCipher::encrypt | ( | const byte | in[], |
byte | out[] | ||
) | const [inline, inherited] |
Encrypt a block.
in | The plaintext block to be encrypted as a byte array. Must be of length block_size(). |
out | The byte array designated to hold the encrypted block. Must be of length block_size(). |
Definition at line 49 of file block_cipher.h.
Referenced by Botan::aont_package(), Botan::aont_unpackage(), Botan::Camellia_128::encrypt_n(), Botan::DESX::encrypt_n(), Botan::Camellia_192::encrypt_n(), Botan::Camellia_256::encrypt_n(), Botan::XTS_Encryption::finish(), Botan::CTS_Encryption::finish(), Botan::CFB_Encryption::update(), Botan::CBC_Encryption::update(), and Botan::CFB_Decryption::update().
{ encrypt_n(in, out, 1); }
void Botan::BlockCipher::encrypt | ( | byte | block[] | ) | const [inline, inherited] |
Encrypt a block.
block | the plaintext block to be encrypted Must be of length block_size(). Will hold the result when the function has finished. |
Definition at line 68 of file block_cipher.h.
{ encrypt_n(block, block, 1); }
void Botan::BlockCipher::encrypt | ( | std::vector< byte, Alloc > & | block | ) | const [inline, inherited] |
Encrypt one or more blocks
block | the input/output buffer (multiple of block_size()) |
Definition at line 83 of file block_cipher.h.
{ return encrypt_n(&block[0], &block[0], block.size() / block_size()); }
void Botan::BlockCipher::encrypt | ( | const std::vector< byte, Alloc > & | in, |
std::vector< byte, Alloc2 > & | out | ||
) | const [inline, inherited] |
Encrypt one or more blocks
in | the input buffer (multiple of block_size()) |
out | the output buffer (same size as in) |
Definition at line 104 of file block_cipher.h.
{ return encrypt_n(&in[0], &out[0], in.size() / block_size()); }
void Botan::GOST_28147_89::encrypt_n | ( | const byte | in[], |
byte | out[], | ||
size_t | blocks | ||
) | const [virtual] |
Encrypt one or more blocks
in | the input buffer (multiple of block_size()) |
out | the output buffer (same size as in) |
blocks | the number of blocks to process |
Implements Botan::BlockCipher.
Definition at line 107 of file gost_28147.cpp.
References Botan::Block_Cipher_Fixed_Params< 8, 32 >::BLOCK_SIZE, GOST_2ROUND, Botan::load_le< u32bit >(), and Botan::store_le().
{ for(size_t i = 0; i != blocks; ++i) { u32bit N1 = load_le<u32bit>(in, 0); u32bit N2 = load_le<u32bit>(in, 1); for(size_t j = 0; j != 3; ++j) { GOST_2ROUND(N1, N2, 0, 1); GOST_2ROUND(N1, N2, 2, 3); GOST_2ROUND(N1, N2, 4, 5); GOST_2ROUND(N1, N2, 6, 7); } GOST_2ROUND(N1, N2, 7, 6); GOST_2ROUND(N1, N2, 5, 4); GOST_2ROUND(N1, N2, 3, 2); GOST_2ROUND(N1, N2, 1, 0); store_le(out, N2, N1); in += BLOCK_SIZE; out += BLOCK_SIZE; } }
Key_Length_Specification Botan::Block_Cipher_Fixed_Params< BS, KMIN, 0 , 1 >::key_spec | ( | ) | const [inline, virtual, inherited] |
Implements Botan::SymmetricAlgorithm.
Definition at line 156 of file block_cipher.h.
{
return Key_Length_Specification(KMIN, KMAX, KMOD);
}
size_t Botan::SymmetricAlgorithm::maximum_keylength | ( | ) | const [inline, inherited] |
Definition at line 36 of file sym_algo.h.
References Botan::Key_Length_Specification::maximum_keylength().
{ return key_spec().maximum_keylength(); }
size_t Botan::SymmetricAlgorithm::minimum_keylength | ( | ) | const [inline, inherited] |
Definition at line 44 of file sym_algo.h.
{ return key_spec().minimum_keylength(); }
std::string Botan::GOST_28147_89::name | ( | ) | const [virtual] |
Implements Botan::SymmetricAlgorithm.
Definition at line 67 of file gost_28147.cpp.
{ /* 'Guess' the right name for the sbox on the basis of the values. This would need to be updated if support for other sbox parameters is added. Preferably, we would just store the string value in the constructor, but can't break binary compat. */ std::string sbox_name = ""; if(SBOX[0] == 0x00072000) sbox_name = "R3411_94_TestParam"; else if(SBOX[0] == 0x0002D000) sbox_name = "R3411_CryptoPro"; else throw Internal_Error("GOST-28147 unrecognized sbox value"); return "GOST-28147-89(" + sbox_name + ")"; }
size_t Botan::BlockCipher::parallel_bytes | ( | ) | const [inline, inherited] |
Definition at line 37 of file block_cipher.h.
Referenced by Botan::XTS_Mode::update_granularity(), Botan::CBC_Mode::update_granularity(), and Botan::ECB_Mode::update_granularity().
{ return parallelism() * block_size() * BOTAN_BLOCK_CIPHER_PAR_MULT; }
virtual size_t Botan::BlockCipher::parallelism | ( | ) | const [inline, virtual, inherited] |
Reimplemented in Botan::AES_256_NI, Botan::AES_192_NI, Botan::AES_128_NI, Botan::IDEA_SSE2, Botan::Noekeon_SIMD, Botan::Serpent_SIMD, and Botan::XTEA_SIMD.
Definition at line 32 of file block_cipher.h.
{ return 1; }
void Botan::SymmetricAlgorithm::set_key | ( | const SymmetricKey & | key | ) | [inline, inherited] |
Set the symmetric key of this object.
key | the SymmetricKey to be set. |
Definition at line 63 of file sym_algo.h.
References Botan::OctetString::begin(), and Botan::OctetString::length().
Referenced by Botan::aont_package(), Botan::aont_unpackage(), botan_mac_set_key(), Botan::TLS::Session::decrypt(), Botan::TLS::Session::encrypt(), and Botan::pbkdf2().
{ set_key(key.begin(), key.length()); }
void Botan::SymmetricAlgorithm::set_key | ( | const std::vector< byte, Alloc > & | key | ) | [inline, inherited] |
Definition at line 69 of file sym_algo.h.
{ set_key(&key[0], key.size()); }
void Botan::SymmetricAlgorithm::set_key | ( | const byte | key[], |
size_t | length | ||
) | [inline, inherited] |
Set the symmetric key of this object.
key | the to be set as a byte array. |
length | in bytes of key param |
Definition at line 79 of file sym_algo.h.
{ if(!valid_keylength(length)) throw Invalid_Key_Length(name(), length); key_schedule(key, length); }
bool Botan::SymmetricAlgorithm::valid_keylength | ( | size_t | length | ) | const [inline, inherited] |
Check whether a given key length is valid for this algorithm.
length | the key length to be checked. |
Definition at line 54 of file sym_algo.h.
Referenced by Botan::aont_package(), and Botan::aont_unpackage().
{ return key_spec().valid_keylength(length); }