RB
← All projectsRust Bitcoin

rust-bitcoin

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

BitcoinCryptographic librariesNormal
Repository coverage

2070 commits in the local evidence base

Every captured commit receives deterministic security triage and a separate communication-quality score. Security candidates and broader second-pass signals receive full-patch Ollama analysis.

459security candidates448second-pass queue120AI analyses
194commits · 30 days
405commits · 60 days
1283commits · 180 days
2070commits · 365 days
Backfill bands
Aug 5 → Feb 6787 seen32 candidatesComplete
Feb 6 → Jun 6878 seen53 candidatesComplete
Jun 6 → Jul 6211 seen15 candidatesComplete
Jul 6 → Aug 5184 seen2 candidatesComplete
Commit communication

Does the history explain itself?

Message quality measures whether a commit identifies its scope, purpose, rationale, testing, and supporting references. It does not change the security-severity score.

64/100 average clarity
311Strong · 80–100
1054Adequate · 60–79
555Thin · 40–59
150Opaque · 0–39
20security candidates with opaque commit messaging
Read the scoring rubric →
Developer activity

Who is changing the project?

Public Git author strings; identities are not independently verified.

DeveloperCommitsCandidatesAnalyzedHigh riskMessage avg.
Mitchell Bagot64019253068
Tobin C. Harding4096516063
jrakibi94496068
Nick Johnson189200059
Andrew Poelstra51202075
Jamil Lambert, PhD114181061
Fmt Bot31144045
Trevor Arjeski111110069
Shing Him Ng3174056
Ismail Daif2260050
satsfy (Renato Britto)1765066
Martin Habovstiak2754069
Analysis record

Published AI watches

Last scanned 0 minutes ago

Informational 17 AI analysisMessage 80 · Strong
RB Rust Bitcoinrust-bitcoin BitcoinCryptographic libraries

refactor(bip32): Xpub child tweak api

This commit is a straightforward API refactor in the BIP-32 (Bitcoin key derivation) code. It replaces a function that returned a raw secret key and chain code with one that returns a new structured type called XpubChildTweak. The actual c…

No security-relevant behavioral change observedAPI rename and return-type encapsulation onlyNo new validation, bounds checking, or constant-time guarantees added
37191717by Trevor Arjeski+21−71 file
No security note in commit
Informational 18 AI analysisMessage 85 · Strong
RB Rust Bitcoinrust-bitcoin BitcoinCryptographic libraries

refactor(bip32): rename Xpub and Xpriv derivation methods

This is a routine code cleanup in a Bitcoin library. It renames key-derivation methods on extended public and private keys (Xpub/Xpriv) to clearer names and removes old aliases. There is no security bug being fixed and no new vulnerability…

No security-relevant logic changePure API renaming/refactoringDeprecated method removal may break downstream callers at compile time
f8f053fdby Trevor Arjeski+61−852 files
No security note in commit
Informational 15 AI analysisMessage 45 · Thin
RB Rust Bitcoinrust-bitcoin BitcoinCryptographic libraries

2026-07-05 automated rustfmt nightly

This commit is a routine automated code-formatting run by the rustfmt tool. It only changes whitespace, import order, and line breaks in five files. There are no functional changes, no bug fixes, and no security-related modifications.

673e5ee4by Fmt Bot+12−115 files
No security note in commit
Informational 15 AI analysisMessage 78 · Adequate
RB Rust Bitcoinrust-bitcoin BitcoinCryptographic libraries

Add From/TryFrom for Signature/SerializedSignature

This commit adds standard Rust conversion traits (From/TryFrom) between an ECDSA signature and its serialized byte form. It is a small API-consistency change that mirrors traits already present on the Taproot signature type. There is no in…

No security-relevant keywords in commit title or messageNo changes to cryptographic validation or parsing logicOnly adds convenience trait implementations delegating to existing methods
3cf8c405by Mitchell Bagot+21−01 file
No security note in commit
Informational 20 AI analysisMessage 83 · Strong
RB Rust Bitcoinrust-bitcoin BitcoinCryptographic libraries

