BB
← All projectsBitBox

BitBox02 firmware

Firmware and bootloader for BitBox02 signing devices.

BitcoinHardware walletsNormal
Repository coverage

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

239security candidates161second-pass queue727AI analyses
72commits · 30 days
144commits · 60 days
316commits · 180 days
697commits · 365 days
Backfill bands
Aug 5 → Feb 6335 seen28 candidatesComplete
Feb 6 → Jun 6265 seen19 candidatesComplete
Jun 6 → Jul 619 seen5 candidatesComplete
Jul 6 → Aug 526 seen3 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.

58/100 average clarity
69Strong · 80–100
325Adequate · 60–79
305Thin · 40–59
88Opaque · 0–39
26security 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.
Marko Bencun452133424357
benma's agent11240106164
Niklas Dusenlund15543134057
cedwies12512063
Tomas Vrba10410071
Cedric Wiese12312049
Yasser Aziza333070
Jad14210060
Sebastian Sutter222050
thisconnect212072
benma212074
Niklas111035
Analysis record

Published AI watches

Last scanned 11 minutes ago

Informational 15 AI analysisMessage 58 · Thin
BB BitBoxBitBox02 firmware BitcoinHardware wallets

Merge commit 'refs/pull/2123/head' of https://github.com/BitBoxSwiss/bitbox02-firmware

This commit only adds two digital signature files for an already-released firmware version (v9.25.0). These are third-party reproducible-build assertions by a user named 'yaziza', not changes to the firmware source code. There is no code c…

b8bbbb64by Marko Bencun+0−02 files
No security note in commit
Informational 0 AI analysisMessage 58 · Thin
BB BitBoxBitBox02 firmware BitcoinHardware wallets

Merge commit 'refs/pull/2124/head' of https://github.com/BitBoxSwiss/bitbox02-firmware

This commit only adds two digital signature files for an already-released firmware version (v9.27.1). These are release attestation signatures from a contributor named 'yaziza'. There is no code change, no firmware change, and nothing in t…

392ac2ffby Marko Bencun+0−02 files
No security note in commit
Informational 12 AI analysisMessage 45 · Thin
BB BitBoxBitBox02 firmware BitcoinHardware wallets

Merge branch 'nickez/bb02-finalize-elf'

This commit is a build-system refactor that unifies how firmware image headers are generated for the BitBox02 and BitBox03. It replaces a device-specific Python script and a C header placeholder with a shared Python tool and JSON manifests…

New input validation in image_header.py for magic, flags, product_id, monotonic_version, marketing_version, image length, and zeroed signature slotsRust parsing now validates slot length, header length alignment, and image length bounds before deriving code lengthRemoval of prepare-stage1-unsigned path reduces attack surface in build tooling
810d3e87by Niklas Dusenlund+573−14413 files
No security note in commit
Informational 12 AI analysisMessage 78 · Adequate
BB BitBoxBitBox02 firmware BitcoinHardware wallets

bootloader: use shared stage1 header tool

This commit is a build-system refactoring for the BitBox02 bootloader. It replaces a C-language placeholder for the bootloader's stage1 header with a Python tool that generates the same header from JSON manifests during the build. The old …

5b14742fby Niklas Dusenlund+52−1105 files
No security note in commit
Low 27 AI analysisMessage 83 · Strong
BB BitBoxBitBox02 firmware BitcoinHardware wallets

scripts: unify the BitBox image format

This commit refactors the firmware image header format used by BitBox hardware wallets so that BitBox02 and BitBox03 share a single 1024-byte layout. It adds new metadata fields (product ID, version numbers, signature slots) and switches t…

Changed binary image header format and parserAdded checked integer conversions for 64-bit image lengthAdded bounds checks on slot length, header length, and image length in Rust loader
9403e6feby Niklas Dusenlund+524−376 files
No security note in commit
Informational 15 AI analysisMessage 68 · Adequate
BB BitBoxBitBox02 firmware BitcoinHardware wallets

