Botan 2.13.0 Crypto and TLS for C++11

- Main Page
- Namespaces
- Classes
- Files

- Class List
- Class Index
- Class Hierarchy
- Class Members

Public Member Functions | Static Public Member Functions | Protected Member Functions | Protected Attributes | List of all members
Botan::CFB_Decryption Class Referencefinal

`#include <cfb.h>`

Inheritance diagram for Botan::CFB_Decryption:

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

## Static Public Member Functions
static std::unique_ptr< Cipher_Mode > | create (const std::string &algo, Cipher_Dir direction, const std::string &provider="")
static std::unique_ptr< Cipher_Mode > | create_or_throw (const std::string &algo, Cipher_Dir direction, const std::string &provider="")
static std::vector< std::string > | providers (const std::string &algo_spec)

## Protected Member Functions
size_t | block_size () const
const BlockCipher & | cipher () const
size_t | feedback () const
void | shift_register ()
void | verify_key_set (bool cond) const

## Protected Attributes
secure_vector< uint8_t > | m_keystream
size_t | m_keystream_pos = 0
secure_vector< uint8_t > | m_state

## Detailed Description

CFB Decryption

Definition at line 87 of file cfb.h.

## Constructor & Destructor Documentation

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

If feedback_bits is zero, cipher->block_size() bytes will be used.

Parameters

  cipher | block cipher to use
  feedback_bits | number of bits fed back into the shift register, must be a multiple of 8

Definition at line 96 of file cfb.h.

96 :
97 CFB_Mode(cipher, feedback_bits) {}
Botan::CFB_Mode::cipher
const BlockCipher & cipher() const
Definition: cfb.h:48
Botan::CFB_Mode::CFB_Mode
CFB_Mode(BlockCipher *cipher, size_t feedback_bits)
Definition: cfb.cpp:13

## Member Function Documentation

virtual bool Botan::Cipher_Mode::authenticated | ( |  | ) | const
| inline virtual inherited

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

Reimplemented in Botan::AEAD_Mode.

Definition at line 169 of file cipher_mode.h.

169 { return false; }

size_t Botan::CFB_Mode::block_size | ( |  | ) | const
| inline protected inherited

Definition at line 49 of file cfb.h.

References m_block_size.

Referenced by Botan::CFB_Mode::default_nonce_length(), Botan::CFB_Mode::name(), Botan::CFB_Mode::shift_register(), and Botan::CFB_Mode::valid_nonce_length().

49 { return m_block_size; }

const BlockCipher& Botan::CFB_Mode::cipher | ( |  | ) | const
| inline protected inherited

Definition at line 48 of file cfb.h.

References m_cipher.

Referenced by Botan::CFB_Mode::key_spec(), Botan::CFB_Mode::name(), and Botan::CFB_Mode::shift_register().

48 { return *m_cipher; }

void Botan::CFB_Mode::clear | ( |  | ) |
| final override virtual inherited

Reset the state.

Implements Botan::SymmetricAlgorithm.

Definition at line 23 of file cfb.cpp.

References Botan::CFB_Mode::m_keystream, and Botan::CFB_Mode::reset().

24 {
25 m_cipher->clear();
26 m_keystream.clear();
27 reset();
28 }
Botan::CFB_Mode::m_keystream
secure_vector< uint8_t > m_keystream
Definition: cfb.h:52
Botan::CFB_Mode::reset
void reset() overridefinal
Definition: cfb.cpp:30

std::unique_ptr< Cipher_Mode > Botan::Cipher_Mode::create | ( | const std::string & | algo,
|  | Cipher_Dir | direction,
|  | const std::string & | provider = `""`
| ) |  |
| static inherited

Create an AEAD mode

Parameters

  algo | the algorithm to create
  direction | specify if this should be an encryption or decryption AEAD
  provider | optional specification for provider to use

Returns
  an AEAD mode or a null pointer if not available

Definition at line 54 of file cipher_mode.cpp.

References Botan::SCAN_Name::algo_name(), Botan::SCAN_Name::arg(), Botan::SCAN_Name::arg_as_integer(), Botan::SCAN_Name::arg_count(), Botan::AEAD_Mode::create(), Botan::BlockCipher::create(), Botan::StreamCipher::create(), Botan::ENCRYPTION, Botan::get_bc_pad(), Botan::make_commoncrypto_cipher_mode(), Botan::make_openssl_cipher_mode(), Botan::parse_algorithm_name(), Botan::Cipher_Mode::provider(), and Botan::split_on().

