0
0
Fork 0
mirror of https://github.com/bitcoin/bitcoin.git synced 2025-02-04 10:07:27 -05:00

Allocate precomputation arrays on the heap

This commit is contained in:
Pieter Wuille 2014-12-05 18:13:28 +01:00
parent b0210a95da
commit f461b76925
2 changed files with 6 additions and 3 deletions

View file

@ -43,13 +43,14 @@ static void secp256k1_ecmult_table_precomp_gej_var(secp256k1_gej_t *pre, const s
static void secp256k1_ecmult_table_precomp_ge_var(secp256k1_ge_t *pre, const secp256k1_gej_t *a, int w) { static void secp256k1_ecmult_table_precomp_ge_var(secp256k1_ge_t *pre, const secp256k1_gej_t *a, int w) {
const int table_size = 1 << (w-2); const int table_size = 1 << (w-2);
secp256k1_gej_t prej[table_size]; secp256k1_gej_t *prej = malloc(sizeof(secp256k1_gej_t) * table_size);
prej[0] = *a; prej[0] = *a;
secp256k1_gej_t d; secp256k1_gej_double_var(&d, a); secp256k1_gej_t d; secp256k1_gej_double_var(&d, a);
for (int i=1; i<table_size; i++) { for (int i=1; i<table_size; i++) {
secp256k1_gej_add_var(&prej[i], &d, &prej[i-1]); secp256k1_gej_add_var(&prej[i], &d, &prej[i-1]);
} }
secp256k1_ge_set_all_gej_var(table_size, pre, prej); secp256k1_ge_set_all_gej_var(table_size, pre, prej);
free(prej);
} }
/** The number of entries a table with precomputed multiples needs to have. */ /** The number of entries a table with precomputed multiples needs to have. */

View file

@ -85,15 +85,16 @@ static void secp256k1_ge_set_gej_var(secp256k1_ge_t *r, secp256k1_gej_t *a) {
static void secp256k1_ge_set_all_gej_var(size_t len, secp256k1_ge_t r[len], const secp256k1_gej_t a[len]) { static void secp256k1_ge_set_all_gej_var(size_t len, secp256k1_ge_t r[len], const secp256k1_gej_t a[len]) {
size_t count = 0; size_t count = 0;
secp256k1_fe_t az[len]; secp256k1_fe_t *az = malloc(sizeof(secp256k1_fe_t) * len);
for (size_t i=0; i<len; i++) { for (size_t i=0; i<len; i++) {
if (!a[i].infinity) { if (!a[i].infinity) {
az[count++] = a[i].z; az[count++] = a[i].z;
} }
} }
secp256k1_fe_t azi[count]; secp256k1_fe_t *azi = malloc(sizeof(secp256k1_fe_t) * count);
secp256k1_fe_inv_all_var(count, azi, az); secp256k1_fe_inv_all_var(count, azi, az);
free(az);
count = 0; count = 0;
for (size_t i=0; i<len; i++) { for (size_t i=0; i<len; i++) {
@ -106,6 +107,7 @@ static void secp256k1_ge_set_all_gej_var(size_t len, secp256k1_ge_t r[len], cons
secp256k1_fe_mul(&r[i].y, &a[i].y, &zi3); secp256k1_fe_mul(&r[i].y, &a[i].y, &zi3);
} }
} }
free(azi);
} }
static void secp256k1_gej_set_infinity(secp256k1_gej_t *r) { static void secp256k1_gej_set_infinity(secp256k1_gej_t *r) {