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 queue1053AI analyses
184commits · 30 days
403commits · 60 days
1283commits · 180 days
2061commits · 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 Bagot640192370068
Tobin C. Harding40965160063
jrakibi944963068
Nick Johnson18920112059
Andrew Poelstra512035075
Jamil Lambert, PhD1141849061
Fmt Bot311423045
Trevor Arjeski111111069
Shing Him Ng31724056
Ismail Daif22612050
satsfy (Renato Britto)17612066
Martin Habovstiak27512069
Analysis record

Published AI watches

Last scanned 55 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.

Security candidateci: upgrade cargo-rbmtby Nick Johnson · 78348b4a · Mar 24, 2026 · 33 filesMessage 78 · AdequateInformational 15Details
Commit message · Nick Johnson

ci: upgrade cargo-rbmt

This version of cargo-rbmt dropped the "with" and "without" feature set
generating keys for the test matrix. Replicating the important sets with
the exact_features key and depending on the random sets for the rest. I
didn't bother to add the "arbitrary" feature to the exact_feature sets
since it doesn't seem critical.

78/100 · AdequateMessage clarity
✓ Subject identifies a change✓ Uses a recognizable type or scope✓ Provides detailed explanatory context✓ Mentions testing or verification✓ Names security-relevant behavior explicitly
Why it was queued
cryptography-sensitive pathboot or update path
AI analysis · Informational 15/100

This commit is a routine maintenance update to the project's automated testing setup. It upgrades an internal tool called cargo-rbmt and moves its configuration from separate files into each crate's Cargo.toml package metadata. It also changes how nightly and stable Rust compiler versions are tracked, storing them in the workspace Cargo.toml instead of separate version files. There are no changes to the actual Bitcoin library code that users depend on, and no security-relevant behavior is modified.

AI review queuedUpdate API filesby busayo-OD · 5976a31e · Mar 24, 2026 · 5 filesMessage 28 · OpaqueInformational 15Details
Commit message · busayo-OD

Update API files

28/100 · OpaqueMessage clarity
✓ Subject identifies a change! No meaningful explanatory body
Why it was queued
documentation-only discountsecond-pass: opaque commit message
AI analysis · Informational 15/100

This commit only updates generated API snapshot text files. It removes lines that list certain error-conversion functions from the public API surface, but it does not change any actual Rust source code, logic, or behavior. There is no security-relevant change visible in the diff.

AI review queuedRemove From<SubError> for Error implsby busayo-OD · 39c6e225 · Mar 24, 2026 · 7 filesMessage 45 · ThinInformational 17Details
Commit message · busayo-OD

Remove From<SubError> for Error impls

45/100 · ThinMessage clarity
✓ Descriptive subject✓ Names a concrete action or component! No meaningful explanatory body
Why it was queued
signing or wallet pathsecond-pass: security-sensitive path
AI analysis · Informational 17/100

This commit removes automatic conversion traits (From implementations) that let sub-errors be silently turned into parent errors. It replaces them with explicit error wrapping at each call site. This is a code-quality and API-clarity change, not a security fix. There is no evidence in the commit message or diff that it addresses a vulnerability, exploit, or bug that could affect users.

AI review queuedRun the formatterby Mitchell Bagot · 1b962b50 · Mar 24, 2026 · 5 filesMessage 28 · OpaqueInformational 15Details
Commit message · Mitchell Bagot

Run the formatter

28/100 · OpaqueMessage clarity
✓ Subject identifies a change! No meaningful explanatory body
Why it was queued
second-pass: opaque commit message
AI analysis · Informational 15/100

This commit is purely a code-formatting cleanup. It removes blank lines, reorders imports, and lets an automated formatter rewrap a few lines. There are no functional changes to how the software behaves, and nothing in the diff suggests a security fix or vulnerability.

Security candidateAdd to_secret_bytes to PrivateKeyby Mitchell Bagot · 9feba0df · Mar 24, 2026 · 1 fileMessage 58 · ThinInformational 16Details
Commit message · Mitchell Bagot

Add to_secret_bytes to PrivateKey

Private keys have statically-known length of 32 bytes, unlike public
keys. To simplify roundtrips with from_byte_array and secp equivalents,
a function to return the fixed length array should be present.

Introduce to_secret_bytes function to PrivateKey. Replace to_vec range
implementation with to_secret_bytes().to_vec().

