BB
← All projectsBitBox

BitBox02 firmware

Firmware and bootloader for BitBox02 signing devices.

BitcoinHardware walletsNormal
Repository coverage

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

239security candidates161second-pass queue727AI analyses
72commits · 30 days
144commits · 60 days
316commits · 180 days
697commits · 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
69Strong · 80–100
325Adequate · 60–79
305Thin · 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 Bencun452133424357
benma's agent11240106164
Niklas Dusenlund15543134057
cedwies12512063
Tomas Vrba10410071
Cedric Wiese12312049
Yasser Aziza333070
Jad14210060
Sebastian Sutter222050
thisconnect212072
benma212074
Niklas111035
Analysis record

Published AI watches

Last scanned 17 minutes ago

Informational 15 AI analysisMessage 58 · Thin
BB BitBoxBitBox02 firmware BitcoinHardware wallets

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

This commit only adds two digital signature files for an already-released firmware version (v9.25.0). These are third-party reproducible-build assertions by a user named 'yaziza', not changes to the firmware source code. There is no code c…

b8bbbb64by Marko Bencun+0−02 files
No security note in commit
Informational 0 AI analysisMessage 58 · Thin
BB BitBoxBitBox02 firmware BitcoinHardware wallets

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

This commit only adds two digital signature files for an already-released firmware version (v9.27.1). These are release attestation signatures from a contributor named 'yaziza'. There is no code change, no firmware change, and nothing in t…

392ac2ffby Marko Bencun+0−02 files
No security note in commit
Informational 12 AI analysisMessage 45 · Thin
BB BitBoxBitBox02 firmware BitcoinHardware wallets

Merge branch 'nickez/bb02-finalize-elf'

This commit is a build-system refactor that unifies how firmware image headers are generated for the BitBox02 and BitBox03. It replaces a device-specific Python script and a C header placeholder with a shared Python tool and JSON manifests…

New input validation in image_header.py for magic, flags, product_id, monotonic_version, marketing_version, image length, and zeroed signature slotsRust parsing now validates slot length, header length alignment, and image length bounds before deriving code lengthRemoval of prepare-stage1-unsigned path reduces attack surface in build tooling
810d3e87by Niklas Dusenlund+573−14413 files
No security note in commit
Informational 12 AI analysisMessage 78 · Adequate
BB BitBoxBitBox02 firmware BitcoinHardware wallets

bootloader: use shared stage1 header tool

This commit is a build-system refactoring for the BitBox02 bootloader. It replaces a C-language placeholder for the bootloader's stage1 header with a Python tool that generates the same header from JSON manifests during the build. The old …

5b14742fby Niklas Dusenlund+52−1105 files
No security note in commit
Low 27 AI analysisMessage 83 · Strong
BB BitBoxBitBox02 firmware BitcoinHardware wallets

scripts: unify the BitBox image format

This commit refactors the firmware image header format used by BitBox hardware wallets so that BitBox02 and BitBox03 share a single 1024-byte layout. It adds new metadata fields (product ID, version numbers, signature slots) and switches t…

Changed binary image header format and parserAdded checked integer conversions for 64-bit image lengthAdded bounds checks on slot length, header length, and image length in Rust loader
9403e6feby Niklas Dusenlund+524−376 files
No security note in commit
Informational 15 AI analysisMessage 68 · Adequate
BB BitBoxBitBox02 firmware BitcoinHardware wallets

scripts: rename image header tool

This commit simply renames a build script from bitbox03_image_header.py to image_header.py and updates all references in the Makefile and Rust build files. The script's contents and behavior are unchanged. There is no security issue here.

29d6720aby Niklas Dusenlund+7−75 files
No security note in commit
Informational 15 AI analysisMessage 70 · Adequate
BB BitBoxBitBox02 firmware BitcoinHardware wallets

Firmware v9.27.1 verification (yaziza)

This commit adds two digital signature files for BitBox02 firmware version 9.27.1. These signatures are a third-party reproducible-build verification (called an 'assertion') created by an independent contributor named yaziza. The commit do…

6d2e6955by Yasser Aziza+0−02 files
No security note in commit
Informational 15 AI analysisMessage 70 · Adequate
BB BitBoxBitBox02 firmware BitcoinHardware wallets

Firmware v9.25.0 verification

This commit adds two digital signature files to the repository. They are third-party reproducible-build attestations (assertions) for the already-released BitBox02 firmware version 9.25.0. The commit does not change any firmware source cod…

b454a627by Yasser Aziza+0−02 files
No security note in commit
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
Repository ledger

Explore captured commits

Expand any commit for its author, full message, clarity score, changed files, triage signals, analysis, and source link.

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.

AI review queuedbitcoin/script: inline bitcoin varint encodingby Marko Bencun · 00a1da05 · Mar 23, 2026 · 6 filesMessage 68 · AdequateInformational 15Details
Commit message · Marko Bencun

bitcoin/script: inline bitcoin varint encoding

Remove the local bitcoin::script helper module and call rust-bitcoin's
VarInt serializer directly at each Bitcoin API use site.

68/100 · AdequateMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context
Why it was queued
signing or wallet pathsecond-pass: security-sensitive path
AI analysis · Informational 15/100

This is a small code cleanup change. It removes a local helper function that wrapped rust-bitcoin's variable-length integer serializer, and instead calls rust-bitcoin's serializer directly at each place it is used. The actual bytes produced are identical, so this does not change behavior or fix a security issue.

Lower-prioritybitcoin/script: use bitcoin varint encoderby Marko Bencun · 9839e5c5 · Mar 23, 2026 · 1 fileMessage 68 · AdequateInformational 18Details
Commit message · Marko Bencun

bitcoin/script: use bitcoin varint encoder

Delegate serialize_varint() to rust-bitcoin's VarInt serializer while
keeping the existing local helper API intact for now.

68/100 · AdequateMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context
AI analysis · Informational 18/100

This commit replaces a hand-written Bitcoin variable-length integer encoder with one from the well-known rust-bitcoin library. The old code appears to have been correct, so this is a code-quality and maintainability improvement rather than a fix for a known security bug. It reduces the chance of future mistakes by relying on a widely reviewed standard implementation.

Lower-prioritychore: Less verbose rust unit testsby Niklas Dusenlund · 6d32aaf4 · Mar 23, 2026 · 1 fileMessage 82 · StrongInformational 15Details
Commit message · Niklas Dusenlund

chore: Less verbose rust unit tests

Only output stdout/err of unit tests in case a verbose build was
requested.

82/100 · StrongMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Uses a recognizable type or scope✓ Provides an explanatory body✓ Mentions testing or verification
Why it was queued
documentation-only discount
AI analysis · Informational 15/100

This commit only changes how much output is shown when running Rust unit tests during firmware builds. It makes the tests less chatty unless verbose mode is explicitly requested. There is no security relevance.

Lower-prioritychore: Move args to black one level upby Niklas Dusenlund · 83e8422b · Mar 23, 2026 · 2 filesMessage 92 · StrongInformational 15Details
Commit message · Niklas Dusenlund

chore: Move args to black one level up

`./scripts/format-python` wasn't working because the configration wasn't
applied. Move the args so that `format-python` can be used.

92/100 · StrongMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Uses a recognizable type or scope✓ Provides detailed explanatory context✓ Explains rationale or failure mode
AI analysis · Informational 15/100

This is a trivial developer tooling change. It moves command-line options for the Python code formatter (black) from one script into another so that the formatting script works correctly. There is no change to firmware, cryptography, wallet behavior, or anything user-facing.

Security candidateBtc: Add btc address derivation to coin purchase memo in payment requestby Cedric Wiese · 9eb4fd04 · Mar 23, 2026 · 5 filesMessage 50 · ThinLow 28Details
Commit message · Cedric Wiese

Btc: Add btc address derivation to coin purchase memo in payment request

50/100 · ThinMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component! No meaningful explanatory body
Why it was queued
cryptography-sensitive path
AI analysis · Low 28/100

