Home | History | Annotate | Download | only in engine
      1 /* crypto/engine/eng_fat.c */
      2 /* ====================================================================
      3  * Copyright (c) 1999-2001 The OpenSSL Project.  All rights reserved.
      4  *
      5  * Redistribution and use in source and binary forms, with or without
      6  * modification, are permitted provided that the following conditions
      7  * are met:
      8  *
      9  * 1. Redistributions of source code must retain the above copyright
     10  *    notice, this list of conditions and the following disclaimer.
     11  *
     12  * 2. Redistributions in binary form must reproduce the above copyright
     13  *    notice, this list of conditions and the following disclaimer in
     14  *    the documentation and/or other materials provided with the
     15  *    distribution.
     16  *
     17  * 3. All advertising materials mentioning features or use of this
     18  *    software must display the following acknowledgment:
     19  *    "This product includes software developed by the OpenSSL Project
     20  *    for use in the OpenSSL Toolkit. (http://www.OpenSSL.org/)"
     21  *
     22  * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to
     23  *    endorse or promote products derived from this software without
     24  *    prior written permission. For written permission, please contact
     25  *    licensing (at) OpenSSL.org.
     26  *
     27  * 5. Products derived from this software may not be called "OpenSSL"
     28  *    nor may "OpenSSL" appear in their names without prior written
     29  *    permission of the OpenSSL Project.
     30  *
     31  * 6. Redistributions of any form whatsoever must retain the following
     32  *    acknowledgment:
     33  *    "This product includes software developed by the OpenSSL Project
     34  *    for use in the OpenSSL Toolkit (http://www.OpenSSL.org/)"
     35  *
     36  * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY
     37  * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
     38  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
     39  * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE OpenSSL PROJECT OR
     40  * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
     41  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
     42  * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
     43  * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
     44  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
     45  * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
     46  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
     47  * OF THE POSSIBILITY OF SUCH DAMAGE.
     48  * ====================================================================
     49  *
     50  * This product includes cryptographic software written by Eric Young
     51  * (eay (at) cryptsoft.com).  This product includes software written by Tim
     52  * Hudson (tjh (at) cryptsoft.com).
     53  *
     54  */
     55 /* ====================================================================
     56  * Copyright 2002 Sun Microsystems, Inc. ALL RIGHTS RESERVED.
     57  * ECDH support in OpenSSL originally developed by
     58  * SUN MICROSYSTEMS, INC., and contributed to the OpenSSL project.
     59  */
     60 
     61 #include "eng_int.h"
     62 #include <openssl/conf.h>
     63 
     64 int ENGINE_set_default(ENGINE *e, unsigned int flags)
     65 	{
     66 	if((flags & ENGINE_METHOD_CIPHERS) && !ENGINE_set_default_ciphers(e))
     67 		return 0;
     68 	if((flags & ENGINE_METHOD_DIGESTS) && !ENGINE_set_default_digests(e))
     69 		return 0;
     70 #ifndef OPENSSL_NO_RSA
     71 	if((flags & ENGINE_METHOD_RSA) && !ENGINE_set_default_RSA(e))
     72 		return 0;
     73 #endif
     74 #ifndef OPENSSL_NO_DSA
     75 	if((flags & ENGINE_METHOD_DSA) && !ENGINE_set_default_DSA(e))
     76 		return 0;
     77 #endif
     78 #ifndef OPENSSL_NO_DH
     79 	if((flags & ENGINE_METHOD_DH) && !ENGINE_set_default_DH(e))
     80 		return 0;
     81 #endif
     82 #ifndef OPENSSL_NO_ECDH
     83 	if((flags & ENGINE_METHOD_ECDH) && !ENGINE_set_default_ECDH(e))
     84 		return 0;
     85 #endif
     86 #ifndef OPENSSL_NO_ECDSA
     87 	if((flags & ENGINE_METHOD_ECDSA) && !ENGINE_set_default_ECDSA(e))
     88 		return 0;
     89 #endif
     90 	if((flags & ENGINE_METHOD_RAND) && !ENGINE_set_default_RAND(e))
     91 		return 0;
     92 	if((flags & ENGINE_METHOD_PKEY_METHS)
     93 				&& !ENGINE_set_default_pkey_meths(e))
     94 		return 0;
     95 	if((flags & ENGINE_METHOD_PKEY_ASN1_METHS)
     96 				&& !ENGINE_set_default_pkey_asn1_meths(e))
     97 		return 0;
     98 	return 1;
     99 	}
    100 
    101 /* Set default algorithms using a string */
    102 
    103 static int int_def_cb(const char *alg, int len, void *arg)
    104 	{
    105 	unsigned int *pflags = arg;
    106 	if (!strncmp(alg, "ALL", len))
    107 		*pflags |= ENGINE_METHOD_ALL;
    108 	else if (!strncmp(alg, "RSA", len))
    109 		*pflags |= ENGINE_METHOD_RSA;
    110 	else if (!strncmp(alg, "DSA", len))
    111 		*pflags |= ENGINE_METHOD_DSA;
    112 	else if (!strncmp(alg, "ECDH", len))
    113 		*pflags |= ENGINE_METHOD_ECDH;
    114 	else if (!strncmp(alg, "ECDSA", len))
    115 		*pflags |= ENGINE_METHOD_ECDSA;
    116 	else if (!strncmp(alg, "DH", len))
    117 		*pflags |= ENGINE_METHOD_DH;
    118 	else if (!strncmp(alg, "RAND", len))
    119 		*pflags |= ENGINE_METHOD_RAND;
    120 	else if (!strncmp(alg, "CIPHERS", len))
    121 		*pflags |= ENGINE_METHOD_CIPHERS;
    122 	else if (!strncmp(alg, "DIGESTS", len))
    123 		*pflags |= ENGINE_METHOD_DIGESTS;
    124 	else if (!strncmp(alg, "PKEY", len))
    125 		*pflags |=
    126 			ENGINE_METHOD_PKEY_METHS|ENGINE_METHOD_PKEY_ASN1_METHS;
    127 	else if (!strncmp(alg, "PKEY_CRYPTO", len))
    128 		*pflags |= ENGINE_METHOD_PKEY_METHS;
    129 	else if (!strncmp(alg, "PKEY_ASN1", len))
    130 		*pflags |= ENGINE_METHOD_PKEY_ASN1_METHS;
    131 	else
    132 		return 0;
    133 	return 1;
    134 	}
    135 
    136 
    137 int ENGINE_set_default_string(ENGINE *e, const char *def_list)
    138 	{
    139 	unsigned int flags = 0;
    140 	if (!CONF_parse_list(def_list, ',', 1, int_def_cb, &flags))
    141 		{
    142 		ENGINEerr(ENGINE_F_ENGINE_SET_DEFAULT_STRING,
    143 					ENGINE_R_INVALID_STRING);
    144 		ERR_add_error_data(2, "str=",def_list);
    145 		return 0;
    146 		}
    147 	return ENGINE_set_default(e, flags);
    148 	}
    149 
    150 int ENGINE_register_complete(ENGINE *e)
    151 	{
    152 	ENGINE_register_ciphers(e);
    153 	ENGINE_register_digests(e);
    154 #ifndef OPENSSL_NO_RSA
    155 	ENGINE_register_RSA(e);
    156 #endif
    157 #ifndef OPENSSL_NO_DSA
    158 	ENGINE_register_DSA(e);
    159 #endif
    160 #ifndef OPENSSL_NO_DH
    161 	ENGINE_register_DH(e);
    162 #endif
    163 #ifndef OPENSSL_NO_ECDH
    164 	ENGINE_register_ECDH(e);
    165 #endif
    166 #ifndef OPENSSL_NO_ECDSA
    167 	ENGINE_register_ECDSA(e);
    168 #endif
    169 	ENGINE_register_RAND(e);
    170 	ENGINE_register_pkey_meths(e);
    171 	return 1;
    172 	}
    173 
    174 int ENGINE_register_all_complete(void)
    175 	{
    176 	ENGINE *e;
    177 
    178 	for(e=ENGINE_get_first() ; e ; e=ENGINE_get_next(e))
    179 		if (!(e->flags & ENGINE_FLAGS_NO_REGISTER_ALL))
    180 			ENGINE_register_complete(e);
    181 	return 1;
    182 	}
    183