Skip to content

Commit 967c65b

Browse files
committed
Squashed 'src/secp256k1/' changes from 44c2452fd3..9a66978e87
9a66978e87 Add ellswift testing to CI f4aba16117 Add ElligatorSwift ctime tests f75ada474e Add tests for ElligatorSwift 00564207a0 Add ElligatorSwift benchmarks 92b824d570 Add ellswift module implementing ElligatorSwift 8b3b24f8d9 Add functions to test if X coordinate is valid 87681bd117 Add benchmark for key generation 2a04ee074e Add x-only ecmult_const version for x=n/d 55822babf2 doc: Describe Jacobi calculation in safegcd_implementation.md 87e7e70eb7 Native jacobi symbol algorithm a9c6aa9ed3 Make secp256k1_modinv64_det_check_pow2 support abs val 7e470f8db9 Make secp256k1_i128_check_pow2 support -(2^n) 5c789dcd73 Merge bitcoin-core/secp256k1#1168: Replace deprecated context flags with NONE in benchmarks and tests d6dc0f4ae3 tests: Switch to NONE contexts in module tests 0c8a5caddd tests: Switch to NONE contexts in tests.c 86540e9e1f tests: add test for deprecated flags and rm them from run_context caa0ad631e group: add gej_eq_var 37ba744f5b tests: Switch to NONE contexts in exhaustive and ctime tests 8d7a9a8eda benchmarks: Switch to NONE contexts e3f84777eb Merge bitcoin-core/secp256k1#1126: API cleanup with respect to contexts 4386a2306c examples: Switch to NONE contexts 7289b51d31 docs: Use doxygen style if and only if comment is user-facing e7d0185c90 docs: Get rid of "initialized for signing" terminology 06126364ad docs: Tidy and improve docs about contexts and randomization e02d6862bd selftest: Expose in public API e383fbfa66 selftest: Rename internal function to make name available for API d2c6d48de3 tests: Use new name of static context 53796d2b24 contexts: Rename static context 72fedf8a6c docs: Improve docs for static context 316ac7625a contexts: Deprecate all context flags except SECP256K1_CONTEXT_NONE 477f02c4de Merge bitcoin-core/secp256k1#1165: gitignore: Add *.sage.py files autogenerated by sage [skip ci] 092be61c5e gitignore: Add *.sage.py files autogenerated by sage 1a553ee8be docs: Change signature "validation" to "verification" ee7341fbac docs: Never require a verification context 751c4354d5 Merge bitcoin-core/secp256k1#1152: Update macOS image for CI 2286f80902 Merge bitcoin-core/secp256k1#993: Enable non-experimental modules by default e40fd277b7 Merge bitcoin-core/secp256k1#1156: Followups to int128_struct arithmetic 99bd335599 Make int128 overflow test use secp256k1_[ui]128_mul a8494b02bf Use compute credits for macOS jobs 3afce0af7c Avoid signed overflow in MSVC AMR64 secp256k1_mul128 c0ae48c995 Update macOS image for CI 9b5f589d30 Heuristically decide whether to use int128_struct 63ff064d2f int128: Add test override for testing __(u)mulh on MSVC X64 f2b7e88768 Add int128 randomized tests 6138d73be4 Merge bitcoin-core/secp256k1#1155: Add MSan CI jobs ddf2b2910e Merge bitcoin-core/secp256k1#1000: Synthetic int128 type. 86e3b38a4a Merge bitcoin-core/secp256k1#1149: Remove usage of CHECK from non-test file 00a42b91b3 Add MSan CI job 44916ae915 Merge bitcoin-core/secp256k1#1147: ci: print env to allow reproducing the job outside of CI c2ee9175e9 Merge bitcoin-core/secp256k1#1146: ci: prevent "-v/--version: not found" irrelevant error e13fae487e Merge bitcoin-core/secp256k1#1150: ci: always cat test_env.log a340d9500a ci: add int128_struct tests dceaa1f579 int128: Tidy #includes of int128.h and int128_impl.h 2914bccbc0 Simulated int128 type. 6a965b6b98 Remove usage of CHECK from non-test file 5c9f1a5c37 ci: always cat all logs_snippets 49ae843592 ci: mostly prevent "-v/--version: not found" irrelevant error 4e54c03153 ci: print env to allow reproducing the job outside of CI a43e982bca Merge bitcoin-core/secp256k1#1144: Cleanup `.gitignore` file f5039cb66c Cleanup `.gitignore` file 798727ae1e Revert "Add test logs to gitignore" 41e8704b48 build: Enable some modules by default 694ce8fb2d Merge bitcoin-core/secp256k1#1131: readme: Misc improvements 88b00897e7 readme: Fix line break 78f5296da4 readme: Sell "no runtime dependencies" ef48f088ad readme: Add IRC channel 9f8a13dc8e Merge bitcoin-core/secp256k1#1128: configure: Remove pkgconfig macros again (reintroduced by mismerge) cabe085bb4 configure: Remove pkgconfig macros again (reintroduced by mismerge) 3efeb9da21 Merge bitcoin-core/secp256k1#1121: config: Set preprocessor defaults for ECMULT_* config values 6a873cc4a9 Merge bitcoin-core/secp256k1#1122: tests: Randomize the context with probability 15/16 instead of 1/4 17065f48ae tests: Randomize the context with probability 15/16 instead of 1/4 c27ae45144 config: Remove basic-config.h da6514a04a config: Introduce DEBUG_CONFIG macro for debug output of config 63a3565e97 Merge bitcoin-core/secp256k1#1120: ecmult_gen: Skip RNG when creating blinding if no seed is available d0cf55e13a config: Set preprocessor defaults for ECMULT_* config values 55f8bc99dc ecmult_gen: Improve comments about projective blinding 7a86955800 ecmult_gen: Simplify code (no observable change) 4cc0b1b669 ecmult_gen: Skip RNG when creating blinding if no seed is available af65d30cc8 Merge bitcoin-core/secp256k1#1116: build: Fix #include "..." paths to get rid of further -I arguments 40a3473a9d build: Fix #include "..." paths to get rid of further -I arguments 43756da819 Merge bitcoin-core/secp256k1#1115: Fix sepc256k1 -> secp256k1 typo in group.h 069aba8125 Fix sepc256k1 -> secp256k1 typo in group.h accadc94df Merge bitcoin-core/secp256k1#1114: `_scratch_destroy`: move `VERIFY_CHECK` after invalid scrach space check cd47033335 Merge bitcoin-core/secp256k1#1084: ci: Add MSVC builds 1827c9bf2b scratch_destroy: move VERIFY_CHECK after invalid scrach space check 49e2acd927 configure: Improve rationale for WERROR_CFLAGS 8dc4b03341 ci: Add a C++ job that compiles the public headers without -fpermissive 51f296a46c ci: Run persistent wineserver to speed up wine 3fb3269c22 ci: Add 32-bit MinGW64 build 9efc2e5221 ci: Add MSVC builds 2be6ba0fed configure: Convince autotools to work with MSVC's archiver lib.exe bd81f4140a schnorrsig bench: Suppress a stupid warning in MSVC 09f3d71c51 configure: Add a few CFLAGS for MSVC 3b4f3d0d46 build: Reject C++ compilers in the preprocessor 1cc0941414 configure: Don't abort if the compiler does not define __STDC__ cca8cbbac8 configure: Output message when checking for valgrind 1a6be5745f bench: Make benchmarks compile on MSVC git-subtree-dir: src/secp256k1 git-subtree-split: 9a66978e87ea02c81981a71bc7ab73d5cf7df5ae
1 parent c41bfd1 commit 967c65b

