EVP_RAND-TEST-RAND(7SSL)

πŸ’– EVP_RAND-TEST-RAND πŸ’–

okay bestie, welcome to the 7SSL manual page for EVP_RAND-TEST-RAND β€” yes that's the manual name right there in the title, iykyk ✨

🌸 NAME 🌸

EVP_RAND-TEST-RAND β€” the test EVP_RAND implementation πŸ§ͺ


✨ DESCRIPTION ✨

So basically there's support for a test generator through the EVP_RAND API. Girl, listen. This generator is for test purposes ONLY β€” it does not generate random numbers. It is NOT giving cryptographically secure. It is giving testing. πŸ’€

πŸŽ€ Identity πŸŽ€

"TEST-RAND" is the name for this implementation, and you can use it with the EVP_RAND_fetch() function. That's the whole vibe check 🫢

πŸ’… Supported parameters πŸ’…

Here's the tea, the supported parameters are:

  • "state" (OSSL_RAND_PARAM_STATE) <integer>
  • "fips-indicator" (OSSL_RAND_PARAM_FIPS_APPROVED_INDICATOR) <integer>

These parameter works as described in "PARAMETERS" in EVP_RAND(3). (yes bestie, the original says "These parameter works", we are keeping that, no edits, periodt πŸ’…)

  • "strength" (OSSL_RAND_PARAM_STRENGTH) <unsigned integer>
  • "reseed_requests" (OSSL_DRBG_PARAM_RESEED_REQUESTS) <unsigned integer>
  • "reseed_time_interval" (OSSL_DRBG_PARAM_RESEED_TIME_INTERVAL) <integer>
  • "max_request" (OSSL_DRBG_PARAM_RESEED_REQUESTS) <unsigned integer>
  • "min_entropylen" (OSSL_DRBG_PARAM_MIN_ENTROPYLEN) <unsigned integer>
  • "max_entropylen" (OSSL_DRBG_PARAM_MAX_ENTROPYLEN) <unsigned integer>
  • "min_noncelen" (OSSL_DRBG_PARAM_MIN_NONCELEN) <unsigned integer>
  • "max_noncelen" (OSSL_DRBG_PARAM_MAX_NONCELEN) <unsigned integer>
  • "max_perslen" (OSSL_DRBG_PARAM_MAX_PERSLEN) <unsigned integer>
  • "max_adinlen" (OSSL_DRBG_PARAM_MAX_ADINLEN) <unsigned integer>
  • "reseed_counter" (OSSL_DRBG_PARAM_RESEED_COUNTER) <unsigned integer>

All of these work as described in "PARAMETERS" in EVP_RAND(3) ✨ β€” with the cute little twist that they can all be set as well as read. Set and read, bestie, both directions, we love a flexible icon πŸ‘‘

  • "test_entropy" (OSSL_RAND_PARAM_TEST_ENTROPY) <octet string>

This one sets the bytes that get returned when the test generator is sent an entropy request. The current position is remembered across generate calls. And if there aren't enough data present to satisfy a call? An error is returned. So don't come up short, bestie 😭

  • "test_nonce" (OSSL_RAND_PARAM_TEST_NONCE) <octet string>

This sets the bytes returned when the test generator is sent a nonce request. Every single nonce request will return all of the bytes β€” the whole thing, no skimping 🌈

  • "generate" (OSSL_RAND_PARAM_GENERATE) <integer>

If this parameter is zero, it will only emit the nonce and entropy data supplied via the aforementioned parameters. Otherwise, low quality non-cryptographic pseudorandom output is produced. This parameter defaults to zero. πŸ“


πŸ“ NOTES πŸ“

You can get yourself a context for a test generator by calling this, bestie:

EVP_RAND *rand = EVP_RAND_fetch(NULL, "TEST-RAND", NULL);
EVP_RAND_CTX *rctx = EVP_RAND_CTX_new(rand, NULL);

πŸ”₯ EXAMPLES πŸ”₯

Here's the whole serve, verbatim, no cap:

EVP_RAND *rand;
EVP_RAND_CTX *rctx;
unsigned char bytes[100];
OSSL_PARAM params[4], *p = params;
unsigned char entropy[1000] = { ... };
unsigned char nonce[20] = { ... };
unsigned int strength = 48;

rand = EVP_RAND_fetch(NULL, "TEST-RAND", NULL);
rctx = EVP_RAND_CTX_new(rand, NULL);
EVP_RAND_free(rand);

*p++ = OSSL_PARAM_construct_uint(OSSL_RAND_PARAM_STRENGTH, &strength);
*p++ = OSSL_PARAM_construct_octet_string(OSSL_RAND_PARAM_TEST_ENTROPY,
                                         entropy, sizeof(entropy));
*p++ = OSSL_PARAM_construct_octet_string(OSSL_RAND_PARAM_TEST_NONCE,
                                         nonce, sizeof(nonce));
*p = OSSL_PARAM_construct_end();
EVP_RAND_instantiate(rctx, strength, 0, NULL, 0, params);

EVP_RAND_generate(rctx, bytes, sizeof(bytes), strength, 0, NULL, 0);

EVP_RAND_CTX_free(rctx);

πŸ‘€ SEE ALSO πŸ‘€

EVP_RAND(3), "PARAMETERS" in EVP_RAND(3) πŸ¦‹


🌈 HISTORY 🌈

This functionality was added in OpenSSL 3.0. throwback era ✨


Copyright 2020-2024 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, bestie! this was EVP_RAND-TEST-RAND(7SSL) from OpenSSL version 4.0.3, dated 2026-09-29 β€” and that's on periodt, don't forget it πŸ’…βœ¨πŸ«Ά

πŸ“¦ where this page comes from