Blame doc/man3/EC_POINT_add.pod

Packit c4476c
=pod
Packit c4476c
Packit c4476c
=head1 NAME
Packit c4476c
Packit c4476c
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_mult - Functions for performing mathematical operations and tests on EC_POINT objects
Packit c4476c
Packit c4476c
=head1 SYNOPSIS
Packit c4476c
Packit c4476c
 #include <openssl/ec.h>
Packit c4476c
Packit c4476c
 int EC_POINT_add(const EC_GROUP *group, EC_POINT *r, const EC_POINT *a,
Packit c4476c
                  const EC_POINT *b, BN_CTX *ctx);
Packit c4476c
 int EC_POINT_dbl(const EC_GROUP *group, EC_POINT *r, const EC_POINT *a, BN_CTX *ctx);
Packit c4476c
 int EC_POINT_invert(const EC_GROUP *group, EC_POINT *a, BN_CTX *ctx);
Packit c4476c
 int EC_POINT_is_at_infinity(const EC_GROUP *group, const EC_POINT *p);
Packit c4476c
 int EC_POINT_is_on_curve(const EC_GROUP *group, const EC_POINT *point, BN_CTX *ctx);
Packit c4476c
 int EC_POINT_cmp(const EC_GROUP *group, const EC_POINT *a, const EC_POINT *b, BN_CTX *ctx);
Packit c4476c
 int EC_POINT_make_affine(const EC_GROUP *group, EC_POINT *point, BN_CTX *ctx);
Packit c4476c
 int EC_POINTs_make_affine(const EC_GROUP *group, size_t num,
Packit c4476c
                           EC_POINT *points[], BN_CTX *ctx);
Packit c4476c
 int EC_POINTs_mul(const EC_GROUP *group, EC_POINT *r, const BIGNUM *n, size_t num,
Packit c4476c
                   const EC_POINT *p[], const BIGNUM *m[], BN_CTX *ctx);
Packit c4476c
 int EC_POINT_mul(const EC_GROUP *group, EC_POINT *r, const BIGNUM *n,
Packit c4476c
                  const EC_POINT *q, const BIGNUM *m, BN_CTX *ctx);
Packit c4476c
 int EC_GROUP_precompute_mult(EC_GROUP *group, BN_CTX *ctx);
Packit c4476c
 int EC_GROUP_have_precompute_mult(const EC_GROUP *group);
Packit c4476c
Packit c4476c
Packit c4476c
=head1 DESCRIPTION
Packit c4476c
Packit c4476c
EC_POINT_add adds the two points B and B and places the result in B<r>. Similarly EC_POINT_dbl doubles the point B and places the
Packit c4476c
result in B<r>. In both cases it is valid for B<r> to be one of B or B.
Packit c4476c
Packit c4476c
EC_POINT_invert calculates the inverse of the supplied point B. The result is placed back in B.
Packit c4476c
Packit c4476c
The function EC_POINT_is_at_infinity tests whether the supplied point is at infinity or not.
Packit c4476c
Packit c4476c
EC_POINT_is_on_curve tests whether the supplied point is on the curve or not.
Packit c4476c
Packit c4476c
EC_POINT_cmp compares the two supplied points and tests whether or not they are equal.
Packit c4476c
Packit c4476c
The functions EC_POINT_make_affine and EC_POINTs_make_affine force the internal representation of the EC_POINT(s) into the affine
Packit c4476c
co-ordinate system. In the case of EC_POINTs_make_affine the value B<num> provides the number of points in the array B<points> to be
Packit c4476c
forced.
Packit c4476c
Packit c4476c
EC_POINT_mul is a convenient interface to EC_POINTs_mul: it calculates the value generator * B<n> + B<q> * B<m> and stores the result in B<r>.
Packit c4476c
The value B<n> may be NULL in which case the result is just B<q> * B<m> (variable point multiplication). Alternatively, both B<q> and B<m> may be NULL, and B<n> non-NULL, in which case the result is just generator * B<n> (fixed point multiplication).
Packit c4476c
When performing a single fixed or variable point multiplication, the underlying implementation uses a constant time algorithm, when the input scalar (either B<n> or B<m>) is in the range [0, ec_group_order).
Packit c4476c
Packit c4476c
EC_POINTs_mul calculates the value generator * B<n> + B<q[0]> * B<m[0]> + ... + B<q[num-1]> * B<m[num-1]>. As for EC_POINT_mul the value B<n> may be NULL or B<num> may be zero.
Packit c4476c
When performing a fixed point multiplication (B<n> is non-NULL and B<num> is 0) or a variable point multiplication (B<n> is NULL and B<num> is 1), the underlying implementation uses a constant time algorithm, when the input scalar (either B<n> or B<m[0]>) is in the range [0, ec_group_order).
Packit c4476c
Packit c4476c
The function EC_GROUP_precompute_mult stores multiples of the generator for faster point multiplication, whilst
Packit c4476c
EC_GROUP_have_precompute_mult tests whether precomputation has already been done. See L<EC_GROUP_copy(3)> for information
Packit c4476c
about the generator.
Packit c4476c
Packit c4476c
Packit c4476c
=head1 RETURN VALUES
Packit c4476c
Packit c4476c
The following functions return 1 on success or 0 on error: EC_POINT_add, EC_POINT_dbl, EC_POINT_invert, EC_POINT_make_affine,
Packit c4476c
EC_POINTs_make_affine, EC_POINTs_make_affine, EC_POINT_mul, EC_POINTs_mul and EC_GROUP_precompute_mult.
Packit c4476c
Packit c4476c
EC_POINT_is_at_infinity returns 1 if the point is at infinity, or 0 otherwise.
Packit c4476c
Packit c4476c
EC_POINT_is_on_curve returns 1 if the point is on the curve, 0 if not, or -1 on error.
Packit c4476c
Packit c4476c
EC_POINT_cmp returns 1 if the points are not equal, 0 if they are, or -1 on error.
Packit c4476c
Packit c4476c
EC_GROUP_have_precompute_mult return 1 if a precomputation has been done, or 0 if not.
Packit c4476c
Packit c4476c
=head1 SEE ALSO
Packit c4476c
Packit c4476c
L<crypto(7)>, L<EC_GROUP_new(3)>, L<EC_GROUP_copy(3)>,
Packit c4476c
L<EC_POINT_new(3)>, L<EC_KEY_new(3)>,
Packit c4476c
L<EC_GFp_simple_method(3)>, L<d2i_ECPKParameters(3)>
Packit c4476c
Packit c4476c
=head1 COPYRIGHT
Packit c4476c
Packit c4476c
Copyright 2013-2018 The OpenSSL Project Authors. All Rights Reserved.
Packit c4476c
Packit c4476c
Licensed under the OpenSSL license (the "License").  You may not use
Packit c4476c
this file except in compliance with the License.  You can obtain a copy
Packit c4476c
in the file LICENSE in the source distribution or at
Packit c4476c
L<https://www.openssl.org/source/license.html>.
Packit c4476c
Packit c4476c
=cut