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

AI review queuedAdd test to make sure that extreme valid values of n are accepted in older(n)by Salvatore Ingala · b001a0cd · Mar 2, 2026 · 2 filesMessage 60 · AdequateInformational 12Details
Commit message · Salvatore Ingala

Add test to make sure that extreme valid values of n are accepted in older(n)

60/100 · AdequateMessage clarity
✓ Specific, 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 · Informational 12/100

This commit only adds a new automated test and slightly modifies existing test helper functions. It does not change the actual Ledger Bitcoin app code that users run. The new test checks that the app accepts certain extreme but valid relative timelock values when registering a wallet policy. There is no fix or behavior change to the secure firmware itself.

AI review queuedAdd failing test for hardened timelocksby Salvatore Ingala · 0d4927e3 · Mar 2, 2026 · 1 fileMessage 55 · ThinInformational 12Details
Commit message · Salvatore Ingala

Add failing test for hardened timelocks

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

This commit only adds a new automated test file. It does not change the actual Ledger Bitcoin app code. The test checks that the app correctly rejects wallet policies containing relative timelock values that are outside the allowed range. Because no application code is modified, this commit by itself does not introduce or fix a security vulnerability. It is a test-only change that documents expected behavior for an existing validation rule.

AI review queuedAdd sanity checks on older(n)by Salvatore Ingala · 4d97a4a8 · Mar 2, 2026 · 2 filesMessage 45 · ThinModerate 62Details
Commit message · Salvatore Ingala

Add sanity checks on older(n)

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 · Moderate 62/100

This commit adds safety checks to the Ledger Bitcoin app so that the 'older(n)' time-lock feature can only use values that actually have meaning under Bitcoin's consensus rules. Before this fix, a user could be shown a wallet policy with a value like older(65536), which looks like a real time-lock but behaves like no time-lock at all. That could trick a user into believing funds are locked when they are not. The patch rejects such misleading values.

AI review queuedFixing count_m variable use: a non-regression unit testby Ilya Artemov · e20c3a5f · Mar 2, 2026 · 1 fileMessage 60 · AdequateInformational 12Details
Commit message · Ilya Artemov

Fixing count_m variable use: a non-regression unit test

60/100 · AdequateMessage clarity
✓ Specific, 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 · Informational 12/100

This commit only adds a new unit test to the Ledger Bitcoin app. It does not change any production code. The test checks that a specific type of Bitcoin Miniscript expression is correctly classified as not 'non-malleable' (NONMAL). Because no actual wallet or signing logic is modified, this change by itself does not introduce or fix a live security vulnerability.

AI review queuedFixing count_m variable useby Ilya Artemov · 3556044d · Mar 2, 2026 · 1 fileMessage 35 · OpaqueModerate 59Details
Commit message · Ilya Artemov

Fixing count_m variable use

35/100 · OpaqueMessage clarity
✓ Descriptive subject! No meaningful explanatory body
Why it was queued
signing or wallet pathsecond-pass: opaque commit messagesecond-pass: security-sensitive path
AI analysis · Moderate 59/100

This commit fixes a logic bug in the Ledger Bitcoin app's Miniscript policy analyzer. The code that decides whether a Bitcoin spending policy is 'm' (a technical property used during transaction signing) was checking the wrong counter. It now also requires that all sub-policies satisfy the 'm' property, not just the 'e' property. This could have caused the device to incorrectly approve or classify a Bitcoin transaction policy, potentially leading to wrong security assumptions during wallet operations.

AI review queuedRemoving unused key_expression_index variableby Ilya Artemov · 6c3c40b9 · Mar 2, 2026 · 1 fileMessage 35 · OpaqueInformational 15Details
Commit message · Ilya Artemov

Removing unused key_expression_index variable

35/100 · OpaqueMessage clarity
✓ Descriptive subject! No meaningful explanatory body
Why it was queued
signing or wallet pathsecond-pass: opaque commit messagesecond-pass: security-sensitive path
AI analysis · Informational 15/100

This commit simply removes an unused local variable named key_expression_index from a single function. It does not change program behavior, fix a bug, or alter any security logic. There is no security relevance.

Security candidateFixing LEDGER_ASSERT failures with strings exceeding internal MESSAGE_SIZE hard-coded to 50by Ilya Artemov · bb74a00d · Mar 2, 2026 · 4 filesMessage 50 · ThinLow 26Details
Commit message · Ilya Artemov

