Skip to content

Commit bdca9bc

Browse files
committed
Squashed 'src/secp256k1/' changes from 3967d96..efad350
efad350 Merge bitcoin#906: Use modified divsteps with initial delta=1/2 for constant-time cc2c09e Merge bitcoin#918: Clean up configuration in gen_context 0706796 add ECMULT_GEN_PREC_BITS to basic_config.h a3aa262 gen_context: Don't include basic-config.h be0609f Add unit tests for edge cases with delta=1/2 variant of divsteps cd393ce Optimization: only do 59 hddivsteps per iteration instead of 62 277b224 Use modified divsteps with initial delta=1/2 for constant-time 376ca36 Fix typo in explanation 1e5d50f Merge bitcoin#889: fix uninitialized read in tests c083cc6 Merge bitcoin#903: Make argument of fe_normalizes_to_zero{_var} const 6e89853 Merge bitcoin#907: changed import to use brackets <> for openssl 4504472 changed import to use brackets <> for openssl as they are not local to the project 26de4df Merge bitcoin#831: Safegcd inverses, drop Jacobi symbols, remove libgmp 23c3fb6 Make argument of fe_normalizes_to_zero{_var} const 24ad04f Make scalar_inverse{,_var} benchmark scale with SECP256K1_BENCH_ITERS ebc1af7 Optimization: track f,g limb count and pass to new variable-time update_fg_var b306935 Optimization: use formulas instead of lookup tables for cancelling g bits 9164a1b Optimization: special-case zero modulus limbs in modinv64 1f233b3 Remove num/gmp support 20448b8 Remove unused Jacobi symbol support 5437e7b Remove unused scalar_sqr aa9cc52 Improve field/scalar inverse tests 1e0e885 Make field/scalar code use the new modinv modules for inverses 436281a Move secp256k1_fe_inverse{_var} to per-impl files aa404d5 Move secp256k1_scalar_{inverse{_var},is_even} to per-impl files 08d5496 Improve bounds checks in modinv modules 151aac0 Add tests for modinv modules d8a92fc Add extensive comments on the safegcd algorithm and implementation 8e415ac Add safegcd based modular inverse modules de0a643 Add secp256k1_ctz{32,64}_var functions 4c3ba88 Merge bitcoin#901: ci: Switch all Linux builds to Debian and more improvements 9361f36 ci: Select number of parallel make jobs depending on CI environment 28eccdf ci: Split output of logs into multiple sections c7f754f ci: Run PRs on merge result instead of on the source branch b994a8b ci: Print information about binaries using "file" f24e122 ci: Switch all Linux builds to Debian ebdba03 Merge bitcoin#891: build: Add workaround for automake 1.13 and older 3a8b47b Merge bitcoin#894: ctime_test: move context randomization test to the end 7d3497c ctime_test: move context randomization test to the end 99a1cfe print warnings for conditional-uninitialized 3d2cf6c initialize variable in tests f329bba build: Add workaround for automake 1.13 and older 24d1656 Merge bitcoin#882: Use bit ops instead of int mult for constant-time logic in gej_add_ge e491d06 Use bit ops instead of int mult for constant-time logic in gej_add_ge f8c0b57 Merge bitcoin#864: Add support for Cirrus CI cc2a545 ci: Refactor Nix shell files 2480e55 ci: Remove support for Travis CI 2b359f1 ci: Enable simple cache for brewing valgrind on macOS 8c02e46 ci: Add support for Cirrus CI 659d0d4 Merge bitcoin#880: Add parens around ROUND_TO_ALIGN's parameter. b6f6498 Add parens around ROUND_TO_ALIGN's parameter. This makes the macro robust against a hypothetical ROUND_TO_ALIGN(foo ? sizeA : size B) invocation. a4abaab Merge bitcoin#877: Add missing secp256k1_ge_set_gej_var decl. 5671e5f Merge bitcoin#874: Remove underscores from header defs. db72678 Merge bitcoin#878: Remove unused secp256k1_fe_inv_all_var b732701 Merge bitcoin#875: Avoid casting (void**) values. 75d2ae1 Remove unused secp256k1_fe_inv_all_var 482e4a9 Add missing secp256k1_ge_set_gej_var decl. 2730618 Avoid casting (void**) values. Replaced with an expression that only casts (void*) values. fb390c5 Remove underscores from header defs. This makes them consistent with other files and avoids reserved identifiers. f2d9aea Merge bitcoin#862: Autoconf improvements 328aaef Merge bitcoin#845: Extract the secret key from a keypair 3c15130 Improve CC_FOR_BUILD detection 47802a4 Restructure and tidy configure.ac 252c19d Ask brew for valgrind include path 8c727b9 Merge bitcoin#860: fixed trivial typo b7bc3a4 fixed typo 33cb3c2 Add secret key extraction from keypair to constant time tests 36d9dc1 Add seckey extraction from keypair to the extrakeys tests fc96aa7 Add a function to extract the secretkey from a keypair 98dac87 Merge bitcoin#858: Fix insecure links 07aa4c7 Fix insecure links b61f9da Merge bitcoin#857: docs: fix simple typo, dependecy -> dependency 18aadf9 docs: fix simple typo, dependecy -> dependency 2d9e717 Merge bitcoin#852: Add sage script for generating scalar_split_lambda constants dc6e5c3 Merge bitcoin#854: Rename msg32 to msghash32 in ecdsa_sign/verify and add explanation 6e85d67 Rename tweak to tweak32 in public API f587f04 Rename msg32 to msghash32 in ecdsa_sign/verify and add explanation 329a2e0 sage: Add script for generating scalar_split_lambda constants 8f0c6f1 Merge bitcoin#851: make test count iteration configurable by environment variable f4fa8d2 forbid a test iteration of 0 or less f554dfc sage: Reorganize files 3a10696 Merge bitcoin#849: Convert Sage code to Python 3 (as used by Sage >= 9) 13c88ef Convert Sage code to Python 3 (as used by Sage >= 9) 0ce4554 make test count iteration configurable by environment variable 9e5939d Merge bitcoin#835: Don't use reserved identifiers memczero and benchmark_verify_t d0a83f7 Merge bitcoin#839: Prevent arithmetic on NULL pointer if the scratch space is too small 903b16a Merge bitcoin#840: Return NULL early in context_preallocated_create if flags invalid 1f4dd03 Typedef (u)int128_t only when they're not provided by the compiler ebfa205 Return NULL early in context_preallocated_create if flags invalid 29a299e Run the undefined behaviour sanitizer on Travis 7506e06 Prevent arithmetic on NULL pointer if the scratch space is too small e89278f Don't use reserved identifiers memczero and benchmark_verify_t git-subtree-dir: src/secp256k1 git-subtree-split: efad350
1 parent 6c0259f commit bdca9bc

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

