Botan  1.11.4
Public Member Functions | Protected Member Functions | Private Member Functions | List of all members
Botan::XTS_Encryption Class Reference

#include <xts.h>

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

Public Member Functions

virtual bool attachable ()
 
Key_Length_Specification key_spec () const override
 
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 length) const
 
 XTS_Encryption (BlockCipher *ciph)
 
 XTS_Encryption (BlockCipher *ciph, const SymmetricKey &key, const InitializationVector &iv)
 
 ~XTS_Encryption ()
 

Protected Member Functions

virtual void send (const byte in[], size_t length)
 
void send (byte in)
 
void send (const secure_vector< byte > &in)
 
void send (const std::vector< byte > &in)
 
void send (const secure_vector< byte > &in, size_t length)
 
void send (const std::vector< byte > &in, size_t length)
 

Private Member Functions

void buffer_reset ()
 
size_t buffered_block_size () const
 
size_t current_position () const
 
template<typename Alloc >
void write (const std::vector< byte, Alloc > &in, size_t length)
 

Detailed Description

IEEE P1619 XTS Encryption

Definition at line 20 of file xts.h.

Constructor & Destructor Documentation

Botan::XTS_Encryption::XTS_Encryption ( BlockCipher ciph)

Definition at line 56 of file xts.cpp.

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

57  :
58  Buffered_Filter(xts_parallelism(ciph), ciph->block_size() + 1),
59  cipher(ciph)
60  {
61  if(cipher->block_size() != 8 && cipher->block_size() != 16)
62  throw std::invalid_argument("Bad cipher for XTS: " + cipher->name());
63 
64  cipher2 = cipher->clone();
65  tweak.resize(buffered_block_size());
}
Botan::XTS_Encryption::XTS_Encryption ( BlockCipher ciph,
const SymmetricKey key,
const InitializationVector iv 
)

Definition at line 70 of file xts.cpp.

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

73  :
74  Buffered_Filter(xts_parallelism(ciph), ciph->block_size() + 1),
75  cipher(ciph)
76  {
77  if(cipher->block_size() != 8 && cipher->block_size() != 16)
78  throw std::invalid_argument("Bad cipher for XTS: " + cipher->name());
79 
80  cipher2 = cipher->clone();
81  tweak.resize(buffered_block_size());
82 
83  set_key(key);
84  set_iv(iv);
}
Botan::XTS_Encryption::~XTS_Encryption ( )
inline

Definition at line 40 of file xts.h.

40 { 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 52 of file filter.h.

52 { return true; }
Key_Length_Specification Botan::XTS_Encryption::key_spec ( ) const
overridevirtual
Returns
object describing limits on key size

Implements Botan::Keyed_Filter.

Definition at line 94 of file xts.cpp.

95  {
96  return xts_key_spec(*cipher);
97  }
std::string Botan::XTS_Encryption::name ( ) const
virtual
Returns
descriptive name for this filter

Implements Botan::Filter.

Definition at line 89 of file xts.cpp.

Referenced by set_iv(), and set_key().

90  {
91  return (cipher->name() + "/XTS");
92  }
void Botan::Filter::send ( const byte  in[],
size_t  length 
)
protectedvirtualinherited
Parameters
insome input for the filter
lengththe length of in

Reimplemented in Botan::Threaded_Fork.

Definition at line 28 of file filter.cpp.

References Botan::Filter::write().

Referenced by Botan::PK_Encryptor_Filter::end_msg(), Botan::Zlib_Compression::end_msg(), Botan::Bzip_Compression::end_msg(), Botan::Lzma_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::PK_Signer_Filter::end_msg(), Botan::Lzma_Decompression::end_msg(), Botan::Zlib_Decompression::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::Lzma_Compression::flush(), Botan::Zlib_Compression::write(), Botan::Bzip_Compression::write(), Botan::Lzma_Compression::write(), Botan::StreamCipher_Filter::write(), Botan::Bzip_Decompression::write(), Botan::Lzma_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  }
void Botan::Filter::send ( byte  in)
inlineprotectedinherited
Parameters
insome input for the filter

Definition at line 65 of file filter.h.

References Botan::Filter::send().

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

65 { send(&in, 1); }
void Botan::Filter::send ( const secure_vector< byte > &  in)
inlineprotectedinherited
Parameters
insome input for the filter

Definition at line 70 of file filter.h.

References Botan::Filter::send().

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

70 { send(&in[0], in.size()); }
void Botan::Filter::send ( const std::vector< byte > &  in)
inlineprotectedinherited
Parameters
insome input for the filter

Definition at line 75 of file filter.h.

References Botan::Filter::send().

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

75 { send(&in[0], in.size()); }
void Botan::Filter::send ( const secure_vector< byte > &  in,
size_t  length 
)
inlineprotectedinherited
Parameters
insome input for the filter
lengththe number of bytes of in to send

Definition at line 81 of file filter.h.

82  {
83  send(&in[0], length);
84  }
void Botan::Filter::send ( const std::vector< byte > &  in,
size_t  length 
)
inlineprotectedinherited
Parameters
insome input for the filter
lengththe number of bytes of in to send

Definition at line 90 of file filter.h.

91  {
92  send(&in[0], length);
93  }
void Botan::XTS_Encryption::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 102 of file xts.cpp.

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

Referenced by XTS_Encryption().

103  {
104  if(!valid_iv_length(iv.length()))
105  throw Invalid_IV_Length(name(), iv.length());
106 
107  const size_t blocks_in_tweak = tweak.size() / cipher->block_size();
108 
109  tweak.assign(iv.begin(), iv.end());
110  cipher2->encrypt(tweak);
111 
112  for(size_t i = 1; i < blocks_in_tweak; ++i)
113  {
114  buffer_insert(tweak, i*cipher->block_size(),
115  &tweak[(i-1)*cipher->block_size()],
116  cipher->block_size());
117 
118  poly_double(&tweak[i*cipher->block_size()], cipher->block_size());
119  }
120  }
void Botan::XTS_Encryption::set_key ( const SymmetricKey key)
virtual

Set the key of this filter

Parameters
keythe key to use

Implements Botan::Keyed_Filter.

Definition at line 122 of file xts.cpp.

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

Referenced by XTS_Encryption().

123  {
124  size_t key_half = key.length() / 2;
125 
126  if(key.length() % 2 == 1 || !cipher->valid_keylength(key_half))
127  throw Invalid_Key_Length(name(), key.length());
128 
129  cipher->set_key(key.begin(), key_half);
130  cipher2->set_key(key.begin() + key_half, key_half);
131  }
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::Lzma_Decompression, Botan::Bzip_Decompression, Botan::PBE_PKCS5v15, Botan::PBE_PKCS5v20, Botan::Lzma_Compression, Botan::Bzip_Compression, and Botan::Zlib_Compression.

Definition at line 40 of file filter.h.

40 {}
bool Botan::XTS_Encryption::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 29 of file xts.h.

Referenced by set_iv().

30  { return (iv_len == cipher->block_size()); }
bool Botan::Keyed_Filter::valid_keylength ( size_t  length) const
inlineinherited

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

Definition at line 41 of file key_filt.h.

42  {
43  return key_spec().valid_keylength(length);
44  }

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