BC
← All projectsBitcoin Core

Hardware Wallet Interface

Python library and command-line interface for Bitcoin hardware-wallet communication.

BitcoinHardware integrationSoftware walletsNormal
Repository coverage

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

29security candidates8second-pass queue56AI analyses
2commits · 30 days
58commits · 60 days
73commits · 180 days
78commits · 365 days
Backfill bands
Aug 5 → Feb 63 seen1 candidatesComplete
Feb 6 → Jun 63 seen0 candidatesComplete
Jun 6 → Jul 61 seen0 candidatesComplete
Jul 6 → Aug 522 seen1 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
23Strong · 80–100
28Adequate · 60–79
22Thin · 40–59
6Opaque · 0–39
1security candidate 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.
Sjors Provoost552238066
Ava Chow20714069
Salvatore Ingala202057
andreasgriffin101018
Rohit Yadav101050
Analysis record

Published AI watches

Last scanned 46 minutes ago

Low 29 AI analysisMessage 91 · Strong
BC Bitcoin CoreHardware Wallet Interface BitcoinHardware integrationSoftware wallets

Merge bitcoin-core/HWI#792: Optionally pass BIP388 policy to signtx

This commit adds an optional feature to the HWI tool that lets users pass previously registered Bitcoin wallet policies (BIP388) when signing transactions. It is a feature addition, not a fix for a known vulnerability. The change extends t…

New CLI argument `--registration` is appended to `signtx` and deserialized before being passed to hardware wallet clientsSeveral backends now accept and use `registered_descriptors` during PSBT signingBackends without BIP388 support raise `UnavailableActionError` when registrations are supplied
e63a0af2by Ava Chow+572−19119 files
No security note in commit
Informational 18 AI analysisMessage 81 · Strong
BC Bitcoin CoreHardware Wallet Interface BitcoinHardware integrationSoftware wallets

Merge bitcoin-core/HWI#853: psbt: enable type checking

This is a code-quality and type-safety patch. It adds the psbt.py file to the project's automated type-checking workflow and fixes two small logic issues where a value was assigned to an object field before being validated. The changes mak…

Validation moved before state mutation (defensive coding)Type annotations added to public methodsFile added to CI type-check coverage
390d9f84by Ava Chow+9−62 files
No security note in commit
Informational 18 AI analysisMessage 35 · Opaque
BC Bitcoin CoreHardware Wallet Interface BitcoinHardware integrationSoftware wallets

psbt: enable type checking

This commit turns on automated type checking for one more source file (hwilib/psbt.py) and makes small code changes so the file passes the type checker. The actual code changes move two integer assignments slightly later so validation happ…

Type checking enabled for PSBT moduleValidation ordering tightened for locktime fieldsExplicit type annotations added to PSBT methods
37643bd8by Sjors Provoost+9−62 files
No security note in commit
Informational 15 AI analysisMessage 57 · Thin
BC Bitcoin CoreHardware Wallet Interface BitcoinHardware integrationSoftware wallets

test: extract PSBT helpers

This commit is a simple code cleanup in the test suite. It pulls out two small blocks of test code into reusable helper functions for signing and finalizing PSBTs, and for setting global xpubs in PSBTs. There is no change to production cod…

adc8ccb3by Sjors Provoost+25−81 file
No security note in commit
Informational 15 AI analysisMessage 45 · Thin
BC Bitcoin CoreHardware Wallet Interface BitcoinHardware integrationSoftware wallets

coldcard: extract transaction signing helpers

This commit simply reorganizes the Coldcard hardware wallet signing code in HWI by moving existing logic into two new helper methods. There is no change to what the code actually does; it is a pure refactoring (code cleanup) with no securi…

826a2ac5by Sjors Provoost+76−641 file
No security note in commit
Informational 24 AI analysisMessage 45 · Thin
BC Bitcoin CoreHardware Wallet Interface BitcoinHardware integrationSoftware wallets

psbt: detect keys and signatures by fingerprint

This commit adds two helper methods to the PSBT (Partially Signed Bitcoin Transaction) handling code that let the library check whether a specific hardware wallet's fingerprint appears in a transaction input, and whether that fingerprint h…

Adds fingerprint-based key/signature detection in PSBT input parsingIncludes unit tests covering legacy BIP32, Taproot key path, and Taproot script path casesNo caller or usage of new methods shown in the diff
3cc34937by Sjors Provoost+74−02 files
No security note in commit
Low 31 AI analysisMessage 68 · Adequate
BC Bitcoin CoreHardware Wallet Interface BitcoinHardware integrationSoftware wallets

