NAME
Sys::GetRandom - Perl interface to getrandom(2)
SYNOPSIS
use Sys::GetRandom qw(getrandom random_bytes GRND_NONBLOCK GRND_RANDOM);
my $n = getrandom($buf, $count, $flags, $offset);
my $bytes = random_bytes($count);
DESCRIPTION
This module provides a Perl interface to the getrandom(2) call present on Linux and FreeBSD. It exports (on request) two functions and two constants.
Functions
- getrandom SCALAR, LENGTH
- getrandom SCALAR, LENGTH, FLAGS
- getrandom SCALAR, LENGTH, FLAGS, OFFSET
-
Generates up to LENGTH bytes of random data and stores them in SCALAR. Returns the number of random bytes generated, or
undef
on error (in which case$!
is also set).By default,
getrandom
is equivalent to reading from /dev/urandom (but without accessing the file system or requiring the use of a file descriptor). If /dev/urandom has not been initialized yet,getrandom
will block by default.If /dev/urandom has been initialized and LENGTH is 256 or less,
getrandom
will atomically return the requested amount of random data (i.e. it will generate exactly LENGTH bytes of data and will not be interrupted by a signal). For larger values of LENGTH it may be interrupted by signals and either generate fewer random bytes than requested or fail with$!
set toEINTR
.The FLAGS argument must be either 0 (the default value) or the bitwise OR of one or more of the following flags:
GRND_RANDOM
-
Read from the same source as /dev/random, not /dev/urandom (the default).
GRND_NONBLOCK
-
By default,
getrandom
will block if /dev/urandom has not been initialized yet or (withGRND_RANDOM
) if there are no random bytes available in /dev/random. If theGRND_NONBLOCK
flag is passed, it will fail immediately instead, returningundef
and setting$!
toEAGAIN
.
By default, the generated bytes are placed at the beginning of SCALAR. You can pass a positive value for OFFSET to place them within the string, leaving the first OFFSET bytes unchanged.
- random_bytes LENGTH
-
Generates and returns a string of LENGTH random bytes.
LENGTH must be between 0 and 256 (inclusive).
This is just a wrapper around
getrandom
with default flags.
AUTHOR
Lukas Mai, <lmai at web.de>
COPYRIGHT & LICENSE
Copyright 2023 Lukas Mai.
This program is free software; you can redistribute it and/or modify it under the terms of either: the GNU General Public License as published by the Free Software Foundation; or the Artistic License.
See https://dev.perl.org/licenses/ for more information.