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 20 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 candidatekeystore: use bitcoin_hashes for hmacby Marko Bencun · 5c0907f9 · Sep 9, 2025 · 1 fileMessage 68 · AdequateInformational 18Details
Commit message · Marko Bencun

keystore: use bitcoin_hashes for hmac

We use both RustCrypto and bitcoin_hashes for hmac, but the latter
is much harder to remove, as it's in bip39, bip32, etc, so we prefer
this over RustCrypto.

68/100 · AdequateMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context
Why it was queued
secret or key material
AI analysis · Informational 18/100

This commit swaps one internal cryptographic library for another when computing a special fingerprint used in a backup/recovery feature (BIP-85). The change is described by the developer as a cleanup to use a single, consistent library. There is no direct evidence in the commit that it fixes a security bug or that any vulnerability exists.

Security candidatekeystore: reduce secure chip operations by precomputing fingerprintby Marko Bencun · e3b21df8 · Sep 8, 2025 · 8 filesMessage 73 · AdequateInformational 19Details
Commit message · Marko Bencun

keystore: reduce secure chip operations by precomputing fingerprint

The root fingerprint API call, calling
`bitbox02_rust::keystore::root_fingerprint()`, used two securechip
operations. Using too many operations too quickly in Optiga leads to
throttling, and the BitBoxApp fetches the root fingerprint every time
the BitBox is unlocked.

We can get away with not using hte securechip at all to get the root
fingerprint, by computing and storing it during unlock.

The global static mut could have lived in keystore.c with the other
static muts there, but adding more C code and Rust wrappers seemed
wrong. For now it lives in bitbox02::keystore, and would move over to
bitbox02_rust::keystore when the unlocking functions are migrated to Rust.

73/100 · AdequateMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context
Why it was queued
cryptography-sensitive path
AI analysis · Informational 19/100

This commit is a performance and reliability improvement, not a security fix. It precomputes a wallet's 'root fingerprint' during device unlock and stores it in memory, so the BitBoxApp can read it later without repeatedly asking the secure chip. The secure chip was being throttled by too many rapid requests, which could slow down or temporarily block the device. The change removes that throttling risk and slightly reduces secure-chip wear, but it does not patch an exploitable vulnerability.

Security candidatetest: refactor tests/simulator to compile more with cargoby Niklas Dusenlund · cf482332 · Sep 8, 2025 · 78 filesMessage 95 · StrongInformational 15Details
Commit message · Niklas Dusenlund

test: refactor tests/simulator to compile more with cargo

* Build C files from build.rs script and remove "bitbox_merged" hack.
* Move cmake specifics out of build.rs.
* Rust functions exposed as a C api has been moved to the respective
crates to remove circular dependencies.

95/100 · StrongMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Uses a recognizable type or scope✓ Provides detailed explanatory context✓ Mentions testing or verification
Why it was queued
cryptography-sensitive path
AI analysis · Informational 15/100

This commit is a large internal cleanup of how the BitBox02 firmware's test code and simulator are built. It switches more of the build process to use Rust's standard Cargo tooling, removes a workaround called 'bitbox_merged,' and reorganizes Rust code to avoid circular dependencies. There is no indication this change fixes a security bug or introduces a new security feature.

Security candidaterust: Reduce count of depsby Niklas Dusenlund · 19d84ffe · Sep 5, 2025 · 414 filesMessage 72 · AdequateInformational 15Details
Commit message · Niklas Dusenlund

rust: Reduce count of deps

We use the same versions of the deps as the standard library to avoid
vendoring additional versions

72/100 · AdequateMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Provides an explanatory body✓ Explains rationale or failure mode
Why it was queued
authentication path
AI analysis · Informational 15/100

This commit removes several vendored Rust library dependencies (libc, proc-macro2, quote, syn, unicode-ident) and updates the Cargo.lock file. The stated goal is to reduce dependency count by using the same versions as the Rust standard library. There is no direct code change to the BitBox02 firmware logic, no bug fix, and no security patch visible in the diff.