94 files changed

+4865
-2456
lines changed

.cirrus.yml

+198
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,198 @@
1+
env:
2+
WIDEMUL: auto
3+
STATICPRECOMPUTATION: yes
4+
ECMULTGENPRECISION: auto
5+
ASM: no
6+
BUILD: check
7+
WITH_VALGRIND: yes
8+
RUN_VALGRIND: no
9+
EXTRAFLAGS:
10+
HOST:
11+
ECDH: no
12+
RECOVERY: no
13+
SCHNORRSIG: no
14+
EXPERIMENTAL: no
15+
CTIMETEST: yes
16+
BENCH: yes
17+
ITERS: 2
18+
MAKEFLAGS: -j2
19+
20+
cat_logs_snippet: &CAT_LOGS
21+
always:
22+
cat_tests_log_script:
23+
- cat tests.log || true
24+
cat_exhaustive_tests_log_script:
25+
- cat exhaustive_tests.log || true
26+
cat_valgrind_ctime_test_log_script:
27+
- cat valgrind_ctime_test.log || true
28+
cat_bench_log_script:
29+
- cat bench.log || true
30+
on_failure:
31+
cat_config_log_script:
32+
- cat config.log || true
33+
cat_test_env_script:
34+
- cat test_env.log || true
35+
cat_ci_env_script:
36+
- env
37+
38+
merge_base_script_snippet: &MERGE_BASE
39+
merge_base_script:
40+
- if [ "$CIRRUS_PR" = "" ]; then exit 0; fi
41+
- git fetch $CIRRUS_REPO_CLONE_URL $CIRRUS_BASE_BRANCH
42+
- git config --global user.email "[email protected]"
43+
- git config --global user.name "ci"
44+
- git merge FETCH_HEAD # Merge base to detect silent merge conflicts
45+
46+
task:
47+
name: "x86_64: Linux (Debian stable)"
48+
container:
49+
dockerfile: ci/linux-debian.Dockerfile
50+
# Reduce number of CPUs to be able to do more builds in parallel.
51+
cpu: 1
52+
# More than enough for our scripts.
53+
memory: 1G
54+
matrix: &ENV_MATRIX
55+
- env: {WIDEMUL: int64, RECOVERY: yes}
56+
- env: {WIDEMUL: int64, ECDH: yes, EXPERIMENTAL: yes, SCHNORRSIG: yes}
57+
- env: {WIDEMUL: int128}
58+
- env: {WIDEMUL: int128, RECOVERY: yes, EXPERIMENTAL: yes, SCHNORRSIG: yes}
59+
- env: {WIDEMUL: int128, ECDH: yes, EXPERIMENTAL: yes, SCHNORRSIG: yes}
60+
- env: {WIDEMUL: int128, ASM: x86_64}
61+
- env: { RECOVERY: yes, EXPERIMENTAL: yes, SCHNORRSIG: yes}
62+
- env: { STATICPRECOMPUTATION: no}
63+
- env: {BUILD: distcheck, WITH_VALGRIND: no, CTIMETEST: no, BENCH: no}
64+
- env: {CPPFLAGS: -DDETERMINISTIC}
65+
- env: {CFLAGS: -O0, CTIMETEST: no}
66+
- env:
67+
CFLAGS: "-fsanitize=undefined -fno-omit-frame-pointer"
68+
LDFLAGS: "-fsanitize=undefined -fno-omit-frame-pointer"
69+
UBSAN_OPTIONS: "print_stacktrace=1:halt_on_error=1"
70+
ASM: x86_64
71+
ECDH: yes
72+
RECOVERY: yes
73+
EXPERIMENTAL: yes
74+
SCHNORRSIG: yes
75+
CTIMETEST: no
76+
- env: { ECMULTGENPRECISION: 2 }
77+
- env: { ECMULTGENPRECISION: 8 }
78+
- env:
79+
RUN_VALGRIND: yes
80+
ASM: x86_64
81+
ECDH: yes
82+
RECOVERY: yes
83+
EXPERIMENTAL: yes
84+
SCHNORRSIG: yes
85+
EXTRAFLAGS: "--disable-openssl-tests"
86+
BUILD:
87+
matrix:
88+
- env:
89+
CC: gcc
90+
- env:
91+
CC: clang
92+
<< : *MERGE_BASE
93+
test_script:
94+
- ./ci/cirrus.sh
95+
<< : *CAT_LOGS
96+
97+
task:
98+
name: "i686: Linux (Debian stable)"
99+
container:
100+
dockerfile: ci/linux-debian.Dockerfile
101+
cpu: 1
102+
memory: 1G
103+
env:
104+
HOST: i686-linux-gnu
105+
ECDH: yes
106+
RECOVERY: yes
107+
EXPERIMENTAL: yes
108+
SCHNORRSIG: yes
109+
matrix:
110+
- env:
111+
CC: i686-linux-gnu-gcc
112+
- env:
113+
CC: clang --target=i686-pc-linux-gnu -isystem /usr/i686-linux-gnu/include
114+
test_script:
115+
- ./ci/cirrus.sh
116+
<< : *CAT_LOGS
117+
118+
task:
119+
name: "x86_64: macOS Catalina"
120+
macos_instance:
121+
image: catalina-base
122+
env:
123+
HOMEBREW_NO_AUTO_UPDATE: 1
124+
HOMEBREW_NO_INSTALL_CLEANUP: 1
125+
# Cirrus gives us a fixed number of 12 virtual CPUs. Not that we even have that many jobs at the moment...
126+
MAKEFLAGS: -j13
127+
matrix:
128+
<< : *ENV_MATRIX
129+
matrix:
130+
- env:
131+
CC: gcc-9
132+
- env:
133+
CC: clang
134+
# Update Command Line Tools
135+
# Uncomment this if the Command Line Tools on the CirrusCI macOS image are too old to brew valgrind.
136+
# See https://apple.stackexchange.com/a/195963 for the implementation.
137+
## update_clt_script:
138+
## - system_profiler SPSoftwareDataType
139+
## - touch /tmp/.com.apple.dt.CommandLineTools.installondemand.in-progress
140+
## - |-
141+
## PROD=$(softwareupdate -l | grep "*.*Command Line" | tail -n 1 | awk -F"*" '{print $2}' | sed -e 's/^ *//' | sed 's/Label: //g' | tr -d '\n')
142+
## # For debugging
143+
## - softwareupdate -l && echo "PROD: $PROD"
144+
## - softwareupdate -i "$PROD" --verbose
145+
## - rm /tmp/.com.apple.dt.CommandLineTools.installondemand.in-progress
146+
##
147+
brew_valgrind_pre_script:
148+
- brew config
149+
- brew tap --shallow LouisBrunner/valgrind
150+
# Fetch valgrind source but don't build it yet.
151+
- brew fetch --HEAD LouisBrunner/valgrind/valgrind
152+
brew_valgrind_cache:
153+
# This is $(brew --cellar valgrind) but command substition does not work here.
154+
folder: /usr/local/Cellar/valgrind
155+
# Rebuild cache if ...
156+
fingerprint_script:
157+
# ... macOS version changes:
158+
- sw_vers
159+
# ... brew changes:
160+
- brew config
161+
# ... valgrind changes:
162+
- git -C "$(brew --cache)/valgrind--git" rev-parse HEAD
163+
populate_script:
164+
# If there's no hit in the cache, build and install valgrind.
165+
- brew install --HEAD LouisBrunner/valgrind/valgrind
166+
brew_valgrind_post_script:
167+
# If we have restored valgrind from the cache, tell brew to create symlink to the PATH.
168+
# If we haven't restored from cached (and just run brew install), this is a no-op.
169+
- brew link valgrind
170+
brew_script:
171+
- brew install automake libtool gcc@9
172+
<< : *MERGE_BASE
173+
test_script:
174+
- ./ci/cirrus.sh
175+
<< : *CAT_LOGS
176+
177+
task:
178+
name: "s390x (big-endian): Linux (Debian stable, QEMU)"
179+
container:
180+
dockerfile: ci/linux-debian.Dockerfile
181+
cpu: 1
182+
memory: 1G
183+
env:
184+
QEMU_CMD: qemu-s390x
185+
HOST: s390x-linux-gnu
186+
BUILD:
187+
WITH_VALGRIND: no
188+
ECDH: yes
189+
RECOVERY: yes
190+
EXPERIMENTAL: yes
191+
SCHNORRSIG: yes
192+
CTIMETEST: no
193+
<< : *MERGE_BASE
194+
test_script:
195+
# https://sourceware.org/bugzilla/show_bug.cgi?id=27008
196+
- rm /etc/ld.so.cache
197+
- ./ci/cirrus.sh
198+
<< : *CAT_LOGS

