1*2175Sjp161948=pod
2*2175Sjp161948
3*2175Sjp161948=head1 NAME
4*2175Sjp161948
5*2175Sjp161948d2i_PKCS8PrivateKey_bio, d2i_PKCS8PrivateKey_fp,
6*2175Sjp161948i2d_PKCS8PrivateKey_bio, i2d_PKCS8PrivateKey_fp,
7*2175Sjp161948i2d_PKCS8PrivateKey_nid_bio, i2d_PKCS8PrivateKey_nid_fp - PKCS#8 format private key functions
8*2175Sjp161948
9*2175Sjp161948=head1 SYNOPSIS
10*2175Sjp161948
11*2175Sjp161948 #include <openssl/evp.h>
12*2175Sjp161948
13*2175Sjp161948 EVP_PKEY *d2i_PKCS8PrivateKey_bio(BIO *bp, EVP_PKEY **x, pem_password_cb *cb, void *u);
14*2175Sjp161948 EVP_PKEY *d2i_PKCS8PrivateKey_fp(FILE *fp, EVP_PKEY **x, pem_password_cb *cb, void *u);
15*2175Sjp161948
16*2175Sjp161948 int i2d_PKCS8PrivateKey_bio(BIO *bp, EVP_PKEY *x, const EVP_CIPHER *enc,
17*2175Sjp161948				  char *kstr, int klen,
18*2175Sjp161948				  pem_password_cb *cb, void *u);
19*2175Sjp161948
20*2175Sjp161948 int i2d_PKCS8PrivateKey_fp(FILE *fp, EVP_PKEY *x, const EVP_CIPHER *enc,
21*2175Sjp161948				  char *kstr, int klen,
22*2175Sjp161948				  pem_password_cb *cb, void *u);
23*2175Sjp161948
24*2175Sjp161948 int i2d_PKCS8PrivateKey_nid_bio(BIO *bp, EVP_PKEY *x, int nid,
25*2175Sjp161948				  char *kstr, int klen,
26*2175Sjp161948				  pem_password_cb *cb, void *u);
27*2175Sjp161948
28*2175Sjp161948 int i2d_PKCS8PrivateKey_nid_fp(FILE *fp, EVP_PKEY *x, int nid,
29*2175Sjp161948				  char *kstr, int klen,
30*2175Sjp161948				  pem_password_cb *cb, void *u);
31*2175Sjp161948
32*2175Sjp161948=head1 DESCRIPTION
33*2175Sjp161948
34*2175Sjp161948The PKCS#8 functions encode and decode private keys in PKCS#8 format using both
35*2175Sjp161948PKCS#5 v1.5 and PKCS#5 v2.0 password based encryption algorithms.
36*2175Sjp161948
37*2175Sjp161948Other than the use of DER as opposed to PEM these functions are identical to the
38*2175Sjp161948corresponding B<PEM> function as described in the L<pem(3)|pem(3)> manual page.
39*2175Sjp161948
40*2175Sjp161948=head1 NOTES
41*2175Sjp161948
42*2175Sjp161948Before using these functions L<OpenSSL_add_all_algorithms(3)|OpenSSL_add_all_algorithms(3)>
43*2175Sjp161948should be called to initialize the internal algorithm lookup tables otherwise errors about
44*2175Sjp161948unknown algorithms will occur if an attempt is made to decrypt a private key.
45*2175Sjp161948
46*2175Sjp161948These functions are currently the only way to store encrypted private keys using DER format.
47*2175Sjp161948
48*2175Sjp161948Currently all the functions use BIOs or FILE pointers, there are no functions which
49*2175Sjp161948work directly on memory: this can be readily worked around by converting the buffers
50*2175Sjp161948to memory BIOs, see L<BIO_s_mem(3)|BIO_s_mem(3)> for details.
51*2175Sjp161948
52*2175Sjp161948=head1 SEE ALSO
53*2175Sjp161948
54*2175Sjp161948L<pem(3)|pem(3)>
55*2175Sjp161948
56*2175Sjp161948=cut
57