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
64commits · 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 55 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 candidatelicense: add header to files where it was missingby benma's agent · 3483cf65 · Dec 22, 2025 · 16 filesMessage 45 · ThinInformational 15Details
Commit message · benma's agent

license: add header to files where it was missing

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 only adds Apache-2.0 license header comments to 16 source files that were missing them. It makes no functional changes to the BitBox02 firmware or its Python tools. There is no security impact.

Security candidatelicense: replace Shift Apache headersby benma's agent · 52b9db70 · Dec 22, 2025 · 429 filesMessage 80 · StrongInformational 15Details
Commit message · benma's agent

license: replace Shift Apache headers

Replace the existing Shift Crypto/Shift Devices Apache-2.0 boilerplate header blocks with the standard SPDX License Identifier tag: "SPDX-License-Identifier: Apache-2.0".

This is better than the previous multi-line text header because it is machine-readable, unambiguous, and widely understood by tooling (scanners, compliance automation), while keeping files smaller and reducing header churn.

80/100 · StrongMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context✓ Explains rationale or failure mode
Why it was queued
cryptography-sensitive pathseed or entropy pathsigning or wallet pathboot or update pathauthentication pathparser or protocol path
AI analysis · Informational 15/100

This commit is a bulk license-header cleanup. It replaces long, multi-line copyright and Apache-2.0 license notices at the top of 429 source files with a single, standardized machine-readable tag: 'SPDX-License-Identifier: Apache-2.0'. No program logic, build rules, or file contents other than the header comments were changed. It does not introduce or fix any security vulnerability.

Security candidatepy: fix fmt linterby Marko Bencun · b77c25c7 · Dec 22, 2025 · 3 filesMessage 51 · ThinInformational 15Details
Commit message · Marko Bencun

py: fix fmt linter

Before a recent black update, black would, for each file it formatted,
apply the pyproject.toml related to it, e.g. py/pyproject.toml for all
files in py/, and not for files outside of py/. Since the black
update, if formatting files both inside and outside of py/, it would
ignore pyproject.toml, as it's not in the root.

We do a workaround by supplying configuring the linter to use
py/pyproject.toml for all files. Alternative would be to apply black
file-by-file, but that is much slower. Another alternative is to make
split it into two runs, but that was too much trouble. Moving
pyproject.toml from py/ to the root seemed wrong, as the root is not a
Py project.

51/100 · ThinMessage clarity
✓ Subject identifies a change✓ Provides detailed explanatory context
Why it was queued
signing or wallet pathboot or update path
AI analysis · Informational 15/100

This commit is a routine code-style fix. It updates the Python formatter (black) configuration so the linter uses the correct pyproject.toml file, and reformats two Python files to match the new style rules. There are no security changes to the firmware or any sensitive logic.

Security candidatesecp256k1: fix docstring typoby Marko Bencun · 36397779 · Dec 22, 2025 · 1 fileMessage 63 · AdequateInformational 15Details
Commit message · Marko Bencun

secp256k1: fix docstring typo

keystore locked error used to be the case in the past when this
function took the private key from the keystore, but that changed.

63/100 · AdequateMessage clarity
✓ Descriptive subject✓ Provides detailed explanatory context✓ Names security-relevant behavior explicitly
Why it was queued
secret or key materialcryptography-sensitive path
AI analysis · Informational 15/100

This commit only fixes a typo in a code comment (docstring). It changes the description of when a function can return an error, matching the fact that the function now receives the private key directly rather than fetching it from a locked keystore. No actual code behavior is changed.

Security candidateremove use of EC_PUBLIC_KEY_LENby Marko Bencun · de9d4828 · Dec 22, 2025 · 3 filesMessage 58 · ThinInformational 15Details
Commit message · Marko Bencun

remove use of EC_PUBLIC_KEY_LEN

It was a leftover from the time we used libwally-core. The same
constant is available in bitcoin::secp256k1::constants::PUBLIC_KEY_SIZE.

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

