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