LD
← All projectsLedger

Ledger Bitcoin app

Open-source Bitcoin application running on Ledger devices; the device OS is outside this repository.

BitcoinHardware walletsNormal
Repository coverage

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

101security candidates144second-pass queue345AI analyses
40commits · 30 days
95commits · 60 days
233commits · 180 days
370commits · 365 days
Backfill bands
Aug 5 → Feb 670 seen8 candidatesComplete
Feb 6 → Jun 6149 seen21 candidatesComplete
Jun 6 → Jul 623 seen0 candidatesComplete
Jul 6 → Aug 555 seen5 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.

54/100 average clarity
22Strong · 80–100
117Adequate · 60–79
177Thin · 40–59
58Opaque · 0–39
6security 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.
Salvatore Ingala23271205658
Ilya Artemov962696145
Aymeric Robert434063
github-actions[bot]17117046
Mathias BROUSSET16015038
José Luis Landabaso Díaz404067
iartemov-ledger201051
Cerberus Merlin101062
Michael Evans101073
Charles-Edouard de la Vergne101045
Analysis record

Published AI watches

Last scanned 51 minutes ago

Low 37 AI analysisMessage 58 · Thin
LD LedgerLedger Bitcoin app BitcoinHardware wallets

Merge pull request #569 from LedgerHQ/client-fixes

This commit fixes how Ledger's Bitcoin client libraries convert older PSBTv0 transaction data into the newer PSBTv2 format that Ledger hardware wallets expect. The changes correct several field-handling bugs: the transaction locktime is no…

PSBTv0-to-v2 conversion bug fixesMissing input sequence defaulted to 0xffffffff (final sequence)Locktime assigned to transaction object instead of PSBT object
034b9d04by Salvatore Ingala+368−85911 files
No security note in commit
Informational 24 AI analysisMessage 65 · Adequate
LD LedgerLedger Bitcoin app BitcoinHardware wallets

python client: use default value for nSequence if not given

This commit fixes a small bug in the Python helper library that builds unsigned Bitcoin transactions from PSBT data. Previously, if a PSBT did not explicitly include a per-input sequence number, the code would crash with an assertion error…

Behavioral change in transaction serialization helperRemoves an assertion that could cause crashes on valid PSBTs missing optional sequence fieldsAligns implementation with BIP-370 and HWI upstream behavior
2bf0eed6by Salvatore Ingala+3−21 file
No security note in commit
Informational 15 AI analysisMessage 60 · Adequate
LD LedgerLedger Bitcoin app BitcoinHardware wallets

Bump ledger_bitcoin_client version to 0.7.0

This commit only updates a version number from 0.6.2 to 0.7.0 in two Rust package files. It is a routine bookkeeping change because the public interface of the PSBT module changed, requiring a minor version bump under semantic versioning r…

cfb530b9by Salvatore Ingala+2−22 files
No security note in commit
Informational 15 AI analysisMessage 83 · Strong
LD LedgerLedger Bitcoin app BitcoinHardware wallets

js tests: drop a bogus required height locktime of 0 from test PSBTs

This commit only changes hardcoded test data used in JavaScript unit tests. It removes an invalid zero-value locktime field from two PSBT (Partially Signed Bitcoin Transaction) test fixtures so they conform to the BIP-370 standard. No prod…

ec992074by Salvatore Ingala+6−32 files
No security note in commit
Low 48 AI analysisMessage 95 · Strong
LD LedgerLedger Bitcoin app BitcoinHardware wallets

python client: fix three PSBTv2 defects in psbt.py

This commit fixes three bugs in a Python helper that converts modern PSBTv2 transaction data into the older PSBTv0 format used by Ledger hardware wallets. The bugs could silently corrupt the transaction's lock time and version fields durin…

Silent data corruption in transaction serialization (nLockTime, tx_version, fallback_locktime)PSBTv2 to PSBTv0 conversion path affectedPotential for producing an unsigned transaction that does not match the PSBT's declared fields
04ba9e7bby Salvatore Ingala+6−31 file
No security note in commit
Low 35 AI analysisMessage 73 · Adequate
LD LedgerLedger Bitcoin app BitcoinHardware wallets

