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 30 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 candidateeth: add tests with large data to test streamingby Tomas Vrba · 2a1108e0 · Feb 13, 2026 · 6 filesMessage 78 · AdequateInformational 15Details
Commit message · Tomas Vrba

eth: add tests with large data to test streaming

Adds transactions with large data (about 20% of total txs) to the
sighash go script to unit test the chunking producer

- test sign.rs to test that new streaming mode produces same
signatures as non-streaming
- test that streaming large data produces signatures of expected size

eth: prepare tests for eth sighash streaming

prepares initial unit tests for simple and chunking producer for data
streaming

tests generated by Claude Code

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 boundarysigning or wallet path
AI analysis · Informational 15/100

This commit is purely a test-suite update for the BitBox02 hardware wallet's Ethereum transaction signing. It adds unit tests that verify the new 'streaming' mode for large transaction data produces the same cryptographic signatures as the older non-streaming mode, and updates test data files. There is no change to production firmware code or user-facing behavior, and nothing in the commit suggests a security vulnerability.

Security candidateeth: prepare and generate proto files for data streamingby Tomas Vrba · 83be97ad · Feb 13, 2026 · 6 filesMessage 83 · StrongInformational 11Details
Commit message · Tomas Vrba

eth: prepare and generate proto files for data streaming

update existing tests to include the new data length field

Adds new protobuf fields to support streaming large transaction data:
- data_length: Indicates total data size (triggers streaming mode if > 6144)
- EthSignDataRequestChunkResponse: Request for a data chunk at offset/length
- EthSignDataResponseChunkRequest: Response containing the requested chunk

Regenerates all protobuf files (Python, Rust, C) from the updated .proto.

Updates existing tests to populate the new data_length field (set to 0
for traditional mode where all data is sent inline).

83/100 · StrongMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context✓ Mentions testing or verification
Why it was queued
cryptography-sensitive pathsigning or wallet path
AI analysis · Informational 11/100

This commit adds new message definitions and generated code to support streaming large Ethereum transaction data in chunks, but it does not implement the actual streaming logic. Existing tests are updated only to include the new optional field set to zero, meaning the current behavior is unchanged. There is no indication this is a security fix or introduces a vulnerability.

Security candidatehal: move bitbox02 HAL impl into a submoduleby benma's agent · 2c7d2370 · Feb 10, 2026 · 8 filesMessage 45 · ThinInformational 15Details
Commit message · benma's agent

hal: move bitbox02 HAL impl into a submodule

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

This commit is a pure code reorganization: it moves the BitBox02-specific hardware abstraction layer (HAL) implementation out of one large file into several smaller files in a new submodule. No functionality, behavior, or security properties of the firmware appear to change. It is comparable to rearranging chapters in a book without rewriting the text.

Security candidatehal: split HAL sub-traits into modulesby benma's agent · 7c32f71f · Feb 10, 2026 · 6 filesMessage 45 · ThinInformational 15Details
Commit message · benma's agent

hal: split HAL sub-traits into modules

For ease of maintenance.

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

This commit is a simple code reorganization: it takes several related pieces of a hardware abstraction layer (HAL) that were all written in one large file and splits them into smaller, separate files. No behavior of the device or its security functions was changed. It is comparable to moving chapters of a book into individual files without rewriting the text.

Security candidatehal: remove the crate::workflow::testing re-exportby benma's agent · 9988cb33 · Feb 10, 2026 · 22 filesMessage 60 · AdequateInformational 15Details
Commit message · benma's agent

hal: remove the crate::workflow::testing re-export

60/100 · AdequateMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Mentions testing or verification! No meaningful explanatory body
Why it was queued
signing or wallet pathauthentication path
AI analysis · Informational 15/100

This commit is a simple internal cleanup in the BitBox02 firmware's Rust code. It removes a shortcut (a 're-export') that made test-only user-interface helpers available under an old module path, and updates all test files to import those helpers directly from their new location. There is no change to the actual device behavior, no bug fix, and no security impact.

Security candidatehal: improve HAL module structureby benma's agent · c27a88c0 · Feb 10, 2026 · 15 filesMessage 78 · AdequateInformational 15Details
Commit message · benma's agent