ledger: support BIP388 policy signing

This commit updates the Ledger hardware wallet support in HWI so that newer Ledger devices can sign Bitcoin transactions using registered BIP388 wallet policies. Previously, any attempt to use registered descriptors with a Ledger was block…

Change removes an explicit error path for registered descriptors, increasing supported functionalityAdds reconstruction of registered wallet policies and propagation of registration HMACs during PSBT signingTouches hardware-wallet signing path where incorrect policy handling could lead to signing unintended transactions
ac80a37bby Sjors Provoost+21−21 file
No security note in commit
Low 25 AI analysisMessage 91 · Strong
BC Bitcoin CoreHardware Wallet Interface BitcoinHardware integrationSoftware wallets

Merge bitcoin-core/HWI#849: coldcard: bump firmware, add edge, display taproot address, restore test_signtx (ex. multisig)

This is a routine feature-and-testing update for the Coldcard hardware wallet support in Bitcoin Core's HWI tool. It adds support for Coldcard's 'Edge' experimental firmware, lets users display single-signature Taproot addresses on Edge, a…

PSBT version downgrade logic moved from per-pass to once-per-signing; intended to preserve v2 when supported and downgrade when notNew firmware version parsing heuristic treats Q/X suffixes and Edge/simulator as PSBTv2 capableTaproot singlesig address display enabled only for Coldcard Edge firmware
8593a755by Ava Chow+220−8819 files
No security note in commit
Low 32 AI analysisMessage 91 · Strong
BC Bitcoin CoreHardware Wallet Interface BitcoinHardware integrationSoftware wallets

Merge bitcoin-core/HWI#842: Add `registerdescriptors` command for registering a descriptor with a device

This commit adds a new command called `registerdescriptor` to the HWI tool, which lets users register Bitcoin output descriptors with supported hardware wallets (Ledger, BitBox02, Jade, Coldcard). It also rewrites how descriptors are parse…

New command registers user-supplied descriptors with hardware walletsHWI explicitly does not validate descriptors before passing them to the device; device errors are propagatedDescriptor parser changed from string-based derivation paths to structured list-of-lists, affecting all descriptor handling
d928dae5by Ava Chow+709−12320 files
No security note in commit
Moderate 60 AI analysisMessage 91 · Strong
BC Bitcoin CoreHardware Wallet Interface BitcoinHardware integrationSoftware wallets

Merge bitcoin-core/HWI#839: psbt: misc fixes and add remaining BIP 174 and BIP 370 test vectors

This commit tightens how the Bitcoin hardware wallet interface library reads PSBT files. It now rejects PSBTv0 files that contain fields only allowed in the newer PSBTv2 format, enforces sensible locktime ranges, and fixes several bugs whe…

Strict PSBT version field validationNew locktime bound enforcementWitness-stripped unsigned tx parsing
695c731bby Ava Chow+122−134 files
No security note in commit
Low 32 AI analysisMessage 68 · Adequate
BC Bitcoin CoreHardware Wallet Interface BitcoinHardware integrationSoftware wallets

bitbox02: support BIP388 policy signing

This commit adds support for signing Bitcoin transactions with registered wallet policies (BIP388) on the BitBox02 hardware wallet. Previously this feature was rejected with an error. The change translates a registered wallet descriptor in…

Removal of an explicit unsupported-action error for BIP388 policy signingNew xpub and fingerprint comparison logic to identify the device's key in a policyNew policy script config construction passed to hardware signing routines
a76f3447by Sjors Provoost+32−11 file
No security note in commit
Informational 22 AI analysisMessage 60 · Adequate
BC Bitcoin CoreHardware Wallet Interface BitcoinHardware integrationSoftware wallets

jade: support BIP388 policy signing

This change removes an error that previously blocked Bitcoin signing for a specific type of wallet policy (BIP388) on the Blockstream Jade hardware wallet. The device now supports these policies, so the software no longer needs to reject t…

Removal of an explicit unsupported-action errorNo new cryptographic operations introducedNo input validation changes observed
db189db5by Sjors Provoost+1−21 file
No security note in commit
Informational 19 AI analysisMessage 68 · Adequate
BC Bitcoin CoreHardware Wallet Interface BitcoinHardware integrationSoftware wallets

coldcard: support BIP388 policy signing

