Botan  1.11.32
Public Types | Public Member Functions | Protected Member Functions | List of all members
Botan::CFB_Decryption Class Referencefinal

#include <cfb.h>

Inheritance diagram for Botan::CFB_Decryption:
Botan::CFB_Mode Botan::Cipher_Mode

Public Types

typedef SCAN_Name Spec
 

Public Member Functions

virtual bool authenticated () const
 
 CFB_Decryption (BlockCipher *cipher, size_t feedback_bits)
 
void clear () override
 
size_t default_nonce_length () const override
 
void finish (secure_vector< byte > &final_block, size_t offset=0) override
 
Key_Length_Specification key_spec () const override
 
size_t minimum_final_size () const override
 
std::string name () const override
 
size_t output_length (size_t input_length) const override
 
size_t process (uint8_t buf[], size_t size) override
 
virtual std::string provider () const
 
template<typename Alloc >
void set_key (const std::vector< byte, Alloc > &key)
 
void set_key (const SymmetricKey &key)
 
void set_key (const byte key[], size_t length)
 
template<typename Alloc >
void start (const std::vector< byte, Alloc > &nonce)
 
void start (const byte nonce[], size_t nonce_len)
 
void start ()
 
virtual size_t tag_size () const
 
void update (secure_vector< byte > &buffer, size_t offset=0)
 
size_t update_granularity () const override
 
bool valid_keylength (size_t length) const
 
bool valid_nonce_length (size_t n) const override
 

Protected Member Functions

const BlockCiphercipher () const
 
size_t feedback () const
 
secure_vector< byte > & keystream_buf ()
 
secure_vector< byte > & shift_register ()
 

Detailed Description

CFB Decryption

Definition at line 75 of file cfb.h.

Member Typedef Documentation

§ Spec

Definition at line 27 of file cipher_mode.h.

Constructor & Destructor Documentation

§ CFB_Decryption()

Botan::CFB_Decryption::CFB_Decryption ( BlockCipher cipher,
size_t  feedback_bits 
)
inline

Definition at line 78 of file cfb.h.

78  :
79  CFB_Mode(cipher, feedback_bits) {}
CFB_Mode(BlockCipher *cipher, size_t feedback_bits)
Definition: cfb.cpp:14
const BlockCipher & cipher() const
Definition: cfb.h:40

Member Function Documentation

§ authenticated()

virtual bool Botan::Cipher_Mode::authenticated ( ) const
inlinevirtualinherited

Returns true iff this mode provides authentication as well as confidentiality.

Reimplemented in Botan::AEAD_Mode.

Definition at line 136 of file cipher_mode.h.

136 { return false; }

§ cipher()

const BlockCipher& Botan::CFB_Mode::cipher ( ) const
inlineprotectedinherited

§ clear()

void Botan::CFB_Mode::clear ( )
overridevirtualinherited

Implements Botan::Cipher_Mode.

Definition at line 23 of file cfb.cpp.

24  {
25  m_cipher->clear();
26  m_shift_register.clear();
27  }

§ default_nonce_length()

size_t Botan::CFB_Mode::default_nonce_length ( ) const
overridevirtualinherited

Return the default size for a nonce

Implements Botan::Cipher_Mode.

Definition at line 57 of file cfb.cpp.

References Botan::BlockCipher::block_size(), and Botan::CFB_Mode::cipher().

58  {
59  return cipher().block_size();
60  }
const BlockCipher & cipher() const
Definition: cfb.h:40
virtual size_t block_size() const =0

§ feedback()

size_t Botan::CFB_Mode::feedback ( ) const
inlineprotectedinherited

Definition at line 42 of file cfb.h.

Referenced by Botan::CFB_Mode::CFB_Mode(), Botan::CFB_Mode::name(), Botan::CFB_Encryption::process(), process(), and Botan::CFB_Mode::update_granularity().

42 { return m_feedback_bytes; }

§ finish()

void Botan::CFB_Decryption::finish ( secure_vector< byte > &  final_block,
size_t  offset = 0 
)
overridevirtual

Complete processing of a message.

Parameters
final_blockin/out parameter which must be at least minimum_final_size() bytes, and will be set to any final output
offsetan offset into final_block to begin processing

Implements Botan::Cipher_Mode.

Definition at line 145 of file cfb.cpp.

References Botan::Cipher_Mode::update().

146  {
147  update(buffer, offset);
148  }
void update(secure_vector< byte > &buffer, size_t offset=0)
Definition: cipher_mode.h:81

§ key_spec()

Key_Length_Specification Botan::CFB_Mode::key_spec ( ) const
overridevirtualinherited
Returns
object describing limits on key size

Implements Botan::Cipher_Mode.

Definition at line 52 of file cfb.cpp.

References Botan::CFB_Mode::cipher(), and Botan::SymmetricAlgorithm::key_spec().

53  {
54  return cipher().key_spec();
55  }
const BlockCipher & cipher() const
Definition: cfb.h:40
virtual Key_Length_Specification key_spec() const =0

§ keystream_buf()

secure_vector<byte>& Botan::CFB_Mode::keystream_buf ( )
inlineprotectedinherited

