Botan  1.10.9
Public Member Functions | Protected Member Functions | List of all members
Botan::SecureQueue Class Reference

#include <secqueue.h>

Inheritance diagram for Botan::SecureQueue:
Botan::Fanout_Filter Botan::DataSource Botan::Filter

Public Member Functions

bool attachable ()
 
size_t discard_next (size_t N)
 
virtual void end_msg ()
 
bool end_of_data () const
 
virtual std::string id () const
 
std::string name () const
 
SecureQueueoperator= (const SecureQueue &other)
 
size_t peek (byte[], size_t, size_t=0) const
 
size_t peek_byte (byte &out) const
 
size_t read (byte[], size_t)
 
size_t read_byte (byte &out)
 
 SecureQueue ()
 
 SecureQueue (const SecureQueue &other)
 
size_t size () const
 
virtual void start_msg ()
 
void write (const byte[], size_t)
 
 ~SecureQueue ()
 

Protected Member Functions

void attach (Filter *f)
 
void incr_owns ()
 
void send (const byte in[], size_t length)
 
void send (byte in)
 
void send (const MemoryRegion< byte > &in)
 
void send (const MemoryRegion< byte > &in, size_t length)
 
void set_next (Filter *f[], size_t n)
 
void set_port (size_t n)
 

Detailed Description

A queue that knows how to zeroize itself

Definition at line 19 of file secqueue.h.

Constructor & Destructor Documentation

Botan::SecureQueue::SecureQueue ( )

SecureQueue default constructor (creates empty queue)

Definition at line 60 of file secqueue.cpp.

References Botan::Fanout_Filter::set_next().

61  {
62  set_next(0, 0);
63  head = tail = new SecureQueueNode;
64  }
void set_next(Filter *f[], size_t n)
Definition: filter.h:144
Botan::SecureQueue::SecureQueue ( const SecureQueue other)

SecureQueue copy constructor

Parameters
otherthe queue to copy

Definition at line 69 of file secqueue.cpp.

References Botan::Fanout_Filter::set_next(), and write().

69  :
71  {
72  set_next(0, 0);
73 
74  head = tail = new SecureQueueNode;
75  SecureQueueNode* temp = input.head;
76  while(temp)
77  {
78  write(&temp->buffer[temp->start], temp->end - temp->start);
79  temp = temp->next;
80  }
81  }
void set_next(Filter *f[], size_t n)
Definition: filter.h:144
friend class Fanout_Filter
Definition: filter.h:97
void write(const byte[], size_t)
Definition: secqueue.cpp:117
Botan::SecureQueue::~SecureQueue ( )
inline

Definition at line 55 of file secqueue.h.

55 { destroy(); }

Member Function Documentation

void Botan::Fanout_Filter::attach ( Filter f)
inlineprotectedinherited

Definition at line 146 of file filter.h.

Referenced by Botan::Chain::Chain().

146 { Filter::attach(f); }
bool Botan::SecureQueue::attachable ( )
inlinevirtual

Check whether this filter is an attachable filter.

Returns
true if this filter is attachable, false otherwise

Reimplemented from Botan::Filter.

Definition at line 36 of file secqueue.h.

36 { return false; }
size_t Botan::DataSource::discard_next ( size_t  N)
inherited

Discard the next N bytes of the data

Parameters
Nthe number of bytes to discard
Returns
number of bytes actually discarded

Definition at line 35 of file data_src.cpp.

References n, and Botan::DataSource::read_byte().

36  {
37  size_t discarded = 0;
38  byte dummy;
39  for(size_t j = 0; j != n; ++j)
40  discarded += read_byte(dummy);
41  return discarded;
42  }
BigInt n
Definition: numthry.cpp:26
unsigned char byte
Definition: types.h:22
size_t read_byte(byte &out)
Definition: data_src.cpp:19
virtual void Botan::Filter::end_msg ( )
inlinevirtualinherited
bool Botan::SecureQueue::end_of_data ( ) const
virtual

Test whether the source still has data that can be read.

Returns
true if there is still data to read, false otherwise

Implements Botan::DataSource.

Definition at line 206 of file secqueue.cpp.

References size().

