EVP_PKEY_decrypt.3ossl 8.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266
  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 "EVP_PKEY_DECRYPT 3ossl"
  136. .TH EVP_PKEY_DECRYPT 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. EVP_PKEY_decrypt_init, EVP_PKEY_decrypt_init_ex,
  143. EVP_PKEY_decrypt \- decrypt using a public key algorithm
  144. .SH "SYNOPSIS"
  145. .IX Header "SYNOPSIS"
  146. .Vb 1
  147. \& #include <openssl/evp.h>
  148. \&
  149. \& int EVP_PKEY_decrypt_init(EVP_PKEY_CTX *ctx);
  150. \& int EVP_PKEY_decrypt_init_ex(EVP_PKEY_CTX *ctx, const OSSL_PARAM params[]);
  151. \& int EVP_PKEY_decrypt(EVP_PKEY_CTX *ctx,
  152. \& unsigned char *out, size_t *outlen,
  153. \& const unsigned char *in, size_t inlen);
  154. .Ve
  155. .SH "DESCRIPTION"
  156. .IX Header "DESCRIPTION"
  157. The \fBEVP_PKEY_decrypt_init()\fR function initializes a public key algorithm
  158. context using key \fIpkey\fR for a decryption operation.
  159. .PP
  160. The \fBEVP_PKEY_decrypt_init_ex()\fR function initializes a public key algorithm
  161. context using key \fIpkey\fR for a decryption operation and sets the
  162. algorithm specific \fIparams\fR.
  163. .PP
  164. The \fBEVP_PKEY_decrypt()\fR function performs a public key decryption operation
  165. using \fIctx\fR. The data to be decrypted is specified using the \fIin\fR and
  166. \&\fIinlen\fR parameters. If \fIout\fR is \s-1NULL\s0 then the minimum required size of
  167. the output buffer is written to the \fI*outlen\fR parameter.
  168. .PP
  169. If \fIout\fR is not \s-1NULL\s0 then before the call the \fI*outlen\fR parameter must
  170. contain the length of the \fIout\fR buffer. If the call is successful the
  171. decrypted data is written to \fIout\fR and the amount of the decrypted data
  172. written to \fI*outlen\fR, otherwise an error is returned.
  173. .SH "NOTES"
  174. .IX Header "NOTES"
  175. After the call to \fBEVP_PKEY_decrypt_init()\fR algorithm specific control
  176. operations can be performed to set any appropriate parameters for the
  177. operation. These operations can be included in the \fBEVP_PKEY_decrypt_init_ex()\fR
  178. call.
  179. .PP
  180. The function \fBEVP_PKEY_decrypt()\fR can be called more than once on the same
  181. context if several operations are performed using the same parameters.
  182. .SH "RETURN VALUES"
  183. .IX Header "RETURN VALUES"
  184. \&\fBEVP_PKEY_decrypt_init()\fR, \fBEVP_PKEY_decrypt_init_ex()\fR and \fBEVP_PKEY_decrypt()\fR
  185. return 1 for success and 0 or a negative value for failure. In particular a
  186. return value of \-2 indicates the operation is not supported by the public key
  187. algorithm.
  188. .SH "WARNINGS"
  189. .IX Header "WARNINGS"
  190. In OpenSSL versions before 3.2.0, when used in PKCS#1 v1.5 padding,
  191. both the return value from the \fBEVP_PKEY_decrypt()\fR and the \fBoutlen\fR provided
  192. information useful in mounting a Bleichenbacher attack against the
  193. used private key. They had to be processed in a side-channel free way.
  194. .PP
  195. Since version 3.2.0, the \fBEVP_PKEY_decrypt()\fR method when used with PKCS#1
  196. v1.5 padding as implemented in the \fBdefault\fR provider implements
  197. the implicit rejection mechanism (see
  198. \&\fB\s-1OSSL_PKEY_PARAM_IMPLICIT_REJECTION\s0\fR in \fBprovider\-asym_cipher\fR\|(7)).
  199. That means it doesn't return an error when it detects an error in padding,
  200. instead it returns a pseudo-randomly generated message, removing the need
  201. of side-channel secure code from applications using OpenSSL.
  202. If OpenSSL is configured to use a provider that doesn't implement implicit
  203. rejection, the code still needs to handle the returned values
  204. using side-channel free code.
  205. Side-channel free handling of the error stack can be performed using
  206. either a pair of unconditional \fBERR_set_mark\fR\|(3) and \fBERR_pop_to_mark\fR\|(3)
  207. calls or by using the \fBERR_clear_error\fR\|(3) call.
  208. .SH "EXAMPLES"
  209. .IX Header "EXAMPLES"
  210. Decrypt data using \s-1OAEP\s0 (for \s-1RSA\s0 keys):
  211. .PP
  212. .Vb 2
  213. \& #include <openssl/evp.h>
  214. \& #include <openssl/rsa.h>
  215. \&
  216. \& EVP_PKEY_CTX *ctx;
  217. \& ENGINE *eng;
  218. \& unsigned char *out, *in;
  219. \& size_t outlen, inlen;
  220. \& EVP_PKEY *key;
  221. \&
  222. \& /*
  223. \& * NB: assumes key, eng, in, inlen are already set up
  224. \& * and that key is an RSA private key
  225. \& */
  226. \& ctx = EVP_PKEY_CTX_new(key, eng);
  227. \& if (!ctx)
  228. \& /* Error occurred */
  229. \& if (EVP_PKEY_decrypt_init(ctx) <= 0)
  230. \& /* Error */
  231. \& if (EVP_PKEY_CTX_set_rsa_padding(ctx, RSA_PKCS1_OAEP_PADDING) <= 0)
  232. \& /* Error */
  233. \&
  234. \& /* Determine buffer length */
  235. \& if (EVP_PKEY_decrypt(ctx, NULL, &outlen, in, inlen) <= 0)
  236. \& /* Error */
  237. \&
  238. \& out = OPENSSL_malloc(outlen);
  239. \&
  240. \& if (!out)
  241. \& /* malloc failure */
  242. \&
  243. \& if (EVP_PKEY_decrypt(ctx, out, &outlen, in, inlen) <= 0)
  244. \& /* Error */
  245. \&
  246. \& /* Decrypted data is outlen bytes written to buffer out */
  247. .Ve
  248. .SH "SEE ALSO"
  249. .IX Header "SEE ALSO"
  250. \&\fBEVP_PKEY_CTX_new\fR\|(3),
  251. \&\fBEVP_PKEY_encrypt\fR\|(3),
  252. \&\fBEVP_PKEY_sign\fR\|(3),
  253. \&\fBEVP_PKEY_verify\fR\|(3),
  254. \&\fBEVP_PKEY_verify_recover\fR\|(3),
  255. \&\fBEVP_PKEY_derive\fR\|(3)
  256. .SH "HISTORY"
  257. .IX Header "HISTORY"
  258. These functions were added in OpenSSL 1.0.0.
  259. .SH "COPYRIGHT"
  260. .IX Header "COPYRIGHT"
  261. Copyright 2006\-2024 The OpenSSL Project Authors. All Rights Reserved.
  262. .PP
  263. Licensed under the Apache License 2.0 (the \*(L"License\*(R"). You may not use
  264. this file except in compliance with the License. You can obtain a copy
  265. in the file \s-1LICENSE\s0 in the source distribution or at
  266. <https://www.openssl.org/source/license.html>.