Botan  1.11.4
Public Types | Public Member Functions | List of all members
Botan::KASUMI Class Reference

#include <kasumi.h>

Inheritance diagram for Botan::KASUMI:
Botan::Block_Cipher_Fixed_Params< 8, 16 > Botan::BlockCipher Botan::SymmetricAlgorithm Botan::Algorithm

Public Types

enum  
 

Public Member Functions

size_t block_size () const
 
void clear ()
 
BlockCipherclone () 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
 
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)
 
void set_key (const byte key[], size_t length)
 
bool valid_keylength (size_t length) const
 

Detailed Description

KASUMI, the block cipher used in 3G telephony

Definition at line 18 of file kasumi.h.

Member Enumeration Documentation

anonymous enum
inherited

Definition at line 151 of file block_cipher.h.

151 { BLOCK_SIZE = BS };

Member Function Documentation

size_t Botan::Block_Cipher_Fixed_Params< BS, KMIN, 0 , 1 >::block_size ( ) const
inlinevirtualinherited
Returns
block size of this algorithm

Implements Botan::BlockCipher.

Definition at line 152 of file block_cipher.h.

152 { return BS; }
void Botan::KASUMI::clear ( )
virtual

Zeroize internal state

Implements Botan::Algorithm.

Definition at line 229 of file kasumi.cpp.

References Botan::zap().

230  {
231  zap(EK);
232  }
BlockCipher* Botan::KASUMI::clone ( ) const
inlinevirtual
Returns
new object representing the same algorithm as *this

Implements Botan::BlockCipher.

Definition at line 26 of file kasumi.h.

26 { return new KASUMI; }
void Botan::BlockCipher::decrypt ( const byte  in[],
byte  out[] 
) const
inlineinherited

Decrypt a block.

Parameters
inThe ciphertext block to be decypted as a byte array. Must be of length block_size().
outThe byte array designated to hold the decrypted block. Must be of length block_size().

Definition at line 57 of file block_cipher.h.

Referenced by Botan::DESX::decrypt_n().

58  { decrypt_n(in, out, 1); }
void Botan::BlockCipher::decrypt ( byte  block[]) const
inlineinherited

Decrypt a block.

Parameters
blockthe ciphertext block to be decrypted Must be of length block_size(). Will hold the result when the function has finished.

Definition at line 74 of file block_cipher.h.

74 { decrypt_n(block, block, 1); }
template<typename Alloc >
void Botan::BlockCipher::decrypt ( std::vector< byte, Alloc > &  block) const
inlineinherited

Decrypt one or more blocks

Parameters
blockthe input/output buffer (multiple of block_size())

Definition at line 91 of file block_cipher.h.

92  {
93  return decrypt_n(&block[0], &block[0], block.size() / block_size());
94  }
template<typename Alloc , typename Alloc2 >
void Botan::BlockCipher::decrypt ( const std::vector< byte, Alloc > &  in,
std::vector< byte, Alloc2 > &  out 
) const
inlineinherited

Decrypt one or more blocks

Parameters
inthe input buffer (multiple of block_size())
outthe output buffer (same size as in)

Definition at line 114 of file block_cipher.h.

116  {
117  return decrypt_n(&in[0], &out[0], in.size() / block_size());
118  }
void Botan::KASUMI::decrypt_n ( const byte  in[],
byte  out[],
size_t  blocks 
) const
virtual

Decrypt one or more blocks

Parameters
inthe input buffer (multiple of block_size())
outthe output buffer (same size as in)
blocksthe number of blocks to process

Implements Botan::BlockCipher.

Definition at line 156 of file kasumi.cpp.

References Botan::Block_Cipher_Fixed_Params< 8, 16 >::BLOCK_SIZE, Botan::load_be< u16bit >(), Botan::rotate_left(), and Botan::store_be().

