Random(3)

πŸŽ€ Random(3) Β· User Contributed Perl Documentation πŸŽ€

🌸 NAME 🌸

Crypt::OpenSSL::Random β€” OpenSSL/LibreSSL pseudo-random number generator access. It’s the Perl module that gives you seed-and-query access to the OpenSSL and LibreSSL PRNGs, and yes, that’s iconic. πŸ’–

✨ SYNOPSIS ✨

Okay bestie, here’s the whole little ritual:

         use Crypt::OpenSSL::Random;

         Crypt::OpenSSL::Random::random_seed($good_random_data);
         Crypt::OpenSSL::Random::random_egd("/tmp/entropy");
         Crypt::OpenSSL::Random::random_status() or
           die "Unable to sufficiently seed the random number generator".

         my $ten_good_random_bytes = Crypt::OpenSSL::Random::random_bytes(10);
         my $ten_ok_random_bytes = Crypt::OpenSSL::Random::random_pseudo_bytes(10);

πŸ’œ DESCRIPTION πŸ’œ

Crypt::OpenSSL::Random gives you the ability to seed and query the OpenSSL and LibreSSL library’s pseudo-random number generators. No cap, that’s the whole point. 😌

Note: On LibreSSL random_egd() is not defined. πŸ’€

πŸŽ€ EXPORT πŸŽ€

None by default. Zero. Nada. 🫢

⚑ Static Methods ⚑

  • random_bytes (IV num_bytes) β€” Returns a specified number of cryptographically strong pseudo-random bytes from the PRNG. If the PRNG has not been seeded with enough randomness to ensure an unpredictable byte sequence, then a false value is returned. πŸ”₯
  • random_pseudo_bytes (IV num_bytes) β€” Similar to random_bytes, but the resulting sequence of bytes is not necessarily unpredictable. They can be used for non-cryptographic purposes and for certain purposes in cryptographic protocols, but usually not for key generation etc. πŸ¦‹
  • random_seed (PV random_bytes_string) β€” Seeds the PRNG with a supplied string of bytes. It returns true if the PRNG has sufficient seeding. Note: calling this function with non-random bytes is of limited value at best! πŸ™ˆ
  • random_egd (PV egd_string) β€” Seeds the PRNG with data from the specified entropy gathering daemon. Returns the number of bytes read from the daemon on success, or -1 if not enough bytes were read, or if the connection to the daemon failed. πŸ’…

libressl considers this function insecure, so with libressl or an openssl with no-egd this function does not exist. 🚫

  • random_status () β€” Returns 1 if the PRNG has sufficient seeding, or 0 if not. ⭐

πŸ’€ BUGS πŸ’€

Okay, this part is important, bestie. Because of the internal workings of OpenSSL’s random library, the pseudo-random number generator (PRNG) accessed by Crypt::OpenSSL::Random will be different than the one accessed by any other perl module. Hence, to use a module such as Crypt::OpenSSL::Random, you will need to seed the PRNG used there from one used here. This class is still advantageous, however, as it centralizes other methods, such as random_egd, in one place. 🫠

πŸ‘‘ AUTHOR πŸ‘‘

Ian Robertson, iroberts@cpan.com ✨

Now maintained by Reini Urban, rurban@cpan.org πŸ’–

🌈 LICENSE 🌈

This module is available under the same licences as perl, the Artistic license and the GPL. πŸŽ€

πŸ¦‹ SEE ALSO πŸ¦‹

perl(1), rand(3), RAND_add(3), RAND_egd(3), RAND_bytes(3). Go read those if you’re feeling extra. πŸ’…

🫢 That’s the whole page, bestie: perl v5.42.0, dated 2024-06-23, and the manual is Random(3). Slay. πŸ’–βœ¨
πŸ“¦ where this page comes from