- NAME
- SYNOPSIS
- DESCRIPTION
- RETURN VALUES
- SEE ALSO
- COPYRIGHT

# NAME

EC_GROUP_get0_order, EC_GROUP_order_bits, EC_GROUP_get0_cofactor, EC_GROUP_copy, EC_GROUP_dup, EC_GROUP_method_of, EC_GROUP_set_generator, EC_GROUP_get0_generator, EC_GROUP_get_order, EC_GROUP_get_cofactor, EC_GROUP_set_curve_name, EC_GROUP_get_curve_name, EC_GROUP_set_asn1_flag, EC_GROUP_get_asn1_flag, EC_GROUP_set_point_conversion_form, EC_GROUP_get_point_conversion_form, EC_GROUP_get0_seed, EC_GROUP_get_seed_len, EC_GROUP_set_seed, EC_GROUP_get_degree, EC_GROUP_check, EC_GROUP_check_discriminant, EC_GROUP_cmp, EC_GROUP_get_basis_type, EC_GROUP_get_trinomial_basis, EC_GROUP_get_pentanomial_basis - Functions for manipulating EC_GROUP objects

# SYNOPSIS

     #include <openssl/ec.h>

     int EC_GROUP_copy(EC_GROUP *dst, const EC_GROUP *src);
     EC_GROUP *EC_GROUP_dup(const EC_GROUP *src);

     const EC_METHOD *EC_GROUP_method_of(const EC_GROUP *group);

     int EC_GROUP_set_generator(EC_GROUP *group, const EC_POINT *generator, const BIGNUM *order, const BIGNUM *cofactor);
     const EC_POINT *EC_GROUP_get0_generator(const EC_GROUP *group);

     int EC_GROUP_get_order(const EC_GROUP *group, BIGNUM *order, BN_CTX *ctx);
     const BIGNUM *EC_GROUP_get0_order(const EC_GROUP *group);
     int EC_GROUP_order_bits(const EC_GROUP *group);
     int EC_GROUP_get_cofactor(const EC_GROUP *group, BIGNUM *cofactor, BN_CTX *ctx);
     const BIGNUM *EC_GROUP_get0_cofactor(const EC_GROUP *group);

     void EC_GROUP_set_curve_name(EC_GROUP *group, int nid);
     int EC_GROUP_get_curve_name(const EC_GROUP *group);

     void EC_GROUP_set_asn1_flag(EC_GROUP *group, int flag);
     int EC_GROUP_get_asn1_flag(const EC_GROUP *group);

     void EC_GROUP_set_point_conversion_form(EC_GROUP *group, point_conversion_form_t form);
     point_conversion_form_t EC_GROUP_get_point_conversion_form(const EC_GROUP *);

     unsigned char *EC_GROUP_get0_seed(const EC_GROUP *x);
     size_t EC_GROUP_get_seed_len(const EC_GROUP *);
     size_t EC_GROUP_set_seed(EC_GROUP *, const unsigned char *, size_t len);

     int EC_GROUP_get_degree(const EC_GROUP *group);

     int EC_GROUP_check(const EC_GROUP *group, BN_CTX *ctx);

     int EC_GROUP_check_discriminant(const EC_GROUP *group, BN_CTX *ctx);

     int EC_GROUP_cmp(const EC_GROUP *a, const EC_GROUP *b, BN_CTX *ctx);

     int EC_GROUP_get_basis_type(const EC_GROUP *);
     int EC_GROUP_get_trinomial_basis(const EC_GROUP *, unsigned int *k);
     int EC_GROUP_get_pentanomial_basis(const EC_GROUP *, unsigned int *k1,
            unsigned int *k2, unsigned int *k3);

# DESCRIPTION

EC_GROUP_copy copies the curve src into dst. Both src and dst must use the same EC_METHOD.

EC_GROUP_dup creates a new EC_GROUP object and copies the content from src to the newly created EC_GROUP object.

EC_GROUP_method_of obtains the EC_METHOD of group.

EC_GROUP_set_generator sets curve parameters that must be agreed by all participants using the curve. These parameters include the generator, the order and the cofactor. The generator is a well defined point on the curve chosen for cryptographic operations. Integers used for point multiplications will be between 0 and n-1 where n is the order. The order multiplied by the cofactor gives the number of points on the curve.

EC_GROUP_get0_generator returns the generator for the identified group.

The functions EC_GROUP_get_order and EC_GROUP_get_cofactor populate the provided order and cofactor parameters with the respective order and cofactors for the group.

The functions EC_GROUP_set_curve_name and EC_GROUP_get_curve_name, set and get the NID for the curve respectively (see RETURN VALUES

The following functions return 1 on success or 0 on error: EC_GROUP_copy, EC_GROUP_set_generator, EC_GROUP_check, EC_GROUP_check_discriminant, EC_GROUP_get_trinomial_basis and EC_GROUP_get_pentanomial_basis.

EC_GROUP_dup returns a pointer to the duplicated curve, or NULL on error.

EC_GROUP_method_of returns the EC_METHOD implementation in use for the given curve or NULL on error.

EC_GROUP_get0_generator returns the generator for the given curve or NULL on error.

EC_GROUP_get_order, EC_GROUP_get_cofactor, EC_GROUP_get_curve_name, EC_GROUP_get_asn1_flag, EC_GROUP_get_point_conversion_form and EC_GROUP_get_degree return the order, cofactor, curve name (NID), ASN1 flag, point_conversion_form and degree for the specified curve respectively. If there is no curve name associated with a curve then EC_GROUP_get_curve_name will return 0.

EC_GROUP_get0_order() returns an internal pointer to the group order. EC_GROUP_get_order_bits() returns the number of bits in the group order. EC_GROUP_get0_cofactor() returns an internal pointer to the group cofactor.

EC_GROUP_get0_seed returns a pointer to the seed that was used to generate the parameter b, or NULL if the seed is not specified. EC_GROUP_get_seed_len returns the length of the seed or 0 if the seed is not specified.

EC_GROUP_set_seed returns the length of the seed that has been set. If the supplied seed is NULL, or the supplied seed length is 0, the return value will be 1. On error 0 is returned.

EC_GROUP_cmp returns 0 if the curves are equal, 1 if they are not equal, or -1 on error.

EC_GROUP_get_basis_type returns the values NID_X9_62_tpBasis or NID_X9_62_ppBasis (as defined in <openssl/obj_mac.h>) for a trinomial or pentanomial respectively. Alternatively in the event of an error a 0 is returned.

# SEE ALSO

EC_GROUP_new(3), EC_POINT_add(3), EC_GFp_simple_method(3), COPYRIGHT

Copyright 2013-2017 The OpenSSL Project Authors. All Rights Reserved.

Licensed under the OpenSSL license (the "License"). You may not use this file except in compliance with the License. You can obtain a copy in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.