hal: improve HAL module structure

- crate::workflow::Workflows are moved to crate::hal::Ui, and
crate::workflows::RealWorkflows are moved to crate::hal::BitBox02Ui
- crate::hal::testing is moved from an inline module to a file with one
submodule per trait impl

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

This commit is a pure internal code reorganization (refactor) of the BitBox02 firmware's Rust code. It moves the user-interface trait and its real/testing implementations into a new 'hal' (hardware abstraction layer) module structure and renames some types (e.g., Workflows -> Ui, RealWorkflows -> BitBox02Ui, TestingWorkflows -> TestingUi). No security-sensitive behavior appears to change; it is a maintainability/clean-up change.

Security candidatefirmware: port main loop to rustby Marko Bencun · a48988a9 · Feb 5, 2026 · 29 filesMessage 68 · AdequateLow 31Details
Commit message · Marko Bencun

firmware: port main loop to rust

simulator: remove u2f workflows. The simulators don't simulate u2f, so it's not needed.

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

68/100 · AdequateMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context
Why it was queued
boot or update pathparser or protocol path
AI analysis · Low 31/100

This commit rewrites the BitBox02 hardware wallet's main firmware loop from C to Rust. It is a large refactoring change that moves core USB, Bluetooth/UART, and workflow handling into Rust. The change itself is not a security fix and does not introduce an obvious vulnerability in the diff, but any rewrite of security-critical firmware code carries a risk of subtle behavioral differences or memory-safety edge cases at the C/Rust boundary. The commit message and diff do not describe any security issue or credit a researcher.

Security candidatehww: remove empty function hww_process()by Marko Bencun · f6dcfd29 · Feb 4, 2026 · 3 filesMessage 45 · ThinInformational 15Details
Commit message · Marko Bencun

hww: remove empty function hww_process()

It does nothing.

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 removes an empty placeholder function called hww_process() that did nothing. It is a routine code cleanup with no security relevance.

Security candidatebuild: fatfs wrapper, cflagsby Niklas Dusenlund · 353e806c · Feb 4, 2026 · 106 filesMessage 70 · AdequateLow 25Details
Commit message · Niklas Dusenlund

build: fatfs wrapper, cflags

* Move fatfs into a rust crate to simplify CMake files.
* Apply C flags like stack-protector to c code that is built by cargo.

70/100 · AdequateMessage clarity
✓ Descriptive subject✓ Uses a recognizable type or scope✓ Provides detailed explanatory context
Why it was queued
boot or update path
AI analysis · Low 25/100

This commit is a build-system refactor: it moves the FatFs microSD filesystem library from a direct CMake target into a new Rust crate wrapper, and makes sure C compiler hardening flags (such as stack-protector) are also applied when Cargo's build.rs scripts compile C code. There is no obvious runtime vulnerability in the diff, but the change touches how security-relevant C code is compiled, so it deserves a quick sanity check that the new wrapper preserves the same flags and symbol visibility.

Security candidatebuild: enable -Wcast-align=strictby benma's agent · ba2124e5 · Feb 3, 2026 · 11 filesMessage 98 · StrongModerate 53Details
Commit message · benma's agent

build: enable -Wcast-align=strict

Enable GCC -Wcast-align=strict globally (Clang uses -Wcast-align) so
misaligned pointer-cast issues are caught across firmware, bootloader,
unit tests, and simulators.

Fixes fall into two UB classes:

1) Alignment UB: casting byte buffers/packed payloads to wider pointer
types and then dereferencing can require stricter alignment than the
source object provides. This is undefined behavior per C.

2) Effective-type / strict-aliasing UB: reading a value by
reinterpreting a uint8_t buffer as a different object type via a
pointer cast violates C’s effective-type/aliasing rules, so the
compiler may miscompile even when the address happens to be aligned.

Resolve by memcpy’ing into
properly-typed locals (e.g. USB_FRAME, u32/version_t) before use.

Useful references:
- https://www.open-std.org/jtc1/sc22/WG14/www/docs/n3519.pdf

