RSA_get0_key.3ossl 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326
  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_GET0_KEY 3ossl"
  136. .TH RSA_GET0_KEY 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_set0_key, RSA_set0_factors, RSA_set0_crt_params, RSA_get0_key,
  143. RSA_get0_factors, RSA_get0_crt_params,
  144. RSA_get0_n, RSA_get0_e, RSA_get0_d, RSA_get0_p, RSA_get0_q,
  145. RSA_get0_dmp1, RSA_get0_dmq1, RSA_get0_iqmp, RSA_get0_pss_params,
  146. RSA_clear_flags,
  147. RSA_test_flags, RSA_set_flags, RSA_get0_engine, RSA_get_multi_prime_extra_count,
  148. RSA_get0_multi_prime_factors, RSA_get0_multi_prime_crt_params,
  149. RSA_set0_multi_prime_params, RSA_get_version
  150. \&\- Routines for getting and setting data in an RSA object
  151. .SH "SYNOPSIS"
  152. .IX Header "SYNOPSIS"
  153. .Vb 1
  154. \& #include <openssl/rsa.h>
  155. .Ve
  156. .PP
  157. The following functions have been deprecated since OpenSSL 3.0, and can be
  158. hidden entirely by defining \fB\s-1OPENSSL_API_COMPAT\s0\fR with a suitable version value,
  159. see \fBopenssl_user_macros\fR\|(7):
  160. .PP
  161. .Vb 10
  162. \& int RSA_set0_key(RSA *r, BIGNUM *n, BIGNUM *e, BIGNUM *d);
  163. \& int RSA_set0_factors(RSA *r, BIGNUM *p, BIGNUM *q);
  164. \& int RSA_set0_crt_params(RSA *r, BIGNUM *dmp1, BIGNUM *dmq1, BIGNUM *iqmp);
  165. \& void RSA_get0_key(const RSA *r,
  166. \& const BIGNUM **n, const BIGNUM **e, const BIGNUM **d);
  167. \& void RSA_get0_factors(const RSA *r, const BIGNUM **p, const BIGNUM **q);
  168. \& void RSA_get0_crt_params(const RSA *r,
  169. \& const BIGNUM **dmp1, const BIGNUM **dmq1,
  170. \& const BIGNUM **iqmp);
  171. \& const BIGNUM *RSA_get0_n(const RSA *d);
  172. \& const BIGNUM *RSA_get0_e(const RSA *d);
  173. \& const BIGNUM *RSA_get0_d(const RSA *d);
  174. \& const BIGNUM *RSA_get0_p(const RSA *d);
  175. \& const BIGNUM *RSA_get0_q(const RSA *d);
  176. \& const BIGNUM *RSA_get0_dmp1(const RSA *r);
  177. \& const BIGNUM *RSA_get0_dmq1(const RSA *r);
  178. \& const BIGNUM *RSA_get0_iqmp(const RSA *r);
  179. \& const RSA_PSS_PARAMS *RSA_get0_pss_params(const RSA *r);
  180. \& void RSA_clear_flags(RSA *r, int flags);
  181. \& int RSA_test_flags(const RSA *r, int flags);
  182. \& void RSA_set_flags(RSA *r, int flags);
  183. \& ENGINE *RSA_get0_engine(RSA *r);
  184. \& int RSA_get_multi_prime_extra_count(const RSA *r);
  185. \& int RSA_get0_multi_prime_factors(const RSA *r, const BIGNUM *primes[]);
  186. \& int RSA_get0_multi_prime_crt_params(const RSA *r, const BIGNUM *exps[],
  187. \& const BIGNUM *coeffs[]);
  188. \& int RSA_set0_multi_prime_params(RSA *r, BIGNUM *primes[], BIGNUM *exps[],
  189. \& BIGNUM *coeffs[], int pnum);
  190. \& int RSA_get_version(RSA *r);
  191. .Ve
  192. .SH "DESCRIPTION"
  193. .IX Header "DESCRIPTION"
  194. All of the functions described on this page are deprecated.
  195. Applications should instead use \fBEVP_PKEY_get_bn_param\fR\|(3) for any methods that
  196. return a \fB\s-1BIGNUM\s0\fR. Refer to \s-1\fBEVP_PKEY\-DH\s0\fR\|(7) for more information.
  197. .PP
  198. An \s-1RSA\s0 object contains the components for the public and private key,
  199. \&\fBn\fR, \fBe\fR, \fBd\fR, \fBp\fR, \fBq\fR, \fBdmp1\fR, \fBdmq1\fR and \fBiqmp\fR. \fBn\fR is
  200. the modulus common to both public and private key, \fBe\fR is the public
  201. exponent and \fBd\fR is the private exponent. \fBp\fR, \fBq\fR, \fBdmp1\fR,
  202. \&\fBdmq1\fR and \fBiqmp\fR are the factors for the second representation of a
  203. private key (see PKCS#1 section 3 Key Types), where \fBp\fR and \fBq\fR are
  204. the first and second factor of \fBn\fR and \fBdmp1\fR, \fBdmq1\fR and \fBiqmp\fR
  205. are the exponents and coefficient for \s-1CRT\s0 calculations.
  206. .PP
  207. For multi-prime \s-1RSA\s0 (defined in \s-1RFC 8017\s0), there are also one or more
  208. \&'triplet' in an \s-1RSA\s0 object. A triplet contains three members, \fBr\fR, \fBd\fR
  209. and \fBt\fR. \fBr\fR is the additional prime besides \fBp\fR and \fBq\fR. \fBd\fR and
  210. \&\fBt\fR are the exponent and coefficient for \s-1CRT\s0 calculations.
  211. .PP
  212. The \fBn\fR, \fBe\fR and \fBd\fR parameters can be obtained by calling
  213. \&\fBRSA_get0_key()\fR. If they have not been set yet, then \fB*n\fR, \fB*e\fR and
  214. \&\fB*d\fR will be set to \s-1NULL.\s0 Otherwise, they are set to pointers to
  215. their respective values. These point directly to the internal
  216. representations of the values and therefore should not be freed
  217. by the caller.
  218. .PP
  219. The \fBn\fR, \fBe\fR and \fBd\fR parameter values can be set by calling
  220. \&\fBRSA_set0_key()\fR and passing the new values for \fBn\fR, \fBe\fR and \fBd\fR as
  221. parameters to the function. The values \fBn\fR and \fBe\fR must be non-NULL
  222. the first time this function is called on a given \s-1RSA\s0 object. The
  223. value \fBd\fR may be \s-1NULL.\s0 On subsequent calls any of these values may be
  224. \&\s-1NULL\s0 which means the corresponding \s-1RSA\s0 field is left untouched.
  225. Calling this function transfers the memory management of the values to
  226. the \s-1RSA\s0 object, and therefore the values that have been passed in
  227. should not be freed by the caller after this function has been called.
  228. .PP
  229. In a similar fashion, the \fBp\fR and \fBq\fR parameters can be obtained and
  230. set with \fBRSA_get0_factors()\fR and \fBRSA_set0_factors()\fR, and the \fBdmp1\fR,
  231. \&\fBdmq1\fR and \fBiqmp\fR parameters can be obtained and set with
  232. \&\fBRSA_get0_crt_params()\fR and \fBRSA_set0_crt_params()\fR.
  233. .PP
  234. For \fBRSA_get0_key()\fR, \fBRSA_get0_factors()\fR, and \fBRSA_get0_crt_params()\fR,
  235. \&\s-1NULL\s0 value \s-1BIGNUM\s0 ** output parameters are permitted. The functions
  236. ignore \s-1NULL\s0 parameters but return values for other, non-NULL, parameters.
  237. .PP
  238. For multi-prime \s-1RSA,\s0 \fBRSA_get0_multi_prime_factors()\fR and \fBRSA_get0_multi_prime_params()\fR
  239. can be used to obtain other primes and related \s-1CRT\s0 parameters. The
  240. return values are stored in an array of \fB\s-1BIGNUM\s0 *\fR. \fBRSA_set0_multi_prime_params()\fR
  241. sets a collect of multi-prime 'triplet' members (prime, exponent and coefficient)
  242. into an \s-1RSA\s0 object.
  243. .PP
  244. Any of the values \fBn\fR, \fBe\fR, \fBd\fR, \fBp\fR, \fBq\fR, \fBdmp1\fR, \fBdmq1\fR, and \fBiqmp\fR can also be
  245. retrieved separately by the corresponding function
  246. \&\fBRSA_get0_n()\fR, \fBRSA_get0_e()\fR, \fBRSA_get0_d()\fR, \fBRSA_get0_p()\fR, \fBRSA_get0_q()\fR,
  247. \&\fBRSA_get0_dmp1()\fR, \fBRSA_get0_dmq1()\fR, and \fBRSA_get0_iqmp()\fR, respectively.
  248. .PP
  249. \&\fBRSA_get0_pss_params()\fR is used to retrieve the RSA-PSS parameters.
  250. .PP
  251. \&\fBRSA_set_flags()\fR sets the flags in the \fBflags\fR parameter on the \s-1RSA\s0
  252. object. Multiple flags can be passed in one go (bitwise ORed together).
  253. Any flags that are already set are left set. \fBRSA_test_flags()\fR tests to
  254. see whether the flags passed in the \fBflags\fR parameter are currently
  255. set in the \s-1RSA\s0 object. Multiple flags can be tested in one go. All
  256. flags that are currently set are returned, or zero if none of the
  257. flags are set. \fBRSA_clear_flags()\fR clears the specified flags within the
  258. \&\s-1RSA\s0 object.
  259. .PP
  260. \&\fBRSA_get0_engine()\fR returns a handle to the \s-1ENGINE\s0 that has been set for
  261. this \s-1RSA\s0 object, or \s-1NULL\s0 if no such \s-1ENGINE\s0 has been set.
  262. .PP
  263. \&\fBRSA_get_version()\fR returns the version of an \s-1RSA\s0 object \fBr\fR.
  264. .SH "NOTES"
  265. .IX Header "NOTES"
  266. Values retrieved with \fBRSA_get0_key()\fR are owned by the \s-1RSA\s0 object used
  267. in the call and may therefore \fInot\fR be passed to \fBRSA_set0_key()\fR. If
  268. needed, duplicate the received value using \fBBN_dup()\fR and pass the
  269. duplicate. The same applies to \fBRSA_get0_factors()\fR and \fBRSA_set0_factors()\fR
  270. as well as \fBRSA_get0_crt_params()\fR and \fBRSA_set0_crt_params()\fR.
  271. .PP
  272. The caller should obtain the size by calling \fBRSA_get_multi_prime_extra_count()\fR
  273. in advance and allocate sufficient buffer to store the return values before
  274. calling \fBRSA_get0_multi_prime_factors()\fR and \fBRSA_get0_multi_prime_params()\fR.
  275. .PP
  276. \&\fBRSA_set0_multi_prime_params()\fR always clears the original multi-prime
  277. triplets in \s-1RSA\s0 object \fBr\fR and assign the new set of triplets into it.
  278. .SH "RETURN VALUES"
  279. .IX Header "RETURN VALUES"
  280. \&\fBRSA_set0_key()\fR, \fBRSA_set0_factors()\fR, \fBRSA_set0_crt_params()\fR and
  281. \&\fBRSA_set0_multi_prime_params()\fR return 1 on success or 0 on failure.
  282. .PP
  283. \&\fBRSA_get0_n()\fR, \fBRSA_get0_e()\fR, \fBRSA_get0_d()\fR, \fBRSA_get0_p()\fR, \fBRSA_get0_q()\fR,
  284. \&\fBRSA_get0_dmp1()\fR, \fBRSA_get0_dmq1()\fR, and \fBRSA_get0_iqmp()\fR
  285. return the respective value.
  286. .PP
  287. \&\fBRSA_get0_pss_params()\fR returns a \fB\s-1RSA_PSS_PARAMS\s0\fR pointer, or \s-1NULL\s0 if
  288. there is none.
  289. .PP
  290. \&\fBRSA_get0_multi_prime_factors()\fR and \fBRSA_get0_multi_prime_crt_params()\fR return
  291. 1 on success or 0 on failure.
  292. .PP
  293. \&\fBRSA_get_multi_prime_extra_count()\fR returns two less than the number of primes
  294. in use, which is 0 for traditional \s-1RSA\s0 and the number of extra primes for
  295. multi-prime \s-1RSA.\s0
  296. .PP
  297. \&\fBRSA_get_version()\fR returns \fB\s-1RSA_ASN1_VERSION_MULTI\s0\fR for multi-prime \s-1RSA\s0 and
  298. \&\fB\s-1RSA_ASN1_VERSION_DEFAULT\s0\fR for normal two-prime \s-1RSA,\s0 as defined in \s-1RFC 8017.\s0
  299. .PP
  300. \&\fBRSA_test_flags()\fR returns the current state of the flags in the \s-1RSA\s0 object.
  301. .PP
  302. \&\fBRSA_get0_engine()\fR returns the \s-1ENGINE\s0 set for the \s-1RSA\s0 object or \s-1NULL\s0 if no
  303. \&\s-1ENGINE\s0 has been set.
  304. .SH "SEE ALSO"
  305. .IX Header "SEE ALSO"
  306. \&\fBRSA_new\fR\|(3), \fBRSA_size\fR\|(3)
  307. .SH "HISTORY"
  308. .IX Header "HISTORY"
  309. The \fBRSA_get0_pss_params()\fR function was added in OpenSSL 1.1.1e.
  310. .PP
  311. The
  312. \&\fBRSA_get_multi_prime_extra_count()\fR, \fBRSA_get0_multi_prime_factors()\fR,
  313. \&\fBRSA_get0_multi_prime_crt_params()\fR, \fBRSA_set0_multi_prime_params()\fR,
  314. and \fBRSA_get_version()\fR functions were added in OpenSSL 1.1.1.
  315. .PP
  316. Other functions described here were added in OpenSSL 1.1.0.
  317. .PP
  318. All of these functions were deprecated in OpenSSL 3.0.
  319. .SH "COPYRIGHT"
  320. .IX Header "COPYRIGHT"
  321. Copyright 2016\-2022 The OpenSSL Project Authors. All Rights Reserved.
  322. .PP
  323. Licensed under the Apache License 2.0 (the \*(L"License\*(R"). You may not use
  324. this file except in compliance with the License. You can obtain a copy
  325. in the file \s-1LICENSE\s0 in the source distribution or at
  326. <https://www.openssl.org/source/license.html>.