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 4 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.

AI review queuedtests: compare full MuSig aggregate nonceby w0xlt · af1fdd12 · May 12, 2026 · 1 fileMessage 55 · ThinInformational 15Details
Commit message · w0xlt

tests: compare full MuSig aggregate nonce

55/100 · ThinMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Mentions testing or verification! No meaningful explanatory body
Why it was queued
second-pass: broader security terminology
AI analysis · Informational 15/100

This is a tiny test-only change. It makes one unit test compare the full 66-byte MuSig aggregate nonce output instead of only the first 33 bytes. It does not change any production code, cryptographic behavior, or library API.

Security candidatedoc: correct API docs for ECDSA signing out-params (s/array/signature object/)by Sebastian Falbesoner · 40a0d874 · Apr 29, 2026 · 2 filesMessage 55 · ThinInformational 15Details
Commit message · Sebastian Falbesoner

doc: correct API docs for ECDSA signing out-params (s/array/signature object/)

55/100 · ThinMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Names security-relevant behavior explicitly! No meaningful explanatory body
Why it was queued
signing boundarycryptography-sensitive path
AI analysis · Informational 15/100

This commit only fixes wording in the API documentation comments. It changes the description of a function output parameter from 'pointer to an array' to 'pointer to a signature object' in two header files. No actual code behavior changed, so there is no security impact.

Security candidatemusig: always clear out secret key in `secp256k1_musig_nonce_gen_counter`by Sebastian Falbesoner · 8479eafa · Apr 28, 2026 · 1 fileMessage 73 · AdequateLow 34Details
Commit message · Sebastian Falbesoner

musig: always clear out secret key in `secp256k1_musig_nonce_gen_counter`

Even though `secp256k1_musig_nonce_gen_internal` can currently only fail
if the API is misused (invalid `keypair` or `keyagg_cache` parameters),
clear out the buffer holding secret key data as well in this case to
follow best practices.

The issue was found and reported by l0rinc using GPT 5.5 (Thanks!).

73/100 · AdequateMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context
Why it was queued
secret or key material
AI analysis · Low 34/100

This is a small defensive cleanup in Bitcoin Core's libsecp256k1 MuSig code. The function that generates a cryptographic nonce could, in rare error cases, leave a temporary copy of the user's secret key in memory instead of wiping it. The patch makes sure the secret key buffer is always cleared, even when the internal function fails. The actual failure path can only be reached if the API is misused (bad keypair or cache), so this is best-practice hardening rather than an active exploit.

Lower-priorityci: Bump GCC snapshot major version to 17by Hennadii Stepanov · 3cca6451 · Apr 27, 2026 · 1 fileMessage 80 · StrongInformational 15Details
Commit message · Hennadii Stepanov

ci: Bump GCC snapshot major version to 17

See https://gcc.gnu.org/pipermail/gcc/2026-April/248048.html.

80/100 · StrongMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Uses a recognizable type or scope✓ Provides an explanatory body✓ Links an issue, advisory, or supporting reference
AI analysis · Informational 15/100

This commit simply updates the version number of an experimental GCC compiler snapshot used in automated testing, from version 16 to version 17. It is a routine CI/infrastructure maintenance change with no security relevance.

Lower-priorityci: Replace `ilammy/msvc-dev-cmd` with manual MSVC setupby Hennadii Stepanov · 285cb788 · Apr 13, 2026 · 1 fileMessage 93 · StrongInformational 18Details
Commit message · Hennadii Stepanov

ci: Replace `ilammy/msvc-dev-cmd` with manual MSVC setup

The `ilammy/msvc-dev-cmd` repository seems abandoned and should be
considered unsafe. This updates the workflow to load the MSVC
environment variables directly via `vcvars64.bat`.

See https://learn.microsoft.com/en-us/cpp/build/building-on-the-command-line.

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

This change updates the project's automated testing setup for Windows builds. It stops using a third-party GitHub Action called `ilammy/msvc-dev-cmd` to prepare the Microsoft C++ compiler, and instead runs a built-in Microsoft batch file directly. The commit message says the third-party tool is considered abandoned and unsafe, so this is a preventive security hygiene change rather than a fix for an active vulnerability in the project's own code.