For C11 (ISO/IEC 9899:2011), the key places are:

- Alignment UB from pointer casts: §6.3.2.3 p7 (“Pointers”) — converting to a different object pointer type and the result not being correctly aligned is UB.
- Effective type rule: §6.5 p6 (“Expressions”) — defines an object’s effective type (including the memcpy/memmove wording).
- Strict-aliasing rule: §6.5 p7 — lists the allowed lvalue types you may use to access an object’s stored value (the classic aliasing bullet list).

98/100 · StrongMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Uses a recognizable type or scope✓ Provides detailed explanatory context✓ Mentions testing or verification✓ Links an issue, advisory, or supporting reference
Why it was queued
update trustboot or update path
AI analysis · Moderate 53/100

This commit turns on a stricter compiler warning that catches risky pointer casts in C code, and fixes the resulting warnings. The changes replace direct casts from byte buffers to larger types (like treating a raw byte array as a 32-bit number or USB frame) with safer memcpy-based copies. The commit message explicitly frames these as classes of undefined behavior (alignment and strict-aliasing issues) that could lead to miscompilation or incorrect reads. It is a hardening/correctness patch rather than a fix for a known exploitable bug, but the affected code paths include bootloader pairing-code handling, firmware version parsing, USB packet processing, and BLE pairing-code display.

Security candidateda14531: simplify da14531_set_name by dropping len paramby Marko Bencun · c9a7a6be · Feb 3, 2026 · 4 filesMessage 73 · AdequateInformational 15Details
Commit message · Marko Bencun

da14531: simplify da14531_set_name by dropping len param

The string is null-terminated, all callsites call `strlen()`.

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
boot or update path
AI analysis · Informational 15/100

This is a small code cleanup change. A function that sends the device's Bluetooth name to a wireless chip is simplified by removing an unnecessary length parameter. The function now figures out the string length itself using strlen(), which is exactly what every caller was already doing. There is no security issue visible in this change.

Security candidatebitbox-secp256k1: drop result vars, inline the expressionsby Marko Bencun · 3f44eeab · Feb 3, 2026 · 1 fileMessage 50 · ThinInformational 15Details
Commit message · Marko Bencun

bitbox-secp256k1: drop result vars, inline the expressions

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 · Informational 15/100

This commit is a minor code cleanup in the BitBox02 firmware's Rust wrapper around secp256k1 cryptography. It removes temporary variables that held function return values and instead checks those return values directly inside 'if' conditions. There is no change to program logic, no security fix, and no new vulnerability.

Security candidatebitbox-secp256k1: use hex!() over hex::decode()by benma's agent · e14b4beb · Feb 3, 2026 · 3 filesMessage 45 · ThinInformational 14Details
Commit message · benma's agent

bitbox-secp256k1: use hex!() over hex::decode()

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 14/100

This commit is a small code cleanup in the BitBox02 firmware's Rust code. It replaces runtime hex decoding with a compile-time macro for test data only. There is no security vulnerability here—just a dependency swap that makes unit tests slightly more efficient and removes an unused dev-dependency.

Security candidatesecp256k1: compile ecdsa_anti_exfil_host_commit only for testingby benma's agent · c67dae9a · Feb 3, 2026 · 1 fileMessage 60 · AdequateInformational 16Details
Commit message · benma's agent

secp256k1: compile ecdsa_anti_exfil_host_commit only for testing

60/100 · AdequateMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Mentions testing or verification! No meaningful explanatory body
Why it was queued
cryptography-sensitive path
AI analysis · Informational 16/100

This commit hides a special testing-only function from the normal firmware build. The function itself is not a vulnerability; it is a build-hygiene change to make sure code meant only for unit tests is not compiled into the real device firmware. That reduces the attack surface slightly, but it does not fix any known bug.

Security candidatebitbox-secp256k1: remove needless ffi def of secp256k1_ecdsa_signature_serialize_compactby benma's agent · e338d122 · Feb 3, 2026 · 1 fileMessage 65 · AdequateInformational 15Details
Commit message · benma's agent

bitbox-secp256k1: remove needless ffi def of secp256k1_ecdsa_signature_serialize_compact