Fixing LEDGER_ASSERT failures with strings exceeding internal MESSAGE_SIZE hard-coded to 50

50/100 · ThinMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component! No meaningful explanatory body
Why it was queued
cryptography-sensitive pathsigning or wallet path
AI analysis · Low 26/100

This commit shortens a number of internal error messages in Ledger's Bitcoin app so they no longer exceed a 50-character internal limit. The title says the long messages were causing LEDGER_ASSERT failures, which means the app could crash or refuse to proceed simply because a diagnostic string was too long. The change only rewords messages; it does not alter the underlying security checks or fix any vulnerability in the cryptographic logic.

AI review queuedFix partial_data_len=0 caseby Ilya Artemov · 8ff2b620 · Feb 27, 2026 · 1 fileMessage 35 · OpaqueLow 46Details
Commit message · Ilya Artemov

Fix partial_data_len=0 case

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

This commit fixes a missing check in the Ledger Bitcoin app. A function that streams a transaction 'preimage' (a piece of data used to authorize Bitcoin transactions) did not reject the case where the caller asks to stream zero bytes. The fix now returns an error if the requested chunk size is zero, preventing possible downstream confusion or unsafe behavior. The change is small and defensive; the commit message does not describe any active exploit or security incident.

AI review queuedZeroing out nonce-related stack buffers in musig partby Ilya Artemov · 78bac779 · Feb 27, 2026 · 2 filesMessage 50 · ThinModerate 58Details
Commit message · Ilya Artemov

Zeroing out nonce-related stack buffers in musig part

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

This commit is a defensive cleanup for the MuSig2 multi-signature code in Ledger's Bitcoin app. It makes sure that temporary memory holding secret nonce values and randomness is wiped clean even when things go wrong, not just on the happy path. The change reduces the chance that sensitive signing material could be left behind in device memory after an error, but it does not appear to fix an active remote exploit by itself.

AI review queuedFixing call_get_merkleized_map_value() return value checkingby Ilya Artemov · 70dcdf0c · Feb 27, 2026 · 3 filesMessage 50 · ThinModerate 61Details
Commit message · Ilya Artemov

Fixing call_get_merkleized_map_value() return value checking

50/100 · ThinMessage clarity
✓ Specific, 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 · Moderate 61/100

This commit fixes a bug in the Ledger Bitcoin app where several functions checked for only one specific error value (-1) instead of treating any negative number as a failure. If the underlying helper can return other negative error codes, the old code would have ignored them, potentially causing the app to keep processing with invalid or missing data. The patch makes the error handling more robust by rejecting any negative return value.

AI review queuedCodespell doc fixesby Ilya Artemov · 92048064 · Feb 27, 2026 · 5 filesMessage 28 · OpaqueInformational 15Details
Commit message · Ilya Artemov

Codespell doc fixes

28/100 · OpaqueMessage clarity
✓ Subject identifies a change! No meaningful explanatory body
Why it was queued
signing or wallet pathdocumentation-only discountsecond-pass: opaque commit messagesecond-pass: security-sensitive path
AI analysis · Informational 15/100

This commit only fixes spelling mistakes and minor formatting in documentation files. There are no code changes, no security fixes, and no behavior changes. It is purely a cleanup of typos like 'comand' to 'command' and 'ore' to 'or'.

Security candidateCodespell source code fixesby Ilya Artemov · 5d704b04 · Feb 27, 2026 · 9 filesMessage 35 · OpaqueInformational 15Details
Commit message · Ilya Artemov

Codespell source code fixes

35/100 · OpaqueMessage clarity
✓ Descriptive subject! No meaningful explanatory body! Opaque security-relevant change
Why it was queued
cryptography-sensitive pathsigning or wallet path
AI analysis · Informational 15/100

This commit only fixes spelling mistakes in source code comments and documentation strings. No executable code, logic, or security behavior was changed. It cannot be exploited and has no security impact.

Lower-priorityCodespell workflow for src and few other foldersby Ilya Artemov · cfa56dcb · Feb 27, 2026 · 1 fileMessage 45 · ThinInformational 15Details
Commit message · Ilya Artemov

Codespell workflow for src and few other folders

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 adds a GitHub Actions workflow that automatically checks for spelling mistakes in source code and documentation folders. It is a code-quality and documentation improvement with no security relevance.

AI review queuedFactorizing io functionsby Ilya Artemov · 7504866f · Feb 26, 2026 · 3 filesMessage 28 · OpaqueInformational 15Details
Commit message · Ilya Artemov

