BB
← All projectsBitBox

BitBox02 firmware

Firmware and bootloader for BitBox02 signing devices.

BitcoinHardware walletsNormal
Repository coverage

647 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.

193security candidates127second-pass queue327AI analyses
25commits · 30 days
47commits · 60 days
312commits · 180 days
647commits · 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.

59/100 average clarity
65Strong · 80–100
281Adequate · 60–79
230Thin · 40–59
71Opaque · 0–39
23security 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 Bencun390117192258
benma's agent892848162
Niklas Dusenlund1112955059
cedwies1257063
Tomas Vrba947074
Cedric Wiese1239049
Jad812062
thisconnect211072
benma211074
Niklas111035
Yasser Aziza111070
Patrick Steiger111045
Analysis record

Published AI watches

Last scanned 53 minutes ago

Moderate 60 AI analysisMessage 90 · Strong
BB BitBoxBitBox02 firmware BitcoinHardware wallets

backup: validate decoded seed length

This update fixes a bug in how the BitBox02 hardware wallet reads backup files from an SD card. A tampered backup file could claim to contain a seed longer than the 32-byte limit, which previously caused the device to panic (crash) when li…

Out-of-bounds/panic condition in backup parsingMissing input validation on decoded protobuf fieldSD-card backup file could be attacker-controlled
80baf1eeby benma's agent+34−01 file
Vendor flagged security relevance
Informational 11 AI analysisMessage 28 · Opaque
BB BitBoxBitBox02 firmware BitcoinHardware wallets

u2f: fix refresh screen

This commit fixes a UI cleanup bug in the BitBox02 hardware wallet's U2F (Universal 2nd Factor) feature. Previously, a 'Refresh webpage' screen could be destroyed without clearing the pointer that tracked it, potentially leaving a dangling…

dangling-pointer mitigationuse-after-free preventionfirmware UI state cleanup
890f4ce3by benma's agent+17−11 file
No security note in commit
Low 27 AI analysisMessage 28 · Opaque
BB BitBoxBitBox02 firmware BitcoinHardware wallets

u2f: fix nudge screen

This commit fixes how a small on-screen reminder (the 'nudge screen') for U2F is created, tracked, and cleaned up. Before the fix, the code could lose track of the reminder screen or mishandle its removal, which might cause display glitche…

Use-after-free / dangling-pointer risk: global _nudge_label pointer could outlive the component it referencesUI state inconsistency: previous callback set _nudge_label = NULL on screen pop, but component cleanup may occur later or not at allMemory management fix: custom cleanup wrapper now synchronizes global pointer with component lifetime
931e75d6by benma's agent+22−71 file
No security note in commit
Low 42 AI analysisMessage 58 · Thin
BB BitBoxBitBox02 firmware BitcoinHardware wallets

Fix GroundedCell result lifetime

This commit fixes a bug in the U2F confirmation workflow where the firmware could read a result from memory that had already been cleared, potentially giving an incorrect success/failure answer. The fix simply reads the result before wipin…

use-after-clear / stale reference in task stateincorrect result lifetime orderingU2F confirmation workflow
dcd408f9by benma's agent+1−11 file
No security note in commit
Low 39 AI analysisMessage 73 · Adequate
BB BitBoxBitBox02 firmware BitcoinHardware wallets

rust: initialize C output buffers

This commit fixes a class of low-level memory-safety bugs where Rust code was given buffers containing uninitialized bytes. Rust's rules require every byte of a slice to be initialized, even if the function will overwrite them. Passing uni…

Undefined behavior at C/Rust FFI due to uninitialized buffers being treated as Rust slicesPotential optimizer-dependent behavior from violating Rust slice initialization rulesHardening of cryptographic output paths (SHA-256, HMAC-SHA256, HMAC-SHA512)
511018eaby benma's agent+52−2713 files
Vendor flagged security relevance
Moderate 60 AI analysisMessage 68 · Adequate
BB BitBoxBitBox02 firmware BitcoinHardware wallets

factorysetup: validate RTT message length

This commit fixes a bug in the BitBox02 factory setup tool that receives debug messages over SEGGER RTT. Previously, if a message said it contained more bytes than were actually received, the code would copy whatever leftover data happened…

Copy of uninitialized stack data into command buffer (information disclosure / undefined behavior)Missing length validation against actual bytes receivedFactory-only code path (factorysetup), not normal user firmware operation
bb882fc0by benma's agent+5−01 file
Vendor flagged security relevance
High 74 AI analysisMessage 78 · Adequate
BB BitBoxBitBox02 firmware BitcoinHardware wallets

eth: limit EIP-712 recursion depth

