9 #include <botan/data_src.h>
10 #include <botan/exceptn.h>
13 #if defined(BOTAN_TARGET_OS_HAS_FILESYSTEM)
32 return peek(&out, 1, 0);
40 uint8_t buf[64] = { 0 };
45 const size_t got = this->
read(buf,
std::min(n,
sizeof(buf)));
61 size_t got = std::min<size_t>(m_source.size() - m_offset, length);
62 copy_mem(out, m_source.data() + m_offset, got);
69 return (n <= (m_source.size() - m_offset));
76 size_t peek_offset)
const
78 const size_t bytes_left = m_source.size() - m_offset;
79 if(peek_offset >= bytes_left)
return 0;
81 size_t got =
std::min(bytes_left - peek_offset, length);
82 copy_mem(out, &m_source[m_offset + peek_offset], got);
91 return (m_offset == m_source.size());
98 m_source(reinterpret_cast<const uint8_t*>(in.data()),
99 reinterpret_cast<const uint8_t*>(in.data()) + in.length()),
109 m_source.read(reinterpret_cast<char*>(out), length);
113 size_t got = m_source.gcount();
120 const std::streampos orig_pos = m_source.tellg();
121 m_source.seekg(0, std::ios::end);
122 const size_t avail = m_source.tellg() - orig_pos;
123 m_source.seekg(orig_pos);
133 throw Invalid_State(
"DataSource_Stream: Cannot peek when out of data");
140 m_source.read(reinterpret_cast<char*>(buf.data()), buf.size());
143 got = m_source.gcount();
148 m_source.read(reinterpret_cast<char*>(out), length);
151 got = m_source.gcount();
156 m_source.seekg(m_total_read, std::ios::beg);
166 return (!m_source.good());
177 #if defined(BOTAN_TARGET_OS_HAS_FILESYSTEM)
185 m_source_memory(new
std::ifstream(path, use_binary ?
std::ios::binary :
std::ios::in)),
186 m_source(*m_source_memory),
201 const std::string& name) :
bool check_available(size_t n) override
size_t read(uint8_t[], size_t) override
size_t discard_next(size_t N)
std::string id() const override
virtual size_t peek(uint8_t out[], size_t length, size_t peek_offset) const BOTAN_WARN_UNUSED_RESULT=0
std::vector< T, secure_allocator< T >> secure_vector
DataSource_Stream(std::istream &, const std::string &id="<std::istream>")
bool end_of_data() const override
virtual size_t read(uint8_t out[], size_t length) BOTAN_WARN_UNUSED_RESULT=0
void copy_mem(T *out, const T *in, size_t n)
size_t read_byte(uint8_t &out)
size_t peek_byte(uint8_t &out) const
bool end_of_data() const override
DataSource_Memory(const std::string &in)
size_t peek(uint8_t[], size_t, size_t) const override
bool check_available(size_t n) override
size_t read(uint8_t[], size_t) override
size_t peek(uint8_t[], size_t, size_t) const override