RB
← All projectsRust Bitcoin

rust-bitcoin

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

BitcoinCryptographic librariesNormal
Repository coverage

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

524security candidates506second-pass queue2193AI analyses
140commits · 30 days
284commits · 60 days
1150commits · 180 days
2046commits · 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.

66/100 average clarity
489Strong · 80–100
1083Adequate · 60–79
566Thin · 40–59
151Opaque · 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 Bagot649193645068
Andrew Poelstra21072145089
Tobin C. Harding41566410063
jrakibi944994068
Nick Johnson19121190060
Jamil Lambert, PhD11919116061
satsfy (Renato Britto)381527066
Fmt Bot331431045
Trevor Arjeski111111069
Shing Him Ng31731056
Ismail Daif22622050
Martin Habovstiak28527069
Analysis record

Published AI watches

Last scanned 50 minutes ago

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

Merge rust-bitcoin/rust-bitcoin#6909: build(deps): bump actions/labeler from 6.2.0 to 7.0.0

This commit updates a GitHub Actions automation tool (actions/labeler) used to automatically tag pull requests with labels. It is a routine dependency version bump from 6.2.0 to 7.0.0, with no indication of a security fix or vulnerability.…

4ed7c068by Andrew Poelstra+1−11 file
No security note in commit
Informational 15 AI analysisMessage 96 · Strong
RB Rust Bitcoinrust-bitcoin BitcoinCryptographic libraries

Merge rust-bitcoin/rust-bitcoin#6910: build(deps): bump actions/checkout from 7.0.0 to 7.0.1

This commit is a routine update to the GitHub Actions checkout tool used by the project's automated workflows. It only changes version numbers in configuration files and does not alter the actual Bitcoin library code that users run. There …

328c4ae9by Andrew Poelstra+37−3717 files
No security note in commit
Informational 15 AI analysisMessage 100 · Strong
RB Rust Bitcoinrust-bitcoin BitcoinCryptographic libraries

Merge rust-bitcoin/rust-bitcoin#6911: build(deps): bump astral-sh/setup-uv from 8.3.2 to 9.0.0

This commit updates a GitHub Actions helper used to install a Python tool called uv, which runs the zizmor security scanner. The change only bumps the pinned version of the helper from 8.3.2 to 9.0.0. The new version's release notes mentio…

No security-relevant signals in commit or upstream release notesDependency bump in CI only, not in library codeNo CVE or advisory referenced
67600795by Andrew Poelstra+2−22 files
No security note in commit
Informational 15 AI analysisMessage 96 · Strong
RB Rust Bitcoinrust-bitcoin BitcoinCryptographic libraries

Merge rust-bitcoin/rust-bitcoin#6912: build(deps): bump github/codeql-action/upload-sarif from 4.37.0 to 4.37.3

This is a routine Dependabot update that changes the pinned version of GitHub's official CodeQL upload-sarif action from 4.37.0 to 4.37.3 in a single CI workflow. The action only uploads static analysis results to GitHub; it does not touch…

b51cec63by Andrew Poelstra+1−11 file
No security note in commit
Informational 15 AI analysisMessage 91 · Strong
RB Rust Bitcoinrust-bitcoin BitcoinCryptographic libraries

Merge rust-bitcoin/rust-bitcoin#6913: build(deps): bump dtolnay/rust-toolchain from 6c977a6ca4077a0ceb28ffbe03f59d46e9ac8772 to 02cb101ec7c40f2c49e1d9714d64511d8e1b74de

This is a routine update to a GitHub Actions helper used to install Rust during automated testing. It only changes the pinned version of the dtolnay/rust-toolchain action in workflow files. There is no change to the actual rust-bitcoin lib…

90330d15by Andrew Poelstra+8−84 files
No security note in commit
Informational 20 AI analysisMessage 100 · Strong
RB Rust Bitcoinrust-bitcoin BitcoinCryptographic libraries

Merge rust-bitcoin/rust-bitcoin#6906: consensus_encoding, primitives: expose exact encoding size for block and transaction

This commit adds a way to ask, in advance, exactly how many bytes a Bitcoin block or transaction will take when serialized. It is a feature addition for the library's encoding system, not a fix for a vulnerability. There is no indication i…

