BB
← All projectsBitBox

BitBox02 firmware

Firmware and bootloader for BitBox02 signing devices.

BitcoinHardware walletsNormal
Repository coverage

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

231security candidates161second-pass queue719AI analyses
65commits · 30 days
136commits · 60 days
308commits · 180 days
692commits · 365 days
Backfill bands
Aug 5 → Feb 6335 seen28 candidatesComplete
Feb 6 → Jun 6265 seen19 candidatesComplete
Jun 6 → Jul 619 seen5 candidatesComplete
Jul 6 → Aug 526 seen3 candidatesComplete
Commit communication

Does the history explain itself?

Message quality measures whether a commit identifies its scope, purpose, rationale, testing, and supporting references. It does not change the security-severity score.

58/100 average clarity
68Strong · 80–100
321Adequate · 60–79
302Thin · 40–59
88Opaque · 0–39
26security candidates with opaque commit messaging
Read the scoring rubric →
Developer activity

Who is changing the project?

Public Git author strings; identities are not independently verified.

DeveloperCommitsCandidatesAnalyzedHigh riskMessage avg.
Marko Bencun450131422357
benma's agent11240106164
Niklas Dusenlund15139130057
cedwies12512063
Tomas Vrba10410071
Cedric Wiese12312049
Jad14210060
Sebastian Sutter222050
thisconnect212072
benma212074
Yasser Aziza111070
Niklas111035
Analysis record

Published AI watches

Last scanned 17 minutes ago

Low 34 AI analysisMessage 50 · Thin
BB BitBoxBitBox02 firmware BitcoinHardware wallets

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

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

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

py: make session reset an API setup helper

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

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

hww: reset sessions on host reconnect

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

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

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

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

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

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

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

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

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

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

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

Merge branch 'nickez/bb02-utf8-safe'

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

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

Merge branch 'benma/ub'

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

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

oled: hold display in reset during startup

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

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

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

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

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

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

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

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

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

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

No security-relevant signal in commit message or diffUI/UX change only: text formatting and scrollabilityNo memory-safety, cryptographic, or authorization changes observed
be375664by Marko Bencun+115−66 files
No security note in commit
Informational 19 AI analysisMessage 91 · Strong
BB BitBoxBitBox02 firmware BitcoinHardware wallets

factorysetup: compress constant root keys

This commit is a hardening and size-optimization change for the BitBox02 factory-setup firmware. It stores the 110 built-in root attestation public keys in compressed (33-byte) form instead of uncompressed (65-byte) form, and marks the tab…

Data table moved from writable RAM to read-only flash (const)Public-key table size reduced from 65 to 33 bytes per keyNew Rust helper normalizes compressed/uncompressed keys before hashing
e2273c1fby benma's agent+407−5552 files
No security note in commit
Informational 18 AI analysisMessage 78 · Adequate
BB BitBoxBitBox02 firmware BitcoinHardware wallets

factorysetup: reuse SHA-256 for HMAC

This commit swaps one internal cryptography library for another when computing HMAC-SHA256 in the factory-setup code. The goal is to reduce firmware size by reusing an existing SHA-256 implementation, not to fix a security bug. New test ve…

Cryptographic implementation change in HMAC-SHA256 helperUse of `.unwrap()` on `new_from_slice`, which can panic if key length is unsupported; for HMAC-SHA256 the RustCrypto `new_from_slice` accepts any key length, so this is effectively safe but still a panic pathNo removal of existing call sites; normal firmware still uses `bitcoin_hashes` for other callers
a790a7f0by benma's agent+24−55 files
No security note in commit
Informational 21 AI analysisMessage 78 · Adequate
BB BitBoxBitBox02 firmware BitcoinHardware wallets

factorysetup: use static secp context

This commit changes how the BitBox02 factory-setup program checks digital signatures. It switches from a dynamically created crypto context to a built-in, read-only verification context, which makes the factory-setup firmware about 35 KB s…

