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 queue563AI analyses
189commits · 30 days
404commits · 60 days
1283commits · 180 days
2064commits · 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 Bagot640192232068
Tobin C. Harding4096580063
jrakibi944954068
Nick Johnson1892027059
Andrew Poelstra512020075
Jamil Lambert, PhD1141830061
Fmt Bot311416045
Trevor Arjeski111111069
Shing Him Ng31710056
Ismail Daif2267050
satsfy (Renato Britto)1768066
Martin Habovstiak2759069
Analysis record

Published AI watches

Last scanned 48 minutes ago

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

Merge rust-bitcoin/rust-bitcoin#6670: ci: fix labeller permissions

This is a routine GitHub Actions workflow fix. The change gives the automated PR labeler workflow permission to download artifacts and explicitly tells the GitHub CLI which repository to act on. It does not change the Bitcoin library code,…

CI workflow permission fixNo source code changesNo cryptographic or consensus changes
276e0a61by Andrew Poelstra+5−01 file
No security note in commit
Informational 15 AI analysisMessage 91 · Strong
RB Rust Bitcoinrust-bitcoin BitcoinCryptographic libraries

Merge rust-bitcoin/rust-bitcoin#6657: Release tracking PR: `base58ck 0.5.0`

This commit is a routine version bump for the base58ck crate from 0.4.0 to 0.5.0. It only updates version numbers in package manifests, lock files, and adds a changelog entry. There are no code changes and no security relevance.

9deb5de1by Andrew Poelstra+22−168 files
No security note in commit
Informational 21 AI analysisMessage 100 · Strong
RB Rust Bitcoinrust-bitcoin BitcoinCryptographic libraries

Merge rust-bitcoin/rust-bitcoin#6440: base58: Introduce `decode_check_to_array` for alloc-less decoding

This commit is a routine feature addition to the rust-bitcoin base58 crate. It adds a new no-allocator function to decode short base58-check strings into fixed-size byte arrays, and renames the existing error type while keeping a deprecate…

No security-relevant bug fix is described in the commit message or diff.New decoding path uses a fixed 128-byte scratch buffer (`ArrayVec`) and rejects oversized inputs.Checksum verification and invalid-character handling are preserved from the existing alloc implementation.
c5fd1832by Andrew Poelstra+330−775 files
No security note in commit
Informational 15 AI analysisMessage 93 · Strong
RB Rust Bitcoinrust-bitcoin BitcoinCryptographic libraries

Merge rust-bitcoin/rust-bitcoin#6646: hashes: add several methods to `Midstate` and release 1.2.0

This commit is a routine feature release for the bitcoin_hashes crate. It adds new public methods and a constant to the SHA-256 Midstate type so developers can compute SHA-256 midstates in const contexts. There is no indication of a securi…

0f68fcb3by Andrew Poelstra+157−4210 files
No security note in commit
Informational 12 AI analysisMessage 75 · Adequate
RB Rust Bitcoinrust-bitcoin BitcoinCryptographic libraries

ci: fix labeller permissions

This commit adjusts a GitHub Actions workflow that automatically labels pull requests based on CI results. It adds a built-in repository token, tells the artifact download step to merge single-file artifacts, and explicitly sets the reposi…

Workflow-only change with no library code modificationsUses the default GITHUB_TOKEN rather than a custom secretRuns in workflow_run context, which already has elevated repository access by design
715f2bd6by Nick Johnson+5−01 file
No security note in commit
Informational 18 AI analysisMessage 96 · Strong
RB Rust Bitcoinrust-bitcoin BitcoinCryptographic libraries

Merge rust-bitcoin/rust-bitcoin#6662: build(deps): bump actions/checkout from 6.0.2 to 6.0.3

This commit is a routine update to the GitHub Actions checkout tool used by the project's automated workflows. It changes the pinned version from 6.0.2 to 6.0.3 across many workflow files. The newer version fixes minor bugs related to SHA-…

Dependency bump of actions/checkout to a patch releaseUpstream fixes for SHA-256 repository checkout and merge commit regexAll affected workflows already disable persisted credentials
f7d364cdby Andrew Poelstra+29−2915 files
No security note in commit
Informational 15 AI analysisMessage 68 · Adequate
RB Rust Bitcoinrust-bitcoin BitcoinCryptographic libraries

