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 4 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-prioritypip: fix editable imports for pip >= 25by cedwies · e832c581 · Nov 27, 2025 · 3 filesMessage 68 · AdequateTriage 0Details
Commit message · cedwies

pip: fix editable imports for pip >= 25

Pip versions >=25 changed editable install behavior per PEP 660, causing
relative imports like "from .bitbox02 import common" to resolve to the outer
init.py instead of the inner subpackage, breaking dev workflows.
Re-exporting symbols from the nested bitbox02 module fixes this resolution
issue while preserving the existing package structure and API for downstream
users.
This ensures pip install -e . works reliably without flattening.

68/100 · AdequateMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context
Lower-priorityadd securechip_model to securechip HALby benma's agent · fcb4f761 · Nov 27, 2025 · 2 filesMessage 45 · ThinTriage 0Details
Commit message · benma's agent

add securechip_model to securechip HAL

45/100 · ThinMessage clarity
✓ Descriptive subject✓ Names a concrete action or component! No meaningful explanatory body
Lower-priorityadd monotonic_increments_remaining to securechip HALby benma's agent · 64f15a2d · Nov 27, 2025 · 3 filesMessage 50 · ThinTriage 0Details
Commit message · benma's agent

add monotonic_increments_remaining to securechip HAL

50/100 · ThinMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component! No meaningful explanatory body
Security candidateadd attestation_sign to securechip HALby benma's agent · 28e8957b · Nov 27, 2025 · 3 filesMessage 45 · ThinInformational 15Details
Commit message · benma's agent

add attestation_sign to securechip HAL

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

This commit is a straightforward internal refactoring: it moves the device attestation signing function behind a hardware-abstraction-layer (HAL) interface so the code can be more easily tested. The actual cryptographic operation and the data it uses remain unchanged. There is no indication this fixes or introduces a security vulnerability.

Security candidateHAL/SecureChip: add kdf()by Marko Bencun · ef85ad35 · Nov 27, 2025 · 31 filesMessage 70 · AdequateLow 32Details
Commit message · Marko Bencun

HAL/SecureChip: add kdf()

Due to copy_seed and copy_bip39_seed needing kdf, a ton of functions
are infected by the HAL param, as so many of them transitively make
use of these functions.

70/100 · AdequateMessage clarity
✓ Descriptive subject✓ Provides detailed explanatory context✓ Explains rationale or failure mode
Why it was queued
secret or key materialsigning or wallet path
AI analysis · Low 32/100

This commit is a large internal refactoring of the BitBox02 firmware. It adds a new secure-chip key-derivation function (KDF) to the hardware abstraction layer (HAL) and threads that HAL through many existing functions so they can use it. The change touches 31 files and many tests, but it does not appear to introduce a new security vulnerability on its own. It is a structural change that prepares the code for using the secure chip's KDF more consistently.

Security candidatehww: add change password workflowby cedwies · f30b1203 · Nov 27, 2025 · 14 filesMessage 73 · AdequateLow 36Details
Commit message · cedwies

hww: add change password workflow

Currently, changing the device password requires a full device reset
and restoration from a backup. This process is cumbersome and increases
the risk of user error or seed exposure during the restoration process.

This patch introduces a native "Change Password" workflow that allows
the user to rotate their device password without resetting the device.

The workflow:
1. Forces the user to re-enter the current password for security, even
if the device is already unlocked.
2. Prompts for the new password (entered twice).
3. Re-encrypts the stored seed and BIP39 entropy with the new password
using the Secure Chip for key stretching.

The implementation ensures that the wallet identity (Root Fingerprint
and BIP39 seed) is preserved, so the device remains paired and
functional with the same accounts (including passphrase) after the
password change.

73/100 · AdequateMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context✓ Names security-relevant behavior explicitly
Why it was queued
entropy or randomnesssecret or key materialaccess controlcryptography-sensitive path
AI analysis · Low 36/100

This commit adds a new 'Change Password' feature to the BitBox02 hardware wallet. Instead of resetting the device and restoring from a backup, users can now change their device password directly. The wallet re-encrypts the stored seed with the new password while keeping the same accounts and identity. The change is a normal product feature, not a security fix, but it touches sensitive crypto code that protects the user's funds.

Security candidateFirmware v9.24.0 verificationby Yasser Aziza · d969a6b2 · Nov 23, 2025 · 2 filesMessage 70 · AdequateInformational 15Details
Commit message · Yasser Aziza

Firmware v9.24.0 verification

Signed-off-by: Yasser Aziza <yasser@posteo.net>

70/100 · AdequateMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Provides an explanatory body✓ Mentions testing or verification
Why it was queued
defensive validationboot or update path
AI analysis · Informational 15/100

This commit adds two digital signature files for the BitBox02 firmware version 9.24.0. These signatures are used to publicly verify that the released firmware binaries are authentic and have not been tampered with. There is no code change and no indication of a security vulnerability.

Lower-priorityHAL: add stretch_password to SecureChip HALby Marko Bencun · b0a89534 · Nov 19, 2025 · 2 filesMessage 45 · ThinTriage 0Details
Commit message · Marko Bencun

HAL: add stretch_password to SecureChip HAL

45/100 · ThinMessage clarity
✓ Descriptive subject✓ Names a concrete action or component! No meaningful explanatory body
Lower-priorityHAL: use SecureChip event counterby Marko Bencun · cb8816bd · Nov 19, 2025 · 4 filesMessage 78 · AdequateTriage 0Details
Commit message · Marko Bencun

HAL: use SecureChip event counter

Proactivly replace calls wherever we have a HAL instance, so these
tests will not fail later when the code starts using the SecureChip HAL.

