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 queue342AI 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 agent892856162
Niklas Dusenlund1112957059
cedwies1257063
Tomas Vrba947074
Cedric Wiese1239049
Jad815062
thisconnect211072
benma211074
Yasser Aziza111070
Niklas111035
Patrick Steiger111045
Analysis record

Published AI watches

Last scanned 26 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.

Security candidateexternal: add and use secp256k1-zkp directly, remove libwally-coreby Marko Bencun · aa3703cd · Sep 2, 2025 · 7 filesMessage 85 · StrongInformational 13Details
Commit message · Marko Bencun

external: add and use secp256k1-zkp directly, remove libwally-core

We currently use secp256k1-zkp as bundled by libwally-core. As we
remove libwally-core as dependency, and need to directly include
secp256k1-zkp.

We use a new branch of our fork rebased on current upstream master,
because they added CMake support.

This removes another ~6.4kB from the resulting multi binary.

85/100 · StrongMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context✓ Explains rationale or failure mode
Why it was queued
cryptography-sensitive path
AI analysis · Informational 13/100

This commit swaps out an internal cryptographic library dependency. The firmware previously used a library called libwally-core, which bundled a special version of the secp256k1 elliptic-curve code. The change removes libwally-core and uses secp256k1-zkp directly. This is a build-system and dependency refactor, not a fix for a known attack. It slightly reduces firmware size and changes how the code is compiled and linked. There is no direct evidence in the commit that this resolves a security vulnerability, but any change to core crypto code carries a small risk that build settings could alter behavior.

Lower-priorityremove remaining libwally code/header usesby Marko Bencun · 30ae6840 · Sep 2, 2025 · 13 filesMessage 60 · AdequateTriage 0Details
Commit message · Marko Bencun

remove remaining libwally code/header uses

The defines (SHA256_LEN for example) are replaced by new definitions
or inlined.

60/100 · AdequateMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Provides an explanatory body
Security candidateunit-test: don't use libwally bip32by Marko Bencun · 5929b40f · Sep 2, 2025 · 1 fileMessage 55 · ThinInformational 12Details
Commit message · Marko Bencun

unit-test: don't use libwally bip32

Trying to remove the libwally C dep.

55/100 · ThinMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Mentions testing or verification! No meaningful explanatory body
Why it was queued
secret or key material
AI analysis · Informational 12/100

