core_numbers.h 27 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567
  1. /*
  2. * Copyright 2019 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. # include <stdarg.h>
  12. # include <openssl/core.h>
  13. # ifdef __cplusplus
  14. extern "C" {
  15. # endif
  16. /*-
  17. * Identities
  18. * ----------
  19. *
  20. * All series start with 1, to allow 0 to be an array terminator.
  21. * For any FUNC identity, we also provide a function signature typedef
  22. * and a static inline function to extract a function pointer from a
  23. * OSSL_DISPATCH element in a type safe manner.
  24. *
  25. * Names:
  26. * for any function base name 'foo' (uppercase form 'FOO'), we will have
  27. * the following:
  28. * - a macro for the identity with the name OSSL_FUNC_'FOO' or derivatives
  29. * thereof (to be specified further down)
  30. * - a function signature typedef with the name OSSL_'foo'_fn
  31. * - a function pointer extractor function with the name OSSL_'foo'
  32. */
  33. /*
  34. * Helper macro to create the function signature typedef and the extractor
  35. * |type| is the return-type of the function, |name| is the name of the
  36. * function to fetch, and |args| is a parenthesized list of parameters
  37. * for the function (that is, it is |name|'s function signature).
  38. */
  39. #define OSSL_CORE_MAKE_FUNC(type,name,args) \
  40. typedef type (OSSL_##name##_fn)args; \
  41. static ossl_inline \
  42. OSSL_##name##_fn *OSSL_get_##name(const OSSL_DISPATCH *opf) \
  43. { \
  44. return (OSSL_##name##_fn *)opf->function; \
  45. }
  46. /*
  47. * Core function identities, for the two OSSL_DISPATCH tables being passed
  48. * in the OSSL_provider_init call.
  49. *
  50. * 0 serves as a marker for the end of the OSSL_DISPATCH array, and must
  51. * therefore NEVER be used as a function identity.
  52. */
  53. /* Functions provided by the Core to the provider, reserved numbers 1-1023 */
  54. # define OSSL_FUNC_CORE_GETTABLE_PARAMS 1
  55. OSSL_CORE_MAKE_FUNC(const OSSL_PARAM *,
  56. core_gettable_params,(const OSSL_PROVIDER *prov))
  57. # define OSSL_FUNC_CORE_GET_PARAMS 2
  58. OSSL_CORE_MAKE_FUNC(int,core_get_params,(const OSSL_PROVIDER *prov,
  59. OSSL_PARAM params[]))
  60. # define OSSL_FUNC_CORE_THREAD_START 3
  61. OSSL_CORE_MAKE_FUNC(int,core_thread_start,(const OSSL_PROVIDER *prov,
  62. OSSL_thread_stop_handler_fn handfn))
  63. # define OSSL_FUNC_CORE_GET_LIBRARY_CONTEXT 4
  64. OSSL_CORE_MAKE_FUNC(OPENSSL_CTX *,core_get_library_context,
  65. (const OSSL_PROVIDER *prov))
  66. # define OSSL_FUNC_CORE_NEW_ERROR 5
  67. OSSL_CORE_MAKE_FUNC(void,core_new_error,(const OSSL_PROVIDER *prov))
  68. # define OSSL_FUNC_CORE_SET_ERROR_DEBUG 6
  69. OSSL_CORE_MAKE_FUNC(void,core_set_error_debug,
  70. (const OSSL_PROVIDER *prov,
  71. const char *file, int line, const char *func))
  72. # define OSSL_FUNC_CORE_VSET_ERROR 7
  73. OSSL_CORE_MAKE_FUNC(void,core_vset_error,
  74. (const OSSL_PROVIDER *prov,
  75. uint32_t reason, const char *fmt, va_list args))
  76. /* Memory allocation, freeing, clearing. */
  77. #define OSSL_FUNC_CRYPTO_MALLOC 10
  78. OSSL_CORE_MAKE_FUNC(void *,
  79. CRYPTO_malloc, (size_t num, const char *file, int line))
  80. #define OSSL_FUNC_CRYPTO_ZALLOC 11
  81. OSSL_CORE_MAKE_FUNC(void *,
  82. CRYPTO_zalloc, (size_t num, const char *file, int line))
  83. #define OSSL_FUNC_CRYPTO_FREE 12
  84. OSSL_CORE_MAKE_FUNC(void,
  85. CRYPTO_free, (void *ptr, const char *file, int line))
  86. #define OSSL_FUNC_CRYPTO_CLEAR_FREE 13
  87. OSSL_CORE_MAKE_FUNC(void,
  88. CRYPTO_clear_free, (void *ptr, size_t num, const char *file, int line))
  89. #define OSSL_FUNC_CRYPTO_REALLOC 14
  90. OSSL_CORE_MAKE_FUNC(void *,
  91. CRYPTO_realloc, (void *addr, size_t num, const char *file, int line))
  92. #define OSSL_FUNC_CRYPTO_CLEAR_REALLOC 15
  93. OSSL_CORE_MAKE_FUNC(void *,
  94. CRYPTO_clear_realloc, (void *addr, size_t old_num, size_t num,
  95. const char *file, int line))
  96. #define OSSL_FUNC_CRYPTO_SECURE_MALLOC 16
  97. OSSL_CORE_MAKE_FUNC(void *,
  98. CRYPTO_secure_malloc, (size_t num, const char *file, int line))
  99. #define OSSL_FUNC_CRYPTO_SECURE_ZALLOC 17
  100. OSSL_CORE_MAKE_FUNC(void *,
  101. CRYPTO_secure_zalloc, (size_t num, const char *file, int line))
  102. #define OSSL_FUNC_CRYPTO_SECURE_FREE 18
  103. OSSL_CORE_MAKE_FUNC(void,
  104. CRYPTO_secure_free, (void *ptr, const char *file, int line))
  105. #define OSSL_FUNC_CRYPTO_SECURE_CLEAR_FREE 19
  106. OSSL_CORE_MAKE_FUNC(void,
  107. CRYPTO_secure_clear_free, (void *ptr, size_t num, const char *file,
  108. int line))
  109. #define OSSL_FUNC_CRYPTO_SECURE_ALLOCATED 20
  110. OSSL_CORE_MAKE_FUNC(int,
  111. CRYPTO_secure_allocated, (const void *ptr))
  112. #define OSSL_FUNC_OPENSSL_CLEANSE 21
  113. OSSL_CORE_MAKE_FUNC(void,
  114. OPENSSL_cleanse, (void *ptr, size_t len))
  115. #define OSSL_FUNC_CRYPTO_MEM_CTRL 22
  116. OSSL_CORE_MAKE_FUNC(int, CRYPTO_mem_ctrl, (int mode))
  117. /* Bio functions provided by the core */
  118. #define OSSL_FUNC_BIO_NEW_FILE 23
  119. #define OSSL_FUNC_BIO_NEW_MEMBUF 24
  120. #define OSSL_FUNC_BIO_READ_EX 25
  121. #define OSSL_FUNC_BIO_FREE 26
  122. #define OSSL_FUNC_BIO_VPRINTF 27
  123. OSSL_CORE_MAKE_FUNC(BIO *, BIO_new_file, (const char *filename, const char *mode))
  124. OSSL_CORE_MAKE_FUNC(BIO *, BIO_new_membuf, (const void *buf, int len))
  125. OSSL_CORE_MAKE_FUNC(int, BIO_read_ex, (BIO *bio, void *data, size_t data_len,
  126. size_t *bytes_read))
  127. OSSL_CORE_MAKE_FUNC(int, BIO_free, (BIO *bio))
  128. OSSL_CORE_MAKE_FUNC(int, BIO_vprintf, (BIO *bio, const char *format,
  129. va_list args))
  130. /* Functions provided by the provider to the Core, reserved numbers 1024-1535 */
  131. # define OSSL_FUNC_PROVIDER_TEARDOWN 1024
  132. OSSL_CORE_MAKE_FUNC(void,provider_teardown,(void *provctx))
  133. # define OSSL_FUNC_PROVIDER_GETTABLE_PARAMS 1025
  134. OSSL_CORE_MAKE_FUNC(const OSSL_PARAM *,
  135. provider_gettable_params,(void *provctx))
  136. # define OSSL_FUNC_PROVIDER_GET_PARAMS 1026
  137. OSSL_CORE_MAKE_FUNC(int,provider_get_params,(void *provctx,
  138. OSSL_PARAM params[]))
  139. # define OSSL_FUNC_PROVIDER_QUERY_OPERATION 1027
  140. OSSL_CORE_MAKE_FUNC(const OSSL_ALGORITHM *,provider_query_operation,
  141. (void *provctx, int operation_id, const int *no_store))
  142. # define OSSL_FUNC_PROVIDER_GET_REASON_STRINGS 1028
  143. OSSL_CORE_MAKE_FUNC(const OSSL_ITEM *,provider_get_reason_strings,
  144. (void *provctx))
  145. /* Operations */
  146. # define OSSL_OP_DIGEST 1
  147. # define OSSL_OP_CIPHER 2 /* Symmetric Ciphers */
  148. # define OSSL_OP_MAC 3
  149. # define OSSL_OP_KDF 4
  150. # define OSSL_OP_KEYMGMT 10
  151. # define OSSL_OP_KEYEXCH 11
  152. # define OSSL_OP_SIGNATURE 12
  153. # define OSSL_OP_ASYM_CIPHER 13
  154. /* New section for non-EVP operations */
  155. # define OSSL_OP_SERIALIZER 20
  156. /* Highest known operation number */
  157. # define OSSL_OP__HIGHEST 20
  158. /* Digests */
  159. # define OSSL_FUNC_DIGEST_NEWCTX 1
  160. # define OSSL_FUNC_DIGEST_INIT 2
  161. # define OSSL_FUNC_DIGEST_UPDATE 3
  162. # define OSSL_FUNC_DIGEST_FINAL 4
  163. # define OSSL_FUNC_DIGEST_DIGEST 5
  164. # define OSSL_FUNC_DIGEST_FREECTX 6
  165. # define OSSL_FUNC_DIGEST_DUPCTX 7
  166. # define OSSL_FUNC_DIGEST_GET_PARAMS 8
  167. # define OSSL_FUNC_DIGEST_SET_CTX_PARAMS 9
  168. # define OSSL_FUNC_DIGEST_GET_CTX_PARAMS 10
  169. # define OSSL_FUNC_DIGEST_GETTABLE_PARAMS 11
  170. # define OSSL_FUNC_DIGEST_SETTABLE_CTX_PARAMS 12
  171. # define OSSL_FUNC_DIGEST_GETTABLE_CTX_PARAMS 13
  172. OSSL_CORE_MAKE_FUNC(void *, OP_digest_newctx, (void *provctx))
  173. OSSL_CORE_MAKE_FUNC(int, OP_digest_init, (void *dctx))
  174. OSSL_CORE_MAKE_FUNC(int, OP_digest_update,
  175. (void *dctx, const unsigned char *in, size_t inl))
  176. OSSL_CORE_MAKE_FUNC(int, OP_digest_final,
  177. (void *dctx,
  178. unsigned char *out, size_t *outl, size_t outsz))
  179. OSSL_CORE_MAKE_FUNC(int, OP_digest_digest,
  180. (void *provctx, const unsigned char *in, size_t inl,
  181. unsigned char *out, size_t *outl, size_t outsz))
  182. OSSL_CORE_MAKE_FUNC(void, OP_digest_freectx, (void *dctx))
  183. OSSL_CORE_MAKE_FUNC(void *, OP_digest_dupctx, (void *dctx))
  184. OSSL_CORE_MAKE_FUNC(int, OP_digest_get_params, (OSSL_PARAM params[]))
  185. OSSL_CORE_MAKE_FUNC(int, OP_digest_set_ctx_params,
  186. (void *vctx, const OSSL_PARAM params[]))
  187. OSSL_CORE_MAKE_FUNC(int, OP_digest_get_ctx_params,
  188. (void *vctx, OSSL_PARAM params[]))
  189. OSSL_CORE_MAKE_FUNC(const OSSL_PARAM *, OP_digest_gettable_params, (void))
  190. OSSL_CORE_MAKE_FUNC(const OSSL_PARAM *, OP_digest_settable_ctx_params, (void))
  191. OSSL_CORE_MAKE_FUNC(const OSSL_PARAM *, OP_digest_gettable_ctx_params, (void))
  192. /* Symmetric Ciphers */
  193. # define OSSL_FUNC_CIPHER_NEWCTX 1
  194. # define OSSL_FUNC_CIPHER_ENCRYPT_INIT 2
  195. # define OSSL_FUNC_CIPHER_DECRYPT_INIT 3
  196. # define OSSL_FUNC_CIPHER_UPDATE 4
  197. # define OSSL_FUNC_CIPHER_FINAL 5
  198. # define OSSL_FUNC_CIPHER_CIPHER 6
  199. # define OSSL_FUNC_CIPHER_FREECTX 7
  200. # define OSSL_FUNC_CIPHER_DUPCTX 8
  201. # define OSSL_FUNC_CIPHER_GET_PARAMS 9
  202. # define OSSL_FUNC_CIPHER_GET_CTX_PARAMS 10
  203. # define OSSL_FUNC_CIPHER_SET_CTX_PARAMS 11
  204. # define OSSL_FUNC_CIPHER_GETTABLE_PARAMS 12
  205. # define OSSL_FUNC_CIPHER_GETTABLE_CTX_PARAMS 13
  206. # define OSSL_FUNC_CIPHER_SETTABLE_CTX_PARAMS 14
  207. OSSL_CORE_MAKE_FUNC(void *, OP_cipher_newctx, (void *provctx))
  208. OSSL_CORE_MAKE_FUNC(int, OP_cipher_encrypt_init, (void *cctx,
  209. const unsigned char *key,
  210. size_t keylen,
  211. const unsigned char *iv,
  212. size_t ivlen))
  213. OSSL_CORE_MAKE_FUNC(int, OP_cipher_decrypt_init, (void *cctx,
  214. const unsigned char *key,
  215. size_t keylen,
  216. const unsigned char *iv,
  217. size_t ivlen))
  218. OSSL_CORE_MAKE_FUNC(int, OP_cipher_update,
  219. (void *cctx,
  220. unsigned char *out, size_t *outl, size_t outsize,
  221. const unsigned char *in, size_t inl))
  222. OSSL_CORE_MAKE_FUNC(int, OP_cipher_final,
  223. (void *cctx,
  224. unsigned char *out, size_t *outl, size_t outsize))
  225. OSSL_CORE_MAKE_FUNC(int, OP_cipher_cipher,
  226. (void *cctx,
  227. unsigned char *out, size_t *outl, size_t outsize,
  228. const unsigned char *in, size_t inl))
  229. OSSL_CORE_MAKE_FUNC(void, OP_cipher_freectx, (void *cctx))
  230. OSSL_CORE_MAKE_FUNC(void *, OP_cipher_dupctx, (void *cctx))
  231. OSSL_CORE_MAKE_FUNC(int, OP_cipher_get_params, (OSSL_PARAM params[]))
  232. OSSL_CORE_MAKE_FUNC(int, OP_cipher_get_ctx_params, (void *cctx,
  233. OSSL_PARAM params[]))
  234. OSSL_CORE_MAKE_FUNC(int, OP_cipher_set_ctx_params, (void *cctx,
  235. const OSSL_PARAM params[]))
  236. OSSL_CORE_MAKE_FUNC(const OSSL_PARAM *, OP_cipher_gettable_params, (void))
  237. OSSL_CORE_MAKE_FUNC(const OSSL_PARAM *, OP_cipher_settable_ctx_params, (void))
  238. OSSL_CORE_MAKE_FUNC(const OSSL_PARAM *, OP_cipher_gettable_ctx_params, (void))
  239. /* MACs */
  240. # define OSSL_FUNC_MAC_NEWCTX 1
  241. # define OSSL_FUNC_MAC_DUPCTX 2
  242. # define OSSL_FUNC_MAC_FREECTX 3
  243. # define OSSL_FUNC_MAC_INIT 4
  244. # define OSSL_FUNC_MAC_UPDATE 5
  245. # define OSSL_FUNC_MAC_FINAL 6
  246. # define OSSL_FUNC_MAC_GET_PARAMS 7
  247. # define OSSL_FUNC_MAC_GET_CTX_PARAMS 8
  248. # define OSSL_FUNC_MAC_SET_CTX_PARAMS 9
  249. # define OSSL_FUNC_MAC_GETTABLE_PARAMS 10
  250. # define OSSL_FUNC_MAC_GETTABLE_CTX_PARAMS 11
  251. # define OSSL_FUNC_MAC_SETTABLE_CTX_PARAMS 12
  252. OSSL_CORE_MAKE_FUNC(void *, OP_mac_newctx, (void *provctx))
  253. OSSL_CORE_MAKE_FUNC(void *, OP_mac_dupctx, (void *src))
  254. OSSL_CORE_MAKE_FUNC(void, OP_mac_freectx, (void *mctx))
  255. OSSL_CORE_MAKE_FUNC(size_t, OP_mac_size, (void *mctx))
  256. OSSL_CORE_MAKE_FUNC(int, OP_mac_init, (void *mctx))
  257. OSSL_CORE_MAKE_FUNC(int, OP_mac_update,
  258. (void *mctx, const unsigned char *in, size_t inl))
  259. OSSL_CORE_MAKE_FUNC(int, OP_mac_final,
  260. (void *mctx,
  261. unsigned char *out, size_t *outl, size_t outsize))
  262. OSSL_CORE_MAKE_FUNC(const OSSL_PARAM *, OP_mac_gettable_params, (void))
  263. OSSL_CORE_MAKE_FUNC(const OSSL_PARAM *, OP_mac_gettable_ctx_params, (void))
  264. OSSL_CORE_MAKE_FUNC(const OSSL_PARAM *, OP_mac_settable_ctx_params, (void))
  265. OSSL_CORE_MAKE_FUNC(int, OP_mac_get_params, (OSSL_PARAM params[]))
  266. OSSL_CORE_MAKE_FUNC(int, OP_mac_get_ctx_params,
  267. (void *mctx, OSSL_PARAM params[]))
  268. OSSL_CORE_MAKE_FUNC(int, OP_mac_set_ctx_params,
  269. (void *mctx, const OSSL_PARAM params[]))
  270. /* KDFs and PRFs */
  271. # define OSSL_FUNC_KDF_NEWCTX 1
  272. # define OSSL_FUNC_KDF_DUPCTX 2
  273. # define OSSL_FUNC_KDF_FREECTX 3
  274. # define OSSL_FUNC_KDF_RESET 4
  275. # define OSSL_FUNC_KDF_DERIVE 5
  276. # define OSSL_FUNC_KDF_GETTABLE_PARAMS 6
  277. # define OSSL_FUNC_KDF_GETTABLE_CTX_PARAMS 7
  278. # define OSSL_FUNC_KDF_SETTABLE_CTX_PARAMS 8
  279. # define OSSL_FUNC_KDF_GET_PARAMS 9
  280. # define OSSL_FUNC_KDF_GET_CTX_PARAMS 10
  281. # define OSSL_FUNC_KDF_SET_CTX_PARAMS 11
  282. OSSL_CORE_MAKE_FUNC(void *, OP_kdf_newctx, (void *provctx))
  283. OSSL_CORE_MAKE_FUNC(void *, OP_kdf_dupctx, (void *src))
  284. OSSL_CORE_MAKE_FUNC(void, OP_kdf_freectx, (void *kctx))
  285. OSSL_CORE_MAKE_FUNC(void, OP_kdf_reset, (void *kctx))
  286. OSSL_CORE_MAKE_FUNC(int, OP_kdf_derive, (void *kctx, unsigned char *key,
  287. size_t keylen))
  288. OSSL_CORE_MAKE_FUNC(const OSSL_PARAM *, OP_kdf_gettable_params, (void))
  289. OSSL_CORE_MAKE_FUNC(const OSSL_PARAM *, OP_kdf_gettable_ctx_params, (void))
  290. OSSL_CORE_MAKE_FUNC(const OSSL_PARAM *, OP_kdf_settable_ctx_params, (void))
  291. OSSL_CORE_MAKE_FUNC(int, OP_kdf_get_params, (OSSL_PARAM params[]))
  292. OSSL_CORE_MAKE_FUNC(int, OP_kdf_get_ctx_params,
  293. (void *kctx, OSSL_PARAM params[]))
  294. OSSL_CORE_MAKE_FUNC(int, OP_kdf_set_ctx_params,
  295. (void *kctx, const OSSL_PARAM params[]))
  296. /*-
  297. * Key management
  298. *
  299. * Key domain parameter references can be created in several manners:
  300. * - by importing the domain parameter material via an OSSL_PARAM array.
  301. * - by generating key domain parameters, given input via an OSSL_PARAM
  302. * array.
  303. *
  304. * Key references can be created in several manners:
  305. * - by importing the key material via an OSSL_PARAM array.
  306. * - by generating a key, given optional domain parameters and
  307. * additional keygen parameters.
  308. * If domain parameters are given, they must have been generated using
  309. * the domain parameter generator functions.
  310. * If the domain parameters comes from a different provider, results
  311. * are undefined.
  312. * THE CALLER MUST ENSURE THAT CORRECT DOMAIN PARAMETERS ARE USED.
  313. * - by loading an internal key, given a binary blob that forms an identity.
  314. * THE CALLER MUST ENSURE THAT A CORRECT IDENTITY IS USED.
  315. */
  316. /* Key domain parameter creation and destruction */
  317. # define OSSL_FUNC_KEYMGMT_IMPORTDOMPARAMS 1
  318. # define OSSL_FUNC_KEYMGMT_GENDOMPARAMS 2
  319. # define OSSL_FUNC_KEYMGMT_FREEDOMPARAMS 3
  320. OSSL_CORE_MAKE_FUNC(void *, OP_keymgmt_importdomparams,
  321. (void *provctx, const OSSL_PARAM params[]))
  322. OSSL_CORE_MAKE_FUNC(void *, OP_keymgmt_gendomparams,
  323. (void *provctx, const OSSL_PARAM params[]))
  324. OSSL_CORE_MAKE_FUNC(void, OP_keymgmt_freedomparams, (void *domparams))
  325. /* Key domain parameter export */
  326. # define OSSL_FUNC_KEYMGMT_EXPORTDOMPARAMS 4
  327. OSSL_CORE_MAKE_FUNC(int, OP_keymgmt_exportdomparams,
  328. (void *domparams, OSSL_CALLBACK *param_cb, void *cbarg))
  329. /* Key domain parameter discovery */
  330. /*
  331. * TODO(v3.0) investigate if we need OP_keymgmt_exportdomparam_types.
  332. * 'openssl provider' may be a caller...
  333. */
  334. # define OSSL_FUNC_KEYMGMT_IMPORTDOMPARAM_TYPES 5
  335. # define OSSL_FUNC_KEYMGMT_EXPORTDOMPARAM_TYPES 6
  336. OSSL_CORE_MAKE_FUNC(const OSSL_PARAM *, OP_keymgmt_importdomparam_types,
  337. (void))
  338. OSSL_CORE_MAKE_FUNC(const OSSL_PARAM *, OP_keymgmt_exportdomparam_types,
  339. (void))
  340. /* Key creation and destruction */
  341. # define OSSL_FUNC_KEYMGMT_IMPORTKEY 10
  342. # define OSSL_FUNC_KEYMGMT_GENKEY 11
  343. # define OSSL_FUNC_KEYMGMT_LOADKEY 12
  344. # define OSSL_FUNC_KEYMGMT_FREEKEY 13
  345. OSSL_CORE_MAKE_FUNC(void *, OP_keymgmt_importkey,
  346. (void *provctx, const OSSL_PARAM params[]))
  347. OSSL_CORE_MAKE_FUNC(void *, OP_keymgmt_genkey,
  348. (void *provctx,
  349. void *domparams, const OSSL_PARAM genkeyparams[]))
  350. OSSL_CORE_MAKE_FUNC(void *, OP_keymgmt_loadkey,
  351. (void *provctx, void *id, size_t idlen))
  352. OSSL_CORE_MAKE_FUNC(void, OP_keymgmt_freekey, (void *key))
  353. /* Key export */
  354. # define OSSL_FUNC_KEYMGMT_EXPORTKEY 14
  355. OSSL_CORE_MAKE_FUNC(int, OP_keymgmt_exportkey,
  356. (void *key, OSSL_CALLBACK *param_cb, void *cbarg))
  357. /* Key discovery */
  358. /*
  359. * TODO(v3.0) investigate if we need OP_keymgmt_exportkey_types.
  360. * 'openssl provider' may be a caller...
  361. */
  362. # define OSSL_FUNC_KEYMGMT_IMPORTKEY_TYPES 15
  363. # define OSSL_FUNC_KEYMGMT_EXPORTKEY_TYPES 16
  364. OSSL_CORE_MAKE_FUNC(const OSSL_PARAM *, OP_keymgmt_importkey_types, (void))
  365. OSSL_CORE_MAKE_FUNC(const OSSL_PARAM *, OP_keymgmt_exportkey_types, (void))
  366. /* Key Exchange */
  367. # define OSSL_FUNC_KEYEXCH_NEWCTX 1
  368. # define OSSL_FUNC_KEYEXCH_INIT 2
  369. # define OSSL_FUNC_KEYEXCH_DERIVE 3
  370. # define OSSL_FUNC_KEYEXCH_SET_PEER 4
  371. # define OSSL_FUNC_KEYEXCH_FREECTX 5
  372. # define OSSL_FUNC_KEYEXCH_DUPCTX 6
  373. # define OSSL_FUNC_KEYEXCH_SET_CTX_PARAMS 7
  374. # define OSSL_FUNC_KEYEXCH_SETTABLE_CTX_PARAMS 8
  375. OSSL_CORE_MAKE_FUNC(void *, OP_keyexch_newctx, (void *provctx))
  376. OSSL_CORE_MAKE_FUNC(int, OP_keyexch_init, (void *ctx, void *provkey))
  377. OSSL_CORE_MAKE_FUNC(int, OP_keyexch_derive, (void *ctx, unsigned char *secret,
  378. size_t *secretlen, size_t outlen))
  379. OSSL_CORE_MAKE_FUNC(int, OP_keyexch_set_peer, (void *ctx, void *provkey))
  380. OSSL_CORE_MAKE_FUNC(void, OP_keyexch_freectx, (void *ctx))
  381. OSSL_CORE_MAKE_FUNC(void *, OP_keyexch_dupctx, (void *ctx))
  382. OSSL_CORE_MAKE_FUNC(int, OP_keyexch_set_ctx_params, (void *ctx,
  383. const OSSL_PARAM params[]))
  384. OSSL_CORE_MAKE_FUNC(const OSSL_PARAM *, OP_keyexch_settable_ctx_params,
  385. (void))
  386. /* Signature */
  387. # define OSSL_FUNC_SIGNATURE_NEWCTX 1
  388. # define OSSL_FUNC_SIGNATURE_SIGN_INIT 2
  389. # define OSSL_FUNC_SIGNATURE_SIGN 3
  390. # define OSSL_FUNC_SIGNATURE_VERIFY_INIT 4
  391. # define OSSL_FUNC_SIGNATURE_VERIFY 5
  392. # define OSSL_FUNC_SIGNATURE_VERIFY_RECOVER_INIT 6
  393. # define OSSL_FUNC_SIGNATURE_VERIFY_RECOVER 7
  394. # define OSSL_FUNC_SIGNATURE_DIGEST_SIGN_INIT 8
  395. # define OSSL_FUNC_SIGNATURE_DIGEST_SIGN_UPDATE 9
  396. # define OSSL_FUNC_SIGNATURE_DIGEST_SIGN_FINAL 10
  397. # define OSSL_FUNC_SIGNATURE_DIGEST_VERIFY_INIT 11
  398. # define OSSL_FUNC_SIGNATURE_DIGEST_VERIFY_UPDATE 12
  399. # define OSSL_FUNC_SIGNATURE_DIGEST_VERIFY_FINAL 13
  400. # define OSSL_FUNC_SIGNATURE_FREECTX 14
  401. # define OSSL_FUNC_SIGNATURE_DUPCTX 15
  402. # define OSSL_FUNC_SIGNATURE_GET_CTX_PARAMS 16
  403. # define OSSL_FUNC_SIGNATURE_GETTABLE_CTX_PARAMS 17
  404. # define OSSL_FUNC_SIGNATURE_SET_CTX_PARAMS 18
  405. # define OSSL_FUNC_SIGNATURE_SETTABLE_CTX_PARAMS 19
  406. # define OSSL_FUNC_SIGNATURE_GET_CTX_MD_PARAMS 20
  407. # define OSSL_FUNC_SIGNATURE_GETTABLE_CTX_MD_PARAMS 21
  408. # define OSSL_FUNC_SIGNATURE_SET_CTX_MD_PARAMS 22
  409. # define OSSL_FUNC_SIGNATURE_SETTABLE_CTX_MD_PARAMS 23
  410. OSSL_CORE_MAKE_FUNC(void *, OP_signature_newctx, (void *provctx))
  411. OSSL_CORE_MAKE_FUNC(int, OP_signature_sign_init, (void *ctx, void *provkey))
  412. OSSL_CORE_MAKE_FUNC(int, OP_signature_sign, (void *ctx, unsigned char *sig,
  413. size_t *siglen, size_t sigsize,
  414. const unsigned char *tbs,
  415. size_t tbslen))
  416. OSSL_CORE_MAKE_FUNC(int, OP_signature_verify_init, (void *ctx, void *provkey))
  417. OSSL_CORE_MAKE_FUNC(int, OP_signature_verify, (void *ctx,
  418. const unsigned char *sig,
  419. size_t siglen,
  420. const unsigned char *tbs,
  421. size_t tbslen))
  422. OSSL_CORE_MAKE_FUNC(int, OP_signature_verify_recover_init, (void *ctx,
  423. void *provkey))
  424. OSSL_CORE_MAKE_FUNC(int, OP_signature_verify_recover, (void *ctx,
  425. unsigned char *rout,
  426. size_t *routlen,
  427. size_t routsize,
  428. const unsigned char *sig,
  429. size_t siglen))
  430. OSSL_CORE_MAKE_FUNC(int, OP_signature_digest_sign_init,
  431. (void *ctx, const char *mdname, const char *props,
  432. void *provkey))
  433. OSSL_CORE_MAKE_FUNC(int, OP_signature_digest_sign_update,
  434. (void *ctx, const unsigned char *data, size_t datalen))
  435. OSSL_CORE_MAKE_FUNC(int, OP_signature_digest_sign_final,
  436. (void *ctx, unsigned char *sig, size_t *siglen,
  437. size_t sigsize))
  438. OSSL_CORE_MAKE_FUNC(int, OP_signature_digest_verify_init,
  439. (void *ctx, const char *mdname, const char *props,
  440. void *provkey))
  441. OSSL_CORE_MAKE_FUNC(int, OP_signature_digest_verify_update,
  442. (void *ctx, const unsigned char *data, size_t datalen))
  443. OSSL_CORE_MAKE_FUNC(int, OP_signature_digest_verify_final,
  444. (void *ctx, const unsigned char *sig, size_t siglen))
  445. OSSL_CORE_MAKE_FUNC(void, OP_signature_freectx, (void *ctx))
  446. OSSL_CORE_MAKE_FUNC(void *, OP_signature_dupctx, (void *ctx))
  447. OSSL_CORE_MAKE_FUNC(int, OP_signature_get_ctx_params,
  448. (void *ctx, OSSL_PARAM params[]))
  449. OSSL_CORE_MAKE_FUNC(const OSSL_PARAM *, OP_signature_gettable_ctx_params,
  450. (void))
  451. OSSL_CORE_MAKE_FUNC(int, OP_signature_set_ctx_params,
  452. (void *ctx, const OSSL_PARAM params[]))
  453. OSSL_CORE_MAKE_FUNC(const OSSL_PARAM *, OP_signature_settable_ctx_params,
  454. (void))
  455. OSSL_CORE_MAKE_FUNC(int, OP_signature_get_ctx_md_params,
  456. (void *ctx, OSSL_PARAM params[]))
  457. OSSL_CORE_MAKE_FUNC(const OSSL_PARAM *, OP_signature_gettable_ctx_md_params,
  458. (void *ctx))
  459. OSSL_CORE_MAKE_FUNC(int, OP_signature_set_ctx_md_params,
  460. (void *ctx, const OSSL_PARAM params[]))
  461. OSSL_CORE_MAKE_FUNC(const OSSL_PARAM *, OP_signature_settable_ctx_md_params,
  462. (void *ctx))
  463. /* Asymmetric Ciphers */
  464. # define OSSL_FUNC_ASYM_CIPHER_NEWCTX 1
  465. # define OSSL_FUNC_ASYM_CIPHER_ENCRYPT_INIT 2
  466. # define OSSL_FUNC_ASYM_CIPHER_ENCRYPT 3
  467. # define OSSL_FUNC_ASYM_CIPHER_DECRYPT_INIT 4
  468. # define OSSL_FUNC_ASYM_CIPHER_DECRYPT 5
  469. # define OSSL_FUNC_ASYM_CIPHER_FREECTX 6
  470. # define OSSL_FUNC_ASYM_CIPHER_DUPCTX 7
  471. # define OSSL_FUNC_ASYM_CIPHER_GET_CTX_PARAMS 8
  472. # define OSSL_FUNC_ASYM_CIPHER_GETTABLE_CTX_PARAMS 9
  473. # define OSSL_FUNC_ASYM_CIPHER_SET_CTX_PARAMS 10
  474. # define OSSL_FUNC_ASYM_CIPHER_SETTABLE_CTX_PARAMS 11
  475. OSSL_CORE_MAKE_FUNC(void *, OP_asym_cipher_newctx, (void *provctx))
  476. OSSL_CORE_MAKE_FUNC(int, OP_asym_cipher_encrypt_init, (void *ctx, void *provkey))
  477. OSSL_CORE_MAKE_FUNC(int, OP_asym_cipher_encrypt, (void *ctx, unsigned char *out,
  478. size_t *outlen,
  479. size_t outsize,
  480. const unsigned char *in,
  481. size_t inlen))
  482. OSSL_CORE_MAKE_FUNC(int, OP_asym_cipher_decrypt_init, (void *ctx, void *provkey))
  483. OSSL_CORE_MAKE_FUNC(int, OP_asym_cipher_decrypt, (void *ctx, unsigned char *out,
  484. size_t *outlen,
  485. size_t outsize,
  486. const unsigned char *in,
  487. size_t inlen))
  488. OSSL_CORE_MAKE_FUNC(void, OP_asym_cipher_freectx, (void *ctx))
  489. OSSL_CORE_MAKE_FUNC(void *, OP_asym_cipher_dupctx, (void *ctx))
  490. OSSL_CORE_MAKE_FUNC(int, OP_asym_cipher_get_ctx_params,
  491. (void *ctx, OSSL_PARAM params[]))
  492. OSSL_CORE_MAKE_FUNC(const OSSL_PARAM *, OP_asym_cipher_gettable_ctx_params,
  493. (void))
  494. OSSL_CORE_MAKE_FUNC(int, OP_asym_cipher_set_ctx_params,
  495. (void *ctx, const OSSL_PARAM params[]))
  496. OSSL_CORE_MAKE_FUNC(const OSSL_PARAM *, OP_asym_cipher_settable_ctx_params,
  497. (void))
  498. /* Serializers */
  499. # define OSSL_FUNC_SERIALIZER_NEWCTX 1
  500. # define OSSL_FUNC_SERIALIZER_FREECTX 2
  501. # define OSSL_FUNC_SERIALIZER_SET_CTX_PARAMS 3
  502. # define OSSL_FUNC_SERIALIZER_SETTABLE_CTX_PARAMS 4
  503. # define OSSL_FUNC_SERIALIZER_SERIALIZE_DATA 10
  504. # define OSSL_FUNC_SERIALIZER_SERIALIZE_OBJECT 11
  505. OSSL_CORE_MAKE_FUNC(void *, OP_serializer_newctx, (void *provctx))
  506. OSSL_CORE_MAKE_FUNC(void, OP_serializer_freectx, (void *ctx))
  507. OSSL_CORE_MAKE_FUNC(int, OP_serializer_set_ctx_params,
  508. (void *ctx, const OSSL_PARAM params[]))
  509. OSSL_CORE_MAKE_FUNC(const OSSL_PARAM *, OP_serializer_settable_ctx_params,
  510. (void))
  511. OSSL_CORE_MAKE_FUNC(int, OP_serializer_serialize_data,
  512. (void *ctx, const OSSL_PARAM[], BIO *out,
  513. OSSL_PASSPHRASE_CALLBACK *cb, void *cbarg))
  514. OSSL_CORE_MAKE_FUNC(int, OP_serializer_serialize_object,
  515. (void *ctx, void *obj, BIO *out,
  516. OSSL_PASSPHRASE_CALLBACK *cb, void *cbarg))
  517. # ifdef __cplusplus
  518. }
  519. # endif
  520. #endif