Definition at line 46 of file cfb.h.

Referenced by Botan::CFB_Encryption::process(), and process().

46 { return m_keystream_buf; }

§ minimum_final_size()

size_t Botan::CFB_Mode::minimum_final_size ( ) const
overridevirtualinherited
Returns
required minimium size to finalize() - may be any length larger than this.

Implements Botan::Cipher_Mode.

Definition at line 47 of file cfb.cpp.

48  {
49  return 0;
50  }

§ name()

std::string Botan::CFB_Mode::name ( ) const
overridevirtualinherited

Implements Botan::Cipher_Mode.

Definition at line 29 of file cfb.cpp.

References Botan::CFB_Mode::cipher(), Botan::CFB_Mode::feedback(), Botan::SymmetricAlgorithm::name(), and Botan::ASN1::to_string().

Referenced by Botan::CFB_Mode::CFB_Mode(), and Botan::CFB_Mode::valid_nonce_length().

30  {
31  if(feedback() == cipher().block_size())
32  return cipher().name() + "/CFB";
33  else
34  return cipher().name() + "/CFB(" + std::to_string(feedback()*8) + ")";
35  }
size_t feedback() const
Definition: cfb.h:42
std::string to_string(const BER_Object &obj)
Definition: asn1_obj.cpp:47
virtual std::string name() const =0
const BlockCipher & cipher() const
Definition: cfb.h:40

§ output_length()

size_t Botan::CFB_Mode::output_length ( size_t  input_length) const
overridevirtualinherited

Returns the size of the output if this transform is used to process a message with input_length bytes. Will throw if unable to give a precise answer.

Implements Botan::Cipher_Mode.

Definition at line 37 of file cfb.cpp.

38  {
39  return input_length;
40  }

§ process()

size_t Botan::CFB_Decryption::process ( uint8_t  msg[],
size_t  msg_len 
)
overridevirtual

Process message blocks

Input must be a multiple of update_granularity