rust client: build PSBTv2 maps from all pairs, not an enumerated list

This commit refactors how the Ledger Bitcoin app's Rust client converts a PSBT (Partially Signed Bitcoin Transaction) from version 0 to version 2. Previously, the code manually listed every PSBT field it knew how to serialize, which risked…

Refactor of PSBT serialization path used before signing on hardware walletRemoval of hand-maintained field enumeration that could omit or mis-serialize PSBT fieldsAddition of explicit error handling for PSBTs containing pre-existing v2 keys that conflict with v0 transaction data
a16bb101by Salvatore Ingala+344−8484 files
No security note in commit
Informational 15 AI analysisMessage 38 · Opaque
LD LedgerLedger Bitcoin app BitcoinHardware wallets

Version bump to v2.5.1

This commit is a routine version bump from 2.5.0 to 2.5.1 for the Ledger Bitcoin app. It only updates the changelog and Makefile version number. No code changes are present in the diff, and no security fixes or vulnerabilities are describe…

e7618c98by Ilya Artemov+5−42 files
No security note in commit
Low 27 AI analysisMessage 73 · Adequate
LD LedgerLedger Bitcoin app BitcoinHardware wallets

Merge pull request #546 from LedgerHQ/simplify_ast

This commit is a large internal refactoring of the Ledger Bitcoin app's wallet-policy parser. It replaces compact 'relative pointers' with ordinary memory pointers in the abstract syntax tree (AST) used to represent Bitcoin wallet descript…

Large-scale memory-layout refactoring of security-critical parserRemoval of custom relative-pointer abstraction, eliminating a class of offset-calculation bugsIncrease in policy buffer size limits and key-info length limits
efee9c25by Salvatore Ingala+412−55812 files
No security note in commit
Low 37 AI analysisMessage 85 · Strong
LD LedgerLedger Bitcoin app BitcoinHardware wallets

Increase MAX_POLICY_KEY_INFO_LEN to the actual maximum; nits from PR review

This commit fixes a size limit in the Ledger Bitcoin app that was too small. The app uses this limit when registering Bitcoin wallet policies (descriptions of how to spend coins). The old limit underestimated how long a key description can…

Buffer/limit size correction for key origin infoRemoval of unused ledger_assert.h includeComment-only updates to serialized wallet policy length bounds
afd42b6dby Salvatore Ingala+5−61 file
No security note in commit
Low 32 AI analysisMessage 68 · Adequate
LD LedgerLedger Bitcoin app BitcoinHardware wallets

Merge pull request #556 from LedgerHQ/mem_opt

This commit removes an old memory workaround in Ledger's Bitcoin app. Previously, a large data structure used during transaction signing was stored in global memory instead of on the function's stack, because some Ledger devices were thoug…

Memory allocation model changed for high-risk signing pathStack-size build-time guard changed for Nano XGlobal cache removed; signing state now lives on stack
3aa53954by Salvatore Ingala+9−275 files
No security note in commit
Informational 15 AI analysisMessage 73 · Adequate
LD LedgerLedger Bitcoin app BitcoinHardware wallets

Merge pull request #558 from LedgerHQ/embit_private

This commit simply renames an internal Python package from `embit` to `_embit` (a common convention indicating it is private/implementation detail) and updates all import statements accordingly. There is no functional code change and no se…

d438dd03by Salvatore Ingala+7−731 files
No security note in commit
Moderate 61 AI analysisMessage 73 · Adequate
LD LedgerLedger Bitcoin app BitcoinHardware wallets

Merge pull request #559 from LedgerHQ/parse_unhardened