Referenced by botan_cipher_init(), Botan::Cipher_Mode::create_or_throw(), Botan::get_cipher_mode(), Botan::pbes2_decrypt(), and Botan::Cipher_Mode::providers().

57 {
58 #if defined(BOTAN_HAS_COMMONCRYPTO)
59 if(provider.empty() || provider == "commoncrypto")
60 {
61 std::unique_ptr<Cipher_Mode> commoncrypto_cipher(make_commoncrypto_cipher_mode(algo, direction));
62
63 if(commoncrypto_cipher)
64 return commoncrypto_cipher;
65
66 if(!provider.empty())
67 return std::unique_ptr<Cipher_Mode>();
68 }
69 #endif
70
71 #if defined(BOTAN_HAS_OPENSSL)
72 if(provider.empty() || provider == "openssl")
73 {
74 std::unique_ptr<Cipher_Mode> openssl_cipher(make_openssl_cipher_mode(algo, direction));
75
76 if(openssl_cipher)
77 return openssl_cipher;
78
79 if(!provider.empty())
80 return std::unique_ptr<Cipher_Mode>();
81 }
82 #endif
83
84 #if defined(BOTAN_HAS_STREAM_CIPHER)
85 if(auto sc = StreamCipher::create(algo))
86 {
87 return std::unique_ptr<Cipher_Mode>(new Stream_Cipher_Mode(sc.release()));
88 }
89 #endif
90
91 #if defined(BOTAN_HAS_AEAD_MODES)
92 if(auto aead = AEAD_Mode::create(algo, direction))
93 {
94 return std::unique_ptr<Cipher_Mode>(aead.release());
95 }
96 #endif
97
98 if(algo.find('/') != std::string::npos)
99 {
100 const std::vector<std::string> algo_parts = split_on(algo, '/');
101 const std::string cipher_name = algo_parts[0];
102 const std::vector<std::string> mode_info = parse_algorithm_name(algo_parts[1]);
103
104 if(mode_info.empty())
105 return std::unique_ptr<Cipher_Mode>();
106
107 std::ostringstream alg_args;
108
109 alg_args << '(' << cipher_name;
110 for(size_t i = 1; i < mode_info.size(); ++i)
111 alg_args << ',' << mode_info[i];
112 for(size_t i = 2; i < algo_parts.size(); ++i)
113 alg_args << ',' << algo_parts[i];
114 alg_args << ')';
115
116 const std::string mode_name = mode_info[0] + alg_args.str();
117 return Cipher_Mode::create(mode_name, direction, provider);
118 }
119
120 #if defined(BOTAN_HAS_BLOCK_CIPHER)
121
122 SCAN_Name spec(algo);
123
124 if(spec.arg_count() == 0)
125 {
126 return std::unique_ptr<Cipher_Mode>();
127 }
128
129 std::unique_ptr<BlockCipher> bc(BlockCipher::create(spec.arg(0), provider));
130
131 if(!bc)
132 {
133 return std::unique_ptr<Cipher_Mode>();
134 }
135
136 #if defined(BOTAN_HAS_MODE_CBC)
137 if(spec.algo_name() == "CBC")
138 {
139 const std::string padding = spec.arg(1, "PKCS7");
140
141 if(padding == "CTS")
142 {
143 if(direction == ENCRYPTION)
144 return std::unique_ptr<Cipher_Mode>(new CTS_Encryption(bc.release()));
145 else
146 return std::unique_ptr<Cipher_Mode>(new CTS_Decryption(bc.release()));
147 }
148 else
149 {
150 std::unique_ptr<BlockCipherModePaddingMethod> pad(get_bc_pad(padding));
151
152 if(pad)
153 {
154 if(direction == ENCRYPTION)
155 return std::unique_ptr<Cipher_Mode>(new CBC_Encryption(bc.release(), pad.release()));
156 else
157 return std::unique_ptr<Cipher_Mode>(new CBC_Decryption(bc.release(), pad.release()));
158 }
159 }
160 }
161 #endif
162
163 #if defined(BOTAN_HAS_MODE_XTS)
164 if(spec.algo_name() == "XTS")
165 {
166 if(direction == ENCRYPTION)
167 return std::unique_ptr<Cipher_Mode>(new XTS_Encryption(bc.release()));
168 else
169 return std::unique_ptr<Cipher_Mode>(new XTS_Decryption(bc.release()));
170 }
171 #endif
172
173 #if defined(BOTAN_HAS_MODE_CFB)
174 if(spec.algo_name() == "CFB")
175 {
176 const size_t feedback_bits = spec.arg_as_integer(1, 8*bc->block_size());
177 if(direction == ENCRYPTION)
178 return std::unique_ptr<Cipher_Mode>(new CFB_Encryption(bc.release(), feedback_bits));
179 else
180 return std::unique_ptr<Cipher_Mode>(new CFB_Decryption(bc.release(), feedback_bits));
181 }
182 #endif
183
184 #endif
185
186 return std::unique_ptr<Cipher_Mode>();
187 }
Botan::split_on
std::vector< std::string > split_on(const std::string &str, char delim)
Definition: parsing.cpp:148
Botan::make_openssl_cipher_mode
Cipher_Mode * make_openssl_cipher_mode(const std::string &name, Cipher_Dir direction)
Definition: openssl_mode.cpp:215
Botan::Cipher_Mode::provider
virtual std::string provider() const
Definition: cipher_mode.h:180
Botan::Usage_Type::ENCRYPTION
Botan::AEAD_Mode::create
static std::unique_ptr< AEAD_Mode > create(const std::string &algo, Cipher_Dir direction, const std::string &provider="")
Definition: aead.cpp:52
Botan::parse_algorithm_name
std::vector< std::string > parse_algorithm_name(const std::string &namex)
Definition: parsing.cpp:95
Botan::BlockCipher::create
static std::unique_ptr< BlockCipher > create(const std::string &algo_spec, const std::string &provider="")
Definition: block_cipher.cpp:108
Botan::Cipher_Mode::create
static std::unique_ptr< Cipher_Mode > create(const std::string &algo, Cipher_Dir direction, const std::string &provider="")
Definition: cipher_mode.cpp:54
Botan::StreamCipher::create
static std::unique_ptr< StreamCipher > create(const std::string &algo_spec, const std::string &provider="")
Definition: stream_cipher.cpp:42
Botan::make_commoncrypto_cipher_mode
Cipher_Mode * make_commoncrypto_cipher_mode(const std::string &name, Cipher_Dir direction)
Definition: commoncrypto_mode.cpp:235
Botan::get_bc_pad
BlockCipherModePaddingMethod * get_bc_pad(const std::string &algo_spec)
Definition: mode_pad.cpp:18

