blob: edfa635e141a9a2d09a6ad468208f31f494881df [file] [log] [blame]
[/
/ Copyright (c) 2009 Steven Watanabe
/
/ Distributed under the Boost Software License, Version 1.0. (See
/ accompanying file LICENSE_1_0.txt or copy at
/ http://www.boost.org/LICENSE_1_0.txt)
]
[section Header <boost/nondet_random.hpp> Synopsis]
namespace boost {
class random_device;
} // namespace boost
[endsect]
[section Class random_device]
[section Synopsis]
class random_device : noncopyable
{
public:
typedef unsigned int result_type;
static const bool has_fixed_range = true;
static const result_type min_value = /* implementation defined */;
static const result_type max_value = /* implementation defined */;
result_type min() const;
result_type max() const;
explicit random_device(const std::string& token = default_token);
~random_device();
double entropy() const;
unsigned int operator()();
};
[endsect]
[section Description]
Class `random_device` models a non-deterministic random number generator. It
uses one or more implementation-defined stochastic processes to generate a
sequence of uniformly distributed non-deterministic random numbers. For those
environments where a non-deterministic random number generator is not
available, class random_device must not be implemented. See
[:"Randomness Recommendations for Security", D. Eastlake, S. Crocker,
J. Schiller, Network Working Group, RFC 1750, December 1994]
for further discussions.
[note Some operating systems abstract the computer hardware enough to make it
difficult to non-intrusively monitor stochastic processes. However, several do
provide a special device for exactly this purpose. It seems to be impossible
to emulate the functionality using Standard C++ only, so users should be aware
that this class may not be available on all platforms.]
[endsect]
[section Members]
explicit random_device(const std::string& token = default_token)
Effects: Constructs a random_device, optionally using the given token as an
access specification (for example, a URL) to some implementation-defined
service for monitoring a stochastic process.
double entropy() const
Returns: An entropy estimate for the random numbers returned by `operator()`,
in the range `min()` to `log2(max()+1)`. A deterministic random number
generator (e.g. a pseudo-random number engine) has entropy 0.
Throws: Nothing.
[endsect]
Implementation Note for Linux
On the Linux operating system, token is interpreted as a filesystem path. It
is assumed that this path denotes an operating system pseudo-device which
generates a stream of non-deterministic random numbers. The pseudo-device
should never signal an error or end-of-file. Otherwise, std::ios_base::failure
is thrown. By default, random_device uses the /dev/urandom pseudo-device to
retrieve the random numbers. Another option would be to specify the
/dev/random pseudo-device, which blocks on reads if the entropy pool has no
more random bits available.
[endsect]
[section Performance]
The test program nondet_random_speed.cpp measures the execution times of the
nondet_random.hpp implementation of the above algorithms in a tight loop.
The performance has been evaluated on a Pentium Pro 200 MHz with gcc 2.95.2,
Linux 2.2.13, glibc 2.1.2.
[table preformance
[[class] [time per invocation \[usec\]]]
[[random_device] [92.0]]
]
The measurement error is estimated at +/- 1 usec.
[endsect]