Lower-priorityImprove checks for scalar _get_bits methodsby Peter.Dettman · 0cad3df5 · Apr 12, 2026 · 3 filesMessage 45 · ThinLow 26Details
Commit message · Peter.Dettman

Improve checks for scalar _get_bits methods

45/100 · ThinMessage clarity
✓ Descriptive subject✓ Names a concrete action or component! No meaningful explanatory body
AI analysis · Low 26/100

This commit tightens internal safety checks in the code that extracts bit chunks from large secret numbers (scalars) used in elliptic-curve cryptography. The changes make the library more defensive against accidental misuse, but the added checks are only active in special test/verification builds, not in normal production builds. There is no direct evidence this fixes an exploitable vulnerability in released software.

Lower-prioritygha: Bump deprecated GHA workflow dependenciesby Tim Ruffing · c5cd9d6d · Mar 26, 2026 · 3 filesMessage 76 · AdequateInformational 15Details
Commit message · Tim Ruffing

gha: Bump deprecated GHA workflow dependencies

Deprecation notice:
https://github.blog/changelog/2025-09-19-deprecation-of-node-20-on-github-actions-runners/

Changelogs (no entries relevant to us):
* https://github.com/docker/setup-buildx-action/releases/tag/v4.0.0
* https://github.com/docker/build-push-action/releases/tag/v7.0.0
* https://github.com/actions/cache#v5

76/100 · AdequateMessage clarity
✓ 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 simply updates several GitHub Actions workflow dependencies to newer major versions because the older versions rely on a Node.js runtime that GitHub is deprecating. It does not change any cryptographic code, build logic, or project behavior. There is no security vulnerability being fixed here.

Security candidateecdsa: VERIFY_CHECK result of _fe_set_b32_limitby Tim Ruffing · 43fca0ff · Mar 23, 2026 · 1 fileMessage 68 · AdequateInformational 18Details
Commit message · Tim Ruffing

ecdsa: VERIFY_CHECK result of _fe_set_b32_limit

This also avoids a spurious "-Wmaybe-uninitialized" warning emitted by
gcc 16 (snapshot) when compiling with -DDETERMINISTIC.

68/100 · AdequateMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context
Why it was queued
cryptography-sensitive path
AI analysis · Informational 18/100

This is a small code-quality change in Bitcoin Core's secp256k1 cryptographic library. It adds an explicit safety check confirming that a value converted from one internal format to another stays within the expected range, and it silences a compiler warning about an unused return value. The commit message frames this as avoiding a compiler warning, not fixing a security bug.

Lower-prioritytests: Fix C89 function pointer initialization in ellswift testsby mllwchrry · b84635ed · Mar 20, 2026 · 1 fileMessage 60 · AdequateInformational 15Details
Commit message · mllwchrry

tests: Fix C89 function pointer initialization in ellswift tests

60/100 · AdequateMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Mentions testing or verification! No meaningful explanatory body
AI analysis · Informational 15/100

This is a minor test-code change that rewrites how two hash functions are selected inside a loop so the code complies with the older C89 standard. It does not change what the tests actually do, and it is not a security fix.

Lower-priorityecmult: Document and test ng=NULL in ecmultby Tim Ruffing · 7e68c0c8 · Mar 11, 2026 · 2 filesMessage 55 · ThinInformational 15Details
Commit message · Tim Ruffing

ecmult: Document and test ng=NULL in ecmult

55/100 · ThinMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Mentions testing or verification! No meaningful explanatory body
AI analysis · Informational 15/100

This commit only adds a documentation comment and extra test cases for an already-supported calling convention of an internal elliptic-curve multiplication function. It does not change any behavior or fix any bug.

Lower-priorityeckey: Call ecmult with NULL instead of zero scalarby Tim Ruffing · 3a403639 · Mar 11, 2026 · 1 fileMessage 50 · ThinLow 27Details
Commit message · Tim Ruffing

eckey: Call ecmult with NULL instead of zero scalar

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

This is a one-line internal code cleanup in Bitcoin's secp256k1 cryptographic library. It changes how a public-key tweaking function passes a zero value to the elliptic-curve multiplication routine, switching from an explicit zero scalar to a special NULL pointer that the same routine already understands. The commit message gives no security rationale, and the diff alone does not show a fix for an exploitable bug. It is best treated as a defensive correctness or performance simplification rather than a security patch.

