RB
← All projectsRust Bitcoin

rust-bitcoin

Rust library for Bitcoin data structures, serialization, consensus encoding, and scripts.

BitcoinCryptographic librariesNormal
Repository coverage

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

459security candidates448second-pass queue969AI analyses
188commits · 30 days
404commits · 60 days
1283commits · 180 days
2064commits · 365 days
Backfill bands
Aug 5 → Feb 6787 seen32 candidatesComplete
Feb 6 → Jun 6878 seen53 candidatesComplete
Jun 6 → Jul 6211 seen15 candidatesComplete
Jul 6 → Aug 5184 seen2 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.

64/100 average clarity
311Strong · 80–100
1054Adequate · 60–79
555Thin · 40–59
150Opaque · 0–39
20security candidates with opaque commit messaging
Read the scoring rubric →
Developer activity

Who is changing the project?

Public Git author strings; identities are not independently verified.

DeveloperCommitsCandidatesAnalyzedHigh riskMessage avg.
Mitchell Bagot640192332068
Tobin C. Harding40965152063
jrakibi944963068
Nick Johnson1892091059
Andrew Poelstra512033075
Jamil Lambert, PhD1141849061
Fmt Bot311420045
Trevor Arjeski111111069
Shing Him Ng31724056
Ismail Daif22612050
satsfy (Renato Britto)17611066
Martin Habovstiak27511069
Analysis record

Published AI watches

Last scanned 23 minutes ago

Informational 15 AI analysisMessage 100 · Strong
RB Rust Bitcoinrust-bitcoin BitcoinCryptographic libraries

Merge rust-bitcoin/rust-bitcoin#6671: units: reword docs from height to count in relative locktime

This commit only changes documentation comments and variable names in the rust-bitcoin library. It rewords references to 'block height' as 'block count' for relative locktime, because a relative locktime measures elapsed blocks since a coi…

6ea4ff92by Andrew Poelstra+20−172 files
No security note in commit
Informational 15 AI analysisMessage 96 · Strong
RB Rust Bitcoinrust-bitcoin BitcoinCryptographic libraries

Merge rust-bitcoin/rust-bitcoin#6670: ci: fix labeller permissions

This is a routine GitHub Actions workflow fix. The change gives the automated PR labeler workflow permission to download artifacts and explicitly tells the GitHub CLI which repository to act on. It does not change the Bitcoin library code,…

CI workflow permission fixNo source code changesNo cryptographic or consensus changes
276e0a61by Andrew Poelstra+5−01 file
No security note in commit
Informational 15 AI analysisMessage 91 · Strong
RB Rust Bitcoinrust-bitcoin BitcoinCryptographic libraries

Merge rust-bitcoin/rust-bitcoin#6657: Release tracking PR: `base58ck 0.5.0`

This commit is a routine version bump for the base58ck crate from 0.4.0 to 0.5.0. It only updates version numbers in package manifests, lock files, and adds a changelog entry. There are no code changes and no security relevance.

9deb5de1by Andrew Poelstra+22−168 files
No security note in commit
Informational 21 AI analysisMessage 100 · Strong
RB Rust Bitcoinrust-bitcoin BitcoinCryptographic libraries

Merge rust-bitcoin/rust-bitcoin#6440: base58: Introduce `decode_check_to_array` for alloc-less decoding

This commit is a routine feature addition to the rust-bitcoin base58 crate. It adds a new no-allocator function to decode short base58-check strings into fixed-size byte arrays, and renames the existing error type while keeping a deprecate…

No security-relevant bug fix is described in the commit message or diff.New decoding path uses a fixed 128-byte scratch buffer (`ArrayVec`) and rejects oversized inputs.Checksum verification and invalid-character handling are preserved from the existing alloc implementation.
c5fd1832by Andrew Poelstra+330−775 files
No security note in commit
Informational 15 AI analysisMessage 93 · Strong
RB Rust Bitcoinrust-bitcoin BitcoinCryptographic libraries

Merge rust-bitcoin/rust-bitcoin#6646: hashes: add several methods to `Midstate` and release 1.2.0

This commit is a routine feature release for the bitcoin_hashes crate. It adds new public methods and a constant to the SHA-256 Midstate type so developers can compute SHA-256 midstates in const contexts. There is no indication of a securi…