This commit is a routine code cleanup. It removes a locally defined constant for compressed secp256k1 public key size (33 bytes) and replaces it with an equivalent constant already provided by the upstream Rust bitcoin/secp256k1 library. The numeric value and behavior remain exactly the same.

Security candidatetrinary_input_string: simply bip39 word helper functionby benma's agent · 400289a5 · Dec 22, 2025 · 1 fileMessage 50 · ThinInformational 15Details
Commit message · benma's agent

trinary_input_string: simply bip39 word helper function

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

This is a small internal cleanup in the BitBox02 firmware's on-screen text input component. A helper function that fetches BIP39 seed words was simplified so callers no longer check its return value; the helper itself now aborts on failure. There is no security vulnerability here—just a minor code-style refactor that keeps the same failure behavior.

Security candidateremove keystore.cby benma's agent · a8d387df · Dec 22, 2025 · 5 filesMessage 43 · ThinInformational 12Details
Commit message · benma's agent

remove keystore.c

The two remaning functions are unrelated to keystore, and inlined into
the Rust C wrappers of secp256k1.

43/100 · ThinMessage clarity
✓ Subject identifies a change✓ Provides an explanatory body
Why it was queued
cryptography-sensitive path
AI analysis · Informational 12/100

This commit removes an old C source file called keystore.c and moves two small cryptographic helper functions directly into the Rust part of the project. The functions themselves still do exactly the same secp256k1 signing and nonce-commitment work as before; they are just called from Rust instead of going through a thin C wrapper. There is no indication this fixes or introduces a security bug.

Security candidaterust: move secp256k1 funcs from keystore.rs to secp256k1.rsby benma's agent · d5b90e6a · Dec 22, 2025 · 9 filesMessage 65 · AdequateInformational 15Details
Commit message · benma's agent

rust: move secp256k1 funcs from keystore.rs to secp256k1.rs

They are not related to the keystore. The keystore.c functions they
use will be dealt with in the next commit.

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

This commit is a simple code reorganization: it moves functions that perform secp256k1 cryptographic signing from a file named keystore.rs into a file named secp256k1.rs. The actual behavior of the code, including how private keys are used and how signatures are produced, does not change. It is a refactoring, not a security fix or vulnerability.

Security candidatekeystore: move keystore_get_bip39_word_stack out of keystore.cby benma's agent · 9fd859e5 · Dec 22, 2025 · 3 filesMessage 50 · ThinInformational 15Details
Commit message · benma's agent

keystore: move keystore_get_bip39_word_stack out of keystore.c

It has nothing to do with the keystore.

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

This commit simply moves a helper function that looks up a BIP39 word by its index from one source file to another. The function's behavior and the callers' logic are unchanged; it is a code cleanup with no security impact.

Security candidatereadme: improve py/readme.md with install instructionsby thisconnect · e3ea774b · Dec 21, 2025 · 2 filesMessage 85 · StrongInformational 15Details
Commit message · thisconnect

readme: improve py/readme.md with install instructions

Added copy / pasteable instructions so that users without deeper
python knowledge can just use the python scripts.
i.e. users without knowledge about venv.

85/100 · StrongMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context✓ Explains rationale or failure mode
Why it was queued
boot or update path
AI analysis · Informational 15/100

This commit only updates user documentation (README) and adds a binary firmware file. There is no code change that fixes or introduces a security vulnerability. It is a routine documentation improvement.

Security candidaterust: update toolchain to 1.92by Marko Bencun · a2fd5f58 · Dec 18, 2025 · 372 filesMessage 80 · StrongLow 25Details
Commit message · Marko Bencun

rust: update toolchain to 1.92

There is a breaking change about abort_immediate_panic, see
CMakeLists.txt.

Also called `cargo update --precise 0.2.177 libc` in src/rust to align
the libc we use with the one in stdlib, to avoid a duplicate dep.

80/100 · StrongMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context✓ Explains rationale or failure mode
Why it was queued
seed or entropy pathauthentication path
AI analysis · Low 25/100

