1EC_POINT_ADD(3ossl)                 OpenSSL                EC_POINT_ADD(3ossl)
2
3
4

NAME

6       EC_POINT_add, EC_POINT_dbl, EC_POINT_invert, EC_POINT_is_at_infinity,
7       EC_POINT_is_on_curve, EC_POINT_cmp, EC_POINT_make_affine,
8       EC_POINTs_make_affine, EC_POINTs_mul, EC_POINT_mul,
9       EC_GROUP_precompute_mult, EC_GROUP_have_precompute_mult - Functions for
10       performing mathematical operations and tests on EC_POINT objects
11

SYNOPSIS

13        #include <openssl/ec.h>
14
15        int EC_POINT_add(const EC_GROUP *group, EC_POINT *r, const EC_POINT *a,
16                         const EC_POINT *b, BN_CTX *ctx);
17        int EC_POINT_dbl(const EC_GROUP *group, EC_POINT *r, const EC_POINT *a, BN_CTX *ctx);
18        int EC_POINT_invert(const EC_GROUP *group, EC_POINT *a, BN_CTX *ctx);
19        int EC_POINT_is_at_infinity(const EC_GROUP *group, const EC_POINT *p);
20        int EC_POINT_is_on_curve(const EC_GROUP *group, const EC_POINT *point, BN_CTX *ctx);
21        int EC_POINT_cmp(const EC_GROUP *group, const EC_POINT *a, const EC_POINT *b, BN_CTX *ctx);
22        int EC_POINT_mul(const EC_GROUP *group, EC_POINT *r, const BIGNUM *n,
23                         const EC_POINT *q, const BIGNUM *m, BN_CTX *ctx);
24
25       The following functions have been deprecated since OpenSSL 3.0, and can
26       be hidden entirely by defining OPENSSL_API_COMPAT with a suitable
27       version value, see openssl_user_macros(7):
28
29        int EC_POINT_make_affine(const EC_GROUP *group, EC_POINT *point, BN_CTX *ctx);
30        int EC_POINTs_make_affine(const EC_GROUP *group, size_t num,
31                                  EC_POINT *points[], BN_CTX *ctx);
32        int EC_POINTs_mul(const EC_GROUP *group, EC_POINT *r, const BIGNUM *n, size_t num,
33                          const EC_POINT *p[], const BIGNUM *m[], BN_CTX *ctx);
34        int EC_GROUP_precompute_mult(EC_GROUP *group, BN_CTX *ctx);
35        int EC_GROUP_have_precompute_mult(const EC_GROUP *group);
36

DESCRIPTION

38       EC_POINT_add adds the two points a and b and places the result in r.
39       Similarly EC_POINT_dbl doubles the point a and places the result in r.
40       In both cases it is valid for r to be one of a or b.
41
42       EC_POINT_invert calculates the inverse of the supplied point a. The
43       result is placed back in a.
44
45       The function EC_POINT_is_at_infinity tests whether the supplied point
46       is at infinity or not.
47
48       EC_POINT_is_on_curve tests whether the supplied point is on the curve
49       or not.
50
51       EC_POINT_cmp compares the two supplied points and tests whether or not
52       they are equal.
53
54       The functions EC_POINT_make_affine and EC_POINTs_make_affine force the
55       internal representation of the EC_POINT(s) into the affine co-ordinate
56       system. In the case of EC_POINTs_make_affine the value num provides the
57       number of points in the array points to be forced. These functions were
58       deprecated in OpenSSL 3.0 and should no longer be used.  Modern
59       versions automatically perform this conversion when needed.
60
61       EC_POINT_mul calculates the value generator * n + q * m and stores the
62       result in r.  The value n may be NULL in which case the result is just
63       q * m (variable point multiplication). Alternatively, both q and m may
64       be NULL, and n non-NULL, in which case the result is just generator * n
65       (fixed point multiplication).  When performing a single fixed or
66       variable point multiplication, the underlying implementation uses a
67       constant time algorithm, when the input scalar (either n or m) is in
68       the range [0, ec_group_order).
69
70       Although deprecated in OpenSSL 3.0 and should no longer be used,
71       EC_POINTs_mul calculates the value generator * n + q[0] * m[0] + ... +
72       q[num-1] * m[num-1]. As for EC_POINT_mul the value n may be NULL or num
73       may be zero.  When performing a fixed point multiplication (n is non-
74       NULL and num is 0) or a variable point multiplication (n is NULL and
75       num is 1), the underlying implementation uses a constant time
76       algorithm, when the input scalar (either n or m[0]) is in the range [0,
77       ec_group_order).  Modern versions should instead use EC_POINT_mul(),
78       combined (if needed) with EC_POINT_add() in such rare circumstances.
79
80       The function EC_GROUP_precompute_mult stores multiples of the generator
81       for faster point multiplication, whilst EC_GROUP_have_precompute_mult
82       tests whether precomputation has already been done. See
83       EC_GROUP_copy(3) for information about the generator. Precomputation
84       functionality was deprecated in OpenSSL 3.0.  Users of
85       EC_GROUP_precompute_mult() and EC_GROUP_have_precompute_mult() should
86       switch to named curves which OpenSSL has hardcoded lookup tables for.
87

RETURN VALUES

89       The following functions return 1 on success or 0 on error:
90       EC_POINT_add, EC_POINT_dbl, EC_POINT_invert, EC_POINT_make_affine,
91       EC_POINTs_make_affine, EC_POINTs_make_affine, EC_POINT_mul,
92       EC_POINTs_mul and EC_GROUP_precompute_mult.
93
94       EC_POINT_is_at_infinity returns 1 if the point is at infinity, or 0
95       otherwise.
96
97       EC_POINT_is_on_curve returns 1 if the point is on the curve, 0 if not,
98       or -1 on error.
99
100       EC_POINT_cmp returns 1 if the points are not equal, 0 if they are, or
101       -1 on error.
102
103       EC_GROUP_have_precompute_mult return 1 if a precomputation has been
104       done, or 0 if not.
105

SEE ALSO

107       crypto(7), EC_GROUP_new(3), EC_GROUP_copy(3), EC_POINT_new(3),
108       EC_KEY_new(3), EC_GFp_simple_method(3), d2i_ECPKParameters(3)
109

HISTORY

111       EC_POINT_make_affine(), EC_POINTs_make_affine(), EC_POINTs_mul(),
112       EC_GROUP_precompute_mult(), and EC_GROUP_have_precompute_mult() were
113       deprecated in OpenSSL 3.0.
114
116       Copyright 2013-2021 The OpenSSL Project Authors. All Rights Reserved.
117
118       Licensed under the Apache License 2.0 (the "License").  You may not use
119       this file except in compliance with the License.  You can obtain a copy
120       in the file LICENSE in the source distribution or at
121       <https://www.openssl.org/source/license.html>.
122
123
124
1253.0.5                             2022-11-01               EC_POINT_ADD(3ossl)
Impressum