0f68fcb3by Andrew Poelstra+157−4210 files
No security note in commit
Informational 15 AI analysisMessage 73 · Adequate
RB Rust Bitcoinrust-bitcoin BitcoinCryptographic libraries

units: reword docs to block count in relative locktime

This commit only rewords documentation comments and variable names in the codebase. It changes references from 'block height' to 'block count' for relative lock times, which is a terminology correction with no functional code changes. Ther…

8867fe2eby satsfy (Renato Britto)+20−172 files
No security note in commit
Informational 15 AI analysisMessage 91 · Strong
RB Rust Bitcoinrust-bitcoin BitcoinCryptographic libraries

Merge rust-bitcoin/rust-bitcoin#6667: Make the `WitnessesEncoder` private

This commit makes a small internal helper type called WitnessesEncoder private. It was previously exported as public API but is only used inside the transaction encoder. The change removes it from the public API surface and moves the code …

07d91f7fby Andrew Poelstra+54−1324 files
No security note in commit
Informational 12 AI analysisMessage 75 · Adequate
RB Rust Bitcoinrust-bitcoin BitcoinCryptographic libraries

ci: fix labeller permissions

This commit adjusts a GitHub Actions workflow that automatically labels pull requests based on CI results. It adds a built-in repository token, tells the artifact download step to merge single-file artifacts, and explicitly sets the reposi…

Workflow-only change with no library code modificationsUses the default GITHUB_TOKEN rather than a custom secretRuns in workflow_run context, which already has elevated repository access by design
715f2bd6by Nick Johnson+5−01 file
No security note in commit
Informational 15 AI analysisMessage 91 · Strong
RB Rust Bitcoinrust-bitcoin BitcoinCryptographic libraries

Merge rust-bitcoin/rust-bitcoin#6668: Scrub the transaction encoding logic

This commit is a pure code reorganization (refactor) in the rust-bitcoin library. It moves transaction encoding and decoding definitions around within a single file so the code follows the project's preferred layout. No logic, behavior, or…

c5588ba5by Andrew Poelstra+57−571 file
No security note in commit
Informational 18 AI analysisMessage 96 · Strong
RB Rust Bitcoinrust-bitcoin BitcoinCryptographic libraries

Merge rust-bitcoin/rust-bitcoin#6662: build(deps): bump actions/checkout from 6.0.2 to 6.0.3

This commit is a routine update to the GitHub Actions checkout tool used by the project's automated workflows. It changes the pinned version from 6.0.2 to 6.0.3 across many workflow files. The newer version fixes minor bugs related to SHA-…

Dependency bump of actions/checkout to a patch releaseUpstream fixes for SHA-256 repository checkout and merge commit regexAll affected workflows already disable persisted credentials
f7d364cdby Andrew Poelstra+29−2915 files
No security note in commit
Informational 15 AI analysisMessage 96 · Strong
RB Rust Bitcoinrust-bitcoin BitcoinCryptographic libraries

Merge rust-bitcoin/rust-bitcoin#6663: build(deps): bump taiki-e/install-action from 2.79.12 to 2.81.4

This is a routine Dependabot update that bumps the version of a third-party GitHub Action used only in automated testing workflows. The change does not touch the project's actual Bitcoin library code, and there is no indication it fixes or…

5c92c0b0by Andrew Poelstra+2−22 files
No security note in commit
Informational 15 AI analysisMessage 68 · Adequate
RB Rust Bitcoinrust-bitcoin BitcoinCryptographic libraries

Scrub the transaction encoding logic

This commit is a pure code reorganization: it moves existing transaction encoding and decoding definitions around within a single file so they follow the project's preferred layout. No logic was changed, no security bug was fixed, and no n…

80dcef15by Tobin C. Harding+57−571 file
No security note in commit
Informational 15 AI analysisMessage 58 · Thin
RB Rust Bitcoinrust-bitcoin BitcoinCryptographic libraries

Make the WitnessesEncoder private

This commit simply hides an internal helper type called WitnessesEncoder from public view. It is a routine API-cleanup change with no security relevance visible in the code or commit message.

b37accc3by Tobin C. Harding+54−542 files
No security note in commit
Informational 15 AI analysisMessage 93 · Strong
RB Rust Bitcoinrust-bitcoin BitcoinCryptographic libraries

