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

#include <es_ftw.h>

Inheritance diagram for Botan::FTW_EntropySource:
Botan::EntropySource

Public Member Functions

 FTW_EntropySource (const std::string &root_dir)
 
std::string name () const
 
void poll (Entropy_Accumulator &accum)
 
 ~FTW_EntropySource ()
 

Detailed Description

File Tree Walking Entropy Source

Definition at line 18 of file es_ftw.h.

Constructor & Destructor Documentation

Botan::FTW_EntropySource::FTW_EntropySource ( const std::string &  p)

FTW_EntropySource Constructor

Definition at line 136 of file es_ftw.cpp.

136  : path(p)
137  {
138  dir = 0;
139  }
Botan::FTW_EntropySource::~FTW_EntropySource ( )

FTW_EntropySource Destructor

Definition at line 144 of file es_ftw.cpp.

145  {
146  delete dir;
147  }

Member Function Documentation

std::string Botan::FTW_EntropySource::name ( ) const
inlinevirtual
Returns
name identifying this entropy source

Implements Botan::EntropySource.

Definition at line 21 of file es_ftw.h.

21 { return "Proc Walker"; }
void Botan::FTW_EntropySource::poll ( Entropy_Accumulator accum)
virtual

Perform an entropy gathering poll

Parameters
accumis an accumulator object that will be given entropy

Implements Botan::EntropySource.

Definition at line 149 of file es_ftw.cpp.

References Botan::Entropy_Accumulator::add(), Botan::Entropy_Accumulator::get_io_buffer(), Botan::Entropy_Accumulator::polling_goal_achieved(), and Botan::MemoryRegion< T >::size().

150  {
151  const size_t MAX_FILES_READ_PER_POLL = 2048;
152 
153  if(!dir)
154  dir = new Directory_Walker(path);
155 
156  MemoryRegion<byte>& io_buffer = accum.get_io_buffer(4096);
157 
158  for(size_t i = 0; i != MAX_FILES_READ_PER_POLL; ++i)
159  {
160  int fd = dir->next_fd();
161 
162  // If we've exhaused this walk of the directory, halt the poll
163  if(fd == -1)
164  {
165  delete dir;
166  dir = 0;
167  break;
168  }
169 
170  ssize_t got = ::read(fd, &io_buffer[0], io_buffer.size());
171  ::close(fd);
172 
173  if(got > 0)
174  accum.add(&io_buffer[0], got, .001);
175 
176  if(accum.polling_goal_achieved())
177  break;
178  }
179  }

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