EC_POINT_ADD(3ossl)
π 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 definingOPENSSL_API_COMPATwith a suitable version value, seeopenssl_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 pointsaandband places the result inr. Cute math, no cap β¨.EC_POINT_dblβ doubles the pointaand places the result inr. Same energy, just one point doing a little twirl π«.- In both
EC_POINT_addandEC_POINT_dbl, it is valid forrto be one ofaorb. So yes, the destination can share the spotlight with an input, bestie π. EC_POINT_invertβ calculates the inverse of the supplied pointa. The result is placed back ina. 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_affineandEC_POINTs_make_affineβ force the internal representation of theEC_POINT(s) into the affine coordinate system. In the case ofEC_POINTs_make_affine, the valuenumprovides the number of points in the arraypointsto 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 valuegenerator * n + q * mand stores the result inr. The valuenmay beNULL, in which case the result is justq * m(variable point multiplication). Alternatively, bothqandmmay beNULL, andnnon-NULL, in which case the result is justgenerator * 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 (eithernorm) 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 valuegenerator * n + q[0] * m[0] + ... + q[num-1] * m[num-1]. As forEC_POINT_mul, the valuenmay beNULLornummay be zero. When performing a fixed point multiplication (nis non-NULLandnumis0) or a variable point multiplication (nisNULLandnumis1), the underlying implementation uses a constant time algorithm, when the input scalar (eithernorm[0]) is in the range[0, ec_group_order). Modern versions should instead useEC_POINT_mul(), combined (if needed) withEC_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, whilstEC_GROUP_have_precompute_multtests whether precomputation has already been done. SeeEC_GROUP_copy(3)for information about the generator. Precomputation functionality was deprecated in OpenSSL 3.0. Users ofEC_GROUP_precompute_mult()andEC_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
1on success or0on 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, andEC_GROUP_precompute_mult. EC_POINT_is_at_infinityreturns1if the point is at infinity, or0otherwise. Infinity? Noted π«Ά.EC_POINT_is_on_curvereturns1if the point is on the curve,0if not, or-1on error. Curve check said yes/no/omg-error π.EC_POINT_cmpreturns1if the points are not equal,0if they are, or-1on error. Note the iconique reversal:1means not equal,0means equal. Donβt let that trip you up, bestie π .EC_GROUP_have_precompute_multreturn1if a precomputation has been done, or0if not.
π SEE ALSO π
crypto(7)EC_GROUP_new(3)EC_GROUP_copy(3)EC_POINT_new(3)EC_KEY_new(3)EC_GFp_simple_method(3)d2i_ECPKParameters(3)
π 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 π
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
- opensuse-leap 16.0: openssl-3-doc 3.5.0-160000.11.1 Β· Apache-2.0
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash-1017 on : a language model's rewrite of the original, under its terms