BC
← All projectsBitcoin Core

libsecp256k1

High-assurance secp256k1 elliptic-curve library used throughout the Bitcoin ecosystem.

BitcoinCryptographic librariesNormal
Repository coverage

205 commits in the local evidence base

Every captured commit receives deterministic security triage and a separate communication-quality score. Security candidates and broader second-pass signals receive full-patch Ollama analysis.

64security candidates6second-pass queue193AI analyses
18commits · 30 days
55commits · 60 days
106commits · 180 days
184commits · 365 days
Backfill bands
Aug 5 → Feb 682 seen1 candidatesComplete
Feb 6 → Jun 625 seen2 candidatesComplete
Jun 6 → Jul 619 seen1 candidatesComplete
Jul 6 → Aug 548 seen1 candidatesComplete
Commit communication

Does the history explain itself?

Message quality measures whether a commit identifies its scope, purpose, rationale, testing, and supporting references. It does not change the security-severity score.

70/100 average clarity
63Strong · 80–100
80Adequate · 60–79
59Thin · 40–59
3Opaque · 0–39
Read the scoring rubric →
Developer activity

Who is changing the project?

Public Git author strings; identities are not independently verified.

DeveloperCommitsCandidatesAnalyzedHigh riskMessage avg.
Sebastian Falbesoner451842066
merge-script191113093
Hennadii Stepanov45645064
Tim Ruffing22622055
furszy13413087
josibake949066
Lőrinc13313077
kevkevinpal626064
John Moffett424069
Bruno Garcia322090
copilot-swe-agent[bot]323074
Jonas Nick717053
Analysis record

Published AI watches

Last scanned 46 minutes ago

Informational 15 AI analysisMessage 91 · Strong
BC Bitcoin Corelibsecp256k1 BitcoinCryptographic libraries

Merge bitcoin-core/secp256k1#1840: ci: Simplify module configuration and extend test coverage

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…

No source-code changesNo build-system logic changesCI-only workflow refactor
9701113fby merge-script+29−1001 file
No security note in commit
Informational 15 AI analysisMessage 100 · Strong
BC Bitcoin Corelibsecp256k1 BitcoinCryptographic libraries

Merge bitcoin-core/secp256k1#1918: refactor: split `ge_parse` into explicit variants (compressed, uncompressed, uncompressed+hybrid)

This commit is a code cleanup (refactor) that splits one internal public-key parsing helper into three clearly named versions. It does not change what keys the public API accepts or rejects, and it adds more tests. There is no security vul…

Refactor only: no change to accepted public-key formats or validation rulesPublic API behavior preserved: 33-byte compressed and 65-byte uncompressed/hybrid still acceptedInternal fixed-size callers now use size-specific parser, reducing risk of accidental hybrid acceptance in future code
46db7871by merge-script+117−346 files
No security note in commit
Informational 15 AI analysisMessage 96 · Strong
BC Bitcoin Corelibsecp256k1 BitcoinCryptographic libraries

Merge bitcoin-core/secp256k1#1893: test: cover schnorrsig_sign_custom in constant-time tests

This commit only adds new test code to check that a specific Schnorr signing function behaves in a constant-time manner under Valgrind. It does not change any production cryptographic code, so it cannot introduce or fix a security vulnerab…

Only test file src/ctime_tests.c changedNo production cryptographic code modifiedAdds constant-time (CHECKMEM/Valgrind) coverage for schnorrsig_sign_custom
99ae2312by merge-script+41−01 file
No security note in commit
Informational 14 AI analysisMessage 100 · Strong
BC Bitcoin Corelibsecp256k1 BitcoinCryptographic libraries

Merge bitcoin-core/secp256k1#1923: group: VERIFY input/output ge/gej/fe exhaustively

This commit is a code-quality and defensive-programming change. It restructures internal elliptic-curve helper functions so that runtime consistency checks (VERIFY macros) wrap the real implementation and cannot be skipped by an early 'ret…

Defensive restructuring of assertion wrappersAdds missing VERIFY post-conditions on group element outputsNo functional cryptographic change
a7f26437by merge-script+253−1452 files
No security note in commit
Informational 15 AI analysisMessage 96 · Strong
BC Bitcoin Corelibsecp256k1 BitcoinCryptographic libraries

