summaryrefslogtreecommitdiff
path: root/src/lib
diff options
context:
space:
mode:
authortb <>2024-11-22 00:14:36 +0000
committertb <>2024-11-22 00:14:36 +0000
commit34e6d267fc84505f417418dd265c8e47888a4f1e (patch)
tree6194e2efef48d743e774c9d1592bc2bcdcf5ecbb /src/lib
parent047732fc7cf66381d8b22c9c5e20e3069994efa3 (diff)
downloadopenbsd-34e6d267fc84505f417418dd265c8e47888a4f1e.tar.gz
openbsd-34e6d267fc84505f417418dd265c8e47888a4f1e.tar.bz2
openbsd-34e6d267fc84505f417418dd265c8e47888a4f1e.zip
Rename val_sub[] into row[] and move it to the stack
ok djm
Diffstat (limited to 'src/lib')
-rw-r--r--src/lib/libcrypto/ec/ec_mult.c28
1 files changed, 13 insertions, 15 deletions
diff --git a/src/lib/libcrypto/ec/ec_mult.c b/src/lib/libcrypto/ec/ec_mult.c
index 8ef655690e..6f0499c951 100644
--- a/src/lib/libcrypto/ec/ec_mult.c
+++ b/src/lib/libcrypto/ec/ec_mult.c
@@ -1,4 +1,4 @@
1/* $OpenBSD: ec_mult.c,v 1.37 2024/11/21 15:03:56 tb Exp $ */ 1/* $OpenBSD: ec_mult.c,v 1.38 2024/11/22 00:14:36 tb Exp $ */
2/* 2/*
3 * Originally written by Bodo Moeller and Nils Larsch for the OpenSSL project. 3 * Originally written by Bodo Moeller and Nils Larsch for the OpenSSL project.
4 */ 4 */
@@ -229,6 +229,7 @@ ec_wNAF_mul(const EC_GROUP *group, EC_POINT *r, const BIGNUM *m,
229{ 229{
230 const EC_POINT *generator = NULL; 230 const EC_POINT *generator = NULL;
231 EC_POINT *tmp = NULL; 231 EC_POINT *tmp = NULL;
232 EC_POINT **row[2] = { 0 };
232 size_t totalnum; 233 size_t totalnum;
233 size_t i, j; 234 size_t i, j;
234 int k; 235 int k;
@@ -240,8 +241,6 @@ ec_wNAF_mul(const EC_GROUP *group, EC_POINT *r, const BIGNUM *m,
240 size_t num_val; 241 size_t num_val;
241 EC_POINT **val = NULL; /* precomputation */ 242 EC_POINT **val = NULL; /* precomputation */
242 EC_POINT **v; 243 EC_POINT **v;
243 EC_POINT ***val_sub = NULL; /* pointers to sub-arrays of 'val' or
244 * 'pre_comp->points' */
245 int ret = 0; 244 int ret = 0;
246 245
247 if (m == NULL || n == NULL) { 246 if (m == NULL || n == NULL) {
@@ -271,9 +270,8 @@ ec_wNAF_mul(const EC_GROUP *group, EC_POINT *r, const BIGNUM *m,
271 270
272 wsize = reallocarray(NULL, totalnum, sizeof wsize[0]); 271 wsize = reallocarray(NULL, totalnum, sizeof wsize[0]);
273 wNAF_len = reallocarray(NULL, totalnum, sizeof wNAF_len[0]); 272 wNAF_len = reallocarray(NULL, totalnum, sizeof wNAF_len[0]);
274 val_sub = reallocarray(NULL, totalnum, sizeof val_sub[0]);
275 273
276 if (wsize == NULL || wNAF_len == NULL || val_sub == NULL) { 274 if (wsize == NULL || wNAF_len == NULL) {
277 ECerror(ERR_R_MALLOC_FAILURE); 275 ECerror(ERR_R_MALLOC_FAILURE);
278 goto err; 276 goto err;
279 } 277 }
@@ -311,7 +309,7 @@ ec_wNAF_mul(const EC_GROUP *group, EC_POINT *r, const BIGNUM *m,
311 /* allocate points for precomputation */ 309 /* allocate points for precomputation */
312 v = val; 310 v = val;
313 for (i = 0; i < 2; i++) { 311 for (i = 0; i < 2; i++) {
314 val_sub[i] = v; 312 row[i] = v;
315 for (j = 0; j < ((size_t) 1 << (wsize[i] - 1)); j++) { 313 for (j = 0; j < ((size_t) 1 << (wsize[i] - 1)); j++) {
316 *v = EC_POINT_new(group); 314 *v = EC_POINT_new(group);
317 if (*v == NULL) 315 if (*v == NULL)
@@ -328,25 +326,25 @@ ec_wNAF_mul(const EC_GROUP *group, EC_POINT *r, const BIGNUM *m,
328 326
329 /* 327 /*
330 * prepare precomputed values: 328 * prepare precomputed values:
331 * val_sub[i][0] := points[i] 329 * row[i][0] := points[i]
332 * val_sub[i][1] := 3 * points[i] 330 * row[i][1] := 3 * points[i]
333 * val_sub[i][2] := 5 * points[i] 331 * row[i][2] := 5 * points[i]
334 * ... 332 * ...
335 */ 333 */
336 for (i = 0; i < 2; i++) { 334 for (i = 0; i < 2; i++) {
337 if (i < 1) { 335 if (i < 1) {
338 if (!EC_POINT_copy(val_sub[i][0], point)) 336 if (!EC_POINT_copy(row[i][0], point))
339 goto err; 337 goto err;
340 } else { 338 } else {
341 if (!EC_POINT_copy(val_sub[i][0], generator)) 339 if (!EC_POINT_copy(row[i][0], generator))
342 goto err; 340 goto err;
343 } 341 }
344 342
345 if (wsize[i] > 1) { 343 if (wsize[i] > 1) {
346 if (!EC_POINT_dbl(group, tmp, val_sub[i][0], ctx)) 344 if (!EC_POINT_dbl(group, tmp, row[i][0], ctx))
347 goto err; 345 goto err;
348 for (j = 1; j < ((size_t) 1 << (wsize[i] - 1)); j++) { 346 for (j = 1; j < ((size_t) 1 << (wsize[i] - 1)); j++) {
349 if (!EC_POINT_add(group, val_sub[i][j], val_sub[i][j - 1], tmp, ctx)) 347 if (!EC_POINT_add(group, row[i][j], row[i][j - 1], tmp, ctx))
350 goto err; 348 goto err;
351 } 349 }
352 } 350 }
@@ -391,7 +389,7 @@ ec_wNAF_mul(const EC_GROUP *group, EC_POINT *r, const BIGNUM *m,
391 r_is_inverted = !r_is_inverted; 389 r_is_inverted = !r_is_inverted;
392 } 390 }
393 391
394 if (!EC_POINT_add(group, r, r, val_sub[i][digit >> 1], ctx)) 392 if (!EC_POINT_add(group, r, r, row[i][digit >> 1], ctx))
395 goto err; 393 goto err;
396 } 394 }
397 } 395 }
@@ -420,6 +418,6 @@ ec_wNAF_mul(const EC_GROUP *group, EC_POINT *r, const BIGNUM *m,
420 EC_POINT_free(*v); 418 EC_POINT_free(*v);
421 free(val); 419 free(val);
422 } 420 }
423 free(val_sub); 421
424 return ret; 422 return ret;
425} 423}