Botan 1.10.17
Botan::Base64_Decoder Class Reference

#include <b64_filt.h>

Inheritance diagram for Botan::Base64_Decoder:
Botan::Filter

Public Member Functions

virtual bool attachable ()
 Base64_Decoder (Decoder_Checking checking=NONE)
void end_msg ()
std::string name () const
virtual void start_msg ()
void write (const byte input[], size_t length)

Protected Member Functions

void send (byte in)
void send (const byte in[], size_t length)
void send (const MemoryRegion< byte > &in)
void send (const MemoryRegion< byte > &in, size_t length)

Detailed Description

This object represents a Base64 decoder.

Definition at line 57 of file b64_filt.h.

Constructor & Destructor Documentation

◆ Base64_Decoder()

Botan::Base64_Decoder::Base64_Decoder ( Decoder_Checking checking = NONE)

Create a base64 decoder.

Parameters
checkingthe type of checking that shall be performed by the decoder

Definition at line 116 of file b64_filt.cpp.

116 :
117 checking(c), in(64), out(48), position(0)
118 {
119 }

Member Function Documentation

◆ attachable()

virtual bool Botan::Filter::attachable ( )
inlinevirtualinherited

Check whether this filter is an attachable filter.

Returns
true if this filter is attachable, false otherwise

Reimplemented in Botan::DataSink, and Botan::SecureQueue.

Definition at line 50 of file filter.h.

50{ return true; }

◆ end_msg()

void Botan::Base64_Decoder::end_msg ( )
virtual

Finish up the current message

Reimplemented from Botan::Filter.

Definition at line 163 of file b64_filt.cpp.

164 {
165 size_t consumed = 0;
166 size_t written = base64_decode(&out[0],
167 reinterpret_cast<const char*>(&in[0]),
168 position,
169 consumed,
170 true,
171 checking != FULL_CHECK);
172
173 send(out, written);
174
175 const bool not_full_bytes = consumed != position;
176
177 position = 0;
178
179 if(not_full_bytes)
180 throw std::invalid_argument("Base64_Decoder: Input not full bytes");
181 }
void send(const byte in[], size_t length)
Definition filter.cpp:28
size_t base64_decode(byte output[], const char input[], size_t input_length, size_t &input_consumed, bool final_inputs, bool ignore_ws)
Definition base64.cpp:100
@ FULL_CHECK
Definition filter.h:155

References Botan::base64_decode(), Botan::FULL_CHECK, and Botan::Filter::send().

◆ name()

std::string Botan::Base64_Decoder::name ( ) const
inlinevirtual
Returns
descriptive name for this filter

Implements Botan::Filter.

Definition at line 60 of file b64_filt.h.

60{ return "Base64_Decoder"; }

◆ send() [1/4]

void Botan::Filter::send ( byte in)
inlineprotectedinherited
Parameters
insome input for the filter

Definition at line 63 of file filter.h.

63{ send(&in, 1); }

References send().

Referenced by send().

◆ send() [2/4]

void Botan::Filter::send ( const byte in[],
size_t length )
protectedinherited

◆ send() [3/4]

void Botan::Filter::send ( const MemoryRegion< byte > & in)
inlineprotectedinherited
Parameters
insome input for the filter

Definition at line 68 of file filter.h.

68{ send(&in[0], in.size()); }

References send(), and Botan::MemoryRegion< T >::size().

Referenced by send().

◆ send() [4/4]

void Botan::Filter::send ( const MemoryRegion< byte > & in,
size_t length )
inlineprotectedinherited
Parameters
insome input for the filter
lengththe number of bytes of in to send

Definition at line 74 of file filter.h.

75 {
76 send(&in[0], length);
77 }

References send().

◆ start_msg()

virtual void Botan::Filter::start_msg ( )
inlinevirtualinherited

Start a new message. Must be closed by end_msg() before another message can be started.

Reimplemented in Botan::Bzip_Compression, Botan::Bzip_Decompression, Botan::EAX_Base, Botan::PBE_PKCS5v15, Botan::PBE_PKCS5v20, Botan::Zlib_Compression, and Botan::Zlib_Decompression.

Definition at line 38 of file filter.h.

38{}

◆ write()

void Botan::Base64_Decoder::write ( const byte input[],
size_t length )
virtual

Input a part of a message to the decoder.

Parameters
inputthe message to input as a byte array
lengththe length of the byte array input

Implements Botan::Filter.

Definition at line 124 of file b64_filt.cpp.

125 {
126 while(length)
127 {
128 size_t to_copy = std::min<size_t>(length, in.size() - position);
129 if(to_copy == 0)
130 {
131 in.resize(in.size()*2);
132 out.resize(out.size()*2);
133 }
134 copy_mem(&in[position], input, to_copy);
135 position += to_copy;
136
137 size_t consumed = 0;
138 size_t written = base64_decode(&out[0],
139 reinterpret_cast<const char*>(&in[0]),
140 position,
141 consumed,
142 false,
143 checking != FULL_CHECK);
144
145 send(out, written);
146
147 if(consumed != position)
148 {
149 copy_mem(&in[0], &in[consumed], position - consumed);
150 position = position - consumed;
151 }
152 else
153 position = 0;
154
155 length -= to_copy;
156 input += to_copy;
157 }
158 }
void copy_mem(T *out, const T *in, size_t n)
Definition mem_ops.h:22

References Botan::base64_decode(), Botan::copy_mem(), Botan::FULL_CHECK, and Botan::Filter::send().


The documentation for this class was generated from the following files: