EC_GROUP_GET_CURVE_NAME(3) | Library Functions Manual | EC_GROUP_GET_CURVE_NAME(3)

# NAME

`EC_GROUP_get_curve_name`, `EC_GROUP_set_curve_name`, `EC_GROUP_get_asn1_flag`, `EC_GROUP_set_asn1_flag`, `EC_GROUP_get0_seed`, `EC_GROUP_get_seed_len`, `EC_GROUP_set_seed`, `EC_GROUP_get_point_conversion_form`, `EC_GROUP_set_point_conversion_form`, `EC_GROUP_get_basis_type` — configure and inspect details of the ASN.1 encoding of EC_GROUP and related objects

# SYNOPSIS

library “libcrypto”
`#include <openssl/ec.h>`

int
`EC_GROUP_get_curve_name`(const EC_GROUP *group);

void
`EC_GROUP_set_curve_name`(EC_GROUP *group, int nid);

int
`EC_GROUP_get_asn1_flag`(const EC_GROUP *group);

void
`EC_GROUP_set_asn1_flag`(EC_GROUP *group, int flag);

unsigned char *
`EC_GROUP_get0_seed`(const EC_GROUP *group);

size_t
`EC_GROUP_get_seed_len`(const EC_GROUP *group);

size_t
`EC_GROUP_set_seed`(EC_GROUP *group, const unsigned char *seed, size_t len);

    typedef enum {
    	POINT_CONVERSION_COMPRESSED = 2,
    	POINT_CONVERSION_UNCOMPRESSED = 4,
    	POINT_CONVERSION_HYBRID = 6
    } point_conversion_form_t;

point_conversion_form_t
`EC_GROUP_get_point_conversion_form`(const EC_GROUP *group);

void
`EC_GROUP_set_point_conversion_form`(EC_GROUP *group, point_conversion_form_t form);

Deprecated:

int
`EC_GROUP_get_basis_type`(const EC_GROUP *group);

# DESCRIPTION

The functions in this manual affect or allow the inspection of the details of the ASN.1 encoding produced by the i2d_ECPKParameters(3) family of functions. Modern applications use named curves and uncompressed point encoding, which are the default for EC_GROUP_new_by_curve_name(3).

In this library, Elliptic curve parameters are either encoded as a named curve, using an ASN.1 Object Identifier (OID) to refer to standardized parameters that need to be built into the library, or using explicit curve parameters where the field, the curve equation, the base point's coordinates and other data are encoded explicitly. The implicitly CA variant is not supported.

`EC_GROUP_get_curve_name`() gets the Numerical Identifier (NID) representation of the ASN.1 Object Identifier used for the named curve encoding of group. `EC_GROUP_set_curve_name`() sets it to nid.

`EC_GROUP_get_asn1_flag`() retrieves the value of the asn1_flag member of group. If the bit corresponding to `OPENSSL_EC_NAMED_CURVE` is set, named curve encoding is used for group, otherwise explicit encoding is used. `EC_GROUP_set_asn1_flag`() sets the asn1_flag member of group to flag, which should be either `OPENSSL_EC_NAMED_CURVE` to use named curve encoding or `OPENSSL_EC_EXPLICIT_CURVE` to use explicit encoding.

The ASN.1 encoding of explicit curve parameters includes an optional seed value for parameters generated verifiably at random. If a seed value is set on group, `EC_GROUP_get0_seed`() returns a pointer to the internal byte string whose length is returned by `EC_GROUP_get_seed_len`().

`EC_GROUP_set_seed`() first clears any seed and length already stored in group. If seed is not `NULL` and len is not zero, it stores a copy of them in group. The seed should be a random byte string of len at least 20 bytes. The seed can be unset by passing `NULL` as a seed and a len of zero. The library does not perform any computation or validation with this seed, it only includes it in its ASN.1 encoded parameters, whether it contains a sensible value or not.

Points on an elliptic curve, such as the generator or a public key, can be encoded in compressed form, uncompressed form, or in a hybrid form encompassing both, see EC_POINT_point2oct(3). `EC_GROUP_get_point_conversion_form`() retrieves the encoding used for points on group and `EC_GROUP_set_point_conversion_form`() sets it to form.

The deprecated `EC_GROUP_get_basis_type`() only makes sense for curves over binary fields. It is provided for compatibility only.

# RETURN VALUES

`EC_GROUP_get_curve_name`() returns the NID to be used for named curve encoding of group or `NID_undef` if no NID is set.

`EC_GROUP_get_asn1_flag`() returns the value most recently set by `EC_GROUP_set_asn1_flag`() on group.

`EC_GROUP_get0_seed`() returns an internal pointer to the seed on group or `NULL` if none is set.

`EC_GROUP_get_seed_len`() returns the byte length of the seed set on group or zero if none is set.

`EC_GROUP_set_seed`() returns 0 on memory allocation failure. It returns len on success unless seed is `NULL` or len is zero, in which case it returns 1.

`EC_GROUP_get_point_conversion_form`() returns the point conversion form last set by `EC_GROUP_set_point_conversion_form`() on group.

`EC_GROUP_get_basis_type`() always returns `NID_undef`.

# SEE ALSO

crypto(3), d2i_ECPKParameters(3), EC_GROUP_check(3), EC_GROUP_new_by_curve_name(3), EC_GROUP_new_curve_GFp(3), EC_KEY_METHOD_new(3), EC_KEY_new(3), EC_POINT_add(3), EC_POINT_get_affine_coordinates(3), EC_POINT_new(3), EC_POINT_point2oct(3), ECDH_compute_key(3), ECDSA_SIG_new(3), OBJ_obj2nid(3)

# HISTORY

These functions first appeared in OpenSSL 0.9.8 and have been available since OpenBSD 4.5.

# BUGS

Most of the setters cannot report errors and none of them perform proper input validation and accept most of the values passed in. This can result in invalid or nonsensical ASN.1 encoding produced by i2d_ECPKParameters(3) and related functions.

June 13, 2025 | Debian