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

Security candidateRun the formatterby Jamil Lambert, PhD · 35e8b9ad · Mar 25, 2026 · 6 filesMessage 55 · ThinInformational 15Details
Commit message · Jamil Lambert, PhD

Run the formatter

Done after the changes so that the previous patch diff more clearly
shows the code move.

55/100 · ThinMessage clarity
✓ Subject identifies a change✓ Provides an explanatory body✓ Explains rationale or failure mode
Why it was queued
cryptography-sensitive path
AI analysis · Informational 15/100

This commit is purely a code formatting cleanup. It removes blank lines, reorders some import/module declarations, and collapses a few trivial function bodies onto one line. There are no functional changes to how the software behaves, and no security implications.

Security candidateAdd SHA256 midstate conversion to Midstateby Jamil Lambert, PhD · e3ead07c · Mar 25, 2026 · 3 filesMessage 68 · AdequateInformational 19Details
Commit message · Jamil Lambert, PhD

Add SHA256 midstate conversion to Midstate

C-CONV-SPECIFIC states "Conversions should live with the more specific
of the involved types".

Add SHA256 midstate to engine conversion to the more specific
`Midstate`.

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

This commit simply moves an existing SHA256 midstate-to-engine conversion from one place in the code to another. The actual logic is unchanged; it is a code-organization refactor following a Rust API design guideline. There is no security fix or vulnerability here.

Security candidateChange sign_message::sign to take &PrivateKeyby Mitchell Bagot · d9efc06e · Mar 25, 2026 · 2 filesMessage 90 · StrongInformational 18Details
Commit message · Mitchell Bagot

Change sign_message::sign to take &PrivateKey

The sign_message::sign function in bitcoin currently takes a
secp256k1::SecretKey. In order to move away from using secp types in
the api, this should instead be a PrivateKey. Further, since we hope to
remove Copy from PrivateKey, APIs should be designed to take references
where possible.

Introduce raw_ecdsa_sign_recoverable to PrivateKey.
Change sign_message::sign to take &PrivateKey instead of SecretKey.
Adjust test cases 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 pathsigning or wallet path
AI analysis · Informational 18/100

This commit is a routine API refactor in the rust-bitcoin library. It changes the message-signing function so it accepts a higher-level PrivateKey reference instead of a low-level secp256k1 secret key, and moves the underlying signing logic into a new PrivateKey method. There is no indication this fixes a security bug; it is a design cleanup to hide internal cryptographic types from users and prepare for future API changes.

Security candidateci: upgrade cargo-rbmtby Nick Johnson · 78348b4a · Mar 24, 2026 · 33 filesMessage 78 · AdequateInformational 15Details
Commit message · Nick Johnson

ci: upgrade cargo-rbmt

This version of cargo-rbmt dropped the "with" and "without" feature set
generating keys for the test matrix. Replicating the important sets with
the exact_features key and depending on the random sets for the rest. I
didn't bother to add the "arbitrary" feature to the exact_feature sets
since it doesn't seem critical.

78/100 · AdequateMessage clarity
✓ Subject identifies a change✓ Uses a recognizable type or scope✓ Provides detailed explanatory context✓ Mentions testing or verification✓ Names security-relevant behavior explicitly
Why it was queued
cryptography-sensitive pathboot or update path
AI analysis · Informational 15/100

This commit is a routine maintenance update to the project's automated testing setup. It upgrades an internal tool called cargo-rbmt and moves its configuration from separate files into each crate's Cargo.toml package metadata. It also changes how nightly and stable Rust compiler versions are tracked, storing them in the workspace Cargo.toml instead of separate version files. There are no changes to the actual Bitcoin library code that users depend on, and no security-relevant behavior is modified.

Security candidateMake with_serialized a public function on PublicKeyby Mitchell Bagot · 2c08753a · Mar 24, 2026 · 1 fileMessage 73 · AdequateInformational 16Details
Commit message · Mitchell Bagot

Make with_serialized a public function on PublicKey

The with_serialized function on PublicKey allows for a callback
function to be called with the key serialised in a form based on the
compressedness flag. At present, this is only used internally in the
key module.

Make with_serialized pub and add docs.

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

This commit simply changes an existing internal helper function to be publicly usable and adds documentation and examples. It does not fix a bug, change behavior, or introduce any new security-sensitive logic. The function already existed and behaved the same way; only its visibility changed from private to public.

Security candidateIntroduce roundtrip tests for all key typesby Mitchell Bagot · 65258cd1 · Mar 24, 2026 · 1 fileMessage 90 · StrongInformational 15Details
Commit message · Mitchell Bagot

