BS
← All projectsBlockstream

Blockstream Jade

Firmware for Jade and Jade Plus Bitcoin hardware wallets.

BitcoinHardware walletsElevated watch
Repository coverage

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

106security candidates69second-pass queue437AI analyses
25commits · 30 days
67commits · 60 days
220commits · 180 days
417commits · 365 days
Backfill bands
Aug 5 → Feb 6216 seen38 candidatesComplete
Feb 6 → Jun 6131 seen9 candidatesComplete
Jun 6 → Jul 657 seen10 candidatesComplete
Jul 6 → Aug 510 seen0 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.

57/100 average clarity
32Strong · 80–100
182Adequate · 60–79
250Thin · 40–59
38Opaque · 0–39
5security 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.
Jon Griffiths31357282157
Mike Tolkachev431438152
Daniel Newton771668055
Mihailo Milenkovic878057
roderico333060
Valerio Vaccaro1526054
Jamie C. Driver525053
Gustavo Cateim917078
Austin-Fulbright414060
quantpoet111072
cmiguelrn111045
tokyovyse111063
Analysis record

Published AI watches

Last scanned 4 minutes ago

Informational 20 AI analysisMessage 65 · Adequate
BS BlockstreamBlockstream Jade BitcoinHardware wallets

fmt: fix and prevent future use of unsupported format spec "zu"

This commit fixes the use of the "%zu" printf format specifier, which is not supported by the ESP32 toolchain used in this project. The unsupported format could cause log messages and user-facing strings to display incorrect or garbage val…

Use of unsupported printf format specifier %zu on embedded targetPotential for malformed log/UI output due to undefined format behaviorAddition of CI guard to prevent recurrence
26042182by Jon Griffiths+21−145 files
No security note in commit
Low 33 AI analysisMessage 30 · Opaque
BS BlockstreamBlockstream Jade BitcoinHardware wallets

otp: release md context on failure and clean temporary buffers

This commit fixes cleanup in the one-time-password (OTP) code. Previously, if setting up the cryptographic hash context failed, the code could return without freeing that context, and temporary buffers holding sensitive counter/HMAC data w…

Resource leak fix: mbedtls_md_free() now called on prepare_md_ctx failure pathSensitive buffer zeroization: wally_bzero() added for rcnt_buf and hmacControl-flow change from macro-based early return to explicit success checks
6e2cb6b6by Mike Tolkachev+26−141 file
No security note in commit
Low 47 AI analysisMessage 25 · Opaque
BS BlockstreamBlockstream Jade BitcoinHardware wallets

identity: clean temporary hash buffer

This commit fixes a small but real security hygiene issue in Blockstream Jade, a hardware wallet. A temporary buffer that holds a sensitive cryptographic hash (HMAC-SHA512 output used to derive child private keys) was not marked as sensiti…

Sensitive memory not marked for clearing (missing SENSITIVE_PUSH/POP)Buffer holds HMAC-SHA512 output used in BIP32 hardened child key derivationPatch adds explicit sensitive-memory lifecycle management
b5c35779by Mike Tolkachev+2−01 file
No security note in commit
Low 36 AI analysisMessage 15 · Opaque
BS BlockstreamBlockstream Jade BitcoinHardware wallets

qrmode: clean temporary buffer

This commit adds cleanup of a temporary memory buffer used when turning data into QR codes on the Blockstream Jade hardware wallet. The buffer could previously remain in memory after use, potentially leaving sensitive QR data behind for la…

Sensitive temporary buffer not cleared before fixUse of SENSITIVE_PUSH/SENSITIVE_POP memory-clearing macrosQR payload data may include private or confidential material
34f68c20by Mike Tolkachev+2−01 file
No security note in commit
Low 43 AI analysisMessage 50 · Thin
BS BlockstreamBlockstream Jade BitcoinHardware wallets

pinserver: retain unit private key on url change

This commit changes how Blockstream Jade handles its PIN server settings. Previously, changing the PIN server web address (URL) also wiped the device's private PIN encryption key, forcing the device to create a fresh one. The patch keeps t…

PIN private key lifecycle change: key retained on URL-only pinserver updatePublic-key change still triggers private-key erasure/regenerationDebug-clean and full reset still erase private key
ddcd93a3by Mike Tolkachev+38−324 files
No security note in commit
Informational 15 AI analysisMessage 45 · Thin
BS BlockstreamBlockstream Jade BitcoinHardware wallets

