Skip to content

Commit df3224d

Browse files
benmadouglasbakkum
authored andcommitted
make ECMULT_GEN_PREC_BITS configurable
1 parent bd0d0fb commit df3224d

File tree

5 files changed

+35
-7
lines changed

5 files changed

+35
-7
lines changed

.travis.yml

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ cache:
1111
- src/java/guava/
1212
env:
1313
global:
14-
- FIELD=auto BIGNUM=auto SCALAR=auto ENDOMORPHISM=no STATICPRECOMPUTATION=yes ASM=no BUILD=check EXTRAFLAGS= HOST= ECDH=no RECOVERY=no EXPERIMENTAL=no JNI=no
14+
- FIELD=auto BIGNUM=auto SCALAR=auto ENDOMORPHISM=no STATICPRECOMPUTATION=yes ECMULTGENPRECISION=auto ASM=no BUILD=check EXTRAFLAGS= HOST= ECDH=no RECOVERY=no EXPERIMENTAL=no JNI=no
1515
- GUAVA_URL=https://search.maven.org/remotecontent?filepath=com/google/guava/guava/18.0/guava-18.0.jar GUAVA_JAR=src/java/guava/guava-18.0.jar
1616
matrix:
1717
- SCALAR=32bit RECOVERY=yes
@@ -30,6 +30,8 @@ env:
3030
- EXTRAFLAGS=CPPFLAGS=-DDETERMINISTIC
3131
- EXTRAFLAGS=CFLAGS=-O0
3232
- BUILD=check-java JNI=yes ECDH=yes EXPERIMENTAL=yes
33+
- ECMULTGENPRECISION=2
34+
- ECMULTGENPRECISION=8
3335
matrix:
3436
fast_finish: true
3537
include:
@@ -65,4 +67,4 @@ before_script: ./autogen.sh
6567
script:
6668
- if [ -n "$HOST" ]; then export USE_HOST="--host=$HOST"; fi
6769
- if [ "x$HOST" = "xi686-linux-gnu" ]; then export CC="$CC -m32"; fi
68-
- ./configure --enable-experimental=$EXPERIMENTAL --enable-endomorphism=$ENDOMORPHISM --with-field=$FIELD --with-bignum=$BIGNUM --with-scalar=$SCALAR --enable-ecmult-static-precomputation=$STATICPRECOMPUTATION --enable-module-ecdh=$ECDH --enable-module-recovery=$RECOVERY --enable-jni=$JNI $EXTRAFLAGS $USE_HOST && make -j2 $BUILD
70+
- ./configure --enable-experimental=$EXPERIMENTAL --enable-endomorphism=$ENDOMORPHISM --with-field=$FIELD --with-bignum=$BIGNUM --with-scalar=$SCALAR --enable-ecmult-static-precomputation=$STATICPRECOMPUTATION --with-ecmult-gen-precision=$ECMULTGENPRECISION --enable-module-ecdh=$ECDH --enable-module-recovery=$RECOVERY --enable-jni=$JNI $EXTRAFLAGS $USE_HOST && make -j2 $BUILD

Makefile.am

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -155,7 +155,7 @@ CPPFLAGS_FOR_BUILD +=-I$(top_srcdir)
155155

156156
gen_context_OBJECTS = gen_context.o
157157
gen_context_BIN = gen_context$(BUILD_EXEEXT)
158-
gen_%.o: src/gen_%.c
158+
gen_%.o: src/gen_%.c src/libsecp256k1-config.h
159159
$(CC_FOR_BUILD) $(CPPFLAGS_FOR_BUILD) $(CFLAGS_FOR_BUILD) -c $< -o $@
160160