.travis.yml

-108
This file was deleted.

Makefile.am

+4-4
Original file line numberDiff line numberDiff line change
@@ -14,8 +14,6 @@ noinst_HEADERS += src/scalar_8x32_impl.h
1414
noinst_HEADERS += src/scalar_low_impl.h
1515
noinst_HEADERS += src/group.h
1616
noinst_HEADERS += src/group_impl.h
17-
noinst_HEADERS += src/num_gmp.h
18-
noinst_HEADERS += src/num_gmp_impl.h
1917
noinst_HEADERS += src/ecdsa.h
2018
noinst_HEADERS += src/ecdsa_impl.h
2119
noinst_HEADERS += src/eckey.h
@@ -26,14 +24,16 @@ noinst_HEADERS += src/ecmult_const.h
2624
noinst_HEADERS += src/ecmult_const_impl.h
2725
noinst_HEADERS += src/ecmult_gen.h
2826
noinst_HEADERS += src/ecmult_gen_impl.h
29-
noinst_HEADERS += src/num.h
30-
noinst_HEADERS += src/num_impl.h
3127
noinst_HEADERS += src/field_10x26.h
3228
noinst_HEADERS += src/field_10x26_impl.h
3329
noinst_HEADERS += src/field_5x52.h
3430
noinst_HEADERS += src/field_5x52_impl.h
3531
noinst_HEADERS += src/field_5x52_int128_impl.h
3632
noinst_HEADERS += src/field_5x52_asm_impl.h
33+
noinst_HEADERS += src/modinv32.h
34+
noinst_HEADERS += src/modinv32_impl.h
35+
noinst_HEADERS += src/modinv64.h
36+
noinst_HEADERS += src/modinv64_impl.h
3737
noinst_HEADERS += src/assumptions.h
3838
noinst_HEADERS += src/util.h
3939
noinst_HEADERS += src/scratch.h