This commit adds a hard limit on how deeply nested Ethereum typed-message (EIP-712) structures can be when the BitBox02 hardware wallet signs them. Without the limit, an attacker could craft a message type that refers to itself over and ov…

Adds explicit recursion-depth cap to attacker-controlled input parsingPre-validates schema roots before host callbacks or user confirmationProtects against stack exhaustion / denial-of-service from deeply nested EIP-712 types
4ccadcc0by benma's agent+196−451 file
No security note in commit
Informational 15 AI analysisMessage 50 · Thin
BB BitBoxBitBox02 firmware BitcoinHardware wallets

py: extract bootloader connection

This commit is a minor code cleanup in a Python helper script. It moves existing bootloader connection logic into a small nested helper function to satisfy a style checker (pylint's limit on the number of return statements). No behavior ch…

886113d0by benma's agent+10−61 file
No security note in commit
Low 42 AI analysisMessage 70 · Adequate
BB BitBoxBitBox02 firmware BitcoinHardware wallets

rust: bound executor queue

This commit replaces an unbounded task queue inside the BitBox02 firmware's Rust executor with a fixed 16-slot ring buffer. It also adds a hard limit of 16 active tasks and protects queue access with critical sections so interrupt-driven c…

Replaced unbounded queue with fixed-capacity ring buffer to prevent memory exhaustionRemoved allocation from scheduling/wake path, including interrupt contextAdded critical-section synchronization between wakers and main-loop executor
b99e200aby benma's agent+186−285 files
No security note in commit
Low 42 AI analysisMessage 78 · Adequate
BB BitBoxBitBox02 firmware BitcoinHardware wallets

Warn before truncated value displays

This commit adds a warning screen to the BitBox02 hardware wallet whenever a long message or value is about to be shown in a truncated form. Previously, the device could silently cut off the end of very long transaction details, message da…

UI truncation warning added before oversized confirmation bodiesCentralized body-size limit to keep Rust and C UI limits in syncReplaced duplicated warning logic with shared confirm_value helper
5b3aee6fby benma's agent+266−4710 files
No security note in commit
Informational 12 AI analysisMessage 45 · Thin
BB BitBoxBitBox02 firmware BitcoinHardware wallets

releases: add v9.26.2, v9.26.3 and v9.26.4

This commit is a routine release-management update. It adds signed build assertions for three new BitBox02 firmware versions (9.26.2, 9.26.3, 9.26.4) and updates the release documentation and build helper script. The build script now delet…

No firmware source code is modifiedNo cryptographic primitives or protocols are changedNo bug fixes or vulnerability mitigations are present in the diff
eed2e68eby Marko Bencun+79−116 files
No security note in commit
Informational 21 AI analysisMessage 68 · Adequate
BB BitBoxBitBox02 firmware BitcoinHardware wallets

eth: loosen EIP-712 identifier validation

This firmware update relaxes the rules for valid Ethereum typed-data (EIP-712) names so they can contain a colon (:), which some decentralized apps use as a namespace separator. Member names still cannot contain colons. The change is prese…

Input validation relaxation for externally supplied EIP-712 type namesExplicit claim that ':' cannot forge encodeType boundariesMember-name validation remains strict
9703d8d9by Marko Bencun+50−43 files
No security note in commit
Moderate 59 AI analysisMessage 69 · Adequate
BB BitBoxBitBox02 firmware BitcoinHardware wallets

Limit SD erase file size

This commit fixes a bug in how the BitBox02 hardware wallet wipes files from its SD card. Before erasing a file, the device now checks the file's reported size against a safe maximum. Without this check, a tampered SD card could claim a fi…

CVE-2026-6682 referenced in commit messageMalformed FAT directory entry could cause excessive overwrite loopDenial-of-service via SD card tampering
2453f528by Marko Bencun+4−01 file
Vendor flagged security relevance
High 70 AI analysisMessage 66 · Adequate
BB BitBoxBitBox02 firmware BitcoinHardware wallets

Validate mounted FAT geometry

This update adds a safety check when the BitBox02 hardware wallet mounts a microSD card. A malicious or deliberately malformed FAT filesystem could trick the device's file-system library into placing user data inside attacker-controlled bo…

Fixes integer-wrap / geometry confusion in FAT mount logicAdds explicit post-mount validation of filesystem metadataPrevents data area from landing inside attacker-controlled FAT sectors
01c017d6by Marko Bencun+21−01 file
Vendor flagged security relevance
Low 27 AI analysisMessage 69 · Adequate
BB BitBoxBitBox02 firmware BitcoinHardware wallets

Update FatFs to R0.16

This commit updates the third-party FatFs file-system library inside the BitBox02 firmware from version R0.14b to R0.16 plus an upstream patch. The change is a routine dependency refresh: it replaces the vendored source files with the newe…

Third-party dependency update (FatFs R0.14b -> R0.16+p1)No explicit security claim in commit messageNo CVE or advisory referenced in commit or supplied references
9f2b493dby Marko Bencun+3842−256979 files
No security note in commit
Informational 15 AI analysisMessage 28 · Opaque
BB BitBoxBitBox02 firmware BitcoinHardware wallets

py: add BitBoxSync

This commit adds a new Python client feature called BitBoxSync to the BitBox02 Python library. It introduces generated protobuf code, new API methods to request identity keys, sign various sync-related intents, and unwrap an encrypted name…

851ed04bby Marko Bencun+574−1812 files
No security note in commit
Low 34 AI analysisMessage 59 · Thin
BB BitBoxBitBox02 firmware BitcoinHardware wallets

api: add BitBoxSync

This commit adds a brand-new firmware feature called BitBoxSync, which lets the BitBox02 hardware wallet participate in a sync service by proving its identity, signing login/admin intents, and decrypting namespace encryption keys. The code…

New cryptographic API surface added to the hardware wallet (Ed25519, X25519, HKDF, AEAD)Vendored third-party crate `hkdf` introduced into the firmware supply chainNew user-confirmation flow for signing sync intents; one operation (UnwrapNamespaceDek) deliberately skips confirmation
54cdb54dby Marko Bencun+2883−2230 files
No security note in commit
Informational 0 AI analysisMessage 45 · Thin
BB BitBoxBitBox02 firmware BitcoinHardware wallets

blupgrade: update stage1 binaries to v1.2.2

This commit simply swaps in newer pre-built bootloader stage1 binary files (version 1.2.2 replacing 1.2.1) for four BitBox02 hardware variants and updates the corresponding checksum list. The actual code inside the new binary files is not …

5940a800by Marko Bencun+8−86 files
No security note in commit
Moderate 59 AI analysisMessage 50 · Thin
BB BitBoxBitBox02 firmware BitcoinHardware wallets

bootloader/stage1: fix erase handling for partially erased blocks

This update fixes the BitBox02 bootloader's firmware-erase routine. Previously, when erasing leftover padding after a firmware update, the bootloader started erasing at the exact page where the firmware ended. Because flash memory can only…

Bootloader firmware erase routine could erase a flash block containing both firmware and paddingFix aligns erase start to erase-block boundary and re-checks erased state before erasingChangelog describes the change as a fix for 'partially erased flash blocks'
b31206a8by Marko Bencun+23−83 files
No security note in commit
Informational 15 AI analysisMessage 45 · Thin
BB BitBoxBitBox02 firmware BitcoinHardware wallets

blupgrade: add stage0/stage1 production binaries

This commit adds production bootloader upgrade files for the BitBox02 hardware wallet and updates build scripts to use them. It is a routine asset-management change: replacing placeholder development hashes with real signed production bina…

8db4b0dcby Marko Bencun+26−1720 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.

Lower-priorityexternal/CMakeLists.txt: remove duplicate flagsby Marko Bencun · 1a4e8abc · Feb 4, 2026 · 1 fileMessage 60 · AdequateTriage 0Details
Commit message · Marko Bencun

external/CMakeLists.txt: remove duplicate flags

Also -Wno-cast-align is also needed in the asf4-drivers to supress
warnings there.

60/100 · AdequateMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Provides an explanatory body
Why it was queued
documentation-only discount
Lower-priorityformat: skip vendored rust depend dirsby benma's agent · 45a17f58 · Feb 4, 2026 · 1 fileMessage 45 · ThinTriage 0Details
Commit message · benma's agent

format: skip vendored rust depend dirs

45/100 · ThinMessage clarity
✓ Descriptive subject✓ Names a concrete action or component! No meaningful explanatory body
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.

Lower-priorityda14531: validate HWW BLE payload lengthby benma's agent · 861117b2 · Feb 3, 2026 · 1 fileMessage 68 · AdequateModerate 63Details
Commit message · benma's agent

da14531: validate HWW BLE payload length

The BLE HWW path previously relied on ASSERT(payload_length == 64),
which is compiled out in release builds.

Enforce the expected USB HID report size at runtime and drop malformed
frames so usb_packet_process() never consumes stale/partial payload
bytes. Also include the headers that define USB_REPORT_SIZE and
USB_FRAME explicitly.

68/100 · AdequateMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context
Why it was queued
defensive validation
AI analysis · Moderate 63/100

This commit fixes a bug in the Bluetooth Low Energy (BLE) handling code for the BitBox02 hardware wallet. Previously, the code assumed incoming data packets were exactly 64 bytes long, but that size check was removed in release builds. If a malformed or partial packet arrived, the device could process leftover or incorrect data. The fix adds a runtime length check and drops any packet that is not the expected size before it is passed further into the system.

AI review queuedda14531: avoid unaligned u16 loadsby benma's agent · 043ad352 · Feb 3, 2026 · 1 fileMessage 68 · AdequateLow 35Details
Commit message · benma's agent

da14531: avoid unaligned u16 loads

The serial-link frame buffer is byte-addressed. Casting &frame[1] /
&frame[3+len] to a uint16_t* can be unaligned, which is undefined
behavior in C.

68/100 · AdequateMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context
Why it was queued
parser or protocol pathsecond-pass: security-sensitive path
AI analysis · Low 35/100

This commit fixes a low-level coding issue in the firmware that talks to a Bluetooth chip (DA14531). The code was reading 2-byte numbers from positions in a byte buffer that might not be properly aligned in memory, which is undefined behavior in C. The fix uses memcpy instead of direct pointer casts, which is safe regardless of alignment. On its own this is a robustness/correctness fix; there is no direct evidence in the commit that it is exploitable as a security vulnerability.

AI review queuedda14531: drop too-short UART framesby benma's agent · 9d57db92 · Feb 3, 2026 · 1 fileMessage 68 · AdequateModerate 68Details
Commit message · benma's agent

da14531: drop too-short UART frames

The serial-link parser subtracts 5 bytes (type+len+crc) when
validating a frame. If a truncated frame reaches
SERIAL_LINK_STATE_CHECK with frame_len < 5, the subtraction
underflows, allowing out-of-bounds reads during CRC/length handling.

Reject frames shorter than the minimum header+CRC size before parsing
the length.

68/100 · AdequateMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context
Why it was queued
parser or protocol pathsecond-pass: security-sensitive path
AI analysis · Moderate 68/100

This commit fixes a bug in the firmware that talks to a Bluetooth chip over a serial (UART) link. If a malformed or truncated message shorter than 5 bytes reached the validation step, the code would subtract 5 from the message length. Because the length was stored as an unsigned number, the result wrapped around to a very large value instead of becoming negative. That large value could then be used to read memory outside the intended buffer, potentially leaking data or causing the device to behave unpredictably. The fix rejects any frame shorter than 5 bytes before doing the subtraction.

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.

Lower-priorityBug: Fix BLE Random Data Overlapby cedwies · 66aaab28 · Feb 3, 2026 · 2 filesMessage 83 · StrongTriage 0Details
Commit message · cedwies

Bug: Fix BLE Random Data Overlap

When generating a new ble IRK and a new
ble identity address, we generate 32 random
bytes, using random[0-16) for IRK and
random[16,21) for identity address.

The current implementation has a bug which
causes the identity address to be
random[6,12), resulting in an overlap. This
means that the ble identity address leaks 6
bytes of our ble identity resolving key.

Test was added to test this behavior.

83/100 · StrongMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context✓ Mentions testing or verification✓ Names security-relevant behavior explicitly
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.

AI review queuedpy: formatby Niklas Dusenlund · aae1c599 · Feb 3, 2026 · 1 fileMessage 0 · OpaqueInformational 15Details
Commit message · Niklas Dusenlund

py: format

0/100 · OpaqueMessage clarity
! Very short subject! Too few words to establish purpose! No meaningful explanatory body
Why it was queued
second-pass: opaque commit message
AI analysis · Informational 15/100

This commit is a purely cosmetic code-formatting change. It shortens a single Python print statement from multiple lines to one line, with no change to what the program does or how it behaves.

Lower-priorityrust: Avoid modification to lockfile during buildby Niklas Dusenlund · 5d16681d · Feb 2, 2026 · 6 filesMessage 68 · AdequateTriage 0Details
Commit message · Niklas Dusenlund

rust: Avoid modification to lockfile during build

In CI we want the build to fail if the lockfile needs to be updated so
that we don't forget to commit the new lockfiles when the cargo config
is changed.

68/100 · AdequateMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context
Lower-prioritypy/bitbox02: list_backups returns tz aware timestampsby Niklas Dusenlund · 61c2221d · Feb 2, 2026 · 3 filesMessage 85 · StrongTriage 0Details
Commit message · Niklas Dusenlund

py/bitbox02: list_backups returns tz aware timestamps

Naive timestamps without timezone are by many python functions
interpreted as being in the local timezone. The backups are timestamped
with UTC so we return timmezone aware timestamps instead so that python
tooling correctly interpret them as UTC.

Fixes a bug in send_message.py that it would display incorrect
timestamps.

85/100 · StrongMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context✓ Explains rationale or failure mode
Lower-prioritypy: handle busy BitBox connection errorsby strmci · d52c1b65 · Feb 2, 2026 · 1 fileMessage 60 · AdequateTriage 0Details
Commit message · strmci

py: handle busy BitBox connection errors

Catch hid open_path failures in send_message and show a
user-friendly message instead of a traceback.

60/100 · AdequateMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Provides an explanatory body
Lower-priorityda14531: port protocol format C unit tests to Rustby benma's agent · 686c905f · Feb 2, 2026 · 3 filesMessage 60 · AdequateTriage 0Details
Commit message · benma's agent

da14531: port protocol format C unit tests to Rust

60/100 · AdequateMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Mentions testing or verification! No meaningful explanatory body
AI review queuedbitbox02: port C datetime formatting to Rustby benma's agent · 1a04855e · Feb 2, 2026 · 148 filesMessage 68 · AdequateInformational 18Details
Commit message · benma's agent

bitbox02: port C datetime formatting to Rust

Using the `time` dep. Binary size becomes slightly smaller.

Squashed: move bitbox02 datetime funcs to util::datetime

It is not Rust-based and not related to BitBox02 hardware
functionality, so we move it to the util crate.

68/100 · AdequateMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context
Why it was queued
second-pass: unusually broad change
AI analysis · Informational 18/100

This commit rewrites the BitBox02 firmware's date/time formatting from C to Rust and vendors several new Rust crates (time, deranged, powerfmt, num-conv) to do it. The change is described by the vendor as a code-quality and binary-size improvement, not a security fix. There is no direct evidence in the commit of a vulnerability being patched, but any rewrite of formatting code can in principle introduce subtle bugs such as buffer handling or timezone mistakes. The large amount of newly vendored code increases the supply-chain/bug surface that future audits should watch.

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.

AI review queuedInitial bb03 simulatorby Niklas Dusenlund · 7be0d9e7 · Jan 30, 2026 · 11 filesMessage 28 · OpaqueInformational 15Details
Commit message · Niklas Dusenlund

Initial bb03 simulator

28/100 · OpaqueMessage clarity
✓ Subject identifies a change! No meaningful explanatory body
Why it was queued
second-pass: opaque commit message
AI analysis · Informational 15/100

This commit adds a new graphical simulator for the BitBox03 hardware wallet. It is purely a development and testing tool: it creates a window that mimics the device screen, accepts simulated USB/TCP traffic, and can optionally pre-seed a test mnemonic. There is no change to the actual firmware that runs on real devices, and nothing in the commit fixes or introduces a security vulnerability in shipped products.

Lower-prioritybuild: Avoid hard coding path to compilerby Niklas Dusenlund · c1c4bbb9 · Jan 30, 2026 · 2 filesMessage 72 · AdequateTriage 0Details
Commit message · Niklas Dusenlund

build: Avoid hard coding path to compiler

This commit allows developers to choose compiler by modifying PATH

72/100 · AdequateMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Uses a recognizable type or scope✓ Provides an explanatory body
Lower-prioritysimulator: persist securechip type in fake memoryby bznein-coding-agent · be07b6de · Jan 29, 2026 · 1 fileMessage 45 · ThinTriage 0Details
Commit message · bznein-coding-agent

simulator: persist securechip type in fake memory

45/100 · ThinMessage clarity
✓ Descriptive subject✓ Names a concrete action or component! No meaningful explanatory body
AI review queuedda14531: port da14531_protocol_format to Rustby benma's agent · 09ee1ba7 · Jan 26, 2026 · 14 filesMessage 78 · AdequateInformational 16Details
Commit message · benma's agent

da14531: port da14531_protocol_format to Rust

Using the CRC dep we already have in Rust. We expose a helper
rust_da14531_crc function too for an unrelated call to CRC so we can
get rid of crc.c/crc.h.

C unit tests added for da14531_protocol_format still pass, showing the
Rust port is correct for the cases tested.

78/100 · AdequateMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context✓ Mentions testing or verification
Why it was queued
parser or protocol pathsecond-pass: security-sensitive path
AI analysis · Informational 16/100

This commit rewrites a low-level serial-link framing and CRC routine from C into Rust for the BitBox02 hardware wallet's Bluetooth companion-chip (DA14531) communication. It removes a hand-generated C CRC implementation and uses a standard Rust `crc` crate instead. The change is a refactor/port, not a fix for a known vulnerability. There is no direct evidence in the commit or supplied references that this change addresses a security bug.