scripts: rename image header tool

This commit simply renames a build script from bitbox03_image_header.py to image_header.py and updates all references in the Makefile and Rust build files. The script's contents and behavior are unchanged. There is no security issue here.

29d6720aby Niklas Dusenlund+7−75 files
No security note in commit
Informational 15 AI analysisMessage 70 · Adequate
BB BitBoxBitBox02 firmware BitcoinHardware wallets

Firmware v9.27.1 verification (yaziza)

This commit adds two digital signature files for BitBox02 firmware version 9.27.1. These signatures are a third-party reproducible-build verification (called an 'assertion') created by an independent contributor named yaziza. The commit do…

6d2e6955by Yasser Aziza+0−02 files
No security note in commit
Informational 15 AI analysisMessage 70 · Adequate
BB BitBoxBitBox02 firmware BitcoinHardware wallets

Firmware v9.25.0 verification

This commit adds two digital signature files to the repository. They are third-party reproducible-build attestations (assertions) for the already-released BitBox02 firmware version 9.25.0. The commit does not change any firmware source cod…

b454a627by Yasser Aziza+0−02 files
No security note in commit
Low 34 AI analysisMessage 50 · Thin
BB BitBoxBitBox02 firmware BitcoinHardware wallets

Merge remote-tracking branch 'agent/benma-agent/hww-start-session'

This commit adds a new 'session reset' command to the BitBox02 hardware wallet's USB protocol. It lets the host computer cleanly reset the device connection if a previous operation was interrupted, instead of leaving the device stuck mid-t…

New USB control command added to host-wallet protocolReset path cancels async task, resets Noise state, unlocks USB processing, and clears output queueU2F UI ownership check prevents reset from interrupting an active U2F workflow
04302490by Marko Bencun+485−1713 files
No security note in commit
Informational 15 AI analysisMessage 78 · Adequate
BB BitBoxBitBox02 firmware BitcoinHardware wallets

py: make session reset an API setup helper

This is a routine Python code refactor. It moves an existing 'reset session' command from one internal class to another and adds a version check so older firmware simply skips it. There is no security bug being fixed here; it is purely org…

50a9e76aby benma's agent+28−163 files
No security note in commit
Moderate 62 AI analysisMessage 78 · Adequate
BB BitBoxBitBox02 firmware BitcoinHardware wallets

hww: reset sessions on host reconnect

This commit fixes a bug in the BitBox02 hardware wallet where unplugging the USB cable at the wrong moment could leave a half-finished operation running. If the device stayed powered and a new host reconnected, the new host's first message…

Fixes cross-session state confusion on USB reconnectAdds explicit session reset command to cancel stale async workflowsResets Noise cryptographic session to prevent old-key encrypted responses
6679936fby benma's agent+473−1712 files
Vendor flagged security relevance
Informational 17 AI analysisMessage 58 · Thin
BB BitBoxBitBox02 firmware BitcoinHardware wallets

Merge commit 'refs/pull/2073/head' of https://github.com/BitBoxSwiss/bitbox02-firmware

This commit adds a new recovery-word entry screen for the upcoming BitBox03 hardware wallet. It is a large feature patch: it introduces a dedicated BIP39 wordlist keyboard, a new recovery-words review screen, and changes how the device han…

New UI workflow distinguishes 'back' from 'cancel' during seed restoration, reducing accidental aborts.Cancel actions still require an explicit confirmation prompt before the restore is abandoned.Wordlist keyboard disables keys that cannot lead to a valid BIP39 word, preventing invalid-word compositions at the widget level.
6b04e006by Marko Bencun+7010−24621 files
No security note in commit
Low 47 AI analysisMessage 50 · Thin
BB BitBoxBitBox02 firmware BitcoinHardware wallets

Merge remote-tracking branch 'agent/benma-agent/show-erc20-contract'

