Auto init/deinit libcrypto
authorMatt Caswell <matt@openssl.org>
Mon, 8 Feb 2016 16:43:03 +0000 (16:43 +0000)
committerMatt Caswell <matt@openssl.org>
Tue, 9 Feb 2016 15:11:38 +0000 (15:11 +0000)
This builds on the previous commit to auto initialise/deinitialise
libcrypto.

Reviewed-by: Richard Levitte <levitte@openssl.org>
45 files changed:
apps/s_client.c
apps/s_server.c
crypto/async/arch/async_null.c
crypto/async/arch/async_null.h
crypto/async/arch/async_posix.c
crypto/async/arch/async_posix.h
crypto/async/arch/async_win.c
crypto/async/arch/async_win.h
crypto/async/async.c
crypto/async/async_locl.h
crypto/comp/c_zlib.c
crypto/conf/conf_sap.c
crypto/cryptlib.c
crypto/engine/eng_cryptodev.c
crypto/engine/eng_dyn.c
crypto/engine/eng_int.h
crypto/engine/eng_openssl.c
crypto/engine/eng_rdrand.c
crypto/err/err.c
crypto/err/err_all.c
crypto/evp/Makefile.in
crypto/evp/c_all.c [deleted file]
crypto/evp/c_allc.c
crypto/evp/c_alld.c
crypto/evp/names.c
crypto/include/internal/async.h [new file with mode: 0644]
crypto/include/internal/conf.h [moved from crypto/evp/evp_acnf.c with 85% similarity]
crypto/include/internal/engine.h [new file with mode: 0644]
crypto/include/internal/err.h [new file with mode: 0644]
crypto/include/internal/evp_int.h
crypto/init.c
crypto/lock.c
engines/e_capi.c
engines/e_dasync.c
engines/e_ossltest.c
engines/e_padlock.c
include/openssl/async.h
include/openssl/conf.h
include/openssl/crypto.h
include/openssl/engine.h
include/openssl/err.h
include/openssl/evp.h
include/openssl/symhacks.h
test/asynctest.c
util/libeay.num

index 8fe16121a93d9945551d47c0623da342b90938a1..c122c1a613f3fb9733eb6eb3f90cc3a2a411a258 100644 (file)
@@ -1504,7 +1504,6 @@ int s_client_main(int argc, char **argv)
 
     if (async) {
         SSL_CTX_set_mode(ctx, SSL_MODE_ASYNC);
-        ASYNC_init(1, 0, 0);
     }
 
     if (!config_ctx(cctx, ssl_args, ctx, jpake_secret == NULL))
@@ -2420,9 +2419,6 @@ int s_client_main(int argc, char **argv)
             print_stuff(bio_c_out, con, 1);
         SSL_free(con);
     }
-    if (async) {
-        ASYNC_cleanup(1);
-    }
 #if !defined(OPENSSL_NO_NEXTPROTONEG)
     OPENSSL_free(next_proto.data);
 #endif
index f07c8f61a96bf1befb6597227d15ef28c59a7524..368558637dc7b0c15ad522bed6ef2bfe61a7e8d6 100644 (file)
@@ -1721,7 +1721,6 @@ int s_server_main(int argc, char *argv[])
 
     if (async) {
         SSL_CTX_set_mode(ctx, SSL_MODE_ASYNC);
-        ASYNC_init(1, 0, 0);
     }
 
 #ifndef OPENSSL_NO_SRTP
@@ -2026,9 +2025,6 @@ int s_server_main(int argc, char *argv[])
     bio_s_out = NULL;
     BIO_free(bio_s_msg);
     bio_s_msg = NULL;
-    if (async) {
-        ASYNC_cleanup(1);
-    }
     return (ret);
 }
 
index d3f686f492f38bdf67c98921f4b072386ac9960e..2b1d28eaf3591f75073fda235f5d2def94c42539 100644 (file)
@@ -80,11 +80,6 @@ int async_global_init(void)
     return 0;
 }
 
-int async_local_init(void)
-{
-    return 0;
-}
-
 void async_local_cleanup(void)
 {
 }
index 93887aec19ad7aae3eb8fdccad216a33c8b6fad5..4cd0a8b96638593b002ae66143263b19673e7632 100644 (file)
@@ -66,7 +66,7 @@ typedef struct async_fibre_st {
 
 
 # define async_set_ctx(nctx)                    0
-# define async_get_ctx()                        ((async_ctx *)NULL)
+# define async_arch_get_ctx()                   ((async_ctx *)NULL)
 # define async_fibre_swapcontext(o,n,r)         0
 # define async_fibre_makecontext(c)             0
 # define async_fibre_free(f)
index 1df77cccbe15321d93be860b308bf20a26966250..57cce7b4c48e84c7e0bb0a5c3d10a3d675d7cc5e 100644 (file)
@@ -72,14 +72,6 @@ int async_global_init(void)
     return 1;
 }
 
-int async_local_init(void)
-{
-    if (!async_set_ctx(NULL) || ! async_set_pool(NULL))
-        return 0;
-
-    return 1;
-}
-
 void async_local_cleanup(void)
 {
 }
index 85d033f8516076e5e843678859f35885265f819d..7f1bdd1cc5f57350c13b5e3ff6137c6f45efabb9 100644 (file)
@@ -78,7 +78,7 @@ typedef struct async_fibre_st {
 } async_fibre;
 
 #  define async_set_ctx(nctx)  (pthread_setspecific(posixctx , (nctx)) == 0)
-#  define async_get_ctx()      ((async_ctx *)pthread_getspecific(posixctx))
+#  define async_arch_get_ctx() ((async_ctx *)pthread_getspecific(posixctx))
 #  define async_set_pool(p)    (pthread_setspecific(posixpool , (p)) == 0)
 #  define async_get_pool()     ((async_pool *)pthread_getspecific(posixpool))
 
