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 55 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 candidatesecurechip: port attestation signby Marko Bencun · 2bccdebf · Apr 22, 2026 · 25 filesMessage 35 · OpaqueInformational 20Details
Commit message · Marko Bencun

securechip: port attestation sign

35/100 · OpaqueMessage clarity
✓ Descriptive subject! No meaningful explanatory body! Opaque security-relevant change
Why it was queued
update trustboot or update path
AI analysis · Informational 20/100

This commit is a code refactoring that moves the device attestation signing function from C code into Rust code. It converts the function to be asynchronous (async/await) and rewrites the parsing of the secure chip's DER-encoded signature in Rust. There is no direct evidence in the commit that this fixes a security vulnerability; it appears to be a normal portability and maintainability improvement. The change does add safety checks for signature length and zeroizes sensitive buffers after use, which are good defensive practices.

Security candidatesecurechip: make random asyncby Marko Bencun · 797a37e6 · Apr 22, 2026 · 17 filesMessage 40 · ThinLow 33Details
Commit message · Marko Bencun

securechip: make random async

40/100 · ThinMessage clarity
✓ Descriptive subject✓ Names security-relevant behavior explicitly! No meaningful explanatory body
Why it was queued
seed or entropy path
AI analysis · Low 33/100

This commit rewrites how the BitBox02 hardware wallet fetches random numbers from its secure chip. Previously, the secure chip's random generator was called in a blocking (synchronous) way. The change makes it asynchronous, so the firmware can do other work while waiting. It also removes an older, simpler random interface and now mixes the secure-chip randomness with the microcontroller's own randomness before using it for sensitive key material. The commit itself is a defensive refactor; it does not appear to fix a known exploit, but it removes a synchronous call that could stall the device and strengthens how random values are combined when creating password-stretching secrets.

Security candidateassert 9.26.1by Niklas Dusenlund · 0b6e2efb · Apr 22, 2026 · 2 filesMessage 28 · OpaqueInformational 15Details
Commit message · Niklas Dusenlund

assert 9.26.1

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

This commit only adds two new digital signature files for an already-released firmware version (9.26.1). These signatures are used by independent builders to publicly attest that they reproduced the official firmware exactly from source code. No code, no firmware binary, and no behavior of the device changed. There is nothing here that could affect security of the BitBox02 itself.

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.

Lower-priorityoptiga: dedup busy pollingby Marko Bencun · 53996787 · Apr 21, 2026 · 1 fileMessage 58 · ThinInformational 15Details
Commit message · Marko Bencun

optiga: dedup busy polling

Share the busy-wait polling logic between reclaim_detached_op() and
wait() in the async Optiga wrapper.

This keeps the async behavior unchanged while shaving a small amount of
future state-machine code from the firmware.

58/100 · ThinMessage clarity
✓ Descriptive subject✓ Provides detailed explanatory context
AI analysis · Informational 15/100

This commit is a simple internal cleanup: it takes two places in the firmware that were doing the same 'wait until the secure chip is no longer busy' loop and makes them share one copy of that loop. There is no change in behavior, no new feature, and no indication of a security fix.

Lower-priorityport lost docstring from deleted C codeby Marko Bencun · c8be625d · Apr 21, 2026 · 1 fileMessage 45 · ThinInformational 15Details
Commit message · Marko Bencun

port lost docstring from deleted C code

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

This commit only adds a comment explaining that a function behaves like Python's HMAC-SHA256. No code behavior changed, and there is no security issue.

AI review queuedtighten typesby Marko Bencun · a89b258d · Apr 21, 2026 · 4 filesMessage 18 · OpaqueLow 29Details
Commit message · Marko Bencun

tighten types

18/100 · OpaqueMessage clarity
✓ Subject identifies a change! Too few words to establish purpose! No meaningful explanatory body
Why it was queued
second-pass: opaque commit message
AI analysis · Low 29/100