Scrub the transaction encoding logic

This commit is a pure code reorganization: it moves existing transaction encoding and decoding definitions around within a single file so they follow the project's preferred layout. No logic was changed, no security bug was fixed, and no n…

80dcef15by Tobin C. Harding+57−571 file
No security note in commit
Informational 15 AI analysisMessage 58 · Thin
RB Rust Bitcoinrust-bitcoin BitcoinCryptographic libraries

Make the WitnessesEncoder private

This commit simply hides an internal helper type called WitnessesEncoder from public view. It is a routine API-cleanup change with no security relevance visible in the code or commit message.

b37accc3by Tobin C. Harding+54−542 files
No security note in commit
Informational 15 AI analysisMessage 93 · Strong
RB Rust Bitcoinrust-bitcoin BitcoinCryptographic libraries

build(deps): bump actions/checkout from 6.0.2 to 6.0.3

This is a routine automated update by Dependabot that bumps the GitHub Actions 'actions/checkout' dependency from version 6.0.2 to 6.0.3 across all project workflow files. It only changes pinned commit hashes and version comments for the a…

Routine patch-level dependency bumpNo changes to permissions, inputs, or workflow logicpersist-credentials: false already present on all checkout steps
ae935fadby dependabot[bot]+29−2915 files
No security note in commit
Informational 15 AI analysisMessage 60 · Adequate
RB Rust Bitcoinrust-bitcoin BitcoinCryptographic libraries

base58ck: Bump version to 0.5.0

This commit is a routine version bump for the base58ck crate from 0.4.0 to 0.5.0. It only updates version numbers in package manifests, lock files, and adds a changelog entry describing unrelated feature changes. There are no code changes,…

8479b56eby Tobin C. Harding+22−168 files
No security note in commit
Informational 20 AI analysisMessage 58 · Thin
RB Rust Bitcoinrust-bitcoin BitcoinCryptographic libraries

Rename Error to DecodeCheckError

This commit is a routine code cleanup: it renames the `Error` type in the base58 module to the more descriptive `DecodeCheckError`, and adds a deprecated type alias so existing code using `base58::Error` continues to work. There is no chan…

b0eba4c0by Mitchell Bagot+45−395 files
No security note in commit
Informational 15 AI analysisMessage 78 · Adequate
RB Rust Bitcoinrust-bitcoin BitcoinCryptographic libraries

hashes: add sha256::Midstate::SHA256_IV constant

This commit is a routine internal refactoring in the rust-bitcoin SHA-256 hashing code. It exposes the SHA-256 initial value (IV) as a public constant and renames an internal helper function so it can start from any midstate rather than al…

dc21841bby Andrew Poelstra+39−143 files
No security note in commit
Informational 15 AI analysisMessage 50 · Thin
RB Rust Bitcoinrust-bitcoin BitcoinCryptographic libraries

hashes: add several methods to sha256::Midstate for computing them in const contexts

This commit adds new helper methods to the SHA-256 'Midstate' type in the rust-bitcoin hashes library. These helpers let callers compute SHA-256 intermediate states inside 'const' contexts (compile-time constants). It is a routine feature …

7d8f06d2by Andrew Poelstra+80−72 files
No security note in commit
Informational 20 AI analysisMessage 68 · Adequate
RB Rust Bitcoinrust-bitcoin BitcoinCryptographic libraries

units: make Sequence inner field private

This commit makes a single internal number field private in a Rust Bitcoin library type called Sequence. It is an API-cleanup change to follow Rust naming conventions (C-STRUCT-PRIVATE). It does not fix a memory corruption bug, a cryptogra…

No security signal: this is an API-encapsulation refactorNo validation or serialization logic changedNo unsafe code, no cryptographic operations modified
30f280daby satsfy (Renato Britto)+9−96 files
No security note in commit
Informational 17 AI analysisMessage 73 · Adequate
RB Rust Bitcoinrust-bitcoin BitcoinCryptographic libraries

taproot-primitives: Implement encoding traits for TapLeafHash

