Skip to content

Commit e458ec2

Browse files
committed
Move ecmult table computation code to separate file
1 parent fc1bf9f commit e458ec2

4 files changed

+68
-34
lines changed

Makefile.am

+2
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,8 @@ noinst_HEADERS += src/eckey.h
2626
noinst_HEADERS += src/eckey_impl.h
2727
noinst_HEADERS += src/ecmult.h
2828
noinst_HEADERS += src/ecmult_impl.h
29+
noinst_HEADERS += src/ecmult_compute_table.h
30+
noinst_HEADERS += src/ecmult_compute_table_impl.h
2931
noinst_HEADERS += src/ecmult_const.h
3032
noinst_HEADERS += src/ecmult_const_impl.h
3133
noinst_HEADERS += src/ecmult_gen.h

src/ecmult_compute_table.h

+16
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
/*****************************************************************************************************
2+
* Copyright (c) 2013, 2014, 2017, 2021 Pieter Wuille, Andrew Poelstra, Jonas Nick, Russell O'Connor *
3+
* Distributed under the MIT software license, see the accompanying *
4+
* file COPYING or https://www.opensource.org/licenses/mit-license.php. *
5+
*****************************************************************************************************/
6+
7+
#ifndef SECP256K1_ECMULT_COMPUTE_TABLE_H
8+
#define SECP256K1_ECMULT_COMPUTE_TABLE_H
9+
10+
/* Construct table of all odd multiples of gen in range 1..(2**(window_g-1)-1). */
11+
static void secp256k1_ecmult_compute_table(secp256k1_ge_storage* table, int window_g, const secp256k1_gej* gen);
12+
13+
/* Like secp256k1_ecmult_compute_table, but one for both gen and gen*2^128. */
14+
static void secp256k1_ecmult_compute_two_tables(secp256k1_ge_storage* table, secp256k1_ge_storage* table_128, int window_g, const secp256k1_ge* gen);
15+
16+
#endif /* SECP256K1_ECMULT_COMPUTE_TABLE_H */

src/ecmult_compute_table_impl.h

+49
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
/*****************************************************************************************************
2+
* Copyright (c) 2013, 2014, 2017, 2021 Pieter Wuille, Andrew Poelstra, Jonas Nick, Russell O'Connor *
3+
* Distributed under the MIT software license, see the accompanying *
4+
* file COPYING or https://www.opensource.org/licenses/mit-license.php. *
5+
*****************************************************************************************************/
6+
7+
#ifndef SECP256K1_ECMULT_COMPUTE_TABLE_IMPL_H
8+
#define SECP256K1_ECMULT_COMPUTE_TABLE_IMPL_H
9+
10+
#include "ecmult_compute_table.h"
11+
#include "group_impl.h"
12+
#include "field_impl.h"
13+
#include "ecmult.h"
14+
#include "util.h"
15+
16+
static void secp256k1_ecmult_compute_table(secp256k1_ge_storage* table, int window_g, const secp256k1_gej* gen) {
17+
secp256k1_gej gj;
18+
secp256k1_ge ge, dgen;
19+
int j;
20+
21+
gj = *gen;
22+
secp256k1_ge_set_gej_var(&ge, &gj);
23+
secp256k1_ge_to_storage(&table[0], &ge);
24+
25+
secp256k1_gej_double_var(&gj, gen, NULL);
26+
secp256k1_ge_set_gej_var(&dgen, &gj);
27+
28+
for (j = 1; j < ECMULT_TABLE_SIZE(window_g); ++j) {
29+
secp256k1_gej_set_ge(&gj, &ge);
30+
secp256k1_gej_add_ge_var(&gj, &gj, &dgen, NULL);
31+
secp256k1_ge_set_gej_var(&ge, &gj);
32+
secp256k1_ge_to_storage(&table[j], &ge);
33+
}
34+
}
35+
36+
/* Like secp256k1_ecmult_compute_table, but one for both gen and gen*2^128. */
37+
static void secp256k1_ecmult_compute_two_tables(secp256k1_ge_storage* table, secp256k1_ge_storage* table_128, int window_g, const secp256k1_ge* gen) {
38+
secp256k1_gej gj;
39+
int i;
40+
41+
secp256k1_gej_set_ge(&gj, gen);
42+
secp256k1_ecmult_compute_table(table, window_g, &gj);
43+
for (i = 0; i < 128; ++i) {
44+
secp256k1_gej_double_var(&gj, &gj, NULL);
45+
}
46+
secp256k1_ecmult_compute_table(table_128, window_g, &gj);
47+
}
48+
49+
#endif /* SECP256K1_ECMULT_COMPUTE_TABLE_IMPL_H */

src/precompute_ecmult.c

+1-34
Original file line numberDiff line numberDiff line change
@@ -19,40 +19,7 @@
1919
#include "field_impl.h"
2020
#include "group_impl.h"
2121
#include "ecmult.h"
22-
23-
/* Construct table of all odd multiples of gen in range 1..(2**(window_g-1)-1). */
24-
static void secp256k1_ecmult_compute_table(secp256k1_ge_storage* table, int window_g, const secp256k1_gej* gen) {
25-
secp256k1_gej gj;
26-
secp256k1_ge ge, dgen;
27-
int j;
28-
29-
gj = *gen;
30-
secp256k1_ge_set_gej_var(&ge, &gj);
31-
secp256k1_ge_to_storage(&table[0], &ge);
32-
33-
secp256k1_gej_double_var(&gj, gen, NULL);
34-
secp256k1_ge_set_gej_var(&dgen, &gj);
35-
36-
for (j = 1; j < ECMULT_TABLE_SIZE(window_g); ++j) {
37-
secp256k1_gej_set_ge(&gj, &ge);
38-
secp256k1_gej_add_ge_var(&gj, &gj, &dgen, NULL);
39-
secp256k1_ge_set_gej_var(&ge, &gj);
40-
secp256k1_ge_to_storage(&table[j], &ge);
41-
}
42-
}
43-
44-
/* Like secp256k1_ecmult_compute_table, but one for both gen and gen*2^128. */
45-
static void secp256k1_ecmult_compute_two_tables(secp256k1_ge_storage* table, secp256k1_ge_storage* table_128, int window_g, const secp256k1_ge* gen) {
46-
secp256k1_gej gj;
47-
int i;
48-
49-
secp256k1_gej_set_ge(&gj, gen);
50-
secp256k1_ecmult_compute_table(table, window_g, &gj);
51-
for (i = 0; i < 128; ++i) {
52-
secp256k1_gej_double_var(&gj, &gj, NULL);
53-
}
54-
secp256k1_ecmult_compute_table(table_128, window_g, &gj);
55-
}
22+
#include "ecmult_compute_table_impl.h"
5623

5724
static void print_table(FILE *fp, const char *name, int window_g, const secp256k1_ge_storage* table, int with_conditionals) {
5825
int j;

0 commit comments

Comments
 (0)