Merge bitcoin-core/secp256k1#1840: ci: Simplify module configuration and extend test coverage
What changed, and why it matters
This change only edits the project's automated continuous-integration (CI) configuration file. It turns on all optional cryptographic modules by default in CI and adds test runs that disable each module one at a time. There is no change to the actual library source code, build scripts, or released binaries, so it cannot directly introduce a runtime security vulnerability or fix one in shipped code. It is a testing-infrastructure cleanup that also increases coverage of build configurations.
No security action required. Treat as normal CI maintenance. Reviewers may optionally verify that the new disabled-module matrix entries correctly respect module dependencies (e.g., EXTRAKEYS disables SCHNORRSIG, MUSIG, SILENTPAYMENTS).
Security signals we found
No source-code changes
No build-system logic changes
CI-only workflow refactor
Increased test matrix coverage for disabled modules
Evidence from the diff
The commit modifies .github/workflows/ci.yml. It flips default module flags from ‘no’ to ‘yes’ (ECDH, RECOVERY, EXTRAKEYS, SCHNORRSIG, MUSIG, ELLSWIFT, SILENTPAYMENTS) and removes redundant per-job module overrides, relying on the global defaults. It also adds matrix entries that explicitly disable individual modules to test those configurations. The PR description notes this extended coverage exposed pre-existing issues fixed in separate PRs #1837 and #1839, but those fixes are not part of this commit. The diff contains no source-code, build-system, or cryptographic changes.
Changed components
.github/workflows/ci.ymlInspect captured patch +29 / −100
### .github/workflows/ci.yml
@@ -33,13 +33,13 @@ env:
EXTRAFLAGS:
### secp256k1 modules
EXPERIMENTAL: 'no'
- ECDH: 'no'
- RECOVERY: 'no'
- EXTRAKEYS: 'no'
- SCHNORRSIG: 'no'
- MUSIG: 'no'
- ELLSWIFT: 'no'
- SILENTPAYMENTS: 'no'
+ ECDH: 'yes'
+ RECOVERY: 'yes'
+ EXTRAKEYS: 'yes'
+ SCHNORRSIG: 'yes'
+ MUSIG: 'yes'
+ ELLSWIFT: 'yes'
+ SILENTPAYMENTS: 'yes'
### test options
SECP256K1_TEST_ITERS: 64
BENCH: 'yes'
@@ -96,21 +96,24 @@ jobs:
fail-fast: false
matrix:
configuration:
- - env_vars: { WIDEMUL: 'int64', RECOVERY: 'yes' }
- - env_vars: { WIDEMUL: 'int64', ECDH: 'yes', EXTRAKEYS: 'yes', SCHNORRSIG: 'yes', MUSIG: 'yes', ELLSWIFT: 'yes', SILENTPAYMENTS: 'yes' }
+ - env_vars: { WIDEMUL: 'int64' }
- env_vars: { WIDEMUL: 'int128' }
- - env_vars: { WIDEMUL: 'int128_struct', ELLSWIFT: 'yes' }
- - env_vars: { WIDEMUL: 'int128', RECOVERY: 'yes', EXTRAKEYS: 'yes', SCHNORRSIG: 'yes', MUSIG: 'yes', ELLSWIFT: 'yes' }
- - env_vars: { WIDEMUL: 'int128', ECDH: 'yes', EXTRAKEYS: 'yes', SCHNORRSIG: 'yes', MUSIG: 'yes', SILENTPAYMENTS: 'yes' }
- - env_vars: { WIDEMUL: 'int128', ASM: 'x86_64', ELLSWIFT: 'yes' }
- - env_vars: { RECOVERY: 'yes', EXTRAKEYS: 'yes', SCHNORRSIG: 'yes', MUSIG: 'yes' }
- - env_vars: { CTIMETESTS: 'no', RECOVERY: 'yes', ECDH: 'yes', EXTRAKEYS: 'yes', SCHNORRSIG: 'yes', MUSIG: 'yes', SILENTPAYMENTS: 'yes', CPPFLAGS: '-DVERIFY' }
+ - env_vars: { WIDEMUL: 'int128_struct' }
+ - env_vars: { WIDEMUL: 'int128', ASM: 'x86_64' }
+ - env_vars: { CTIMETESTS: 'no', CPPFLAGS: '-DVERIFY' }
- env_vars: { BUILD: 'distcheck', WITH_VALGRIND: 'no', CTIMETESTS: 'no', BENCH: 'no' }
- env_vars: { CPPFLAGS: '-DDETERMINISTIC' }
- env_vars: { CFLAGS: '-O0', CTIMETESTS: 'no' }
- - env_vars: { CFLAGS: '-O1', RECOVERY: 'yes', ECDH: 'yes', EXTRAKEYS: 'yes', SCHNORRSIG: 'yes', MUSIG: 'yes', ELLSWIFT: 'yes', SILENTPAYMENTS: 'yes' }
+ - env_vars: { CFLAGS: '-O1' }
- env_vars: { ECMULTGENKB: 2, ECMULTWINDOW: 2 }
- env_vars: { ECMULTGENKB: 86, ECMULTWINDOW: 4 }
+ - env_vars: { ECDH: 'no' }
+ - env_vars: { RECOVERY: 'no' }
+ - env_vars: { EXTRAKEYS: 'no', SCHNORRSIG: 'no', MUSIG: 'no', SILENTPAYMENTS: 'no' }
+ - env_vars: { SCHNORRSIG: 'no', MUSIG: 'no' }
+ - env_vars: { MUSIG: 'no' }
+ - env_vars: { ELLSWIFT: 'no' }
+ - env_vars: { SILENTPAYMENTS: 'no' }
cc:
- 'gcc'
- 'clang'
@@ -155,13 +158,6 @@ jobs:
env:
HOST: 'i686-linux-gnu'
- ECDH: 'yes'
- RECOVERY: 'yes'
- EXTRAKEYS: 'yes'
- SCHNORRSIG: 'yes'
- MUSIG: 'yes'
- ELLSWIFT: 'yes'
- SILENTPAYMENTS: 'yes'
CC: ${{ matrix.cc }}
steps:
@@ -184,13 +180,6 @@ jobs:
SECP256K1_TEST_ITERS: 16
HOST: 's390x-linux-gnu'
WITH_VALGRIND: 'no'
- ECDH: 'yes'
- RECOVERY: 'yes'
- EXTRAKEYS: 'yes'
- SCHNORRSIG: 'yes'
- MUSIG: 'yes'
- ELLSWIFT: 'yes'
- SILENTPAYMENTS: 'yes'
CTIMETESTS: 'no'
steps:
@@ -215,13 +204,6 @@ jobs:
SECP256K1_TEST_ITERS: 16
HOST: 'arm-linux-gnueabihf'
WITH_VALGRIND: 'no'
- ECDH: 'yes'
- RECOVERY: 'yes'
- EXTRAKEYS: 'yes'
- SCHNORRSIG: 'yes'
- MUSIG: 'yes'
- ELLSWIFT: 'yes'
- SILENTPAYMENTS: 'yes'
CTIMETESTS: 'no'
steps:
@@ -237,13 +219,6 @@ jobs:
env:
SECP256K1_TEST_ITERS: 16
WITH_VALGRIND: 'no'
- ECDH: 'yes'
- RECOVERY: 'yes'
- EXTRAKEYS: 'yes'
- SCHNORRSIG: 'yes'
- MUSIG: 'yes'
- ELLSWIFT: 'yes'
- SILENTPAYMENTS: 'yes'
CTIMETESTS: 'no'
CC: ${{ matrix.cc }}
@@ -278,13 +253,6 @@ jobs:
SECP256K1_TEST_ITERS: 16
HOST: 'powerpc64le-linux-gnu'
WITH_VALGRIND: 'no'
- ECDH: 'yes'
- RECOVERY: 'yes'
- EXTRAKEYS: 'yes'
- SCHNORRSIG: 'yes'
- MUSIG: 'yes'
- ELLSWIFT: 'yes'
- SILENTPAYMENTS: 'yes'
CTIMETESTS: 'no'
steps:
@@ -324,13 +292,6 @@ jobs:
# The `--error-exitcode` is required to make the test fail if valgrind found errors,
# otherwise it will return 0 (https://www.valgrind.org/docs/manual/manual-core.html).
WRAPPER_CMD: 'valgrind --error-exitcode=42'
- ECDH: 'yes'
- RECOVERY: 'yes'
- EXTRAKEYS: 'yes'
- SCHNORRSIG: 'yes'
- MUSIG: 'yes'
- ELLSWIFT: 'yes'
- SILENTPAYMENTS: 'yes'
CTIMETESTS: 'no'
SECP256K1_TEST_ITERS: 2
@@ -354,13 +315,6 @@ jobs:
- env_vars: { CC: 'i686-linux-gnu-gcc', HOST: 'i686-linux-gnu', ASM: 'no', ECMULTGENKB: 2, ECMULTWINDOW: 2 }
env:
- ECDH: 'yes'
- RECOVERY: 'yes'
- EXTRAKEYS: 'yes'
- SCHNORRSIG: 'yes'
- MUSIG: 'yes'
- ELLSWIFT: 'yes'
- SILENTPAYMENTS: 'yes'
CTIMETESTS: 'no'
CFLAGS: '-fsanitize=undefined,address -g'
UBSAN_OPTIONS: 'print_stacktrace=1:halt_on_error=1'
@@ -401,13 +355,6 @@ jobs:
- 'clang-snapshot'
env:
- ECDH: 'yes'
- RECOVERY: 'yes'
- EXTRAKEYS: 'yes'
- SCHNORRSIG: 'yes'
- MUSIG: 'yes'
- ELLSWIFT: 'yes'
- SILENTPAYMENTS: 'yes'
CC: ${{ matrix.cc }}
SECP256K1_TEST_ITERS: 32
ASM: 'no'
@@ -427,13 +374,6 @@ jobs:
env:
WRAPPER_CMD: 'wine'
WITH_VALGRIND: 'no'
- ECDH: 'yes'
- RECOVERY: 'yes'
- EXTRAKEYS: 'yes'
- SCHNORRSIG: 'yes'
- MUSIG: 'yes'
- ELLSWIFT: 'yes'
- SILENTPAYMENTS: 'yes'
CTIMETESTS: 'no'
strategy:
@@ -466,15 +406,13 @@ jobs:
fail-fast: false
matrix:
env_vars:
- - { WIDEMUL: 'int64', RECOVERY: 'yes', ECDH: 'yes', EXTRAKEYS: 'yes', SCHNORRSIG: 'yes', MUSIG: 'yes', ELLSWIFT: 'yes', SILENTPAYMENTS: 'yes' }
+ - { WIDEMUL: 'int64' }
- { WIDEMUL: 'int128_struct', ECMULTGENKB: 2, ECMULTWINDOW: 4 }
- - { WIDEMUL: 'int128', ECDH: 'yes', EXTRAKEYS: 'yes', SCHNORRSIG: 'yes', MUSIG: 'yes', ELLSWIFT: 'yes', SILENTPAYMENTS: 'yes' }
- - { WIDEMUL: 'int128', RECOVERY: 'yes' }
- - { WIDEMUL: 'int128', RECOVERY: 'yes', ECDH: 'yes', EXTRAKEYS: 'yes', SCHNORRSIG: 'yes', MUSIG: 'yes', ELLSWIFT: 'yes', SILENTPAYMENTS: 'yes' }
- - { WIDEMUL: 'int128', RECOVERY: 'yes', ECDH: 'yes', EXTRAKEYS: 'yes', SCHNORRSIG: 'yes', MUSIG: 'yes', ELLSWIFT: 'yes', SILENTPAYMENTS: 'yes', CC: 'gcc' }
- - { WIDEMUL: 'int128', RECOVERY: 'yes', ECDH: 'yes', EXTRAKEYS: 'yes', SCHNORRSIG: 'yes', MUSIG: 'yes', ELLSWIFT: 'yes', SILENTPAYMENTS: 'yes', WRAPPER_CMD: 'valgrind --error-exitcode=42', SECP256K1_TEST_ITERS: 2 }
- - { WIDEMUL: 'int128', RECOVERY: 'yes', ECDH: 'yes', EXTRAKEYS: 'yes', SCHNORRSIG: 'yes', MUSIG: 'yes', ELLSWIFT: 'yes', SILENTPAYMENTS: 'yes', CC: 'gcc', WRAPPER_CMD: 'valgrind --error-exitcode=42', SECP256K1_TEST_ITERS: 2 }
- - { WIDEMUL: 'int128', RECOVERY: 'yes', ECDH: 'yes', EXTRAKEYS: 'yes', SCHNORRSIG: 'yes', MUSIG: 'yes', ELLSWIFT: 'yes', CPPFLAGS: '-DVERIFY', CTIMETESTS: 'no' }
+ - { WIDEMUL: 'int128' }
+ - { WIDEMUL: 'int128', CC: 'gcc' }
+ - { WIDEMUL: 'int128', WRAPPER_CMD: 'valgrind --error-exitcode=42', SECP256K1_TEST_ITERS: 2 }
+ - { WIDEMUL: 'int128', CC: 'gcc', WRAPPER_CMD: 'valgrind --error-exitcode=42', SECP256K1_TEST_ITERS: 2 }
+ - { WIDEMUL: 'int128', CPPFLAGS: '-DVERIFY', CTIMETESTS: 'no' }
- BUILD: 'distcheck'
steps:
@@ -523,13 +461,11 @@ jobs:
fail-fast: false
matrix:
env_vars:
- - { WIDEMUL: 'int64', RECOVERY: 'yes', ECDH: 'yes', EXTRAKEYS: 'yes', SCHNORRSIG: 'yes', MUSIG: 'yes', ELLSWIFT: 'yes', SILENTPAYMENTS: 'yes' }
+ - { WIDEMUL: 'int64' }
- { WIDEMUL: 'int128_struct', ECMULTGENKB: 2, ECMULTWINDOW: 4 }
- - { WIDEMUL: 'int128', ECDH: 'yes', EXTRAKEYS: 'yes', SCHNORRSIG: 'yes', MUSIG: 'yes', ELLSWIFT: 'yes', SILENTPAYMENTS: 'yes' }
- - { WIDEMUL: 'int128', RECOVERY: 'yes' }
- - { WIDEMUL: 'int128', RECOVERY: 'yes', ECDH: 'yes', EXTRAKEYS: 'yes', SCHNORRSIG: 'yes', MUSIG: 'yes', ELLSWIFT: 'yes', SILENTPAYMENTS: 'yes' }
- - { WIDEMUL: 'int128', RECOVERY: 'yes', ECDH: 'yes', EXTRAKEYS: 'yes', SCHNORRSIG: 'yes', MUSIG: 'yes', ELLSWIFT: 'yes', SILENTPAYMENTS: 'yes', CC: 'gcc' }
- - { WIDEMUL: 'int128', RECOVERY: 'yes', ECDH: 'yes', EXTRAKEYS: 'yes', SCHNORRSIG: 'yes', MUSIG: 'yes', ELLSWIFT: 'yes', SILENTPAYMENTS: 'yes', CPPFLAGS: '-DVERIFY' }
+ - { WIDEMUL: 'int128' }
+ - { WIDEMUL: 'int128', CC: 'gcc' }
+ - { WIDEMUL: 'int128', CPPFLAGS: '-DVERIFY' }
- BUILD: 'distcheck'
steps:
@@ -635,13 +571,6 @@ jobs:
CFLAGS: '-fpermissive -g'
CPPFLAGS: '-DSECP256K1_CPLUSPLUS_TEST_OVERRIDE'
WERROR_CFLAGS:
- ECDH: 'yes'
- RECOVERY: 'yes'
- EXTRAKEYS: 'yes'
- SCHNORRSIG: 'yes'
- MUSIG: 'yes'
- ELLSWIFT: 'yes'
- SILENTPAYMENTS: 'yes'
steps:
- *CHECKOUTWhy this scored 15/100
Community notes
Notes can correct, qualify, or add evidence to the AI analysis. Every note shown here has been validated by a human moderator.
The AI analysis stands alone for now. Submit a note if you can add evidence or important context.