Botan  1.10.9
Public Member Functions | Protected Member Functions | Private Member Functions | List of all members
Botan::XTS_Decryption Class Reference

#include <xts.h>

Inheritance diagram for Botan::XTS_Decryption:
Botan::Keyed_Filter Botan::Buffered_Filter Botan::Filter

Public Member Functions

virtual bool attachable ()
 
std::string name () const
 
void set_iv (const InitializationVector &iv)
 
void set_key (const SymmetricKey &key)
 
virtual void start_msg ()
 
bool valid_iv_length (size_t iv_len) const
 
bool valid_keylength (size_t key_len) const
 
 XTS_Decryption (BlockCipher *ciph)
 
 XTS_Decryption (BlockCipher *ciph, const SymmetricKey &key, const InitializationVector &iv)
 
 ~XTS_Decryption ()
 

Protected Member Functions

void send (const byte in[], size_t length)
 
void send (byte in)
 
void send (const MemoryRegion< byte > &in)
 
void send (const MemoryRegion< byte > &in, size_t length)
 

Private Member Functions

void buffer_reset ()
 
size_t buffered_block_size () const
 
size_t current_position () const
 

Detailed Description

IEEE P1619 XTS Encryption

Definition at line 57 of file xts.h.

Constructor & Destructor Documentation

Botan::XTS_Decryption::XTS_Decryption ( BlockCipher ciph)

Definition at line 219 of file xts.cpp.

References Botan::Buffered_Filter::buffered_block_size(), and Botan::BlockCipher::clone().

219  :
220  Buffered_Filter(xts_parallelism(ciph), ciph->block_size() + 1),
221  cipher(ciph)
222  {
223  if(cipher->block_size() != 8 && cipher->block_size() != 16)
224  throw std::invalid_argument("Bad cipher for XTS: " + cipher->name());
225 
226  cipher2 = ciph->clone();
227  tweak.resize(buffered_block_size());
228  }
void resize(size_t n)
Definition: secmem.h:211
virtual BlockCipher * clone() const =0
virtual std::string name() const =0
Buffered_Filter(size_t block_size, size_t final_minimum)
Definition: buf_filt.cpp:18
virtual size_t block_size() const =0
size_t buffered_block_size() const
Definition: buf_filt.h:67
Botan::XTS_Decryption::XTS_Decryption ( BlockCipher ciph,
const SymmetricKey key,
const InitializationVector iv 
)

Definition at line 233 of file xts.cpp.

References Botan::Buffered_Filter::buffered_block_size(), Botan::BlockCipher::clone(), set_iv(), and set_key().

235  :
236  Buffered_Filter(xts_parallelism(ciph), ciph->block_size() + 1),
237  cipher(ciph)
238  {
239  if(cipher->block_size() != 8 && cipher->block_size() != 16)
240  throw std::invalid_argument("Bad cipher for XTS: " + cipher->name());
241 
242  cipher2 = ciph->clone();
243  tweak.resize(buffered_block_size());
244 
245  set_key(key);
246  set_iv(iv);
247  }
void resize(size_t n)
Definition: secmem.h:211
virtual BlockCipher * clone() const =0
virtual std::string name() const =0
void set_iv(const InitializationVector &iv)
Definition: xts.cpp:260
Buffered_Filter(size_t block_size, size_t final_minimum)
Definition: buf_filt.cpp:18
virtual size_t block_size() const =0
size_t buffered_block_size() const
Definition: buf_filt.h:67
void set_key(const SymmetricKey &key)
Definition: xts.cpp:280
Botan::XTS_Decryption::~XTS_Decryption ( )
inline

Definition at line 78 of file xts.h.

78 { delete cipher; delete cipher2; }

Member Function Documentation

virtual bool Botan::Filter::attachable ( )
inlinevirtualinherited

Check whether this filter is an attachable filter.

Returns
true if this filter is attachable, false otherwise

Reimplemented in Botan::SecureQueue, and Botan::DataSink.

Definition at line 50 of file filter.h.

50 { return true; }
std::string Botan::XTS_Decryption::name ( ) const
virtual
Returns
descriptive name for this filter

Implements Botan::Filter.

Definition at line 252 of file xts.cpp.

Referenced by set_iv(), and set_key().

253  {
254  return (cipher->name() + "/XTS");
255  }
virtual std::string name() const =0
void Botan::Filter::send ( const byte  in[],
size_t  length 
)
protectedinherited
Parameters
insome input for the filter
lengththe length of in

Definition at line 28 of file filter.cpp.

References Botan::MemoryRegion< T >::clear(), Botan::MemoryRegion< T >::size(), and Botan::Filter::write().

Referenced by Botan::PK_Encryptor_Filter::end_msg(), Botan::Zlib_Compression::end_msg(), Botan::Bzip_Compression::end_msg(), Botan::Hex_Encoder::end_msg(), Botan::Base64_Encoder::end_msg(), Botan::PK_Decryptor_Filter::end_msg(), Botan::Bzip_Decompression::end_msg(), Botan::Zlib_Decompression::end_msg(), Botan::PK_Signer_Filter::end_msg(), Botan::Hex_Decoder::end_msg(), Botan::Base64_Decoder::end_msg(), Botan::PK_Verifier_Filter::end_msg(), Botan::Hash_Filter::end_msg(), Botan::MAC_Filter::end_msg(), Botan::Bzip_Compression::flush(), Botan::Zlib_Compression::flush(), Botan::Zlib_Compression::write(), Botan::Bzip_Compression::write(), Botan::StreamCipher_Filter::write(), Botan::Bzip_Decompression::write(), Botan::Zlib_Decompression::write(), Botan::Hex_Decoder::write(), and Botan::Base64_Decoder::write().

