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
147commits · 30 days
304commits · 60 days
1150commits · 180 days
2055commits · 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 16 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 candidaterefactor(bip32): rename derivation path extend to joinby Trevor Arjeski · 83afae52 · May 29, 2026 · 1 fileMessage 77 · AdequateInformational 15Details
Commit message · Trevor Arjeski

refactor(bip32): rename derivation path extend to join

Use path-like naming convention for non-mutating concatenation like Rust does.

77/100 · AdequateMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Uses a recognizable type or scope✓ Provides an explanatory body
Why it was queued
secret or key materialcryptography-sensitive path
AI analysis · Informational 15/100

This commit is a simple rename of a method from 'extend' to 'join' in a Rust Bitcoin library. It does not change what the code does, only its name. There is no security issue here.

Security candidaterefactor(bip32): split relative and absolute bip32 derivation pathsby Trevor Arjeski · 65ab45cd · May 29, 2026 · 1 fileMessage 85 · StrongLow 34Details
Commit message · Trevor Arjeski

refactor(bip32): split relative and absolute bip32 derivation paths

This is part of a larger refactor on the bip32 module.

- Make DerivationPath parse only relative paths
- Add AbsoluteDerivationPath for master prefixed (m) notation

Splitting DerivationPath into relative and absolute types will force the
derivation APIs to be more explicit about which path is being used to derive a
child key.

85/100 · StrongMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Uses a recognizable type or scope✓ Provides detailed explanatory context
Why it was queued
secret or key materialcryptography-sensitive path
AI analysis · Low 34/100

This commit refactors how Bitcoin BIP-32 derivation paths are represented in the rust-bitcoin library. It splits the old single DerivationPath type into two: DerivationPath (relative paths like 0'/1) and AbsoluteDerivationPath (master-prefixed paths like m/0'/1). The goal is to make wallet code more explicit about whether it is deriving from the master key or from an intermediate key. The change is a type-system/API hardening, not a fix for a known exploitable bug. It may prevent future misuse where a relative path is accidentally treated as absolute or vice versa, but the commit itself does not describe any active vulnerability.

Security candidaterefactor(bip32): rename DerivationPath to RelativeDerivationPathby Trevor Arjeski · 6ee99f84 · May 29, 2026 · 2 filesMessage 85 · StrongInformational 20Details
Commit message · Trevor Arjeski

refactor(bip32): rename DerivationPath to RelativeDerivationPath

Renaming to trigger code changes in consumers of this module so we can pinpoint
locations that may need to be changed to AbsoluteDerivationPath

85/100 · StrongMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Uses a recognizable type or scope✓ Provides detailed explanatory context
Why it was queued
secret or key materialcryptography-sensitive path
AI analysis · Informational 20/100

This is a routine code cleanup that renames the type `DerivationPath` to `RelativeDerivationPath` throughout the project. The change is purely a refactor: it does not alter how the code behaves, what it computes, or how it handles data. The commit message explicitly says the rename is intended to force other developers to update their code so the maintainers can identify places that may later need a new `AbsoluteDerivationPath` type. There is no security fix or vulnerability here.

Security candidatebip32: split generic wrapper for Xpriv::new_masterby satsfy (Renato Britto) · 4f6de66e · May 28, 2026 · 1 fileMessage 73 · AdequateInformational 15Details
Commit message · satsfy (Renato Britto)

bip32: split generic wrapper for Xpriv::new_master

Keep the public new_master accepting impl Into<NetworkKind> and impl
AsRef<Bip32Seed>, but forward the arguments to new_master_inner, thus
preventing inner part from repeating for each inline implementation.

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

This is a small internal code cleanup in a Bitcoin library. It splits one function into two so the inner logic doesn't have to be repeated, but the public behavior is unchanged. There is no security issue visible in the change.

Security candidatebip32: tidy InvalidSeedLengthError trait implsby satsfy (Renato Britto) · c0d5e26c · May 28, 2026 · 1 fileMessage 68 · AdequateInformational 15Details
Commit message · satsfy (Renato Britto)

bip32: tidy InvalidSeedLengthError trait impls

Follow up to match the conventions used by other errors in this module.

- Derive Copy.
- Add From<Infallible>.
- Use explicit source returning None in std::error::Error.
- Clarify range display message with 'inclusive' word.

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

This is a minor code cleanup for an error type in the BIP-32 (Bitcoin key derivation) module. It adds a standard 'Copy' trait, a conversion from Rust's 'Infallible' type, an explicit 'no underlying cause' implementation, and slightly clarifies an error message. There is no security fix or behavior change.

Security candidatebip32: implement Eq for Bip32Seedby satsfy (Renato Britto) · b414ab57 · May 28, 2026 · 1 fileMessage 45 · ThinInformational 15Details
Commit message · satsfy (Renato Britto)

bip32: implement Eq for Bip32Seed

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

This commit adds a standard Rust equality trait (Eq) to the Bip32Seed type. It is a routine, non-functional change that does not alter behavior, fix a bug, or address any security issue. There is no security relevance.

