BB
← All projectsBitBox

BitBox02 firmware

Firmware and bootloader for BitBox02 signing devices.

BitcoinHardware walletsNormal
Repository coverage

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

193security candidates127second-pass queue338AI analyses
25commits · 30 days
47commits · 60 days
312commits · 180 days
647commits · 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.

59/100 average clarity
65Strong · 80–100
281Adequate · 60–79
230Thin · 40–59
71Opaque · 0–39
23security 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 Bencun390117194258
benma's agent892855162
Niklas Dusenlund1112955059
cedwies1257063
Tomas Vrba947074
Cedric Wiese1239049
Jad814062
thisconnect211072
benma211074
Niklas111035
Yasser Aziza111070
Patrick Steiger111045
Analysis record

Published AI watches

Last scanned 48 minutes ago

Moderate 59 AI analysisMessage 50 · Thin
BB BitBoxBitBox02 firmware BitcoinHardware wallets

Merge remote-tracking branch 'agent/benma-agent/validate-backup-seed-length'

This commit adds a safety check to the BitBox02 hardware wallet's backup loading code. It now rejects backup files that claim to contain a 'seed' longer than 32 bytes. Without this check, a tampered or malformed backup could potentially ca…

Added input validation on deserialized seed_length fieldBounds check prevents oversized seed length (>32 bytes) from being acceptedNew unit test covers malformed backup with seed_length mismatch
f6d2942cby Marko Bencun+34−01 file
No security note in commit
Low 44 AI analysisMessage 50 · Thin
BB BitBoxBitBox02 firmware BitcoinHardware wallets

Merge remote-tracking branch 'agent/benma-agent/reject-oversized-policy-keys'

This commit adds a length check before showing a Bitcoin policy key on the BitBox02 device screen. Previously, an extremely long key string could be displayed or processed without a size limit. The fix rejects keys whose on-screen text exc…

Input size limit added before UI confirmationNew unit test for boundary condition (MAX_CONFIRM_BODY_SIZE and MAX_CONFIRM_BODY_SIZE + 1)Potential UI truncation or buffer issue mitigated for policy key display
1e674dfcby Marko Bencun+43−01 file
No security note in commit
Moderate 60 AI analysisMessage 90 · Strong
BB BitBoxBitBox02 firmware BitcoinHardware wallets

backup: validate decoded seed length

This update fixes a bug in how the BitBox02 hardware wallet reads backup files from an SD card. A tampered backup file could claim to contain a seed longer than the 32-byte limit, which previously caused the device to panic (crash) when li…

Out-of-bounds/panic condition in backup parsingMissing input validation on decoded protobuf fieldSD-card backup file could be attacker-controlled
80baf1eeby benma's agent+34−01 file
Vendor flagged security relevance
Low 44 AI analysisMessage 78 · Adequate
BB BitBoxBitBox02 firmware BitcoinHardware wallets

btc: reject oversized policy keys

This commit fixes a user-interface safety issue in the BitBox02 hardware wallet's Bitcoin multi-signature policy registration. Previously, a very long policy key could be approved by the user even though the device could not display the fu…

Input validation added to enforce UI display limitPrevents registration of keys that cannot be fully displayedBoundary test added at MAX_CONFIRM_BODY_SIZE and MAX_CONFIRM_BODY_SIZE+1
203bb0aaby benma's agent+43−01 file
Vendor flagged security relevance
Informational 15 AI analysisMessage 60 · Adequate
BB BitBoxBitBox02 firmware BitcoinHardware wallets

bb03 ui: replace long touch with slide to confirm

This commit changes how users confirm sensitive actions on the BitBox03 hardware wallet. It replaces a 'hold/long-press to confirm' button with a 'slide to confirm' gesture, similar to the swipe gestures used on many smartphone lock screen…

cc6ae75dby Jad+40−781 file
No security note in commit
Low 28 AI analysisMessage 68 · Adequate
BB BitBoxBitBox02 firmware BitcoinHardware wallets

bb03 UI: slide to confirm

This commit adds a new 'slide to confirm' user-interface control to the BitBox03 hardware wallet. It is a deliberate UX/security feature for high-risk actions (like approving transactions), replacing a simple tap with a drag gesture. The c…