std::unique_ptr< Cipher_Mode > Botan::Cipher_Mode::create_or_throw | ( | const std::string & | algo,
|  | Cipher_Dir | direction,
|  | const std::string & | provider = `""`
| ) |  |
| static inherited

Create an AEAD mode, or throw

Parameters

  algo | the algorithm to create
  direction | specify if this should be an encryption or decryption AEAD
  provider | optional specification for provider to use

Returns
  an AEAD mode, or throw an exception

Definition at line 44 of file cipher_mode.cpp.

References Botan::Cipher_Mode::create().

Referenced by Botan::ECIES_System_Params::create_cipher(), Botan::CryptoBox::decrypt_bin(), Botan::CryptoBox::encrypt(), and Botan::get_cipher().

47 {
48 if(auto mode = Cipher_Mode::create(algo, direction, provider))
49 return mode;
50
51 throw Lookup_Error("Cipher mode", algo, provider);
52 }
Botan::Cipher_Mode::provider
virtual std::string provider() const
Definition: cipher_mode.h:180
Botan::Cipher_Mode::create
static std::unique_ptr< Cipher_Mode > create(const std::string &algo, Cipher_Dir direction, const std::string &provider="")
Definition: cipher_mode.cpp:54

size_t Botan::CFB_Mode::default_nonce_length | ( |  | ) | const
| final override virtual inherited

Returns
  the default size for a nonce

Implements Botan::Cipher_Mode.

Definition at line 64 of file cfb.cpp.

References Botan::CFB_Mode::block_size().