index f3de79a73bc77f3bf7477ceb4bd24cc1a4760eea..3f3a005cc2ee473167a982883dbeb16e5e0fd8cd 100644 (file)
@@ -66,7 +66,6 @@ struct winpool {
 
 static DWORD asyncwinpool = 0;
 static DWORD asyncwinctx = 0;
-static DWORD asyncwindispatch = 0;
 
 
 void async_start_func(void);
@@ -75,33 +74,22 @@ int async_global_init(void)
 {
     asyncwinpool = TlsAlloc();
     asyncwinctx = TlsAlloc();
-    asyncwindispatch = TlsAlloc();
-    if (asyncwinpool == TLS_OUT_OF_INDEXES || asyncwinctx == TLS_OUT_OF_INDEXES
-            || asyncwindispatch == TLS_OUT_OF_INDEXES) {
+    if (asyncwinpool == TLS_OUT_OF_INDEXES
+            || asyncwinctx == TLS_OUT_OF_INDEXES) {
         if (asyncwinpool != TLS_OUT_OF_INDEXES) {
             TlsFree(asyncwinpool);
         }
         if (asyncwinctx != TLS_OUT_OF_INDEXES) {
             TlsFree(asyncwinctx);
         }
-        if (asyncwindispatch != TLS_OUT_OF_INDEXES) {
-            TlsFree(asyncwindispatch);
-        }
         return 0;
     }
     return 1;
 }
 
-int async_local_init(void)
-{
-    return (TlsSetValue(asyncwinpool, NULL) != 0)
-        && (TlsSetValue(asyncwinctx, NULL) != 0)
-        && (TlsSetValue(asyncwindispatch, NULL) != 0);
-}
-
 void async_local_cleanup(void)
 {
-    async_ctx *ctx = async_get_ctx();
+    async_ctx *ctx = async_arch_get_ctx();
     if (ctx != NULL) {
         async_fibre *fibre = &ctx->dispatcher;
         if(fibre != NULL && fibre->fibre != NULL && fibre->converted) {
@@ -115,32 +103,24 @@ void async_global_cleanup(void)
 {
     TlsFree(asyncwinpool);
     TlsFree(asyncwinctx);
-    TlsFree(asyncwindispatch);
     asyncwinpool = 0;
     asyncwinctx = 0;
-    asyncwindispatch = 0;
 }
 
 int async_fibre_init_dispatcher(async_fibre *fibre)
 {
     LPVOID dispatcher;
 
-    dispatcher = (LPVOID)TlsGetValue(asyncwindispatch);
-    if (dispatcher == NULL) {
-        fibre->fibre = ConvertThreadToFiber(NULL);
-        if (fibre->fibre == NULL) {
-            fibre->converted = 0;
-            fibre->fibre = GetCurrentFiber();
-            if (fibre->fibre == NULL)
-                return 0;
-        } else {
-            fibre->converted = 1;
-        }
-        if (TlsSetValue(asyncwindispatch, (LPVOID)fibre->fibre) == 0)
+    fibre->fibre = ConvertThreadToFiber(NULL);
+    if (fibre->fibre == NULL) {
+        fibre->converted = 0;
+        fibre->fibre = GetCurrentFiber();
+        if (fibre->fibre == NULL)
             return 0;
     } else {
-        fibre->fibre = dispatcher;
+        fibre->converted = 1;
     }
+
     return 1;
 }
 
@@ -196,7 +176,7 @@ int async_set_pool(async_pool *pool)
     return TlsSetValue(asyncwinpool, (LPVOID)pool) != 0;
 }
 
-async_ctx *async_get_ctx(void)
+async_ctx *async_arch_get_ctx(void)
 {
     return (async_ctx *)TlsGetValue(asyncwinctx);
 }
index fa345cb1f77a9ebb97eba4eafa216755271398e8..87e30a4f6e98a656273407622562c252d6f4de87 100644 (file)
@@ -73,7 +73,7 @@ typedef struct async_fibre_st {
         ((c)->fibre = CreateFiber(0, async_start_func_win, 0))
 # define async_fibre_free(f)             (DeleteFiber((f)->fibre))
 
-async_ctx *async_get_ctx(void);
+async_ctx *async_arch_get_ctx(void);
 int async_set_ctx(async_ctx *ctx);
 
 int async_fibre_init_dispatcher(async_fibre *fibre);
index 9d68a7c77fccbd69ab54526de5e6d5761fb903f9..024aaf6122556f185585f72e15d48cbad34f5dbc 100644 (file)
@@ -62,6 +62,7 @@
 #include "async_locl.h"
 
 #include <openssl/err.h>
+#include <internal/cryptlib_int.h>
 #include <string.h>
 
 #define ASYNC_JOB_RUNNING   0
@@ -94,6 +95,12 @@ err:
     return NULL;
 }
 
+static async_ctx *async_get_ctx(void)
+{
+    OPENSSL_INIT_crypto_library_start(OPENSSL_INIT_ASYNC, NULL);
+    return async_arch_get_ctx();
+}
+
 static int async_ctx_free(void)
 {
     async_ctx *ctx;
@@ -191,16 +198,17 @@ static void async_release_job(ASYNC_JOB *job) {
 void async_start_func(void)
 {
     ASYNC_JOB *job;
+    async_ctx *ctx = async_get_ctx();
 
     while (1) {
         /* Run the job */
-        job = async_get_ctx()->currjob;
+        job = ctx->currjob;
         job->ret = job->func(job->funcargs);
 
         /* Stop the job */
         job->status = ASYNC_JOB_STOPPING;
         if (!async_fibre_swapcontext(&job->fibrectx,
-                                     &async_get_ctx()->dispatcher, 1)) {
+                                     &ctx->dispatcher, 1)) {
             /*
              * Should not happen. Getting here will close the thread...can't do
              * much about it
@@ -213,36 +221,39 @@ void async_start_func(void)
 int ASYNC_start_job(ASYNC_JOB **job, int *ret, int (*func)(void *),
                          void *args, size_t size)
 {
-    if (async_get_ctx() == NULL && async_ctx_new() == NULL) {
+    async_ctx *ctx = async_get_ctx();
+    if (ctx == NULL)
+        ctx = async_ctx_new();
+    if (ctx == NULL) {
         return ASYNC_ERR;
     }
 
     if (*job) {
-        async_get_ctx()->currjob = *job;
+        ctx->currjob = *job;
     }
 
     for (;;) {
-        if (async_get_ctx()->currjob != NULL) {
-            if (async_get_ctx()->currjob->status == ASYNC_JOB_STOPPING) {
-                *ret = async_get_ctx()->currjob->ret;
-                async_release_job(async_get_ctx()->currjob);
-                async_get_ctx()->currjob = NULL;
+        if (ctx->currjob != NULL) {
+            if (ctx->currjob->status == ASYNC_JOB_STOPPING) {
+                *ret = ctx->currjob->ret;
+                async_release_job(ctx->currjob);
+                ctx->currjob = NULL;
                 *job = NULL;
                 return ASYNC_FINISH;
             }
 
-            if (async_get_ctx()->currjob->status == ASYNC_JOB_PAUSING) {
-                *job = async_get_ctx()->currjob;
-                async_get_ctx()->currjob->status = ASYNC_JOB_PAUSED;
-                async_get_ctx()->currjob = NULL;
+            if (ctx->currjob->status == ASYNC_JOB_PAUSING) {
+                *job = ctx->currjob;
+                ctx->currjob->status = ASYNC_JOB_PAUSED;
+                ctx->currjob = NULL;
                 return ASYNC_PAUSE;
             }
 
-            if (async_get_ctx()->currjob->status == ASYNC_JOB_PAUSED) {
-                async_get_ctx()->currjob = *job;
+            if (ctx->currjob->status == ASYNC_JOB_PAUSED) {
+                ctx->currjob = *job;
                 /* Resume previous job */
-                if (!async_fibre_swapcontext(&async_get_ctx()->dispatcher,
-                        &async_get_ctx()->currjob->fibrectx, 1)) {
+                if (!async_fibre_swapcontext(&ctx->dispatcher,
+                        &ctx->currjob->fibrectx, 1)) {
                     ASYNCerr(ASYNC_F_ASYNC_START_JOB,
                              ASYNC_R_FAILED_TO_SWAP_CONTEXT);
                     goto err;
@@ -252,41 +263,41 @@ int ASYNC_start_job(ASYNC_JOB **job, int *ret, int (*func)(void *),
 
             /* Should not happen */
             ASYNCerr(ASYNC_F_ASYNC_START_JOB, ERR_R_INTERNAL_ERROR);
-            async_release_job(async_get_ctx()->currjob);
-            async_get_ctx()->currjob = NULL;
+            async_release_job(ctx->currjob);
+            ctx->currjob = NULL;
             *job = NULL;
             return ASYNC_ERR;
         }
 
         /* Start a new job */
-        if ((async_get_ctx()->currjob = async_get_pool_job()) == NULL) {
+        if ((ctx->currjob = async_get_pool_job()) == NULL) {
             return ASYNC_NO_JOBS;
         }
 
         if (args != NULL) {
-            async_get_ctx()->currjob->funcargs = OPENSSL_malloc(size);
-            if (async_get_ctx()->currjob->funcargs == NULL) {
+            ctx->currjob->funcargs = OPENSSL_malloc(size);
+            if (ctx->currjob->funcargs == NULL) {
                 ASYNCerr(ASYNC_F_ASYNC_START_JOB, ERR_R_MALLOC_FAILURE);
-                async_release_job(async_get_ctx()->currjob);
-                async_get_ctx()->currjob = NULL;
+                async_release_job(ctx->currjob);
+                ctx->currjob = NULL;
                 return ASYNC_ERR;
             }
-            memcpy(async_get_ctx()->currjob->funcargs, args, size);
+            memcpy(ctx->currjob->funcargs, args, size);
         } else {
-            async_get_ctx()->currjob->funcargs = NULL;
+            ctx->currjob->funcargs = NULL;
         }
 
-        async_get_ctx()->currjob->func = func;
-        if (!async_fibre_swapcontext(&async_get_ctx()->dispatcher,
-                &async_get_ctx()->currjob->fibrectx, 1)) {
+        ctx->currjob->func = func;
+        if (!async_fibre_swapcontext(&ctx->dispatcher,
+                &ctx->currjob->fibrectx, 1)) {
             ASYNCerr(ASYNC_F_ASYNC_START_JOB, ASYNC_R_FAILED_TO_SWAP_CONTEXT);
             goto err;
         }
     }
 
 err:
-    async_release_job(async_get_ctx()->currjob);
-    async_get_ctx()->currjob = NULL;
+    async_release_job(ctx->currjob);
+    ctx->currjob = NULL;
     *job = NULL;
     return ASYNC_ERR;
 }
@@ -295,10 +306,11 @@ err:
 int ASYNC_pause_job(void)
 {
     ASYNC_JOB *job;
+    async_ctx *ctx = async_get_ctx();
 
-    if (async_get_ctx() == NULL
-            || async_get_ctx()->currjob == NULL
-            || async_get_ctx()->blocked) {
+    if (ctx == NULL
+            || ctx->currjob == NULL
+            || ctx->blocked) {
         /*
          * Could be we've deliberately not been started within a job so this is
          * counted as success.
@@ -306,11 +318,11 @@ int ASYNC_pause_job(void)
         return 1;
     }
 
-    job = async_get_ctx()->currjob;
+    job = ctx->currjob;
     job->status = ASYNC_JOB_PAUSING;
 
     if (!async_fibre_swapcontext(&job->fibrectx,
-                                 &async_get_ctx()->dispatcher, 1)) {
+                                 &ctx->dispatcher, 1)) {
         ASYNCerr(ASYNC_F_ASYNC_PAUSE_JOB, ASYNC_R_FAILED_TO_SWAP_CONTEXT);
         return 0;
     }
@@ -331,14 +343,11 @@ static void async_empty_pool(async_pool *pool)
     } while (job);
 }
 
-int ASYNC_init(int init_thread, size_t max_size, size_t init_size)
+int async_init(void)
 {
     if (!async_global_init())
         return 0;
 
-    if (init_thread)
-        return ASYNC_init_thread(max_size, init_size);
-
     return 1;
 }
 
@@ -352,10 +361,12 @@ int ASYNC_init_thread(size_t max_size, size_t init_size)
         return 0;
     }
 
-    if (!async_local_init()) {
-        ASYNCerr(ASYNC_F_ASYNC_INIT_THREAD, ASYNC_R_INIT_FAILED);
+    OPENSSL_INIT_crypto_library_start(OPENSSL_INIT_ASYNC, NULL);
+    if (!ossl_init_thread_start(OPENSSL_INIT_THREAD_ASYNC)) {
+        ASYNCerr(ASYNC_F_ASYNC_INIT_THREAD, ERR_R_MALLOC_FAILURE);
         return 0;
     }
+
     pool = OPENSSL_zalloc(sizeof *pool);
     if (pool == NULL) {
         ASYNCerr(ASYNC_F_ASYNC_INIT_THREAD, ERR_R_MALLOC_FAILURE);
@@ -417,16 +428,6 @@ void ASYNC_cleanup_thread(void)
     async_free_pool_internal(async_get_pool());
 }
 
-void ASYNC_cleanup(int cleanupthread)
-{
-    /*
-     * We don't actually have any global cleanup at the moment so just cleanup
-     * the thread
-     */
-    if (cleanupthread)
-        ASYNC_cleanup_thread();
-}
-
 ASYNC_JOB *ASYNC_get_current_job(void)
 {
     async_ctx *ctx;
@@ -464,25 +465,25 @@ void ASYNC_clear_wake(ASYNC_JOB *job)
 
 void ASYNC_block_pause(void)
 {
-    if (async_get_ctx() == NULL
-            || async_get_ctx()->currjob == NULL) {
+    async_ctx *ctx = async_get_ctx();
+    if (ctx == NULL || ctx->currjob == NULL) {
         /*
          * We're not in a job anyway so ignore this
          */
         return;
     }
-    async_get_ctx()->blocked++;
+    ctx->blocked++;
 }
 
 void ASYNC_unblock_pause(void)
 {
-    if (async_get_ctx() == NULL
-            || async_get_ctx()->currjob == NULL) {
+    async_ctx *ctx = async_get_ctx();
+    if (ctx == NULL || ctx->currjob == NULL) {
         /*
          * We're not in a job anyway so ignore this
          */
         return;
     }
-    if(async_get_ctx()->blocked > 0)
-        async_get_ctx()->blocked--;
+    if(ctx->blocked > 0)
+        ctx->blocked--;
 }
index 0710f9e74cf2b6568e18e8f1994a6055a260d9e7..53a192b3299fd5f61efb1c76fde8d198907c1f7e 100644 (file)
@@ -59,7 +59,7 @@
 # pragma GCC diagnostic ignored "-Wdeprecated-declarations"
 #endif
 
-#include <openssl/async.h>
+#include <internal/async.h>
 #include <openssl/crypto.h>
 
 typedef struct async_ctx_st async_ctx;
@@ -95,7 +95,6 @@ struct async_pool_st {
 };
 
 int async_global_init(void);
-int async_local_init(void);
 void async_local_cleanup(void);
 void async_global_cleanup(void);
 void async_start_func(void);
index a2a811d982476ba67b7d9ecf23fc34cdd59fdc49..899dadfe218f48bb17603a042141924a26304a9e 100644 (file)
@@ -58,6 +58,7 @@
 #include <openssl/objects.h>
 #include <openssl/comp.h>
 #include <openssl/err.h>
+#include <internal/cryptlib_int.h>
 #include "comp_lcl.h"
 
 COMP_METHOD *COMP_zlib(void);
@@ -290,6 +291,7 @@ COMP_METHOD *COMP_zlib(void)
                 zlib_loaded++;
             if (zlib_loaded)
                 meth = &zlib_stateful_method;
+            OPENSSL_INIT_crypto_library_start(OPENSSL_INIT_ZLIB, NULL);
         }
     }
 #endif
index fead45134a92ac6934b0ac9cf51835888650354a..bb1dcc502f040902841eac03575585bd11f53570 100644 (file)
@@ -59,7 +59,7 @@
 #include <stdio.h>
 #include <openssl/crypto.h>
 #include "internal/cryptlib.h"
-#include <openssl/conf.h>
+#include <internal/conf.h>
 #include <openssl/dso.h>
 #include <openssl/x509.h>
 #include <openssl/asn1.h>
 static int openssl_configured = 0;
 
 void OPENSSL_config(const char *config_name)
+{
+    const OPENSSL_INIT_SETTINGS settings[2] = {
+        { OPENSSL_INIT_SET_CONF_FILENAME, .value.type_string = config_name },
+        { OPENSSL_INIT_SET_END, .value.type_int = 0 }
+    };
+    OPENSSL_INIT_crypto_library_start(OPENSSL_INIT_LOAD_CONFIG,
+                                      (const OPENSSL_INIT_SETTINGS *)&settings);
+}
+
+void openssl_config_internal(const char *config_name)
 {
     if (openssl_configured)
         return;
@@ -94,7 +104,7 @@ void OPENSSL_config(const char *config_name)
     openssl_configured = 1;
 }
 
-void OPENSSL_no_config()
+void openssl_no_config_internal(void)
 {
     openssl_configured = 1;
 }
index bd58d357570a14b3bbfbc89157dfc9922e8b18b3..138708b8672c7770bb7203dda150b841b41a7747 100644 (file)
  * SUN MICROSYSTEMS, INC., and contributed to the OpenSSL project.
  */
 
-#include "internal/cryptlib.h"
+#include "internal/cryptlib_int.h"
 #include <openssl/safestack.h>
 
 #if     defined(__i386)   || defined(__i386__)   || defined(_M_IX86) || \
@@ -234,6 +234,8 @@ BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved)
     case DLL_THREAD_ATTACH:
         break;
     case DLL_THREAD_DETACH:
+        ossl_init_thread_stop(
+            (struct thread_local_inits_st *)ossl_init_get_thread_local(0));
         break;
     case DLL_PROCESS_DETACH:
         break;
index eb8a8bb2182b5ae2c334c65400696a6d9d6d681c..eb25790ae0a1cbc893e949e7815a7b3155321c2e 100644 (file)
  */
 
 #include <openssl/objects.h>
-#include <openssl/engine.h>
+#include <internal/engine.h>
 #include <openssl/evp.h>
 #include <openssl/bn.h>
+#include <openssl/crypto.h>
 
 #if (defined(__unix__) || defined(unix)) && !defined(USG) && \
         (defined(OpenBSD) || defined(__FreeBSD__))
@@ -64,7 +65,7 @@
 
 #ifndef HAVE_CRYPTODEV
 
-void ENGINE_load_cryptodev(void)
+void engine_load_cryptodev_internal(void)
 {
     /* This is a NOP on platforms without /dev/crypto */
     return;
@@ -136,7 +137,7 @@ static int cryptodev_dh_compute_key(unsigned char *key, const BIGNUM *pub_key,
 #endif
 static int cryptodev_ctrl(ENGINE *e, int cmd, long i, void *p,
                           void (*f) (void));
-void ENGINE_load_cryptodev(void);
+void engine_load_cryptodev_internal(void);
 
 static const ENGINE_CMD_DEFN cryptodev_defns[] = {
     {0, NULL, NULL, 0}
@@ -1619,7 +1620,7 @@ cryptodev_ctrl(ENGINE *e, int cmd, long i, void *p, void (*f) (void))
     return (1);
 }
 
-void ENGINE_load_cryptodev(void)
+void engine_load_cryptodev_internal(void)
 {
     ENGINE *engine = ENGINE_new();
     int fd;
index 607317b355b4a23fa3d2709ff2ca99a2779f8bff..3ca24807c79a022c99ea4cc41caf7399569b205c 100644 (file)
@@ -58,6 +58,7 @@
 
 #include "eng_int.h"
 #include <openssl/dso.h>
+#include <openssl/crypto.h>
 
 /*
  * Shared libraries implementing ENGINEs for use by the "dynamic" ENGINE
@@ -294,7 +295,7 @@ static ENGINE *engine_dynamic(void)
     return ret;
 }
 
-void ENGINE_load_dynamic(void)
+void engine_load_dynamic_internal(void)
 {
     ENGINE *toadd = engine_dynamic();
     if (!toadd)
index 804214d9ae072506b21152a13e22d9347e5d4c2c..9d58d93ecdab6f2f7a65176b1300e20495e5708a 100644 (file)
@@ -65,8 +65,7 @@
 # define HEADER_ENGINE_INT_H
 
 # include "internal/cryptlib.h"
-/* Take public definitions from engine.h */
-# include <openssl/engine.h>
+# include <internal/engine.h>
 
 #ifdef  __cplusplus
 extern "C" {
index 8540673bd140856b5238a489915931a8290dd2b6..152c1881fa68b2d3c48d8bc6b896400ad63c7d05 100644 (file)
@@ -64,7 +64,7 @@
 #include <stdio.h>
 #include <openssl/crypto.h>
 #include "internal/cryptlib.h"
-#include <openssl/engine.h>
+#include <internal/engine.h>
 #include <openssl/dso.h>
 #include <openssl/pem.h>
 #include <openssl/evp.h>
@@ -196,7 +196,7 @@ static ENGINE *engine_openssl(void)
     return ret;
 }
 
-void ENGINE_load_openssl(void)
+void engine_load_openssl_internal(void)
 {
     ENGINE *toadd = engine_openssl();
     if (!toadd)
index 48726e2543f8a79e5d9286a06ee6bc621bb3ea30..1be10dbeaee5630369e825fb62a3e3e316ea8558 100644 (file)
 
 #include <stdio.h>
 #include <string.h>
-#include <openssl/engine.h>
+#include <internal/engine.h>
 #include <openssl/rand.h>
 #include <openssl/err.h>
+#include <openssl/crypto.h>
 
 #if (defined(__i386)   || defined(__i386__)   || defined(_M_IX86) || \
      defined(__x86_64) || defined(__x86_64__) || \
@@ -129,7 +130,7 @@ static ENGINE *ENGINE_rdrand(void)
     return ret;
 }
 
-void ENGINE_load_rdrand(void)
+void engine_load_rdrand_internal(void)
 {
     extern unsigned int OPENSSL_ia32cap_P[];
 
@@ -143,7 +144,7 @@ void ENGINE_load_rdrand(void)
     }
 }
 #else
-void ENGINE_load_rdrand(void)
+void engine_load_rdrand_internal(void)
 {
 }
 #endif
index 64f8adc46d5d21a4ddb5d1e8362bcc313b6754ed..7e8bcc1cce1b61dd008c293fc8e77b4ab9d458ab 100644 (file)
 #include <stdio.h>
 #include <stdarg.h>
 #include <string.h>
-#include "internal/cryptlib.h"
+#include <internal/cryptlib_int.h>
 #include <openssl/lhash.h>
 #include <openssl/crypto.h>
 #include <openssl/buffer.h>
@@ -894,6 +894,10 @@ ERR_STATE *ERR_get_state(void)
          * the first one that we just replaced.
          */
         ERR_STATE_free(tmpp);
+        OPENSSL_INIT_crypto_library_start(OPENSSL_INIT_LOAD_CRYPTO_STRINGS,
+                                          NULL);
+        /* Ignore failures from this */
+        ossl_init_thread_start(OPENSSL_INIT_THREAD_ERR_STATE);
     }
     return ret;
 }
index 6309733fb65c4f0a3880cba5cd294bf17ee2920c..ffb1b834c7cb34e8c7012c36c3952b80f797bd02 100644 (file)
@@ -56,6 +56,7 @@
  */
 
 #include <stdio.h>
+#include <internal/err.h>
 #include <openssl/asn1.h>
 #include <openssl/bn.h>
 #ifndef OPENSSL_NO_EC
 #include <internal/ct_int.h>
 #include <openssl/async.h>
 
-void ERR_load_crypto_strings(void)
+void err_load_crypto_strings_intern(void)
 {
 #ifdef OPENSSL_FIPS
     FIPS_set_error_callbacks(ERR_put_error, ERR_add_error_vdata);
index 8771a207cb8f36d369493b639391da79621de933..61e8929b3a8a3f9565043cc0edc7912d624cc147 100644 (file)
@@ -15,7 +15,7 @@ CFLAGS= $(INCLUDES) $(CFLAG)
 GENERAL=Makefile
 
 LIB=$(TOP)/libcrypto.a
-LIBSRC= encode.c digest.c evp_enc.c evp_key.c evp_acnf.c evp_cnf.c \
+LIBSRC= encode.c digest.c evp_enc.c evp_key.c evp_cnf.c \
        e_des.c e_bf.c e_idea.c e_des3.c e_camellia.c\
        e_rc4.c e_aes.c names.c e_seed.c \
        e_xcbc_d.c e_rc2.c e_cast.c e_rc5.c \
@@ -23,13 +23,13 @@ LIBSRC= encode.c digest.c evp_enc.c evp_key.c evp_acnf.c evp_cnf.c \
        m_md5_sha1.c m_mdc2.c m_ripemd.c \
        p_open.c p_seal.c p_sign.c p_verify.c p_lib.c p_enc.c p_dec.c \
        bio_md.c bio_b64.c bio_enc.c evp_err.c e_null.c \
-       c_all.c c_allc.c c_alld.c evp_lib.c bio_ok.c \
+       c_allc.c c_alld.c evp_lib.c bio_ok.c \
        evp_pkey.c evp_pbe.c p5_crpt.c p5_crpt2.c scrypt.c \
        e_old.c pmeth_lib.c pmeth_fn.c pmeth_gn.c m_sigver.c \
        e_aes_cbc_hmac_sha1.c e_aes_cbc_hmac_sha256.c e_rc4_hmac_md5.c \
        e_chacha20_poly1305.c cmeth_lib.c
 
-LIBOBJ=        encode.o digest.o evp_enc.o evp_key.o evp_acnf.o evp_cnf.o \
+LIBOBJ=        encode.o digest.o evp_enc.o evp_key.o evp_cnf.o \
        e_des.o e_bf.o e_idea.o e_des3.o e_camellia.o\
        e_rc4.o e_aes.o names.o e_seed.o \
        e_xcbc_d.o e_rc2.o e_cast.o e_rc5.o \
@@ -37,7 +37,7 @@ LIBOBJ=       encode.o digest.o evp_enc.o evp_key.o evp_acnf.o evp_cnf.o \
        m_md5_sha1.o m_mdc2.o m_ripemd.o \
        p_open.o p_seal.o p_sign.o p_verify.o p_lib.o p_enc.o p_dec.o \
        bio_md.o bio_b64.o bio_enc.o evp_err.o e_null.o \
-       c_all.o c_allc.o c_alld.o evp_lib.o bio_ok.o \
+       c_allc.o c_alld.o evp_lib.o bio_ok.o \
        evp_pkey.o evp_pbe.o p5_crpt.o p5_crpt2.o scrypt.o \
        e_old.o pmeth_lib.o pmeth_fn.o pmeth_gn.o m_sigver.o \
        e_aes_cbc_hmac_sha1.o e_aes_cbc_hmac_sha256.o e_rc4_hmac_md5.o \
diff --git a/crypto/evp/c_all.c b/crypto/evp/c_all.c
deleted file mode 100644 (file)
index 6dd2bc7..0000000
+++ /dev/null
@@ -1,80 +0,0 @@
-/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)
- * All rights reserved.
- *
- * This package is an SSL implementation written
- * by Eric Young (eay@cryptsoft.com).
- * The implementation was written so as to conform with Netscapes SSL.
- *
- * This library is free for commercial and non-commercial use as long as
- * the following conditions are aheared to.  The following conditions
- * apply to all code found in this distribution, be it the RC4, RSA,
- * lhash, DES, etc., code; not just the SSL code.  The SSL documentation
- * included with this distribution is covered by the same copyright terms
- * except that the holder is Tim Hudson (tjh@cryptsoft.com).
- *
- * Copyright remains Eric Young's, and as such any Copyright notices in
- * the code are not to be removed.
- * If this package is used in a product, Eric Young should be given attribution
- * as the author of the parts of the library used.
- * This can be in the form of a textual message at program startup or
- * in documentation (online or textual) provided with the package.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 3. All advertising materials mentioning features or use of this software
- *    must display the following acknowledgement:
- *    "This product includes cryptographic software written by
- *     Eric Young (eay@cryptsoft.com)"
- *    The word 'cryptographic' can be left out if the rouines from the library
- *    being used are not cryptographic related :-).
- * 4. If you include any Windows specific code (or a derivative thereof) from
- *    the apps directory (application code) you must include an acknowledgement:
- *    "This product includes software written by Tim Hudson (tjh@cryptsoft.com)"
- *
- * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- * The licence and distribution terms for any publically available version or
- * derivative of this code cannot be changed.  i.e. this code cannot simply be
- * copied and put under another distribution licence
- * [including the GNU Public Licence.]
- */
-
-#include <stdio.h>
-#include "internal/cryptlib.h"
-#include <openssl/evp.h>
-#ifndef OPENSSL_NO_ENGINE
-# include <openssl/engine.h>
-#endif
-
-void OPENSSL_add_all_algorithms_noconf(void)
-{
-    /*
-     * For the moment OPENSSL_cpuid_setup does something
-     * only on IA-32, but we reserve the option for all
-     * platforms...
-     */
-    OPENSSL_cpuid_setup();
-    OpenSSL_add_all_ciphers();
-    OpenSSL_add_all_digests();
-#ifndef OPENSSL_NO_ENGINE
-# if defined(__OpenBSD__) || defined(__FreeBSD__) || defined(HAVE_CRYPTODEV)
-    ENGINE_setup_bsd_cryptodev();
-# endif
-#endif
-}
index b59c33e2cc0014b3356fe0cf47c4d0c2be76732d..be6baf63f752e7c468c7c48127af3e09f996041b 100644 (file)
 #include <stdio.h>
 #include "internal/cryptlib.h"
 #include <openssl/evp.h>
+#include <internal/evp_int.h>
 #include <openssl/pkcs12.h>
 #include <openssl/objects.h>
 
-void OpenSSL_add_all_ciphers(void)
+void openssl_add_all_ciphers_internal(void)
 {
 
 #ifndef OPENSSL_NO_DES
index 4309a0c814aaa4e2402ffc277d0f12711d221ba4..e28ba3df125cb07280047f9040316bb590aec6d7 100644 (file)
 #include <stdio.h>
 #include "internal/cryptlib.h"
 #include <openssl/evp.h>
+#include <internal/evp_int.h>
 #include <openssl/pkcs12.h>
 #include <openssl/objects.h>
 
-void OpenSSL_add_all_digests(void)
+void openssl_add_all_digests_internal(void)
 {
 #ifndef OPENSSL_NO_MD4
     EVP_add_digest(EVP_md4());
index 610e0f5bebcac2bf3e5d2dfa9f175925b287c842..97a37a5815e7aa65c0773b31228f63205e41934f 100644 (file)
@@ -110,6 +110,8 @@ const EVP_CIPHER *EVP_get_cipherbyname(const char *name)
 {
     const EVP_CIPHER *cp;
 
+    OPENSSL_INIT_crypto_library_start(OPENSSL_INIT_ADD_ALL_CIPHERS, NULL);
+
     cp = (const EVP_CIPHER *)OBJ_NAME_get(name, OBJ_NAME_TYPE_CIPHER_METH);
     return (cp);
 }
@@ -118,6 +120,8 @@ const EVP_MD *EVP_get_digestbyname(const char *name)
 {
     const EVP_MD *cp;
 
+    OPENSSL_INIT_crypto_library_start(OPENSSL_INIT_ADD_ALL_DIGESTS, NULL);
+
     cp = (const EVP_MD *)OBJ_NAME_get(name, OBJ_NAME_TYPE_MD_METH);
     return (cp);
 }
@@ -161,6 +165,9 @@ void EVP_CIPHER_do_all(void (*fn) (const EVP_CIPHER *ciph,
                        void *arg)
 {
     struct doall_cipher dc;
+
+    OPENSSL_INIT_crypto_library_start(OPENSSL_INIT_ADD_ALL_CIPHERS, NULL);
+
     dc.fn = fn;
     dc.arg = arg;
     OBJ_NAME_do_all(OBJ_NAME_TYPE_CIPHER_METH, do_all_cipher_fn, &dc);
@@ -171,6 +178,9 @@ void EVP_CIPHER_do_all_sorted(void (*fn) (const EVP_CIPHER *ciph,
                                           void *x), void *arg)
 {
     struct doall_cipher dc;
+
+    OPENSSL_INIT_crypto_library_start(OPENSSL_INIT_ADD_ALL_CIPHERS, NULL);
+
     dc.fn = fn;
     dc.arg = arg;
     OBJ_NAME_do_all_sorted(OBJ_NAME_TYPE_CIPHER_METH, do_all_cipher_fn, &dc);
@@ -196,6 +206,9 @@ void EVP_MD_do_all(void (*fn) (const EVP_MD *md,
                    void *arg)
 {
     struct doall_md dc;
+
+    OPENSSL_INIT_crypto_library_start(OPENSSL_INIT_ADD_ALL_DIGESTS, NULL);
+
     dc.fn = fn;
     dc.arg = arg;
     OBJ_NAME_do_all(OBJ_NAME_TYPE_MD_METH, do_all_md_fn, &dc);
@@ -206,6 +219,9 @@ void EVP_MD_do_all_sorted(void (*fn) (const EVP_MD *md,
                                       void *x), void *arg)
 {
     struct doall_md dc;
+
+    OPENSSL_INIT_crypto_library_start(OPENSSL_INIT_ADD_ALL_DIGESTS, NULL);
+
     dc.fn = fn;
     dc.arg = arg;
     OBJ_NAME_do_all_sorted(OBJ_NAME_TYPE_MD_METH, do_all_md_fn, &dc);
diff --git a/crypto/include/internal/async.h b/crypto/include/internal/async.h
new file mode 100644 (file)
index 0000000..8242800
--- /dev/null
@@ -0,0 +1,61 @@
+/*
+ * Written by Matt Caswell for the OpenSSL project
+ */
+/* ====================================================================
+ * Copyright (c) 2015 The OpenSSL Project.  All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in
+ *    the documentation and/or other materials provided with the
+ *    distribution.
+ *
+ * 3. All advertising materials mentioning features or use of this
+ *    software must display the following acknowledgment:
+ *    "This product includes software developed by the OpenSSL Project
+ *    for use in the OpenSSL Toolkit. (http://www.OpenSSL.org/)"
+ *
+ * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to
+ *    endorse or promote products derived from this software without
+ *    prior written permission. For written permission, please contact
+ *    licensing@OpenSSL.org.
+ *
+ * 5. Products derived from this software may not be called "OpenSSL"
+ *    nor may "OpenSSL" appear in their names without prior written
+ *    permission of the OpenSSL Project.
+ *
+ * 6. Redistributions of any form whatsoever must retain the following
+ *    acknowledgment:
+ *    "This product includes software developed by the OpenSSL Project
+ *    for use in the OpenSSL Toolkit (http://www.OpenSSL.org/)"
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY
+ * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE OpenSSL PROJECT OR
+ * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
+ * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
+ * OF THE POSSIBILITY OF SUCH DAMAGE.
+ * ====================================================================
+ *
+ * This product includes cryptographic software written by Eric Young
+ * (eay@cryptsoft.com).  This product includes software written by Tim
+ * Hudson (tjh@cryptsoft.com).
+ *
+ */
+
+#include <openssl/async.h>
+
+int async_init(void);
+
similarity index 85%
rename from crypto/evp/evp_acnf.c
rename to crypto/include/internal/conf.h
index 285be1fb7516a6984ddbeaf0db8653a60d6484fe..8feaf62328824f696afa3a9deb11f09e72fbe9e2 100644 (file)
@@ -1,9 +1,8 @@
 /*
- * Written by Stephen Henson (steve@openssl.org) for the OpenSSL project
- * 2001.
+ * Written by Matt Caswell for the OpenSSL project
  */
 /* ====================================================================
- * Copyright (c) 2001 The OpenSSL Project.  All rights reserved.
+ * Copyright (c) 2015 The OpenSSL Project.  All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
  * modification, are permitted provided that the following conditions
  *
  */
 
-#include "internal/cryptlib.h"
-#include <openssl/evp.h>
 #include <openssl/conf.h>
 
-/*
- * Load all algorithms and configure OpenSSL. This function is called
- * automatically when OPENSSL_LOAD_CONF is set.
- */
+void openssl_config_internal(const char *config_name);
+void openssl_no_config_internal(void);
 
-void OPENSSL_add_all_algorithms_conf(void)
-{
-    OPENSSL_add_all_algorithms_noconf();
-    OPENSSL_config(NULL);
-}
diff --git a/crypto/include/internal/engine.h b/crypto/include/internal/engine.h
new file mode 100644 (file)
index 0000000..4b70e55
--- /dev/null
@@ -0,0 +1,63 @@
+/* ====================================================================
+ * Copyright (c) 2016 The OpenSSL Project.  All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in
+ *    the documentation and/or other materials provided with the
+ *    distribution.
+ *
+ * 3. All advertising materials mentioning features or use of this
+ *    software must display the following acknowledgment:
+ *    "This product includes software developed by the OpenSSL Project
+ *    for use in the OpenSSL Toolkit. (http://www.OpenSSL.org/)"
+ *
+ * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to
+ *    endorse or promote products derived from this software without
+ *    prior written permission. For written permission, please contact
+ *    licensing@OpenSSL.org.
+ *
+ * 5. Products derived from this software may not be called "OpenSSL"
+ *    nor may "OpenSSL" appear in their names without prior written
+ *    permission of the OpenSSL Project.
+ *
+ * 6. Redistributions of any form whatsoever must retain the following
+ *    acknowledgment:
+ *    "This product includes software developed by the OpenSSL Project
+ *    for use in the OpenSSL Toolkit (http://www.OpenSSL.org/)"
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY
+ * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE OpenSSL PROJECT OR
+ * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
+ * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
+ * OF THE POSSIBILITY OF SUCH DAMAGE.
+ * ====================================================================
+ *
+ * This product includes cryptographic software written by Eric Young
+ * (eay@cryptsoft.com).  This product includes software written by Tim
+ * Hudson (tjh@cryptsoft.com).
+ *
+ */
+
+#include <openssl/engine.h>
+
+void engine_load_openssl_internal(void);
+void engine_load_cryptodev_internal(void);
+void engine_load_rdrand_internal(void);
+void engine_load_dynamic_internal(void);
+void engine_load_padlock_internal(void);
+void engine_load_capi_internal(void);
+void engine_load_dasync_internal(void);
diff --git a/crypto/include/internal/err.h b/crypto/include/internal/err.h
new file mode 100644 (file)
index 0000000..aa48019
--- /dev/null
@@ -0,0 +1,58 @@
+/*
+ * Written by Matt Caswell for the OpenSSL project.
+ */
+/* ====================================================================
+ * Copyright (c) 2016 The OpenSSL Project.  All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in
+ *    the documentation and/or other materials provided with the
+ *    distribution.
+ *
+ * 3. All advertising materials mentioning features or use of this
+ *    software must display the following acknowledgment:
+ *    "This product includes software developed by the OpenSSL Project
+ *    for use in the OpenSSL Toolkit. (http://www.openssl.org/)"
+ *
+ * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to
+ *    endorse or promote products derived from this software without
+ *    prior written permission. For written permission, please contact
+ *    openssl-core@openssl.org.
+ *
+ * 5. Products derived from this software may not be called "OpenSSL"
+ *    nor may "OpenSSL" appear in their names without prior written
+ *    permission of the OpenSSL Project.
+ *
+ * 6. Redistributions of any form whatsoever must retain the following
+ *    acknowledgment:
+ *    "This product includes software developed by the OpenSSL Project
+ *    for use in the OpenSSL Toolkit (http://www.openssl.org/)"
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY
+ * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE OpenSSL PROJECT OR
+ * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
+ * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
+ * OF THE POSSIBILITY OF SUCH DAMAGE.
+ * ====================================================================
+ *
+ * This product includes cryptographic software written by Eric Young
+ * (eay@cryptsoft.com).  This product includes software written by Tim
+ * Hudson (tjh@cryptsoft.com).
+ *
+ */
+
+void err_load_crypto_strings_intern(void);
index 24c6870628c58dbbdfc7cf7af7b7e85833c63fbf..2c9b2a317d23562ed36a346060fcbf36a58b32ee 100644 (file)
@@ -415,3 +415,7 @@ struct evp_pkey_st {
     int save_parameters;
     STACK_OF(X509_ATTRIBUTE) *attributes; /* [ 0 ] */
 } /* EVP_PKEY */ ;
+
+
+void openssl_add_all_ciphers_internal(void);
+void openssl_add_all_digests_internal(void);
index 8950ff679740cbde2165b47e4daf797e529bb3da..53ed235699a1543c8874724aa2fe000fc3c9bf86 100644 (file)
 #include <internal/cryptlib_int.h>
 #include <openssl/err.h>
 #include <openssl/evp.h>
-#if 0
 #include <internal/evp_int.h>
 #include <internal/conf.h>
 #include <internal/async.h>
 #include <internal/engine.h>
-#endif
-#include <openssl/conf.h>
-#include <openssl/async.h>
-#include <openssl/engine.h>
 #include <openssl/comp.h>
-#if 0
 #include <internal/err.h>
-#endif
 #include <stdlib.h>
 
 /* Implement "once" functionality */
@@ -292,9 +285,7 @@ static void ossl_init_load_crypto_strings(void)
     fprintf(stderr, "OPENSSL_INIT: ossl_init_load_crypto_strings: "
                     "err_load_crypto_strings_intern()\n");
 # endif
-#if 0
     err_load_crypto_strings_intern();
-#endif
 #endif
     load_crypto_strings_inited = 1;
 }
@@ -311,9 +302,7 @@ static void ossl_init_add_all_ciphers(void)
     fprintf(stderr, "OPENSSL_INIT: ossl_init_add_all_ciphers: "
                     "openssl_add_all_ciphers_internal()\n");
 # endif
-#if 0
     openssl_add_all_ciphers_internal();
-#endif
 # ifndef OPENSSL_NO_ENGINE
 #  if defined(__OpenBSD__) || defined(__FreeBSD__) || defined(HAVE_CRYPTODEV)
     ENGINE_setup_bsd_cryptodev();
@@ -334,9 +323,7 @@ static void ossl_init_add_all_digests(void)
     fprintf(stderr, "OPENSSL_INIT: ossl_init_add_all_digests: "
                     "openssl_add_all_digests_internal()\n");
 # endif
-#if 0
     openssl_add_all_digests_internal();
-#endif
 # ifndef OPENSSL_NO_ENGINE
 #  if defined(__OpenBSD__) || defined(__FreeBSD__) || defined(HAVE_CRYPTODEV)
     ENGINE_setup_bsd_cryptodev();
@@ -361,9 +348,7 @@ static void ossl_init_config(void)
             "OPENSSL_INIT: ossl_init_config: openssl_config_internal(%s)\n",
             config_filename==NULL?"NULL":config_filename);
 #endif
-#if 0
     openssl_config_internal(config_filename);
-#endif
     config_inited = 1;
 }
 static void ossl_init_no_config(void)
@@ -372,9 +357,7 @@ static void ossl_init_no_config(void)
     fprintf(stderr,
             "OPENSSL_INIT: ossl_init_config: openssl_no_config_internal()\n");
 #endif
-#if 0
     openssl_no_config_internal();
-#endif
     config_inited = 1;
 }
 
@@ -385,9 +368,7 @@ static void ossl_init_async(void)
 #ifdef OPENSSL_INIT_DEBUG
     fprintf(stderr, "OPENSSL_INIT: ossl_init_async: async_init()\n");
 #endif
-#if 0
     async_init();
-#endif
     async_inited = 1;
 }
 
@@ -400,9 +381,7 @@ static void ossl_init_engine_openssl(void)
     fprintf(stderr, "OPENSSL_INIT: ossl_init_engine_openssl: "
                     "engine_load_openssl_internal()\n");
 # endif
-#if 0
     engine_load_openssl_internal();
-#endif
     engine_inited = 1;
 }
 # if !defined(OPENSSL_NO_HW) && \
@@ -414,9 +393,7 @@ static void ossl_init_engine_cryptodev(void)
     fprintf(stderr, "OPENSSL_INIT: ossl_init_engine_cryptodev: "
                     "engine_load_cryptodev_internal()\n");
 #  endif
-#if 0
     engine_load_cryptodev_internal();
-#endif
     engine_inited = 1;
 }
 # endif
@@ -429,9 +406,7 @@ static void ossl_init_engine_rdrand(void)
     fprintf(stderr, "OPENSSL_INIT: ossl_init_engine_rdrand: "
                     "engine_load_rdrand_internal()\n");
 #  endif
-#if 0
     engine_load_rdrand_internal();
-#endif
     engine_inited = 1;
 }
 # endif
@@ -442,9 +417,7 @@ static void ossl_init_engine_dynamic(void)
     fprintf(stderr, "OPENSSL_INIT: ossl_init_engine_dynamic: "
                     "engine_load_dynamic_internal()\n");
 # endif
-#if 0
     engine_load_dynamic_internal();
-#endif
     engine_inited = 1;
 }
 # ifndef OPENSSL_NO_STATIC_ENGINE
@@ -456,9 +429,7 @@ static void ossl_init_engine_padlock(void)
     fprintf(stderr, "OPENSSL_INIT: ossl_init_engine_padlock: "
                     "engine_load_padlock_internal()\n");
 #   endif
-#if 0
     engine_load_padlock_internal();
-#endif
     engine_inited = 1;
 }
 #  endif
@@ -470,9 +441,7 @@ static void ossl_init_engine_capi(void)
     fprintf(stderr, "OPENSSL_INIT: ossl_init_engine_capi: "
                     "engine_load_capi_internal()\n");
 #   endif
-#if 0
     engine_load_capi_internal();
-#endif
     engine_inited = 1;
 }
 #  endif
@@ -483,9 +452,7 @@ static void ossl_init_engine_dasync(void)
     fprintf(stderr, "OPENSSL_INIT: ossl_init_engine_dasync: "
                     "engine_load_dasync_internal()\n");
 # endif
-#if 0
     engine_load_dasync_internal();
-#endif
     engine_inited = 1;
 }
 # endif
index 2ac74b566cd307a97043579bcf5863dbf83a0006..0925214f320cdfc46c9d74b2750732b423281890 100644 (file)
@@ -163,7 +163,8 @@ static const char *const lock_names[CRYPTO_NUM_LOCKS] = {
     "comp",
     "fips",
     "fips2",
-#if CRYPTO_NUM_LOCKS != 41
+    "init",
+#if CRYPTO_NUM_LOCKS != 42
 # error "Inconsistency between crypto.h and cryptlib.c"
 #endif
 };
index d3c9b8b163bfcc00497d04ef80d8425b3e5196be..62c4ad3c2d410a7c61cd6dbc732774ac539e257b 100644 (file)
@@ -187,6 +187,8 @@ static int cert_select_simple(ENGINE *e, SSL *ssl, STACK_OF(X509) *certs);
 static int cert_select_dialog(ENGINE *e, SSL *ssl, STACK_OF(X509) *certs);
 # endif
 
+void engine_load_capi_internal(void);
+
 typedef PCCERT_CONTEXT(WINAPI *CERTDLG) (HCERTSTORE, HWND, LPCWSTR,
                                          LPCWSTR, DWORD, DWORD, void *);
 typedef HWND(WINAPI *GETCONSWIN) (void);
@@ -592,7 +594,7 @@ static ENGINE *engine_capi(void)
     return ret;
 }
 
-void ENGINE_load_capi(void)
+void engine_load_capi_internal(void)
 {
     /* Copied from eng_[openssl|dyn].c */
     ENGINE *toadd = engine_capi();
@@ -1874,7 +1876,8 @@ OPENSSL_EXPORT
 
 IMPLEMENT_DYNAMIC_CHECK_FN()
 # else
-void ENGINE_load_capi(void)
+void engine_load_capi_internal(void);
+void engine_load_capi_internal(void)
 {
 }
 # endif
index 2f18d07db86b4802765a42614c2fc20abb95cb9d..cca9f5e3e9ea127555dca753a1114b9cc640d9ac 100644 (file)
@@ -59,6 +59,7 @@
 #include <openssl/evp.h>
 #include <openssl/async.h>
 #include <openssl/bn.h>
+#include <openssl/crypto.h>
 
 #define DASYNC_LIB_NAME "DASYNC"
 #include "e_dasync_err.c"
@@ -72,7 +73,7 @@ static const char *engine_dasync_name = "Dummy Async engine support";
 static int dasync_destroy(ENGINE *e);
 static int dasync_init(ENGINE *e);
 static int dasync_finish(ENGINE *e);
-void ENGINE_load_dasync(void);
+void engine_load_dasync_internal(void);
 
 
 /* Set up digests. Just SHA1 for now */
@@ -210,7 +211,7 @@ static ENGINE *engine_dasync(void)
     return ret;
 }
 
-void ENGINE_load_dasync(void)
+void engine_load_dasync_internal(void)
 {
     ENGINE *toadd = engine_dasync();
     if (!toadd)
index a31e5a9cfa2a367735cd1ca6b8ab54ca1cd37363..e641a44c169db48aed979ad2eb2b5283176e130b 100644 (file)
@@ -66,6 +66,7 @@
 #include <openssl/evp.h>
 #include <openssl/modes.h>
 #include <openssl/aes.h>
+#include <openssl/crypto.h>
 
 #define OSSLTEST_LIB_NAME "OSSLTEST"
 #include "e_ossltest_err.c"
index e5eecee55430bae77e5bea2917fa81ecda093c77..00732edb981b8aa8fcb90cc2aa60d6115270722d 100644 (file)
@@ -112,8 +112,8 @@ static ENGINE *ENGINE_padlock(void);
 #  endif
 
 #  ifdef OPENSSL_NO_DYNAMIC_ENGINE
-
-void ENGINE_load_padlock(void)
+void engine_load_padlock_internal(void);
+void engine_load_padlock_internal(void)
 {
 /* On non-x86 CPUs it just returns. */
 #   ifdef COMPILE_HW_PADLOCK
index 5ddfafb5da5bd42704ac0caf97968ef4a88ea614..8ec9b000c43c6b774508953b578195191f04257b 100644 (file)
@@ -74,8 +74,6 @@ typedef struct async_job_st ASYNC_JOB;
 #define ASYNC_PAUSE    2
 #define ASYNC_FINISH   3
 
-int ASYNC_init(int init_thread, size_t max_size, size_t init_size);
-void ASYNC_cleanup(int cleanupthread);
 int ASYNC_init_thread(size_t max_size, size_t init_size);
 void ASYNC_cleanup_thread(void);
 
index 65981079144a89e6e6a774939a38d6dcec265b13..9144c6d17d1cad888acceaa9c25048e50b2cd28e 100644 (file)
@@ -138,7 +138,8 @@ int CONF_dump_fp(LHASH_OF(CONF_VALUE) *conf, FILE *out);
 int CONF_dump_bio(LHASH_OF(CONF_VALUE) *conf, BIO *out);
 
 void OPENSSL_config(const char *config_name);
-void OPENSSL_no_config(void);
+#define OPENSSL_no_config() \
+    OPENSSL_INIT_crypto_library_start(OPENSSL_INIT_NO_LOAD_CONFIG, NULL)
 
 /*
  * New conf code.  The semantics are different from the functions above. If
index dd1089dc6c73ef2b653c67b37ecd612d32ca7add..6529bf4dd464bde9110d72ba248ea05c2f899e52 100644 (file)
@@ -1,5 +1,5 @@
 /* ====================================================================
- * Copyright (c) 1998-2006 The OpenSSL Project.  All rights reserved.
+ * Copyright (c) 1998-2016 The OpenSSL Project.  All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
  * modification, are permitted provided that the following conditions
@@ -205,7 +205,8 @@ extern "C" {
 # define CRYPTO_LOCK_COMP                38
 # define CRYPTO_LOCK_FIPS                39
 # define CRYPTO_LOCK_FIPS2               40
-# define CRYPTO_NUM_LOCKS                41
+# define CRYPTO_LOCK_INIT                41
+# define CRYPTO_NUM_LOCKS                42
 
 # define CRYPTO_LOCK             1
 # define CRYPTO_UNLOCK           2
index 58b2d7cebc0735f6941eca499ab4b783b2614983..b5b4d07ab181ceb785838294c0d287d1e6290a49 100644 (file)
@@ -387,23 +387,22 @@ int ENGINE_remove(ENGINE *e);
 /* Retrieve an engine from the list by its unique "id" value. */
 ENGINE *ENGINE_by_id(const char *id);
 /* Add all the built-in engines. */
-void ENGINE_load_openssl(void);
-void ENGINE_load_dynamic(void);
+#define ENGINE_load_openssl() \
+    OPENSSL_INIT_crypto_library_start(OPENSSL_INIT_ENGINE_OPENSSL, NULL)
+#define ENGINE_load_dynamic() \
+    OPENSSL_INIT_crypto_library_start(OPENSSL_INIT_ENGINE_DYNAMIC, NULL)
 # ifndef OPENSSL_NO_STATIC_ENGINE
-void ENGINE_load_4758cca(void);
-void ENGINE_load_aep(void);
-void ENGINE_load_atalla(void);
-void ENGINE_load_chil(void);
-void ENGINE_load_cswift(void);
-void ENGINE_load_nuron(void);
-void ENGINE_load_sureware(void);
-void ENGINE_load_ubsec(void);
-void ENGINE_load_padlock(void);
-void ENGINE_load_capi(void);
-void ENGINE_load_dasync(void);
+# define ENGINE_load_padlock() \
+    OPENSSL_INIT_crypto_library_start(OPENSSL_INIT_ENGINE_PADLOCK, NULL)
+#define ENGINE_load_capi() \
+    OPENSSL_INIT_crypto_library_start(OPENSSL_INIT_ENGINE_CAPI, NULL)
+#define ENGINE_load_dasync() \
+    OPENSSL_INIT_crypto_library_start(OPENSSL_INIT_ENGINE_DASYNC, NULL)
 # endif
-void ENGINE_load_cryptodev(void);
-void ENGINE_load_rdrand(void);
+#define ENGINE_load_cryptodev() \
+    OPENSSL_INIT_crypto_library_start(OPENSSL_INIT_ENGINE_CRYPTODEV, NULL)
+#define ENGINE_load_rdrand() \
+    OPENSSL_INIT_crypto_library_start(OPENSSL_INIT_ENGINE_RDRAND, NULL)
 void ENGINE_load_builtin_engines(void);
 
 /*
index 8baf6b7a13904f76b2bedc21876f55a326522743..f8742a46814eb268d9085e12c5e3565b82d59fcb 100644 (file)
@@ -354,7 +354,10 @@ void ERR_add_error_vdata(int num, va_list args);
 void ERR_load_strings(int lib, ERR_STRING_DATA str[]);
 void ERR_unload_strings(int lib, ERR_STRING_DATA str[]);
 void ERR_load_ERR_strings(void);
-void ERR_load_crypto_strings(void);
+
+#define ERR_load_crypto_strings() \
+    OPENSSL_INIT_crypto_library_start(OPENSSL_INIT_LOAD_CRYPTO_STRINGS, NULL)
+
 void ERR_free_strings(void);
 
 void ERR_remove_thread_state(const CRYPTO_THREADID *tid);
index a0d0d678b8477a35af3d6206d80588372e54dae2..91305b87b9d86690aee712fdbafae7d2b96e30b3 100644 (file)
@@ -870,19 +870,29 @@ const EVP_CIPHER *EVP_seed_cfb128(void);
 const EVP_CIPHER *EVP_seed_ofb(void);
 # endif
 
-void OPENSSL_add_all_algorithms_noconf(void);
-void OPENSSL_add_all_algorithms_conf(void);
+#  define OPENSSL_add_all_algorithms_conf() \
+    OPENSSL_INIT_crypto_library_start(OPENSSL_INIT_ADD_ALL_CIPHERS \
+                                      | OPENSSL_INIT_ADD_ALL_DIGESTS \
+                                      | OPENSSL_INIT_LOAD_CONFIG, NULL)
+#  define OPENSSL_add_all_algorithms_noconf() \
+    OPENSSL_INIT_crypto_library_start(OPENSSL_INIT_ADD_ALL_CIPHERS \
+                                   OPENSSL_INIT_ADD_ALL_DIGESTS, NULL)
 
 # ifdef OPENSSL_LOAD_CONF
 #  define OpenSSL_add_all_algorithms() \
-                OPENSSL_add_all_algorithms_conf()
+    OPENSSL_INIT_crypto_library_start(OPENSSL_INIT_ADD_ALL_CIPHERS \
+                                      | OPENSSL_INIT_ADD_ALL_DIGESTS \
+                                      | OPENSSL_INIT_LOAD_CONFIG, NULL)
 # else
 #  define OpenSSL_add_all_algorithms() \
-                OPENSSL_add_all_algorithms_noconf()
+    OPENSSL_INIT_crypto_library_start(OPENSSL_INIT_ADD_ALL_CIPHERS \
+                                      | OPENSSL_INIT_ADD_ALL_DIGESTS, NULL)
 # endif
 
-void OpenSSL_add_all_ciphers(void);
-void OpenSSL_add_all_digests(void);
+#  define OpenSSL_add_all_ciphers() \
+    OPENSSL_INIT_crypto_library_start(OPENSSL_INIT_ADD_ALL_CIPHERS, NULL)
+#  define OpenSSL_add_all_digests() \
+    OPENSSL_INIT_crypto_library_start(OPENSSL_INIT_ADD_ALL_DIGESTS, NULL)
 
 int EVP_add_cipher(const EVP_CIPHER *cipher);
 int EVP_add_digest(const EVP_MD *digest);
index 8e0edfc0137d6b16df6b4cbbddbf81b3b2e3f221..f78a58448ac783c78cc029fc975681e6377e481c 100644 (file)
 #  define OCSP_SINGLERESP_get_ext_by_critical     OCSP_SINGLERESP_get_ext_by_crit
 
 /* Hack some long EVP names */
-#  undef OPENSSL_add_all_algorithms_noconf
-#  define OPENSSL_add_all_algorithms_noconf       OPENSSL_add_all_algo_noconf
-#  undef OPENSSL_add_all_algorithms_conf
-#  define OPENSSL_add_all_algorithms_conf         OPENSSL_add_all_algo_conf
 #  undef EVP_PKEY_meth_set_verify_recover
 #  define EVP_PKEY_meth_set_verify_recover        EVP_PKEY_meth_set_vrfy_recover
 
index 1068e8c3b2f6b7837303bbb8eaf933873603123d..ddff70cde6226824bb8c7b0285cddabb1f34246c 100644 (file)
@@ -123,12 +123,12 @@ static int blockpause(void *args)
     return 1;
 }
 
-static int test_ASYNC_init()
+static int test_ASYNC_init_thread()
 {
     ASYNC_JOB *job1 = NULL, *job2 = NULL, *job3 = NULL;
     int funcret1, funcret2, funcret3;
 
-    if (       !ASYNC_init(1, 2, 0)
+    if (       !ASYNC_init_thread(2, 0)
             || ASYNC_start_job(&job1, &funcret1, only_pause, NULL, 0)
                 != ASYNC_PAUSE
             || ASYNC_start_job(&job2, &funcret2, only_pause, NULL, 0)
@@ -146,12 +146,12 @@ static int test_ASYNC_init()
             || funcret1 != 1
             || funcret2 != 1
             || funcret3 != 1) {
-        fprintf(stderr, "test_ASYNC_init() failed\n");
-        ASYNC_cleanup(1);
+        fprintf(stderr, "test_ASYNC_init_thread() failed\n");
+        ASYNC_cleanup_thread();
         return 0;
     }
 
-    ASYNC_cleanup(1);
+    ASYNC_cleanup_thread();
     return 1;
 }
 
@@ -162,18 +162,18 @@ static int test_ASYNC_start_job()
 
     ctr = 0;
 
-    if (       !ASYNC_init(1, 1, 0)
+    if (       !ASYNC_init_thread(1, 0)
             || ASYNC_start_job(&job, &funcret, add_two, NULL, 0) != ASYNC_PAUSE
             || ctr != 1
             || ASYNC_start_job(&job, &funcret, add_two, NULL, 0) != ASYNC_FINISH
             || ctr != 2
             || funcret != 2) {
         fprintf(stderr, "test_ASYNC_start_job() failed\n");
-        ASYNC_cleanup(1);
+        ASYNC_cleanup_thread();
         return 0;
     }
 
-    ASYNC_cleanup(1);
+    ASYNC_cleanup_thread();
     return 1;
 }
 
@@ -184,7 +184,7 @@ static int test_ASYNC_get_current_job()
 
     currjob = NULL;
 
-    if (       !ASYNC_init(1, 1, 0)
+    if (       !ASYNC_init_thread(1, 0)
             || ASYNC_start_job(&job, &funcret, save_current, NULL, 0)
                 != ASYNC_PAUSE
             || currjob != job
@@ -192,11 +192,11 @@ static int test_ASYNC_get_current_job()
                 != ASYNC_FINISH
             || funcret != 1) {
         fprintf(stderr, "test_ASYNC_get_current_job() failed\n");
-        ASYNC_cleanup(1);
+        ASYNC_cleanup_thread();
         return 0;
     }
 
-    ASYNC_cleanup(1);
+    ASYNC_cleanup_thread();
     return 1;
 }
 
@@ -229,7 +229,7 @@ static int test_ASYNC_get_wait_fd()
     int funcret;
     OSSL_ASYNC_FD fd;
 
-    if (       !ASYNC_init(1, 1, 0)
+    if (       !ASYNC_init_thread(1, 0)
             || ASYNC_start_job(&job, &funcret, wake, NULL, 0)
                 != ASYNC_PAUSE
             || (fd = ASYNC_get_wait_fd(job)) < 0
@@ -245,11 +245,11 @@ static int test_ASYNC_get_wait_fd()
                 != ASYNC_FINISH
             || funcret != 1) {
         fprintf(stderr, "test_ASYNC_get_wait_fd() failed\n");
-        ASYNC_cleanup(1);
+        ASYNC_cleanup_thread();
         return 0;
     }
 
-    ASYNC_cleanup(1);
+    ASYNC_cleanup_thread();
     return 1;
 }
 
@@ -258,18 +258,18 @@ static int test_ASYNC_block_pause()
     ASYNC_JOB *job = NULL;
     int funcret;
 
-    if (       !ASYNC_init(1, 1, 0)
+    if (       !ASYNC_init_thread(1, 0)
             || ASYNC_start_job(&job, &funcret, blockpause, NULL, 0)
                 != ASYNC_PAUSE
             || ASYNC_start_job(&job, &funcret, blockpause, NULL, 0)
                 != ASYNC_FINISH
             || funcret != 1) {
         fprintf(stderr, "test_ASYNC_block_pause() failed\n");
-        ASYNC_cleanup(1);
+        ASYNC_cleanup_thread();
         return 0;
     }
 
-    ASYNC_cleanup(1);
+    ASYNC_cleanup_thread();
     return 1;
 }
 
@@ -284,7 +284,7 @@ int main(int argc, char **argv)
     CRYPTO_set_mem_debug(1);
     CRYPTO_mem_ctrl(CRYPTO_MEM_CHECK_ON);
 
-    if (       !test_ASYNC_init()
+    if (       !test_ASYNC_init_thread()
             || !test_ASYNC_start_job()
             || !test_ASYNC_get_current_job()
             || !test_ASYNC_get_wait_fd()
index b937a44dba9c6dcc52bb0be17ecbfd4b429040bb..fdb48fb81fb3ad87d6f0fbcf9f92c2e62fc1bb8f 100755 (executable)
@@ -234,7 +234,7 @@ ERR_load_PEM_strings                    242 1_1_0   EXIST::FUNCTION:
 ERR_load_PROXY_strings                  243    1_1_0   NOEXIST::FUNCTION:
 ERR_load_RSA_strings                    244    1_1_0   EXIST::FUNCTION:RSA
 ERR_load_X509_strings                   245    1_1_0   EXIST::FUNCTION:
-ERR_load_crypto_strings                 246    1_1_0   EXIST::FUNCTION:
+ERR_load_crypto_strings                 246    1_1_0   NOEXIST::FUNCTION:
 ERR_load_strings                        247    1_1_0   EXIST::FUNCTION:
 ERR_peek_error                          248    1_1_0   EXIST::FUNCTION:
 ERR_peek_error_line                     249    1_1_0   EXIST::FUNCTION:
@@ -497,8 +497,8 @@ SHA_Final                               505 1_1_0   NOEXIST::FUNCTION:
 SHA_Init                                506    1_1_0   NOEXIST::FUNCTION:
 SHA_Update                              507    1_1_0   NOEXIST::FUNCTION:
 OpenSSL_add_all_algorithms              508    1_1_0   NOEXIST::FUNCTION:
-OpenSSL_add_all_ciphers                 509    1_1_0   EXIST::FUNCTION:
-OpenSSL_add_all_digests                 510    1_1_0   EXIST::FUNCTION:
+OpenSSL_add_all_ciphers                 509    1_1_0   NOEXIST::FUNCTION:
+OpenSSL_add_all_digests                 510    1_1_0   NOEXIST::FUNCTION:
 TXT_DB_create_index                     511    1_1_0   EXIST::FUNCTION:
 TXT_DB_free                             512    1_1_0   EXIST::FUNCTION:
 TXT_DB_get_by_index                     513    1_1_0   EXIST::FUNCTION:
@@ -1965,7 +1965,7 @@ X509_REVOKED_set_serialNumber           2543      1_1_0   EXIST::FUNCTION:
 X509_print_ex                           2544   1_1_0   EXIST::FUNCTION:
 OCSP_ONEREQ_get1_ext_d2i                2545   1_1_0   EXIST::FUNCTION:
 ENGINE_register_all_RAND                2546   1_1_0   EXIST::FUNCTION:ENGINE
-ENGINE_load_dynamic                     2547   1_1_0   EXIST::FUNCTION:ENGINE
+ENGINE_load_dynamic                     2547   1_1_0   NOEXIST::FUNCTION:
 PBKDF2PARAM_it                          2548   1_1_0   EXIST:!EXPORT_VAR_AS_FUNCTION:VARIABLE:
 PBKDF2PARAM_it                          2548   1_1_0   EXIST:EXPORT_VAR_AS_FUNCTION:FUNCTION:
 EXTENDED_KEY_USAGE_new                  2549   1_1_0   EXIST::FUNCTION:
@@ -2046,7 +2046,7 @@ SXNET_it                                2613      1_1_0   EXIST:EXPORT_VAR_AS_FUNCTION:
 UI_dup_input_boolean                    2614   1_1_0   EXIST::FUNCTION:
 PKCS12_add_CSPName_asc                  2615   1_1_0   EXIST::FUNCTION:
 EC_POINT_is_at_infinity                 2616   1_1_0   EXIST::FUNCTION:EC
-ENGINE_load_cryptodev                   2617   1_1_0   EXIST::FUNCTION:ENGINE
+ENGINE_load_cryptodev                   2617   1_1_0   NOEXIST::FUNCTION:
 DSO_convert_filename                    2618   1_1_0   EXIST::FUNCTION:
 POLICYQUALINFO_it                       2619   1_1_0   EXIST:!EXPORT_VAR_AS_FUNCTION:VARIABLE:
 POLICYQUALINFO_it                       2619   1_1_0   EXIST:EXPORT_VAR_AS_FUNCTION:FUNCTION:
@@ -2068,7 +2068,7 @@ PKCS7_ATTR_SIGN_it                      2632      1_1_0   EXIST:EXPORT_VAR_AS_FUNCTION:
 UI_add_error_string                     2633   1_1_0   EXIST::FUNCTION:
 KRB5_CHECKSUM_free                      2634   1_1_0   NOEXIST::FUNCTION:
 OCSP_REQUEST_get_ext                    2635   1_1_0   EXIST::FUNCTION:
-ENGINE_load_ubsec                       2636   1_1_0   EXIST::FUNCTION:ENGINE,STATIC_ENGINE
+ENGINE_load_ubsec                       2636   1_1_0   NOEXIST::FUNCTION:
 ENGINE_register_all_digests             2637   1_1_0   EXIST::FUNCTION:ENGINE
 PKEY_USAGE_PERIOD_it                    2638   1_1_0   EXIST:!EXPORT_VAR_AS_FUNCTION:VARIABLE:
 PKEY_USAGE_PERIOD_it                    2638   1_1_0   EXIST:EXPORT_VAR_AS_FUNCTION:FUNCTION:
@@ -2095,7 +2095,7 @@ OCSP_CERTSTATUS_free                    2653      1_1_0   EXIST::FUNCTION:
 _ossl_old_des_crypt                     2654   1_1_0   NOEXIST::FUNCTION:
 ASN1_item_i2d                           2655   1_1_0   EXIST::FUNCTION:
 EVP_DecryptFinal_ex                     2656   1_1_0   EXIST::FUNCTION:
-ENGINE_load_openssl                     2657   1_1_0   EXIST::FUNCTION:ENGINE
+ENGINE_load_openssl                     2657   1_1_0   NOEXIST::FUNCTION:
 ENGINE_get_cmd_defns                    2658   1_1_0   EXIST::FUNCTION:ENGINE
 ENGINE_set_load_privkey_function        2659   1_1_0   EXIST:!VMS:FUNCTION:ENGINE
 ENGINE_set_load_privkey_fn              2659   1_1_0   EXIST:VMS:FUNCTION:ENGINE
@@ -2533,7 +2533,7 @@ OCSP_RESPONSE_new                       3023      1_1_0   EXIST::FUNCTION:
 AES_set_encrypt_key                     3024   1_1_0   EXIST::FUNCTION:AES
 OCSP_resp_count                         3025   1_1_0   EXIST::FUNCTION:
 KRB5_CHECKSUM_new                       3026   1_1_0   NOEXIST::FUNCTION:
-ENGINE_load_cswift                      3027   1_1_0   EXIST::FUNCTION:ENGINE,STATIC_ENGINE
+ENGINE_load_cswift                      3027   1_1_0   NOEXIST::FUNCTION:
 OCSP_onereq_get0_id                     3028   1_1_0   EXIST::FUNCTION:
 ENGINE_set_default_ciphers              3029   1_1_0   EXIST::FUNCTION:ENGINE
 NOTICEREF_it                            3030   1_1_0   EXIST:!EXPORT_VAR_AS_FUNCTION:VARIABLE:
@@ -2564,7 +2564,7 @@ ASN1_primitive_free                     3051      1_1_0   NOEXIST::FUNCTION:
 i2d_EXTENDED_KEY_USAGE                  3052   1_1_0   EXIST::FUNCTION:
 i2d_OCSP_SIGNATURE                      3053   1_1_0   EXIST::FUNCTION:
 asn1_enc_save                           3054   1_1_0   NOEXIST::FUNCTION:
-ENGINE_load_nuron                       3055   1_1_0   EXIST::FUNCTION:ENGINE,STATIC_ENGINE
+ENGINE_load_nuron                       3055   1_1_0   NOEXIST::FUNCTION:
 _ossl_old_des_pcbc_encrypt              3056   1_1_0   NOEXIST::FUNCTION:
 PKCS12_MAC_DATA_it                      3057   1_1_0   EXIST:!EXPORT_VAR_AS_FUNCTION:VARIABLE:
 PKCS12_MAC_DATA_it                      3057   1_1_0   EXIST:EXPORT_VAR_AS_FUNCTION:FUNCTION:
@@ -2586,7 +2586,7 @@ asn1_get_choice_selector                3071      1_1_0   NOEXIST::FUNCTION:
 i2d_KRB5_CHECKSUM                       3072   1_1_0   NOEXIST::FUNCTION:
 ENGINE_set_table_flags                  3073   1_1_0   EXIST::FUNCTION:ENGINE
 AES_options                             3074   1_1_0   EXIST::FUNCTION:AES
-ENGINE_load_chil                        3075   1_1_0   EXIST::FUNCTION:ENGINE,STATIC_ENGINE
+ENGINE_load_chil                        3075   1_1_0   NOEXIST::FUNCTION:
 OCSP_id_cmp                             3076   1_1_0   EXIST::FUNCTION:
 OCSP_BASICRESP_new                      3077   1_1_0   EXIST::FUNCTION:
 OCSP_REQUEST_get_ext_by_NID             3078   1_1_0   EXIST::FUNCTION:
@@ -2651,7 +2651,7 @@ OCSP_CRLID_it                           3127      1_1_0   EXIST:!EXPORT_VAR_AS_FUNCTION
 OCSP_CRLID_it                           3127   1_1_0   EXIST:EXPORT_VAR_AS_FUNCTION:FUNCTION:
 i2d_KRB5_AUTHENTBODY                    3128   1_1_0   NOEXIST::FUNCTION:
 OCSP_REQUEST_get_ext_count              3129   1_1_0   EXIST::FUNCTION:
-ENGINE_load_atalla                      3130   1_1_0   EXIST::FUNCTION:ENGINE,STATIC_ENGINE
+ENGINE_load_atalla                      3130   1_1_0   NOEXIST::FUNCTION:
 X509_NAME_it                            3131   1_1_0   EXIST:!EXPORT_VAR_AS_FUNCTION:VARIABLE:
 X509_NAME_it                            3131   1_1_0   EXIST:EXPORT_VAR_AS_FUNCTION:FUNCTION:
 USERNOTICE_it                           3132   1_1_0   EXIST:!EXPORT_VAR_AS_FUNCTION:VARIABLE:
@@ -2745,17 +2745,17 @@ DES_read_2passwords                     3206    1_1_0   EXIST::FUNCTION:DES
 DES_read_password                       3207   1_1_0   EXIST::FUNCTION:DES
 UI_UTIL_read_pw                         3208   1_1_0   EXIST::FUNCTION:
 UI_UTIL_read_pw_string                  3209   1_1_0   EXIST::FUNCTION:
-ENGINE_load_aep                         3210   1_1_0   EXIST::FUNCTION:ENGINE,STATIC_ENGINE
-ENGINE_load_sureware                    3211   1_1_0   EXIST::FUNCTION:ENGINE,STATIC_ENGINE
-OPENSSL_add_all_algorithms_noconf       3212   1_1_0   EXIST:!VMS:FUNCTION:
-OPENSSL_add_all_algo_noconf             3212   1_1_0   EXIST:VMS:FUNCTION:
-OPENSSL_add_all_algorithms_conf         3213   1_1_0   EXIST:!VMS:FUNCTION:
-OPENSSL_add_all_algo_conf               3213   1_1_0   EXIST:VMS:FUNCTION:
+ENGINE_load_aep                         3210   1_1_0   NOEXIST::FUNCTION:
+ENGINE_load_sureware                    3211   1_1_0   NOEXIST::FUNCTION:
+OPENSSL_add_all_algo_noconf             3212   1_1_0   NOEXIST::FUNCTION:
+OPENSSL_add_all_algorithms_noconf       3212   1_1_0   NOEXIST::FUNCTION:
+OPENSSL_add_all_algo_conf               3213   1_1_0   NOEXIST::FUNCTION:
+OPENSSL_add_all_algorithms_conf         3213   1_1_0   NOEXIST::FUNCTION:
 OPENSSL_load_builtin_modules            3214   1_1_0   EXIST::FUNCTION:
 AES_ofb128_encrypt                      3215   1_1_0   EXIST::FUNCTION:AES
 AES_ctr128_encrypt                      3216   1_1_0   NOEXIST::FUNCTION:
 AES_cfb128_encrypt                      3217   1_1_0   EXIST::FUNCTION:AES
-ENGINE_load_4758cca                     3218   1_1_0   EXIST::FUNCTION:ENGINE,STATIC_ENGINE
+ENGINE_load_4758cca                     3218   1_1_0   NOEXIST::FUNCTION:
 _ossl_096_des_random_seed               3219   1_1_0   NOEXIST::FUNCTION:
 EVP_aes_256_ofb                         3220   1_1_0   EXIST::FUNCTION:AES
 EVP_aes_192_ofb                         3221   1_1_0   EXIST::FUNCTION:AES
@@ -2765,7 +2765,7 @@ EVP_aes_128_ofb                         3224      1_1_0   EXIST::FUNCTION:AES
 EVP_aes_192_cfb128                      3225   1_1_0   EXIST::FUNCTION:AES
 CONF_modules_free                       3226   1_1_0   EXIST::FUNCTION:
 NCONF_default                           3227   1_1_0   EXIST::FUNCTION:
-OPENSSL_no_config                       3228   1_1_0   EXIST::FUNCTION:
+OPENSSL_no_config                       3228   1_1_0   NOEXIST::FUNCTION:
 NCONF_WIN32                             3229   1_1_0   EXIST::FUNCTION:
 ASN1_UNIVERSALSTRING_new                3230   1_1_0   EXIST::FUNCTION:
 EVP_des_ede_ecb                         3231   1_1_0   EXIST::FUNCTION:DES
@@ -3086,7 +3086,7 @@ EC_GFp_nist_method                      3529      1_1_0   EXIST::FUNCTION:EC
 STORE_meth_set_modify_fn                3530   1_1_0   NOEXIST::FUNCTION:
 STORE_method_set_modify_function        3530   1_1_0   NOEXIST::FUNCTION:
 STORE_parse_attrs_next                  3531   1_1_0   NOEXIST::FUNCTION:
-ENGINE_load_padlock                     3532   1_1_0   EXIST::FUNCTION:ENGINE,STATIC_ENGINE
+ENGINE_load_padlock                     3532   1_1_0   NOEXIST::FUNCTION:
 EC_GROUP_set_curve_name                 3533   1_1_0   EXIST::FUNCTION:EC
 X509_CERT_PAIR_it                       3534   1_1_0   NOEXIST::FUNCTION:
 STORE_meth_get_revoke_fn                3535   1_1_0   NOEXIST::FUNCTION:
@@ -3637,7 +3637,7 @@ ENGINE_set_ld_ssl_clnt_cert_fn          4044      1_1_0   EXIST:VMS:FUNCTION:ENGINE
 ENGINE_get_ssl_client_cert_function     4045   1_1_0   EXIST:!VMS:FUNCTION:ENGINE
 ENGINE_get_ssl_client_cert_fn           4045   1_1_0   EXIST:VMS:FUNCTION:ENGINE
 ENGINE_load_ssl_client_cert             4046   1_1_0   EXIST::FUNCTION:ENGINE
-ENGINE_load_capi                        4047   1_1_0   EXIST::FUNCTION:ENGINE,STATIC_ENGINE
+ENGINE_load_capi                        4047   1_1_0   NOEXIST::FUNCTION:
 OPENSSL_isservice                       4048   1_1_0   EXIST::FUNCTION:
 FIPS_dsa_sig_decode                     4049   1_1_0   NOEXIST::FUNCTION:
 EVP_CIPHER_CTX_clear_flags              4050   1_1_0   EXIST::FUNCTION:
@@ -4244,7 +4244,7 @@ CRYPTO_nistcts128_encrypt               4636      1_1_0   EXIST::FUNCTION:
 EVP_aes_128_cbc_hmac_sha1               4637   1_1_0   EXIST::FUNCTION:AES
 CRYPTO_gcm128_tag                       4638   1_1_0   EXIST::FUNCTION:
 CRYPTO_ccm128_encrypt_ccm64             4639   1_1_0   EXIST::FUNCTION:
-ENGINE_load_rdrand                      4640   1_1_0   EXIST::FUNCTION:ENGINE
+ENGINE_load_rdrand                      4640   1_1_0   NOEXIST::FUNCTION:
 CRYPTO_ccm128_setiv                     4641   1_1_0   EXIST::FUNCTION:
 CRYPTO_nistcts128_encrypt_block         4642   1_1_0   EXIST::FUNCTION:
 CRYPTO_gcm128_aad                       4643   1_1_0   EXIST::FUNCTION:
@@ -4618,7 +4618,7 @@ X509_get0_uids                          5008      1_1_0   EXIST::FUNCTION:
 X509_aux_print                          5009   1_1_0   EXIST::FUNCTION:STDIO
 TS_RESP_CTX_set_signer_digest           5010   1_1_0   EXIST::FUNCTION:
 TS_CONF_set_signer_digest               5011   1_1_0   EXIST::FUNCTION:
-ENGINE_load_dasync                      5012   1_1_0   EXIST::FUNCTION:ENGINE,STATIC_ENGINE
+ENGINE_load_dasync                      5012   1_1_0   NOEXIST::FUNCTION:
 ASYNC_pause_job                         5013   1_1_0   EXIST::FUNCTION:
 ASYNC_start_job                         5014   1_1_0   EXIST::FUNCTION:
 ASYNC_init_thread                       5015   1_1_0   EXIST::FUNCTION:
@@ -4630,8 +4630,8 @@ ASYNC_get_wait_fd                       5020      1_1_0   EXIST::FUNCTION:
 ERR_load_ASYNC_strings                  5021   1_1_0   EXIST::FUNCTION:
 ASYNC_unblock_pause                     5022   1_1_0   EXIST::FUNCTION:
 ASYNC_block_pause                       5023   1_1_0   EXIST::FUNCTION:
-ASYNC_cleanup                           5024   1_1_0   EXIST::FUNCTION:
-ASYNC_init                              5025   1_1_0   EXIST::FUNCTION:
+ASYNC_cleanup                           5024   1_1_0   NOEXIST::FUNCTION:
+ASYNC_init                              5025   1_1_0   NOEXIST::FUNCTION:
 EVP_MD_CTX_ctrl                         5026   1_1_0   EXIST::FUNCTION:
 EVP_md5_sha1                            5027   1_1_0   EXIST::FUNCTION:MD5
 CRYPTO_free_ex_index                    5028   1_1_0   EXIST::FUNCTION: