Merge branch 'vendor/OPENSSH'
[dragonfly.git] / secure / lib / libcrypto / man / pem.3
1 .\" Automatically generated by Pod::Man 2.23 (Pod::Simple 3.14)
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 'br\}
42 .\"
43 .\" Escape single quotes in literal strings from groff's Unicode transform.
44 .ie \n(.g .ds Aq \(aq
45 .el       .ds Aq '
46 .\"
47 .\" If the F register is turned on, we'll generate index entries on stderr for
48 .\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index
49 .\" entries marked with X<> in POD.  Of course, you'll have to process the
50 .\" output yourself in some meaningful fashion.
51 .ie \nF \{\
52 .    de IX
53 .    tm Index:\\$1\t\\n%\t"\\$2"
54 ..
55 .    nr % 0
56 .    rr F
57 .\}
58 .el \{\
59 .    de IX
60 ..
61 .\}
62 .\"
63 .\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2).
64 .\" Fear.  Run.  Save yourself.  No user-serviceable parts.
65 .    \" fudge factors for nroff and troff
66 .if n \{\
67 .    ds #H 0
68 .    ds #V .8m
69 .    ds #F .3m
70 .    ds #[ \f1
71 .    ds #] \fP
72 .\}
73 .if t \{\
74 .    ds #H ((1u-(\\\\n(.fu%2u))*.13m)
75 .    ds #V .6m
76 .    ds #F 0
77 .    ds #[ \&
78 .    ds #] \&
79 .\}
80 .    \" simple accents for nroff and troff
81 .if n \{\
82 .    ds ' \&
83 .    ds ` \&
84 .    ds ^ \&
85 .    ds , \&
86 .    ds ~ ~
87 .    ds /
88 .\}
89 .if t \{\
90 .    ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u"
91 .    ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u'
92 .    ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u'
93 .    ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u'
94 .    ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u'
95 .    ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u'
96 .\}
97 .    \" troff and (daisy-wheel) nroff accents
98 .ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V'
99 .ds 8 \h'\*(#H'\(*b\h'-\*(#H'
100 .ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#]
101 .ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H'
102 .ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u'
103 .ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#]
104 .ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#]
105 .ds ae a\h'-(\w'a'u*4/10)'e
106 .ds Ae A\h'-(\w'A'u*4/10)'E
107 .    \" corrections for vroff
108 .if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u'
109 .if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u'
110 .    \" for low resolution devices (crt and lpr)
111 .if \n(.H>23 .if \n(.V>19 \
112 \{\
113 .    ds : e
114 .    ds 8 ss
115 .    ds o a
116 .    ds d- d\h'-1'\(ga
117 .    ds D- D\h'-1'\(hy
118 .    ds th \o'bp'
119 .    ds Th \o'LP'
120 .    ds ae ae
121 .    ds Ae AE
122 .\}
123 .rm #[ #] #H #V #F C
124 .\" ========================================================================
125 .\"
126 .IX Title "pem 3"
127 .TH pem 3 "2011-02-08" "1.0.0d" "OpenSSL"
128 .\" For nroff, turn off justification.  Always turn off hyphenation; it makes
129 .\" way too many mistakes in technical documents.
130 .if n .ad l
131 .nh
132 .SH "NAME"
133 PEM, PEM_read_bio_PrivateKey, PEM_read_PrivateKey, PEM_write_bio_PrivateKey, PEM_write_PrivateKey, PEM_write_bio_PKCS8PrivateKey, PEM_write_PKCS8PrivateKey, PEM_write_bio_PKCS8PrivateKey_nid, PEM_write_PKCS8PrivateKey_nid, PEM_read_bio_PUBKEY, PEM_read_PUBKEY, PEM_write_bio_PUBKEY, PEM_write_PUBKEY, PEM_read_bio_RSAPrivateKey, PEM_read_RSAPrivateKey, PEM_write_bio_RSAPrivateKey, PEM_write_RSAPrivateKey, PEM_read_bio_RSAPublicKey, PEM_read_RSAPublicKey, PEM_write_bio_RSAPublicKey, PEM_write_RSAPublicKey, PEM_read_bio_RSA_PUBKEY, PEM_read_RSA_PUBKEY, PEM_write_bio_RSA_PUBKEY, PEM_write_RSA_PUBKEY, PEM_read_bio_DSAPrivateKey, PEM_read_DSAPrivateKey, PEM_write_bio_DSAPrivateKey, PEM_write_DSAPrivateKey, PEM_read_bio_DSA_PUBKEY, PEM_read_DSA_PUBKEY, PEM_write_bio_DSA_PUBKEY, PEM_write_DSA_PUBKEY, PEM_read_bio_DSAparams, PEM_read_DSAparams, PEM_write_bio_DSAparams, PEM_write_DSAparams, PEM_read_bio_DHparams, PEM_read_DHparams, PEM_write_bio_DHparams, PEM_write_DHparams, PEM_read_bio_X509, PEM_read_X509, PEM_write_bio_X509, PEM_write_X509, PEM_read_bio_X509_AUX, PEM_read_X509_AUX, PEM_write_bio_X509_AUX, PEM_write_X509_AUX, PEM_read_bio_X509_REQ, PEM_read_X509_REQ, PEM_write_bio_X509_REQ, PEM_write_X509_REQ, PEM_write_bio_X509_REQ_NEW, PEM_write_X509_REQ_NEW, PEM_read_bio_X509_CRL, PEM_read_X509_CRL, PEM_write_bio_X509_CRL, PEM_write_X509_CRL, PEM_read_bio_PKCS7, PEM_read_PKCS7, PEM_write_bio_PKCS7, PEM_write_PKCS7, PEM_read_bio_NETSCAPE_CERT_SEQUENCE, PEM_read_NETSCAPE_CERT_SEQUENCE, PEM_write_bio_NETSCAPE_CERT_SEQUENCE, PEM_write_NETSCAPE_CERT_SEQUENCE \- PEM routines
134 .SH "SYNOPSIS"
135 .IX Header "SYNOPSIS"
136 .Vb 1
137 \& #include <openssl/pem.h>
138 \&
139 \& EVP_PKEY *PEM_read_bio_PrivateKey(BIO *bp, EVP_PKEY **x,
140 \&                                        pem_password_cb *cb, void *u);
141 \&
142 \& EVP_PKEY *PEM_read_PrivateKey(FILE *fp, EVP_PKEY **x,
143 \&                                        pem_password_cb *cb, void *u);
144 \&
145 \& int PEM_write_bio_PrivateKey(BIO *bp, EVP_PKEY *x, const EVP_CIPHER *enc,
146 \&                                        unsigned char *kstr, int klen,
147 \&                                        pem_password_cb *cb, void *u);
148 \&
149 \& int PEM_write_PrivateKey(FILE *fp, EVP_PKEY *x, const EVP_CIPHER *enc,
150 \&                                        unsigned char *kstr, int klen,
151 \&                                        pem_password_cb *cb, void *u);
152 \&
153 \& int PEM_write_bio_PKCS8PrivateKey(BIO *bp, EVP_PKEY *x, const EVP_CIPHER *enc,
154 \&                                        char *kstr, int klen,
155 \&                                        pem_password_cb *cb, void *u);
156 \&
157 \& int PEM_write_PKCS8PrivateKey(FILE *fp, EVP_PKEY *x, const EVP_CIPHER *enc,
158 \&                                        char *kstr, int klen,
159 \&                                        pem_password_cb *cb, void *u);
160 \&
161 \& int PEM_write_bio_PKCS8PrivateKey_nid(BIO *bp, EVP_PKEY *x, int nid,
162 \&                                        char *kstr, int klen,
163 \&                                        pem_password_cb *cb, void *u);
164 \&
165 \& int PEM_write_PKCS8PrivateKey_nid(FILE *fp, EVP_PKEY *x, int nid,
166 \&                                        char *kstr, int klen,
167 \&                                        pem_password_cb *cb, void *u);
168 \&
169 \& EVP_PKEY *PEM_read_bio_PUBKEY(BIO *bp, EVP_PKEY **x,
170 \&                                        pem_password_cb *cb, void *u);
171 \&
172 \& EVP_PKEY *PEM_read_PUBKEY(FILE *fp, EVP_PKEY **x,
173 \&                                        pem_password_cb *cb, void *u);
174 \&
175 \& int PEM_write_bio_PUBKEY(BIO *bp, EVP_PKEY *x);
176 \& int PEM_write_PUBKEY(FILE *fp, EVP_PKEY *x);
177 \&
178 \& RSA *PEM_read_bio_RSAPrivateKey(BIO *bp, RSA **x,
179 \&                                        pem_password_cb *cb, void *u);
180 \&
181 \& RSA *PEM_read_RSAPrivateKey(FILE *fp, RSA **x,
182 \&                                        pem_password_cb *cb, void *u);
183 \&
184 \& int PEM_write_bio_RSAPrivateKey(BIO *bp, RSA *x, const EVP_CIPHER *enc,
185 \&                                        unsigned char *kstr, int klen,
186 \&                                        pem_password_cb *cb, void *u);
187 \&
188 \& int PEM_write_RSAPrivateKey(FILE *fp, RSA *x, const EVP_CIPHER *enc,
189 \&                                        unsigned char *kstr, int klen,
190 \&                                        pem_password_cb *cb, void *u);
191 \&
192 \& RSA *PEM_read_bio_RSAPublicKey(BIO *bp, RSA **x,
193 \&                                        pem_password_cb *cb, void *u);
194 \&
195 \& RSA *PEM_read_RSAPublicKey(FILE *fp, RSA **x,
196 \&                                        pem_password_cb *cb, void *u);
197 \&
198 \& int PEM_write_bio_RSAPublicKey(BIO *bp, RSA *x);
199 \&
200 \& int PEM_write_RSAPublicKey(FILE *fp, RSA *x);
201 \&
202 \& RSA *PEM_read_bio_RSA_PUBKEY(BIO *bp, RSA **x,
203 \&                                        pem_password_cb *cb, void *u);
204 \&
205 \& RSA *PEM_read_RSA_PUBKEY(FILE *fp, RSA **x,
206 \&                                        pem_password_cb *cb, void *u);
207 \&
208 \& int PEM_write_bio_RSA_PUBKEY(BIO *bp, RSA *x);
209 \&
210 \& int PEM_write_RSA_PUBKEY(FILE *fp, RSA *x);
211 \&
212 \& DSA *PEM_read_bio_DSAPrivateKey(BIO *bp, DSA **x,
213 \&                                        pem_password_cb *cb, void *u);
214 \&
215 \& DSA *PEM_read_DSAPrivateKey(FILE *fp, DSA **x,
216 \&                                        pem_password_cb *cb, void *u);
217 \&
218 \& int PEM_write_bio_DSAPrivateKey(BIO *bp, DSA *x, const EVP_CIPHER *enc,
219 \&                                        unsigned char *kstr, int klen,
220 \&                                        pem_password_cb *cb, void *u);
221 \&
222 \& int PEM_write_DSAPrivateKey(FILE *fp, DSA *x, const EVP_CIPHER *enc,
223 \&                                        unsigned char *kstr, int klen,
224 \&                                        pem_password_cb *cb, void *u);
225 \&
226 \& DSA *PEM_read_bio_DSA_PUBKEY(BIO *bp, DSA **x,
227 \&                                        pem_password_cb *cb, void *u);
228 \&
229 \& DSA *PEM_read_DSA_PUBKEY(FILE *fp, DSA **x,
230 \&                                        pem_password_cb *cb, void *u);
231 \&
232 \& int PEM_write_bio_DSA_PUBKEY(BIO *bp, DSA *x);
233 \&
234 \& int PEM_write_DSA_PUBKEY(FILE *fp, DSA *x);
235 \&
236 \& DSA *PEM_read_bio_DSAparams(BIO *bp, DSA **x, pem_password_cb *cb, void *u);
237 \&
238 \& DSA *PEM_read_DSAparams(FILE *fp, DSA **x, pem_password_cb *cb, void *u);
239 \&
240 \& int PEM_write_bio_DSAparams(BIO *bp, DSA *x);
241 \&
242 \& int PEM_write_DSAparams(FILE *fp, DSA *x);
243 \&
244 \& DH *PEM_read_bio_DHparams(BIO *bp, DH **x, pem_password_cb *cb, void *u);
245 \&
246 \& DH *PEM_read_DHparams(FILE *fp, DH **x, pem_password_cb *cb, void *u);
247 \&
248 \& int PEM_write_bio_DHparams(BIO *bp, DH *x);
249 \&
250 \& int PEM_write_DHparams(FILE *fp, DH *x);
251 \&
252 \& X509 *PEM_read_bio_X509(BIO *bp, X509 **x, pem_password_cb *cb, void *u);
253 \&
254 \& X509 *PEM_read_X509(FILE *fp, X509 **x, pem_password_cb *cb, void *u);
255 \&
256 \& int PEM_write_bio_X509(BIO *bp, X509 *x);
257 \&
258 \& int PEM_write_X509(FILE *fp, X509 *x);
259 \&
260 \& X509 *PEM_read_bio_X509_AUX(BIO *bp, X509 **x, pem_password_cb *cb, void *u);
261 \&
262 \& X509 *PEM_read_X509_AUX(FILE *fp, X509 **x, pem_password_cb *cb, void *u);
263 \&
264 \& int PEM_write_bio_X509_AUX(BIO *bp, X509 *x);
265 \&
266 \& int PEM_write_X509_AUX(FILE *fp, X509 *x);
267 \&
268 \& X509_REQ *PEM_read_bio_X509_REQ(BIO *bp, X509_REQ **x,
269 \&                                        pem_password_cb *cb, void *u);
270 \&
271 \& X509_REQ *PEM_read_X509_REQ(FILE *fp, X509_REQ **x,
272 \&                                        pem_password_cb *cb, void *u);
273 \&
274 \& int PEM_write_bio_X509_REQ(BIO *bp, X509_REQ *x);
275 \&
276 \& int PEM_write_X509_REQ(FILE *fp, X509_REQ *x);
277 \&
278 \& int PEM_write_bio_X509_REQ_NEW(BIO *bp, X509_REQ *x);
279 \&
280 \& int PEM_write_X509_REQ_NEW(FILE *fp, X509_REQ *x);
281 \&
282 \& X509_CRL *PEM_read_bio_X509_CRL(BIO *bp, X509_CRL **x,
283 \&                                        pem_password_cb *cb, void *u);
284 \& X509_CRL *PEM_read_X509_CRL(FILE *fp, X509_CRL **x,
285 \&                                        pem_password_cb *cb, void *u);
286 \& int PEM_write_bio_X509_CRL(BIO *bp, X509_CRL *x);
287 \& int PEM_write_X509_CRL(FILE *fp, X509_CRL *x);
288 \&
289 \& PKCS7 *PEM_read_bio_PKCS7(BIO *bp, PKCS7 **x, pem_password_cb *cb, void *u);
290 \&
291 \& PKCS7 *PEM_read_PKCS7(FILE *fp, PKCS7 **x, pem_password_cb *cb, void *u);
292 \&
293 \& int PEM_write_bio_PKCS7(BIO *bp, PKCS7 *x);
294 \&
295 \& int PEM_write_PKCS7(FILE *fp, PKCS7 *x);
296 \&
297 \& NETSCAPE_CERT_SEQUENCE *PEM_read_bio_NETSCAPE_CERT_SEQUENCE(BIO *bp,
298 \&                                                NETSCAPE_CERT_SEQUENCE **x,
299 \&                                                pem_password_cb *cb, void *u);
300 \&
301 \& NETSCAPE_CERT_SEQUENCE *PEM_read_NETSCAPE_CERT_SEQUENCE(FILE *fp,
302 \&                                                NETSCAPE_CERT_SEQUENCE **x,
303 \&                                                pem_password_cb *cb, void *u);
304 \&
305 \& int PEM_write_bio_NETSCAPE_CERT_SEQUENCE(BIO *bp, NETSCAPE_CERT_SEQUENCE *x);
306 \&
307 \& int PEM_write_NETSCAPE_CERT_SEQUENCE(FILE *fp, NETSCAPE_CERT_SEQUENCE *x);
308 .Ve
309 .SH "DESCRIPTION"
310 .IX Header "DESCRIPTION"
311 The \s-1PEM\s0 functions read or write structures in \s-1PEM\s0 format. In
312 this sense \s-1PEM\s0 format is simply base64 encoded data surrounded
313 by header lines.
314 .PP
315 For more details about the meaning of arguments see the
316 \&\fB\s-1PEM\s0 \s-1FUNCTION\s0 \s-1ARGUMENTS\s0\fR section.
317 .PP
318 Each operation has four functions associated with it. For
319 clarity the term "\fBfoobar\fR functions" will be used to collectively
320 refer to the \fIPEM_read_bio_foobar()\fR, \fIPEM_read_foobar()\fR,
321 \&\fIPEM_write_bio_foobar()\fR and \fIPEM_write_foobar()\fR functions.
322 .PP
323 The \fBPrivateKey\fR functions read or write a private key in
324 \&\s-1PEM\s0 format using an \s-1EVP_PKEY\s0 structure. The write routines use
325 \&\*(L"traditional\*(R" private key format and can handle both \s-1RSA\s0 and \s-1DSA\s0
326 private keys. The read functions can additionally transparently
327 handle PKCS#8 format encrypted and unencrypted keys too.
328 .PP
329 \&\fIPEM_write_bio_PKCS8PrivateKey()\fR and \fIPEM_write_PKCS8PrivateKey()\fR
330 write a private key in an \s-1EVP_PKEY\s0 structure in PKCS#8
331 EncryptedPrivateKeyInfo format using PKCS#5 v2.0 password based encryption
332 algorithms. The \fBcipher\fR argument specifies the encryption algoritm to
333 use: unlike all other \s-1PEM\s0 routines the encryption is applied at the
334 PKCS#8 level and not in the \s-1PEM\s0 headers. If \fBcipher\fR is \s-1NULL\s0 then no
335 encryption is used and a PKCS#8 PrivateKeyInfo structure is used instead.
336 .PP
337 \&\fIPEM_write_bio_PKCS8PrivateKey_nid()\fR and \fIPEM_write_PKCS8PrivateKey_nid()\fR
338 also write out a private key as a PKCS#8 EncryptedPrivateKeyInfo however
339 it uses PKCS#5 v1.5 or PKCS#12 encryption algorithms instead. The algorithm
340 to use is specified in the \fBnid\fR parameter and should be the \s-1NID\s0 of the
341 corresponding \s-1OBJECT\s0 \s-1IDENTIFIER\s0 (see \s-1NOTES\s0 section).
342 .PP
343 The \fB\s-1PUBKEY\s0\fR functions process a public key using an \s-1EVP_PKEY\s0
344 structure. The public key is encoded as a SubjectPublicKeyInfo
345 structure.
346 .PP
347 The \fBRSAPrivateKey\fR functions process an \s-1RSA\s0 private key using an
348 \&\s-1RSA\s0 structure. It handles the same formats as the \fBPrivateKey\fR
349 functions but an error occurs if the private key is not \s-1RSA\s0.
350 .PP
351 The \fBRSAPublicKey\fR functions process an \s-1RSA\s0 public key using an
352 \&\s-1RSA\s0 structure. The public key is encoded using a PKCS#1 RSAPublicKey
353 structure.
354 .PP
355 The \fB\s-1RSA_PUBKEY\s0\fR functions also process an \s-1RSA\s0 public key using
356 an \s-1RSA\s0 structure. However the public key is encoded using a
357 SubjectPublicKeyInfo structure and an error occurs if the public
358 key is not \s-1RSA\s0.
359 .PP
360 The \fBDSAPrivateKey\fR functions process a \s-1DSA\s0 private key using a
361 \&\s-1DSA\s0 structure. It handles the same formats as the \fBPrivateKey\fR
362 functions but an error occurs if the private key is not \s-1DSA\s0.
363 .PP
364 The \fB\s-1DSA_PUBKEY\s0\fR functions process a \s-1DSA\s0 public key using
365 a \s-1DSA\s0 structure. The public key is encoded using a
366 SubjectPublicKeyInfo structure and an error occurs if the public
367 key is not \s-1DSA\s0.
368 .PP
369 The \fBDSAparams\fR functions process \s-1DSA\s0 parameters using a \s-1DSA\s0
370 structure. The parameters are encoded using a foobar structure.
371 .PP
372 The \fBDHparams\fR functions process \s-1DH\s0 parameters using a \s-1DH\s0
373 structure. The parameters are encoded using a PKCS#3 DHparameter
374 structure.
375 .PP
376 The \fBX509\fR functions process an X509 certificate using an X509
377 structure. They will also process a trusted X509 certificate but
378 any trust settings are discarded.
379 .PP
380 The \fBX509_AUX\fR functions process a trusted X509 certificate using
381 an X509 structure.
382 .PP
383 The \fBX509_REQ\fR and \fBX509_REQ_NEW\fR functions process a PKCS#10
384 certificate request using an X509_REQ structure. The \fBX509_REQ\fR
385 write functions use \fB\s-1CERTIFICATE\s0 \s-1REQUEST\s0\fR in the header whereas
386 the \fBX509_REQ_NEW\fR functions use \fB\s-1NEW\s0 \s-1CERTIFICATE\s0 \s-1REQUEST\s0\fR
387 (as required by some CAs). The \fBX509_REQ\fR read functions will
388 handle either form so there are no \fBX509_REQ_NEW\fR read functions.
389 .PP
390 The \fBX509_CRL\fR functions process an X509 \s-1CRL\s0 using an X509_CRL
391 structure.
392 .PP
393 The \fB\s-1PKCS7\s0\fR functions process a PKCS#7 ContentInfo using a \s-1PKCS7\s0
394 structure.
395 .PP
396 The \fB\s-1NETSCAPE_CERT_SEQUENCE\s0\fR functions process a Netscape Certificate
397 Sequence using a \s-1NETSCAPE_CERT_SEQUENCE\s0 structure.
398 .SH "PEM FUNCTION ARGUMENTS"
399 .IX Header "PEM FUNCTION ARGUMENTS"
400 The \s-1PEM\s0 functions have many common arguments.
401 .PP
402 The \fBbp\fR \s-1BIO\s0 parameter (if present) specifies the \s-1BIO\s0 to read from
403 or write to.
404 .PP
405 The \fBfp\fR \s-1FILE\s0 parameter (if present) specifies the \s-1FILE\s0 pointer to
406 read from or write to.
407 .PP
408 The \s-1PEM\s0 read functions all take an argument \fB\s-1TYPE\s0 **x\fR and return
409 a \fB\s-1TYPE\s0 *\fR pointer. Where \fB\s-1TYPE\s0\fR is whatever structure the function
410 uses. If \fBx\fR is \s-1NULL\s0 then the parameter is ignored. If \fBx\fR is not
411 \&\s-1NULL\s0 but \fB*x\fR is \s-1NULL\s0 then the structure returned will be written
412 to \fB*x\fR. If neither \fBx\fR nor \fB*x\fR is \s-1NULL\s0 then an attempt is made
413 to reuse the structure at \fB*x\fR (but see \s-1BUGS\s0 and \s-1EXAMPLES\s0 sections).
414 Irrespective of the value of \fBx\fR a pointer to the structure is always
415 returned (or \s-1NULL\s0 if an error occurred).
416 .PP
417 The \s-1PEM\s0 functions which write private keys take an \fBenc\fR parameter
418 which specifies the encryption algorithm to use, encryption is done
419 at the \s-1PEM\s0 level. If this parameter is set to \s-1NULL\s0 then the private
420 key is written in unencrypted form.
421 .PP
422 The \fBcb\fR argument is the callback to use when querying for the pass
423 phrase used for encrypted \s-1PEM\s0 structures (normally only private keys).
424 .PP
425 For the \s-1PEM\s0 write routines if the \fBkstr\fR parameter is not \s-1NULL\s0 then
426 \&\fBklen\fR bytes at \fBkstr\fR are used as the passphrase and \fBcb\fR is
427 ignored.
428 .PP
429 If the \fBcb\fR parameters is set to \s-1NULL\s0 and the \fBu\fR parameter is not
430 \&\s-1NULL\s0 then the \fBu\fR parameter is interpreted as a null terminated string
431 to use as the passphrase. If both \fBcb\fR and \fBu\fR are \s-1NULL\s0 then the
432 default callback routine is used which will typically prompt for the
433 passphrase on the current terminal with echoing turned off.
434 .PP
435 The default passphrase callback is sometimes inappropriate (for example
436 in a \s-1GUI\s0 application) so an alternative can be supplied. The callback
437 routine has the following form:
438 .PP
439 .Vb 1
440 \& int cb(char *buf, int size, int rwflag, void *u);
441 .Ve
442 .PP
443 \&\fBbuf\fR is the buffer to write the passphrase to. \fBsize\fR is the maximum
444 length of the passphrase (i.e. the size of buf). \fBrwflag\fR is a flag
445 which is set to 0 when reading and 1 when writing. A typical routine
446 will ask the user to verify the passphrase (for example by prompting
447 for it twice) if \fBrwflag\fR is 1. The \fBu\fR parameter has the same
448 value as the \fBu\fR parameter passed to the \s-1PEM\s0 routine. It allows
449 arbitrary data to be passed to the callback by the application
450 (for example a window handle in a \s-1GUI\s0 application). The callback
451 \&\fBmust\fR return the number of characters in the passphrase or 0 if
452 an error occurred.
453 .SH "EXAMPLES"
454 .IX Header "EXAMPLES"
455 Although the \s-1PEM\s0 routines take several arguments in almost all applications
456 most of them are set to 0 or \s-1NULL\s0.
457 .PP
458 Read a certificate in \s-1PEM\s0 format from a \s-1BIO:\s0
459 .PP
460 .Vb 6
461 \& X509 *x;
462 \& x = PEM_read_bio_X509(bp, NULL, 0, NULL);
463 \& if (x == NULL)
464 \&        {
465 \&        /* Error */
466 \&        }
467 .Ve
468 .PP
469 Alternative method:
470 .PP
471 .Vb 5
472 \& X509 *x = NULL;
473 \& if (!PEM_read_bio_X509(bp, &x, 0, NULL))
474 \&        {
475 \&        /* Error */
476 \&        }
477 .Ve
478 .PP
479 Write a certificate to a \s-1BIO:\s0
480 .PP
481 .Vb 4
482 \& if (!PEM_write_bio_X509(bp, x))
483 \&        {
484 \&        /* Error */
485 \&        }
486 .Ve
487 .PP
488 Write an unencrypted private key to a \s-1FILE\s0 pointer:
489 .PP
490 .Vb 4
491 \& if (!PEM_write_PrivateKey(fp, key, NULL, NULL, 0, 0, NULL))
492 \&        {
493 \&        /* Error */
494 \&        }
495 .Ve
496 .PP
497 Write a private key (using traditional format) to a \s-1BIO\s0 using
498 triple \s-1DES\s0 encryption, the pass phrase is prompted for:
499 .PP
500 .Vb 4
501 \& if (!PEM_write_bio_PrivateKey(bp, key, EVP_des_ede3_cbc(), NULL, 0, 0, NULL))
502 \&        {
503 \&        /* Error */
504 \&        }
505 .Ve
506 .PP
507 Write a private key (using PKCS#8 format) to a \s-1BIO\s0 using triple
508 \&\s-1DES\s0 encryption, using the pass phrase \*(L"hello\*(R":
509 .PP
510 .Vb 4
511 \& if (!PEM_write_bio_PKCS8PrivateKey(bp, key, EVP_des_ede3_cbc(), NULL, 0, 0, "hello"))
512 \&        {
513 \&        /* Error */
514 \&        }
515 .Ve
516 .PP
517 Read a private key from a \s-1BIO\s0 using the pass phrase \*(L"hello\*(R":
518 .PP
519 .Vb 5
520 \& key = PEM_read_bio_PrivateKey(bp, NULL, 0, "hello");
521 \& if (key == NULL)
522 \&        {
523 \&        /* Error */
524 \&        }
525 .Ve
526 .PP
527 Read a private key from a \s-1BIO\s0 using a pass phrase callback:
528 .PP
529 .Vb 5
530 \& key = PEM_read_bio_PrivateKey(bp, NULL, pass_cb, "My Private Key");
531 \& if (key == NULL)
532 \&        {
533 \&        /* Error */
534 \&        }
535 .Ve
536 .PP
537 Skeleton pass phrase callback:
538 .PP
539 .Vb 6
540 \& int pass_cb(char *buf, int size, int rwflag, void *u);
541 \&        {
542 \&        int len;
543 \&        char *tmp;
544 \&        /* We\*(Aqd probably do something else if \*(Aqrwflag\*(Aq is 1 */
545 \&        printf("Enter pass phrase for \e"%s\e"\en", u);
546 \&
547 \&        /* get pass phrase, length \*(Aqlen\*(Aq into \*(Aqtmp\*(Aq */
548 \&        tmp = "hello";
549 \&        len = strlen(tmp);
550 \&
551 \&        if (len <= 0) return 0;
552 \&        /* if too long, truncate */
553 \&        if (len > size) len = size;
554 \&        memcpy(buf, tmp, len);
555 \&        return len;
556 \&        }
557 .Ve
558 .SH "NOTES"
559 .IX Header "NOTES"
560 The old \fBPrivateKey\fR write routines are retained for compatibility.
561 New applications should write private keys using the
562 \&\fIPEM_write_bio_PKCS8PrivateKey()\fR or \fIPEM_write_PKCS8PrivateKey()\fR routines
563 because they are more secure (they use an iteration count of 2048 whereas
564 the traditional routines use a count of 1) unless compatibility with older
565 versions of OpenSSL is important.
566 .PP
567 The \fBPrivateKey\fR read routines can be used in all applications because
568 they handle all formats transparently.
569 .PP
570 A frequent cause of problems is attempting to use the \s-1PEM\s0 routines like
571 this:
572 .PP
573 .Vb 2
574 \& X509 *x;
575 \& PEM_read_bio_X509(bp, &x, 0, NULL);
576 .Ve
577 .PP
578 this is a bug because an attempt will be made to reuse the data at \fBx\fR
579 which is an uninitialised pointer.
580 .SH "PEM ENCRYPTION FORMAT"
581 .IX Header "PEM ENCRYPTION FORMAT"
582 This old \fBPrivateKey\fR routines use a non standard technique for encryption.
583 .PP
584 The private key (or other data) takes the following form:
585 .PP
586 .Vb 3
587 \& \-\-\-\-\-BEGIN RSA PRIVATE KEY\-\-\-\-\-
588 \& Proc\-Type: 4,ENCRYPTED
589 \& DEK\-Info: DES\-EDE3\-CBC,3F17F5316E2BAC89
590 \&
591 \& ...base64 encoded data...
592 \& \-\-\-\-\-END RSA PRIVATE KEY\-\-\-\-\-
593 .Ve
594 .PP
595 The line beginning DEK-Info contains two comma separated pieces of information:
596 the encryption algorithm name as used by \fIEVP_get_cipherbyname()\fR and an 8
597 byte \fBsalt\fR encoded as a set of hexadecimal digits.
598 .PP
599 After this is the base64 encoded encrypted data.
600 .PP
601 The encryption key is determined using \fIEVP_bytestokey()\fR, using \fBsalt\fR and an
602 iteration count of 1. The \s-1IV\s0 used is the value of \fBsalt\fR and *not* the \s-1IV\s0
603 returned by \fIEVP_bytestokey()\fR.
604 .SH "BUGS"
605 .IX Header "BUGS"
606 The \s-1PEM\s0 read routines in some versions of OpenSSL will not correctly reuse
607 an existing structure. Therefore the following:
608 .PP
609 .Vb 1
610 \& PEM_read_bio_X509(bp, &x, 0, NULL);
611 .Ve
612 .PP
613 where \fBx\fR already contains a valid certificate, may not work, whereas:
614 .PP
615 .Vb 2
616 \& X509_free(x);
617 \& x = PEM_read_bio_X509(bp, NULL, 0, NULL);
618 .Ve
619 .PP
620 is guaranteed to work.
621 .SH "RETURN CODES"
622 .IX Header "RETURN CODES"
623 The read routines return either a pointer to the structure read or \s-1NULL\s0
624 if an error occurred.
625 .PP
626 The write routines return 1 for success or 0 for failure.