EC_POINT_ADD(3ossl)

πŸ“¦ version 3.5.0, in opensuse-leap 16.0

πŸ’– EC_POINT_ADD(3ossl) β€” the EC_POINT math bestie guide πŸ’–

🌸 NAME 🌸

Okay so this is the manual page for 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, and EC_GROUP_have_precompute_mult β€” literally all the functions for performing mathematical operations and tests on EC_POINT objects. The manual name is EC_POINT_ADD(3ossl), iykyk πŸ’….


✨ SYNOPSIS ✨

Include this header first, bestie:

#include <openssl/ec.h>

Then the main-character prototypes:

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_mul(const EC_GROUP *group, EC_POINT *r, const BIGNUM *n,
                 const EC_POINT *q, const BIGNUM *m, BN_CTX *ctx);
🫢 Heads up: the following functions have been deprecated since OpenSSL 3.0, and can be hidden entirely by defining OPENSSL_API_COMPAT with a suitable version value, see openssl_user_macros(7):
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_GROUP_precompute_mult(EC_GROUP *group, BN_CTX *ctx);
int EC_GROUP_have_precompute_mult(const EC_GROUP *group);

πŸ¦‹ DESCRIPTION πŸ¦‹

  • EC_POINT_add β€” adds the two points a and b and places the result in r. Cute math, no cap ✨.
  • EC_POINT_dbl β€” doubles the point a and places the result in r. Same energy, just one point doing a little twirl πŸ’«.
  • In both EC_POINT_add and EC_POINT_dbl, it is valid for r to be one of a or b. So yes, the destination can share the spotlight with an input, bestie πŸŽ€.
  • EC_POINT_invert β€” calculates the inverse of the supplied point a. The result is placed back in a. It’s giving β€œmakeover in place” πŸ’….
  • EC_POINT_is_at_infinity β€” tests whether the supplied point is at infinity or not. Vibe check: infinity edition 🌌.
  • EC_POINT_is_on_curve β€” tests whether the supplied point is on the curve or not. Are you on the curve, or are you lost in the group chat? 😭
  • EC_POINT_cmp β€” compares the two supplied points and tests whether or not they are equal. Dupe check, but mathematically iconic πŸ”.
  • EC_POINT_make_affine and EC_POINTs_make_affine β€” force the internal representation of the EC_POINT(s) 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. These functions were deprecated in OpenSSL 3.0 and should no longer be used. Modern versions automatically perform this conversion when needed. So yes, they ate, but they’re retired now πŸ’€.
  • 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 (variable point multiplication). Alternatively, both q and m may be NULL, and n non-NULL, in which case the result is just generator * n (fixed point multiplication). When performing a single fixed or variable point multiplication, the underlying implementation uses a constant time algorithm, when the input scalar (either n or m) is in the range [0, ec_group_order). Constant time is lowkey the moment πŸ”₯.
  • EC_POINTs_mul β€” although deprecated in OpenSSL 3.0 and should no longer be used, it calculates the value generator * n + q[0] * m[0] + ... + q[num-1] * m[num-1]. As for EC_POINT_mul, the value n may be NULL or num may be zero. When performing a fixed point multiplication (n is non-NULL and num is 0) or a variable point multiplication (n is NULL and num is 1), the underlying implementation uses a constant time algorithm, when the input scalar (either n or m[0]) is in the range [0, ec_group_order). Modern versions should instead use EC_POINT_mul(), combined (if needed) with EC_POINT_add() in such rare circumstances. It’s giving β€œold legend, new replacement” 🫑.
  • EC_GROUP_precompute_mult β€” stores multiples of the generator for faster point multiplication, whilst EC_GROUP_have_precompute_mult tests whether precomputation has already been done. See EC_GROUP_copy(3) for information about the generator. Precomputation functionality was deprecated in OpenSSL 3.0. Users of EC_GROUP_precompute_mult() and EC_GROUP_have_precompute_mult() should switch to named curves which OpenSSL has hardcoded lookup tables for. Prep work is out; named curves are in 🧚.

🌈 RETURN VALUES 🌈

  • The success/error squad: these 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_POINTs_make_affine (yes, it appears twice in the original list πŸ’€), 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. Infinity? Noted 🫢.
  • EC_POINT_is_on_curve returns 1 if the point is on the curve, 0 if not, or -1 on error. Curve check said yes/no/omg-error 😭.
  • EC_POINT_cmp returns 1 if the points are not equal, 0 if they are, or -1 on error. Note the iconique reversal: 1 means not equal, 0 means equal. Don’t let that trip you up, bestie πŸ’….
  • EC_GROUP_have_precompute_mult return 1 if a precomputation has been done, or 0 if not.

🌟 SEE ALSO 🌟


πŸŽ€ HISTORY πŸŽ€

EC_POINT_make_affine(), EC_POINTs_make_affine(), EC_POINTs_mul(), EC_GROUP_precompute_mult(), and EC_GROUP_have_precompute_mult() were deprecated in OpenSSL 3.0. They had their era, and now they’re legacy πŸ’œ.


Copyright 2013-2023 The OpenSSL Project Authors. All Rights Reserved.

Licensed under the Apache License 2.0 (the "License"). You may not use this file except in compliance with the License. You can obtain a copy in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.


xoxo, bestie πŸ’– β€” OpenSSL 3.5.0, dated 2026-09-25, manual name EC_POINT_ADD(3ossl). Periodt 🫢✨

πŸ“¦ where this page comes from