This commit adds support for signing Bitcoin transactions with named wallet policies (BIP388) on newer Coldcard hardware wallets. It is a feature addition, not a fix for a known security flaw. The change removes an error that previously bl…

Feature addition for BIP388 policy signingRemoval of UnavailableActionError guard for registered_descriptorsNew miniscript_name parameter length-bounded to 1-32 ASCII bytes
7e278f48by Sjors Provoost+54−72 files
No security note in commit
Informational 17 AI analysisMessage 68 · Adequate
BC Bitcoin CoreHardware Wallet Interface BitcoinHardware integrationSoftware wallets

signtx: add BIP388 policy support

This commit adds a new command-line option and API parameter for BIP388 registered descriptor policies to the transaction-signing flow. It does not implement actual signing support in any hardware wallet driver; every device implementation…

New API surface added for BIP388 policy registrationAll device implementations explicitly reject BIP388 policy signing with UnavailableActionErrorNo existing signing path is modified; default behavior unchanged
6f44e489by Sjors Provoost+85−1110 files
No security note in commit
Informational 21 AI analysisMessage 91 · Strong
BC Bitcoin CoreHardware Wallet Interface BitcoinHardware integrationSoftware wallets

Merge bitcoin-core/HWI#819: Drop Python 3.9, use 3.10 for dist, bump Ledger

This is a routine maintenance merge for the Bitcoin Core Hardware Wallet Interface (HWI). It drops support for the end-of-life Python 3.9, switches deterministic builds and CI to Python 3.10, updates Ledger test firmware/simulator versions…

Dependency/toolchain version bump (Python 3.9 EOL removal, Python 3.10 adoption)Ledger firmware/app and Speculos simulator version bump in CI/testsTest automation rules updated for new Ledger UI prompts
2daa5916by Ava Chow+124−15629 files
No security note in commit
Informational 15 AI analysisMessage 70 · Adequate
BC Bitcoin CoreHardware Wallet Interface BitcoinHardware integrationSoftware wallets

Drop Ledger deny rule from tests

This commit removes an unused test automation rule that automatically pressed a button when a Ledger hardware wallet simulator showed 'Cancel' or 'Reject' on screen. It only affects test data, not the actual wallet interface code users rel…

0379e278by Sjors Provoost+0−71 file
No security note in commit
Informational 15 AI analysisMessage 57 · Thin
BC Bitcoin CoreHardware Wallet Interface BitcoinHardware integrationSoftware wallets

test: reenable LedgerX tests

This commit only re-enables automated tests for Ledger Nano X hardware wallets. It removes code that was skipping certain tests, but makes no changes to the actual wallet-interaction code that users rely on. There is no security fix or vul…

d2a5874aby Sjors Provoost+0−201 file
No security note in commit
Informational 15 AI analysisMessage 45 · Thin
BC Bitcoin CoreHardware Wallet Interface BitcoinHardware integrationSoftware wallets

Skip archiving hwi-qt on non-x86 platforms

This change adjusts the build script so that the graphical hwi-qt program is only bundled into release archives for 64-bit x86 (Intel/AMD) systems. On other CPU architectures, only the command-line hwi tool is packaged. This is a build/pac…

1b0cbea5by Sjors Provoost+1−11 file
No security note in commit
Informational 15 AI analysisMessage 90 · Strong
BC Bitcoin CoreHardware Wallet Interface BitcoinHardware integrationSoftware wallets

test: increase stdin command timeout

This commit only changes a test timeout from 60 seconds to 120 seconds so that automated tests can complete when a Ledger hardware wallet running newer firmware takes longer to sign a large test transaction. It does not change any producti…

cd8a4317by Sjors Provoost+1−11 file
No security note in commit
Informational 15 AI analysisMessage 45 · Thin
BC Bitcoin CoreHardware Wallet Interface BitcoinHardware integrationSoftware wallets

Bump Speculos and Ledger Bitcoin app

This commit updates the versions of testing tools and Ledger Bitcoin app used in HWI's automated test environment. It does not change the actual HWI wallet-interaction code that users run. The changes are purely to keep CI/test simulations…

976353edby Sjors Provoost+28−95 files
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.

Lower-prioritybuild: generate UI before building distributionsby Sjors Provoost · 8603233a · Aug 4, 2026 · 4 filesMessage 57 · ThinInformational 17Details
Commit message · Sjors Provoost

build: generate UI before building distributions