This commit adds support for deriving and verifying Bitcoin-family destination addresses inside payment-request memos used for coin swaps. It extends the existing Ethereum-only address-derivation feature to also cover BTC/LTC, and validates that the claimed swap destination address actually matches the derived one. There is no direct evidence this fixes an active security bug; it appears to be a feature addition that also hardens validation.

Security candidateda14531: switch C to Rust API and clean upby Marko Bencun · 5e11f180 · Mar 22, 2026 · 9 filesMessage 45 · ThinInformational 11Details
Commit message · Marko Bencun

da14531: switch C to Rust API and clean up

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

This commit is a routine code cleanup: it removes several C functions that control the Bluetooth chip and replaces their use with equivalent Rust functions. There is no indication in the commit itself that this fixes a security bug or introduces a vulnerability. It is a refactoring change.

Lower-priorityda14531: export C API from bitbox-da14531by Marko Bencun · 81b2e1fa · Mar 22, 2026 · 8 filesMessage 45 · ThinInformational 20Details
Commit message · Marko Bencun

da14531: export C API from bitbox-da14531

45/100 · ThinMessage clarity
✓ Descriptive subject✓ Names a concrete action or component! No meaningful explanatory body
AI analysis · Informational 20/100

This commit exposes a Rust Bluetooth Low Energy (BLE) chip control library to C code. It adds C-callable functions for powering down, resetting, setting product/name strings, and checking connection state. The change is primarily an interface/API export with no obvious security bug, but it introduces new unsafe C boundaries that must be used correctly by callers.

Lower-priorityda14531: move Rust logic to dedicated crateby Marko Bencun · d59668ae · Mar 22, 2026 · 9 filesMessage 45 · ThinInformational 15Details
Commit message · Marko Bencun

da14531: move Rust logic to dedicated crate

45/100 · ThinMessage clarity
✓ Descriptive subject✓ Names a concrete action or component! No meaningful explanatory body
AI analysis · Informational 15/100

This commit is a routine code reorganization: it moves the Rust code that controls the Bluetooth Low Energy (DA14531) chip from one internal module into its own separate crate. The actual logic, commands, and behavior are copied almost unchanged; only the file paths and import names change. There is no indication this fixes or introduces a security problem.

Lower-priorityda14531: add reset/status Rust helpersby Marko Bencun · 834b94f8 · Mar 22, 2026 · 1 fileMessage 78 · AdequateInformational 15Details
Commit message · Marko Bencun

da14531: add reset/status Rust helpers

Add Rust helpers to enqueue BLE chip reset and BLE status requests,
and add unit tests with explicit expected hex frames.

78/100 · AdequateMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context✓ Mentions testing or verification
AI analysis · Informational 15/100

This commit adds two new helper functions in Rust for talking to the Bluetooth chip inside the BitBox02 hardware wallet: one to reset the chip and one to ask for its current connection state. It also adds unit tests that check the exact bytes sent. There is no security issue visible in this change; it is a straightforward feature addition with tests.

Lower-prioritybitbox02/da14531: port functions to Rustby Marko Bencun · ddbc0377 · Mar 22, 2026 · 4 filesMessage 45 · ThinInformational 17Details
Commit message · Marko Bencun

bitbox02/da14531: port functions to Rust

45/100 · ThinMessage clarity
✓ Descriptive subject✓ Names a concrete action or component! No meaningful explanatory body
AI analysis · Informational 17/100

This commit rewrites low-level Bluetooth setup commands for the BitBox02 hardware wallet from C bindings into safer Rust code. It is a routine refactoring/porting change with no obvious security bug, though it removes an old C-string conversion and adds a length check for the product string.

AI review queuedSwap: Add swap ui flow (BTC/LTC -> ETH-like)by Cedric Wiese · cc45c948 · Mar 19, 2026 · 2 filesMessage 45 · ThinLow 37Details
Commit message · Cedric Wiese

Swap: Add swap ui flow (BTC/LTC -> ETH-like)

45/100 · ThinMessage clarity
✓ 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 · Low 37/100