Add {Lower,Upper}Hex to ecdsa::Signature

This commit adds new ways to print ECDSA Bitcoin signatures as hexadecimal text (lowercase and uppercase), matching formatting already available for Taproot signatures. It also makes the existing Display implementation reuse the new LowerH…

69540f98by Mitchell Bagot+43−51 file
No security note in commit
Low 26 AI analysisMessage 90 · Strong
RB Rust Bitcoinrust-bitcoin BitcoinCryptographic libraries

Replace Signature Display with call to SerializedSignature

This commit fixes a formatting bug in how Bitcoin ECDSA signatures are printed as text. Previously, the signature was printed in two separate pieces (the DER-encoded signature and the sighash byte), which could mishandle formatting options…

Incorrect format-flag handling in Display implBehavioral inconsistency between Signature::fmt and SerializedSignature::fmtRegression test added for format-string parity
c8ee6361by Mitchell Bagot+18−21 file
No security note in commit
Informational 16 AI analysisMessage 73 · Adequate
RB Rust Bitcoinrust-bitcoin BitcoinCryptographic libraries

Add PartialOrd, Ord to ecdsa::Signature

This commit simply adds standard sorting traits (PartialOrd and Ord) to an ECDSA signature type and its associated sighash type, matching what already exists for similar types. There is no indication this fixes or introduces a security pro…

1e020732by Mitchell Bagot+2−22 files
No security note in commit
Informational 19 AI analysisMessage 73 · Adequate
RB Rust Bitcoinrust-bitcoin BitcoinCryptographic libraries

Remove PrivateKeyExt and make PrivateKey::as_inner private

This commit is a routine API cleanup, not a security fix. It removes a helper trait called PrivateKeyExt and hides a low-level accessor method (as_inner) that exposes the underlying secret key object. The same signing behavior is preserved…

Reduction of public API surface for secret-key materialRemoval of extension trait that exposed raw ECDSA recoverable signingas_inner accessor narrowed from pub to pub(super)
e9ea66a1by Mitchell Bagot+14−344 files
No security note in commit
Informational 18 AI analysisMessage 57 · Thin
RB Rust Bitcoinrust-bitcoin BitcoinCryptographic libraries

refactor: split bip32 xkey parse errors

This commit is a code cleanup: it splits one big error type into several smaller, more specific error types for BIP-32 extended key parsing. It does not change what the code accepts or rejects, only how errors are named and organized. Ther…

55ef86a2by Trevor Arjeski+214−771 file
No security note in commit
Informational 15 AI analysisMessage 45 · Thin
RB Rust Bitcoinrust-bitcoin BitcoinCryptographic libraries

style: reorder bip32 error impls

This commit is a pure code-style change. It reorders the implementation blocks for several error types in a Bitcoin-related Rust library so that the order of traits (From, std::error::Error, Display, helper methods) is consistent. No logic…

78a3ac3fby Trevor Arjeski+38−381 file
No security note in commit
Informational 11 AI analysisMessage 73 · Adequate
RB Rust Bitcoinrust-bitcoin BitcoinCryptographic libraries

Remove Encodable and Decodable impls for crate types

This commit removes old serialization/deserialization trait implementations (called Encodable and Decodable) from many Bitcoin data types in the rust-bitcoin library. It is described by the project as a cleanup step toward replacing the ol…

Large deletion of serialization code (535 lines removed)Removal of consensus encoding traits from core Bitcoin typesRemoval of transaction deserialization tests including extreme-size witness/scriptSig tests
6f136cdfby Mitchell Bagot+8−53512 files
No security note in commit
Low 33 AI analysisMessage 73 · Adequate
RB Rust Bitcoinrust-bitcoin BitcoinCryptographic libraries