58/100 · ThinMessage clarity
✓ Descriptive subject✓ Provides detailed explanatory context
Why it was queued
secret or key materialcryptography-sensitive path
AI analysis · Informational 16/100

This commit adds a new helper method, to_secret_bytes, to the PrivateKey type in the rust-bitcoin library. It returns a private key as a fixed 32-byte array instead of a variable-length vector. The existing to_secret_vec method is rewritten to use the new helper. There is no visible security fix or behavior change; it is a routine API convenience addition.

Security candidateIntroduce roundtrip tests for all key typesby Mitchell Bagot · 65258cd1 · Mar 24, 2026 · 1 fileMessage 90 · StrongInformational 15Details
Commit message · Mitchell Bagot

Introduce roundtrip tests for all key types

In order to make sure that the key types can be converted to/from their
corresponding secp types, add tests that roundtrip from bitcoin ->
secp -> bitcoin for all main key types.

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

This commit only adds new automated tests that check whether Bitcoin-style cryptographic keys can be converted to and from the underlying secp256k1 library's key types. It does not change any production code, fix a bug, or alter behavior. There is no security issue here.

Security candidateMake with_serialized a public function on PublicKeyby Mitchell Bagot · 2c08753a · Mar 24, 2026 · 1 fileMessage 73 · AdequateInformational 16Details
Commit message · Mitchell Bagot

Make with_serialized a public function on PublicKey

The with_serialized function on PublicKey allows for a callback
function to be called with the key serialised in a form based on the
compressedness flag. At present, this is only used internally in the
key module.

Make with_serialized pub and add docs.

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

This commit simply changes an existing internal helper function to be publicly usable and adds documentation and examples. It does not fix a bug, change behavior, or introduce any new security-sensitive logic. The function already existed and behaved the same way; only its visibility changed from private to public.

Security candidateIntroduce serialisation functions for PublicKeyby Mitchell Bagot · de942b87 · Mar 24, 2026 · 2 filesMessage 80 · StrongInformational 19Details
Commit message · Mitchell Bagot

Introduce serialisation functions for PublicKey

Currently, the bitcoin::PublicKey type cannot be serialised in a
controlled manner without first converting to an underlying secp256k1
type. Since we want to avoid users needing secp types, serialisation
should be possible with just the bitcoin wrapper type.

Introduce serialize_compressed and serialize_uncompressed functions
on PublicKey that pass through to the corresponding secp functions.

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

This commit adds two new helper methods, serialize_compressed and serialize_uncompressed, to the bitcoin::PublicKey type. Previously, users had to reach into the underlying secp256k1 library to serialize a public key. The change simply wraps that existing behavior in a more convenient API and updates internal callers to use the new methods. There is no indication of a security bug being fixed.

Security candidatehashes: Add SHA256d dispatch and public APIby jrakibi · 629cfcb7 · Mar 23, 2026 · 2 filesMessage 68 · AdequateInformational 16Details
Commit message · jrakibi

hashes: Add SHA256d dispatch and public API

Add sha256d dispatcher that currently handles 2-way ARM,
with the idea to extend to 4-way, 8-way, and 2-way x86.
we also expose a public API that will be used in merkle
root computation (in a follow up PR)

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

This commit adds a new performance-oriented function for computing many double-SHA256 hashes at once, with a special two-at-a-time path for ARM CPUs that support SHA2 hardware instructions. It also exposes that function as a new public API. There is nothing in the diff that fixes a bug, checks bounds incorrectly, or introduces an obvious security flaw; it appears to be a routine optimization and API addition.

Security candidatehashes: interleave two independent hashes for 2-way SHA256dby jrakibi · 0fbfbd14 · Mar 23, 2026 · 1 fileMessage 81 · StrongInformational 18Details
Commit message · jrakibi

hashes: interleave two independent hashes for 2-way SHA256d

ARM SHA256H/H2 instructions take 4 cycles to produce a
result. the next `SHA256H` needs the result of the current
one as input, so the CPU has to wait until it is ready.
(in Transform 2 for eg, 3 out of every 4 cycles are wasted
doing nothing)

we fill those wasted cycles by computing a second independent
hash alongside the first.

See https://developer.arm.com/documentation/PJDOC-466751330-7215/r4p1/
(Section 3.20) for Cortex-A76 instruction timings. The exact
latency may differ on other ARM chips but the concept is the
same

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

