test: add utility function to set the fake random callback on both the public and...
authorPauli <ppzgs1@gmail.com>
Sat, 27 Feb 2021 02:17:57 +0000 (12:17 +1000)
committerPauli <ppzgs1@gmail.com>
Tue, 2 Mar 2021 03:23:17 +0000 (13:23 +1000)
Reviewed-by: Tomas Mraz <tomas@openssl.org>
Reviewed-by: Shane Lontis <shane.lontis@oracle.com>
(Merged from https://github.com/openssl/openssl/pull/14341)

test/testutil.h
test/testutil/fake_random.c

index 8989b1f73566cec2c87e91ee3baf7239fceb3f16..8457a2a3842bac126aa603f65ee4509dd3aa3bcf 100644 (file)
@@ -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);
index 537755cde722be0899e53d680792ebfb63a87d56..bdd48d394c48e4a0f07d0c78bd086aa036a59a57 100644 (file)
@@ -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);
 }