NAME¶
Data::Entropy - entropy (randomness) management
SYNOPSIS¶
use Data::Entropy qw(entropy_source);
$i = entropy_source->get_int(12345);
use Data::Entropy qw(with_entropy_source);
with_entropy_source $source, sub {
@a = shuffle(@a);
};
DESCRIPTION¶
This module maintains a concept of a current selection of entropy source.
Algorithms that require entropy, such as those in Data::Entropy::Algorithms,
can use the source nominated by this module, avoiding the need for entropy
source objects to be explicitly passed around. This is convenient because
usually one entropy source will be used for an entire program run and so an
explicit entropy source parameter would rarely vary. There is also a default
entropy source, avoiding the need to explicitly configure a source at all.
If nothing is done to set a source then it defaults to the use of Rijndael (AES)
in counter mode (see Data::Entropy::RawSource::CryptCounter and
Crypt::Rijndael), keyed using Perl's built-in "rand" function. This
gives a data stream that looks like concentrated entropy, but really only has
at most the entropy of the "rand" seed. Within a single run it is
cryptographically difficult to detect the correlation between parts of the
pseudo-entropy stream. If more true entropy is required then it is necessary
to configure a different entropy source.
FUNCTIONS¶
- entropy_source
- Returns the current entropy source, a "Data::Entropy::Source"
object. This will be the source passed to the innermost call to
"with_entropy_source", if any, or otherwise the default entropy
source.
- with_entropy_source SOURCE, CLOSURE
- The SOURCE is selected, so that it will be returned by
"entropy_source", and CLOSURE is called (with no arguments). The
SOURCE is selected only during the dynamic scope of the call; after
CLOSURE finishes, by whatever means, the previously selected entropy
source is restored.
SOURCE is normally a "Data::Entropy::Source" object.
Alternatively, it may be "undef" to cause use of the default
entropy source. It may also be a reference to a function of no arguments,
which will be called to generate the actual source only if required. This
avoids unnecessarily initialising the source object if it is uncertain
whether any entropy will be required. The source-generating closure may
return a normal source or "undef", but not another function
reference.
SEE ALSO¶
Data::Entropy::Algorithms, Data::Entropy::Source
AUTHOR¶
Andrew Main (Zefram) <zefram@fysh.org>
COPYRIGHT¶
Copyright (C) 2006, 2007, 2009, 2011 Andrew Main (Zefram)
<zefram@fysh.org>
LICENSE¶
This module is free software; you can redistribute it and/or modify it under the
same terms as Perl itself.