Botan  1.10.9
Public Member Functions | List of all members
Botan::Turing Class Reference

#include <turing.h>

Inheritance diagram for Botan::Turing:
Botan::StreamCipher Botan::SymmetricAlgorithm Botan::Algorithm

Public Member Functions

void cipher (const byte in[], byte out[], size_t length)
 
void cipher1 (byte buf[], size_t len)
 
void clear ()
 
StreamCipherclone () const
 
Key_Length_Specification key_spec () const
 
size_t maximum_keylength () const
 
size_t minimum_keylength () const
 
std::string name () const
 
void set_iv (const byte iv[], size_t iv_length)
 
void set_key (const SymmetricKey &key)
 
void set_key (const byte key[], size_t length)
 
 Turing ()
 
bool valid_iv_length (size_t iv_len) const
 
bool valid_keylength (size_t length) const
 

Detailed Description

Turing

Definition at line 18 of file turing.h.

Constructor & Destructor Documentation

Botan::Turing::Turing ( )
inline

Definition at line 36 of file turing.h.

36  : S0(256), S1(256), S2(256), S3(256),
37  R(17), buffer(340), position(0) {}

Member Function Documentation

void Botan::Turing::cipher ( const byte  in[],
byte  out[],
size_t  len 
)
virtual

Encrypt or decrypt a message

Parameters
inthe plaintext
outthe byte array to hold the output, i.e. the ciphertext
lenthe length of both in and out in bytes

Implements Botan::StreamCipher.

Definition at line 38 of file turing.cpp.

References Botan::MemoryRegion< T >::size(), and Botan::xor_buf().

39  {
40  while(length >= buffer.size() - position)
41  {
42  xor_buf(out, in, &buffer[position], buffer.size() - position);
43  length -= (buffer.size() - position);
44  in += (buffer.size() - position);
45  out += (buffer.size() - position);
46  generate();
47  }
48  xor_buf(out, in, &buffer[position], length);
49  position += length;
50  }
size_t size() const
Definition: secmem.h:29
void xor_buf(byte out[], const byte in[], size_t length)
Definition: xor_buf.h:21
void Botan::StreamCipher::cipher1 ( byte  buf[],
size_t  len 
)
inlineinherited

Encrypt or decrypt a message

Parameters
bufthe plaintext / ciphertext
lenthe length of buf in bytes

Definition at line 34 of file stream_cipher.h.

Referenced by Botan::Lion::decrypt_n(), and Botan::Lion::encrypt_n().

35  { cipher(buf, buf, len); }
virtual void cipher(const byte in[], byte out[], size_t len)=0
void Botan::Turing::clear ( )
virtual

Zeroize internal state

Implements Botan::Algorithm.

Definition at line 314 of file turing.cpp.

References Botan::zeroise().

315  {
316  zeroise(S0);
317  zeroise(S1);
318  zeroise(S2);
319  zeroise(S3);
320 
321  zeroise(buffer);
322  position = 0;
323  }
void zeroise(MemoryRegion< T > &vec)
Definition: secmem.h:415
StreamCipher* Botan::Turing::clone ( ) const
inlinevirtual

Get a new object representing the same algorithm as *this

Implements Botan::StreamCipher.

Definition at line 34 of file turing.h.

34 { return new Turing; }
Key_Length_Specification Botan::Turing::key_spec ( ) const
inlinevirtual
Returns
object describing limits on key size

Implements Botan::SymmetricAlgorithm.

Definition at line 27 of file turing.h.

28  {
29  return Key_Length_Specification(4, 32, 4);
30  }
size_t Botan::SymmetricAlgorithm::maximum_keylength ( ) const
inlineinherited
Returns
minimum allowed key length

Definition at line 33 of file sym_algo.h.

34  {
35  return key_spec().maximum_keylength();
36  }
size_t maximum_keylength() const
Definition: key_spec.h:69
virtual Key_Length_Specification key_spec() const =0
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  }
size_t minimum_keylength() const
Definition: key_spec.h:61
virtual Key_Length_Specification key_spec() const =0
std::string Botan::Turing::name ( ) const
inlinevirtual
Returns
name of this algorithm

Implements Botan::Algorithm.

Definition at line 33 of file turing.h.

Referenced by set_iv().

33 { return "Turing"; }
void Botan::Turing::set_iv ( const byte  iv[],
size_t  iv_len 
)
virtual

Resync the cipher using the IV

Parameters
ivthe initialization vector
iv_lenthe length of the IV in bytes

Reimplemented from Botan::StreamCipher.

Definition at line 282 of file turing.cpp.

References Botan::get_byte(), name(), Botan::MemoryRegion< T >::size(), and valid_iv_length().

283  {
284  if(!valid_iv_length(length))
285  throw Invalid_IV_Length(name(), length);
286 
287  SecureVector<u32bit> IV(length / 4);
288  for(size_t i = 0; i != length; ++i)
289  IV[i/4] = (IV[i/4] << 8) + iv[i];
290 
291  for(size_t i = 0; i != IV.size(); ++i)
292  R[i] = IV[i] = fixedS(IV[i]);
293 
294  for(size_t i = 0; i != K.size(); ++i)
295  R[i+IV.size()] = K[i];
296 
297  R[K.size() + IV.size()] = (0x010203 << 8) | (K.size() << 4) | IV.size();
298 
299  for(size_t i = K.size() + IV.size() + 1; i != 17; ++i)
300  {
301  const u32bit W = R[i-K.size()-IV.size()-1] + R[i-1];
302  R[i] = S0[get_byte(0, W)] ^ S1[get_byte(1, W)] ^
303  S2[get_byte(2, W)] ^ S3[get_byte(3, W)];
304  }
305 
306  PHT(R);
307 
308  generate();
309  }
byte get_byte(size_t byte_num, T input)
Definition: get_byte.h:21
size_t size() const
Definition: secmem.h:29
bool valid_iv_length(size_t iv_len) const
Definition: turing.h:24
std::string name() const
Definition: turing.h:33
unsigned int u32bit
Definition: types.h:32
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 valid_keylength(size_t length) const
Definition: sym_algo.h:51
virtual std::string name() const =0
bool Botan::Turing::valid_iv_length ( size_t  iv_len) const
inlinevirtual
Parameters
iv_lenthe length of the IV in bytes
Returns
if the length is valid for this algorithm

Reimplemented from Botan::StreamCipher.

Definition at line 24 of file turing.h.

Referenced by set_iv().

25  { return (iv_len % 4 == 0 && iv_len <= 16); }
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(), Botan::Randpool::Randpool(), and Botan::EAX_Base::valid_keylength().

52  {
53  return key_spec().valid_keylength(length);
54  }
bool valid_keylength(size_t length) const
Definition: key_spec.h:51
virtual Key_Length_Specification key_spec() const =0

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