157  {
158  for(size_t i = 0; i != blocks; ++i)
159  {
160  u16bit B0 = load_be<u16bit>(in, 0);
161  u16bit B1 = load_be<u16bit>(in, 1);
162  u16bit B2 = load_be<u16bit>(in, 2);
163  u16bit B3 = load_be<u16bit>(in, 3);
164 
165  for(size_t j = 0; j != 8; j += 2)
166  {
167  const u16bit* K = &EK[8*(6-j)];
168 
169  u16bit L = B2, R = B3;
170 
171  L = FI(L ^ K[10], K[11]) ^ R;
172  R = FI(R ^ K[12], K[13]) ^ L;
173  L = FI(L ^ K[14], K[15]) ^ R;
174 
175  L ^= (rotate_left(R, 1) & K[8]);
176  R ^= (rotate_left(L, 1) | K[9]);
177 
178  R = B0 ^= R;
179  L = B1 ^= L;
180 
181  L ^= (rotate_left(R, 1) & K[0]);
182  R ^= (rotate_left(L, 1) | K[1]);
183 
184  R = FI(R ^ K[2], K[3]) ^ L;
185  L = FI(L ^ K[4], K[5]) ^ R;
186  R = FI(R ^ K[6], K[7]) ^ L;
187 
188  B2 ^= L;
189  B3 ^= R;
190  }
191 
192  store_be(out, B0, B1, B2, B3);
193 
194  in += BLOCK_SIZE;
195  out += BLOCK_SIZE;
196  }
197  }
void Botan::BlockCipher::encrypt ( const byte  in[],
byte  out[] 
) const
inlineinherited

Encrypt a block.

Parameters
inThe plaintext block to be encrypted as a byte array. Must be of length block_size().
outThe byte array designated to hold the encrypted block. Must be of length block_size().

Definition at line 47 of file block_cipher.h.

Referenced by Botan::aont_package(), Botan::aont_unpackage(), Botan::OFB::cipher(), Botan::DESX::encrypt_n(), Botan::CFB_Encryption::set_iv(), Botan::OFB::set_iv(), Botan::XTS_Encryption::set_iv(), Botan::CFB_Decryption::set_iv(), and Botan::XTS_Decryption::set_iv().

48  { encrypt_n(in, out, 1); }
void Botan::BlockCipher::encrypt ( byte  block[]) const
inlineinherited

Encrypt a block.

Parameters
blockthe plaintext block to be encrypted Must be of length block_size(). Will hold the result when the function has finished.

Definition at line 66 of file block_cipher.h.

66 { encrypt_n(block, block, 1); }
template<typename Alloc >
void Botan::BlockCipher::encrypt ( std::vector< byte, Alloc > &  block) const
inlineinherited

Encrypt one or more blocks

Parameters
blockthe input/output buffer (multiple of block_size())

Definition at line 81 of file block_cipher.h.

82  {
83  return encrypt_n(&block[0], &block[0], block.size() / block_size());
84  }
template<typename Alloc , typename Alloc2 >
void Botan::BlockCipher::encrypt ( const std::vector< byte, Alloc > &  in,
std::vector< byte, Alloc2 > &  out 
) const
inlineinherited

Encrypt one or more blocks

Parameters
inthe input buffer (multiple of block_size())
outthe output buffer (same size as in)

Definition at line 102 of file block_cipher.h.

104  {
105  return encrypt_n(&in[0], &out[0], in.size() / block_size());
106  }
void Botan::KASUMI::encrypt_n ( const byte  in[],
byte  out[],
size_t  blocks 
) const
virtual

Encrypt one or more blocks

Parameters
inthe input buffer (multiple of block_size())
outthe output buffer (same size as in)
blocksthe number of blocks to process

Implements Botan::BlockCipher.

Definition at line 112 of file kasumi.cpp.

References Botan::Block_Cipher_Fixed_Params< 8, 16 >::BLOCK_SIZE, Botan::load_be< u16bit >(), Botan::rotate_left(), and Botan::store_be().