This commit improves the BitBox02 hardware wallet's Ethereum token-approval screen. When a user signs an ERC20 token transfer, the device now also shows the token's smart-contract address if the token symbol is ambiguous (the same ticker, …

UI hardening: adds contract-address confirmation for ERC20 tokens with ambiguous or unknown symbolsRegistry validation: rejects payment requests for tokens not present in the firmware's ERC20 registryBuild-time ambiguity detection: generates a sorted list of units shared by multiple contracts
410df562by Marko Bencun+203−123 files
No security note in commit
Low 26 AI analysisMessage 50 · Thin
BB BitBoxBitBox02 firmware BitcoinHardware wallets

Merge remote-tracking branch 'agent/benma-agent/bootloader-descriptor-compat'

This commit relaxes a version check in the BitBox02 bootloader upgrade code. Previously, the firmware installer required that a stage0 bootloader descriptor's version exactly matched the currently expected image version. Now it accepts des…

Strict version equality check removed from bootloader descriptor parsingChange located in bootloader upgrade / firmware installer verification pathNo bounds, length, or pointer validation changes observed
6dccfd24by Marko Bencun+19−72 files
No security note in commit
Moderate 53 AI analysisMessage 45 · Thin
BB BitBoxBitBox02 firmware BitcoinHardware wallets

Merge branch 'nickez/bb02-utf8-safe'

This commit hardens the BitBox02 firmware so it stops trusting that incoming text strings are valid UTF-8 or plain ASCII. It replaces risky C string copies with length-checked, UTF-8-aware helpers, rejects non-ASCII characters at UI bounda…

Replaced snprintf-based string copies with length-bounded UTF-8-aware copiesAdded explicit length parameter to memory_set_device_name and reject embedded/invalid nullsAdded printable-ASCII enforcement at Rust UI boundary before C rendering
0bbdf6f0by Niklas Dusenlund+338−9625 files
No security note in commit
Low 41 AI analysisMessage 28 · Opaque
BB BitBoxBitBox02 firmware BitcoinHardware wallets

Merge branch 'benma/ub'

This commit fixes a coding guideline violation in the BitBox02 factory setup code. A 32-byte buffer that receives output from a Rust function was not initialized to zeroes before use. The accompanying documentation now explicitly requires …

Uninitialized stack buffer used as output buffer for Rust/C FFI callDefensive zero-initialization added to prevent use of stale stack data on error or partial write pathsProject coding guidelines updated to mandate zero-initialization for rust_util_bytes_mut buffers
8a6fd97bby Marko Bencun+3−12 files
No security note in commit
Low 35 AI analysisMessage 68 · Adequate
BB BitBoxBitBox02 firmware BitcoinHardware wallets

oled: hold display in reset during startup

This commit fixes a display behavior issue during startup of the BitBox02 hardware wallet. Previously, when the device turned on, the screen's reset pin was left in a state that could allow leftover images or text from an earlier session t…

Information disclosure via residual display content during bootOLED reset pin sequencing hardeningDefense against stale/misleading UI state before verified firmware initializes display
cdb27835by Niklas Dusenlund+2−11 file
Vendor flagged security relevance
Informational 18 AI analysisMessage 50 · Thin
BB BitBoxBitBox02 firmware BitcoinHardware wallets

Merge remote-tracking branch 'agent/benma-agent/factorysetup-trim-unused'

This commit trims the BitBox02 factory-setup firmware image by switching stored root attestation public keys from 65-byte uncompressed to 33-byte compressed secp256k1 keys, and by using a smaller static secp256k1 verification context inste…

Change in trusted public-key table format and derivation logicSwitch to static/no-precomp secp256k1 verification contextAddition of secp256k1 self-test at boot
554a0558by Marko Bencun+457−5647 files
No security note in commit
Low 37 AI analysisMessage 50 · Thin
BB BitBoxBitBox02 firmware BitcoinHardware wallets

Merge remote-tracking branch 'agent/benma-agent/validate-py-antiklepto-signatures'

This commit adds extra safety checks in the BitBox02 Python library for ECDSA signatures used in Bitcoin and Ethereum signing. It now validates that signatures have the correct length, use valid numbers, and use the safer low-S form. It al…

Defensive validation added for ECDSA signature format and low-S encodingRecovery ID range validation added for recoverable signaturesAnti-Klepto verification now rejects malformed/malleable signatures before nonce verification
0d1a7997by Marko Bencun+152−65 files
Vendor flagged security relevance
Informational 19 AI analysisMessage 50 · Thin
BB BitBoxBitBox02 firmware BitcoinHardware wallets

Merge remote-tracking branch 'agent/benma-agent/scroll-payment-request-memo-name'

This commit tweaks how the BitBox02 hardware wallet displays a payment-request memo on screen. It changes the label from 'Memo from\n\nMerchant' to 'Memo from: Merchant' and makes the screen scrollable so long merchant names don't get cut …

No security-relevant signal in commit message or diffUI/UX change only: text formatting and scrollabilityNo memory-safety, cryptographic, or authorization changes observed
be375664by Marko Bencun+115−66 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.

AI review queuedbitbox02-sys: sort allowlistsby Niklas Dusenlund · ec23546d · Nov 13, 2025 · 1 fileMessage 35 · OpaqueInformational 15Details
Commit message · Niklas Dusenlund

bitbox02-sys: sort allowlists

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

This commit simply alphabetically sorts three lists of C function, variable, and type names that the Rust build process is allowed to reference. No names were added or removed, only reordered. It has no effect on device behavior or security.

AI review queuedkeystore: add get_remaining_unlock_attempts()by Marko Bencun · 9726a685 · Nov 13, 2025 · 2 filesMessage 35 · OpaqueInformational 15Details
Commit message · Marko Bencun

keystore: add get_remaining_unlock_attempts()

To simplify keystore_unlock() later.

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

This commit adds a small helper function that reports how many more wrong password attempts are allowed before the device wipes itself. It also removes a testing-only restriction so the underlying counter can be read in normal builds. There is no security fix or vulnerability here—just a code cleanup to simplify a later change.

AI review queuedkeystore: more consistent treatment of keystore_unlock errorsby Marko Bencun · a2500b84 · Nov 13, 2025 · 2 filesMessage 73 · AdequateModerate 59Details
Commit message · Marko Bencun

keystore: more consistent treatment of keystore_unlock errors

Before, the device would be reset right after the 10th wrong
password. However, if there was any other error during unlock (e.g. a
securechip error) that is not caused by a wrong password, the device
would not be reset immediately, but at the start of the next unlock
attempt.

This commit unifies all error treatment, leading to a device reset
right away.

The alternative is to decrement the counter on any error other than
incorrect password, but that would drastically change the behavior of
the unlock function, and we'd rather be conservative here.

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

This firmware update fixes a timing inconsistency in how the BitBox02 hardware wallet handles device-unlock failures. Previously, only a wrong password triggered an immediate device reset after 10 failed attempts, while other unlock errors (such as a secure-chip malfunction) delayed the reset until the next unlock attempt. Now any serious unlock error causes the reset right away, making behavior more predictable and preventing a window where a failing secure chip could leave the device in an ambiguous state.

AI review queuedkeystore: tighten hex literalsby benma's agent · a9963d80 · Nov 12, 2025 · 1 fileMessage 35 · OpaqueInformational 15Details
Commit message · benma's agent

keystore: tighten hex literals

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

This commit only changes test code in a Rust firmware file. It replaces runtime hex string decoding with a compile-time `hex!()` macro and removes unnecessary `.unwrap()` and `.try_into()` conversions. There is no change to production behavior, no security fix, and no vulnerability introduced.

AI review queuedwrapper.h: clang-formatby Marko Bencun · dda5af38 · Nov 12, 2025 · 1 fileMessage 28 · OpaqueInformational 15Details
Commit message · Marko Bencun

wrapper.h: clang-format

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 purely a code formatting change. It reorders two #include lines in a C header file so they are sorted alphabetically, matching the project's clang-format style. No functionality was changed, no security bug was fixed, and no new attack surface was introduced.

AI review queuedDX: Breakpoint in panicby Niklas Dusenlund · 3dd0ea25 · Nov 12, 2025 · 4 filesMessage 28 · OpaqueInformational 15Details
Commit message · Niklas Dusenlund

DX: Breakpoint in panic

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

This commit is a developer-experience (DX) improvement that adds a debug breakpoint instruction inside the firmware's Rust panic handler. When the firmware crashes, it will now halt at a breakpoint if a debugger is attached, making it easier for developers to inspect the crash. It does not change any security-sensitive behavior in normal operation and does not introduce a vulnerability.

AI review queuedworkflow/unlock: add unit test for failed passwordby Marko Bencun · 1010d2aa · Nov 10, 2025 · 1 fileMessage 83 · StrongInformational 15Details
Commit message · Marko Bencun

workflow/unlock: add unit test for failed password

Mainly to test that the number of remaining attempts is displayed -
other unit tests for unlocking exist in keystore.rs.

83/100 · StrongMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context✓ Mentions testing or verification
Why it was queued
second-pass: broader security terminology
AI analysis · Informational 15/100

This commit only adds a new unit test and refactors existing test code to use a different hex literal helper. It does not change any production firmware behavior. The new test verifies that when a wrong password is entered during device unlock, the user sees a 'Wrong password, 9 tries remain' message and the device stays locked. There is no security fix or vulnerability here.

AI review queuedformattingby Niklas Dusenlund · 25b878ee · Nov 6, 2025 · 1 fileMessage 0 · OpaqueInformational 15Details
Commit message · Niklas Dusenlund

formatting

0/100 · OpaqueMessage clarity
! Very short subject! Too few words to establish purpose! No meaningful explanatory body
Why it was queued
second-pass: opaque commit message
AI analysis · Informational 15/100

This commit only adds a single space after two type casts in the same C source file. It is a pure code-formatting change with no functional difference and no security relevance.

AI review queuedrust/tests: remove unneeded random::fake_reset callsby Marko Bencun · d3a42f23 · Nov 3, 2025 · 2 filesMessage 65 · AdequateInformational 15Details
Commit message · Marko Bencun

rust/tests: remove unneeded random::fake_reset calls

65/100 · AdequateMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Mentions testing or verification✓ Names security-relevant behavior explicitly! No meaningful explanatory body
Why it was queued
signing or wallet pathsecond-pass: security-sensitive path
AI analysis · Informational 15/100

This commit only removes unnecessary calls to a test helper named fake_reset() inside unit tests. It does not change any production code that runs on the actual BitBox02 device, so it cannot affect real users or introduce a security vulnerability.

AI review queuedrun clang-formatby Marko Bencun · 3f7d73da · Nov 3, 2025 · 1 fileMessage 28 · OpaqueInformational 15Details
Commit message · Marko Bencun

run clang-format

Somehow not caught by CI before.

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 only reformats three lines of C code using clang-format. It moves function arguments onto a single line instead of splitting them across two lines. No logic, behavior, or security properties of the code change.

AI review queuedbitbox02/keystore: map more errorsby Marko Bencun · 197c2bf6 · Nov 2, 2025 · 1 fileMessage 45 · ThinLow 43Details
Commit message · Marko Bencun

bitbox02/keystore: map more errors

Avoid panic.

45/100 · ThinMessage clarity
✓ Descriptive subject✓ Names a concrete action or component! No meaningful explanatory body
Why it was queued
second-pass: broader security terminology
AI analysis · Low 43/100

This commit fixes a programming bug where the firmware could crash with a panic if the secure keystore returned certain error codes that the Rust code did not know how to handle. The patch adds mappings for two newly introduced error conditions (decryption failures and a key-stretching failure for retained seed backup) so they are reported gracefully instead of crashing the device. A crash could cause denial of service or unexpected device behavior, but there is no direct evidence in the commit that it could be exploited to steal funds or bypass security.

AI review queuedrust/keystore: wrap is_locked() in bitbox02-rustby Marko Bencun · 15a71508 · Oct 30, 2025 · 8 filesMessage 68 · AdequateInformational 15Details
Commit message · Marko Bencun

rust/keystore: wrap is_locked() in bitbox02-rust

Original is renamed so the compiler can error if we missed one.

By moving all keystore calls to bitbox02_rust::keystore, we can more
easily replace the function bodies with native Rust
implementations (without wrapping C).

68/100 · AdequateMessage clarity
✓ 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 · Informational 15/100

This commit is a routine internal code reorganization. It moves the keystore's `is_locked()` check from a low-level C-binding module into a higher-level Rust wrapper, renaming the original function to `_is_locked()` so the compiler flags any leftover direct uses. There is no change to what the function does or to any security behavior.

AI review queuedrust/keystore: wrap secp256k1_nonce_commit() in bitbox02-rustby Marko Bencun · 8c7d3008 · Oct 30, 2025 · 7 filesMessage 73 · AdequateInformational 13Details
Commit message · Marko Bencun

rust/keystore: wrap secp256k1_nonce_commit() in bitbox02-rust

Original is renamed so the compiler can error if we missed one.

By moving all keystore calls to bitbox02_rust::keystore, we can more
easily replace the function bodies with native Rust
implementations (without wrapping C).

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 · Informational 13/100

This commit is a routine internal code reorganization in the BitBox02 firmware. It moves a cryptographic helper function, used in the anti-klepto signing protocol, from a low-level C-wrapping module into a higher-level Rust keystore module. The actual behavior of the function does not change; callers are simply updated to use the new location. There is no indication this fixes a security vulnerability.

AI review queuedrust/keystore: wrap secp256k1_sign() in bitbox02-rustby Marko Bencun · f69b98b8 · Oct 30, 2025 · 7 filesMessage 73 · AdequateInformational 15Details
Commit message · Marko Bencun

rust/keystore: wrap secp256k1_sign() in bitbox02-rust

Original is renamed so the compiler can error if we missed one.

By moving all keystore calls to bitbox02_rust::keystore, we can more
easily replace the function bodies with native Rust
implementations (without wrapping C).

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

This commit is a routine internal code reorganization. It moves the function that creates secp256k1 signatures from a low-level Rust-C binding module into a higher-level Rust keystore module, and renames the original function so the compiler catches any remaining callers. The actual signing behavior, cryptographic math, and security properties are unchanged.

AI review queuedrust/keystore: wrap lock() in bitbox02-rustby Marko Bencun · 2358be85 · Oct 30, 2025 · 16 filesMessage 68 · AdequateInformational 15Details
Commit message · Marko Bencun

rust/keystore: wrap lock() in bitbox02-rust

Original is renamed so the compiler can error if we missed one.

By moving all keystore calls to bitbox02_rust::keystore, we can more
easily replace the function bodies with native Rust
implementations (without wrapping C).

68/100 · AdequateMessage clarity
✓ 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 · Informational 15/100

This commit is a routine internal code reorganization. It moves the keystore lock() function call from a low-level C wrapper into a higher-level Rust module and renames the original function so the compiler can catch any missed references. There is no change to what the function does or to any security behavior of the device.

AI review queuedCHANGELOG: mark v9.24.0by Marko Bencun · 6b9aed4f · Oct 13, 2025 · 1 fileMessage 38 · OpaqueInformational 15Details
Commit message · Marko Bencun

CHANGELOG: mark v9.24.0

38/100 · OpaqueMessage clarity
✓ Subject identifies a change✓ Names a concrete action or component! 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 CHANGELOG.md file to add a new version heading (v9.24.0). It contains no code changes, no bug fixes, and no security-related content. It is a routine documentation/release-management edit.

AI review queuedsd: speedup sd_card_insertedby Marko Bencun · 396a4062 · Oct 12, 2025 · 1 fileMessage 35 · OpaqueInformational 12Details
Commit message · Marko Bencun

sd: speedup sd_card_inserted

Don't sleep as long.

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

This commit is a minor performance tweak to the function that checks whether an SD card is inserted. It reduces the wait time between status checks from 100 milliseconds to 5 milliseconds, while increasing the number of checks so the total maximum wait remains about one second. There is no security-relevant change here.

AI review queuedrust: add hex_lit depby Marko Bencun · b54f4214 · Oct 12, 2025 · 5 filesMessage 73 · AdequateInformational 15Details
Commit message · Marko Bencun

rust: add hex_lit dep

It's already in our vendor dir, and useful in tests to avoid
encoding/decoding hex at runtime, or to use ugly `b"\x..\x..\x.."`
literals. This commit changes a few instances for demo, but the idea
is that future tests can make use of it readily.

73/100 · AdequateMessage clarity
✓ Subject identifies a change✓ Provides detailed explanatory context✓ Explains rationale or failure mode✓ Mentions testing or verification
Why it was queued
signing or wallet pathsecond-pass: security-sensitive path
AI analysis · Informational 15/100

This commit only adds a new Rust helper library (hex_lit) to make test code easier to read. It replaces runtime hex decoding and ugly byte-string literals with compile-time hex macros in unit tests. There is no change to production firmware behavior, no security fix, and no vulnerability introduced.

AI review queuedui: Remove noopby Niklas Dusenlund · 0a9be883 · Oct 6, 2025 · 15 filesMessage 28 · OpaqueInformational 15Details
Commit message · Niklas Dusenlund

ui: Remove noop

`.on_event` is allowed to be NULL

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. It removes a placeholder 'do nothing' function called ui_util_on_event_noop and replaces its uses with NULL, because the user-interface system already allows the on_event handler to be NULL. There is no security-relevant change.

AI review queuedevents: Remove events unrelated to slidersby Niklas Dusenlund · 445a3925 · Oct 1, 2025 · 18 filesMessage 68 · AdequateLow 32Details
Commit message · Niklas Dusenlund

events: Remove events unrelated to sliders

Using events for communication between components in the same screen
seem to make things racy, simplify/sequentialize by using callbacks
instead.

Keep events only for external events like slider inputs.

68/100 · AdequateMessage clarity
✓ 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 32/100

This commit rewrites how on-screen buttons and gestures in the BitBox02 hardware wallet talk to each other. Previously, pressing a button or completing a gesture posted a global 'event' that other parts of the screen had to listen for, which the developer describes as 'racy.' The change replaces that with direct function callbacks, so a button press immediately calls the intended action in a predictable order. This is a code-quality and robustness improvement rather than a fix for a known exploitable bug, but race-prone event systems can in principle lead to wrong buttons being acted upon or actions happening twice.

AI review queuedui: Remove componentsby Niklas Dusenlund · f11ece5e · Oct 1, 2025 · 8 filesMessage 43 · ThinInformational 15Details
Commit message · Niklas Dusenlund

ui: Remove components

* entry_screen isn't used
* confirm_button was just a trivial wrapper

43/100 · ThinMessage clarity
✓ Subject identifies a change✓ Provides an explanatory body
Why it was queued
signing or wallet pathsecond-pass: security-sensitive path
AI analysis · Informational 15/100

This commit is a routine code cleanup: it removes two unused or trivial UI helper files (entry_screen and confirm_button) and inlines their simple behavior directly where needed. There is no security-relevant change, no bug fix, and no functional change to how the device handles sensitive actions like confirming transactions or entering passwords.

AI review queuedmaintenance: Rename "callback param" to "user data"by Niklas Dusenlund · 963dbf0e · Oct 1, 2025 · 11 filesMessage 65 · AdequateInformational 15Details
Commit message · Niklas Dusenlund

maintenance: Rename "callback param" to "user data"

"user data" is the conventional term for the user provided pointer that
is returned in a callback.

65/100 · AdequateMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Provides an explanatory body
Why it was queued
signing or wallet pathsecond-pass: security-sensitive path
AI analysis · Informational 15/100

This commit is a simple code cleanup: it renames variables and parameters from 'callback param' to 'user data' across several UI component files in the BitBox02 firmware. No behavior changes, bug fixes, or security fixes are present. It is purely a naming convention update to match standard terminology.

AI review queuedkeystore: reduce SC operations in the seed checkby Marko Bencun · 212bf399 · Sep 10, 2025 · 4 filesMessage 80 · StrongLow 29Details
Commit message · Marko Bencun

keystore: reduce SC operations in the seed check

verify_seed() after storing a seed currently re-stretches the
password, which needs 5 securechip events.

We can skip that because we still have access to the stretched
password.

If the check succeeds, but there was an error involving the password
or secure chip (e.g. the stretching result was corrupted the first
time), the consequence is that the user won't be able to unlock, but
the seed itself on the MCU, on the backup and retained (encrypted) in
seed is unaffected. That trade-off is good, because a failure
there (securechip returns no error but actually had a corruption)
should be exceedingly rare.

This effort is part of mitigating Optiga's throttling mechanism that
kicks in after 133 events - users can run into this by repeatedly
resetting/restoring).