Replace uses of bitcoin::consensus with consensus_encoding

This commit swaps out an older Bitcoin data-encoding system for a newer one across six files. It is a routine internal refactoring change. There is no direct evidence in the commit that it fixes a security vulnerability, but any encoding c…

Refactor of consensus-critical serialization code (sighash, taproot leaf hash, BIP-158 filters, consensus validation)Change of compact-size encoder/decoder implementation and error typesRemoval of `bitcoin::consensus` dependency from several modules
22cf8fb6by Mitchell Bagot+38−356 files
No security note in commit
Informational 15 AI analysisMessage 78 · Adequate
RB Rust Bitcoinrust-bitcoin BitcoinCryptographic libraries

Replace uses of consensus in tests

This commit only changes test code and documentation examples in the rust-bitcoin library. It replaces older consensus encoding/decoding helper functions with newer equivalents from a different internal module. There is no change to produc…

171f6661by Mitchell Bagot+81−697 files
No security note in commit
Informational 18 AI analysisMessage 73 · Adequate
RB Rust Bitcoinrust-bitcoin BitcoinCryptographic libraries

Add XOnlyPublicKey::verify

This commit adds a new convenience method, XOnlyPublicKey::verify, that lets users verify Schnorr (taproot) signatures without calling the underlying secp256k1 library directly. It is a straightforward API addition with no obvious security…

New public API surface for signature verificationWraps secp256k1::schnorr::verify without altering verification semanticsNo input parsing, no secret-key handling, no allocator changes
8a5deee2by Mitchell Bagot+28−11 file
No security note in commit
Informational 18 AI analysisMessage 57 · Thin
RB Rust Bitcoinrust-bitcoin BitcoinCryptographic libraries

refactor: split bip32 path parse errors

This commit is a code cleanup (refactor) that splits one combined error type into two separate error types for parsing BIP32 derivation paths. It does not change the actual parsing rules or fix any security bug. It only changes how error m…

22a4cbc6by Trevor Arjeski+68−291 file
No security note in commit
Informational 17 AI analysisMessage 57 · Thin
RB Rust Bitcoinrust-bitcoin BitcoinCryptographic libraries

refactor: split bip32 derivation errors

This commit is a code cleanup in the rust-bitcoin library. It splits one general BIP32 derivation error type into several more specific error types and renames the old one. It does not change how keys are actually derived or add any new se…

No security-relevant logic changePublic API surface change (error types)Deprecation of existing public type alias
f83c5dd2by Trevor Arjeski+93−331 file
No security note in commit
Informational 12 AI analysisMessage 90 · Strong
RB Rust Bitcoinrust-bitcoin BitcoinCryptographic libraries

Add regression test for from_base64 bug

This commit only adds a new regression test. It does not change any production code. The test checks that a function called from_base64 correctly rejects base64 inputs that decode to fewer or more than 65 bytes. Because no actual fix is in…

Regression test references a prior bug in message-signature base64 decodingTest verifies length validation of decoded base64 inputNo production code change in this commit
188f9f30by Mitchell Bagot+23−01 file
No security note in commit
Moderate 68 AI analysisMessage 68 · Adequate
RB Rust Bitcoinrust-bitcoin BitcoinCryptographic libraries

primitives: Simplify and optimize witness decoder

This commit fixes a denial-of-service (DoS) weakness in how the rust-bitcoin library decodes Bitcoin transaction witness data. Previously, an attacker could send only about 10 bytes of data and trick the decoder into reserving 16 MB of mem…

Denial-of-service vector: small input forcing large memory allocationMemory allocation now proportional to bytes actually receivedRemoval of reserve_batch and MAX_VECTOR_ALLOCATE/MIN_VECTOR_ALLOCATE constants
4e780508by jrakibi+32−981 file
Vendor flagged security relevance
Informational 15 AI analysisMessage 78 · Adequate
RB Rust Bitcoinrust-bitcoin BitcoinCryptographic libraries

