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 queue119AI analyses
28commits · 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 Bencun39011773258
Niklas Dusenlund1112914059
benma's agent892818062
cedwies1254063
Tomas Vrba944074
Cedric Wiese1232049
Jad811062
thisconnect210072
benma211074
Niklas111035
Yasser Aziza111070
Patrick Steiger110045
Analysis record

Published AI watches

Last scanned 21 minutes ago

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
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
Moderate 59 AI analysisMessage 69 · Adequate
BB BitBoxBitBox02 firmware BitcoinHardware wallets

Limit SD erase file size

This commit fixes a bug in how the BitBox02 hardware wallet wipes files from its SD card. Before erasing a file, the device now checks the file's reported size against a safe maximum. Without this check, a tampered SD card could claim a fi…

CVE-2026-6682 referenced in commit messageMalformed FAT directory entry could cause excessive overwrite loopDenial-of-service via SD card tampering
2453f528by Marko Bencun+4−01 file
Vendor flagged security relevance
High 70 AI analysisMessage 66 · Adequate
BB BitBoxBitBox02 firmware BitcoinHardware wallets

Validate mounted FAT geometry

This update adds a safety check when the BitBox02 hardware wallet mounts a microSD card. A malicious or deliberately malformed FAT filesystem could trick the device's file-system library into placing user data inside attacker-controlled bo…

Fixes integer-wrap / geometry confusion in FAT mount logicAdds explicit post-mount validation of filesystem metadataPrevents data area from landing inside attacker-controlled FAT sectors
01c017d6by Marko Bencun+21−01 file
Vendor flagged security relevance
Low 34 AI analysisMessage 59 · Thin
BB BitBoxBitBox02 firmware BitcoinHardware wallets

api: add BitBoxSync

This commit adds a brand-new firmware feature called BitBoxSync, which lets the BitBox02 hardware wallet participate in a sync service by proving its identity, signing login/admin intents, and decrypting namespace encryption keys. The code…

New cryptographic API surface added to the hardware wallet (Ed25519, X25519, HKDF, AEAD)Vendored third-party crate `hkdf` introduced into the firmware supply chainNew user-confirmation flow for signing sync intents; one operation (UnwrapNamespaceDek) deliberately skips confirmation
54cdb54dby Marko Bencun+2883−2230 files
No security note in commit
Informational 0 AI analysisMessage 45 · Thin
BB BitBoxBitBox02 firmware BitcoinHardware wallets

blupgrade: update stage1 binaries to v1.2.2

This commit simply swaps in newer pre-built bootloader stage1 binary files (version 1.2.2 replacing 1.2.1) for four BitBox02 hardware variants and updates the corresponding checksum list. The actual code inside the new binary files is not …

5940a800by Marko Bencun+8−86 files
No security note in commit
Moderate 59 AI analysisMessage 50 · Thin
BB BitBoxBitBox02 firmware BitcoinHardware wallets

bootloader/stage1: fix erase handling for partially erased blocks

This update fixes the BitBox02 bootloader's firmware-erase routine. Previously, when erasing leftover padding after a firmware update, the bootloader started erasing at the exact page where the firmware ended. Because flash memory can only…

Bootloader firmware erase routine could erase a flash block containing both firmware and paddingFix aligns erase start to erase-block boundary and re-checks erased state before erasingChangelog describes the change as a fix for 'partially erased flash blocks'
b31206a8by Marko Bencun+23−83 files
No security note in commit
Informational 15 AI analysisMessage 45 · Thin
BB BitBoxBitBox02 firmware BitcoinHardware wallets

blupgrade: add stage0/stage1 production binaries

This commit adds production bootloader upgrade files for the BitBox02 hardware wallet and updates build scripts to use them. It is a routine asset-management change: replacing placeholder development hashes with real signed production bina…

8db4b0dcby Marko Bencun+26−1720 files
No security note in commit
Informational 20 AI analysisMessage 83 · Strong
BB BitBoxBitBox02 firmware BitcoinHardware wallets

blupgrade: keep dev stage1 unsigned

This commit fixes a build script used only for development/testing versions of the BitBox02 bootloader upgrade. It makes the development-stage1 bootloader images unsigned again, while keeping production images fully signature-verified. The…

Signature verification relaxed only for development buildsProduction payload validation still requires signaturesDevelopment stage0 already skipped stage1 signature verification per commit message
476b90e3by Marko Bencun+9−69 files
No security note in commit
High 76 AI analysisMessage 23 · Opaque
BB BitBoxBitBox02 firmware BitcoinHardware wallets

security improvements