It is already wrapped in the bitcoin::secp256k1 dep.

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

This commit removes a duplicate low-level binding to a secp256k1 cryptographic function and replaces its use with an equivalent, already-vetted wrapper from the project's dependency on the bitcoin::secp256k1 Rust crate. It is a code cleanup/refactoring change with no security-relevant behavior change visible in the diff.

Security candidatebuild: consolidate secp256k1 into new crate bitbox-secp256k1by benma's agent · eabe5aa4 · Feb 3, 2026 · 27 filesMessage 85 · StrongInformational 12Details
Commit message · benma's agent

build: consolidate secp256k1 into new crate bitbox-secp256k1

- cargo-first build of the secp256k1-zkp C dep, so the crate can be
compiled without CMake and normal cargo tooling works
- Moved bitbox02::secp256k1 and bitbox02_rust::secp256k1 into it

85/100 · StrongMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Uses a recognizable type or scope✓ Provides detailed explanatory context
Why it was queued
cryptography-sensitive pathsigning or wallet path
AI analysis · Informational 12/100

This commit is a build-system refactor: it moves the secp256k1 cryptographic library dependency into a new Rust crate called bitbox-secp256k1 so it can be built with normal Cargo tooling instead of CMake. The actual cryptographic functions (signing, nonce commitments, DLEQ proofs, etc.) are copied almost unchanged from existing modules into the new crate. There is no direct evidence in the commit that this fixes a security vulnerability or introduces a new exploit.

Security candidatefactorysetup: move secp256k1 verification to Rustby benma's agent · e27a884e · Feb 3, 2026 · 4 filesMessage 78 · AdequateInformational 20Details
Commit message · benma's agent

factorysetup: move secp256k1 verification to Rust

The last remaining secp256k1 C library use. After this, we can
consolidate all sec256k1 things into a new bitbox-secp256k1 crate.

78/100 · AdequateMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context✓ Mentions testing or verification
Why it was queued
defensive validationcryptography-sensitive path
AI analysis · Informational 20/100

This commit rewrites a small piece of the BitBox02 factory-setup code from C to Rust. The code verifies a cryptographic signature on the device during factory setup. The change itself is a routine refactoring: it removes the old C secp256k1 library call and replaces it with an equivalent Rust call. There is no indication in the commit that this fixes a known security bug, and the new Rust code includes tests for invalid inputs. On its own, this looks like a defensive hardening/cleanup change rather than a vulnerability fix.

Security candidateHAL: add reboot_to_bootloader()by cedwies · afcdcbe3 · Jan 31, 2026 · 3 filesMessage 35 · OpaqueInformational 18Details
Commit message · cedwies

HAL: add reboot_to_bootloader()

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

This commit is a straightforward internal refactoring: it moves the device-reboot-into-bootloader function behind a new 'System' hardware-abstraction trait so the rest of the Rust code calls it through a generic interface rather than directly. The actual reboot behavior, safety checks (a user confirmation screen), and underlying C function are unchanged. There is no new vulnerability here; it is normal code cleanup.

Security candidateport communication_mode to Rustby benma's agent · bc518af8 · Jan 16, 2026 · 15 filesMessage 58 · ThinInformational 17Details
Commit message · benma's agent

port communication_mode to Rust

With extern C functions to use them in the C code. The firmware main
loop will be ported to Rust, so it will not be needed there much
longer, but the bootloader also uses it.

58/100 · ThinMessage clarity
✓ Descriptive subject✓ Provides detailed explanatory context
Why it was queued
update trustboot or update pathparser or protocol path
AI analysis · Informational 17/100

This commit rewrites a small piece of firmware logic from C to Rust. The logic decides whether the BitBox02 Nova hardware wallet should use Bluetooth or USB for communication. There is no obvious security bug introduced by the change; it appears to be a routine language port with matching behavior and added unit tests.

Security candidaterust: update rust-miniscript to v13.0.0.by Marko Bencun · 4c1c8000 · Jan 14, 2026 · 122 filesMessage 60 · AdequateInformational 16Details
Commit message · Marko Bencun

