PEM_read.3ossl 9.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265
  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 "PEM_READ 3ossl"
  136. .TH PEM_READ 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. PEM_write, PEM_write_bio,
  143. PEM_read, PEM_read_bio, PEM_do_header, PEM_get_EVP_CIPHER_INFO
  144. \&\- PEM encoding routines
  145. .SH "SYNOPSIS"
  146. .IX Header "SYNOPSIS"
  147. .Vb 1
  148. \& #include <openssl/pem.h>
  149. \&
  150. \& int PEM_write(FILE *fp, const char *name, const char *header,
  151. \& const unsigned char *data, long len);
  152. \& int PEM_write_bio(BIO *bp, const char *name, const char *header,
  153. \& const unsigned char *data, long len);
  154. \&
  155. \& int PEM_read(FILE *fp, char **name, char **header,
  156. \& unsigned char **data, long *len);
  157. \& int PEM_read_bio(BIO *bp, char **name, char **header,
  158. \& unsigned char **data, long *len);
  159. \&
  160. \& int PEM_get_EVP_CIPHER_INFO(char *header, EVP_CIPHER_INFO *cinfo);
  161. \& int PEM_do_header(EVP_CIPHER_INFO *cinfo, unsigned char *data, long *len,
  162. \& pem_password_cb *cb, void *u);
  163. .Ve
  164. .SH "DESCRIPTION"
  165. .IX Header "DESCRIPTION"
  166. These functions read and write PEM-encoded objects, using the \s-1PEM\s0
  167. type \fBname\fR, any additional \fBheader\fR information, and the raw
  168. \&\fBdata\fR of length \fBlen\fR.
  169. .PP
  170. \&\s-1PEM\s0 is the term used for binary content encoding first defined in \s-1IETF
  171. RFC 1421.\s0 The content is a series of base64\-encoded lines, surrounded
  172. by begin/end markers each on their own line. For example:
  173. .PP
  174. .Vb 4
  175. \& \-\-\-\-\-BEGIN PRIVATE KEY\-\-\-\-\-
  176. \& MIICdg....
  177. \& ... bhTQ==
  178. \& \-\-\-\-\-END PRIVATE KEY\-\-\-\-\-
  179. .Ve
  180. .PP
  181. Optional header line(s) may appear after the begin line, and their
  182. existence depends on the type of object being written or read.
  183. .PP
  184. \&\fBPEM_write()\fR writes to the file \fBfp\fR, while \fBPEM_write_bio()\fR writes to
  185. the \s-1BIO\s0 \fBbp\fR. The \fBname\fR is the name to use in the marker, the
  186. \&\fBheader\fR is the header value or \s-1NULL,\s0 and \fBdata\fR and \fBlen\fR specify
  187. the data and its length.
  188. .PP
  189. The final \fBdata\fR buffer is typically an \s-1ASN.1\s0 object which can be decoded with
  190. the \fBd2i\fR function appropriate to the type \fBname\fR; see \fBd2i_X509\fR\|(3)
  191. for examples.
  192. .PP
  193. \&\fBPEM_read()\fR reads from the file \fBfp\fR, while \fBPEM_read_bio()\fR reads
  194. from the \s-1BIO\s0 \fBbp\fR.
  195. Both skip any non-PEM data that precedes the start of the next \s-1PEM\s0 object.
  196. When an object is successfully retrieved, the type name from the \*(L"\-\-\-\-BEGIN
  197. <type>\-\-\-\-\-\*(R" is returned via the \fBname\fR argument, any encapsulation headers
  198. are returned in \fBheader\fR and the base64\-decoded content and its length are
  199. returned via \fBdata\fR and \fBlen\fR respectively.
  200. The \fBname\fR, \fBheader\fR and \fBdata\fR pointers are allocated via \fBOPENSSL_malloc()\fR
  201. and should be freed by the caller via \fBOPENSSL_free()\fR when no longer needed.
  202. .PP
  203. \&\fBPEM_get_EVP_CIPHER_INFO()\fR can be used to determine the \fBdata\fR returned by
  204. \&\fBPEM_read()\fR or \fBPEM_read_bio()\fR is encrypted and to retrieve the associated cipher
  205. and \s-1IV.\s0
  206. The caller passes a pointer to structure of type \fB\s-1EVP_CIPHER_INFO\s0\fR via the
  207. \&\fBcinfo\fR argument and the \fBheader\fR returned via \fBPEM_read()\fR or \fBPEM_read_bio()\fR.
  208. If the call is successful 1 is returned and the cipher and \s-1IV\s0 are stored at the
  209. address pointed to by \fBcinfo\fR.
  210. When the header is malformed, or not supported or when the cipher is unknown
  211. or some internal error happens 0 is returned.
  212. This function is deprecated, see \fB\s-1NOTES\s0\fR below.
  213. .PP
  214. \&\fBPEM_do_header()\fR can then be used to decrypt the data if the header
  215. indicates encryption.
  216. The \fBcinfo\fR argument is a pointer to the structure initialized by the previous
  217. call to \fBPEM_get_EVP_CIPHER_INFO()\fR.
  218. The \fBdata\fR and \fBlen\fR arguments are those returned by the previous call to
  219. \&\fBPEM_read()\fR or \fBPEM_read_bio()\fR.
  220. The \fBcb\fR and \fBu\fR arguments make it possible to override the default password
  221. prompt function as described in \fBPEM_read_PrivateKey\fR\|(3).
  222. On successful completion the \fBdata\fR is decrypted in place, and \fBlen\fR is
  223. updated to indicate the plaintext length.
  224. This function is deprecated, see \fB\s-1NOTES\s0\fR below.
  225. .PP
  226. If the data is a priori known to not be encrypted, then neither \fBPEM_do_header()\fR
  227. nor \fBPEM_get_EVP_CIPHER_INFO()\fR need be called.
  228. .SH "RETURN VALUES"
  229. .IX Header "RETURN VALUES"
  230. \&\fBPEM_read()\fR and \fBPEM_read_bio()\fR return 1 on success and 0 on failure, the latter
  231. includes the case when no more \s-1PEM\s0 objects remain in the input file.
  232. To distinguish end of file from more serious errors the caller must peek at the
  233. error stack and check for \fB\s-1PEM_R_NO_START_LINE\s0\fR, which indicates that no more
  234. \&\s-1PEM\s0 objects were found. See \fBERR_peek_last_error\fR\|(3), \s-1\fBERR_GET_REASON\s0\fR\|(3).
  235. .PP
  236. \&\fBPEM_get_EVP_CIPHER_INFO()\fR and \fBPEM_do_header()\fR return 1 on success, and 0 on
  237. failure.
  238. The \fBdata\fR is likely meaningless if these functions fail.
  239. .SH "NOTES"
  240. .IX Header "NOTES"
  241. The \fBPEM_get_EVP_CIPHER_INFO()\fR and \fBPEM_do_header()\fR functions are deprecated.
  242. This is because the underlying \s-1PEM\s0 encryption format is obsolete, and should
  243. be avoided.
  244. It uses an encryption format with an OpenSSL-specific key-derivation function,
  245. which employs \s-1MD5\s0 with an iteration count of 1!
  246. Instead, private keys should be stored in PKCS#8 form, with a strong PKCS#5
  247. v2.0 \s-1PBE.\s0
  248. See \fBPEM_write_PrivateKey\fR\|(3) and \fBd2i_PKCS8PrivateKey_bio\fR\|(3).
  249. .PP
  250. \&\fBPEM_do_header()\fR makes no assumption regarding the pass phrase received from the
  251. password callback.
  252. It will simply be treated as a byte sequence.
  253. .SH "SEE ALSO"
  254. .IX Header "SEE ALSO"
  255. \&\fBERR_peek_last_error\fR\|(3), \s-1\fBERR_GET_LIB\s0\fR\|(3),
  256. \&\fBd2i_PKCS8PrivateKey_bio\fR\|(3),
  257. \&\fBpassphrase\-encoding\fR\|(7)
  258. .SH "COPYRIGHT"
  259. .IX Header "COPYRIGHT"
  260. Copyright 1998\-2020 The OpenSSL Project Authors. All Rights Reserved.
  261. .PP
  262. Licensed under the Apache License 2.0 (the \*(L"License\*(R"). You may not use
  263. this file except in compliance with the License. You can obtain a copy
  264. in the file \s-1LICENSE\s0 in the source distribution or at
  265. <https://www.openssl.org/source/license.html>.