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