core_dispatch.h 46 KB

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