core_dispatch.h 45 KB

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