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 48 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 candidateMerge remote-tracking branch 'agent/benma-agent/hww-start-session'by Marko Bencun · 04302490 · Sep 17, 2026 · 13 filesMessage 50 · ThinLow 34Details
Commit message · Marko Bencun

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

50/100 · ThinMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component! No meaningful explanatory body
Why it was queued
boot or update pathparser or protocol pathmerge-commit duplicate discount
AI analysis · Low 34/100

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-task. The change also fixes a minor timeout-handling issue for the existing INFO command so that merely checking the firmware version no longer keeps an abandoned operation alive. The commit is framed as a robustness improvement, not a security fix, and there is no disclosed vulnerability.

Security candidatehww: reset sessions on host reconnectby benma's agent · 6679936f · Sep 17, 2026 · 12 filesMessage 78 · AdequateModerate 62Details
Commit message · benma's agent

hww: reset sessions on host reconnect

When a host disconnects after receiving an intermediate response, a workflow can remain in
next_request().await while the device stays powered. The HWW lock has already been released, so
the USB timeout does not cancel it. On reconnect, the Python client's attestation request is
consumed as the old workflow's continuation and receives an error encrypted with the old Noise
session instead of an attestation response.

Add a top-level REQ_RESET that cancels the pending task, discards queued HWW responses, resets
Noise and restores the UI before acknowledging the new session. Drop task-owned UI components
before resetting the screen stack, and refuse reset while a U2F workflow owns the shared UI.
Allow REQ_INFO through the HWW busy gate without refreshing the operation timeout, so the host
can discover the firmware version before deciding whether to reset.

Bump the firmware to v9.28.0 and have the Python client issue REQ_RESET before attestation,
unlock and Noise setup only on v9.28.0 or newer. Add regression tests for abandoned
continuations, pending responses, U2F arbitration, INFO timeout behavior and client
compatibility. The powered-device reconnect flow still needs hardware validation.

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 trustfuzzing or regression evidenceboot or update pathparser or protocol path
AI analysis · Moderate 62/100

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 could be misinterpreted as a continuation of the old operation, producing a confusing encrypted error instead of a proper response. The fix adds a new 'reset session' command that the companion app sends at the start of every connection on firmware 9.28.0 and newer, which cancels any leftover task, clears queued responses, resets the encrypted Noise channel, and restores the user interface. The change also lets the host ask for the firmware version without extending an abandoned operation's timeout, so it can safely decide whether to reset.

Security candidateMerge remote-tracking branch 'agent/benma-agent/bootloader-descriptor-compat'by Marko Bencun · 6dccfd24 · Sep 10, 2026 · 2 filesMessage 50 · ThinLow 26Details
Commit message · Marko Bencun

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

50/100 · ThinMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component! No meaningful explanatory body
Why it was queued
update trustboot or update pathmerge-commit duplicate discount
AI analysis · Low 26/100

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 descriptors whose version differs, as long as the magic number and product ID still match. The change is framed as improving compatibility across bootloader descriptor layouts, not as fixing a security bug. The accompanying tests verify that both older and newer stage0 versions are accepted.

Security candidateoled: hold display in reset during startupby Niklas Dusenlund · cdb27835 · Sep 8, 2026 · 1 fileMessage 68 · AdequateLow 35Details
Commit message · Niklas Dusenlund

oled: hold display in reset during startup

Production stage0 verifies stage1 before initializing the OLED. Leaving
the reset pin high can allow previous display content to remain visible
at reduced brightness while the boost converter is disabled.

Set the reset output latch low before enabling the pin as an output.
Keep the OLED in reset until oled_init() releases it and uploads a
cleared framebuffer.

68/100 · AdequateMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context
Why it was queued
access control
AI analysis · Low 35/100

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 to briefly appear at low brightness before the device finished booting. The change ensures the screen is kept fully blank (held in reset) until the firmware is ready to draw a clean screen. This is a defensive fix to prevent a user from seeing stale or misleading information during boot.

Security candidateMerge remote-tracking branch 'agent/benma-agent/factorysetup-trim-unused'by Marko Bencun · 554a0558 · Sep 8, 2026 · 7 filesMessage 50 · ThinInformational 18Details
Commit message · Marko Bencun

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

50/100 · ThinMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component! No meaningful explanatory body
Why it was queued
cryptography-sensitive pathmerge-commit duplicate discount
AI analysis · Informational 18/100

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 instead of a full signing context. It also adds a self-test and a helper that computes the key identifier from the uncompressed form so existing host tooling keeps working. The changes are framed as a size-reduction/cleanup patch; there is no direct evidence in the commit of a security vulnerability being fixed.