57/100 · ThinMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Uses a recognizable type or scope! No meaningful explanatory body
AI analysis · Informational 17/100

This commit changes the build scripts for a Bitcoin hardware wallet interface tool. It makes sure graphical user interface (GUI) files are freshly generated before building installable packages, and adds a check that the generated package list stays consistent. There is no direct security bug being fixed here; it is a build-hygiene improvement meant to prevent packaging mistakes that could, in theory, lead to missing or inconsistent files in released software.

AI review queuedjade: Implement register_descriptorby Ava Chow · 8fc30319 · Aug 4, 2026 · 1 fileMessage 35 · OpaqueInformational 18Details
Commit message · Ava Chow

jade: Implement register_descriptor

35/100 · OpaqueMessage clarity
✓ Descriptive subject! No meaningful explanatory body
Why it was queued
second-pass: opaque commit message
AI analysis · Informational 18/100

This commit adds a missing feature to the Blockstream Jade hardware wallet driver in HWI: the ability to register a Bitcoin output descriptor on the device. It is a small, straightforward implementation of an existing interface method. There is no direct evidence in the commit of a security vulnerability, bug, or malicious change. The change appears to be a normal feature addition.

AI review queuedcoldcard: Implement register_descriptorby Ava Chow · 3fc07a6c · Aug 4, 2026 · 1 fileMessage 35 · OpaqueInformational 19Details
Commit message · Ava Chow

coldcard: Implement register_descriptor

35/100 · OpaqueMessage clarity
✓ Descriptive subject! No meaningful explanatory body
Why it was queued
second-pass: opaque commit message
AI analysis · Informational 19/100

This commit adds a new feature to the Coldcard hardware wallet driver in the HWI library: the ability to register a Bitcoin output descriptor on the device. The code sends the descriptor to the Coldcard in chunks, verifies the upload with a SHA-256 checksum, and then asks the device to enroll/register it. There is no obvious security bug in the diff itself; it is a straightforward implementation of a missing driver method. The main security-relevant observation is that the new code path involves device communication and a checksum check, but the diff does not show any vulnerability.

AI review queuedbitbox02: Implement register_descriptorby Ava Chow · 9f91e1a6 · Aug 3, 2026 · 1 fileMessage 35 · OpaqueInformational 20Details
Commit message · Ava Chow

bitbox02: Implement register_descriptor

35/100 · OpaqueMessage clarity
✓ Descriptive subject! No meaningful explanatory body
Why it was queued
second-pass: opaque commit message
AI analysis · Informational 20/100

This commit adds a new feature to the BitBox02 hardware wallet driver in HWI that lets users register a Bitcoin output descriptor (a recipe for wallet addresses) on the device. The change itself is a straightforward feature implementation and does not appear to fix a security bug. There is no evidence in the commit or supplied references that this is a security patch or that it addresses any disclosed vulnerability.

AI review queuedupgrade protobufby andreasgriffin · a7367506 · Aug 1, 2026 · 2 filesMessage 18 · OpaqueLow 25Details
Commit message · andreasgriffin

upgrade protobuf

18/100 · OpaqueMessage clarity
✓ Subject identifies a change! Too few words to establish purpose! No meaningful explanatory body
Why it was queued
second-pass: opaque commit message
AI analysis · Low 25/100

This commit relaxes the version requirement for the 'protobuf' Python library in the project's dependency files. It changes the requirement from 'exactly 4.23.3 or compatible updates' to 'any version 4.23.3 or newer'. This is a routine dependency management change. There is no direct evidence in the commit that it fixes a specific security vulnerability, but keeping dependencies updated can help avoid known bugs or vulnerabilities in older versions.

Lower-priorityudev: Remove group from rulesby Ava Chow · 46398257 · Jul 31, 2026 · 4 filesMessage 60 · AdequateInformational 19Details
Commit message · Ava Chow

udev: Remove group from rules

Since systemd 258, setting the group to a non-system group is no longer
supported.

60/100 · AdequateMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Provides an explanatory body
AI analysis · Informational 19/100

This commit removes the 'plugdev' group assignment from Linux udev rules that grant user access to Bitcoin hardware wallets. The change is a compatibility fix for newer systemd versions (258+), which no longer allow non-system groups in udev rules. It is not a security vulnerability fix; if anything, removing group-based access slightly tightens access control by relying on the 'uaccess' tag instead.