Merge bitcoin-core/secp256k1#1928: tests: add coverage for exact-size DER signature serialization

This commit only adds new test code to check that a specific function behaves correctly when given a buffer of exactly the right size. It does not change any production code, fix a bug, or introduce a vulnerability. It is a routine improve…

aa0af2faby merge-script+12−01 file
No security note in commit
Informational 13 AI analysisMessage 88 · Strong
BC Bitcoin Corelibsecp256k1 BitcoinCryptographic libraries

tests: add coverage for exact-size DER signature serialization

This commit only adds a new test case. It checks that a DER signature can be written into a buffer that is exactly the right size, and that writing into a buffer one byte too small fails correctly. There is no change to the actual library …

500ccb60by Bruno Garcia+12−01 file
No security note in commit
Informational 19 AI analysisMessage 96 · Strong
BC Bitcoin Corelibsecp256k1 BitcoinCryptographic libraries

Merge bitcoin-core/secp256k1#1924: tests: add coverage for the DER long form length encoding

This commit only adds new test cases to the libsecp256k1 test suite. It does not change any production cryptographic code. The new tests check that the DER signature parser correctly handles an unusual but valid length-encoding format (the…

Adds test coverage for DER long-form length encoding acceptance and rejectionTargets secp256k1_der_read_len boundary conditionsNo changes to src/ecdsa_impl.h or any production parsing logic
a9a61831by merge-script+117−01 file
No security note in commit
Informational 15 AI analysisMessage 88 · Strong
BC Bitcoin Corelibsecp256k1 BitcoinCryptographic libraries

tests: add coverage for the DER long form length encoding

This commit only adds new test cases to the project's test suite. It does not change any production parsing code. The tests verify that the existing DER signature parser correctly accepts valid long-form length encodings and rejects invali…

ddb1dfa7by Bruno Garcia+117−01 file
No security note in commit
Informational 15 AI analysisMessage 96 · Strong
BC Bitcoin Corelibsecp256k1 BitcoinCryptographic libraries

Merge bitcoin-core/secp256k1#1908: refactor: replace `_get_hash_context` with direct `->hash_ctx` access

This commit is a straightforward code cleanup: it removes a small internal helper function named secp256k1_get_hash_context() and replaces every call with direct access to the context's hash_ctx field. The behavior is identical; no securit…

bae6b89aby merge-script+67−7116 files
No security note in commit
Informational 15 AI analysisMessage 98 · Strong
BC Bitcoin Corelibsecp256k1 BitcoinCryptographic libraries

Merge bitcoin-core/secp256k1#1915: refactor: Move (de)ser helpers from musig and eckey to group

This is a routine internal code cleanup: it moves helper functions that convert between group elements and byte strings from one internal file to another, and renames a couple of private-key tweak helpers from 'privkey' to 'seckey'. The pu…

86c7cbafby merge-script+114−10710 files
No security note in commit
Informational 15 AI analysisMessage 62 · Adequate
BC Bitcoin Corelibsecp256k1 BitcoinCryptographic libraries

refactor: Rename privkey to seckey in eckey helpers

This commit is a simple renaming of internal function names from 'privkey' to 'seckey' to match current project terminology. No behavior of the code changes, and there is no security fix or vulnerability introduced.

bfd40bd0by Fabian Jahr+6−63 files
No security note in commit
Informational 18 AI analysisMessage 98 · Strong
BC Bitcoin Corelibsecp256k1 BitcoinCryptographic libraries

Merge bitcoin-core/secp256k1#1916: ecdh/ellswift: simplify seckey loading with `_scalar_set_b32_seckey`

This is a small internal cleanup in Bitcoin Core's secp256k1 cryptography library. It replaces a manual secret-key validity check (overflow plus zero) with an existing helper function that does the same thing. The behavior is intended to b…

No security-relevant behavioral change is described or evidentRefactoring only: equivalent overflow-and-zero check via existing helperReturn value logic preserved with added parentheses for warning avoidance
a37d7cc0by merge-script+8−112 files
No security note in commit
Informational 15 AI analysisMessage 86 · Strong
BC Bitcoin Corelibsecp256k1 BitcoinCryptographic libraries

Merge bitcoin-core/secp256k1#1911: refactor: rename `ctx` param to `ecmult_gen_ctx` where applicable

This is a pure code cleanup change: it renames a function parameter from 'ctx' to 'ecmult_gen_ctx' in several internal files and moves the asterisk in pointer declarations for style consistency. No behavior, logic, or security properties o…

3d69f4ceby merge-script+41−414 files
No security note in commit
Low 27 AI analysisMessage 86 · Strong
BC Bitcoin Corelibsecp256k1 BitcoinCryptographic libraries

Merge bitcoin-core/secp256k1#1910: scratch: reject sizes that overflow when added to header

This commit fixes an integer overflow bug in the library's internal scratch-space memory allocator. If a caller requested a scratch space with a size near the maximum possible value, adding the allocator's own bookkeeping header could wrap…

Integer overflow in size calculationHeap allocation size mismatchPotential buffer overflow / out-of-bounds write
439278a6by merge-script+14−22 files
Vendor flagged security relevance
Informational 15 AI analysisMessage 93 · Strong
BC Bitcoin Corelibsecp256k1 BitcoinCryptographic libraries

refactor: rename `ctx` param to `ecmult_gen_ctx` where applicable

This commit is a pure code cleanup: it renames a function parameter from 'ctx' to 'ecmult_gen_ctx' in several related files and moves the asterisk in pointer declarations from the left side to the right side (e.g., 'type* arg' to 'type *ar…

81a5a756by Sebastian Falbesoner+41−414 files
No security note in commit
Informational 23 AI analysisMessage 86 · Strong
BC Bitcoin Corelibsecp256k1 BitcoinCryptographic libraries

scratch: reject sizes that overflow when added to header

This commit fixes a low-level arithmetic overflow check in a special internal memory-pool helper called 'scratch space'. Because the scratch API is no longer exposed to users, the bug cannot be triggered by normal callers today. The change…

Integer overflow in size calculationPotential heap buffer under-allocationDefensive hardening of internal allocator helper
3d4340d1by Sebastian Falbesoner+14−22 files
No security note in commit
Informational 20 AI analysisMessage 96 · Strong
BC Bitcoin Corelibsecp256k1 BitcoinCryptographic libraries

Merge bitcoin-core/secp256k1#1897: tests: check results before using outputs

This commit fixes test-suite bugs, not the cryptographic library itself. Several test cases were using outputs from functions without first checking whether those functions succeeded. In rare cases a failed setup step could leave a value t…

Test-only hardeningMissing return-value checks in test codePotential false-positive test passes on setup failure
687155dfby merge-script+21−218 files
No security note in commit
Informational 15 AI analysisMessage 85 · Strong
BC Bitcoin Corelibsecp256k1 BitcoinCryptographic libraries

refactor: replace `_get_hash_context` with direct `->hash_ctx` access

This commit is a straightforward code cleanup: it removes a tiny internal helper function called secp256k1_get_hash_context() and replaces every call with direct access to the context's hash_ctx field. The behavior is identical; no securit…

c8745f6bby Sebastian Falbesoner+67−7116 files
No security note in commit
Informational 15 AI analysisMessage 86 · Strong
BC Bitcoin Corelibsecp256k1 BitcoinCryptographic libraries

Merge bitcoin-core/secp256k1#1907: release cleanup: bump version after 0.8.0

This commit is a routine post-release bookkeeping change. It bumps the project's version number from 0.8.0 to 0.8.1, marks the current code as an unreleased development snapshot, and updates the changelog accordingly. There are no code, cr…

8a700a35by merge-script+8−53 files
No security note in commit
Informational 15 AI analysisMessage 45 · Thin
BC Bitcoin Corelibsecp256k1 BitcoinCryptographic libraries

release cleanup: bump version after 0.8.0

This commit is a routine post-release bookkeeping change. It bumps the project's version number from 0.8.0 to 0.8.1, marks the current code as an unreleased development snapshot, and updates the changelog accordingly. There are no code, cr…

78657bf2by Sebastian Falbesoner+8−53 files
No security note in commit
Repository ledger

Explore captured commits

Expand any commit for its author, full message, clarity score, changed files, triage signals, analysis, and source link.

Lower-priorityrelease-process: Add "cleaning up"by Tim Ruffing · b0a0ae82 · Jul 31, 2026 · 1 fileMessage 45 · ThinInformational 15Details
Commit message · Tim Ruffing

release-process: Add "cleaning up"

45/100 · ThinMessage clarity
✓ Descriptive subject✓ Names a concrete action or component! No meaningful explanatory body
Why it was queued
documentation-only discount
AI analysis · Informational 15/100

This commit simply adds a short 'Cleaning up' section to the project's release-process documentation. It describes administrative tasks like closing a GitHub milestone and removing a label after a release. There is no code change and no security relevance.

Lower-priorityrelease-process: Add attaching output of check-abi.sh to PRby Tim Ruffing · 12d9cfd8 · Jul 31, 2026 · 1 fileMessage 50 · ThinInformational 15Details
Commit message · Tim Ruffing

release-process: Add attaching output of check-abi.sh to PR

50/100 · ThinMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component! No meaningful explanatory body
Why it was queued
documentation-only discount
AI analysis · Informational 15/100

This is a documentation-only change to the project's release checklist. It adds a step telling release maintainers to attach the output of an ABI compatibility checking tool to release pull requests. There is no code change, no cryptographic change, and no security vulnerability.

AI review queuedrelease-process: Refactorby Tim Ruffing · 34f00ca9 · Jul 31, 2026 · 1 fileMessage 35 · OpaqueInformational 15Details
Commit message · Tim Ruffing

release-process: Refactor

35/100 · OpaqueMessage clarity
✓ Descriptive subject! No meaningful explanatory body
Why it was queued
documentation-only discountsecond-pass: opaque commit message
AI analysis · Informational 15/100

This commit is a simple reorganization of the project's release-process documentation. It renames some sections, splits steps into clearer subsections, and adds minor wording clarifications (for example, reminding maintainers to manually review commits since the last release when writing changelog entries). No code, build scripts, cryptographic logic, or configuration defaults were changed.

Lower-prioritychangelog: add entry for #1859by Sebastian Falbesoner · 51fc633e · Jul 30, 2026 · 1 fileMessage 53 · ThinInformational 15Details
Commit message · Sebastian Falbesoner

changelog: add entry for #1859

53/100 · ThinMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Links an issue, advisory, or supporting reference! No meaningful explanatory body
Why it was queued
documentation-only discount
AI analysis · Informational 15/100

This commit only adds a changelog entry describing a prior performance improvement (force-inlining field multiplication routines). It changes no source code, build scripts, or executable behavior. There is no security-relevant content in the diff.

Lower-priorityellswift: don't declassify or leave sk in sha256 bufferby furszy · 0ae17e30 · Jul 30, 2026 · 1 fileMessage 73 · AdequateLow 47Details
Commit message · furszy

ellswift: don't declassify or leave sk in sha256 buffer

secp256k1_ellswift_create assumes sha256 clears the data in its buffer
after hashing it, which is not the case. So we shouldn't declassify the
whole struct, only the hash result. We should also clear it at the end,
so the sk doesn't linger on the stack when no aux rnd is given.

73/100 · AdequateMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context
AI analysis · Low 47/100

This commit fixes a small but real privacy bug in the ElligatorSwift key-encoding helper. The code had wrongly assumed that the SHA-256 hashing routine wipes its internal buffer after feeding data in, so it marked the whole hash state as safe-to-leak and did not clear it. Because the buffer still held a copy of the secret key, that secret key could remain in stack memory longer than intended, especially when no extra random data (auxrnd) was provided. The patch narrows the 'declassify' to only the actual hash output/state and explicitly clears the SHA-256 buffer at the end, removing the leftover secret key from the stack.

Lower-prioritychangelog: Add entry for #1869by Tim Ruffing · 44ba8cd7 · Jul 29, 2026 · 1 fileMessage 53 · ThinInformational 15Details
Commit message · Tim Ruffing

changelog: Add entry for #1869

53/100 · ThinMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Links an issue, advisory, or supporting reference! No meaningful explanatory body
Why it was queued
documentation-only discount
AI analysis · Informational 15/100

This commit only updates the project's CHANGELOG.md file to document that a previously removed internal macro (SECP256K1_GNUC_PREREQ) was not part of the public API. It is a documentation-only change with no code modifications and no security relevance.

Security candidateheader: Add note on SHA256 override and aux functionsby Tim Ruffing · 4147f8bd · Jul 29, 2026 · 1 fileMessage 58 · ThinInformational 15Details
Commit message · Tim Ruffing

header: Add note on SHA256 override and aux functions

Resolves one item in #1835.

58/100 · ThinMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Links an issue, advisory, or supporting reference! No meaningful explanatory body
Why it was queued
cryptography-sensitive path
AI analysis · Informational 15/100

This commit only adds a documentation note to a public header file. It explains that certain auxiliary functions, when called directly by user code, will not use a user-installed SHA256 override callback because they do not receive a library context object. There is no code change, no behavior change, and no security fix.

Security candidateecdsa/ecdh: Use SHA256 override if known noncefp/hashfp is passedby Tim Ruffing · ed091bc4 · Jul 29, 2026 · 2 filesMessage 50 · ThinLow 32Details
Commit message · Tim Ruffing

ecdsa/ecdh: Use SHA256 override if known noncefp/hashfp is passed

50/100 · ThinMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component! No meaningful explanatory body
Why it was queued
cryptography-sensitive path
AI analysis · Low 32/100

This small change makes Bitcoin's cryptographic library treat two built-in functions (the default ECDSA nonce generator and the default ECDH hash function) as 'default' choices even when a caller explicitly passes them. The practical effect is that these built-in functions now receive the library context's hash function, which matters when the library is compiled with a custom hash implementation. Without this fix, a caller passing the same built-in function by name could accidentally bypass the context's hash function and use a different code path. There is no direct evidence in the commit of an exploitable vulnerability; it looks like a consistency/correctness fix.

Security candidateRemove deprecated `secp256k1_context_no_precomp` pointerby Sebastian Falbesoner · bf435856 · Jul 29, 2026 · 4 filesMessage 71 · AdequateInformational 21Details
Commit message · Sebastian Falbesoner

Remove deprecated `secp256k1_context_no_precomp` pointer

This context pointer has been deprecated since the rename to `_context_static`
more than three and a half years ago (see PR #1126, commit 53796d2b24e813750feae73e85c0a6eee40dc391),
for the first official release 0.2.0. Removing it should be fine by now.

71/100 · AdequateMessage clarity
✓ Specific, descriptive subject✓ Provides detailed explanatory context✓ Links an issue, advisory, or supporting reference
Why it was queued
cryptography-sensitive path
AI analysis · Informational 21/100

This commit removes an old, renamed pointer called secp256k1_context_no_precomp from the secp256k1 cryptographic library. It had been marked as deprecated for over three years and was only an alias for the newer secp256k1_context_static. The change is a routine API cleanup, not a security fix, but any external code still using the old name will fail to compile or link after updating.

Security candidateRemove deprecated `secp256k1_schnorrsig_sign` aliasby Sebastian Falbesoner · e14756bd · Jul 28, 2026 · 4 filesMessage 71 · AdequateInformational 19Details
Commit message · Sebastian Falbesoner

Remove deprecated `secp256k1_schnorrsig_sign` alias

This function has been deprecated since the rename to `_schnorrsig_sign32`
more than three and a half years ago (see PR #1089, commit 99e6568fc6),
before the first official release 0.2.0. Removing it should be fine by now.

71/100 · AdequateMessage clarity
✓ Specific, descriptive subject✓ Provides detailed explanatory context✓ Links an issue, advisory, or supporting reference
Why it was queued
cryptography-sensitive path
AI analysis · Informational 19/100

This commit removes an old, renamed function called secp256k1_schnorrsig_sign from the libsecp256k1 cryptographic library. It had been marked as deprecated for over three years and was simply an alias pointing to the newer secp256k1_schnorrsig_sign32. Any software still using the old name will fail to compile or link after this change, but the actual signing behavior is unchanged. There is no security vulnerability introduced by this cleanup.

Lower-prioritychangelog: add missing entries for #1777 and #1860by Sebastian Falbesoner · f52eb393 · Jul 28, 2026 · 1 fileMessage 81 · StrongInformational 15Details
Commit message · Sebastian Falbesoner

changelog: add missing entries for #1777 and #1860

Adds changelog entries for merged PRs that still have the
"needs-changelog" label, preparing for the upcoming release:
- #1777: "Make SHA256 compression runtime pluggable"
- #1860: "cmake: Emulate Libtool's behavior on NetBSD and OpenBSD"

Also adjusts the release notes for 0.7.0 regarding PR #1685 to
be consistent.

81/100 · StrongMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context✓ Links an issue, advisory, or supporting reference
Why it was queued
documentation-only discount
AI analysis · Informational 15/100

This commit only updates the project's changelog file. It adds release-note entries for two previously merged changes and tweaks an existing entry for consistency. No program code was modified, so it cannot introduce or fix a security vulnerability on its own.

Lower-prioritysilentpayments: check test serializationby Lőrinc · 93280c22 · Jul 26, 2026 · 1 fileMessage 68 · AdequateInformational 17Details
Commit message · Lőrinc

silentpayments: check test serialization

The sender vector test compared serialized x-only public keys without requiring serialization to succeed.
Check success before comparing the output bytes.

68/100 · AdequateMessage clarity
✓ Descriptive subject✓ Provides detailed explanatory context✓ Mentions testing or verification
AI analysis · Informational 17/100

This is a small fix inside a test file for the silent payments module. It makes sure a function that converts a public key into bytes actually succeeds before comparing those bytes against expected test values. Previously, the test could compare stale or uninitialized bytes if the conversion failed, which could hide test failures but does not affect real wallet or network code.

Lower-priorityec: check pubkey sort test resultsby Lőrinc · a2ad68cd · Jul 26, 2026 · 1 fileMessage 78 · AdequateInformational 16Details
Commit message · Lőrinc

ec: check pubkey sort test results

Two successful sort paths validated only the reordered arrays and discarded the API result.
Check success before inspecting the sorted output.

78/100 · AdequateMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context✓ Mentions testing or verification
Why it was queued
defensive validation
AI analysis · Informational 16/100

This commit fixes two test cases in the secp256k1 cryptographic library so they now verify that a public-key sorting function actually succeeds before checking its output. Previously the tests only inspected the sorted result and ignored whether the function returned an error. This is a test-hardening change, not a fix to the sorting function itself, and it does not create or fix a vulnerability in production code.

Security candidaterecovery: check exhaustive API resultsby Lőrinc · 1d3f72d3 · Jul 26, 2026 · 1 fileMessage 78 · AdequateInformational 17Details
Commit message · Lőrinc

recovery: check exhaustive API results

The exhaustive recovery tests decoded and verified signatures without requiring recoverable signing or conversion to succeed.
Check those documented success results before consuming the outputs, matching the ordinary exhaustive signing test.

78/100 · AdequateMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context✓ Mentions testing or verification
Why it was queued
signing boundary
AI analysis · Informational 17/100

This commit tightens a test suite for the secp256k1 cryptographic library. It adds checks to ensure that recoverable signing and signature conversion succeed before using their outputs. It does not change the library's actual signing or verification code, so it does not fix a live security bug in production software. It is a defensive improvement to testing.

AI review queuedmusig: check infinity test setupby Lőrinc · b8de1bc3 · Jul 26, 2026 · 1 fileMessage 78 · AdequateInformational 17Details
Commit message · Lőrinc

musig: check infinity test setup

`pubnonce_summing_to_inf` initializes both sums to infinity before loading the nonce objects.
A load failure could therefore satisfy the expected infinity checks without validating the constructed pair.
Require both nonce-loading operations to succeed before testing their outputs.

78/100 · AdequateMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context✓ Mentions testing or verification
Why it was queued
second-pass: broader security terminology
AI analysis · Informational 17/100

This change fixes a small but real flaw in the MuSig test code. Previously, two test helper functions called internal loading/summing routines and then checked whether the results were the special 'point at infinity' value. Because the input buffers were already initialized to infinity, a failed load or sum could still make the infinity checks pass, so the test would not actually detect a broken implementation. The patch adds explicit success checks so the test fails if those routines return an error. This only affects test code, not the cryptographic library used by real Bitcoin transactions, so it does not create a direct security vulnerability in production software.

Lower-priorityextrakeys: check test pubkey loadsby Lőrinc · 0618af81 · Jul 26, 2026 · 1 fileMessage 78 · AdequateInformational 17Details
Commit message · Lőrinc

extrakeys: check test pubkey loads

The x-only parity test compared fields from two loaded points without requiring either load to succeed.
Check both setup operations before reading their outputs.

78/100 · AdequateMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context✓ Mentions testing or verification
AI analysis · Informational 17/100

This change is inside the library's test code, not the actual cryptographic code used by applications. It makes two test setup steps verify they succeeded before using their results. Previously the test could have continued with invalid data if a load failed, which would make the test less reliable but does not create a vulnerability in the library itself.

Security candidateellswift: check test operation resultsby Lőrinc · 564afb0b · Jul 26, 2026 · 2 filesMessage 83 · StrongInformational 17Details
Commit message · Lőrinc

ellswift: check test operation results

The EllSwift tests inspected outputs without requiring encoding, decoding, or public-key loading to succeed.
They also discarded the field parser result despite relying on its no-overflow precondition.
Check each deterministic success result before inspecting its output.

83/100 · StrongMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context✓ Mentions testing or verification✓ Names security-relevant behavior explicitly
Why it was queued
memory safety
AI analysis · Informational 17/100

This commit fixes test code for the EllSwift module so that it actually checks whether encoding, decoding, and public-key loading operations succeed before using their outputs. Previously the tests silently ignored failure return values, which could hide bugs during testing but does not change the production library behavior or introduce a direct vulnerability in running software.

Lower-prioritytests: check exhaustive ecmult successby Lőrinc · 658c7edc · Jul 26, 2026 · 1 fileMessage 78 · AdequateInformational 15Details
Commit message · Lőrinc

tests: check exhaustive ecmult success

The exhaustive matrix compared the Jacobian output without requiring `secp256k1_ecmult_multi_var` to succeed.
Require success before consuming the result so a failure cannot satisfy an infinity case accidentally.

78/100 · AdequateMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context✓ Mentions testing or verification
AI analysis · Informational 15/100

This is a one-line change to a test file in the secp256k1 cryptographic library. It makes an existing exhaustive test stricter by requiring a function to report success before checking its output. It does not change any production code and is not a security fix for a vulnerability.

Lower-priorityAdd changelog entry for silentpayments moduleby Sebastian Falbesoner · d9ac2ee5 · Jul 23, 2026 · 1 fileMessage 45 · ThinInformational 15Details
Commit message · Sebastian Falbesoner

Add changelog entry for silentpayments module

45/100 · ThinMessage clarity
✓ Descriptive subject✓ Names a concrete action or component! No meaningful explanatory body
Why it was queued
documentation-only discount
AI analysis · Informational 15/100

This commit only adds a changelog entry describing a new 'silentpayments' feature that was already added to the project. It changes no code, no build files, and no configuration. There is no security issue in this commit itself.

Security candidatesilentpayments: API docs and internal comment followupsby Sebastian Falbesoner · 0fa38f3d · Jul 23, 2026 · 3 filesMessage 86 · StrongInformational 15Details
Commit message · Sebastian Falbesoner

silentpayments: API docs and internal comment followups

Addresses follow-up comments and Claude nits from #1765, see
- https://github.com/bitcoin-core/secp256k1/pull/1765#discussion_r3629070333
- https://github.com/bitcoin-core/secp256k1/pull/1765#discussion_r3628888249
- https://github.com/bitcoin-core/secp256k1/pull/1765#discussion_r3629066762
- https://github.com/bitcoin-core/secp256k1/pull/1765#pullrequestreview-4754517850

Note that the "hash output is not a valid scalar" error mentioning in
the API docs for sending is dropped intentionally to reflect the
scanning API docs, where we don't mention this negligible case either.

Co-authored-by: Tim Ruffing <me@real-or-random.org>

86/100 · StrongMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context✓ Links an issue, advisory, or supporting reference✓ Names security-relevant behavior explicitly
Why it was queued
cryptography-sensitive path
AI analysis · Informational 15/100

This commit only updates documentation comments and an example error message in the silent payments module. It does not change any executable code, cryptographic calculations, or security behavior. The changes clarify when the output-creation function can fail and add internal explanatory notes for future maintainers.

Security candidatenonce: terminate RFC6979 loop at UINT_MAXby Lőrinc · b1bc6f3e · Jul 20, 2026 · 1 fileMessage 73 · AdequateLow 37Details
Commit message · Lőrinc

nonce: terminate RFC6979 loop at UINT_MAX

The public nonce callback accepts `UINT_MAX`, but `nonce_function_rfc6979_impl` never returns for that attempt.
Its `i <= counter` loop wraps after the final candidate and starts again.

Generate the candidate before checking whether it is the requested attempt.
This preserves the result for every `unsigned int` attempt, including `UINT_MAX`, and exits before the index can wrap.

Co-authored-by: Tim Ruffing <me@real-or-random.org>

73/100 · AdequateMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context✓ Names security-relevant behavior explicitly
Why it was queued
cryptography-sensitive path
AI analysis · Low 37/100

This commit fixes an infinite-loop bug in the RFC6979 nonce generation code used for creating cryptographic signatures. If a caller asked for attempt number UINT_MAX (the maximum value of an unsigned integer), the old loop would generate that nonce but then keep going forever because the loop counter would wrap around to zero and never exceed the target. The fix generates the nonce first, then checks whether the requested attempt has been reached and exits. This is a reliability/correctness bug in a critical cryptographic path, though it requires a caller to deliberately request UINT_MAX to trigger.

Lower-priorityextrakeys: check invariant that x-only pubkeys have even Yby Sebastian Falbesoner · 89a54b5a · Jul 20, 2026 · 1 fileMessage 50 · ThinLow 26Details
Commit message · Sebastian Falbesoner

extrakeys: check invariant that x-only pubkeys have even Y

50/100 · ThinMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component! No meaningful explanatory body
AI analysis · Low 26/100

This commit adds a debug-only safety check inside a Bitcoin cryptography library. It verifies that when an x-only public key (a compressed public key format that omits the Y coordinate) is saved, the internal representation has an even Y value, as the protocol definition requires. The check only runs in VERIFY builds and does not change production behavior. It is a defensive invariant, not a fix for a known exploitable bug.

Security candidatesilentpayments: drop "shuffle outputs" recommendation from API docsby Sebastian Falbesoner · cea6d114 · Jul 20, 2026 · 1 fileMessage 50 · ThinInformational 15Details
Commit message · Sebastian Falbesoner

silentpayments: drop "shuffle outputs" recommendation from API docs

50/100 · ThinMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component! No meaningful explanatory body
Why it was queued
cryptography-sensitive path
AI analysis · Informational 15/100

This commit only changes documentation comments in a header file. It removes a recommendation that callers shuffle transaction outputs before scanning, and instead clarifies that outputs should be passed in their original transaction order. There is no code change, no security fix, and no vulnerability being addressed.

Lower-prioritysilentpayments: flush labels before direct matchby Lőrinc · 1ae90bde · Jul 19, 2026 · 2 filesMessage 78 · AdequateLow 42Details
Commit message · Lőrinc

silentpayments: flush labels before direct match

A direct x-only match stops scanning before a partial batch of earlier label candidates is checked.
The batch-inversion optimization can therefore return a later unlabeled output and discard label metadata for the earlier output.

Check the pending batch before accepting the direct match.
This restores the scan order from before batching, where the first matching output wins.

The regression puts a labeled `k = 0` output before its unlabeled counterpart and requires scanning to return it with the label.

78/100 · AdequateMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context✓ Mentions testing or verification
AI analysis · Low 42/100

This commit fixes a bug in Bitcoin's silent payments scanning code. When a wallet scans a transaction for outputs it can spend, a performance shortcut could accidentally skip over a labeled output and report a plain (unlabeled) version instead. The fix makes the scanner check pending labeled candidates before accepting a direct unlabeled match, restoring the intended 'first match wins' behavior and preserving label metadata.

Lower-prioritysilentpayments: extract label batch checkerby Lőrinc · 84a02fa9 · Jul 19, 2026 · 1 fileMessage 68 · AdequateInformational 14Details
Commit message · Lőrinc

silentpayments: extract label batch checker

Move the existing label-batch conversion and lookup into a helper.
The helper preserves the lookup order and keeps each scan exit on the same batch path.

68/100 · AdequateMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context
AI analysis · Informational 14/100

This commit is a simple code cleanup: it moves an existing block of label-scanning logic into a separate helper function without changing what the code actually does. There is no security fix or behavior change visible in the diff.