Skip to content
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.

Commit 598a4be

Browse files
committedDec 16, 2021
Split off .c file from precomputed_ecmult.h
1 parent 69b4bc9 commit 598a4be

File tree

5 files changed

+16520
-16476
lines changed

5 files changed

+16520
-16476
lines changed
 

‎.gitattributes

+1
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
11
src/precomputed_ecmult.h linguist-generated
2+
src/precomputed_ecmult.c linguist-generated
23
src/precomputed_ecmult_gen.c linguist-generated
34
src/precomputed_ecmult_gen.h linguist-generated

‎Makefile.am

+7-3
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,7 @@ noinst_HEADERS += contrib/lax_der_privatekey_parsing.c
6464

6565
PRECOMPUTED_LIB = libsecp256k1_precomputed.la
6666
noinst_LTLIBRARIES = $(PRECOMPUTED_LIB)
67-
libsecp256k1_precomputed_la_SOURCES = src/precomputed_ecmult_gen.c
67+
libsecp256k1_precomputed_la_SOURCES = src/precomputed_ecmult.c src/precomputed_ecmult_gen.c
6868
libsecp256k1_precomputed_la_CPPFLAGS = $(SECP_INCLUDES)
6969

7070
if USE_EXTERNAL_ASM
@@ -154,7 +154,11 @@ precompute_LDADD = $(SECP_LIBS) $(COMMON_LIB)
154154
# forced by deleting them, e.g., by invoking `make clean-precomp`.
155155
src/precomputed_ecmult.h:
156156
$(MAKE) $(AM_MAKEFLAGS) precompute$(EXEEXT)
157-
./precompute$(EXEEXT) ecmult
157+
./precompute$(EXEEXT) ecmult_h
158+
159+
src/precomputed_ecmult.c:
160+
$(MAKE) $(AM_MAKEFLAGS) precompute$(EXEEXT)
161+
./precompute$(EXEEXT) ecmult_c
158162

159163
src/precomputed_ecmult_gen.h:
160164
$(MAKE) $(AM_MAKEFLAGS) precompute$(EXEEXT)
@@ -164,7 +168,7 @@ src/precomputed_ecmult_gen.c:
164168
$(MAKE) $(AM_MAKEFLAGS) precompute$(EXEEXT)
165169
./precompute$(EXEEXT) ecmult_gen_c
166170

167-
PRECOMP = src/precomputed_ecmult_gen.h src/precomputed_ecmult_gen.c src/precomputed_ecmult.h
171+
PRECOMP = src/precomputed_ecmult_gen.h src/precomputed_ecmult_gen.c src/precomputed_ecmult.h src/precomputed_ecmult.c
168172
noinst_HEADERS += $(PRECOMP)
169173
precomp: $(PRECOMP)
170174

‎src/precompute.c