This commit updates the Rust compiler toolchain from an unspecified earlier version to Rust 1.92 for the BitBox02 hardware wallet firmware. It also refreshes many vendored third-party Rust libraries (such as libc, hashbrown, getopts) and build tools (cbindgen, bindgen). The stated reason is compatibility with the new toolchain, including a breaking change around panic handling. There is no direct evidence in the commit that this fixes a known security vulnerability, but toolchain and dependency updates can affect security-relevant behavior such as memory safety, panic handling, and type definitions used in cryptographic code.

Security candidaterust/util: add unit tests for rust_hmac_sha256/rust_hmac_sha512by benma's agent · 3e2eb99a · Dec 16, 2025 · 3 filesMessage 83 · StrongInformational 15Details
Commit message · benma's agent

rust/util: add unit tests for rust_hmac_sha256/rust_hmac_sha512

And make sure overlaps are allowed explicitly, which we make use of
for example in atecc.c/optiga.c.

rust_sha256 code is also adjusted to be consistent in style (drop
`data` before using `out`).

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

This commit adds unit tests for two cryptographic helper functions and slightly reorders their internal steps so the output buffer is only written after the HMAC calculation is complete. The change makes it safe for the output buffer to overlap with the input or key buffers, and documents that overlap is allowed. There is no new vulnerability here; it is a defensive hardening and testing improvement.

Security candidatehal: add Memory HALby benma's agent · f174e0aa · Dec 8, 2025 · 18 filesMessage 38 · OpaqueInformational 18Details
Commit message · benma's agent

hal: add Memory HAL

With unit tests for `password::enter`

38/100 · OpaqueMessage clarity
✓ Subject identifies a change✓ Mentions testing or verification! No meaningful explanatory body! Opaque security-relevant change
Why it was queued
authentication path
AI analysis · Informational 18/100

This commit is a code refactoring that introduces a new 'Memory' hardware abstraction layer (HAL) in the BitBox02 firmware. It moves direct memory access calls behind a trait interface so the code can be more easily tested with mock memory. There is no direct evidence in the commit of a security vulnerability being fixed; it appears to be a structural improvement that also adds unit tests for password entry behavior.

Security candidateadd attestation_sign to securechip HALby benma's agent · 28e8957b · Nov 27, 2025 · 3 filesMessage 45 · ThinInformational 15Details
Commit message · benma's agent

add attestation_sign to securechip HAL

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

This commit is a straightforward internal refactoring: it moves the device attestation signing function behind a hardware-abstraction-layer (HAL) interface so the code can be more easily tested. The actual cryptographic operation and the data it uses remain unchanged. There is no indication this fixes or introduces a security vulnerability.

Security candidateHAL/SecureChip: add kdf()by Marko Bencun · ef85ad35 · Nov 27, 2025 · 31 filesMessage 70 · AdequateLow 32Details
Commit message · Marko Bencun

HAL/SecureChip: add kdf()

Due to copy_seed and copy_bip39_seed needing kdf, a ton of functions
are infected by the HAL param, as so many of them transitively make
use of these functions.

70/100 · AdequateMessage clarity
✓ Descriptive subject✓ Provides detailed explanatory context✓ Explains rationale or failure mode
Why it was queued
secret or key materialsigning or wallet path
AI analysis · Low 32/100

This commit is a large internal refactoring of the BitBox02 firmware. It adds a new secure-chip key-derivation function (KDF) to the hardware abstraction layer (HAL) and threads that HAL through many existing functions so they can use it. The change touches 31 files and many tests, but it does not appear to introduce a new security vulnerability on its own. It is a structural change that prepares the code for using the secure chip's KDF more consistently.

Security candidatehww: add change password workflowby cedwies · f30b1203 · Nov 27, 2025 · 14 filesMessage 73 · AdequateLow 36Details
Commit message · cedwies

hww: add change password workflow

Currently, changing the device password requires a full device reset
and restoration from a backup. This process is cumbersome and increases
the risk of user error or seed exposure during the restoration process.

This patch introduces a native "Change Password" workflow that allows
the user to rotate their device password without resetting the device.

