diff options
author | Pauli <ppzgs1@gmail.com> | 2021-02-27 12:17:57 +1000 |
---|---|---|
committer | Pauli <ppzgs1@gmail.com> | 2021-03-02 13:23:17 +1000 |
commit | 740582cfaffb26c60c72cdc789b39da5c7ec8c66 (patch) | |
tree | 33010462cbf45721335060b5c711f0f2bf2c208a | |
parent | fccdb61aee9538268e2eecfdc5b1e31327803ee4 (diff) |
test: add utility function to set the fake random callback on both the public and private instances
Reviewed-by: Tomas Mraz <tomas@openssl.org>
Reviewed-by: Shane Lontis <shane.lontis@oracle.com>
(Merged from https://github.com/openssl/openssl/pull/14341)
-rw-r--r-- | test/testutil.h | 5 | ||||
-rw-r--r-- | test/testutil/fake_random.c | 16 |
2 files changed, 17 insertions, 4 deletions
diff --git a/test/testutil.h b/test/testutil.h index 8989b1f735..8457a2a384 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 537755cde7..bdd48d394c 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); } |