1 /* 2 * Copyright 2019-2025 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