Some content is hidden

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

72 files changed

+3777
-1031
lines changed

.cirrus.yml

+116-57
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ env:
1818
ECDH: no
1919
RECOVERY: no
2020
SCHNORRSIG: no
21+
ELLSWIFT: no
2122
### test options
2223
SECP256K1_TEST_ITERS:
2324
BENCH: yes
@@ -26,6 +27,11 @@ env:
2627
# Compile and run the tests
2728
EXAMPLES: yes
2829

30+
# https://cirrus-ci.org/pricing/#compute-credits
31+
# Only use credits for pull requests to the main repo
32+
credits_snippet: &CREDITS
33+
use_compute_credits: $CIRRUS_REPO_FULL_NAME == 'bitcoin-core/secp256k1' && $CIRRUS_PR != ""
34+
2935
cat_logs_snippet: &CAT_LOGS
3036
always:
3137
cat_tests_log_script:
@@ -36,7 +42,6 @@ cat_logs_snippet: &CAT_LOGS
3642
- cat valgrind_ctime_test.log || true
3743
cat_bench_log_script:
3844
- cat bench.log || true
39-
on_failure:
4045
cat_config_log_script:
4146
- cat config.log || true
4247
cat_test_env_script:
@@ -67,11 +72,12 @@ task:
6772
<< : *LINUX_CONTAINER
6873
matrix: &ENV_MATRIX
6974
- env: {WIDEMUL: int64, RECOVERY: yes}
70-
- env: {WIDEMUL: int64, ECDH: yes, SCHNORRSIG: yes}
75+
- env: {WIDEMUL: int64, ECDH: yes, SCHNORRSIG: yes, ELLSWIFT: yes}
7176
- env: {WIDEMUL: int128}
72-
- env: {WIDEMUL: int128, RECOVERY: yes, SCHNORRSIG: yes}
77+
- env: {WIDEMUL: int128_struct, ELLSWIFT: yes}
78+
- env: {WIDEMUL: int128, RECOVERY: yes, SCHNORRSIG: yes, ELLSWIFT: yes}
7379
- env: {WIDEMUL: int128, ECDH: yes, SCHNORRSIG: yes}
74-
- env: {WIDEMUL: int128, ASM: x86_64}
80+
- env: {WIDEMUL: int128, ASM: x86_64 , ELLSWIFT: yes}
7581
- env: { RECOVERY: yes, SCHNORRSIG: yes}
7682
- env: {BUILD: distcheck, WITH_VALGRIND: no, CTIMETEST: no, BENCH: no}
7783
- env: {CPPFLAGS: -DDETERMINISTIC}
@@ -107,65 +113,32 @@ task:
107113
<< : *CAT_LOGS
108114