Introduce roundtrip tests for all key types

In order to make sure that the key types can be converted to/from their
corresponding secp types, add tests that roundtrip from bitcoin ->
secp -> bitcoin for all main key types.

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

This commit only adds new automated tests that check whether Bitcoin-style cryptographic keys can be converted to and from the underlying secp256k1 library's key types. It does not change any production code, fix a bug, or alter behavior. There is no security issue here.

Security candidateAdd to_secret_bytes to PrivateKeyby Mitchell Bagot · 9feba0df · Mar 24, 2026 · 1 fileMessage 58 · ThinInformational 16Details
Commit message · Mitchell Bagot

Add to_secret_bytes to PrivateKey

Private keys have statically-known length of 32 bytes, unlike public
keys. To simplify roundtrips with from_byte_array and secp equivalents,
a function to return the fixed length array should be present.

Introduce to_secret_bytes function to PrivateKey. Replace to_vec range
implementation with to_secret_bytes().to_vec().

58/100 · ThinMessage clarity
✓ Descriptive subject✓ Provides detailed explanatory context
Why it was queued
secret or key materialcryptography-sensitive path
AI analysis · Informational 16/100

This commit adds a new helper method, to_secret_bytes, to the PrivateKey type in the rust-bitcoin library. It returns a private key as a fixed 32-byte array instead of a variable-length vector. The existing to_secret_vec method is rewritten to use the new helper. There is no visible security fix or behavior change; it is a routine API convenience addition.

Security candidateIntroduce serialisation functions for PublicKeyby Mitchell Bagot · de942b87 · Mar 24, 2026 · 2 filesMessage 80 · StrongInformational 19Details
Commit message · Mitchell Bagot

Introduce serialisation functions for PublicKey

Currently, the bitcoin::PublicKey type cannot be serialised in a
controlled manner without first converting to an underlying secp256k1
type. Since we want to avoid users needing secp types, serialisation
should be possible with just the bitcoin wrapper type.

Introduce serialize_compressed and serialize_uncompressed functions
on PublicKey that pass through to the corresponding secp functions.

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

This commit adds two new helper methods, serialize_compressed and serialize_uncompressed, to the bitcoin::PublicKey type. Previously, users had to reach into the underlying secp256k1 library to serialize a public key. The change simply wraps that existing behavior in a more convenient API and updates internal callers to use the new methods. There is no indication of a security bug being fixed.

Security candidatehashes: Add SHA256d dispatch and public APIby jrakibi · 629cfcb7 · Mar 23, 2026 · 2 filesMessage 68 · AdequateInformational 16Details
Commit message · jrakibi

hashes: Add SHA256d dispatch and public API

Add sha256d dispatcher that currently handles 2-way ARM,
with the idea to extend to 4-way, 8-way, and 2-way x86.
we also expose a public API that will be used in merkle
root computation (in a follow up PR)

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 performance-oriented function for computing many double-SHA256 hashes at once, with a special two-at-a-time path for ARM CPUs that support SHA2 hardware instructions. It also exposes that function as a new public API. There is nothing in the diff that fixes a bug, checks bounds incorrectly, or introduces an obvious security flaw; it appears to be a routine optimization and API addition.

Security candidatehashes: interleave two independent hashes for 2-way SHA256dby jrakibi · 0fbfbd14 · Mar 23, 2026 · 1 fileMessage 81 · StrongInformational 18Details
Commit message · jrakibi

hashes: interleave two independent hashes for 2-way SHA256d

ARM SHA256H/H2 instructions take 4 cycles to produce a
result. the next `SHA256H` needs the result of the current
one as input, so the CPU has to wait until it is ready.
(in Transform 2 for eg, 3 out of every 4 cycles are wasted
doing nothing)

we fill those wasted cycles by computing a second independent
hash alongside the first.

See https://developer.arm.com/documentation/PJDOC-466751330-7215/r4p1/
(Section 3.20) for Cortex-A76 instruction timings. The exact
latency may differ on other ARM chips but the concept is the
same

81/100 · StrongMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context✓ Links an issue, advisory, or supporting reference
Why it was queued
cryptography-sensitive path
AI analysis · Informational 18/100

This commit is a performance optimization for SHA256 double hashing on 64-bit ARM processors. It rewrites a single-hash ARM hardware-accelerated routine to compute two independent hashes at the same time, filling otherwise wasted CPU cycles. There is no security bug being fixed and no new attack surface introduced; it is purely a speed improvement.