Lower-priorityudev: Add uaccess tag to coldcard rulesby Ava Chow · cf66cb77 · Jul 31, 2026 · 1 fileMessage 60 · AdequateLow 26Details
Commit message · Ava Chow

udev: Add uaccess tag to coldcard rules

Since systemd 258, uaccess is required for normal users to access
devices.

60/100 · AdequateMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Provides an explanatory body
AI analysis · Low 26/100

This commit updates the Linux device rules for the Coldcard hardware wallet so that normal users can access the device on newer Linux systems that use systemd 258 or later. Without this change, the wallet might not be detected or usable by non-admin users after upgrading their operating system. It is a compatibility/usability fix, not a fix for an active security vulnerability.

Lower-prioritytest: disambiguate Ledger warning automationby Sjors Provoost · d27d196d · Jul 31, 2026 · 1 fileMessage 90 · StrongInformational 12Details
Commit message · Sjors Provoost

test: disambiguate Ledger warning automation

Limit the warning rule to the centered title so it does not also click the repeated header on the details screen. This prevents the queued extra click from selecting Back to safety before Continue anyway is confirmed.

90/100 · StrongMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Uses a recognizable type or scope✓ Provides detailed explanatory context✓ Mentions testing or verification
AI analysis · Informational 12/100

This commit fixes a flaky automated test for Ledger hardware wallets. The test script was sometimes clicking the wrong on-screen button because a warning message appears twice on different screens. The fix narrows the click target so it only hits the first warning screen, not a later details screen. It does not change any wallet code that end users rely on for security.

Security candidateledger: have sign_psbt return SignPsbtYieldedObjectby Sjors Provoost · e86440ae · Jul 31, 2026 · 4 filesMessage 65 · AdequateInformational 15Details
Commit message · Sjors Provoost

ledger: have sign_psbt return SignPsbtYieldedObject

Taken from LedgerHQ/app-bitcoin-new at 2.4.1

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

This commit is a straightforward internal code refactor for Ledger hardware wallet support. It changes the data structure returned when signing a Bitcoin transaction from a simple tuple of raw bytes to a more descriptive object that can carry extra context for newer Taproot-style signatures. There is no indication this fixes a security bug or introduces a vulnerability; it is a compatibility and maintainability update taken from Ledger's own upstream code.

Security candidateledger: handle script path signaturesby Sjors Provoost · fc206450 · Jul 31, 2026 · 1 fileMessage 45 · ThinLow 40Details
Commit message · Sjors Provoost

ledger: handle script path signatures

45/100 · ThinMessage clarity
✓ Descriptive subject✓ Names a concrete action or component! No meaningful explanatory body
Why it was queued
signing boundary
AI analysis · Low 40/100

This commit updates the Ledger hardware wallet driver in HWI so it can correctly store Taproot script-path signatures in a PSBT, not just key-path signatures. Previously, the code had a placeholder that always treated any Taproot signature as a key-path signature. For users spending via a Taproot script path (for example, a multisig or timelock branch), the signature would have been placed in the wrong field, likely causing the PSBT to be invalid or incomplete. There is no direct evidence in the commit of an exploitable vulnerability; it appears to be a correctness/functional fix for an unimplemented feature.

Lower-prioritytest: only match Ledger "To" screen on the title rowby Sjors Provoost · d3e4ce7c · Jul 10, 2026 · 2 filesMessage 100 · StrongInformational 15Details
Commit message · Sjors Provoost

test: only match Ledger "To" screen on the title row

The Speculos automation file advances through screens by matching
text fragments. The rule for the "To" screen matched any fragment
starting with "To", including parts of the destination address
shown below that title.

This is what failed in CI run 28680592019 (job 85066632783). The
address mzmauywUy3WF1TX3YxzQMA5PR4zXqJVLTo was split on the device
screen into "mzmauywUy3WF1TX", "3YxzQMA5PR4zXqJVL" and "To". The
latter confused the automation rule for "To", which pressed an
extra right button:

automation: getting actions for "To" (57, 3)
automation: getting actions for "mzmauywUy3WF1TX" (9, 19)
automation: getting actions for "3YxzQMA5PR4zXqJVL" (8, 33)
automation: getting actions for "To" (57, 47)
seproxyhal: applying automation ['button', 2, True]
seproxyhal: applying automation ['button', 2, False]