Security candidateAdd API to override SHA256 compression at runtimeby furszy · 0753f8b9 · Mar 3, 2026 · 11 filesMessage 80 · StrongLow 35Details
Commit message · furszy

Add API to override SHA256 compression at runtime

This introduces `secp256k1_context_set_sha256_compression()`,
which allows users to provide their own SHA256 block-compression
function at runtime.

This is useful in setups where the fastest implementation can only
be determined dynamically based on the available CPU features, and
rebuilding the library is not possible.

The callback is installed on the `secp256k1_context` and is then used
by all operations that compute SHA256 hashes. As part of the setup,
the library performs sanity checks to ensure that the supplied
function is equivalent to the default transform.

Passing NULL to the callback setter restores the built-in
implementation.

80/100 · StrongMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context✓ Explains rationale or failure mode
Why it was queued
cryptography-sensitive path
AI analysis · Low 35/100

This commit adds a new public API that lets users of the libsecp256k1 cryptography library swap out the internal SHA-256 compression function at runtime, typically to use a faster hardware-accelerated version. The library checks that the replacement behaves like the real SHA-256 step before accepting it. The change itself is a feature addition, not a bug fix, and there is no evidence in the commit or supplied references that it addresses a known security vulnerability.

Lower-prioritysha256: speed up writes using multi-block compressionby furszy · 4d92a083 · Mar 3, 2026 · 2 filesMessage 73 · AdequateInformational 18Details
Commit message · furszy

sha256: speed up writes using multi-block compression

Multiple 64-byte blocks can now be compressed directly
from the input buffer, without copying them into the
internal buffer.

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

This commit is a performance improvement to the SHA-256 hashing code in libsecp256k1. It makes the code compress multiple 64-byte data blocks directly from the caller's input buffer instead of first copying each block into a small internal buffer. The change is purely an optimization and does not alter the final hash output. New tests confirm that hashing the same data in one large write or many small writes produces identical results.

Security candidateIntroduce hash context to support pluggable SHA256 compressionby furszy · fdb6a91a · Mar 3, 2026 · 21 filesMessage 73 · AdequateInformational 15Details
Commit message · furszy

Introduce hash context to support pluggable SHA256 compression

This is purely a mechanical change with no behavior change.

It introduces a secp256k1_hash_ctx struct inside secp256k1_context
and propagates it to all SHA256-related operations.

This sets up the ability to provide a hardware-optimized SHA256
compression function at runtime in a follow-up commit.

73/100 · AdequateMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context
Why it was queued
cryptography-sensitive path
AI analysis · Informational 15/100

This commit is a large but purely structural refactor of the libsecp256k1 cryptographic library. It threads a new 'hash context' through every SHA-256, HMAC-SHA-256, and RFC 6979 operation so that a different SHA-256 compression implementation (for example a faster hardware version) can be plugged in later. The commit message explicitly calls it a 'mechanical change with no behavior change,' and the code keeps the existing software compression function as the default everywhere. There is no security bug or vulnerability visible in this patch.

Lower-prioritytestrand: Remove testrand_finishby Tim Ruffing · 8d0eda07 · Mar 2, 2026 · 3 filesMessage 73 · AdequateInformational 15Details
Commit message · Tim Ruffing

testrand: Remove testrand_finish

This removes printing of the "random run = " at the end of the tests. I
haven't seen a single case where this proved to be useful. And as of
48789dafc2a866bbc639184f0387637c0decb8c5, this is anyway printed only at
the end of the exhaustive tests and not the normal tests, so the
probability that this will be useful in the future is very low.

73/100 · AdequateMessage clarity
✓ Descriptive subject✓ Provides detailed explanatory context✓ Mentions testing or verification✓ Names security-relevant behavior explicitly
AI analysis · Informational 15/100

This commit removes a test-only debug printout that displayed a random 16-byte value at the end of the exhaustive test suite. It does not change any cryptographic code, network behavior, or production logic. There is no security relevance.

Lower-priorityhash: add midstate initializer and use it for tagged hashesby w0xlt · f48b1bfa · Feb 25, 2026 · 7 filesMessage 83 · StrongInformational 14Details
Commit message · w0xlt

