Botan  2.19.1
Crypto and TLS for C++11
Public Types | Public Member Functions | Protected Member Functions | List of all members
Botan::Hex_Encoder Class Referencefinal

#include <filters.h>

Inheritance diagram for Botan::Hex_Encoder:
Botan::Filter

Public Types

enum  Case { Uppercase, Lowercase }
 

Public Member Functions

virtual bool attachable ()
 
void end_msg () override
 
 Hex_Encoder (Case the_case)
 
 Hex_Encoder (bool newlines=false, size_t line_length=72, Case the_case=Uppercase)
 
std::string name () const override
 
virtual void start_msg ()
 
void write (const uint8_t in[], size_t length) override
 

Protected Member Functions

virtual void send (const uint8_t in[], size_t length)
 
void send (uint8_t in)
 
template<typename Alloc >
void send (const std::vector< uint8_t, Alloc > &in)
 
template<typename Alloc >
void send (const std::vector< uint8_t, Alloc > &in, size_t length)
 

Detailed Description

Converts arbitrary binary data to hex strings, optionally with newlines inserted

Definition at line 577 of file filters.h.

Member Enumeration Documentation

Whether to use uppercase or lowercase letters for the encoded string.

Enumerator
Uppercase 
Lowercase 

Definition at line 583 of file filters.h.

Constructor & Destructor Documentation

Botan::Hex_Encoder::Hex_Encoder ( Case  the_case)
explicit

Create a hex encoder.

Parameters
the_casethe case to use in the encoded strings.

Definition at line 34 of file hex_filt.cpp.

34  : m_casing(c), m_line_length(0)
35  {
36  m_in.resize(HEX_CODEC_BUFFER_SIZE);
37  m_out.resize(2*m_in.size());
38  m_counter = m_position = 0;
39  }
const size_t HEX_CODEC_BUFFER_SIZE
Definition: hex_filt.cpp:18
Botan::Hex_Encoder::Hex_Encoder ( bool  newlines = false,
size_t  line_length = 72,
Case  the_case = Uppercase 
)

Create a hex encoder.

Parameters
newlinesshould newlines be used
line_lengthif newlines are used, how long are lines
the_casethe case to use in the encoded strings

Definition at line 23 of file hex_filt.cpp.

23  :
24  m_casing(c), m_line_length(breaks ? length : 0)
25  {
26  m_in.resize(HEX_CODEC_BUFFER_SIZE);
27  m_out.resize(2*m_in.size());
28  m_counter = m_position = 0;
29  }
const size_t HEX_CODEC_BUFFER_SIZE
Definition: hex_filt.cpp:18

Member Function Documentation

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::SecureQueue, and Botan::DataSink.

Definition at line 52 of file filter.h.

52 { return true; }
void Botan::Hex_Encoder::end_msg ( )
overridevirtual

Notify that the current message is finished; flush buffers and do end-of-message processing (if any).

Reimplemented from Botan::Filter.

Definition at line 97 of file hex_filt.cpp.

References Botan::Filter::send().

98  {
99  encode_and_send(m_in.data(), m_position);
100  if(m_counter && m_line_length)
101  send('\n');
102  m_counter = m_position = 0;
103  }
virtual void send(const uint8_t in[], size_t length)
Definition: filter.cpp:27
std::string Botan::Hex_Encoder::name ( ) const
inlineoverridevirtual
Returns
descriptive name for this filter

Implements Botan::Filter.

Definition at line 585 of file filters.h.

585 { return "Hex_Encoder"; }
void Botan::Filter::send ( const uint8_t  in[],
size_t  length 
)
protectedvirtualinherited
Parameters
insome input for the filter
lengththe length of in

Definition at line 27 of file filter.cpp.

References Botan::Filter::write().

Referenced by Botan::Base64_Encoder::end_msg(), Botan::Base64_Decoder::end_msg(), end_msg(), Botan::Hex_Decoder::end_msg(), Botan::Base64_Decoder::write(), and Botan::Hex_Decoder::write().

28  {
29  if(!length)
30  return;
31 
32  bool nothing_attached = true;
33  for(size_t j = 0; j != total_ports(); ++j)
34  if(m_next[j])
35  {
36  if(m_write_queue.size())
37  m_next[j]->write(m_write_queue.data(), m_write_queue.size());
38  m_next[j]->write(input, length);
39  nothing_attached = false;
40  }
41 
42  if(nothing_attached)
43  m_write_queue += std::make_pair(input, length);
44  else
45  m_write_queue.clear();
46  }
virtual void write(const uint8_t input[], size_t length)=0
void Botan::Filter::send ( uint8_t  in)
inlineprotectedinherited
Parameters
insome input for the filter

Definition at line 65 of file filter.h.

References Botan::Filter::send().

Referenced by Botan::Filter::send().

65 { send(&in, 1); }
virtual void send(const uint8_t in[], size_t length)
Definition: filter.cpp:27
template<typename Alloc >
void Botan::Filter::send ( const std::vector< uint8_t, Alloc > &  in)
inlineprotectedinherited
Parameters
insome input for the filter

Definition at line 71 of file filter.h.

72  {
73  send(in.data(), in.size());
74  }
virtual void send(const uint8_t in[], size_t length)
Definition: filter.cpp:27
template<typename Alloc >
void Botan::Filter::send ( const std::vector< uint8_t, Alloc > &  in,
size_t  length 
)
inlineprotectedinherited
Parameters
insome input for the filter
lengththe number of bytes of in to send

Definition at line 81 of file filter.h.

References BOTAN_ASSERT_NOMSG.

82  {
83  BOTAN_ASSERT_NOMSG(length <= in.size());
84  send(in.data(), length);
85  }
virtual void send(const uint8_t in[], size_t length)
Definition: filter.cpp:27
#define BOTAN_ASSERT_NOMSG(expr)
Definition: assert.h:68
virtual void Botan::Filter::start_msg ( )
inlinevirtualinherited

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

Definition at line 40 of file filter.h.

40 { /* default empty */ }
void Botan::Hex_Encoder::write ( const uint8_t  input[],
size_t  length 
)
overridevirtual

Write a portion of a message to this filter.

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

Implements Botan::Filter.

Definition at line 74 of file hex_filt.cpp.

References Botan::buffer_insert(), and Botan::copy_mem().

75  {
76  buffer_insert(m_in, m_position, input, length);
77  if(m_position + length >= m_in.size())
78  {
79  encode_and_send(m_in.data(), m_in.size());
80  input += (m_in.size() - m_position);
81  length -= (m_in.size() - m_position);
82  while(length >= m_in.size())
83  {
84  encode_and_send(input, m_in.size());
85  input += m_in.size();
86  length -= m_in.size();
87  }
88  copy_mem(m_in.data(), input, length);
89  m_position = 0;
90  }
91  m_position += length;
92  }
void copy_mem(T *out, const T *in, size_t n)
Definition: mem_ops.h:133
size_t buffer_insert(std::vector< T, Alloc > &buf, size_t buf_offset, const T input[], size_t input_length)
Definition: mem_ops.h:228

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