RSA_set_method.3ossl 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328
  1. .\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42)
  2. .\"
  3. .\" Standard preamble:
  4. .\" ========================================================================
  5. .de Sp \" Vertical space (when we can't use .PP)
  6. .if t .sp .5v
  7. .if n .sp
  8. ..
  9. .de Vb \" Begin verbatim text
  10. .ft CW
  11. .nf
  12. .ne \\$1
  13. ..
  14. .de Ve \" End verbatim text
  15. .ft R
  16. .fi
  17. ..
  18. .\" Set up some character translations and predefined strings. \*(-- will
  19. .\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left
  20. .\" double quote, and \*(R" will give a right double quote. \*(C+ will
  21. .\" give a nicer C++. Capital omega is used to do unbreakable dashes and
  22. .\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff,
  23. .\" nothing in troff, for use with C<>.
  24. .tr \(*W-
  25. .ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p'
  26. .ie n \{\
  27. . ds -- \(*W-
  28. . ds PI pi
  29. . if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch
  30. . if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch
  31. . ds L" ""
  32. . ds R" ""
  33. . ds C` ""
  34. . ds C' ""
  35. 'br\}
  36. .el\{\
  37. . ds -- \|\(em\|
  38. . ds PI \(*p
  39. . ds L" ``
  40. . ds R" ''
  41. . ds C`
  42. . ds C'
  43. 'br\}
  44. .\"
  45. .\" Escape single quotes in literal strings from groff's Unicode transform.
  46. .ie \n(.g .ds Aq \(aq
  47. .el .ds Aq '
  48. .\"
  49. .\" If the F register is >0, we'll generate index entries on stderr for
  50. .\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index
  51. .\" entries marked with X<> in POD. Of course, you'll have to process the
  52. .\" output yourself in some meaningful fashion.
  53. .\"
  54. .\" Avoid warning from groff about undefined register 'F'.
  55. .de IX
  56. ..
  57. .nr rF 0
  58. .if \n(.g .if rF .nr rF 1
  59. .if (\n(rF:(\n(.g==0)) \{\
  60. . if \nF \{\
  61. . de IX
  62. . tm Index:\\$1\t\\n%\t"\\$2"
  63. ..
  64. . if !\nF==2 \{\
  65. . nr % 0
  66. . nr F 2
  67. . \}
  68. . \}
  69. .\}
  70. .rr rF
  71. .\"
  72. .\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2).
  73. .\" Fear. Run. Save yourself. No user-serviceable parts.
  74. . \" fudge factors for nroff and troff
  75. .if n \{\
  76. . ds #H 0
  77. . ds #V .8m
  78. . ds #F .3m
  79. . ds #[ \f1
  80. . ds #] \fP
  81. .\}
  82. .if t \{\
  83. . ds #H ((1u-(\\\\n(.fu%2u))*.13m)
  84. . ds #V .6m
  85. . ds #F 0
  86. . ds #[ \&
  87. . ds #] \&
  88. .\}
  89. . \" simple accents for nroff and troff
  90. .if n \{\
  91. . ds ' \&
  92. . ds ` \&
  93. . ds ^ \&
  94. . ds , \&
  95. . ds ~ ~
  96. . ds /
  97. .\}
  98. .if t \{\
  99. . ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u"
  100. . ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u'
  101. . ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u'
  102. . ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u'
  103. . ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u'
  104. . ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u'
  105. .\}
  106. . \" troff and (daisy-wheel) nroff accents
  107. .ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V'
  108. .ds 8 \h'\*(#H'\(*b\h'-\*(#H'
  109. .ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#]
  110. .ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H'
  111. .ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u'
  112. .ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#]
  113. .ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#]
  114. .ds ae a\h'-(\w'a'u*4/10)'e
  115. .ds Ae A\h'-(\w'A'u*4/10)'E
  116. . \" corrections for vroff
  117. .if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u'
  118. .if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u'
  119. . \" for low resolution devices (crt and lpr)
  120. .if \n(.H>23 .if \n(.V>19 \
  121. \{\
  122. . ds : e
  123. . ds 8 ss
  124. . ds o a
  125. . ds d- d\h'-1'\(ga
  126. . ds D- D\h'-1'\(hy
  127. . ds th \o'bp'
  128. . ds Th \o'LP'
  129. . ds ae ae
  130. . ds Ae AE
  131. .\}
  132. .rm #[ #] #H #V #F C
  133. .\" ========================================================================
  134. .\"
  135. .IX Title "RSA_SET_METHOD 3ossl"
  136. .TH RSA_SET_METHOD 3ossl "2024-09-03" "3.3.2" "OpenSSL"
  137. .\" For nroff, turn off justification. Always turn off hyphenation; it makes
  138. .\" way too many mistakes in technical documents.
  139. .if n .ad l
  140. .nh
  141. .SH "NAME"
  142. RSA_set_default_method, RSA_get_default_method, RSA_set_method,
  143. RSA_get_method, RSA_PKCS1_OpenSSL, RSA_flags,
  144. RSA_new_method \- select RSA method
  145. .SH "SYNOPSIS"
  146. .IX Header "SYNOPSIS"
  147. .Vb 1
  148. \& #include <openssl/rsa.h>
  149. .Ve
  150. .PP
  151. The following functions have been deprecated since OpenSSL 3.0, and can be
  152. hidden entirely by defining \fB\s-1OPENSSL_API_COMPAT\s0\fR with a suitable version value,
  153. see \fBopenssl_user_macros\fR\|(7):
  154. .PP
  155. .Vb 1
  156. \& void RSA_set_default_method(const RSA_METHOD *meth);
  157. \&
  158. \& const RSA_METHOD *RSA_get_default_method(void);
  159. \&
  160. \& int RSA_set_method(RSA *rsa, const RSA_METHOD *meth);
  161. \&
  162. \& const RSA_METHOD *RSA_get_method(const RSA *rsa);
  163. \&
  164. \& const RSA_METHOD *RSA_PKCS1_OpenSSL(void);
  165. \&
  166. \& int RSA_flags(const RSA *rsa);
  167. \&
  168. \& RSA *RSA_new_method(ENGINE *engine);
  169. .Ve
  170. .SH "DESCRIPTION"
  171. .IX Header "DESCRIPTION"
  172. All of the functions described on this page are deprecated.
  173. Applications should instead use the \s-1OSSL_PROVIDER\s0 APIs.
  174. .PP
  175. An \fB\s-1RSA_METHOD\s0\fR specifies the functions that OpenSSL uses for \s-1RSA\s0
  176. operations. By modifying the method, alternative implementations such as
  177. hardware accelerators may be used. \s-1IMPORTANT:\s0 See the \s-1NOTES\s0 section for
  178. important information about how these \s-1RSA API\s0 functions are affected by the
  179. use of \fB\s-1ENGINE\s0\fR \s-1API\s0 calls.
  180. .PP
  181. Initially, the default \s-1RSA_METHOD\s0 is the OpenSSL internal implementation,
  182. as returned by \fBRSA_PKCS1_OpenSSL()\fR.
  183. .PP
  184. \&\fBRSA_set_default_method()\fR makes \fBmeth\fR the default method for all \s-1RSA\s0
  185. structures created later.
  186. \&\fB\s-1NB\s0\fR: This is true only whilst no \s-1ENGINE\s0 has
  187. been set as a default for \s-1RSA,\s0 so this function is no longer recommended.
  188. This function is not thread-safe and should not be called at the same time
  189. as other OpenSSL functions.
  190. .PP
  191. \&\fBRSA_get_default_method()\fR returns a pointer to the current default
  192. \&\s-1RSA_METHOD.\s0 However, the meaningfulness of this result is dependent on
  193. whether the \s-1ENGINE API\s0 is being used, so this function is no longer
  194. recommended.
  195. .PP
  196. \&\fBRSA_set_method()\fR selects \fBmeth\fR to perform all operations using the key
  197. \&\fBrsa\fR. This will replace the \s-1RSA_METHOD\s0 used by the \s-1RSA\s0 key and if the
  198. previous method was supplied by an \s-1ENGINE,\s0 the handle to that \s-1ENGINE\s0 will
  199. be released during the change. It is possible to have \s-1RSA\s0 keys that only
  200. work with certain \s-1RSA_METHOD\s0 implementations (e.g. from an \s-1ENGINE\s0 module
  201. that supports embedded hardware-protected keys), and in such cases
  202. attempting to change the \s-1RSA_METHOD\s0 for the key can have unexpected
  203. results.
  204. .PP
  205. \&\fBRSA_get_method()\fR returns a pointer to the \s-1RSA_METHOD\s0 being used by \fBrsa\fR.
  206. This method may or may not be supplied by an \s-1ENGINE\s0 implementation, but if
  207. it is, the return value can only be guaranteed to be valid as long as the
  208. \&\s-1RSA\s0 key itself is valid and does not have its implementation changed by
  209. \&\fBRSA_set_method()\fR.
  210. .PP
  211. \&\fBRSA_flags()\fR returns the \fBflags\fR that are set for \fBrsa\fR's current
  212. \&\s-1RSA_METHOD.\s0 See the \s-1BUGS\s0 section.
  213. .PP
  214. \&\fBRSA_new_method()\fR allocates and initializes an \s-1RSA\s0 structure so that
  215. \&\fBengine\fR will be used for the \s-1RSA\s0 operations. If \fBengine\fR is \s-1NULL,\s0 the
  216. default \s-1ENGINE\s0 for \s-1RSA\s0 operations is used, and if no default \s-1ENGINE\s0 is set,
  217. the \s-1RSA_METHOD\s0 controlled by \fBRSA_set_default_method()\fR is used.
  218. .PP
  219. \&\fBRSA_flags()\fR returns the \fBflags\fR that are set for \fBrsa\fR's current method.
  220. .PP
  221. \&\fBRSA_new_method()\fR allocates and initializes an \fB\s-1RSA\s0\fR structure so that
  222. \&\fBmethod\fR will be used for the \s-1RSA\s0 operations. If \fBmethod\fR is \fB\s-1NULL\s0\fR,
  223. the default method is used.
  224. .SH "THE RSA_METHOD STRUCTURE"
  225. .IX Header "THE RSA_METHOD STRUCTURE"
  226. .Vb 4
  227. \& typedef struct rsa_meth_st
  228. \& {
  229. \& /* name of the implementation */
  230. \& const char *name;
  231. \&
  232. \& /* encrypt */
  233. \& int (*rsa_pub_enc)(int flen, unsigned char *from,
  234. \& unsigned char *to, RSA *rsa, int padding);
  235. \&
  236. \& /* verify arbitrary data */
  237. \& int (*rsa_pub_dec)(int flen, unsigned char *from,
  238. \& unsigned char *to, RSA *rsa, int padding);
  239. \&
  240. \& /* sign arbitrary data */
  241. \& int (*rsa_priv_enc)(int flen, unsigned char *from,
  242. \& unsigned char *to, RSA *rsa, int padding);
  243. \&
  244. \& /* decrypt */
  245. \& int (*rsa_priv_dec)(int flen, unsigned char *from,
  246. \& unsigned char *to, RSA *rsa, int padding);
  247. \&
  248. \& /* compute r0 = r0 ^ I mod rsa\->n (May be NULL for some implementations) */
  249. \& int (*rsa_mod_exp)(BIGNUM *r0, BIGNUM *I, RSA *rsa);
  250. \&
  251. \& /* compute r = a ^ p mod m (May be NULL for some implementations) */
  252. \& int (*bn_mod_exp)(BIGNUM *r, BIGNUM *a, const BIGNUM *p,
  253. \& const BIGNUM *m, BN_CTX *ctx, BN_MONT_CTX *m_ctx);
  254. \&
  255. \& /* called at RSA_new */
  256. \& int (*init)(RSA *rsa);
  257. \&
  258. \& /* called at RSA_free */
  259. \& int (*finish)(RSA *rsa);
  260. \&
  261. \& /*
  262. \& * RSA_FLAG_EXT_PKEY \- rsa_mod_exp is called for private key
  263. \& * operations, even if p,q,dmp1,dmq1,iqmp
  264. \& * are NULL
  265. \& * RSA_METHOD_FLAG_NO_CHECK \- don\*(Aqt check pub/private match
  266. \& */
  267. \& int flags;
  268. \&
  269. \& char *app_data; /* ?? */
  270. \&
  271. \& int (*rsa_sign)(int type,
  272. \& const unsigned char *m, unsigned int m_length,
  273. \& unsigned char *sigret, unsigned int *siglen, const RSA *rsa);
  274. \& int (*rsa_verify)(int dtype,
  275. \& const unsigned char *m, unsigned int m_length,
  276. \& const unsigned char *sigbuf, unsigned int siglen,
  277. \& const RSA *rsa);
  278. \& /* keygen. If NULL built\-in RSA key generation will be used */
  279. \& int (*rsa_keygen)(RSA *rsa, int bits, BIGNUM *e, BN_GENCB *cb);
  280. \&
  281. \& } RSA_METHOD;
  282. .Ve
  283. .SH "RETURN VALUES"
  284. .IX Header "RETURN VALUES"
  285. \&\fBRSA_PKCS1_OpenSSL()\fR, \fBRSA_PKCS1_null_method()\fR, \fBRSA_get_default_method()\fR
  286. and \fBRSA_get_method()\fR return pointers to the respective RSA_METHODs.
  287. .PP
  288. \&\fBRSA_set_default_method()\fR returns no value.
  289. .PP
  290. \&\fBRSA_set_method()\fR returns a pointer to the old \s-1RSA_METHOD\s0 implementation
  291. that was replaced. However, this return value should probably be ignored
  292. because if it was supplied by an \s-1ENGINE,\s0 the pointer could be invalidated
  293. at any time if the \s-1ENGINE\s0 is unloaded (in fact it could be unloaded as a
  294. result of the \fBRSA_set_method()\fR function releasing its handle to the
  295. \&\s-1ENGINE\s0). For this reason, the return type may be replaced with a \fBvoid\fR
  296. declaration in a future release.
  297. .PP
  298. \&\fBRSA_new_method()\fR returns \s-1NULL\s0 and sets an error code that can be obtained
  299. by \fBERR_get_error\fR\|(3) if the allocation fails. Otherwise
  300. it returns a pointer to the newly allocated structure.
  301. .SH "BUGS"
  302. .IX Header "BUGS"
  303. The behaviour of \fBRSA_flags()\fR is a mis-feature that is left as-is for now
  304. to avoid creating compatibility problems. \s-1RSA\s0 functionality, such as the
  305. encryption functions, are controlled by the \fBflags\fR value in the \s-1RSA\s0 key
  306. itself, not by the \fBflags\fR value in the \s-1RSA_METHOD\s0 attached to the \s-1RSA\s0 key
  307. (which is what this function returns). If the flags element of an \s-1RSA\s0 key
  308. is changed, the changes will be honoured by \s-1RSA\s0 functionality but will not
  309. be reflected in the return value of the \fBRSA_flags()\fR function \- in effect
  310. \&\fBRSA_flags()\fR behaves more like an \fBRSA_default_flags()\fR function (which does
  311. not currently exist).
  312. .SH "SEE ALSO"
  313. .IX Header "SEE ALSO"
  314. \&\fBRSA_new\fR\|(3)
  315. .SH "HISTORY"
  316. .IX Header "HISTORY"
  317. All of these functions were deprecated in OpenSSL 3.0.
  318. .PP
  319. The \fBRSA_null_method()\fR, which was a partial attempt to avoid patent issues,
  320. was replaced to always return \s-1NULL\s0 in OpenSSL 1.1.1.
  321. .SH "COPYRIGHT"
  322. .IX Header "COPYRIGHT"
  323. Copyright 2000\-2020 The OpenSSL Project Authors. All Rights Reserved.
  324. .PP
  325. Licensed under the Apache License 2.0 (the \*(L"License\*(R"). You may not use
  326. this file except in compliance with the License. You can obtain a copy
  327. in the file \s-1LICENSE\s0 in the source distribution or at
  328. <https://www.openssl.org/source/license.html>.