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
2054commits · 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 49 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 candidateRemove redundant code on Legacy -> XOnly key Fromby Mitchell Bagot · 5ad31d4c · May 8, 2026 · 1 fileMessage 68 · AdequateInformational 15Details
Commit message · Mitchell Bagot

Remove redundant code on Legacy -> XOnly key From

The From<LegacyPublicKey> for XOnlyPublicKey conversion is a duplicate
of the From<secp256k1::PublicKey> impl, with the addition of a to_inner
call.

Simplify From<LegacyPublicKey> for XOnlyPublicKey by calling to
From<secp256k1::PublicKey> for XOnlyPublicKey.

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 small internal code cleanup in the rust-bitcoin library. It replaces a slightly longer implementation of converting one public key type to another with a shorter one that calls an existing conversion. There is no change in behavior and no security issue.

Security candidateAdd #[inline] to all simple functionsby Mitchell Bagot · 541d078d · May 8, 2026 · 1 fileMessage 68 · AdequateInformational 20Details
Commit message · Mitchell Bagot

Add #[inline] to all simple functions

Functions that either only call into other functions, or perform a
couple of simple checks can be tagged with #[inline] to tell the
compiler to try and inline them to remove the function call overhead.

Add #[inline] to all simple functions in the key module.

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

This commit only adds the #[inline] compiler hint to many small functions in the cryptographic key module. It does not change what any function does, what data it accepts, or how secrets are handled. There is no security bug being fixed or introduced here; it is a routine performance optimization.

Security candidateMove From impls on keysby Mitchell Bagot · 51eb2baf · May 8, 2026 · 1 fileMessage 61 · AdequateInformational 15Details
Commit message · Mitchell Bagot

Move From impls on keys

The From impls should always be placed directly underneath the type
they yield. In the keys module, some are placed under the type they
convert from, and others are arbitrarily located.

Move all From<> impls to be located under the impl block for the type
they convert to.y

61/100 · AdequateMessage clarity
✓ Subject identifies a change✓ 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 pure code reorganization: it moves existing Rust 'From' conversion implementations so they sit directly underneath the type they produce, rather than being scattered near the source type. No logic, behavior, or public API changes are visible in the diff.

Security candidateDrop From<Keypair> for secp256k1::PublicKeyby Mitchell Bagot · d1d70dfa · May 8, 2026 · 1 fileMessage 90 · StrongInformational 16Details
Commit message · Mitchell Bagot

Drop From<Keypair> for secp256k1::PublicKey

Generally, we want to avoid allowing users to trivially convert to secp
types from the bitcoin types. In the case of Keypair, the implicit
conversion to a secp PublicKey is only used in a single test case. It
should instead be removed.

Drop From<Keypair> for secp256k1::PublicKey and adjust
public_key_constructors test accordingly.

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

This commit removes a convenience conversion that let users turn a Bitcoin-style key pair directly into a lower-level secp256k1 public key. The change is defensive: it makes it slightly harder to accidentally mix the library's own key types with raw secp256k1 types, which can help prevent API misuse. There is no direct bug or exploit being fixed.

Security candidateMove XOnlyPublicKey serde to the other serde implsby Mitchell Bagot · 6ed3b35d · May 8, 2026 · 1 fileMessage 50 · ThinInformational 15Details
Commit message · Mitchell Bagot

Move XOnlyPublicKey serde to the other serde impls

50/100 · ThinMessage clarity
✓ Specific, 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 simply moves the code that handles serializing and deserializing XOnlyPublicKey values (when the optional serde feature is enabled) from one location in the file to another location alongside similar implementations. The actual behavior of the code is unchanged; it is a pure code organization or cleanup change with no security relevance.

Security candidateAdd From<Infallible> to all error typesby Mitchell Bagot · 09e0baf5 · May 8, 2026 · 1 fileMessage 68 · AdequateInformational 15Details
Commit message · Mitchell Bagot

Add From<Infallible> to all error types

As has been decided in bitcoin, all error types should have a
From<Infallible> impl to aid in possible usage with generics.

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 adds standard Rust helper code that lets several error types be automatically converted from Rust's Infallible type. Infallible is a type that can never actually exist, so these conversions are safe, cannot be triggered by user input, and have no security impact. It is a routine API ergonomics improvement.

