NAME
    Crypt::Random - Cryptographically Secure, True Random Number Generator.

SYNOPSIS
     use Crypt::Random qw( makerandom ); 
     my $r = makerandom ( Size => 512, Strength => 1 );

DESCRIPTION
    Crypt::Random is an interface module to the /dev/random and /dev/urandom
    device found on most modern unix systems. It also interfaces with egd, a
    user space entropy gathering daemon, available for systems where
    /dev/random (or similar) devices are not available. When Math::Pari is
    installed, Crypt::Random can generate random integers of arbitrary size
    of a given bitsize or in a specified interval.

ALTERNATIVES
    Crypt::Random has numerous options for obtaining randomness. If you
    would prefer a simpler module that provides cryptographic grade
    randomness Crypt::URandom should be considered.

    The CPANSec group has developed the CPAN Author's Guide to Random Data
    for Security
    <https://security.metacpan.org/docs/guides/random-data-for-security.html
    > that should be reviewed before dealing with randomness.

BLOCKING BEHAVIOUR
    Since kernel version 5.6 in 2020, /dev/random is no longer blocking and
    there is effectively no difference between /dev/random and /dev/urandom.
    Indeed there has been no difference in the quality of randomness from
    either in many years. /dev/random now only blocks on startup of the
    system and only for a very short time.

HARDWARE RNG
    If there's a hardware random number generator available, for instance
    the Intel i8x0 random number generator, you can use it instead of
    /dev/random or /dev/urandom. Usually your OS will provide access to the
    RNG as a device, eg (/dev/intel_rng).

METHODS
    makerandom()
        Generates a random number of requested bitsize in base 10. Following
        arguments can be specified.

        Size
            Bitsize of the random number.

        Provider
            Specifies the name of the Provider to be used. Specifying a
            Provider overrides Strength.

            Options are:

            devrandom
                Uses /dev/random to generate randomness.

            devurandom
                Uses /dev/urandom to generate randomness.

            Win32API
                Uses the Windows API SystemFunction036 (RtlGenRandom) to
                generate randomness on Windows Operating Systems.

            egd (INSECURE)
                An Entropy Gathering Daemon (egd) daemon is read to obtain
                randomness. As egd has not been updated since 2002 it has
                been moved to the low strength provider list.

            rand
                Generates randomness based on Perl's Crypt::URandom urandom
                function.

        Strength 0 || 1
            Value of 1 implies that /dev/random or /dev/urandom should be
            used for requesting random bits while 0 implies insecure
            including rand.

            As of release 1.55 Strength defaults to 1 (/dev/random or
            /dev/urandom or rand (using Crypt::URandom::urandom))

        Device
            Alternate device to request random bits from.

        Uniform 0 || 1
            Value of 0 (default) implies that the high bit of the generated
            random number is always set, ensuring the bitsize of the
            generated random will be exactly Size bits. For uniformly
            distributed random numbers, Uniform should be set to 1.

    makerandom_itv()
        Generates a random number in the specified interval. In addition to
        the arguments to makerandom() following attributes can be specified.

        Lower
            Inclusive Lower limit.

        Upper
            Exclusive Upper limit.

    makerandom_octet()
        Generates a random octet string of specified length. In addition to
        Strength, Device and Verbosity, following arguments can be
        specified.

        Length
            Length of the desired octet string.

        Skip
            An octet string consisting of characters to be skipped while
            reading from the random device.

DEPENDENCIES
    Crypt::Random needs Math::Pari 2.001802 or higher.

SEE ALSO
    Crypt::URandom should be considered as simpler module for obtaining
    cryptographically secure source of Randomness.

    The CPANSec group has developed the CPAN Author's Guide to Random Data
    for Security
    <https://security.metacpan.org/docs/guides/random-data-for-security.html
    > that should be reviewed before dealing with randomness.

BIBLIOGRAPHY
    1 random.c by Theodore Ts'o. Found in drivers/char directory of the
    Linux kernel sources.
    2 Handbook of Applied Cryptography by Menezes, Paul C. van Oorschot and
    Scott Vanstone.

LICENSE
    This is free software; you can redistribute it and/or modify it under
    the same terms as the Perl 5 programming language system itself.

AUTHOR
    Vipul Ved Prakash, <mail@vipul.net>