Move serde_round_trip macro to bip32

This commit is a routine code cleanup: it moves a small test-only helper macro from a shared internal utility crate into the one place it is actually used. There is no change to user-facing behavior, no bug fix, and no security relevance.

3cf7554aby Mitchell Bagot+17−195 files
No security note in commit
Informational 19 AI analysisMessage 78 · Adequate
RB Rust Bitcoinrust-bitcoin BitcoinCryptographic libraries

Remove Secp256k1 variant from taproot SigFromSliceError

This commit removes an unused error category from a Bitcoin cryptography library. It is a cleanup change because the underlying signature-parsing code can no longer fail in the way that error category described. There is no direct evidence…

Public error enum variant removed (API surface reduction)Removal of `From<secp256k1::Error>` conversionNo new input validation, bounds checks, or cryptographic operations added
f3920e7bby Mitchell Bagot+0−81 file
No security note in commit
Repository ledger

Explore captured commits

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

Security candidaterefactor(bip32): Xpub child tweak apiby Trevor Arjeski · 37191717 · Jul 13, 2026 · 1 fileMessage 80 · StrongInformational 17Details
Commit message · Trevor Arjeski

refactor(bip32): Xpub child tweak api

- Replace ckd_pub_tweak with derive_child_tweak returning XpubChildTweak.
- Remove Xpub::ckd_pub_tweak. Users must use Xpub::derive_child_tweak
and XpubChildTweak instead.

80/100 · StrongMessage clarity
✓ 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 17/100

This commit is a straightforward API refactor in the BIP-32 (Bitcoin key derivation) code. It replaces a function that returned a raw secret key and chain code with one that returns a new structured type called XpubChildTweak. The actual cryptographic math and behavior remain the same; only the way callers receive the result has changed. There is no indication this fixes a security bug.

Security candidaterefactor(bip32): rename Xpub and Xpriv derivation methodsby Trevor Arjeski · f8f053fd · Jul 13, 2026 · 2 filesMessage 85 · StrongInformational 18Details
Commit message · Trevor Arjeski

refactor(bip32): rename Xpub and Xpriv derivation methods

- Rename the xpriv and xpub derivation APIs to derive_child and derive_path
- Remove derive_priv, derive_xpriv, derive_pub, derive_xpub, and
ckd_pub. Callers should now use derive_child for single ChildNumber
derivation and derive_path for path derivation.

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

This is a routine code cleanup in a Bitcoin library. It renames key-derivation methods on extended public and private keys (Xpub/Xpriv) to clearer names and removes old aliases. There is no security bug being fixed and no new vulnerability introduced; it is purely a refactoring that may require downstream developers to update their code.

Security candidate2026-07-05 automated rustfmt nightlyby Fmt Bot · 673e5ee4 · Jul 5, 2026 · 5 filesMessage 45 · ThinInformational 15Details
Commit message · Fmt Bot

2026-07-05 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 commit is a routine automated code-formatting run by the rustfmt tool. It only changes whitespace, import order, and line breaks in five files. There are no functional changes, no bug fixes, and no security-related modifications.

Security candidateAdd From/TryFrom for Signature/SerializedSignatureby Mitchell Bagot · 3cf8c405 · Jul 1, 2026 · 1 fileMessage 78 · AdequateInformational 15Details
Commit message · Mitchell Bagot

Add From/TryFrom for Signature/SerializedSignature

These impls exist on the Taproot Signature type, but not on the ECDSA
Signature. For consistency, they should.

Add From and TryFrom impls for conversions between Signature and
SerializedSignature.

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

This commit adds standard Rust conversion traits (From/TryFrom) between an ECDSA signature and its serialized byte form. It is a small API-consistency change that mirrors traits already present on the Taproot signature type. There is no indication it fixes a security bug or introduces a vulnerability.