This commit only changes a unit test file. It swaps one way of getting a test private key (from an older C library called libwally) for another way (from the project's newer Rust code). The actual device firmware and security logic are not changed. There is no indication this fixes or introduces a security bug.

Lower-priorityfactorysetup: remove use of wally_get_secp_context()by Marko Bencun · ee801ae5 · Sep 2, 2025 · 1 fileMessage 81 · StrongTriage 0Details
Commit message · Marko Bencun

factorysetup: remove use of wally_get_secp_context()

Use secp256k1 directly.

`SECP256K1_CONTEXT_NONE` is used, the other flags are deprecated:

https://github.com/bitcoin-core/secp256k1/blob/f36afb8b3dd7daf9edf4bf15c49fcd540f8ce393/include/secp256k1.h#L281

81/100 · StrongMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context✓ Links an issue, advisory, or supporting reference
AI review queuedpass rust secp256k1 context to keystore_secp256k1_signby Marko Bencun · a1d6d524 · Sep 2, 2025 · 9 filesMessage 65 · AdequateInformational 18Details
Commit message · Marko Bencun

pass rust secp256k1 context to keystore_secp256k1_sign

Step-by-step removal of `wally_get_secp_context()`.

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

This commit is a routine internal cleanup: it changes a cryptographic signing helper so that callers pass in the secp256k1 library context explicitly, instead of the function fetching that context itself from an internal helper. There is no direct security fix here and no evidence of an exploitable bug being patched. It is a step toward removing a dependency on an old wrapper function (`wally_get_secp_context()`).

AI review queuedpass rust secp256k1 context to keystore_secp256k1_schnorr_signby Marko Bencun · 1d79b837 · Sep 2, 2025 · 4 filesMessage 65 · AdequateInformational 17Details
Commit message · Marko Bencun

pass rust secp256k1 context to keystore_secp256k1_schnorr_sign

Step-by-step removal of `wally_get_secp_context()`.

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

This commit is a small internal cleanup: it changes a Bitcoin signing function so that the caller provides the cryptographic context, instead of the function fetching its own. There is no visible bug fix or security patch in the diff itself, and no security relevance is stated by the vendor.

AI review queuedpass rust secp256k1 context to keystore_secp256k1_nonce_commitby Marko Bencun · 5978ad6c · Sep 2, 2025 · 9 filesMessage 65 · AdequateInformational 19Details
Commit message · Marko Bencun

pass rust secp256k1 context to keystore_secp256k1_nonce_commit

Step-by-step removal of `wally_get_secp_context()`.

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

This commit is a routine internal cleanup: it changes a cryptographic helper function so that callers pass in the secp256k1 context explicitly, instead of the function fetching a global context internally. There is no direct security vulnerability visible in the diff. It is part of a gradual migration away from an old context accessor (`wally_get_secp_context()`).

Security candidaterust: pass Rust secp256k1 context instead of using wally's contextby Marko Bencun · bec904a4 · Sep 2, 2025 · 4 filesMessage 65 · AdequateInformational 16Details
Commit message · Marko Bencun

rust: pass Rust secp256k1 context instead of using wally's context

Step-by-step removal of `wally_get_secp_context()`.

65/100 · AdequateMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Provides an explanatory body
Why it was queued
cryptography-sensitive pathsigning or wallet path
AI analysis · Informational 16/100

This commit is a small internal cleanup in the BitBox02 hardware wallet firmware. It changes how the code passes the cryptographic context (specifically for secp256k1 elliptic-curve operations) from using a shared context provided by an older library (libwally) to using a Rust-managed context. The functions themselves and the underlying cryptographic operations remain the same. There is no direct evidence in the commit that this fixes an exploitable security vulnerability.

AI review queuedrust: use new global secp256k1 ctx in streaming-silent-paymentsby Marko Bencun · d0fd7100 · Sep 2, 2025 · 3 filesMessage 50 · ThinInformational 17Details
Commit message · Marko Bencun

rust: use new global secp256k1 ctx in streaming-silent-payments

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

This commit is a small internal cleanup in the BitBox02 firmware's silent-payment code. It replaces a locally-created secp256k1 cryptographic context with a shared global one. There is no direct evidence in the commit that this fixes an exploitable security bug; it appears to be a code-quality and consistency change.

Security candidaterust: introduce global secp256k1 contextby Marko Bencun · 6c96b561 · Sep 2, 2025 · 5 filesMessage 76 · AdequateInformational 12Details
Commit message · Marko Bencun

rust: introduce global secp256k1 context

Creating/destroying instances of the context is expensive. The
secp256k1 library provides
GlobalContext (https://docs.rs/secp256k1/0.31.1/secp256k1/global/struct.GlobalContext.html),
but only on std. We add a port of this to no_std.

76/100 · AdequateMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context✓ Links an issue, advisory, or supporting reference
Why it was queued
cryptography-sensitive path
AI analysis · Informational 12/100

This commit is a performance optimization for the BitBox02 hardware wallet firmware. It replaces repeated creation and destruction of a cryptographic context (used for Bitcoin's secp256k1 elliptic-curve operations) with a single global context that is initialized once and reused. There is no indication in the commit that this fixes a security vulnerability; it is described purely as an efficiency improvement.

Lower-prioritybtc: enable Test Merchant for payment requests in the simulatorby Marko Bencun · d1e2e8ad · Sep 1, 2025 · 3 filesMessage 75 · AdequateTriage 0Details
Commit message · Marko Bencun

btc: enable Test Merchant for payment requests in the simulator

So we can add integration tests against the simulator for payment requests.

75/100 · AdequateMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Provides an explanatory body✓ Mentions testing or verification
Lower-priorityfatfs: Only build static version of libby Niklas Dusenlund · b773f48f · Sep 1, 2025 · 1 fileMessage 45 · ThinTriage 0Details
Commit message · Niklas Dusenlund

fatfs: Only build static version of lib

45/100 · ThinMessage clarity
✓ Descriptive subject✓ Names a concrete action or component! No meaningful explanatory body
Why it was queued
documentation-only discount
Security candidatetests: rename mocks to fakesby Niklas Dusenlund · 442462c3 · Sep 1, 2025 · 43 filesMessage 55 · ThinInformational 15Details
Commit message · Niklas Dusenlund

tests: rename mocks to fakes

55/100 · ThinMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Mentions testing or verification! No meaningful explanatory body
Why it was queued
seed or entropy pathsigning or wallet path
AI analysis · Informational 15/100

This commit is a pure refactoring: it renames the test-only 'hardware-mocks' directory and all related function names to 'hardware-fakes' across build files, source code, and unit tests. No production firmware behavior changes, no security fixes, and no vulnerability is introduced or patched.

Security candidatetest: Moved mocking specific things to unit testsby Niklas Dusenlund · 08b47ca1 · Sep 1, 2025 · 20 filesMessage 90 · StrongInformational 15Details
Commit message · Niklas Dusenlund

test: Moved mocking specific things to unit tests

We want to share as much of the simulation code as possible without the
simulator depending on the mocking framework. This commit refactors
cmocka specific code to the unit-test dir.

90/100 · StrongMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Uses a recognizable type or scope✓ Provides detailed explanatory context✓ Mentions testing or verification
Why it was queued
seed or entropy pathparser or protocol path
AI analysis · Informational 15/100

This commit is a pure internal test-code refactor. It moves CMocka-specific mock functions out of a shared hardware-mocks library and into the unit-test directory so that the simulator no longer depends on the CMocka testing framework. No production firmware code is changed, and nothing in the commit affects the security of the shipped BitBox02 device.

Lower-priorityremove the option of restoring from 18 recovery wordsby Marko Bencun · 63e7210b · Aug 28, 2025 · 3 filesMessage 73 · AdequateTriage 0Details
Commit message · Marko Bencun

remove the option of restoring from 18 recovery words

We don't offer creating such mnemonics, and it seems it is not adopted
by the wider industry/community. Removing it leads to better UX.

These calls are the only ones, so we could actually drop the middle
option totally and rename the component to `binary_choice`, but we
keep it like this for a while in case we want to revert the change.

73/100 · AdequateMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context
Lower-priorityui: remove unused buttons fields from data_t in trinary_choiceby Marko Bencun · 9f980614 · Aug 28, 2025 · 1 fileMessage 65 · AdequateTriage 0Details
Commit message · Marko Bencun

ui: remove unused buttons fields from data_t in trinary_choice

The buttons are in the component tree, the references to the buttons
in the data struct are unused.

65/100 · AdequateMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Provides an explanatory body
Lower-priorityui/trinary_choice: make choices optionalby Marko Bencun · 415eb10f · Aug 28, 2025 · 9 filesMessage 68 · AdequateTriage 0Details
Commit message · Marko Bencun

ui/trinary_choice: make choices optional

We want to drop the 18 option when choosing 12/18/24 words to
restore. Making the entries optional allows us to do that.

68/100 · AdequateMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context
Security candidateMove vendored rust depsby Niklas Dusenlund · 2dfc3729 · Aug 27, 2025 · 4769 filesMessage 28 · OpaqueInformational 15Details
Commit message · Niklas Dusenlund

Move vendored rust deps

`src` should only contain our sources

28/100 · OpaqueMessage clarity
✓ Subject identifies a change! No meaningful explanatory body! Opaque security-relevant change
Why it was queued
cryptography-sensitive pathseed or entropy pathsigning or wallet pathboot or update pathauthentication pathparser or protocol path
AI analysis · Informational 15/100

This commit is a large but purely organizational change: it moves all vendored (third-party) Rust dependencies from the `src` directory to a new `external/vendor` directory. Only two small configuration files were actually modified: `.cargo/config.toml` (to point Cargo at the new vendor directory) and `external/vendor-rust.sh` (a helper script). The millions of added and removed lines are just the same dependency files being relocated, not new code. There is no visible change to the firmware's behavior or security logic.

Security candidaterust: clean up wally_sha512 remnantsby Marko Bencun · fbb6e6c7 · Aug 27, 2025 · 7 filesMessage 68 · AdequateInformational 18Details
Commit message · Marko Bencun

rust: clean up wally_sha512 remnants

Since bitbox02::sha512 now uses bitcoin::hashes and is not wrapping
the wally C function, we can remove that function and inline it.

bitbox-aes does not need the feature switch anymore as a result.

68/100 · AdequateMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context
Why it was queued
cryptography-sensitive path
AI analysis · Informational 18/100

This commit is a routine code cleanup in the BitBox02 hardware wallet firmware. It removes an old wrapper around a C-language SHA-512 function and switches the Rust code to use a pure-Rust SHA-512 implementation from the `bitcoin::hashes` library. It also removes an unused feature flag and simplifies dependencies. There is no direct evidence in the commit that this fixes a security vulnerability.

Security candidateuse Rust hmac/sha256/sha512 over libwally's functionsby Marko Bencun · 7643ec20 · Aug 27, 2025 · 16 filesMessage 65 · AdequateLow 32Details
Commit message · Marko Bencun

use Rust hmac/sha256/sha512 over libwally's functions

Aiming to remove the libwally dependency.

65/100 · AdequateMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Provides an explanatory body
Why it was queued
cryptography-sensitive path
AI analysis · Low 32/100

This commit swaps the cryptographic hashing and HMAC functions used throughout the BitBox02 firmware from the libwally library to equivalent Rust implementations. The goal is to remove the libwally dependency. The change touches sensitive code paths such as seed stretching, U2F key generation, and secure-chip authorization, but the commit itself does not claim to fix any security bug. The main risk is that any subtle difference in behavior between the old and new implementations could affect how keys are derived or how the device authenticates, though the diff shows no obvious vulnerability.

Lower-priorityscreen_process: ifdef out unused functionby Niklas Dusenlund · dec9282e · Aug 27, 2025 · 1 fileMessage 78 · AdequateTriage 0Details
Commit message · Niklas Dusenlund

screen_process: ifdef out unused function

To be able to compile this file for tests the code that was calling this
function was commented out. Ifdef out this function as well since it
isn't used anywhere else.

78/100 · AdequateMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context✓ Mentions testing or verification
Security candidaterust: since rust 1.64, bindgen can use the c types from coreby Niklas Dusenlund · 9e5ebf7e · Aug 27, 2025 · 14 filesMessage 65 · AdequateLow 29Details
Commit message · Niklas Dusenlund

rust: since rust 1.64, bindgen can use the c types from core

There was a bug also, (u)int is 32bits on 64 byte systems.

65/100 · AdequateMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Provides an explanatory body
Why it was queued
cryptography-sensitive pathseed or entropy path
AI analysis · Low 29/100

This commit updates the BitBox02 firmware's Rust code to use Rust's built-in C type definitions instead of a custom module. The commit message notes a bug: the custom module incorrectly defined 'unsigned int' as 64 bits on 64-bit systems, when it should always be 32 bits. The change removes the buggy custom type definitions and switches to the standard Rust core::ffi types. This is primarily a code-quality and correctness fix, but the wrong type sizes could have caused subtle memory or interface mismatches between Rust and C code, especially during testing on 64-bit computers.

Security candidatebitbox02-rust-c: fix wrong features in platform-bitbox02plusby Marko Bencun · 59a4c0ff · Aug 27, 2025 · 1 fileMessage 65 · AdequateInformational 19Details
Commit message · Marko Bencun

bitbox02-rust-c: fix wrong features in platform-bitbox02plus

This platform is only activated in Nova bootloaders, where we don't
need these deps.

65/100 · AdequateMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Provides an explanatory body
Why it was queued
update trust
AI analysis · Informational 19/100

This is a tiny build-configuration fix for a specific BitBox02 hardware variant (the 'BitBox02 Plus' platform used in Nova bootloaders). The change removes two optional Rust dependencies that were accidentally enabled for that platform. The commit message says those dependencies are not needed there. There is no direct evidence in the commit of a security vulnerability; it looks like a cleanup to avoid compiling unnecessary code in the bootloader.

Security candidatemove bip39 functionby Marko Bencun · 14417b14 · Aug 27, 2025 · 5 filesMessage 43 · ThinInformational 15Details
Commit message · Marko Bencun

move bip39 function

The bitbox02 crate is meant to wrap C code, which this function is not
doing anymore.

43/100 · ThinMessage clarity
✓ Subject identifies a change✓ Provides an explanatory body
Why it was queued
secret or key materialcryptography-sensitive path
AI analysis · Informational 15/100

This commit simply moves a helper function that looks up a BIP39 word by its index from one Rust module to another. The code itself is unchanged, and there is no indication of a security fix or vulnerability.

Security candidateport bip39 functionality from libwally-core to rust-bip39by Marko Bencun · 04833009 · Aug 27, 2025 · 11 filesMessage 85 · StrongLow 27Details
Commit message · Marko Bencun

port bip39 functionality from libwally-core to rust-bip39

rust-bip39 is much faster than libwally, so the unlock animation is
speed up so that the last animation frame lingers for a bit, otherwise
the change felt too abrupt.

85/100 · StrongMessage clarity
✓ Specific, 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 · Low 27/100

This commit replaces the BIP39 (seed phrase) implementation inside the BitBox02 hardware wallet from one library (libwally-core) to another (rust-bip39). The main user-visible reason is speed: unlocking the device is now faster, so the unlock animation was shortened. The change touches how seed phrases are converted to cryptographic seeds and how individual BIP39 words are looked up. There is no direct evidence in the commit that this fixes a known security bug, but any change to cryptographic code can introduce subtle risks, so it deserves careful review.