build(deps): bump astral-sh/setup-uv from 8.1.0 to 8.2.0

This is a routine automated update by Dependabot that changes the pinned version of a GitHub Action used to install the 'uv' Python tool in two workflow files. The new commit hash corresponds to the legitimate 8.2.0 release of astral-sh/se…

1c438632by dependabot[bot]+2−22 files
No security note in commit
Informational 15 AI analysisMessage 93 · Strong
RB Rust Bitcoinrust-bitcoin BitcoinCryptographic libraries

build(deps): bump github/codeql-action/upload-sarif

This is a routine automated update by Dependabot that changes the pinned version of a GitHub-provided security scanning helper used in a workflow. It does not modify the project's actual Bitcoin library code, its cryptographic logic, or an…

5293bee4by dependabot[bot]+1−11 file
No security note in commit
Informational 15 AI analysisMessage 93 · Strong
RB Rust Bitcoinrust-bitcoin BitcoinCryptographic libraries

build(deps): bump taiki-e/install-action from 2.79.12 to 2.81.4

This is a routine Dependabot update that bumps a GitHub Actions helper used in automated testing workflows from version 2.79.12 to 2.81.4. It only changes which version of the action is invoked during CI runs; it does not modify the Rust B…

eb9544f9by dependabot[bot]+2−22 files
No security note in commit
Informational 15 AI analysisMessage 93 · Strong
RB Rust Bitcoinrust-bitcoin BitcoinCryptographic libraries

build(deps): bump actions/checkout from 6.0.2 to 6.0.3

This is a routine automated update by Dependabot that bumps the GitHub Actions 'actions/checkout' dependency from version 6.0.2 to 6.0.3 across all project workflow files. It only changes pinned commit hashes and version comments for the a…

Routine patch-level dependency bumpNo changes to permissions, inputs, or workflow logicpersist-credentials: false already present on all checkout steps
ae935fadby dependabot[bot]+29−2915 files
No security note in commit
Informational 15 AI analysisMessage 28 · Opaque
RB Rust Bitcoinrust-bitcoin BitcoinCryptographic libraries

Update API files

This commit only updates generated API snapshot text files to remove two lines that documented a `From<u16>` conversion for a locktime type. No actual Rust source code was changed, so there is no runtime behavior change or security fix in …

6ea25bedby Mitchell Bagot+0−123 files
No security note in commit
Informational 15 AI analysisMessage 60 · Adequate
RB Rust Bitcoinrust-bitcoin BitcoinCryptographic libraries

base58ck: Bump version to 0.5.0

This commit is a routine version bump for the base58ck crate from 0.4.0 to 0.5.0. It only updates version numbers in package manifests, lock files, and adds a changelog entry describing unrelated feature changes. There are no code changes,…

8479b56eby Tobin C. Harding+22−168 files
No security note in commit
Informational 20 AI analysisMessage 58 · Thin
RB Rust Bitcoinrust-bitcoin BitcoinCryptographic libraries

Rename Error to DecodeCheckError

This commit is a routine code cleanup: it renames the `Error` type in the base58 module to the more descriptive `DecodeCheckError`, and adds a deprecated type alias so existing code using `base58::Error` continues to work. There is no chan…

b0eba4c0by Mitchell Bagot+45−395 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.

Security candidateChange new constructor to from_secpby Mitchell Bagot · 34744dae · Feb 16, 2026 · 1 fileMessage 68 · AdequateInformational 20Details
Commit message · Mitchell Bagot

Change new constructor to from_secp

The new constructor on XOnlyPublicKey is poorly named, as it merely
constructs an XOnlyPublic key by wrapping an inner type.

Rename XOnlyPublicKey::new to XOnlyPublicKey::from_secp

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 20/100

This commit simply renames a function from XOnlyPublicKey::new to XOnlyPublicKey::from_secp because the old name was misleading. The underlying behavior is unchanged. There is no security vulnerability or fix here.

Security candidateIntroduce as_inner on XOnlyPublicKeyby Mitchell Bagot · 583c168d · Feb 16, 2026 · 1 fileMessage 58 · ThinInformational 15Details
Commit message · Mitchell Bagot

Introduce as_inner on XOnlyPublicKey

In many cases, we only need a reference to the inner key on an
XOnlyPublicKey. Since XOnlyPublicKey is Copy, fn(self) has a copy
overhead on each use. as_inner, taking &self doesn't have this
overhead.