This commit adds a new on-device user interface flow for cryptocurrency swaps, where a user can exchange Bitcoin or Litecoin for an Ethereum-like coin through a payment request. The code adds validation rules and user confirmation screens so the hardware wallet can show what is being swapped and where the received coins will go. The change is a feature addition with defensive checks, not a clear fix for an existing vulnerability.

Lower-priorityscripts: add dev-exec.shby Marko Bencun · ab178830 · Mar 18, 2026 · 3 filesMessage 53 · ThinInformational 15Details
Commit message · Marko Bencun

scripts: add dev-exec.sh

Make it possible for devs to choose if they prefer project commands to
run on host or inside docker.

53/100 · ThinMessage clarity
✓ Subject identifies a change✓ Names a concrete action or component✓ Provides an explanatory body
AI analysis · Informational 15/100

This commit adds a small convenience script that lets developers choose whether project commands run directly on their computer or inside the project's Docker container. It only changes developer tooling and documentation; it does not touch the firmware, wallet logic, cryptography, or any user-facing security feature.

Lower-priorityDockerfile: Use `python3` executable.by Niklas Dusenlund · b0b44617 · Mar 17, 2026 · 4 filesMessage 66 · AdequateInformational 15Details
Commit message · Niklas Dusenlund

Dockerfile: Use `python3` executable.

Python should be invoked as `python3` since we are writing python3 code
and not python2. See https://peps.python.org/pep-0394/#recommendation
Many (most?) distributions do not distribute a "python" executable any
more, forcing you to pick either 2 or 3.

66/100 · AdequateMessage clarity
✓ Descriptive subject✓ Provides detailed explanatory context✓ Links an issue, advisory, or supporting reference
AI analysis · Informational 15/100

This commit is a routine build/maintenance change. It updates two helper scripts to explicitly call Python 3 instead of relying on a system default 'python' command, and removes a Dockerfile step that forced 'python' to point to Python 3. There is no security-relevant change to the firmware or its behavior.

Security candidatechore: Break cyclic depby Niklas Dusenlund · 531f9f88 · Mar 17, 2026 · 9 filesMessage 55 · ThinInformational 15Details
Commit message · Niklas Dusenlund

chore: Break cyclic dep

bitbox02 must not depend on bitbox02-rust

55/100 · ThinMessage clarity
✓ Subject identifies a change✓ Uses a recognizable type or scope✓ Provides an explanatory body
Why it was queued
seed or entropy path
AI analysis · Informational 15/100

This is a routine code cleanup commit that reorganizes how two internal Rust software components connect to each other. It removes a circular dependency where a higher-level crate called 'bitbox02-rust' depended on a lower-level crate called 'bitbox02', and vice versa. The change moves a small piece of noise-cryptography-related code into the lower-level crate and adjusts build configuration files accordingly. There is no indication this fixes a security vulnerability or changes user-visible behavior.

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 candidatesecurechip: decouple from C bitbox02 memory implby Marko Bencun · e1cea0c5 · Mar 16, 2026 · 2 filesMessage 45 · ThinInformational 15Details
Commit message · Marko Bencun

securechip: decouple from C bitbox02 memory impl

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

This commit is a routine internal refactoring: it moves the lookup of which secure chip type (ATECC or Optiga) is present from an older C memory module to a newer Rust memory module. The actual chip-detection logic and behavior do not change; only which internal API is called. There is no indication this fixes or introduces a security vulnerability.

Security candidateoptiga+atecc: decouple from memory.hby Marko Bencun · 627f089a · Mar 16, 2026 · 16 filesMessage 60 · AdequateInformational 17Details
Commit message · Marko Bencun

optiga+atecc: decouple from memory.h

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 software architecture cleanup: it moves some type definitions and helper functions so that secure-chip code (ATECC/Optiga) no longer depends directly on the BitBox02-specific memory module. The goal stated by the developer is to make those modules reusable in a future BitBox03. There is no direct evidence in the commit that it fixes a security vulnerability, changes cryptographic behavior, or introduces a bug.

Lower-priorityremove salt.c/salt.hby Marko Bencun · 0ff1a9e6 · Mar 16, 2026 · 9 filesMessage 53 · ThinInformational 17Details
Commit message · Marko Bencun