207  {
208  return (size() == 0);
209  }
size_t size() const
Definition: secqueue.cpp:190
virtual std::string Botan::DataSource::id ( ) const
inlinevirtualinherited

return the id of this data source

Returns
std::string representing the id of this data source

Reimplemented in Botan::DataSource_Stream, and Botan::DataSource_Command.

Definition at line 57 of file data_src.h.

57 { return ""; }
void Botan::Fanout_Filter::incr_owns ( )
inlineprotectedinherited

Increment the number of filters past us that we own

Definition at line 140 of file filter.h.

Referenced by Botan::Chain::Chain().

140 { ++filter_owns; }
std::string Botan::SecureQueue::name ( ) const
inlinevirtual
Returns
descriptive name for this filter

Implements Botan::Filter.

Definition at line 22 of file secqueue.h.

22 { return "Queue"; }
SecureQueue & Botan::SecureQueue::operator= ( const SecureQueue other)

SecureQueue assignment

Parameters
otherthe queue to copy

Definition at line 101 of file secqueue.cpp.

References write().

102  {
103  destroy();
104  head = tail = new SecureQueueNode;
105  SecureQueueNode* temp = input.head;
106  while(temp)
107  {
108  write(&temp->buffer[temp->start], temp->end - temp->start);
109  temp = temp->next;
110  }
111  return (*this);
112  }
void write(const byte[], size_t)
Definition: secqueue.cpp:117
size_t Botan::SecureQueue::peek ( byte  out[],
size_t  length,
size_t  peek_offset = 0 
) const
virtual

Read from the source but do not modify the internal offset. Consecutive calls to peek() will return portions of the source starting at the same position.

Parameters
outthe byte array to write the output to
lengththe length of the byte array out
peek_offsetthe offset into the stream to read at
Returns
length in bytes that was actually read and put into out

Implements Botan::DataSource.

Definition at line 159 of file secqueue.cpp.

References n.

Referenced by Botan::Record_Reader::get_record(), and Botan::Output_Buffers::peek().

160  {
161  SecureQueueNode* current = head;
162 
163  while(offset && current)
164  {
165  if(offset >= current->size())
166  {
167  offset -= current->size();
168  current = current->next;
169  }
170  else
171  break;
172  }
173 
174  size_t got = 0;
175  while(length && current)
176  {
177  const size_t n = current->peek(output, length, offset);
178  offset = 0;
179  output += n;
180  got += n;
181  length -= n;
182  current = current->next;
183  }
184  return got;
185  }
BigInt n
Definition: numthry.cpp:26
size_t Botan::DataSource::peek_byte ( byte out) const
inherited

Peek at one byte.

Parameters
outan output byte
Returns
length in bytes that was actually read and put into out

Definition at line 27 of file data_src.cpp.

References Botan::DataSource::peek().

Referenced by Botan::ASN1::maybe_BER().

28  {
29  return peek(&out, 1, 0);
30  }
virtual size_t peek(byte out[], size_t length, size_t peek_offset) const =0
size_t Botan::SecureQueue::read ( byte  out[],
size_t  length 
)
virtual

Read from the source. Moves the internal offset so that every call to read will return a new portion of the source.

Parameters
outthe byte array to write the result to
lengththe length of the byte array out
Returns
length in bytes that was actually read and put into out

Implements Botan::DataSource.

Definition at line 137 of file secqueue.cpp.

References n.

Referenced by Botan::Record_Reader::get_record(), Botan::Output_Buffers::read(), Botan::TLS_Server::read(), and Botan::TLS_Client::read().

138  {
139  size_t got = 0;
140  while(length && head)
141  {
142  const size_t n = head->read(output, length);
143  output += n;
144  got += n;
145  length -= n;
146  if(head->size() == 0)
147  {
148  SecureQueueNode* holder = head->next;
149  delete head;
150  head = holder;
151  }
152  }
153  return got;
154  }
BigInt n
Definition: numthry.cpp:26
size_t Botan::DataSource::read_byte ( byte out)
inherited

Read one byte.

Parameters
outthe byte to read to
Returns
length in bytes that was actually read and put into out

Definition at line 19 of file data_src.cpp.

References Botan::DataSource::read().

Referenced by Botan::PEM_Code::decode(), Botan::DataSource::discard_next(), Botan::BER_Decoder::discard_remaining(), Botan::PGP_decode(), and Botan::BER_Decoder::raw_bytes().