Security candidateAdd {Lower,Upper}Hex to ecdsa::Signatureby Mitchell Bagot · 69540f98 · Jul 1, 2026 · 1 fileMessage 83 · StrongInformational 20Details
Commit message · Mitchell Bagot

Add {Lower,Upper}Hex to ecdsa::Signature

The Taproot Signature type has Debug, Display, LowerHex and UpperHex
impls. The ECDSA signature, by contrast, only has Debug and Display.
Since the Display impl already displays a lowercase hex format,
explicit lower and uppercase hex formatting should be added and the
Display impl modified to call through to LowerHex.

Add LowerHex and UpperHex impls and modify Display to call through to
LowerHex in ecdsa::Signature.
Add tests to verify new behaviour.

83/100 · StrongMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context✓ Mentions testing or verification✓ Names security-relevant behavior explicitly
Why it was queued
signing boundarycryptography-sensitive path
AI analysis · Informational 20/100

This commit adds new ways to print ECDSA Bitcoin signatures as hexadecimal text (lowercase and uppercase), matching formatting already available for Taproot signatures. It also makes the existing Display implementation reuse the new LowerHex implementation. There is no security fix or behavior change that affects signatures themselves—only how they look when formatted as text.

Security candidateReplace Signature Display with call to SerializedSignatureby Mitchell Bagot · c8ee6361 · Jul 1, 2026 · 1 fileMessage 90 · StrongLow 26Details
Commit message · Mitchell Bagot

Replace Signature Display with call to SerializedSignature

The current ecdsa::Signature Display impl independently calls fmt on
the DER encoded signature, followed by the sighash_type byte. Due to
the handling of format args, this can cause incorrect formatting
handling.

Replace Signature Display impl with a single call-through to Display
on the ecdsa::SerializedSignature.

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

This commit fixes a formatting bug in how Bitcoin ECDSA signatures are printed as text. Previously, the signature was printed in two separate pieces (the DER-encoded signature and the sighash byte), which could mishandle formatting options like width or precision. Now it prints a single pre-serialized object, so formatting behaves consistently. This is a correctness bug, not a cryptographic vulnerability, and there is no evidence it enables code execution or theft of funds.

Security candidateAdd PartialOrd, Ord to ecdsa::Signatureby Mitchell Bagot · 1e020732 · Jul 1, 2026 · 2 filesMessage 73 · AdequateInformational 16Details
Commit message · Mitchell Bagot

Add PartialOrd, Ord to ecdsa::Signature

The Taproot signature has a PartialOrd & Ord derive. So too, do both
the ecdsa and schnorr signatures in secp256k1. Thus, it stands to
reason that the ECDSA signature type should also.

Add PartialOrd and Ord to EcdsaSighashType and ecdsa::Signature.

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
signing boundarycryptography-sensitive path
AI analysis · Informational 16/100

This commit simply adds standard sorting traits (PartialOrd and Ord) to an ECDSA signature type and its associated sighash type, matching what already exists for similar types. There is no indication this fixes or introduces a security problem.

Security candidateRemove PrivateKeyExt and make PrivateKey::as_inner privateby Mitchell Bagot · e9ea66a1 · Jul 1, 2026 · 4 filesMessage 73 · AdequateInformational 19Details
Commit message · Mitchell Bagot

Remove PrivateKeyExt and make PrivateKey::as_inner private

The raw_ecdsa_sign_recoverable function on PrivateKeyExt is intended to
provide a cleaner interface for working with recoverable signatures.
However, this function requires the presence of an extension trait and
blocks the hiding of the PrivateKey::as_inner function. Since
sign_message is considered unofficially deprecated anyway, it's better
to make its API messy in the pursuit of a cleaner key API.

Remove PrivateKeyExt trait and make PrivateKey::as_inner private.

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

This commit is a routine API cleanup, not a security fix. It removes a helper trait called PrivateKeyExt and hides a low-level accessor method (as_inner) that exposes the underlying secret key object. The same signing behavior is preserved inside the crate, just with less public surface area. There is no patch for an active vulnerability.