This commit adds standard data-encoding support for a Bitcoin Taproot hash type (TapLeafHash) so it can be properly serialized and deserialized in PSBT data. There is no indication of a security bug being fixed; it appears to be a missing-…

No security-relevant signal in commit message or diffChange is a feature addition (encoding trait implementations)No bounds-checking, memory-safety, or cryptographic flaws evident in diff
b2ab0896by Mitchell Bagot+59−12 files
No security note in commit
Informational 18 AI analysisMessage 73 · Adequate
RB Rust Bitcoinrust-bitcoin BitcoinCryptographic libraries

Split Address into an extension trait

This commit is a routine code reorganization in the rust-bitcoin library. It moves the `Address::from_script` method out of the main `Address` type into a new 'extension trait' called `AddressExt`. The actual logic of the function is copie…

c900fa8cby Mitchell Bagot+35−263 files
No security note in commit
Informational 15 AI analysisMessage 80 · Strong
RB Rust Bitcoinrust-bitcoin BitcoinCryptographic libraries

ci: update cargo-rbmt ever month instead of week

This commit simply renames a GitHub Actions workflow file and changes its schedule from weekly to monthly. It is a routine CI maintenance change with no security relevance.

778018e1by Nick Johnson+46−461 file
No security note in commit
Informational 18 AI analysisMessage 68 · Adequate
RB Rust Bitcoinrust-bitcoin BitcoinCryptographic libraries

Use generic arguments for functions

This commit is a routine API cleanup: it makes a few Bitcoin merkle-root functions accept a broader range of input types (generic iterators and borrowed transactions) instead of only slices or exact iterator types. There is no security bug…

e887140aby Mitchell Bagot+26−184 files
No security note in commit
Informational 19 AI analysisMessage 68 · Adequate
RB Rust Bitcoinrust-bitcoin BitcoinCryptographic libraries

units: Flatten nested checked_ops methods

This commit is a straightforward code cleanup in the rust-bitcoin library. It replaces deeply nested match blocks with newer, cleaner Rust syntax (let-else statements) inside safe arithmetic helper functions. The actual behavior of the cod…

99f3721dby Abeeujah+53−1274 files
No security note in commit
Informational 15 AI analysisMessage 23 · Opaque
RB Rust Bitcoinrust-bitcoin BitcoinCryptographic libraries

primitives: Remove todo

This commit only changes a code comment. It replaces a developer TODO note with a short explanation that the code is verbose because it implements a state machine. No code behavior, logic, or security properties changed.

e62e553dby Tobin C. Harding+1−11 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 candidatebitcoin: derive `Clone` for `SighashCache`by Vadim Anufriev · 3f0307b6 · Apr 1, 2026 · 1 fileMessage 60 · AdequateInformational 15Details
Commit message · Vadim Anufriev

bitcoin: derive `Clone` for `SighashCache`

Derive `Clone` for `SighashCache` and its internal cache structs.

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

This commit simply adds the ability to duplicate (clone) a helper object called SighashCache that is used to speed up Bitcoin signature-hash calculations. It does not change any existing behavior, fix a bug, or alter security logic. There is no indication this is a security patch.

Security candidateReplace uses of secp XOnlyPublicKey with parity accessby Mitchell Bagot · 31d01001 · Apr 1, 2026 · 2 filesMessage 73 · AdequateInformational 13Details
Commit message · Mitchell Bagot

Replace uses of secp XOnlyPublicKey with parity access

Now that the bitcoin XOnlyPublicKey has parity included, there are some
uses of the secp type that can be replaced by the bitcoin type.

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

This is a small internal cleanup change in the rust-bitcoin library. It swaps some low-level uses of one public-key type for another equivalent type that now carries extra parity information. There is no indication this fixes a security bug or changes behavior visible to users in a risky way.

Security candidateChange Witness::p2wpkh to take bitcoin PublicKeyby Mitchell Bagot · adda3936 · Apr 1, 2026 · 3 filesMessage 68 · AdequateInformational 18Details
Commit message · Mitchell Bagot

Change Witness::p2wpkh to take bitcoin PublicKey

The p2wpkh function on Witness takes a secp public key. This ultimately
causes various other places to need to convert from the bitcoin type
to the secp type needlessly.

