EC_POINT_GET_AFFINE_COORDINATES(3) | Library Functions Manual | EC_POINT_GET_AFFINE_COORDINATES(3)

# NAME

`EC_POINT_get_affine_coordinates`, `EC_POINT_set_affine_coordinates`, `EC_POINT_set_compressed_coordinates`, `EC_POINT_set_to_infinity`, `EC_POINT_get_affine_coordinates_GFp`, `EC_POINT_set_affine_coordinates_GFp`, `EC_POINT_set_compressed_coordinates_GFp` — get and set coordinates of elliptic curve points

# SYNOPSIS

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

int
`EC_POINT_get_affine_coordinates`(const EC_GROUP *group, const EC_POINT *point, BIGNUM *x, BIGNUM *y, BN_CTX *ctx);

int
`EC_POINT_set_affine_coordinates`(const EC_GROUP *group, EC_POINT *point, const BIGNUM *x, const BIGNUM *y, BN_CTX *ctx);

int
`EC_POINT_set_compressed_coordinates`(const EC_GROUP *group, EC_POINT *point, const BIGNUM *x, int y_bit, BN_CTX *ctx);

int
`EC_POINT_set_to_infinity`(const EC_GROUP *group, EC_POINT *point);

Deprecated:

int
`EC_POINT_get_affine_coordinates_GFp`(const EC_GROUP *group, const EC_POINT *point, BIGNUM *x, BIGNUM *y, BN_CTX *ctx);

int
`EC_POINT_set_affine_coordinates_GFp`(const EC_GROUP *group, EC_POINT *point, const BIGNUM *x, const BIGNUM *y, BN_CTX *ctx);

int
`EC_POINT_set_compressed_coordinates_GFp`(const EC_GROUP *group, EC_POINT *point, const BIGNUM *x, int y_bit, BN_CTX *ctx);

# DESCRIPTION

`EC_POINT_get_affine_coordinates`() assumes that point is a point on group, calculates its affine coordinates from its internal representation using the optional ctx, and copies them into the optional user-provided x and y.

`EC_POINT_set_affine_coordinates`() assumes that x and y are the affine coordinates of a point on group, converts them into internal representation and sets them on point using the optional ctx. The user-provided point should be the result of `EC_POINT_new`(3) with an argument of group. It then verifies using EC_POINT_is_on_curve(3) that x and y are indeed the affine coordinates of a point on group.

`EC_POINT_set_compressed_coordinates`() assumes that x is the x-coordinate and y_bit is the parity bit of a point on group and sets point to the corresponding point on group. It does this by solving the quadratic equation y^2 = x^3 + ax + b using BN_mod_sqrt(3) and the optional ctx, chooses the solution y with parity matching y_bit, and passes x and y to `EC_POINT_set_affine_coordinates`(). The user-provided point should be the result of `EC_POINT_new`() with argument group.

`EC_POINT_set_to_infinity`() sets point to the internal representation of the point at infinity on group.

`EC_POINT_get_affine_coordinates_GFp`() is a deprecated alias for `EC_POINT_get_affine_coordinates`(). Similarly for `EC_POINT_set_affine_coordinates_GFp`() and `EC_POINT_set_compressed_coordinates_GFp`().

# RETURN VALUES

All these functions return 1 on success and 0 on error. Error conditions include memory allocation failure, that point is incompatible with group, and, for the coordinate setters, that the provided coordinates do not represent a point on group.

# SEE ALSO

BN_CTX_new(3), BN_is_zero(3), BN_mod_sqrt(3), crypto(3), d2i_ECPKParameters(3), EC_GROUP_check(3), EC_GROUP_get_curve_name(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_new(3), EC_POINT_point2oct(3), ECDH_compute_key(3), ECDSA_SIG_new(3)

# HISTORY

`EC_POINT_get_affine_coordinates_GFp`(), `EC_POINT_set_affine_coordinates_GFp`(), `EC_POINT_set_compressed_coordinates_GFp`(), and `EC_POINT_set_to_infinity`() first appeared in OpenSSL 0.9.7 and have been available since OpenBSD 3.2.

`EC_POINT_get_affine_coordinates`(), `EC_POINT_set_affine_coordinates`(), and `EC_POINT_set_compressed_coordinates`() first appeared in OpenSSL 1.1.1 and have been available since OpenBSD 7.0.

June 8, 2025 | Debian