AI-generated analysisPublished automatically and not human-verified. Validated context appears in community notes below.
← Watch feed
Moderate 63 Bitcoin

Squashed 'src/secp256k1/' changes from 95b983597a..a2b001cc20

Public commit record

What the developer wrote

Authored by Byron Hambly

96/100 · Strong
Squashed 'src/secp256k1/' changes from 95b983597a..a2b001cc20

a2b001cc20 Merge elementsproject/secp256k1-zkp#369: surjection: bind genrand nonce to the full statement
f8841c14d5 Merge elementsproject/secp256k1-zkp#370: rangeproof: warn that nonce must not be reused across differing arguments
cde28971a2 rangeproof: warn that nonce must not be reused across differing arguments
65093e1444 surjection: prevent s-value reuse for different proof inputs
2af926dc30 Merge BlockstreamResearch/secp256k1-zkp#366: Upstream PRs 1851, 1852, 1861, 1855, 1864, 1867, 1860, 1865, 1859, 1879, 1881, 1845, 1877, 1882, 1884
217fe59bbf tests: register run_util_tests and run_ec_commit, remove dead print_vector
b1f9e6e360 Merge branch 'master' into sync-ebf59432
ebf594320d Merge bitcoin-core/secp256k1#1884: SECURITY.md: remove Jonas Nick from trusted keys
21645c03a2 SECURITY.md: remove Jonas Nick from trusted keys
b90075a074 Merge bitcoin-core/secp256k1#1882: scalar: correct `_scalar_get_bits_{limb32,var}` input condition docs
5a8a411425 Merge bitcoin-core/secp256k1#1877: field: correct `fe_equal` magnitude bound for `b`
6a599a4428 scalar: correct `_scalar_get_bits_{limb32,var}` input condition docs
994b35010d field: correct fe_equal's b magnitude bound
2ce4f71dc5 Merge bitcoin-core/secp256k1#1845: Improve checks for scalar _get_bits methods
68b45fd4e2 Merge bitcoin-core/secp256k1#1881: tests: Fix GCC 17 snapshot warning
9d75769dec tests: Fix GCC 17 snapshot warning
9e3a165ad0 Merge bitcoin-core/secp256k1#1879: ci: add 'brew trust' invocation to macOS CI
66260b78a2 ci: add 'brew trust' invocation to macOS CI
bd0287d650 Merge bitcoin-core/secp256k1#1859: field: force-inline 5x52 mul and sqr
fdcf2d41e2 Merge bitcoin-core/secp256k1#1865: test: enable -Wunused-function in test suite (Fix #1831)
b2d2bd362d Merge bitcoin-core/secp256k1#1860: cmake: Emulate Libtool's behavior on NetBSD and OpenBSD
87bec430bf Merge bitcoin-core/secp256k1#1867: test: musig: fix dead "aggnonce encodes two points at infinity" check
71fcd8410e field: force-inline 5x52 mul and sqr
a77dacad9a test: enable -Wunused-function in test suite (Fix #1831)
aea86bc350 Merge bitcoin-core/secp256k1#1864: test: refactor: simplify tests by using `_ecmult_gen_ge` helper, add test
2ee79e77e6 test: add unit test for `_ecmult_gen_ge`
d7125e517d test: musig: fix dead "aggnonce encodes two points at infinity" check
1eab757207 cmake: Fix shared library versioning on OpenBSD
a401c5145a cmake: Fix shared library versioning on NetBSD
8a0f4002c7 cmake, refactor: Improve documenting in `SetLibtoolAbiVersion` module
acf2084aa7 cmake, refactor: Introduce `SetLibtoolAbiVersion` module
0f4a7e6bf9 Merge bitcoin-core/secp256k1#1855: bench: add internal benchmark for `secp256k1_fe_normalize_var`
ca68daf8e1 test: refactor: simplify tests by using `_ecmult_gen_ge` helper
13db747f2b Merge bitcoin-core/secp256k1#1861: refactor: introduce `_ecmult_gen_ge` helper (preventing accidental gej leaks)
9e017e5062 refactor: rename `_ecmult_gen` -> `_ecmult_gen_gej` for consistency
a3296d5e23 refactor: introduce `_ecmult_gen_ge` helper (preventing accidental gej leaks)
c63062380f Merge bitcoin-core/secp256k1#1852: Add exhaustive test for ECDH module
240578eef5 bench: add internal benchmark for `secp256k1_fe_normalize_var`
5698e66c64 Add exhaustive test for ECDH module
a39093de15 Merge bitcoin-core/secp256k1#1851: doc: correct API docs for ECDSA signing out-params (s/array/signature object/)
40a0d874a6 doc: correct API docs for ECDSA signing out-params (s/array/signature object/)
0cad3df503 Improve checks for scalar _get_bits methods

git-subtree-dir: src/secp256k1
git-subtree-split: a2b001cc20c11f3b06985b87da9f7be942250ed0
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context✓ Mentions testing or verification✓ Links an issue, advisory, or supporting reference✓ Names security-relevant behavior explicitly
The short version

What changed, and why it matters

This commit is a large subtree update that pulls in many upstream secp256k1-zkp changes. The most security-relevant parts are fixes for two cryptographic proof modules used in Elements' confidential transactions: surjection proofs and range proofs. The commit message says the fixes prevent reusing random-looking proof values ('s-values' and nonces) across different proof statements, which is a known way cryptographic proofs can be forged or leak secrets. However, the actual code changes for those fixes are not shown in the supplied diff; only repository-wide metadata and build/CI file changes are visible. So while the topic is security-sensitive, we cannot directly verify the cryptographic details from the materials provided.

Recommended action

Review the actual secp256k1-zkp commits a2b001cc20, f8841c14d5, cde28971a2, and 65093e1444 to confirm the cryptographic fixes are correct and complete. Ensure downstream Elements code that calls surjection/rangeproof APIs does not reuse nonces or s-values across differing statements. Run the updated secp256k1 tests and Elements confidential-transaction functional tests before deploying.

Security signals we found

01

Subtree update of secp256k1-zkp with explicit security-relevant merges

02

surjection proof: nonce binding to full statement (prevents s-value reuse)

03

rangeproof: nonce reuse warning/prevention

04

Large file churn (+94609/-1066438) consistent with subtree replacement

05

No direct diff evidence for the cryptographic changes in the provided materials

Risk score

Why this scored 63/100

Our methodology →
Potential impact 18/30
Exploitability 12/25
Stealth signal 10/15
Affected reach 14/15
Confidence 6/10
Evidence quality 3/5
Human-validated context

Community notes

Notes can correct, qualify, or add evidence to the AI analysis. Every note shown here has been validated by a human moderator.

No validated notes yet.

The AI analysis stands alone for now. Submit a note if you can add evidence or important context.