EC_POINT_ADD(3) | Library Functions Manual | EC_POINT_ADD(3)

# NAME

`EC_POINT_add`, `EC_POINT_dbl`, `EC_POINT_invert`, `EC_POINT_is_at_infinity`, `EC_POINT_is_on_curve`, `EC_POINT_cmp`, `EC_POINT_make_affine`, `EC_POINT_mul` — perform mathematical operations and tests on EC_POINT objects

# SYNOPSIS

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

int
`EC_POINT_add`(const EC_GROUP *group, EC_POINT *r, const EC_POINT *a, const EC_POINT *b, BN_CTX *ctx);

int
`EC_POINT_dbl`(const EC_GROUP *group, EC_POINT *r, const EC_POINT *a, BN_CTX *ctx);

int
`EC_POINT_invert`(const EC_GROUP *group, EC_POINT *a, BN_CTX *ctx);

int
`EC_POINT_is_at_infinity`(const EC_GROUP *group, const EC_POINT *p);

int
`EC_POINT_is_on_curve`(const EC_GROUP *group, const EC_POINT *point, BN_CTX *ctx);

int
`EC_POINT_cmp`(const EC_GROUP *group, const EC_POINT *a, const EC_POINT *b, BN_CTX *ctx);

int
`EC_POINT_make_affine`(const EC_GROUP *group, EC_POINT *point, BN_CTX *ctx);

int
`EC_POINT_mul`(const EC_GROUP *group, EC_POINT *r, const BIGNUM *n, const EC_POINT *q, const BIGNUM *m, BN_CTX *ctx);

# DESCRIPTION

These functions operate on EC_POINT objects created by EC_POINT_new(3).

`EC_POINT_add`() adds the two points a and b and places the result in r. Similarly `EC_POINT_dbl`() doubles the point a and places the result in r. In both cases it is valid for r to be one of a or b.

`EC_POINT_invert`() calculates the inverse of the supplied point a. The result is placed back in a.

The function `EC_POINT_is_at_infinity`() tests whether the supplied point is at infinity or not.

`EC_POINT_is_on_curve`() tests whether the supplied point is on the curve or not.

`EC_POINT_cmp`() compares the two supplied points and tests whether or not they are equal.

`EC_POINT_mul`() calculates the value

generator * n + q * m

and stores the result in r. The value n may be `NULL`, in which case the result is just

`q * m.`

See EC_GROUP_new_curve_GFp(3) for information about the generator.

# RETURN VALUES

The following functions return 1 on success or 0 on error: `EC_POINT_add`(), `EC_POINT_dbl`(), `EC_POINT_invert`(), `EC_POINT_make_affine`(), and `EC_POINT_mul`()

`EC_POINT_is_at_infinity`() returns 1 if the point is at infinity or 0 otherwise.

`EC_POINT_is_on_curve`() returns 1 if the point is on the curve, 0 if not, or -1 on error.

`EC_POINT_cmp`() returns 1 if the points are not equal, 0 if they are, or -1 on error.

# SEE ALSO

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_get_affine_coordinates(3), EC_POINT_new(3), EC_POINT_point2oct(3)

# HISTORY

`EC_POINT_add`(), `EC_POINT_dbl`(), `EC_POINT_invert`(), `EC_POINT_is_at_infinity`(), `EC_POINT_is_on_curve`(), `EC_POINT_cmp`(), `EC_POINT_make_affine`(), and `EC_POINT_mul`() first appeared in OpenSSL 0.9.7 and have been available since OpenBSD 3.2.

June 8, 2025 | Debian