core_dispatch.h 48 KB

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