113  {
114  for(size_t i = 0; i != blocks; ++i)
115  {
116  u16bit B0 = load_be<u16bit>(in, 0);
117  u16bit B1 = load_be<u16bit>(in, 1);
118  u16bit B2 = load_be<u16bit>(in, 2);
119  u16bit B3 = load_be<u16bit>(in, 3);
120 
121  for(size_t j = 0; j != 8; j += 2)
122  {
123  const u16bit* K = &EK[8*j];
124 
125  u16bit R = B1 ^ (rotate_left(B0, 1) & K[0]);
126  u16bit L = B0 ^ (rotate_left(R, 1) | K[1]);
127 
128  L = FI(L ^ K[ 2], K[ 3]) ^ R;
129  R = FI(R ^ K[ 4], K[ 5]) ^ L;
130  L = FI(L ^ K[ 6], K[ 7]) ^ R;
131 
132  R = B2 ^= R;
133  L = B3 ^= L;
134 
135  R = FI(R ^ K[10], K[11]) ^ L;
136  L = FI(L ^ K[12], K[13]) ^ R;
137  R = FI(R ^ K[14], K[15]) ^ L;
138 
139  R ^= (rotate_left(L, 1) & K[8]);
140  L ^= (rotate_left(R, 1) | K[9]);
141 
142  B0 ^= L;
143  B1 ^= R;
144  }
145 
146  store_be(out, B0, B1, B2, B3);
147 
148  in += BLOCK_SIZE;
149  out += BLOCK_SIZE;
150  }
151  }
Key_Length_Specification Botan::Block_Cipher_Fixed_Params< BS, KMIN, 0 , 1 >::key_spec ( ) const
inlinevirtualinherited
Returns
object describing limits on key size

Implements Botan::SymmetricAlgorithm.

Definition at line 154 of file block_cipher.h.

155  {
156  return Key_Length_Specification(KMIN, KMAX, KMOD);
157  }
size_t Botan::SymmetricAlgorithm::maximum_keylength ( ) const
inlineinherited
Returns
minimum allowed key length

Definition at line 33 of file sym_algo.h.

References Botan::Key_Length_Specification::maximum_keylength().

Referenced by Botan::PBE_PKCS5v20::PBE_PKCS5v20(), and Botan::time_algorithm_ops().

34  {
35  return key_spec().maximum_keylength();
36  }
size_t Botan::SymmetricAlgorithm::minimum_keylength ( ) const
inlineinherited
Returns
maxmium allowed key length

Definition at line 41 of file sym_algo.h.

42  {
43  return key_spec().minimum_keylength();
44  }
std::string Botan::KASUMI::name ( ) const
inlinevirtual
Returns
name of this algorithm

Implements Botan::Algorithm.

Definition at line 25 of file kasumi.h.

25 { return "KASUMI"; }
size_t Botan::BlockCipher::parallel_bytes ( ) const
inlineinherited
Returns
prefererred parallelism of this cipher in bytes

Definition at line 35 of file block_cipher.h.

36  {
37  return parallelism() * block_size() * BOTAN_BLOCK_CIPHER_PAR_MULT;
38  }
virtual size_t Botan::BlockCipher::parallelism ( ) const
inlinevirtualinherited
Returns
native parallelism of this cipher in blocks

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 30 of file block_cipher.h.

30 { return 1; }
void Botan::SymmetricAlgorithm::set_key ( const SymmetricKey key)
inlineinherited
void Botan::SymmetricAlgorithm::set_key ( const byte  key[],
size_t  length 
)
inlineinherited

Set the symmetric key of this object.

Parameters
keythe to be set as a byte array.
lengthin bytes of key param

Definition at line 68 of file sym_algo.h.

69  {
70  if(!valid_keylength(length))
71  throw Invalid_Key_Length(name(), length);
72  key_schedule(key, length);
73  }
bool Botan::SymmetricAlgorithm::valid_keylength ( size_t  length) const
inlineinherited

Check whether a given key length is valid for this algorithm.

Parameters
lengththe key length to be checked.
Returns
true if the key length is valid.

Definition at line 51 of file sym_algo.h.

Referenced by Botan::aont_package(), Botan::aont_unpackage(), Botan::HMAC_RNG::HMAC_RNG(), Botan::Lion::Lion(), and Botan::Randpool::Randpool().

52  {
53  return key_spec().valid_keylength(length);
54  }

The documentation for this class was generated from the following files: