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
66commits · 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 29 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.

AI review queuedMerge remote-tracking branch 'agent/benma-agent/require-20-byte-eip712-address'by Marko Bencun · a75ebc10 · Aug 18, 2026 · 1 fileMessage 50 · ThinModerate 59Details
Commit message · Marko Bencun

Merge remote-tracking branch 'agent/benma-agent/require-20-byte-eip712-address'

50/100 · ThinMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component! No meaningful explanatory body
Why it was queued
signing or wallet pathmerge-commit duplicate discountsecond-pass: security-sensitive path
AI analysis · Moderate 59/100

This commit tightens validation for Ethereum addresses used when signing typed messages (EIP-712). Previously, an address of any hex length after the '0x' prefix was accepted and padded to 32 bytes. Now only exactly 20-byte (40 hex character) addresses are allowed. This prevents malformed or truncated addresses from being silently encoded and signed, which could lead to a user approving a signature for an unintended address or contract.

Security candidateMerge remote-tracking branch 'agent/benma-agent/zeroize-derived-encryption-keys'by Marko Bencun · 1e76deb9 · Aug 18, 2026 · 2 filesMessage 50 · ThinLow 37Details
Commit message · Marko Bencun

Merge remote-tracking branch 'agent/benma-agent/zeroize-derived-encryption-keys'

50/100 · ThinMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component! No meaningful explanatory body
Why it was queued
memory safetycryptography-sensitive pathmerge-commit duplicate discount
AI analysis · Low 37/100

This commit improves how sensitive cryptographic key material is erased from memory in the BitBox02 hardware wallet. It wraps temporary derived keys (SHA-512 outputs and a stretched seed encryption key) with a Rust helper that automatically clears the memory when the value is no longer needed. This reduces the chance that fragments of private-key-related material remain in RAM longer than necessary, but it is a hardening change rather than a fix for an obvious, directly exploitable bug.

AI review queuedMerge branch 'merge-v9.26.5'by Marko Bencun · 3b2d236a · Aug 18, 2026 · 13 filesMessage 45 · ThinHigh 70Details
Commit message · Marko Bencun

Merge branch 'merge-v9.26.5'

45/100 · ThinMessage clarity
✓ Descriptive subject✓ Names a concrete action or component! No meaningful explanatory body
Why it was queued
signing or wallet pathmerge-commit duplicate discountsecond-pass: security-sensitive path
AI analysis · High 70/100

This firmware update fixes several security issues in the BitBox02 hardware wallet. The most important change is that when signing Bitcoin transactions, the device now verifies that the previous transaction output's script (the 'pubkey script') matches the keypath the wallet is being asked to sign with. This closes a gap where a malicious or buggy host app could ask the wallet to sign an input while claiming it belongs to a different address/key than it actually does. The update also hardens the U2F/FIDO workflow so that an attacker cannot swap or replay a different request while the user is still confirming one on screen, and it prevents Bluetooth pairing prompts from popping up on top of other wallet tasks. The changelog simply says 'Security improvements', so the vendor has not publicly detailed the exact vulnerabilities.

Security candidateDisallow RTT in BitBox03 production buildsby Niklas Dusenlund · 14fb9861 · Aug 17, 2026 · 4 filesMessage 68 · AdequateLow 47Details
Commit message · Niklas Dusenlund

Disallow RTT in BitBox03 production builds

Mark release boot0, boot1, and firmware links as production. Reject RTT control block or buffer sections from those final ELF files.

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

This change makes sure that production versions of the BitBox03 hardware wallet do not include SEGGER RTT (Real-Time Transfer) debug sections. RTT is a debugging feature that lets a connected computer exchange data with the device while it runs. In a production device, leaving those debug sections linked into the final firmware could give an attacker with physical access an extra channel to read memory or interact with the device. The patch marks release builds as 'production' and makes the linker throw an error if any RTT control or buffer sections are still present.

AI review queuedMerge remote-tracking branch 'agent/benma-agent/full-transaction-amounts'by Marko Bencun · 50ed3901 · Aug 12, 2026 · 14 filesMessage 50 · ThinLow 35Details
Commit message · Marko Bencun

Merge remote-tracking branch 'agent/benma-agent/full-transaction-amounts'

50/100 · ThinMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component! No meaningful explanatory body
Why it was queued
signing or wallet pathmerge-commit duplicate discountsecond-pass: security-sensitive path
AI analysis · Low 35/100

This update changes how the BitBox02 hardware wallet displays very large transaction and swap amounts. Previously, long amounts were simply cut off with '...' on the device screen, which could hide important digits. Now the firmware either uses a smaller font to fit the full amount, or shows the full amount on a separate scrollable screen. The change also adds a length limit on externally supplied payment-request amounts to prevent abuse. This is a user-interface improvement that reduces the risk of a user approving a transaction whose displayed amount has been misleadingly truncated.

Security candidateMerge remote-tracking branch 'agent/benma-agent/document-zero-s2c-fallback'by Marko Bencun · f2617ff3 · Aug 12, 2026 · 7 filesMessage 50 · ThinInformational 23Details
Commit message · Marko Bencun

Merge remote-tracking branch 'agent/benma-agent/document-zero-s2c-fallback'

50/100 · ThinMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component! No meaningful explanatory body
Why it was queued
cryptography-sensitive pathsigning or wallet pathmerge-commit duplicate discount
AI analysis · Informational 23/100

This commit only adds documentation comments and does not change any code behavior. It explains that when a host computer does not provide an anti-klepto nonce commitment during Bitcoin or Ethereum signing, the device falls back to a historical signing mode that lacks anti-klepto protection. The actual fallback behavior already existed; this change just documents it more clearly.

AI review queuedbtc: warn on high all-change feesby benma's agent · 9d1a456f · Aug 12, 2026 · 2 filesMessage 78 · AdequateLow 40Details
Commit message · benma's agent

btc: warn on high all-change fees

Use the verified input total as the fee-warning denominator when a
transaction has no external output value. This covers all-change and
OP_RETURN-only transactions without introducing an absolute fee policy.

Label the denominator explicitly and add regression coverage for both
high-fee and below-threshold cases.

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

This commit fixes a fee-warning gap in the BitBox02 Bitcoin signing flow. Previously, transactions that only sent money back to yourself (change outputs) or only carried an OP_RETURN message had no 'send amount' to compare the fee against, so the device would not warn even if the fee was huge. The patch now compares the fee to the total value of all transaction inputs in those cases, and still warns the user when the fee exceeds 10% of that total. It also updates the on-screen wording to say whether the percentage is relative to the send amount or to all inputs.

Security candidatedocs: clarify signing fallback behaviorby benma's agent · 4346ec67 · Aug 12, 2026 · 7 filesMessage 80 · StrongInformational 15Details
Commit message · benma's agent

docs: clarify signing fallback behavior

Document the historical zero-contribution S2C fallback used by legacy
Bitcoin and Ethereum signing requests when anti-klepto is omitted.

Clarify that EIP-712 instead falls back to plain RFC6979 and that neither
fallback provides anti-klepto protection.

80/100 · StrongMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Uses a recognizable type or scope✓ Provides detailed explanatory context
Why it was queued
signing boundarysecure hardware boundarycryptography-sensitive pathsigning or wallet path
AI analysis · Informational 15/100

This commit only adds documentation comments and does not change any program behavior. It explains that when a security feature called anti-klepto is left out of older Bitcoin and Ethereum signing requests, the device falls back to a historical, deterministic signing method that lacks anti-klepto protection. For EIP-712 typed messages, it falls back to plain RFC6979. No code logic is altered.

Security candidateMerge commit 'refs/pull/2036/head' of https://github.com/BitBoxSwiss/bitbox02-firmwareby Marko Bencun · e68a2dfd · Aug 11, 2026 · 2 filesMessage 58 · ThinLow 29Details
Commit message · Marko Bencun

Merge commit 'refs/pull/2036/head' of https://github.com/BitBoxSwiss/bitbox02-firmware

58/100 · ThinMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Links an issue, advisory, or supporting reference! No meaningful explanatory body
Why it was queued
seed or entropy pathmerge-commit duplicate discount
AI analysis · Low 29/100

This commit improves how the BitBox02 hardware wallet generates the secret seed used to back up cryptocurrency. It adds an extra source of randomness—derived from the user's password—into the seed creation process. The change also documents that the seed already mixes randomness from the device's main chip, its secure chip, and factory-installed randomness. There is no direct evidence in the commit that this fixes a known exploitable vulnerability; it appears to be a defense-in-depth improvement to make the seed harder to predict or weaken.

AI review queuedui: display full transaction amountsby benma's agent · 075fa9f4 · Aug 11, 2026 · 14 filesMessage 68 · AdequateModerate 59Details
Commit message · benma's agent

ui: display full transaction amounts

Remove lossy ellipsis truncation from Ethereum and swap amounts.

Use rendered font widths to retain compact confirmation screens when
amounts fit, and fall back to separate scrollable review screens when
they do not. Preserve final fee long-touch confirmation without
requiring users to scroll first.

Validate external swap amount strings before presenting them in full
and add a manual long-amount Ethereum transaction fixture.

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

This commit changes how the BitBox02 hardware wallet shows large transaction and swap amounts on its small screen. Previously, long amounts were silently cut off with '...', which could hide the true value from the user. Now the device either shrinks the font or shows the full amount on a scrollable screen. The change also adds checks to reject absurdly long externally supplied swap amount strings. The main security benefit is that users can now verify the complete amount they are approving, reducing the chance of being tricked by a truncated value.

Security candidatekeystore: improve documentation of seed entropy sourcesby Sebastian Sutter · 0611b048 · Aug 4, 2026 · 2 filesMessage 55 · ThinInformational 15Details
Commit message · Sebastian Sutter

keystore: improve documentation of seed entropy sources

55/100 · ThinMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Names security-relevant behavior explicitly! No meaningful explanatory body
Why it was queued
entropy or randomnessseed or entropy path
AI analysis · Informational 15/100

This commit only adds and updates comments in the code to better explain where the randomness used to create wallet seeds comes from. It does not change any actual behavior, logic, or security properties of the firmware.

Lower-priorityMerge remote-tracking branch 'agent/benma-agent/validate-backup-seed-length'by Marko Bencun · f6d2942c · Aug 4, 2026 · 1 fileMessage 50 · ThinModerate 59Details
Commit message · Marko Bencun

Merge remote-tracking branch 'agent/benma-agent/validate-backup-seed-length'

50/100 · ThinMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component! No meaningful explanatory body
Why it was queued
defensive validationmerge-commit duplicate discount
AI analysis · Moderate 59/100

This commit adds a safety check to the BitBox02 hardware wallet's backup loading code. It now rejects backup files that claim to contain a 'seed' longer than 32 bytes. Without this check, a tampered or malformed backup could potentially cause memory corruption or unexpected behavior when the seed is later used. The change is defensive and includes a new test to confirm oversized seed lengths are rejected.

Lower-priorityMerge remote-tracking branch 'agent/benma-agent/reject-oversized-policy-keys'by Marko Bencun · 1e674dfc · Aug 4, 2026 · 1 fileMessage 50 · ThinLow 44Details
Commit message · Marko Bencun

Merge remote-tracking branch 'agent/benma-agent/reject-oversized-policy-keys'

50/100 · ThinMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component! No meaningful explanatory body
Why it was queued
merge-commit duplicate discount
AI analysis · Low 44/100

This commit adds a length check before showing a Bitcoin policy key on the BitBox02 device screen. Previously, an extremely long key string could be displayed or processed without a size limit. The fix rejects keys whose on-screen text exceeds the maximum body size the confirmation UI can handle, preventing potential display truncation, UI confusion, or memory-related issues during policy registration.

AI review queuedbackup: validate decoded seed lengthby benma's agent · 80baf1ee · Aug 4, 2026 · 1 fileMessage 90 · StrongModerate 60Details
Commit message · benma's agent

backup: validate decoded seed length

Reject backup data whose declared seed length exceeds the fixed
32-byte seed field. This prevents malformed SD-card backups from
triggering an out-of-bounds panic while listing backups.

Add a regression test with an otherwise valid protobuf and recomputed
checksum.

Tests:
- `cargo test --manifest-path src/rust/Cargo.toml --all-features -- --test-threads 1`
- `./scripts/dev_exec.sh make run-unit-tests`

