rsa_sig.c 76 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547154815491550155115521553155415551556155715581559156015611562156315641565156615671568156915701571157215731574157515761577157815791580158115821583158415851586158715881589159015911592159315941595159615971598159916001601160216031604160516061607160816091610161116121613161416151616161716181619162016211622162316241625162616271628162916301631163216331634163516361637163816391640164116421643164416451646164716481649165016511652165316541655165616571658165916601661166216631664166516661667166816691670167116721673167416751676167716781679168016811682168316841685168616871688168916901691169216931694169516961697169816991700170117021703170417051706170717081709171017111712171317141715171617171718171917201721172217231724172517261727172817291730173117321733173417351736173717381739174017411742174317441745174617471748174917501751175217531754175517561757175817591760176117621763176417651766176717681769177017711772177317741775177617771778177917801781178217831784178517861787178817891790179117921793179417951796179717981799180018011802180318041805180618071808180918101811181218131814181518161817181818191820182118221823182418251826182718281829183018311832183318341835183618371838183918401841184218431844184518461847184818491850185118521853185418551856185718581859186018611862186318641865186618671868186918701871187218731874187518761877187818791880188118821883188418851886188718881889189018911892189318941895189618971898189919001901190219031904190519061907190819091910191119121913191419151916191719181919192019211922192319241925192619271928192919301931193219331934193519361937193819391940194119421943194419451946194719481949195019511952195319541955195619571958195919601961196219631964196519661967196819691970197119721973197419751976197719781979198019811982198319841985198619871988198919901991199219931994199519961997199819992000200120022003200420052006200720082009201020112012201320142015201620172018201920202021202220232024202520262027202820292030203120322033203420352036203720382039204020412042204320442045204620472048204920502051205220532054205520562057205820592060206120622063206420652066206720682069207020712072207320742075207620772078207920802081208220832084208520862087208820892090209120922093209420952096209720982099210021012102210321042105210621072108210921102111211221132114211521162117211821192120212121222123212421252126212721282129213021312132213321342135213621372138213921402141214221432144
  1. /*
  2. * Copyright 2019-2025 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. /*
  10. * RSA low level APIs are deprecated for public use, but still ok for
  11. * internal use.
  12. */
  13. #include "internal/deprecated.h"
  14. #include <string.h>
  15. #include <openssl/crypto.h>
  16. #include <openssl/core_dispatch.h>
  17. #include <openssl/core_names.h>
  18. #include <openssl/err.h>
  19. #include <openssl/obj_mac.h>
  20. #include <openssl/rsa.h>
  21. #include <openssl/params.h>
  22. #include <openssl/evp.h>
  23. #include <openssl/proverr.h>
  24. #include "internal/cryptlib.h"
  25. #include "internal/nelem.h"
  26. #include "internal/sizes.h"
  27. #include "crypto/rsa.h"
  28. #include "prov/providercommon.h"
  29. #include "prov/implementations.h"
  30. #include "prov/provider_ctx.h"
  31. #include "prov/der_rsa.h"
  32. #include "prov/securitycheck.h"
  33. #define RSA_DEFAULT_DIGEST_NAME OSSL_DIGEST_NAME_SHA1
  34. static OSSL_FUNC_signature_newctx_fn rsa_newctx;
  35. static OSSL_FUNC_signature_sign_init_fn rsa_sign_init;
  36. static OSSL_FUNC_signature_verify_init_fn rsa_verify_init;
  37. static OSSL_FUNC_signature_verify_recover_init_fn rsa_verify_recover_init;
  38. static OSSL_FUNC_signature_sign_fn rsa_sign;
  39. static OSSL_FUNC_signature_sign_message_update_fn rsa_signverify_message_update;
  40. static OSSL_FUNC_signature_sign_message_final_fn rsa_sign_message_final;
  41. static OSSL_FUNC_signature_verify_fn rsa_verify;
  42. static OSSL_FUNC_signature_verify_recover_fn rsa_verify_recover;
  43. static OSSL_FUNC_signature_verify_message_update_fn rsa_signverify_message_update;
  44. static OSSL_FUNC_signature_verify_message_final_fn rsa_verify_message_final;
  45. static OSSL_FUNC_signature_digest_sign_init_fn rsa_digest_sign_init;
  46. static OSSL_FUNC_signature_digest_sign_update_fn rsa_digest_sign_update;
  47. static OSSL_FUNC_signature_digest_sign_final_fn rsa_digest_sign_final;
  48. static OSSL_FUNC_signature_digest_verify_init_fn rsa_digest_verify_init;
  49. static OSSL_FUNC_signature_digest_verify_update_fn rsa_digest_verify_update;
  50. static OSSL_FUNC_signature_digest_verify_final_fn rsa_digest_verify_final;
  51. static OSSL_FUNC_signature_freectx_fn rsa_freectx;
  52. static OSSL_FUNC_signature_dupctx_fn rsa_dupctx;
  53. static OSSL_FUNC_signature_query_key_types_fn rsa_sigalg_query_key_types;
  54. static OSSL_FUNC_signature_get_ctx_params_fn rsa_get_ctx_params;
  55. static OSSL_FUNC_signature_gettable_ctx_params_fn rsa_gettable_ctx_params;
  56. static OSSL_FUNC_signature_set_ctx_params_fn rsa_set_ctx_params;
  57. static OSSL_FUNC_signature_settable_ctx_params_fn rsa_settable_ctx_params;
  58. static OSSL_FUNC_signature_get_ctx_md_params_fn rsa_get_ctx_md_params;
  59. static OSSL_FUNC_signature_gettable_ctx_md_params_fn rsa_gettable_ctx_md_params;
  60. static OSSL_FUNC_signature_set_ctx_md_params_fn rsa_set_ctx_md_params;
  61. static OSSL_FUNC_signature_settable_ctx_md_params_fn rsa_settable_ctx_md_params;
  62. static OSSL_FUNC_signature_set_ctx_params_fn rsa_sigalg_set_ctx_params;
  63. static OSSL_FUNC_signature_settable_ctx_params_fn rsa_sigalg_settable_ctx_params;
  64. static OSSL_ITEM padding_item[] = {
  65. { RSA_PKCS1_PADDING, OSSL_PKEY_RSA_PAD_MODE_PKCSV15 },
  66. { RSA_NO_PADDING, OSSL_PKEY_RSA_PAD_MODE_NONE },
  67. { RSA_X931_PADDING, OSSL_PKEY_RSA_PAD_MODE_X931 },
  68. { RSA_PKCS1_PSS_PADDING, OSSL_PKEY_RSA_PAD_MODE_PSS },
  69. { 0, NULL }
  70. };
  71. /*
  72. * What's passed as an actual key is defined by the KEYMGMT interface.
  73. * We happen to know that our KEYMGMT simply passes RSA structures, so
  74. * we use that here too.
  75. */
  76. typedef struct {
  77. OSSL_LIB_CTX *libctx;
  78. char *propq;
  79. RSA *rsa;
  80. int operation;
  81. /*
  82. * Flag to determine if a full sigalg is run (1) or if a composable
  83. * signature algorithm is run (0).
  84. *
  85. * When a full sigalg is run (1), this currently affects the following
  86. * other flags, which are to remain untouched after their initialization:
  87. *
  88. * - flag_allow_md (initialized to 0)
  89. */
  90. unsigned int flag_sigalg : 1;
  91. /*
  92. * Flag to determine if the hash function can be changed (1) or not (0)
  93. * Because it's dangerous to change during a DigestSign or DigestVerify
  94. * operation, this flag is cleared by their Init function, and set again
  95. * by their Final function.
  96. * Implementations of full sigalgs (such as RSA-SHA256) hard-code this
  97. * flag to not allow changes (0).
  98. */
  99. unsigned int flag_allow_md : 1;
  100. unsigned int mgf1_md_set : 1;
  101. /*
  102. * Flags to say what are the possible next external calls in what
  103. * consitutes the life cycle of an algorithm. The relevant calls are:
  104. * - init
  105. * - update
  106. * - final
  107. * - oneshot
  108. * All other external calls are regarded as utilitarian and are allowed
  109. * at any time (they may be affected by other flags, like flag_allow_md,
  110. * though).
  111. */
  112. unsigned int flag_allow_update : 1;
  113. unsigned int flag_allow_final : 1;
  114. unsigned int flag_allow_oneshot : 1;
  115. /* main digest */
  116. EVP_MD *md;
  117. EVP_MD_CTX *mdctx;
  118. int mdnid;
  119. char mdname[OSSL_MAX_NAME_SIZE]; /* Purely informational */
  120. /* RSA padding mode */
  121. int pad_mode;
  122. /* message digest for MGF1 */
  123. EVP_MD *mgf1_md;
  124. int mgf1_mdnid;
  125. char mgf1_mdname[OSSL_MAX_NAME_SIZE]; /* Purely informational */
  126. /* PSS salt length */
  127. int saltlen;
  128. /* Minimum salt length or -1 if no PSS parameter restriction */
  129. int min_saltlen;
  130. /* Signature, for verification */
  131. unsigned char *sig;
  132. size_t siglen;
  133. #ifdef FIPS_MODULE
  134. /*
  135. * FIPS 140-3 IG 2.4.B mandates that verification based on a digest of a
  136. * message is not permitted. However, signing based on a digest is still
  137. * permitted.
  138. */
  139. int verify_message;
  140. #endif
  141. /* Temp buffer */
  142. unsigned char *tbuf;
  143. OSSL_FIPS_IND_DECLARE
  144. } PROV_RSA_CTX;
  145. /* True if PSS parameters are restricted */
  146. #define rsa_pss_restricted(prsactx) (prsactx->min_saltlen != -1)
  147. static size_t rsa_get_md_size(const PROV_RSA_CTX *prsactx)
  148. {
  149. int md_size;
  150. if (prsactx->md != NULL) {
  151. md_size = EVP_MD_get_size(prsactx->md);
  152. if (md_size <= 0)
  153. return 0;
  154. return md_size;
  155. }
  156. return 0;
  157. }
  158. static int rsa_check_padding(const PROV_RSA_CTX *prsactx,
  159. const char *mdname, const char *mgf1_mdname,
  160. int mdnid)
  161. {
  162. switch (prsactx->pad_mode) {
  163. case RSA_NO_PADDING:
  164. if (mdname != NULL || mdnid != NID_undef) {
  165. ERR_raise(ERR_LIB_PROV, PROV_R_INVALID_PADDING_MODE);
  166. return 0;
  167. }
  168. break;
  169. case RSA_X931_PADDING:
  170. if (RSA_X931_hash_id(mdnid) == -1) {
  171. ERR_raise(ERR_LIB_PROV, PROV_R_INVALID_X931_DIGEST);
  172. return 0;
  173. }
  174. break;
  175. case RSA_PKCS1_PSS_PADDING:
  176. if (rsa_pss_restricted(prsactx))
  177. if ((mdname != NULL && !EVP_MD_is_a(prsactx->md, mdname))
  178. || (mgf1_mdname != NULL
  179. && !EVP_MD_is_a(prsactx->mgf1_md, mgf1_mdname))) {
  180. ERR_raise(ERR_LIB_PROV, PROV_R_DIGEST_NOT_ALLOWED);
  181. return 0;
  182. }
  183. break;
  184. default:
  185. break;
  186. }
  187. return 1;
  188. }
  189. static int rsa_check_parameters(PROV_RSA_CTX *prsactx, int min_saltlen)
  190. {
  191. if (prsactx->pad_mode == RSA_PKCS1_PSS_PADDING) {
  192. int max_saltlen;
  193. /* See if minimum salt length exceeds maximum possible */
  194. max_saltlen = RSA_size(prsactx->rsa) - EVP_MD_get_size(prsactx->md);
  195. if ((RSA_bits(prsactx->rsa) & 0x7) == 1)
  196. max_saltlen--;
  197. if (min_saltlen < 0 || min_saltlen > max_saltlen) {
  198. ERR_raise(ERR_LIB_PROV, PROV_R_INVALID_SALT_LENGTH);
  199. return 0;
  200. }
  201. prsactx->min_saltlen = min_saltlen;
  202. }
  203. return 1;
  204. }
  205. static void *rsa_newctx(void *provctx, const char *propq)
  206. {
  207. PROV_RSA_CTX *prsactx = NULL;
  208. char *propq_copy = NULL;
  209. if (!ossl_prov_is_running())
  210. return NULL;
  211. if ((prsactx = OPENSSL_zalloc(sizeof(PROV_RSA_CTX))) == NULL
  212. || (propq != NULL
  213. && (propq_copy = OPENSSL_strdup(propq)) == NULL)) {
  214. OPENSSL_free(prsactx);
  215. return NULL;
  216. }
  217. OSSL_FIPS_IND_INIT(prsactx)
  218. prsactx->libctx = PROV_LIBCTX_OF(provctx);
  219. prsactx->flag_allow_md = 1;
  220. #ifdef FIPS_MODULE
  221. prsactx->verify_message = 1;
  222. #endif
  223. prsactx->propq = propq_copy;
  224. /* Maximum up to digest length for sign, auto for verify */
  225. prsactx->saltlen = RSA_PSS_SALTLEN_AUTO_DIGEST_MAX;
  226. prsactx->min_saltlen = -1;
  227. return prsactx;
  228. }
  229. static int rsa_pss_compute_saltlen(PROV_RSA_CTX *ctx)
  230. {
  231. int saltlen = ctx->saltlen;
  232. int saltlenMax = -1;
  233. /* FIPS 186-4 section 5 "The RSA Digital Signature Algorithm", subsection
  234. * 5.5 "PKCS #1" says: "For RSASSA-PSS […] the length (in bytes) of the
  235. * salt (sLen) shall satisfy 0 <= sLen <= hLen, where hLen is the length of
  236. * the hash function output block (in bytes)."
  237. *
  238. * Provide a way to use at most the digest length, so that the default does
  239. * not violate FIPS 186-4. */
  240. if (saltlen == RSA_PSS_SALTLEN_DIGEST) {
  241. if ((saltlen = EVP_MD_get_size(ctx->md)) <= 0) {
  242. ERR_raise(ERR_LIB_PROV, PROV_R_INVALID_DIGEST);
  243. return -1;
  244. }
  245. } else if (saltlen == RSA_PSS_SALTLEN_AUTO_DIGEST_MAX) {
  246. saltlen = RSA_PSS_SALTLEN_MAX;
  247. if ((saltlenMax = EVP_MD_get_size(ctx->md)) <= 0) {
  248. ERR_raise(ERR_LIB_PROV, PROV_R_INVALID_DIGEST);
  249. return -1;
  250. }
  251. }
  252. if (saltlen == RSA_PSS_SALTLEN_MAX || saltlen == RSA_PSS_SALTLEN_AUTO) {
  253. int mdsize, rsasize;
  254. if ((mdsize = EVP_MD_get_size(ctx->md)) <= 0) {
  255. ERR_raise(ERR_LIB_PROV, PROV_R_INVALID_DIGEST);
  256. return -1;
  257. }
  258. if ((rsasize = RSA_size(ctx->rsa)) <= 2 || rsasize - 2 < mdsize) {
  259. ERR_raise(ERR_LIB_PROV, PROV_R_INVALID_KEY);
  260. return -1;
  261. }
  262. saltlen = rsasize - mdsize - 2;
  263. if ((RSA_bits(ctx->rsa) & 0x7) == 1)
  264. saltlen--;
  265. if (saltlenMax >= 0 && saltlen > saltlenMax)
  266. saltlen = saltlenMax;
  267. }
  268. if (saltlen < 0) {
  269. ERR_raise(ERR_LIB_PROV, ERR_R_INTERNAL_ERROR);
  270. return -1;
  271. } else if (saltlen < ctx->min_saltlen) {
  272. ERR_raise_data(ERR_LIB_PROV, PROV_R_PSS_SALTLEN_TOO_SMALL,
  273. "minimum salt length: %d, actual salt length: %d",
  274. ctx->min_saltlen, saltlen);
  275. return -1;
  276. }
  277. return saltlen;
  278. }
  279. static unsigned char *rsa_generate_signature_aid(PROV_RSA_CTX *ctx,
  280. unsigned char *aid_buf,
  281. size_t buf_len,
  282. size_t *aid_len)
  283. {
  284. WPACKET pkt;
  285. unsigned char *aid = NULL;
  286. int saltlen;
  287. RSA_PSS_PARAMS_30 pss_params;
  288. int ret;
  289. if (!WPACKET_init_der(&pkt, aid_buf, buf_len)) {
  290. ERR_raise(ERR_LIB_PROV, ERR_R_CRYPTO_LIB);
  291. return NULL;
  292. }
  293. switch (ctx->pad_mode) {
  294. case RSA_PKCS1_PADDING:
  295. ret = ossl_DER_w_algorithmIdentifier_MDWithRSAEncryption(&pkt, -1,
  296. ctx->mdnid);
  297. if (ret > 0) {
  298. break;
  299. } else if (ret == 0) {
  300. ERR_raise(ERR_LIB_PROV, ERR_R_INTERNAL_ERROR);
  301. goto cleanup;
  302. }
  303. ERR_raise_data(ERR_LIB_PROV, ERR_R_UNSUPPORTED,
  304. "Algorithm ID generation - md NID: %d",
  305. ctx->mdnid);
  306. goto cleanup;
  307. case RSA_PKCS1_PSS_PADDING:
  308. saltlen = rsa_pss_compute_saltlen(ctx);
  309. if (saltlen < 0)
  310. goto cleanup;
  311. if (!ossl_rsa_pss_params_30_set_defaults(&pss_params)
  312. || !ossl_rsa_pss_params_30_set_hashalg(&pss_params, ctx->mdnid)
  313. || !ossl_rsa_pss_params_30_set_maskgenhashalg(&pss_params,
  314. ctx->mgf1_mdnid)
  315. || !ossl_rsa_pss_params_30_set_saltlen(&pss_params, saltlen)
  316. || !ossl_DER_w_algorithmIdentifier_RSA_PSS(&pkt, -1,
  317. RSA_FLAG_TYPE_RSASSAPSS,
  318. &pss_params)) {
  319. ERR_raise(ERR_LIB_PROV, ERR_R_INTERNAL_ERROR);
  320. goto cleanup;
  321. }
  322. break;
  323. default:
  324. ERR_raise_data(ERR_LIB_PROV, ERR_R_UNSUPPORTED,
  325. "Algorithm ID generation - pad mode: %d",
  326. ctx->pad_mode);
  327. goto cleanup;
  328. }
  329. if (WPACKET_finish(&pkt)) {
  330. WPACKET_get_total_written(&pkt, aid_len);
  331. aid = WPACKET_get_curr(&pkt);
  332. }
  333. cleanup:
  334. WPACKET_cleanup(&pkt);
  335. return aid;
  336. }
  337. static int rsa_setup_md(PROV_RSA_CTX *ctx, const char *mdname,
  338. const char *mdprops, const char *desc)
  339. {
  340. EVP_MD *md = NULL;
  341. if (mdprops == NULL)
  342. mdprops = ctx->propq;
  343. if (mdname != NULL) {
  344. int md_nid;
  345. size_t mdname_len = strlen(mdname);
  346. md = EVP_MD_fetch(ctx->libctx, mdname, mdprops);
  347. if (md == NULL) {
  348. ERR_raise_data(ERR_LIB_PROV, PROV_R_INVALID_DIGEST,
  349. "%s could not be fetched", mdname);
  350. goto err;
  351. }
  352. md_nid = ossl_digest_rsa_sign_get_md_nid(md);
  353. if (md_nid == NID_undef) {
  354. ERR_raise_data(ERR_LIB_PROV, PROV_R_DIGEST_NOT_ALLOWED,
  355. "digest=%s", mdname);
  356. goto err;
  357. }
  358. /*
  359. * XOF digests are not allowed except for RSA PSS.
  360. * We don't support XOF digests with RSA PSS (yet), so just fail.
  361. * When we do support them, uncomment the second clause.
  362. */
  363. if (EVP_MD_xof(md)
  364. /* && ctx->pad_mode != RSA_PKCS1_PSS_PADDING */) {
  365. ERR_raise(ERR_LIB_PROV, PROV_R_XOF_DIGESTS_NOT_ALLOWED);
  366. goto err;
  367. }
  368. #ifdef FIPS_MODULE
  369. {
  370. int sha1_allowed
  371. = ((ctx->operation
  372. & (EVP_PKEY_OP_SIGN | EVP_PKEY_OP_SIGNMSG)) == 0);
  373. if (!ossl_fips_ind_digest_sign_check(OSSL_FIPS_IND_GET(ctx),
  374. OSSL_FIPS_IND_SETTABLE1,
  375. ctx->libctx,
  376. md_nid, sha1_allowed, 1, desc,
  377. ossl_fips_config_signature_digest_check))
  378. goto err;
  379. }
  380. #endif
  381. if (!rsa_check_padding(ctx, mdname, NULL, md_nid))
  382. goto err;
  383. if (mdname_len >= sizeof(ctx->mdname)) {
  384. ERR_raise_data(ERR_LIB_PROV, PROV_R_INVALID_DIGEST,
  385. "%s exceeds name buffer length", mdname);
  386. goto err;
  387. }
  388. if (!ctx->flag_allow_md) {
  389. if (ctx->mdname[0] != '\0' && !EVP_MD_is_a(md, ctx->mdname)) {
  390. ERR_raise_data(ERR_LIB_PROV, PROV_R_DIGEST_NOT_ALLOWED,
  391. "digest %s != %s", mdname, ctx->mdname);
  392. goto err;
  393. }
  394. EVP_MD_free(md);
  395. return 1;
  396. }
  397. if (!ctx->mgf1_md_set) {
  398. if (!EVP_MD_up_ref(md)) {
  399. goto err;
  400. }
  401. EVP_MD_free(ctx->mgf1_md);
  402. ctx->mgf1_md = md;
  403. ctx->mgf1_mdnid = md_nid;
  404. OPENSSL_strlcpy(ctx->mgf1_mdname, mdname, sizeof(ctx->mgf1_mdname));
  405. }
  406. EVP_MD_CTX_free(ctx->mdctx);
  407. EVP_MD_free(ctx->md);
  408. ctx->mdctx = NULL;
  409. ctx->md = md;
  410. ctx->mdnid = md_nid;
  411. OPENSSL_strlcpy(ctx->mdname, mdname, sizeof(ctx->mdname));
  412. }
  413. return 1;
  414. err:
  415. EVP_MD_free(md);
  416. return 0;
  417. }
  418. static int rsa_setup_mgf1_md(PROV_RSA_CTX *ctx, const char *mdname,
  419. const char *mdprops)
  420. {
  421. size_t len;
  422. EVP_MD *md = NULL;
  423. int mdnid;
  424. if (mdprops == NULL)
  425. mdprops = ctx->propq;
  426. if ((md = EVP_MD_fetch(ctx->libctx, mdname, mdprops)) == NULL) {
  427. ERR_raise_data(ERR_LIB_PROV, PROV_R_INVALID_DIGEST,
  428. "%s could not be fetched", mdname);
  429. return 0;
  430. }
  431. /* The default for mgf1 is SHA1 - so allow SHA1 */
  432. if ((mdnid = ossl_digest_rsa_sign_get_md_nid(md)) <= 0
  433. || !rsa_check_padding(ctx, NULL, mdname, mdnid)) {
  434. if (mdnid <= 0)
  435. ERR_raise_data(ERR_LIB_PROV, PROV_R_DIGEST_NOT_ALLOWED,
  436. "digest=%s", mdname);
  437. EVP_MD_free(md);
  438. return 0;
  439. }
  440. len = OPENSSL_strlcpy(ctx->mgf1_mdname, mdname, sizeof(ctx->mgf1_mdname));
  441. if (len >= sizeof(ctx->mgf1_mdname)) {
  442. ERR_raise_data(ERR_LIB_PROV, PROV_R_INVALID_DIGEST,
  443. "%s exceeds name buffer length", mdname);
  444. EVP_MD_free(md);
  445. return 0;
  446. }
  447. EVP_MD_free(ctx->mgf1_md);
  448. ctx->mgf1_md = md;
  449. ctx->mgf1_mdnid = mdnid;
  450. ctx->mgf1_md_set = 1;
  451. return 1;
  452. }
  453. static int
  454. rsa_signverify_init(PROV_RSA_CTX *prsactx, void *vrsa,
  455. OSSL_FUNC_signature_set_ctx_params_fn *set_ctx_params,
  456. const OSSL_PARAM params[], int operation,
  457. const char *desc)
  458. {
  459. int protect;
  460. if (!ossl_prov_is_running() || prsactx == NULL)
  461. return 0;
  462. if (vrsa == NULL && prsactx->rsa == NULL) {
  463. ERR_raise(ERR_LIB_PROV, PROV_R_NO_KEY_SET);
  464. return 0;
  465. }
  466. if (vrsa != NULL) {
  467. if (!RSA_up_ref(vrsa))
  468. return 0;
  469. RSA_free(prsactx->rsa);
  470. prsactx->rsa = vrsa;
  471. }
  472. if (!ossl_rsa_key_op_get_protect(prsactx->rsa, operation, &protect))
  473. return 0;
  474. prsactx->operation = operation;
  475. prsactx->flag_allow_update = 1;
  476. prsactx->flag_allow_final = 1;
  477. prsactx->flag_allow_oneshot = 1;
  478. /* Maximize up to digest length for sign, auto for verify */
  479. prsactx->saltlen = RSA_PSS_SALTLEN_AUTO_DIGEST_MAX;
  480. prsactx->min_saltlen = -1;
  481. switch (RSA_test_flags(prsactx->rsa, RSA_FLAG_TYPE_MASK)) {
  482. case RSA_FLAG_TYPE_RSA:
  483. prsactx->pad_mode = RSA_PKCS1_PADDING;
  484. break;
  485. case RSA_FLAG_TYPE_RSASSAPSS:
  486. prsactx->pad_mode = RSA_PKCS1_PSS_PADDING;
  487. {
  488. const RSA_PSS_PARAMS_30 *pss =
  489. ossl_rsa_get0_pss_params_30(prsactx->rsa);
  490. if (!ossl_rsa_pss_params_30_is_unrestricted(pss)) {
  491. int md_nid = ossl_rsa_pss_params_30_hashalg(pss);
  492. int mgf1md_nid = ossl_rsa_pss_params_30_maskgenhashalg(pss);
  493. int min_saltlen = ossl_rsa_pss_params_30_saltlen(pss);
  494. const char *mdname, *mgf1mdname;
  495. size_t len;
  496. mdname = ossl_rsa_oaeppss_nid2name(md_nid);
  497. mgf1mdname = ossl_rsa_oaeppss_nid2name(mgf1md_nid);
  498. if (mdname == NULL) {
  499. ERR_raise_data(ERR_LIB_PROV, PROV_R_INVALID_DIGEST,
  500. "PSS restrictions lack hash algorithm");
  501. return 0;
  502. }
  503. if (mgf1mdname == NULL) {
  504. ERR_raise_data(ERR_LIB_PROV, PROV_R_INVALID_DIGEST,
  505. "PSS restrictions lack MGF1 hash algorithm");
  506. return 0;
  507. }
  508. len = OPENSSL_strlcpy(prsactx->mdname, mdname,
  509. sizeof(prsactx->mdname));
  510. if (len >= sizeof(prsactx->mdname)) {
  511. ERR_raise_data(ERR_LIB_PROV, PROV_R_INVALID_DIGEST,
  512. "hash algorithm name too long");
  513. return 0;
  514. }
  515. len = OPENSSL_strlcpy(prsactx->mgf1_mdname, mgf1mdname,
  516. sizeof(prsactx->mgf1_mdname));
  517. if (len >= sizeof(prsactx->mgf1_mdname)) {
  518. ERR_raise_data(ERR_LIB_PROV, PROV_R_INVALID_DIGEST,
  519. "MGF1 hash algorithm name too long");
  520. return 0;
  521. }
  522. prsactx->saltlen = min_saltlen;
  523. /* call rsa_setup_mgf1_md before rsa_setup_md to avoid duplication */
  524. if (!rsa_setup_mgf1_md(prsactx, mgf1mdname, prsactx->propq)
  525. || !rsa_setup_md(prsactx, mdname, prsactx->propq, desc)
  526. || !rsa_check_parameters(prsactx, min_saltlen))
  527. return 0;
  528. }
  529. }
  530. break;
  531. default:
  532. ERR_raise(ERR_LIB_RSA, PROV_R_OPERATION_NOT_SUPPORTED_FOR_THIS_KEYTYPE);
  533. return 0;
  534. }
  535. OSSL_FIPS_IND_SET_APPROVED(prsactx)
  536. if (!set_ctx_params(prsactx, params))
  537. return 0;
  538. #ifdef FIPS_MODULE
  539. if (!ossl_fips_ind_rsa_key_check(OSSL_FIPS_IND_GET(prsactx),
  540. OSSL_FIPS_IND_SETTABLE0, prsactx->libctx,
  541. prsactx->rsa, desc, protect))
  542. return 0;
  543. #endif
  544. return 1;
  545. }
  546. static int setup_tbuf(PROV_RSA_CTX *ctx)
  547. {
  548. if (ctx->tbuf != NULL)
  549. return 1;
  550. if ((ctx->tbuf = OPENSSL_malloc(RSA_size(ctx->rsa))) == NULL)
  551. return 0;
  552. return 1;
  553. }
  554. static void clean_tbuf(PROV_RSA_CTX *ctx)
  555. {
  556. if (ctx->tbuf != NULL)
  557. OPENSSL_cleanse(ctx->tbuf, RSA_size(ctx->rsa));
  558. }
  559. static void free_tbuf(PROV_RSA_CTX *ctx)
  560. {
  561. clean_tbuf(ctx);
  562. OPENSSL_free(ctx->tbuf);
  563. ctx->tbuf = NULL;
  564. }
  565. #ifdef FIPS_MODULE
  566. static int rsa_pss_saltlen_check_passed(PROV_RSA_CTX *ctx, const char *algoname, int saltlen)
  567. {
  568. int mdsize = rsa_get_md_size(ctx);
  569. /*
  570. * Perform the check if the salt length is compliant to FIPS 186-5.
  571. *
  572. * According to FIPS 186-5 5.4 (g), the salt length shall be between zero
  573. * and the output block length of the digest function (inclusive).
  574. */
  575. int approved = (saltlen >= 0 && saltlen <= mdsize);
  576. if (!approved) {
  577. if (!OSSL_FIPS_IND_ON_UNAPPROVED(ctx, OSSL_FIPS_IND_SETTABLE3,
  578. ctx->libctx,
  579. algoname, "PSS Salt Length",
  580. ossl_fips_config_rsa_pss_saltlen_check)) {
  581. ERR_raise(ERR_LIB_PROV, PROV_R_INVALID_SALT_LENGTH);
  582. return 0;
  583. }
  584. }
  585. return 1;
  586. }
  587. #endif
  588. static int rsa_sign_init(void *vprsactx, void *vrsa, const OSSL_PARAM params[])
  589. {
  590. PROV_RSA_CTX *prsactx = (PROV_RSA_CTX *)vprsactx;
  591. #ifdef FIPS_MODULE
  592. if (prsactx != NULL)
  593. prsactx->verify_message = 1;
  594. #endif
  595. return rsa_signverify_init(prsactx, vrsa, rsa_set_ctx_params, params,
  596. EVP_PKEY_OP_SIGN, "RSA Sign Init");
  597. }
  598. /*
  599. * Sign tbs without digesting it first. This is suitable for "primitive"
  600. * signing and signing the digest of a message, i.e. should be used with
  601. * implementations of the keytype related algorithms.
  602. */
  603. static int rsa_sign_directly(PROV_RSA_CTX *prsactx,
  604. unsigned char *sig, size_t *siglen, size_t sigsize,
  605. const unsigned char *tbs, size_t tbslen)
  606. {
  607. int ret;
  608. size_t rsasize = RSA_size(prsactx->rsa);
  609. size_t mdsize = rsa_get_md_size(prsactx);
  610. if (!ossl_prov_is_running())
  611. return 0;
  612. if (sig == NULL) {
  613. *siglen = rsasize;
  614. return 1;
  615. }
  616. if (sigsize < rsasize) {
  617. ERR_raise_data(ERR_LIB_PROV, PROV_R_INVALID_SIGNATURE_SIZE,
  618. "is %zu, should be at least %zu", sigsize, rsasize);
  619. return 0;
  620. }
  621. if (mdsize != 0) {
  622. if (tbslen != mdsize) {
  623. ERR_raise(ERR_LIB_PROV, PROV_R_INVALID_DIGEST_LENGTH);
  624. return 0;
  625. }
  626. #ifndef FIPS_MODULE
  627. if (EVP_MD_is_a(prsactx->md, OSSL_DIGEST_NAME_MDC2)) {
  628. unsigned int sltmp;
  629. if (prsactx->pad_mode != RSA_PKCS1_PADDING) {
  630. ERR_raise_data(ERR_LIB_PROV, PROV_R_INVALID_PADDING_MODE,
  631. "only PKCS#1 padding supported with MDC2");
  632. return 0;
  633. }
  634. ret = RSA_sign_ASN1_OCTET_STRING(0, tbs, tbslen, sig, &sltmp,
  635. prsactx->rsa);
  636. if (ret <= 0) {
  637. ERR_raise(ERR_LIB_PROV, ERR_R_RSA_LIB);
  638. return 0;
  639. }
  640. ret = sltmp;
  641. goto end;
  642. }
  643. #endif
  644. switch (prsactx->pad_mode) {
  645. case RSA_X931_PADDING:
  646. if ((size_t)RSA_size(prsactx->rsa) < tbslen + 1) {
  647. ERR_raise_data(ERR_LIB_PROV, PROV_R_KEY_SIZE_TOO_SMALL,
  648. "RSA key size = %d, expected minimum = %d",
  649. RSA_size(prsactx->rsa), tbslen + 1);
  650. return 0;
  651. }
  652. if (!setup_tbuf(prsactx)) {
  653. ERR_raise(ERR_LIB_PROV, ERR_R_PROV_LIB);
  654. return 0;
  655. }
  656. memcpy(prsactx->tbuf, tbs, tbslen);
  657. prsactx->tbuf[tbslen] = RSA_X931_hash_id(prsactx->mdnid);
  658. ret = RSA_private_encrypt(tbslen + 1, prsactx->tbuf,
  659. sig, prsactx->rsa, RSA_X931_PADDING);
  660. clean_tbuf(prsactx);
  661. break;
  662. case RSA_PKCS1_PADDING:
  663. {
  664. unsigned int sltmp;
  665. ret = RSA_sign(prsactx->mdnid, tbs, tbslen, sig, &sltmp,
  666. prsactx->rsa);
  667. if (ret <= 0) {
  668. ERR_raise(ERR_LIB_PROV, ERR_R_RSA_LIB);
  669. return 0;
  670. }
  671. ret = sltmp;
  672. }
  673. break;
  674. case RSA_PKCS1_PSS_PADDING:
  675. {
  676. int saltlen;
  677. /* Check PSS restrictions */
  678. if (rsa_pss_restricted(prsactx)) {
  679. switch (prsactx->saltlen) {
  680. case RSA_PSS_SALTLEN_DIGEST:
  681. if (prsactx->min_saltlen > EVP_MD_get_size(prsactx->md)) {
  682. ERR_raise_data(ERR_LIB_PROV,
  683. PROV_R_PSS_SALTLEN_TOO_SMALL,
  684. "minimum salt length set to %d, "
  685. "but the digest only gives %d",
  686. prsactx->min_saltlen,
  687. EVP_MD_get_size(prsactx->md));
  688. return 0;
  689. }
  690. /* FALLTHRU */
  691. default:
  692. if (prsactx->saltlen >= 0
  693. && prsactx->saltlen < prsactx->min_saltlen) {
  694. ERR_raise_data(ERR_LIB_PROV,
  695. PROV_R_PSS_SALTLEN_TOO_SMALL,
  696. "minimum salt length set to %d, but the"
  697. "actual salt length is only set to %d",
  698. prsactx->min_saltlen,
  699. prsactx->saltlen);
  700. return 0;
  701. }
  702. break;
  703. }
  704. }
  705. if (!setup_tbuf(prsactx))
  706. return 0;
  707. saltlen = prsactx->saltlen;
  708. if (!ossl_rsa_padding_add_PKCS1_PSS_mgf1(prsactx->rsa,
  709. prsactx->tbuf, tbs,
  710. prsactx->md, prsactx->mgf1_md,
  711. &saltlen)) {
  712. ERR_raise(ERR_LIB_PROV, ERR_R_RSA_LIB);
  713. return 0;
  714. }
  715. #ifdef FIPS_MODULE
  716. if (!rsa_pss_saltlen_check_passed(prsactx, "RSA Sign", saltlen))
  717. return 0;
  718. #endif
  719. ret = RSA_private_encrypt(RSA_size(prsactx->rsa), prsactx->tbuf,
  720. sig, prsactx->rsa, RSA_NO_PADDING);
  721. clean_tbuf(prsactx);
  722. }
  723. break;
  724. default:
  725. ERR_raise_data(ERR_LIB_PROV, PROV_R_INVALID_PADDING_MODE,
  726. "Only X.931, PKCS#1 v1.5 or PSS padding allowed");
  727. return 0;
  728. }
  729. } else {
  730. ret = RSA_private_encrypt(tbslen, tbs, sig, prsactx->rsa,
  731. prsactx->pad_mode);
  732. }
  733. #ifndef FIPS_MODULE
  734. end:
  735. #endif
  736. if (ret <= 0) {
  737. ERR_raise(ERR_LIB_PROV, ERR_R_RSA_LIB);
  738. return 0;
  739. }
  740. *siglen = ret;
  741. return 1;
  742. }
  743. static int rsa_signverify_message_update(void *vprsactx,
  744. const unsigned char *data,
  745. size_t datalen)
  746. {
  747. PROV_RSA_CTX *prsactx = (PROV_RSA_CTX *)vprsactx;
  748. if (prsactx == NULL || prsactx->mdctx == NULL)
  749. return 0;
  750. if (!prsactx->flag_allow_update) {
  751. ERR_raise(ERR_LIB_PROV, PROV_R_UPDATE_CALL_OUT_OF_ORDER);
  752. return 0;
  753. }
  754. prsactx->flag_allow_oneshot = 0;
  755. return EVP_DigestUpdate(prsactx->mdctx, data, datalen);
  756. }
  757. static int rsa_sign_message_final(void *vprsactx, unsigned char *sig,
  758. size_t *siglen, size_t sigsize)
  759. {
  760. PROV_RSA_CTX *prsactx = (PROV_RSA_CTX *)vprsactx;
  761. unsigned char digest[EVP_MAX_MD_SIZE];
  762. unsigned int dlen = 0;
  763. if (!ossl_prov_is_running() || prsactx == NULL)
  764. return 0;
  765. if (prsactx->mdctx == NULL)
  766. return 0;
  767. if (!prsactx->flag_allow_final) {
  768. ERR_raise(ERR_LIB_PROV, PROV_R_FINAL_CALL_OUT_OF_ORDER);
  769. return 0;
  770. }
  771. /*
  772. * If sig is NULL then we're just finding out the sig size. Other fields
  773. * are ignored. Defer to rsa_sign.
  774. */
  775. if (sig != NULL) {
  776. /*
  777. * The digests used here are all known (see rsa_get_md_nid()), so they
  778. * should not exceed the internal buffer size of EVP_MAX_MD_SIZE.
  779. */
  780. if (!EVP_DigestFinal_ex(prsactx->mdctx, digest, &dlen))
  781. return 0;
  782. prsactx->flag_allow_update = 0;
  783. prsactx->flag_allow_oneshot = 0;
  784. prsactx->flag_allow_final = 0;
  785. }
  786. return rsa_sign_directly(prsactx, sig, siglen, sigsize, digest, dlen);
  787. }
  788. /*
  789. * If signing a message, digest tbs and sign the result.
  790. * Otherwise, sign tbs directly.
  791. */
  792. static int rsa_sign(void *vprsactx, unsigned char *sig, size_t *siglen,
  793. size_t sigsize, const unsigned char *tbs, size_t tbslen)
  794. {
  795. PROV_RSA_CTX *prsactx = (PROV_RSA_CTX *)vprsactx;
  796. if (!ossl_prov_is_running() || prsactx == NULL)
  797. return 0;
  798. if (!prsactx->flag_allow_oneshot) {
  799. ERR_raise(ERR_LIB_PROV, PROV_R_ONESHOT_CALL_OUT_OF_ORDER);
  800. return 0;
  801. }
  802. if (prsactx->operation == EVP_PKEY_OP_SIGNMSG) {
  803. /*
  804. * If |sig| is NULL, the caller is only looking for the sig length.
  805. * DO NOT update the input in this case.
  806. */
  807. if (sig == NULL)
  808. return rsa_sign_message_final(prsactx, sig, siglen, sigsize);
  809. return rsa_signverify_message_update(prsactx, tbs, tbslen)
  810. && rsa_sign_message_final(prsactx, sig, siglen, sigsize);
  811. }
  812. return rsa_sign_directly(prsactx, sig, siglen, sigsize, tbs, tbslen);
  813. }
  814. static int rsa_verify_recover_init(void *vprsactx, void *vrsa,
  815. const OSSL_PARAM params[])
  816. {
  817. PROV_RSA_CTX *prsactx = (PROV_RSA_CTX *)vprsactx;
  818. #ifdef FIPS_MODULE
  819. if (prsactx != NULL)
  820. prsactx->verify_message = 0;
  821. #endif
  822. return rsa_signverify_init(prsactx, vrsa, rsa_set_ctx_params, params,
  823. EVP_PKEY_OP_VERIFYRECOVER, "RSA VerifyRecover Init");
  824. }
  825. /*
  826. * There is no message variant of verify recover, so no need for
  827. * 'rsa_verify_recover_directly', just use this function, er, directly.
  828. */
  829. static int rsa_verify_recover(void *vprsactx,
  830. unsigned char *rout, size_t *routlen,
  831. size_t routsize,
  832. const unsigned char *sig, size_t siglen)
  833. {
  834. PROV_RSA_CTX *prsactx = (PROV_RSA_CTX *)vprsactx;
  835. int ret;
  836. if (!ossl_prov_is_running())
  837. return 0;
  838. if (rout == NULL) {
  839. *routlen = RSA_size(prsactx->rsa);
  840. return 1;
  841. }
  842. if (prsactx->md != NULL) {
  843. switch (prsactx->pad_mode) {
  844. case RSA_X931_PADDING:
  845. if (!setup_tbuf(prsactx))
  846. return 0;
  847. ret = RSA_public_decrypt(siglen, sig, prsactx->tbuf, prsactx->rsa,
  848. RSA_X931_PADDING);
  849. if (ret <= 0) {
  850. ERR_raise(ERR_LIB_PROV, ERR_R_RSA_LIB);
  851. return 0;
  852. }
  853. ret--;
  854. if (prsactx->tbuf[ret] != RSA_X931_hash_id(prsactx->mdnid)) {
  855. ERR_raise(ERR_LIB_PROV, PROV_R_ALGORITHM_MISMATCH);
  856. return 0;
  857. }
  858. if (ret != EVP_MD_get_size(prsactx->md)) {
  859. ERR_raise_data(ERR_LIB_PROV, PROV_R_INVALID_DIGEST_LENGTH,
  860. "Should be %d, but got %d",
  861. EVP_MD_get_size(prsactx->md), ret);
  862. return 0;
  863. }
  864. *routlen = ret;
  865. if (rout != prsactx->tbuf) {
  866. if (routsize < (size_t)ret) {
  867. ERR_raise_data(ERR_LIB_PROV, PROV_R_OUTPUT_BUFFER_TOO_SMALL,
  868. "buffer size is %d, should be %d",
  869. routsize, ret);
  870. return 0;
  871. }
  872. memcpy(rout, prsactx->tbuf, ret);
  873. }
  874. break;
  875. case RSA_PKCS1_PADDING:
  876. {
  877. size_t sltmp;
  878. ret = ossl_rsa_verify(prsactx->mdnid, NULL, 0, rout, &sltmp,
  879. sig, siglen, prsactx->rsa);
  880. if (ret <= 0) {
  881. ERR_raise(ERR_LIB_PROV, ERR_R_RSA_LIB);
  882. return 0;
  883. }
  884. ret = sltmp;
  885. }
  886. break;
  887. default:
  888. ERR_raise_data(ERR_LIB_PROV, PROV_R_INVALID_PADDING_MODE,
  889. "Only X.931 or PKCS#1 v1.5 padding allowed");
  890. return 0;
  891. }
  892. } else {
  893. ret = RSA_public_decrypt(siglen, sig, rout, prsactx->rsa,
  894. prsactx->pad_mode);
  895. if (ret <= 0) {
  896. ERR_raise(ERR_LIB_PROV, ERR_R_RSA_LIB);
  897. return 0;
  898. }
  899. }
  900. *routlen = ret;
  901. return 1;
  902. }
  903. static int rsa_verify_init(void *vprsactx, void *vrsa,
  904. const OSSL_PARAM params[])
  905. {
  906. PROV_RSA_CTX *prsactx = (PROV_RSA_CTX *)vprsactx;
  907. #ifdef FIPS_MODULE
  908. if (prsactx != NULL)
  909. prsactx->verify_message = 0;
  910. #endif
  911. return rsa_signverify_init(prsactx, vrsa, rsa_set_ctx_params, params,
  912. EVP_PKEY_OP_VERIFY, "RSA Verify Init");
  913. }
  914. static int rsa_verify_directly(PROV_RSA_CTX *prsactx,
  915. const unsigned char *sig, size_t siglen,
  916. const unsigned char *tbs, size_t tbslen)
  917. {
  918. size_t rslen;
  919. if (!ossl_prov_is_running())
  920. return 0;
  921. if (prsactx->md != NULL) {
  922. switch (prsactx->pad_mode) {
  923. case RSA_PKCS1_PADDING:
  924. if (!RSA_verify(prsactx->mdnid, tbs, tbslen, sig, siglen,
  925. prsactx->rsa)) {
  926. ERR_raise(ERR_LIB_PROV, ERR_R_RSA_LIB);
  927. return 0;
  928. }
  929. return 1;
  930. case RSA_X931_PADDING:
  931. if (!setup_tbuf(prsactx))
  932. return 0;
  933. if (rsa_verify_recover(prsactx, prsactx->tbuf, &rslen, 0,
  934. sig, siglen) <= 0)
  935. return 0;
  936. break;
  937. case RSA_PKCS1_PSS_PADDING:
  938. {
  939. int ret;
  940. int saltlen;
  941. size_t mdsize;
  942. /*
  943. * We need to check this for the RSA_verify_PKCS1_PSS_mgf1()
  944. * call
  945. */
  946. mdsize = rsa_get_md_size(prsactx);
  947. if (tbslen != mdsize) {
  948. ERR_raise_data(ERR_LIB_PROV, PROV_R_INVALID_DIGEST_LENGTH,
  949. "Should be %d, but got %d",
  950. mdsize, tbslen);
  951. return 0;
  952. }
  953. if (!setup_tbuf(prsactx))
  954. return 0;
  955. ret = RSA_public_decrypt(siglen, sig, prsactx->tbuf,
  956. prsactx->rsa, RSA_NO_PADDING);
  957. if (ret <= 0) {
  958. ERR_raise(ERR_LIB_PROV, ERR_R_RSA_LIB);
  959. return 0;
  960. }
  961. saltlen = prsactx->saltlen;
  962. ret = ossl_rsa_verify_PKCS1_PSS_mgf1(prsactx->rsa, tbs,
  963. prsactx->md, prsactx->mgf1_md,
  964. prsactx->tbuf,
  965. &saltlen);
  966. if (ret <= 0) {
  967. ERR_raise(ERR_LIB_PROV, ERR_R_RSA_LIB);
  968. return 0;
  969. }
  970. #ifdef FIPS_MODULE
  971. if (!rsa_pss_saltlen_check_passed(prsactx, "RSA Verify", saltlen))
  972. return 0;
  973. #endif
  974. return 1;
  975. }
  976. default:
  977. ERR_raise_data(ERR_LIB_PROV, PROV_R_INVALID_PADDING_MODE,
  978. "Only X.931, PKCS#1 v1.5 or PSS padding allowed");
  979. return 0;
  980. }
  981. } else {
  982. int ret;
  983. if (!setup_tbuf(prsactx))
  984. return 0;
  985. ret = RSA_public_decrypt(siglen, sig, prsactx->tbuf, prsactx->rsa,
  986. prsactx->pad_mode);
  987. if (ret <= 0) {
  988. ERR_raise(ERR_LIB_PROV, ERR_R_RSA_LIB);
  989. return 0;
  990. }
  991. rslen = (size_t)ret;
  992. }
  993. if ((rslen != tbslen) || memcmp(tbs, prsactx->tbuf, rslen))
  994. return 0;
  995. return 1;
  996. }
  997. static int rsa_verify_set_sig(void *vprsactx,
  998. const unsigned char *sig, size_t siglen)
  999. {
  1000. PROV_RSA_CTX *prsactx = (PROV_RSA_CTX *)vprsactx;
  1001. OSSL_PARAM params[2];
  1002. params[0] =
  1003. OSSL_PARAM_construct_octet_string(OSSL_SIGNATURE_PARAM_SIGNATURE,
  1004. (unsigned char *)sig, siglen);
  1005. params[1] = OSSL_PARAM_construct_end();
  1006. return rsa_sigalg_set_ctx_params(prsactx, params);
  1007. }
  1008. static int rsa_verify_message_final(void *vprsactx)
  1009. {
  1010. PROV_RSA_CTX *prsactx = (PROV_RSA_CTX *)vprsactx;
  1011. unsigned char digest[EVP_MAX_MD_SIZE];
  1012. unsigned int dlen = 0;
  1013. if (!ossl_prov_is_running() || prsactx == NULL)
  1014. return 0;
  1015. if (prsactx->mdctx == NULL)
  1016. return 0;
  1017. if (!prsactx->flag_allow_final) {
  1018. ERR_raise(ERR_LIB_PROV, PROV_R_FINAL_CALL_OUT_OF_ORDER);
  1019. return 0;
  1020. }
  1021. /*
  1022. * The digests used here are all known (see rsa_get_md_nid()), so they
  1023. * should not exceed the internal buffer size of EVP_MAX_MD_SIZE.
  1024. */
  1025. if (!EVP_DigestFinal_ex(prsactx->mdctx, digest, &dlen))
  1026. return 0;
  1027. prsactx->flag_allow_update = 0;
  1028. prsactx->flag_allow_final = 0;
  1029. prsactx->flag_allow_oneshot = 0;
  1030. return rsa_verify_directly(prsactx, prsactx->sig, prsactx->siglen,
  1031. digest, dlen);
  1032. }
  1033. /*
  1034. * If verifying a message, digest tbs and verify the result.
  1035. * Otherwise, verify tbs directly.
  1036. */
  1037. static int rsa_verify(void *vprsactx,
  1038. const unsigned char *sig, size_t siglen,
  1039. const unsigned char *tbs, size_t tbslen)
  1040. {
  1041. PROV_RSA_CTX *prsactx = (PROV_RSA_CTX *)vprsactx;
  1042. if (!ossl_prov_is_running() || prsactx == NULL)
  1043. return 0;
  1044. if (!prsactx->flag_allow_oneshot) {
  1045. ERR_raise(ERR_LIB_PROV, PROV_R_ONESHOT_CALL_OUT_OF_ORDER);
  1046. return 0;
  1047. }
  1048. if (prsactx->operation == EVP_PKEY_OP_VERIFYMSG)
  1049. return rsa_verify_set_sig(prsactx, sig, siglen)
  1050. && rsa_signverify_message_update(prsactx, tbs, tbslen)
  1051. && rsa_verify_message_final(prsactx);
  1052. return rsa_verify_directly(prsactx, sig, siglen, tbs, tbslen);
  1053. }
  1054. /* DigestSign/DigestVerify wrappers */
  1055. static int rsa_digest_signverify_init(void *vprsactx, const char *mdname,
  1056. void *vrsa, const OSSL_PARAM params[],
  1057. int operation, const char *desc)
  1058. {
  1059. PROV_RSA_CTX *prsactx = (PROV_RSA_CTX *)vprsactx;
  1060. #ifdef FIPS_MODULE
  1061. if (prsactx != NULL)
  1062. prsactx->verify_message = 1;
  1063. #endif
  1064. if (!rsa_signverify_init(prsactx, vrsa, rsa_set_ctx_params, params,
  1065. operation, desc))
  1066. return 0;
  1067. if (mdname != NULL
  1068. /* was rsa_setup_md already called in rsa_signverify_init()? */
  1069. && (mdname[0] == '\0' || OPENSSL_strcasecmp(prsactx->mdname, mdname) != 0)
  1070. && !rsa_setup_md(prsactx, mdname, prsactx->propq, desc))
  1071. return 0;
  1072. prsactx->flag_allow_md = 0;
  1073. if (prsactx->mdctx == NULL) {
  1074. prsactx->mdctx = EVP_MD_CTX_new();
  1075. if (prsactx->mdctx == NULL)
  1076. goto error;
  1077. }
  1078. if (!EVP_DigestInit_ex2(prsactx->mdctx, prsactx->md, params))
  1079. goto error;
  1080. return 1;
  1081. error:
  1082. EVP_MD_CTX_free(prsactx->mdctx);
  1083. prsactx->mdctx = NULL;
  1084. return 0;
  1085. }
  1086. static int rsa_digest_sign_init(void *vprsactx, const char *mdname,
  1087. void *vrsa, const OSSL_PARAM params[])
  1088. {
  1089. if (!ossl_prov_is_running())
  1090. return 0;
  1091. return rsa_digest_signverify_init(vprsactx, mdname, vrsa,
  1092. params, EVP_PKEY_OP_SIGNMSG,
  1093. "RSA Digest Sign Init");
  1094. }
  1095. static int rsa_digest_sign_update(void *vprsactx, const unsigned char *data,
  1096. size_t datalen)
  1097. {
  1098. PROV_RSA_CTX *prsactx = (PROV_RSA_CTX *)vprsactx;
  1099. if (prsactx == NULL)
  1100. return 0;
  1101. /* Sigalg implementations shouldn't do digest_sign */
  1102. if (prsactx->flag_sigalg)
  1103. return 0;
  1104. return rsa_signverify_message_update(prsactx, data, datalen);
  1105. }
  1106. static int rsa_digest_sign_final(void *vprsactx, unsigned char *sig,
  1107. size_t *siglen, size_t sigsize)
  1108. {
  1109. PROV_RSA_CTX *prsactx = (PROV_RSA_CTX *)vprsactx;
  1110. int ok = 0;
  1111. if (prsactx == NULL)
  1112. return 0;
  1113. /* Sigalg implementations shouldn't do digest_sign */
  1114. if (prsactx->flag_sigalg)
  1115. return 0;
  1116. if (rsa_sign_message_final(prsactx, sig, siglen, sigsize))
  1117. ok = 1;
  1118. prsactx->flag_allow_md = 1;
  1119. return ok;
  1120. }
  1121. static int rsa_digest_verify_init(void *vprsactx, const char *mdname,
  1122. void *vrsa, const OSSL_PARAM params[])
  1123. {
  1124. if (!ossl_prov_is_running())
  1125. return 0;
  1126. return rsa_digest_signverify_init(vprsactx, mdname, vrsa,
  1127. params, EVP_PKEY_OP_VERIFYMSG,
  1128. "RSA Digest Verify Init");
  1129. }
  1130. static int rsa_digest_verify_update(void *vprsactx, const unsigned char *data,
  1131. size_t datalen)
  1132. {
  1133. PROV_RSA_CTX *prsactx = (PROV_RSA_CTX *)vprsactx;
  1134. if (prsactx == NULL)
  1135. return 0;
  1136. /* Sigalg implementations shouldn't do digest_sign */
  1137. if (prsactx->flag_sigalg)
  1138. return 0;
  1139. return rsa_signverify_message_update(prsactx, data, datalen);
  1140. }
  1141. int rsa_digest_verify_final(void *vprsactx, const unsigned char *sig,
  1142. size_t siglen)
  1143. {
  1144. PROV_RSA_CTX *prsactx = (PROV_RSA_CTX *)vprsactx;
  1145. int ok = 0;
  1146. if (prsactx == NULL)
  1147. return 0;
  1148. /* Sigalg implementations shouldn't do digest_verify */
  1149. if (prsactx->flag_sigalg)
  1150. return 0;
  1151. if (rsa_verify_set_sig(prsactx, sig, siglen)
  1152. && rsa_verify_message_final(vprsactx))
  1153. ok = 1;
  1154. prsactx->flag_allow_md = 1;
  1155. return ok;
  1156. }
  1157. static void rsa_freectx(void *vprsactx)
  1158. {
  1159. PROV_RSA_CTX *prsactx = (PROV_RSA_CTX *)vprsactx;
  1160. if (prsactx == NULL)
  1161. return;
  1162. EVP_MD_CTX_free(prsactx->mdctx);
  1163. EVP_MD_free(prsactx->md);
  1164. EVP_MD_free(prsactx->mgf1_md);
  1165. OPENSSL_free(prsactx->sig);
  1166. OPENSSL_free(prsactx->propq);
  1167. free_tbuf(prsactx);
  1168. RSA_free(prsactx->rsa);
  1169. OPENSSL_clear_free(prsactx, sizeof(*prsactx));
  1170. }
  1171. static void *rsa_dupctx(void *vprsactx)
  1172. {
  1173. PROV_RSA_CTX *srcctx = (PROV_RSA_CTX *)vprsactx;
  1174. PROV_RSA_CTX *dstctx;
  1175. if (!ossl_prov_is_running())
  1176. return NULL;
  1177. dstctx = OPENSSL_zalloc(sizeof(*srcctx));
  1178. if (dstctx == NULL)
  1179. return NULL;
  1180. *dstctx = *srcctx;
  1181. dstctx->rsa = NULL;
  1182. dstctx->md = NULL;
  1183. dstctx->mgf1_md = NULL;
  1184. dstctx->mdctx = NULL;
  1185. dstctx->tbuf = NULL;
  1186. dstctx->propq = NULL;
  1187. if (srcctx->rsa != NULL && !RSA_up_ref(srcctx->rsa))
  1188. goto err;
  1189. dstctx->rsa = srcctx->rsa;
  1190. if (srcctx->md != NULL && !EVP_MD_up_ref(srcctx->md))
  1191. goto err;
  1192. dstctx->md = srcctx->md;
  1193. if (srcctx->mgf1_md != NULL && !EVP_MD_up_ref(srcctx->mgf1_md))
  1194. goto err;
  1195. dstctx->mgf1_md = srcctx->mgf1_md;
  1196. if (srcctx->mdctx != NULL) {
  1197. dstctx->mdctx = EVP_MD_CTX_new();
  1198. if (dstctx->mdctx == NULL
  1199. || !EVP_MD_CTX_copy_ex(dstctx->mdctx, srcctx->mdctx))
  1200. goto err;
  1201. }
  1202. if (srcctx->propq != NULL) {
  1203. dstctx->propq = OPENSSL_strdup(srcctx->propq);
  1204. if (dstctx->propq == NULL)
  1205. goto err;
  1206. }
  1207. return dstctx;
  1208. err:
  1209. rsa_freectx(dstctx);
  1210. return NULL;
  1211. }
  1212. static int rsa_get_ctx_params(void *vprsactx, OSSL_PARAM *params)
  1213. {
  1214. PROV_RSA_CTX *prsactx = (PROV_RSA_CTX *)vprsactx;
  1215. OSSL_PARAM *p;
  1216. if (prsactx == NULL)
  1217. return 0;
  1218. p = OSSL_PARAM_locate(params, OSSL_SIGNATURE_PARAM_ALGORITHM_ID);
  1219. if (p != NULL) {
  1220. /* The Algorithm Identifier of the combined signature algorithm */
  1221. unsigned char aid_buf[128];
  1222. unsigned char *aid;
  1223. size_t aid_len;
  1224. aid = rsa_generate_signature_aid(prsactx, aid_buf,
  1225. sizeof(aid_buf), &aid_len);
  1226. if (aid == NULL || !OSSL_PARAM_set_octet_string(p, aid, aid_len))
  1227. return 0;
  1228. }
  1229. p = OSSL_PARAM_locate(params, OSSL_SIGNATURE_PARAM_PAD_MODE);
  1230. if (p != NULL)
  1231. switch (p->data_type) {
  1232. case OSSL_PARAM_INTEGER:
  1233. if (!OSSL_PARAM_set_int(p, prsactx->pad_mode))
  1234. return 0;
  1235. break;
  1236. case OSSL_PARAM_UTF8_STRING:
  1237. {
  1238. int i;
  1239. const char *word = NULL;
  1240. for (i = 0; padding_item[i].id != 0; i++) {
  1241. if (prsactx->pad_mode == (int)padding_item[i].id) {
  1242. word = padding_item[i].ptr;
  1243. break;
  1244. }
  1245. }
  1246. if (word != NULL) {
  1247. if (!OSSL_PARAM_set_utf8_string(p, word))
  1248. return 0;
  1249. } else {
  1250. ERR_raise(ERR_LIB_PROV, ERR_R_INTERNAL_ERROR);
  1251. }
  1252. }
  1253. break;
  1254. default:
  1255. return 0;
  1256. }
  1257. p = OSSL_PARAM_locate(params, OSSL_SIGNATURE_PARAM_DIGEST);
  1258. if (p != NULL && !OSSL_PARAM_set_utf8_string(p, prsactx->mdname))
  1259. return 0;
  1260. p = OSSL_PARAM_locate(params, OSSL_SIGNATURE_PARAM_MGF1_DIGEST);
  1261. if (p != NULL && !OSSL_PARAM_set_utf8_string(p, prsactx->mgf1_mdname))
  1262. return 0;
  1263. p = OSSL_PARAM_locate(params, OSSL_SIGNATURE_PARAM_PSS_SALTLEN);
  1264. if (p != NULL) {
  1265. if (p->data_type == OSSL_PARAM_INTEGER) {
  1266. if (!OSSL_PARAM_set_int(p, prsactx->saltlen))
  1267. return 0;
  1268. } else if (p->data_type == OSSL_PARAM_UTF8_STRING) {
  1269. const char *value = NULL;
  1270. switch (prsactx->saltlen) {
  1271. case RSA_PSS_SALTLEN_DIGEST:
  1272. value = OSSL_PKEY_RSA_PSS_SALT_LEN_DIGEST;
  1273. break;
  1274. case RSA_PSS_SALTLEN_MAX:
  1275. value = OSSL_PKEY_RSA_PSS_SALT_LEN_MAX;
  1276. break;
  1277. case RSA_PSS_SALTLEN_AUTO:
  1278. value = OSSL_PKEY_RSA_PSS_SALT_LEN_AUTO;
  1279. break;
  1280. case RSA_PSS_SALTLEN_AUTO_DIGEST_MAX:
  1281. value = OSSL_PKEY_RSA_PSS_SALT_LEN_AUTO_DIGEST_MAX;
  1282. break;
  1283. default:
  1284. {
  1285. int len = BIO_snprintf(p->data, p->data_size, "%d",
  1286. prsactx->saltlen);
  1287. if (len <= 0)
  1288. return 0;
  1289. p->return_size = len;
  1290. break;
  1291. }
  1292. }
  1293. if (value != NULL
  1294. && !OSSL_PARAM_set_utf8_string(p, value))
  1295. return 0;
  1296. }
  1297. }
  1298. #ifdef FIPS_MODULE
  1299. p = OSSL_PARAM_locate(params, OSSL_SIGNATURE_PARAM_FIPS_VERIFY_MESSAGE);
  1300. if (p != NULL && !OSSL_PARAM_set_uint(p, prsactx->verify_message))
  1301. return 0;
  1302. #endif
  1303. if (!OSSL_FIPS_IND_GET_CTX_PARAM(prsactx, params))
  1304. return 0;
  1305. return 1;
  1306. }
  1307. static const OSSL_PARAM known_gettable_ctx_params[] = {
  1308. OSSL_PARAM_octet_string(OSSL_SIGNATURE_PARAM_ALGORITHM_ID, NULL, 0),
  1309. OSSL_PARAM_utf8_string(OSSL_SIGNATURE_PARAM_PAD_MODE, NULL, 0),
  1310. OSSL_PARAM_utf8_string(OSSL_SIGNATURE_PARAM_DIGEST, NULL, 0),
  1311. OSSL_PARAM_utf8_string(OSSL_SIGNATURE_PARAM_MGF1_DIGEST, NULL, 0),
  1312. OSSL_PARAM_utf8_string(OSSL_SIGNATURE_PARAM_PSS_SALTLEN, NULL, 0),
  1313. #ifdef FIPS_MODULE
  1314. OSSL_PARAM_uint(OSSL_SIGNATURE_PARAM_FIPS_VERIFY_MESSAGE, NULL),
  1315. #endif
  1316. OSSL_FIPS_IND_GETTABLE_CTX_PARAM()
  1317. OSSL_PARAM_END
  1318. };
  1319. static const OSSL_PARAM *rsa_gettable_ctx_params(ossl_unused void *vprsactx,
  1320. ossl_unused void *provctx)
  1321. {
  1322. return known_gettable_ctx_params;
  1323. }
  1324. #ifdef FIPS_MODULE
  1325. static int rsa_x931_padding_allowed(PROV_RSA_CTX *ctx)
  1326. {
  1327. int approved = ((ctx->operation & EVP_PKEY_OP_SIGN) == 0);
  1328. if (!approved) {
  1329. if (!OSSL_FIPS_IND_ON_UNAPPROVED(ctx, OSSL_FIPS_IND_SETTABLE2,
  1330. ctx->libctx,
  1331. "RSA Sign set ctx", "X931 Padding",
  1332. ossl_fips_config_rsa_sign_x931_disallowed)) {
  1333. ERR_raise(ERR_LIB_PROV,
  1334. PROV_R_ILLEGAL_OR_UNSUPPORTED_PADDING_MODE);
  1335. return 0;
  1336. }
  1337. }
  1338. return 1;
  1339. }
  1340. #endif
  1341. static int rsa_set_ctx_params(void *vprsactx, const OSSL_PARAM params[])
  1342. {
  1343. PROV_RSA_CTX *prsactx = (PROV_RSA_CTX *)vprsactx;
  1344. const OSSL_PARAM *p;
  1345. int pad_mode;
  1346. int saltlen;
  1347. char mdname[OSSL_MAX_NAME_SIZE] = "", *pmdname = NULL;
  1348. char mdprops[OSSL_MAX_PROPQUERY_SIZE] = "", *pmdprops = NULL;
  1349. char mgf1mdname[OSSL_MAX_NAME_SIZE] = "", *pmgf1mdname = NULL;
  1350. char mgf1mdprops[OSSL_MAX_PROPQUERY_SIZE] = "", *pmgf1mdprops = NULL;
  1351. if (prsactx == NULL)
  1352. return 0;
  1353. if (ossl_param_is_empty(params))
  1354. return 1;
  1355. if (!OSSL_FIPS_IND_SET_CTX_PARAM(prsactx, OSSL_FIPS_IND_SETTABLE0, params,
  1356. OSSL_SIGNATURE_PARAM_FIPS_KEY_CHECK))
  1357. return 0;
  1358. if (!OSSL_FIPS_IND_SET_CTX_PARAM(prsactx, OSSL_FIPS_IND_SETTABLE1, params,
  1359. OSSL_SIGNATURE_PARAM_FIPS_DIGEST_CHECK))
  1360. return 0;
  1361. if (!OSSL_FIPS_IND_SET_CTX_PARAM(prsactx, OSSL_FIPS_IND_SETTABLE2, params,
  1362. OSSL_SIGNATURE_PARAM_FIPS_SIGN_X931_PAD_CHECK))
  1363. return 0;
  1364. if (!OSSL_FIPS_IND_SET_CTX_PARAM(prsactx, OSSL_FIPS_IND_SETTABLE3, params,
  1365. OSSL_SIGNATURE_PARAM_FIPS_RSA_PSS_SALTLEN_CHECK))
  1366. return 0;
  1367. pad_mode = prsactx->pad_mode;
  1368. saltlen = prsactx->saltlen;
  1369. p = OSSL_PARAM_locate_const(params, OSSL_SIGNATURE_PARAM_DIGEST);
  1370. if (p != NULL) {
  1371. const OSSL_PARAM *propsp =
  1372. OSSL_PARAM_locate_const(params,
  1373. OSSL_SIGNATURE_PARAM_PROPERTIES);
  1374. pmdname = mdname;
  1375. if (!OSSL_PARAM_get_utf8_string(p, &pmdname, sizeof(mdname)))
  1376. return 0;
  1377. if (propsp != NULL) {
  1378. pmdprops = mdprops;
  1379. if (!OSSL_PARAM_get_utf8_string(propsp,
  1380. &pmdprops, sizeof(mdprops)))
  1381. return 0;
  1382. }
  1383. }
  1384. p = OSSL_PARAM_locate_const(params, OSSL_SIGNATURE_PARAM_PAD_MODE);
  1385. if (p != NULL) {
  1386. const char *err_extra_text = NULL;
  1387. switch (p->data_type) {
  1388. case OSSL_PARAM_INTEGER: /* Support for legacy pad mode number */
  1389. if (!OSSL_PARAM_get_int(p, &pad_mode))
  1390. return 0;
  1391. break;
  1392. case OSSL_PARAM_UTF8_STRING:
  1393. {
  1394. int i;
  1395. if (p->data == NULL)
  1396. return 0;
  1397. for (i = 0; padding_item[i].id != 0; i++) {
  1398. if (strcmp(p->data, padding_item[i].ptr) == 0) {
  1399. pad_mode = padding_item[i].id;
  1400. break;
  1401. }
  1402. }
  1403. }
  1404. break;
  1405. default:
  1406. return 0;
  1407. }
  1408. switch (pad_mode) {
  1409. case RSA_PKCS1_OAEP_PADDING:
  1410. /*
  1411. * OAEP padding is for asymmetric cipher only so is not compatible
  1412. * with signature use.
  1413. */
  1414. err_extra_text = "OAEP padding not allowed for signing / verifying";
  1415. goto bad_pad;
  1416. case RSA_PKCS1_PSS_PADDING:
  1417. if ((prsactx->operation
  1418. & (EVP_PKEY_OP_SIGN | EVP_PKEY_OP_SIGNMSG
  1419. | EVP_PKEY_OP_VERIFY | EVP_PKEY_OP_VERIFYMSG)) == 0) {
  1420. err_extra_text =
  1421. "PSS padding only allowed for sign and verify operations";
  1422. goto bad_pad;
  1423. }
  1424. break;
  1425. case RSA_PKCS1_PADDING:
  1426. err_extra_text = "PKCS#1 padding not allowed with RSA-PSS";
  1427. goto cont;
  1428. case RSA_NO_PADDING:
  1429. err_extra_text = "No padding not allowed with RSA-PSS";
  1430. goto cont;
  1431. case RSA_X931_PADDING:
  1432. #ifdef FIPS_MODULE
  1433. /* X9.31 only allows sizes of 1024 + 256 * s (bits) */
  1434. if ((RSA_bits(prsactx->rsa) & 0xFF) != 0) {
  1435. ERR_raise(ERR_LIB_PROV, PROV_R_INVALID_KEY_LENGTH);
  1436. return 0;
  1437. }
  1438. /* RSA Signing with X9.31 padding is not allowed in FIPS 140-3 */
  1439. if (!rsa_x931_padding_allowed(prsactx))
  1440. return 0;
  1441. #endif
  1442. err_extra_text = "X.931 padding not allowed with RSA-PSS";
  1443. cont:
  1444. if (RSA_test_flags(prsactx->rsa,
  1445. RSA_FLAG_TYPE_MASK) == RSA_FLAG_TYPE_RSA)
  1446. break;
  1447. /* FALLTHRU */
  1448. default:
  1449. bad_pad:
  1450. if (err_extra_text == NULL)
  1451. ERR_raise(ERR_LIB_PROV,
  1452. PROV_R_ILLEGAL_OR_UNSUPPORTED_PADDING_MODE);
  1453. else
  1454. ERR_raise_data(ERR_LIB_PROV,
  1455. PROV_R_ILLEGAL_OR_UNSUPPORTED_PADDING_MODE,
  1456. err_extra_text);
  1457. return 0;
  1458. }
  1459. }
  1460. p = OSSL_PARAM_locate_const(params, OSSL_SIGNATURE_PARAM_PSS_SALTLEN);
  1461. if (p != NULL) {
  1462. if (pad_mode != RSA_PKCS1_PSS_PADDING) {
  1463. ERR_raise_data(ERR_LIB_PROV, PROV_R_NOT_SUPPORTED,
  1464. "PSS saltlen can only be specified if "
  1465. "PSS padding has been specified first");
  1466. return 0;
  1467. }
  1468. switch (p->data_type) {
  1469. case OSSL_PARAM_INTEGER: /* Support for legacy pad mode number */
  1470. if (!OSSL_PARAM_get_int(p, &saltlen))
  1471. return 0;
  1472. break;
  1473. case OSSL_PARAM_UTF8_STRING:
  1474. if (strcmp(p->data, OSSL_PKEY_RSA_PSS_SALT_LEN_DIGEST) == 0)
  1475. saltlen = RSA_PSS_SALTLEN_DIGEST;
  1476. else if (strcmp(p->data, OSSL_PKEY_RSA_PSS_SALT_LEN_MAX) == 0)
  1477. saltlen = RSA_PSS_SALTLEN_MAX;
  1478. else if (strcmp(p->data, OSSL_PKEY_RSA_PSS_SALT_LEN_AUTO) == 0)
  1479. saltlen = RSA_PSS_SALTLEN_AUTO;
  1480. else if (strcmp(p->data, OSSL_PKEY_RSA_PSS_SALT_LEN_AUTO_DIGEST_MAX) == 0)
  1481. saltlen = RSA_PSS_SALTLEN_AUTO_DIGEST_MAX;
  1482. else
  1483. saltlen = atoi(p->data);
  1484. break;
  1485. default:
  1486. return 0;
  1487. }
  1488. /*
  1489. * RSA_PSS_SALTLEN_AUTO_DIGEST_MAX seems curiously named in this check.
  1490. * Contrary to what it's name suggests, it's the currently lowest
  1491. * saltlen number possible.
  1492. */
  1493. if (saltlen < RSA_PSS_SALTLEN_AUTO_DIGEST_MAX) {
  1494. ERR_raise(ERR_LIB_PROV, PROV_R_INVALID_SALT_LENGTH);
  1495. return 0;
  1496. }
  1497. if (rsa_pss_restricted(prsactx)) {
  1498. switch (saltlen) {
  1499. case RSA_PSS_SALTLEN_AUTO:
  1500. case RSA_PSS_SALTLEN_AUTO_DIGEST_MAX:
  1501. if ((prsactx->operation
  1502. & (EVP_PKEY_OP_VERIFY | EVP_PKEY_OP_VERIFYMSG)) == 0) {
  1503. ERR_raise_data(ERR_LIB_PROV, PROV_R_INVALID_SALT_LENGTH,
  1504. "Cannot use autodetected salt length");
  1505. return 0;
  1506. }
  1507. break;
  1508. case RSA_PSS_SALTLEN_DIGEST:
  1509. if (prsactx->min_saltlen > EVP_MD_get_size(prsactx->md)) {
  1510. ERR_raise_data(ERR_LIB_PROV,
  1511. PROV_R_PSS_SALTLEN_TOO_SMALL,
  1512. "Should be more than %d, but would be "
  1513. "set to match digest size (%d)",
  1514. prsactx->min_saltlen,
  1515. EVP_MD_get_size(prsactx->md));
  1516. return 0;
  1517. }
  1518. break;
  1519. default:
  1520. if (saltlen >= 0 && saltlen < prsactx->min_saltlen) {
  1521. ERR_raise_data(ERR_LIB_PROV,
  1522. PROV_R_PSS_SALTLEN_TOO_SMALL,
  1523. "Should be more than %d, "
  1524. "but would be set to %d",
  1525. prsactx->min_saltlen, saltlen);
  1526. return 0;
  1527. }
  1528. }
  1529. }
  1530. }
  1531. p = OSSL_PARAM_locate_const(params, OSSL_SIGNATURE_PARAM_MGF1_DIGEST);
  1532. if (p != NULL) {
  1533. const OSSL_PARAM *propsp =
  1534. OSSL_PARAM_locate_const(params,
  1535. OSSL_SIGNATURE_PARAM_MGF1_PROPERTIES);
  1536. pmgf1mdname = mgf1mdname;
  1537. if (!OSSL_PARAM_get_utf8_string(p, &pmgf1mdname, sizeof(mgf1mdname)))
  1538. return 0;
  1539. if (propsp != NULL) {
  1540. pmgf1mdprops = mgf1mdprops;
  1541. if (!OSSL_PARAM_get_utf8_string(propsp,
  1542. &pmgf1mdprops, sizeof(mgf1mdprops)))
  1543. return 0;
  1544. }
  1545. if (pad_mode != RSA_PKCS1_PSS_PADDING) {
  1546. ERR_raise(ERR_LIB_PROV, PROV_R_INVALID_MGF1_MD);
  1547. return 0;
  1548. }
  1549. }
  1550. prsactx->saltlen = saltlen;
  1551. prsactx->pad_mode = pad_mode;
  1552. if (prsactx->md == NULL && pmdname == NULL
  1553. && pad_mode == RSA_PKCS1_PSS_PADDING)
  1554. pmdname = RSA_DEFAULT_DIGEST_NAME;
  1555. if (pmgf1mdname != NULL
  1556. && !rsa_setup_mgf1_md(prsactx, pmgf1mdname, pmgf1mdprops))
  1557. return 0;
  1558. if (pmdname != NULL) {
  1559. if (!rsa_setup_md(prsactx, pmdname, pmdprops, "RSA Sign Set Ctx"))
  1560. return 0;
  1561. } else {
  1562. if (!rsa_check_padding(prsactx, NULL, NULL, prsactx->mdnid))
  1563. return 0;
  1564. }
  1565. return 1;
  1566. }
  1567. static const OSSL_PARAM settable_ctx_params[] = {
  1568. OSSL_PARAM_utf8_string(OSSL_SIGNATURE_PARAM_DIGEST, NULL, 0),
  1569. OSSL_PARAM_utf8_string(OSSL_SIGNATURE_PARAM_PROPERTIES, NULL, 0),
  1570. OSSL_PARAM_utf8_string(OSSL_SIGNATURE_PARAM_PAD_MODE, NULL, 0),
  1571. OSSL_PARAM_utf8_string(OSSL_SIGNATURE_PARAM_MGF1_DIGEST, NULL, 0),
  1572. OSSL_PARAM_utf8_string(OSSL_SIGNATURE_PARAM_MGF1_PROPERTIES, NULL, 0),
  1573. OSSL_PARAM_utf8_string(OSSL_SIGNATURE_PARAM_PSS_SALTLEN, NULL, 0),
  1574. OSSL_FIPS_IND_SETTABLE_CTX_PARAM(OSSL_SIGNATURE_PARAM_FIPS_KEY_CHECK)
  1575. OSSL_FIPS_IND_SETTABLE_CTX_PARAM(OSSL_SIGNATURE_PARAM_FIPS_DIGEST_CHECK)
  1576. OSSL_FIPS_IND_SETTABLE_CTX_PARAM(OSSL_SIGNATURE_PARAM_FIPS_RSA_PSS_SALTLEN_CHECK)
  1577. OSSL_FIPS_IND_SETTABLE_CTX_PARAM(OSSL_SIGNATURE_PARAM_FIPS_SIGN_X931_PAD_CHECK)
  1578. OSSL_PARAM_END
  1579. };
  1580. static const OSSL_PARAM settable_ctx_params_no_digest[] = {
  1581. OSSL_PARAM_utf8_string(OSSL_SIGNATURE_PARAM_PAD_MODE, NULL, 0),
  1582. OSSL_PARAM_utf8_string(OSSL_SIGNATURE_PARAM_MGF1_DIGEST, NULL, 0),
  1583. OSSL_PARAM_utf8_string(OSSL_SIGNATURE_PARAM_MGF1_PROPERTIES, NULL, 0),
  1584. OSSL_PARAM_utf8_string(OSSL_SIGNATURE_PARAM_PSS_SALTLEN, NULL, 0),
  1585. OSSL_FIPS_IND_SETTABLE_CTX_PARAM(OSSL_SIGNATURE_PARAM_FIPS_KEY_CHECK)
  1586. OSSL_FIPS_IND_SETTABLE_CTX_PARAM(OSSL_SIGNATURE_PARAM_FIPS_DIGEST_CHECK)
  1587. OSSL_FIPS_IND_SETTABLE_CTX_PARAM(OSSL_SIGNATURE_PARAM_FIPS_RSA_PSS_SALTLEN_CHECK)
  1588. OSSL_FIPS_IND_SETTABLE_CTX_PARAM(OSSL_SIGNATURE_PARAM_FIPS_SIGN_X931_PAD_CHECK)
  1589. OSSL_PARAM_END
  1590. };
  1591. static const OSSL_PARAM *rsa_settable_ctx_params(void *vprsactx,
  1592. ossl_unused void *provctx)
  1593. {
  1594. PROV_RSA_CTX *prsactx = (PROV_RSA_CTX *)vprsactx;
  1595. if (prsactx != NULL && !prsactx->flag_allow_md)
  1596. return settable_ctx_params_no_digest;
  1597. return settable_ctx_params;
  1598. }
  1599. static int rsa_get_ctx_md_params(void *vprsactx, OSSL_PARAM *params)
  1600. {
  1601. PROV_RSA_CTX *prsactx = (PROV_RSA_CTX *)vprsactx;
  1602. if (prsactx->mdctx == NULL)
  1603. return 0;
  1604. return EVP_MD_CTX_get_params(prsactx->mdctx, params);
  1605. }
  1606. static const OSSL_PARAM *rsa_gettable_ctx_md_params(void *vprsactx)
  1607. {
  1608. PROV_RSA_CTX *prsactx = (PROV_RSA_CTX *)vprsactx;
  1609. if (prsactx->md == NULL)
  1610. return 0;
  1611. return EVP_MD_gettable_ctx_params(prsactx->md);
  1612. }
  1613. static int rsa_set_ctx_md_params(void *vprsactx, const OSSL_PARAM params[])
  1614. {
  1615. PROV_RSA_CTX *prsactx = (PROV_RSA_CTX *)vprsactx;
  1616. if (prsactx->mdctx == NULL)
  1617. return 0;
  1618. return EVP_MD_CTX_set_params(prsactx->mdctx, params);
  1619. }
  1620. static const OSSL_PARAM *rsa_settable_ctx_md_params(void *vprsactx)
  1621. {
  1622. PROV_RSA_CTX *prsactx = (PROV_RSA_CTX *)vprsactx;
  1623. if (prsactx->md == NULL)
  1624. return 0;
  1625. return EVP_MD_settable_ctx_params(prsactx->md);
  1626. }
  1627. const OSSL_DISPATCH ossl_rsa_signature_functions[] = {
  1628. { OSSL_FUNC_SIGNATURE_NEWCTX, (void (*)(void))rsa_newctx },
  1629. { OSSL_FUNC_SIGNATURE_SIGN_INIT, (void (*)(void))rsa_sign_init },
  1630. { OSSL_FUNC_SIGNATURE_SIGN, (void (*)(void))rsa_sign },
  1631. { OSSL_FUNC_SIGNATURE_VERIFY_INIT, (void (*)(void))rsa_verify_init },
  1632. { OSSL_FUNC_SIGNATURE_VERIFY, (void (*)(void))rsa_verify },
  1633. { OSSL_FUNC_SIGNATURE_VERIFY_RECOVER_INIT,
  1634. (void (*)(void))rsa_verify_recover_init },
  1635. { OSSL_FUNC_SIGNATURE_VERIFY_RECOVER,
  1636. (void (*)(void))rsa_verify_recover },
  1637. { OSSL_FUNC_SIGNATURE_DIGEST_SIGN_INIT,
  1638. (void (*)(void))rsa_digest_sign_init },
  1639. { OSSL_FUNC_SIGNATURE_DIGEST_SIGN_UPDATE,
  1640. (void (*)(void))rsa_digest_sign_update },
  1641. { OSSL_FUNC_SIGNATURE_DIGEST_SIGN_FINAL,
  1642. (void (*)(void))rsa_digest_sign_final },
  1643. { OSSL_FUNC_SIGNATURE_DIGEST_VERIFY_INIT,
  1644. (void (*)(void))rsa_digest_verify_init },
  1645. { OSSL_FUNC_SIGNATURE_DIGEST_VERIFY_UPDATE,
  1646. (void (*)(void))rsa_digest_verify_update },
  1647. { OSSL_FUNC_SIGNATURE_DIGEST_VERIFY_FINAL,
  1648. (void (*)(void))rsa_digest_verify_final },
  1649. { OSSL_FUNC_SIGNATURE_FREECTX, (void (*)(void))rsa_freectx },
  1650. { OSSL_FUNC_SIGNATURE_DUPCTX, (void (*)(void))rsa_dupctx },
  1651. { OSSL_FUNC_SIGNATURE_GET_CTX_PARAMS, (void (*)(void))rsa_get_ctx_params },
  1652. { OSSL_FUNC_SIGNATURE_GETTABLE_CTX_PARAMS,
  1653. (void (*)(void))rsa_gettable_ctx_params },
  1654. { OSSL_FUNC_SIGNATURE_SET_CTX_PARAMS, (void (*)(void))rsa_set_ctx_params },
  1655. { OSSL_FUNC_SIGNATURE_SETTABLE_CTX_PARAMS,
  1656. (void (*)(void))rsa_settable_ctx_params },
  1657. { OSSL_FUNC_SIGNATURE_GET_CTX_MD_PARAMS,
  1658. (void (*)(void))rsa_get_ctx_md_params },
  1659. { OSSL_FUNC_SIGNATURE_GETTABLE_CTX_MD_PARAMS,
  1660. (void (*)(void))rsa_gettable_ctx_md_params },
  1661. { OSSL_FUNC_SIGNATURE_SET_CTX_MD_PARAMS,
  1662. (void (*)(void))rsa_set_ctx_md_params },
  1663. { OSSL_FUNC_SIGNATURE_SETTABLE_CTX_MD_PARAMS,
  1664. (void (*)(void))rsa_settable_ctx_md_params },
  1665. OSSL_DISPATCH_END
  1666. };
  1667. /* ------------------------------------------------------------------ */
  1668. /*
  1669. * So called sigalgs (composite RSA+hash) implemented below. They
  1670. * are pretty much hard coded, and rely on the hash implementation
  1671. * being available as per what OPENSSL_NO_ macros allow.
  1672. */
  1673. static OSSL_FUNC_signature_query_key_types_fn rsa_sigalg_query_key_types;
  1674. static OSSL_FUNC_signature_settable_ctx_params_fn rsa_sigalg_settable_ctx_params;
  1675. static OSSL_FUNC_signature_set_ctx_params_fn rsa_sigalg_set_ctx_params;
  1676. /*
  1677. * rsa_sigalg_signverify_init() is almost like rsa_digest_signverify_init(),
  1678. * just doesn't allow fetching an MD from whatever the user chooses.
  1679. */
  1680. static int rsa_sigalg_signverify_init(void *vprsactx, void *vrsa,
  1681. OSSL_FUNC_signature_set_ctx_params_fn *set_ctx_params,
  1682. const OSSL_PARAM params[],
  1683. const char *mdname,
  1684. int operation, int pad_mode,
  1685. const char *desc)
  1686. {
  1687. PROV_RSA_CTX *prsactx = (PROV_RSA_CTX *)vprsactx;
  1688. if (!ossl_prov_is_running())
  1689. return 0;
  1690. if (!rsa_signverify_init(prsactx, vrsa, set_ctx_params, params, operation,
  1691. desc))
  1692. return 0;
  1693. /* PSS is currently not supported as a sigalg */
  1694. if (prsactx->pad_mode == RSA_PKCS1_PSS_PADDING) {
  1695. ERR_raise(ERR_LIB_RSA, PROV_R_OPERATION_NOT_SUPPORTED_FOR_THIS_KEYTYPE);
  1696. return 0;
  1697. }
  1698. if (!rsa_setup_md(prsactx, mdname, NULL, desc))
  1699. return 0;
  1700. prsactx->pad_mode = pad_mode;
  1701. prsactx->flag_sigalg = 1;
  1702. prsactx->flag_allow_md = 0;
  1703. if (prsactx->mdctx == NULL) {
  1704. prsactx->mdctx = EVP_MD_CTX_new();
  1705. if (prsactx->mdctx == NULL)
  1706. goto error;
  1707. }
  1708. if (!EVP_DigestInit_ex2(prsactx->mdctx, prsactx->md, params))
  1709. goto error;
  1710. return 1;
  1711. error:
  1712. EVP_MD_CTX_free(prsactx->mdctx);
  1713. prsactx->mdctx = NULL;
  1714. return 0;
  1715. }
  1716. static const char **rsa_sigalg_query_key_types(void)
  1717. {
  1718. static const char *keytypes[] = { "RSA", NULL };
  1719. return keytypes;
  1720. }
  1721. static const OSSL_PARAM settable_sigalg_ctx_params[] = {
  1722. OSSL_PARAM_octet_string(OSSL_SIGNATURE_PARAM_SIGNATURE, NULL, 0),
  1723. OSSL_PARAM_END
  1724. };
  1725. static const OSSL_PARAM *rsa_sigalg_settable_ctx_params(void *vprsactx,
  1726. ossl_unused void *provctx)
  1727. {
  1728. PROV_RSA_CTX *prsactx = (PROV_RSA_CTX *)vprsactx;
  1729. if (prsactx != NULL && prsactx->operation == EVP_PKEY_OP_VERIFYMSG)
  1730. return settable_sigalg_ctx_params;
  1731. return NULL;
  1732. }
  1733. static int rsa_sigalg_set_ctx_params(void *vprsactx, const OSSL_PARAM params[])
  1734. {
  1735. PROV_RSA_CTX *prsactx = (PROV_RSA_CTX *)vprsactx;
  1736. const OSSL_PARAM *p;
  1737. if (prsactx == NULL)
  1738. return 0;
  1739. if (ossl_param_is_empty(params))
  1740. return 1;
  1741. if (prsactx->operation == EVP_PKEY_OP_VERIFYMSG) {
  1742. p = OSSL_PARAM_locate_const(params, OSSL_SIGNATURE_PARAM_SIGNATURE);
  1743. if (p != NULL) {
  1744. OPENSSL_free(prsactx->sig);
  1745. prsactx->sig = NULL;
  1746. prsactx->siglen = 0;
  1747. if (!OSSL_PARAM_get_octet_string(p, (void **)&prsactx->sig,
  1748. 0, &prsactx->siglen))
  1749. return 0;
  1750. }
  1751. }
  1752. return 1;
  1753. }
  1754. #define IMPL_RSA_SIGALG(md, MD) \
  1755. static OSSL_FUNC_signature_sign_init_fn rsa_##md##_sign_init; \
  1756. static OSSL_FUNC_signature_sign_message_init_fn \
  1757. rsa_##md##_sign_message_init; \
  1758. static OSSL_FUNC_signature_verify_init_fn rsa_##md##_verify_init; \
  1759. static OSSL_FUNC_signature_verify_message_init_fn \
  1760. rsa_##md##_verify_message_init; \
  1761. \
  1762. static int \
  1763. rsa_##md##_sign_init(void *vprsactx, void *vrsa, \
  1764. const OSSL_PARAM params[]) \
  1765. { \
  1766. static const char desc[] = "RSA Sigalg Sign Init"; \
  1767. \
  1768. return rsa_sigalg_signverify_init(vprsactx, vrsa, \
  1769. rsa_sigalg_set_ctx_params, \
  1770. params, #MD, \
  1771. EVP_PKEY_OP_SIGN, \
  1772. RSA_PKCS1_PADDING, \
  1773. desc); \
  1774. } \
  1775. \
  1776. static int \
  1777. rsa_##md##_sign_message_init(void *vprsactx, void *vrsa, \
  1778. const OSSL_PARAM params[]) \
  1779. { \
  1780. static const char desc[] = "RSA Sigalg Sign Message Init"; \
  1781. \
  1782. return rsa_sigalg_signverify_init(vprsactx, vrsa, \
  1783. rsa_sigalg_set_ctx_params, \
  1784. params, #MD, \
  1785. EVP_PKEY_OP_SIGNMSG, \
  1786. RSA_PKCS1_PADDING, \
  1787. desc); \
  1788. } \
  1789. \
  1790. static int \
  1791. rsa_##md##_verify_init(void *vprsactx, void *vrsa, \
  1792. const OSSL_PARAM params[]) \
  1793. { \
  1794. static const char desc[] = "RSA Sigalg Verify Init"; \
  1795. \
  1796. return rsa_sigalg_signverify_init(vprsactx, vrsa, \
  1797. rsa_sigalg_set_ctx_params, \
  1798. params, #MD, \
  1799. EVP_PKEY_OP_VERIFY, \
  1800. RSA_PKCS1_PADDING, \
  1801. desc); \
  1802. } \
  1803. \
  1804. static int \
  1805. rsa_##md##_verify_recover_init(void *vprsactx, void *vrsa, \
  1806. const OSSL_PARAM params[]) \
  1807. { \
  1808. static const char desc[] = "RSA Sigalg Verify Recover Init"; \
  1809. \
  1810. return rsa_sigalg_signverify_init(vprsactx, vrsa, \
  1811. rsa_sigalg_set_ctx_params, \
  1812. params, #MD, \
  1813. EVP_PKEY_OP_VERIFYRECOVER, \
  1814. RSA_PKCS1_PADDING, \
  1815. desc); \
  1816. } \
  1817. \
  1818. static int \
  1819. rsa_##md##_verify_message_init(void *vprsactx, void *vrsa, \
  1820. const OSSL_PARAM params[]) \
  1821. { \
  1822. static const char desc[] = "RSA Sigalg Verify Message Init"; \
  1823. \
  1824. return rsa_sigalg_signverify_init(vprsactx, vrsa, \
  1825. rsa_sigalg_set_ctx_params, \
  1826. params, #MD, \
  1827. EVP_PKEY_OP_VERIFYMSG, \
  1828. RSA_PKCS1_PADDING, \
  1829. desc); \
  1830. } \
  1831. \
  1832. const OSSL_DISPATCH ossl_rsa_##md##_signature_functions[] = { \
  1833. { OSSL_FUNC_SIGNATURE_NEWCTX, (void (*)(void))rsa_newctx }, \
  1834. { OSSL_FUNC_SIGNATURE_SIGN_INIT, \
  1835. (void (*)(void))rsa_##md##_sign_init }, \
  1836. { OSSL_FUNC_SIGNATURE_SIGN, (void (*)(void))rsa_sign }, \
  1837. { OSSL_FUNC_SIGNATURE_SIGN_MESSAGE_INIT, \
  1838. (void (*)(void))rsa_##md##_sign_message_init }, \
  1839. { OSSL_FUNC_SIGNATURE_SIGN_MESSAGE_UPDATE, \
  1840. (void (*)(void))rsa_signverify_message_update }, \
  1841. { OSSL_FUNC_SIGNATURE_SIGN_MESSAGE_FINAL, \
  1842. (void (*)(void))rsa_sign_message_final }, \
  1843. { OSSL_FUNC_SIGNATURE_VERIFY_INIT, \
  1844. (void (*)(void))rsa_##md##_verify_init }, \
  1845. { OSSL_FUNC_SIGNATURE_VERIFY, \
  1846. (void (*)(void))rsa_verify }, \
  1847. { OSSL_FUNC_SIGNATURE_VERIFY_MESSAGE_INIT, \
  1848. (void (*)(void))rsa_##md##_verify_message_init }, \
  1849. { OSSL_FUNC_SIGNATURE_VERIFY_MESSAGE_UPDATE, \
  1850. (void (*)(void))rsa_signverify_message_update }, \
  1851. { OSSL_FUNC_SIGNATURE_VERIFY_MESSAGE_FINAL, \
  1852. (void (*)(void))rsa_verify_message_final }, \
  1853. { OSSL_FUNC_SIGNATURE_VERIFY_RECOVER_INIT, \
  1854. (void (*)(void))rsa_##md##_verify_recover_init }, \
  1855. { OSSL_FUNC_SIGNATURE_VERIFY_RECOVER, \
  1856. (void (*)(void))rsa_verify_recover }, \
  1857. { OSSL_FUNC_SIGNATURE_FREECTX, (void (*)(void))rsa_freectx }, \
  1858. { OSSL_FUNC_SIGNATURE_DUPCTX, (void (*)(void))rsa_dupctx }, \
  1859. { OSSL_FUNC_SIGNATURE_QUERY_KEY_TYPES, \
  1860. (void (*)(void))rsa_sigalg_query_key_types }, \
  1861. { OSSL_FUNC_SIGNATURE_GET_CTX_PARAMS, \
  1862. (void (*)(void))rsa_get_ctx_params }, \
  1863. { OSSL_FUNC_SIGNATURE_GETTABLE_CTX_PARAMS, \
  1864. (void (*)(void))rsa_gettable_ctx_params }, \
  1865. { OSSL_FUNC_SIGNATURE_SET_CTX_PARAMS, \
  1866. (void (*)(void))rsa_sigalg_set_ctx_params }, \
  1867. { OSSL_FUNC_SIGNATURE_SETTABLE_CTX_PARAMS, \
  1868. (void (*)(void))rsa_sigalg_settable_ctx_params }, \
  1869. OSSL_DISPATCH_END \
  1870. }
  1871. #if !defined(OPENSSL_NO_RMD160) && !defined(FIPS_MODULE)
  1872. IMPL_RSA_SIGALG(ripemd160, RIPEMD160);
  1873. #endif
  1874. IMPL_RSA_SIGALG(sha1, SHA1);
  1875. IMPL_RSA_SIGALG(sha224, SHA2-224);
  1876. IMPL_RSA_SIGALG(sha256, SHA2-256);
  1877. IMPL_RSA_SIGALG(sha384, SHA2-384);
  1878. IMPL_RSA_SIGALG(sha512, SHA2-512);
  1879. IMPL_RSA_SIGALG(sha512_224, SHA2-512/224);
  1880. IMPL_RSA_SIGALG(sha512_256, SHA2-512/256);
  1881. IMPL_RSA_SIGALG(sha3_224, SHA3-224);
  1882. IMPL_RSA_SIGALG(sha3_256, SHA3-256);
  1883. IMPL_RSA_SIGALG(sha3_384, SHA3-384);
  1884. IMPL_RSA_SIGALG(sha3_512, SHA3-512);
  1885. #if !defined(OPENSSL_NO_SM3) && !defined(FIPS_MODULE)
  1886. IMPL_RSA_SIGALG(sm3, SM3);
  1887. #endif