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 queue1033AI analyses
185commits · 30 days
403commits · 60 days
1283commits · 180 days
2062commits · 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 Bagot640192359068
Tobin C. Harding40965156063
jrakibi944963068
Nick Johnson18920112059
Andrew Poelstra512035075
Jamil Lambert, PhD1141849061
Fmt Bot311422045
Trevor Arjeski111111069
Shing Him Ng31724056
Ismail Daif22612050
satsfy (Renato Britto)17612066
Martin Habovstiak27512069
Analysis record

Published AI watches

Last scanned 20 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 19 AI analysisMessage 91 · Strong
RB Rust Bitcoinrust-bitcoin BitcoinCryptographic libraries

Merge rust-bitcoin/rust-bitcoin#6661: units: Remove `From<u16>` from `NumberOfBlocks`

This is a routine API cleanup, not a security fix. The developers removed a shortcut that let programmers create a 'number of blocks' value directly from any u16 number, replacing it with an existing named constructor called from_height. T…

ed5f1b68by Andrew Poelstra+18−358 files
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 45 · Thin
RB Rust Bitcoinrust-bitcoin BitcoinCryptographic libraries

Update the API text files

This commit only updates two generated API text files that list the public surface of the Rust crate. It removes entries for a `WitnessesEncoder` type, reflecting that the type is no longer part of the public API. There is no source code c…

9c391145by Tobin C. Harding+0−782 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 45 · Thin
RB Rust Bitcoinrust-bitcoin BitcoinCryptographic libraries

release bitcoin_hashes 1.2.0

This commit is a routine version bump for the bitcoin_hashes library from version 1.1.0 to 1.2.0. It only updates lock files, the package version number, and the changelog. There is no code change and no security relevance visible in the c…

8899dfd2by Andrew Poelstra+27−224 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
Repository ledger

Explore captured commits

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

Lower-priorityAvoid clone in BIP152 decode testby Julio Cesar · a8643b93 · May 26, 2026 · 1 fileMessage 55 · ThinTriage 0Details
Commit message · Julio Cesar

Avoid clone in BIP152 decode test

55/100 · ThinMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Mentions testing or verification! No meaningful explanatory body
Lower-prioritychore: remove `act` referencesby Luis Schwab · 4903e44a · May 26, 2026 · 4 filesMessage 47 · ThinTriage 0Details
Commit message · Luis Schwab

chore: remove `act` references

47/100 · ThinMessage clarity
✓ Descriptive subject✓ Uses a recognizable type or scope! No meaningful explanatory body
Security candidatebip32: validate master key seed lengthby satsfy (Renato Britto) · 284ed9c8 · May 26, 2026 · 3 filesMessage 68 · AdequateLow 35Details
Commit message · satsfy (Renato Britto)

bip32: validate master key seed length

BIP-32 requires the master seed to be between 16 and 64 bytes, but
new_master accepted any length. bitcoinfuzz flagged this as a
inconsistency on seeds out of range.

Introduce a Bip32Seed type that validates on construction.
new_master now takes a ref to Bip32Seed (a transparent newtype of
&[u8]). Fixed-size arrays go through infallible From<[u8; N]>. Slices
go through TryFrom<&[u8]> returning InvalidSeedLengthError.
`Debug` shows first 4 bytes of seed's sha256. `PartialEq` fixed
time equality comparison based on hashes.

68/100 · AdequateMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context
Why it was queued
secret or key materialdefensive validationfuzzing or regression evidencecryptography-sensitive path
AI analysis · Low 35/100

This commit tightens input checking for Bitcoin wallet master-key creation. Previously, the library would accept any seed length when creating a BIP-32 master key, even though the standard only allows seeds between 16 and 64 bytes. Now it validates the length and rejects out-of-range seeds. It also changes how seed bytes are printed in debug logs so the full secret is no longer exposed, and compares seeds in constant time to reduce timing side-channel risk.

Lower-priorityFix fuzz cache key target nameby Julio Cesar · 1f2b59c8 · May 26, 2026 · 2 filesMessage 55 · ThinInformational 15Details
Commit message · Julio Cesar

Fix fuzz cache key target name

55/100 · ThinMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Mentions testing or verification! No meaningful explanatory body
Why it was queued
fuzzing or regression evidence
AI analysis · Informational 15/100

This commit fixes a typo in GitHub Actions workflow cache keys. The cache key was referencing a non-existent matrix variable `matrix.target` instead of the correct `matrix.fuzz_target`. This only affects how fuzzing build artifacts are cached in CI and has no security relevance to the Rust Bitcoin library itself or its users.