Security candidateMerge remote-tracking branch 'agent/benma-agent/validate-py-antiklepto-signatures'by Marko Bencun · 0d1a7997 · Sep 7, 2026 · 5 filesMessage 50 · ThinLow 37Details
Commit message · Marko Bencun

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

50/100 · ThinMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component! No meaningful explanatory body
Why it was queued
signing boundarydefensive validationcryptography-sensitive pathmerge-commit duplicate discount
AI analysis · Low 37/100

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 also validates the recovery ID for recoverable signatures. These are defensive hardening changes rather than a fix for a known active exploit, but they close a gap where a malicious or buggy device could return malformed or malleable signatures that the host software would previously accept.

Security candidatefactorysetup: compress constant root keysby benma's agent · e2273c1f · Sep 4, 2026 · 2 filesMessage 91 · StrongInformational 19Details
Commit message · benma's agent

factorysetup: compress constant root keys

Store the 110 root attestation public keys as const compressed SEC1
points instead of writable uncompressed points. Keep every key and its
index unchanged, and document conversion using Python's ecdsa module.

Derive root identifiers from the uncompressed encoding so the host's
identifiers and the single-signature verification added in #2081 are
preserved.

The factory-setup image shrinks from 155,088 to 152,472 bytes, saving
2,616 bytes. RAM usage drops from 203,304 to 196,152 bytes, saving
7,152 bytes by keeping the table out of writable memory.

Together with the earlier changes in this PR, the image shrinks from
195,296 to 152,472 bytes (-42,824, 21.9%), and RAM usage drops from
203,304 to 196,152 bytes (-7,152, 3.5%). These figures exclude the
peripheral and font changes split into #2092.

91/100 · StrongMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context✓ Mentions testing or verification✓ Links an issue, advisory, or supporting reference✓ Names security-relevant behavior explicitly
Why it was queued
signing boundaryupdate trustdefensive validationcryptography-sensitive path
AI analysis · Informational 19/100

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 table as read-only (`const`). This shrinks the firmware image by about 2.6 KB and reduces RAM use by about 7 KB. A new helper is added so the device can still compute the same public-key identifiers used by host software, and the existing signature verification behavior is preserved. There is no direct vulnerability being fixed; the main security benefit is making the key table tamper-resistant in RAM because it now lives in read-only memory.

Security candidatefactorysetup: reuse SHA-256 for HMACby benma's agent · a790a7f0 · Sep 4, 2026 · 5 filesMessage 78 · AdequateInformational 18Details
Commit message · benma's agent

factorysetup: reuse SHA-256 for HMAC

Use RustCrypto Hmac<Sha256> for the shared HMAC-SHA256 helper so factory
setup reuses the SHA-256 backend already linked for plain hashing.

This reduces the factory-setup image from 159,568 to 155,088 bytes,
saving 4,480 bytes. RAM usage remains 203,304 bytes.

Normal firmware still needs bitcoin_hashes for other callers. Multi
grows from 686,080 to 686,356 bytes (+276), and Bitcoin-only grows from
525,392 to 525,656 bytes (+264).

Add known-answer coverage for empty keys and keys longer than the
SHA-256 block size.

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 path
AI analysis · Informational 18/100

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 vectors were added to confirm the new implementation still produces the correct answers.

Security candidatefactorysetup: use static secp contextby benma's agent · 2756aca4 · Sep 4, 2026 · 2 filesMessage 78 · AdequateInformational 21Details
Commit message · benma's agent

factorysetup: use static secp context

ECDSA verification can use libsecp256k1’s built-in static context.

A dynamically created context links signing support and its
precomputation table, even when Rust requests a verification-only
context.

The previous context initialization reached
secp256k1_context_preallocated_create(), which runs
secp256k1_selftest() automatically. The static context skips
initialization, so run the self-test explicitly once during factory
setup startup, as recommended by libsecp256k1.

This reduces the factory-setup image by 35,728 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
signing boundarydefensive validationcryptography-sensitive path
AI analysis · Informational 21/100

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 smaller. The commit also adds an explicit self-test because the new static context skips the automatic self-test that the old path performed. The change is a size optimization, not a fix for an active security flaw, but it touches cryptographic verification code used during device manufacturing.

