core_dispatch.h 47 KB

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