Lower-priorityMove Miri CI to a daily cron jobby Jamil Lambert, PhD · be46afd9 · May 26, 2026 · 2 filesMessage 78 · AdequateTriage 0Details
Commit message · Jamil Lambert, PhD

Move Miri CI to a daily cron job

Miri takes hours and rarely completes on a PR. Run it instead on a daily
schedule like fuzz and kani.

Use the same tool to produce an issue when it fails.

78/100 · AdequateMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context✓ Mentions testing or verification
Why it was queued
fuzzing or regression evidencedocumentation-only discount
Lower-priorityExplicitly don't support ficticious architecturesby Martin Habovstiak · cf21edad · May 26, 2026 · 1 fileMessage 68 · AdequateTriage 0Details
Commit message · Martin Habovstiak

Explicitly don't support ficticious architectures

Currently, no architecture with `usize` exists in stable or unstable
Rust or anywhere in the world that I (or ChatGPT) know of. Notably,
CHERI has 128 bit **pointers**, but **not** `usize`, which is still 64
bits.

Rather then producing garbage on such platforms it is much cleaner to
flat out not support them. This makes reviews easier to reason about and
removes the WTF factor. And while this appears breaking, it really isn't
becuase since no such platforms exist, nobody could've realied on this
behavior.

If such platforms ever arrive, this crate will be most likely EOL for
millenia but even then there exists upgrade path:

1. release 2.0 which has the `new` method behind a feature flag, off by
default
2. semver-trick the entire 2.0 with `*` import and the feature forced on
3. add `try_new` method that returns `Result`

Then downstream crates that want to support crazy-wide architecture will
just upgrade to 2.0 with the feature deactivated and use the new method.

68/100 · AdequateMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context
Lower-priorityHard fail semver breaks for 1.0 cratesby 0xjc65eth · d9423799 · May 26, 2026 · 1 fileMessage 45 · ThinTriage 0Details
Commit message · 0xjc65eth

Hard fail semver breaks for 1.0 crates

45/100 · ThinMessage clarity
✓ Descriptive subject✓ Names a concrete action or component! No meaningful explanatory body
Lower-priorityp2p: refactor: use `take()` instead of `replace()`by yancy · 555a3671 · May 26, 2026 · 1 fileMessage 85 · StrongTriage 0Details
Commit message · yancy

p2p: refactor: use `take()` instead of `replace()`

The replacement value is not used due to the next state transition being
`ReadPayload`. That is, the value used in replace is never used in the
future since the header_decoder is "ready".

85/100 · StrongMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context✓ Explains rationale or failure mode
Lower-priorityCall low-level `ArrayVec` methods from high-levelby Martin Habovstiak · 3d04756b · May 25, 2026 · 1 fileMessage 80 · StrongTriage 0Details
Commit message · Martin Habovstiak

Call low-level `ArrayVec` methods from high-level

The high-level methods on `ArrayVec` should call into the low-level
methods instead of directly accessing the fields so that safety can be
better reasoned about. This modifies the existing high-level methods to
make it so. Notably, it does not modify `from_slice` which is
technically high-level but is also `const` and would require a call into
non-`const` `spare_capacity_mut`.

80/100 · StrongMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context✓ Explains rationale or failure mode
Lower-priorityMove high-level methods out of safety boundaryby Martin Habovstiak · 512a08f2 · May 25, 2026 · 1 fileMessage 68 · AdequateTriage 0Details
Commit message · Martin Habovstiak

Move high-level methods out of safety boundary

`ArrayVec` was defined inside a `safety_boundary` module to make
soundness review easier. However, multiple high-level methods that could
be implemented by calling into low-level ones were defined inside
`safety_boundary`. This moves them out into a separate impl block.

68/100 · AdequateMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context
Lower-priorityAvoid len check in `ArrayVec::spare_capacity_mut`by Martin Habovstiak · 0d9307f2 · May 25, 2026 · 1 fileMessage 68 · AdequateTriage 0Details
Commit message · Martin Habovstiak

Avoid len check in `ArrayVec::spare_capacity_mut`

The `ArrayVec` type already has an `unsafe` invariant and the module has
a bunch of `unsafe` anyway, so it makes sense to also rely on the
invariant when it comes to the length, potentially improving
performance.

68/100 · AdequateMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context
Lower-priorityAdd `ArrayVec::set_len`by Martin Habovstiak · 7073cc5c · May 25, 2026 · 1 fileMessage 51 · ThinTriage 0Details
Commit message · Martin Habovstiak