Cryptographic context change in verification pathRemoval of dynamic secp256k1 context creation in factory setupExplicit addition of secp256k1_selftest() to compensate for skipped implicit self-test
2756aca4by benma's agent+26−42 files
No security note in commit
Informational 18 AI analysisMessage 73 · Adequate
BB BitBoxBitBox02 firmware BitcoinHardware wallets

factorysetup: speed up certificate setup

This commit is a performance optimization in the BitBox02 factory setup process. It changes how the device picks which trusted root public key to use when verifying an attestation certificate. Previously, the device tried verifying the sig…

No removal of cryptographic verification: rust_secp256k1_verify is still performed after key selection.No change to accepted inputs: any certificate accepted before is still accepted, and any rejected before is still rejected.Identifier comparison uses MEMEQ over the full 32-byte SHA-256 digest, so collision resistance is standard.
d5617112by benma's agent+10−81 file
No security note in commit
Informational 15 AI analysisMessage 45 · Thin
BB BitBoxBitBox02 firmware BitcoinHardware wallets

Merge branch 'nickez/bb03-binaries'

This commit is a large feature merge that adds initial support for a new hardware variant, the BitBox03 (STM32U5-based development kit). It introduces new bootloader and firmware binaries, board support crates, vendored Rust dependencies (…

1a648595by Niklas Dusenlund+17103−5779170 files
No security note in commit
Informational 15 AI analysisMessage 58 · Thin
BB BitBoxBitBox02 firmware BitcoinHardware wallets

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

This commit adds a progress bar that appears while the BitBox02 is loading large Ethereum transaction data from a connected computer. It is a user-experience improvement, not a security fix. The code only changes how progress is displayed …

386d86f5by Marko Bencun+139−134 files
No security note in commit
Informational 15 AI analysisMessage 35 · Opaque
BB BitBoxBitBox02 firmware BitcoinHardware wallets

Add testboard openocd config

This commit adds a configuration file for OpenOCD, a debugging tool used during hardware development and testing. It tells the debugger how to connect to an STM32U5 test board using a J-Link adapter. There is no change to firmware code, no…

c5984b41by Niklas Dusenlund+16−01 file
No security note in commit
Informational 19 AI analysisMessage 28 · Opaque
BB BitBoxBitBox02 firmware BitcoinHardware wallets

Merge branch 'py-proto'

This commit only adds explanatory comments to Python type-stub files describing what happens when an optional anti-klepto host nonce commitment is left out. It does not change any firmware logic, cryptographic code, or default behavior. Th…

Documentation-only change in generated Python stubsMentions anti-klepto / S2C nonce commitment fallback behaviorNo logic, default, or cryptographic implementation change
926a5885by Marko Bencun+28−62 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 candidatesimulator-graphical: fix factory_randomnessby Marko Bencun · 6a33dcec · Apr 20, 2026 · 1 fileMessage 50 · ThinLow 33Details
Commit message · Marko Bencun

simulator-graphical: fix factory_randomness

Same as cee5bdb3ba06f60b93213f9c2a183a7683fe1551, but for BB02
graphical simulator.

50/100 · ThinMessage clarity
✓ Descriptive subject✓ Provides an explanatory body
Why it was queued
seed or entropy path
AI analysis · Low 33/100

This commit fixes a simulator-only bug where the graphical BitBox02 simulator was accidentally using real device randomness instead of the fixed test value used by other simulators/test builds. The change makes the graphical simulator use the same predictable 'factory randomness' as the C unit-testing simulator. This is a test/simulator hardening fix, not a fix for the real hardware wallet firmware.

Security candidatereleases: add v9.26.1by Marko Bencun · 87f283b6 · Apr 19, 2026 · 5 filesMessage 38 · OpaqueInformational 15Details
Commit message · Marko Bencun

releases: add v9.26.1

38/100 · OpaqueMessage clarity
✓ Subject identifies a change✓ Names a concrete action or component! No meaningful explanatory body! Opaque security-relevant change
Why it was queued
boot or update path
AI analysis · Informational 15/100

This commit adds release artifacts for BitBox02 firmware version 9.26.1: two signed text files stating the expected firmware hash for the Multi and Bitcoin-only editions, their detached signatures, and a helper Python script that automates creating such assertion files in the future. There is no change to the actual firmware code, no bug fix, and no security patch.

Security candidatesimulator: fix factory_randomnessby Marko Bencun · cee5bdb3 · Apr 17, 2026 · 1 fileMessage 58 · ThinInformational 18Details
Commit message · Marko Bencun

simulator: fix factory_randomness

The C simulator still uses the BitBox02 Hal. The newly introduced
factory_randomness method there dereferenced the same static address
as on the device, leading to a segfault.

58/100 · ThinMessage clarity
✓ Descriptive subject✓ Provides detailed explanatory context
Why it was queued
seed or entropy path
AI analysis · Informational 18/100

This commit fixes a crash in the software simulator used for testing the BitBox02 hardware wallet. The simulator was trying to read a special memory address that only exists on the physical device, causing it to crash. The fix makes the simulator return a placeholder value of all zeros instead. This only affects test tooling, not real devices or user funds.

Security candidatesecurechip: make kdf asyncby Marko Bencun · 3b36eb77 · Apr 16, 2026 · 46 filesMessage 58 · ThinLow 27Details
Commit message · Marko Bencun

securechip: make kdf async

Expose the OPTIGA crypt instance to Rust and route the\nKDF through the async command bridge. The higher-level\nsecurechip and application callers now await the operation\ninstead of relying on the synchronous C wrapper.

58/100 · ThinMessage clarity
✓ Descriptive subject✓ Provides detailed explanatory context
Why it was queued
signing or wallet pathboot or update path
AI analysis · Low 27/100

This commit rewrites how the BitBox02 hardware wallet performs a key-derivation operation inside its secure chip (OPTIGA). Previously the operation was synchronous and wrapped in C; now it is asynchronous and called from Rust through the existing async command bridge. The change touches many files because every caller of the KDF/keystore functions had to be updated to `await` the result. The diff itself is a large refactoring with no obvious security bug, but it introduces new async machinery around a sensitive cryptographic operation, so it warrants careful review for memory-safety and concurrency issues.

Security candidatebitbox-core-utils: make salt::hash_data return 32 bytesby Marko Bencun · 385f1773 · Apr 16, 2026 · 3 filesMessage 65 · AdequateInformational 15Details
Commit message · Marko Bencun

bitbox-core-utils: make salt::hash_data return 32 bytes

For better clarity and to remove needless try_into().unwrap().

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

This is a small internal code cleanup in the BitBox02 firmware. It changes a helper function that computes SHA-256 hashes so that it returns a fixed 32-byte array instead of a variable-length vector. The only effects are removing an unnecessary type conversion and making the code clearer. There is no security bug being fixed here.

Security candidaterust: rename bitbox02-noise -> bitbox-noiseby Marko Bencun · 6a206d68 · Apr 15, 2026 · 15 filesMessage 45 · ThinInformational 15Details
Commit message · Marko Bencun

rust: rename bitbox02-noise -> bitbox-noise

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

This commit is a simple rename of a Rust crate from 'bitbox02-noise' to 'bitbox-noise'. The code itself is unchanged; only file paths, package names, and import references are updated. There is no security fix or vulnerability introduced.

Security candidateUse HAL random for noise key generationby Marko Bencun · 4e982183 · Apr 15, 2026 · 11 filesMessage 85 · StrongLow 27Details
Commit message · Marko Bencun

Use HAL random for noise key generation

bitbox02-rust should not depend on bitbox02-specific random types just
to initialize the Noise responder state. Move Noise key generation
onto bitbox_hal::Random and let bitbox02-noise initialize the
responder handshake from HAL-provided randomness.

This removes the old Random32/BB02Random32 plumbing. That trait
existed only because the handshake state was generic over a DH type
whose genkey() path generated the responder ephemeral internally. Once
the responder ephemeral is treated as explicit init input instead, the
state no longer needs a device-specific RNG type parameter. In the
final API, init() takes a HAL random source and derives that ephemeral
key there, which keeps the dependency boundary at bitbox-hal while
preserving the same handshake flow.

85/100 · StrongMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context✓ Explains rationale or failure mode✓ Names security-relevant behavior explicitly
Why it was queued
entropy or randomnessseed or entropy path
AI analysis · Low 27/100

This commit is a code cleanup in the BitBox02 firmware's Rust code. It changes how random numbers are supplied when creating cryptographic keys for the Noise protocol, moving from a device-specific random type to a more generic hardware abstraction layer (HAL) random source. The commit message and diff do not describe this as fixing a security bug; it reads as an architectural refactor to simplify dependencies. There is no direct evidence in the commit that the old code was exploitable or that any vulnerability was fixed.

Security candidateadd new bitbox-core-utils workspace crateby Marko Bencun · e12dae77 · Apr 10, 2026 · 13 filesMessage 83 · StrongInformational 15Details
Commit message · Marko Bencun

add new bitbox-core-utils workspace crate

Move the salt and random helpers out of bitbox02-rust into a
new workspace crate that depends on bitbox-hal.
Add bitbox-platform-host as a dev-dependency there so the same
unit tests can run against the host fakes, and update the
bitbox02-rust and bitbox02-rust-c consumers to use the new
crate.

83/100 · StrongMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context✓ Mentions testing or verification✓ Names security-relevant behavior explicitly
Why it was queued
seed or entropy pathboot or update path
AI analysis · Informational 15/100

This commit is a routine code reorganization: it moves two small helper modules (one for generating random bytes, one for salting/hashing data) from an existing Rust crate into a new shared workspace crate named bitbox-core-utils. The actual logic, algorithms, and behavior are copied unchanged; only the file paths and import names are updated. There is no indication this fixes or introduces a security vulnerability.

Security candidatehal: move TestingRandom to platform hostby Marko Bencun · 57d7c80d · Apr 8, 2026 · 4 filesMessage 45 · ThinInformational 15Details
Commit message · Marko Bencun

hal: move TestingRandom to platform host

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

This commit simply moves a test-only fake random number generator from one internal Rust module to another. The code is identical and is only used in automated tests running on a developer's computer, not in the real BitBox02 hardware wallet firmware. There is no security issue.

Security candidatehal: add random, factory_randomness, drop random_32_bytesby Marko Bencun · 47454d61 · Apr 8, 2026 · 27 filesMessage 55 · ThinLow 45Details
Commit message · Marko Bencun

hal: add random, factory_randomness, drop random_32_bytes

55/100 · ThinMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Names security-relevant behavior explicitly! No meaningful explanatory body
Why it was queued
seed or entropy pathsigning or wallet path
AI analysis · Low 45/100

This commit changes how the BitBox02 hardware wallet generates random numbers used to create secret keys and encrypt stored data. Previously, the firmware used a single 32-byte random value from the microcontroller. After this change, it mixes three sources: the microcontroller's random generator, the secure chip's random generator, and a fixed 32-byte 'factory randomness' value stored in a special flash memory location. The commit also adds a factory script to write that fixed value into devices during production. The change is a defensive hardening measure, not a fix for an active bug, but it introduces a new dependency: if the factory randomness is not actually random or is reused across devices, it could weaken security instead of strengthening it.

Security candidatebitbox02: fix native cargo testby Marko Bencun · 00ebc4fd · Apr 7, 2026 · 4 filesMessage 90 · StrongInformational 15Details
Commit message · Marko Bencun

bitbox02: fix native cargo test

```
cd src/rust/bitbox02 && cargo test --all-features -- --test-threads 1
```

Failed because of a missing hex_lit feature.

90/100 · StrongMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context✓ Explains rationale or failure mode✓ Mentions testing or verification
Why it was queued
cryptography-sensitive path
AI analysis · Informational 15/100

This commit fixes a Rust build configuration issue so that the project's automated tests can run on a normal computer. It moves a required feature flag for the 'hex_lit' library from individual sub-crates to the shared workspace configuration. There is no indication this is a security fix or that it changes any runtime behavior on the actual BitBox02 device.

Security candidateeth: harmonize large data warnings for transactions and typed messagesby Tomas Vrba · 56a6ec34 · Apr 7, 2026 · 5 filesMessage 73 · AdequateLow 35Details
Commit message · Tomas Vrba

eth: harmonize large data warnings for transactions and typed messages

Adjust wording in transaction signing so warnings and truncating logic
match the newly implemented approach in sign_typed_msg.rs

Co-Authored-By: Marko Bencun <marko@shiftcrypto.ch>

73/100 · AdequateMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context
Why it was queued
signing boundarysigning or wallet path
AI analysis · Low 35/100

This commit changes how the BitBox02 hardware wallet warns users about very large Ethereum transaction data and typed messages. Previously, large transaction data was shown only as a byte count with the message 'too large to display.' Now the device shows a preview of the actual hex data (up to the screen limit, with a '...' truncation indicator) and adds a warning screen saying the value is too large to display in full. The change also reuses the same truncation logic already used for EIP-712 typed messages, so both flows behave consistently. The commit does not fix a vulnerability, but it improves the user's ability to inspect what they are signing.

Security candidaterust: async unit tests instead of block_onby Marko Bencun · 2560d5d1 · Apr 6, 2026 · 41 filesMessage 55 · ThinInformational 15Details
Commit message · Marko Bencun

rust: async unit tests instead of block_on

Easier to read/write the unit tests.

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

This commit is a code-quality refactor for unit tests only. It introduces a small Rust helper macro called async_test::test that lets developers write async test functions directly, instead of manually wrapping async code in a block_on() call. The change touches many test files but does not alter any production firmware behavior, user-facing functionality, or security logic.

Security candidatesecurechip: port securechip.c to Rustby Marko Bencun · 9706ea2c · Apr 2, 2026 · 20 filesMessage 45 · ThinLow 34Details
Commit message · Marko Bencun

securechip: port securechip.c to Rust

45/100 · ThinMessage clarity
✓ Descriptive subject✓ Names a concrete action or component! No meaningful explanatory body
Why it was queued
seed or entropy path
AI analysis · Low 34/100

This commit rewrites the secure-chip abstraction layer from C to Rust. It is a refactoring/porting change: the same underlying ATECC and Optiga hardware drivers are still used, but the dispatch logic that picks between them and the test fake is now implemented in Rust. No new security vulnerability is visible in the diff, but any rewrite of security-critical code carries a risk of subtle behavior changes.

Security candidatesimulator-graphical-bb03: implement Randomby Marko Bencun · f5fae7e6 · Apr 1, 2026 · 3 filesMessage 50 · ThinInformational 15Details
Commit message · Marko Bencun

simulator-graphical-bb03: implement Random

50/100 · ThinMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Names security-relevant behavior explicitly! No meaningful explanatory body
Why it was queued
seed or entropy path
AI analysis · Informational 15/100

This commit implements a placeholder random-number generator inside a graphical simulator for the BitBox03 hardware wallet. It replaces 'todo!' stubs with code that fills 32-byte buffers using the standard Rust 'rand' crate. The change only affects test/simulator code, not the real firmware or any production device, so it does not create a security vulnerability in shipped products. The only concern is that simulator developers must remember this is a non-cryptographic/test RNG and must not copy it into real hardware code.

Security candidatebitbox03: add local simulator HALby Marko Bencun · f0845590 · Mar 31, 2026 · 7 filesMessage 60 · AdequateInformational 15Details
Commit message · Marko Bencun

bitbox03: add local simulator HAL

- Reuse bitbox-platform-host
- Reuse bitbox03 UI
- For now, keep other subsytems with todo!() stubs

60/100 · AdequateMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Provides an explanatory body
Why it was queued
seed or entropy path
AI analysis · Informational 15/100

This commit adds a new local simulator for the BitBox03 hardware wallet. It is purely test/development tooling: it wires up fake hardware components (fake memory, fake secure chip, fake SD card, etc.) and leaves many simulator functions as unimplemented 'todo!()' stubs. There is no indication this change affects real device firmware or introduces a security vulnerability.

Security candidatemessages: add eth payment request fieldsby Cedric Wiese · 21a01dca · Mar 29, 2026 · 5 filesMessage 45 · ThinInformational 17Details
Commit message · Cedric Wiese

messages: add eth payment request fields

45/100 · ThinMessage clarity
✓ Descriptive subject✓ Names a concrete action or component! No meaningful explanatory body
Why it was queued
cryptography-sensitive pathsigning or wallet path
AI analysis · Informational 17/100

This commit adds a new optional 'payment request' field to Ethereum EIP-1559 signing requests in the BitBox02 firmware's protocol definitions and generated code. It does not contain any actual implementation of how that field is processed, validated, or shown to the user. Based only on the code changed here, there is no identifiable security vulnerability.

Security candidatePort USB report queue to Rustby Niklas Dusenlund · 214254aa · Mar 26, 2026 · 42 filesMessage 78 · AdequateLow 34Details
Commit message · Niklas Dusenlund

Port USB report queue to Rust

Introduce a dedicated bitbox-usb-report-queue crate and expose
an opaque C FFI for allocating, clearing, pushing, peeking and
pulling 64-byte USB reports.

Wire usb_processing, usb_frame, usb_packet and u2f_packet to
use RustUsbReportQueue handles instead of the legacy C queue,
and initialize separate HWW and U2F queues from Rust, the
bootloader, simulators and HID test fakes.

Remove src/queue.c/h and the old bitbox02 queue wrapper, and
update the simulator and test code to drain and free the new
queues.

78/100 · AdequateMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context✓ Mentions testing or verification
Why it was queued
update trustboot or update path
AI analysis · Low 34/100

This commit rewrites the firmware's USB report queue from C to Rust. It is a large refactoring that replaces a hand-written C ring buffer with a Rust VecDeque wrapped in a C-compatible FFI. The change touches the core USB communication path used by both the main hardware wallet (HWW) and U2F interfaces. There is no explicit security bug fixed or introduced in the diff, but any mistake in the boundary between C and Rust could affect how the device receives and sends USB messages.

Security candidateeth: implement streaming for typed data messagesby Tomas Vrba · fd2653cf · Mar 25, 2026 · 12 filesMessage 78 · AdequateLow 37Details
Commit message · Tomas Vrba

eth: implement streaming for typed data messages

eth: add typed data streaming to python API

show size of truncated string, show ellipsis

add a multiline string test case

- adds a test case to make use of multiline string handling code from in
the .js test generator
- adjust rust test loader to handle strings, not just bytes

78/100 · AdequateMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context✓ Mentions testing or verification
Why it was queued
cryptography-sensitive pathsigning or wallet path
AI analysis · Low 37/100

This commit extends an existing Ethereum data-streaming feature so it also works for EIP-712 typed messages with large data fields (e.g., a 50 KB 'bytes' field). Previously, only large Ethereum transaction data could be streamed in chunks; now the same chunking is applied to typed-message values. The change also improves on-screen display of long values by warning the user when a value is too large to show in full and by showing an ellipsis. It is a feature addition with defensive input checks, not a fix for a known vulnerability.

Security candidatebb03: Initial HALby Niklas Dusenlund · 4d8eccde · Mar 24, 2026 · 38 filesMessage 43 · ThinLow 27Details
Commit message · Niklas Dusenlund

bb03: Initial HAL

And some safety improvements to the lvgl bindings

43/100 · ThinMessage clarity
✓ Subject identifies a change✓ Provides an explanatory body
Why it was queued
seed or entropy path
AI analysis · Low 27/100

This commit introduces the initial hardware abstraction layer (HAL) for the BitBox03 and makes several safety improvements to the Rust bindings for the LVGL graphics library. Most changes are architectural or defensive: adding new safe wrappers, replacing borrowed C string pointers with owned copies, adding explicit unsafe markers, and removing some risky image-source APIs. There are also large additions of generated font data and placeholder TODO implementations for hardware interfaces. No obvious exploitable vulnerability is visible in the diff, but the commit is large and partially implemented, so the safety claims cannot be fully verified from this patch alone.

Security candidatesimulator: LVGL initby Niklas Dusenlund · c36384ef · Mar 23, 2026 · 380 filesMessage 28 · OpaqueInformational 15Details
Commit message · Niklas Dusenlund

simulator: LVGL init

28/100 · OpaqueMessage clarity
✓ Subject identifies a change! No meaningful explanatory body! Opaque security-relevant change
Why it was queued
authentication pathparser or protocol path
AI analysis · Informational 15/100

This commit adds a new graphical simulator for the BitBox02 hardware wallet using the LVGL UI library. It is a large development-only change that introduces simulator code, vendored Rust dependencies, and build configuration updates. There is no indication it fixes a security bug or introduces a security vulnerability in the firmware itself.

Security candidateRevert "simulator: LVGL init"by Niklas · 8f6e8a8a · Mar 23, 2026 · 391 filesMessage 35 · OpaqueInformational 11Details
Commit message · Niklas

Revert "simulator: LVGL init"

35/100 · OpaqueMessage clarity
✓ Descriptive subject! No meaningful explanatory body! Opaque security-relevant change
Why it was queued
seed or entropy pathauthentication pathparser or protocol path
AI analysis · Informational 11/100

This commit is a large revert that removes a previously added graphical simulator feature (LVGL init) from the BitBox02 firmware repository. It deletes the LVGL submodule, vendored Rust dependencies, simulator code, and related build files. There is no indication in the commit message or diff that this change fixes a security vulnerability; it appears to be a routine rollback of an unfinished or unwanted feature.

Security candidateoptiga: decouple memory from pal_os_datastoreby Marko Bencun · 356454d9 · Mar 23, 2026 · 6 filesMessage 60 · AdequateInformational 17Details
Commit message · Marko Bencun

optiga: decouple memory from pal_os_datastore

So these C modules can be used in BB03 without relying on BB02 memory
functions.

60/100 · AdequateMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Provides an explanatory body
Why it was queued
boot or update path
AI analysis · Informational 17/100

This commit is a code cleanup that moves where the device fetches a 32-byte secret key used to talk to the secure chip (Optiga). Previously, a low-level C module directly called a BB02-specific memory function. Now it goes through a Rust abstraction layer so the same module can be reused in a future BB03 device. The change does not alter how the key is stored, generated, or protected; it only reroutes the function call. There is no indication this fixes a security bug.

Security candidatechore: Extract generation of headers from CMakeby Niklas Dusenlund · 89e5fd93 · Mar 23, 2026 · 18 filesMessage 72 · AdequateInformational 14Details
Commit message · Niklas Dusenlund

chore: Extract generation of headers from CMake

version.h and rust.h generated by build.rs script when cargo runs
standalone.

72/100 · AdequateMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Uses a recognizable type or scope✓ Provides an explanatory body
Why it was queued
boot or update path
AI analysis · Informational 14/100

This is a build-system refactoring commit. It moves the generation of version.h and rust.h out of CMake and into a Python script and Rust build.rs, so the Rust code can be built standalone without CMake. There is no change to runtime firmware behavior, no bug fix, and no security patch visible in the diff.

Security candidatesimulator: LVGL initby Niklas Dusenlund · 00a6e4d7 · Mar 23, 2026 · 391 filesMessage 28 · OpaqueInformational 15Details
Commit message · Niklas Dusenlund

simulator: LVGL init

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

This commit adds a new graphical simulator for the BitBox02 hardware wallet using the LVGL UI library. It is a large development-only change that introduces simulator code, vendored Rust dependencies, and build tooling. There is no indication from the commit title, message, or diff that this fixes or introduces any security vulnerability.