29  {
30  bool nothing_attached = true;
31  for(size_t j = 0; j != total_ports(); ++j)
32  if(next[j])
33  {
34  if(write_queue.size())
35  next[j]->write(&write_queue[0], write_queue.size());
36  next[j]->write(input, length);
37  nothing_attached = false;
38  }
39 
40  if(nothing_attached)
41  write_queue += std::make_pair(input, length);
42  else
43  write_queue.clear();
44  }
virtual void write(const byte input[], size_t length)=0
size_t size() const
Definition: secmem.h:29
void Botan::Filter::send ( byte  in)
inlineprotectedinherited
Parameters
insome input for the filter

Definition at line 63 of file filter.h.

References Botan::Filter::send().

Referenced by Botan::Filter::send().

63 { send(&in, 1); }
void send(const byte in[], size_t length)
Definition: filter.cpp:28
void Botan::Filter::send ( const MemoryRegion< byte > &  in)
inlineprotectedinherited
Parameters
insome input for the filter

Definition at line 68 of file filter.h.

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

Referenced by Botan::Filter::send().

68 { send(&in[0], in.size()); }
void send(const byte in[], size_t length)
Definition: filter.cpp:28
size_t size() const
Definition: secmem.h:29
void Botan::Filter::send ( const MemoryRegion< byte > &  in,
size_t  length 
)
inlineprotectedinherited
Parameters
insome input for the filter
lengththe number of bytes of in to send

Definition at line 74 of file filter.h.

75  {
76  send(&in[0], length);
77  }
void send(const byte in[], size_t length)
Definition: filter.cpp:28
void Botan::XTS_Decryption::set_iv ( const InitializationVector iv)
virtual

Set the initialization vector of this filter. Note: you should call set_iv() only after you have called set_key()

Parameters
ivthe initialization vector to use

Reimplemented from Botan::Keyed_Filter.

Definition at line 260 of file xts.cpp.

References Botan::OctetString::begin(), Botan::BlockCipher::encrypt(), Botan::OctetString::length(), name(), and valid_iv_length().

Referenced by XTS_Decryption().

261  {
262  if(!valid_iv_length(iv.length()))
263  throw Invalid_IV_Length(name(), iv.length());
264 
265  const size_t blocks_in_tweak = tweak.size() / cipher->block_size();
266 
267  tweak.copy(iv.begin(), iv.length());
268  cipher2->encrypt(tweak);
269 
270  for(size_t i = 1; i < blocks_in_tweak; ++i)
271  {
272  tweak.copy(i*cipher->block_size(),
273  &tweak[(i-1)*cipher->block_size()],
274  cipher->block_size());
275 
276  poly_double(&tweak[i*cipher->block_size()], cipher->block_size());
277  }
278  }
void copy(const T in[], size_t n)
Definition: secmem.h:120
size_t size() const
Definition: secmem.h:29
bool valid_iv_length(size_t iv_len) const
Definition: xts.h:67
void encrypt(const byte in[], byte out[]) const
Definition: block_cipher.h:47
std::string name() const
Definition: xts.cpp:252
virtual size_t block_size() const =0
void Botan::XTS_Decryption::set_key ( const SymmetricKey key)
virtual

Set the key of this filter

Parameters
keythe key to use

Implements Botan::Keyed_Filter.

Definition at line 280 of file xts.cpp.

References Botan::OctetString::begin(), Botan::OctetString::length(), name(), and Botan::SymmetricAlgorithm::set_key().

Referenced by XTS_Decryption().

281  {
282  size_t key_half = key.length() / 2;
283 
284  if(key.length() % 2 == 1 || !cipher->valid_keylength(key_half))
285  throw Invalid_Key_Length(name(), key.length());
286 
287  cipher->set_key(key.begin(), key_half);
288  cipher2->set_key(key.begin() + key_half, key_half);
289  }
bool valid_keylength(size_t length) const
Definition: sym_algo.h:51
void set_key(const SymmetricKey &key)
Definition: sym_algo.h:60
std::string name() const
Definition: xts.cpp:252
virtual void Botan::Filter::start_msg ( )
inlinevirtualinherited

Start a new message. Must be closed by end_msg() before another message can be started.

Reimplemented in Botan::Zlib_Decompression, Botan::EAX_Base, Botan::Bzip_Decompression, Botan::PBE_PKCS5v20, Botan::PBE_PKCS5v15, Botan::Bzip_Compression, and Botan::Zlib_Compression.

Definition at line 38 of file filter.h.

38 {}
bool Botan::XTS_Decryption::valid_iv_length ( size_t  length) const
inlinevirtual

Check whether an IV length is valid for this filter

Parameters
lengththe IV length to be checked for validity
Returns
true if the IV length is valid, false otherwise

Reimplemented from Botan::Keyed_Filter.

Definition at line 67 of file xts.h.

Referenced by set_iv().

68  { return (iv_len == cipher->block_size()); }
virtual size_t block_size() const =0
bool Botan::XTS_Decryption::valid_keylength ( size_t  length) const
inlinevirtual

Check whether a key length is valid for this filter

Parameters
lengththe key length to be checked for validity
Returns
true if the key length is valid, false otherwise

Implements Botan::Keyed_Filter.

Definition at line 64 of file xts.h.

65  { return cipher->valid_keylength(key_len); }
bool valid_keylength(size_t length) const
Definition: sym_algo.h:51

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