65 {
66 return block_size();
67 }
Botan::CFB_Mode::block_size
size_t block_size() const
Definition: cfb.h:49

size_t Botan::CFB_Mode::feedback | ( |  | ) | const
| inline protected inherited

Definition at line 47 of file cfb.h.

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

47 { return m_feedback_bytes; }

void Botan::CFB_Decryption::finish | ( | secure_vector< uint8_t > & | final_block,
|  | size_t | offset = `0`
| ) |  |
| override virtual

Complete processing of a message.

Parameters

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

Implements Botan::Cipher_Mode.

Definition at line 224 of file cfb.cpp.

References Botan::Cipher_Mode::update().

225 {
226 update(buffer, offset);
227 }
Botan::Cipher_Mode::update
void update(secure_vector< uint8_t > &buffer, size_t offset=0)
Definition: cipher_mode.h:112

Key_Length_Specification Botan::CFB_Mode::key_spec | ( |  | ) | const
| final override virtual inherited

Returns
  object describing limits on key size

Implements Botan::SymmetricAlgorithm.

Definition at line 59 of file cfb.cpp.

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

60 {
61 return cipher().key_spec();
62 }
Botan::CFB_Mode::cipher
const BlockCipher & cipher() const
Definition: cfb.h:48
Botan::SymmetricAlgorithm::key_spec
virtual Key_Length_Specification key_spec() const =0

size_t Botan::SymmetricAlgorithm::maximum_keylength | ( |  | ) | const
| inline inherited

Returns
  minimum allowed key length

Definition at line 38 of file sym_algo.h.

39 {
40 return key_spec().maximum_keylength();
41 }
Botan::Key_Length_Specification::maximum_keylength
size_t maximum_keylength() const
Definition: key_spec.h:69
Botan::SymmetricAlgorithm::key_spec
virtual Key_Length_Specification key_spec() const =0

size_t Botan::CFB_Mode::minimum_final_size | ( |  | ) | const
| final override virtual inherited

Returns
  required minimium size to finalize() - may be any length larger than this.

Implements Botan::Cipher_Mode.

Definition at line 54 of file cfb.cpp.

55 {
56 return 0;
57 }

size_t Botan::SymmetricAlgorithm::minimum_keylength | ( |  | ) | const
| inline inherited

Returns
  maximum allowed key length

Definition at line 46 of file sym_algo.h.

Referenced by botan_block_cipher_get_keyspec(), and botan_mac_get_keyspec().

47 {
48 return key_spec().minimum_keylength();
49 }
Botan::Key_Length_Specification::minimum_keylength
size_t minimum_keylength() const
Definition: key_spec.h:61
Botan::SymmetricAlgorithm::key_spec
virtual Key_Length_Specification key_spec() const =0

std::string Botan::CFB_Mode::name | ( |  | ) | const
| final override virtual inherited

Returns
  the algorithm name

Implements Botan::SymmetricAlgorithm.

Definition at line 36 of file cfb.cpp.

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

Referenced by Botan::CFB_Mode::CFB_Mode().

37 {
38 if(feedback() == cipher().block_size())
39 return cipher().name() + "/CFB";
40 else
41 return cipher().name() + "/CFB(" + std::to_string(feedback()*8) + ")";
42 }
Botan::CFB_Mode::cipher
const BlockCipher & cipher() const
Definition: cfb.h:48
Botan::CFB_Mode::block_size
size_t block_size() const
Definition: cfb.h:49
Botan::ASN1::to_string
std::string to_string(const BER_Object &obj)
Definition: asn1_obj.cpp:213
Botan::SymmetricAlgorithm::name
virtual std::string name() const =0
Botan::CFB_Mode::feedback
size_t feedback() const
Definition: cfb.h:47

size_t Botan::CFB_Mode::output_length | ( | size_t | input_length | ) | const
| final override virtual inherited

Returns the size of the output if this transform is used to process a message with input_length bytes. In most cases the answer is precise. If it is not possible to precise (namely for CBC decryption) instead a lower bound is returned.

Implements Botan::Cipher_Mode.

Definition at line 44 of file cfb.cpp.

45 {
46 return input_length;
47 }

size_t Botan::CFB_Decryption::process | ( | uint8_t | msg[],
|  | size_t | msg_len
| ) |  |
| override virtual

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 processed) or for certain AEAD modes zero (indicating that the mode requires the entire message be processed in one pass).