90/100 · StrongMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context✓ Explains rationale or failure mode✓ Mentions testing or verification
Why it was queued
defensive validationfuzzing or regression evidencesecond-pass: broader security terminology
AI analysis · Moderate 60/100

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 listing backups. The fix rejects such malformed files, and a new test confirms the behavior.

Lower-prioritybtc: reject oversized policy keysby benma's agent · 203bb0aa · Aug 3, 2026 · 1 fileMessage 78 · AdequateLow 44Details
Commit message · benma's agent

btc: reject oversized policy keys

Reject policy keys whose rendered confirmation exceeds the UI label limit.
This prevents registration from approving a key that cannot be displayed in full.

Add boundary coverage for a 640-byte key and rejection at 641 bytes.

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

This commit fixes a user-interface safety issue in the BitBox02 hardware wallet's Bitcoin multi-signature policy registration. Previously, a very long policy key could be approved by the user even though the device could not display the full key on its screen. The change now rejects keys whose on-screen confirmation text exceeds the device's maximum label size, preventing a scenario where a user might unknowingly approve a key they cannot fully verify.

Lower-prioritybb03 ui: replace long touch with slide to confirmby Jad · cc6ae75d · Aug 3, 2026 · 1 fileMessage 60 · AdequateInformational 15Details
Commit message · Jad

bb03 ui: replace long touch with slide to confirm

replaces hold to confirm (long touch) with
slide to confirm and removed long touch for BB03

60/100 · AdequateMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Provides an explanatory body
AI analysis · Informational 15/100

This commit changes how users confirm sensitive actions on the BitBox03 hardware wallet. It replaces a 'hold/long-press to confirm' button with a 'slide to confirm' gesture, similar to the swipe gestures used on many smartphone lock screens. There is no indication of a security bug being fixed; it appears to be a user-interface design change.

Lower-prioritybb03 UI: slide to confirmby Jad · 30a68c8d · Aug 3, 2026 · 11 filesMessage 68 · AdequateLow 28Details
Commit message · Jad

bb03 UI: slide to confirm

Implement slide to confirm UI component for
confirming transactions and sensitive operations

Delete render_slide_confirm.rs

68/100 · AdequateMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context
AI analysis · Low 28/100

This commit adds a new 'slide to confirm' user-interface control to the BitBox03 hardware wallet. It is a deliberate UX/security feature for high-risk actions (like approving transactions), replacing a simple tap with a drag gesture. The code also includes hardening against accidental or glitched touch input, and a full suite of simulator tests. There is no direct evidence in the commit that this fixes an active security vulnerability; it reads as a planned product improvement.

AI review queuedu2f: fix refresh screenby benma's agent · 890f4ce3 · Aug 1, 2026 · 1 fileMessage 28 · OpaqueInformational 11Details
Commit message · benma's agent

u2f: fix refresh screen

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

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 reference. The patch adds a custom cleanup handler that nulls out the pointer when the screen is removed. There is no direct evidence in the commit of a security exploit, but use-after-free or dangling-pointer bugs in firmware can sometimes have security implications if they lead to crashes or memory corruption.

AI review queuedu2f: fix nudge screenby benma's agent · 931e75d6 · Jul 31, 2026 · 1 fileMessage 28 · OpaqueLow 27Details
Commit message · benma's agent

u2f: fix nudge screen

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

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 glitches or memory issues. The patch makes cleanup more reliable by tying the global pointer to the screen's actual destruction.

Lower-priorityFix GroundedCell result lifetimeby benma's agent · dcd408f9 · Jul 31, 2026 · 1 fileMessage 58 · ThinLow 42Details
Commit message · benma's agent

Fix GroundedCell result lifetime

Read the confirmation result before clearing CONFIRM_STATE.
The result reference points into GroundedCell storage, so clearing the
state first invalidates it before result.is_ok() reads it.

This keeps the poll contract: publish the completed result, clear the task
state, and report completion. It also matches rust_workflow_unlock_poll().

58/100 · ThinMessage clarity
✓ Descriptive subject✓ Provides detailed explanatory context
Why it was queued
defensive validation
AI analysis · Low 42/100

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 wiping the state. It is a memory-use-order bug rather than an obvious exploit, but in a security device it could lead to wrong authorization decisions.