This commit is a performance optimization for SHA256 double hashing on 64-bit ARM processors. It rewrites a single-hash ARM hardware-accelerated routine to compute two independent hashes at the same time, filling otherwise wasted CPU cycles. There is no security bug being fixed and no new attack surface introduced; it is purely a speed improvement.

Security candidatehashes: Add optimized ARM SHA256d for 64-byte inputby jrakibi · c37ab856 · Mar 23, 2026 · 1 fileMessage 73 · AdequateInformational 16Details
Commit message · jrakibi

hashes: Add optimized ARM SHA256d for 64-byte input

Add the three transforms for sha256(sha256(64_bytes))

Transforms 1 & 2 compute the inner `sha256(64_bytes)`:

- Transform 1: 64 bytes already fill the first block (no
padding needed), so we apply 64 rounds of compression
normally.
After T1: state = state + initial_state

- Transform 2: the message schedule at this step is constant
and known in advance (64 bytes of padding), so
we precompute W[i]+K[i] into MIDS and apply 64 rounds (no
schedule expansion needed).
After T2: state = state + saved_T1_state
(state now contains sha256(64_bytes))

- Transform 3 computes sha256(output_of_T1_and_T2). The output
is 32 bytes, so the block contains 32 bytes and the rest is
known padding. we precompute the message
schedule for the known words (w8-w15) into FINS.
After T3: state = state + initial_state
(state now contains the sha256d result)

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

This commit adds a new, highly optimized way to compute a double SHA-256 hash on 64-byte inputs for 64-bit ARM processors (aarch64) using special CPU instructions. It is a pure performance improvement and does not change any public APIs or fix any known bug. There is no indication in the commit that it addresses a security vulnerability.

Security candidatekey: Rename PrivateKey::public_key to to_public_keyby Mitchell Bagot · d97484c4 · Mar 23, 2026 · 3 filesMessage 73 · AdequateInformational 20Details
Commit message · Mitchell Bagot

key: Rename PrivateKey::public_key to to_public_key

The public_key function on PrivateKey converts the key into a matching
PublicKey. Since this function is not a getter but a conversion
function, it should use the {to_,as_,into_} naming scheme. In this
case, to_public_key matches the naming used for the equivalent function
on the Keypair type.

Rename PrivateKey::public_key function to to_public_key, deprecating
the old function name.

73/100 · AdequateMessage clarity
✓ Specific, 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 20/100

This commit is a routine API cleanup: it renames a method on the PrivateKey type from public_key to to_public_key and keeps the old name as a deprecated alias. It does not change what the code does, only how callers spell the function name. There is no security bug being fixed.

AI review queuedconsensus_encoding: Error on byte-less end for VecDecoderby Mitchell Bagot · 4d6e7554 · Mar 23, 2026 · 1 fileMessage 73 · AdequateModerate 51Details
Commit message · Mitchell Bagot

consensus_encoding: Error on byte-less end for VecDecoder

In the existing encoding, Vec<T> would error when attempting to decode
an empty byte slice (i.e. one without a length prefix). In the new
consensus_encoding crate, a VecDecoder successfully decodes a
completely empty byte slice as 0 length Vec<T>. This difference in
behaviour manifests in various decoders throughout the stack and thus
results in differences in decoding behaviour.

Throw Eof error in VecDecoder::end() if no length prefix has been
provided to the decoder.

73/100 · AdequateMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context
Why it was queued
parser or protocol pathsecond-pass: security-sensitive path
AI analysis · Moderate 51/100

This commit fixes a behavioral mismatch in a new Bitcoin data-decoding library. Previously, the new decoder would silently accept an empty byte slice as an empty list, while the older code rejected it because it lacked a length prefix. The change makes the new decoder reject empty inputs too, preventing subtle parsing differences that could affect how transactions or network messages are interpreted across versions.

AI review queuedprimitives: Update API filesby Mitchell Bagot · da3f0930 · Mar 23, 2026 · 3 filesMessage 35 · OpaqueInformational 15Details
Commit message · Mitchell Bagot

primitives: Update API files

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

This commit only updates generated API snapshot files that list what public types and functions exist in the rust-bitcoin 'primitives' crate. No actual source code was changed, and nothing in the commit message or diff suggests a security fix or vulnerability. It is a routine housekeeping change.

