]> git.ipfire.org Git - thirdparty/openssl.git/blame - doc/man3/d2i_PrivateKey.pod
Make BIGNUM rand functions available within the FIPS module
[thirdparty/openssl.git] / doc / man3 / d2i_PrivateKey.pod
CommitLineData
b1b3e14f
DSH
1=pod
2
3=head1 NAME
4
6aa2e59e
SL
5d2i_PrivateKey, d2i_PublicKey, d2i_KeyParams, d2i_AutoPrivateKey,
6i2d_PrivateKey, i2d_PublicKey, i2d_KeyParams, i2d_KeyParams_bio,
7d2i_PrivateKey_bio, d2i_PrivateKey_fp, d2i_KeyParams_bio
4692340e 8- decode and encode functions for reading and saving EVP_PKEY structures
b1b3e14f
DSH
9
10=head1 SYNOPSIS
11
12 #include <openssl/evp.h>
13
14 EVP_PKEY *d2i_PrivateKey(int type, EVP_PKEY **a, const unsigned char **pp,
15 long length);
24b0be11
RS
16 EVP_PKEY *d2i_PublicKey(int type, EVP_PKEY **a, const unsigned char **pp,
17 long length);
6aa2e59e
SL
18 EVP_PKEY *d2i_KeyParams(int type, EVP_PKEY **a, const unsigned char **pp,
19 long length);
b1b3e14f
DSH
20 EVP_PKEY *d2i_AutoPrivateKey(EVP_PKEY **a, const unsigned char **pp,
21 long length);
6aa2e59e 22
9fdcc21f
DO
23 int i2d_PrivateKey(const EVP_PKEY *a, unsigned char **pp);
24 int i2d_PublicKey(const EVP_PKEY *a, unsigned char **pp);
6aa2e59e
SL
25 int i2d_KeyParams(const EVP_PKEY *a, unsigned char **pp);
26 int i2d_KeyParams_bio(BIO *bp, const EVP_PKEY *pkey);
b1b3e14f 27
4692340e
RS
28 EVP_PKEY *d2i_PrivateKey_bio(BIO *bp, EVP_PKEY **a);
29 EVP_PKEY *d2i_PrivateKey_fp(FILE *fp, EVP_PKEY **a)
6aa2e59e 30 EVP_PKEY *d2i_KeyParams_bio(int type, EVP_PKEY **a, BIO *in);
4692340e 31
b1b3e14f
DSH
32=head1 DESCRIPTION
33
34d2i_PrivateKey() decodes a private key using algorithm B<type>. It attempts to
35use any key specific format or PKCS#8 unencrypted PrivateKeyInfo format. The
36B<type> parameter should be a public key algorithm constant such as
37B<EVP_PKEY_RSA>. An error occurs if the decoded key does not match B<type>.
24b0be11 38d2i_PublicKey() does the same for public keys.
6aa2e59e 39d2i_KeyParams() does the same for domain parameter keys.
b1b3e14f
DSH
40
41d2i_AutoPrivateKey() is similar to d2i_PrivateKey() except it attempts to
42automatically detect the private key format.
43
44i2d_PrivateKey() encodes B<key>. It uses a key specific format or, if none is
45defined for that key type, PKCS#8 unencrypted PrivateKeyInfo format.
24b0be11 46i2d_PublicKey() does the same for public keys.
6aa2e59e 47i2d_KeyParams() does the same for domain parameter keys.
4692340e 48These functions are similar to the d2i_X509() functions; see L<d2i_X509(3)>.
b1b3e14f
DSH
49
50=head1 NOTES
51
52All these functions use DER format and unencrypted keys. Applications wishing
53to encrypt or decrypt private keys should use other functions such as
dd07e68b 54d2i_PKCS8PrivateKey() instead.
b1b3e14f
DSH
55
56If the B<*a> is not NULL when calling d2i_PrivateKey() or d2i_AutoPrivateKey()
57(i.e. an existing structure is being reused) and the key format is PKCS#8
58then B<*a> will be freed and replaced on a successful call.
59
1980ce45
TS
60To decode a key with type B<EVP_PKEY_EC>, d2i_PublicKey() requires B<*a> to be
61a non-NULL EVP_PKEY structure assigned an EC_KEY structure referencing the proper
62EC_GROUP.
63
b1b3e14f
DSH
64=head1 RETURN VALUES
65
1980ce45 66The d2i_PrivateKey(), d2i_AutoPrivateKey(), d2i_PrivateKey_bio(), d2i_PrivateKey_fp(),
6aa2e59e
SL
67d2i_PublicKey(), d2i_KeyParams() and d2i_KeyParams_bio() functions return a valid
68B<EVP_KEY> structure or B<NULL> if an error occurs. The error code can be
69obtained by calling L<ERR_get_error(3)>.
b1b3e14f 70
6aa2e59e
SL
71i2d_PrivateKey(), i2d_PublicKey(), i2d_KeyParams() i2d_KeyParams_bio() return
72the number of bytes successfully encoded or a negative value if an error occurs.
73The error code can be obtained by calling L<ERR_get_error(3)>.
b1b3e14f
DSH
74
75=head1 SEE ALSO
76
b97fdb57 77L<crypto(7)>,
9e183d22 78L<d2i_PKCS8PrivateKey_bio(3)>
b1b3e14f 79
e2f92610
RS
80=head1 COPYRIGHT
81
1980ce45 82Copyright 2017-2019 The OpenSSL Project Authors. All Rights Reserved.
e2f92610 83
4746f25a 84Licensed under the Apache License 2.0 (the "License"). You may not use
e2f92610
RS
85this file except in compliance with the License. You can obtain a copy
86in the file LICENSE in the source distribution or at
87L<https://www.openssl.org/source/license.html>.
88
89=cut