fips: use seed source requested
[openssl.git] / include / openssl / core_dispatch.h
1 /*
2  * Copyright 2019-2023 The OpenSSL Project Authors. All Rights Reserved.
3  *
4  * Licensed under the Apache License 2.0 (the "License").  You may not use
5  * this file except in compliance with the License.  You can obtain a copy
6  * in the file LICENSE in the source distribution or at
7  * https://www.openssl.org/source/license.html
8  */
9
10 #ifndef OPENSSL_CORE_NUMBERS_H
11 # define OPENSSL_CORE_NUMBERS_H
12 # pragma once
13
14 # include <stdarg.h>
15 # include <openssl/core.h>
16
17 # ifdef __cplusplus
18 extern "C" {
19 # endif
20
21 /*-
22  * Identities
23  * ----------
24  *
25  * All series start with 1, to allow 0 to be an array terminator.
26  * For any FUNC identity, we also provide a function signature typedef
27  * and a static inline function to extract a function pointer from a
28  * OSSL_DISPATCH element in a type safe manner.
29  *
30  * Names:
31  * for any function base name 'foo' (uppercase form 'FOO'), we will have
32  * the following:
33  * - a macro for the identity with the name OSSL_FUNC_'FOO' or derivatives
34  *   thereof (to be specified further down)
35  * - a function signature typedef with the name OSSL_FUNC_'foo'_fn
36  * - a function pointer extractor function with the name OSSL_FUNC_'foo'
37  */
38
39 /*
40  * Helper macro to create the function signature typedef and the extractor
41  * |type| is the return-type of the function, |name| is the name of the
42  * function to fetch, and |args| is a parenthesized list of parameters
43  * for the function (that is, it is |name|'s function signature).
44  * Note: This is considered a "reserved" internal macro. Applications should
45  * not use this or assume its existence.
46  */
47 #define OSSL_CORE_MAKE_FUNC(type,name,args)                             \
48     typedef type (OSSL_FUNC_##name##_fn)args;                           \
49     static ossl_unused ossl_inline \
50     OSSL_FUNC_##name##_fn *OSSL_FUNC_##name(const OSSL_DISPATCH *opf)   \
51     {                                                                   \
52         return (OSSL_FUNC_##name##_fn *)opf->function;                  \
53     }
54
55 /*
56  * Core function identities, for the two OSSL_DISPATCH tables being passed
57  * in the OSSL_provider_init call.
58  *
59  * 0 serves as a marker for the end of the OSSL_DISPATCH array, and must
60  * therefore NEVER be used as a function identity.
61  */
62 /* Functions provided by the Core to the provider, reserved numbers 1-1023 */
63 # define OSSL_FUNC_CORE_GETTABLE_PARAMS        1
64 OSSL_CORE_MAKE_FUNC(const OSSL_PARAM *,
65                     core_gettable_params,(const OSSL_CORE_HANDLE *prov))
66 # define OSSL_FUNC_CORE_GET_PARAMS             2
67 OSSL_CORE_MAKE_FUNC(int,core_get_params,(const OSSL_CORE_HANDLE *prov,
68                                          OSSL_PARAM params[]))
69 # define OSSL_FUNC_CORE_THREAD_START           3
70 OSSL_CORE_MAKE_FUNC(int,core_thread_start,(const OSSL_CORE_HANDLE *prov,
71                                            OSSL_thread_stop_handler_fn handfn,
72                                            void *arg))
73 # define OSSL_FUNC_CORE_GET_LIBCTX             4
74 OSSL_CORE_MAKE_FUNC(OPENSSL_CORE_CTX *,core_get_libctx,
75                     (const OSSL_CORE_HANDLE *prov))
76 # define OSSL_FUNC_CORE_NEW_ERROR              5
77 OSSL_CORE_MAKE_FUNC(void,core_new_error,(const OSSL_CORE_HANDLE *prov))
78 # define OSSL_FUNC_CORE_SET_ERROR_DEBUG        6
79 OSSL_CORE_MAKE_FUNC(void,core_set_error_debug,
80                     (const OSSL_CORE_HANDLE *prov,
81                      const char *file, int line, const char *func))
82 # define OSSL_FUNC_CORE_VSET_ERROR             7
83 OSSL_CORE_MAKE_FUNC(void,core_vset_error,
84                     (const OSSL_CORE_HANDLE *prov,
85                      uint32_t reason, const char *fmt, va_list args))
86 # define OSSL_FUNC_CORE_SET_ERROR_MARK         8
87 OSSL_CORE_MAKE_FUNC(int, core_set_error_mark, (const OSSL_CORE_HANDLE *prov))
88 # define OSSL_FUNC_CORE_CLEAR_LAST_ERROR_MARK  9
89 OSSL_CORE_MAKE_FUNC(int, core_clear_last_error_mark,
90                     (const OSSL_CORE_HANDLE *prov))
91 # define OSSL_FUNC_CORE_POP_ERROR_TO_MARK     10
92 OSSL_CORE_MAKE_FUNC(int, core_pop_error_to_mark, (const OSSL_CORE_HANDLE *prov))
93
94
95 /* Functions to access the OBJ database */
96
97 #define OSSL_FUNC_CORE_OBJ_ADD_SIGID          11
98 #define OSSL_FUNC_CORE_OBJ_CREATE             12
99
100 OSSL_CORE_MAKE_FUNC(int, core_obj_add_sigid,
101                     (const OSSL_CORE_HANDLE *prov, const char  *sign_name,
102                      const char *digest_name, const char *pkey_name))
103 OSSL_CORE_MAKE_FUNC(int, core_obj_create,
104                     (const OSSL_CORE_HANDLE *prov, const char *oid,
105                      const char *sn, const char *ln))
106
107 /* Memory allocation, freeing, clearing. */
108 #define OSSL_FUNC_CRYPTO_MALLOC               20
109 OSSL_CORE_MAKE_FUNC(void *,
110         CRYPTO_malloc, (size_t num, const char *file, int line))
111 #define OSSL_FUNC_CRYPTO_ZALLOC               21
112 OSSL_CORE_MAKE_FUNC(void *,
113         CRYPTO_zalloc, (size_t num, const char *file, int line))
114 #define OSSL_FUNC_CRYPTO_FREE                 22
115 OSSL_CORE_MAKE_FUNC(void,
116         CRYPTO_free, (void *ptr, const char *file, int line))
117 #define OSSL_FUNC_CRYPTO_CLEAR_FREE           23
118 OSSL_CORE_MAKE_FUNC(void,
119         CRYPTO_clear_free, (void *ptr, size_t num, const char *file, int line))
120 #define OSSL_FUNC_CRYPTO_REALLOC              24
121 OSSL_CORE_MAKE_FUNC(void *,
122         CRYPTO_realloc, (void *addr, size_t num, const char *file, int line))
123 #define OSSL_FUNC_CRYPTO_CLEAR_REALLOC        25
124 OSSL_CORE_MAKE_FUNC(void *,
125         CRYPTO_clear_realloc, (void *addr, size_t old_num, size_t num,
126                                const char *file, int line))
127 #define OSSL_FUNC_CRYPTO_SECURE_MALLOC        26
128 OSSL_CORE_MAKE_FUNC(void *,
129         CRYPTO_secure_malloc, (size_t num, const char *file, int line))
130 #define OSSL_FUNC_CRYPTO_SECURE_ZALLOC        27
131 OSSL_CORE_MAKE_FUNC(void *,
132         CRYPTO_secure_zalloc, (size_t num, const char *file, int line))
133 #define OSSL_FUNC_CRYPTO_SECURE_FREE          28
134 OSSL_CORE_MAKE_FUNC(void,
135         CRYPTO_secure_free, (void *ptr, const char *file, int line))
136 #define OSSL_FUNC_CRYPTO_SECURE_CLEAR_FREE    29
137 OSSL_CORE_MAKE_FUNC(void,
138         CRYPTO_secure_clear_free, (void *ptr, size_t num, const char *file,
139                                    int line))
140 #define OSSL_FUNC_CRYPTO_SECURE_ALLOCATED     30
141 OSSL_CORE_MAKE_FUNC(int,
142         CRYPTO_secure_allocated, (const void *ptr))
143 #define OSSL_FUNC_OPENSSL_CLEANSE             31
144 OSSL_CORE_MAKE_FUNC(void,
145         OPENSSL_cleanse, (void *ptr, size_t len))
146
147 /* Bio functions provided by the core */
148 #define OSSL_FUNC_BIO_NEW_FILE                40
149 #define OSSL_FUNC_BIO_NEW_MEMBUF              41
150 #define OSSL_FUNC_BIO_READ_EX                 42
151 #define OSSL_FUNC_BIO_WRITE_EX                43
152 #define OSSL_FUNC_BIO_UP_REF                  44
153 #define OSSL_FUNC_BIO_FREE                    45
154 #define OSSL_FUNC_BIO_VPRINTF                 46
155 #define OSSL_FUNC_BIO_VSNPRINTF               47
156 #define OSSL_FUNC_BIO_PUTS                    48
157 #define OSSL_FUNC_BIO_GETS                    49
158 #define OSSL_FUNC_BIO_CTRL                    50
159
160
161 OSSL_CORE_MAKE_FUNC(OSSL_CORE_BIO *, BIO_new_file, (const char *filename,
162                                                     const char *mode))
163 OSSL_CORE_MAKE_FUNC(OSSL_CORE_BIO *, BIO_new_membuf, (const void *buf, int len))
164 OSSL_CORE_MAKE_FUNC(int, BIO_read_ex, (OSSL_CORE_BIO *bio, void *data,
165                                        size_t data_len, size_t *bytes_read))
166 OSSL_CORE_MAKE_FUNC(int, BIO_write_ex, (OSSL_CORE_BIO *bio, const void *data,
167                                         size_t data_len, size_t *written))
168 OSSL_CORE_MAKE_FUNC(int, BIO_gets, (OSSL_CORE_BIO *bio, char *buf, int size))
169 OSSL_CORE_MAKE_FUNC(int, BIO_puts, (OSSL_CORE_BIO *bio, const char *str))
170 OSSL_CORE_MAKE_FUNC(int, BIO_up_ref, (OSSL_CORE_BIO *bio))
171 OSSL_CORE_MAKE_FUNC(int, BIO_free, (OSSL_CORE_BIO *bio))
172 OSSL_CORE_MAKE_FUNC(int, BIO_vprintf, (OSSL_CORE_BIO *bio, const char *format,
173                                        va_list args))
174 OSSL_CORE_MAKE_FUNC(int, BIO_vsnprintf,
175                    (char *buf, size_t n, const char *fmt, va_list args))
176 OSSL_CORE_MAKE_FUNC(int, BIO_ctrl, (OSSL_CORE_BIO *bio,
177                                     int cmd, long num, void *ptr))
178
179 /* New seeding functions prototypes with the 101-104 series */
180 #define OSSL_FUNC_GET_USER_ENTROPY            98
181 #define OSSL_FUNC_GET_USER_NONCE              99
182
183 #define OSSL_FUNC_SELF_TEST_CB               100
184 OSSL_CORE_MAKE_FUNC(void, self_test_cb, (OPENSSL_CORE_CTX *ctx, OSSL_CALLBACK **cb,
185                                          void **cbarg))
186
187 /* Functions to get seed material from the operating system */
188 #define OSSL_FUNC_GET_ENTROPY                101
189 #define OSSL_FUNC_CLEANUP_ENTROPY            102
190 #define OSSL_FUNC_GET_NONCE                  103
191 #define OSSL_FUNC_CLEANUP_NONCE              104
192 OSSL_CORE_MAKE_FUNC(size_t, get_entropy, (const OSSL_CORE_HANDLE *handle,
193                                           unsigned char **pout, int entropy,
194                                           size_t min_len, size_t max_len))
195 OSSL_CORE_MAKE_FUNC(size_t, get_user_entropy, (const OSSL_CORE_HANDLE *handle,
196                                                unsigned char **pout, int entropy,
197                                                size_t min_len, size_t max_len))
198 OSSL_CORE_MAKE_FUNC(void, cleanup_entropy, (const OSSL_CORE_HANDLE *handle,
199                                             unsigned char *buf, size_t len))
200 OSSL_CORE_MAKE_FUNC(size_t, get_nonce, (const OSSL_CORE_HANDLE *handle,
201                                         unsigned char **pout, size_t min_len,
202                                         size_t max_len, const void *salt,
203                                         size_t salt_len))
204 OSSL_CORE_MAKE_FUNC(size_t, get_user_nonce, (const OSSL_CORE_HANDLE *handle,
205                                              unsigned char **pout, size_t min_len,
206                                              size_t max_len, const void *salt,
207                                              size_t salt_len))
208 OSSL_CORE_MAKE_FUNC(void, cleanup_nonce, (const OSSL_CORE_HANDLE *handle,
209                                           unsigned char *buf, size_t len))
210
211 /* Functions to access the core's providers */
212 #define OSSL_FUNC_PROVIDER_REGISTER_CHILD_CB   105
213 #define OSSL_FUNC_PROVIDER_DEREGISTER_CHILD_CB 106
214 #define OSSL_FUNC_PROVIDER_NAME                107
215 #define OSSL_FUNC_PROVIDER_GET0_PROVIDER_CTX   108
216 #define OSSL_FUNC_PROVIDER_GET0_DISPATCH       109
217 #define OSSL_FUNC_PROVIDER_UP_REF              110
218 #define OSSL_FUNC_PROVIDER_FREE                111
219
220 OSSL_CORE_MAKE_FUNC(int, provider_register_child_cb,
221                     (const OSSL_CORE_HANDLE *handle,
222                      int (*create_cb)(const OSSL_CORE_HANDLE *provider, void *cbdata),
223                      int (*remove_cb)(const OSSL_CORE_HANDLE *provider, void *cbdata),
224                      int (*global_props_cb)(const char *props, void *cbdata),
225                      void *cbdata))
226 OSSL_CORE_MAKE_FUNC(void, provider_deregister_child_cb,
227                     (const OSSL_CORE_HANDLE *handle))
228 OSSL_CORE_MAKE_FUNC(const char *, provider_name,
229                     (const OSSL_CORE_HANDLE *prov))
230 OSSL_CORE_MAKE_FUNC(void *, provider_get0_provider_ctx,
231                     (const OSSL_CORE_HANDLE *prov))
232 OSSL_CORE_MAKE_FUNC(const OSSL_DISPATCH *, provider_get0_dispatch,
233                     (const OSSL_CORE_HANDLE *prov))
234 OSSL_CORE_MAKE_FUNC(int, provider_up_ref,
235                     (const OSSL_CORE_HANDLE *prov, int activate))
236 OSSL_CORE_MAKE_FUNC(int, provider_free,
237                     (const OSSL_CORE_HANDLE *prov, int deactivate))
238
239 /* Functions provided by the provider to the Core, reserved numbers 1024-1535 */
240 # define OSSL_FUNC_PROVIDER_TEARDOWN           1024
241 OSSL_CORE_MAKE_FUNC(void,provider_teardown,(void *provctx))
242 # define OSSL_FUNC_PROVIDER_GETTABLE_PARAMS    1025
243 OSSL_CORE_MAKE_FUNC(const OSSL_PARAM *,
244                     provider_gettable_params,(void *provctx))
245 # define OSSL_FUNC_PROVIDER_GET_PARAMS         1026
246 OSSL_CORE_MAKE_FUNC(int,provider_get_params,(void *provctx,
247                                              OSSL_PARAM params[]))
248 # define OSSL_FUNC_PROVIDER_QUERY_OPERATION    1027
249 OSSL_CORE_MAKE_FUNC(const OSSL_ALGORITHM *,provider_query_operation,
250                     (void *provctx, int operation_id, int *no_store))
251 # define OSSL_FUNC_PROVIDER_UNQUERY_OPERATION  1028
252 OSSL_CORE_MAKE_FUNC(void, provider_unquery_operation,
253                     (void *provctx, int operation_id, const OSSL_ALGORITHM *))
254 # define OSSL_FUNC_PROVIDER_GET_REASON_STRINGS 1029
255 OSSL_CORE_MAKE_FUNC(const OSSL_ITEM *,provider_get_reason_strings,
256                     (void *provctx))
257 # define OSSL_FUNC_PROVIDER_GET_CAPABILITIES   1030
258 OSSL_CORE_MAKE_FUNC(int, provider_get_capabilities, (void *provctx,
259                     const char *capability, OSSL_CALLBACK *cb, void *arg))
260 # define OSSL_FUNC_PROVIDER_SELF_TEST          1031
261 OSSL_CORE_MAKE_FUNC(int, provider_self_test, (void *provctx))
262
263 /* Operations */
264
265 # define OSSL_OP_DIGEST                              1
266 # define OSSL_OP_CIPHER                              2   /* Symmetric Ciphers */
267 # define OSSL_OP_MAC                                 3
268 # define OSSL_OP_KDF                                 4
269 # define OSSL_OP_RAND                                5
270 # define OSSL_OP_KEYMGMT                            10
271 # define OSSL_OP_KEYEXCH                            11
272 # define OSSL_OP_SIGNATURE                          12
273 # define OSSL_OP_ASYM_CIPHER                        13
274 # define OSSL_OP_KEM                                14
275 /* New section for non-EVP operations */
276 # define OSSL_OP_ENCODER                            20
277 # define OSSL_OP_DECODER                            21
278 # define OSSL_OP_STORE                              22
279 /* Highest known operation number */
280 # define OSSL_OP__HIGHEST                           22
281
282 /* Digests */
283
284 # define OSSL_FUNC_DIGEST_NEWCTX                     1
285 # define OSSL_FUNC_DIGEST_INIT                       2
286 # define OSSL_FUNC_DIGEST_UPDATE                     3
287 # define OSSL_FUNC_DIGEST_FINAL                      4
288 # define OSSL_FUNC_DIGEST_DIGEST                     5
289 # define OSSL_FUNC_DIGEST_FREECTX                    6
290 # define OSSL_FUNC_DIGEST_DUPCTX                     7
291 # define OSSL_FUNC_DIGEST_GET_PARAMS                 8
292 # define OSSL_FUNC_DIGEST_SET_CTX_PARAMS             9
293 # define OSSL_FUNC_DIGEST_GET_CTX_PARAMS            10
294 # define OSSL_FUNC_DIGEST_GETTABLE_PARAMS           11
295 # define OSSL_FUNC_DIGEST_SETTABLE_CTX_PARAMS       12
296 # define OSSL_FUNC_DIGEST_GETTABLE_CTX_PARAMS       13
297
298 OSSL_CORE_MAKE_FUNC(void *, digest_newctx, (void *provctx))
299 OSSL_CORE_MAKE_FUNC(int, digest_init, (void *dctx, const OSSL_PARAM params[]))
300 OSSL_CORE_MAKE_FUNC(int, digest_update,
301                     (void *dctx, const unsigned char *in, size_t inl))
302 OSSL_CORE_MAKE_FUNC(int, digest_final,
303                     (void *dctx,
304                      unsigned char *out, size_t *outl, size_t outsz))
305 OSSL_CORE_MAKE_FUNC(int, digest_digest,
306                     (void *provctx, const unsigned char *in, size_t inl,
307                      unsigned char *out, size_t *outl, size_t outsz))
308
309 OSSL_CORE_MAKE_FUNC(void, digest_freectx, (void *dctx))
310 OSSL_CORE_MAKE_FUNC(void *, digest_dupctx, (void *dctx))
311
312 OSSL_CORE_MAKE_FUNC(int, digest_get_params, (OSSL_PARAM params[]))
313 OSSL_CORE_MAKE_FUNC(int, digest_set_ctx_params,
314                     (void *vctx, const OSSL_PARAM params[]))
315 OSSL_CORE_MAKE_FUNC(int, digest_get_ctx_params,
316                     (void *vctx, OSSL_PARAM params[]))
317 OSSL_CORE_MAKE_FUNC(const OSSL_PARAM *, digest_gettable_params,
318                     (void *provctx))
319 OSSL_CORE_MAKE_FUNC(const OSSL_PARAM *, digest_settable_ctx_params,
320                     (void *dctx, void *provctx))
321 OSSL_CORE_MAKE_FUNC(const OSSL_PARAM *, digest_gettable_ctx_params,
322                     (void *dctx, void *provctx))
323
324 /* Symmetric Ciphers */
325
326 # define OSSL_FUNC_CIPHER_NEWCTX                     1
327 # define OSSL_FUNC_CIPHER_ENCRYPT_INIT               2
328 # define OSSL_FUNC_CIPHER_DECRYPT_INIT               3
329 # define OSSL_FUNC_CIPHER_UPDATE                     4
330 # define OSSL_FUNC_CIPHER_FINAL                      5
331 # define OSSL_FUNC_CIPHER_CIPHER                     6
332 # define OSSL_FUNC_CIPHER_FREECTX                    7
333 # define OSSL_FUNC_CIPHER_DUPCTX                     8
334 # define OSSL_FUNC_CIPHER_GET_PARAMS                 9
335 # define OSSL_FUNC_CIPHER_GET_CTX_PARAMS            10
336 # define OSSL_FUNC_CIPHER_SET_CTX_PARAMS            11
337 # define OSSL_FUNC_CIPHER_GETTABLE_PARAMS           12
338 # define OSSL_FUNC_CIPHER_GETTABLE_CTX_PARAMS       13
339 # define OSSL_FUNC_CIPHER_SETTABLE_CTX_PARAMS       14
340
341 OSSL_CORE_MAKE_FUNC(void *, cipher_newctx, (void *provctx))
342 OSSL_CORE_MAKE_FUNC(int, cipher_encrypt_init, (void *cctx,
343                                                   const unsigned char *key,
344                                                   size_t keylen,
345                                                   const unsigned char *iv,
346                                                   size_t ivlen,
347                                                   const OSSL_PARAM params[]))
348 OSSL_CORE_MAKE_FUNC(int, cipher_decrypt_init, (void *cctx,
349                                                   const unsigned char *key,
350                                                   size_t keylen,
351                                                   const unsigned char *iv,
352                                                   size_t ivlen,
353                                                   const OSSL_PARAM params[]))
354 OSSL_CORE_MAKE_FUNC(int, cipher_update,
355                     (void *cctx,
356                      unsigned char *out, size_t *outl, size_t outsize,
357                      const unsigned char *in, size_t inl))
358 OSSL_CORE_MAKE_FUNC(int, cipher_final,
359                     (void *cctx,
360                      unsigned char *out, size_t *outl, size_t outsize))
361 OSSL_CORE_MAKE_FUNC(int, cipher_cipher,
362                     (void *cctx,
363                      unsigned char *out, size_t *outl, size_t outsize,
364                      const unsigned char *in, size_t inl))
365 OSSL_CORE_MAKE_FUNC(void, cipher_freectx, (void *cctx))
366 OSSL_CORE_MAKE_FUNC(void *, cipher_dupctx, (void *cctx))
367 OSSL_CORE_MAKE_FUNC(int, cipher_get_params, (OSSL_PARAM params[]))
368 OSSL_CORE_MAKE_FUNC(int, cipher_get_ctx_params, (void *cctx,
369                                                     OSSL_PARAM params[]))
370 OSSL_CORE_MAKE_FUNC(int, cipher_set_ctx_params, (void *cctx,
371                                                     const OSSL_PARAM params[]))
372 OSSL_CORE_MAKE_FUNC(const OSSL_PARAM *, cipher_gettable_params,
373                     (void *provctx))
374 OSSL_CORE_MAKE_FUNC(const OSSL_PARAM *, cipher_settable_ctx_params,
375                     (void *cctx, void *provctx))
376 OSSL_CORE_MAKE_FUNC(const OSSL_PARAM *, cipher_gettable_ctx_params,
377                     (void *cctx, void *provctx))
378
379 /* MACs */
380
381 # define OSSL_FUNC_MAC_NEWCTX                        1
382 # define OSSL_FUNC_MAC_DUPCTX                        2
383 # define OSSL_FUNC_MAC_FREECTX                       3
384 # define OSSL_FUNC_MAC_INIT                          4
385 # define OSSL_FUNC_MAC_UPDATE                        5
386 # define OSSL_FUNC_MAC_FINAL                         6
387 # define OSSL_FUNC_MAC_GET_PARAMS                    7
388 # define OSSL_FUNC_MAC_GET_CTX_PARAMS                8
389 # define OSSL_FUNC_MAC_SET_CTX_PARAMS                9
390 # define OSSL_FUNC_MAC_GETTABLE_PARAMS              10
391 # define OSSL_FUNC_MAC_GETTABLE_CTX_PARAMS          11
392 # define OSSL_FUNC_MAC_SETTABLE_CTX_PARAMS          12
393
394 OSSL_CORE_MAKE_FUNC(void *, mac_newctx, (void *provctx))
395 OSSL_CORE_MAKE_FUNC(void *, mac_dupctx, (void *src))
396 OSSL_CORE_MAKE_FUNC(void, mac_freectx, (void *mctx))
397 OSSL_CORE_MAKE_FUNC(int, mac_init, (void *mctx, const unsigned char *key,
398                                     size_t keylen, const OSSL_PARAM params[]))
399 OSSL_CORE_MAKE_FUNC(int, mac_update,
400                     (void *mctx, const unsigned char *in, size_t inl))
401 OSSL_CORE_MAKE_FUNC(int, mac_final,
402                     (void *mctx,
403                      unsigned char *out, size_t *outl, size_t outsize))
404 OSSL_CORE_MAKE_FUNC(const OSSL_PARAM *, mac_gettable_params, (void *provctx))
405 OSSL_CORE_MAKE_FUNC(const OSSL_PARAM *, mac_gettable_ctx_params,
406                     (void *mctx, void *provctx))
407 OSSL_CORE_MAKE_FUNC(const OSSL_PARAM *, mac_settable_ctx_params,
408                     (void *mctx, void *provctx))
409 OSSL_CORE_MAKE_FUNC(int, mac_get_params, (OSSL_PARAM params[]))
410 OSSL_CORE_MAKE_FUNC(int, mac_get_ctx_params,
411                     (void *mctx, OSSL_PARAM params[]))
412 OSSL_CORE_MAKE_FUNC(int, mac_set_ctx_params,
413                     (void *mctx, const OSSL_PARAM params[]))
414
415 /* KDFs and PRFs */
416
417 # define OSSL_FUNC_KDF_NEWCTX                        1
418 # define OSSL_FUNC_KDF_DUPCTX                        2
419 # define OSSL_FUNC_KDF_FREECTX                       3
420 # define OSSL_FUNC_KDF_RESET                         4
421 # define OSSL_FUNC_KDF_DERIVE                        5
422 # define OSSL_FUNC_KDF_GETTABLE_PARAMS               6
423 # define OSSL_FUNC_KDF_GETTABLE_CTX_PARAMS           7
424 # define OSSL_FUNC_KDF_SETTABLE_CTX_PARAMS           8
425 # define OSSL_FUNC_KDF_GET_PARAMS                    9
426 # define OSSL_FUNC_KDF_GET_CTX_PARAMS               10
427 # define OSSL_FUNC_KDF_SET_CTX_PARAMS               11
428
429 OSSL_CORE_MAKE_FUNC(void *, kdf_newctx, (void *provctx))
430 OSSL_CORE_MAKE_FUNC(void *, kdf_dupctx, (void *src))
431 OSSL_CORE_MAKE_FUNC(void, kdf_freectx, (void *kctx))
432 OSSL_CORE_MAKE_FUNC(void, kdf_reset, (void *kctx))
433 OSSL_CORE_MAKE_FUNC(int, kdf_derive, (void *kctx, unsigned char *key,
434                                       size_t keylen, const OSSL_PARAM params[]))
435 OSSL_CORE_MAKE_FUNC(const OSSL_PARAM *, kdf_gettable_params, (void *provctx))
436 OSSL_CORE_MAKE_FUNC(const OSSL_PARAM *, kdf_gettable_ctx_params,
437                     (void *kctx, void *provctx))
438 OSSL_CORE_MAKE_FUNC(const OSSL_PARAM *, kdf_settable_ctx_params,
439                     (void *kctx, void *provctx))
440 OSSL_CORE_MAKE_FUNC(int, kdf_get_params, (OSSL_PARAM params[]))
441 OSSL_CORE_MAKE_FUNC(int, kdf_get_ctx_params,
442                     (void *kctx, OSSL_PARAM params[]))
443 OSSL_CORE_MAKE_FUNC(int, kdf_set_ctx_params,
444                     (void *kctx, const OSSL_PARAM params[]))
445
446 /* RAND */
447
448 # define OSSL_FUNC_RAND_NEWCTX                        1
449 # define OSSL_FUNC_RAND_FREECTX                       2
450 # define OSSL_FUNC_RAND_INSTANTIATE                   3
451 # define OSSL_FUNC_RAND_UNINSTANTIATE                 4
452 # define OSSL_FUNC_RAND_GENERATE                      5
453 # define OSSL_FUNC_RAND_RESEED                        6
454 # define OSSL_FUNC_RAND_NONCE                         7
455 # define OSSL_FUNC_RAND_ENABLE_LOCKING                8
456 # define OSSL_FUNC_RAND_LOCK                          9
457 # define OSSL_FUNC_RAND_UNLOCK                       10
458 # define OSSL_FUNC_RAND_GETTABLE_PARAMS              11
459 # define OSSL_FUNC_RAND_GETTABLE_CTX_PARAMS          12
460 # define OSSL_FUNC_RAND_SETTABLE_CTX_PARAMS          13
461 # define OSSL_FUNC_RAND_GET_PARAMS                   14
462 # define OSSL_FUNC_RAND_GET_CTX_PARAMS               15
463 # define OSSL_FUNC_RAND_SET_CTX_PARAMS               16
464 # define OSSL_FUNC_RAND_VERIFY_ZEROIZATION           17
465 # define OSSL_FUNC_RAND_GET_SEED                     18
466 # define OSSL_FUNC_RAND_CLEAR_SEED                   19
467
468 OSSL_CORE_MAKE_FUNC(void *,rand_newctx,
469                     (void *provctx, void *parent,
470                     const OSSL_DISPATCH *parent_calls))
471 OSSL_CORE_MAKE_FUNC(void,rand_freectx, (void *vctx))
472 OSSL_CORE_MAKE_FUNC(int,rand_instantiate,
473                     (void *vdrbg, unsigned int strength,
474                      int prediction_resistance,
475                      const unsigned char *pstr, size_t pstr_len,
476                      const OSSL_PARAM params[]))
477 OSSL_CORE_MAKE_FUNC(int,rand_uninstantiate, (void *vdrbg))
478 OSSL_CORE_MAKE_FUNC(int,rand_generate,
479                     (void *vctx, unsigned char *out, size_t outlen,
480                      unsigned int strength, int prediction_resistance,
481                      const unsigned char *addin, size_t addin_len))
482 OSSL_CORE_MAKE_FUNC(int,rand_reseed,
483                     (void *vctx, int prediction_resistance,
484                      const unsigned char *ent, size_t ent_len,
485                      const unsigned char *addin, size_t addin_len))
486 OSSL_CORE_MAKE_FUNC(size_t,rand_nonce,
487                     (void *vctx, unsigned char *out, unsigned int strength,
488                      size_t min_noncelen, size_t max_noncelen))
489 OSSL_CORE_MAKE_FUNC(int,rand_enable_locking, (void *vctx))
490 OSSL_CORE_MAKE_FUNC(int,rand_lock, (void *vctx))
491 OSSL_CORE_MAKE_FUNC(void,rand_unlock, (void *vctx))
492 OSSL_CORE_MAKE_FUNC(const OSSL_PARAM *,rand_gettable_params, (void *provctx))
493 OSSL_CORE_MAKE_FUNC(const OSSL_PARAM *,rand_gettable_ctx_params,
494                     (void *vctx, void *provctx))
495 OSSL_CORE_MAKE_FUNC(const OSSL_PARAM *,rand_settable_ctx_params,
496                     (void *vctx, void *provctx))
497 OSSL_CORE_MAKE_FUNC(int,rand_get_params, (OSSL_PARAM params[]))
498 OSSL_CORE_MAKE_FUNC(int,rand_get_ctx_params,
499                     (void *vctx, OSSL_PARAM params[]))
500 OSSL_CORE_MAKE_FUNC(int,rand_set_ctx_params,
501                     (void *vctx, const OSSL_PARAM params[]))
502 OSSL_CORE_MAKE_FUNC(void,rand_set_callbacks,
503                     (void *vctx, OSSL_INOUT_CALLBACK *get_entropy,
504                      OSSL_CALLBACK *cleanup_entropy,
505                      OSSL_INOUT_CALLBACK *get_nonce,
506                      OSSL_CALLBACK *cleanup_nonce, void *arg))
507 OSSL_CORE_MAKE_FUNC(int,rand_verify_zeroization,
508                     (void *vctx))
509 OSSL_CORE_MAKE_FUNC(size_t,rand_get_seed,
510                     (void *vctx, unsigned char **buffer,
511                      int entropy, size_t min_len, size_t max_len,
512                      int prediction_resistance,
513                      const unsigned char *adin, size_t adin_len))
514 OSSL_CORE_MAKE_FUNC(void,rand_clear_seed,
515                     (void *vctx, unsigned char *buffer, size_t b_len))
516
517 /*-
518  * Key management
519  *
520  * The Key Management takes care of provider side key objects, and includes
521  * all current functionality to create them, destroy them, set parameters
522  * and key material, etc, essentially everything that manipulates the keys
523  * themselves and their parameters.
524  *
525  * The key objects are commonly referred to as |keydata|, and it MUST be able
526  * to contain parameters if the key has any, the public key and the private
527  * key.  All parts are optional, but their presence determines what can be
528  * done with the key object in terms of encryption, signature, and so on.
529  * The assumption from libcrypto is that the key object contains any of the
530  * following data combinations:
531  *
532  * - parameters only
533  * - public key only
534  * - public key + private key
535  * - parameters + public key
536  * - parameters + public key + private key
537  *
538  * What "parameters", "public key" and "private key" means in detail is left
539  * to the implementation.  In the case of DH and DSA, they would typically
540  * include domain parameters, while for certain variants of RSA, they would
541  * typically include PSS or OAEP parameters.
542  *
543  * Key objects are created with OSSL_FUNC_keymgmt_new() and destroyed with
544  * OSSL_FUNC_keymgmt_free().  Key objects can have data filled in with
545  * OSSL_FUNC_keymgmt_import().
546  *
547  * Three functions are made available to check what selection of data is
548  * present in a key object: OSSL_FUNC_keymgmt_has_parameters(),
549  * OSSL_FUNC_keymgmt_has_public_key(), and OSSL_FUNC_keymgmt_has_private_key(),
550  */
551
552 /* Key data subset selection - individual bits */
553 # define OSSL_KEYMGMT_SELECT_PRIVATE_KEY            0x01
554 # define OSSL_KEYMGMT_SELECT_PUBLIC_KEY             0x02
555 # define OSSL_KEYMGMT_SELECT_DOMAIN_PARAMETERS      0x04
556 # define OSSL_KEYMGMT_SELECT_OTHER_PARAMETERS       0x80
557
558 /* Key data subset selection - combinations */
559 # define OSSL_KEYMGMT_SELECT_ALL_PARAMETERS     \
560     ( OSSL_KEYMGMT_SELECT_DOMAIN_PARAMETERS     \
561       | OSSL_KEYMGMT_SELECT_OTHER_PARAMETERS)
562 # define OSSL_KEYMGMT_SELECT_KEYPAIR            \
563     ( OSSL_KEYMGMT_SELECT_PRIVATE_KEY | OSSL_KEYMGMT_SELECT_PUBLIC_KEY )
564 # define OSSL_KEYMGMT_SELECT_ALL                \
565     ( OSSL_KEYMGMT_SELECT_KEYPAIR | OSSL_KEYMGMT_SELECT_ALL_PARAMETERS )
566
567 # define OSSL_KEYMGMT_VALIDATE_FULL_CHECK              0
568 # define OSSL_KEYMGMT_VALIDATE_QUICK_CHECK             1
569
570 /* Basic key object creation */
571 # define OSSL_FUNC_KEYMGMT_NEW                         1
572 OSSL_CORE_MAKE_FUNC(void *, keymgmt_new, (void *provctx))
573
574 /* Generation, a more complex constructor */
575 # define OSSL_FUNC_KEYMGMT_GEN_INIT                    2
576 # define OSSL_FUNC_KEYMGMT_GEN_SET_TEMPLATE            3
577 # define OSSL_FUNC_KEYMGMT_GEN_SET_PARAMS              4
578 # define OSSL_FUNC_KEYMGMT_GEN_SETTABLE_PARAMS         5
579 # define OSSL_FUNC_KEYMGMT_GEN                         6
580 # define OSSL_FUNC_KEYMGMT_GEN_CLEANUP                 7
581 OSSL_CORE_MAKE_FUNC(void *, keymgmt_gen_init,
582                     (void *provctx, int selection, const OSSL_PARAM params[]))
583 OSSL_CORE_MAKE_FUNC(int, keymgmt_gen_set_template,
584                     (void *genctx, void *templ))
585 OSSL_CORE_MAKE_FUNC(int, keymgmt_gen_set_params,
586                     (void *genctx, const OSSL_PARAM params[]))
587 OSSL_CORE_MAKE_FUNC(const OSSL_PARAM *,
588                     keymgmt_gen_settable_params,
589                     (void *genctx, void *provctx))
590 OSSL_CORE_MAKE_FUNC(void *, keymgmt_gen,
591                     (void *genctx, OSSL_CALLBACK *cb, void *cbarg))
592 OSSL_CORE_MAKE_FUNC(void, keymgmt_gen_cleanup, (void *genctx))
593
594 /* Key loading by object reference */
595 # define OSSL_FUNC_KEYMGMT_LOAD                        8
596 OSSL_CORE_MAKE_FUNC(void *, keymgmt_load,
597                     (const void *reference, size_t reference_sz))
598
599 /* Basic key object destruction */
600 # define OSSL_FUNC_KEYMGMT_FREE                       10
601 OSSL_CORE_MAKE_FUNC(void, keymgmt_free, (void *keydata))
602
603 /* Key object information, with discovery */
604 #define OSSL_FUNC_KEYMGMT_GET_PARAMS                  11
605 #define OSSL_FUNC_KEYMGMT_GETTABLE_PARAMS             12
606 OSSL_CORE_MAKE_FUNC(int, keymgmt_get_params,
607                     (void *keydata, OSSL_PARAM params[]))
608 OSSL_CORE_MAKE_FUNC(const OSSL_PARAM *, keymgmt_gettable_params,
609                     (void *provctx))
610
611 #define OSSL_FUNC_KEYMGMT_SET_PARAMS                  13
612 #define OSSL_FUNC_KEYMGMT_SETTABLE_PARAMS             14
613 OSSL_CORE_MAKE_FUNC(int, keymgmt_set_params,
614                     (void *keydata, const OSSL_PARAM params[]))
615 OSSL_CORE_MAKE_FUNC(const OSSL_PARAM *, keymgmt_settable_params,
616                     (void *provctx))
617
618 /* Key checks - discovery of supported operations */
619 # define OSSL_FUNC_KEYMGMT_QUERY_OPERATION_NAME       20
620 OSSL_CORE_MAKE_FUNC(const char *, keymgmt_query_operation_name,
621                     (int operation_id))
622
623 /* Key checks - key data content checks */
624 # define OSSL_FUNC_KEYMGMT_HAS                        21
625 OSSL_CORE_MAKE_FUNC(int, keymgmt_has, (const void *keydata, int selection))
626
627 /* Key checks - validation */
628 # define OSSL_FUNC_KEYMGMT_VALIDATE                   22
629 OSSL_CORE_MAKE_FUNC(int, keymgmt_validate, (const void *keydata, int selection,
630                                             int checktype))
631
632 /* Key checks - matching */
633 # define OSSL_FUNC_KEYMGMT_MATCH                      23
634 OSSL_CORE_MAKE_FUNC(int, keymgmt_match,
635                     (const void *keydata1, const void *keydata2,
636                      int selection))
637
638 /* Import and export functions, with discovery */
639 # define OSSL_FUNC_KEYMGMT_IMPORT                     40
640 # define OSSL_FUNC_KEYMGMT_IMPORT_TYPES               41
641 # define OSSL_FUNC_KEYMGMT_EXPORT                     42
642 # define OSSL_FUNC_KEYMGMT_EXPORT_TYPES               43
643 OSSL_CORE_MAKE_FUNC(int, keymgmt_import,
644                     (void *keydata, int selection, const OSSL_PARAM params[]))
645 OSSL_CORE_MAKE_FUNC(const OSSL_PARAM *, keymgmt_import_types,
646                     (int selection))
647 OSSL_CORE_MAKE_FUNC(int, keymgmt_export,
648                     (void *keydata, int selection,
649                      OSSL_CALLBACK *param_cb, void *cbarg))
650 OSSL_CORE_MAKE_FUNC(const OSSL_PARAM *, keymgmt_export_types,
651                     (int selection))
652
653 /* Dup function, constructor */
654 # define OSSL_FUNC_KEYMGMT_DUP                        44
655 OSSL_CORE_MAKE_FUNC(void *, keymgmt_dup,
656                     (const void *keydata_from, int selection))
657
658 /* Extended import and export functions */
659 # define OSSL_FUNC_KEYMGMT_IMPORT_TYPES_EX            45
660 # define OSSL_FUNC_KEYMGMT_EXPORT_TYPES_EX            46
661 OSSL_CORE_MAKE_FUNC(const OSSL_PARAM *, keymgmt_import_types_ex,
662                     (void *provctx, int selection))
663 OSSL_CORE_MAKE_FUNC(const OSSL_PARAM *, keymgmt_export_types_ex,
664                     (void *provctx, int selection))
665
666 /* Key Exchange */
667
668 # define OSSL_FUNC_KEYEXCH_NEWCTX                      1
669 # define OSSL_FUNC_KEYEXCH_INIT                        2
670 # define OSSL_FUNC_KEYEXCH_DERIVE                      3
671 # define OSSL_FUNC_KEYEXCH_SET_PEER                    4
672 # define OSSL_FUNC_KEYEXCH_FREECTX                     5
673 # define OSSL_FUNC_KEYEXCH_DUPCTX                      6
674 # define OSSL_FUNC_KEYEXCH_SET_CTX_PARAMS              7
675 # define OSSL_FUNC_KEYEXCH_SETTABLE_CTX_PARAMS         8
676 # define OSSL_FUNC_KEYEXCH_GET_CTX_PARAMS              9
677 # define OSSL_FUNC_KEYEXCH_GETTABLE_CTX_PARAMS        10
678
679 OSSL_CORE_MAKE_FUNC(void *, keyexch_newctx, (void *provctx))
680 OSSL_CORE_MAKE_FUNC(int, keyexch_init, (void *ctx, void *provkey,
681                                         const OSSL_PARAM params[]))
682 OSSL_CORE_MAKE_FUNC(int, keyexch_derive, (void *ctx,  unsigned char *secret,
683                                              size_t *secretlen, size_t outlen))
684 OSSL_CORE_MAKE_FUNC(int, keyexch_set_peer, (void *ctx, void *provkey))
685 OSSL_CORE_MAKE_FUNC(void, keyexch_freectx, (void *ctx))
686 OSSL_CORE_MAKE_FUNC(void *, keyexch_dupctx, (void *ctx))
687 OSSL_CORE_MAKE_FUNC(int, keyexch_set_ctx_params, (void *ctx,
688                                                      const OSSL_PARAM params[]))
689 OSSL_CORE_MAKE_FUNC(const OSSL_PARAM *, keyexch_settable_ctx_params,
690                     (void *ctx, void *provctx))
691 OSSL_CORE_MAKE_FUNC(int, keyexch_get_ctx_params, (void *ctx,
692                                                      OSSL_PARAM params[]))
693 OSSL_CORE_MAKE_FUNC(const OSSL_PARAM *, keyexch_gettable_ctx_params,
694                     (void *ctx, void *provctx))
695
696 /* Signature */
697
698 # define OSSL_FUNC_SIGNATURE_NEWCTX                  1
699 # define OSSL_FUNC_SIGNATURE_SIGN_INIT               2
700 # define OSSL_FUNC_SIGNATURE_SIGN                    3
701 # define OSSL_FUNC_SIGNATURE_VERIFY_INIT             4
702 # define OSSL_FUNC_SIGNATURE_VERIFY                  5
703 # define OSSL_FUNC_SIGNATURE_VERIFY_RECOVER_INIT     6
704 # define OSSL_FUNC_SIGNATURE_VERIFY_RECOVER          7
705 # define OSSL_FUNC_SIGNATURE_DIGEST_SIGN_INIT        8
706 # define OSSL_FUNC_SIGNATURE_DIGEST_SIGN_UPDATE      9
707 # define OSSL_FUNC_SIGNATURE_DIGEST_SIGN_FINAL      10
708 # define OSSL_FUNC_SIGNATURE_DIGEST_SIGN            11
709 # define OSSL_FUNC_SIGNATURE_DIGEST_VERIFY_INIT     12
710 # define OSSL_FUNC_SIGNATURE_DIGEST_VERIFY_UPDATE   13
711 # define OSSL_FUNC_SIGNATURE_DIGEST_VERIFY_FINAL    14
712 # define OSSL_FUNC_SIGNATURE_DIGEST_VERIFY          15
713 # define OSSL_FUNC_SIGNATURE_FREECTX                16
714 # define OSSL_FUNC_SIGNATURE_DUPCTX                 17
715 # define OSSL_FUNC_SIGNATURE_GET_CTX_PARAMS         18
716 # define OSSL_FUNC_SIGNATURE_GETTABLE_CTX_PARAMS    19
717 # define OSSL_FUNC_SIGNATURE_SET_CTX_PARAMS         20
718 # define OSSL_FUNC_SIGNATURE_SETTABLE_CTX_PARAMS    21
719 # define OSSL_FUNC_SIGNATURE_GET_CTX_MD_PARAMS      22
720 # define OSSL_FUNC_SIGNATURE_GETTABLE_CTX_MD_PARAMS 23
721 # define OSSL_FUNC_SIGNATURE_SET_CTX_MD_PARAMS      24
722 # define OSSL_FUNC_SIGNATURE_SETTABLE_CTX_MD_PARAMS 25
723
724 OSSL_CORE_MAKE_FUNC(void *, signature_newctx, (void *provctx,
725                                                   const char *propq))
726 OSSL_CORE_MAKE_FUNC(int, signature_sign_init, (void *ctx, void *provkey,
727                                                const OSSL_PARAM params[]))
728 OSSL_CORE_MAKE_FUNC(int, signature_sign, (void *ctx,  unsigned char *sig,
729                                              size_t *siglen, size_t sigsize,
730                                              const unsigned char *tbs,
731                                              size_t tbslen))
732 OSSL_CORE_MAKE_FUNC(int, signature_verify_init, (void *ctx, void *provkey,
733                                                  const OSSL_PARAM params[]))
734 OSSL_CORE_MAKE_FUNC(int, signature_verify, (void *ctx,
735                                                const unsigned char *sig,
736                                                size_t siglen,
737                                                const unsigned char *tbs,
738                                                size_t tbslen))
739 OSSL_CORE_MAKE_FUNC(int, signature_verify_recover_init,
740                     (void *ctx, void *provkey, const OSSL_PARAM params[]))
741 OSSL_CORE_MAKE_FUNC(int, signature_verify_recover,
742                     (void *ctx, unsigned char *rout, size_t *routlen,
743                      size_t routsize, const unsigned char *sig, size_t siglen))
744 OSSL_CORE_MAKE_FUNC(int, signature_digest_sign_init,
745                     (void *ctx, const char *mdname, void *provkey,
746                      const OSSL_PARAM params[]))
747 OSSL_CORE_MAKE_FUNC(int, signature_digest_sign_update,
748                     (void *ctx, const unsigned char *data, size_t datalen))
749 OSSL_CORE_MAKE_FUNC(int, signature_digest_sign_final,
750                     (void *ctx, unsigned char *sig, size_t *siglen,
751                      size_t sigsize))
752 OSSL_CORE_MAKE_FUNC(int, signature_digest_sign,
753                     (void *ctx, unsigned char *sigret, size_t *siglen,
754                      size_t sigsize, const unsigned char *tbs, size_t tbslen))
755 OSSL_CORE_MAKE_FUNC(int, signature_digest_verify_init,
756                     (void *ctx, const char *mdname, void *provkey,
757                      const OSSL_PARAM params[]))
758 OSSL_CORE_MAKE_FUNC(int, signature_digest_verify_update,
759                     (void *ctx, const unsigned char *data, size_t datalen))
760 OSSL_CORE_MAKE_FUNC(int, signature_digest_verify_final,
761                     (void *ctx, const unsigned char *sig, size_t siglen))
762 OSSL_CORE_MAKE_FUNC(int, signature_digest_verify,
763                     (void *ctx, const unsigned char *sig, size_t siglen,
764                      const unsigned char *tbs, size_t tbslen))
765 OSSL_CORE_MAKE_FUNC(void, signature_freectx, (void *ctx))
766 OSSL_CORE_MAKE_FUNC(void *, signature_dupctx, (void *ctx))
767 OSSL_CORE_MAKE_FUNC(int, signature_get_ctx_params,
768                     (void *ctx, OSSL_PARAM params[]))
769 OSSL_CORE_MAKE_FUNC(const OSSL_PARAM *, signature_gettable_ctx_params,
770                     (void *ctx, void *provctx))
771 OSSL_CORE_MAKE_FUNC(int, signature_set_ctx_params,
772                     (void *ctx, const OSSL_PARAM params[]))
773 OSSL_CORE_MAKE_FUNC(const OSSL_PARAM *, signature_settable_ctx_params,
774                     (void *ctx, void *provctx))
775 OSSL_CORE_MAKE_FUNC(int, signature_get_ctx_md_params,
776                     (void *ctx, OSSL_PARAM params[]))
777 OSSL_CORE_MAKE_FUNC(const OSSL_PARAM *, signature_gettable_ctx_md_params,
778                     (void *ctx))
779 OSSL_CORE_MAKE_FUNC(int, signature_set_ctx_md_params,
780                     (void *ctx, const OSSL_PARAM params[]))
781 OSSL_CORE_MAKE_FUNC(const OSSL_PARAM *, signature_settable_ctx_md_params,
782                     (void *ctx))
783
784
785 /* Asymmetric Ciphers */
786
787 # define OSSL_FUNC_ASYM_CIPHER_NEWCTX                  1
788 # define OSSL_FUNC_ASYM_CIPHER_ENCRYPT_INIT            2
789 # define OSSL_FUNC_ASYM_CIPHER_ENCRYPT                 3
790 # define OSSL_FUNC_ASYM_CIPHER_DECRYPT_INIT            4
791 # define OSSL_FUNC_ASYM_CIPHER_DECRYPT                 5
792 # define OSSL_FUNC_ASYM_CIPHER_FREECTX                 6
793 # define OSSL_FUNC_ASYM_CIPHER_DUPCTX                  7
794 # define OSSL_FUNC_ASYM_CIPHER_GET_CTX_PARAMS          8
795 # define OSSL_FUNC_ASYM_CIPHER_GETTABLE_CTX_PARAMS     9
796 # define OSSL_FUNC_ASYM_CIPHER_SET_CTX_PARAMS         10
797 # define OSSL_FUNC_ASYM_CIPHER_SETTABLE_CTX_PARAMS    11
798
799 OSSL_CORE_MAKE_FUNC(void *, asym_cipher_newctx, (void *provctx))
800 OSSL_CORE_MAKE_FUNC(int, asym_cipher_encrypt_init, (void *ctx, void *provkey,
801                                                     const OSSL_PARAM params[]))
802 OSSL_CORE_MAKE_FUNC(int, asym_cipher_encrypt, (void *ctx, unsigned char *out,
803                                                   size_t *outlen,
804                                                   size_t outsize,
805                                                   const unsigned char *in,
806                                                   size_t inlen))
807 OSSL_CORE_MAKE_FUNC(int, asym_cipher_decrypt_init, (void *ctx, void *provkey,
808                                                     const OSSL_PARAM params[]))
809 OSSL_CORE_MAKE_FUNC(int, asym_cipher_decrypt, (void *ctx, unsigned char *out,
810                                                   size_t *outlen,
811                                                   size_t outsize,
812                                                   const unsigned char *in,
813                                                   size_t inlen))
814 OSSL_CORE_MAKE_FUNC(void, asym_cipher_freectx, (void *ctx))
815 OSSL_CORE_MAKE_FUNC(void *, asym_cipher_dupctx, (void *ctx))
816 OSSL_CORE_MAKE_FUNC(int, asym_cipher_get_ctx_params,
817                     (void *ctx, OSSL_PARAM params[]))
818 OSSL_CORE_MAKE_FUNC(const OSSL_PARAM *, asym_cipher_gettable_ctx_params,
819                     (void *ctx, void *provctx))
820 OSSL_CORE_MAKE_FUNC(int, asym_cipher_set_ctx_params,
821                     (void *ctx, const OSSL_PARAM params[]))
822 OSSL_CORE_MAKE_FUNC(const OSSL_PARAM *, asym_cipher_settable_ctx_params,
823                     (void *ctx, void *provctx))
824
825 /* Asymmetric Key encapsulation */
826 # define OSSL_FUNC_KEM_NEWCTX                  1
827 # define OSSL_FUNC_KEM_ENCAPSULATE_INIT        2
828 # define OSSL_FUNC_KEM_ENCAPSULATE             3
829 # define OSSL_FUNC_KEM_DECAPSULATE_INIT        4
830 # define OSSL_FUNC_KEM_DECAPSULATE             5
831 # define OSSL_FUNC_KEM_FREECTX                 6
832 # define OSSL_FUNC_KEM_DUPCTX                  7
833 # define OSSL_FUNC_KEM_GET_CTX_PARAMS          8
834 # define OSSL_FUNC_KEM_GETTABLE_CTX_PARAMS     9
835 # define OSSL_FUNC_KEM_SET_CTX_PARAMS         10
836 # define OSSL_FUNC_KEM_SETTABLE_CTX_PARAMS    11
837 # define OSSL_FUNC_KEM_AUTH_ENCAPSULATE_INIT  12
838 # define OSSL_FUNC_KEM_AUTH_DECAPSULATE_INIT  13
839
840 OSSL_CORE_MAKE_FUNC(void *, kem_newctx, (void *provctx))
841 OSSL_CORE_MAKE_FUNC(int, kem_encapsulate_init, (void *ctx, void *provkey,
842                                                 const OSSL_PARAM params[]))
843 OSSL_CORE_MAKE_FUNC(int, kem_auth_encapsulate_init, (void *ctx, void *provkey,
844                                                      void *authprivkey,
845                                                      const OSSL_PARAM params[]))
846 OSSL_CORE_MAKE_FUNC(int, kem_encapsulate, (void *ctx,
847                                            unsigned char *out, size_t *outlen,
848                                            unsigned char *secret,
849                                            size_t *secretlen))
850 OSSL_CORE_MAKE_FUNC(int, kem_decapsulate_init, (void *ctx, void *provkey,
851                                                 const OSSL_PARAM params[]))
852 OSSL_CORE_MAKE_FUNC(int, kem_auth_decapsulate_init, (void *ctx, void *provkey,
853                                                      void *authpubkey,
854                                                      const OSSL_PARAM params[]))
855 OSSL_CORE_MAKE_FUNC(int, kem_decapsulate, (void *ctx,
856                                            unsigned char *out, size_t *outlen,
857                                            const unsigned char *in, size_t inlen))
858 OSSL_CORE_MAKE_FUNC(void, kem_freectx, (void *ctx))
859 OSSL_CORE_MAKE_FUNC(void *, kem_dupctx, (void *ctx))
860 OSSL_CORE_MAKE_FUNC(int, kem_get_ctx_params, (void *ctx, OSSL_PARAM params[]))
861 OSSL_CORE_MAKE_FUNC(const OSSL_PARAM *, kem_gettable_ctx_params,
862                     (void *ctx, void *provctx))
863 OSSL_CORE_MAKE_FUNC(int, kem_set_ctx_params,
864                     (void *ctx, const OSSL_PARAM params[]))
865 OSSL_CORE_MAKE_FUNC(const OSSL_PARAM *, kem_settable_ctx_params,
866                     (void *ctx, void *provctx))
867
868 /* Encoders and decoders */
869 # define OSSL_FUNC_ENCODER_NEWCTX                      1
870 # define OSSL_FUNC_ENCODER_FREECTX                     2
871 # define OSSL_FUNC_ENCODER_GET_PARAMS                  3
872 # define OSSL_FUNC_ENCODER_GETTABLE_PARAMS             4
873 # define OSSL_FUNC_ENCODER_SET_CTX_PARAMS              5
874 # define OSSL_FUNC_ENCODER_SETTABLE_CTX_PARAMS         6
875 # define OSSL_FUNC_ENCODER_DOES_SELECTION             10
876 # define OSSL_FUNC_ENCODER_ENCODE                     11
877 # define OSSL_FUNC_ENCODER_IMPORT_OBJECT              20
878 # define OSSL_FUNC_ENCODER_FREE_OBJECT                21
879 OSSL_CORE_MAKE_FUNC(void *, encoder_newctx, (void *provctx))
880 OSSL_CORE_MAKE_FUNC(void, encoder_freectx, (void *ctx))
881 OSSL_CORE_MAKE_FUNC(int, encoder_get_params, (OSSL_PARAM params[]))
882 OSSL_CORE_MAKE_FUNC(const OSSL_PARAM *, encoder_gettable_params,
883                     (void *provctx))
884 OSSL_CORE_MAKE_FUNC(int, encoder_set_ctx_params,
885                     (void *ctx, const OSSL_PARAM params[]))
886 OSSL_CORE_MAKE_FUNC(const OSSL_PARAM *, encoder_settable_ctx_params,
887                     (void *provctx))
888
889 OSSL_CORE_MAKE_FUNC(int, encoder_does_selection,
890                     (void *provctx, int selection))
891 OSSL_CORE_MAKE_FUNC(int, encoder_encode,
892                     (void *ctx, OSSL_CORE_BIO *out,
893                      const void *obj_raw, const OSSL_PARAM obj_abstract[],
894                      int selection,
895                      OSSL_PASSPHRASE_CALLBACK *cb, void *cbarg))
896
897 OSSL_CORE_MAKE_FUNC(void *, encoder_import_object,
898                     (void *ctx, int selection, const OSSL_PARAM params[]))
899 OSSL_CORE_MAKE_FUNC(void, encoder_free_object, (void *obj))
900
901 # define OSSL_FUNC_DECODER_NEWCTX                      1
902 # define OSSL_FUNC_DECODER_FREECTX                     2
903 # define OSSL_FUNC_DECODER_GET_PARAMS                  3
904 # define OSSL_FUNC_DECODER_GETTABLE_PARAMS             4
905 # define OSSL_FUNC_DECODER_SET_CTX_PARAMS              5
906 # define OSSL_FUNC_DECODER_SETTABLE_CTX_PARAMS         6
907 # define OSSL_FUNC_DECODER_DOES_SELECTION             10
908 # define OSSL_FUNC_DECODER_DECODE                     11
909 # define OSSL_FUNC_DECODER_EXPORT_OBJECT              20
910 OSSL_CORE_MAKE_FUNC(void *, decoder_newctx, (void *provctx))
911 OSSL_CORE_MAKE_FUNC(void, decoder_freectx, (void *ctx))
912 OSSL_CORE_MAKE_FUNC(int, decoder_get_params, (OSSL_PARAM params[]))
913 OSSL_CORE_MAKE_FUNC(const OSSL_PARAM *, decoder_gettable_params,
914                     (void *provctx))
915 OSSL_CORE_MAKE_FUNC(int, decoder_set_ctx_params,
916                     (void *ctx, const OSSL_PARAM params[]))
917 OSSL_CORE_MAKE_FUNC(const OSSL_PARAM *, decoder_settable_ctx_params,
918                     (void *provctx))
919
920 OSSL_CORE_MAKE_FUNC(int, decoder_does_selection,
921                     (void *provctx, int selection))
922 OSSL_CORE_MAKE_FUNC(int, decoder_decode,
923                     (void *ctx, OSSL_CORE_BIO *in, int selection,
924                      OSSL_CALLBACK *data_cb, void *data_cbarg,
925                      OSSL_PASSPHRASE_CALLBACK *pw_cb, void *pw_cbarg))
926 OSSL_CORE_MAKE_FUNC(int, decoder_export_object,
927                     (void *ctx, const void *objref, size_t objref_sz,
928                      OSSL_CALLBACK *export_cb, void *export_cbarg))
929
930 /*-
931  * Store
932  *
933  * Objects are scanned by using the 'open', 'load', 'eof' and 'close'
934  * functions, which implement an OSSL_STORE loader.
935  *
936  * store_load() works in a way that's very similar to the decoders, in
937  * that they pass an abstract object through a callback, either as a DER
938  * octet string or as an object reference, which libcrypto will have to
939  * deal with.
940  */
941
942 #define OSSL_FUNC_STORE_OPEN                        1
943 #define OSSL_FUNC_STORE_ATTACH                      2
944 #define OSSL_FUNC_STORE_SETTABLE_CTX_PARAMS         3
945 #define OSSL_FUNC_STORE_SET_CTX_PARAMS              4
946 #define OSSL_FUNC_STORE_LOAD                        5
947 #define OSSL_FUNC_STORE_EOF                         6
948 #define OSSL_FUNC_STORE_CLOSE                       7
949 #define OSSL_FUNC_STORE_EXPORT_OBJECT               8
950 #define OSSL_FUNC_STORE_DELETE                      9
951 #define OSSL_FUNC_STORE_OPEN_EX                     10
952 OSSL_CORE_MAKE_FUNC(void *, store_open, (void *provctx, const char *uri))
953 OSSL_CORE_MAKE_FUNC(void *, store_attach, (void *provctx, OSSL_CORE_BIO *in))
954 OSSL_CORE_MAKE_FUNC(const OSSL_PARAM *, store_settable_ctx_params,
955                     (void *provctx))
956 OSSL_CORE_MAKE_FUNC(int, store_set_ctx_params,
957                     (void *loaderctx, const OSSL_PARAM params[]))
958 OSSL_CORE_MAKE_FUNC(int, store_load,
959                     (void *loaderctx,
960                      OSSL_CALLBACK *object_cb, void *object_cbarg,
961                      OSSL_PASSPHRASE_CALLBACK *pw_cb, void *pw_cbarg))
962 OSSL_CORE_MAKE_FUNC(int, store_eof, (void *loaderctx))
963 OSSL_CORE_MAKE_FUNC(int, store_close, (void *loaderctx))
964 OSSL_CORE_MAKE_FUNC(int, store_export_object,
965                     (void *loaderctx, const void *objref, size_t objref_sz,
966                      OSSL_CALLBACK *export_cb, void *export_cbarg))
967 OSSL_CORE_MAKE_FUNC(int, store_delete,
968                     (void *provctx, const char *uri, const OSSL_PARAM params[],
969                      OSSL_PASSPHRASE_CALLBACK *pw_cb, void *pw_cbarg))
970 OSSL_CORE_MAKE_FUNC(void *, store_open_ex,
971                     (void *provctx, const char *uri, const OSSL_PARAM params[],
972                      OSSL_PASSPHRASE_CALLBACK *pw_cb, void *pw_cbarg))
973
974 # ifdef __cplusplus
975 }
976 # endif
977
978 #endif