This commit tightens Rust type signatures for functions that talk to the secure chip (Optiga). Instead of accepting arbitrary-length byte slices and then checking lengths at runtime, the functions now require fixed-size arrays. This is a defensive hardening change: it moves some length checks from runtime to compile time, reducing the chance of a length mismatch bug being exploited. There is no direct evidence in the commit that an exploitable vulnerability existed before this change.

Security candidatesecurechip: port password opsby Marko Bencun · 9bd67713 · Apr 21, 2026 · 27 filesMessage 68 · AdequateLow 34Details
Commit message · Marko Bencun

securechip: port password ops

Move the OPTIGA password flows into Rust in one step, including the async command wrappers and the migrated unit tests. This keeps the commit focused on the securechip password migration itself; the unrelated Box::pin(...) call-site changes were split into a separate commit.

68/100 · AdequateMessage clarity
✓ Descriptive subject✓ Provides detailed explanatory context✓ Mentions testing or verification
Why it was queued
cryptography-sensitive path
AI analysis · Low 34/100

This commit is a large refactoring that moves the password-stretching and secure-chip password operations from C into Rust for the BitBox02 firmware. It does not add new user-facing features or change the cryptographic algorithm; it reimplements the same OPTIGA secure-chip flows (HMAC verification, symmetric encryption, key generation, counter resets) in Rust with async wrappers. The old C implementation and its unit tests are removed, and equivalent Rust unit tests with deterministic fakes are added. There is no indication in the commit that this fixes a known security vulnerability.

Security candidateutil/sha2: fix safety docs syntaxby Marko Bencun · c0f75679 · Apr 21, 2026 · 1 fileMessage 45 · ThinInformational 15Details
Commit message · Marko Bencun

util/sha2: fix safety docs syntax

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

This commit only reformats the Rust documentation comments for unsafe functions so they use the standard '# Safety' heading. No actual code logic, memory handling, or behavior changed. It is a documentation cleanup with no security impact.

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.

Lower-prioritySimulate securechip stretching as wellby Niklas Dusenlund · 94da5473 · Apr 20, 2026 · 5 filesMessage 45 · ThinInformational 15Details
Commit message · Niklas Dusenlund

Simulate securechip stretching as well

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

This commit only changes the graphical simulator used for testing the BitBox02 firmware. It adds a one-second artificial delay to the simulated secure chip's key-stretching function so that developers can visually test the unlock animation. It does not affect the real hardware firmware or any user-facing security 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 candidatesimulator-graphical: fix factory_randomnessby Marko Bencun · 6a33dcec · Apr 20, 2026 · 1 fileMessage 50 · ThinLow 33Details
Commit message · Marko Bencun

simulator-graphical: fix factory_randomness

Same as cee5bdb3ba06f60b93213f9c2a183a7683fe1551, but for BB02
graphical simulator.

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

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

Lower-prioritybitbox02_rust: remove mock_memoryby Marko Bencun · aa08d084 · Apr 19, 2026 · 9 filesMessage 45 · ThinInformational 15Details
Commit message · Marko Bencun

bitbox02_rust: remove mock_memory

All tests use HAL now.

45/100 · ThinMessage clarity
✓ Descriptive subject✓ Mentions testing or verification! No meaningful explanatory body
AI analysis · Informational 15/100

This commit only changes test code. It removes an old test helper called mock_memory() and updates unit tests to use a newer testing framework (HAL, or Hardware Abstraction Layer). There is no change to the actual firmware that runs on the BitBox02 device, so it cannot affect real users or introduce a security vulnerability in shipped code.

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

releases: add v9.26.1

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

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

Lower-prioritysecurechip: cache ATECC serial numberby Marko Bencun · d8a2df30 · Apr 19, 2026 · 1 fileMessage 45 · ThinLow 25Details
Commit message · Marko Bencun

securechip: cache ATECC serial number

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

This commit caches the secure chip's serial number in memory during setup so it doesn't have to be read from the chip every time it's needed later. The change also makes a key-authorization function fail if the serial number hasn't been cached yet. This is a hardening improvement rather than a fix for an active vulnerability: it reduces how often the firmware talks to the secure chip for the serial number and ensures the value is available before use.