AI review queuedprimitives: Add Default and new to all decodersby Mitchell Bagot · 9804591b · Mar 23, 2026 · 2 filesMessage 80 · StrongInformational 15Details
Commit message · Mitchell Bagot

primitives: Add Default and new to all decoders

In order to simplify composition of decoder types, the Default trait
and new() function should be provided for all decoder types.

Add Default and new to BlockDecoder, HeaderDecoder, TxInDecoder and
TxOutDecoder.

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
signing or wallet pathsecond-pass: security-sensitive path
AI analysis · Informational 15/100

This commit adds convenient ways to create certain Bitcoin data decoders (Default and new()) in the rust-bitcoin library. It does not change how data is parsed or validated, and there is no indication it fixes or introduces a security problem.

Security candidatehashes: use Rust-like syntax in hash type macrosby Jamil Lambert, PhD · 8b91b42f · Mar 23, 2026 · 11 filesMessage 45 · ThinInformational 15Details
Commit message · Jamil Lambert, PhD

hashes: use Rust-like syntax in hash type macros

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 purely cosmetic refactor of how hash types are declared in the rust-bitcoin library. It changes the internal macro syntax from a custom list of numbers and flags to something that looks more like ordinary Rust code. There is no change to the actual hashing behavior, output, or public API.

Security candidate2026-03-22 automated rustfmt nightlyby Fmt Bot · 508986dc · Mar 22, 2026 · 76 filesMessage 45 · ThinInformational 15Details
Commit message · Fmt Bot

2026-03-22 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 pathparser or protocol path
AI analysis · Informational 15/100

This is a routine automated code-formatting commit. It only changes whitespace, import order, line wrapping, and other stylistic details produced by the rustfmt tool. There are no functional changes, bug fixes, or security-related modifications.

AI review queuedprimitives: Convert encoders to ExactSizeEncoderby Mitchell Bagot · 35c6e004 · Mar 21, 2026 · 3 filesMessage 68 · AdequateInformational 19Details
Commit message · Mitchell Bagot

primitives: Convert encoders to ExactSizeEncoder

For encoders, the use of the encoder_newtype_exact macro allows for the
implementation of the ExactSizeEncoder trait. This provides users with
the ability to determine the encoding length of types without needing
to perform the entire encoding process. The TxIn and TxOut encoders in
primitives can be made ExactSizeEncoders but are currently not.

Replace uses of encoder_newtype with encoder_newtype_exact for TxIn and
TxOut encoder types.

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

This is a routine library improvement that lets users ask 'how many bytes will this transaction input/output take up when encoded?' without actually encoding it. It adds a length method to two encoder types by switching to a macro that supports exact-size encoders. There is no security bug being fixed and no indication this change addresses any vulnerability.

AI review queuedinternals, hashes, primivties: clean up optional depsby Nick Johnson · cecf021c · Mar 20, 2026 · 3 filesMessage 85 · StrongInformational 15Details
Commit message · Nick Johnson

internals, hashes, primivties: clean up optional deps

If you use the `dep:OPTIONAL_DEP` syntax in a package's feature, then
the implicit feature flag for the optional dependency is disabled. No need
to tell end users to avoid it.

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

This commit is a routine cleanup of how optional dependencies are declared in three Rust package configuration files. It changes feature flags to use the modern `dep:` syntax and updates comments to be clearer. There is no change to actual program logic, no security fix, and no vulnerability.

Security candidateIntroduce WifKey for private keys with networkby Mitchell Bagot · 2f7b79b6 · Mar 19, 2026 · 8 filesMessage 68 · AdequateInformational 17Details
Commit message · Mitchell Bagot

Introduce WifKey for private keys with network

In bitcoin, the PrivateKey type holds a secp SecretKey, a
compressedness flag and a NetworkKind. The NetworkKind field is only
ever used when converting to/from a WIF key string. Since a PrivateKey
can (or will) be usable for functions beyond just WIF import/export, it
is necessary to remove the dependence on network for the key type.

Introduce WifKey which holds a PrivateKey and a NetworkKind.
Remove network field from PrivateKey.
Replace uses of PrivateKey involving WIF logic with WifKey.

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