The workflow:
1. Forces the user to re-enter the current password for security, even
if the device is already unlocked.
2. Prompts for the new password (entered twice).
3. Re-encrypts the stored seed and BIP39 entropy with the new password
using the Secure Chip for key stretching.

The implementation ensures that the wallet identity (Root Fingerprint
and BIP39 seed) is preserved, so the device remains paired and
functional with the same accounts (including passphrase) after the
password change.

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
entropy or randomnesssecret or key materialaccess controlcryptography-sensitive path
AI analysis · Low 36/100

This commit adds a new 'Change Password' feature to the BitBox02 hardware wallet. Instead of resetting the device and restoring from a backup, users can now change their device password directly. The wallet re-encrypts the stored seed with the new password while keeping the same accounts and identity. The change is a normal product feature, not a security fix, but it touches sensitive crypto code that protects the user's funds.

Security candidateFirmware v9.24.0 verificationby Yasser Aziza · d969a6b2 · Nov 23, 2025 · 2 filesMessage 70 · AdequateInformational 15Details
Commit message · Yasser Aziza

Firmware v9.24.0 verification

Signed-off-by: Yasser Aziza <yasser@posteo.net>

70/100 · AdequateMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Provides an explanatory body✓ Mentions testing or verification
Why it was queued
defensive validationboot or update path
AI analysis · Informational 15/100

This commit adds two digital signature files for the BitBox02 firmware version 9.24.0. These signatures are used to publicly verify that the released firmware binaries are authentic and have not been tampered with. There is no code change and no indication of a security vulnerability.

Security candidateport test_memory_functional C tests to Rustby benma's agent · 5ed0c203 · Nov 19, 2025 · 6 filesMessage 70 · AdequateInformational 15Details
Commit message · benma's agent

port test_memory_functional C tests to Rust

test_get_attestation_bootloader_hash is dropped as it's redundant with
the other more involved test that was ported.

70/100 · AdequateMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Provides an explanatory body✓ Mentions testing or verification
Why it was queued
update trustseed or entropy path
AI analysis · Informational 15/100

This commit is a routine refactoring that rewrites existing C unit tests in Rust. It does not change the actual firmware behavior or fix any security issue. One redundant test was removed, and several internal test-only helpers were added so the Rust tests can call the same underlying C memory functions.

Security candidatekeystore: add locked lockout testby benma's agent · 39c1f85f · Nov 12, 2025 · 1 fileMessage 55 · ThinInformational 15Details
Commit message · benma's agent

keystore: add locked lockout test

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

This commit only adds a new automated test to the BitBox02 firmware. It checks that entering the wrong password repeatedly while the device is already locked correctly triggers the lockout mechanism and eventually wipes the seed. There is no change to production code, no new feature, and no fix to an existing bug.

Security candidateorientation-screen: Migrate to rustby Niklas Dusenlund · eb9513b3 · Nov 12, 2025 · 27 filesMessage 60 · AdequateInformational 24Details
Commit message · Niklas Dusenlund

orientation-screen: Migrate to rust

create an async friendly hardware supported delayin C and wrap it in
rust using Future.

60/100 · AdequateMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Provides an explanatory body
Why it was queued
boot or update path
AI analysis · Informational 24/100

This commit rewrites the BitBox02's startup orientation screen from C to Rust and introduces a new shared delay/timer subsystem. It is a refactoring change: the device still asks the user to pick screen orientation at boot, then waits 1.3 seconds before switching to the lock screen and enabling USB/Bluetooth. The rewrite changes how internal timers and product-version strings are handled, but it does not add or remove security features. There is no vendor statement that this fixes a security bug.

Security candidatekeystore: port copy_seed and retain_seed to Rustby Marko Bencun · 35dd5c89 · Nov 12, 2025 · 5 filesMessage 60 · AdequateLow 26Details
Commit message · Marko Bencun

keystore: port copy_seed and retain_seed to Rust

Same as with the bip39 seed in the previous commit.