Change Witness::p2wpkh to take bitcoin::PublicKey and adjust call sites
accordingly.

68/100 · AdequateMessage clarity
✓ 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 routine internal API cleanup in the rust-bitcoin library. It changes one function so it accepts the project's own public-key type instead of a lower-level secp256k1 public-key type, removing unnecessary conversions at call sites. There is no indication this fixes a security bug or introduces a vulnerability.

Security candidatehashes: Split cfg(all(...)) into stacked attributesby Ismail Daif · 845ba44f · Mar 31, 2026 · 2 filesMessage 50 · ThinInformational 15Details
Commit message · Ismail Daif

hashes: Split cfg(all(...)) into stacked attributes

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 is a purely cosmetic refactoring of Rust conditional-compilation attributes. It splits combined `#[cfg(all(...))]` expressions into two stacked `#[cfg(...)]` attributes, which is a supported Rust syntax and does not change which code gets compiled under which conditions. There is no security relevance.

Security candidatebitcoin: Split cfg(all(...)) into stacked attributesby Ismail Daif · d57e8346 · Mar 31, 2026 · 9 filesMessage 50 · ThinInformational 15Details
Commit message · Ismail Daif

bitcoin: Split cfg(all(...)) into stacked attributes

50/100 · ThinMessage clarity
✓ Specific, 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 code-style refactor. It replaces single-line Rust conditional annotations like #[cfg(all(A, B))] with stacked separate lines like #[cfg(A)] #[cfg(B)]. The behavior is identical; no security issue is introduced or fixed.

Security candidatehashes: Adjust hash newtype doc commentsby Mitchell Bagot · 7064e44d · Mar 31, 2026 · 4 filesMessage 68 · AdequateInformational 15Details
Commit message · Mitchell Bagot

hashes: Adjust hash newtype doc comments

In hashes, a handful of the transparent_newtype invocations for hashes
use doc comments that are missing backticks around names or are
generally unclean. These should be normalised to suit typical style.

Adjust doc comments on sha256t, sha256d, muhash and siphash hash
newtypes.

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 the wording and formatting of documentation comments in four source files. It adds backticks around hash function names like `SHA256d` and `SipHash24` so the generated documentation looks consistent. No code behavior changes.

Security candidateMove transparent_newtype to use include!by Mitchell Bagot · ac8f61f8 · Mar 31, 2026 · 17 filesMessage 68 · AdequateInformational 15Details
Commit message · Mitchell Bagot

Move transparent_newtype to use include!

The transparent_newtype macro from internals is one of many cross-crate
macros which we'd like to remove over time.

Copy transparent_newtype macro to include directory. Replace all uses
of internals::transparent_newtype with include! calls and direct usage
of the macro.

68/100 · AdequateMessage clarity
✓ 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 15/100

This commit is a routine internal refactoring of the rust-bitcoin project. It moves a helper macro called transparent_newtype from one internal crate to a shared include file, then updates all crates to use the shared version. There is no change to user-facing behavior, no bug fix, and no security relevance.

Security candidateRun the formatterby Tobin C. Harding · 8ba4bbfe · Mar 31, 2026 · 1 fileMessage 28 · OpaqueInformational 15Details
Commit message · Tobin C. Harding

Run the formatter

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

This commit is purely a code formatting cleanup. It only reorders an import statement, removes extra blank lines, and reformats an array literal to fit style guidelines. There are no functional changes to the SHA-256 hashing code.

Security candidatehashes: fmt skip a bunch of stuffby Tobin C. Harding · 3be528f5 · Mar 31, 2026 · 1 fileMessage 68 · AdequateInformational 15Details
Commit message · Tobin C. Harding

hashes: fmt skip a bunch of stuff

Add attribute to a bunch of stuff recently introduced in #5888.

68/100 · AdequateMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Provides an explanatory body✓ Links an issue, advisory, or supporting reference
Why it was queued
cryptography-sensitive path
AI analysis · Informational 15/100

This commit only adds `#[rustfmt::skip]` annotations to three places in a SHA-256 cryptographic implementation file. These annotations tell Rust's automatic code formatter to leave those blocks alone. There is no change to program logic, constants, memory handling, or any behavior that could affect security.