109115
task:
110-
name: "x86_64: macOS Catalina"
116+
name: "arm64: macOS Ventura"
111117
macos_instance:
112-
image: catalina-base
118+
image: ghcr.io/cirruslabs/macos-ventura-base:latest
113119
env:
114120
HOMEBREW_NO_AUTO_UPDATE: 1
115121
HOMEBREW_NO_INSTALL_CLEANUP: 1
116-
# Cirrus gives us a fixed number of 12 virtual CPUs. Not that we even have that many jobs at the moment...
117-
MAKEFLAGS: -j13
122+
# Cirrus gives us a fixed number of 4 virtual CPUs. Not that we even have that many jobs at the moment...
123+
MAKEFLAGS: -j5
118124
matrix:
119125
<< : *ENV_MATRIX
126+
env:
127+
ASM: no
128+
WITH_VALGRIND: no
129+
CTIMETEST: no
120130
matrix:
121131
- env:
122-
CC: gcc-9
132+
CC: gcc
123133
- env:
124134
CC: clang
125-
# Update Command Line Tools
126-
# Uncomment this if the Command Line Tools on the CirrusCI macOS image are too old to brew valgrind.
127-
# See https://apple.stackexchange.com/a/195963 for the implementation.
128-
## update_clt_script:
129-
## - system_profiler SPSoftwareDataType
130-
## - touch /tmp/.com.apple.dt.CommandLineTools.installondemand.in-progress
131-
## - |-
132-
## PROD=$(softwareupdate -l | grep "*.*Command Line" | tail -n 1 | awk -F"*" '{print $2}' | sed -e 's/^ *//' | sed 's/Label: //g' | tr -d '\n')
133-
## # For debugging
134-
## - softwareupdate -l && echo "PROD: $PROD"
135-
## - softwareupdate -i "$PROD" --verbose
136-
## - rm /tmp/.com.apple.dt.CommandLineTools.installondemand.in-progress
137-
##
138-
brew_valgrind_pre_script:
139-
# Retry a few times because this tends to fail randomly.
140-
- for i in {1..5}; do brew update && break || sleep 15; done
141-
- brew config
142-
- brew tap LouisBrunner/valgrind
143-
# Fetch valgrind source but don't build it yet.
144-
- brew fetch --HEAD LouisBrunner/valgrind/valgrind
145-
brew_valgrind_cache:
146-
# This is $(brew --cellar valgrind) but command substition does not work here.
147-
folder: /usr/local/Cellar/valgrind
148-
# Rebuild cache if ...
149-
fingerprint_script:
150-
# ... macOS version changes:
151-
- sw_vers
152-
# ... brew changes:
153-
- brew config
154-
# ... valgrind changes:
155-
- git -C "$(brew --cache)/valgrind--git" rev-parse HEAD
156-
populate_script:
157-
# If there's no hit in the cache, build and install valgrind.
158-
- brew install --HEAD LouisBrunner/valgrind/valgrind
159-
brew_valgrind_post_script:
160-
# If we have restored valgrind from the cache, tell brew to create symlink to the PATH.
161-
# If we haven't restored from cached (and just run brew install), this is a no-op.
162-
- brew link valgrind
163135
brew_script:
164-
- brew install automake libtool gcc@9
136+
- brew install automake libtool gcc
165137
<< : *MERGE_BASE
166138
test_script:
167139
- ./ci/cirrus.sh
168140
<< : *CAT_LOGS
141+
<< : *CREDITS
169142

