summaryrefslogtreecommitdiffstats
path: root/test
diff options
context:
space:
mode:
authorPauli <ppzgs1@gmail.com>2021-02-27 12:17:57 +1000
committerPauli <ppzgs1@gmail.com>2021-03-02 13:23:17 +1000
commit740582cfaffb26c60c72cdc789b39da5c7ec8c66 (patch)
tree33010462cbf45721335060b5c711f0f2bf2c208a /test
parentfccdb61aee9538268e2eecfdc5b1e31327803ee4 (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)
Diffstat (limited to 'test')
-rw-r--r--test/testutil.h5
-rw-r--r--test/testutil/fake_random.c16
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);
}