Parameters

  msg | the message to be processed
  msg_len | length of the message in bytes

Implements Botan::Cipher_Mode.

Definition at line 182 of file cfb.cpp.

References BOTAN_STATE_CHECK, Botan::CFB_Mode::feedback(), Botan::CFB_Mode::m_keystream, Botan::CFB_Mode::m_keystream_pos, Botan::CFB_Mode::m_state, Botan::CFB_Mode::shift_register(), and Botan::SymmetricAlgorithm::verify_key_set().

183 {
184 verify_key_set(!m_keystream.empty());
185 BOTAN_STATE_CHECK(m_state.empty() == false);
186
187 const size_t shift = feedback();
188
189 size_t left = sz;
190
191 if(m_keystream_pos != 0)
192 {
193 const size_t take = std::min<size_t>(left, shift - m_keystream_pos);
194
195 xor_copy(buf, m_keystream.data() + m_keystream_pos, take);
196
197 m_keystream_pos += take;
198 left -= take;
199 buf += take;
200
201 if(m_keystream_pos == shift)
202 {
203 shift_register();
204 }
205 }
206
207 while(left >= shift)
208 {
209 xor_copy(buf, m_keystream.data(), shift);
210 left -= shift;
211 buf += shift;
212 shift_register();
213 }
214
215 if(left > 0)
216 {
217 xor_copy(buf, m_keystream.data(), left);
218 m_keystream_pos += left;
219 }
220
221 return sz;
222 }
Botan::CFB_Mode::m_keystream
secure_vector< uint8_t > m_keystream
Definition: cfb.h:52
BOTAN_STATE_CHECK
#define BOTAN_STATE_CHECK(expr)
Definition: assert.h:49
Botan::CFB_Mode::shift_register
void shift_register()
Definition: cfb.cpp:103
Botan::CFB_Mode::m_state
secure_vector< uint8_t > m_state
Definition: cfb.h:51
Botan::CFB_Mode::feedback
size_t feedback() const
Definition: cfb.h:47
Botan::CFB_Mode::m_keystream_pos
size_t m_keystream_pos
Definition: cfb.h:53
Botan::SymmetricAlgorithm::verify_key_set
void verify_key_set(bool cond) const
Definition: sym_algo.h:89

virtual std::string Botan::Cipher_Mode::provider | ( |  | ) | const
| inline virtual inherited

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 180 of file cipher_mode.h.

Referenced by Botan::AEAD_Mode::create(), and Botan::Cipher_Mode::create().

180 { return "base"; }

std::vector< std::string > Botan::Cipher_Mode::providers | ( | const std::string & | algo_spec | ) |
| static inherited

Returns
  list of available providers for this algorithm, empty if not available

Parameters

  algo_spec | algorithm name

Definition at line 190 of file cipher_mode.cpp.

References Botan::Cipher_Mode::create(), and Botan::ENCRYPTION.

191 {
192 const std::vector<std::string>& possible = { "base", "openssl", "commoncrypto" };
193 std::vector<std::string> providers;
194 for(auto&& prov : possible)
195 {
196 std::unique_ptr<Cipher_Mode> mode = Cipher_Mode::create(algo_spec, ENCRYPTION, prov);
197 if(mode)
198 {
199 providers.push_back(prov); // available
200 }
201 }
202 return providers;
203 }
Botan::Usage_Type::ENCRYPTION
Botan::Cipher_Mode::create
static std::unique_ptr< Cipher_Mode > create(const std::string &algo, Cipher_Dir direction, const std::string &provider="")
Definition: cipher_mode.cpp:54
Botan::Cipher_Mode::providers
static std::vector< std::string > providers(const std::string &algo_spec)
Definition: cipher_mode.cpp:190

void Botan::CFB_Mode::reset | ( |  | ) |
| final override virtual inherited

Resets just the message specific state and allows encrypting again under the existing key

Implements Botan::Cipher_Mode.

Definition at line 30 of file cfb.cpp.

References Botan::CFB_Mode::m_keystream, Botan::CFB_Mode::m_state, and Botan::zeroise().

Referenced by Botan::CFB_Mode::clear().