170143
task:
171144
name: "s390x (big-endian): Linux (Debian stable, QEMU)"
@@ -178,6 +151,7 @@ task:
178151
ECDH: yes
179152
RECOVERY: yes
180153
SCHNORRSIG: yes
154+
ELLSWIFT: yes
181155
CTIMETEST: no
182156
<< : *MERGE_BASE
183157
test_script:
@@ -197,6 +171,7 @@ task:
197171
ECDH: yes
198172
RECOVERY: yes
199173
SCHNORRSIG: yes
174+
ELLSWIFT: yes
200175
CTIMETEST: no
201176
matrix:
202177
- env: {}
@@ -217,6 +192,7 @@ task:
217192
ECDH: yes
218193
RECOVERY: yes
219194
SCHNORRSIG: yes
195+
ELLSWIFT: yes
220196
CTIMETEST: no
221197
<< : *MERGE_BASE
222198
test_script:
@@ -234,24 +210,72 @@ task:
234210
ECDH: yes
235211
RECOVERY: yes
236212
SCHNORRSIG: yes
213+
ELLSWIFT: yes
237214
CTIMETEST: no
238215
<< : *MERGE_BASE
239216
test_script:
240217
- ./ci/cirrus.sh
241218
<< : *CAT_LOGS
242219

243220
task:
244-
name: "x86_64 (mingw32-w64): Windows (Debian stable, Wine)"
245221
<< : *LINUX_CONTAINER
246222
env:
247-
WRAPPER_CMD: wine64-stable
248-
SECP256K1_TEST_ITERS: 16
249-
HOST: x86_64-w64-mingw32
223+
WRAPPER_CMD: wine
250224
WITH_VALGRIND: no
251225
ECDH: yes
252226
RECOVERY: yes
253227
SCHNORRSIG: yes
254228
CTIMETEST: no
229+
matrix:
230+
- name: "x86_64 (mingw32-w64): Windows (Debian stable, Wine)"
231+
env:
232+
HOST: x86_64-w64-mingw32
233+
- name: "i686 (mingw32-w64): Windows (Debian stable, Wine)"
234+
env:
235+
HOST: i686-w64-mingw32
236+
<< : *MERGE_BASE
237+
test_script:
238+
- ./ci/cirrus.sh
239+
<< : *CAT_LOGS
240+
241+
task:
242+
<< : *LINUX_CONTAINER
243+
env:
244+
WRAPPER_CMD: wine
245+
WERROR_CFLAGS: -WX
246+
WITH_VALGRIND: no
247+
ECDH: yes
248+
RECOVERY: yes
249+
EXPERIMENTAL: yes
250+
SCHNORRSIG: yes
251+
ELLSWIFT: yes
252+
CTIMETEST: no
253+
# Use a MinGW-w64 host to tell ./configure we're building for Windows.
254+
# This will detect some MinGW-w64 tools but then make will need only
255+
# the MSVC tools CC, AR and NM as specified below.
256+
HOST: x86_64-w64-mingw32
257+
CC: /opt/msvc/bin/x64/cl
258+
AR: /opt/msvc/bin/x64/lib
259+
NM: /opt/msvc/bin/x64/dumpbin -symbols -headers
260+
# Set non-essential options that affect the CLI messages here.
261+
# (They depend on the user's taste, so we don't want to set them automatically in configure.ac.)
262+
CFLAGS: -nologo -diagnostics:caret
263+
LDFLAGS: -XCClinker -nologo -XCClinker -diagnostics:caret
264+
matrix:
265+
- name: "x86_64 (MSVC): Windows (Debian stable, Wine)"
266+
- name: "x86_64 (MSVC): Windows (Debian stable, Wine, int128_struct)"
267+
env:
268+
WIDEMUL: int128_struct
269+
- name: "x86_64 (MSVC): Windows (Debian stable, Wine, int128_struct with __(u)mulh)"
270+
env:
271+
WIDEMUL: int128_struct
272+
CPPFLAGS: -DSECP256K1_MSVC_MULH_TEST_OVERRIDE
273+
- name: "i686 (MSVC): Windows (Debian stable, Wine)"
274+
env:
275+
HOST: i686-w64-mingw32
276+
CC: /opt/msvc/bin/x86/cl
277+
AR: /opt/msvc/bin/x86/lib
278+
NM: /opt/msvc/bin/x86/dumpbin -symbols -headers
255279
<< : *MERGE_BASE
256280
test_script:
257281
- ./ci/cirrus.sh
@@ -264,6 +288,7 @@ task:
264288
ECDH: yes
265289
RECOVERY: yes
266290
SCHNORRSIG: yes
291+
ELLSWIFT: yes
267292
CTIMETEST: no
268293
matrix:
269294
- name: "Valgrind (memcheck)"
@@ -301,23 +326,57 @@ task:
301326
- ./ci/cirrus.sh
302327
<< : *CAT_LOGS
303328