Factorizing io functions

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

This commit is a routine code cleanup that renames and consolidates helper functions used to send response messages from the Ledger Bitcoin app. It removes a few redundant wrapper functions and updates the documentation comments. There is no indication of a security fix or behavior change.

Lower-priorityVerifying status words against the standard SDK onesby Ilya Artemov · 5580ba74 · Feb 26, 2026 · 2 filesMessage 50 · ThinInformational 14Details
Commit message · Ilya Artemov

Verifying status words against the standard SDK ones

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

This commit adds compile-time checks that make sure the app's internal error/status codes match the ones defined by Ledger's standard software development kit. It does not change any behavior of the app; it only adds safety guards so that future mismatches would be caught when building the code. There is no indication this fixes an active security bug.

AI review queuedmain, io, swap standardizationby Ilya Artemov · 29eb1e4d · Feb 26, 2026 · 18 filesMessage 35 · OpaqueLow 32Details
Commit message · Ilya Artemov

main, io, swap standardization

35/100 · OpaqueMessage clarity
✓ Descriptive subject! No meaningful explanatory body
Why it was queued
signing or wallet pathsecond-pass: opaque commit messagesecond-pass: security-sensitive path
AI analysis · Low 32/100

This commit refactors the Ledger Bitcoin app to use the newer Ledger SDK 'standard app' framework for main I/O loops and swap (exchange) integration. It removes a lot of custom boilerplate code and replaces it with SDK-provided equivalents. The change also enables the SWAP feature by default in the Makefile. There is no direct evidence in the diff of a security vulnerability being fixed; it appears to be a modernization and code-cleanup change. However, because it touches core app lifecycle, I/O, and swap handling code, any mistake in the transition could affect app stability or swap security.

Security candidateReducing buffer_ext module with most of the API now in the SDKby Ilya Artemov · 9ecbe759 · Feb 18, 2026 · 19 filesMessage 50 · ThinInformational 18Details
Commit message · Ilya Artemov

Reducing buffer_ext module with most of the API now in the SDK

50/100 · ThinMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component! No meaningful explanatory body
Why it was queued
cryptography-sensitive pathsigning or wallet pathparser or protocol path
AI analysis · Informational 18/100

This commit removes a local set of helper functions for reading and writing memory buffers and switches the Ledger Bitcoin app to use equivalent functions now provided by the Ledger SDK. It is a code cleanup and modernization change, not a fix for a known security bug. The only functional code change is removing unnecessary type casts when accessing buffer memory, which does not introduce a vulnerability.

Security candidateSplitting up MAX_BIP388_XPUB_DERIVATION_STEPS and MAX_BIP32_PATH_STEPS: testsby Ilya Artemov · 933bef5a · Feb 18, 2026 · 5 filesMessage 60 · AdequateInformational 12Details
Commit message · Ilya Artemov

Splitting up MAX_BIP388_XPUB_DERIVATION_STEPS and MAX_BIP32_PATH_STEPS: tests

60/100 · AdequateMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Mentions testing or verification! No meaningful explanatory body
Why it was queued
secret or key materialsigning or wallet path
AI analysis · Informational 12/100

This commit only changes test files for the Ledger Bitcoin app. It adds and updates automated tests to verify that the app correctly accepts derivation paths up to a defined maximum length and rejects paths that are too long. There are no changes to the actual app code that runs on the device, so this commit does not introduce or fix a security vulnerability by itself. It appears to be a follow-up testing patch related to separating two internal constants about path length limits.

Security candidateSplitting up MAX_BIP388_XPUB_DERIVATION_STEPS and MAX_BIP32_PATH_STEPSby Ilya Artemov · e04898b3 · Feb 18, 2026 · 36 filesMessage 50 · ThinLow 33Details
Commit message · Ilya Artemov

Splitting up MAX_BIP388_XPUB_DERIVATION_STEPS and MAX_BIP32_PATH_STEPS

50/100 · ThinMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component! No meaningful explanatory body
Why it was queued
secret or key materialcryptography-sensitive pathsigning or wallet path
AI analysis · Low 33/100

This commit renames and splits two related constants for Bitcoin derivation paths. Previously, the same limit was used both for wallet-policy xpub derivations and for full signing paths. The change gives xpub derivations their own smaller limit (8 steps) while keeping the full signing path limit at 10 steps (8 + 2 for change/address index). It also fixes a potential off-by-one check when parsing xpub derivations by changing '>' to '>='. Most of the file changes are cosmetic whitespace removals.

