/usr/share/perl5/Data/Entropy.pm is in libdata-entropy-perl 0.007-3.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 | =head1 NAME
Data::Entropy - entropy (randomness) management
=head1 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);
};
=head1 DESCRIPTION
This module maintains a concept of a current selection of
entropy source. Algorithms that require entropy, such as those in
L<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 L<Data::Entropy::RawSource::CryptCounter>
and L<Crypt::Rijndael>), keyed using Perl's built-in C<rand> function.
This gives a data stream that looks like concentrated entropy, but really
only has at most the entropy of the C<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.
=cut
package Data::Entropy;
{ use 5.006; }
use warnings;
use strict;
use Carp qw(croak);
use Params::Classify 0.000 qw(is_ref);
our $VERSION = "0.007";
use parent "Exporter";
our @EXPORT_OK = qw(entropy_source with_entropy_source);
our $entropy_source;
=head1 FUNCTIONS
=over
=item entropy_source
Returns the current entropy source, a C<Data::Entropy::Source>
object. This will be the source passed to the innermost call to
C<with_entropy_source>, if any, or otherwise the default entropy source.
=cut
my $default_entropy_source;
sub entropy_source() {
if(is_ref($entropy_source, "CODE")) {
my $source = $entropy_source->();
croak "entropy source thunk returned another thunk"
if is_ref($source, "CODE");
$entropy_source = $source;
}
unless(defined $entropy_source) {
unless(defined $default_entropy_source) {
my $key = "";
for(my $i = 32; $i--; ) {
$key .= chr(int(CORE::rand(256)));
}
require Crypt::Rijndael;
require Data::Entropy::RawSource::CryptCounter;
require Data::Entropy::Source;
$default_entropy_source =
Data::Entropy::Source->new(
Data::Entropy::RawSource::CryptCounter
->new(Crypt::Rijndael
->new($key)),
"getc");
}
$entropy_source = $default_entropy_source;
}
return $entropy_source;
}
=item with_entropy_source SOURCE, CLOSURE
The SOURCE is selected, so that it will be returned by C<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 C<Data::Entropy::Source> object. Alternatively,
it may be C<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 C<undef>, but not another function reference.
=cut
sub with_entropy_source($&) {
my($source, $closure) = @_;
local $entropy_source = $source;
$closure->();
}
=back
=head1 SEE ALSO
L<Data::Entropy::Algorithms>,
L<Data::Entropy::Source>
=head1 AUTHOR
Andrew Main (Zefram) <zefram@fysh.org>
=head1 COPYRIGHT
Copyright (C) 2006, 2007, 2009, 2011
Andrew Main (Zefram) <zefram@fysh.org>
=head1 LICENSE
This module is free software; you can redistribute it and/or modify it
under the same terms as Perl itself.
=cut
1;
|