31 {
32 m_state.clear();
33 zeroise(m_keystream);
34 }
Botan::CFB_Mode::m_keystream
secure_vector< uint8_t > m_keystream
Definition: cfb.h:52
Botan::CFB_Mode::m_state
secure_vector< uint8_t > m_state
Definition: cfb.h:51
Botan::zeroise
void zeroise(std::vector< T, Alloc > &vec)
Definition: secmem.h:160

void Botan::SymmetricAlgorithm::set_key | ( | const SymmetricKey & | key | ) |
| inline inherited

Set the symmetric key of this object.

Parameters

  key | the SymmetricKey to be set.

Definition at line 65 of file sym_algo.h.

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

Referenced by Botan::aont_package(), Botan::aont_unpackage(), botan_block_cipher_set_key(), botan_cipher_set_key(), botan_mac_set_key(), Botan::Sodium::crypto_stream_salsa20(), Botan::Sodium::crypto_stream_salsa20_xor_ic(), Botan::Sodium::crypto_stream_xsalsa20(), Botan::Sodium::crypto_stream_xsalsa20_xor_ic(), Botan::FPE::fe1_decrypt(), Botan::FPE::fe1_encrypt(), and Botan::Sodium::randombytes_buf_deterministic().

66 {
67 set_key(key.begin(), key.length());
68 }
Botan::SymmetricAlgorithm::set_key
void set_key(const SymmetricKey &key)
Definition: sym_algo.h:65
template<typename Alloc >

void Botan::SymmetricAlgorithm::set_key | ( | const std::vector< uint8_t, Alloc > & | key | ) |
| inline inherited

Definition at line 71 of file sym_algo.h.

72 {
73 set_key(key.data(), key.size());
74 }
Botan::SymmetricAlgorithm::set_key
void set_key(const SymmetricKey &key)
Definition: sym_algo.h:65

void Botan::SymmetricAlgorithm::set_key | ( | const uint8_t | key[],
|  | size_t | length
| ) |  |
| inherited

Set the symmetric key of this object.

Parameters

  key | the to be set as a byte array.
  length | in bytes of key param

Definition at line 17 of file sym_algo.cpp.

References Botan::SymmetricAlgorithm::name(), and Botan::SymmetricAlgorithm::valid_keylength().

18 {
19 if(!valid_keylength(length))
20 throw Invalid_Key_Length(name(), length);
21 key_schedule(key, length);
22 }
Botan::SymmetricAlgorithm::valid_keylength
bool valid_keylength(size_t length) const
Definition: sym_algo.h:56
Botan::SymmetricAlgorithm::name
virtual std::string name() const =0

void Botan::CFB_Mode::shift_register | ( |  | ) |
| protected inherited

Definition at line 103 of file cfb.cpp.

References Botan::CFB_Mode::block_size(), Botan::CFB_Mode::cipher(), Botan::copy_mem(), Botan::BlockCipher::encrypt(), Botan::CFB_Mode::feedback(), Botan::CFB_Mode::m_keystream, Botan::CFB_Mode::m_keystream_pos, and Botan::CFB_Mode::m_state.

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

104 {
105 const size_t shift = feedback();
106 const size_t carryover = block_size() - shift;
107
108 if(carryover > 0)
109 {
110 copy_mem(m_state.data(), &m_state[shift], carryover);
111 }
112 copy_mem(&m_state[carryover], m_keystream.data(), shift);
113 cipher().encrypt(m_state, m_keystream);
114 m_keystream_pos = 0;
115 }
Botan::BlockCipher::encrypt
void encrypt(const uint8_t in[], uint8_t out[]) const
Definition: block_cipher.h:82
Botan::CFB_Mode::cipher
const BlockCipher & cipher() const
Definition: cfb.h:48
Botan::CFB_Mode::block_size
size_t block_size() const
Definition: cfb.h:49
Botan::CFB_Mode::m_keystream
secure_vector< uint8_t > m_keystream
Definition: cfb.h:52
Botan::CFB_Mode::m_state
secure_vector< uint8_t > m_state
Definition: cfb.h:51
Botan::copy_mem
void copy_mem(T *out, const T *in, size_t n)
Definition: mem_ops.h:132
Botan::CFB_Mode::feedback
size_t feedback() const
Definition: cfb.h:47
Botan::CFB_Mode::m_keystream_pos
size_t m_keystream_pos
Definition: cfb.h:53
template<typename Alloc >