New high-stakes confirmation gesture (slide instead of tap)Input hardening: per-sample advance cap, off-track rejection, non-pointer rejectionSnap-back behavior on incomplete slides to prevent accidental confirmation
30a68c8dby Jad+3076−111 files
No security note in commit
Informational 11 AI analysisMessage 28 · Opaque
BB BitBoxBitBox02 firmware BitcoinHardware wallets

u2f: fix refresh screen

This commit fixes a UI cleanup bug in the BitBox02 hardware wallet's U2F (Universal 2nd Factor) feature. Previously, a 'Refresh webpage' screen could be destroyed without clearing the pointer that tracked it, potentially leaving a dangling…

dangling-pointer mitigationuse-after-free preventionfirmware UI state cleanup
890f4ce3by benma's agent+17−11 file
No security note in commit
Low 27 AI analysisMessage 28 · Opaque
BB BitBoxBitBox02 firmware BitcoinHardware wallets

u2f: fix nudge screen

This commit fixes how a small on-screen reminder (the 'nudge screen') for U2F is created, tracked, and cleaned up. Before the fix, the code could lose track of the reminder screen or mishandle its removal, which might cause display glitche…

Use-after-free / dangling-pointer risk: global _nudge_label pointer could outlive the component it referencesUI state inconsistency: previous callback set _nudge_label = NULL on screen pop, but component cleanup may occur later or not at allMemory management fix: custom cleanup wrapper now synchronizes global pointer with component lifetime
931e75d6by benma's agent+22−71 file
No security note in commit
Low 42 AI analysisMessage 58 · Thin
BB BitBoxBitBox02 firmware BitcoinHardware wallets

Fix GroundedCell result lifetime

This commit fixes a bug in the U2F confirmation workflow where the firmware could read a result from memory that had already been cleared, potentially giving an incorrect success/failure answer. The fix simply reads the result before wipin…

use-after-clear / stale reference in task stateincorrect result lifetime orderingU2F confirmation workflow
dcd408f9by benma's agent+1−11 file
No security note in commit
Low 39 AI analysisMessage 73 · Adequate
BB BitBoxBitBox02 firmware BitcoinHardware wallets

rust: initialize C output buffers

This commit fixes a class of low-level memory-safety bugs where Rust code was given buffers containing uninitialized bytes. Rust's rules require every byte of a slice to be initialized, even if the function will overwrite them. Passing uni…

Undefined behavior at C/Rust FFI due to uninitialized buffers being treated as Rust slicesPotential optimizer-dependent behavior from violating Rust slice initialization rulesHardening of cryptographic output paths (SHA-256, HMAC-SHA256, HMAC-SHA512)
511018eaby benma's agent+52−2713 files
Vendor flagged security relevance
Moderate 60 AI analysisMessage 68 · Adequate
BB BitBoxBitBox02 firmware BitcoinHardware wallets

factorysetup: validate RTT message length

This commit fixes a bug in the BitBox02 factory setup tool that receives debug messages over SEGGER RTT. Previously, if a message said it contained more bytes than were actually received, the code would copy whatever leftover data happened…

Copy of uninitialized stack data into command buffer (information disclosure / undefined behavior)Missing length validation against actual bytes receivedFactory-only code path (factorysetup), not normal user firmware operation
bb882fc0by benma's agent+5−01 file
Vendor flagged security relevance
Low 42 AI analysisMessage 50 · Thin
BB BitBoxBitBox02 firmware BitcoinHardware wallets

memory: initialize BLE random buffer

This commit fixes a minor but real security hygiene issue in the BitBox02 Plus hardware wallet. Before the patch, a 32-byte buffer meant to hold freshly generated random bytes for Bluetooth Low Energy (BLE) pairing security was not initial…

Uninitialized cryptographic buffer in security-critical reset routineBLE identity key (IRK) and identity address derivation contextDefense-in-depth initialization of random material
135bb8baby benma's agent+1−11 file
No security note in commit
High 74 AI analysisMessage 78 · Adequate
BB BitBoxBitBox02 firmware BitcoinHardware wallets

eth: limit EIP-712 recursion depth

This commit adds a hard limit on how deeply nested Ethereum typed-message (EIP-712) structures can be when the BitBox02 hardware wallet signs them. Without the limit, an attacker could craft a message type that refers to itself over and ov…

