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
#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.