From: Pauli Date: Sat, 27 Feb 2021 02:17:57 +0000 (+1000) Subject: test: add utility function to set the fake random callback on both the public and... X-Git-Tag: openssl-3.0.0-alpha13~90 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=740582cfaffb26c60c72cdc789b39da5c7ec8c66;p=thirdparty%2Fopenssl.git test: add utility function to set the fake random callback on both the public and private instances Reviewed-by: Tomas Mraz Reviewed-by: Shane Lontis (Merged from https://github.com/openssl/openssl/pull/14341) --- diff --git a/test/testutil.h b/test/testutil.h index 8989b1f7356..8457a2a3842 100644 --- a/test/testutil.h +++ b/test/testutil.h @@ -567,11 +567,16 @@ uint32_t test_random(void); void test_random_seed(uint32_t sd); /* Fake non-secure random number generator */ +typedef int fake_random_generate_cb(unsigned char *out, size_t outlen, + const char *name, EVP_RAND_CTX *ctx); + OSSL_PROVIDER *fake_rand_start(OSSL_LIB_CTX *libctx); void fake_rand_finish(OSSL_PROVIDER *p); void fake_rand_set_callback(EVP_RAND_CTX *ctx, int (*cb)(unsigned char *out, size_t outlen, const char *name, EVP_RAND_CTX *ctx)); +void fake_rand_set_public_private_callbacks(OSSL_LIB_CTX *libctx, + fake_random_generate_cb *cb); /* Create a file path from a directory and a filename */ char *test_mk_file_path(const char *dir, const char *file); diff --git a/test/testutil/fake_random.c b/test/testutil/fake_random.c index 537755cde72..bdd48d394c4 100644 --- a/test/testutil/fake_random.c +++ b/test/testutil/fake_random.c @@ -17,8 +17,7 @@ #include "../testutil.h" typedef struct { - int (*cb)(unsigned char *out, size_t outlen, - const char *name, EVP_RAND_CTX *ctx); + fake_random_generate_cb *cb; int state; const char *name; EVP_RAND_CTX *ctx; @@ -216,8 +215,17 @@ void fake_rand_set_callback(EVP_RAND_CTX *rng, int (*cb)(unsigned char *out, size_t outlen, const char *name, EVP_RAND_CTX *ctx)) { - FAKE_RAND *f = rng->data; + if (rng != NULL) + ((FAKE_RAND *)rng->data)->cb = cb; +} - f->cb = cb; +void fake_rand_set_public_private_callbacks(OSSL_LIB_CTX *libctx, + int (*cb)(unsigned char *out, + size_t outlen, + const char *name, + EVP_RAND_CTX *ctx)) +{ + fake_rand_set_callback(RAND_get0_private(libctx), cb); + fake_rand_set_callback(RAND_get0_public(libctx), cb); }