return 1;
}
+static CRYPTO_ONCE add_all_kdfs = CRYPTO_ONCE_STATIC_INIT;
+DEFINE_RUN_ONCE_STATIC(ossl_init_add_all_kdfs)
+{
+ /*
+ * OPENSSL_NO_AUTOALGINIT is provided here to prevent at compile time
+ * pulling in all the macs during static linking
+ */
+#ifndef OPENSSL_NO_AUTOALGINIT
+ OSSL_TRACE(INIT, "openssl_add_all_kdfs_int()\n");
+ openssl_add_all_kdfs_int();
+#endif
+ return 1;
+}
+
+DEFINE_RUN_ONCE_STATIC_ALT(ossl_init_no_add_all_kdfs, ossl_init_add_all_kdfs)
+{
+ /* Do nothing */
+ return 1;
+}
+
static CRYPTO_ONCE config = CRYPTO_ONCE_STATIC_INIT;
static int config_inited = 0;
static const OPENSSL_INIT_SETTINGS *conf_settings = NULL;
OSSL_TRACE(INIT, "OPENSSL_cleanup: rand_cleanup_int()\n");
rand_cleanup_int();
- OSSL_TRACE(INIT, "OPENSSL_cleanup: rand_drbg_cleanup_int()\n");
- rand_drbg_cleanup_int();
-
OSSL_TRACE(INIT, "OPENSSL_cleanup: conf_modules_free_int()\n");
conf_modules_free_int();
&& !RUN_ONCE(&add_all_macs, ossl_init_add_all_macs))
return 0;
+ if ((opts & OPENSSL_INIT_NO_ADD_ALL_KDFS)
+ && !RUN_ONCE_ALT(&add_all_kdfs, ossl_init_no_add_all_kdfs,
+ ossl_init_add_all_kdfs))
+ return 0;
+
+ if ((opts & OPENSSL_INIT_ADD_ALL_KDFS)
+ && !RUN_ONCE(&add_all_kdfs, ossl_init_add_all_kdfs))
+ return 0;
+
if ((opts & OPENSSL_INIT_ATFORK)
&& !openssl_init_fork_handlers())
return 0;
void OPENSSL_fork_child(void)
{
rand_fork();
+ /* TODO(3.0): Inform all providers about a fork event */
}
#endif