78/100 · AdequateMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context✓ Mentions testing or verification
Lower-priorityHAL: add initial SecureChip HALby Marko Bencun · 11c2f00e · Nov 19, 2025 · 4 filesMessage 45 · ThinTriage 0Details
Commit message · Marko Bencun

HAL: add initial SecureChip HAL

45/100 · ThinMessage clarity
✓ Descriptive subject✓ Names a concrete action or component! No meaningful explanatory body
Security candidateport test_memory_functional C tests to Rustby benma's agent · 5ed0c203 · Nov 19, 2025 · 6 filesMessage 70 · AdequateInformational 15Details
Commit message · benma's agent

port test_memory_functional C tests to Rust

test_get_attestation_bootloader_hash is dropped as it's redundant with
the other more involved test that was ported.

70/100 · AdequateMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Provides an explanatory body✓ Mentions testing or verification
Why it was queued
update trustseed or entropy path
AI analysis · Informational 15/100

This commit is a routine refactoring that rewrites existing C unit tests in Rust. It does not change the actual firmware behavior or fix any security issue. One redundant test was removed, and several internal test-only helpers were added so the Rust tests can call the same underlying C memory functions.

Lower-priorityrust/memory: unit test encrypted_seed_and_hmacby benma's agent · b624dbc6 · Nov 19, 2025 · 1 fileMessage 55 · ThinTriage 0Details
Commit message · benma's agent

rust/memory: unit test encrypted_seed_and_hmac

55/100 · ThinMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Mentions testing or verification! No meaningful explanatory body
Lower-priorityci: Improve simulators CIby Niklas Dusenlund · 2594dd2c · Nov 13, 2025 · 1 fileMessage 47 · ThinTriage 0Details
Commit message · Niklas Dusenlund

ci: Improve simulators CI

47/100 · ThinMessage clarity
✓ Descriptive subject✓ Uses a recognizable type or scope! No meaningful explanatory body
Why it was queued
documentation-only discount
Lower-prioritykeystore: remove unused Error variantsby Marko Bencun · 69dd468c · Nov 13, 2025 · 1 fileMessage 45 · ThinTriage 0Details
Commit message · Marko Bencun

keystore: remove unused Error variants

45/100 · ThinMessage clarity
✓ Descriptive subject✓ Names a concrete action or component! No meaningful explanatory body
Lower-prioritykeystore: move Error from bitbox02 crate to bitbox02-rust crateby Marko Bencun · 970cd2f7 · Nov 13, 2025 · 2 filesMessage 65 · AdequateTriage 0Details
Commit message · Marko Bencun

keystore: move Error from bitbox02 crate to bitbox02-rust crate

Not needed there anymore as it's not mapping to any C error anymore.

65/100 · AdequateMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Provides an explanatory body
Lower-prioritykeystore: remove inline testing fixture by using HALby Marko Bencun · c1cf57bc · Nov 13, 2025 · 2 filesMessage 60 · AdequateTriage 0Details
Commit message · Marko Bencun

keystore: remove inline testing fixture by using HAL

60/100 · AdequateMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Mentions testing or verification! No meaningful explanatory body
Lower-priorityremove src/cipher C functionsby Marko Bencun · 22e5efea · Nov 13, 2025 · 8 filesMessage 60 · AdequateTriage 0Details
Commit message · Marko Bencun

remove src/cipher C functions

Unused since moving keystore_unlock to Rust.

60/100 · AdequateMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Provides an explanatory body
Lower-prioritykeystore: port keystore_unlock to Rustby Marko Bencun · 161dda19 · Nov 13, 2025 · 6 filesMessage 45 · ThinTriage 0Details
Commit message · Marko Bencun

keystore: port keystore_unlock to Rust

45/100 · ThinMessage clarity
✓ Descriptive subject✓ Names a concrete action or component! No meaningful explanatory body
Lower-prioritykeystore: remove unused extern "C" functionby Marko Bencun · 14c75526 · Nov 13, 2025 · 1 fileMessage 45 · ThinTriage 0Details
Commit message · Marko Bencun

keystore: remove unused extern "C" function

45/100 · ThinMessage clarity
✓ Descriptive subject✓ Names a concrete action or component! No meaningful explanatory body
AI review queuedsimulator-graphical: Initial commitby Niklas Dusenlund · 16e58296 · Nov 13, 2025 · 40 filesMessage 35 · OpaqueInformational 15Details
Commit message · Niklas Dusenlund

simulator-graphical: Initial commit

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

This commit adds a new graphical simulator for the BitBox02 hardware wallet. It is a development and testing tool, not a change to the firmware that runs on real devices. There is no indication this commit fixes or introduces a security vulnerability.

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.

Lower-prioritykeystore: remove remaining_attempts out param from keystore_unlockby Marko Bencun · 9904b78f · Nov 13, 2025 · 5 filesMessage 73 · AdequateTriage 0Details
Commit message · Marko Bencun

keystore: remove remaining_attempts out param from keystore_unlock

Use `keystore::get_remaining_unlock_attempts()` instead. This
simplifies the unlock function and porting it to Rust. It also would
allow showing the remainng attempts left before unlock too (e.g. if
there are only a few tries remaining).

73/100 · AdequateMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context
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.

Lower-priorityscreen: remove warning about unused paramby Marko Bencun · cc801879 · Nov 13, 2025 · 1 fileMessage 70 · AdequateTriage 0Details
Commit message · Marko Bencun

screen: remove warning about unused param

In testing, the `duration` param is unused.

70/100 · AdequateMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Provides an explanatory body✓ Mentions testing or verification