add more boards and descriptions

This commit is a documentation update for the do-it-yourself (DIY) hardware section of the Blockstream Jade project. It adds descriptions and photos for additional supported circuit boards and updates image file references. There are no co…

f4fb150dby Valerio Vaccaro+65−1625 files
No security note in commit
Moderate 63 AI analysisMessage 50 · Thin
BS BlockstreamBlockstream Jade BitcoinHardware wallets

process: limit array sizes in sign_tx, register_multisig and sign_bip85_digests

This commit adds size limits to several message-handling functions in the Blockstream Jade hardware wallet firmware. It caps how many asset records, transaction inputs/outputs, multisig signers, and BIP85 RSA digests a single RPC message c…

Adds explicit upper bounds on attacker-controllable array sizesRejects zero-input/zero-output transactions before further processingMoves BIP85 digest count validation before memory allocation
e87f26bfby Daniel Newton+251−8114 files
No security note in commit
Informational 15 AI analysisMessage 28 · Opaque
BS BlockstreamBlockstream Jade BitcoinHardware wallets

Update CHANGELOG.md

This commit only updates the project's CHANGELOG.md file to add release notes for version 1.0.41. It does not change any source code, build scripts, or configuration. The changelog text itself states that version 1.0.41 contains important …

Changelog describes prior security fixes in release 1.0.41Mentions external security researchers and tools (Loupe, Kvazar)References security-relevant improvements: stack protection, entropy, secure version, memory scrubbing, thread safety
dd45a7dcby Jon Griffiths+49−01 file
Vendor flagged security relevance
Informational 15 AI analysisMessage 35 · Opaque
BS BlockstreamBlockstream Jade BitcoinHardware wallets

jadepy: update jadepy release

This commit simply bumps the version of a Python dependency called jade-client from 1.0.40 to 1.0.41, along with its matching cryptographic hashes and a fresh PGP signature. There is no code change visible here, and nothing in the commit m…

75eeada4by Jon Griffiths+19−192 files
No security note in commit
Informational 15 AI analysisMessage 45 · Thin
BS BlockstreamBlockstream Jade BitcoinHardware wallets

consistency: fix docs/comment/script typos

This commit fixes five spelling mistakes in documentation, code comments, and a script comment. None of the changes alter program behavior or affect security.

9ea7eed3by Jon Griffiths+5−55 files
No security note in commit
Informational 17 AI analysisMessage 50 · Thin
BS BlockstreamBlockstream Jade BitcoinHardware wallets

esp_lcd: vendor the esp_lcd component (ESP-IDF v5.5.4)

This commit copies the ESP-IDF 'esp_lcd' display-driver component directly into the Blockstream Jade firmware repository (a process called 'vendoring') at version 5.5.4. It adds about 8,700 lines of display-interface code for LCD panels us…

Large vendored third-party driver import (+8,718 lines, 43 files)Driver code runs in interrupt context and uses DMA, which historically carries memory-safety and cache-coherency risksNo explicit security fix or bug-fix narrative in commit title/message
d89207bfby Daniel Newton+8718−043 files
No security note in commit
Informational 21 AI analysisMessage 57 · Thin
BS BlockstreamBlockstream Jade BitcoinHardware wallets

build: "fakeprod" prod-like development mode

