8#include <botan/filters.h>
9#include <botan/base64.h>
10#include <botan/exceptn.h>
19 m_line_length(breaks ? length : 0),
20 m_trailing_newline(t_n && breaks),
31void Base64_Encoder::encode_and_send(
const uint8_t input[],
size_t length,
36 const size_t proc = std::min(length, m_in.size());
40 input, proc, consumed, final_inputs);
42 do_output(m_out.data(), produced);
53void Base64_Encoder::do_output(
const uint8_t input[],
size_t length)
55 if(m_line_length == 0)
59 size_t remaining = length, offset = 0;
62 size_t sent = std::min(m_line_length - m_out_position, remaining);
63 send(input + offset, sent);
64 m_out_position += sent;
67 if(m_out_position == m_line_length)
82 if(m_position + length >= m_in.size())
84 encode_and_send(m_in.data(), m_in.size());
85 input += (m_in.size() - m_position);
86 length -= (m_in.size() - m_position);
87 while(length >= m_in.size())
89 encode_and_send(input, m_in.size());
91 length -= m_in.size();
93 copy_mem(m_in.data(), input, length);
104 encode_and_send(m_in.data(), m_position,
true);
106 if(m_trailing_newline || (m_out_position && m_line_length))
109 m_out_position = m_position = 0;
116 m_checking(c), m_in(64), m_out(48), m_position(0)
127 size_t to_copy = std::min<size_t>(length, m_in.size() - m_position);
130 m_in.resize(m_in.size()*2);
131 m_out.resize(m_out.size()*2);
133 copy_mem(&m_in[m_position], input, to_copy);
134 m_position += to_copy;
144 send(m_out, written);
146 if(consumed != m_position)
148 copy_mem(m_in.data(), m_in.data() + consumed, m_position - consumed);
149 m_position = m_position - consumed;
172 send(m_out, written);
174 const bool not_full_bytes = consumed != m_position;
Base64_Decoder(Decoder_Checking checking=NONE)
void write(const uint8_t input[], size_t length) override
Base64_Encoder(bool breaks=false, size_t length=72, bool t_n=false)
void write(const uint8_t input[], size_t length) override
virtual void send(const uint8_t in[], size_t length)
size_t buffer_insert(std::vector< T, Alloc > &buf, size_t buf_offset, const T input[], size_t input_length)
size_t base64_encode(char out[], const uint8_t in[], size_t input_length, size_t &input_consumed, bool final_inputs)
void copy_mem(T *out, const T *in, size_t n)
size_t base64_decode(uint8_t out[], const char in[], size_t input_length, size_t &input_consumed, bool final_inputs, bool ignore_ws)
const char * cast_uint8_ptr_to_char(const uint8_t *b)