329+
# Memory sanitizers
304330
task:
305-
name: "C++ -fpermissive"
306331
<< : *LINUX_CONTAINER
332+
name: "MSan"
307333
env:
308-
# ./configure correctly errors out when given CC=g++.
309-
# We hack around this by passing CC=g++ only to make.
310-
CC: gcc
311-
MAKEFLAGS: -j4 CC=g++ CFLAGS=-fpermissive\ -g
334+
ECDH: yes
335+
RECOVERY: yes
336+
SCHNORRSIG: yes
337+
CTIMETEST: no
338+
CC: clang
339+
SECP256K1_TEST_ITERS: 32
340+
ASM: no
341+
container:
342+
memory: 2G
343+
matrix:
344+
- env:
345+
CFLAGS: "-fsanitize=memory -g"
346+
- env:
347+
ECMULTGENPRECISION: 2
348+
ECMULTWINDOW: 2
349+
CFLAGS: "-fsanitize=memory -g -O3"
350+
<< : *MERGE_BASE
351+
test_script:
352+
- ./ci/cirrus.sh
353+
<< : *CAT_LOGS
354+
355+
task:
356+
name: "C++ -fpermissive (entire project)"
357+
<< : *LINUX_CONTAINER
358+
env:
359+
CC: g++
360+
CFLAGS: -fpermissive -g
361+
CPPFLAGS: -DSECP256K1_CPLUSPLUS_TEST_OVERRIDE
312362
WERROR_CFLAGS:
313363
ECDH: yes
314364
RECOVERY: yes
315365
SCHNORRSIG: yes
366+
ELLSWIFT: yes
316367
<< : *MERGE_BASE
317368
test_script:
318369
- ./ci/cirrus.sh
319370
<< : *CAT_LOGS
320371