This commit is a routine API refactor in the rust-bitcoin library. It splits the old PrivateKey type into two parts: a simpler PrivateKey that only stores the secret key and compression flag, and a new WifKey type that pairs a PrivateKey with a Bitcoin network for WIF import/export. The change removes the network field from PrivateKey and moves WIF-specific parsing, serialization, and formatting onto WifKey. There is no security fix here; it is a design cleanup to make the key types more general-purpose.

Security candidateRemove private key from create-p2wpkh-address exampleby Mitchell Bagot · d6b18416 · Mar 19, 2026 · 1 fileMessage 78 · AdequateInformational 15Details
Commit message · Mitchell Bagot

Remove private key from create-p2wpkh-address example

The create-p2wpkh-address example demonstrates how to construct a
P2WPKH address from a secp PublicKey, going through the
CompressedPublicKey type. Currently, it also logs out the private key
required to spend from that address. Since the example is to
demonstrate address construction, the private key is not needed.

Remove the private key logging from the create-p2wpk-address example.

78/100 · AdequateMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context✓ Names security-relevant behavior explicitly
Why it was queued
secret or key material
AI analysis · Informational 15/100

This commit removes a line from a code example that printed a randomly-generated private key. The example now only prints the Bitcoin address. It is a documentation/example cleanup, not a fix for a software vulnerability in the library itself.

AI review queuedRe-export serde and arbitrary when they appear in public APIby Mitchell Bagot · e59a0040 · Mar 19, 2026 · 7 filesMessage 85 · StrongInformational 19Details
Commit message · Mitchell Bagot

Re-export serde and arbitrary when they appear in public API

In various crates, we have types from external crates in the public
APIs, such as serde's Serialize or arbitrary's Arbitrary. In order to
simplify dependency handling, we should re-export these crates which
have types appearing in the public API.

Add pub extern crate for serde and arbitrary in bitcoin, network, p2p,
units and primitives as needed.

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

This change makes two helper libraries (serde and arbitrary) publicly visible from several rust-bitcoin crates. It is a dependency-management convenience for downstream developers and does not fix or introduce any security vulnerability.

Lower-priorityExclude RFC7539 tests from chacha20_poly1305_fuzz buildsby Abeeujah · b8fe28bb · Mar 18, 2026 · 3 filesMessage 83 · StrongInformational 15Details
Commit message · Abeeujah

Exclude RFC7539 tests from chacha20_poly1305_fuzz builds

The rfc7539 and related tests `new_from_block` require the
implementation to be spec-compliant. However under the
`chacha20_poly1305_fuzz` cfg flag, the `apply_keystream` is a no-op
that leaves ciphertext unmodified.

This intentional deviation from the RFC causes these specific tests
to fail. Gating them prevents false positives in
`--cfg=chacha20_poly1305_fuzz` builds.

83/100 · StrongMessage clarity
✓ Specific, 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 · Informational 15/100

This commit only changes test code. It adds a configuration gate so that certain cryptography specification tests are skipped when the code is built with a special fuzzing flag. The fuzzing flag intentionally disables encryption to make fuzz testing easier, which naturally causes those spec-compliance tests to fail. There is no change to production code and no security vulnerability is being fixed.

AI review queuedapi: update for CompactSizeU64Decoderby Nick Johnson · 85a6da3a · Mar 18, 2026 · 5 filesMessage 35 · OpaqueInformational 15Details
Commit message · Nick Johnson

api: update for CompactSizeU64Decoder

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

This commit only updates generated API snapshot files (text listings of public types and functions) to reflect a new CompactSizeU64Decoder type and a moved CompactSizeEncoder module path. No actual source code, logic, or behavior changes are present in the diff, so it has no security relevance on its own.

AI review queuedconsensus_encoding: move compact size into its own moduleby Nick Johnson · a06bf033 · Mar 18, 2026 · 4 filesMessage 65 · AdequateInformational 15Details
Commit message · Nick Johnson

consensus_encoding: move compact size into its own module

Public API is unchanged; lib.rs re-exports all the same types.

65/100 · AdequateMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Provides an explanatory body
Why it was queued
parser or protocol pathsecond-pass: security-sensitive path
AI analysis · Informational 15/100

This commit is a pure code reorganization: it moves the compact-size integer encoder and decoder into a new dedicated file/module. The public API is unchanged, the logic is unchanged, and no security-relevant behavior is modified.