Security candidatefactorysetup: speed up certificate setupby benma's agent · d5617112 · Sep 3, 2026 · 1 fileMessage 73 · AdequateInformational 18Details
Commit message · benma's agent

factorysetup: speed up certificate setup

Select the attestation root key by its identifier before verifying the
certificate signature. This decreases the time to set the certificate to
less than 0.1 seconds. Previously it took up to roughly 2.4 seconds for a
root key near the bottom of the list.

73/100 · AdequateMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context✓ Names security-relevant behavior explicitly
Why it was queued
signing boundaryupdate trust
AI analysis · Informational 18/100

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 signature against every known root key until one worked, which could take up to about 2.4 seconds. Now it first looks up the correct root key using a short identifier (a hash of the public key) and then verifies the signature only once, taking less than 0.1 seconds. The security properties remain the same: the signature is still checked, just faster.

Security candidateMerge branch 'nickez/bb03-binaries'by Niklas Dusenlund · 1a648595 · Sep 3, 2026 · 170 filesMessage 45 · ThinInformational 15Details
Commit message · Niklas Dusenlund

Merge branch 'nickez/bb03-binaries'

45/100 · ThinMessage clarity
✓ Descriptive subject✓ Names a concrete action or component! No meaningful explanatory body
Why it was queued
cryptography-sensitive pathboot or update pathmerge-commit duplicate discount
AI analysis · Informational 15/100

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 (once_cell, portable-atomic, rtt-target), build scripts, and CI targets. There is no indication in the commit message or diff that this is a security fix or that it addresses any vulnerability. It appears to be routine product/platform enablement work.

Security candidateMerge branch 'assert-v9.27.1'by Marko Bencun · 37c1fde0 · Aug 31, 2026 · 4 filesMessage 45 · ThinInformational 15Details
Commit message · Marko Bencun

Merge branch 'assert-v9.27.1'

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

This commit adds signed release assertions for the BitBox02 firmware version 9.27.1. It contains only text files and detached signatures that record the expected SHA-256 hash of the official firmware binaries. There is no code change, no bug fix, and no security patch.

Security candidatereleases: add v9.27.1by Marko Bencun · 45bca4de · Aug 31, 2026 · 4 filesMessage 38 · OpaqueInformational 15Details
Commit message · Marko Bencun

releases: add v9.27.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 simply adds official signed release artifacts for BitBox02 firmware version 9.27.1. It contains two text files with build attestations and two detached signatures. There is no code change, no bug fix, and no security-relevant content in the diff itself.

Security candidateMerge branch 'nickez/bootloader-version-in-info'by Niklas Dusenlund · 391864cd · Aug 31, 2026 · 29 filesMessage 45 · ThinInformational 20Details
Commit message · Niklas Dusenlund

Merge branch 'nickez/bootloader-version-in-info'

45/100 · ThinMessage clarity
✓ Descriptive subject✓ Names a concrete action or component! No meaningful explanatory body
Why it was queued
update trustcryptography-sensitive pathboot or update pathmerge-commit duplicate discount
AI analysis · Informational 20/100

This commit adds a new read-only piece of information to the BitBox02 device info API: the installed bootloader's marketing version string. It does not change how the device boots, signs, or verifies anything. It is purely an informational feature for apps and users to see which bootloader is installed, and it is not treated by the authors as a security fix.

Security candidateMerge remote-tracking branch 'agent/benma-agent/improve-firmware-loader-ux'by Marko Bencun · 7860a077 · Aug 28, 2026 · 7 filesMessage 50 · ThinLow 34Details
Commit message · Marko Bencun

Merge remote-tracking branch 'agent/benma-agent/improve-firmware-loader-ux'

50/100 · ThinMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component! No meaningful explanatory body
Why it was queued
boot or update pathmerge-commit duplicate discount
AI analysis · Low 34/100

This commit improves the Python firmware-flashing tool for BitBox hardware wallets. It adds clearer warnings, requires user confirmation before flashing, detects firmware type automatically instead of relying on filename or a debug flag, and exposes more detailed bootloader error messages. The changes are primarily usability and safety improvements for a developer/testing tool, not a fix for an exploitable device vulnerability.

Security candidatepy: improve firmware loader UXby benma's agent · fec27fee · Aug 27, 2026 · 7 filesMessage 83 · StrongInformational 23Details
Commit message · benma's agent

py: improve firmware loader UX

Detect development bootloaders and automatically classify signed and unsigned firmware inputs.

