8#ifndef BOTAN_CIPHER_MODE_H_
9#define BOTAN_CIPHER_MODE_H_
11#include <botan/secmem.h>
12#include <botan/sym_algo.h>
13#include <botan/exceptn.h>
35 static std::vector<std::string> providers(
const std::string& algo_spec);
44 static std::unique_ptr<Cipher_Mode> create(
const std::string& algo,
46 const std::string& provider =
"");
55 static std::unique_ptr<Cipher_Mode> create_or_throw(
const std::string& algo,
57 const std::string& provider =
"");
62 virtual void start_msg(
const uint8_t nonce[],
size_t nonce_len) = 0;
68 template<
typename Alloc>
69 void start(
const std::vector<uint8_t, Alloc>& nonce)
71 start_msg(nonce.data(), nonce.size());
79 void start(
const uint8_t nonce[],
size_t nonce_len)
81 start_msg(nonce, nonce_len);
89 return start_msg(
nullptr, 0);
105 virtual size_t process(uint8_t msg[],
size_t msg_len) = 0;
115 uint8_t* buf = buffer.data() + offset;
116 const size_t buf_size = buffer.size() - offset;
118 const size_t written = process(buf, buf_size);
119 buffer.resize(offset + written);
180 virtual std::string
provider()
const {
return "base"; }
191 const std::string& provider =
"")
#define BOTAN_ASSERT(expr, assertion_made)
virtual void start_msg(const uint8_t nonce[], size_t nonce_len)=0
virtual std::string provider() const
bool authenticated() const
static std::unique_ptr< Cipher_Mode > create(const std::string &algo, Cipher_Dir direction, const std::string &provider="")
void start(const uint8_t nonce[], size_t nonce_len)
virtual size_t process(uint8_t msg[], size_t msg_len)=0
virtual size_t default_nonce_length() const =0
void start(const std::vector< uint8_t, Alloc > &nonce)
virtual size_t output_length(size_t input_length) const =0
virtual void finish(secure_vector< uint8_t > &final_block, size_t offset=0)=0
virtual size_t tag_size() const
void update(secure_vector< uint8_t > &buffer, size_t offset=0)
virtual size_t minimum_final_size() const =0
virtual size_t update_granularity() const =0
virtual bool valid_nonce_length(size_t nonce_len) const =0
#define BOTAN_PUBLIC_API(maj, min)
Cipher_Mode * get_cipher_mode(const std::string &algo_spec, Cipher_Dir direction, const std::string &provider="")
std::vector< T, secure_allocator< T > > secure_vector