RAND_LOAD_FILE(3ossl)

πŸ’– RAND_LOAD_FILE β€” PRNG seed file shenanigans ✨

okay bestie, this is the RAND_LOAD_FILE(3ossl) page from the OpenSSL crew, and we're gonna talk about how the PRNG keeps its lil seed file. it's giving "saving your game progress" but for randomness πŸŽ€


🌸 SYNOPSIS 🌸

#include <openssl/rand.h>

int RAND_load_file(const char *filename, long max_bytes);

int RAND_write_file(const char *filename);

const char *RAND_file_name(char *buf, size_t num);

✨ DESCRIPTION ✨

πŸ’… RAND_load_file()

so RAND_load_file() reads a number of bytes from the file filename and adds them into the PRNG. feeding the vibes, basically 🫢

  • if max_bytes is nonnegative, up to max_bytes get read.
  • if max_bytes is -1, the complete file gets read β€” unless the file is not a regular file, in which case a fixed number of bytes gets attempted instead, and that number is 256 in the current implementation.
  • ngl, RAND_load_file() can read less than the complete file or the requested number of bytes if it doesn't fit in the return value type. so don't come for it 😭
🚨 do NOT load the same file multiple times unless its contents have been updated by RAND_write_file() between reads. fr fr.

also, filename should be adequately protected so that an attacker cannot replace or examine the contents. this is the important part, bestie, do not skip it πŸ’€

and if filename is not a regular file, then the user is considered responsible for any side effects β€” e.g. non-anticipated blocking, or capture of the controlling terminal. main character energy but make it your problem πŸ™ˆ

πŸ¦‹ RAND_write_file()

RAND_write_file() writes a number of random bytes to the file filename. that number is currently 128, and those bytes can be used to initialize the PRNG by calling RAND_load_file() in a later session. it's literally a lil time capsule for your entropy ⭐

🧚 RAND_file_name()

RAND_file_name() generates a default path for the random seed file. buf points to a buffer of size num in which to store the filename. slay.

on all systems, if the environment variable RANDFILE is set, its value will be used as the seed filename. otherwise the file is called .rnd, found in platform dependent locations:

  • On Windows (in order of preference)
%HOME%, %USERPROFILE%, %SYSTEMROOT%, C:\
  • On VMS
SYS$LOGIN:
  • On all other systems
$HOME

if $HOME (on non-Windows and non-VMS systems) is not set either, or num is too small for the pathname, an error occurs. no home, no seed, no service 😭


πŸ”₯ RETURN VALUES πŸ”₯

  • RAND_load_file() returns the number of bytes read, or -1 on error.
  • RAND_write_file() returns the number of bytes written, or -1 if the bytes written were generated without appropriate seeding. 🚩
  • RAND_file_name() returns a pointer to buf on success, and NULL on error.

πŸ‘‘ SEE ALSO πŸ‘‘

RAND_add(3), RAND_bytes(3), RAND(7)


Copyright 2000-2025 The OpenSSL Project Authors. All Rights Reserved.

Licensed under the Apache License 2.0 (the "License"). You may not use this file except in compliance with the License. You can obtain a copy in the file LICENSE in the source distribution or at <https://www.openssl.org/source/license.html>.


okay that's the whole page, periodt πŸ’– this was version 3.5.9 from 2026-09-29, and yes the header said RAND_LOAD_FILE(3ossl) the whole time. stan a well-documented PRNG seed file. bye bestie πŸŽ€βœ¨

πŸ“¦ where this page comes from