xref: /openbsd/lib/libcrypto/engine/engine.h (revision 510d2225)
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