No security-relevant signals in commit message or diffFeature addition: expose exact encoded sizeNo mention of vulnerability, CVE, bug bounty, or security report
1a365d53by Andrew Poelstra+129−1068 files
No security note in commit
Informational 15 AI analysisMessage 88 · Strong
RB Rust Bitcoinrust-bitcoin BitcoinCryptographic libraries

build(deps): bump dtolnay/rust-toolchain

This is a routine update by Dependabot that changes which version of a popular GitHub Action (dtolnay/rust-toolchain) is used to install Rust in automated CI workflows. The commit only updates pinned commit hashes in workflow files; it doe…

a31e0b0eby dependabot[bot]+8−84 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 patch-version update of a GitHub-maintained action used only to upload static-analysis results (SARIF files) from a scheduled CI job. The change does not touch any project source code, cryptographic logic, or user-facing …

2cac6e38by 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 astral-sh/setup-uv from 8.3.2 to 9.0.0

This is a routine automated update by Dependabot that changes the pinned version of a GitHub Action used to install a Python tool called 'uv' in two workflow files. The new version is a major release of the setup-uv action itself, but the …

7d7e7269by dependabot[bot]+2−22 files
No security note in commit
Informational 21 AI analysisMessage 100 · Strong
RB Rust Bitcoinrust-bitcoin BitcoinCryptographic libraries

Merge rust-bitcoin/rust-bitcoin#6894: Harden `Copy` policy and apply to all pre-1.0 crates

This commit removes the automatic `Copy` trait from several public error types in the rust-bitcoin library and updates the project's written policy to discourage `Copy` on error types. `Copy` is a Rust trait that lets values be duplicated …

API hardening: removes `Copy` from public error types to preserve future flexibilityPolicy update: docs/policy.md now explicitly discourages `Copy` on error typesNo vulnerability fix: change is defensive/preventive, not reactive to a disclosed issue
457cb9b5by Andrew Poelstra+14−146 files
No security note in commit
Informational 18 AI analysisMessage 96 · Strong
RB Rust Bitcoinrust-bitcoin BitcoinCryptographic libraries

Merge rust-bitcoin/rust-bitcoin#6787: Move `from_script` to `Address` and drop `AddressExt`

This change is a routine code cleanup, not a security fix. It moves a method that converts Bitcoin output scripts into human-readable addresses from a temporary 'extension trait' directly onto the main Address type. The actual conversion l…

ed42dabdby Andrew Poelstra+38−414 files
No security note in commit
Low 35 AI analysisMessage 91 · Strong
RB Rust Bitcoinrust-bitcoin BitcoinCryptographic libraries

Merge rust-bitcoin/rust-bitcoin#6061: Units improvements

This is a routine code-quality and API-expansion pull request for the rust-bitcoin library's 'units' crate. It widens some fee-rate constructors from 32-bit to 64-bit inputs, renames the old 32-bit versions, improves serde error messages, …

API surface change: new u64 fee-rate constructors return NumOpResult to prevent silent overflowRenaming of existing u32 constructors to *_u32 may break downstream callers at compile time (breaking API change)Removal of artificial restriction in from_per_vb allows larger valid inputs
f9460859by Andrew Poelstra+266−12211 files
No security note in commit
Low 49 AI analysisMessage 96 · Strong
RB Rust Bitcoinrust-bitcoin BitcoinCryptographic libraries

Merge rust-bitcoin/rust-bitcoin#6862: units: Preserve error in NumOpResult add and sub

This commit fixes a bug in how the library handles math errors. Previously, if you added or subtracted two values and one of them already had an error (for example, dividing by zero), the library would silently replace that original error …

Error-state information loss in arithmetic wrapper typeIncorrect error propagation could mask prior failures such as division by zeroDefensive correctness fix in numeric operation result handling
5324e59aby Andrew Poelstra+26−41 file
No security note in commit
Low 37 AI analysisMessage 91 · Strong
RB Rust Bitcoinrust-bitcoin BitcoinCryptographic libraries

Merge rust-bitcoin/rust-bitcoin#6896: Fix `cargo audit` findings

This is a routine dependency-maintenance merge that swaps out old, unmaintained helper libraries for newer, patched versions in the project's example embedded programs and benchmark harness. The changes are driven by automated security sca…