Security candidateMove Keypair Drop impl under Keypair implby Mitchell Bagot · f9867c95 · May 8, 2026 · 1 fileMessage 45 · ThinInformational 15Details
Commit message · Mitchell Bagot

Move Keypair Drop impl under Keypair impl

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 simply moves an existing implementation of the Drop trait for the Keypair type to a different location in the same source file. It does not change what the code does, only where it appears in the file. There is no security impact.

Security candidateReplace TBD in deprecations with 0.1.0by Mitchell Bagot · 46823b51 · May 8, 2026 · 1 fileMessage 45 · ThinInformational 15Details
Commit message · Mitchell Bagot

Replace TBD in deprecations with 0.1.0

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 only changes placeholder version strings ('TBD') in deprecation notices to a concrete version number ('0.1.0'). It does not alter any program logic, cryptographic operations, or security behavior. There is no security impact.

Security candidateRearrange impls and traits for typesby Mitchell Bagot · 3816b5ac · May 8, 2026 · 1 fileMessage 68 · AdequateInformational 15Details
Commit message · Mitchell Bagot

Rearrange impls and traits for types

At the moment, there are a handful of different orderings used for
traits + impl blocks on the types in crypto keys.

Unify trait + impl ordering to impl -> FromStr -> TryFrom -> From ->
LowerHex -> Display -> Debug.

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 pure code cleanup: it reorders where certain trait implementations (like FromStr, From, Display, Debug) appear in the source file so all types follow the same consistent pattern. No code behavior is changed, no security bug is fixed, and no vulnerability is introduced.

Security candidatep2p: change example to use configurable magic paramby yancy · 7ca8724f · May 5, 2026 · 1 fileMessage 65 · AdequateInformational 15Details
Commit message · yancy

p2p: change example to use configurable magic param

The example does not currently work as documented outside of regtest.

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

This is a one-line fix to a code example so it uses a configurable network parameter instead of always using the regtest network. It is not a security fix and does not change any library behavior.

Security candidateskip rustfmt for `software_sha256d_64`by jrakibi · 3e1f256b · May 5, 2026 · 1 fileMessage 35 · OpaqueInformational 15Details
Commit message · jrakibi

skip rustfmt for `software_sha256d_64`

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

This commit adds a single formatting directive (`#[rustfmt::skip]`) to tell Rust's automatic code formatter not to reformat a specific SHA-256 hashing function. It does not change any executable code, logic, or behavior. There is no security impact.

Security candidatehashes: use the optimized scalar in sha256d_64 fallbackby jrakibi · 9ae38ac8 · May 5, 2026 · 1 fileMessage 65 · AdequateInformational 20Details
Commit message · jrakibi

hashes: use the optimized scalar in sha256d_64 fallback

we get up to ~7% speedup with the new optimized scalar

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

This is a small performance improvement in the rust-bitcoin library's SHA256 double-hash code. It replaces a slower fallback code path with a faster, already-existing internal implementation when advanced CPU features are not available. There is no indication of a security bug or vulnerability.

Security candidatehashes: Add scalar SHA256d for 64-byte inputby jrakibi · f3bbb345 · May 5, 2026 · 1 fileMessage 68 · AdequateInformational 16Details
Commit message · jrakibi

hashes: Add scalar SHA256d for 64-byte input

add the three transforms for sha256(sha256(64_bytes)) without any
SIMD intrinsics, as a fallback for platforms without SHA-NI, AVX2,
or SSE4.1 support

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, highly optimized software-only implementation for computing a double SHA-256 hash on exactly 64 bytes of data. It is intended as a fallback for older CPUs that lack hardware-accelerated hashing instructions. There is no indication in the commit that this fixes a security bug; it appears to be a performance or portability improvement.

Security candidatefmt: Apply rustfmt across workspaceby yunusabdul38 · 26fd207d · May 4, 2026 · 8 filesMessage 45 · ThinInformational 15Details
Commit message · yunusabdul38

fmt: Apply rustfmt across workspace

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 purely a code-formatting cleanup. It runs rustfmt across several files, which only changes whitespace, line breaks, and the order of import statements. No program logic, security checks, or behavior were changed.

Security candidatecrypto: use constant-time equality for Poly1305 tagsby Alexey Gradoboev · 56d09067 · May 4, 2026 · 1 fileMessage 96 · StrongModerate 60Details
Commit message · Alexey Gradoboev

crypto: use constant-time equality for Poly1305 tags

