OpenBSD manual page server

Manual Page Search Parameters

EC_POINT_ADD(3) Library Functions Manual EC_POINT_ADD(3)

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_POINTs_make_affine, EC_POINTs_mul, EC_POINT_mul, EC_GROUP_precompute_mult, EC_GROUP_have_precompute_multperform mathematical operations and tests on EC_POINT objects

#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_POINTs_make_affine(const EC_GROUP *group, size_t num, EC_POINT *points[], BN_CTX *ctx);

int
EC_POINTs_mul(const EC_GROUP *group, EC_POINT *r, const BIGNUM *n, size_t num, const EC_POINT *p[], const BIGNUM *m[], 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);

int
EC_GROUP_precompute_mult(EC_GROUP *group, BN_CTX *ctx);

int
EC_GROUP_have_precompute_mult(const EC_GROUP *group);

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

() adds the two points a and b and places the result in r. Similarly () 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.

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

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

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

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

The functions () and () force the internal representation of the EC_POINTs into the affine coordinate system. In the case of EC_POINTs_make_affine(), the value num provides the number of points in the array points to be forced.

() 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.

() only supports the values 0 and 1 for num. If it is 1, then EC_POINTs_mul() calculates the value

generator * n + q[0] * m[0].

If num is 0 then q and m must be NULL, and the result is just

generator * n
.

As for (), the value n may be NULL.

The function () stores multiples of the generator for faster point multiplication, whilst () tests whether precomputation has already been done. See EC_GROUP_copy(3) for information about the generator.

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

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.

EC_GROUP_have_precompute_mult() returns 1 if a precomputation has been done or 0 if not.

d2i_ECPKParameters(3), EC_GFp_simple_method(3), EC_GROUP_copy(3), EC_GROUP_new(3), EC_KEY_new(3), EC_POINT_new(3)

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_POINTs_make_affine(), EC_POINTs_mul(), EC_POINT_mul(), and EC_GROUP_precompute_mult() first appeared in OpenSSL 0.9.7 and have been available since OpenBSD 3.2.

EC_GROUP_have_precompute_mult() first appeared in OpenSSL 0.9.8 and has been available since OpenBSD 4.5.

April 12, 2023 OpenBSD-current