void Botan::Cipher_Mode::start | ( | const std::vector< uint8_t, Alloc > & | nonce | ) |
| inline inherited

Begin processing a message.

Parameters

  nonce | the per message nonce

Definition at line 69 of file cipher_mode.h.

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

70 {
71 start_msg(nonce.data(), nonce.size());
72 }
Botan::Cipher_Mode::start_msg
virtual void start_msg(const uint8_t nonce[], size_t nonce_len)=0

void Botan::Cipher_Mode::start | ( | const uint8_t | nonce[],
|  | size_t | nonce_len
| ) |  |
| inline inherited

Begin processing a message.

Parameters

  nonce | the per message nonce
  nonce_len | length of nonce

Definition at line 79 of file cipher_mode.h.

80 {
81 start_msg(nonce, nonce_len);
82 }
Botan::Cipher_Mode::start_msg
virtual void start_msg(const uint8_t nonce[], size_t nonce_len)=0

void Botan::Cipher_Mode::start | ( |  | ) |
| inline inherited

Begin processing a message.

Definition at line 87 of file cipher_mode.h.

88 {
89 return start_msg(nullptr, 0);
90 }
Botan::Cipher_Mode::start_msg
virtual void start_msg(const uint8_t nonce[], size_t nonce_len)=0

virtual size_t Botan::Cipher_Mode::tag_size | ( |  | ) | const
| inline virtual inherited

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

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

Definition at line 174 of file cipher_mode.h.

Referenced by botan_cipher_get_tag_length().

174 { return 0; }

void Botan::Cipher_Mode::update | ( | secure_vector< uint8_t > & | buffer,
|  | size_t | offset = `0`
| ) |  |
| inline inherited

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

Parameters

  buffer | in/out parameter which will possibly be resized
  offset | an offset into blocks to begin processing

Definition at line 112 of file cipher_mode.h.

References BOTAN_ASSERT.

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

113 {
114 BOTAN_ASSERT(buffer.size() >= offset, "Offset ok");
115 uint8_t* buf = buffer.data() + offset;
116 const size_t buf_size = buffer.size() - offset;
117
118 const size_t written = process(buf, buf_size);
119 buffer.resize(offset + written);
120 }
BOTAN_ASSERT
#define BOTAN_ASSERT(expr, assertion_made)
Definition: assert.h:55
Botan::Cipher_Mode::process
virtual size_t process(uint8_t msg[], size_t msg_len)=0

size_t Botan::CFB_Mode::update_granularity | ( |  | ) | const
| final override virtual inherited

Returns
  size of required blocks to update

Implements Botan::Cipher_Mode.

Definition at line 49 of file cfb.cpp.

References Botan::CFB_Mode::feedback().

50 {
51 return feedback();
52 }
Botan::CFB_Mode::feedback
size_t feedback() const
Definition: cfb.h:47

bool Botan::SymmetricAlgorithm::valid_keylength | ( | size_t | length | ) | const
| inline inherited

Check whether a given key length is valid for this algorithm.

Parameters

  length | the key length to be checked.

Returns
  true if the key length is valid.

Definition at line 56 of file sym_algo.h.

Referenced by Botan::aont_package(), Botan::aont_unpackage(), and Botan::SymmetricAlgorithm::set_key().

57 {
58 return key_spec().valid_keylength(length);
59 }
Botan::Key_Length_Specification::valid_keylength
bool valid_keylength(size_t length) const
Definition: key_spec.h:51
Botan::SymmetricAlgorithm::key_spec
virtual Key_Length_Specification key_spec() const =0

bool Botan::CFB_Mode::valid_nonce_length | ( | size_t | nonce_len | ) | const
| final override virtual inherited

Returns
  true iff nonce_len is a valid length for the nonce

Implements Botan::Cipher_Mode.

Definition at line 69 of file cfb.cpp.

References Botan::CFB_Mode::block_size().

70 {
71 return (n == 0 || n == block_size());
72 }
Botan::CFB_Mode::block_size
size_t block_size() const
Definition: cfb.h:49

void Botan::SymmetricAlgorithm::verify_key_set | ( | bool | cond | ) | const
| inline protected inherited