161161
$(gen_context_BIN): $(gen_context_OBJECTS)
@@ -172,7 +172,7 @@ src/ecmult_static_context.h: $(gen_context_BIN)
172172
CLEANFILES = $(gen_context_BIN) src/ecmult_static_context.h $(JAVAROOT)/$(JAVAORG)/*.class .stamp-java
173173
endif
174174

175-
EXTRA_DIST = autogen.sh src/gen_context.c src/basic-config.h $(JAVA_FILES)
175+
EXTRA_DIST = autogen.sh src/gen_context.c src/libsecp256k1-config.h src/basic-config.h $(JAVA_FILES)
176176

177177
if ENABLE_MODULE_ECDH
178178
include src/modules/ecdh/Makefile.am.include

configure.ac

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -165,6 +165,14 @@ AC_ARG_WITH([ecmult-window], [AS_HELP_STRING([--with-ecmult-window=SIZE|auto],
165165
)],
166166
[req_ecmult_window=$withval], [req_ecmult_window=auto])
167167

168+
AC_ARG_WITH([ecmult-gen-precision], [AS_HELP_STRING([--with-ecmult-gen-precision=2|4|8|auto],
169+
[Precision bits to tune the precomputed table size for signing.]
170+
[The size of the table is 32kB for 2 bits, 64kB for 4 bits, 512kB for 8 bits of precision.]
171+
[A smaller table size usually results in slower signing.]
172+
["auto" is a reasonable setting for desktop machines (currently 4). [default=auto]]
173+
)],
174+
[req_ecmult_gen_precision=$withval], [req_ecmult_gen_precision=auto])
175+
168176
AC_CHECK_TYPES([__int128])
169177

170178
if test x"$enable_coverage" = x"yes"; then
@@ -423,6 +431,22 @@ case $set_ecmult_window in
423431
;;
424432
esac
425433

434+
#set ecmult gen precision
435+
if test x"$req_ecmult_gen_precision" = x"auto"; then
436+
set_ecmult_gen_precision=4
437+
else
438+
set_ecmult_gen_precision=$req_ecmult_gen_precision
439+
fi
440+
441+
case $set_ecmult_gen_precision in
442+
2|4|8)
443+
AC_DEFINE_UNQUOTED(ECMULT_GEN_PREC_BITS, $set_ecmult_gen_precision, [Set ecmult gen precision bits])
444+
;;
445+
*)
446+
AC_MSG_ERROR(['ecmult gen precision not 2, 4, 8 or "auto"'])
447+
;;
448+
esac
449+
426450
if test x"$use_tests" = x"yes"; then
427451
SECP_OPENSSL_CHECK
428452
if test x"$has_openssl_ec" = x"yes"; then
@@ -558,6 +582,7 @@ echo " bignum = $set_bignum"
558582
echo " field = $set_field"
559583
echo " scalar = $set_scalar"
560584
echo " ecmult window size = $set_ecmult_window"
585+
echo " ecmult gen prec. bits = $set_ecmult_gen_precision"
561586
echo
562587
echo " CC = $CC"
563588
echo " CFLAGS = $CFLAGS"

src/ecmult_gen.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,8 @@
1010
#include "scalar.h"
1111
#include "group.h"
1212

13-
#ifndef ECMULT_GEN_PREC_BITS
14-
#define ECMULT_GEN_PREC_BITS 4/* 4 bits: 64kB table, fastest; 2 bits: 32kB table, ~75% speed */
13+
#if ECMULT_GEN_PREC_BITS != 2 && ECMULT_GEN_PREC_BITS != 4 && ECMULT_GEN_PREC_BITS != 8
14+
# error "Set ECMULT_GEN_PREC_BITS to 2, 4 or 8."
1515
#endif
1616
#define ECMULT_GEN_PREC_B ECMULT_GEN_PREC_BITS
1717
#define ECMULT_GEN_PREC_G (1 << ECMULT_GEN_PREC_B)

src/gen_context.c

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,10 @@
44
* file COPYING or http://www.opensource.org/licenses/mit-license.php.*
55
**********************************************************************/
66

7+
#include "libsecp256k1-config.h" // for ECMULT_GEN_PREC_BITS
78
#define USE_BASIC_CONFIG 1
8-
99
#include "basic-config.h"
10+
1011
#include "include/secp256k1.h"
1112
#include "util.h"
1213
#include "field_impl.h"

0 commit comments

Comments
 (0)