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