From there every press landed one screen late; the approval hit
"Reject transaction" and the app returned 0x6985, so signtx
reported a canceled error. "T" and "o" are both valid base58
characters, and bitcoind generates fresh addresses on every run,
which makes this a rare and random failure. Bech32 addresses
cannot trigger it ("o" is not in the bech32 character set).

Limit the "To" rule to the title row (y=3), where address text
never appears. The rule file format does not allow comments, so a
warning about short words in automation rules goes in the README.

Co-authored-by: Claude (Fable 5) <noreply@anthropic.com>

100/100 · StrongMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Uses a recognizable type or scope✓ Provides detailed explanatory context✓ Mentions testing or verification✓ Names security-relevant behavior explicitly
AI analysis · Informational 15/100

This commit fixes a flaky automated test for Ledger hardware wallets. The test script was pressing an extra button because a randomly generated Bitcoin address happened to end in the letters 'To', which matched a screen-title rule. The fix narrows the rule so it only matches the word 'To' at the top of the screen, not inside wrapped address text. There is no security issue in the actual wallet software.

Security candidatepsbt: don't overwrite PSBTv2 tx version and fallback locktimeby Sjors Provoost · ca2caf04 · Jul 10, 2026 · 3 filesMessage 88 · StrongModerate 61Details
Commit message · Sjors Provoost

psbt: don't overwrite PSBTv2 tx version and fallback locktime

self.tx is never None, for PSBTv2 it's an empty placeholder. Its
defaults would overwrite the deserialized tx version and fallback
locktime, invalidating any existing signature. Check the PSBT
version instead, here and in get_unsigned_tx().

Without this fix all BIP 370 valid test vectors, now added, fail
the serialization round-trip.

88/100 · StrongMessage clarity
✓ Specific, 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 boundaryfuzzing or regression evidencesigning or wallet path
AI analysis · Moderate 61/100

This commit fixes a bug in how the HWI library handles a newer Bitcoin transaction format called PSBTv2. Previously, when converting or setting up a PSBTv2 object, the code would accidentally overwrite the transaction's version number and locktime with default values. That could silently invalidate digital signatures that were already created for the transaction. The fix checks the PSBT version before touching those fields, and adds official BIP 370 test vectors to prevent the bug from returning.

AI review queuedtest: add remaining BIP 174 and BIP 370 test vectorsby Sjors Provoost · df8c3f5d · Jul 10, 2026 · 1 fileMessage 87 · StrongInformational 15Details
Commit message · Sjors Provoost

test: add remaining BIP 174 and BIP 370 test vectors

The test data now covers every vector from both BIPs; these all
already pass.

87/100 · StrongMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Uses a recognizable type or scope✓ Provides an explanatory body✓ Mentions testing or verification
Why it was queued
fuzzing or regression evidencesigning or wallet pathsecond-pass: security-sensitive path
AI analysis · Informational 15/100

This commit only adds more test data to a JSON file used by the project's test suite. It adds additional encoded PSBT (Partially Signed Bitcoin Transaction) examples from official BIP test vectors. The commit message explicitly says these new test cases already pass, meaning no code behavior was changed and no bug was fixed.

AI review queuedtest: add BIP 370 timelock determination vectorsby Sjors Provoost · 1ff27e02 · Jul 10, 2026 · 2 filesMessage 82 · StrongInformational 15Details
Commit message · Sjors Provoost

test: add BIP 370 timelock determination vectors

compute_lock_time() was previously untested.

82/100 · StrongMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Uses a recognizable type or scope✓ Provides an explanatory body✓ Mentions testing or verification
Why it was queued
signing or wallet pathsecond-pass: security-sensitive path
AI analysis · Informational 15/100

This commit only adds new test cases for an existing function that determines lock times in PSBTs (Partially Signed Bitcoin Transactions). It does not change any production code, fix a bug, or alter behavior. There is no security issue here.

Security candidatepsbt: assume final sequence when PSBT_IN_SEQUENCE is omittedby Sjors Provoost · f0520e7e · Jul 10, 2026 · 2 filesMessage 75 · AdequateLow 35Details
Commit message · Sjors Provoost

psbt: assume final sequence when PSBT_IN_SEQUENCE is omitted

get_unsigned_tx() asserted that every input has a sequence number,
crashing on the minimal BIP 370 test vector.

75/100 · AdequateMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Provides an explanatory body✓ Mentions testing or verification
Why it was queued
signing boundaryfuzzing or regression evidencesigning or wallet path
AI analysis · Low 35/100