Security candidatehashes: fix Miri UB in aarch64 loadsby jrakibi · 06f69fff · May 28, 2026 · 1 fileMessage 68 · AdequateLow 36Details
Commit message · jrakibi

hashes: fix Miri UB in aarch64 loads

`vld1q_u32` loads four `u32` values, but `&INIT[0]`/`&INIT[4]`
creates a reference to only one `u32`.

Use `INIT.as_ptr()` instead

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 · Low 36/100

This commit fixes a low-level memory-safety issue in the SHA-256 code that runs on ARM 64-bit processors (aarch64). The code was asking the CPU to load four 32-bit numbers starting from a pointer that only pointed to a single 32-bit number. Rust's strict memory rules (flagged by the Miri checker) consider this undefined behavior, even though real hardware often tolerates it. The fix uses a pointer to the whole array instead, so the load is clearly valid.

Security candidateUpdate all changelog formatsby Nick Johnson · 0785a67a · May 27, 2026 · 16 filesMessage 50 · ThinInformational 15Details
Commit message · Nick Johnson

Update all changelog formats

* H1 Changelog header
* H2 headers for releases
* Diff compare links for relaeses with git tags

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

This commit only reformats the wording and layout of multiple CHANGELOG.md files. It adds a top-level 'Changelog' heading, converts release headings from H1 to H2, adds an 'Unreleased' section, and appends Markdown link references that point to git tags or comparison URLs. No program code, build scripts, dependencies, or documentation that affects behavior were changed. There is no security relevance.

Security candidateFix docs warningsby Benalleng · 41887fd3 · May 27, 2026 · 2 filesMessage 28 · OpaqueInformational 15Details
Commit message · Benalleng

Fix docs warnings

28/100 · OpaqueMessage clarity
✓ Subject identifies a change! No meaningful explanatory body! Opaque security-relevant change
Why it was queued
authentication path
AI analysis · Informational 15/100

This commit only fixes broken or missing backticks in documentation comments within two example files. It changes how Rustdoc links and formats text, with no effect on actual program behavior or security.

Security candidateci: upgrade cargo-rbmt and fix up breaking changesby Nick Johnson · 1eb6ece5 · May 27, 2026 · 18 filesMessage 85 · StrongInformational 15Details
Commit message · Nick Johnson

ci: upgrade cargo-rbmt and fix up breaking changes

The API files are re-generated since cargo-rbmt now de-dupes the output
making it a bit easier on the eyes. The toolchain workflows were updated
as well to use the explicit commands to read current versions instead of
relying on the eval env vars trick.

85/100 · StrongMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Uses a recognizable type or scope✓ Provides detailed explanatory context
Why it was queued
boot or update path
AI analysis · Informational 15/100

This commit is purely a maintenance update to the project's continuous integration (CI) tooling. It upgrades an internal helper tool called cargo-rbmt and regenerates large API snapshot files because the new version produces cleaner, de-duplicated output. No actual Bitcoin library code was changed, and there is no security relevance.

Security candidateRename and move LegacyPublicKey::to_bytes to serializeby Mitchell Bagot · 62f351b5 · May 27, 2026 · 1 fileMessage 73 · AdequateInformational 18Details
Commit message · Mitchell Bagot

Rename and move LegacyPublicKey::to_bytes to serialize

The to_bytes function on LegacyPublicKey no longer yields a vec, but
instead a SerializedLegacyPublicKey. While the type functions like a
byte slice, the typical pattern for the serialising function's name is
serialize(), as is used on the ecdsa and taproot signatures.

Revert LegacyPublicKey::to_bytes to return Vec<u8> and deprecate.
Introduce serialize function that returns SerializedLegacyPublicKey
alongside other serialising functions.

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

This commit is a routine API cleanup in the rust-bitcoin library. It renames a public key serialization method from `to_bytes` to `serialize`, restores `to_bytes` as a deprecated alias that returns a plain byte vector, and updates internal callers to use the new name. There is no security fix or vulnerability here.

Security candidateRemove top-level serde importsby Mitchell Bagot · 7faf0bff · May 27, 2026 · 1 fileMessage 80 · StrongInformational 15Details
Commit message · Mitchell Bagot

Remove top-level serde imports

The top-level serde trait imports clutter the global namespace of the
key module and force the use of (*self).serialize() to prevent rust
from using the serde trait functions. By using the serde:: prefix on
all uses of serde in the file, the serialize calls can be simplified.

Remove serde imports and add serde:: prefix to all serde types in key.

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

This commit is a straightforward code cleanup in the rust-bitcoin library. It removes top-level imports of serde serialization traits and replaces them with explicit `serde::` prefixes in the key module. There is no functional change to how keys are serialized or deserialized, and no security issue is introduced or fixed.

Security candidateSplit encapsulate module to modules per typeby Mitchell Bagot · cd167603 · May 27, 2026 · 1 fileMessage 68 · AdequateInformational 15Details
Commit message · Mitchell Bagot