This BitBox02 firmware update is a broad security patch that fixes several independent bugs: it prevents a maliciously oversized USB report from overflowing memory, stops a corrupted Bluetooth pairing database from being read or written wi…

Bounds check added to USB HID Set Report input lengthBLE bond DB length validation hardened against negative and oversized valuesBootloader firmware image size limit relaxed to intended maximum
cbb40634by Marko Bencun+1117−25021 files
Vendor flagged security relevance
Low 46 AI analysisMessage 60 · Adequate
BB BitBoxBitBox02 firmware BitcoinHardware wallets

bootloader: allow full sized images

This commit fixes a bootloader bug where the device rejected firmware updates that used the maximum allowed size. The off-by-one check meant legitimate full-sized firmware images could not be installed, potentially blocking updates. The fi…

Off-by-one input validation in firmware-update pathBootloader change affecting firmware chunk count acceptanceCHANGELOG labels the change as a bugfix for full-sized firmware upgrades
f60b93ccby Marko Bencun+5−33 files
No security note in commit
Moderate 59 AI analysisMessage 28 · Opaque
BB BitBoxBitBox02 firmware BitcoinHardware wallets

Add bootloader update

This is a large firmware commit that adds a new two-stage bootloader update mechanism for the BitBox02 hardware wallet. It replaces the old single bootloader with a small, fixed 'stage0' plus a separately signed 'stage1', and ships a speci…

Bootloader architecture changed from monolithic to two-stage (stage0 + signed stage1).Firmware signature hash now includes a 16-bit product_id, binding firmware to product variant.Root public keys were rotated/replaced with a single set across all products.
3f1f3172by Marko Bencun+5003−52379 files
Vendor flagged security relevance
Informational 15 AI analysisMessage 73 · Adequate
BB BitBoxBitBox02 firmware BitcoinHardware wallets

Add flash data backup scripts

This commit adds two helper scripts for developers to back up and restore BitBox02 flash memory areas using a Segger J-Link debugger. The scripts require physical hardware access and a debugging probe, and they are not part of the firmware…

285fa768by Niklas Dusenlund+383−03 files
No security note in commit
Informational 15 AI analysisMessage 40 · Thin
BB BitBoxBitBox02 firmware BitcoinHardware wallets

bb03 UI: placeholder BTC signing workflows

This commit replaces unfinished placeholder code (which would crash with 'todo!()') with simple working user-interface placeholders for Bitcoin signing demonstrations. It adds basic on-screen prompts to confirm a recipient/amount and a tot…

f7b0b082by Jad+24−121 file
No security note in commit
Informational 17 AI analysisMessage 78 · Adequate
BB BitBoxBitBox02 firmware BitcoinHardware wallets

Bump Rust toolchain to 1.96

This commit is a routine maintenance update for the BitBox02 hardware wallet firmware. It upgrades the pinned Rust compiler toolchain from an older version to Rust 1.96.0, updates the project's Docker build container and related developer …

Routine toolchain and dependency upgradeVendored libc updated across many platform bindingsNo first-party security-relevant code changes
55e3dd30by Niklas Dusenlund+14839−13798360 files
No security note in commit
Informational 18 AI analysisMessage 68 · Adequate
BB BitBoxBitBox02 firmware BitcoinHardware wallets

bootloader: reduce snprintf

This commit removes the use of the standard snprintf formatting function from the BitBox02 bootloader's developer menu and replaces it with a small, fixed-format helper. The main goal is to reduce the bootloader's binary size and make the …

Removes snprintf/printf usage from bootloader code, reducing binary bloat and eliminating a complex formatting library from a privileged execution contextExtends automated CI check to detect stdio/Rust formatting symbols in regular development and production bootloader outputs, not just production buildsAdds unit test coverage for the new fixed-format helper
2fb9d57fby Marko Bencun+59−106 files
No security note in commit
Informational 12 AI analysisMessage 68 · Adequate
BB BitBoxBitBox02 firmware BitcoinHardware wallets

bootloader: hash BLE firmware in C

This commit is a code-size optimization for the BitBox02 bootloader. It switches the Bluetooth Low Energy (BLE) firmware hash verification from a Rust SHA-256 implementation to an existing C-based SHA-256 implementation already used by the…

Change is described by the vendor as a size optimization, not a security fix.No functional change to the hash verification logic: SHA-256 digest is still computed and compared against metadata.allowed_firmware_hash.CI check added to enforce use of the smaller PUKCC SHA-256 path in production bootloaders.
1d82b8a4by Marko Bencun+18−02 files
No security note in commit
Low 35 AI analysisMessage 63 · Adequate
BB BitBoxBitBox02 firmware BitcoinHardware wallets

