9#ifndef BOTAN_DATA_SRC_H_
10#define BOTAN_DATA_SRC_H_
12#include <botan/secmem.h>
36 [[nodiscard]]
virtual size_t read(uint8_t out[],
size_t length) = 0;
51 [[nodiscard]]
virtual size_t peek(uint8_t out[],
size_t length,
size_t peek_offset)
const = 0;
63 virtual std::string
id()
const {
return ""; }
71 size_t read_byte(uint8_t& out);
78 std::optional<uint8_t> read_byte();
86 size_t peek_byte(uint8_t& out)
const;
93 size_t discard_next(
size_t N);
113 size_t read(uint8_t buf[],
size_t length)
override;
114 size_t peek(uint8_t buf[],
size_t length,
size_t offset)
const override;
129 DataSource_Memory(
const uint8_t in[],
size_t length) : m_source(in, in + length), m_offset(0) {}
141 explicit DataSource_Memory(std::span<const uint8_t> in) : m_source(in.begin(), in.end()), m_offset(0) {}
147 explicit DataSource_Memory(
const std::vector<uint8_t>& in) : m_source(in.begin(), in.end()), m_offset(0) {}
161 size_t read(uint8_t buf[],
size_t length)
override;
162 size_t peek(uint8_t buf[],
size_t length,
size_t offset)
const override;
165 std::string
id()
const override;
169#if defined(BOTAN_TARGET_OS_HAS_FILESYSTEM)
188 const std::string m_identifier;
190 std::unique_ptr<std::istream> m_source_memory;
191 std::istream& m_source;
#define BOTAN_PUBLIC_API(maj, min)
#define BOTAN_FUTURE_EXPLICIT
DataSource_Memory(const std::vector< uint8_t > &in)
DataSource_Memory(secure_vector< uint8_t > in)
DataSource_Memory(std::string_view in)
size_t read(uint8_t buf[], size_t length) override
bool check_available(size_t n) override
DataSource_Memory(std::span< const uint8_t > in)
size_t peek(uint8_t buf[], size_t length, size_t offset) const override
DataSource_Memory(const uint8_t in[], size_t length)
size_t get_bytes_read() const override
bool end_of_data() const override
~DataSource_Stream() override
bool end_of_data() const override
BOTAN_FUTURE_EXPLICIT DataSource_Stream(std::istream &in, std::string_view id="<std::istream>")
size_t get_bytes_read() const override
DataSource_Stream & operator=(DataSource_Stream &&)=delete
DataSource_Stream(const DataSource_Stream &)=delete
size_t read(uint8_t buf[], size_t length) override
size_t peek(uint8_t buf[], size_t length, size_t offset) const override
DataSource_Stream(DataSource_Stream &&)=delete
bool check_available(size_t n) override
DataSource_Stream & operator=(const DataSource_Stream &)=delete
std::string id() const override
virtual std::string id() const
DataSource & operator=(DataSource &&)=default
DataSource(DataSource &&)=default
DataSource(const DataSource &)=delete
virtual size_t get_bytes_read() const =0
virtual ~DataSource()=default
virtual size_t peek(uint8_t out[], size_t length, size_t peek_offset) const =0
virtual size_t read(uint8_t out[], size_t length)=0
virtual bool check_available(size_t n)=0
virtual bool end_of_data() const =0
DataSource & operator=(const DataSource &)=delete
std::vector< T, secure_allocator< T > > secure_vector