60/100 · AdequateMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Provides an explanatory body
Why it was queued
secret or key material
AI analysis · Low 26/100

This commit rewrites two internal seed-handling functions from C to Rust as part of an ongoing porting effort. It moves where the encrypted wallet seed is stored and how it is decrypted, but keeps the same encryption design. There is no direct evidence in the commit that this fixes or introduces a security bug; it is primarily a code-rewrite change.

Security candidatekeystore: port bip39 unlock/retain to Rustby Marko Bencun · e0451ea8 · Nov 12, 2025 · 6 filesMessage 80 · StrongLow 26Details
Commit message · Marko Bencun

keystore: port bip39 unlock/retain to Rust

retain_bip39_seed encrypted the seed, copy_bip39_seed decrypted
it. This is ported to a helper struct `RetainedEncryptedBuffer` that
does the same. The helper struct is made because the other
seed (_retained_seed_encrypted) does the exact same operation, just
with a different purpose string when hashing, so we can reuse that
later when porting retain_seed/copy_seed.

_is_unlocked_bip39 is not ported, as it is redundant and equivaent with
RETAINED_BIP39_SEED being Some().

80/100 · StrongMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context✓ Explains rationale or failure mode
Why it was queued
secret or key material
AI analysis · Low 26/100

This commit rewrites the code that keeps the BIP-39 seed temporarily encrypted in memory, moving it from C to Rust. It is a refactoring/porting change, not a fix for a known bug or attack. The same encryption approach is preserved, but the change touches sensitive seed-handling code, so it deserves careful review.

Security candidateformatting: Indent preprocessor directivesby Niklas Dusenlund · 90895379 · Nov 5, 2025 · 63 filesMessage 35 · OpaqueInformational 15Details
Commit message · Niklas Dusenlund

formatting: Indent preprocessor directives

35/100 · OpaqueMessage clarity
✓ Descriptive subject! No meaningful explanatory body! Opaque security-relevant change
Why it was queued
cryptography-sensitive pathseed or entropy pathboot or update pathparser or protocol path
AI analysis · Informational 15/100

This commit is purely a code-style change. It tells the project's automatic formatter (clang-format) to indent preprocessor directives like #if, #include, and #error, and then applies that new rule across many source files. No program logic, security checks, or behavior were changed.

Security candidaterust/hal: add Random to HALby benma's agent · 1c787d45 · Nov 3, 2025 · 3 filesMessage 95 · StrongInformational 19Details
Commit message · benma's agent

rust/hal: add Random to HAL

Will allow to input different implementations in bb02, future
bitboxes, unit tests, simulator, etc.

The two Taproot signature checks are adjusted, as they changed due to
using the new testing random numbers.

95/100 · StrongMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context✓ Explains rationale or failure mode✓ Mentions testing or verification✓ Names security-relevant behavior explicitly
Why it was queued
entropy or randomnesssigning boundarysigning or wallet path
AI analysis · Informational 19/100

This commit is a routine code refactor, not a security fix. It moves the source of random numbers behind a new 'hardware abstraction layer' (HAL) interface so the same code can use a fake predictable random generator during automated tests and the real secure random generator on the actual BitBox02 device. The only production behavior change is that Taproot/Schnorr signing now fetches its auxiliary randomness through this new interface instead of calling the device's random function directly. The real-device implementation still uses the same secure random function as before, so security properties are unchanged.

Security candidatekeystore: port antiklepto protocol test to Rustby benma's agent · c3e9f440 · Nov 3, 2025 · 6 filesMessage 55 · ThinInformational 13Details
Commit message · benma's agent

keystore: port antiklepto protocol test to Rust

55/100 · ThinMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Mentions testing or verification! No meaningful explanatory body
Why it was queued
cryptography-sensitive pathsigning or wallet path
AI analysis · Informational 13/100

This commit is a straightforward refactoring: it moves an existing anti-klepto protocol unit test from C to Rust. No production firmware code is changed, and no security vulnerability is introduced or fixed. The same cryptographic checks are still performed, just in a different test language.