provider-signature.7ossl 35 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639
  1. .\" -*- mode: troff; coding: utf-8 -*-
  2. .\" Automatically generated by Pod::Man 5.01 (Pod::Simple 3.43)
  3. .\"
  4. .\" Standard preamble:
  5. .\" ========================================================================
  6. .de Sp \" Vertical space (when we can't use .PP)
  7. .if t .sp .5v
  8. .if n .sp
  9. ..
  10. .de Vb \" Begin verbatim text
  11. .ft CW
  12. .nf
  13. .ne \\$1
  14. ..
  15. .de Ve \" End verbatim text
  16. .ft R
  17. .fi
  18. ..
  19. .\" \*(C` and \*(C' are quotes in nroff, nothing in troff, for use with C<>.
  20. .ie n \{\
  21. . ds C` ""
  22. . ds C' ""
  23. 'br\}
  24. .el\{\
  25. . ds C`
  26. . ds C'
  27. 'br\}
  28. .\"
  29. .\" Escape single quotes in literal strings from groff's Unicode transform.
  30. .ie \n(.g .ds Aq \(aq
  31. .el .ds Aq '
  32. .\"
  33. .\" If the F register is >0, we'll generate index entries on stderr for
  34. .\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index
  35. .\" entries marked with X<> in POD. Of course, you'll have to process the
  36. .\" output yourself in some meaningful fashion.
  37. .\"
  38. .\" Avoid warning from groff about undefined register 'F'.
  39. .de IX
  40. ..
  41. .nr rF 0
  42. .if \n(.g .if rF .nr rF 1
  43. .if (\n(rF:(\n(.g==0)) \{\
  44. . if \nF \{\
  45. . de IX
  46. . tm Index:\\$1\t\\n%\t"\\$2"
  47. ..
  48. . if !\nF==2 \{\
  49. . nr % 0
  50. . nr F 2
  51. . \}
  52. . \}
  53. .\}
  54. .rr rF
  55. .\" ========================================================================
  56. .\"
  57. .IX Title "PROVIDER-SIGNATURE 7ossl"
  58. .TH PROVIDER-SIGNATURE 7ossl 2025-01-17 3.4.0 OpenSSL
  59. .\" For nroff, turn off justification. Always turn off hyphenation; it makes
  60. .\" way too many mistakes in technical documents.
  61. .if n .ad l
  62. .nh
  63. .SH NAME
  64. provider\-signature \- The signature library <\-> provider functions
  65. .SH SYNOPSIS
  66. .IX Header "SYNOPSIS"
  67. .Vb 2
  68. \& #include <openssl/core_dispatch.h>
  69. \& #include <openssl/core_names.h>
  70. \&
  71. \& /*
  72. \& * None of these are actual functions, but are displayed like this for
  73. \& * the function signatures for functions that are offered as function
  74. \& * pointers in OSSL_DISPATCH arrays.
  75. \& */
  76. \&
  77. \& /* Context management */
  78. \& void *OSSL_FUNC_signature_newctx(void *provctx, const char *propq);
  79. \& void OSSL_FUNC_signature_freectx(void *ctx);
  80. \& void *OSSL_FUNC_signature_dupctx(void *ctx);
  81. \&
  82. \& /* Get the key types that a signature algorithm supports */
  83. \& const char **OSSL_FUNC_signature_query_key_types(void);
  84. \&
  85. \& /* Signing */
  86. \& int OSSL_FUNC_signature_sign_init(void *ctx, void *provkey,
  87. \& const OSSL_PARAM params[]);
  88. \& int OSSL_FUNC_signature_sign(void *ctx, unsigned char *sig, size_t *siglen,
  89. \& size_t sigsize, const unsigned char *tbs, size_t tbslen);
  90. \& int OSSL_FUNC_signature_sign_message_init(void *ctx, void *provkey,
  91. \& const OSSL_PARAM params[]);
  92. \& int OSSL_FUNC_signature_sign_message_update(void *ctx, const unsigned char *in,
  93. \& size_t inlen);
  94. \& int OSSL_FUNC_signature_sign_message_final(void *ctx, unsigned char *sig,
  95. \& size_t *siglen, size_t sigsize);
  96. \&
  97. \& /* Verifying */
  98. \& int OSSL_FUNC_signature_verify_init(void *ctx, void *provkey,
  99. \& const OSSL_PARAM params[]);
  100. \& int OSSL_FUNC_signature_verify(void *ctx, const unsigned char *sig, size_t siglen,
  101. \& const unsigned char *tbs, size_t tbslen);
  102. \& int OSSL_FUNC_signature_verify_message_init(void *ctx, void *provkey,
  103. \& const OSSL_PARAM params[]);
  104. \& int OSSL_FUNC_signature_verify_message_update(void *ctx, const unsigned char *in,
  105. \& size_t inlen);
  106. \& /*
  107. \& * OSSL_FUNC_signature_verify_message_final requires that the signature to be
  108. \& * verified is specified via a "signature" OSSL_PARAM, which is given with a
  109. \& * previous call of OSSL_FUNC_signature_set_ctx_params().
  110. \& */
  111. \& int OSSL_FUNC_signature_verify_message_final(void *ctx);
  112. \&
  113. \& /* Verify Recover */
  114. \& int OSSL_FUNC_signature_verify_recover_init(void *ctx, void *provkey,
  115. \& const OSSL_PARAM params[]);
  116. \& int OSSL_FUNC_signature_verify_recover(void *ctx, unsigned char *rout,
  117. \& size_t *routlen, size_t routsize,
  118. \& const unsigned char *sig, size_t siglen);
  119. \&
  120. \& /* Digest Sign */
  121. \& int OSSL_FUNC_signature_digest_sign_init(void *ctx, const char *mdname,
  122. \& void *provkey,
  123. \& const OSSL_PARAM params[]);
  124. \& int OSSL_FUNC_signature_digest_sign_update(void *ctx, const unsigned char *data,
  125. \& size_t datalen);
  126. \& int OSSL_FUNC_signature_digest_sign_final(void *ctx, unsigned char *sig,
  127. \& size_t *siglen, size_t sigsize);
  128. \& int OSSL_FUNC_signature_digest_sign(void *ctx,
  129. \& unsigned char *sig, size_t *siglen,
  130. \& size_t sigsize, const unsigned char *tbs,
  131. \& size_t tbslen);
  132. \&
  133. \& /* Digest Verify */
  134. \& int OSSL_FUNC_signature_digest_verify_init(void *ctx, const char *mdname,
  135. \& void *provkey,
  136. \& const OSSL_PARAM params[]);
  137. \& int OSSL_FUNC_signature_digest_verify_update(void *ctx,
  138. \& const unsigned char *data,
  139. \& size_t datalen);
  140. \& int OSSL_FUNC_signature_digest_verify_final(void *ctx, const unsigned char *sig,
  141. \& size_t siglen);
  142. \& int OSSL_FUNC_signature_digest_verify(void *ctx, const unsigned char *sig,
  143. \& size_t siglen, const unsigned char *tbs,
  144. \& size_t tbslen);
  145. \&
  146. \& /* Signature parameters */
  147. \& int OSSL_FUNC_signature_get_ctx_params(void *ctx, OSSL_PARAM params[]);
  148. \& const OSSL_PARAM *OSSL_FUNC_signature_gettable_ctx_params(void *ctx,
  149. \& void *provctx);
  150. \& int OSSL_FUNC_signature_set_ctx_params(void *ctx, const OSSL_PARAM params[]);
  151. \& const OSSL_PARAM *OSSL_FUNC_signature_settable_ctx_params(void *ctx,
  152. \& void *provctx);
  153. \& /* MD parameters */
  154. \& int OSSL_FUNC_signature_get_ctx_md_params(void *ctx, OSSL_PARAM params[]);
  155. \& const OSSL_PARAM * OSSL_FUNC_signature_gettable_ctx_md_params(void *ctx);
  156. \& int OSSL_FUNC_signature_set_ctx_md_params(void *ctx, const OSSL_PARAM params[]);
  157. \& const OSSL_PARAM * OSSL_FUNC_signature_settable_ctx_md_params(void *ctx);
  158. .Ve
  159. .SH DESCRIPTION
  160. .IX Header "DESCRIPTION"
  161. This documentation is primarily aimed at provider authors. See \fBprovider\fR\|(7)
  162. for further information.
  163. .PP
  164. The signature (OSSL_OP_SIGNATURE) operation enables providers to implement
  165. signature algorithms and make them available to applications via the API
  166. functions \fBEVP_PKEY_sign\fR\|(3), \fBEVP_PKEY_verify\fR\|(3),
  167. and \fBEVP_PKEY_verify_recover\fR\|(3) (as well
  168. as other related functions).
  169. .PP
  170. All "functions" mentioned here are passed as function pointers between
  171. \&\fIlibcrypto\fR and the provider in \fBOSSL_DISPATCH\fR\|(3) arrays via
  172. \&\fBOSSL_ALGORITHM\fR\|(3) arrays that are returned by the provider's
  173. \&\fBprovider_query_operation()\fR function
  174. (see "Provider Functions" in \fBprovider\-base\fR\|(7)).
  175. .PP
  176. All these "functions" have a corresponding function type definition
  177. named \fBOSSL_FUNC_{name}_fn\fR, and a helper function to retrieve the
  178. function pointer from an \fBOSSL_DISPATCH\fR\|(3) element named
  179. \&\fBOSSL_FUNC_{name}\fR.
  180. For example, the "function" \fBOSSL_FUNC_signature_newctx()\fR has these:
  181. .PP
  182. .Vb 3
  183. \& typedef void *(OSSL_FUNC_signature_newctx_fn)(void *provctx, const char *propq);
  184. \& static ossl_inline OSSL_FUNC_signature_newctx_fn
  185. \& OSSL_FUNC_signature_newctx(const OSSL_DISPATCH *opf);
  186. .Ve
  187. .PP
  188. \&\fBOSSL_DISPATCH\fR\|(3) arrays are indexed by numbers that are provided as
  189. macros in \fBopenssl\-core_dispatch.h\fR\|(7), as follows:
  190. .PP
  191. .Vb 3
  192. \& OSSL_FUNC_signature_newctx OSSL_FUNC_SIGNATURE_NEWCTX
  193. \& OSSL_FUNC_signature_freectx OSSL_FUNC_SIGNATURE_FREECTX
  194. \& OSSL_FUNC_signature_dupctx OSSL_FUNC_SIGNATURE_DUPCTX
  195. \&
  196. \& OSSL_FUNC_signature_query_key_types OSSL_FUNC_SIGNATURE_QUERY_KEY_TYPES
  197. \&
  198. \& OSSL_FUNC_signature_sign_init OSSL_FUNC_SIGNATURE_SIGN_INIT
  199. \& OSSL_FUNC_signature_sign OSSL_FUNC_SIGNATURE_SIGN
  200. \& OSSL_FUNC_signature_sign_message_init OSSL_FUNC_SIGNATURE_SIGN_MESSAGE_INIT
  201. \& OSSL_FUNC_signature_sign_message_update OSSL_FUNC_SIGNATURE_SIGN_MESSAGE_UPDATE
  202. \& OSSL_FUNC_signature_sign_message_final OSSL_FUNC_SIGNATURE_SIGN_MESSAGE_FINAL
  203. \&
  204. \& OSSL_FUNC_signature_verify_init OSSL_FUNC_SIGNATURE_VERIFY_INIT
  205. \& OSSL_FUNC_signature_verify OSSL_FUNC_SIGNATURE_VERIFY
  206. \& OSSL_FUNC_signature_verify_message_init OSSL_FUNC_SIGNATURE_VERIFY_MESSAGE_INIT
  207. \& OSSL_FUNC_signature_verify_message_update OSSL_FUNC_SIGNATURE_VERIFY_MESSAGE_UPDATE
  208. \& OSSL_FUNC_signature_verify_message_final OSSL_FUNC_SIGNATURE_VERIFY_MESSAGE_FINAL
  209. \&
  210. \& OSSL_FUNC_signature_verify_recover_init OSSL_FUNC_SIGNATURE_VERIFY_RECOVER_INIT
  211. \& OSSL_FUNC_signature_verify_recover OSSL_FUNC_SIGNATURE_VERIFY_RECOVER
  212. \&
  213. \& OSSL_FUNC_signature_digest_sign_init OSSL_FUNC_SIGNATURE_DIGEST_SIGN_INIT
  214. \& OSSL_FUNC_signature_digest_sign_update OSSL_FUNC_SIGNATURE_DIGEST_SIGN_UPDATE
  215. \& OSSL_FUNC_signature_digest_sign_final OSSL_FUNC_SIGNATURE_DIGEST_SIGN_FINAL
  216. \& OSSL_FUNC_signature_digest_sign OSSL_FUNC_SIGNATURE_DIGEST_SIGN
  217. \&
  218. \& OSSL_FUNC_signature_digest_verify_init OSSL_FUNC_SIGNATURE_DIGEST_VERIFY_INIT
  219. \& OSSL_FUNC_signature_digest_verify_update OSSL_FUNC_SIGNATURE_DIGEST_VERIFY_UPDATE
  220. \& OSSL_FUNC_signature_digest_verify_final OSSL_FUNC_SIGNATURE_DIGEST_VERIFY_FINAL
  221. \& OSSL_FUNC_signature_digest_verify OSSL_FUNC_SIGNATURE_DIGEST_VERIFY
  222. \&
  223. \& OSSL_FUNC_signature_get_ctx_params OSSL_FUNC_SIGNATURE_GET_CTX_PARAMS
  224. \& OSSL_FUNC_signature_gettable_ctx_params OSSL_FUNC_SIGNATURE_GETTABLE_CTX_PARAMS
  225. \& OSSL_FUNC_signature_set_ctx_params OSSL_FUNC_SIGNATURE_SET_CTX_PARAMS
  226. \& OSSL_FUNC_signature_settable_ctx_params OSSL_FUNC_SIGNATURE_SETTABLE_CTX_PARAMS
  227. \&
  228. \& OSSL_FUNC_signature_get_ctx_md_params OSSL_FUNC_SIGNATURE_GET_CTX_MD_PARAMS
  229. \& OSSL_FUNC_signature_gettable_ctx_md_params OSSL_FUNC_SIGNATURE_GETTABLE_CTX_MD_PARAMS
  230. \& OSSL_FUNC_signature_set_ctx_md_params OSSL_FUNC_SIGNATURE_SET_CTX_MD_PARAMS
  231. \& OSSL_FUNC_signature_settable_ctx_md_params OSSL_FUNC_SIGNATURE_SETTABLE_CTX_MD_PARAMS
  232. .Ve
  233. .PP
  234. A signature algorithm implementation may not implement all of these functions.
  235. In order to be a consistent set of functions we must have at least a set of
  236. context functions (OSSL_FUNC_signature_newctx and OSSL_FUNC_signature_freectx) as well as a
  237. set of "signature" functions, i.e. at least one of:
  238. .IP "OSSL_FUNC_signature_sign_init and OSSL_FUNC_signature_sign" 4
  239. .IX Item "OSSL_FUNC_signature_sign_init and OSSL_FUNC_signature_sign"
  240. .PD 0
  241. .IP "OSSL_FUNC_signature_sign_message_init and OSSL_FUNC_signature_sign" 4
  242. .IX Item "OSSL_FUNC_signature_sign_message_init and OSSL_FUNC_signature_sign"
  243. .IP "OSSL_FUNC_signature_sign_message_init, OSSL_FUNC_signature_sign_message_update and OSSL_FUNC_signature_sign_message_final" 4
  244. .IX Item "OSSL_FUNC_signature_sign_message_init, OSSL_FUNC_signature_sign_message_update and OSSL_FUNC_signature_sign_message_final"
  245. .IP "OSSL_FUNC_signature_verify_init and OSSL_FUNC_signature_verify" 4
  246. .IX Item "OSSL_FUNC_signature_verify_init and OSSL_FUNC_signature_verify"
  247. .IP "OSSL_FUNC_signature_verify_message_init and OSSL_FUNC_signature_verify" 4
  248. .IX Item "OSSL_FUNC_signature_verify_message_init and OSSL_FUNC_signature_verify"
  249. .IP "OSSL_FUNC_signature_verify_message_init, OSSL_FUNC_signature_verify_message_update and OSSL_FUNC_signature_verify_message_final" 4
  250. .IX Item "OSSL_FUNC_signature_verify_message_init, OSSL_FUNC_signature_verify_message_update and OSSL_FUNC_signature_verify_message_final"
  251. .IP "OSSL_FUNC_signature_verify_recover_init and OSSL_FUNC_signature_verify_recover" 4
  252. .IX Item "OSSL_FUNC_signature_verify_recover_init and OSSL_FUNC_signature_verify_recover"
  253. .IP "OSSL_FUNC_signature_digest_sign_init, OSSL_FUNC_signature_digest_sign_update and OSSL_FUNC_signature_digest_sign_final" 4
  254. .IX Item "OSSL_FUNC_signature_digest_sign_init, OSSL_FUNC_signature_digest_sign_update and OSSL_FUNC_signature_digest_sign_final"
  255. .IP "OSSL_FUNC_signature_digest_verify_init, OSSL_FUNC_signature_digest_verify_update and OSSL_FUNC_signature_digest_verify_final" 4
  256. .IX Item "OSSL_FUNC_signature_digest_verify_init, OSSL_FUNC_signature_digest_verify_update and OSSL_FUNC_signature_digest_verify_final"
  257. .IP "OSSL_FUNC_signature_digest_sign_init and OSSL_FUNC_signature_digest_sign" 4
  258. .IX Item "OSSL_FUNC_signature_digest_sign_init and OSSL_FUNC_signature_digest_sign"
  259. .IP "OSSL_FUNC_signature_digest_verify_init and OSSL_FUNC_signature_digest_verify" 4
  260. .IX Item "OSSL_FUNC_signature_digest_verify_init and OSSL_FUNC_signature_digest_verify"
  261. .PD
  262. .PP
  263. OSSL_FUNC_signature_set_ctx_params and OSSL_FUNC_signature_settable_ctx_params are optional,
  264. but if one of them is present then the other one must also be present. The same
  265. applies to OSSL_FUNC_signature_get_ctx_params and OSSL_FUNC_signature_gettable_ctx_params, as
  266. well as the "md_params" functions. The OSSL_FUNC_signature_dupctx function is optional.
  267. .PP
  268. A signature algorithm must also implement some mechanism for generating,
  269. loading or importing keys via the key management (OSSL_OP_KEYMGMT) operation.
  270. See \fBprovider\-keymgmt\fR\|(7) for further details.
  271. .SS "Context Management Functions"
  272. .IX Subsection "Context Management Functions"
  273. \&\fBOSSL_FUNC_signature_newctx()\fR should create and return a pointer to a provider side
  274. structure for holding context information during a signature operation.
  275. A pointer to this context will be passed back in a number of the other signature
  276. operation function calls.
  277. The parameter \fIprovctx\fR is the provider context generated during provider
  278. initialisation (see \fBprovider\fR\|(7)). The \fIpropq\fR parameter is a property query
  279. string that may be (optionally) used by the provider during any "fetches" that
  280. it may perform (if it performs any).
  281. .PP
  282. \&\fBOSSL_FUNC_signature_freectx()\fR is passed a pointer to the provider side signature
  283. context in the \fIctx\fR parameter.
  284. This function should free any resources associated with that context.
  285. .PP
  286. \&\fBOSSL_FUNC_signature_dupctx()\fR should duplicate the provider side signature context in
  287. the \fIctx\fR parameter and return the duplicate copy.
  288. .SS "Signing Functions"
  289. .IX Subsection "Signing Functions"
  290. \&\fBOSSL_FUNC_signature_sign_init()\fR initialises a context for signing given a provider side
  291. signature context in the \fIctx\fR parameter, and a pointer to a provider key object
  292. in the \fIprovkey\fR parameter.
  293. The \fIparams\fR, if not NULL, should be set on the context in a manner similar to
  294. using \fBOSSL_FUNC_signature_set_ctx_params()\fR.
  295. The key object should have been previously generated, loaded or imported into
  296. the provider using the key management (OSSL_OP_KEYMGMT) operation (see
  297. \&\fBprovider\-keymgmt\fR\|(7)).
  298. .PP
  299. \&\fBOSSL_FUNC_signature_sign()\fR performs the actual signing itself.
  300. A previously initialised signature context is passed in the \fIctx\fR
  301. parameter.
  302. The data to be signed is pointed to be the \fItbs\fR parameter which is \fItbslen\fR
  303. bytes long.
  304. Unless \fIsig\fR is NULL, the signature should be written to the location pointed
  305. to by the \fIsig\fR parameter and it should not exceed \fIsigsize\fR bytes in length.
  306. The length of the signature should be written to \fI*siglen\fR.
  307. If \fIsig\fR is NULL then the maximum length of the signature should be written to
  308. \&\fI*siglen\fR.
  309. .SS "Message Signing Functions"
  310. .IX Subsection "Message Signing Functions"
  311. These functions are suitable for providers that implement algorithms that
  312. accumulate a full message and sign the result of that accumulation, such as
  313. RSA\-SHA256.
  314. .PP
  315. \&\fBOSSL_FUNC_signature_sign_message_init()\fR initialises a context for signing a
  316. message given a provider side signature context in the \fIctx\fR parameter, and a
  317. pointer to a provider key object in the \fIprovkey\fR parameter.
  318. The \fIparams\fR, if not NULL, should be set on the context in a manner similar to
  319. using \fBOSSL_FUNC_signature_set_ctx_params()\fR.
  320. The key object should have been previously generated, loaded or imported into
  321. the provider using the key management (OSSL_OP_KEYMGMT) operation (see
  322. \&\fBprovider\-keymgmt\fR\|(7)).
  323. .PP
  324. \&\fBOSSL_FUNC_signature_sign_message_update()\fR gathers the data pointed at by
  325. \&\fIin\fR, which is \fIinlen\fR bytes long.
  326. .PP
  327. \&\fBOSSL_FUNC_signature_sign_message_final()\fR performs the actual signing on the
  328. data that was gathered with \fBOSSL_FUNC_signature_sign_message_update()\fR.
  329. .PP
  330. \&\fBOSSL_FUNC_signature_sign()\fR can be used for one-shot signature calls. In that
  331. case, \fItbs\fR is expected to be the whole message to be signed, \fItbslen\fR bytes
  332. long.
  333. .PP
  334. For both \fBOSSL_FUNC_signature_sign_message_final()\fR and \fBOSSL_FUNC_signature_sign()\fR,
  335. if \fIsig\fR is not NULL, the signature should be written to the location pointed
  336. to by \fIsig\fR, and it should not exceed \fIsigsize\fR bytes in length.
  337. The length of the signature should be written to \fI*siglen\fR.
  338. If \fIsig\fR is NULL then the maximum length of the signature should be written to
  339. \&\fI*siglen\fR.
  340. .SS "Verify Functions"
  341. .IX Subsection "Verify Functions"
  342. \&\fBOSSL_FUNC_signature_verify_init()\fR initialises a context for verifying a signature given
  343. a provider side signature context in the \fIctx\fR parameter, and a pointer to a
  344. provider key object in the \fIprovkey\fR parameter.
  345. The \fIparams\fR, if not NULL, should be set on the context in a manner similar to
  346. using \fBOSSL_FUNC_signature_set_ctx_params()\fR.
  347. The key object should have been previously generated, loaded or imported into
  348. the provider using the key management (OSSL_OP_KEYMGMT) operation (see
  349. \&\fBprovider\-keymgmt\fR\|(7)).
  350. .PP
  351. \&\fBOSSL_FUNC_signature_verify()\fR performs the actual verification itself.
  352. A previously initialised signature context is passed in the \fIctx\fR parameter.
  353. The data that the signature covers is pointed to be the \fItbs\fR parameter which
  354. is \fItbslen\fR bytes long.
  355. The signature is pointed to by the \fIsig\fR parameter which is \fIsiglen\fR bytes
  356. long.
  357. .SS "Message Verify Functions"
  358. .IX Subsection "Message Verify Functions"
  359. These functions are suitable for providers that implement algorithms that
  360. accumulate a full message and verify a signature on the result of that
  361. accumulation, such as RSA\-SHA256.
  362. .PP
  363. \&\fBOSSL_FUNC_signature_verify_message_init()\fR initialises a context for verifying
  364. a signature on a message given a provider side signature context in the \fIctx\fR
  365. parameter, and a pointer to a provider key object in the \fIprovkey\fR parameter.
  366. The \fIparams\fR, if not NULL, should be set on the context in a manner similar to
  367. using \fBOSSL_FUNC_signature_set_ctx_params()\fR.
  368. The key object should have been previously generated, loaded or imported into
  369. the provider using the key management (OSSL_OP_KEYMGMT) operation (see
  370. \&\fBprovider\-keymgmt\fR\|(7)).
  371. .PP
  372. \&\fBOSSL_FUNC_signature_verify_message_update()\fR gathers the data pointed at by
  373. \&\fIin\fR, which is \fIinlen\fR bytes long.
  374. .PP
  375. \&\fBOSSL_FUNC_signature_verify_message_final()\fR performs the actual verification on
  376. the data that was gathered with \fBOSSL_FUNC_signature_verify_message_update()\fR.
  377. The signature itself must have been passed through the "signature"
  378. (\fBOSSL_SIGNATURE_PARAM_SIGNATURE\fR) Signature parameter
  379. before this function is called.
  380. .PP
  381. \&\fBOSSL_FUNC_signature_verify()\fR can be used for one-shot verification calls. In
  382. that case, \fItbs\fR is expected to be the whole message to be verified on,
  383. \&\fItbslen\fR bytes long.
  384. .SS "Verify Recover Functions"
  385. .IX Subsection "Verify Recover Functions"
  386. \&\fBOSSL_FUNC_signature_verify_recover_init()\fR initialises a context for recovering the
  387. signed data given a provider side signature context in the \fIctx\fR parameter, and
  388. a pointer to a provider key object in the \fIprovkey\fR parameter.
  389. The \fIparams\fR, if not NULL, should be set on the context in a manner similar to
  390. using \fBOSSL_FUNC_signature_set_ctx_params()\fR.
  391. The key object should have been previously generated, loaded or imported into
  392. the provider using the key management (OSSL_OP_KEYMGMT) operation (see
  393. \&\fBprovider\-keymgmt\fR\|(7)).
  394. .PP
  395. \&\fBOSSL_FUNC_signature_verify_recover()\fR performs the actual verify recover itself.
  396. A previously initialised signature context is passed in the \fIctx\fR parameter.
  397. The signature is pointed to by the \fIsig\fR parameter which is \fIsiglen\fR bytes
  398. long.
  399. Unless \fIrout\fR is NULL, the recovered data should be written to the location
  400. pointed to by \fIrout\fR which should not exceed \fIroutsize\fR bytes in length.
  401. The length of the recovered data should be written to \fI*routlen\fR.
  402. If \fIrout\fR is NULL then the maximum size of the output buffer is written to
  403. the \fIroutlen\fR parameter.
  404. .SS "Digest Sign Functions"
  405. .IX Subsection "Digest Sign Functions"
  406. \&\fBOSSL_FUNC_signature_digest_sign_init()\fR initialises a context for signing given a
  407. provider side signature context in the \fIctx\fR parameter, and a pointer to a
  408. provider key object in the \fIprovkey\fR parameter.
  409. The \fIparams\fR, if not NULL, should be set on the context in a manner similar to
  410. using \fBOSSL_FUNC_signature_set_ctx_params()\fR and
  411. \&\fBOSSL_FUNC_signature_set_ctx_md_params()\fR.
  412. The key object should have been
  413. previously generated, loaded or imported into the provider using the
  414. key management (OSSL_OP_KEYMGMT) operation (see \fBprovider\-keymgmt\fR\|(7)).
  415. The name of the digest to be used will be in the \fImdname\fR parameter.
  416. .PP
  417. \&\fBOSSL_FUNC_signature_digest_sign_update()\fR provides data to be signed in the \fIdata\fR
  418. parameter which should be of length \fIdatalen\fR. A previously initialised
  419. signature context is passed in the \fIctx\fR parameter. This function may be called
  420. multiple times to cumulatively add data to be signed.
  421. .PP
  422. \&\fBOSSL_FUNC_signature_digest_sign_final()\fR finalises a signature operation previously
  423. started through \fBOSSL_FUNC_signature_digest_sign_init()\fR and
  424. \&\fBOSSL_FUNC_signature_digest_sign_update()\fR calls. Once finalised no more data will be
  425. added through \fBOSSL_FUNC_signature_digest_sign_update()\fR. A previously initialised
  426. signature context is passed in the \fIctx\fR parameter. Unless \fIsig\fR is NULL, the
  427. signature should be written to the location pointed to by the \fIsig\fR parameter
  428. and it should not exceed \fIsigsize\fR bytes in length. The length of the signature
  429. should be written to \fI*siglen\fR. If \fIsig\fR is NULL then the maximum length of
  430. the signature should be written to \fI*siglen\fR.
  431. .PP
  432. \&\fBOSSL_FUNC_signature_digest_sign()\fR implements a "one shot" digest sign operation
  433. previously started through \fBOSSL_FUNC_signature_digeset_sign_init()\fR. A previously
  434. initialised signature context is passed in the \fIctx\fR parameter. The data to be
  435. signed is in \fItbs\fR which should be \fItbslen\fR bytes long. Unless \fIsig\fR is NULL,
  436. the signature should be written to the location pointed to by the \fIsig\fR
  437. parameter and it should not exceed \fIsigsize\fR bytes in length. The length of the
  438. signature should be written to \fI*siglen\fR. If \fIsig\fR is NULL then the maximum
  439. length of the signature should be written to \fI*siglen\fR.
  440. .SS "Digest Verify Functions"
  441. .IX Subsection "Digest Verify Functions"
  442. \&\fBOSSL_FUNC_signature_digeset_verify_init()\fR initialises a context for verifying given a
  443. provider side verification context in the \fIctx\fR parameter, and a pointer to a
  444. provider key object in the \fIprovkey\fR parameter.
  445. The \fIparams\fR, if not NULL, should be set on the context in a manner similar to
  446. \&\fBOSSL_FUNC_signature_set_ctx_params()\fR and
  447. \&\fBOSSL_FUNC_signature_set_ctx_md_params()\fR.
  448. The key object should have been
  449. previously generated, loaded or imported into the provider using the
  450. key management (OSSL_OP_KEYMGMT) operation (see \fBprovider\-keymgmt\fR\|(7)).
  451. The name of the digest to be used will be in the \fImdname\fR parameter.
  452. .PP
  453. \&\fBOSSL_FUNC_signature_digest_verify_update()\fR provides data to be verified in the \fIdata\fR
  454. parameter which should be of length \fIdatalen\fR. A previously initialised
  455. verification context is passed in the \fIctx\fR parameter. This function may be
  456. called multiple times to cumulatively add data to be verified.
  457. .PP
  458. \&\fBOSSL_FUNC_signature_digest_verify_final()\fR finalises a verification operation previously
  459. started through \fBOSSL_FUNC_signature_digest_verify_init()\fR and
  460. \&\fBOSSL_FUNC_signature_digest_verify_update()\fR calls. Once finalised no more data will be
  461. added through \fBOSSL_FUNC_signature_digest_verify_update()\fR. A previously initialised
  462. verification context is passed in the \fIctx\fR parameter. The signature to be
  463. verified is in \fIsig\fR which is \fIsiglen\fR bytes long.
  464. .PP
  465. \&\fBOSSL_FUNC_signature_digest_verify()\fR implements a "one shot" digest verify operation
  466. previously started through \fBOSSL_FUNC_signature_digeset_verify_init()\fR. A previously
  467. initialised verification context is passed in the \fIctx\fR parameter. The data to be
  468. verified is in \fItbs\fR which should be \fItbslen\fR bytes long. The signature to be
  469. verified is in \fIsig\fR which is \fIsiglen\fR bytes long.
  470. .SS "Signature parameters"
  471. .IX Subsection "Signature parameters"
  472. See \fBOSSL_PARAM\fR\|(3) for further details on the parameters structure used by
  473. the \fBOSSL_FUNC_signature_get_ctx_params()\fR and \fBOSSL_FUNC_signature_set_ctx_params()\fR functions.
  474. .PP
  475. \&\fBOSSL_FUNC_signature_get_ctx_params()\fR gets signature parameters associated with the
  476. given provider side signature context \fIctx\fR and stored them in \fIparams\fR.
  477. Passing NULL for \fIparams\fR should return true.
  478. .PP
  479. \&\fBOSSL_FUNC_signature_set_ctx_params()\fR sets the signature parameters associated with the
  480. given provider side signature context \fIctx\fR to \fIparams\fR.
  481. Any parameter settings are additional to any that were previously set.
  482. Passing NULL for \fIparams\fR should return true.
  483. .PP
  484. Common parameters currently recognised by built-in signature algorithms are as
  485. follows.
  486. .IP """digest"" (\fBOSSL_SIGNATURE_PARAM_DIGEST\fR) <UTF8 string>" 4
  487. .IX Item """digest"" (OSSL_SIGNATURE_PARAM_DIGEST) <UTF8 string>"
  488. Get or sets the name of the digest algorithm used for the input to the
  489. signature functions. It is required in order to calculate the "algorithm-id".
  490. .IP """properties"" (\fBOSSL_SIGNATURE_PARAM_PROPERTIES\fR) <UTF8 string>" 4
  491. .IX Item """properties"" (OSSL_SIGNATURE_PARAM_PROPERTIES) <UTF8 string>"
  492. Sets the name of the property query associated with the "digest" algorithm.
  493. NULL is used if this optional value is not set.
  494. .PP
  495. Note that when implementing a signature algorithm that gathers a full message,
  496. like RSA\-SHA256, the "digest" and "properties" parameters should not be used.
  497. For such implementations, it's acceptable to simply ignore them if they happen
  498. to be passed in a call to \fBOSSL_FUNC_signature_set_ctx_params()\fR. For such
  499. implementations, however, it is not acceptable to have them in the \fBOSSL_PARAM\fR
  500. array that's returned by \fBOSSL_FUNC_signature_settable_ctx_params()\fR.
  501. .IP """signature"" (\fBOSSL_SIGNATURE_PARAM_SIGNATURE\fR) <octet string>" 4
  502. .IX Item """signature"" (OSSL_SIGNATURE_PARAM_SIGNATURE) <octet string>"
  503. Sets the signature to verify, specifically when
  504. \&\fBOSSL_FUNC_signature_verify_message_final()\fR is used.
  505. .IP """digest-size"" (\fBOSSL_SIGNATURE_PARAM_DIGEST_SIZE\fR) <unsigned integer>" 4
  506. .IX Item """digest-size"" (OSSL_SIGNATURE_PARAM_DIGEST_SIZE) <unsigned integer>"
  507. Gets or sets the output size of the digest algorithm used for the input to the
  508. signature functions.
  509. The length of the "digest-size" parameter should not exceed that of a \fBsize_t\fR.
  510. .IP """algorithm-id"" (\fBOSSL_SIGNATURE_PARAM_ALGORITHM_ID\fR) <octet string>" 4
  511. .IX Item """algorithm-id"" (OSSL_SIGNATURE_PARAM_ALGORITHM_ID) <octet string>"
  512. Gets the DER encoded AlgorithmIdentifier that corresponds to the combination of
  513. signature algorithm and digest algorithm for the signature operation.
  514. .IP """nonce-type"" (\fBOSSL_SIGNATURE_PARAM_NONCE_TYPE\fR) <unsigned integer>" 4
  515. .IX Item """nonce-type"" (OSSL_SIGNATURE_PARAM_NONCE_TYPE) <unsigned integer>"
  516. Set this to 1 to use deterministic digital signature generation with
  517. ECDSA or DSA, as defined in RFC 6979 (see Section 3.2 "Generation of
  518. k"). In this case, the "digest" parameter must be explicitly set
  519. (otherwise, deterministic nonce generation will fail). Before using
  520. deterministic digital signature generation, please read RFC 6979
  521. Section 4 "Security Considerations". The default value for
  522. "nonce-type" is 0 and results in a random value being used for the
  523. nonce \fBk\fR as defined in FIPS 186\-4 Section 6.3 "Secret Number
  524. Generation".
  525. .IP """kat"" (\fBOSSL_SIGNATURE_PARAM_KAT\fR) <unsigned integer>" 4
  526. .IX Item """kat"" (OSSL_SIGNATURE_PARAM_KAT) <unsigned integer>"
  527. Sets a flag to modify the sign operation to return an error if the initial
  528. calculated signature is invalid.
  529. In the normal mode of operation \- new random values are chosen until the
  530. signature operation succeeds.
  531. By default it retries until a signature is calculated.
  532. Setting the value to 0 causes the sign operation to retry,
  533. otherwise the sign operation is only tried once and returns whether or not it
  534. was successful.
  535. Known answer tests can be performed if the random generator is overridden to
  536. supply known values that either pass or fail.
  537. .PP
  538. The following parameters are used by the OpenSSL FIPS provider:
  539. .IP """fips-indicator"" (\fBOSSL_SIGNATURE_PARAM_FIPS_APPROVED_INDICATOR\fR) <integer>" 4
  540. .IX Item """fips-indicator"" (OSSL_SIGNATURE_PARAM_FIPS_APPROVED_INDICATOR) <integer>"
  541. A getter that returns 1 if the operation is FIPS approved, or 0 otherwise.
  542. This may be used after calling either the sign or verify final functions. It may
  543. return 0 if either the "digest-check", "key-check", or "sign-check" are set to 0.
  544. .IP """verify-message"" (\fBOSSL_SIGNATURE_PARAM_FIPS_VERIFY_MESSAGE\fR <integer>" 4
  545. .IX Item """verify-message"" (OSSL_SIGNATURE_PARAM_FIPS_VERIFY_MESSAGE <integer>"
  546. A getter that returns 1 if a signature verification operation acted on
  547. a raw message, or 0 if it verified a predigested message. A value of 0
  548. indicates likely non-approved usage of the FIPS provider. This flag is
  549. set when any signature verification initialisation function is called.
  550. It is also set to 1 when any signing operation is performed to signify
  551. compliance. See FIPS 140\-3 IG 2.4.B for further information.
  552. .IP """key-check"" (\fBOSSL_SIGNATURE_PARAM_FIPS_KEY_CHECK\fR) <integer>" 4
  553. .IX Item """key-check"" (OSSL_SIGNATURE_PARAM_FIPS_KEY_CHECK) <integer>"
  554. If required this parameter should be set early via an init function
  555. (e.g. \fBOSSL_FUNC_signature_sign_init()\fR or \fBOSSL_FUNC_signature_verify_init()\fR).
  556. The default value of 1 causes an error during the init if the key is not FIPS
  557. approved (e.g. The key has a security strength of less than 112 bits).
  558. Setting this to 0 will ignore the error and set the approved "indicator" to 0.
  559. This option breaks FIPS compliance if it causes the approved "fips-indicator"
  560. to return 0.
  561. .IP """digest-check"" (\fBOSSL_SIGNATURE_PARAM_FIPS_DIGEST_CHECK\fR) <integer>" 4
  562. .IX Item """digest-check"" (OSSL_SIGNATURE_PARAM_FIPS_DIGEST_CHECK) <integer>"
  563. If required this parameter should be set before the signature digest is set.
  564. The default value of 1 causes an error when the digest is set if the digest is
  565. not FIPS approved (e.g. SHA1 is used for signing). Setting this to 0 will ignore
  566. the error and set the approved "fips-indicator" to 0.
  567. This option breaks FIPS compliance if it causes the approved "fips-indicator"
  568. to return 0.
  569. .IP """sign-check"" (\fBOSSL_SIGNATURE_PARAM_FIPS_SIGN_CHECK\fR) <integer>" 4
  570. .IX Item """sign-check"" (OSSL_SIGNATURE_PARAM_FIPS_SIGN_CHECK) <integer>"
  571. If required this parameter should be set early via an init function.
  572. The default value of 1 causes an error when a signing algorithm is used. (This
  573. is triggered by deprecated signing algorithms).
  574. Setting this to 0 will ignore the error and set the approved "fips-indicator" to 0.
  575. This option breaks FIPS compliance if it causes the approved "fips-indicator" to
  576. return 0.
  577. .IP """sign\-x931\-pad\-check"" (\fBOSSL_SIGNATURE_PARAM_FIPS_SIGN_X931_PAD_CHECK\fR) <integer>" 4
  578. .IX Item """sign-x931-pad-check"" (OSSL_SIGNATURE_PARAM_FIPS_SIGN_X931_PAD_CHECK) <integer>"
  579. If required this parameter should be set before the padding mode is set.
  580. The default value of 1 causes an error if the padding mode is set to X9.31 padding
  581. for a RSA signing operation. Setting this to 0 will ignore the error and set the
  582. approved "fips-indicator" to 0.
  583. This option breaks FIPS compliance if it causes the approved "fips-indicator"
  584. to return 0.
  585. .PP
  586. \&\fBOSSL_FUNC_signature_gettable_ctx_params()\fR and \fBOSSL_FUNC_signature_settable_ctx_params()\fR get a
  587. constant \fBOSSL_PARAM\fR\|(3) array that describes the gettable and settable parameters,
  588. i.e. parameters that can be used with \fBOSSL_FUNC_signature_get_ctx_params()\fR and
  589. \&\fBOSSL_FUNC_signature_set_ctx_params()\fR respectively.
  590. .SS "MD parameters"
  591. .IX Subsection "MD parameters"
  592. See \fBOSSL_PARAM\fR\|(3) for further details on the parameters structure used by
  593. the \fBOSSL_FUNC_signature_get_md_ctx_params()\fR and \fBOSSL_FUNC_signature_set_md_ctx_params()\fR
  594. functions.
  595. .PP
  596. \&\fBOSSL_FUNC_signature_get_md_ctx_params()\fR gets digest parameters associated with the
  597. given provider side digest signature context \fIctx\fR and stores them in \fIparams\fR.
  598. Passing NULL for \fIparams\fR should return true.
  599. .PP
  600. \&\fBOSSL_FUNC_signature_set_ms_ctx_params()\fR sets the digest parameters associated with the
  601. given provider side digest signature context \fIctx\fR to \fIparams\fR.
  602. Any parameter settings are additional to any that were previously set.
  603. Passing NULL for \fIparams\fR should return true.
  604. .PP
  605. Parameters currently recognised by built-in signature algorithms are the same
  606. as those for built-in digest algorithms. See
  607. "Digest Parameters" in \fBprovider\-digest\fR\|(7) for further information.
  608. .PP
  609. \&\fBOSSL_FUNC_signature_gettable_md_ctx_params()\fR and \fBOSSL_FUNC_signature_settable_md_ctx_params()\fR
  610. get a constant \fBOSSL_PARAM\fR\|(3) array that describes the gettable and settable
  611. digest parameters, i.e. parameters that can be used with
  612. \&\fBOSSL_FUNC_signature_get_md_ctx_params()\fR and \fBOSSL_FUNC_signature_set_md_ctx_params()\fR
  613. respectively.
  614. .SH "RETURN VALUES"
  615. .IX Header "RETURN VALUES"
  616. \&\fBOSSL_FUNC_signature_newctx()\fR and \fBOSSL_FUNC_signature_dupctx()\fR should return the newly created
  617. provider side signature context, or NULL on failure.
  618. .PP
  619. \&\fBOSSL_FUNC_signature_gettable_ctx_params()\fR, \fBOSSL_FUNC_signature_settable_ctx_params()\fR,
  620. \&\fBOSSL_FUNC_signature_gettable_md_ctx_params()\fR and \fBOSSL_FUNC_signature_settable_md_ctx_params()\fR,
  621. return the gettable or settable parameters in a constant \fBOSSL_PARAM\fR\|(3) array.
  622. .PP
  623. All other functions should return 1 for success or 0 on error.
  624. .SH "SEE ALSO"
  625. .IX Header "SEE ALSO"
  626. \&\fBprovider\fR\|(7)
  627. .SH HISTORY
  628. .IX Header "HISTORY"
  629. The provider SIGNATURE interface was introduced in OpenSSL 3.0.
  630. The Signature Parameters "fips-indicator", "key-check" and "digest-check"
  631. were added in OpenSSL 3.4.
  632. .SH COPYRIGHT
  633. .IX Header "COPYRIGHT"
  634. Copyright 2019\-2024 The OpenSSL Project Authors. All Rights Reserved.
  635. .PP
  636. Licensed under the Apache License 2.0 (the "License"). You may not use
  637. this file except in compliance with the License. You can obtain a copy
  638. in the file LICENSE in the source distribution or at
  639. <https://www.openssl.org/source/license.html>.