Adds explicit recursion-depth cap to attacker-controlled input parsingPre-validates schema roots before host callbacks or user confirmationProtects against stack exhaustion / denial-of-service from deeply nested EIP-712 types
4ccadcc0by benma's agent+196−451 file
No security note in commit
Moderate 59 AI analysisMessage 78 · Adequate
BB BitBoxBitBox02 firmware BitcoinHardware wallets

btc: limit Miniscript encoding depth

This commit adds a safety limit to how deeply nested a Bitcoin policy (a set of spending rules) can be before the BitBox02 hardware wallet will reject it. Without such a limit, an attacker could craft an unusually deep policy that causes t…

Adds explicit depth bound to prevent recursive stack exhaustionApplies to both WSH and Taproot (TR) policy parsing pathsIncludes boundary and regression-style tests for deep policies
82346eebby benma's agent+109−01 file
No security note in commit
Informational 15 AI analysisMessage 50 · Thin
BB BitBoxBitBox02 firmware BitcoinHardware wallets

py: extract bootloader connection

This commit is a minor code cleanup in a Python helper script. It moves existing bootloader connection logic into a small nested helper function to satisfy a style checker (pylint's limit on the number of return statements). No behavior ch…

886113d0by benma's agent+10−61 file
No security note in commit
Informational 15 AI analysisMessage 43 · Thin
BB BitBoxBitBox02 firmware BitcoinHardware wallets

prepare v9.26.5

This commit is a routine release bookkeeping change. It updates the version number from v9.27.0 to v9.26.5 and reorganizes the changelog so that two bug fixes are listed under the new v9.26.5 release section instead of 'Unreleased'. The ac…

51ce24e6by benma's agent+5−22 files
No security note in commit
Low 30 AI analysisMessage 68 · Adequate
BB BitBoxBitBox02 firmware BitcoinHardware wallets

api: disable BitBoxSync by default

This commit turns off a feature called BitBoxSync by default. Unless a developer explicitly enables it during build, any request to use BitBoxSync will now receive a standard 'disabled' error. The change is framed as temporary while API ch…

Feature-gates an API that was previously reachable by defaultReturns Error::Disabled for requests to the gated APICommit message describes the change as temporary pending API changes
93d36fc8by benma's agent+7−02 files
No security note in commit
Low 42 AI analysisMessage 70 · Adequate
BB BitBoxBitBox02 firmware BitcoinHardware wallets

rust: bound executor queue

This commit replaces an unbounded task queue inside the BitBox02 firmware's Rust executor with a fixed 16-slot ring buffer. It also adds a hard limit of 16 active tasks and protects queue access with critical sections so interrupt-driven c…

Replaced unbounded queue with fixed-capacity ring buffer to prevent memory exhaustionRemoved allocation from scheduling/wake path, including interrupt contextAdded critical-section synchronization between wakers and main-loop executor
b99e200aby benma's agent+186−285 files
No security note in commit
Moderate 57 AI analysisMessage 68 · Adequate
BB BitBoxBitBox02 firmware BitcoinHardware wallets

rust: use static no-op waker

This commit replaces a custom-built notification helper (a 'waker') inside the BitBox02 firmware's Rust code with a built-in, memory-safe no-op version. The old helper used heap memory and reference counting (Arc), which could be freed by …

Eliminates heap-allocated Arc in waker constructionRemoves custom RawWakerVTable with unsafe clone/wake/drop operationsPrevents ISR callbacks from freeing Arc while heap allocator is active
5be42f61by benma's agent+2−523 files
Vendor flagged security relevance
Moderate 59 AI analysisMessage 68 · Adequate
BB BitBoxBitBox02 firmware BitcoinHardware wallets

usb: block HWW during U2F workflows

This commit fixes a concurrency bug in the BitBox02 hardware wallet's USB handling. When a U2F (two-factor authentication) workflow is still running on the device's screen, a new hardware wallet request could previously start and reset or …

Concurrency/lifetime bug between HWW and U2F USB endpointsUse-after-free or invalidation risk for live U2F UI objectsSession reset/cancellation path could corrupt shared UI state
0014300bby benma's agent+114−05 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-priorityworkflow/unlock: add unit testby Marko Bencun · 17ceae13 · Oct 13, 2025 · 1 fileMessage 55 · ThinTriage 0Details
Commit message · Marko Bencun

workflow/unlock: add unit test

55/100 · ThinMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Mentions testing or verification! No meaningful explanatory body
Lower-priorityapi/backup: add unit test for creating a new backup when initialzedby Marko Bencun · 93771f63 · Oct 13, 2025 · 3 filesMessage 60 · AdequateTriage 0Details
Commit message · Marko Bencun

api/backup: add unit test for creating a new backup when initialzed

60/100 · AdequateMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Mentions testing or verification! No meaningful explanatory body
Lower-prioritykeystore: add timeout reset in keystore_encrypt_and_store_seedby Marko Bencun · c27afb79 · Oct 12, 2025 · 1 fileMessage 73 · AdequateTriage 0Details
Commit message · Marko Bencun

keystore: add timeout reset in keystore_encrypt_and_store_seed

The duration of this function can go over the 500ms timeout duration,
so we give more time so the create/restore API calls don't timeout.

73/100 · AdequateMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context
Lower-priorityapi/backup: yield to avoid timeoutby Marko Bencun · 89a8a6df · Oct 12, 2025 · 1 fileMessage 72 · AdequateTriage 0Details
Commit message · Marko Bencun

api/backup: yield to avoid timeout

Maybe not strictly needed, but to reduce the chance of comms timeout,
we yield after copy_seed.

72/100 · AdequateMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Provides an explanatory body✓ Explains rationale or failure mode
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.

Lower-priorityhal: make SD functions async and yieldingby Marko Bencun · f3eae636 · Oct 12, 2025 · 6 filesMessage 68 · AdequateTriage 0Details
Commit message · Marko Bencun

hal: make SD functions async and yielding

An SD operation resume clock, mount, does the operation, unmounts,
stops clock. This is a bit slow. In API calls like backup creation,
this happens 10+ times in a row, which can cause communication
timeouts.

We make all SD functions async. Instead of making all of them properly
async, for now we make all of them yield to the executor afterwards,
so the communication processing gets a chance to run and not cause a
timeout. In the future we could then swap the sdcard functions with
proper async ones.

68/100 · AdequateMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context
Lower-prioritycmake: CMake variable handling is a black boxby Niklas Dusenlund · ad17158f · Oct 12, 2025 · 2 filesMessage 45 · ThinTriage 0Details
Commit message · Niklas Dusenlund

cmake: CMake variable handling is a black box

45/100 · ThinMessage clarity
✓ Descriptive subject✓ Names a concrete action or component! No meaningful explanatory body
Why it was queued
documentation-only discount
Lower-prioritybluetooth: use hex literal for the allowed Bluetooth FW hashby Marko Bencun · a54cfd65 · Oct 12, 2025 · 2 filesMessage 50 · ThinTriage 0Details
Commit message · Marko Bencun

bluetooth: use hex literal for the allowed Bluetooth FW hash

50/100 · ThinMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component! No meaningful explanatory body
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.

Security candidaterust/keystore: make bip39 unlocking asyncby Marko Bencun · 1bd474ef · Oct 10, 2025 · 130 filesMessage 80 · StrongInformational 18Details
Commit message · Marko Bencun

rust/keystore: make bip39 unlocking async

This uses `to_seed_normalized_async(...).await` over
`to_seed_normalized(...)` in bip39 unlocking, propagating the
async/await keywords up the stack.

This commit by itself is not functional yet, as the unlock animation
is still timer-interrupt based, which leads to chaos. The next commit
converts the animation into an async task of its own, not depending on
interrupts.

The bip39 unlock loop is made to yield to the executor in each of the
2048 PBKDF2 stretch rounds. In the simulator however, we don't yield
and finish the computation in a blocking fashion like before, due to a
limitation of the simulator: it does not busy-loop the
mainloop (otherwise CPU would be at 100%), but only when there is an
incoming USB packet, so yielding in BIP39 would make unlocking in the
simulator *very* slow. Running the mainloop quicker in the simulator
does not work well: either CPU load is too high, or unlock is too slow.

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
secret or key materialauthentication path
AI analysis · Informational 18/100

This commit is a large internal refactoring of the BitBox02 firmware's BIP39 wallet-unlocking code. It converts the slow PBKDF2 key-stretching loop from a blocking (synchronous) operation into an asynchronous one, so the device can briefly pause each round to handle other tasks such as USB messages and screen animations. The commit also vendors the futures-core, futures-lite, and pin-project-lite Rust crates so the firmware can use async/await. The change is explicitly described by the authors as not yet fully functional on its own; a follow-up commit is needed to make the unlock animation work with the new async model. There is no direct evidence in the commit that this fixes or introduces a security vulnerability; it is primarily an architectural/performance change.

Security candidatevendor: add rust-bip39 depby Marko Bencun · dc6934fb · Oct 10, 2025 · 7 filesMessage 80 · StrongInformational 17Details
Commit message · Marko Bencun

vendor: add rust-bip39 dep

We use our fork that has two custom patches:
- fix bitcoin_hashes transitive dep version to avoid duplicates
- add async version of the function to derive a bip39 seed

This will be used to convert our BIP39 unlock to be an async
operation, not blocking the mainloop.

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
secret or key materialcryptography-sensitive path
AI analysis · Informational 17/100

This commit updates the BitBox02 firmware's vendored copy of a Rust library (rust-bip39) used to turn a recovery phrase into a cryptographic seed. The main change is adding an async (cooperative multitasking) version of the seed-derivation function so the device can briefly pause between heavy PBKDF2 rounds instead of blocking the main loop. It also moves the dependency from a personal fork to the BitBoxSwiss organization fork and adjusts a transitive dependency version. There is no direct security fix or vulnerability patch visible in this commit; it is a dependency/vendor refresh and async API addition.

Lower-priorityrust: Apply -Werror if -Dwarningsby Niklas Dusenlund · 62667d73 · Oct 9, 2025 · 1 fileMessage 60 · AdequateTriage 0Details
Commit message · Niklas Dusenlund

rust: Apply -Werror if -Dwarnings

If user enables -Dwarnings via RUSTFLAGS also enable -Werror for C code
compiled by cargo/build.rs.

60/100 · AdequateMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Provides an explanatory body
Lower-prioritycmake: Read RUSTFLAGS from environment and propagate correctlyby Niklas Dusenlund · 579a2ebd · Oct 9, 2025 · 3 filesMessage 50 · ThinTriage 0Details
Commit message · Niklas Dusenlund

cmake: Read RUSTFLAGS from environment and propagate correctly

50/100 · ThinMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component! No meaningful explanatory body
Why it was queued
documentation-only discount
Lower-prioritymock: Move wrap function to mocks from fakesby Niklas Dusenlund · 8d25a7e9 · Oct 9, 2025 · 3 filesMessage 45 · ThinTriage 0Details
Commit message · Niklas Dusenlund

mock: Move wrap function to mocks from fakes

45/100 · ThinMessage clarity
✓ Descriptive subject✓ Names a concrete action or component! No meaningful explanatory body
Security candidatekeystore: fewer securechip calls when checking passwordby Marko Bencun · a4d8f413 · Oct 9, 2025 · 3 filesMessage 78 · AdequateLow 25Details
Commit message · Marko Bencun

keystore: fewer securechip calls when checking password

The sanity check to see if the seed has changed does not need a
securechip operation, it can use the retained seed hash instead, same
as `unlock_bip39()`. This reduces the number of securechip operations
needed to do a password check, which reduces the risk of running into
the Optiga throttling security mechanism.

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
secret or key material
AI analysis · Low 25/100

This commit is a hardening improvement, not a fix for an active vulnerability. It reduces how often the BitBox02 hardware wallet talks to its secure chip (the Optiga) when checking a password. Previously, an extra secure-chip call was made to fetch and compare the seed; now the device compares a locally retained hash instead. This lowers the chance of hitting the secure chip's throttling/lockout counter during normal use, which could otherwise make the device temporarily unusable or even require reset. The change does not introduce a known exploit path.

Lower-prioritysimulator: shutdown connectionby Niklas Dusenlund · 4b8838a2 · Oct 8, 2025 · 2 filesMessage 70 · AdequateTriage 0Details
Commit message · Niklas Dusenlund

simulator: shutdown connection

TCP is fun. If the server initiates the closing of the TCP connection
the socket needs to stay alive for some time according to the protocol
so that out-of-order and delayed packets have a chance to arrive. When
the simulator gets shut down those packets doesn't matter. Luckily there
is a way around, by setting SO_LINGER on the socket the connection is
closed with a "RESET" instead and the socket is immediately released in
the OS.

This commit also switches from signal(2) to sigaction(2) so that we can
avoid setting SA_RESTART so that signals interrupt blocking syscalls
like read.

It also introduces support for "SIGHUP" that can be used to simply
disconnect the client.

70/100 · AdequateMessage clarity
✓ Descriptive subject✓ Provides detailed explanatory context✓ Explains rationale or failure mode
Security candidatejlink-scripts: reset before loadby Niklas Dusenlund · eb00f569 · Oct 7, 2025 · 2 filesMessage 68 · AdequateInformational 15Details
Commit message · Niklas Dusenlund

jlink-scripts: reset before load

When using the watchdog it became clear that one must reset the CPU
before loading a new FW. It behaved very strange with the old order of
things.

68/100 · AdequateMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context
Why it was queued
boot or update path
AI analysis · Informational 15/100

This commit changes the order of operations in two developer-only GDB scripts used with J-Link debuggers. Previously the scripts loaded new firmware onto the device and then reset the CPU; now they reset the CPU first and then load the firmware. The change is described as a reliability fix for odd behavior seen when the device's watchdog timer is enabled. It only affects how engineers flash firmware during development/debugging and does not change any firmware code, cryptography, or user-facing behavior.

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.

Lower-priorityapi/show_mnemonic: add unit testsby Marko Bencun · dc22ee52 · Oct 4, 2025 · 2 filesMessage 70 · AdequateTriage 0Details
Commit message · Marko Bencun

api/show_mnemonic: add unit tests

This also allows us to keep track of the number of secure chip
operations in all the scenarios.

70/100 · AdequateMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Provides an explanatory body✓ Mentions testing or verification
Lower-priorityhal: add show_and_confirm_mnemonic to HALby Marko Bencun · d7cfe68c · Oct 4, 2025 · 5 filesMessage 78 · AdequateTriage 0Details
Commit message · Marko Bencun

hal: add show_and_confirm_mnemonic to HAL

The default implementation is in terms of other HAL/UI functions. For
unit tests (e.g. in show_mnemonic.rs or bip85.rs), it is useful to be
able to skip over the implementation details, so the tests don't have
to mock selecting the right words in the quiz.

78/100 · AdequateMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context✓ Mentions testing or verification
Lower-priorityworkflows: use HAL for showing mnemonic and mnemonic quizby Marko Bencun · d67b75c4 · Oct 2, 2025 · 4 filesMessage 83 · StrongTriage 0Details
Commit message · Marko Bencun

workflows: use HAL for showing mnemonic and mnemonic quiz

`show_and_confirm_mnemonic(hal: ...)` did not use the HAL for all UI:
show_mnemonic and confirm_mnemonic directly used the BitBox02 menu
workflow without going through HAL. Can't use `hal().ui().menu(...)`,
becaus:

- these functions bolt a cancel prompt on top
- show_mnemonic is not a normal menu where one can pick an entry, it's
just a scroll-through for displaying the mnemonic

This should make it possible to mock/fake/test the mneomnic workflow
functions, and provide different implementations for them in future
BitBox hardware.

83/100 · StrongMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context✓ Mentions testing or verification
Lower-prioritykeyboard-switch: Force top locationby Niklas Dusenlund · 69f124b2 · Oct 1, 2025 · 4 filesMessage 68 · AdequateTriage 0Details
Commit message · Niklas Dusenlund

keyboard-switch: Force top location

The keyboard switcher is only used from the top so remove the option to
create it in the bottom location. This simplifies the event hander.

68/100 · AdequateMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context
Lower-priorityevents: Remove unique events for top/bottomby Niklas Dusenlund · 65f5b523 · Oct 1, 2025 · 12 filesMessage 60 · AdequateTriage 0Details
Commit message · Niklas Dusenlund

events: Remove unique events for top/bottom

Refactor code to get rid of more events. Inline the event slider data
into the event.

60/100 · AdequateMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Provides an explanatory body
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.