Security candidaterust: initialize C output buffersby benma's agent · 511018ea · Jul 31, 2026 · 13 filesMessage 73 · AdequateLow 39Details
Commit message · benma's agent

rust: initialize C output buffers

Rust slices require every byte in their backing storage to be initialized,
even when a function only intends to overwrite the bytes. Several C callers
passed uninitialized output buffers through BytesMut, and SHA/HMAC created
mutable slices directly from such pointers. This was formal UB and could
allow optimizer-dependent behavior.

In practice, these paths only wrote their outputs before C consumed them, and
current builds emitted the expected stores. No secret disclosure, corrupted
output, or control-flow impact was observed. This is hardening rather than a
fix for a demonstrated exploit.

Initialize C storage before constructing BytesMut. Keep output-only helpers on
raw pointers so they can legally initialize storage, and document the FFI
invariant. Raw-pointer APIs that already used direct stores remain valid.

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
explicit security languagedefensive validationcryptography-sensitive pathboot or update pathparser or protocol path
AI analysis · Low 39/100

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 uninitialized memory could let the compiler make unsafe assumptions, but the commit message says no actual exploit or data leak was observed. The fix initializes buffers before handing them to Rust and switches some helpers to use raw pointers so they can legally write into uninitialized memory.

Lower-priorityfactorysetup: validate RTT message lengthby benma's agent · bb882fc0 · Jul 31, 2026 · 1 fileMessage 68 · AdequateModerate 60Details
Commit message · benma's agent

factorysetup: validate RTT message length

Reject RTT frames whose declared payload exceeds the bytes returned by the transport.

This prevents copying uninitialized stack data into factory commands when a frame is partial.

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

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 to be sitting in a stack buffer into a factory command. That could leak uninitialized memory or cause the device to act on garbage data. The fix adds a simple length check and rejects incomplete frames.

Lower-prioritymemory: initialize BLE random bufferby benma's agent · 135bb8ba · Jul 31, 2026 · 1 fileMessage 50 · ThinLow 42Details
Commit message · benma's agent

memory: initialize BLE random buffer

50/100 · ThinMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Names security-relevant behavior explicitly! No meaningful explanatory body
AI analysis · Low 42/100

This commit fixes a minor but real security hygiene issue in the BitBox02 Plus hardware wallet. Before the patch, a 32-byte buffer meant to hold freshly generated random bytes for Bluetooth Low Energy (BLE) pairing security was not initialized. The code then immediately fills it with random data, so in normal operation the buffer is overwritten before use. However, if the random-generation function were to fail partially or unexpectedly, uninitialized memory could be used, which is poor practice for cryptographic material. The patch initializes the buffer to zeros as a safety net.

AI review queuedeth: limit EIP-712 recursion depthby benma's agent · 4ccadcc0 · Jul 30, 2026 · 1 fileMessage 78 · AdequateHigh 74Details
Commit message · benma's agent

eth: limit EIP-712 recursion depth

Reject schemas and values whose recursive struct or array traversal
exceeds a bounded depth. Validate type roots before callbacks and
cover the boundaries with tests.

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 validationsigning or wallet pathsecond-pass: near security thresholdsecond-pass: security-sensitive path
AI analysis · High 74/100

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 over, causing the firmware to recurse until it runs out of stack memory and crashes. The patch caps recursion at 16 levels, validates the whole type tree before any user interaction or host callbacks, and adds tests for the boundary.

Lower-prioritybtc: limit Miniscript encoding depthby benma's agent · 82346eeb · Jul 30, 2026 · 1 fileMessage 78 · AdequateModerate 59Details
Commit message · benma's agent

btc: limit Miniscript encoding depth

Reject WSH policies and Taproot leaves that exceed the firmware-specific recursive encoding limit.

Cover the boundary and known deep-policy shape with tests.

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

This commit adds a safety limit to how deeply nested a Bitcoin policy (a set of spending rules) can be before the BitBox02 hardware wallet will reject it. Without such a limit, an attacker could craft an unusually deep policy that causes the wallet's stack memory to overflow during normal processing, potentially crashing the device or causing undefined behavior. The fix caps the allowed depth and adds tests to confirm both the boundary and a known problematic shape are blocked.