Security candidaterefactor: split bip32 xkey parse errorsby Trevor Arjeski · 55ef86a2 · Jun 30, 2026 · 1 fileMessage 57 · ThinInformational 18Details
Commit message · Trevor Arjeski

refactor: split bip32 xkey parse errors

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

This commit is a code cleanup: it splits one big error type into several smaller, more specific error types for BIP-32 extended key parsing. It does not change what the code accepts or rejects, only how errors are named and organized. There is no security fix here.

Security candidatestyle: reorder bip32 error implsby Trevor Arjeski · 78a3ac3f · Jun 30, 2026 · 1 fileMessage 45 · ThinInformational 15Details
Commit message · Trevor Arjeski

style: reorder bip32 error impls

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 is a pure code-style change. It reorders the implementation blocks for several error types in a Bitcoin-related Rust library so that the order of traits (From, std::error::Error, Display, helper methods) is consistent. No logic, behavior, or security properties of the code are changed.

Security candidateRemove Encodable and Decodable impls for crate typesby Mitchell Bagot · 6f136cdf · Jun 30, 2026 · 12 filesMessage 73 · AdequateInformational 11Details
Commit message · Mitchell Bagot

Remove Encodable and Decodable impls for crate types

As a first step for removing the old consensus code, the Encodable
and Decodable impls for all crate types can be removed.

Remove Encodable and Decodable impls for all types from bitcoin,
explicitly leaving core/stdlib types untouched.

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

This commit removes old serialization/deserialization trait implementations (called Encodable and Decodable) from many Bitcoin data types in the rust-bitcoin library. It is described by the project as a cleanup step toward replacing the old consensus encoding code. There is no indication in the commit or supplied references that this fixes a security vulnerability; it appears to be a routine internal refactor.

Security candidateReplace uses of bitcoin::consensus with consensus_encodingby Mitchell Bagot · 22cf8fb6 · Jun 29, 2026 · 6 filesMessage 73 · AdequateLow 33Details
Commit message · Mitchell Bagot

Replace uses of bitcoin::consensus with consensus_encoding

Throughout the bitcoin code, there are various uses of the old encoding
traits used to implement functionality. With the introduction of the
new encoding and decoding implementations, all of these can be replaced
with the new implementations to remove the dependency on bitcoin.

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

This commit swaps out an older Bitcoin data-encoding system for a newer one across six files. It is a routine internal refactoring change. There is no direct evidence in the commit that it fixes a security vulnerability, but any encoding change in consensus-critical code carries a small risk that a subtle behavior difference could affect transaction or block validation. The commit message and diff do not describe any security issue or credit a researcher.

Security candidateReplace uses of consensus in testsby Mitchell Bagot · 171f6661 · Jun 29, 2026 · 7 filesMessage 78 · AdequateInformational 15Details
Commit message · Mitchell Bagot

Replace uses of consensus in tests

As with the uses of consensus::encode in the main code, the uses in the
tests and doctest examples can also be replaced.

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 only changes test code and documentation examples in the rust-bitcoin library. It replaces older consensus encoding/decoding helper functions with newer equivalents from a different internal module. There is no change to production code, no bug fix, and no security-relevant behavior change.

Security candidateAdd XOnlyPublicKey::verifyby Mitchell Bagot · 8a5deee2 · Jun 29, 2026 · 1 fileMessage 73 · AdequateInformational 18Details
Commit message · Mitchell Bagot

Add XOnlyPublicKey::verify

At present, users who wish to verify a message with a Schnorr signature
need to use the secp256k1 library directly. Since Legacy/FullPublicKey
already provide verify functions for ECDSA, XOnlyPublicKey should
provide a similar function for Schnorr.

Add XOnlyPublicKey::verify to Schnorr verify messages with a
taproot::Signature.