80/100 · StrongMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context✓ Explains rationale or failure mode
Why it was queued
second-pass: broader security terminology
AI analysis · Low 29/100

This commit changes how the BitBox02 hardware wallet verifies a newly stored seed. Instead of re-stretching the user's password through the secure chip (which consumes several secure-chip operations), it reuses the already-stretched encryption key. This is a performance/reliability improvement to avoid hitting a secure-chip throttling limit after many device resets or restores. The commit itself is a defensive hardening change, not an obvious vulnerability fix, but it slightly changes the security assumptions around seed verification.

AI review queuedreduce number of secure chip security events when creating/restoringby Marko Bencun · f8c1614d · Sep 10, 2025 · 6 filesMessage 78 · AdequateLow 30Details
Commit message · Marko Bencun

reduce number of secure chip security events when creating/restoring

Before, `keystore_encrypt_and_store_seed()` (called when
creating/restoring a seed) would always be followed by
`keystore_unlock(<password>)` with the password the user just chose,
so unlock could never fail. The unlocking part costs many secure chip
operations (for stretching the password).

By making the first function already unlock the keystore, we can avoid
calling `keystore_unlock()`, reducing the number of secure chip events
by 5.

This effort is part of mitigating Optiga's throttling mechanism that
kicks in after 133 events - users can run into this by repeatedly
resetting/restoring).

78/100 · AdequateMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context✓ Names security-relevant behavior explicitly
Why it was queued
second-pass: broader security terminology
AI analysis · Low 30/100

This commit is a performance and reliability improvement, not a security vulnerability fix. It changes how a hardware wallet sets up a new wallet seed so that it performs fewer operations on the secure chip. Previously, after creating or restoring a seed, the software immediately unlocked the wallet with the same password, which wasted secure chip operations. Now the creation/restore step also unlocks the wallet, reducing secure chip events by 5. This helps avoid hitting the secure chip's throttling limit (133 events) when users repeatedly reset or restore their device.

AI review queuedxpubcache: typo in docstringby Marko Bencun · 1aa11698 · Sep 10, 2025 · 1 fileMessage 35 · OpaqueInformational 15Details
Commit message · Marko Bencun

xpubcache: typo in docstring

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

This commit fixes a single typo in a code comment (docstring). The example Bitcoin keypath was missing an apostrophe in one place (m/84/0'/0'/0/0 changed to m/84'/0'/0'/0/0). No actual program code was changed, so there is no functional or security impact.