Security candidateexternal/vendor: update bitcoin to v0.32.7by Marko Bencun · 3d18dfdf · Sep 3, 2025 · 46 filesMessage 45 · ThinLow 45Details
Commit message · Marko Bencun

external/vendor: update bitcoin to v0.32.7

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

This commit updates the vendored rust-bitcoin library inside the BitBox02 firmware from version 0.32.2 to 0.32.7. It is a routine dependency refresh that pulls in several upstream bug fixes and small feature additions, such as support for testnet4 and pay-to-anchor outputs. The commit does not describe itself as a security fix, and the visible changes are mostly API cleanups and correctness improvements rather than patches for an active vulnerability.

Security candidatekeystore: port keystore_secp256k1_schnorr_sign to Rustby Marko Bencun · a6b69b33 · Sep 3, 2025 · 7 filesMessage 50 · ThinInformational 11Details
Commit message · Marko Bencun

keystore: port keystore_secp256k1_schnorr_sign to Rust

50/100 · ThinMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component! No meaningful explanatory body
Why it was queued
seed or entropy pathsigning or wallet path
AI analysis · Informational 11/100

This commit rewrites a Bitcoin Schnorr signing function from C to Rust. It is a routine refactoring/porting change with no obvious security bug. The new Rust code does the same steps as the old C code: derive a private key, optionally tweak it, sign with a random auxiliary value, and return the signature. The old C implementation also verified the signature internally after signing; that post-sign verification step is removed in the Rust port, but the commit includes unit tests that verify produced signatures are valid.

Security candidaterust: bump to 2024by Niklas Dusenlund · 1a3bc6ee · Sep 2, 2025 · 74 filesMessage 43 · ThinInformational 15Details
Commit message · Niklas Dusenlund

rust: bump to 2024

We already had 2024 in one of the newer crates. This made rustfmt
confused, as rustfmt.toml had 2021.

43/100 · ThinMessage clarity
✓ Subject identifies a change✓ Provides an explanatory body
Why it was queued
cryptography-sensitive pathseed or entropy pathsigning or wallet path
AI analysis · Informational 15/100

This commit upgrades the Rust code edition from 2021 to 2024 across the project and applies the matching rustfmt formatting. It is a routine toolchain/language-version migration: Cargo.toml files are updated, import order is re-sorted, unsafe blocks are wrapped in new unsafe extern/unsafe {} syntax required by the 2024 edition, and test code is reformatted. There are no functional security fixes or behavior changes visible in the diff.

Security candidaterust: update bip32-ed25519by Marko Bencun · 17c3d0a4 · Sep 2, 2025 · 9 filesMessage 35 · OpaqueInformational 21Details
Commit message · Marko Bencun

rust: update bip32-ed25519

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

This commit updates a vendored Rust library used for deriving cryptocurrency keys (bip32-ed25519) from version 0.2.0 to 0.2.1. The visible code changes are mostly housekeeping: updating Rust edition, formatting, and explicitly zeroing out sensitive key data when dropped. There is no direct evidence in the commit message or diff of a security vulnerability being fixed, but updating a cryptographic dependency can sometimes include undisclosed fixes.

Security candidateexternal: add and use secp256k1-zkp directly, remove libwally-coreby Marko Bencun · aa3703cd · Sep 2, 2025 · 7 filesMessage 85 · StrongInformational 13Details
Commit message · Marko Bencun

external: add and use secp256k1-zkp directly, remove libwally-core

We currently use secp256k1-zkp as bundled by libwally-core. As we
remove libwally-core as dependency, and need to directly include
secp256k1-zkp.

We use a new branch of our fork rebased on current upstream master,
because they added CMake support.

This removes another ~6.4kB from the resulting multi binary.

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
cryptography-sensitive path
AI analysis · Informational 13/100

This commit swaps out an internal cryptographic library dependency. The firmware previously used a library called libwally-core, which bundled a special version of the secp256k1 elliptic-curve code. The change removes libwally-core and uses secp256k1-zkp directly. This is a build-system and dependency refactor, not a fix for a known attack. It slightly reduces firmware size and changes how the code is compiled and linked. There is no direct evidence in the commit that this resolves a security vulnerability, but any change to core crypto code carries a small risk that build settings could alter behavior.