Lower-priorityFix timer interrupt raceby Marko Bencun · f816475c · Apr 18, 2026 · 5 filesMessage 51 · ThinLow 49Details
Commit message · Marko Bencun

Fix timer interrupt race

The production timer future shared its state through a RefCell, but
that state is touched from two different contexts: the poll_fn closure
runs in normal Rust task context, while the timer callback can run
from the hardware timer interrupt path.

If the interrupt fired while the future was polling, both sides could
try to take a mutable RefCell borrow at the same time. RefCell only
protects against reentrant borrowing within one thread of execution;
it is not a synchronization primitive for interrupt-vs-task access.
That made the timer future racy and able to fail nondeterministically
even with only one delay future in flight.

51/100 · ThinMessage clarity
✓ Subject identifies a change✓ Provides detailed explanatory context
AI analysis · Low 49/100

This commit fixes a race condition in the BitBox02 hardware wallet's Rust-based timer code. The old code used a Rust borrow-checker helper (RefCell) to share state between normal code and a hardware timer interrupt. RefCell is not safe across interrupts, so if the timer fired while the code was checking the timer, both sides could try to modify the same data at once, leading to unpredictable failures or panics. The fix replaces the shared state with proper atomic variables and an atomic waker, which are designed for interrupt-safe concurrency.

Lower-priorityrust: put critical-section into workspace depsby Marko Bencun · 6c2c9c09 · Apr 18, 2026 · 3 filesMessage 45 · ThinInformational 15Details
Commit message · Marko Bencun

rust: put critical-section into workspace deps

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 housekeeping change in the Rust build configuration. It moves the 'critical-section' library from being declared separately in two sub-crates to a single shared workspace dependency. There is no change to the actual firmware code, behavior, or security logic.

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

simulator: fix factory_randomness

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

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

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

Lower-priorityreset: do not loop forever in C simulatorby Marko Bencun · 61f86480 · Apr 17, 2026 · 1 fileMessage 78 · AdequateInformational 17Details
Commit message · Marko Bencun

reset: do not loop forever in C simulator

A simulator regression from when we put `reboot` into the HAL. Before,
it was a no-op, and then it became a busy loop in bitbox02's System
HAL. This broke simulator tests in bitbox02-api-go.

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

This is a tiny one-line fix for the software simulator used in development and automated testing. A previous change accidentally made the simulator's 'reboot' command spin in a busy loop instead of doing nothing, which caused simulator tests in a related Go project to hang. The patch simply skips the reboot call when the 'c-unit-testing' simulator feature is enabled. It does not affect real BitBox02 hardware or end-user security.

AI review queuedbump versionby Marko Bencun · 9f557715 · Apr 16, 2026 · 2 filesMessage 18 · OpaqueLow 46Details
Commit message · Marko Bencun

bump version

18/100 · OpaqueMessage clarity
✓ Subject identifies a change! Too few words to establish purpose! No meaningful explanatory body
Why it was queued
second-pass: opaque commit message
AI analysis · Low 46/100

This commit only bumps the firmware version number from v9.26.0 to v9.26.1 and adds a one-line changelog entry saying 'Fix a payment request validation issue.' The actual code fix is not present in this commit, so we cannot directly assess what the bug was, how severe it is, or how it could be exploited. The changelog wording suggests a security or correctness issue in how payment requests are checked before being approved on the BitBox02 hardware wallet, which could in principle trick a user into authorizing an unintended payment. However, without the patch that fixes the issue, this is mostly speculation.

Lower-priorityrust: tweak Cargo flags for faster `cargo test`by Marko Bencun · a7081cdb · Apr 16, 2026 · 1 fileMessage 55 · ThinInformational 15Details
Commit message · Marko Bencun

rust: tweak Cargo flags for faster `cargo test`

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

This commit only changes Rust compiler settings used when running automated tests. It disables link-time optimization, increases parallel compilation units, and turns off optimization to make tests run faster. There is no change to the actual firmware code, no security fix, and no security-relevant behavior change.

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

securechip: make kdf async

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

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

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

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

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

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

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

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