remove salt.c/salt.h

It was a thin wrapper, we inline it so the list of C files we need to
consider in bb02/bb03 is smaller.

53/100 · ThinMessage clarity
✓ Subject identifies a change✓ Names a concrete action or component✓ Provides an explanatory body
AI analysis · Informational 17/100

This commit removes a small C wrapper file (salt.c/salt.h) and replaces its use with direct calls to an equivalent Rust function. The actual password-stretching and hashing logic is unchanged; it is only moved from one place in the code to another. There is no indication this fixes or introduces a security vulnerability.

Lower-priorityBtc: accept SWAPKIT payment request identitiesby Cedric Wiese · 39659c65 · Mar 11, 2026 · 1 fileMessage 45 · ThinInformational 18Details
Commit message · Cedric Wiese

Btc: accept SWAPKIT payment request identities

45/100 · ThinMessage clarity
✓ Descriptive subject✓ Names a concrete action or component! No meaningful explanatory body
AI analysis · Informational 18/100

This commit adds a new trusted Bitcoin payment-request signer called SWAPKIT to the BitBox02 hardware wallet. It also makes matching more flexible for SWAPKIT so names like 'swapkit (Provider)' or 'SwapKit' are accepted. The change is a routine allow-list update, not a fix for a security bug.

Lower-priorityoptiga: handle counter reset errorsby benma · 4e8eae88 · Mar 11, 2026 · 1 fileMessage 68 · AdequateLow 44Details
Commit message · benma

optiga: handle counter reset errors

Check the return value of _reset_counter() in
_configure_object_counter() and propagate failures before
writing metadata.

This restores the previous behavior where counter initialization
errors abort setup instead of being silently ignored.

68/100 · AdequateMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context
AI analysis · Low 44/100

This commit fixes a bug in the BitBox02 hardware wallet's handling of a tamper-resistant counter chip (Optiga). Previously, if the counter reset failed, the device silently ignored the error and continued to write metadata. Now the error is checked and the setup is aborted. This restores safer behavior and prevents the device from continuing in a potentially inconsistent state.

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.

AI review queuedeth: fix data streaming issue when data lenght is exactly 1 byteby Tomas Vrba · a2579c78 · Mar 10, 2026 · 6 filesMessage 73 · AdequateModerate 59Details
Commit message · Tomas Vrba

eth: fix data streaming issue when data lenght is exactly 1 byte

When transaction data is streamed from the host in chunks, the
first_byte() method was called synchronously but the byte hadn't
been fetched yet for 1-byte payloads. Make first_byte() async so
it can request the byte from the host on demand, and handle the
1-byte special case in next() by returning the cached byte
directly instead of issuing a redundant chunk request.

73/100 · AdequateMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context
Why it was queued
signing or wallet pathsecond-pass: security-sensitive path
AI analysis · Moderate 59/100

This commit fixes a bug in the BitBox02 hardware wallet's Ethereum transaction signing. When signing an Ethereum transaction whose 'data' field is exactly 1 byte long and is streamed from the host computer in chunks, the device could call for the first byte before it had actually been fetched, leading to a crash or failed signing. The fix makes the first-byte lookup asynchronous so it can request the byte from the host on demand, and avoids asking for an extra chunk when the whole payload is just that one byte. New unit tests and regenerated test vectors confirm the 1-byte case now works.

Lower-priorityAGENTS.md: prefer hex! literalsby Jad · d73d7e90 · Mar 10, 2026 · 1 fileMessage 70 · AdequateInformational 15Details
Commit message · Jad

AGENTS.md: prefer hex! literals

Documented the test-style preference in AGENTS.md to prefer hex!
literals for Rust unit-test byte arrays/constants.

70/100 · AdequateMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Provides an explanatory body✓ Mentions testing or verification
Why it was queued
documentation-only discount
AI analysis · Informational 15/100

This commit only updates an internal coding-style guide (AGENTS.md) for developers. It adds a recommendation to use a particular Rust macro (`hex!`) when writing unit tests. There is no code change, no bug fix, and no security relevance.