Currently, the `decrypt` method uses the standard `==` operator for tag verification, which is vulnerable to timing attacks

### Changes
- Introduced a helper function `constant_time_eq` that iterates through the entire 16-byte tag regardless of where a mismatch occurs as constant-time alternative.

This change ensures that the decryption process is secure against side-channel timing leaks.

Fixes #6122

96/100 · StrongMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context✓ Mentions testing or verification✓ Links an issue, advisory, or supporting reference✓ Names security-relevant behavior explicitly
Why it was queued
explicit security languagedefensive validationconstant-time or timing behavior
AI analysis · Moderate 60/100

This commit fixes a timing attack weakness in the ChaCha20-Poly1305 decryption code. Previously, the code compared the authentication tag using Rust's normal `==` operator, which can stop early when it finds a mismatch. That early-stop behavior can leak information about how much of the tag is correct if an attacker can measure tiny timing differences. The patch replaces it with a constant-time comparison that always scans all 16 bytes, so no timing information about the tag's contents is revealed.

Security candidateAdd with_compressedness to LegacyPublicKeyby Mitchell Bagot · b396e514 · May 4, 2026 · 1 fileMessage 58 · ThinInformational 18Details
Commit message · Mitchell Bagot

Add with_compressedness to LegacyPublicKey

At present, to convert a compressed LegacyPublicKey to an uncompressed
copy, a user must either to use from_secp_uncompressed(key.to_inner())
or roundtrip serialize-deserialize. Neither of these are ideal. To
avoid users touching the secp types directly, we can copy the pattern
used for parity in XOnlyPublicKey's with_parity.

Introduce with_compressedness method on LegacyPublicKey to set
compressedness.

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

This commit adds a small convenience method called `with_compressedness` to a public-key type in the rust-bitcoin library. It lets callers flip whether a Bitcoin public key is stored in compressed or uncompressed form without having to reach into lower-level secp256k1 cryptography types. The change is purely an API usability improvement and does not fix any bug or vulnerability.

Security candidatecrypto: Remove with_serialized from LegacyPublicKeyby Mitchell Bagot · 52f80585 · May 4, 2026 · 1 fileMessage 73 · AdequateInformational 18Details
Commit message · Mitchell Bagot

crypto: Remove with_serialized from LegacyPublicKey

The with_serialized method on LegacyPublicKey has been used for
serialising the legacy public key in an optionally compressed form
without allocating a vec. With the introduction of the
SerialisedLegacyPublicKey type, the to_bytes() method can now trivially
replace this method with a simpler interface.

Replace all uses of with_serialized with to_bytes and remove method
from LegacyPublicKey.

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

This commit is a routine internal cleanup in the rust-bitcoin crypto library. It removes an older helper method named with_serialized from LegacyPublicKey and replaces its uses with a newer, simpler method called to_bytes. There is no indication of a bug fix or security patch in the change itself or the commit message.

Security candidatecrypto: Fix lint errors in crypto::taprootby Mitchell Bagot · d1c8e8de · May 4, 2026 · 1 fileMessage 68 · AdequateInformational 15Details
Commit message · Mitchell Bagot

crypto: Fix lint errors in crypto::taproot

Following the move to crypto, the stricter lint requirements now
trigger various problems with the module that should be fixed.

Fix all lint errors in the crypto::taproot module.

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 only fixes code style and documentation lint warnings in the crypto::taproot module. It adds missing documentation comments and formats an existing doc comment. There are no changes to program logic, security behavior, or cryptographic operations.

Security candidateMove taproot signatures to cryptoby Mitchell Bagot · 59dcc935 · May 4, 2026 · 3 filesMessage 68 · AdequateInformational 15Details
Commit message · Mitchell Bagot

Move taproot signatures to crypto

As part of the move of types to crypto, the taproot signatures should
also be moved to the crypto crate.

Move taproot module to crypto and re-export signatures and errors in
bitcoin.

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 code reorganization: it moves the Taproot signature types from the main `bitcoin` crate into a separate `crypto` crate and re-exports them so existing users keep working. There is no security fix or behavior change visible in the diff.

Security candidatecrypto: Move taproot errors into submoduleby Mitchell Bagot · 952c9dc6 · May 4, 2026 · 1 fileMessage 68 · AdequateInformational 15Details
Commit message · Mitchell Bagot

crypto: Move taproot errors into submodule