Security candidateunit-test: don't use libwally bip32by Marko Bencun · 5929b40f · Sep 2, 2025 · 1 fileMessage 55 · ThinInformational 12Details
Commit message · Marko Bencun

unit-test: don't use libwally bip32

Trying to remove the libwally C dep.

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

This commit only changes a unit test file. It swaps one way of getting a test private key (from an older C library called libwally) for another way (from the project's newer Rust code). The actual device firmware and security logic are not changed. There is no indication this fixes or introduces a security bug.

Security candidaterust: pass Rust secp256k1 context instead of using wally's contextby Marko Bencun · bec904a4 · Sep 2, 2025 · 4 filesMessage 65 · AdequateInformational 16Details
Commit message · Marko Bencun

rust: pass Rust secp256k1 context instead of using wally's context

Step-by-step removal of `wally_get_secp_context()`.

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

This commit is a small internal cleanup in the BitBox02 hardware wallet firmware. It changes how the code passes the cryptographic context (specifically for secp256k1 elliptic-curve operations) from using a shared context provided by an older library (libwally) to using a Rust-managed context. The functions themselves and the underlying cryptographic operations remain the same. There is no direct evidence in the commit that this fixes an exploitable security vulnerability.

Security candidaterust: introduce global secp256k1 contextby Marko Bencun · 6c96b561 · Sep 2, 2025 · 5 filesMessage 76 · AdequateInformational 12Details
Commit message · Marko Bencun

rust: introduce global secp256k1 context

Creating/destroying instances of the context is expensive. The
secp256k1 library provides
GlobalContext (https://docs.rs/secp256k1/0.31.1/secp256k1/global/struct.GlobalContext.html),
but only on std. We add a port of this to no_std.

76/100 · AdequateMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context✓ Links an issue, advisory, or supporting reference
Why it was queued
cryptography-sensitive path
AI analysis · Informational 12/100

This commit is a performance optimization for the BitBox02 hardware wallet firmware. It replaces repeated creation and destruction of a cryptographic context (used for Bitcoin's secp256k1 elliptic-curve operations) with a single global context that is initialized once and reused. There is no indication in the commit that this fixes a security vulnerability; it is described purely as an efficiency improvement.

Security candidatetests: rename mocks to fakesby Niklas Dusenlund · 442462c3 · Sep 1, 2025 · 43 filesMessage 55 · ThinInformational 15Details
Commit message · Niklas Dusenlund

tests: rename mocks to fakes

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

This commit is a pure refactoring: it renames the test-only 'hardware-mocks' directory and all related function names to 'hardware-fakes' across build files, source code, and unit tests. No production firmware behavior changes, no security fixes, and no vulnerability is introduced or patched.

Security candidatetest: Moved mocking specific things to unit testsby Niklas Dusenlund · 08b47ca1 · Sep 1, 2025 · 20 filesMessage 90 · StrongInformational 15Details
Commit message · Niklas Dusenlund

test: Moved mocking specific things to unit tests

We want to share as much of the simulation code as possible without the
simulator depending on the mocking framework. This commit refactors
cmocka specific code to the unit-test dir.

90/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
Why it was queued
seed or entropy pathparser or protocol path
AI analysis · Informational 15/100

This commit is a pure internal test-code refactor. It moves CMocka-specific mock functions out of a shared hardware-mocks library and into the unit-test directory so that the simulator no longer depends on the CMocka testing framework. No production firmware code is changed, and nothing in the commit affects the security of the shipped BitBox02 device.

Security candidateMove vendored rust depsby Niklas Dusenlund · 2dfc3729 · Aug 27, 2025 · 4769 filesMessage 28 · OpaqueInformational 15Details
Commit message · Niklas Dusenlund

Move vendored rust deps

`src` should only contain our sources

28/100 · OpaqueMessage clarity
✓ Subject identifies a change! No meaningful explanatory body! Opaque security-relevant change
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 large but purely organizational change: it moves all vendored (third-party) Rust dependencies from the `src` directory to a new `external/vendor` directory. Only two small configuration files were actually modified: `.cargo/config.toml` (to point Cargo at the new vendor directory) and `external/vendor-rust.sh` (a helper script). The millions of added and removed lines are just the same dependency files being relocated, not new code. There is no visible change to the firmware's behavior or security logic.

Security candidaterust: clean up wally_sha512 remnantsby Marko Bencun · fbb6e6c7 · Aug 27, 2025 · 7 filesMessage 68 · AdequateInformational 18Details
Commit message · Marko Bencun

rust: clean up wally_sha512 remnants

Since bitbox02::sha512 now uses bitcoin::hashes and is not wrapping
the wally C function, we can remove that function and inline it.

bitbox-aes does not need the feature switch anymore as a result.

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

This commit is a routine code cleanup in the BitBox02 hardware wallet firmware. It removes an old wrapper around a C-language SHA-512 function and switches the Rust code to use a pure-Rust SHA-512 implementation from the `bitcoin::hashes` library. It also removes an unused feature flag and simplifies dependencies. There is no direct evidence in the commit that this fixes a security vulnerability.

Security candidateuse Rust hmac/sha256/sha512 over libwally's functionsby Marko Bencun · 7643ec20 · Aug 27, 2025 · 16 filesMessage 65 · AdequateLow 32Details
Commit message · Marko Bencun

use Rust hmac/sha256/sha512 over libwally's functions

Aiming to remove the libwally dependency.

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

This commit swaps the cryptographic hashing and HMAC functions used throughout the BitBox02 firmware from the libwally library to equivalent Rust implementations. The goal is to remove the libwally dependency. The change touches sensitive code paths such as seed stretching, U2F key generation, and secure-chip authorization, but the commit itself does not claim to fix any security bug. The main risk is that any subtle difference in behavior between the old and new implementations could affect how keys are derived or how the device authenticates, though the diff shows no obvious vulnerability.

Security candidaterust: since rust 1.64, bindgen can use the c types from coreby Niklas Dusenlund · 9e5ebf7e · Aug 27, 2025 · 14 filesMessage 65 · AdequateLow 29Details
Commit message · Niklas Dusenlund

rust: since rust 1.64, bindgen can use the c types from core

There was a bug also, (u)int is 32bits on 64 byte systems.

65/100 · AdequateMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Provides an explanatory body
Why it was queued
cryptography-sensitive pathseed or entropy path
AI analysis · Low 29/100

This commit updates the BitBox02 firmware's Rust code to use Rust's built-in C type definitions instead of a custom module. The commit message notes a bug: the custom module incorrectly defined 'unsigned int' as 64 bits on 64-bit systems, when it should always be 32 bits. The change removes the buggy custom type definitions and switches to the standard Rust core::ffi types. This is primarily a code-quality and correctness fix, but the wrong type sizes could have caused subtle memory or interface mismatches between Rust and C code, especially during testing on 64-bit computers.

Security candidatebitbox02-rust-c: fix wrong features in platform-bitbox02plusby Marko Bencun · 59a4c0ff · Aug 27, 2025 · 1 fileMessage 65 · AdequateInformational 19Details
Commit message · Marko Bencun

bitbox02-rust-c: fix wrong features in platform-bitbox02plus

This platform is only activated in Nova bootloaders, where we don't
need these deps.

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

This is a tiny build-configuration fix for a specific BitBox02 hardware variant (the 'BitBox02 Plus' platform used in Nova bootloaders). The change removes two optional Rust dependencies that were accidentally enabled for that platform. The commit message says those dependencies are not needed there. There is no direct evidence in the commit of a security vulnerability; it looks like a cleanup to avoid compiling unnecessary code in the bootloader.

Security candidatemove bip39 functionby Marko Bencun · 14417b14 · Aug 27, 2025 · 5 filesMessage 43 · ThinInformational 15Details
Commit message · Marko Bencun

move bip39 function

The bitbox02 crate is meant to wrap C code, which this function is not
doing anymore.

43/100 · ThinMessage clarity
✓ Subject identifies a change✓ Provides an explanatory body
Why it was queued
secret or key materialcryptography-sensitive path
AI analysis · Informational 15/100

This commit simply moves a helper function that looks up a BIP39 word by its index from one Rust module to another. The code itself is unchanged, and there is no indication of a security fix or vulnerability.

Security candidateport bip39 functionality from libwally-core to rust-bip39by Marko Bencun · 04833009 · Aug 27, 2025 · 11 filesMessage 85 · StrongLow 27Details
Commit message · Marko Bencun

port bip39 functionality from libwally-core to rust-bip39

rust-bip39 is much faster than libwally, so the unlock animation is
speed up so that the last animation frame lingers for a bit, otherwise
the change felt too abrupt.

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
secret or key materialcryptography-sensitive path
AI analysis · Low 27/100

This commit replaces the BIP39 (seed phrase) implementation inside the BitBox02 hardware wallet from one library (libwally-core) to another (rust-bip39). The main user-visible reason is speed: unlocking the device is now faster, so the unlock animation was shortened. The change touches how seed phrases are converted to cryptographic seeds and how individual BIP39 words are looked up. There is no direct evidence in the commit that this fixes a known security bug, but any change to cryptographic code can introduce subtle risks, so it deserves careful review.

Security candidateu2f: port app_string to Rust using rust-bip39 for the short mnemonicby Marko Bencun · 1a5d05cb · Aug 26, 2025 · 6 filesMessage 73 · AdequateInformational 19Details
Commit message · Marko Bencun

u2f: port app_string to Rust using rust-bip39 for the short mnemonic

Introducing rust-bip39 to get rid of libwally's bip39, starting with
u2f, where libwally was used to create the short mnemonic for unknown
sites.

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

This commit rewrites a small part of the BitBox02 U2F feature from C to Rust. When you register or authenticate with an unknown website, the device shows a short mnemonic phrase instead of a site name. The change swaps the old libwally BIP39 library for the Rust bip39 crate to generate that phrase. It is a routine refactoring/porting change; there is no direct evidence it fixes or introduces a security vulnerability, though any rewrite can carry subtle bugs.

Security candidaterust: add bip39 dep and vendor itby Marko Bencun · f7f7fbe7 · Aug 26, 2025 · 29 filesMessage 45 · ThinInformational 18Details
Commit message · Marko Bencun

rust: add bip39 dep and vendor it

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

This commit adds a new software library (a BIP-39 implementation for handling recovery seed phrases) to the BitBox02 firmware and stores a copy of it inside the project's source tree (vendoring). It does not change any device behavior by itself; it is purely a dependency addition. There is no direct evidence in the commit of a security vulnerability, but adding a new dependency always slightly increases the attack surface and supply-chain risk.

Security candidatetest: unify unit-test/simulator mocks and fakes into libraryby Niklas Dusenlund · 919d157b · Aug 26, 2025 · 41 filesMessage 72 · AdequateInformational 15Details
Commit message · Niklas Dusenlund

test: unify unit-test/simulator mocks and fakes into library

72/100 · AdequateMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Uses a recognizable type or scope✓ Mentions testing or verification! No meaningful explanatory body
Why it was queued
seed or entropy path
AI analysis · Informational 15/100

This commit is a pure test-infrastructure refactoring. It merges duplicate mock and fake hardware-implementation files that previously existed separately for unit tests and the simulator into a single shared library called 'hardware-mocks'. It also adjusts Rust build flags so RTT logging only compiles for the real firmware target (target_os='none'). There is no change to the actual device firmware or to any security-critical runtime behavior.

Security candidatescreen: Abstract out oled functionsby Niklas Dusenlund · 72e8aa24 · Aug 21, 2025 · 15 filesMessage 72 · AdequateInformational 15Details
Commit message · Niklas Dusenlund

screen: Abstract out oled functions

The oled functionality needs to be an interface so that we can replace
those functions in a simulator

72/100 · AdequateMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Provides an explanatory body✓ Explains rationale or failure mode
Why it was queued
boot or update path
AI analysis · Informational 15/100

This commit is a routine code cleanup that turns the screen drawing code into a generic interface so the same code can run on both the real device and a software simulator. It does not fix or introduce any security issue.