73/100 · AdequateMessage clarity
✓ Descriptive subject✓ Provides detailed explanatory context✓ Mentions testing or verification✓ Names security-relevant behavior explicitly
Why it was queued
signing boundarycryptography-sensitive path
AI analysis · Informational 18/100

This commit adds a new convenience method, XOnlyPublicKey::verify, that lets users verify Schnorr (taproot) signatures without calling the underlying secp256k1 library directly. It is a straightforward API addition with no obvious security bug; it simply wraps the existing, well-tested secp256k1 Schnorr verification routine.

Security candidaterefactor: split bip32 path parse errorsby Trevor Arjeski · 22a4cbc6 · Jun 23, 2026 · 1 fileMessage 57 · ThinInformational 18Details
Commit message · Trevor Arjeski

refactor: split bip32 path parse errors

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

This commit is a code cleanup (refactor) that splits one combined error type into two separate error types for parsing BIP32 derivation paths. It does not change the actual parsing rules or fix any security bug. It only changes how error messages are categorized internally, making the API clearer for developers. There is no indication this addresses a vulnerability.

Security candidaterefactor: split bip32 derivation errorsby Trevor Arjeski · f83c5dd2 · Jun 23, 2026 · 1 fileMessage 57 · ThinInformational 17Details
Commit message · Trevor Arjeski

refactor: split bip32 derivation errors

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

This commit is a code cleanup in the rust-bitcoin library. It splits one general BIP32 derivation error type into several more specific error types and renames the old one. It does not change how keys are actually derived or add any new security behavior; it only changes how error conditions are named and reported to programmers.

Security candidateAdd regression test for from_base64 bugby Mitchell Bagot · 188f9f30 · Jun 17, 2026 · 1 fileMessage 90 · StrongInformational 12Details
Commit message · Mitchell Bagot

Add regression test for from_base64 bug

To prevent changes to the from_base64 function reintroducing the non-65
byte invalid behaviour, a regression test should be added to catch any
changes.

Introduce regression test for
sign_message::MessageSignature::from_base64.

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
signing boundaryfuzzing or regression evidencesigning or wallet path
AI analysis · Informational 12/100

This commit only adds a new regression test. It does not change any production code. The test checks that a function called from_base64 correctly rejects base64 inputs that decode to fewer or more than 65 bytes. Because no actual fix is included in this commit, the commit itself does not introduce or remove a security vulnerability; it merely adds a test to help catch the bug in the future.

Security candidateprimitives: Simplify and optimize witness decoderby jrakibi · 4e780508 · Jun 10, 2026 · 1 fileMessage 68 · AdequateModerate 68Details
Commit message · jrakibi

primitives: Simplify and optimize witness decoder

The current logic for the index space in witness decoder lets an
attacker allocate a claimed size without giving any input, which opens
the door to many DoS attacks, some of which we already handle.

But the current code still lets an attacker force a 16 MB allocation
with ~10 bytes of input.

The new logic pushes bytes blindly into `content` without building the
index space in `push_bytes()`, then in `end()` walks through `content`
to build the index space.

This simplifies the code, gives an important speedup, and avoids:

- the 16 MB up-front allocation we currently have for the index space
- `reserve_batch()` is no longer needed, along with the
`MIN_` and `MAX_VECTOR_ALLOCATE` constants

- we can drop the `cursor` field from the decoder
- the DoS vector where an attacker sends a few bytes to force a large
allocation, since the buffer only grows by the bytes actually received

68/100 · AdequateMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context
Why it was queued
explicit security language
AI analysis · Moderate 68/100

This commit fixes a denial-of-service (DoS) weakness in how the rust-bitcoin library decodes Bitcoin transaction witness data. Previously, an attacker could send only about 10 bytes of data and trick the decoder into reserving 16 MB of memory up front. The new code only allocates memory for bytes that have actually arrived, making memory-exhaustion attacks much harder. The commit also simplifies the code and removes several helper functions and constants.

