8#ifndef BOTAN_STREAM_CIPHER_H_
9#define BOTAN_STREAM_CIPHER_H_
11#include <botan/concepts.h>
12#include <botan/sym_algo.h>
34 static std::unique_ptr<StreamCipher>
create(std::string_view algo_spec, std::string_view
provider =
"");
43 static std::unique_ptr<StreamCipher>
create_or_throw(std::string_view algo_spec, std::string_view
provider =
"");
48 static std::vector<std::string>
providers(std::string_view algo_spec);
68 void cipher(std::span<const uint8_t> in, std::span<uint8_t> out) {
70 "Output buffer of stream cipher must be at least as long as input buffer");
100 template <concepts::resizable_
byte_buffer T = secure_vector<u
int8_t>>
127 void encipher(std::span<uint8_t> inout) {
cipher(inout.data(), inout.data(), inout.size()); }
134 void encrypt(std::span<uint8_t> inout) {
cipher(inout.data(), inout.data(), inout.size()); }
141 void decrypt(std::span<uint8_t> inout) {
cipher(inout.data(), inout.data(), inout.size()); }
188 virtual size_t default_iv_length()
const;
204 virtual std::unique_ptr<StreamCipher>
new_object()
const = 0;
219 virtual void seek(uint64_t offset) = 0;
225 virtual std::string
provider()
const {
return "base"; }
231 virtual void cipher_bytes(
const uint8_t in[], uint8_t out[],
size_t len) = 0;
#define BOTAN_PUBLIC_API(maj, min)
#define BOTAN_ARG_CHECK(expr, msg)
~StreamCipher() override=default
virtual size_t buffer_size() const =0
void cipher1(uint8_t buf[], size_t len)
T keystream_bytes(size_t bytes)
void set_iv(const uint8_t iv[], size_t iv_len)
static std::unique_ptr< StreamCipher > create_or_throw(std::string_view algo_spec, std::string_view provider="")
virtual void set_iv_bytes(const uint8_t iv[], size_t iv_len)=0
static std::unique_ptr< StreamCipher > create(std::string_view algo_spec, std::string_view provider="")
void decrypt(std::span< uint8_t > inout)
void encipher(std::span< uint8_t > inout)
StreamCipher * clone() const
void set_iv(std::span< const uint8_t > iv)
void write_keystream(std::span< uint8_t > out)
virtual std::unique_ptr< StreamCipher > new_object() const =0
void write_keystream(uint8_t out[], size_t len)
void encrypt(std::span< uint8_t > inout)
virtual void seek(uint64_t offset)=0
void cipher(std::span< const uint8_t > in, std::span< uint8_t > out)
virtual void generate_keystream(uint8_t out[], size_t len)
void cipher1(std::span< uint8_t > buf)
virtual bool valid_iv_length(size_t iv_len) const
virtual void cipher_bytes(const uint8_t in[], uint8_t out[], size_t len)=0
static std::vector< std::string > providers(std::string_view algo_spec)
void cipher(const uint8_t in[], uint8_t out[], size_t len)
virtual std::string provider() const