1 /* $OpenBSD: engine.h,v 1.43 2023/11/19 15:41:46 tb Exp $ */ 2 /* Written by Geoff Thorpe (geoff@geoffthorpe.net) for the OpenSSL 3 * project 2000. 4 */ 5 /* ==================================================================== 6 * Copyright (c) 1999-2004 The OpenSSL Project. All rights reserved. 7 * 8 * Redistribution and use in source and binary forms, with or without 9 * modification, are permitted provided that the following conditions 10 * are met: 11 * 12 * 1. Redistributions of source code must retain the above copyright 13 * notice, this list of conditions and the following disclaimer. 14 * 15 * 2. Redistributions in binary form must reproduce the above copyright 16 * notice, this list of conditions and the following disclaimer in 17 * the documentation and/or other materials provided with the 18 * distribution. 19 * 20 * 3. All advertising materials mentioning features or use of this 21 * software must display the following acknowledgment: 22 * "This product includes software developed by the OpenSSL Project 23 * for use in the OpenSSL Toolkit. (http://www.OpenSSL.org/)" 24 * 25 * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to 26 * endorse or promote products derived from this software without 27 * prior written permission. For written permission, please contact 28 * licensing@OpenSSL.org. 29 * 30 * 5. Products derived from this software may not be called "OpenSSL" 31 * nor may "OpenSSL" appear in their names without prior written 32 * permission of the OpenSSL Project. 33 * 34 * 6. Redistributions of any form whatsoever must retain the following 35 * acknowledgment: 36 * "This product includes software developed by the OpenSSL Project 37 * for use in the OpenSSL Toolkit (http://www.OpenSSL.org/)" 38 * 39 * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY 40 * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 41 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 42 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR 43 * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 44 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 45 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 46 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 47 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, 48 * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 49 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED 50 * OF THE POSSIBILITY OF SUCH DAMAGE. 51 * ==================================================================== 52 * 53 * This product includes cryptographic software written by Eric Young 54 * (eay@cryptsoft.com). This product includes software written by Tim 55 * Hudson (tjh@cryptsoft.com). 56 * 57 */ 58 /* ==================================================================== 59 * Copyright 2002 Sun Microsystems, Inc. ALL RIGHTS RESERVED. 60 * ECDH support in OpenSSL originally developed by 61 * SUN MICROSYSTEMS, INC., and contributed to the OpenSSL project. 62 */ 63 64 #ifndef HEADER_ENGINE_H 65 #define HEADER_ENGINE_H 66 67 #include <openssl/opensslconf.h> 68 69 #include <openssl/bn.h> 70 #ifndef OPENSSL_NO_DH 71 #include <openssl/dh.h> 72 #endif 73 #ifndef OPENSSL_NO_DSA 74 #include <openssl/dsa.h> 75 #endif 76 #ifndef OPENSSL_NO_EC 77 #include <openssl/ec.h> 78 #endif 79 #include <openssl/err.h> 80 #ifndef OPENSSL_NO_RSA 81 #include <openssl/rsa.h> 82 #endif 83 #include <openssl/ui.h> 84 #include <openssl/x509.h> 85 86 #include <openssl/ossl_typ.h> 87 88 #ifdef __cplusplus 89 extern "C" { 90 #endif 91 92 #define ENGINE_METHOD_RSA (unsigned int)0x0001 93 #define ENGINE_METHOD_DSA (unsigned int)0x0002 94 #define ENGINE_METHOD_DH (unsigned int)0x0004 95 #define ENGINE_METHOD_RAND (unsigned int)0x0008 96 #define ENGINE_METHOD_CIPHERS (unsigned int)0x0040 97 #define ENGINE_METHOD_DIGESTS (unsigned int)0x0080 98 #define ENGINE_METHOD_STORE (unsigned int)0x0100 99 #define ENGINE_METHOD_PKEY_METHS (unsigned int)0x0200 100 #define ENGINE_METHOD_PKEY_ASN1_METHS (unsigned int)0x0400 101 #define ENGINE_METHOD_EC (unsigned int)0x0800 102 #define ENGINE_METHOD_ALL (unsigned int)0xFFFF 103 #define ENGINE_METHOD_NONE (unsigned int)0x0000 104 105 #define ENGINE_TABLE_FLAG_NOINIT (unsigned int)0x0001 106 107 #define ENGINE_FLAGS_MANUAL_CMD_CTRL (int)0x0002 108 #define ENGINE_FLAGS_BY_ID_COPY (int)0x0004 109 #define ENGINE_FLAGS_NO_REGISTER_ALL (int)0x0008 110 #define ENGINE_CMD_FLAG_NUMERIC (unsigned int)0x0001 111 #define ENGINE_CMD_FLAG_STRING (unsigned int)0x0002 112 #define ENGINE_CMD_FLAG_NO_INPUT (unsigned int)0x0004 113 #define ENGINE_CMD_FLAG_INTERNAL (unsigned int)0x0008 114 115 #define ENGINE_CTRL_SET_LOGSTREAM 1 116 #define ENGINE_CTRL_SET_PASSWORD_CALLBACK 2 117 #define ENGINE_CTRL_HUP 3 118 #define ENGINE_CTRL_SET_USER_INTERFACE 4 119 #define ENGINE_CTRL_SET_CALLBACK_DATA 5 120 #define ENGINE_CTRL_LOAD_CONFIGURATION 6 121 #define ENGINE_CTRL_LOAD_SECTION 7 122 123 #define ENGINE_CTRL_HAS_CTRL_FUNCTION 10 124 #define ENGINE_CTRL_GET_FIRST_CMD_TYPE 11 125 #define ENGINE_CTRL_GET_NEXT_CMD_TYPE 12 126 #define ENGINE_CTRL_GET_CMD_FROM_NAME 13 127 #define ENGINE_CTRL_GET_NAME_LEN_FROM_CMD 14 128 #define ENGINE_CTRL_GET_NAME_FROM_CMD 15 129 #define ENGINE_CTRL_GET_DESC_LEN_FROM_CMD 16 130 #define ENGINE_CTRL_GET_DESC_FROM_CMD 17 131 #define ENGINE_CTRL_GET_CMD_FLAGS 18 132 133 #define ENGINE_CMD_BASE 200 134 135 /* 136 * Prototypes for the stub functions in engine_stubs.c. They are provided to 137 * build M2Crypto, Dovecot, apr-utils without patching. 138 */ 139 void ENGINE_load_builtin_engines(void); 140 void ENGINE_load_dynamic(void); 141 void ENGINE_load_openssl(void); 142 int ENGINE_register_all_complete(void); 143 144 void ENGINE_cleanup(void); 145 146 ENGINE *ENGINE_new(void); 147 int ENGINE_free(ENGINE *engine); 148 int ENGINE_init(ENGINE *engine); 149 int ENGINE_finish(ENGINE *engine); 150 151 ENGINE *ENGINE_by_id(const char *id); 152 const char *ENGINE_get_id(const ENGINE *engine); 153 const char *ENGINE_get_name(const ENGINE *engine); 154 155 int ENGINE_set_default(ENGINE *engine, unsigned int flags); 156 157 ENGINE *ENGINE_get_default_RSA(void); 158 int ENGINE_set_default_RSA(ENGINE *engine); 159 160 int ENGINE_ctrl_cmd(ENGINE *engine, const char *cmd_name, long i, void *p, 161 void (*f)(void), int cmd_optional); 162 int ENGINE_ctrl_cmd_string(ENGINE *engine, const char *cmd, const char *arg, 163 int cmd_optional); 164 165 EVP_PKEY *ENGINE_load_private_key(ENGINE *engine, const char *key_id, 166 UI_METHOD *ui_method, void *callback_data); 167 EVP_PKEY *ENGINE_load_public_key(ENGINE *engine, const char *key_id, 168 UI_METHOD *ui_method, void *callback_data); 169 170 /* Error codes for the ENGINE functions. */ 171 172 /* Function codes. */ 173 #define ENGINE_F_DYNAMIC_CTRL 180 174 #define ENGINE_F_DYNAMIC_GET_DATA_CTX 181 175 #define ENGINE_F_DYNAMIC_LOAD 182 176 #define ENGINE_F_DYNAMIC_SET_DATA_CTX 183 177 #define ENGINE_F_ENGINE_ADD 105 178 #define ENGINE_F_ENGINE_BY_ID 106 179 #define ENGINE_F_ENGINE_CMD_IS_EXECUTABLE 170 180 #define ENGINE_F_ENGINE_CTRL 142 181 #define ENGINE_F_ENGINE_CTRL_CMD 178 182 #define ENGINE_F_ENGINE_CTRL_CMD_STRING 171 183 #define ENGINE_F_ENGINE_FINISH 107 184 #define ENGINE_F_ENGINE_FREE_UTIL 108 185 #define ENGINE_F_ENGINE_GET_CIPHER 185 186 #define ENGINE_F_ENGINE_GET_DEFAULT_TYPE 177 187 #define ENGINE_F_ENGINE_GET_DIGEST 186 188 #define ENGINE_F_ENGINE_GET_NEXT 115 189 #define ENGINE_F_ENGINE_GET_PKEY_ASN1_METH 193 190 #define ENGINE_F_ENGINE_GET_PKEY_METH 192 191 #define ENGINE_F_ENGINE_GET_PREV 116 192 #define ENGINE_F_ENGINE_INIT 119 193 #define ENGINE_F_ENGINE_LIST_ADD 120 194 #define ENGINE_F_ENGINE_LIST_REMOVE 121 195 #define ENGINE_F_ENGINE_LOAD_PRIVATE_KEY 150 196 #define ENGINE_F_ENGINE_LOAD_PUBLIC_KEY 151 197 #define ENGINE_F_ENGINE_LOAD_SSL_CLIENT_CERT 194 198 #define ENGINE_F_ENGINE_NEW 122 199 #define ENGINE_F_ENGINE_REMOVE 123 200 #define ENGINE_F_ENGINE_SET_DEFAULT_STRING 189 201 #define ENGINE_F_ENGINE_SET_DEFAULT_TYPE 126 202 #define ENGINE_F_ENGINE_SET_ID 129 203 #define ENGINE_F_ENGINE_SET_NAME 130 204 #define ENGINE_F_ENGINE_TABLE_REGISTER 184 205 #define ENGINE_F_ENGINE_UNLOAD_KEY 152 206 #define ENGINE_F_ENGINE_UNLOCKED_FINISH 191 207 #define ENGINE_F_ENGINE_UP_REF 190 208 #define ENGINE_F_INT_CTRL_HELPER 172 209 #define ENGINE_F_INT_ENGINE_CONFIGURE 188 210 #define ENGINE_F_INT_ENGINE_MODULE_INIT 187 211 #define ENGINE_F_LOG_MESSAGE 141 212 213 /* Reason codes. */ 214 #define ENGINE_R_ALREADY_LOADED 100 215 #define ENGINE_R_ARGUMENT_IS_NOT_A_NUMBER 133 216 #define ENGINE_R_CMD_NOT_EXECUTABLE 134 217 #define ENGINE_R_COMMAND_TAKES_INPUT 135 218 #define ENGINE_R_COMMAND_TAKES_NO_INPUT 136 219 #define ENGINE_R_CONFLICTING_ENGINE_ID 103 220 #define ENGINE_R_CTRL_COMMAND_NOT_IMPLEMENTED 119 221 #define ENGINE_R_DH_NOT_IMPLEMENTED 139 222 #define ENGINE_R_DSA_NOT_IMPLEMENTED 140 223 #define ENGINE_R_DSO_FAILURE 104 224 #define ENGINE_R_DSO_NOT_FOUND 132 225 #define ENGINE_R_ENGINES_SECTION_ERROR 148 226 #define ENGINE_R_ENGINE_CONFIGURATION_ERROR 102 227 #define ENGINE_R_ENGINE_IS_NOT_IN_LIST 105 228 #define ENGINE_R_ENGINE_SECTION_ERROR 149 229 #define ENGINE_R_FAILED_LOADING_PRIVATE_KEY 128 230 #define ENGINE_R_FAILED_LOADING_PUBLIC_KEY 129 231 #define ENGINE_R_FINISH_FAILED 106 232 #define ENGINE_R_GET_HANDLE_FAILED 107 233 #define ENGINE_R_ID_OR_NAME_MISSING 108 234 #define ENGINE_R_INIT_FAILED 109 235 #define ENGINE_R_INTERNAL_LIST_ERROR 110 236 #define ENGINE_R_INVALID_ARGUMENT 143 237 #define ENGINE_R_INVALID_CMD_NAME 137 238 #define ENGINE_R_INVALID_CMD_NUMBER 138 239 #define ENGINE_R_INVALID_INIT_VALUE 151 240 #define ENGINE_R_INVALID_STRING 150 241 #define ENGINE_R_NOT_INITIALISED 117 242 #define ENGINE_R_NOT_LOADED 112 243 #define ENGINE_R_NO_CONTROL_FUNCTION 120 244 #define ENGINE_R_NO_INDEX 144 245 #define ENGINE_R_NO_LOAD_FUNCTION 125 246 #define ENGINE_R_NO_REFERENCE 130 247 #define ENGINE_R_NO_SUCH_ENGINE 116 248 #define ENGINE_R_NO_UNLOAD_FUNCTION 126 249 #define ENGINE_R_PROVIDE_PARAMETERS 113 250 #define ENGINE_R_RSA_NOT_IMPLEMENTED 141 251 #define ENGINE_R_UNIMPLEMENTED_CIPHER 146 252 #define ENGINE_R_UNIMPLEMENTED_DIGEST 147 253 #define ENGINE_R_UNIMPLEMENTED_PUBLIC_KEY_METHOD 101 254 #define ENGINE_R_VERSION_INCOMPATIBILITY 145 255 256 #ifdef __cplusplus 257 } 258 #endif 259 #endif 260