This commit fixes a crash in the PSBT (Partially Signed Bitcoin Transaction) handling code. When a transaction input did not specify a sequence number, the software would crash with an assertion failure instead of assuming the standard default value (0xffffffff). The fix makes the code follow the BIP 370 specification correctly, allowing it to handle minimal PSBTv2 files without crashing.

Security candidatepsbt: set locktime on the transaction, not the PSBTby Sjors Provoost · 2db24a2a · Jul 10, 2026 · 2 filesMessage 73 · AdequateModerate 60Details
Commit message · Sjors Provoost

psbt: set locktime on the transaction, not the PSBT

get_unsigned_tx() assigned the computed locktime to a stray
attribute on the PSBT, so the constructed transaction kept
locktime 0.

73/100 · AdequateMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context
Why it was queued
signing boundarysigning or wallet path
AI analysis · Moderate 60/100

This commit fixes a bug where a transaction's locktime (a time-based or block-height-based restriction on when a Bitcoin transaction can be mined) was being set on the wrong object. Instead of assigning it to the actual transaction, the code accidentally assigned it to the PSBT wrapper object, so the transaction kept a locktime of 0. This could cause transactions with intended time locks to become immediately spendable, potentially breaking security assumptions in wallets or contracts that rely on locktime.

Lower-priorityci: drop unused Python 3.7 Docker fileby Sjors Provoost · 7ac09cf8 · Jul 10, 2026 · 4 filesMessage 72 · AdequateInformational 15Details
Commit message · Sjors Provoost

ci: drop unused Python 3.7 Docker file

Also drops Python 3.6 dataclasses leftover.

72/100 · AdequateMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Uses a recognizable type or scope✓ Provides an explanatory body
AI analysis · Informational 15/100

This commit simply removes an unused Python 3.7 CI Docker file and cleans up a leftover dependency for Python 3.6. There is no security issue here—it's routine housekeeping.

Lower-priorityci: drop cirrus leftoversby Sjors Provoost · 9ded73e0 · Jul 10, 2026 · 5 filesMessage 47 · ThinInformational 15Details
Commit message · Sjors Provoost

ci: drop cirrus leftovers

47/100 · ThinMessage clarity
✓ Descriptive subject✓ Uses a recognizable type or scope! No meaningful explanatory body
AI analysis · Informational 15/100

This commit is a routine cleanup of leftover continuous-integration (CI) files. It removes an old Cirrus CI Dockerfile, updates two comment lines in other Dockerfiles, and swaps the build-status badge in README.md and setup.py from Cirrus CI to GitHub Actions. There is no change to the actual hardware-wallet software, its dependencies, or how it handles private keys or user data.

Lower-priorityFix repo renamings for Ledger appsby Salvatore Ingala · f15d6d9a · Jul 10, 2026 · 3 filesMessage 68 · AdequateInformational 15Details
Commit message · Salvatore Ingala

Fix repo renamings for Ledger apps

The Ledger bitcoin app repos have moved:
- new: from LedgerHQ/app-bitcoin-new to LedgerHQ/app-bitcoin
- legacy: from LedgerHQ/app-bitcoin to LedgerHQ/app-bitcoin-legacy

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

This commit simply updates web links and folder names in HWI's build scripts and documentation to match Ledger's renamed GitHub repositories. It does not change any wallet code, cryptography, or user-facing behavior. There is no security issue here.

Security candidatepsbt: enforce required locktime boundsby Sjors Provoost · 498e85a7 · Jul 10, 2026 · 2 filesMessage 45 · ThinLow 47Details
Commit message · Sjors Provoost

psbt: enforce required locktime bounds

45/100 · ThinMessage clarity
✓ Descriptive subject✓ Names a concrete action or component! No meaningful explanatory body
Why it was queued
signing boundarysigning or wallet path
AI analysis · Low 47/100

This change makes the hardware-wallet interface library stricter when reading PSBT (Partially Signed Bitcoin Transaction) files. It now rejects locktime values that don't follow Bitcoin's rules: a time-based locktime must be at least 500,000,000, and a block-height-based locktime must be greater than 0 and less than 500,000,000. Without these checks, a malformed or malicious PSBT could confuse a hardware wallet about when a transaction is allowed to be mined, potentially leading to signing something the user didn't expect.

Security candidatepsbt: reject PSBTv2 input and output fields in PSBTv0by Sjors Provoost · 2a431b88 · Jul 10, 2026 · 2 filesMessage 65 · AdequateModerate 63Details
Commit message · Sjors Provoost