Add `ArrayVec::set_len`

Just as `Vec` has `set_len`, this adds an analogous function to
`ArrayVec` allowing the state-manipulating methods to be moved out of
safety boundary.

51/100 · ThinMessage clarity
✓ Subject identifies a change✓ Provides detailed explanatory context
Lower-priorityAdd `ArrayVec::spare_capacity_mut`by Martin Habovstiak · ace24982 · May 25, 2026 · 1 fileMessage 58 · ThinTriage 0Details
Commit message · Martin Habovstiak

Add `ArrayVec::spare_capacity_mut`

We'd like to improve tracking of `ArrayVec`'s invariants and, as a first
step, this commit adds `spare_capacity_mut` method which is modeled
after `Vec` and returns the slice pointing to the unused part of the
array vec.

58/100 · ThinMessage clarity
✓ Descriptive subject✓ Provides detailed explanatory context
AI review queuedAdd `#[track_caller]` to `ArrayVec::push`by Martin Habovstiak · 6d8ad233 · May 25, 2026 · 1 fileMessage 80 · StrongInformational 15Details
Commit message · Martin Habovstiak

Add `#[track_caller]` to `ArrayVec::push`

When `push` panics because of capacity being exceeded it's the caller's
fault for not taking care of it, so using `#[track_caller]` provides a
better panic message.

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
second-pass: broader security terminology
AI analysis · Informational 15/100

This commit adds a Rust compiler annotation to a helper function so that if it ever causes a program crash due to being full, the error message points at the code that called it rather than the helper itself. It does not change what the program does, only the quality of the crash diagnostic. There is no security vulnerability here.

Lower-prioritySimplify `ArrayVec::push`by Martin Habovstiak · 1d32b2bc · May 25, 2026 · 1 fileMessage 50 · ThinTriage 0Details
Commit message · Martin Habovstiak

Simplify `ArrayVec::push`

Now that `try_push` exists, `push` can just call into it and call
`expect` on the result.

50/100 · ThinMessage clarity
✓ Descriptive subject✓ Provides an explanatory body
Security candidatePromote BLOCK_SIZE assertion to hard assertby Jamil Lambert, PhD · 8f2ee2b8 · May 25, 2026 · 1 fileMessage 68 · AdequateModerate 60Details
Commit message · Jamil Lambert, PhD

Promote BLOCK_SIZE assertion to hard assert

The debug_assert only fires in debug builds; a downstream HashEngine
implementation with BLOCK_SIZE > 128 would silently produce wrong
outputs in release builds by indexing into fixed-size 128-byte ipad/opad
buffers beyond their length.

Change to assert! so the check is unconditional.

Assisted-by: claude-sonnet-4.6

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 · Moderate 60/100

This commit fixes a safety check in the HMAC code. Previously, the code only verified in debug builds that a hash engine's block size did not exceed 128 bytes. In release builds, an oversized block size would cause the code to write past the end of fixed 128-byte internal buffers, leading to incorrect HMAC results or memory corruption. The fix makes this check run unconditionally by changing a debug-only assertion into a regular assertion.

Security candidateIntroduce signing functions on sighash typesby Mitchell Bagot · 3edf875b · May 25, 2026 · 3 filesMessage 73 · AdequateInformational 15Details
Commit message · Mitchell Bagot

Introduce signing functions on sighash types

Although the private key types have raw signing functions on them that
allow users to bypass secp, they still present a rough interface for
signing compared to directly signing on the sighash types that result
from the SighashCache.

Introduce signing functions on LegacySighash, SegwitV0Sighash and
TapSighash.

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
secret or key materialsigning boundarycryptography-sensitive pathsigning or wallet path
AI analysis · Informational 15/100

This commit adds convenience helper methods that let developers sign Bitcoin transaction hash values more directly. It does not change any security-critical behavior; the same cryptographic signing operations were already available through other functions. The change is purely an API usability improvement.

Security candidateChange TapTweak to take self by refby Mitchell Bagot · 0e0146be · May 25, 2026 · 1 fileMessage 68 · AdequateInformational 19Details
Commit message · Mitchell Bagot

Change TapTweak to take self by ref

The TapTweak trait in bitcoin::key currently consumes the untweaked
key to construct the tweaked key. While this is mostly fine for users
who manually call into it, it prevents clean usage in functions that
take Keypair refs.

Change TapTweak::tap_tweak to take self by ref instead of by value.

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

This is a small API ergonomics change in a Rust Bitcoin library. A function called tap_tweak is changed so callers pass a reference to the key instead of giving up ownership of the key. It does not fix a bug or vulnerability; it makes the library easier to use in code that holds key references.