Confirm the detected combination by default, with -y/--yes for non-interactive use.

Keep --debug as a deprecated no-op for backwards compatibility.

Warn about combinations expected to fail without blocking deliberate bootloader error tests.

Treat signature-data errors as nonfatal on development devices and fatal on production devices.

Improve bootloader errors and timeout handling, and document and test the flashing matrix.

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
signing boundaryupdate trustboot or update path
AI analysis · Informational 23/100

This commit improves a Python helper used by developers to flash firmware onto BitBox hardware wallets. It makes the tool smarter about whether the connected device is a production or development unit, detects signed vs unsigned firmware files automatically, and adds clearer warnings and confirmation prompts. The changes are mostly usability and safety improvements for a developer-facing script, not a fix for a remote attack on user devices.

Security candidateMerge remote-tracking branch 'agent/benma-agent/create-firmware-release'by Marko Bencun · 332cd4d2 · Aug 26, 2026 · 9 filesMessage 50 · ThinInformational 12Details
Commit message · Marko Bencun

Merge remote-tracking branch 'agent/benma-agent/create-firmware-release'

50/100 · ThinMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component! No meaningful explanatory body
Why it was queued
signing or wallet pathboot or update pathmerge-commit duplicate discount
AI analysis · Informational 12/100

This commit is a merge that adds and updates release-helper scripts for the BitBox02 hardware wallet. It introduces a new script to draft GitHub firmware releases, refactors existing scripts to share a common parser for signed firmware files, and adds type annotations and tests. There is no direct evidence in the diff of a security vulnerability or malicious change; it appears to be routine release-tooling maintenance.

Security candidateExpose bootloader version in device infoby Niklas Dusenlund · 03cae40c · Aug 25, 2026 · 29 filesMessage 68 · AdequateInformational 19Details
Commit message · Niklas Dusenlund

Expose bootloader version in device info

Read and validate the installed stage1 header, then expose its marketing version through the HAL and device info protobuf response.

Keep the field absent for legacy bootloaders and return None from the Python client when unavailable.

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

This commit adds a new read-only field to the BitBox02's device information response so the host app can learn which bootloader version is installed. It does not change how data is signed, encrypted, or authorized. The main security-relevant aspect is that the firmware now reads a small version string from the bootloader area and validates the bootloader header's magic value and length before exposing it. This is a defensive information-disclosure change rather than a vulnerability fix.

Security candidateMerge branch 'nickez/vendor-stm32-rust-crate'by Niklas Dusenlund · 63e52b84 · Aug 24, 2026 · 300 filesMessage 45 · ThinInformational 22Details
Commit message · Niklas Dusenlund

Merge branch 'nickez/vendor-stm32-rust-crate'

45/100 · ThinMessage clarity
✓ Descriptive subject✓ Names a concrete action or component! No meaningful explanatory body
Why it was queued
signing or wallet pathauthentication pathmerge-commit duplicate discount
AI analysis · Informational 22/100

This commit adds vendored copies of two Rust embedded-crates (cortex-m-rt and its companion macro crate) plus a large auto-generated STM32U5 peripheral access crate to the BitBox02 firmware repository. Vendoring means the project is no longer fetching these libraries from the public crates registry at build time; instead it uses its own frozen copy. The change itself is a build-system/dependency-management refactor. There is no direct evidence in the commit message or diff that this fixes a known security vulnerability, but vendoring can affect how future upstream security patches are applied and the STM32 register definitions are security-relevant because they control hardware protections (TrustZone, debug, flash, etc.).

Security candidateMerge commit 'refs/pull/2061/head' of https://github.com/BitBoxSwiss/bitbox02-firmwareby Marko Bencun · aa92b419 · Aug 24, 2026 · 2 filesMessage 58 · ThinInformational 15Details
Commit message · Marko Bencun

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

58/100 · ThinMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Links an issue, advisory, or supporting reference! No meaningful explanatory body
Why it was queued
boot or update pathmerge-commit duplicate discount
AI analysis · Informational 15/100

This commit only adds two digital signature files for an already-released firmware version (v9.26.5). These signatures are used by users to independently verify that the published firmware binary matches what a specific signer reviewed. No code, no firmware binary, and no behavior of the device or software is changed. There is no security vulnerability here.

Security candidatefix up: --unlock, zeroizing and remove flickerby Jad · 2f27aa90 · Aug 24, 2026 · 3 filesMessage 68 · AdequateLow 44Details
Commit message · Jad