Introduce an as_inner() function to take &self and return a ref to the
inner secp256k1::XOnlyPublicKey value.

58/100 · ThinMessage clarity
✓ Descriptive subject✓ Provides detailed explanatory context
Why it was queued
cryptography-sensitive path
AI analysis · Informational 15/100

This commit adds a small performance helper method called as_inner() to the XOnlyPublicKey type and switches existing internal code to use it instead of a method that copies the key. There is no security issue here; it is a routine optimization to avoid unnecessary copying.

Security candidate2026-02-15 automated rustfmt nightlyby Fmt Bot · 0a92d080 · Feb 15, 2026 · 24 filesMessage 45 · ThinInformational 15Details
Commit message · Fmt Bot

2026-02-15 automated rustfmt nightly

45/100 · ThinMessage clarity
✓ Descriptive subject✓ Names a concrete action or component! No meaningful explanatory body
Why it was queued
cryptography-sensitive pathsigning or wallet path
AI analysis · Informational 15/100

This commit is a routine automated code-formatting run using the nightly version of rustfmt. It only changes whitespace, line breaks, import ordering, and other stylistic details across 24 files. No program logic, security behavior, or public API was changed.

Security candidateaddresses,bip158,crypto: migrate lint settingsby Nick Johnson · 9fedc40b · Feb 13, 2026 · 6 filesMessage 45 · ThinInformational 15Details
Commit message · Nick Johnson

addresses,bip158,crypto: migrate lint settings

45/100 · ThinMessage clarity
✓ 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 is a routine housekeeping change that moves lint (code style warning) settings from individual crates to a shared workspace configuration. It does not change any program logic, fix bugs, or alter security behavior.

Security candidateChange hex re-export in bitcoin to stable hexby Mitchell Bagot · 9e5136d6 · Feb 13, 2026 · 24 filesMessage 68 · AdequateInformational 18Details
Commit message · Mitchell Bagot

Change hex re-export in bitcoin to stable hex

As per the repo policy, all exports from bitcoin must be a superset of
those from primitives. This includes crate re-exports. In bitcoin, the
hex re-export exports the unstable v0.3.0 crate, whilst primitives
exports the stable 1.0 crate. Since bitcoin makes extensive use of
unstable hex features, the export should be updated, but both included
as dependencies, like with primitives.

Introduce both hex unstable and hex stable as dependencies for bitcoin
and change re-export to stable hex to match primitives.

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

This commit is a routine internal dependency cleanup. The project had been re-exporting an unstable version of a hex-encoding helper crate, but its policy says the main crate must only re-export stable versions. The change swaps the public re-export to the stable version while keeping the unstable version as a private internal dependency for code that still needs it. There is no security bug being fixed here.

Security candidatehashes: Add cpufeatures for no_std SIMD detectionby jrakibi · 5074a7d1 · Feb 13, 2026 · 4 filesMessage 88 · StrongInformational 19Details
Commit message · jrakibi

hashes: Add cpufeatures for no_std SIMD detection

Currently SIMD requires `std` because we use `is_x86_feature_detected!`
and `is_aarch64_feature_detected!` macros for runtime CPU feature detection.
This means `no_std` users cannot benefit from the performance boost
provided by hardware SHA extensions.

This adds `cpufeatures` crate as an optional dependency.
When enabled, it provides runtime CPU feature detection in `no_std`
environments for both x86/x86_64 and aarch64.

Discussed in https://github.com/rust-bitcoin/rust-bitcoin/issues/5568#issuecomment-3816450830

Update lock files

88/100 · StrongMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context✓ Explains rationale or failure mode✓ Links an issue, advisory, or supporting reference
Why it was queued
cryptography-sensitive path
AI analysis · Informational 19/100

This change lets users of the library who don't use the standard Rust library ('no_std' environments, common in embedded or blockchain hardware) benefit from faster SHA-256 hashing via CPU-specific instructions. It adds an optional helper crate that detects CPU features in 'no_std' mode, similar to how the standard library already does it. There is no direct evidence in the commit that this fixes a security vulnerability; it is a performance and portability improvement.

Security candidatebenches: add sha256d benchby jrakibi · 5e813e3f · Feb 11, 2026 · 2 filesMessage 66 · AdequateInformational 15Details
Commit message · jrakibi

