diff options
author | Ulf Möller <ulf@openssl.org> | 2001-09-07 06:14:48 +0200 |
---|---|---|
committer | Ulf Möller <ulf@openssl.org> | 2001-09-07 06:14:48 +0200 |
commit | 14cfde9c83ecfb36711930171ce129293463a83f (patch) | |
tree | 17039adf1a08e702ed7d66c81a494a3a4716313f | |
parent | Completely reworked SVR5 shared library support. (diff) | |
download | openssl-14cfde9c83ecfb36711930171ce129293463a83f.tar.xz openssl-14cfde9c83ecfb36711930171ce129293463a83f.zip |
make engine file names unique in 8.3
-rw-r--r-- | crypto/engine/Makefile.ssl | 173 | ||||
-rw-r--r-- | crypto/engine/eng_all.c (renamed from crypto/engine/engine_all.c) | 2 | ||||
-rw-r--r-- | crypto/engine/eng_dyn.c (renamed from crypto/engine/engine_dyn.c) | 2 | ||||
-rw-r--r-- | crypto/engine/eng_err.c (renamed from crypto/engine/engine_err.c) | 0 | ||||
-rw-r--r-- | crypto/engine/eng_evp.c (renamed from crypto/engine/engine_evp.c) | 2 | ||||
-rw-r--r-- | crypto/engine/eng_int.h (renamed from crypto/engine/engine_int.h) | 0 | ||||
-rw-r--r-- | crypto/engine/eng_lib.c | 864 | ||||
-rw-r--r-- | crypto/engine/eng_list.c (renamed from crypto/engine/engine_list.c) | 2 | ||||
-rw-r--r-- | crypto/engine/eng_openssl.c (renamed from crypto/engine/engine_openssl.c) | 0 | ||||
-rw-r--r-- | crypto/engine/hw_openbsd_dev_crypto.c | 2 | ||||
-rw-r--r-- | crypto/rand/Makefile.ssl | 39 | ||||
-rw-r--r-- | test/Makefile.ssl | 18 | ||||
-rwxr-xr-x | util/libeay.num | 4 |
13 files changed, 989 insertions, 119 deletions
diff --git a/crypto/engine/Makefile.ssl b/crypto/engine/Makefile.ssl index 3633f9de48..fe9ed206c2 100644 --- a/crypto/engine/Makefile.ssl +++ b/crypto/engine/Makefile.ssl @@ -23,12 +23,12 @@ TEST= enginetest.c APPS= LIB=$(TOP)/libcrypto.a -LIBSRC= engine_err.c engine_lib.c engine_list.c engine_all.c engine_openssl.c \ - engine_dyn.c engine_evp.c \ +LIBSRC= eng_err.c eng_lib.c eng_list.c eng_all.c eng_openssl.c \ + eng_dyn.c eng_evp.c \ hw_atalla.c hw_cswift.c hw_ncipher.c hw_nuron.c hw_ubsec.c \ hw_openbsd_dev_crypto.c -LIBOBJ= engine_err.o engine_lib.o engine_list.o engine_all.o engine_openssl.o \ - engine_dyn.o engine_evp.o \ +LIBOBJ= eng_err.o eng_lib.o eng_list.o eng_all.o eng_openssl.o \ + eng_dyn.o eng_evp.o \ hw_atalla.o hw_cswift.o hw_ncipher.o hw_nuron.o hw_ubsec.o \ hw_openbsd_dev_crypto.o @@ -85,91 +85,86 @@ clean: # DO NOT DELETE THIS LINE -- make depend depends on it. -engine_all.o: ../../include/openssl/asn1.h ../../include/openssl/bio.h -engine_all.o: ../../include/openssl/bn.h ../../include/openssl/crypto.h -engine_all.o: ../../include/openssl/dh.h ../../include/openssl/dsa.h -engine_all.o: ../../include/openssl/e_os2.h ../../include/openssl/engine.h -engine_all.o: ../../include/openssl/err.h ../../include/openssl/lhash.h -engine_all.o: ../../include/openssl/opensslconf.h -engine_all.o: ../../include/openssl/opensslv.h ../../include/openssl/rand.h -engine_all.o: ../../include/openssl/rsa.h ../../include/openssl/safestack.h -engine_all.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h -engine_all.o: ../../include/openssl/types.h ../../include/openssl/ui.h -engine_all.o: engine_all.c engine_int.h -engine_dyn.o: ../../e_os.h ../../include/openssl/asn1.h -engine_dyn.o: ../../include/openssl/bio.h ../../include/openssl/bn.h -engine_dyn.o: ../../include/openssl/buffer.h ../../include/openssl/crypto.h -engine_dyn.o: ../../include/openssl/dh.h ../../include/openssl/dsa.h -engine_dyn.o: ../../include/openssl/dso.h ../../include/openssl/e_os2.h -engine_dyn.o: ../../include/openssl/engine.h ../../include/openssl/err.h -engine_dyn.o: ../../include/openssl/lhash.h ../../include/openssl/opensslconf.h -engine_dyn.o: ../../include/openssl/opensslv.h ../../include/openssl/rand.h -engine_dyn.o: ../../include/openssl/rsa.h ../../include/openssl/safestack.h -engine_dyn.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h -engine_dyn.o: ../../include/openssl/types.h ../../include/openssl/ui.h -engine_dyn.o: ../cryptlib.h engine_dyn.c engine_int.h -engine_err.o: ../../include/openssl/asn1.h ../../include/openssl/bio.h -engine_err.o: ../../include/openssl/bn.h ../../include/openssl/crypto.h -engine_err.o: ../../include/openssl/dh.h ../../include/openssl/dsa.h -engine_err.o: ../../include/openssl/e_os2.h ../../include/openssl/engine.h -engine_err.o: ../../include/openssl/err.h ../../include/openssl/lhash.h -engine_err.o: ../../include/openssl/opensslconf.h -engine_err.o: ../../include/openssl/opensslv.h ../../include/openssl/rand.h -engine_err.o: ../../include/openssl/rsa.h ../../include/openssl/safestack.h -engine_err.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h -engine_err.o: ../../include/openssl/types.h ../../include/openssl/ui.h -engine_err.o: engine_err.c -engine_evp.o: ../../include/openssl/asn1.h ../../include/openssl/bio.h -engine_evp.o: ../../include/openssl/bn.h ../../include/openssl/crypto.h -engine_evp.o: ../../include/openssl/dh.h ../../include/openssl/dsa.h -engine_evp.o: ../../include/openssl/e_os2.h ../../include/openssl/engine.h -engine_evp.o: ../../include/openssl/err.h ../../include/openssl/evp.h -engine_evp.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h -engine_evp.o: ../../include/openssl/objects.h -engine_evp.o: ../../include/openssl/opensslconf.h -engine_evp.o: ../../include/openssl/opensslv.h ../../include/openssl/rand.h -engine_evp.o: ../../include/openssl/rsa.h ../../include/openssl/safestack.h -engine_evp.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h -engine_evp.o: ../../include/openssl/types.h ../../include/openssl/ui.h -engine_evp.o: engine_evp.c engine_int.h -engine_lib.o: ../../e_os.h ../../include/openssl/asn1.h -engine_lib.o: ../../include/openssl/bio.h ../../include/openssl/bn.h -engine_lib.o: ../../include/openssl/buffer.h ../../include/openssl/crypto.h -engine_lib.o: ../../include/openssl/dh.h ../../include/openssl/dsa.h -engine_lib.o: ../../include/openssl/e_os2.h ../../include/openssl/engine.h -engine_lib.o: ../../include/openssl/err.h ../../include/openssl/lhash.h -engine_lib.o: ../../include/openssl/opensslconf.h -engine_lib.o: ../../include/openssl/opensslv.h ../../include/openssl/rand.h -engine_lib.o: ../../include/openssl/rsa.h ../../include/openssl/safestack.h -engine_lib.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h -engine_lib.o: ../../include/openssl/types.h ../../include/openssl/ui.h -engine_lib.o: ../cryptlib.h engine_int.h engine_lib.c -engine_list.o: ../../e_os.h ../../include/openssl/asn1.h -engine_list.o: ../../include/openssl/bio.h ../../include/openssl/bn.h -engine_list.o: ../../include/openssl/buffer.h ../../include/openssl/crypto.h -engine_list.o: ../../include/openssl/dh.h ../../include/openssl/dsa.h -engine_list.o: ../../include/openssl/e_os2.h ../../include/openssl/engine.h -engine_list.o: ../../include/openssl/err.h ../../include/openssl/lhash.h -engine_list.o: ../../include/openssl/opensslconf.h -engine_list.o: ../../include/openssl/opensslv.h ../../include/openssl/rand.h -engine_list.o: ../../include/openssl/rsa.h ../../include/openssl/safestack.h -engine_list.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h -engine_list.o: ../../include/openssl/types.h ../../include/openssl/ui.h -engine_list.o: ../cryptlib.h engine_int.h engine_list.c -engine_openssl.o: ../../e_os.h ../../include/openssl/asn1.h -engine_openssl.o: ../../include/openssl/bio.h ../../include/openssl/bn.h -engine_openssl.o: ../../include/openssl/buffer.h ../../include/openssl/crypto.h -engine_openssl.o: ../../include/openssl/dh.h ../../include/openssl/dsa.h -engine_openssl.o: ../../include/openssl/dso.h ../../include/openssl/e_os2.h -engine_openssl.o: ../../include/openssl/engine.h ../../include/openssl/err.h -engine_openssl.o: ../../include/openssl/lhash.h -engine_openssl.o: ../../include/openssl/opensslconf.h -engine_openssl.o: ../../include/openssl/opensslv.h ../../include/openssl/rand.h -engine_openssl.o: ../../include/openssl/rsa.h ../../include/openssl/safestack.h -engine_openssl.o: ../../include/openssl/stack.h -engine_openssl.o: ../../include/openssl/symhacks.h -engine_openssl.o: ../../include/openssl/types.h ../../include/openssl/ui.h -engine_openssl.o: ../cryptlib.h engine_openssl.c +eng_all.o: ../../include/openssl/asn1.h ../../include/openssl/bio.h +eng_all.o: ../../include/openssl/bn.h ../../include/openssl/crypto.h +eng_all.o: ../../include/openssl/dh.h ../../include/openssl/dsa.h +eng_all.o: ../../include/openssl/e_os2.h ../../include/openssl/engine.h +eng_all.o: ../../include/openssl/err.h ../../include/openssl/lhash.h +eng_all.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h +eng_all.o: ../../include/openssl/rand.h ../../include/openssl/rsa.h +eng_all.o: ../../include/openssl/safestack.h ../../include/openssl/stack.h +eng_all.o: ../../include/openssl/symhacks.h ../../include/openssl/types.h +eng_all.o: ../../include/openssl/ui.h eng_all.c eng_int.h +eng_dyn.o: ../../e_os.h ../../include/openssl/asn1.h +eng_dyn.o: ../../include/openssl/bio.h ../../include/openssl/bn.h +eng_dyn.o: ../../include/openssl/buffer.h ../../include/openssl/crypto.h +eng_dyn.o: ../../include/openssl/dh.h ../../include/openssl/dsa.h +eng_dyn.o: ../../include/openssl/dso.h ../../include/openssl/e_os2.h +eng_dyn.o: ../../include/openssl/engine.h ../../include/openssl/err.h +eng_dyn.o: ../../include/openssl/lhash.h ../../include/openssl/opensslconf.h +eng_dyn.o: ../../include/openssl/opensslv.h ../../include/openssl/rand.h +eng_dyn.o: ../../include/openssl/rsa.h ../../include/openssl/safestack.h +eng_dyn.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h +eng_dyn.o: ../../include/openssl/types.h ../../include/openssl/ui.h +eng_dyn.o: ../cryptlib.h eng_dyn.c eng_int.h +eng_err.o: ../../include/openssl/asn1.h ../../include/openssl/bio.h +eng_err.o: ../../include/openssl/bn.h ../../include/openssl/crypto.h +eng_err.o: ../../include/openssl/dh.h ../../include/openssl/dsa.h +eng_err.o: ../../include/openssl/e_os2.h ../../include/openssl/engine.h +eng_err.o: ../../include/openssl/err.h ../../include/openssl/lhash.h +eng_err.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h +eng_err.o: ../../include/openssl/rand.h ../../include/openssl/rsa.h +eng_err.o: ../../include/openssl/safestack.h ../../include/openssl/stack.h +eng_err.o: ../../include/openssl/symhacks.h ../../include/openssl/types.h +eng_err.o: ../../include/openssl/ui.h eng_err.c +eng_evp.o: ../../include/openssl/asn1.h ../../include/openssl/bio.h +eng_evp.o: ../../include/openssl/bn.h ../../include/openssl/crypto.h +eng_evp.o: ../../include/openssl/dh.h ../../include/openssl/dsa.h +eng_evp.o: ../../include/openssl/e_os2.h ../../include/openssl/engine.h +eng_evp.o: ../../include/openssl/err.h ../../include/openssl/evp.h +eng_evp.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h +eng_evp.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h +eng_evp.o: ../../include/openssl/opensslv.h ../../include/openssl/rand.h +eng_evp.o: ../../include/openssl/rsa.h ../../include/openssl/safestack.h +eng_evp.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h +eng_evp.o: ../../include/openssl/types.h ../../include/openssl/ui.h eng_evp.c +eng_evp.o: eng_int.h +eng_lib.o: ../../e_os.h ../../include/openssl/asn1.h +eng_lib.o: ../../include/openssl/bio.h ../../include/openssl/bn.h +eng_lib.o: ../../include/openssl/buffer.h ../../include/openssl/crypto.h +eng_lib.o: ../../include/openssl/dh.h ../../include/openssl/dsa.h +eng_lib.o: ../../include/openssl/e_os2.h ../../include/openssl/engine.h +eng_lib.o: ../../include/openssl/err.h ../../include/openssl/lhash.h +eng_lib.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h +eng_lib.o: ../../include/openssl/rand.h ../../include/openssl/rsa.h +eng_lib.o: ../../include/openssl/safestack.h ../../include/openssl/stack.h +eng_lib.o: ../../include/openssl/symhacks.h ../../include/openssl/types.h +eng_lib.o: ../../include/openssl/ui.h ../cryptlib.h eng_int.h eng_lib.c +eng_list.o: ../../e_os.h ../../include/openssl/asn1.h +eng_list.o: ../../include/openssl/bio.h ../../include/openssl/bn.h +eng_list.o: ../../include/openssl/buffer.h ../../include/openssl/crypto.h +eng_list.o: ../../include/openssl/dh.h ../../include/openssl/dsa.h +eng_list.o: ../../include/openssl/e_os2.h ../../include/openssl/engine.h +eng_list.o: ../../include/openssl/err.h ../../include/openssl/lhash.h +eng_list.o: ../../include/openssl/opensslconf.h +eng_list.o: ../../include/openssl/opensslv.h ../../include/openssl/rand.h +eng_list.o: ../../include/openssl/rsa.h ../../include/openssl/safestack.h +eng_list.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h +eng_list.o: ../../include/openssl/types.h ../../include/openssl/ui.h +eng_list.o: ../cryptlib.h eng_int.h eng_list.c +eng_openssl.o: ../../e_os.h ../../include/openssl/asn1.h +eng_openssl.o: ../../include/openssl/bio.h ../../include/openssl/bn.h +eng_openssl.o: ../../include/openssl/buffer.h ../../include/openssl/crypto.h +eng_openssl.o: ../../include/openssl/dh.h ../../include/openssl/dsa.h +eng_openssl.o: ../../include/openssl/dso.h ../../include/openssl/e_os2.h +eng_openssl.o: ../../include/openssl/engine.h ../../include/openssl/err.h +eng_openssl.o: ../../include/openssl/lhash.h +eng_openssl.o: ../../include/openssl/opensslconf.h +eng_openssl.o: ../../include/openssl/opensslv.h ../../include/openssl/rand.h +eng_openssl.o: ../../include/openssl/rsa.h ../../include/openssl/safestack.h +eng_openssl.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h +eng_openssl.o: ../../include/openssl/types.h ../../include/openssl/ui.h +eng_openssl.o: ../cryptlib.h eng_openssl.c hw_atalla.o: ../../e_os.h ../../include/openssl/asn1.h hw_atalla.o: ../../include/openssl/bio.h ../../include/openssl/bn.h hw_atalla.o: ../../include/openssl/buffer.h ../../include/openssl/crypto.h diff --git a/crypto/engine/engine_all.c b/crypto/engine/eng_all.c index 0e8480155c..48ea6b2c34 100644 --- a/crypto/engine/engine_all.c +++ b/crypto/engine/eng_all.c @@ -58,7 +58,7 @@ #include <openssl/err.h> #include <openssl/engine.h> -#include "engine_int.h" +#include "eng_int.h" static int engine_add(ENGINE *e) { diff --git a/crypto/engine/engine_dyn.c b/crypto/engine/eng_dyn.c index 1e5eded1ee..57f7696726 100644 --- a/crypto/engine/engine_dyn.c +++ b/crypto/engine/eng_dyn.c @@ -60,7 +60,7 @@ #include <stdio.h> #include <openssl/crypto.h> #include "cryptlib.h" -#include "engine_int.h" +#include "eng_int.h" #include <openssl/engine.h> #include <openssl/dso.h> diff --git a/crypto/engine/engine_err.c b/crypto/engine/eng_err.c index e76a4e3d4d..e76a4e3d4d 100644 --- a/crypto/engine/engine_err.c +++ b/crypto/engine/eng_err.c diff --git a/crypto/engine/engine_evp.c b/crypto/engine/eng_evp.c index b2fbdc68c2..4e15c3a343 100644 --- a/crypto/engine/engine_evp.c +++ b/crypto/engine/eng_evp.c @@ -55,7 +55,7 @@ #include <openssl/engine.h> #include <openssl/evp.h> -#include "engine_int.h" +#include "eng_int.h" #include <string.h> int ENGINE_add_cipher(ENGINE *e,const EVP_CIPHER *c) diff --git a/crypto/engine/engine_int.h b/crypto/engine/eng_int.h index 2e87339db3..2e87339db3 100644 --- a/crypto/engine/engine_int.h +++ b/crypto/engine/eng_int.h diff --git a/crypto/engine/eng_lib.c b/crypto/engine/eng_lib.c new file mode 100644 index 0000000000..94ce057307 --- /dev/null +++ b/crypto/engine/eng_lib.c @@ -0,0 +1,864 @@ +/* crypto/engine/engine_lib.c */ +/* Written by Geoff Thorpe (geoff@geoffthorpe.net) for the OpenSSL + * project 2000. + */ +/* ==================================================================== + * Copyright (c) 1999 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/crypto.h> +#include "cryptlib.h" +#include "eng_int.h" +#include <openssl/engine.h> + +/* These pointers each have their own "functional reference" when they + * are non-NULL. Similarly, when they are retrieved by a call to + * ENGINE_get_default_[RSA|DSA|...] the returned pointer is also a + * reference and the caller is responsible for freeing that when they + * are finished with it (with a call to ENGINE_finish() *NOT* just + * ENGINE_free()!!!!!!). */ +#ifndef OPENSSL_NO_RSA +static ENGINE *engine_def_rsa = NULL; +#endif +#ifndef OPENSSL_NO_DSA +static ENGINE *engine_def_dsa = NULL; +#endif +#ifndef OPENSSL_NO_DH +static ENGINE *engine_def_dh = NULL; +#endif +static ENGINE *engine_def_rand = NULL; +static ENGINE *engine_def_bn_mod_exp = NULL; +static ENGINE *engine_def_bn_mod_exp_crt = NULL; +/* A static "once-only" flag used to control if/when the above were + * initialised to suitable start-up defaults. */ +static int engine_def_flag = 0; + +/* When querying a ENGINE-specific control command's 'description', this string + * is used if the ENGINE_CMD_DEFN has cmd_desc set to NULL. */ +static const char *int_no_description = ""; + +/* This is used in certain static utility functions to save code + * repetition for per-algorithm functions. */ +typedef enum { + ENGINE_TYPE_RSA, + ENGINE_TYPE_DSA, + ENGINE_TYPE_DH, + ENGINE_TYPE_RAND, + ENGINE_TYPE_BN_MOD_EXP, + ENGINE_TYPE_BN_MOD_EXP_CRT + } ENGINE_TYPE; + +static void engine_def_check_util(ENGINE **def, ENGINE *val) + { + *def = val; + val->struct_ref++; + val->funct_ref++; + engine_ref_debug(val, 0, 1) + engine_ref_debug(val, 1, 1) + } + +/* In a slight break with convention - this static function must be + * called *outside* any locking of CRYPTO_LOCK_ENGINE. */ +static void engine_def_check(void) + { + ENGINE *e; + if(engine_def_flag) + return; + e = ENGINE_get_first(); + if(e == NULL) + /* The list is empty ... not much we can do! */ + return; + /* We have a structural reference, see if getting a functional + * reference is possible. This is done to cope with init errors + * in the engine - the following locked code does a bunch of + * manual "ENGINE_init"s which do *not* allow such an init + * error so this is worth doing. */ + if(ENGINE_init(e)) + { + CRYPTO_w_lock(CRYPTO_LOCK_ENGINE); + /* Doing another check here prevents an obvious race + * condition because the whole function itself cannot + * be locked. */ + if(engine_def_flag) + goto skip_set_defaults; + /* OK, we got a functional reference, so we get one each + * for the defaults too. */ +#ifndef OPENSSL_NO_RSA + engine_def_check_util(&engine_def_rsa, e); +#endif +#ifndef OPENSSL_NO_DSA + engine_def_check_util(&engine_def_dsa, e); +#endif +#ifndef OPENSSL_NO_DH + engine_def_check_util(&engine_def_dh, e); +#endif + engine_def_check_util(&engine_def_rand, e); + engine_def_check_util(&engine_def_bn_mod_exp, e); + engine_def_check_util(&engine_def_bn_mod_exp_crt, e); + engine_def_flag = 1; +skip_set_defaults: + CRYPTO_w_unlock(CRYPTO_LOCK_ENGINE); + /* The "if" needs to be balanced out. */ + ENGINE_finish(e); + } + /* We need to balance out the fact we obtained a structural + * reference to begin with from ENGINE_get_first(). */ + ENGINE_free(e); + } + +/* Initialise a engine type for use (or up its functional reference count + * if it's already in use). */ +int ENGINE_init(ENGINE *e) + { + int to_return = 1; + + if(e == NULL) + { + ENGINEerr(ENGINE_F_ENGINE_INIT,ERR_R_PASSED_NULL_PARAMETER); + return 0; + } + CRYPTO_w_lock(CRYPTO_LOCK_ENGINE); + if((e->funct_ref == 0) && e->init) + /* This is the first functional reference and the engine + * requires initialisation so we do it now. */ + to_return = e->init(e); + if(to_return) + { + /* OK, we return a functional reference which is also a + * structural reference. */ + e->struct_ref++; + e->funct_ref++; + engine_ref_debug(e, 0, 1) + engine_ref_debug(e, 1, 1) + } + CRYPTO_w_unlock(CRYPTO_LOCK_ENGINE); + return to_return; + } + +/* Free a functional reference to a engine type */ +int ENGINE_finish(ENGINE *e) + { + int to_return = 1; + + if(e == NULL) + { + ENGINEerr(ENGINE_F_ENGINE_FINISH,ERR_R_PASSED_NULL_PARAMETER); + return 0; + } + CRYPTO_w_lock(CRYPTO_LOCK_ENGINE); + /* Reduce the functional reference count here so if it's the terminating + * case, we can release the lock safely and call the finish() handler + * without risk of a race. We get a race if we leave the count until + * after and something else is calling "finish" at the same time - + * there's a chance that both threads will together take the count from + * 2 to 0 without either calling finish(). */ + e->funct_ref--; + engine_ref_debug(e, 1, -1) + if((e->funct_ref == 0) && e->finish) + { + CRYPTO_w_unlock(CRYPTO_LOCK_ENGINE); + if(!(to_return = e->finish(e))) + { + ENGINEerr(ENGINE_F_ENGINE_FINISH,ENGINE_R_FINISH_FAILED); + return 0; + } + } + else + CRYPTO_w_unlock(CRYPTO_LOCK_ENGINE); +#ifdef REF_CHECK + if(e->funct_ref < 0) + { + fprintf(stderr,"ENGINE_finish, bad functional reference count\n"); + abort(); + } +#endif + /* Release the structural reference too */ + if(!ENGINE_free(e)) + { + ENGINEerr(ENGINE_F_ENGINE_FINISH,ENGINE_R_FINISH_FAILED); + return 0; + } + return to_return; + } + +EVP_PKEY *ENGINE_load_private_key(ENGINE *e, const char *key_id, + UI_METHOD *ui_method, void *callback_data) + { + EVP_PKEY *pkey; + + if(e == NULL) + { + ENGINEerr(ENGINE_F_ENGINE_LOAD_PRIVATE_KEY, + ERR_R_PASSED_NULL_PARAMETER); + return 0; + } + CRYPTO_w_lock(CRYPTO_LOCK_ENGINE); + if(e->funct_ref == 0) + { + CRYPTO_w_unlock(CRYPTO_LOCK_ENGINE); + ENGINEerr(ENGINE_F_ENGINE_LOAD_PRIVATE_KEY, + ENGINE_R_NOT_INITIALISED); + return 0; + } + CRYPTO_w_unlock(CRYPTO_LOCK_ENGINE); + if (!e->load_privkey) + { + ENGINEerr(ENGINE_F_ENGINE_LOAD_PRIVATE_KEY, + ENGINE_R_NO_LOAD_FUNCTION); + return 0; + } + pkey = e->load_privkey(e, key_id, ui_method, callback_data); + if (!pkey) + { + ENGINEerr(ENGINE_F_ENGINE_LOAD_PRIVATE_KEY, + ENGINE_R_FAILED_LOADING_PRIVATE_KEY); + return 0; + } + return pkey; + } + +EVP_PKEY *ENGINE_load_public_key(ENGINE *e, const char *key_id, + UI_METHOD *ui_method, void *callback_data) + { + EVP_PKEY *pkey; + + if(e == NULL) + { + ENGINEerr(ENGINE_F_ENGINE_LOAD_PUBLIC_KEY, + ERR_R_PASSED_NULL_PARAMETER); + return 0; + } + CRYPTO_w_lock(CRYPTO_LOCK_ENGINE); + if(e->funct_ref == 0) + { + CRYPTO_w_unlock(CRYPTO_LOCK_ENGINE); + ENGINEerr(ENGINE_F_ENGINE_LOAD_PUBLIC_KEY, + ENGINE_R_NOT_INITIALISED); + return 0; + } + CRYPTO_w_unlock(CRYPTO_LOCK_ENGINE); + if (!e->load_pubkey) + { + ENGINEerr(ENGINE_F_ENGINE_LOAD_PUBLIC_KEY, + ENGINE_R_NO_LOAD_FUNCTION); + return 0; + } + pkey = e->load_pubkey(e, key_id, ui_method, callback_data); + if (!pkey) + { + ENGINEerr(ENGINE_F_ENGINE_LOAD_PUBLIC_KEY, + ENGINE_R_FAILED_LOADING_PUBLIC_KEY); + return 0; + } + return pkey; + } + +/* These internal functions handle 'CMD'-related control commands when the + * ENGINE in question has asked us to take care of it (ie. the ENGINE did not + * set the ENGINE_FLAGS_MANUAL_CMD_CTRL flag. */ + +static int int_ctrl_cmd_is_null(const ENGINE_CMD_DEFN *defn) + { + if((defn->cmd_num == 0) || (defn->cmd_name == NULL)) + return 1; + return 0; + } + +static int int_ctrl_cmd_by_name(const ENGINE_CMD_DEFN *defn, const char *s) + { + int idx = 0; + while(!int_ctrl_cmd_is_null(defn) && (strcmp(defn->cmd_name, s) != 0)) + { + idx++; + defn++; + } + if(int_ctrl_cmd_is_null(defn)) + /* The given name wasn't found */ + return -1; + return idx; + } + +static int int_ctrl_cmd_by_num(const ENGINE_CMD_DEFN *defn, unsigned int num) + { + int idx = 0; + /* NB: It is stipulated that 'cmd_defn' lists are ordered by cmd_num. So + * our searches don't need to take any longer than necessary. */ + while(!int_ctrl_cmd_is_null(defn) && (defn->cmd_num < num)) + { + idx++; + defn++; + } + if(defn->cmd_num == num) + return idx; + /* The given cmd_num wasn't found */ + return -1; + } + +static int int_ctrl_helper(ENGINE *e, int cmd, long i, void *p, void (*f)()) + { + int idx; + char *s = (char *)p; + /* Take care of the easy one first (eg. it requires no searches) */ + if(cmd == ENGINE_CTRL_GET_FIRST_CMD_TYPE) + { + if((e->cmd_defns == NULL) || int_ctrl_cmd_is_null(e->cmd_defns)) + return 0; + return e->cmd_defns->cmd_num; + } + /* One or two commands require that "p" be a valid string buffer */ + if((cmd == ENGINE_CTRL_GET_CMD_FROM_NAME) || + (cmd == ENGINE_CTRL_GET_NAME_FROM_CMD) || + (cmd == ENGINE_CTRL_GET_DESC_FROM_CMD)) + { + if(s == NULL) + { + ENGINEerr(ENGINE_F_INT_CTRL_HELPER, + ERR_R_PASSED_NULL_PARAMETER); + return -1; + } + } + /* Now handle cmd_name -> cmd_num conversion */ + if(cmd == ENGINE_CTRL_GET_CMD_FROM_NAME) + { + if((e->cmd_defns == NULL) || ((idx = int_ctrl_cmd_by_name( + e->cmd_defns, s)) < 0)) + { + ENGINEerr(ENGINE_F_INT_CTRL_HELPER, + ENGINE_R_INVALID_CMD_NAME); + return -1; + } + return e->cmd_defns[idx].cmd_num; + } + /* For the rest of the commands, the 'long' argument must specify a + * valie command number - so we need to conduct a search. */ + if((e->cmd_defns == NULL) || ((idx = int_ctrl_cmd_by_num(e->cmd_defns, + (unsigned int)i)) < 0)) + { + ENGINEerr(ENGINE_F_INT_CTRL_HELPER, + ENGINE_R_INVALID_CMD_NUMBER); + return -1; + } + /* Now the logic splits depending on command type */ + switch(cmd) + { + case ENGINE_CTRL_GET_NEXT_CMD_TYPE: + idx++; + if(int_ctrl_cmd_is_null(e->cmd_defns + idx)) + /* end-of-list */ + return 0; + else + return e->cmd_defns[idx].cmd_num; + case ENGINE_CTRL_GET_NAME_LEN_FROM_CMD: + return strlen(e->cmd_defns[idx].cmd_name); + case ENGINE_CTRL_GET_NAME_FROM_CMD: + return sprintf(s, "%s", e->cmd_defns[idx].cmd_name); + case ENGINE_CTRL_GET_DESC_LEN_FROM_CMD: + if(e->cmd_defns[idx].cmd_desc) + return strlen(e->cmd_defns[idx].cmd_desc); + return strlen(int_no_description); + case ENGINE_CTRL_GET_DESC_FROM_CMD: + if(e->cmd_defns[idx].cmd_desc) + return sprintf(s, "%s", e->cmd_defns[idx].cmd_desc); + return sprintf(s, "%s", int_no_description); + case ENGINE_CTRL_GET_CMD_FLAGS: + return e->cmd_defns[idx].cmd_flags; + } + /* Shouldn't really be here ... */ + ENGINEerr(ENGINE_F_INT_CTRL_HELPER,ENGINE_R_INTERNAL_LIST_ERROR); + return -1; + } + +int ENGINE_ctrl(ENGINE *e, int cmd, long i, void *p, void (*f)()) + { + int ctrl_exists, ref_exists; + if(e == NULL) + { + ENGINEerr(ENGINE_F_ENGINE_CTRL,ERR_R_PASSED_NULL_PARAMETER); + return 0; + } + CRYPTO_w_lock(CRYPTO_LOCK_ENGINE); + ref_exists = ((e->struct_ref > 0) ? 1 : 0); + CRYPTO_w_unlock(CRYPTO_LOCK_ENGINE); + ctrl_exists = ((e->ctrl == NULL) ? 0 : 1); + if(!ref_exists) + { + ENGINEerr(ENGINE_F_ENGINE_CTRL,ENGINE_R_NO_REFERENCE); + return 0; + } + /* Intercept any "root-level" commands before trying to hand them on to + * ctrl() handlers. */ + switch(cmd) + { + case ENGINE_CTRL_HAS_CTRL_FUNCTION: + return ctrl_exists; + case ENGINE_CTRL_GET_FIRST_CMD_TYPE: + case ENGINE_CTRL_GET_NEXT_CMD_TYPE: + case ENGINE_CTRL_GET_CMD_FROM_NAME: + case ENGINE_CTRL_GET_NAME_LEN_FROM_CMD: + case ENGINE_CTRL_GET_NAME_FROM_CMD: + case ENGINE_CTRL_GET_DESC_LEN_FROM_CMD: + case ENGINE_CTRL_GET_DESC_FROM_CMD: + case ENGINE_CTRL_GET_CMD_FLAGS: + if(ctrl_exists && !(e->flags & ENGINE_FLAGS_MANUAL_CMD_CTRL)) + return int_ctrl_helper(e,cmd,i,p,f); + if(!ctrl_exists) + { + ENGINEerr(ENGINE_F_ENGINE_CTRL,ENGINE_R_NO_CONTROL_FUNCTION); + /* For these cmd-related functions, failure is indicated + * by a -1 return value (because 0 is used as a valid + * return in some places). */ + return -1; + } + default: + break; + } + /* Anything else requires a ctrl() handler to exist. */ + if(!ctrl_exists) + { + ENGINEerr(ENGINE_F_ENGINE_CTRL,ENGINE_R_NO_CONTROL_FUNCTION); + return 0; + } + return e->ctrl(e, cmd, i, p, f); + } + +int ENGINE_cmd_is_executable(ENGINE *e, int cmd) + { + int flags; + if((flags = ENGINE_ctrl(e, ENGINE_CTRL_GET_CMD_FLAGS, cmd, NULL, NULL)) < 0) + { + ENGINEerr(ENGINE_F_ENGINE_CMD_IS_EXECUTABLE, + ENGINE_R_INVALID_CMD_NUMBER); + return 0; + } + if(!(flags & ENGINE_CMD_FLAG_NO_INPUT) && + !(flags & ENGINE_CMD_FLAG_NUMERIC) && + !(flags & ENGINE_CMD_FLAG_STRING)) + return 0; + return 1; + } + +int ENGINE_ctrl_cmd(ENGINE *e, const char *cmd_name, + long i, void *p, void (*f)(), int cmd_optional) + { + int num; + + if((e == NULL) || (cmd_name == NULL)) + { + ENGINEerr(ENGINE_F_ENGINE_CTRL_CMD_STRING, + ERR_R_PASSED_NULL_PARAMETER); + return 0; + } + if((e->ctrl == NULL) || ((num = ENGINE_ctrl(e, + ENGINE_CTRL_GET_CMD_FROM_NAME, + 0, (void *)cmd_name, NULL)) <= 0)) + { + /* If the command didn't *have* to be supported, we fake + * success. This allows certain settings to be specified for + * multiple ENGINEs and only require a change of ENGINE id + * (without having to selectively apply settings). Eg. changing + * from a hardware device back to the regular software ENGINE + * without editing the config file, etc. */ + if(cmd_optional) + { + ERR_clear_error(); + return 1; + } + ENGINEerr(ENGINE_F_ENGINE_CTRL_CMD, + ENGINE_R_INVALID_CMD_NAME); + return 0; + } + /* Force the result of the control command to 0 or 1, for the reasons + * mentioned before. */ + if (ENGINE_ctrl(e, num, i, p, f)) + return 1; + return 0; + } + +int ENGINE_ctrl_cmd_string(ENGINE *e, const char *cmd_name, const char *arg, + int cmd_optional) + { + int num, flags; + long l; + char *ptr; + if((e == NULL) || (cmd_name == NULL)) + { + ENGINEerr(ENGINE_F_ENGINE_CTRL_CMD_STRING, + ERR_R_PASSED_NULL_PARAMETER); + return 0; + } + if((e->ctrl == NULL) || ((num = ENGINE_ctrl(e, + ENGINE_CTRL_GET_CMD_FROM_NAME, + 0, (void *)cmd_name, NULL)) <= 0)) + { + /* If the command didn't *have* to be supported, we fake + * success. This allows certain settings to be specified for + * multiple ENGINEs and only require a change of ENGINE id + * (without having to selectively apply settings). Eg. changing + * from a hardware device back to the regular software ENGINE + * without editing the config file, etc. */ + if(cmd_optional) + { + ERR_clear_error(); + return 1; + } + ENGINEerr(ENGINE_F_ENGINE_CTRL_CMD_STRING, + ENGINE_R_INVALID_CMD_NAME); + return 0; + } + if(!ENGINE_cmd_is_executable(e, num)) + { + ENGINEerr(ENGINE_F_ENGINE_CTRL_CMD_STRING, + ENGINE_R_CMD_NOT_EXECUTABLE); + return 0; + } + if((flags = ENGINE_ctrl(e, ENGINE_CTRL_GET_CMD_FLAGS, num, NULL, NULL)) < 0) + { + /* Shouldn't happen, given that ENGINE_cmd_is_executable() + * returned success. */ + ENGINEerr(ENGINE_F_ENGINE_CTRL_CMD_STRING, + ENGINE_R_INTERNAL_LIST_ERROR); + return 0; + } + /* If the command takes no input, there must be no input. And vice + * versa. */ + if(flags & ENGINE_CMD_FLAG_NO_INPUT) + { + if(arg != NULL) + { + ENGINEerr(ENGINE_F_ENGINE_CTRL_CMD_STRING, + ENGINE_R_COMMAND_TAKES_NO_INPUT); + return 0; + } + /* We deliberately force the result of ENGINE_ctrl() to 0 or 1 + * rather than returning it as "return data". This is to ensure + * usage of these commands is consistent across applications and + * that certain applications don't understand it one way, and + * others another. */ + if(ENGINE_ctrl(e, num, 0, (void *)arg, NULL)) + return 1; + return 0; + } + /* So, we require input */ + if(arg == NULL) + { + ENGINEerr(ENGINE_F_ENGINE_CTRL_CMD_STRING, + ENGINE_R_COMMAND_TAKES_INPUT); + return 0; + } + /* If it takes string input, that's easy */ + if(flags & ENGINE_CMD_FLAG_STRING) + { + /* Same explanation as above */ + if(ENGINE_ctrl(e, num, 0, (void *)arg, NULL)) + return 1; + return 0; + } + /* If it doesn't take numeric either, then it is unsupported for use in + * a config-setting situation, which is what this function is for. This + * should never happen though, because ENGINE_cmd_is_executable() was + * used. */ + if(!(flags & ENGINE_CMD_FLAG_NUMERIC)) + { + ENGINEerr(ENGINE_F_ENGINE_CTRL_CMD_STRING, + ENGINE_R_INTERNAL_LIST_ERROR); + return 0; + } + l = strtol(arg, &ptr, 10); + if((arg == ptr) || (*ptr != '\0')) + { + ENGINEerr(ENGINE_F_ENGINE_CTRL_CMD_STRING, + ENGINE_R_ARGUMENT_IS_NOT_A_NUMBER); + return 0; + } + /* Force the result of the control command to 0 or 1, for the reasons + * mentioned before. */ + if(ENGINE_ctrl(e, num, l, NULL, NULL)) + return 1; + return 0; + } + +static ENGINE *engine_get_default_type(ENGINE_TYPE t) + { + ENGINE *ret = NULL; + + /* engine_def_check is lean and mean and won't replace any + * prior default engines ... so we must ensure that it is always + * the first function to get to touch the default values. */ + engine_def_check(); + CRYPTO_w_lock(CRYPTO_LOCK_ENGINE); + switch(t) + { +#ifndef OPENSSL_NO_RSA + case ENGINE_TYPE_RSA: + ret = engine_def_rsa; break; +#endif +#ifndef OPENSSL_NO_DSA + case ENGINE_TYPE_DSA: + ret = engine_def_dsa; break; +#endif +#ifndef OPENSSL_NO_DH + case ENGINE_TYPE_DH: + ret = engine_def_dh; break; +#endif + case ENGINE_TYPE_RAND: + ret = engine_def_rand; break; + case ENGINE_TYPE_BN_MOD_EXP: + ret = engine_def_bn_mod_exp; break; + case ENGINE_TYPE_BN_MOD_EXP_CRT: + ret = engine_def_bn_mod_exp_crt; break; + default: + break; + } + /* Unforunately we can't do this work outside the lock with a + * call to ENGINE_init() because that would leave a race + * condition open. */ + if(ret) + { + ret->struct_ref++; + ret->funct_ref++; + engine_ref_debug(ret, 0, 1) + engine_ref_debug(ret, 1, 1) + } + CRYPTO_w_unlock(CRYPTO_LOCK_ENGINE); + return ret; + } + +#ifndef OPENSSL_NO_RSA +ENGINE *ENGINE_get_default_RSA(void) + { + return engine_get_default_type(ENGINE_TYPE_RSA); + } +#endif + +#ifndef OPENSSL_NO_DSA +ENGINE *ENGINE_get_default_DSA(void) + { + return engine_get_default_type(ENGINE_TYPE_DSA); + } +#endif + +#ifndef OPENSSL_NO_DH +ENGINE *ENGINE_get_default_DH(void) + { + return engine_get_default_type(ENGINE_TYPE_DH); + } +#endif + +ENGINE *ENGINE_get_default_RAND(void) + { + return engine_get_default_type(ENGINE_TYPE_RAND); + } + +ENGINE *ENGINE_get_default_BN_mod_exp(void) + { + return engine_get_default_type(ENGINE_TYPE_BN_MOD_EXP); + } + +ENGINE *ENGINE_get_default_BN_mod_exp_crt(void) + { + return engine_get_default_type(ENGINE_TYPE_BN_MOD_EXP_CRT); + } + +static int engine_set_default_type(ENGINE_TYPE t, ENGINE *e) + { + ENGINE *old = NULL; + + /* engine_def_check is lean and mean and won't replace any + * prior default engines ... so we must ensure that it is always + * the first function to get to touch the default values. */ + engine_def_check(); + /* Attempt to get a functional reference (we need one anyway, but + * also, 'e' may be just a structural reference being passed in so + * this call may actually be the first). */ + if(e && !ENGINE_init(e)) + { + ENGINEerr(ENGINE_F_ENGINE_SET_DEFAULT_TYPE, + ENGINE_R_INIT_FAILED); + return 0; + } + CRYPTO_w_lock(CRYPTO_LOCK_ENGINE); + switch(t) + { +#ifndef OPENSSL_NO_RSA + case ENGINE_TYPE_RSA: + old = engine_def_rsa; + engine_def_rsa = e; break; +#endif +#ifndef OPENSSL_NO_DSA + case ENGINE_TYPE_DSA: + old = engine_def_dsa; + engine_def_dsa = e; break; +#endif +#ifndef OPENSSL_NO_DH + case ENGINE_TYPE_DH: + old = engine_def_dh; + engine_def_dh = e; break; +#endif + case ENGINE_TYPE_RAND: + old = engine_def_rand; + engine_def_rand = e; break; + case ENGINE_TYPE_BN_MOD_EXP: + old = engine_def_bn_mod_exp; + engine_def_bn_mod_exp = e; break; + case ENGINE_TYPE_BN_MOD_EXP_CRT: + old = engine_def_bn_mod_exp_crt; + engine_def_bn_mod_exp_crt = e; break; + default: + break; + } + CRYPTO_w_unlock(CRYPTO_LOCK_ENGINE); + /* If we've replaced a previous value, then we need to remove the + * functional reference we had. */ + if(old && !ENGINE_finish(old)) + { + ENGINEerr(ENGINE_F_ENGINE_SET_DEFAULT_TYPE, + ENGINE_R_FINISH_FAILED); + return 0; + } + return 1; + } + +#ifndef OPENSSL_NO_RSA +int ENGINE_set_default_RSA(ENGINE *e) + { + return engine_set_default_type(ENGINE_TYPE_RSA, e); + } +#endif + +#ifndef OPENSSL_NO_DSA +int ENGINE_set_default_DSA(ENGINE *e) + { + return engine_set_default_type(ENGINE_TYPE_DSA, e); + } +#endif + +#ifndef OPENSSL_NO_DH +int ENGINE_set_default_DH(ENGINE *e) + { + return engine_set_default_type(ENGINE_TYPE_DH, e); + } +#endif + +int ENGINE_set_default_RAND(ENGINE *e) + { + return engine_set_default_type(ENGINE_TYPE_RAND, e); + } + +int ENGINE_set_default_BN_mod_exp(ENGINE *e) + { + return engine_set_default_type(ENGINE_TYPE_BN_MOD_EXP, e); + } + +int ENGINE_set_default_BN_mod_exp_crt(ENGINE *e) + { + return engine_set_default_type(ENGINE_TYPE_BN_MOD_EXP_CRT, e); + } + +int ENGINE_set_default(ENGINE *e, unsigned int flags) + { +#ifndef OPENSSL_NO_RSA + if((flags & ENGINE_METHOD_RSA) && e->rsa_meth && + !ENGINE_set_default_RSA(e)) + return 0; +#endif +#ifndef OPENSSL_NO_DSA + if((flags & ENGINE_METHOD_DSA) && e->dsa_meth && + !ENGINE_set_default_DSA(e)) + return 0; +#endif +#ifndef OPENSSL_NO_DH + if((flags & ENGINE_METHOD_DH) && e->dh_meth && + !ENGINE_set_default_DH(e)) + return 0; +#endif + if((flags & ENGINE_METHOD_RAND) && e->rand_meth && + !ENGINE_set_default_RAND(e)) + return 0; + if((flags & ENGINE_METHOD_BN_MOD_EXP) && e->bn_mod_exp && + !ENGINE_set_default_BN_mod_exp(e)) + return 0; + if((flags & ENGINE_METHOD_BN_MOD_EXP_CRT) && e->bn_mod_exp_crt && + !ENGINE_set_default_BN_mod_exp_crt(e)) + return 0; + return 1; + } + +int ENGINE_clear_defaults(void) + { + /* If the defaults haven't even been set yet, don't bother. Any kind of + * "cleanup" has a kind of implicit race-condition if another thread is + * trying to keep going, so we don't address that with locking. The + * first ENGINE_set_default_*** call will actually *create* a standard + * set of default ENGINEs (including init() and functional reference + * counts aplenty) before the rest of this function undoes them all. So + * save some hassle ... */ + if(!engine_def_flag) + return 1; + if((0 == 1) || +#ifndef OPENSSL_NO_RSA + !ENGINE_set_default_RSA(NULL) || +#endif +#ifndef OPENSSL_NO_DSA + !ENGINE_set_default_DSA(NULL) || +#endif +#ifndef OPENSSL_NO_DH + !ENGINE_set_default_DH(NULL) || +#endif + !ENGINE_set_default_RAND(NULL) || + !ENGINE_set_default_BN_mod_exp(NULL) || + !ENGINE_set_default_BN_mod_exp_crt(NULL) || + !RAND_set_rand_method(NULL)) + return 0; + return 1; + } + diff --git a/crypto/engine/engine_list.c b/crypto/engine/eng_list.c index 428ccd8cad..ce45b14df3 100644 --- a/crypto/engine/engine_list.c +++ b/crypto/engine/eng_list.c @@ -58,7 +58,7 @@ #include <openssl/crypto.h> #include "cryptlib.h" -#include "engine_int.h" +#include "eng_int.h" #include <openssl/engine.h> /* The linked-list of pointers to engine types. engine_list_head diff --git a/crypto/engine/engine_openssl.c b/crypto/engine/eng_openssl.c index c353df97d6..c353df97d6 100644 --- a/crypto/engine/engine_openssl.c +++ b/crypto/engine/eng_openssl.c diff --git a/crypto/engine/hw_openbsd_dev_crypto.c b/crypto/engine/hw_openbsd_dev_crypto.c index 6479a7c249..101df96fcd 100644 --- a/crypto/engine/hw_openbsd_dev_crypto.c +++ b/crypto/engine/hw_openbsd_dev_crypto.c @@ -57,7 +57,7 @@ #include <openssl/engine.h> #include <openssl/evp.h> -#include "engine_int.h" +#include "eng_int.h" static void load_ciphers(ENGINE *e) { diff --git a/crypto/rand/Makefile.ssl b/crypto/rand/Makefile.ssl index 68912da789..3cc76d2eca 100644 --- a/crypto/rand/Makefile.ssl +++ b/crypto/rand/Makefile.ssl @@ -88,9 +88,9 @@ md_rand.o: ../../include/openssl/err.h ../../include/openssl/evp.h md_rand.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h md_rand.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h md_rand.o: ../../include/openssl/opensslv.h ../../include/openssl/rand.h -md_rand.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h -md_rand.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h -md_rand.o: ../../include/openssl/types.h md_rand.c rand_lcl.h +md_rand.o: ../../include/openssl/safestack.h ../../include/openssl/stack.h +md_rand.o: ../../include/openssl/symhacks.h ../../include/openssl/types.h +md_rand.o: md_rand.c rand_lcl.h rand_egd.o: ../../include/openssl/e_os2.h ../../include/openssl/opensslconf.h rand_egd.o: ../../include/openssl/rand.h rand_egd.c rand_err.o: ../../include/openssl/bio.h ../../include/openssl/crypto.h @@ -111,29 +111,38 @@ rand_lib.o: ../../include/openssl/rsa.h ../../include/openssl/safestack.h rand_lib.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h rand_lib.o: ../../include/openssl/types.h ../../include/openssl/ui.h rand_lib.o: ../cryptlib.h rand_lib.c -rand_os2.o: ../../e_os.h ../../include/openssl/bio.h +rand_os2.o: ../../e_os.h ../../include/openssl/asn1.h +rand_os2.o: ../../include/openssl/bio.h ../../include/openssl/bn.h rand_os2.o: ../../include/openssl/buffer.h ../../include/openssl/crypto.h rand_os2.o: ../../include/openssl/e_os2.h ../../include/openssl/err.h -rand_os2.o: ../../include/openssl/lhash.h ../../include/openssl/opensslconf.h +rand_os2.o: ../../include/openssl/evp.h ../../include/openssl/lhash.h +rand_os2.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h +rand_os2.o: ../../include/openssl/opensslconf.h rand_os2.o: ../../include/openssl/opensslv.h ../../include/openssl/rand.h -rand_os2.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h -rand_os2.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h +rand_os2.o: ../../include/openssl/safestack.h ../../include/openssl/stack.h +rand_os2.o: ../../include/openssl/symhacks.h ../../include/openssl/types.h rand_os2.o: ../cryptlib.h rand_lcl.h rand_os2.c -rand_unix.o: ../../e_os.h ../../include/openssl/bio.h +rand_unix.o: ../../e_os.h ../../include/openssl/asn1.h +rand_unix.o: ../../include/openssl/bio.h ../../include/openssl/bn.h rand_unix.o: ../../include/openssl/buffer.h ../../include/openssl/crypto.h rand_unix.o: ../../include/openssl/e_os2.h ../../include/openssl/err.h -rand_unix.o: ../../include/openssl/lhash.h ../../include/openssl/opensslconf.h +rand_unix.o: ../../include/openssl/evp.h ../../include/openssl/lhash.h +rand_unix.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h +rand_unix.o: ../../include/openssl/opensslconf.h rand_unix.o: ../../include/openssl/opensslv.h ../../include/openssl/rand.h -rand_unix.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h -rand_unix.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h +rand_unix.o: ../../include/openssl/safestack.h ../../include/openssl/stack.h +rand_unix.o: ../../include/openssl/symhacks.h ../../include/openssl/types.h rand_unix.o: ../cryptlib.h rand_lcl.h rand_unix.c -rand_win.o: ../../e_os.h ../../include/openssl/bio.h +rand_win.o: ../../e_os.h ../../include/openssl/asn1.h +rand_win.o: ../../include/openssl/bio.h ../../include/openssl/bn.h rand_win.o: ../../include/openssl/buffer.h ../../include/openssl/crypto.h rand_win.o: ../../include/openssl/e_os2.h ../../include/openssl/err.h -rand_win.o: ../../include/openssl/lhash.h ../../include/openssl/opensslconf.h +rand_win.o: ../../include/openssl/evp.h ../../include/openssl/lhash.h +rand_win.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h +rand_win.o: ../../include/openssl/opensslconf.h rand_win.o: ../../include/openssl/opensslv.h ../../include/openssl/rand.h -rand_win.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h -rand_win.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h +rand_win.o: ../../include/openssl/safestack.h ../../include/openssl/stack.h +rand_win.o: ../../include/openssl/symhacks.h ../../include/openssl/types.h rand_win.o: ../cryptlib.h rand_lcl.h rand_win.c randfile.o: ../../e_os.h ../../include/openssl/crypto.h randfile.o: ../../include/openssl/e_os2.h ../../include/openssl/opensslconf.h diff --git a/test/Makefile.ssl b/test/Makefile.ssl index 003ac375bf..d71f270be7 100644 --- a/test/Makefile.ssl +++ b/test/Makefile.ssl @@ -402,15 +402,15 @@ ectest.o: ../include/openssl/rsa.h ../include/openssl/safestack.h ectest.o: ../include/openssl/stack.h ../include/openssl/symhacks.h ectest.o: ../include/openssl/types.h ../include/openssl/ui.h ectest.c enginetest.o: ../include/openssl/asn1.h ../include/openssl/bio.h -enginetest.o: ../include/openssl/bn.h ../include/openssl/crypto.h -enginetest.o: ../include/openssl/dh.h ../include/openssl/dsa.h -enginetest.o: ../include/openssl/e_os2.h ../include/openssl/engine.h -enginetest.o: ../include/openssl/err.h ../include/openssl/lhash.h -enginetest.o: ../include/openssl/opensslconf.h ../include/openssl/opensslv.h -enginetest.o: ../include/openssl/rand.h ../include/openssl/rsa.h -enginetest.o: ../include/openssl/safestack.h ../include/openssl/stack.h -enginetest.o: ../include/openssl/symhacks.h ../include/openssl/types.h -enginetest.o: ../include/openssl/ui.h enginetest.c +enginetest.o: ../include/openssl/bn.h ../include/openssl/buffer.h +enginetest.o: ../include/openssl/crypto.h ../include/openssl/dh.h +enginetest.o: ../include/openssl/dsa.h ../include/openssl/e_os2.h +enginetest.o: ../include/openssl/engine.h ../include/openssl/err.h +enginetest.o: ../include/openssl/lhash.h ../include/openssl/opensslconf.h +enginetest.o: ../include/openssl/opensslv.h ../include/openssl/rand.h +enginetest.o: ../include/openssl/rsa.h ../include/openssl/safestack.h +enginetest.o: ../include/openssl/stack.h ../include/openssl/symhacks.h +enginetest.o: ../include/openssl/types.h ../include/openssl/ui.h enginetest.c evp_test.o: ../include/openssl/asn1.h ../include/openssl/bio.h evp_test.o: ../include/openssl/bn.h ../include/openssl/crypto.h evp_test.o: ../include/openssl/dh.h ../include/openssl/dsa.h diff --git a/util/libeay.num b/util/libeay.num index 61c70b4e8b..9665c2eac3 100755 --- a/util/libeay.num +++ b/util/libeay.num @@ -2627,7 +2627,7 @@ HMAC_CTX_init 3075 EXIST::FUNCTION:HMAC HMAC_CTX_cleanup 3076 EXIST::FUNCTION:HMAC EVP_MD_CTX_cleanup 3077 EXIST::FUNCTION: EVP_MD_CTX_destroy 3078 EXIST::FUNCTION: -des_release_key 3079 EXIST::FUNCTION:DES +des_release_key 3079 NOEXIST::FUNCTION: ENGINE_load_openbsd_dev_crypto 3080 EXIST::FUNCTION: ENGINE_add_all_evp 3081 NOEXIST::FUNCTION: ENGINE_add_evp_cipher 3082 NOEXIST::FUNCTION: @@ -2659,3 +2659,5 @@ CRYPTO_ex_data_new_class 3107 EXIST::FUNCTION: CRYPTO_get_ex_data_implementation 3108 EXIST::FUNCTION: BN_pseudo_rand_range 3109 EXIST::FUNCTION: ERR_unload_strings 3110 EXIST::FUNCTION: +ENGINE_set_destroy_function 3111 EXIST::FUNCTION: +ENGINE_get_destroy_function 3112 EXIST::FUNCTION: |