hash: add midstate initializer and use it for tagged hashes

Introduce secp256k1_sha256_initialize_midstate() in the hash layer and use it at all tagged-hash midstate call sites across schnorrsig, musig, and ellswift.

Document the byte-counter contract at the declaration site in hash.h and add run_sha256_initialize_midstate_tests() to directly verify helper behavior against initialize_tagged.

Also switch the helper to take const uint32_t state[8] to reduce argument-order risk at call sites.

83/100 · StrongMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context✓ Mentions testing or verification
AI analysis · Informational 14/100

This commit is a straightforward internal cleanup: it introduces a helper function to set up SHA-256 hash states that have already been partially computed (so-called 'midstates') and replaces repeated manual setup code with calls to that helper. It does not change any cryptographic outputs, add new features, or fix a bug. It is not a security patch.

Lower-priorityci: Fix leftover use of old ECMULTGENPRECISIONby Tim Ruffing · 79e9f252 · Feb 25, 2026 · 1 fileMessage 57 · ThinInformational 15Details
Commit message · Tim Ruffing

ci: Fix leftover use of old ECMULTGENPRECISION

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

This is a one-line fix in the project's automated testing configuration. It renames a build option used only by the CI test runner from an old name (ECMULTGENPRECISION) to the current name (ECMULTGENKB). The change does not touch any cryptographic code, does not affect released binaries, and has no security relevance.

Security candidateRevert "ci, docker: Fix LLVM repository signature failure"by Hennadii Stepanov · 76e92cfe · Feb 20, 2026 · 1 fileMessage 70 · AdequateInformational 15Details
Commit message · Hennadii Stepanov

Revert "ci, docker: Fix LLVM repository signature failure"

This reverts commit 0ffb1749a5811bb63902f00c9fa73b49588d0557.

70/100 · AdequateMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Provides an explanatory body✓ Names security-relevant behavior explicitly
Why it was queued
signing boundary
AI analysis · Informational 15/100

This commit removes a temporary workaround in the project's CI Docker build file. The workaround had relaxed a PGP signature policy check so that an older LLVM repository signing key would still be accepted by Debian's package manager during automated testing image builds. Removing the workaround simply restores the normal, stricter policy. There is no direct security vulnerability in the project's own code, and no runtime software is changed.

Security candidateutil: introduce and use `ARRAY_SIZE` macroby Sebastian Falbesoner · 921b9711 · Feb 16, 2026 · 8 filesMessage 76 · AdequateInformational 15Details
Commit message · Sebastian Falbesoner

util: introduce and use `ARRAY_SIZE` macro

