Botan 1.10.17
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 (byte in)
void send (const byte in[], size_t length)
void send (const MemoryRegion< byte > &in)
void send (const MemoryRegion< byte > &in, size_t length)

Detailed Description

IEEE P1619 XTS Encryption

Definition at line 57 of file xts.h.

Constructor & Destructor Documentation

◆ XTS_Decryption() [1/2]

Botan::XTS_Decryption::XTS_Decryption ( BlockCipher * ciph)

Definition at line 219 of file xts.cpp.

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 }
Buffered_Filter(size_t block_size, size_t final_minimum)
Definition buf_filt.cpp:18
size_t buffered_block_size() const
Definition buf_filt.h:67

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

Referenced by Botan::get_cipher_mode().

◆ XTS_Decryption() [2/2]

Botan::XTS_Decryption::XTS_Decryption ( BlockCipher * ciph,
const SymmetricKey & key,
const InitializationVector & iv )

Definition at line 233 of file xts.cpp.

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 set_key(const SymmetricKey &key)
Definition xts.cpp:280
void set_iv(const InitializationVector &iv)
Definition xts.cpp:260

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

◆ ~XTS_Decryption()

Botan::XTS_Decryption::~XTS_Decryption ( )
inline

Definition at line 78 of file xts.h.

78{ delete cipher; delete cipher2; }

Member Function Documentation

◆ attachable()

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::DataSink, and Botan::SecureQueue.

Definition at line 50 of file filter.h.

50{ return true; }

◆ name()

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.

253 {
254 return (cipher->name() + "/XTS");
255 }

Referenced by set_iv(), and set_key().

◆ send() [1/4]

void Botan::Filter::send ( byte in)
inlineprotectedinherited
Parameters
insome input for the filter

Definition at line 63 of file filter.h.

63{ send(&in, 1); }
void send(const byte in[], size_t length)
Definition filter.cpp:28

References send().

Referenced by send().

◆ send() [2/4]

void Botan::Filter::send ( const byte in[],
size_t length )
protectedinherited

◆ send() [3/4]

void Botan::Filter::send ( const MemoryRegion< byte > & in)
inlineprotectedinherited
Parameters
insome input for the filter

Definition at line 68 of file filter.h.

68{ send(&in[0], in.size()); }

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

Referenced by send().

◆ send() [4/4]

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 }

References send().

◆ set_iv()

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.

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 }
std::string name() const
Definition xts.cpp:252
bool valid_iv_length(size_t iv_len) const
Definition xts.h:67
Invalid_IV_Length(const std::string &mode, size_t bad_len)
Definition exceptn.h:80

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

Referenced by XTS_Decryption().

◆ set_key()

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.

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 }
Invalid_Key_Length(const std::string &name, size_t length)
Definition exceptn.h:57

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

Referenced by XTS_Decryption().

◆ start_msg()

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::Bzip_Compression, Botan::Bzip_Decompression, Botan::EAX_Base, Botan::PBE_PKCS5v15, Botan::PBE_PKCS5v20, Botan::Zlib_Compression, and Botan::Zlib_Decompression.

Definition at line 38 of file filter.h.

38{}

◆ valid_iv_length()

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.

68 { return (iv_len == cipher->block_size()); }

Referenced by set_iv().

◆ valid_keylength()

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); }

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