Processes msg in place and returns bytes written. Normally this will be either msg_len (indicating the entire message was processes) or for certain AEAD modes zero (indicating that the mode requires the entire message be processed in one pass.

Implements Botan::Cipher_Mode.

Definition at line 114 of file cfb.cpp.

References Botan::BlockCipher::block_size(), Botan::CFB_Mode::cipher(), Botan::copy_mem(), Botan::BlockCipher::encrypt(), Botan::CFB_Mode::feedback(), Botan::CFB_Mode::keystream_buf(), Botan::CT::min(), Botan::CFB_Mode::shift_register(), and Botan::xor_buf().

115  {
116  const size_t BS = cipher().block_size();
117 
118  secure_vector<byte>& state = shift_register();
119  const size_t shift = feedback();
120  size_t left = sz;
121 
122  while(left)
123  {
124  const size_t took = std::min(shift, left);
125 
126  // first update shift register with ciphertext
127  if (BS - shift > 0)
128  {
129  copy_mem(state.data(), &state[shift], BS - shift);
130  }
131  copy_mem(&state[BS-shift], buf, took);
132 
133  // then decrypt
134  xor_buf(buf, &keystream_buf()[0], took);
135 
136  // then update keystream
137  cipher().encrypt(state, keystream_buf());
138 
139  buf += took;
140  left -= took;
141  }
142  return sz;
143  }
void xor_buf(T out[], const T in[], size_t length)
Definition: mem_ops.h:90
secure_vector< byte > & shift_register()
Definition: cfb.h:44
size_t feedback() const
Definition: cfb.h:42
void encrypt(const byte in[], byte out[]) const
Definition: block_cipher.h:69
secure_vector< byte > & keystream_buf()
Definition: cfb.h:46
const BlockCipher & cipher() const
Definition: cfb.h:40
void copy_mem(T *out, const T *in, size_t n)
Definition: mem_ops.h:43
T min(T a, T b)
Definition: ct_utils.h:180
virtual size_t block_size() const =0

§ provider()

virtual std::string Botan::Cipher_Mode::provider ( ) const
inlinevirtualinherited
Returns
provider information about this implementation. Default is "base", might also return "sse2", "avx2", "openssl", or some other arbitrary string.

Reimplemented in Botan::GCM_Mode.

Definition at line 185 of file cipher_mode.h.

185 { return "base"; }

§ set_key() [1/3]

template<typename Alloc >
void Botan::Cipher_Mode::set_key ( const std::vector< byte, Alloc > &  key)
inlineinherited

Definition at line 159 of file cipher_mode.h.

Referenced by botan_cipher_set_key().

160  {
161  set_key(key.data(), key.size());
162  }
void set_key(const std::vector< byte, Alloc > &key)
Definition: cipher_mode.h:159

§ set_key() [2/3]

void Botan::Cipher_Mode::set_key ( const SymmetricKey key)
inlineinherited

Definition at line 164 of file cipher_mode.h.

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

165  {
166  set_key(key.begin(), key.length());
167  }
void set_key(const std::vector< byte, Alloc > &key)
Definition: cipher_mode.h:159

§ set_key() [3/3]

void Botan::Cipher_Mode::set_key ( const byte  key[],
size_t  length 
)
inlineinherited

Set the symmetric key of this transform

Parameters
keycontains the key material
lengthin bytes of key param

Definition at line 174 of file cipher_mode.h.

175  {
176  if(!valid_keylength(length))
177  throw Invalid_Key_Length(name(), length);
178  key_schedule(key, length);
179  }
virtual std::string name() const =0
bool valid_keylength(size_t length) const
Definition: cipher_mode.h:153

§ shift_register()

secure_vector<byte>& Botan::CFB_Mode::shift_register ( )
inlineprotectedinherited

Definition at line 44 of file cfb.h.

Referenced by Botan::CFB_Encryption::process(), and process().

44 { return m_shift_register; }

§ start() [1/3]

template<typename Alloc >
void Botan::Cipher_Mode::start ( const std::vector< byte, Alloc > &  nonce)
inlineinherited

Begin processing a message.

Parameters
noncethe per message nonce

Definition at line 41 of file cipher_mode.h.

Referenced by botan_cipher_start(), and Botan::TLS::write_record().

42  {
43  start_msg(nonce.data(), nonce.size());
44  }
virtual void start_msg(const byte nonce[], size_t nonce_len)=0

§ start() [2/3]

void Botan::Cipher_Mode::start ( const byte  nonce[],
size_t  nonce_len 
)
inlineinherited

Begin processing a message.

Parameters
noncethe per message nonce
nonce_lenlength of nonce

Definition at line 51 of file cipher_mode.h.

52  {
53  start_msg(nonce, nonce_len);
54  }
virtual void start_msg(const byte nonce[], size_t nonce_len)=0

§ start() [3/3]

void Botan::Cipher_Mode::start ( )
inlineinherited

Begin processing a message.

Definition at line 59 of file cipher_mode.h.

60  {
61  return start_msg(nullptr, 0);
62  }
virtual void start_msg(const byte nonce[], size_t nonce_len)=0

§ tag_size()

virtual size_t Botan::Cipher_Mode::tag_size ( ) const
inlinevirtualinherited

Return the size of the authentication tag used (in bytes)

Reimplemented in Botan::SIV_Mode, Botan::CCM_Mode, Botan::OCB_Mode, Botan::ChaCha20Poly1305_Mode, Botan::GCM_Mode, and Botan::EAX_Mode.

Definition at line 141 of file cipher_mode.h.

Referenced by botan_cipher_get_tag_length().

141 { return 0; }

§ update()

void Botan::Cipher_Mode::update ( secure_vector< byte > &  buffer,
size_t  offset = 0 
)
inlineinherited

Process some data. Input must be in size update_granularity() byte blocks.

Parameters
blocksin/out parameter which will possibly be resized
offsetan offset into blocks to begin processing

Definition at line 81 of file cipher_mode.h.

References BOTAN_ASSERT.

Referenced by botan_cipher_update(), Botan::ECB_Encryption::finish(), Botan::XTS_Encryption::finish(), Botan::CFB_Encryption::finish(), Botan::CBC_Encryption::finish(), Botan::ChaCha20Poly1305_Encryption::finish(), Botan::XTS_Decryption::finish(), Botan::ECB_Decryption::finish(), Botan::EAX_Encryption::finish(), finish(), Botan::CTS_Encryption::finish(), Botan::CBC_Decryption::finish(), and Botan::CTS_Decryption::finish().

82  {
83  BOTAN_ASSERT(buffer.size() >= offset, "Offset ok");
84  byte* buf = buffer.data() + offset;
85  const size_t buf_size = buffer.size() - offset;
86 
87  const size_t written = process(buf, buf_size);
88  buffer.resize(offset + written);
89  }
#define BOTAN_ASSERT(expr, assertion_made)
Definition: assert.h:27
virtual size_t process(uint8_t msg[], size_t msg_len)=0
std::uint8_t byte
Definition: types.h:31

§ update_granularity()

size_t Botan::CFB_Mode::update_granularity ( ) const
overridevirtualinherited
Returns
size of required blocks to update

Implements Botan::Cipher_Mode.

Definition at line 42 of file cfb.cpp.

References Botan::CFB_Mode::feedback().

43  {
44  return feedback();
45  }
size_t feedback() const
Definition: cfb.h:42

§ valid_keylength()

bool Botan::Cipher_Mode::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 153 of file cipher_mode.h.

154  {
155  return key_spec().valid_keylength(length);
156  }
virtual Key_Length_Specification key_spec() const =0
bool valid_keylength(size_t length) const
Definition: key_spec.h:51

§ valid_nonce_length()

bool Botan::CFB_Mode::valid_nonce_length ( size_t  nonce_len) const
overridevirtualinherited

Return true iff nonce_len is a valid length for the nonce

Implements Botan::Cipher_Mode.

Definition at line 62 of file cfb.cpp.

References Botan::CFB_Mode::cipher(), Botan::BlockCipher::encrypt(), and Botan::CFB_Mode::name().

63  {
64  return (n == cipher().block_size());
65  }
const BlockCipher & cipher() const
Definition: cfb.h:40

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