This file is indexed.

/usr/share/perl5/Math/RandomOrg.pm is in libmath-randomorg-perl 0.04-5.

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
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
=head1 NAME

Math::RandomOrg - Retrieve random numbers and data from random.org.

=head1 SYNOPSIS

  use Math::RandomOrg qw(randnum randbyte);
  my $number = randnum(0, 10);
  my $octet = randbyte(1);

=head1 DESCRIPTION

Math::RandomOrg provides functions for retrieving random data from the random.org server.
Data may be retrieved in an integer or byte-stream format using the C<randnum> and C<randbyte> functions respectively.

=head1 REQUIRES

=over 4

=item Carp

=item Exporter

=item Math::BigInt

=item LWP::Simple

=back

=head1 EXPORT

None by default. You may request the following symbols be exported:

=over 4

=item * randnum

=item * randbyte

=back

=cut

package Math::RandomOrg;

use strict;
use warnings;

our ($VERSION, @ISA, @EXPORT, @EXPORT_OK);

require Exporter;
@ISA = qw(Exporter);

@EXPORT_OK = qw( checkbuf randnum randbyte randseq );
@EXPORT = qw();
$VERSION = '0.04';

use Carp;
use Math::BigInt;
use LWP::Simple ();

my $RAND_MIN	= new Math::BigInt "-1000000000";	# random.org fixed min
my $RAND_MAX	= new Math::BigInt "1000000000";	# random.org fixed max
my $NUM_BUF	= 256;									# at least, request this number of random integers in each request to random.org

=head1 FUNCTIONS

=over 4

=cut

{
	my @randnums;

=item C<checkbuf()>

This routine takes no parameters and simply returns a single value (e.g., 
C<28%>) telling you how full the buffer is. At 100%, the buffer is full 
and you are free to hit it with automated clients. At 0%, the buffer is 
empty and requests will hang. When less than 100%, the buffer is being 
filled continually, but doing so takes time. I advise people with 
automated clients to check the buffer level every once in a while and only 
issue requests when the buffer level is 20% or higher.

=cut

	sub checkbuf {
		my $url		= "http://www.random.org/cgi-bin/checkbuf";
		my $data	= LWP::Simple::get( $url );
		if (defined($data)) {
			$data =~ s/\%//;
			return $data;
		} else {
			carp "HTTP GET failed for $url";
			return;
		}
	}

=item C<randnum ( $min, $max )>

Return an integer (specifically a Math::BigInt object) between the bounds [ $min, $max ] (inclusive).

By default, $max and $min are positive and negative 1e9, respectively. These default
values represent random.org's current extrema for the bounds of the randnum function.
Therefore, $min and $max may not exceed the default values.

=cut
	sub randnum (;$$) {
		use integer;
		my $min	= new Math::BigInt (defined($_[0]) ? $_[0] : $RAND_MIN);
		my $max	= new Math::BigInt (defined($_[1]) ? $_[1] : $RAND_MAX);
		if ($min < $RAND_MIN or $max > $RAND_MAX) {
			carp "The $min and $max arguments to the randnum() function may not exceed the bounds ($RAND_MIN, $RAND_MAX)!";
			return undef;
		}
		if ($#randnums == -1) {
			my $url		= "http://www.random.org/cgi-bin/randnum?num=${NUM_BUF}&min=${RAND_MIN}&max=${RAND_MAX}&col=1";
			my $data	= LWP::Simple::get( $url );
			if (defined($data)) {
				@randnums	= map { new Math::BigInt $_ } (split(/\n/, $data));
			} else {
				carp "HTTP GET failed for $url";
				return undef;
			}
		}
		my $num	= shift(@randnums);
		
		$num	-= $RAND_MIN;
		$num	*= (1 + $max - $min);
		$num	/= ($RAND_MAX - $RAND_MIN);
		$num	+= $min;
		
		return $num;
	}

	my $randbytes	= '';

=item C<randbyte ( $length )>

Returns an octet-string of specified length (defaults to one byte), which contains random bytes.

$length may not exceed 16,384, as this is the maximum number of bytes retrievable from the
random.org server in one request, and making multiple requests for an unbounded amount of
data would unfairly tax the random.org server. If you need large amounts of random data,
you may wish to try the Math::TrulyRandom module.

=cut
	sub randbyte (;$) {
		my $length	= +(shift || 1);
		if ($length > 16_384) {
			carp "randbyte() should not be used to generate random data larger than 16,384 bytes (lest we swamp random.org's entropy source).";
			return '';
		} elsif (length($randbytes) < $length) {
			my $nbytes	= ($length > 512) ? $length : 512;
			my $url		= "http://www.random.org/cgi-bin/randbyte?nbytes=${nbytes}&format=f";
			my $data	= LWP::Simple::get( $url );
			if (defined($data)) {
				$randbytes	.= $data;
			} else {
				carp "HTTP GET failed for $url";
				return undef;
			}
		}
		return substr($randbytes, 0, $length, '');
	}
}

=item C<randseq ( $min, $max )>

The randseq script returns a randomized sequence of numbers. This corresponds to dropping a number of lottery tickets into a hat and drawing them out in random order. Hence, each number in a randomized sequence occurs exactly once.

Example: C<randseq(1, 10)> will return the numbers between 1 and 10 (both inclusive) in a random order.

=cut

	sub randseq (;$$) {
		my ($min, $max) = @_;
		return if ( (! defined $min) || (! defined $max) || ($min !~ /^\-?\d+$/) || ($max !~ /^\-?\d+$/) );
		if ($max < $min) {
			carp "MAX must be greater than MIN.";
			return;
		}
		if ($max - $min > 10000) {
			carp "random.org restricts the size of sequences to <= 10,000.";
			return;
		}
		my @sequence = ();
		my $url		= "http://www.random.org/cgi-bin/randseq?min=$min&max=$max";
		my $data	= LWP::Simple::get( $url );
		if (defined($data)) {
			@sequence = map { new Math::BigInt $_ } (split(/\n/, $data));
		} else {
			carp "HTTP GET failed for $url";
			return undef;
		}
		
		return wantarray ? @sequence : \@sequence;
	}

1;
__END__

=back

=head1 BUGS

None known.

=head1 SEE ALSO

=over 4

=item * L<Math::TrulyRandom>

=item * L<rand>

=back

=head1 COPYRIGHT

Copyright (c) 2001-2006 Gregory Todd Williams. All rights reserved. This
program is free software; you can redistribute it and/or modify it under
the same terms as Perl itself.

=head1 AUTHOR

Gregory Todd Williams  C<< <gwilliams@cpan.org> >>

=cut