Now that the taproot module in crypto is publicly visible, it should
be update to follow the patterns of other crates in the workspace
regarding the use of error submodules.

Move error types to error submodule and re-export.

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 two existing error types (SigFromSliceError and ParseSignatureError) into a new 'error' submodule within the taproot module and re-exports them publicly. There is no change to how signatures are validated, parsed, or what errors are returned. It is purely a structural cleanup to match the project's coding patterns.

Security candidateRemove io dependency from crypto taprootby Mitchell Bagot · b94272e1 · May 4, 2026 · 1 fileMessage 85 · StrongInformational 19Details
Commit message · Mitchell Bagot

Remove io dependency from crypto taproot

The taproot module in bitcoin's crypto holds only the Signature and
SerializedSignature types. In order to retain the lack of io dep in
crypto, the io based methods on these types should be removed, as they
were on the corresponding ecdsa signature types.

Remove Signature::serialize_to_writer and SerializedSignature::write_to
methods.

85/100 · StrongMessage clarity
✓ 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 19/100

This commit removes two helper methods that wrote Taproot signatures to an output stream. It is a routine internal API cleanup to eliminate an unnecessary dependency on the `io` crate inside the crypto taproot module. There is no security vulnerability here; the change simply mirrors a prior cleanup done for ECDSA signature types.

Security candidateUpdate manifest and github yamlby Mitchell Bagot · 140c2af1 · May 3, 2026 · 71 filesMessage 90 · StrongInformational 15Details
Commit message · Mitchell Bagot

Update manifest and github yaml

In order to reduce the diff in the previous patch, the actual changes
generated by the generate-files.sh script should be split into a new
patch.

Run fuzz/generate-files.sh.

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
fuzzing or regression evidencesigning or wallet pathauthentication pathparser or protocol path
AI analysis · Informational 15/100

This commit only adds new fuzz testing targets and updates build/CI configuration to run them. It does not change any production library code, so it cannot introduce a runtime security vulnerability in the released crate. It is a testing infrastructure change.

Security candidatecrypto: Make trivial types no-allocby Mitchell Bagot · ba37ff5f · May 3, 2026 · 3 filesMessage 68 · AdequateInformational 18Details
Commit message · Mitchell Bagot

crypto: Make trivial types no-alloc

Having just moved from bitcoin, the code in crypto is all written
assuming the presence of alloc. In the new crate, it is better if the
alloc feature can be used correctly, and have most of the functionality
enabled even in a no-alloc environment.

Remove alloc feature from the modules and only alloc gate things which
can't trivially be used no-alloc.

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 code reorganization for the rust-bitcoin crypto crate. It makes more modules available when the optional 'alloc' memory allocator feature is disabled, so the crate can be used in constrained environments. There is no indication of a security bug being fixed.

Security candidateMove sighashtype FromStr tests to cryptoby Mitchell Bagot · 5e41c2c5 · May 3, 2026 · 3 filesMessage 78 · AdequateInformational 15Details
Commit message · Mitchell Bagot

Move sighashtype FromStr tests to crypto

The EcdsaSighashType and TapSighashType FromStr tests are currently
located in bitcoin. This means testing regressions to the FromStr impl
requires running a significantly larger test set for no reason. These
should be located alongside the impls themselves in crypto.

Move sighashtype_fromstr_display tests to crypto::sighash.

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

This commit simply moves existing unit tests from one place in the codebase to another. It does not change any production code, behavior, or fix any bug. There is no security impact.

Security candidateMake unrecognized field of SighashTypeParseError an InputStringby Mitchell Bagot · 45c98435 · May 3, 2026 · 3 filesMessage 73 · AdequateInformational 18Details
Commit message · Mitchell Bagot

Make unrecognized field of SighashTypeParseError an InputString

At present, the entire SighashTypeParseError type relies on alloc due
to the presence of the String field "unrecognized". The InputString
in internals is designed to replace such fields and conditionally
enables or disables typical string functionality depending on alloc.

Replace the unrecognized field of SighashTypeParseError with
InputString. Adjust Display impl of SighashTypeParseError accordingly.

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

This commit is a small internal cleanup in the rust-bitcoin library. It changes how an error message stores the unrecognized text a user typed, switching from a standard String to a special no-allocation string wrapper called InputString. The visible effect is only a slight rewording of the error message shown when someone types an invalid sighash type. There is no security vulnerability being fixed here.