Security candidateMove serde_round_trip macro to bip32by Mitchell Bagot · 3cf7554a · Jun 9, 2026 · 5 filesMessage 78 · AdequateInformational 15Details
Commit message · Mitchell Bagot

Move serde_round_trip macro to bip32

The serde_round_trip macro from internals is only used in the bip32
module for testing. Rather than pulling it in from internals, it should
instead be defined in-line in the tests module.

Move serde_round_trip macro to bip32. Add bincode dev dependency to
key_expression.

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

This commit is a routine code cleanup: it moves a small test-only helper macro from a shared internal utility crate into the one place it is actually used. There is no change to user-facing behavior, no bug fix, and no security relevance.

Security candidateRemove Secp256k1 variant from taproot SigFromSliceErrorby Mitchell Bagot · f3920e7b · Jun 8, 2026 · 1 fileMessage 78 · AdequateInformational 19Details
Commit message · Mitchell Bagot

Remove Secp256k1 variant from taproot SigFromSliceError

The Secp256k1 variant of the SigFromSliceError is no longer needed.
The secp parsing of the signature is now infallible, meaning there
cannot be a secp error during parsing of a signature from a slice.

Remove Secp256k1 error variant from taproot::SigFromSliceError.

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

This commit removes an unused error category from a Bitcoin cryptography library. It is a cleanup change because the underlying signature-parsing code can no longer fail in the way that error category described. There is no direct evidence this fixes an active security bug, but it does slightly reduce the library's public error surface, which can help downstream code handle errors more reliably.

Security candidatetaproot: Remove From<&Signature> for SerializedSignatureby Mitchell Bagot · 3af1119f · Jun 7, 2026 · 1 fileMessage 78 · AdequateInformational 17Details
Commit message · Mitchell Bagot

taproot: Remove From<&Signature> for SerializedSignature

The From<&'a Signature> for SerializedSignature impl functions by
derefing the signature and then serializing it. The presence of the
trait implies that SerializedSignature is some sort of reference to
the signature, when it is instead a type owning its own data.

Remove From<&Signature> impl from taproot::SerializedSignature.

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

This commit removes a convenience conversion that let users turn a borrowed Taproot signature into an owned, serialized byte form. The change is API-cleanup: the old trait made it look like the serialized form was just a view of the original signature, when it actually copies/owns the bytes. There is no direct security bug fixed here, but removing the misleading conversion reduces the chance that future callers misunderstand ownership and accidentally clone or mishandle signature data.

Security candidateDestructure error types in source implsby Mitchell Bagot · 8b03bf95 · Jun 1, 2026 · 30 filesMessage 80 · StrongInformational 15Details
Commit message · Mitchell Bagot

Destructure error types in source impls

In the source impls of error types, we previously decided to use
explicit impls to try to prevent changes in the error type from
introducing errors. However, impls that simply return None do not help
to solve this issue.

Add a complete error type destructure to all None source impls to catch
future error shape changes.

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

This commit is a code-quality maintenance change. It adds pattern-matching destructuring inside Rust error-type 'source' methods that previously just returned 'None'. The goal is to make the compiler warn future maintainers if the shape of an error type changes, so they remember to update the source() implementation. It does not change runtime behavior, fix a bug, or close a security vulnerability.

Security candidatebip32: add missing From<Infallible> to errorsby satsfy (Renato Britto) · ab38e614 · May 29, 2026 · 1 fileMessage 68 · AdequateInformational 15Details
Commit message · satsfy (Renato Britto)

bip32: add missing From<Infallible> to errors

Error types impls are not uniform in this module.

Add From<Infallible> for DerivationError and
InvalidBase58PayloadLengthError.

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 commit adds two small Rust trait implementations that allow certain error types to be automatically converted from the 'Infallible' type. 'Infallible' is a type that can never actually exist, so these conversions are purely for making the error types easier to use in generic code. There is no security issue here.

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