Split encapsulate module to modules per type

The encapsulate module is a name copied from units, where module files
hold encapsulate modules with a single type and a limited API surface.
In crypto::key, the encapsulate module has grown to encompass all of
the key types, which makes it unwieldy. It should be broken into
modules per type, like the single-type encapsulate modules in units.

Split encapsulate module into individual modules per type and adjust
re-exports accordingly.

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 straightforward internal code reorganization. It takes a single large module named 'encapsulate' in the cryptographic key code and splits it into several smaller modules, one for each key type. The public types and their behavior remain exactly the same; only the internal file/module structure and re-export paths changed. There is no security fix or vulnerability here.

Security candidateAdjust BIP340 in tapsighash docsby Mitchell Bagot · 43df739f · May 27, 2026 · 1 fileMessage 68 · AdequateInformational 15Details
Commit message · Mitchell Bagot

Adjust BIP340 in tapsighash docs

It is policy in this repo to use 4-digit zero padded numbers for BIPs
in documentation. BIP-340 should thus be BIP-0340 in the tapsighash
signing function docs.

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 only fixes the formatting of a documentation link. It changes 'BIP-340' to 'BIP-0340' and wraps the URL in angle brackets so it renders correctly in Rust's generated documentation. No code behavior was changed, and there is no security impact.

Security candidateReplace pk with key in sighash signby Mitchell Bagot · 1bc56e90 · May 27, 2026 · 1 fileMessage 65 · AdequateInformational 15Details
Commit message · Mitchell Bagot

Replace pk with key in sighash sign

'pk' typically is shorthand for public key, not private key. Instead,
the generic term key would better suit.

65/100 · AdequateMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Provides an explanatory body✓ Names security-relevant behavior explicitly
Why it was queued
secret or key materialcryptography-sensitive path
AI analysis · Informational 15/100

This commit is a simple variable rename from 'pk' to 'key' in two Rust functions because 'pk' is commonly understood to mean public key, while the parameter is actually a private key. There is no change to program logic, no security fix, and no behavior change.

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.

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.

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.

Security candidatehashes: Remove Bytes and LEN from HashEngineby jrakibi · caf9e7b4 · May 21, 2026 · 14 filesMessage 68 · AdequateInformational 18Details
Commit message · jrakibi

hashes: Remove Bytes and LEN from HashEngine

Simplify the API by removing Bytes and LEN from HashEngine.
Callers can still use HashEngine::Hash::LEN and
HashEngine::Hash::Bytes to access those values.

This will automatically solve the inconsistency between
HashEngine and Hash we found for sha512_256 output size.

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

This is a routine code cleanup in the rust-bitcoin hashes library. It removes duplicate ways of asking a hash engine for the output length and byte type, directing callers to use the associated Hash type instead. The commit message explicitly says this fixes an inconsistency discovered for the sha512_256 output size, but the change itself is an API simplification, not a security patch. There is no evidence of a vulnerability being fixed.

Security candidateMove PushBytes and co to primitivesby Mitchell Bagot · 58965872 · May 20, 2026 · 12 filesMessage 68 · AdequateInformational 18Details
Commit message · Mitchell Bagot

Move PushBytes and co to primitives

To simplify the move of Address to the new addresses crate, the
PushBytes type can be moved to primitives first.

Move PushBytes, PushBytesBuf, PushBytesError and PushBytesErrorReport
to primitives.

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

This commit is a routine internal code reorganization. It moves the PushBytes family of types and helpers from the main bitcoin crate into a lower-level primitives crate, and adjusts re-exports and trait implementations accordingly. There is no indication of a security bug being fixed or introduced.

Security candidateFix lint errors in primitives and cryptoby Mitchell Bagot · dd3aaf61 · May 20, 2026 · 2 filesMessage 68 · AdequateInformational 15Details
Commit message · Mitchell Bagot

Fix lint errors in primitives and crypto

With the move of PushBytes and co to primitives, a handful of lint
errors are now thrown in both crypto and primitives.

Fix lint errors in primitives and crypto.

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 is a routine code cleanup commit that fixes compiler lint warnings. It removes an unused import, simplifies how a borrowed reference is obtained, makes a large numeric constant more readable with underscores, and adds a missing semicolon. None of these changes affect program behavior or fix any security issue.

Security candidateMove impl_asref_push_bytes macro to includeby Mitchell Bagot · ff4362be · May 20, 2026 · 6 filesMessage 68 · AdequateInformational 15Details
Commit message · Mitchell Bagot

Move impl_asref_push_bytes macro to include

This macro will be used in multiple crates following the move of
PushBytes to primitives. To reduce code duplication, it should be
moved to the include directory and introduced into each crate as
needed using include!.

Move impl_asref_push_bytes to include/asref_pushbytes.rs and include!
in bitcoin.

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

This commit is a routine code reorganization. It moves a small helper macro that implements conversions for script push bytes from one internal file to a shared include directory, then pulls it back in with no functional changes. There is no security issue here.