fix up: --unlock, zeroizing and remove flicker

- The graphical simulator starts with the keystore locked; launch
with --unlock (requires --preseed) to start it unlocked. Unlocking
also retains the BIP39 seed, so user gets no password prompt.

- Entered PINs/passphrases are wrapped in zeroize::Zeroizing, copied
straight out of LVGL's buffer. This avoids the intermediate CString
of TextareaExt::get_text(), which was dropped without zeroizing.

- Remove the flicker when nav buttons toggle enabled/disabled.

68/100 · AdequateMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context
Why it was queued
secret or key materialaccess controlmemory safety
AI analysis · Low 44/100

This commit fixes a security hygiene issue in the BitBox02 firmware's on-screen text-entry code. Previously, when a user typed a PIN or passphrase, the code briefly created an intermediate plain-text copy of the secret that was not securely erased from memory after use. The patch reads the secret directly into a zeroizing container so it is wiped when no longer needed. The same commit also removes a visual flicker on disabled navigation buttons and changes a simulator command-line flag from '--lock' to '--unlock'.

Security candidateble: format pairing code without snprintfby Niklas Dusenlund · 1a02902b · Aug 24, 2026 · 1 fileMessage 68 · AdequateInformational 19Details
Commit message · Niklas Dusenlund

ble: format pairing code without snprintf

Write the bounded six-digit pairing code directly. This makes the range proof explicit and avoids the compiler's truncation warning.

68/100 · AdequateMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context
Why it was queued
consensus or confidential-proof validation
AI analysis · Informational 19/100

This commit replaces a standard text-formatting function (snprintf) with a small hand-written loop to display a six-digit Bluetooth pairing code on the BitBox02 hardware wallet screen. The change is described by the author as a cleanup to silence a compiler warning and make the numeric bounds more obvious. There is no direct evidence in the commit that this fixes an exploitable security bug.

Security candidateMerge remote-tracking branch 'agent/benma-agent/bitcoin-time-locks'by Marko Bencun · a6d62b78 · Aug 24, 2026 · 11 filesMessage 50 · ThinLow 32Details
Commit message · Marko Bencun

Merge remote-tracking branch 'agent/benma-agent/bitcoin-time-locks'

50/100 · ThinMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component! No meaningful explanatory body
Why it was queued
cryptography-sensitive pathsigning or wallet pathmerge-commit duplicate discount
AI analysis · Low 32/100

This commit adds support for timestamp-based Bitcoin nLockTime values (values of 500,000,000 or higher) in the BitBox02 hardware wallet. Previously, such locktimes were rejected as invalid. The change also removes the on-screen RBF (Replace-By-Fee) status display from locktime confirmations and updates the Python library to require firmware version 9.27.0 when using timestamp locktimes. It is a feature addition with associated UI changes, not a security fix for a known vulnerability.

Security candidateMerge branch 'release-assertions-v9.26.5'by Marko Bencun · e330bb84 · Aug 24, 2026 · 4 filesMessage 45 · ThinInformational 15Details
Commit message · Marko Bencun

Merge branch 'release-assertions-v9.26.5'

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

This commit adds signed release assertions for BitBox02 firmware version 9.26.5. These are text files plus cryptographic signatures that record the expected SHA-256 hash of the compiled firmware. They are part of the reproducible-build verification process and do not change any firmware code, wallet logic, or device behavior. There is no security vulnerability here.

Security candidatepy: require antiklepto for signingby benma's agent · 52d72f41 · Aug 23, 2026 · 3 filesMessage 68 · AdequateLow 34Details
Commit message · benma's agent

py: require antiklepto for signing

Require firmware 9.4.0 or newer unconditionally for BTC transaction signing.
Reject BTC and ETH message signing and ETH transaction signing when firmware
predates each workflow's antiklepto support.

Keep Ed25519 workflows and the explicit EIP-712 opt-out unchanged, and bump
py-bitbox02 to version 8.0.0 for the breaking change.

68/100 · AdequateMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context
Why it was queued
signing boundary
AI analysis · Low 34/100

This commit updates the BitBox02 Python library so it refuses to sign Bitcoin and Ethereum transactions or messages unless the hardware wallet is running a firmware version that supports the anti-klepto feature. Anti-klepto is a protocol that helps prevent a compromised device from leaking secret key material through biased randomness in signatures. The change removes older, less-protected fallback signing paths and bumps the library version to 8.0.0 because it now requires newer firmware.