NAME
d2i_PrivateKey
,
d2i_AutoPrivateKey
,
i2d_PrivateKey
,
d2i_PrivateKey_bio
,
d2i_PrivateKey_fp
,
i2d_PKCS8PrivateKeyInfo_bio
,
i2d_PKCS8PrivateKeyInfo_fp
,
d2i_PublicKey
, i2d_PublicKey
— decode and encode EVP_PKEY
objects
SYNOPSIS
#include
<openssl/evp.h>
EVP_PKEY *
d2i_PrivateKey
(int type,
EVP_PKEY **val_out, const unsigned
char **des_in, long length);
EVP_PKEY *
d2i_AutoPrivateKey
(EVP_PKEY
**val_out, const unsigned char **des_in,
long length);
int
i2d_PrivateKey
(EVP_PKEY *val_in,
unsigned char **des_out);
EVP_PKEY *
d2i_PrivateKey_bio
(BIO *in_bio,
EVP_PKEY **val_out);
EVP_PKEY *
d2i_PrivateKey_fp
(FILE *in_fp,
EVP_PKEY **val_out);
int
i2d_PKCS8PrivateKeyInfo_bio
(BIO
*out_bio, EVP_PKEY *val_in);
int
i2d_PKCS8PrivateKeyInfo_fp
(FILE
*out_fp, EVP_PKEY *val_in);
EVP_PKEY *
d2i_PublicKey
(int type,
EVP_PKEY **val_out, const unsigned
char **des_in, long length);
int
i2d_PublicKey
(EVP_PKEY *val_in,
unsigned char **des_out);
DESCRIPTION
These are algorithm-independent interfaces to decode and encode private and public keys. For details about the semantics, examples, caveats, and bugs, see ASN1_item_d2i(3).
d2i_PrivateKey
()
decodes a private key using algorithm type. It
attempts to use any algorithm specific format or the PKCS#8 unencrypted
PrivateKeyInfo format defined in RFC 5208 section 5.
The type parameter should be a public key algorithm
constant such as EVP_PKEY_RSA
. An error occurs if
the decoded key does not match type.
d2i_AutoPrivateKey
()
is similar to d2i_PrivateKey
() except that it
attempts to automatically detect the algorithm.
d2i_PrivateKey_bio
()
and
d2i_PrivateKey_fp
()
are similar to d2i_PrivateKey
() except that they
read from a BIO or FILE
pointer.
i2d_PrivateKey
()
encodes val_in. It uses an algorithm specific format
or, if none is defined for that key type, the PKCS#8 unencrypted
PrivateKeyInfo format.
i2d_PKCS8PrivateKeyInfo_bio
()
and
i2d_PKCS8PrivateKeyInfo_fp
()
encode val_in in PKCS#8 unencrypted
PrivateKeyInfo format. They are similar to
i2d_PrivateKey
() except that they don't use any
algorithm-specific formats and that they write to a
BIO or FILE pointer rather than
to a buffer.
All these functions use DER format and unencrypted keys. Applications wishing to encrypt or decrypt private keys should use other functions such as d2i_PKCS8PrivateKey_bio(3) instead.
If *val_out is not
NULL
when calling
d2i_PrivateKey
()
or d2i_AutoPrivateKey
() (i.e. an existing structure
is being reused) and the key format is PKCS#8, then
*val_out will be freed and replaced on a successful
call.
d2i_PublicKey
()
calls
d2i_DSAPublicKey(3),
o2i_ECPublicKey(3), or
d2i_RSAPublicKey(3) depending on type
and stores the result in the returned EVP_PKEY
object.
i2d_PublicKey
()
calls
i2d_DSAPublicKey(3),
i2o_ECPublicKey(3), or
i2d_RSAPublicKey(3) depending on the algorithm used by
val_in.
RETURN VALUES
d2i_PrivateKey
(),
d2i_AutoPrivateKey
(),
d2i_PrivateKey_bio
(),
d2i_PrivateKey_fp
(), and
d2i_PublicKey
() return a valid
EVP_PKEY structure or NULL
if
an error occurs.
i2d_PrivateKey
() and
i2d_PublicKey
() return the number of bytes
successfully encoded or a negative value if an error occurs.
i2d_PKCS8PrivateKeyInfo_bio
() and
i2d_PKCS8PrivateKeyInfo_fp
() return 1 for success or
0 if an error occurs.
For all functions, the error code can be obtained by calling ERR_get_error(3).
SEE ALSO
d2i_PKCS8_PRIV_KEY_INFO(3), d2i_PKCS8PrivateKey_bio(3), EVP_PKEY_new(3), EVP_PKEY_type(3), PEM_write_PrivateKey(3), PKCS8_PRIV_KEY_INFO_new(3)
STANDARDS
RFC 5208: Public-Key Cryptography Standards (PKCS) #8: Private-Key Information Syntax Specification
HISTORY
d2i_PrivateKey
(),
i2d_PrivateKey
(),
d2i_PublicKey
(), and
i2d_PublicKey
() first appeared in SSLeay 0.6.0 and
have been available since OpenBSD 2.4.
d2i_AutoPrivateKey
(),
d2i_PrivateKey_bio
(),
i2d_PrivateKey_bio
(),
d2i_PrivateKey_fp
(),
i2d_PrivateKey_fp
(),
i2d_PKCS8PrivateKeyInfo_bio
(), and
i2d_PKCS8PrivateKeyInfo_fp
() first appeared in
OpenSSL 0.9.5 and have been available since OpenBSD
2.7.