+51-26
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ static void precompute_ecmult_print_table(FILE *fp, const char *name, int window
2929
int j;
3030
int i;
3131

32-
fprintf(fp, "static const secp256k1_ge_storage %s[ECMULT_TABLE_SIZE(WINDOW_G)] = {\n", name);
32+
fprintf(fp, "const secp256k1_ge_storage %s[ECMULT_TABLE_SIZE(WINDOW_G)] = {\n", name);
3333

3434
fprintf(fp, " S(%"PRIx32",%"PRIx32",%"PRIx32",%"PRIx32",%"PRIx32",%"PRIx32",%"PRIx32",%"PRIx32
3535
",%"PRIx32",%"PRIx32",%"PRIx32",%"PRIx32",%"PRIx32",%"PRIx32",%"PRIx32",%"PRIx32")\n",
@@ -61,53 +61,76 @@ static void precompute_ecmult_print_two_tables(FILE *fp, int window_g, const sec
6161
free(table_128);
6262
}
6363

64-
static int precompute_ecmult(void) {
64+
static int precompute_ecmult(int h_file) {
65+
static const char outfile_c[] = "src/precomputed_ecmult.c";
66+
static const char outfile_h[] = "src/precomputed_ecmult.h";
67+
const char* outfile = h_file ? outfile_h : outfile_c;
6568
const secp256k1_ge g = SECP256K1_G;
6669
const int window_g_13 = 4;
6770
const int window_g_199 = 8;
68-
FILE* fp;
71+
FILE *fp;
6972

70-
fp = fopen("src/precomputed_ecmult.h","w");
73+
fp = fopen(outfile, "w");
7174
if (fp == NULL) {
72-
fprintf(stderr, "Could not open src/precomputed_ecmult.h for writing!\n");
75+
fprintf(stderr, "Could not open %s for writing!\n", outfile);
7376
return -1;
7477
}
7578

79+
if (h_file) {
80+
fprintf(fp, "/* This file was automatically generated by precompute. */\n");
81+
fprintf(fp, "#ifndef SECP256K1_PRECOMPUTED_ECMULT_H\n");
82+
fprintf(fp, "#define SECP256K1_PRECOMPUTED_ECMULT_H\n");
83+
fprintf(fp, "#include \"group.h\"\n");
84+
fprintf(fp, "#include \"ecmult.h\"\n");
85+
fprintf(fp, "#if ECMULT_TABLE_SIZE(ECMULT_WINDOW_SIZE) > %ld\n", ECMULT_TABLE_SIZE(ECMULT_WINDOW_SIZE));
86+
fprintf(fp, " #error configuration mismatch, invalid ECMULT_WINDOW_SIZE. Try deleting precomputed_ecmult.h before the build.\n");
87+
fprintf(fp, "#endif\n");
88+
fprintf(fp, "#if defined(EXHAUSTIVE_TEST_ORDER)\n");
89+
fprintf(fp, "#if EXHAUSTIVE_TEST_ORDER == 13\n");
90+
fprintf(fp, "#define WINDOW_G %d\n", window_g_13);
91+
fprintf(fp, "#elif EXHAUSTIVE_TEST_ORDER == 199\n");
92+
fprintf(fp, "#define WINDOW_G %d\n", window_g_199);
93+
fprintf(fp, "#else\n");
94+
fprintf(fp, " #error No known generator for the specified exhaustive test group order.\n");
95+
fprintf(fp, "#endif\n");
96+
fprintf(fp, "static secp256k1_ge_storage secp256k1_pre_g[ECMULT_TABLE_SIZE(WINDOW_G)];\n");
97+
fprintf(fp, "static secp256k1_ge_storage secp256k1_pre_g_128[ECMULT_TABLE_SIZE(WINDOW_G)];\n");
98+
fprintf(fp, "#else /* !defined(EXHAUSTIVE_TEST_ORDER) */\n");
99+
fprintf(fp, "#define WINDOW_G ECMULT_WINDOW_SIZE\n");
100+
fprintf(fp, "extern const secp256k1_ge_storage secp256k1_pre_g[ECMULT_TABLE_SIZE(WINDOW_G)];\n");
101+
fprintf(fp, "extern const secp256k1_ge_storage secp256k1_pre_g_128[ECMULT_TABLE_SIZE(WINDOW_G)];\n");
102+
fprintf(fp, "#endif /* EXHAUSTIVE_TEST_ORDER */\n");
103+
fprintf(fp, "#undef S\n");
104+
fprintf(fp, "#endif /* SECP256K1_PRECOMPUTED_ECMULT_H */\n");
105+
fclose(fp);
106+
return 0;
107+
}
108+
76109
fprintf(fp, "/* This file was automatically generated by precompute. */\n");
77110
fprintf(fp, "/* This file contains an array secp256k1_pre_g with odd multiples of the base point G and\n");
78111
fprintf(fp, " * an array secp256k1_pre_g_128 with odd multiples of 2^128*G for accelerating the computation of a*P + b*G.\n");
79112
fprintf(fp, " */\n");
80-
fprintf(fp, "#ifndef SECP256K1_PRECOMPUTED_ECMULT_H\n");
81-
fprintf(fp, "#define SECP256K1_PRECOMPUTED_ECMULT_H\n");
113+
fprintf(fp, "#if defined HAVE_CONFIG_H\n");
114+
fprintf(fp, "#include \"libsecp256k1-config.h\"\n");
115+
fprintf(fp, "#endif\n");
116+
fprintf(fp, "#include \"../include/secp256k1.h\"\n");
82117
fprintf(fp, "#include \"group.h\"\n");
118+
fprintf(fp, "#include \"precomputed_ecmult.h\"\n");
83119
fprintf(fp, "#ifdef S\n");
84120
fprintf(fp, " #error macro identifier S already in use.\n");
85121
fprintf(fp, "#endif\n");
86122
fprintf(fp, "#define S(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p) "
87123
"SECP256K1_GE_STORAGE_CONST(0x##a##u,0x##b##u,0x##c##u,0x##d##u,0x##e##u,0x##f##u,0x##g##u,"
88124
"0x##h##u,0x##i##u,0x##j##u,0x##k##u,0x##l##u,0x##m##u,0x##n##u,0x##o##u,0x##p##u)\n");
89-
fprintf(fp, "#if ECMULT_TABLE_SIZE(ECMULT_WINDOW_SIZE) > %ld\n", ECMULT_TABLE_SIZE(ECMULT_WINDOW_SIZE));
90-
fprintf(fp, " #error configuration mismatch, invalid ECMULT_WINDOW_SIZE. Try deleting precomputed_ecmult.h before the build.\n");
91-
fprintf(fp, "#endif\n");
92125
fprintf(fp, "#if defined(EXHAUSTIVE_TEST_ORDER)\n");
93-
fprintf(fp, "#if EXHAUSTIVE_TEST_ORDER == 13\n");
94-
fprintf(fp, "#define WINDOW_G %d\n", window_g_13);
95-
fprintf(fp, "#elif EXHAUSTIVE_TEST_ORDER == 199\n");
96-
fprintf(fp, "#define WINDOW_G %d\n", window_g_199);
97-
fprintf(fp, "#else\n");
98-
fprintf(fp, " #error No known generator for the specified exhaustive test group order.\n");
99-
fprintf(fp, "#endif\n");
100-
fprintf(fp, "static secp256k1_ge_storage secp256k1_pre_g[ECMULT_TABLE_SIZE(WINDOW_G)];\n");
101-
fprintf(fp, "static secp256k1_ge_storage secp256k1_pre_g_128[ECMULT_TABLE_SIZE(WINDOW_G)];\n");
102-
fprintf(fp, "#else /* !defined(EXHAUSTIVE_TEST_ORDER) */\n");
103-
fprintf(fp, "#define WINDOW_G ECMULT_WINDOW_SIZE\n");
126+
fprintf(fp, "#error Cannot compile precomputed_ecmult.c in exhaustive test mode\n");
127+
fprintf(fp, "#endif /* EXHAUSTIVE_TEST_ORDER */\n");
104128

105129
precompute_ecmult_print_two_tables(fp, ECMULT_WINDOW_SIZE, &g);
106130

107-
fprintf(fp, "#endif /* EXHAUSTIVE_TEST_ORDER */\n");
108131
fprintf(fp, "#undef S\n");
109-
fprintf(fp, "#endif /* SECP256K1_PRECOMPUTED_ECMULT_H */\n");
110132
fclose(fp);
133+
111134
return 0;
112135
}
113136

@@ -202,14 +225,16 @@ static int precompute_ecmult_gen(int h_file) {
202225
}
203226

204227
int main(int argc, char** argv) {
205-
if (argc == 2 && !strcmp(argv[1], "ecmult")) {
206-
return precompute_ecmult();
228+
if (argc == 2 && !strcmp(argv[1], "ecmult_c")) {
229+
return precompute_ecmult(0);
230+
} else if (argc == 2 && !strcmp(argv[1], "ecmult_h")) {
231+
return precompute_ecmult(1);
207232
} else if (argc == 2 && !strcmp(argv[1], "ecmult_gen_c")) {
208233
return precompute_ecmult_gen(0);
209234
} else if (argc == 2 && !strcmp(argv[1], "ecmult_gen_h")) {
210235
return precompute_ecmult_gen(1);
211236
} else {
212-
fprintf(stderr, "Usage: ./precompute [ecmult|ecmult_gen_c|ecmult_gen_h]\n");
237+
fprintf(stderr, "Usage: ./precompute [ecmult_c|ecmult_h|ecmult_gen_c|ecmult_gen_h]\n");
213238
return 1;
214239
}
215240
}

‎src/precomputed_ecmult.c

+16,458
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

‎src/precomputed_ecmult.h

+3-16,447
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)
Please sign in to comment.