From: Matt Caswell Date: Wed, 6 Apr 2016 10:19:55 +0000 (+0100) Subject: Deprecate RAND_cleanup() and make it a no-op X-Git-Tag: OpenSSL_1_1_0-pre5~69 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=f3cd81d6538e6295eaa279acd65ad10faeccd2ed;p=openssl Deprecate RAND_cleanup() and make it a no-op RAND_cleanup() should not be called expicitly - we should leave auto-deinit to clean this up instead. Reviewed-by: Tim Hudson Reviewed-by: Richard Levitte --- diff --git a/apps/speed.c b/apps/speed.c index 68d6f0f58a..b2c247f68d 100644 --- a/apps/speed.c +++ b/apps/speed.c @@ -313,7 +313,6 @@ static double ecdh_results[EC_NUM][1]; #if !defined(OPENSSL_NO_DSA) || !defined(OPENSSL_NO_EC) static const char rnd_seed[] = "string to make the random number generator think it has entropy"; -static int rnd_fake = 0; #endif #ifdef SIGALRM @@ -2448,7 +2447,6 @@ int speed_main(int argc, char **argv) #ifndef OPENSSL_NO_DSA if (RAND_status() != 1) { RAND_seed(rnd_seed, sizeof rnd_seed); - rnd_fake = 1; } for (testnum = 0; testnum < DSA_NUM; testnum++) { int st = 0; @@ -2512,14 +2510,11 @@ int speed_main(int argc, char **argv) dsa_doit[testnum] = 0; } } - if (rnd_fake) - RAND_cleanup(); #endif #ifndef OPENSSL_NO_EC if (RAND_status() != 1) { RAND_seed(rnd_seed, sizeof rnd_seed); - rnd_fake = 1; } for (testnum = 0; testnum < EC_NUM; testnum++) { int st = 1; @@ -2601,14 +2596,11 @@ int speed_main(int argc, char **argv) } } } - if (rnd_fake) - RAND_cleanup(); #endif #ifndef OPENSSL_NO_EC if (RAND_status() != 1) { RAND_seed(rnd_seed, sizeof rnd_seed); - rnd_fake = 1; } for (testnum = 0; testnum < EC_NUM; testnum++) { if (!ecdh_doit[testnum]) @@ -2700,8 +2692,6 @@ int speed_main(int argc, char **argv) ecdh_doit[testnum] = 0; } } - if (rnd_fake) - RAND_cleanup(); #endif #ifndef NO_FORK show_res: diff --git a/apps/testdsa.h b/apps/testdsa.h index 6519948fe6..c72c71ecce 100644 --- a/apps/testdsa.h +++ b/apps/testdsa.h @@ -328,6 +328,3 @@ DSA *get_dsa2048() return NULL; } -static const char rnd_seed[] = - "string to make the random number generator think it has entropy"; -static int rnd_fake = 0; diff --git a/crypto/include/internal/rand.h b/crypto/include/internal/rand.h new file mode 100644 index 0000000000..f1a9389425 --- /dev/null +++ b/crypto/include/internal/rand.h @@ -0,0 +1,11 @@ +/* + * Licensed under the OpenSSL licenses, (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * https://www.openssl.org/source/license.html + * or in the file LICENSE in the source distribution. + */ + +#include + +void rand_cleanup_intern(void); diff --git a/crypto/init.c b/crypto/init.c index 3699145ac6..d93f282818 100644 --- a/crypto/init.c +++ b/crypto/init.c @@ -58,7 +58,7 @@ #include #include #include -#include +#include #include #include #include @@ -453,7 +453,7 @@ void OPENSSL_cleanup(void) #ifdef OPENSSL_INIT_DEBUG fprintf(stderr, "OPENSSL_INIT: OPENSSL_cleanup: " - "RAND_cleanup()\n"); + "rand_cleanup_intern()\n"); fprintf(stderr, "OPENSSL_INIT: OPENSSL_cleanup: " "CONF_modules_free()\n"); #ifndef OPENSSL_NO_ENGINE @@ -471,14 +471,14 @@ void OPENSSL_cleanup(void) #endif /* * Note that cleanup order is important: - * - RAND_cleanup could call an ENINGE's RAND cleanup function so must be - * called before ENGINE_cleanup() + * - rand_cleanup_intern could call an ENINGE's RAND cleanup function so + * must be called before ENGINE_cleanup() * - ENGINEs use CRYPTO_EX_DATA and therefore, must be cleaned up * before the ex data handlers are wiped in CRYPTO_cleanup_all_ex_data(). * - CONF_modules_free() can end up in ENGINE code so must be called before * ENGINE_cleanup() */ - RAND_cleanup(); + rand_cleanup_intern(); CONF_modules_free(); #ifndef OPENSSL_NO_ENGINE ENGINE_cleanup(); diff --git a/crypto/rand/rand_lib.c b/crypto/rand/rand_lib.c index 36b41cda80..f5998f80aa 100644 --- a/crypto/rand/rand_lib.c +++ b/crypto/rand/rand_lib.c @@ -59,7 +59,7 @@ #include #include "internal/cryptlib.h" #include -#include +#include "internal/rand.h" #include @@ -125,7 +125,7 @@ int RAND_set_rand_engine(ENGINE *engine) } #endif -void RAND_cleanup(void) +void rand_cleanup_intern(void) { const RAND_METHOD *meth = RAND_get_rand_method(); if (meth && meth->cleanup) diff --git a/doc/crypto/RAND_cleanup.pod b/doc/crypto/RAND_cleanup.pod index 88efb9a048..b5c43eab36 100644 --- a/doc/crypto/RAND_cleanup.pod +++ b/doc/crypto/RAND_cleanup.pod @@ -8,11 +8,15 @@ RAND_cleanup - erase the PRNG state #include - void RAND_cleanup(void); + #if OPENSSL_API_COMPAT < 0x10100000L + # define RAND_cleanup() + #endif =head1 DESCRIPTION -RAND_cleanup() erases the memory used by the PRNG. +Prior to OpenSSL 1.1.0 RAND_cleanup() erases the memory used by the PRNG. This +function is deprecated and as of version 1.1.0 does nothing. No explicit +initialisation or de-initialisation is necessary. See L. =head1 RETURN VALUE @@ -22,4 +26,8 @@ RAND_cleanup() returns no value. L +=head1 HISTORY + +RAND_cleanup() was deprecated in OpenSSL 1.1.0. + =cut diff --git a/doc/crypto/RAND_set_rand_method.pod b/doc/crypto/RAND_set_rand_method.pod index 533d577fa6..01babe6036 100644 --- a/doc/crypto/RAND_set_rand_method.pod +++ b/doc/crypto/RAND_set_rand_method.pod @@ -46,7 +46,7 @@ API is being used, so this function is no longer recommended. } RAND_METHOD; The components point to the implementation of RAND_seed(), -RAND_bytes(), RAND_cleanup(), RAND_add(), RAND_pseudo_rand() +RAND_bytes(), internal RAND cleanup, RAND_add(), RAND_pseudo_rand() and RAND_status(). Each component may be NULL if the function is not implemented. diff --git a/doc/crypto/rand.pod b/doc/crypto/rand.pod index 27a6787dbe..7d9605011b 100644 --- a/doc/crypto/rand.pod +++ b/doc/crypto/rand.pod @@ -27,12 +27,16 @@ rand - pseudo-random number generator const RAND_METHOD *RAND_get_rand_method(void); RAND_METHOD *RAND_OpenSSL(void); - void RAND_cleanup(void); - /* For Win32 only */ void RAND_screen(void); int RAND_event(UINT, WPARAM, LPARAM); +Deprecated: + + #if OPENSSL_API_COMPAT < 0x10100000L + # define RAND_cleanup() + #endif + =head1 DESCRIPTION Since the introduction of the ENGINE API, the recommended way of controlling diff --git a/include/openssl/rand.h b/include/openssl/rand.h index 2a9a85c1f1..75f7389ebd 100644 --- a/include/openssl/rand.h +++ b/include/openssl/rand.h @@ -92,7 +92,9 @@ const RAND_METHOD *RAND_get_rand_method(void); int RAND_set_rand_engine(ENGINE *engine); # endif RAND_METHOD *RAND_OpenSSL(void); -void RAND_cleanup(void); +#if OPENSSL_API_COMPAT < 0x10100000L +# define RAND_cleanup() +#endif int RAND_bytes(unsigned char *buf, int num); DEPRECATEDIN_1_1_0(int RAND_pseudo_bytes(unsigned char *buf, int num)) void RAND_seed(const void *buf, int num);