README.md

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
libsecp256k1
22
============
33

4-
[![Build Status](https://travis-ci.org/bitcoin-core/secp256k1.svg?branch=master)](https://travis-ci.org/bitcoin-core/secp256k1)
4+
[![Build Status](https://api.cirrus-ci.com/github/bitcoin-core/secp256k1.svg?branch=master)](https://cirrus-ci.com/github/bitcoin-core/secp256k1)
55

66
Optimized C library for ECDSA signatures and secret/public key operations on curve secp256k1.
77

@@ -34,11 +34,11 @@ Implementation details
3434
* Optimized implementation of arithmetic modulo the curve's field size (2^256 - 0x1000003D1).
3535
* Using 5 52-bit limbs (including hand-optimized assembly for x86_64, by Diederik Huys).
3636
* Using 10 26-bit limbs (including hand-optimized assembly for 32-bit ARM, by Wladimir J. van der Laan).
37-
* Field inverses and square roots using a sliding window over blocks of 1s (by Peter Dettman).
3837
* Scalar operations
3938
* Optimized implementation without data-dependent branches of arithmetic modulo the curve's order.
4039
* Using 4 64-bit limbs (relying on __int128 support in the compiler).
4140
* Using 8 32-bit limbs.
41+
* Modular inverses (both field elements and scalars) based on [safegcd](https://gcd.cr.yp.to/index.html) with some modifications, and a variable-time variant (by Peter Dettman).
4242
* Group operations
4343
* Point addition formula specifically simplified for the curve equation (y^2 = x^3 + 7).
4444
* Use addition between points in Jacobian and affine coordinates where possible.

build-aux/m4/ax_prog_cc_for_build.m4

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
# ===========================================================================
2-
# http://www.gnu.org/software/autoconf-archive/ax_prog_cc_for_build.html
2+
# https://www.gnu.org/software/autoconf-archive/ax_prog_cc_for_build.html
33
# ===========================================================================
44
#
55
# SYNOPSIS

build-aux/m4/bitcoin_secp.m4

+4-9
Original file line numberDiff line numberDiff line change
@@ -75,15 +75,10 @@ if test x"$has_libcrypto" = x"yes" && test x"$has_openssl_ec" = x; then
7575
fi
7676
])
7777

78-
dnl
79-
AC_DEFUN([SECP_GMP_CHECK],[
80-
if test x"$has_gmp" != x"yes"; then
78+
AC_DEFUN([SECP_VALGRIND_CHECK],[
79+
if test x"$has_valgrind" != x"yes"; then
8180
CPPFLAGS_TEMP="$CPPFLAGS"
82-
CPPFLAGS="$GMP_CPPFLAGS $CPPFLAGS"
83-
LIBS_TEMP="$LIBS"
84-
LIBS="$GMP_LIBS $LIBS"
85-
AC_CHECK_HEADER(gmp.h,[AC_CHECK_LIB(gmp, __gmpz_init,[has_gmp=yes; GMP_LIBS="$GMP_LIBS -lgmp"; AC_DEFINE(HAVE_LIBGMP,1,[Define this symbol if libgmp is installed])])])
86-
CPPFLAGS="$CPPFLAGS_TEMP"
87-
LIBS="$LIBS_TEMP"
81+
CPPFLAGS="$VALGRIND_CPPFLAGS $CPPFLAGS"
82+
AC_CHECK_HEADER([valgrind/memcheck.h], [has_valgrind=yes; AC_DEFINE(HAVE_VALGRIND,1,[Define this symbol if valgrind is installed])])
8883
fi
8984
])

0 commit comments

Comments
 (0)