cargo audit advisory remediationdependency upgrade for known-vulnerable crate (rand 0.7 / jobserver)dependency upgrade for known-vulnerable crate (crossbeam-epoch)
5f5f666dby Andrew Poelstra+51−1849 files
Vendor flagged security relevance
Low 37 AI analysisMessage 91 · Strong
RB Rust Bitcoinrust-bitcoin BitcoinCryptographic libraries

Merge rust-bitcoin/rust-bitcoin#6897: consensus_encoding: fix overcounting bug in the composite encoders exact size len calculation

This commit fixes a counting bug in a Rust Bitcoin library. The library has combined encoders that bundle multiple pieces of data together. A method called len() is supposed to report how many bytes are left to encode, but it was incorrect…

Violation of documented API contract (ExactSizeEncoder::len)Potential incorrect buffer-size or progress decisions by downstream callersComposite encoder state not fully isolated in size reporting before fix
22bbc326by Andrew Poelstra+19−13 files
No security note in commit
Low 37 AI analysisMessage 73 · Adequate
RB Rust Bitcoinrust-bitcoin BitcoinCryptographic libraries

consensus_encoding: fix bug in the composite encoder's exact size

This commit fixes a bookkeeping bug in a Rust Bitcoin library's composite encoder. The encoder is a tool that combines multiple pieces of data into a single byte stream, and it has a method that is supposed to report how many bytes are lef…

Incorrect implementation of a documented size/length contractPotential for callers to over-allocate buffers or miscompute transaction/witness sizesComposite encoder used in consensus-critical serialization paths
914365b4by Nick Johnson+19−13 files
No security note in commit
Informational 18 AI analysisMessage 91 · Strong
RB Rust Bitcoinrust-bitcoin BitcoinCryptographic libraries

Merge rust-bitcoin/rust-bitcoin#6809: addresses: Add `AddressParams` type and remove most uses of network types

This is a routine API refactoring in the rust-bitcoin library. It introduces a new AddressParams type and replaces most public uses of the older Network/NetworkKind types when creating or validating Bitcoin addresses. There is no security …

No memory-safety issues, cryptographic errors, or input-validation changes observedNo new unsafe blocks, no new dependencies, no new parsing of untrusted dataAPI surface change only: parameter types replaced with semantically equivalent AddressParams
81032b1aby Andrew Poelstra+208−16414 files
No security note in commit
Low 38 AI analysisMessage 100 · Strong
RB Rust Bitcoinrust-bitcoin BitcoinCryptographic libraries

Merge rust-bitcoin/rust-bitcoin#6886: units: preserve original err summing `NumOpResult`

This patch fixes a bug in how rust-bitcoin adds up a list of numeric operation results. Previously, if any item in the list already carried an error (for example, dividing by zero), the summing code would overwrite that error and falsely r…

Error-type confusion / misattribution in arithmetic result aggregationLoss of original failure context across iterator foldPotential for downstream logic to act on wrong `MathOp`/`MathErrorKind`
4af1ee1dby Andrew Poelstra+23−191 file
No security note in commit
Informational 15 AI analysisMessage 100 · Strong
RB Rust Bitcoinrust-bitcoin BitcoinCryptographic libraries

Merge rust-bitcoin/rust-bitcoin#6618: ci: disable fail-fast in weekly rustc update crons

This commit changes two GitHub Actions workflow files used for weekly automated Rust toolchain updates. It adds `fail-fast: false` so that if one branch's update job fails, the other branch jobs continue running instead of all being cancel…

c0a70548by Andrew Poelstra+2−02 files
No security note in commit
Moderate 62 AI analysisMessage 91 · Strong
RB Rust Bitcoinrust-bitcoin BitcoinCryptographic libraries

Merge rust-bitcoin/rust-bitcoin#6884: units: Fix div_by_fee_rate_floor precision

