From 59f124f90f52395c240fcd2f387a91234b0d25be Mon Sep 17 00:00:00 2001 From: "Dr. Matthias St. Pierre" Date: Mon, 19 Mar 2018 21:11:50 +0100 Subject: [PATCH] Fix: drbgtest fails when tests are executed in random order [extended tests] The test_rand_reseed assumed that the global DRBGs were not used previously. This assumption is false when the tests are executed in random order (OPENSSL_TEST_RAND_ORDER). So we uninstantiate them first and add a test for the first instantiation. Reviewed-by: Richard Levitte (Merged from https://github.com/openssl/openssl/pull/5680) --- test/drbgtest.c | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/test/drbgtest.c b/test/drbgtest.c index ca8a211391..bef504ebd1 100644 --- a/test/drbgtest.c +++ b/test/drbgtest.c @@ -691,13 +691,28 @@ static int test_rand_reseed(void) || !TEST_ptr_eq(private->parent, master)) return 0; + /* uninstantiate the three global DRBGs */ + RAND_DRBG_uninstantiate(private); + RAND_DRBG_uninstantiate(public); + RAND_DRBG_uninstantiate(master); + + /* Install hooks for the following tests */ hook_drbg(master, &master_ctx); hook_drbg(public, &public_ctx); hook_drbg(private, &private_ctx); + /* - * Test initial state of shared DRBs + * Test initial seeding of shared DRBGs + */ + if (!TEST_true(test_drbg_reseed(1, master, public, private, 1, 1, 1))) + goto error; + reset_drbg_hook_ctx(); + + + /* + * Test initial state of shared DRBGs */ if (!TEST_true(test_drbg_reseed(1, master, public, private, 0, 0, 0))) goto error;