xref: /openbsd/lib/libcrypto/engine/engine.h (revision 1e091ee9)
1 /* $OpenBSD: engine.h,v 1.44 2024/03/02 10:22:07 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/err.h>
70 #include <openssl/ui.h>
71 
72 #include <openssl/ossl_typ.h>
73 
74 #ifdef  __cplusplus
75 extern "C" {
76 #endif
77 
78 #define ENGINE_METHOD_RSA		(unsigned int)0x0001
79 #define ENGINE_METHOD_DSA		(unsigned int)0x0002
80 #define ENGINE_METHOD_DH		(unsigned int)0x0004
81 #define ENGINE_METHOD_RAND		(unsigned int)0x0008
82 #define ENGINE_METHOD_CIPHERS		(unsigned int)0x0040
83 #define ENGINE_METHOD_DIGESTS		(unsigned int)0x0080
84 #define ENGINE_METHOD_STORE		(unsigned int)0x0100
85 #define ENGINE_METHOD_PKEY_METHS	(unsigned int)0x0200
86 #define ENGINE_METHOD_PKEY_ASN1_METHS	(unsigned int)0x0400
87 #define ENGINE_METHOD_EC		(unsigned int)0x0800
88 #define ENGINE_METHOD_ALL		(unsigned int)0xFFFF
89 #define ENGINE_METHOD_NONE		(unsigned int)0x0000
90 
91 /*
92  * Prototypes for the stub functions in engine_stubs.c. They are provided to
93  * build M2Crypto, Dovecot, apr-utils without patching.
94  */
95 void ENGINE_load_builtin_engines(void);
96 void ENGINE_load_dynamic(void);
97 void ENGINE_load_openssl(void);
98 int ENGINE_register_all_complete(void);
99 
100 void ENGINE_cleanup(void);
101 
102 ENGINE *ENGINE_new(void);
103 int ENGINE_free(ENGINE *engine);
104 int ENGINE_init(ENGINE *engine);
105 int ENGINE_finish(ENGINE *engine);
106 
107 ENGINE *ENGINE_by_id(const char *id);
108 const char *ENGINE_get_id(const ENGINE *engine);
109 const char *ENGINE_get_name(const ENGINE *engine);
110 
111 int ENGINE_set_default(ENGINE *engine, unsigned int flags);
112 
113 ENGINE *ENGINE_get_default_RSA(void);
114 int ENGINE_set_default_RSA(ENGINE *engine);
115 
116 int ENGINE_ctrl_cmd(ENGINE *engine, const char *cmd_name, long i, void *p,
117     void (*f)(void), int cmd_optional);
118 int ENGINE_ctrl_cmd_string(ENGINE *engine, const char *cmd, const char *arg,
119     int cmd_optional);
120 
121 EVP_PKEY *ENGINE_load_private_key(ENGINE *engine, const char *key_id,
122     UI_METHOD *ui_method, void *callback_data);
123 EVP_PKEY *ENGINE_load_public_key(ENGINE *engine, const char *key_id,
124     UI_METHOD *ui_method, void *callback_data);
125 
126 /* Error codes for the ENGINE functions. */
127 
128 /* Function codes. */
129 #define ENGINE_F_DYNAMIC_CTRL				 180
130 #define ENGINE_F_DYNAMIC_GET_DATA_CTX			 181
131 #define ENGINE_F_DYNAMIC_LOAD				 182
132 #define ENGINE_F_DYNAMIC_SET_DATA_CTX			 183
133 #define ENGINE_F_ENGINE_ADD				 105
134 #define ENGINE_F_ENGINE_BY_ID				 106
135 #define ENGINE_F_ENGINE_CMD_IS_EXECUTABLE		 170
136 #define ENGINE_F_ENGINE_CTRL				 142
137 #define ENGINE_F_ENGINE_CTRL_CMD			 178
138 #define ENGINE_F_ENGINE_CTRL_CMD_STRING			 171
139 #define ENGINE_F_ENGINE_FINISH				 107
140 #define ENGINE_F_ENGINE_FREE_UTIL			 108
141 #define ENGINE_F_ENGINE_GET_CIPHER			 185
142 #define ENGINE_F_ENGINE_GET_DEFAULT_TYPE		 177
143 #define ENGINE_F_ENGINE_GET_DIGEST			 186
144 #define ENGINE_F_ENGINE_GET_NEXT			 115
145 #define ENGINE_F_ENGINE_GET_PKEY_ASN1_METH		 193
146 #define ENGINE_F_ENGINE_GET_PKEY_METH			 192
147 #define ENGINE_F_ENGINE_GET_PREV			 116
148 #define ENGINE_F_ENGINE_INIT				 119
149 #define ENGINE_F_ENGINE_LIST_ADD			 120
150 #define ENGINE_F_ENGINE_LIST_REMOVE			 121
151 #define ENGINE_F_ENGINE_LOAD_PRIVATE_KEY		 150
152 #define ENGINE_F_ENGINE_LOAD_PUBLIC_KEY			 151
153 #define ENGINE_F_ENGINE_LOAD_SSL_CLIENT_CERT		 194
154 #define ENGINE_F_ENGINE_NEW				 122
155 #define ENGINE_F_ENGINE_REMOVE				 123
156 #define ENGINE_F_ENGINE_SET_DEFAULT_STRING		 189
157 #define ENGINE_F_ENGINE_SET_DEFAULT_TYPE		 126
158 #define ENGINE_F_ENGINE_SET_ID				 129
159 #define ENGINE_F_ENGINE_SET_NAME			 130
160 #define ENGINE_F_ENGINE_TABLE_REGISTER			 184
161 #define ENGINE_F_ENGINE_UNLOAD_KEY			 152
162 #define ENGINE_F_ENGINE_UNLOCKED_FINISH			 191
163 #define ENGINE_F_ENGINE_UP_REF				 190
164 #define ENGINE_F_INT_CTRL_HELPER			 172
165 #define ENGINE_F_INT_ENGINE_CONFIGURE			 188
166 #define ENGINE_F_INT_ENGINE_MODULE_INIT			 187
167 #define ENGINE_F_LOG_MESSAGE				 141
168 
169 /* Reason codes. */
170 #define ENGINE_R_ALREADY_LOADED				 100
171 #define ENGINE_R_ARGUMENT_IS_NOT_A_NUMBER		 133
172 #define ENGINE_R_CMD_NOT_EXECUTABLE			 134
173 #define ENGINE_R_COMMAND_TAKES_INPUT			 135
174 #define ENGINE_R_COMMAND_TAKES_NO_INPUT			 136
175 #define ENGINE_R_CONFLICTING_ENGINE_ID			 103
176 #define ENGINE_R_CTRL_COMMAND_NOT_IMPLEMENTED		 119
177 #define ENGINE_R_DH_NOT_IMPLEMENTED			 139
178 #define ENGINE_R_DSA_NOT_IMPLEMENTED			 140
179 #define ENGINE_R_DSO_FAILURE				 104
180 #define ENGINE_R_DSO_NOT_FOUND				 132
181 #define ENGINE_R_ENGINES_SECTION_ERROR			 148
182 #define ENGINE_R_ENGINE_CONFIGURATION_ERROR		 102
183 #define ENGINE_R_ENGINE_IS_NOT_IN_LIST			 105
184 #define ENGINE_R_ENGINE_SECTION_ERROR			 149
185 #define ENGINE_R_FAILED_LOADING_PRIVATE_KEY		 128
186 #define ENGINE_R_FAILED_LOADING_PUBLIC_KEY		 129
187 #define ENGINE_R_FINISH_FAILED				 106
188 #define ENGINE_R_GET_HANDLE_FAILED			 107
189 #define ENGINE_R_ID_OR_NAME_MISSING			 108
190 #define ENGINE_R_INIT_FAILED				 109
191 #define ENGINE_R_INTERNAL_LIST_ERROR			 110
192 #define ENGINE_R_INVALID_ARGUMENT			 143
193 #define ENGINE_R_INVALID_CMD_NAME			 137
194 #define ENGINE_R_INVALID_CMD_NUMBER			 138
195 #define ENGINE_R_INVALID_INIT_VALUE			 151
196 #define ENGINE_R_INVALID_STRING				 150
197 #define ENGINE_R_NOT_INITIALISED			 117
198 #define ENGINE_R_NOT_LOADED				 112
199 #define ENGINE_R_NO_CONTROL_FUNCTION			 120
200 #define ENGINE_R_NO_INDEX				 144
201 #define ENGINE_R_NO_LOAD_FUNCTION			 125
202 #define ENGINE_R_NO_REFERENCE				 130
203 #define ENGINE_R_NO_SUCH_ENGINE				 116
204 #define ENGINE_R_NO_UNLOAD_FUNCTION			 126
205 #define ENGINE_R_PROVIDE_PARAMETERS			 113
206 #define ENGINE_R_RSA_NOT_IMPLEMENTED			 141
207 #define ENGINE_R_UNIMPLEMENTED_CIPHER			 146
208 #define ENGINE_R_UNIMPLEMENTED_DIGEST			 147
209 #define ENGINE_R_UNIMPLEMENTED_PUBLIC_KEY_METHOD	 101
210 #define ENGINE_R_VERSION_INCOMPATIBILITY		 145
211 
212 #ifdef  __cplusplus
213 }
214 #endif
215 #endif
216