This update fixes a boundary bug in how the Ledger Bitcoin app parses wallet policies that use multi-path key expressions like /<M;N>/*. The app was supposed to reject hardened (high-security) derivation indexes, but it incorrectly allowed…

Boundary condition error: hardened derivation index 0x80000000 accepted as unhardenedWallet policy parser validation bypass in multi-path key expressionsRegression unit test added for hardened boundary rejection
96e999feby Salvatore Ingala+49−298 files
No security note in commit
Informational 15 AI analysisMessage 60 · Adequate
LD LedgerLedger Bitcoin app BitcoinHardware wallets

Label unsigned constants in constants.h

This commit only adds 'U' suffixes to numeric constants in a header file and makes a few matching type adjustments in C source files so the code still compiles cleanly with strict compiler warnings. It is a code-quality cleanup, not a secu…

e1fcefb4by Salvatore Ingala+27−276 files
No security note in commit
Low 25 AI analysisMessage 45 · Thin
LD LedgerLedger Bitcoin app BitcoinHardware wallets

Pin @bitcoinerlab/descriptors to v3.1.7

This commit changes a JavaScript package dependency from allowing any compatible 3.x version of @bitcoinerlab/descriptors to a fixed, exact version (3.1.7). Pinning a dependency is often done to prevent unexpected future changes, but the c…

Dependency version pinningNo explicit security claim in commit messageNo code-level security fix visible in diff
6262d104by Salvatore Ingala+101−122 files
No security note in commit
Moderate 60 AI analysisMessage 73 · Adequate
LD LedgerLedger Bitcoin app BitcoinHardware wallets

Reject 0x80000000 as an unhardened step in wallet policy parsing

This commit fixes a boundary-check bug in how the Ledger Bitcoin app parses wallet policies (BIP-388). The app was supposed to reject any hardened derivation step in a specific range expression, but it allowed the value 2147483648 (0x80000…

Off-by-one boundary check in BIP-388 wallet policy parsingForbidden hardened derivation index accepted as unhardenedPotential failure or incorrect behavior in address derivation and signing
44f98a0eby Salvatore Ingala+2−21 file
Vendor flagged security relevance
Low 47 AI analysisMessage 60 · Adequate
LD LedgerLedger Bitcoin app BitcoinHardware wallets

Add regression test for unhardened derivation step parsing

This commit only adds a new regression test to the Bitcoin app's test suite. The test checks that wallet policy key expressions reject a specific boundary value (2147483648, the first 'hardened' child index) where only 'unhardened' values …

Regression test for hardened/unhardened derivation index boundary parsingCommit message states older version accepted 0x80000000 as unhardenedNo production code change in this commit
ce2c25c6by Salvatore Ingala+20−01 file
No security note in commit
Informational 15 AI analysisMessage 65 · Adequate
LD LedgerLedger Bitcoin app BitcoinHardware wallets

Mark vendored embit clone 'private' in python client

This commit simply renames a vendored (internally bundled) copy of the 'embit' library inside the Python client from `embit` to `_embit`. The leading underscore is a Python convention meaning 'private/internal use only.' No code behavior c…

141e88f2by Salvatore Ingala+7−731 files
No security note in commit
Low 33 AI analysisMessage 73 · Adequate
LD LedgerLedger Bitcoin app BitcoinHardware wallets

Delete the hash context before return in compute_rand_i_j

This commit adds a memory wipe of a cryptographic hash context after it is used to derive a secret random value in the Ledger Bitcoin app's MuSig multi-signature code. The change is described by the developer as a 'defense-in-depth' measur…

explicit_bzero added to clear sensitive cryptographic contextMuSig signing randomness treated as sensitive after partial signatures are knownDefense-in-depth memory hygiene patch
121a18ceby Salvatore Ingala+3−01 file
Vendor flagged security relevance
Moderate 67 AI analysisMessage 65 · Adequate
LD LedgerLedger Bitcoin app BitcoinHardware wallets

Harden count_distinct_keys_info to correctly count the used keys

This commit fixes a bug in Ledger's Bitcoin app that could let a wallet policy slip through registration even when it contained unused or out-of-range public keys. The old code simply looked at the highest key index referenced in the walle…

Logic flaw in wallet policy validationPotential bypass of internal-key ownership check via unused key slotsBounds checking added for key indices
d94c51a2by Salvatore Ingala+52−124 files
Vendor flagged security relevance
Low 44 AI analysisMessage 73 · Adequate
LD LedgerLedger Bitcoin app BitcoinHardware wallets

Reject registering wallet policies with pubkeys not on the curve

This commit adds an early safety check in the Ledger Bitcoin app. Before registering a new wallet policy, the app now verifies that each public key is a valid point on the Bitcoin elliptic curve. Previously, an invalid public key would onl…

Input validation added for cryptographic public key pointsInvalid curve points now rejected at wallet registration time rather than deferred to address derivationUse of standard status word SW_INCORRECT_DATA for malformed input
d0c47c7aby Salvatore Ingala+9−01 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 candidatePropagate crypto_tr_lift_x errors in cpointby Salvatore Ingala · 18647877 · Aug 4, 2026 · 2 filesMessage 45 · ThinModerate 59Details
Commit message · Salvatore Ingala

Propagate crypto_tr_lift_x errors in cpoint

45/100 · ThinMessage clarity
✓ Descriptive subject✓ Names a concrete action or component! No meaningful explanatory body
Why it was queued
cryptography-sensitive path
AI analysis · Moderate 59/100

This commit fixes a small but meaningful bug in the Ledger Bitcoin app's code that handles advanced multi-signature (MuSig) operations. A function called crypto_tr_lift_x can fail when given an invalid x-coordinate that does not correspond to any real point on the Bitcoin elliptic curve. Previously, the cpoint function ignored that failure and kept using the resulting output as if it were valid. The patch now checks the return value, prints an error message, and returns an error code instead of continuing with potentially bad data. In a hardware wallet, using invalid curve points could in theory lead to incorrect signature calculations or unexpected behavior, though the practical exploit path is not fully clear from the diff alone.

AI review queuedMerge pull request #539 from LedgerHQ/fix-stack-exhaustionby Salvatore Ingala · 1621b7fa · Aug 4, 2026 · 7 filesMessage 58 · ThinHigh 72Details
Commit message · Salvatore Ingala

Merge pull request #539 from LedgerHQ/fix-stack-exhaustion

Fix stack exhaustion

58/100 · ThinMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Links an issue, advisory, or supporting reference! No meaningful explanatory body
Why it was queued
signing or wallet pathmerge-commit duplicate discountsecond-pass: security-sensitive path
AI analysis · High 72/100

This update fixes a stack-exhaustion weakness in Ledger's Bitcoin app. A malicious or unusually crafted wallet policy (the text string that describes how coins can be spent) could make the app recurse so deeply that it runs out of call stack and crashes. The patch adds depth limits during parsing, reduces large on-stack buffers, and moves big buffers out of recursive functions so the app rejects oversized policies safely instead of crashing.

AI review queuedAdd functional tests for the policy depth limitsby Salvatore Ingala · a81554f8 · Aug 4, 2026 · 1 fileMessage 55 · ThinLow 36Details
Commit message · Salvatore Ingala

Add functional tests for the policy depth limits

55/100 · ThinMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Mentions testing or verification! No meaningful explanatory body
Why it was queued
signing or wallet pathsecond-pass: security-sensitive path
AI analysis · Low 36/100

This commit adds automated tests to the Ledger Bitcoin app to check that very deep or heavily nested wallet policies are rejected safely. The tests confirm that an over-deep policy returns an error instead of freezing or crashing the device. The commit itself only adds tests; it does not change the app's actual handling code, so it is a defensive test addition rather than a fix.

AI review queuedLowers MAX_N_IN_THRESH to 24by Salvatore Ingala · 97ad772a · Aug 4, 2026 · 3 filesMessage 70 · AdequateLow 43Details
Commit message · Salvatore Ingala

Lowers MAX_N_IN_THRESH to 24

It is extremely unlikely to be hit in practice, and has a large memory
impact because of the dynamic programming tables of compute_thresh_ops()
and compute_thresh_stacksize()

The dynamic programming tables of compute_thresh_ops() and
compute_thresh_stacksize() are sized for MAX_N_IN_THRESH, causing them
to contribute a substantial stack usage, especially with nested
thresh fragments.

70/100 · AdequateMessage clarity
✓ Descriptive subject✓ Provides detailed explanatory context✓ Explains rationale or failure mode
Why it was queued
signing or wallet pathsecond-pass: security-sensitive path
AI analysis · Low 43/100

This commit reduces a hard-coded limit in Ledger's Bitcoin app on how many branches a 'thresh' miniscript operator can have, from 128 down to 24. The change is framed as a memory-usage improvement, not a security fix. It also adds a test to make sure policies exceeding the new limit are rejected rather than analyzed with an undersized table. There is no direct evidence in the commit or supplied references that this was a disclosed vulnerability or that an exploit exists.

AI review queuedCount miniscript wrappers in the parser's recursion depth limitby Salvatore Ingala · ed7cd029 · Aug 4, 2026 · 3 filesMessage 73 · AdequateHigh 72Details
Commit message · Salvatore Ingala

Count miniscript wrappers in the parser's recursion depth limit

parse_script bounds the depth of the parsed policy with
MAX_PARSE_SCRIPT_RECURSION_DEPTH, but the miniscript wrappers were
not charged to that budget; this can cause stack exhaustion in other
functions that process the parsed AST recursively.

73/100 · AdequateMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context
Why it was queued
signing or wallet pathsecond-pass: security-sensitive path
AI analysis · High 72/100

This commit fixes a bug in the Ledger Bitcoin app's wallet-policy parser. Miniscript 'wrappers' (short letters like 'n' that modify a policy) were not counted toward the parser's recursion-depth safety limit. A crafted wallet descriptor with a long chain of wrappers could create an extremely deep policy tree, causing later recursive functions to exhaust the device's limited stack and crash. The patch now charges each wrapper against the same depth budget as nested expressions, and adds tests proving the boundary works.

Lower-priorityDelete MAX_POLICY_DEPTH; rather, align with MAX_PARSE_SCRIPT_RECURSION_DEPTH from the parsing stageby Salvatore Ingala · bb5386b0 · Aug 4, 2026 · 1 fileMessage 50 · ThinLow 31Details
Commit message · Salvatore Ingala

Delete MAX_POLICY_DEPTH; rather, align with MAX_PARSE_SCRIPT_RECURSION_DEPTH from the parsing stage

50/100 · ThinMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component! No meaningful explanatory body
AI analysis · Low 31/100

This commit changes how deeply nested Bitcoin wallet policies can be when processed by a Ledger hardware wallet app. It removes a separate, smaller limit (10 levels) and instead uses the same deeper limit already applied during an earlier parsing stage. The change is likely a hardening or consistency fix rather than an obvious exploit, but it could affect whether very deep policies are accepted or rejected.

AI review queuedLimit the amount of nesting for `thresh` fragments to 4by Salvatore Ingala · d4e23574 · Aug 4, 2026 · 3 filesMessage 73 · AdequateModerate 59Details
Commit message · Salvatore Ingala

Limit the amount of nesting for `thresh` fragments to 4

compute_thresh_ops and compute_thresh_stacksize each need two arrays of
MAX_N_IN_THRESH + 2 counters. Since they were inlined by the compiler,
they bloat the size of the stack frame of
compute_miniscript_policy_ext_info, which vastly reduces the stack usage
on usual policies.

Yet, stack usage would remain very large on policies that recursively
nest 'thresh' fragments.
Therefore, we add a limit of 4 nested thresh expressions, by keeping
track in the parsing context.

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

This commit fixes a stack-overflow risk in Ledger's Bitcoin app when parsing wallet policies that deeply nest 'thresh' miniscript fragments. It limits nesting to four levels and prevents two helper functions from being inlined so their large local arrays don't multiply across every recursive call. Without the fix, a crafted policy could exhaust the device's limited stack and crash or potentially corrupt memory.

AI review queuedMove the wallet confirmation stage out of the handler's frameby Salvatore Ingala · ff2a7c7a · Aug 4, 2026 · 1 fileMessage 73 · AdequateLow 27Details
Commit message · Salvatore Ingala

Move the wallet confirmation stage out of the handler's frame

By not inlining the called functions, the memory occupation can be
substantially improved, as a lot of the data used during validation
are no longer needed during rendering and UI.

73/100 · AdequateMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context
Why it was queued
signing or wallet pathsecond-pass: security-sensitive path
AI analysis · Low 27/100

This commit refactors the Ledger Bitcoin app's wallet registration code so that the user-confirmation step runs in a separate function that the compiler is told not to inline. The stated goal is to reduce peak stack memory use by freeing large validation buffers before the UI rendering phase. The change itself is a defensive hardening/optimization patch; there is no direct evidence in the commit that it fixes an exploitable vulnerability.

Lower-priorityReduce the stack frame of key_orderings_countby Salvatore Ingala · 2e39aa2a · Aug 4, 2026 · 1 fileMessage 68 · AdequateLow 41Details
Commit message · Salvatore Ingala

Reduce the stack frame of key_orderings_count

The memory occupation of key_orderings_count was quadratic in
CT_MAX_KEYEXPRS.

A more careful rewrite only require linear memory, saving several
kb of RAM.

More saving comes from narrowed some types to smaller integers.

68/100 · AdequateMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context
AI analysis · Low 41/100

This commit rewrites a function in the Ledger Bitcoin app to use less memory. The old code stored a large table of key-derivation pairs for every possible class of key expression, which grew quadratically with the maximum number of key expressions. The new code stores only the class assignment for each key expression and rebuilds the pair list one class at a time, cutting stack usage by several kilobytes. The change also narrows some integer types. There is no explicit security bug fixed in the commit message, but on memory-constrained hardware large stack frames can contribute to crashes or stack overflows.

AI review queuedFix wrong comment in policy_node_thresh_tby Salvatore Ingala · fbbdca3f · Aug 4, 2026 · 1 fileMessage 45 · ThinInformational 15Details
Commit message · Salvatore Ingala

Fix wrong comment in policy_node_thresh_t

45/100 · ThinMessage clarity
✓ Descriptive subject✓ Names a concrete action or component! No meaningful explanatory body
Why it was queued
signing or wallet pathsecond-pass: security-sensitive path
AI analysis · Informational 15/100

This commit only changes a code comment to accurately describe how child scripts are stored. It does not alter any actual program logic, data structures, or behavior, so it has no security impact.

AI review queuedDisable musig in key expressions of musig_a/sortedmulti_aby Salvatore Ingala · 558854eb · Aug 4, 2026 · 2 filesMessage 73 · AdequateLow 42Details
Commit message · Salvatore Ingala

Disable musig in key expressions of musig_a/sortedmulti_a

The parsing of such fragments is not correctly handled in the
current state. Therefore, we cleanly disable it until the parser
is generalized.

73/100 · AdequateMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context
Why it was queued
signing or wallet pathsecond-pass: security-sensitive path
AI analysis · Low 42/100

This commit temporarily blocks a specific advanced Bitcoin wallet feature (MuSig inside multi_a/sortedmulti_a) because the code that reads those wallet descriptions doesn't handle it correctly yet. It's a defensive change to prevent malformed or unexpected wallet policies from being accepted, rather than a fix for a known active attack.

Lower-priorityAdditional integrity checks for Merkle proofsby Salvatore Ingala · c44c9b8b · Jul 31, 2026 · 4 filesMessage 45 · ThinModerate 62Details
Commit message · Salvatore Ingala

Additional integrity checks for Merkle proofs

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

This commit adds extra safety checks when the Ledger Bitcoin app verifies Merkle proofs, which are cryptographic evidence used to confirm that a piece of data belongs to a larger set. The changes ensure that the proof length matches the expected tree depth and that streamed data has the correct leaf prefix. Without these checks, a malicious or malformed proof might have been accepted incorrectly, potentially allowing an attacker to lie about which data is stored in the wallet's Merkle tree.

Lower-priorityAdd unit tests for get_merkle_preimageby Salvatore Ingala · 05445bae · Jul 31, 2026 · 3 filesMessage 55 · ThinInformational 15Details
Commit message · Salvatore Ingala

Add unit tests for get_merkle_preimage

55/100 · ThinMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Mentions testing or verification! No meaningful explanatory body
AI analysis · Informational 15/100

This commit only adds new unit tests for existing code. It does not change any production behavior, fix a bug, or introduce new functionality. The tests verify that certain security checks (proof length and domain separator checks) already reject malformed inputs. There is no direct security risk in this commit itself.

Security candidateType consistency in psbt_parse_rawtx, and some other hardeningsby Salvatore Ingala · 1af86279 · Jul 31, 2026 · 3 filesMessage 73 · AdequateModerate 59Details
Commit message · Salvatore Ingala

Type consistency in psbt_parse_rawtx, and some other hardenings

Change key_len and output_index to size_t for consistency with
other APIs, add some extra bounds checks.

Also adds:
- missing return value check on parser_consolidate_buffers
- reject trailing data during parsing
- zero txid_parser_outputs_t before starting parsing

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

This commit hardens a Bitcoin transaction parser in Ledger's app. It changes some numeric fields to safer types, adds bounds checks on transaction counts and sizes, rejects extra trailing bytes after a transaction, checks a previously-ignored internal buffer operation, and zeroes out result memory before use. These are defensive fixes that could prevent memory corruption, incorrect parsing, or information leakage, but the commit does not describe a specific active exploit.

AI review queuedHarden prevout tx parsing checksby Salvatore Ingala · 0df0add4 · Jul 31, 2026 · 4 filesMessage 45 · ThinModerate 59Details
Commit message · Salvatore Ingala

Harden prevout tx parsing checks

45/100 · ThinMessage clarity
✓ Descriptive subject✓ Names a concrete action or component! No meaningful explanatory body
Why it was queued
defensive validationsigning or wallet pathsecond-pass: near security thresholdsecond-pass: security-sensitive path
AI analysis · Moderate 59/100

This commit tightens how the Ledger Bitcoin app parses previous transaction data when signing Bitcoin transactions. It adds size limits and completion checks that prevent malformed or oversized previous transaction outputs from being processed. These changes reduce the chance that an attacker could trick the device into reading bad data, overflowing buffers, or signing based on an incomplete/corrupted view of a prior transaction.

AI review queuedSign consistency for parser steps; removed stale commentby Salvatore Ingala · 373f4a56 · Jul 31, 2026 · 2 filesMessage 50 · ThinInformational 15Details
Commit message · Salvatore Ingala

Sign consistency for parser steps; removed stale comment

50/100 · ThinMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component! No meaningful explanatory body
Why it was queued
signing or wallet pathparser or protocol pathsecond-pass: security-sensitive path
AI analysis · Informational 15/100

This commit only changes the declared type of three array-length constants from signed int to unsigned size_t, and removes two stale comments about a 10,000-byte limit. There is no change to program logic, memory allocation, bounds checking, or parsing behavior. It is a code-style/cleanup change with no security relevance visible in the diff.

AI review queuedFix taptree hash computation in test_utilsby Salvatore Ingala · 7cba440a · Jul 30, 2026 · 2 filesMessage 45 · ThinInformational 18Details
Commit message · Salvatore Ingala

Fix taptree hash computation in test_utils

45/100 · ThinMessage clarity
✓ Descriptive subject✓ Names a concrete action or component! No meaningful explanatory body
Why it was queued
signing or wallet pathsecond-pass: security-sensitive path
AI analysis · Informational 18/100

This commit fixes a copy-paste bug in test helper code used during automated testing of Ledger's Bitcoin app. The bug caused the right-hand branch of a Taproot script tree to be ignored and the left-hand branch to be hashed twice when computing the tree's root hash. This only affects Python test utilities, not the device firmware or production wallet code, so real user funds are not at risk. However, the bug could have made some tests silently pass with an incorrect taptree hash, weakening test coverage for Taproot/MuSig2 features.

Lower-priorityDo not truncate preset namesby Salvatore Ingala · 9f57d1a4 · Jul 30, 2026 · 1 fileMessage 60 · AdequateInformational 15Details
Commit message · Salvatore Ingala

Do not truncate preset names

This is done automatically when rendering, and only if needed.

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

This commit removes manual shortening of preset names in a developer-only playground GUI and lets the UI toolkit handle truncation automatically. It is a cosmetic/usability fix with no apparent security relevance.

Lower-priorityNit from PR review, and add a tapminiscript presetby Salvatore Ingala · 97f0f5a3 · Jul 30, 2026 · 1 fileMessage 50 · ThinInformational 15Details
Commit message · Salvatore Ingala

Nit from PR review, and add a tapminiscript preset

50/100 · ThinMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component! No meaningful explanatory body
AI analysis · Informational 15/100

This commit only touches a developer playground helper script. It adds a small safety check when building test PSBTs and adds a new test preset for a Taproot miniscript wallet. There is no change to the actual Ledger Bitcoin app code that runs on the device or that users rely on for security.

Lower-priorityFix presets with sighash flags in app playgroundby Salvatore Ingala · 103511c2 · Jul 28, 2026 · 2 filesMessage 60 · AdequateInformational 19Details
Commit message · Salvatore Ingala

Fix presets with sighash flags in app playground

It didn't correctly manage 'negative fees' when the fee is
actually not computable.

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

This commit fixes a bug in internal developer/test tooling for Ledger's Bitcoin app. The bug caused test PSBTs (Partially Signed Bitcoin Transactions) with certain SIGHASH flags to be built incorrectly, because the tool wrongly assumed the transaction had to balance. The fix makes the test generator understand that some sighash types allow the transaction to be unbalanced. This is a test/playground fix, not a change to the app that runs on the hardware wallet.

Lower-priorityPrepare changelog for release 2.5.0by Salvatore Ingala · 6de87c51 · Jul 24, 2026 · 1 fileMessage 45 · ThinInformational 15Details
Commit message · Salvatore Ingala

Prepare changelog for release 2.5.0

45/100 · ThinMessage clarity
✓ Descriptive subject✓ Names a concrete action or component! No meaningful explanatory body
Why it was queued
documentation-only discount
AI analysis · Informational 15/100

This commit only updates the project's changelog file to prepare for release 2.5.0. It renames an upcoming version placeholder, reorganizes release notes, and adds descriptions of user-facing changes. No source code, build scripts, or security-sensitive files were modified.

Lower-priorityNits from PR review, and update behavior with untrusted external amountsby Salvatore Ingala · cdca63d6 · Jul 24, 2026 · 2 filesMessage 50 · ThinInformational 11Details
Commit message · Salvatore Ingala

Nits from PR review, and update behavior with untrusted external amounts

50/100 · ThinMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component! No meaningful explanatory body
Why it was queued
documentation-only discount
AI analysis · Informational 11/100

This commit only changes two documentation files. It clarifies when the Ledger Bitcoin app can and cannot display the total amount of external transaction inputs. The change adds a note that for non-Taproot transactions, if the PSBT lacks the non-witness UTXO data for external inputs, the shown external-input amount is not trustworthy because legacy and SegWit signatures do not commit to that data. There is no code change in the commit, so it does not by itself fix or introduce a vulnerability.

Security candidateDocument signing behavior with sighash flags, and external inputsby Salvatore Ingala · c4658f0b · Jul 24, 2026 · 2 filesMessage 50 · ThinInformational 15Details
Commit message · Salvatore Ingala

Document signing behavior with sighash flags, and external inputs

50/100 · ThinMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component! No meaningful explanatory body
Why it was queued
signing boundarydocumentation-only discount
AI analysis · Informational 15/100

This commit only adds documentation. It explains how the Ledger Bitcoin app handles unusual signing options (non-default sighash flags and transactions with external inputs) and what warnings users see. There are no code changes, so it does not introduce, fix, or change any security behavior by itself.

AI review queuedBump version to 2.5.0by Salvatore Ingala · f8476403 · Jul 24, 2026 · 1 fileMessage 38 · OpaqueInformational 15Details
Commit message · Salvatore Ingala

Bump version to 2.5.0

38/100 · OpaqueMessage clarity
✓ Subject identifies a change✓ Names a concrete action or component! No meaningful explanatory body
Why it was queued
second-pass: opaque commit message
AI analysis · Informational 15/100

This commit only changes the application's version number in the build file from 2.4.6 to 2.5.0. There are no code changes, no security fixes, and no functional changes visible in this commit.

AI review queuedUpdate snapshotsby Salvatore Ingala · c50a49eb · Jul 24, 2026 · 203 filesMessage 18 · OpaqueInformational 15Details
Commit message · Salvatore Ingala

Update snapshots

18/100 · OpaqueMessage clarity
✓ Subject identifies a change! Too few words to establish purpose! No meaningful explanatory body
Why it was queued
signing or wallet pathsecond-pass: opaque commit messagesecond-pass: unusually broad changesecond-pass: security-sensitive path
AI analysis · Informational 15/100

This commit only updates test snapshot images (screenshots used in automated UI testing) for the Ledger Bitcoin app. No application source code, firmware logic, or security-sensitive files were changed. It does not fix or introduce any security issue on its own.