Definition at line 89 of file sym_algo.h.

Referenced by Botan::Salsa20::cipher(), Botan::CTR_BE::cipher(), Botan::RC4::cipher(), Botan::SHAKE_128_Cipher::cipher(), Botan::ChaCha::cipher(), Botan::Blowfish::decrypt_n(), Botan::SEED::decrypt_n(), Botan::XTEA::decrypt_n(), Botan::KASUMI::decrypt_n(), Botan::Twofish::decrypt_n(), Botan::CAST_128::decrypt_n(), Botan::MISTY1::decrypt_n(), Botan::SHACAL2::decrypt_n(), Botan::IDEA::decrypt_n(), Botan::Noekeon::decrypt_n(), Botan::DESX::decrypt_n(), Botan::CAST_256::decrypt_n(), Botan::Camellia_128::decrypt_n(), Botan::DES::decrypt_n(), Botan::AES_128::decrypt_n(), Botan::SM4::decrypt_n(), Botan::Serpent::decrypt_n(), Botan::Threefish_512::decrypt_n(), Botan::Lion::decrypt_n(), Botan::ARIA_128::decrypt_n(), Botan::Camellia_192::decrypt_n(), Botan::TripleDES::decrypt_n(), Botan::ARIA_192::decrypt_n(), Botan::Camellia_256::decrypt_n(), Botan::GOST_28147_89::decrypt_n(), Botan::AES_192::decrypt_n(), Botan::ARIA_256::decrypt_n(), Botan::AES_256::decrypt_n(), Botan::CAST_256::encrypt_n(), Botan::SHACAL2::encrypt_n(), Botan::SM4::encrypt_n(), Botan::IDEA::encrypt_n(), Botan::KASUMI::encrypt_n(), Botan::AES_128::encrypt_n(), Botan::MISTY1::encrypt_n(), Botan::Noekeon::encrypt_n(), Botan::CAST_128::encrypt_n(), Botan::SEED::encrypt_n(), Botan::DES::encrypt_n(), Botan::Blowfish::encrypt_n(), Botan::Twofish::encrypt_n(), Botan::Camellia_128::encrypt_n(), Botan::XTEA::encrypt_n(), Botan::DESX::encrypt_n(), Botan::Serpent::encrypt_n(), Botan::Threefish_512::encrypt_n(), Botan::Lion::encrypt_n(), Botan::ARIA_128::encrypt_n(), Botan::Camellia_192::encrypt_n(), Botan::TripleDES::encrypt_n(), Botan::ARIA_192::encrypt_n(), Botan::Camellia_256::encrypt_n(), Botan::GOST_28147_89::encrypt_n(), Botan::AES_192::encrypt_n(), Botan::ARIA_256::encrypt_n(), Botan::AES_256::encrypt_n(), Botan::OCB_Encryption::finish(), Botan::OCB_Decryption::finish(), Botan::GHASH::ghash_update(), Botan::CFB_Encryption::process(), process(), Botan::Salsa20::seek(), Botan::CTR_BE::seek(), Botan::ChaCha::seek(), Botan::OCB_Mode::set_associated_data(), Botan::Salsa20::set_iv(), Botan::ChaCha::set_iv(), Botan::GHASH::update(), Botan::GHASH::update_associated_data(), and Botan::ChaCha::write_keystream().

90 {
91 if(cond == false)
92 throw_key_not_set_error();
93 }

## Member Data Documentation

secure_vector<uint8_t> Botan::CFB_Mode::m_keystream
| protected inherited

Definition at line 52 of file cfb.h.

Referenced by Botan::CFB_Mode::clear(), Botan::CFB_Encryption::process(), process(), Botan::CFB_Mode::reset(), and Botan::CFB_Mode::shift_register().

size_t Botan::CFB_Mode::m_keystream_pos = 0
| protected inherited

Definition at line 53 of file cfb.h.

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

secure_vector<uint8_t> Botan::CFB_Mode::m_state
| protected inherited

Definition at line 51 of file cfb.h.

Referenced by Botan::CFB_Encryption::process(), process(), Botan::CFB_Mode::reset(), and Botan::CFB_Mode::shift_register().

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

- src/lib/modes/cfb/cfb.h
- src/lib/modes/cfb/cfb.cpp