BSD::arc4random(3p) User Contributed Perl Documentation BSD::arc4random(3p)NAMEBSD::arc4random - Perl interface to the arc4 random number generator
SYNOPSIS
use BSD::arc4random qw(:all);
$v = arc4random();
$v = arc4random_uniform($hz);
if (!BSD::arc4random::have_kintf()) {
$v = arc4random_addrandom("entropy to pass to the system");
} else {
$v = arc4random_pushb("entropy to pass to the system");
$v = arc4random_pushk("entropy to pass to the kernel");
}
$s = arc4random_bytes(16, "entropy to pass to libc");
arc4random_stir();
$s = arc4random_bytes(16);
print $RANDOM;
DESCRIPTION
This set of functions maps the arc4random(3) family of libc functions
into Perl code. All functions listed below are ithreads-safe. The
internal XS functions are not, but you are not supposed to call them,
either.
On module load, perl's internal PRNG is re-seeded, as a bonus, using
srand with an argument calculated from using arc4random_pushb on some
entropy returned from rand's previous state.
LOW-LEVEL FUNCTIONS
arc4random()
This function returns an unsigned 32-bit integer random value.
arc4random_addrandom(pbuf)
This function adds the entropy from pbuf into the libc pool and
returns an unsigned 32-bit integer random value from it.
arc4random_pushb(pbuf)
This function first pushes the pbuf argument to the kernel if pos‐
sible, then the entropy returned by the kernel into the libc pool,
then returns an unsigned 32-bit integer random value from it.
arc4random_pushk(pbuf)
This function first pushes the pbuf argument to the kernel if pos‐
sible, then returns an unsigned 32-bit integer random value from
the kernel.
This function is deprecated. Use arc4random_pushb instead.
arc4random_stir()
This procedure attempts to retrieve new entropy from the kernel and
add it to the libc pool. Usually, this means you must have access
to the urandom(4) device; create it inside chroot(2) jails first if
you use them.
have_kintf()
This constant function returns 1 if arc4random_pushb and/or
arc4random_pushk actually call the kernel interfaces, 0 if they
merely map to arc4random_addrandom instead.
HIGH-LEVEL FUNCTIONS
arc4random_bytes(num[, pbuf])
This function returns a string containing as many random bytes as
requested by the integral argument num. An optional pbuf argument
is passed to the system first.
arc4random_uniform(upper_bound)
Calculate a uniformly distributed random number less than
upper_bound avoiding "modulo bias".
PACKAGE VARIABLES
$RANDOM
The $RANDOM returns a random value in the range [0; 32767] on each
read attempt and pushes any value it is assigned to the kernel. It
is tied at module load time.
tie variable, 'BSD::arc4random'[, max]
You can tie any scalar variable to this package; the max argument
is the maximum number returned; if undefined, 0 or >= 0xFFFFFFFF,
no bound is used, and values in the range [0; 2**32-1] are
returned. They will behave like $RANDOM.
AUTHOR
Thorsten Glaser <tg@mirbsd.de>
SEE ALSO
The arc4random(3) manual page, available online at:
<https://www.mirbsd.org/man/arc4random.3>
Perl's rand and srand functions via perlfunc and perlfaq4.
The randex.pl plugin for Irssi, implementing the MirOS RANDEX protocol
(entropy exchange over IRC), with CVSweb at:
<http://cvs.mirbsd.de/ports/net/irssi/files/randex.pl>
<https://www.mirbsd.org/a4rp5bsd.htm> when it's done being written.
COPYRIGHT AND LICENSE
Copyright (c) 2008, 2009 Thorsten "mirabilos" Glaser Copyright (c) 2009
Benny Siegert
This module is covered by the MirOS Licence:
<http://mirbsd.de/MirOS-Licence>
The original C implementation of arc4random_uniform was contributed by
Damien Miller from OpenBSD, with simplifications by Jinmei Tatuya.
perl v5.8.8 2009-11-29 BSD::arc4random(3p)