Lower-prioritydocs: Re-run gen-dep-tree scriptby Tobin C. Harding · 201d178a · May 25, 2026 · 1 fileMessage 72 · AdequateTriage 0Details
Commit message · Tobin C. Harding

docs: Re-run gen-dep-tree script

The doc has gotten a bit stale. Re-run the script (using `just
gen-dep-tree`).

72/100 · AdequateMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Uses a recognizable type or scope✓ Provides an explanatory body
Why it was queued
documentation-only discount
Security candidatehashes: Bump version to 0.21.0by Tobin C. Harding · 411e4473 · May 25, 2026 · 12 filesMessage 68 · AdequateInformational 15Details
Commit message · Tobin C. Harding

hashes: Bump version to 0.21.0

In preparation for release add a changelog entry, bump the version,
and update the lock files.

One last release before we 1.0 this crate team.

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 release-preparation change. It bumps the version number of the `bitcoin_hashes` crate from 0.20.0 to 0.21.0, updates the project's lock files, and adds a changelog entry summarizing prior changes. There is no code change that fixes or introduces a security issue in this commit itself.

Security candidate2026-05-24 automated rustfmt nightlyby Fmt Bot · acaec902 · May 24, 2026 · 10 filesMessage 45 · ThinInformational 15Details
Commit message · Fmt Bot

2026-05-24 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 is a purely cosmetic code-formatting commit. It only reorders imports, rewraps long lines, and collapses or expands function bodies to match the latest rustfmt nightly style. No program logic, behavior, or security properties were changed.

Lower-prioritybip158: reject malformed filter countsby Boris Nagaev · d4e2383a · May 23, 2026 · 1 fileMessage 68 · AdequateTriage 0Details
Commit message · Boris Nagaev

bip158: reject malformed filter counts

Propagate CompactSize decode errors when reading the element count in GCS
filter matching instead of treating malformed input as an empty filter.

Assisted-by: OpenAI GPT-5

68/100 · AdequateMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context
Lower-prioritybip158: add invalid compact size errorby Boris Nagaev · 5bf57f3f · May 23, 2026 · 1 fileMessage 68 · AdequateTriage 0Details
Commit message · Boris Nagaev

bip158: add invalid compact size error

Add a dedicated error variant for invalid CompactSize encoded filter counts.
It will be used in subsequent commit.

Assisted-by: OpenAI GPT-5

68/100 · AdequateMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context
Lower-prioritybip158: regression test of malformed filter countsby Boris Nagaev · 2c0c37d0 · May 23, 2026 · 1 fileMessage 75 · AdequateInformational 12Details
Commit message · Boris Nagaev

bip158: regression test of malformed filter counts

Cover truncated and non-minimal CompactSize prefixes in both
match_any and match_all.

Assisted-by: OpenAI GPT-5

75/100 · AdequateMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Provides an explanatory body✓ Mentions testing or verification
Why it was queued
fuzzing or regression evidence
AI analysis · Informational 12/100

This commit only adds new regression tests for malformed BIP158 compact-size filter counts. It does not change any production code, so it cannot introduce or fix a runtime vulnerability by itself. The tests verify that truncated and non-minimal CompactSize prefixes are rejected with parse errors in the GCS filter reader's match_any and match_all methods.

Lower-priorityprimitives: add minimum allocation sizeby Andrew Poelstra · ca06d893 · May 23, 2026 · 1 fileMessage 78 · AdequateModerate 57Details
Commit message · Andrew Poelstra

primitives: add minimum allocation size

It's possible to construct witnesses that force our current logic to repeatedly
allocate a single byte, many thousands of times. This is inefficient, and on
some targets (notably: x86 with fuzzer instrumentation) it is slow to the point
of being a DoS vector.

I was not able to construct a unit test which meaningfully demonstrates this
behavior (or even runs slowly enough to notice), but with this patch, a fuzzer
input which previously took several seconds now takes only milliseconds.

78/100 · AdequateMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context✓ Mentions testing or verification
Why it was queued
fuzzing or regression evidence
AI analysis · Moderate 57/100

This commit fixes a performance problem in how the library reads Bitcoin transaction witness data. Before the fix, specially crafted witness data could force the code to allocate memory one byte at a time, thousands of times in a row. That slowness could be abused to cause denial of service, especially when the code is run under fuzz testing or other instrumentation. The fix ensures the code always allocates at least 1,000 bytes at once, removing the repeated tiny allocations.