Security candidateIntroduce From conversion for PrivateKey -> Keypairby Mitchell Bagot · e8069cef · Mar 30, 2026 · 7 filesMessage 85 · StrongInformational 18Details
Commit message · Mitchell Bagot

Introduce From conversion for PrivateKey -> Keypair

In order to reduce the reliance on as_inner for creating keypairs
from private keys, a method of generating Keypairs from PrivateKey
objects should be introduced.

Introduce from_private_key and to_private_key on Keypair.
Introduce From<PrivateKey> for Keypair type.
Replace uses of from_secret_key and to_secret_key with from_private_key
and to_private_key.

85/100 · StrongMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context✓ Explains rationale or failure mode
Why it was queued
secret or key materialcryptography-sensitive pathsigning or wallet path
AI analysis · Informational 18/100

This commit is a routine API cleanup in the rust-bitcoin library. It adds new helper methods so that developers can create cryptographic keypairs directly from PrivateKey objects instead of reaching into the underlying secp256k1 secret key. The change does not fix a bug, close a security hole, or alter cryptographic behavior; it only makes the public API more convenient and less error-prone.

Security candidateAdd Drop to PrivateKey and Keypairby Mitchell Bagot · aa597803 · Mar 27, 2026 · 1 fileMessage 68 · AdequateLow 27Details
Commit message · Mitchell Bagot

Add Drop to PrivateKey and Keypair

With Copy removed from both PrivateKey and Keypair, we can now
introduce drop on the types. This allows us to call through to
non_secure_erase on the underlying type when these types are dropped.

Introduce Drop implementation for Keypair and PrivateKey.

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

This commit adds automatic memory clearing when Bitcoin private key objects are destroyed. It is a defensive hardening change, not a fix for an active vulnerability. The change reduces the chance that secret key material lingers in memory after use, but the commit itself does not claim to fix any known exploit.

Security candidateRemove Copy from PrivateKeyby Mitchell Bagot · 90ae326a · Mar 27, 2026 · 3 filesMessage 58 · ThinInformational 22Details
Commit message · Mitchell Bagot

Remove Copy from PrivateKey

The PrivateKey type holds secret data, much like the keypair types. As
such, we would like to reduce the likelihood of data copies by
removing Copy. This also necessitates changes to various conversion
functions.

Remove Copy from PrivateKey. Adjust conversion and constructor
functions to take references instead of owned key objects.

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

This commit removes the automatic byte-by-byte copying trait (Copy) from the PrivateKey type in the rust-bitcoin library. The goal is defensive: secret key material is less likely to be silently duplicated in memory, which can reduce the number of places an attacker or memory-dump tool might find leftover private key bytes. It is a hardening change, not a fix for an active exploit or a specific bug.

Security candidateRemove Copy from TweakedKeypair and Keypairby Mitchell Bagot · bbf6e504 · Mar 27, 2026 · 4 filesMessage 68 · AdequateLow 37Details
Commit message · Mitchell Bagot

Remove Copy from TweakedKeypair and Keypair

The keypair types hold secret data. While we can't eliminate unwanted
copies of data by the compiler, we can reduce their likelihood by
eliminating Copy from the type types. According to the linting rules
this also requires some changes to conversion functions.

Remove Copy from Keypair and TweakedKeypair.
Rename to_keypair to into_keypair on Keypair.

68/100 · AdequateMessage clarity
✓ 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 37/100

This commit removes the automatic 'Copy' trait from two Bitcoin key types that hold secret data (Keypair and TweakedKeypair). In Rust, 'Copy' makes it easy for the compiler to silently duplicate values, which can increase the chances of secret key material being copied around in memory unexpectedly. The change also renames a method from 'to_keypair' to 'into_keypair' and adjusts related code. It is a defensive hardening measure, not a fix for a known active exploit.

Security candidateRun the formatterby Jamil Lambert, PhD · 6ed905d0 · Mar 27, 2026 · 3 filesMessage 28 · OpaqueInformational 15Details
Commit message · Jamil Lambert, PhD

Run the formatter

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

