---
name: "d2i_ECPrivate_key"
section: "3ssl"
platform: "linux"
package: "libssl-doc"
version: "1.0.1t-1+deb8u8"
release: "Debian 8 (Jessie)"
platforms: ["linux"]
url: "https://carta.tech/man/d2i_ECPrivateKey"
---

# d2i\_ECPrivate\_key(3ssl)

Encode and decode functions for saving and reading EC\_KEY structures

Part of [d2i\_ECPrivateKey(3ssl)](/man/d2i_ECPrivateKey/3ssl.md).

## NAME

i2d\_ECPrivateKey, d2i\_ECPrivate\_key - Encode and decode functions for saving and reading EC\_KEY structures

## SYNOPSIS

```
 #include <openssl/ec.h>
 EC_KEY *d2i_ECPrivateKey(EC_KEY **key, const unsigned char **in, long len);
 int i2d_ECPrivateKey(EC_KEY *key, unsigned char **out);
 unsigned int EC_KEY_get_enc_flags(const EC_KEY *key);
 void EC_KEY_set_enc_flags(EC_KEY *eckey, unsigned int flags);
```

## DESCRIPTION

The ECPrivateKey encode and decode routines encode and parse an **EC\_KEY** structure into a binary format (ASN.1 DER) and back again.

These functions are similar to the *d2i\_X509()* functions, and you should refer to that page for a detailed description (see *d2i\_X509*(3)).

The format of the external representation of the public key written by i2d\_ECPrivateKey (such as whether it is stored in a compressed form or not) is described by the point\_conversion\_form. See *EC\_GROUP\_copy*(3) for a description of point\_conversion\_form.

When reading a private key encoded without an associated public key (e.g. if EC\_PKEY\_NO\_PUBKEY has been used - see below), then d2i\_ECPrivateKey generates the missing public key automatically. Private keys encoded without parameters (e.g. if EC\_PKEY\_NO\_PARAMETERS has been used - see below) cannot be loaded using d2i\_ECPrivateKey.

The functions EC\_KEY\_get\_enc\_flags and EC\_KEY\_set\_enc\_flags get and set the value of the encoding flags for the **key**. There are two encoding flags currently defined - EC\_PKEY\_NO\_PARAMETERS and EC\_PKEY\_NO\_PUBKEY.  These flags define the behaviour of how the  **key** is converted into ASN1 in a call to i2d\_ECPrivateKey. If EC\_PKEY\_NO\_PARAMETERS is set then the public parameters for the curve are not encoded along with the private key. If EC\_PKEY\_NO\_PUBKEY is set then the public key is not encoded along with the private key.

## RETURN VALUES

*d2i\_ECPrivateKey()* returns a valid **EC\_KEY** structure or **NULL** if an error occurs. The error code that can be obtained by *ERR\_get\_error*(3).

*i2d\_ECPrivateKey()* returns the number of bytes successfully encoded or a negative value if an error occurs. The error code can be obtained by *ERR\_get\_error*(3).

EC\_KEY\_get\_enc\_flags returns the value of the current encoding flags for the EC\_KEY.

## SEE ALSO

[*crypto*(3)](/man/crypto/3.md), *ec*(3), *EC\_GROUP\_new*(3), *EC\_GROUP\_copy*(3), *EC\_POINT\_new*(3), *EC\_POINT\_add*(3), *EC\_GFp\_simple\_method*(3), *d2i\_ECPKParameters*(3), *d2i\_ECPrivateKey*(3)
