Botan  2.7.0
Crypto and TLS for C++11
entropy_src.h
Go to the documentation of this file.
1 /*
2 * EntropySource
3 * (C) 2008,2009,2014,2015,2016 Jack Lloyd
4 *
5 * Botan is released under the Simplified BSD License (see license.txt)
6 */
7 
8 #ifndef BOTAN_ENTROPY_H_
9 #define BOTAN_ENTROPY_H_
10 
11 #include <botan/secmem.h>
12 #include <botan/rng.h>
13 #include <string>
14 #include <chrono>
15 #include <memory>
16 #include <vector>
17 
18 namespace Botan {
19 
20 class RandomNumberGenerator;
21 
22 /**
23 * Abstract interface to a source of entropy
24 */
26  {
27  public:
28  /**
29  * Return a new entropy source of a particular type, or null
30  * Each entropy source may require substantial resources (eg, a file handle
31  * or socket instance), so try to share them among multiple RNGs, or just
32  * use the preconfigured global list accessed by Entropy_Sources::global_sources()
33  */
34  static std::unique_ptr<Entropy_Source> create(const std::string& type);
35 
36  /**
37  * @return name identifying this entropy source
38  */
39  virtual std::string name() const = 0;
40 
41  /**
42  * Perform an entropy gathering poll
43  * @param rng will be provided with entropy via calls to add_entropy
44  * @return conservative estimate of actual entropy added to rng during poll
45  */
46  virtual size_t poll(RandomNumberGenerator& rng) = 0;
47 
48  Entropy_Source() = default;
49  Entropy_Source(const Entropy_Source& other) = delete;
50  Entropy_Source(Entropy_Source&& other) = delete;
51  Entropy_Source& operator=(const Entropy_Source& other) = delete;
52 
53  virtual ~Entropy_Source() = default;
54  };
55 
57  {
58  public:
59  static Entropy_Sources& global_sources();
60 
61  void add_source(std::unique_ptr<Entropy_Source> src);
62 
63  std::vector<std::string> enabled_sources() const;
64 
65  size_t poll(RandomNumberGenerator& rng,
66  size_t bits,
67  std::chrono::milliseconds timeout);
68 
69  /**
70  * Poll just a single named source. Ordinally only used for testing
71  */
72  size_t poll_just(RandomNumberGenerator& rng, const std::string& src);
73 
74  Entropy_Sources() = default;
75  explicit Entropy_Sources(const std::vector<std::string>& sources);
76 
77  Entropy_Sources(const Entropy_Sources& other) = delete;
78  Entropy_Sources(Entropy_Sources&& other) = delete;
79  Entropy_Sources& operator=(const Entropy_Sources& other) = delete;
80 
81  private:
82  std::vector<std::unique_ptr<Entropy_Source>> m_srcs;
83  };
84 
85 }
86 
87 #endif
#define BOTAN_PUBLIC_API(maj, min)
Definition: compiler.h:27
MechanismType type
Definition: alg_id.cpp:13