This commit only runs an automatic code formatter (rustfmt) across three source files. It changes whitespace, line breaks, and indentation but does not alter any program logic, function behavior, or security properties. There is no security issue here.

Security candidateRun the formatterby Mitchell Bagot · 324bc206 · Mar 27, 2026 · 3 filesMessage 28 · OpaqueInformational 15Details
Commit message · Mitchell Bagot

Run the formatter

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

This commit only runs an automated code formatter (rustfmt) across three files. It changes whitespace, line breaks, and indentation but does not alter any program logic, function behavior, or security-relevant code paths.

Security candidateIntroduce ecdsa signing function for PrivateKeyby Mitchell Bagot · 7a057305 · Mar 27, 2026 · 3 filesMessage 85 · StrongInformational 19Details
Commit message · Mitchell Bagot

Introduce ecdsa signing function for PrivateKey

In psbt, ecdsa signing is required to generate the partial signatures
from the bip32 derivation paths. At present, this requires the user to
call through to secp256k1 to use the ecdsa::sign function with the
inner secp key type. Since we want to avoid the as_inner accessors
entirely, a method for ecdsa signing with a wrapped PrivateKey is
necessary.

Introduce raw_ecdsa_sign function on PrivateKey to sign a message and
return a secp256k1::ecdsa::Signature.
Adjust sign-tx-segwit-v0 example to use signing function on PrivateKey.

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
secret or key materialsigning boundarycryptography-sensitive pathsigning or wallet path
AI analysis · Informational 19/100

This commit adds a convenience method so that a Bitcoin private key object can directly create an ECDSA signature, instead of forcing callers to reach into the underlying secp256k1 library. It also updates internal code and an example to use the new method. There is no obvious security bug in the change itself, but it slightly changes how nonces are generated for signatures: the new helper uses a 'low-R' nonce-grinding scheme, whereas the previous PSBT code used the default signing path. That is generally a compatibility improvement, not a vulnerability, but it is a behavior change worth noting.

Security candidateRemove various assertions from BIP-174 testby Mitchell Bagot · fa7e5aa0 · Mar 27, 2026 · 1 fileMessage 78 · AdequateInformational 15Details
Commit message · Mitchell Bagot

Remove various assertions from BIP-174 test

The BIP-174 test case makes various assertions based on the test
vector from the BIP. Since we want to use low_r signing for PSBTs,
the signatures will be non-deterministic, and will thus not match the
BIP. Since this cascades, this requires the removal of various
assertions from the test case.

Remove test vector assertions that will fail with low_r ecdsa signing.

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

This commit only changes a test file. It removes some test assertions that compared the library's PSBT output against fixed BIP-174 test vectors, because the project is switching to a different default signature style (low_r) that produces different but still valid signatures. No production code is changed, and no security vulnerability is introduced or fixed.

Security candidateRun the formatterby Mitchell Bagot · 026da4c1 · Mar 27, 2026 · 3 filesMessage 28 · OpaqueInformational 15Details
Commit message · Mitchell Bagot

Run the formatter

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

This commit only runs an automatic code formatter (rustfmt) across three source files. It changes whitespace, line breaks, and indentation but does not alter any program logic, function behavior, or security properties. There is no security issue here.

Security candidateAdd links in rustdocsby Jamil Lambert, PhD · 1a881b21 · Mar 26, 2026 · 3 filesMessage 28 · OpaqueInformational 15Details
Commit message · Jamil Lambert, PhD

Add links in rustdocs

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

This commit only updates documentation comments in three Rust source files to add clickable cross-references (rustdoc links). No executable code, logic, or behavior was changed. It cannot affect security.

Security candidateRun the formatterby Mitchell Bagot · c0a48dd7 · Mar 26, 2026 · 1 fileMessage 28 · OpaqueInformational 15Details
Commit message · Mitchell Bagot

Run the formatter

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

This commit is purely a code-formatting change. It rewraps a long `#[deprecated(...)]` attribute in a Rust source file onto multiple lines so it complies with the project's style rules. No logic, behavior, or security properties of the code were changed.

Security candidateAdd force_compressed to PublicKeyby Mitchell Bagot · 5a0eb906 · Mar 26, 2026 · 1 fileMessage 58 · ThinInformational 15Details
Commit message · Mitchell Bagot