Security candidateUnit tests adaptationby Ilya Artemov · c6a38bd0 · Feb 18, 2026 · 10 filesMessage 38 · OpaqueInformational 15Details
Commit message · Ilya Artemov

Unit tests adaptation

38/100 · OpaqueMessage clarity
✓ Subject identifies a change✓ Mentions testing or verification! No meaningful explanatory body! Opaque security-relevant change
Why it was queued
cryptography-sensitive pathsigning or wallet pathparser or protocol path
AI analysis · Informational 15/100

This commit is a routine maintenance change to the project's unit tests. It updates the test build system to use shared utility code from the Ledger SDK instead of local copies, deletes tests for functions that now live in the SDK, and adds a couple of new test cases for wallet policy parsing. There is no change to the actual Bitcoin app code that runs on the device, and nothing in the commit suggests a security fix or vulnerability.

Security candidateUsing files from the SDK/lib_standard_appby Ilya Artemov · 9561a076 · Feb 18, 2026 · 107 filesMessage 45 · ThinLow 32Details
Commit message · Ilya Artemov

Using files from the SDK/lib_standard_app

45/100 · ThinMessage clarity
✓ Descriptive subject✓ Names a concrete action or component! No meaningful explanatory body
Why it was queued
cryptography-sensitive pathsigning or wallet pathparser or protocol path
AI analysis · Low 32/100

This commit is a large refactoring that replaces many locally-implemented utility files (for parsing APDUs, buffers, base58, BIP32, varints, read/write helpers, etc.) with equivalent files from Ledger's official SDK library (lib_standard_app). It also renames some local files (e.g., io.c -> io_ext.c, buffer.c -> buffer_ext.c) to hold only app-specific extensions. The change itself is not a security patch; it is a code-maintenance / deduplication move. However, any large-scale dependency switch can introduce subtle behavioral differences or regressions, so it warrants careful review rather than alarm.

AI review queuedreusable_codeql_checksby Ilya Artemov · 5519ed10 · Feb 17, 2026 · 1 fileMessage 18 · OpaqueInformational 15Details
Commit message · Ilya Artemov

reusable_codeql_checks

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

This commit only changes the project's GitHub Actions workflow file. It replaces an inline CodeQL security-scanning job with a call to a shared, reusable workflow maintained by Ledger. No application source code, cryptographic logic, or user-facing behavior is modified. There is no direct security vulnerability in this change.

AI review queuedUsing standard UT workflowby Ilya Artemov · 226f50f9 · Feb 17, 2026 · 2 filesMessage 35 · OpaqueInformational 15Details
Commit message · Ilya Artemov

Using standard UT workflow

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

This commit only reorganizes how automated unit tests are run in the project's GitHub CI pipeline. It removes the inline unit-test job from one workflow file and replaces it with a call to a shared Ledger reusable workflow. No application code, cryptographic logic, or user-facing behavior was changed. There is no security-relevant change visible in the diff.

Lower-priorityUpdate CHANGELOG.md for release 2.4.5by Salvatore Ingala · a29cc918 · Feb 10, 2026 · 1 fileMessage 45 · ThinInformational 15Details
Commit message · Salvatore Ingala

Update CHANGELOG.md for release 2.4.5

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 edits the changelog text: it updates a release date and capitalizes some bullet points. No code was changed, so it cannot by itself introduce, fix, or exploit a security issue. The changelog does mention that version 2.4.5 fixes a signing bug and changes a derivation flag, but those actual code changes are not present in this diff.

Security candidateFix issues with the communication protocol when data is chunkedby Salvatore Ingala · 0586ab2f · Feb 10, 2026 · 2 filesMessage 73 · AdequateHigh 71Details
Commit message · Salvatore Ingala

Fix issues with the communication protocol when data is chunked

- get_merkle_preimage failed to update the data_ptr pointer
- fpt_der_data_callback would read corrupted data if a zero-length
chunk (or one starting with a very large varint that does not fit
in the first chunk) is received.

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

This commit fixes two bugs in the Ledger Bitcoin app's data-receiving code when large messages are split into multiple chunks. One bug caused the app to hash and copy from the wrong memory location after the first chunk, potentially corrupting a cryptographic proof. The other bug could read corrupted data or behave incorrectly if an empty chunk arrived, or if a taproot PSBT field started with a very large variable-length integer. These are memory/data-integrity issues in security-critical signing code, but the commit does not state they are exploitable for theft.