This commit fixes a precision bug in a Rust Bitcoin library function that calculates how much transaction weight a given amount of money can afford at a given fee rate. The old code rounded the fee rate up to a coarser unit (satoshis per k…

Incorrect fee-rate-to-weight conversion leading to understated affordable weightInteger rounding direction (ceil) used as divisor in floor division causing off-by-one or larger precision lossAddition of overflow handling for Weight::MAX
9caad2c1by Andrew Poelstra+23−52 files
Vendor flagged security relevance
Repository ledger

Explore captured commits

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

Security candidatepsbt: Fix tapscript witness signature orderingby nervana21 · 343a3a63 · Jan 5, 2026 · 2 filesMessage 100 · StrongLow 45Details
Commit message · nervana21

psbt: Fix tapscript witness signature ordering

BIP-0342 requires that when executing a spend of a P2TR output using the
script path, the witness signatures are ordered in reverse of the order
in which their corresponding public keys appear in the script. For
example, a script with `pubkey_1` CHECKSIG `pubkey_2` CHECKSIGADD ...
`pubkey_n` CHECKSIGADD must have witness signatures ordered as `w_n`,
..., `w_2`, `w_1`, where `w_i` corresponds to `pubkey_i`. This is
necessary because of the LIFO nature of stack execution.

Previously, the example and test code pushed witness signatures onto
the witness stack in sorted key order (from `BTreeMap` iteration), which
may not have matched the order required by the specification. This
commit fixes the logic in the example and test code to match the
specification.

Reference:
- BIP-0342: https://github.com/bitcoin/bips/blob/master/bip-0342.mediawiki

100/100 · StrongMessage clarity
✓ 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✓ Names security-relevant behavior explicitly
Why it was queued
signing boundarysigning or wallet path
AI analysis · Low 45/100

This commit fixes example code and a test helper that builds Bitcoin Taproot script-path witness data. The old code placed digital signatures in the wrong order on the transaction witness stack, following the order of an internal sorted map instead of the reverse order required by the Bitcoin Taproot specification (BIP-0342). A transaction finalized with the old ordering would be rejected by the Bitcoin network, so no funds could be stolen, but users copying the example could produce invalid transactions. The fix reads public keys from the script in their actual script order, then pushes the matching signatures in reverse.

Security candidateAdd PRNG to `MerkleBlock` testsby rustaceanrob · 44ad0ec5 · Jan 2, 2026 · 1 fileMessage 78 · AdequateInformational 15Details
Commit message · rustaceanrob

Add PRNG to `MerkleBlock` tests

This is a PRNG that can replace the dependency on `rand` in
this unit test. Even if this test failed in CI, I'm not sure how we
would actually reproduce it. The current state of the test seems more
apt for a fuzzing target where there is tooling to log and reproduce
failing cases. This would allow for determinism in the test and could be
used as a sanity check when making changes to `MerkleBlock`

Co-authored-by: apoelstra <apoelstra@wpsoftware.net>

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

This commit only changes test code. It replaces the use of an external random number generator (from the `rand` crate) with a small, deterministic pseudo-random number generator inside the `MerkleBlock` unit tests. The goal is to make the tests reproducible and remove a test-only dependency on the `rand` feature. There is no change to production code and no security vulnerability is introduced or fixed.

Security candidatedocs: clarify BIP34 rules and fix related testby jrakibi · c0172cfb · Jan 1, 2026 · 2 filesMessage 100 · StrongInformational 12Details
Commit message · jrakibi

docs: clarify BIP34 rules and fix related test

According to BIP34, the coinbase scriptSig must start with a push of
the block height, which already supersedes the lower bound of 2 bytes.

We keep EMPTY_COINBASE producing a 0-byte scriptSig for backward
compatibility with PSBT. Add a comment explaining this behavior.

Also update a test failing due to the new validation rule

100/100 · StrongMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Uses a recognizable type or scope✓ Provides detailed explanatory context✓ Explains rationale or failure mode✓ Mentions testing or verification
Why it was queued
signing boundarysigning or wallet path
AI analysis · Informational 12/100

This commit is a documentation and test fix, not a security patch. It adds a comment explaining that an 'empty coinbase' helper produces a 0-byte scriptSig that is technically invalid under Bitcoin consensus rules (which require 2-100 bytes), but is kept for backward compatibility in PSBT workflows where the scriptSig is filled in later. It also re-enables and updates a previously ignored unit test to use a valid 2-byte coinbase scriptSig.

Security candidateio: Bump version to 0.4.0-rc.0by Tobin C. Harding · d00870bb · Dec 31, 2025 · 6 filesMessage 80 · StrongInformational 15Details
Commit message · Tobin C. Harding

io: Bump version to 0.4.0-rc.0

We updated a bunch of dependencies and forgot to re-release
`bitcoin-io`. And this is breaking the attempt at releasing `bitcoin
0.33.0-beta.0`.

Use RC because we have a dependency on `consensus_encoding` RC release
that uses the `=` syntax to pin the exact version. Therefore everytime
we do a new RC release of that crate we have to do `io` as well.

In preparation for release bump the version, add a changelog entry,
and update the lockfiles. Also update the version everywhere `io` is
used as a dependency including adding an explicit version number to
`p2p` (which will be needed to release it).

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
access control
AI analysis · Informational 15/100

This commit is a routine version bump for a small Rust library called bitcoin-io, from version 0.3.0 to 0.4.0-rc.0. It updates lockfiles, a changelog, and dependency references in other crates so they all use the new version. There is no code change and no security issue visible in the commit.

Security candidateRun the formatterby Tobin C. Harding · 1d8649da · Dec 15, 2025 · 58 filesMessage 63 · AdequateInformational 15Details
Commit message · Tobin C. Harding

Run the formatter

Run `just fmt` then add `;` to two lines where the formatter changes
`{ some statement }` into

```
{
some statement
}
```

The the linter warns because no trailing `;`.

63/100 · AdequateMessage clarity
✓ Subject identifies a change✓ Provides detailed explanatory context✓ Explains rationale or failure mode
Why it was queued
cryptography-sensitive pathsigning or wallet pathparser or protocol path
AI analysis · Informational 15/100

This commit is purely a code-formatting cleanup. It runs the project's formatter across 58 files, adjusting whitespace, line breaks, import order, and adding two missing semicolons the formatter exposed. There are no functional code changes, no bug fixes, and no security-relevant alterations.

Security candidatechore: Implement Copyby Christian Lewe · 397aeb0c · Dec 13, 2025 · 1 fileMessage 55 · ThinInformational 18Details
Commit message · Christian Lewe

chore: Implement Copy

These structs only contain integers or references, so they should be
Copy.

55/100 · ThinMessage clarity
✓ Subject identifies a change✓ Uses a recognizable type or scope✓ Provides an explanatory body
Why it was queued
cryptography-sensitive path
AI analysis · Informational 18/100

This is a routine Rust API improvement that lets two small data types be copied implicitly instead of requiring an explicit clone. It does not fix a security bug and does not introduce an obvious vulnerability.

Security candidateUse roundtrip instead of rinsedby Tobin C. Harding · 50c5867c · Dec 11, 2025 · 7 filesMessage 76 · AdequateInformational 15Details
Commit message · Tobin C. Harding

Use roundtrip instead of rinsed

I never was really happy with the local variable `rinsed` but never
came up with a better one. In #5386 Mitch introduced `roundtrip`
instead, I like that better - use it everywhere.

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 commit simply renames a local variable from 'rinsed' to 'roundtrip' in several test files. It is a cosmetic code cleanup with no functional changes and no security relevance.

Security candidateRemove redundant readme sections in packagesby Nick Johnson · 8a91a71f · Dec 11, 2025 · 10 filesMessage 68 · AdequateInformational 15Details
Commit message · Nick Johnson

Remove redundant readme sections in packages

The MSRV and License sections in each package are redundant with the
required information in the package manifest. The manifest info is already
shown on sites like crates.io, so not much benefit of listing it twice.
This removes another spot to update on changes.

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

This commit only removes documentation sections from README files in multiple Rust packages. It deletes redundant mentions of the minimum Rust version and licensing information, which are already present in the package manifest files. There are no code changes, no functional changes, and no security implications.

Security candidatePin all RC dependenciesby Tobin C. Harding · 55a00aeb · Dec 9, 2025 · 5 filesMessage 63 · AdequateInformational 15Details
Commit message · Tobin C. Harding

Pin all RC dependencies

Me had trouble because of automatic resolution of RC depencies by
`cargo`. So now we want to pin to a specific version using the
"=X.Y.Z.rc.x" syntax. Do so for all dependencies that are currently in
an RC cycle.

63/100 · AdequateMessage clarity
✓ Subject identifies a change✓ Provides detailed explanatory context✓ Explains rationale or failure mode
Why it was queued
access control
AI analysis · Informational 15/100

This commit changes version constraints for several in-development (release candidate) internal dependencies so Cargo will use an exact version rather than automatically picking a newer release candidate. It is a build/maintenance change to prevent unexpected dependency resolution, not a fix for a security vulnerability.

Security candidateunits: Pin RC dependencyby Tobin C. Harding · 3b70bdaf · Dec 7, 2025 · 1 fileMessage 71 · AdequateInformational 19Details
Commit message · Tobin C. Harding

units: Pin RC dependency

So that any subsequent RC releases of `consensus-encoding` don't
inadvertently break the build (like #5358) pin the `encoding`
dependency to an exact version.

71/100 · AdequateMessage clarity
✓ Subject identifies a change✓ Provides detailed explanatory context✓ Explains rationale or failure mode✓ Links an issue, advisory, or supporting reference
Why it was queued
access control
AI analysis · Informational 19/100

This commit changes a single version requirement in a Rust package file so that a pre-release dependency is pinned to an exact version rather than allowing newer release-candidate versions. It is a build-stability fix, not a security patch. There is no code change that fixes a vulnerability or changes runtime behavior.

Security candidatehashes: silence new `unused-assignments` clippy lintby Andrew Poelstra · 710d644f · Dec 7, 2025 · 2 filesMessage 73 · AdequateInformational 15Details
Commit message · Andrew Poelstra

hashes: silence new `unused-assignments` clippy lint

In our `round!` macro invocation for the implementation for sha256 and
sha512 we do an assignment of a variable `$w` which is fed into the next
round. On the last round, this assignment is unused, which makes clippy
unhappy on recent nightlies.

Fix this so we can update our nightly compiler.

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

This commit is a code-quality cleanup, not a security fix. It adds a `let _ = w[15];` line in two SHA hashing implementation files solely to silence a new Rust clippy lint about an unused assignment inside a macro on the final round of SHA-256 and SHA-512. The generated machine code and behavior are unchanged.

Security candidateMove `impl_array_newtype` to `internals`by rustaceanrob · 20cd2327 · Dec 1, 2025 · 5 filesMessage 78 · AdequateInformational 15Details
Commit message · rustaceanrob

Move `impl_array_newtype` to `internals`

Discussion #5331 suggested removing `bitcoin` as a direct dependency
could be a reasonable goal for the `p2p` crate. One conflict along the
way is the use of this macro in `bip152` to implement the array-like
traits for the short IDs. Because `bitcoin` depends on `internals`, as
does `p2p`, we can move this macro into `internals` to help detangle
`p2p` and `bitcoin`.

Moves the deprecated methods to the `impl` blocks.

78/100 · AdequateMessage clarity
✓ Descriptive subject✓ 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 15/100

This commit is a routine code reorganization. It moves a helper macro that generates standard methods for array-like types from the main `bitcoin` crate into the shared `internals` crate. The goal is to let other crates (specifically `p2p`) use the macro without depending directly on `bitcoin`. The generated behavior is essentially unchanged, though a couple of deprecated `to_bytes` methods are moved from the macro into individual type definitions.

Security candidatedocs: fix copy-paste errors in documentation commentsby Herobrine · 9b06f2d5 · Nov 25, 2025 · 2 filesMessage 62 · AdequateInformational 15Details
Commit message · Herobrine

docs: fix copy-paste errors in documentation comments

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

This commit fixes two typos in documentation comments. One incorrectly called a private key type an 'extended public key,' and another incorrectly referenced a different struct name in a conversion function's doc comment. These are purely cosmetic comment corrections and do not change any executable code.

Security candidateRun cargo formatby Jamil Lambert, PhD · 4985e208 · Nov 24, 2025 · 9 filesMessage 43 · ThinInformational 15Details
Commit message · Jamil Lambert, PhD

Run cargo format

Only formatted changes in the previous commit. There are still a lot
of unrealated lines of code that need formatting.

43/100 · ThinMessage clarity
✓ Subject identifies a change✓ Provides an explanatory body
Why it was queued
cryptography-sensitive pathsigning or wallet path
AI analysis · Informational 15/100

This commit only reformats source code using the Rust formatter (cargo fmt). It changes whitespace, line breaks, and import grouping but does not alter program logic, behavior, or any security checks. There is no security issue.

Security candidateRemove wildcard Error importsby Jamil Lambert, PhD · 5890ed91 · Nov 24, 2025 · 21 filesMessage 35 · OpaqueInformational 15Details
Commit message · Jamil Lambert, PhD

Remove wildcard Error imports

35/100 · OpaqueMessage clarity
✓ Descriptive subject! No meaningful explanatory body! Opaque security-relevant change
Why it was queued
cryptography-sensitive pathsigning or wallet path
AI analysis · Informational 15/100

This commit is a large but purely cosmetic code cleanup in the Rust Bitcoin library. It removes wildcard imports of error types (like `use Error::*`) and replaces them with explicit `Self::Variant` or fully-qualified names. The behavior of the code does not change; it only makes the source code easier to read and maintain.

Security candidateecdsa: Add to/from_signature, len, and iterby Tobin C. Harding · a098184e · Nov 23, 2025 · 2 filesMessage 68 · AdequateInformational 15Details
Commit message · Tobin C. Harding

ecdsa: Add to/from_signature, len, and iter

To the `ecdsa` type add `to_signature`, `from_signature`, `len`, and
`iter` methods.

Change the implementation of `IntoIter` for a sig reference so we can
add `iter` method as done in `taproot`.

While we are at it fix up the docs and layout all the methods in the
same order for both types (`ecdsa` and `taproot`).

This unifies the APIs of the two types `ecdsa::SerializedSignature`
and `taproot::SerializedSignature`.

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

This commit is a routine API cleanup for the rust-bitcoin library. It adds a few helper methods (to_signature, from_signature, len, iter) to the ECDSA serialized-signature type and reorders existing methods in the Taproot serialized-signature type so both types look the same. There is no security fix or behavior change that would affect users' funds or data.

Security candidateImport core typesby Tobin C. Harding · bbc57722 · Nov 23, 2025 · 2 filesMessage 43 · ThinInformational 15Details
Commit message · Tobin C. Harding

Import core types

Done in an effort to make the `ecdas` and `taproot` modules uniform.

Import and do so in both modules.

43/100 · ThinMessage clarity
✓ Subject identifies a change✓ Provides an explanatory body
Why it was queued
cryptography-sensitive path
AI analysis · Informational 15/100

This commit is a minor code cleanup. It imports two common Rust traits (`Borrow` and `Deref`) directly at the top of two source files, instead of referring to them with their full `core::...` module path inside the code. There is no functional change, no bug fix, and no security relevance.

Security candidateOnly return valid data in sig sliceby Tobin C. Harding · c5f08f53 · Nov 23, 2025 · 2 filesMessage 68 · AdequateLow 41Details
Commit message · Tobin C. Harding

Only return valid data in sig slice

The `SerializedSignature` types have an internal buffer and we track
the length of valid data in the buffer. However in `AsRef` and friends
we are returning a slice of the whole buffer. This is confusing and a
potential footgun (eg `sig.as_ref()l.en()` isn't be meaningful).

Make the impls that get a byte slice reference only return valid data.
Done for both `ecdsa` and `taproot` type.

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

This commit fixes a bug in how serialized Bitcoin signatures expose their byte content. Previously, code asking for the signature bytes could receive the entire internal buffer, including leftover or uninitialized bytes beyond the actual signature length. Now only the valid, used portion is returned. This prevents accidental misuse where someone might hash, encode, or transmit extra garbage bytes as if they were part of the signature.

Security candidateMove/add From<PushBytes> for SerializedSignatureby Tobin C. Harding · 39a50dd9 · Nov 23, 2025 · 2 filesMessage 60 · AdequateInformational 15Details
Commit message · Tobin C. Harding

Move/add From<PushBytes> for SerializedSignature

Move the `ecdsa` impl to `script::push_bytes` and add one for the
`taproot` type.

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

This commit is a small internal code reorganization. It moves an existing conversion helper (so a serialized ECDSA signature can be viewed as a script 'push bytes' object) to a more central location, and adds an equivalent helper for Taproot signatures. There is no security fix or behavior change visible to users.

Security candidateRemove mutable impls from ecdsa SerializedSignatureby Tobin C. Harding · 8eb36454 · Nov 23, 2025 · 1 fileMessage 90 · StrongInformational 20Details
Commit message · Tobin C. Harding

Remove mutable impls from ecdsa SerializedSignature

We do not want users to be able to arbitrarily mutate a serialized
signature because doing so is meaningless. Also the `taproot` type
does not support mutatable references.

90/100 · StrongMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context✓ Explains rationale or failure mode✓ Names security-relevant behavior explicitly
Why it was queued
signing boundarycryptography-sensitive path
AI analysis · Informational 20/100

This commit removes the ability for outside code to directly modify the raw bytes of an ECDSA serialized signature object in the rust-bitcoin library. Previously, callers could obtain a mutable reference to the internal byte buffer and change it, which the developers consider meaningless because a signature is supposed to be a fixed cryptographic result. The change makes the type consistent with the taproot signature type, which already did not allow mutation. It is a hardening/correctness change rather than a fix for a known exploitable vulnerability.

Security candidateMove ecdsa reference implsby Tobin C. Harding · ff0841ae · Nov 23, 2025 · 1 fileMessage 50 · ThinInformational 15Details
Commit message · Tobin C. Harding

Move ecdsa reference impls

Move the impls so they are in the same order as in the `taproot`
module.

Code move only.

50/100 · ThinMessage clarity
✓ Descriptive subject✓ Provides an explanatory body
Why it was queued
cryptography-sensitive path
AI analysis · Informational 15/100

This commit simply reorders existing code in a Rust source file. It moves two blocks of code (implementations of Deref and DerefMut for SerializedSignature) to a different location within the same file so the order matches another module. No code behavior is changed, no bugs are fixed, and no security issue is introduced.

Security candidateAdd equality impls to ecdsa::SerializedSignatureby Tobin C. Harding · e903d12d · Nov 23, 2025 · 1 fileMessage 68 · AdequateInformational 15Details
Commit message · Tobin C. Harding

Add equality impls to ecdsa::SerializedSignature

Done as part of an effort to make the `SerializedSignature` types in
`ecdsa` and `taproot` have the same APIs.

Copy the impls from the `taproot` type.

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

This commit adds standard Rust comparison traits (equality and ordering) to a type that wraps a raw ECDSA signature byte array. It simply lets programmers compare these signature objects more conveniently; it does not change signature validation or introduce a security vulnerability.

Security candidateAdd Lower/UperHex impls for taproot::SerializedSignatureby Tobin C. Harding · a2a69cef · Nov 23, 2025 · 1 fileMessage 65 · AdequateInformational 16Details
Commit message · Tobin C. Harding

Add Lower/UperHex impls for taproot::SerializedSignature

Done in an effort to make the `ecdsa` and `taproot`
`SerializedSignature`s have the same API.

65/100 · AdequateMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Provides an explanatory body
Why it was queued
signing boundarycryptography-sensitive path
AI analysis · Informational 16/100

This commit adds two new ways to display a taproot serialized signature as hexadecimal text (lowercase and uppercase). It is a pure API-consistency change to make taproot signatures match the existing ecdsa signature API. There is no security issue visible in the diff.

Security candidateMove the SerializedSignature to cryto moduleby Tobin C. Harding · df89db76 · Nov 23, 2025 · 3 filesMessage 88 · StrongInformational 18Details
Commit message · Tobin C. Harding

Move the SerializedSignature to cryto module

There was no good reason for putting it where it is, at least from
what I found on the original PR

> I don't remember exactly but I think I thought it wouldn't work in
> the other taproot module. I have no idea now if it's actually an
> issue

ref: https://github.com/rust-bitcoin/rust-bitcoin/pull/2156#issuecomment-1790295634

Anyways, in order to split the `crypto` module out into a separate
crate it makes sense to have the `SerializedSignature` as well.

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
signing boundarycryptography-sensitive pathsigning or wallet path
AI analysis · Informational 18/100

This commit is a straightforward internal code reorganization. It moves the SerializedSignature type from one module to another within the same crate, without changing its behavior or public API. There is no security fix or vulnerability here.

Security candidateMove ecdsa::SerializedSignature implsby Tobin C. Harding · fa57e889 · Nov 23, 2025 · 2 filesMessage 58 · ThinInformational 15Details
Commit message · Tobin C. Harding

Move ecdsa::SerializedSignature impls

In an effort to make the `ecdsa` and `taproot` modules look the same
so it is easier to tell exactly where they differ move some
`SelializedSignature` impls. Elect to use the layout in the `taproot`
one.

Except in `taproot` move the `Eq` impl to be grouped with the
`PartialEq` impls.

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

This commit is purely a code cleanup: it moves some trait implementation blocks for the ECDSA SerializedSignature type to a different location in the same file and reorders the Taproot Eq impl to sit next to PartialEq. No logic, behavior, or signatures changed.