The macro definition matches the one used in Linux, see e.g.
https://github.com/torvalds/linux/blob/9702969978695d9a699a1f34771580cdbb153b33/include/linux/array_size.h#L11
(without the additional check rejecting pointers, as we would need
GNU C for that, see e.g. https://stackoverflow.com/a/19455169)

76/100 · AdequateMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context✓ Links an issue, advisory, or supporting reference
Why it was queued
memory safety
AI analysis · Informational 15/100

This commit is a simple code cleanup: it introduces a standard ARRAY_SIZE macro and replaces repeated manual array-size calculations with that macro. It does not change any behavior, fix any bug, or alter any security-sensitive logic. There is no security issue here.

Lower-priorityAdd tests for bad scalar inputs in ellswift XDHby gzJx0DuTRHytnHe7P5RmMbPf3wKy2BztweVGXTf · b99a94c3 · Feb 16, 2026 · 1 fileMessage 55 · ThinInformational 12Details
Commit message · gzJx0DuTRHytnHe7P5RmMbPf3wKy2BztweVGXTf

Add tests for bad scalar inputs in ellswift XDH

55/100 · ThinMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Mentions testing or verification! No meaningful explanatory body
AI analysis · Informational 12/100

This commit only adds new test cases to verify that the ellswift XDH function correctly rejects invalid secret scalar values (zero, the curve order, and values above the curve order) while accepting a value just below the curve order. It does not change any production code, so it does not introduce or fix a live security vulnerability on its own.

Security candidateellswift: fix overflow flag handling in secp256k1_ellswift_xdhby gzJx0DuTRHytnHe7P5RmMbPf3wKy2BztweVGXTf · 307b49f1 · Feb 16, 2026 · 1 fileMessage 100 · StrongModerate 62Details
Commit message · gzJx0DuTRHytnHe7P5RmMbPf3wKy2BztweVGXTf

ellswift: fix overflow flag handling in secp256k1_ellswift_xdh

The secp256k1_ellswift_xdh function uses overflow = secp256k1_scalar_is_zero(&s) which overwrites the overflow flag from the preceding secp256k1_scalar_set_b32 call. This means secret keys >= the curve order are silently accepted (reduced mod n) instead of being rejected.

The fix changes = to |=, matching the correct pattern already used in secp256k1_ecdh (main_impl.h, line 51).

The ECDH module's test suite explicitly tests overflow rejection (passes secp256k1_group_order_bytes as a key and checks the function returns 0). The ellswift test suite has no corresponding test, which is why this went undetected.

100/100 · StrongMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context✓ Explains rationale or failure mode✓ Mentions testing or verification✓ Names security-relevant behavior explicitly
Why it was queued
secret or key materialmemory safety
AI analysis · Moderate 62/100

This commit fixes a bug in the ElligatorSwift-based ECDH key exchange function. The function was supposed to reject secret keys that are invalid (zero or greater than or equal to the curve order), but due to a one-character bug it only checked for zero keys and silently accepted too-large keys by reducing them modulo the curve order. The fix makes it reject both invalid cases, matching the behavior of the regular ECDH function. There is no evidence this was exploited or that it caused real-world harm, but it is a genuine cryptographic correctness issue.

Lower-priorityci: Load Docker image by ID from builder stepby Hennadii Stepanov · ed02466d · Feb 13, 2026 · 1 fileMessage 57 · ThinInformational 12Details
Commit message · Hennadii Stepanov

ci: Load Docker image by ID from builder step

57/100 · ThinMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Uses a recognizable type or scope! No meaningful explanatory body
Why it was queued
documentation-only discount
AI analysis · Informational 12/100

This is a small GitHub Actions CI maintenance change. It changes how the workflow picks which Docker image to run, switching from 'use the most recently built image found on the runner' to 'use the exact image ID produced by a specific build step'. This makes the CI pipeline more reliable and predictable, but it is not a security fix and does not change any cryptographic or network-facing code in the secp256k1 library itself.

Lower-prioritybench: Update help functions in bench and bench_internalby kevkevinpal · c49c9be5 · Feb 10, 2026 · 3 filesMessage 73 · AdequateInformational 15Details
Commit message · kevkevinpal

bench: Update help functions in bench and bench_internal

In the bench and bench_internal help functions argv was not being
passed, in this change we pass in argv[0] and use it in the help text.

Additionally instead of passing all of argv in bench_ecmult we now
just pass argv[0] and is used as the executable_path variable.

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

This change is a minor cleanup to the help text of benchmark programs. It makes the printed usage instructions show the actual program name (for example, how the program was launched) instead of a hardcoded name like './bench'. There is no security issue here.

Security candidatetest: add unit tests for secp256k1_scalar_check_overflowby Rohit Yadav · f47bbc07 · Feb 4, 2026 · 1 fileMessage 72 · AdequateInformational 15Details
Commit message · Rohit Yadav

test: add unit tests for secp256k1_scalar_check_overflow

72/100 · AdequateMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Uses a recognizable type or scope✓ Mentions testing or verification! No meaningful explanatory body
Why it was queued
memory safety
AI analysis · Informational 15/100

This commit only adds new unit tests for an existing internal function that checks whether a number has overflowed the secp256k1 group order. It does not change any production code, cryptographic logic, or behavior that could affect users. The change improves test coverage but introduces no security issue.

Lower-priorityci: Enforce base-10 evaluationby Hennadii Stepanov · 4fb7ccf5 · Feb 3, 2026 · 1 fileMessage 57 · ThinInformational 15Details
Commit message · Hennadii Stepanov

ci: Enforce base-10 evaluation

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

This is a tiny CI maintenance fix. It forces a shell arithmetic expression to treat a week number as a regular decimal number, preventing a rare misinterpretation if the week number happens to start with a zero. There is no security issue in the code being changed.