psbt: reject PSBTv2 input and output fields in PSBTv0

The global PSBTv2 fields were already rejected.

65/100 · AdequateMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Provides an explanatory body
Why it was queued
signing boundarysigning or wallet path
AI analysis · Moderate 63/100

This commit fixes a parsing bug in the way the Hardware Wallet Interface (HWI) reads Bitcoin transaction files called PSBTs. PSBTs come in two versions, v0 and v2, and each version has its own allowed fields. The code was accidentally accepting some v2-only fields inside a v0 PSBT. That could let a specially crafted file change how the transaction is interpreted, potentially tricking a hardware wallet into signing something different from what the user sees. The fix makes the parser reject those v2 fields when the file says it is a v0 PSBT.

Security candidatepsbt: track whether an unsigned tx key was seenby Sjors Provoost · 8a405230 · Jul 10, 2026 · 2 filesMessage 60 · AdequateLow 46Details
Commit message · Sjors Provoost

psbt: track whether an unsigned tx key was seen

A provided unsigned tx with no inputs and outputs is
indistinguishable from the empty placeholder.

60/100 · AdequateMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Provides an explanatory body
Why it was queued
signing boundarysigning or wallet path
AI analysis · Low 46/100

This change fixes a subtle parsing bug in how the wallet software reads PSBT (Partially Signed Bitcoin Transaction) files. Previously, the code could not tell the difference between a PSBT that genuinely contained an unsigned transaction with zero inputs and outputs, and a PSBT where the unsigned transaction was simply missing. This could allow a malformed or intentionally crafted PSBT to be treated as valid when it should have been rejected, potentially leading to incorrect transaction handling or confusion in hardware wallet workflows.

Security candidatepsbt: parse the global unsigned tx without witness databy Sjors Provoost · b34f94a6 · Jul 10, 2026 · 3 filesMessage 73 · AdequateModerate 59Details
Commit message · Sjors Provoost

psbt: parse the global unsigned tx without witness data

The witness-detecting deserializer accepted witness-serialized
unsigned transactions and misread valid ones with no inputs.

73/100 · AdequateMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context
Why it was queued
signing boundarysigning or wallet path
AI analysis · Moderate 59/100

This commit fixes a bug in how the wallet interface reads the unsigned transaction embedded inside a PSBT (Partially Signed Bitcoin Transaction). Previously, the parser tried to auto-detect whether the transaction included witness data, which could misread certain valid transactions that had no inputs. Now it explicitly parses the transaction as a non-witness transaction and rejects any PSBT whose unsigned transaction is not serialized exactly that way. This is a correctness and standards-compliance fix that reduces the chance of a malformed or malicious PSBT being misinterpreted.

Security candidatetest: pin Trezor T Rust nightly to 2025-04-15by Sjors Provoost · eb36bd69 · Jul 3, 2026 · 1 fileMessage 90 · StrongInformational 16Details
Commit message · Sjors Provoost

test: pin Trezor T Rust nightly to 2025-04-15

The rolling nightly toolchain has drifted past what trezor-firmware
core/v2.9.6 supports: recent nightlies reject its
reexport_test_harness_main attribute with error E0658. Pin the nightly
to 2025-04-15, matching the firmware's own shell.nix.

Co-authored-by: Claude (Fable 5) <noreply@anthropic.com>

90/100 · StrongMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Uses a recognizable type or scope✓ Provides detailed explanatory context✓ Mentions testing or verification
Why it was queued
access control
AI analysis · Informational 16/100

This change only adjusts a test setup script to pin a specific Rust compiler version when building the Trezor T hardware wallet emulator for automated tests. It is a build/test infrastructure fix, not a security patch, and does not change any wallet handling, cryptography, or user-facing code.

Lower-priorityAdd model id for Ledger Nano Gen5by Salvatore Ingala · 6dbf8a42 · Apr 27, 2026 · 1 fileMessage 45 · ThinInformational 20Details
Commit message · Salvatore Ingala

Add model id for Ledger Nano Gen5

45/100 · ThinMessage clarity
✓ Descriptive subject✓ Names a concrete action or component! No meaningful explanatory body
AI analysis · Informational 20/100

This commit simply adds a new identifier (0x80) for the upcoming Ledger Nano Gen5 hardware wallet to HWI's list of known Ledger devices. It is a routine device-support addition with no security-relevant behavior change.