Add force_compressed to PublicKey

Currently, users who need to convert from a PublicKey to a
CompressedPublicKey must do so in a fallible manner through a try_from
or try_into call. While this is suitable for most uses, some users may
wish to forcibly convert the key to a compressed key, discarding any
compressedness information.

Add force_compressed to PublicKey to convert to CompressedPublicKey
discarding compressedness.

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

This commit adds a new convenience method called force_compressed to the PublicKey type in the rust-bitcoin library. It lets callers convert a public key into a compressed public key without handling a possible failure case. The change is purely additive (8 new lines, no deletions) and does not alter existing behavior or fix any bug. There is no indication of a security issue in the commit or supplied references.

Security candidateAdjust CompressedPublicKey Display implby Mitchell Bagot · 58a6a507 · Mar 26, 2026 · 1 fileMessage 58 · ThinInformational 15Details
Commit message · Mitchell Bagot

Adjust CompressedPublicKey Display impl

The CompressedPublicKey Display impl uses the DisplayHex type from
hex_conservative to render the key bytes as hex, the same as the
PublicKey type. In hex_conservative, Lower/UpperHex on the DisplayArray
type is implemented by calling through to the Display impl on
DisplayArray. While the compiler may optimise this indirection, simply
using Display instead of LowerHex (the same as in PublicKey's Display)
avoids the ambiguity.

Change CompressedPublicKey Display impl to call into Display impl on
DisplayArray in hex_conservative.

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

This is a tiny internal code cleanup that changes how a compressed Bitcoin public key is printed as text. It swaps one standard way of turning bytes into hex for another equivalent way. There is no security issue here.

Security candidateExpand From impls for CompressedPublicKeyby Mitchell Bagot · 0225de46 · Mar 26, 2026 · 1 fileMessage 80 · StrongInformational 18Details
Commit message · Mitchell Bagot

Expand From impls for CompressedPublicKey

The CompressedPublicKey currently lacks a From conversion for both
Keypair and secp256k1::PublicKey. Both of these conversions are present
on the PublicKey. In order to reduce friction for use of the
CompressedPublicKey, the same conversions should be available.

Introduce From<Keypair> and From<secp256k1::PublicKey> for
CompressedPublicKey.

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

This commit adds convenience conversion methods so that a CompressedPublicKey can be created directly from a secp256k1 public key or a keypair, matching the existing abilities of the regular PublicKey type. It is a routine API usability improvement with no apparent security relevance.

Security candidateRename from_slice to from_bytes on CompressedPublicKeyby Mitchell Bagot · 2cd29892 · Mar 26, 2026 · 2 filesMessage 73 · AdequateInformational 18Details
Commit message · Mitchell Bagot

Rename from_slice to from_bytes on CompressedPublicKey

The from_slice function on CompressedPublicKey is copied from the
PublicKey and takes an arbitrary length byte slice. Since
CompressedPublicKey must only store a compressed public key, and to
allow for a rountrip with to_bytes, the function is better named
from_bytes.

Add from_bytes function that takes [u8; 33] to CompressedPublicKey.
Deprecate from_slice in favour of from_bytes.

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 is a routine API cleanup, not a security fix. The developers renamed a function from from_slice to from_bytes on CompressedPublicKey so the name better matches that it now accepts a fixed 33-byte array. The old from_slice is kept but marked deprecated, and internally it now checks the slice length before delegating. No vulnerability is described or fixed.

Security candidatehashes: Add test for `hash_64_many`by jrakibi · c5954fe4 · Mar 25, 2026 · 1 fileMessage 78 · AdequateInformational 15Details
Commit message · jrakibi

hashes: Add test for `hash_64_many`

test block counts 0 through 32
this allows our test to go through all SIMD distpatch paths we have:

- 1 block: software path
- 2 blocks: 2-way
- 3 blocks: 2-way + last block software
- 4 blocks: 2-way for now, (4-way once we add it)
- 8 blocks: 2-way for now (8-way once we add it)
- ... and so on up to 32

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

This commit only adds a new automated test for an existing function called hash_64_many. It does not change any production code, fix a bug, or alter behavior. There is no security issue here.