This commit adds an official developer-only 'fakeprod' build mode for Blockstream Jade hardware wallets. It deliberately weakens several security settings (single signature, committed private keys, readable flash-encryption key, enabled JT…

In-tree private keys committed to repository (tools/fakeprod_v2.pem, tools/fakeprod_attest.pem)Secure boot minimum signatures reduced from 2 to 1Flash encryption set to DEVELOPMENT mode with key readable
cecedc76by Daniel Newton+350−59 files
Vendor flagged security relevance
Low 45 AI analysisMessage 45 · Thin
BS BlockstreamBlockstream Jade BitcoinHardware wallets

urldecode: add validation for URL encoding

This commit hardens a URL-decoding helper in Blockstream Jade's firmware. It adds validation so malformed percent-encoding, embedded null bytes, control characters, and non-ASCII bytes are rejected instead of being silently decoded. A new …

Input validation added for percent-encoded sequencesRejection of embedded NUL bytes and control characters in decoded outputRejection of non-ASCII decoded bytes (>=0x80 and DEL 0x7f)
dd0d699dby Mike Tolkachev+100−272 files
No security note in commit
Low 26 AI analysisMessage 73 · Adequate
BS BlockstreamBlockstream Jade BitcoinHardware wallets

qr: split datastream data into its own allocation, reorder alloc/free calls

This change rewrites how a small QR-code scanning library allocates memory. Instead of one big 16 KB block, it now uses two separate 8 KB blocks, and it frees them in the reverse order they were allocated. The stated goal is to avoid memor…

Memory allocation pattern changed from single large allocation to two smaller allocationsAllocation/free ordering changed to LIFO-style reverse pairingPointer field added to struct that previously held an inline array
43640f8cby Jon Griffiths+24−153 files
No security note in commit
Low 46 AI analysisMessage 45 · Thin
BS BlockstreamBlockstream Jade BitcoinHardware wallets

psbt: check output amount presence before reading

This commit tightens how Blockstream Jade reads output amounts from a Partially Signed Bitcoin Transaction (PSBT). Before, the code tried to read the amount directly without first confirming it was actually present. Now it checks whether t…

Missing-field check added before sensitive value readPSBT output amount parsing hardenedDefensive validation of libwally presence flags
9f2b916dby Jon Griffiths+2−11 file
No security note in commit
Moderate 59 AI analysisMessage 50 · Thin
BS BlockstreamBlockstream Jade BitcoinHardware wallets

psbt: require that all psbt bytes are consumed when parsing

This commit tightens how Blockstream Jade verifies a Bitcoin transaction file (PSBT) before signing. It now requires that every byte in the file is part of the transaction, with no leftover or trailing data allowed. Previously, extra bytes…

Parsing now rejects trailing/unconsumed bytes in PSBT inputChange is in the signing code path, directly affecting what the hardware wallet will signUse of stricter libwally-core parse flag (COMPLETE) indicates parser hardening
605d86acby Jon Griffiths+1−11 file
No security note in commit
Informational 15 AI analysisMessage 68 · Adequate
BS BlockstreamBlockstream Jade BitcoinHardware wallets

hardware: add Jade Plus design files

This commit reorganizes existing hardware design files for the original Jade device into a new subfolder and adds the open-source hardware design files for a new product, the Jade Plus. It does not change any software, firmware, or device …

5ad85661by bitcoinhelp+2573−122520 files
No security note in commit
Informational 15 AI analysisMessage 55 · Thin
BS BlockstreamBlockstream Jade BitcoinHardware wallets

tests: migrate low level tests

This commit only moves and reorganizes existing test code. It adds a new helper to check whether the current transport is a specific type, moves a shared wait() function into a common test package file, and migrates a large set of low-leve…

767006a0by Valerio Vaccaro+1580−54 files
No security note in commit
Low 27 AI analysisMessage 68 · Adequate
BS BlockstreamBlockstream Jade BitcoinHardware wallets

mnemonic: restore recovery phrase by word number

This commit adds a new way to restore a Bitcoin wallet on a Blockstream Jade hardware device: instead of typing each recovery word, users can enter each word's one-based BIP39 number (for example, '1' for 'abandon'). The change also refact…

New user-input path for seed recovery (word numbers instead of words)Refactoring of mnemonic input/validation helpersAddition of SENSITIVE_PUSH/POP for local mnemonic buffers
99927491by roderico+580−3183 files
No security note in commit
Informational 18 AI analysisMessage 68 · Adequate
BS BlockstreamBlockstream Jade BitcoinHardware wallets

ui: support bounded variable-length digit entry

This commit refactors the on-screen digit-entry keypad in Blockstream Jade so callers can ask for shorter number fields (for example 4 digits instead of 6) and optionally cap the entered value. The existing 6-digit PIN and index entry beha…

New bounded numeric input path may prevent out-of-range values in future callersRefactoring centralizes input validation rather than relying on callersNo buffer-size changes observed; digit array remains DIGIT_ENTRY_SIZE (6) elements
69627745by roderico+128−332 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-prioritylog: added CONFIG_LOG_CBOR (default off) to control logging via jade serial APIby Daniel Newton · 95653c19 · Dec 3, 2025 · 2 filesMessage 50 · ThinLow 29Details
Commit message · Daniel Newton

log: added CONFIG_LOG_CBOR (default off) to control logging via jade serial API

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

This commit adds a new build-time setting (CONFIG_LOG_CBOR) that is off by default. Previously, the Jade hardware wallet could send log messages over its serial interface; now that behavior is gated behind an explicit opt-in flag. The change reduces the risk that diagnostic logs leak sensitive information over the serial port in normal production builds.

Lower-prioritydocs: add security caveat and @DarkNavyOrg thanks to changelogby Jon Griffiths · 619baa1b · Dec 3, 2025 · 1 fileMessage 67 · AdequateInformational 7Details
Commit message · Jon Griffiths

docs: add security caveat and @DarkNavyOrg thanks to changelog

67/100 · AdequateMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Uses a recognizable type or scope✓ Names security-relevant behavior explicitly! No meaningful explanatory body
Why it was queued
documentation-only discount
AI analysis · Informational 7/100

This commit only edits the project's changelog. It adds a note saying version 1.0.38 contains important security updates and thanks an outside security research group called DARKNAVY. The actual code fixes are not shown in this commit, so we cannot evaluate what the security problem is or how serious it is from the diff alone.

Lower-prioritybuild: only generate deltas that are 1/2 the firmware size or lessby Jon Griffiths · 239b9c14 · Dec 3, 2025 · 3 filesMessage 62 · AdequateLow 26Details
Commit message · Jon Griffiths

build: only generate deltas that are 1/2 the firmware size or less

62/100 · AdequateMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Uses a recognizable type or scope! No meaningful explanatory body
AI analysis · Low 26/100

This commit changes the build tooling that creates over-the-air (OTA) firmware update patches for the Blockstream Jade hardware wallet. It now refuses to generate a delta patch if the patch would be larger than half the size of the full new firmware, unless the caller explicitly uses a new '--force' flag. The CI scripts were updated to pass '--force' for their existing self-to-self test patches, so those tests still run. The change is a build/operational hardening measure: it prevents the release pipeline from shipping oversized delta updates that could be inefficient or potentially problematic, but it does not by itself fix a runtime vulnerability in the device.

Lower-prioritybuild: only check hashes that are presentby Jon Griffiths · 895bab82 · Dec 3, 2025 · 1 fileMessage 57 · ThinLow 29Details
Commit message · Jon Griffiths

build: only check hashes that are present

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

This is a small fix to a release verification script. Previously, the script would try to compare a firmware file against its expected hash even when the hash file was missing, which could cause the script to crash or behave unpredictably. Now it only performs the comparison when the hash file actually exists. This is a build/release hygiene improvement rather than a fix for an active security vulnerability in the device itself.

AI review queuedUpdate CHANGELOG.mdby Jon Griffiths · fb264239 · Nov 18, 2025 · 1 fileMessage 28 · OpaqueInformational 15Details
Commit message · Jon Griffiths

Update CHANGELOG.md

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

This commit only updates the project's CHANGELOG.md file, adding release notes for version 1.0.37. It does not change any source code, configuration, or executable files. There is no security-relevant change in the diff itself.

Lower-prioritybuild: increment the firmware secure versionby Jon Griffiths · 3457a52c · Nov 18, 2025 · 6 filesMessage 57 · ThinLow 33Details
Commit message · Jon Griffiths

build: increment the firmware secure version

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

This commit changes the build settings for all production variants of the Blockstream Jade hardware wallet to set a 'secure version' to 1. This is part of the device's anti-rollback protection: once this version is set, the bootloader will refuse to run older firmware that has a lower secure version. On its own, this change does not fix a bug or add a feature users interact with; it is a build-time policy change that affects which firmware versions the device will accept in the future. It could be a routine hardening step, or it could be a response to a known vulnerability that the vendor wants to ensure cannot be exploited by downgrading to an older, vulnerable firmware. The commit message and diff do not say which is the case.

Lower-priorityremove qr guide icons and draw qr guide directlyby Daniel Newton · 3212faea · Nov 12, 2025 · 13 filesMessage 45 · ThinInformational 15Details
Commit message · Daniel Newton

remove qr guide icons and draw qr guide directly

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

This commit is a straightforward user-interface cleanup: it removes pre-made QR guide corner images and instead draws the same corner guides directly using simple rectangles. There is no security change visible in the code.

AI review queuedUpdate CHANGELOG.mdby Jon Griffiths · 6ad13bff · Nov 12, 2025 · 1 fileMessage 28 · OpaqueInformational 15Details
Commit message · Jon Griffiths

Update CHANGELOG.md

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

This commit only updates the project's CHANGELOG.md file. It documents what was added, changed, and fixed in firmware versions 1.0.36 and 1.0.37, but does not modify any source code, build scripts, or configuration. There is no direct security-relevant code change to review in this commit itself.

Lower-priorityusb: refactor usb handlingby Jon Griffiths · c0606dc3 · Nov 6, 2025 · 4 filesMessage 58 · ThinLow 32Details
Commit message · Jon Griffiths

usb: refactor usb handling

- Simplify the USB caller interface down to start() and stop().
- Simplify the internal state machine to a single loop
- Remove multiple synchronization primatives in favour of a single mutex
- Prevent freezing when JTAG and logging are both enabled
- Remove UI-based logging support
- Load the next data block while the current one is processing
- Time-out if ota_data messages are not forthcoming
- Reduce stack usage

Co-authored-by: Daniel Newton <dnewton@blockstream.com>

58/100 · ThinMessage clarity
✓ Descriptive subject✓ Provides detailed explanatory context
AI analysis · Low 32/100

This commit is a major internal rewrite of how Blockstream Jade handles USB storage and firmware updates over USB. It simplifies the code, removes several old synchronization mechanisms, and adds timeouts and better error handling. The changes appear to be defensive hardening and reliability fixes rather than a patch for a known active security flaw. There is no mention of a CVE, security advisory, or external researcher in the commit itself.

Lower-priorityci: include sdkconfig.defaults in firmware build artifactsby Jon Griffiths · 0d883e1e · Nov 6, 2025 · 1 fileMessage 62 · AdequateInformational 15Details
Commit message · Jon Griffiths

ci: include sdkconfig.defaults in firmware build artifacts

62/100 · AdequateMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Uses a recognizable type or scope! No meaningful explanatory body
AI analysis · Informational 15/100

This change only adjusts the project's automated build pipeline to include an extra configuration file (sdkconfig.defaults) in the published firmware build artifacts. It does not modify the actual firmware code, device behavior, or security controls. There is no indication of a security vulnerability or fix.

Lower-prioritychange name of usb_connected() to usb_is_powered()by Daniel Newton · 61690c66 · Nov 6, 2025 · 18 filesMessage 50 · ThinInformational 15Details
Commit message · Daniel Newton

change name of usb_connected() to usb_is_powered()

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

This commit is a simple rename of a function from usb_connected() to usb_is_powered() across 18 files. There are no logic changes, no security fixes, and no behavioral differences. It appears to be a code-clarity refactor to make the function's purpose clearer.

Lower-priorityota: share error handling codeby Jon Griffiths · 3f207eeb · Oct 30, 2025 · 4 filesMessage 60 · AdequateLow 34Details
Commit message · Jon Griffiths

ota: share error handling code

Attempt to be more careful about replying without a current message or
replying to a given message twice.

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

This commit refactors the firmware-update (OTA) error-handling code in Blockstream Jade so both the normal and delta update paths use the same cleanup logic. The stated goal is to avoid replying when there is no current message or replying to the same message twice. The change centralizes final checks and error replies, but the diff alone does not prove a specific exploitable vulnerability; it looks like a defensive code-quality fix.

Lower-priorityota: make user validation set the ota and confirmation statusby Jon Griffiths · 9314a4f9 · Oct 30, 2025 · 4 filesMessage 73 · AdequateLow 42Details
Commit message · Jon Griffiths

ota: make user validation set the ota and confirmation status

This makes confirmation status easier to reason about as it is only set
in one place after ota_init().

Following this, it is clear that if the decompressed data callback is initially
called with less than the full custom header, then user validaton will
never be called. Document the code that catches this case and how it can
happen.

73/100 · AdequateMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context
AI analysis · Low 42/100

This commit restructures how a Blockstream Jade hardware wallet confirms firmware updates. It moves the 'user has approved' flag into the validation routine itself and adds a safety check: if the first chunk of firmware data is smaller than expected, the device now aborts rather than risk skipping the user-approval step. The change is defensive hardening, not a confirmed exploit fix, because the commit message only calls it a theoretical case.

Lower-priorityota: add missing jumps to cleanup codeby Jon Griffiths · 3700ef34 · Oct 30, 2025 · 2 filesMessage 45 · ThinModerate 61Details
Commit message · Jon Griffiths

ota: add missing jumps to cleanup code

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

This commit fixes three places in the firmware update (OTA) code where an error was recorded but the code kept running instead of jumping to cleanup. After an update error, the device could continue to process messages and potentially finalize or report a successful update when it should have aborted. This is a logic bug in error handling that could lead to a corrupted or incomplete firmware being accepted.

Lower-priorityota: initial refactor of ota processingby Jon Griffiths · b1437349 · Oct 30, 2025 · 4 filesMessage 68 · AdequateLow 32Details
Commit message · Jon Griffiths

ota: initial refactor of ota processing

Push all state into the ota context struct, allocate it from the heap
and free it consistently on process exit. Use the context to simplify
error handling rather than forcing callers to maintain their own external
context variables.

Share the initial message processing and ota setup code between the
full and delta ota tasks since its almost completely identical.

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

This commit is a code cleanup that rewrites how the Blockstream Jade hardware wallet handles firmware updates. It moves all update-related state into a single heap-allocated structure and makes the cleanup logic more consistent. The change itself is a refactor, not an obvious security fix, but it touches sensitive firmware-update code where mistakes can have serious consequences. There is no direct evidence in the commit message or diff that a specific vulnerability was being fixed.

Lower-priorityota: perform the happy path processing in ota_finalize()by Jon Griffiths · 04198416 · Oct 30, 2025 · 4 filesMessage 50 · ThinLow 28Details
Commit message · Jon Griffiths

ota: perform the happy path processing in ota_finalize()

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

This commit moves the 'success' handling of firmware updates (sending an OK reply, showing a success message, and rebooting) into a shared helper function called ota_finalize(). Previously, this success logic was duplicated in two places after calling ota_finalize(). The change is a code cleanup and does not appear to alter security behavior, but it does mean the success path now lives inside the finalization routine rather than after it returns.

Lower-priorityota: make finalization set the ota statusby Jon Griffiths · 8a710d86 · Oct 30, 2025 · 4 filesMessage 45 · ThinLow 45Details
Commit message · Jon Griffiths

ota: make finalization set the ota status

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

This commit refactors how firmware update finalization works in the Blockstream Jade hardware wallet. Previously, the final verification and boot-partition switch only ran if the update had already been marked successful. Now the finalization routine always runs and sets the success/failure status itself. The change is mostly a code-cleanup, but it removes a guard that could have silently skipped final checks when an earlier error was already recorded. There is no direct evidence in the commit that this fixes an exploitable vulnerability, but it hardens the OTA flow so that final verification and boot-partition selection are consistently applied.

Lower-priorityota: ensure error replies are sent if firmware sizes mismatchby Jon Griffiths · 495f6278 · Oct 30, 2025 · 2 filesMessage 73 · AdequateLow 45Details
Commit message · Jon Griffiths

ota: ensure error replies are sent if firmware sizes mismatch

If ota_complete is not seen, return directly. This code path does not
set an error into the context, and so never enters the cleanup code.

73/100 · AdequateMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context
AI analysis · Low 45/100

This commit fixes a bug in the firmware update (OTA) code for Blockstream Jade hardware wallets. Previously, if the device received an unexpected message after a firmware upload whose size did not match expectations, it could return without sending an error reply to the host. The fix ensures the device always sends an error response in those cases, so the host app knows something went wrong instead of being left hanging.

Lower-priorityota: remove write-through pointer members from ota context structby Jon Griffiths · 6e2c00ec · Oct 28, 2025 · 4 filesMessage 65 · AdequateInformational 15Details
Commit message · Jon Griffiths

ota: remove write-through pointer members from ota context struct

We are already writing through the context pointer, the extra
indirection uses more stack with no benefit.

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

This commit is a straightforward internal code cleanup in the firmware update (OTA) module. It removes an unnecessary layer of pointers inside the OTA context structure, storing values directly instead of pointing to separate local variables. There is no indication this fixes a security bug or changes security behavior.

Lower-priorityusb: use usbstorage_register_callback to unregisterby Jon Griffiths · 057dd310 · Oct 28, 2025 · 1 fileMessage 50 · ThinLow 32Details
Commit message · Jon Griffiths

usb: use usbstorage_register_callback to unregister

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

This commit changes how a USB storage callback is unregistered when a background task shuts down. Instead of directly clearing two internal variables while holding a mutex, the code now calls the existing registration function with NULL values. This is a cleanup/refactoring change that likely fixes a potential race condition or inconsistent state, but the diff alone does not show an exploitable vulnerability.

Lower-priorityusb: restore the previous activity before running a usbstorage actionby Jon Griffiths · 7483976f · Oct 28, 2025 · 1 fileMessage 50 · ThinLow 29Details
Commit message · Jon Griffiths

usb: restore the previous activity before running a usbstorage action

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

This commit fixes a small user-interface bug in Blockstream Jade's USB storage mode. When a user plugs in a USB drive and the device mounts it, the code now restores the previous on-screen activity before running the requested action. It also swaps a generic message screen for a proper error screen when USB storage fails, and removes an unnecessary short delay after an earlier error. There is no clear security vulnerability being patched here; it reads as a UI polish and robustness improvement.

Lower-priorityusb: avoid stdio overhead and buffering when reading ota databy Jon Griffiths · acac6fa5 · Oct 23, 2025 · 1 fileMessage 50 · ThinInformational 16Details
Commit message · Jon Griffiths

usb: avoid stdio overhead and buffering when reading ota data

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

This commit changes how a Blockstream Jade hardware wallet reads firmware update files from USB storage. It switches from using standard C file reading (fopen/fread/fclose) to lower-level Unix file reading (open/read/close). The stated goal is to reduce memory overhead and buffering during over-the-air (OTA) firmware updates. There is no direct evidence in the commit that this fixes a security vulnerability; it appears to be a performance or robustness improvement.

Lower-priorityci: fix dev config file referencesby Jon Griffiths · 70664e4c · Oct 23, 2025 · 1 fileMessage 57 · ThinInformational 15Details
Commit message · Jon Griffiths

ci: fix dev config file references

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

This is a one-line fix to a GitLab CI configuration file. It changes the path used to copy a default developer build configuration file so the CI pipeline can find the correct file. There is no indication this affects the security of the Jade firmware or user funds.

Lower-priorityusb: refactor the ota data loopby Jon Griffiths · e260f656 · Oct 23, 2025 · 1 fileMessage 68 · AdequateLow 31Details
Commit message · Jon Griffiths

usb: refactor the ota data loop

- Allow parallelism by waiting on the previous data packet not the current one
- Handle scenarios where the ota process stops responding to our messages
- Clean up error handling to simplify the loop logic.

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

This commit refactors the code that handles firmware updates over USB on the Blockstream Jade hardware wallet. The main goal is to make the update process more robust: it now waits for replies from the update process in a more sensible order, adds a timeout so the device doesn't get stuck forever if the update process stops responding, and cleans up error handling. There is no direct evidence in the commit that this fixes a specific security vulnerability, but it does remove risky behaviors like infinite waits and improves reliability during a sensitive operation (firmware updates).

Lower-priorityusb: use a mutex for usb state context reading and writingby Jon Griffiths · 9764cda8 · Oct 23, 2025 · 1 fileMessage 73 · AdequateLow 31Details
Commit message · Jon Griffiths

usb: use a mutex for usb state context reading and writing

This ensures we don't perform dirty reads of the usb state.

Also wait up to 5 seconds before prompting the user to insert a
USB storage device.

73/100 · AdequateMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context
AI analysis · Low 31/100

This commit fixes a race condition in the way Blockstream Jade handles USB storage state. Previously, the device could read the USB storage state while it was being updated by another task (a 'dirty read'), which could lead to incorrect decisions such as trying to use a USB drive before it was fully mounted, or missing an error. The fix introduces a mutex (a locking mechanism) so that reads and writes of the USB state cannot happen at the same time. It also increases the wait time before prompting the user to insert a USB device from about 3 seconds to 5 seconds.