rust: update rust-miniscript to v13.0.0.

This saves 30144 bytes in the firmware binary.

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

This commit updates the BitBox02 firmware's vendored copy of the Rust 'miniscript' library to version 13.0.0, along with its dependency 'hex-conservative'. The stated reason is to reduce firmware size by about 30 KB. The change is a routine dependency refresh; the commit message and diff do not describe any security bug being fixed, and no independent security advisory is supplied.

Security candidatereleases: add v9.25.0by Marko Bencun · 63827e2f · Jan 13, 2026 · 6 filesMessage 61 · AdequateInformational 15Details
Commit message · Marko Bencun

releases: add v9.25.0

Since 011c8aa893dcf48e47268de0f52a839ee8fbc4eb we don't tag and release the
bitcoin-only variant separately anymore, so in the releases folder we
also consolidate both into one folder for consistency. This way we can
link to one folder from the release page, which now contains both variants.

61/100 · AdequateMessage clarity
✓ Subject identifies a change✓ Names a concrete action or component✓ Provides detailed explanatory context
Why it was queued
boot or update path
AI analysis · Informational 15/100

This commit is a routine release packaging update. It adds the signed build reproducibility assertions for BitBox02 firmware version 9.25.0 (both the multi-coin and Bitcoin-only variants) and updates the helper script and documentation to handle a new naming scheme where the product name is included in the assertion filename. There is no code change to the firmware itself and no security vulnerability is introduced or fixed.

Security candidateRegenerate Python protobuf stubsby cedwies · cb71f488 · Jan 12, 2026 · 11 filesMessage 58 · ThinInformational 15Details
Commit message · cedwies

Regenerate Python protobuf stubs

Auto generated protobuf files were mistakenly
edited when changing the license headers for
the entire repo. Regenerated via 'make -C py'

58/100 · ThinMessage clarity
✓ Descriptive subject✓ Provides detailed explanatory context
Why it was queued
boot or update path
AI analysis · Informational 15/100

This commit only fixes the formatting of license headers in automatically generated Python type-stub files. It moves the SPDX license notice from a standalone comment line into the generated docstring block. There is no change to program logic, no security fix, and no vulnerability.

Security candidatemove bitbox02::util to util::stringsby benma's agent · daec715d · Jan 7, 2026 · 13 filesMessage 60 · AdequateInformational 15Details
Commit message · benma's agent

move bitbox02::util to util::strings

It's not BitBox02 related, so we can move it to the util crate.

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

This commit simply moves a set of helper functions for handling strings from one Rust module to another. The actual code is copied unchanged, and all existing callers are updated to use the new location. There is no security fix or behavior change.

Security candidateapi/device_info: add password_stretching_algoby Marko Bencun · c1cb7182 · Jan 6, 2026 · 6 filesMessage 35 · OpaqueInformational 18Details
Commit message · Marko Bencun

api/device_info: add password_stretching_algo

35/100 · OpaqueMessage clarity
✓ Descriptive subject! No meaningful explanatory body! Opaque security-relevant change
Why it was queued
cryptography-sensitive path
AI analysis · Informational 18/100

This commit adds a new read-only field to the BitBox02's device information API that tells the connected app which password-stretching algorithm the device uses. It does not change how passwords are stretched or how they are verified; it only exposes existing internal information to the host. There is no indication this is a security fix or that it introduces a vulnerability.

Security candidateMove "get_attestation_*" functions to HALby cedwies · 45355e61 · Jan 3, 2026 · 2 filesMessage 55 · ThinInformational 18Details
Commit message · cedwies

Move "get_attestation_*" functions to HAL

attestation.rs was expanded with tests

55/100 · ThinMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Mentions testing or verification! No meaningful explanatory body
Why it was queued
update trustboot or update path
AI analysis · Informational 18/100

This commit is a code cleanup and test-improvement change. It moves two device-attestation helper functions from a direct hardware call into a software 'hardware abstraction layer' (HAL) so the code can be tested without the real device. It also adds unit tests that simulate the attestation process. There is no indication this fixes a security bug or introduces a new vulnerability.