20  {
21  return read(&out, 1);
22  }
virtual size_t read(byte out[], size_t length)=0
void Botan::Filter::send ( const byte  in[],
size_t  length 
)
protectedinherited
Parameters
insome input for the filter
lengththe length of in

Definition at line 28 of file filter.cpp.

References Botan::MemoryRegion< T >::clear(), Botan::MemoryRegion< T >::size(), and Botan::Filter::write().

Referenced by Botan::PK_Encryptor_Filter::end_msg(), Botan::Zlib_Compression::end_msg(), Botan::Bzip_Compression::end_msg(), Botan::Hex_Encoder::end_msg(), Botan::Base64_Encoder::end_msg(), Botan::PK_Decryptor_Filter::end_msg(), Botan::Bzip_Decompression::end_msg(), Botan::Zlib_Decompression::end_msg(), Botan::PK_Signer_Filter::end_msg(), Botan::Hex_Decoder::end_msg(), Botan::Base64_Decoder::end_msg(), Botan::PK_Verifier_Filter::end_msg(), Botan::Hash_Filter::end_msg(), Botan::MAC_Filter::end_msg(), Botan::Bzip_Compression::flush(), Botan::Zlib_Compression::flush(), Botan::Zlib_Compression::write(), Botan::Bzip_Compression::write(), Botan::StreamCipher_Filter::write(), Botan::Bzip_Decompression::write(), Botan::Zlib_Decompression::write(), Botan::Hex_Decoder::write(), and Botan::Base64_Decoder::write().

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

Definition at line 63 of file filter.h.

References Botan::Filter::send().

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

63 { send(&in, 1); }
void send(const byte in[], size_t length)
Definition: filter.cpp:28
void Botan::Filter::send ( const MemoryRegion< byte > &  in)
inlineprotectedinherited
Parameters
insome input for the filter

Definition at line 68 of file filter.h.

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

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

68 { send(&in[0], in.size()); }
void send(const byte in[], size_t length)
Definition: filter.cpp:28
size_t size() const
Definition: secmem.h:29
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  }
void send(const byte in[], size_t length)
Definition: filter.cpp:28
void Botan::Fanout_Filter::set_next ( Filter f[],
size_t  n 
)
inlineprotectedinherited

Definition at line 144 of file filter.h.

Referenced by Botan::Fork::Fork(), and SecureQueue().

144 { Filter::set_next(f, n); }
BigInt n
Definition: numthry.cpp:26
void Botan::Fanout_Filter::set_port ( size_t  n)
inlineprotectedinherited

Definition at line 142 of file filter.h.

Referenced by Botan::Fork::set_port().

142 { Filter::set_port(n); }
BigInt n
Definition: numthry.cpp:26
size_t Botan::SecureQueue::size ( ) const
Returns
number of bytes available in the queue

Definition at line 190 of file secqueue.cpp.

Referenced by end_of_data(), Botan::Record_Reader::get_record(), Botan::TLS_Server::read(), Botan::TLS_Client::read(), and Botan::Output_Buffers::remaining().

191  {
192  SecureQueueNode* current = head;
193  size_t count = 0;
194 
195  while(current)
196  {
197  count += current->size();
198  current = current->next;
199  }
200  return count;
201  }
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::Zlib_Decompression, Botan::EAX_Base, Botan::Bzip_Decompression, Botan::PBE_PKCS5v20, Botan::PBE_PKCS5v15, Botan::Bzip_Compression, and Botan::Zlib_Compression.

Definition at line 38 of file filter.h.

38 {}
void Botan::SecureQueue::write ( const byte  input[],
size_t  length 
)
virtual

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 117 of file secqueue.cpp.

References n.

Referenced by Botan::Record_Reader::add_input(), operator=(), and SecureQueue().

118  {
119  if(!head)
120  head = tail = new SecureQueueNode;
121  while(length)
122  {
123  const size_t n = tail->write(input, length);
124  input += n;
125  length -= n;
126  if(length)
127  {
128  tail->next = new SecureQueueNode;
129  tail = tail->next;
130  }
131  }
132  }
BigInt n
Definition: numthry.cpp:26

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