benches: add sha256d bench

Add sha256d benchmark and a 64 byte input target to help measure the
optimized-double-sha256 performance for 64 bytes if we implement it
in the future (see https://github.com/rust-bitcoin/rust-bitcoin/issues/5540)

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

This commit only adds a new performance benchmark for the SHA256d hashing function. It does not change any production code, cryptographic logic, or user-facing behavior. There is no security issue.

Security candidatebenches: fix hash benches to measure full hashby jrakibi · 2e12407c · Feb 11, 2026 · 10 filesMessage 76 · AdequateInformational 15Details
Commit message · jrakibi

benches: fix hash benches to measure full hash

The current hash benchmarks create the engine once and then repeatedly call
`engine.input()` on the same engine. This does not measure a full hash
operation per iteration (create engine -> `input()` -> `finalize()`).

The previous benchmark numbers are optimistic, especially for small
inputs, and does not reflect real cost of hashing.

I ran a before/after comparison for sha256:
On master:
- 10 bytes: 9.5514 ns
- 1024 bytes: 532.90 ns
- 65536 bytes: 34.533 us
This PR:
- 10 bytes: 51.360 ns
- 1024 bytes: 553.34 ns
- 65536 bytes: 33.796 us

On small inputs the old benchmark was around 5x too optimistic.
(for larger inputs the difference is small)

Discussed in https://github.com/rust-bitcoin/rust-bitcoin/pull/5604#issuecomment-3866577775

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
cryptography-sensitive path
AI analysis · Informational 15/100

This change only fixes how hash performance is measured in benchmark tests. It does not change any real hashing code that users or applications rely on, so it has no security impact on the library itself.

Security candidateFix PSBT key deserialisation byte sizeby Mitchell Bagot · 65229278 · Feb 9, 2026 · 1 fileMessage 68 · AdequateModerate 50Details
Commit message · Mitchell Bagot

Fix PSBT key deserialisation byte size

The PSBT Key decoding makes an assumption that the key type will always
encoding in a single byte in it's compact form. While this is often
correct, this is not correct according to the spec and may fail in
cases where key type values are large.

Fix the encode and decode implementations on Key to correctly calculate
the type value size to add to the key length size.

68/100 · AdequateMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context
Why it was queued
signing boundarysigning or wallet path
AI analysis · Moderate 50/100

This commit fixes a bug in how Partially Signed Bitcoin Transactions (PSBTs) read and write their internal 'key' fields. The old code assumed the key's type number always fits in one byte when encoded as a compact size. That assumption is wrong for large type numbers, so the code could misread the key's length and either reject valid PSBTs or, in the worst case, allocate too much memory. The fix makes the encoder and decoder correctly account for the actual number of bytes the type number occupies.

Security candidatehashes: Test hmac incremental inputby Liam Aharon · 5b713745 · Feb 6, 2026 · 1 fileMessage 86 · StrongInformational 15Details
Commit message · Liam Aharon

hashes: Test hmac incremental input

Issue https://github.com/rust-bitcoin/rust-bitcoin/issues/5601 flagged
sha3-256 did not test or handle incremental input correctly.

While correcting sha3-256 behavior in PR #5604, an audit of all hashing
algorithms was undertaken to check they handle and test incremental
input correctly.

All algorithms passed, except hmac which handled incremental input
correctly but did not test it.

Extends the hmac hashing test suite with incremental input cases.

86/100 · StrongMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context✓ Mentions testing or verification✓ Links an issue, advisory, or supporting reference
Why it was queued
cryptography-sensitive path
AI analysis · Informational 15/100

This commit only adds a new test to verify that HMAC hashing still produces the correct result when data is fed in one byte at a time. It does not change any production code, fix a bug, or alter behavior. The existing code already handled incremental input correctly; the change simply adds missing test coverage.

Security candidatepsbt: Add bounds check for non-witness UTXO output indexby Erick Cestari · 9cfc3f09 · Feb 4, 2026 · 6 filesMessage 85 · StrongModerate 60Details
Commit message · Erick Cestari

psbt: Add bounds check for non-witness UTXO output index

Add validation to ensure the vout specified in a transaction input
does not exceed the number of outputs in the non-witness UTXO.
This aligns with Bitcoin Core's PSBT deserialization behavior, which
rejects PSBTs where the input references a non-existent output index.

The new NonWitnessUtxoOutOfBounds error provides detailed context
including the input index, the referenced vout, and the actual
number of outputs available in the non-witness UTXO.

Found by differential fuzzing using bitcoinfuzz.

85/100 · StrongMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context✓ Explains rationale or failure mode
Why it was queued
signing boundaryfuzzing or regression evidencesigning or wallet path
AI analysis · Moderate 60/100

This commit fixes a validation gap in how the library handles Partially Signed Bitcoin Transactions (PSBTs). A PSBT can include a reference to a previous transaction output (the 'non-witness UTXO') that doesn't actually exist. Before this fix, the library would not reject this, which could allow malformed or malicious PSBTs to be processed. The fix adds a bounds check so that if a PSBT input claims an output index that is too high, deserialization returns a clear error instead of silently continuing. The issue was found by differential fuzzing against Bitcoin Core.

Security candidateEncapsulate key wrapper typesby Mitchell Bagot · 4ad6e1bf · Feb 2, 2026 · 1 fileMessage 70 · AdequateInformational 17Details
Commit message · Mitchell Bagot

Encapsulate key wrapper types

Following patterns elsewhere in bitcoin, the wrapper types in the crypto
module should be encapsulated to ensure a consistent interface for
access and to prevent implementation/structure details from requiring
substantial refactors.

Encapsulate CompressedPublicKey, Keypair, SerializedXOnlyPublicKey,
SortKey, TweakedKeypair, TweakedPublicKey and XOnlyPublicKey types.

70/100 · AdequateMessage clarity
✓ Descriptive subject✓ Provides detailed explanatory context✓ Explains rationale or failure mode
Why it was queued
cryptography-sensitive path
AI analysis · Informational 17/100

This commit is a routine internal code reorganization in the rust-bitcoin library. It moves several key-related wrapper types into a single private 'encapsulate' module and re-exports them, without changing their public behavior or adding any security fixes. There is no indication of a vulnerability being patched.

Security candidateIntroduce from_secp constructor for Keypairby Mitchell Bagot · 7668df29 · Feb 2, 2026 · 1 fileMessage 68 · AdequateInformational 15Details
Commit message · Mitchell Bagot

Introduce from_secp constructor for Keypair

The Keypair type differs from the other crypto keys in that it doesn't
have a constructor, and can only be constructed with From on a
secp256k1 keypair. This makes it messy to encapsulate.

Introduce a from_secp constructor for Keypair, convert From impl to call
into from_secp, and move inner accessor under new constructor.

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 15/100

This commit is a routine code cleanup. It adds a new public constructor method called from_secp for the Keypair type and makes the existing From conversion use that constructor. It also moves an existing inner accessor method to a different spot in the file. There is no security fix or behavior change.

Security candidateRemove all direct access to key typesby Mitchell Bagot · fd574bc7 · Feb 2, 2026 · 1 fileMessage 68 · AdequateInformational 18Details
Commit message · Mitchell Bagot

Remove all direct access to key types

Various key types in bitcoin::crypto are implemented and used such
that the internal key values are directly accessed. Since we want to
encapsulate these types, the access to the inner values needs to be
adjusted to always run through the exposed constructors and getters.

Replace all .0 access with .to_* accessors and pub constructors with
equivalent exposed constructors.

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 commit is a code cleanup in the rust-bitcoin library. It replaces direct internal access to cryptographic key data (like reading the hidden `.0` field) with official getter methods and constructors. There is no direct evidence this fixes an active security bug, but it strengthens encapsulation so future mistakes are less likely.

Security candidateRename into_inner on XOnlyPublicKeyby Mitchell Bagot · b4e109d7 · Feb 2, 2026 · 1 fileMessage 58 · ThinInformational 20Details
Commit message · Mitchell Bagot

Rename into_inner on XOnlyPublicKey

According to the Rust API guidelines, conversion functions that
convert from owned -> owned on Copy types should use the to_ prefix,
not the into_ prefix. For consistency with the other types and those
guidelines, into_inner should thus be to_inner.

Rename into_inner to to_inner in XOnlyPublicKey

58/100 · ThinMessage clarity
✓ Descriptive subject✓ Provides detailed explanatory context
Why it was queued
cryptography-sensitive path
AI analysis · Informational 20/100

This commit is a routine API cleanup: it renames a method from `into_inner()` to `to_inner()` on a public-key wrapper type and keeps the old name as a deprecated alias. There is no security bug, no behavior change, and no vulnerability introduced or fixed.

Security candidateRemove pub access to CompressedPublicKey innerby Mitchell Bagot · 8857a066 · Feb 2, 2026 · 7 filesMessage 68 · AdequateInformational 19Details
Commit message · Mitchell Bagot

Remove pub access to CompressedPublicKey inner

The CompressedPublicKey newtype in bitcoin exposes a
secp256k1::PublicKey as a pub field, to allow for convenient
construction and access. However, this breaks our desired
encapsulation for the type.

Introduce a constructor and getter on CompressedPublicKey and force
the field to be private outside the key module.

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

This commit is a routine API cleanup, not a security fix. It hides the internal secp256k1 public key inside the CompressedPublicKey type and replaces direct field access with a constructor (from_secp) and a getter (to_inner). That improves encapsulation but does not change how keys are validated or used. There is no evidence this fixes a vulnerability.

Security candidate2026-02-01 automated rustfmt nightlyby Fmt Bot · 1681e7b5 · Feb 1, 2026 · 18 filesMessage 45 · ThinInformational 15Details
Commit message · Fmt Bot

2026-02-01 automated rustfmt nightly

45/100 · ThinMessage clarity
✓ Descriptive subject✓ Names a concrete action or component! No meaningful explanatory body
Why it was queued
cryptography-sensitive pathsigning or wallet path
AI analysis · Informational 15/100

This commit is an automated code-formatting run by rustfmt. It only changes whitespace, line breaks, import order, and other stylistic details across 18 files. No program logic, security behavior, or functionality was altered.

Security candidateFix bug in `Psbt::spend_utxo` when missing outputby Shing Him Ng · 164a9a5a · Jan 30, 2026 · 1 fileMessage 45 · ThinLow 45Details
Commit message · Shing Him Ng

Fix bug in `Psbt::spend_utxo` when missing output

45/100 · ThinMessage clarity
✓ Descriptive subject✓ Names a concrete action or component! No meaningful explanatory body
Why it was queued
signing boundarysigning or wallet path
AI analysis · Low 45/100

This commit fixes a panic (sudden crash) in a Bitcoin transaction-signing helper. The function `spend_utxo` previously assumed that a referenced transaction output always existed, and used unchecked array indexing. If the output was missing, the program would crash instead of returning a proper error. The fix replaces the unchecked lookup with a bounds-checked one that returns a clean error.

Security candidateprimitives: use saturating add in WitnessDecoderby jrakibi · 48e04c74 · Jan 27, 2026 · 1 fileMessage 93 · StrongLow 32Details
Commit message · jrakibi

primitives: use saturating add in WitnessDecoder

The required_len calculations before calling `reserve_batch()` could
overflow on 16-bit machines. In order to avoid overflow when
calculating required buffer size, replace addition with
saturating_add().

Addresses https://github.com/rust-bitcoin/rust-bitcoin/issues/5258#issuecomment-3797481037

93/100 · StrongMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context✓ Explains rationale or failure mode✓ Links an issue, advisory, or supporting reference✓ Names security-relevant behavior explicitly
Why it was queued
memory safety
AI analysis · Low 32/100

This commit fixes a potential integer overflow when calculating how much memory to reserve while decoding Bitcoin transaction witness data. The overflow could only happen on 16-bit machines, which are extremely uncommon today. The fix replaces regular addition with saturating addition, so the value stops growing at the maximum instead of wrapping around. This is a defensive hardening change rather than a confirmed exploitable vulnerability on typical hardware.

Security candidatehashes: add test for MidstateErrorby jrakibi · 3ef054fa · Jan 26, 2026 · 1 fileMessage 78 · AdequateInformational 12Details
Commit message · jrakibi

hashes: add test for MidstateError

verify that when midstate() returns an error, the included midstate
and unprocessed bytes in error can be used to reconstruct an equivalent engine
that produces the same final hash

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

This commit only adds a new unit test. It checks that when a SHA-256 hashing engine is paused mid-way through data (at a non-block-aligned point), the error object contains enough information to build a second engine that finishes hashing and produces the same final result. There is no code fix, behavior change, or security patch here.

Security candidatehashes: include midstate and buffer in MidstateErrorby jrakibi · 9e1b0902 · Jan 26, 2026 · 1 fileMessage 100 · StrongInformational 19Details
Commit message · jrakibi

hashes: include midstate and buffer in MidstateError

when HashEngine::midstate() fails due to non-block-aligned data, the
error now includes the closest block-aligned `Midstate` and the
unprocessed partial-block bytes.

This would allow the caller to recover and resume hashing (the next patch
explains how in a test case)

Closes https://github.com/rust-bitcoin/rust-bitcoin/issues/5483

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✓ Links an issue, advisory, or supporting reference
Why it was queued
cryptography-sensitive path
AI analysis · Informational 19/100

This change enriches an error type in the SHA-256 hashing code. When a caller asks for the internal 'midstate' snapshot at a non-aligned point, the error now also returns the nearest aligned snapshot and any leftover bytes, so the caller can resume hashing later. It is a feature/API improvement, not a fix for an active security flaw.

Security candidateCI: Use the new cargo rbmt toolby Tobin C. Harding · 7810f3a2 · Jan 23, 2026 · 48 filesMessage 90 · StrongInformational 15Details
Commit message · Tobin C. Harding

CI: Use the new cargo rbmt tool

Use the mad new `cargo rbmt` tool for CI. Note that for `bitcoin` the
`extra_tests.sh` test are rolled into `rbmt.toml` now that running
without default args is supported.

90/100 · StrongMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Uses a recognizable type or scope✓ Provides detailed explanatory context✓ Mentions testing or verification
Why it was queued
cryptography-sensitive path
AI analysis · Informational 15/100

This commit is a routine update to the project's automated testing setup. It replaces a set of shell scripts with a new Rust tool called `cargo rbmt` for running tests and lints in CI. There are no changes to the actual Bitcoin library code that users interact with, and no security issue is evident.

Security candidatehashes: Allow too many argsby Tobin C. Harding · 58495710 · Jan 23, 2026 · 3 filesMessage 60 · AdequateInformational 15Details
Commit message · Tobin C. Harding

hashes: Allow too many args

These are private crypto functions, just shoosh the linter.

60/100 · AdequateMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Provides an explanatory body
Why it was queued
cryptography-sensitive path
AI analysis · Informational 15/100

This commit only adds Clippy lint-suppression attributes (`#[allow(clippy::too_many_arguments)]`) to three internal cryptographic helper functions in the `rust-bitcoin` hashes crate. It does not change any executable code, logic, or public API. There is no security relevance: it simply tells the Rust linter to stop warning that these functions have many parameters.

Security candidateunits: Extend test coverage for NumOpResultby Mitchell Bagot · 0bb519bc · Jan 20, 2026 · 2 filesMessage 78 · AdequateInformational 15Details
Commit message · Mitchell Bagot

units: Extend test coverage for NumOpResult

NumOpResult has a similar API to core's Result type, most of which is
untested. Other functionality, like the is_overflow() function are also
not tested by existing tests.

Implement tests for unwrap, expect, ok, map and other similar functions
in NumOpResult. Adjust tests to cover is_overflow and is_div_by_zero.

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

This commit only adds new unit tests for an existing Rust type called NumOpResult. It does not change any production code, fix bugs, or alter behavior. There is no security issue here.

Security candidateIntroduce wrapper type for secp256k1::Keypairby Mitchell Bagot · 3ef1b4c0 · Jan 18, 2026 · 8 filesMessage 80 · StrongInformational 19Details
Commit message · Mitchell Bagot

Introduce wrapper type for secp256k1::Keypair

In order to solve the issue of imprecise types for from_str in
XOnlyPublicKey, a wrapper type was implemented, alongside a
corresponding narrow error type. This solution provided a cleaner
interface for such keys, in place of directly working with secp256k1
XOnlyPublicKey types.

Add a wrapper type for secp256k1::Keypair to tighten the error type
for from_str.

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 pathsigning or wallet path
AI analysis · Informational 19/100

This commit is a routine code-quality refactor in the rust-bitcoin library. It wraps the underlying secp256k1 keypair type in a library-specific type so that parsing errors can be more precise and the public API is cleaner. There is no direct security vulnerability being fixed here; it is an interface improvement that may indirectly reduce misuse.