bootloader: avoid snprintf formatting

This commit removes the use of standard string-formatting functions (like snprintf and Rust's format!) from the bootloader and related low-level code, replacing them with smaller, fixed-size string builders. The stated goal is to reduce bi…

Removal of stdio formatting (snprintf family) from bootloader codeRemoval of Rust format!/write! formatting from bootloader-linked codeAddition of CI gate rejecting stdio and Rust formatting symbols in production bootloader ELFs
33434fa9by Marko Bencun+298−6314 files
No security note in commit
Informational 15 AI analysisMessage 35 · Opaque
BB BitBoxBitBox02 firmware BitcoinHardware wallets

bootloader: extract formatting helpers

This commit is a simple code cleanup: it moves a handful of string-formatting helpers (for pairing codes, progress percentages, hash display, timers, and unknown-command messages) out of the main bootloader file into a new dedicated file, …

1a1de3b5by Marko Bencun+147−126 files
No security note in commit
Informational 17 AI analysisMessage 58 · Thin
BB BitBoxBitBox02 firmware BitcoinHardware wallets

bootloader: render messages directly

This commit removes a 100-character stack buffer and passes bootloader messages straight to the screen-drawing function. The old code used snprintf to copy the message into a fixed-size buffer, which could silently truncate very long strin…

Removal of fixed-size stack buffer in bootloader display pathElimination of snprintf with potentially attacker-influenced format string argumentBootloader code touched, which is a security-sensitive component
c0bc7b92by Marko Bencun+1−31 file
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 candidateFormat generated protobufs explicitlyby Niklas Dusenlund · f22f12cd · Apr 22, 2026 · 3 filesMessage 58 · ThinInformational 15Details
Commit message · Niklas Dusenlund

Format generated protobufs explicitly

Run rustfmt from the explicit protobuf regeneration script and include
the generated Rust files in check-style.

This keeps firmware builds working by avoiding formatting inside the
generator/build path while making the manual regen workflow produce
style-clean committed outputs.

58/100 · ThinMessage clarity
✓ Descriptive subject✓ Provides detailed explanatory context
Why it was queued
cryptography-sensitive pathparser or protocol path
AI analysis · Informational 15/100

This commit is purely a code-style and build-maintenance change. It makes the Rust code generated from protocol-buffer definitions be formatted by rustfmt automatically and included in style checks. No security-sensitive behavior is changed.

Security candidateMove protobuf bindings into bitbox-protoby Niklas Dusenlund · 06f33ef3 · Apr 22, 2026 · 21 filesMessage 68 · AdequateInformational 15Details
Commit message · Niklas Dusenlund

Move protobuf bindings into bitbox-proto

Add a committed bitbox-proto crate for the generated Rust protobuf
bindings.

Switch regeneration to a Cargo-driven flow, add a make shortcut and CI
drift check, and keep the generator copy-on-change so no-op regen runs
do not churn timestamps or invalidate build caches.

68/100 · AdequateMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context
Why it was queued
defensive validationcryptography-sensitive pathsigning or wallet pathparser or protocol path
AI analysis · Informational 15/100

This commit is a build-system and code-organization refactor. It moves the automatically generated Rust protobuf message definitions from inside the main bitbox02-rust crate into a new, separate bitbox-proto crate. It also switches the generation flow from CMake to Cargo, adds a CI check to ensure the committed generated files stay in sync with the .proto source files, and avoids touching timestamps when regeneration produces identical output. There is no change to the actual device firmware logic or to how messages are parsed and validated.

Security candidatesecurechip: change output type of password stretch to [u8; 32]by Marko Bencun · 3992ca43 · Apr 21, 2026 · 9 filesMessage 50 · ThinInformational 15Details
Commit message · Marko Bencun

securechip: change output type of password stretch to [u8; 32]

Encode size in type for clarity.

50/100 · ThinMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component! No meaningful explanatory body
Why it was queued
signing boundary
AI analysis · Informational 15/100

This commit is a straightforward code cleanup: it changes the return type of password-stretching functions from a variable-length byte list to a fixed 32-byte array, because the result is always exactly 32 bytes. The change makes the code clearer and lets the compiler enforce the size, but it does not fix any security bug or change behavior.

Security candidateui: don't show waiting screen during password stretchby Marko Bencun · 22cadd6c · Apr 20, 2026 · 15 filesMessage 73 · AdequateInformational 15Details
Commit message · Marko Bencun

ui: don't show waiting screen during password stretch

Before the securechip operations became async, the UI did not process
during keystore unlock and froze at the last screen of the password
confirmation, and UI continued with the BIP39 unlock animation.

Now that they are async, the password screen is popped and the waiting
screen would be shown for roughly 1s before the unlock animation
started. To improve UI there, we start showing first screen of the
unlock animation (the locked lock) as the filler screen.

Instead of the default waiting screen being shown, during these
operations the first animation frame component is shown and held, with
animation starting only in bip39_unlock.

The downside is that when entering the wrong password, it is also
briefly shown before the wrong-password error message, but it's
acceptable.

There are other workflows where the waiting screen is also shown
during the stretch, not addresed by this commit: show mnemonic, create
backup, and change password (any call to
`workflows::unlock::unlock_keystore()` to check the password).

Co-Authored-By: Niklas Dusenlund <niklas.dusenlund@bitbox.swiss>

73/100 · AdequateMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context
Why it was queued
secret or key material
AI analysis · Informational 15/100

This commit is a user-interface polish change for the BitBox02 hardware wallet. It replaces a generic 'waiting' spinner with the first frame of the unlock animation while the device is busy stretching the user's password. There is no security vulnerability or fix here—only a visual improvement to make the device look smoother during unlock.

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

Security candidatePy: avoid brittle Bootloader import in editable installsby Cedric Wiese · faebccd4 · Mar 16, 2026 · 1 fileMessage 50 · ThinInformational 15Details
Commit message · Cedric Wiese

Py: avoid brittle Bootloader import in editable installs

50/100 · ThinMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component! No meaningful explanatory body
Why it was queued
update trust
AI analysis · Informational 15/100

This is a minor Python import cleanup in a developer/test script. It changes how one internal class is imported so that the script works reliably when installed in 'editable' mode. There is no security issue here.

Security candidateci: pin mattermost notify actionby benma · e17167ee · Mar 11, 2026 · 1 fileMessage 80 · StrongLow 30Details
Commit message · benma

ci: pin mattermost notify action

Pin the Mattermost action in report-artifacts to an immutable commit SHA instead of the mutable master branch.

Also set explicit job-level permissions to contents: read to reduce default GITHUB_TOKEN privileges for this secret-using job.

80/100 · StrongMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Uses a recognizable type or scope✓ Provides detailed explanatory context
Why it was queued
access controlcredential or privilege statedocumentation-only discount
AI analysis · Low 30/100

This commit hardens the project's automated CI workflow in two ways: it pins a third-party Mattermost notification action to a specific, unchangeable version (instead of a moving 'master' branch), and it restricts the job's GitHub token permissions to read-only access to repository contents. These are defensive security improvements that reduce supply-chain and privilege risks, but the commit itself does not fix an active vulnerability.

Security candidatereplace asf4 C ringbuffer with Rust ByteQueueby Marko Bencun · 4c69f5c5 · Mar 2, 2026 · 26 filesMessage 45 · ThinLow 38Details
Commit message · Marko Bencun

replace asf4 C ringbuffer with Rust ByteQueue

45/100 · ThinMessage clarity
✓ Descriptive subject✓ Names a concrete action or component! No meaningful explanatory body
Why it was queued
boot or update pathparser or protocol path
AI analysis · Low 38/100

This commit swaps out an old C ringbuffer for a new Rust-based byte queue used to hold data sent to the Bluetooth chip. The change touches many files but is mostly a rewrite/refactor. It removes several explicit 'will it fit?' size checks before adding data to the queue, and it changes how callers pass the queue around. The Rust ByteQueue implementation itself is not shown in the diff, so we cannot verify whether it safely handles overflow, memory allocation failures, or concurrent access. The change is therefore a security-relevant refactor with some risk, but no proven vulnerability is visible in the supplied commit.

Security candidateAdd coin purchase memo supportby cedwies · 10746100 · Feb 26, 2026 · 8 filesMessage 45 · ThinLow 27Details
Commit message · cedwies

Add coin purchase memo support

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 · Low 27/100

This commit adds a new 'coin purchase memo' feature to BitBox02 payment requests. It lets a payment request include details about a separate coin purchase (e.g., '0.25 ETH to address 0x...') and verifies that the listed Ethereum address really belongs to the wallet by deriving it from a provided keypath. The change is mostly a feature addition, but it introduces cross-currency validation logic and a TODO noting that the user-interface confirmation for this new memo type is not yet implemented.

Security candidatebitbox02-rust: remove redundant mock_memory callsby Marko Bencun · c7089da8 · Feb 19, 2026 · 11 filesMessage 60 · AdequateInformational 15Details
Commit message · Marko Bencun

bitbox02-rust: remove redundant mock_memory calls

With introduction of HAL, many of them are not needed anymore.

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

This commit only cleans up test code by removing unnecessary calls to a mock memory setup function. It does not change the actual firmware that runs on the BitBox02 device, so it has no security impact on users.

Security candidatekeystore: add KeystoreHal abstractionby Marko Bencun · 4fc335ee · Feb 19, 2026 · 2 filesMessage 58 · ThinInformational 15Details
Commit message · Marko Bencun

keystore: add KeystoreHal abstraction

Introduce the KeystoreHal trait and KeystoreHalImpl adapter over HAL
subsystems.

Route unlock_bip39 and transitive keystore internals through
KeystoreHal and update workflow unlock to pass KeystoreHalImpl.

Reason: to not keep a mutable borrow of Hal Ui (part of Hal), which
will be used in parallel during unlock_bip39(), which performs an UI
animation in parallel.

58/100 · ThinMessage clarity
✓ Descriptive subject✓ Provides detailed explanatory context
Why it was queued
secret or key material
AI analysis · Informational 15/100

This commit is a straightforward internal code refactor. It introduces a new 'KeystoreHal' adapter so that the keystore code can borrow only the hardware subsystems it needs (memory, random number generator, secure chip) instead of borrowing the entire HAL, which also contains the user interface. The stated reason is to allow a UI animation to run in parallel while the device unlocks. There is no change to security logic, cryptography, or user-facing behavior.

Security candidatesalt: hash_data takes Memoryby Marko Bencun · b608856e · Feb 19, 2026 · 3 filesMessage 58 · ThinInformational 12Details
Commit message · Marko Bencun

salt: hash_data takes Memory

Change salt::hash_data to take &mut impl Memory instead of &mut impl Hal.

Update keystore callsites to pass hal.memory().

Reason: to not keep a mutable borrow of Hal Ui (part of Hal), which
will be used in parallel during unlock_bip39().

58/100 · ThinMessage clarity
✓ Descriptive subject✓ Provides detailed explanatory context
Why it was queued
secret or key materialboot or update path
AI analysis · Informational 12/100

This is a small internal code cleanup in the BitBox02 firmware's Rust code. It changes a helper function so it borrows only the memory/storage part of the hardware abstraction layer, rather than the whole hardware abstraction layer. The commit message says this is preparation for a future change where the user interface part of the hardware layer will be used at the same time during wallet unlocking. There is no direct security fix here and no vulnerability is described.

Security candidatebitbox02_rust/hal: add ui confirm/fontby Marko Bencun · 5bacbf78 · Feb 18, 2026 · 38 filesMessage 78 · AdequateInformational 15Details
Commit message · Marko Bencun

bitbox02_rust/hal: add ui confirm/font

Introduce hal::ui::ConfirmParams and hal::ui::Font so HAL interfaces no longer depend on workflow or bitbox02 ui confirmation types.

Adapt all callsites and add exhaustive conversion tests in hal::bitbox02::ui for font and confirm params mapping.

78/100 · AdequateMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context✓ Mentions testing or verification
Why it was queued
signing or wallet pathauthentication path
AI analysis · Informational 15/100

This commit is a routine internal code cleanup. It moves the definitions of confirmation-screen parameters and fonts out of the workflow layer and into the hardware-abstraction (HAL) layer, then updates all call sites to use the new names. There is no change to user-facing behavior, no bug fix, and no security vulnerability being addressed.

Security candidatedocker: Add new targetby Niklas Dusenlund · 57410cb2 · Feb 16, 2026 · 423 filesMessage 63 · AdequateInformational 17Details
Commit message · Niklas Dusenlund

docker: Add new target

* Add target for cortex-m33
* Update rustc to latest (reduces firmware size by about 4k)
* Update llvm to match rust
* Vendor new deps due to new toolchain
* Update Arm GNU toolchain to 15 (further reduces by about 2k)

63/100 · AdequateMessage clarity
✓ Subject identifies a change✓ Provides detailed explanatory context✓ Explains rationale or failure mode
Why it was queued
cryptography-sensitive pathseed or entropy pathsigning or wallet pathauthentication pathparser or protocol path
AI analysis · Informational 17/100

This is a routine build-system and toolchain update for the BitBox02 firmware. It adds support for a new ARM processor target (Cortex-M33), upgrades the Rust compiler, LLVM, and the ARM GNU toolchain, and pulls in newer versions of some third-party Rust libraries. There is no direct evidence in the commit of a security vulnerability being fixed or introduced. The main risk is the usual one with large toolchain and dependency updates: a small chance that compiler, library, or behavior changes could introduce subtle bugs, but nothing in the diff points to an exploitable flaw.