372+
task:
373+
name: "C++ (public headers)"
374+
<< : *LINUX_CONTAINER
375+
test_script:
376+
- g++ -Werror include/*.h
377+
- clang -Werror -x c++-header include/*.h
378+
- /opt/msvc/bin/x64/cl.exe -c -WX -TP include/*.h
379+
321380
task:
322381
name: "sage prover"
323382
<< : *LINUX_CONTAINER

.gitignore

+1-3
Original file line numberDiff line numberDiff line change
@@ -13,9 +13,9 @@ schnorr_example
1313
*.so
1414
*.a
1515
*.csv
16-
!.gitignore
1716
*.log
1817
*.trs
18+
*.sage.py
1919

2020
Makefile
2121
configure
@@ -34,8 +34,6 @@ libtool
3434
*.lo
3535
*.o
3636
*~
37-
*.log
38-
*.trs
3937

4038
coverage/
4139
coverage.html

Makefile.am

+12-3
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,12 @@ noinst_HEADERS += src/precomputed_ecmult.h
4848
noinst_HEADERS += src/precomputed_ecmult_gen.h
4949
noinst_HEADERS += src/assumptions.h
5050
noinst_HEADERS += src/util.h
51+
noinst_HEADERS += src/int128.h
52+
noinst_HEADERS += src/int128_impl.h
53+
noinst_HEADERS += src/int128_native.h
54+
noinst_HEADERS += src/int128_native_impl.h
55+
noinst_HEADERS += src/int128_struct.h
56+
noinst_HEADERS += src/int128_struct_impl.h
5157
noinst_HEADERS += src/scratch.h
5258
noinst_HEADERS += src/scratch_impl.h
5359
noinst_HEADERS += src/selftest.h
@@ -58,7 +64,6 @@ noinst_HEADERS += src/hash_impl.h
5864
noinst_HEADERS += src/field.h
5965
noinst_HEADERS += src/field_impl.h
6066
noinst_HEADERS += src/bench.h
61-
noinst_HEADERS += src/basic-config.h
6267
noinst_HEADERS += contrib/lax_der_parsing.h
6368
noinst_HEADERS += contrib/lax_der_parsing.c
6469
noinst_HEADERS += contrib/lax_der_privatekey_parsing.h
@@ -87,7 +92,7 @@ endif
8792
endif
8893

8994
libsecp256k1_la_SOURCES = src/secp256k1.c
90-
libsecp256k1_la_CPPFLAGS = -I$(top_srcdir)/include -I$(top_srcdir)/src $(SECP_INCLUDES)
95+
libsecp256k1_la_CPPFLAGS = $(SECP_INCLUDES)
9196
libsecp256k1_la_LIBADD = $(SECP_LIBS) $(COMMON_LIB) $(PRECOMPUTED_LIB)
9297
libsecp256k1_la_LDFLAGS = -no-undefined -version-info $(LIB_VERSION_CURRENT):$(LIB_VERSION_REVISION):$(LIB_VERSION_AGE)
9398

@@ -112,7 +117,7 @@ TESTS =
112117
if USE_TESTS
113118
noinst_PROGRAMS += tests
114119
tests_SOURCES = src/tests.c
115-
tests_CPPFLAGS = -I$(top_srcdir)/src -I$(top_srcdir)/include $(SECP_INCLUDES) $(SECP_TEST_INCLUDES)
120+
tests_CPPFLAGS = $(SECP_INCLUDES) $(SECP_TEST_INCLUDES)
116121
if VALGRIND_ENABLED
117122
tests_CPPFLAGS += -DVALGRIND
118123
noinst_PROGRAMS += valgrind_ctime_test
@@ -228,3 +233,7 @@ endif
228233
if ENABLE_MODULE_SCHNORRSIG
229234
include src/modules/schnorrsig/Makefile.am.include
230235
endif
236+
237+
if ENABLE_MODULE_ELLSWIFT
238+
include src/modules/ellswift/Makefile.am.include
239+
endif

README.md

+6-2
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@ libsecp256k1
22
============
33

44
[![Build Status](https://api.cirrus-ci.com/github/bitcoin-core/secp256k1.svg?branch=master)](https://cirrus-ci.com/github/bitcoin-core/secp256k1)
5+
![Dependencies: None](https://img.shields.io/badge/dependencies-none-success)
6+
[![irc.libera.chat #secp256k1](https://img.shields.io/badge/irc.libera.chat-%23secp256k1-success)](https://web.libera.chat/#secp256k1)
57

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

@@ -15,6 +17,7 @@ Features:
1517
* Derandomized ECDSA (via RFC6979 or with a caller provided function.)
1618
* Very efficient implementation.
1719
* Suitable for embedded systems.
20+
* No runtime dependencies.
1821
* Optional module for public key recovery.
1922
* Optional module for ECDH key exchange.
2023
* Optional module for Schnorr signatures according to [BIP-340](https://github.com/bitcoin/bips/blob/master/bip-0340.mediawiki).
@@ -72,11 +75,12 @@ To compile optional modules (such as Schnorr signatures), you need to run `./con
7275

7376
Usage examples
7477
-----------
75-
Usage examples can be found in the [examples](examples) directory. To compile them you need to configure with `--enable-examples`.
78+
Usage examples can be found in the [examples](examples) directory. To compile them you need to configure with `--enable-examples`.
7679
* [ECDSA example](examples/ecdsa.c)
7780
* [Schnorr signatures example](examples/schnorr.c)
7881
* [Deriving a shared secret (ECDH) example](examples/ecdh.c)
79-
To compile the Schnorr signature and ECDH examples, you also need to configure with `--enable-module-schnorrsig` and `--enable-module-ecdh`.
82+
83+
To compile the Schnorr signature and ECDH examples, you also need to configure with `--enable-module-schnorrsig` and `--enable-module-ecdh`.
8084

8185
Test coverage
8286
-----------

0 commit comments

Comments
 (0)