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 queue338AI 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 Bencun390117194258
benma's agent892855162
Niklas Dusenlund1112955059
cedwies1257063
Tomas Vrba947074
Cedric Wiese1239049
Jad814062
thisconnect211072
benma211074
Niklas111035
Yasser Aziza111070
Patrick Steiger111045
Analysis record

Published AI watches

Last scanned 47 minutes ago

Moderate 59 AI analysisMessage 50 · Thin
BB BitBoxBitBox02 firmware BitcoinHardware wallets

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

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 ca…

Added input validation on deserialized seed_length fieldBounds check prevents oversized seed length (>32 bytes) from being acceptedNew unit test covers malformed backup with seed_length mismatch
f6d2942cby Marko Bencun+34−01 file
No security note in commit
Low 44 AI analysisMessage 50 · Thin
BB BitBoxBitBox02 firmware BitcoinHardware wallets

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

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 exc…

Input size limit added before UI confirmationNew unit test for boundary condition (MAX_CONFIRM_BODY_SIZE and MAX_CONFIRM_BODY_SIZE + 1)Potential UI truncation or buffer issue mitigated for policy key display
1e674dfcby Marko Bencun+43−01 file
No security note in commit
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
Low 44 AI analysisMessage 78 · Adequate
BB BitBoxBitBox02 firmware BitcoinHardware wallets

btc: reject oversized policy keys

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 fu…

Input validation added to enforce UI display limitPrevents registration of keys that cannot be fully displayedBoundary test added at MAX_CONFIRM_BODY_SIZE and MAX_CONFIRM_BODY_SIZE+1
203bb0aaby benma's agent+43−01 file
Vendor flagged security relevance
Informational 15 AI analysisMessage 60 · Adequate
BB BitBoxBitBox02 firmware BitcoinHardware wallets

bb03 ui: replace long touch with slide to confirm

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 screen…

cc6ae75dby Jad+40−781 file
No security note in commit
Low 28 AI analysisMessage 68 · Adequate
BB BitBoxBitBox02 firmware BitcoinHardware wallets

bb03 UI: slide to confirm

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 c…

New high-stakes confirmation gesture (slide instead of tap)Input hardening: per-sample advance cap, off-track rejection, non-pointer rejectionSnap-back behavior on incomplete slides to prevent accidental confirmation
30a68c8dby Jad+3076−111 files
No security note in commit
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
Low 42 AI analysisMessage 50 · Thin
BB BitBoxBitBox02 firmware BitcoinHardware wallets

memory: initialize BLE random buffer

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 initial…

Uninitialized cryptographic buffer in security-critical reset routineBLE identity key (IRK) and identity address derivation contextDefense-in-depth initialization of random material
135bb8baby benma's agent+1−11 file
No security note in commit
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
Moderate 59 AI analysisMessage 78 · Adequate
BB BitBoxBitBox02 firmware BitcoinHardware wallets

btc: limit Miniscript encoding depth

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 t…

Adds explicit depth bound to prevent recursive stack exhaustionApplies to both WSH and Taproot (TR) policy parsing pathsIncludes boundary and regression-style tests for deep policies
82346eebby benma's agent+109−01 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
Informational 15 AI analysisMessage 43 · Thin
BB BitBoxBitBox02 firmware BitcoinHardware wallets

prepare v9.26.5

This commit is a routine release bookkeeping change. It updates the version number from v9.27.0 to v9.26.5 and reorganizes the changelog so that two bug fixes are listed under the new v9.26.5 release section instead of 'Unreleased'. The ac…

51ce24e6by benma's agent+5−22 files
No security note in commit
Low 30 AI analysisMessage 68 · Adequate
BB BitBoxBitBox02 firmware BitcoinHardware wallets

api: disable BitBoxSync by default

This commit turns off a feature called BitBoxSync by default. Unless a developer explicitly enables it during build, any request to use BitBoxSync will now receive a standard 'disabled' error. The change is framed as temporary while API ch…

Feature-gates an API that was previously reachable by defaultReturns Error::Disabled for requests to the gated APICommit message describes the change as temporary pending API changes
93d36fc8by benma's agent+7−02 files
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
Moderate 57 AI analysisMessage 68 · Adequate
BB BitBoxBitBox02 firmware BitcoinHardware wallets

rust: use static no-op waker

This commit replaces a custom-built notification helper (a 'waker') inside the BitBox02 firmware's Rust code with a built-in, memory-safe no-op version. The old helper used heap memory and reference counting (Arc), which could be freed by …

Eliminates heap-allocated Arc in waker constructionRemoves custom RawWakerVTable with unsafe clone/wake/drop operationsPrevents ISR callbacks from freeing Arc while heap allocator is active
5be42f61by benma's agent+2−523 files
Vendor flagged security relevance
Moderate 59 AI analysisMessage 68 · Adequate
BB BitBoxBitBox02 firmware BitcoinHardware wallets

usb: block HWW during U2F workflows

This commit fixes a concurrency bug in the BitBox02 hardware wallet's USB handling. When a U2F (two-factor authentication) workflow is still running on the device's screen, a new hardware wallet request could previously start and reset or …

Concurrency/lifetime bug between HWW and U2F USB endpointsUse-after-free or invalidation risk for live U2F UI objectsSession reset/cancellation path could corrupt shared UI state
0014300bby benma's agent+114−05 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 queuedmaintenance: Rename "callback param" to "user data"by Niklas Dusenlund · 963dbf0e · Oct 1, 2025 · 11 filesMessage 65 · AdequateInformational 15Details
Commit message · Niklas Dusenlund

maintenance: Rename "callback param" to "user data"

"user data" is the conventional term for the user provided pointer that
is returned in a callback.

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

This commit is a simple code cleanup: it renames variables and parameters from 'callback param' to 'user data' across several UI component files in the BitBox02 firmware. No behavior changes, bug fixes, or security fixes are present. It is purely a naming convention update to match standard terminology.

Security candidateassertions: Add nickez assertions for v9.23.2by Niklas Dusenlund · 37b3c5d5 · Sep 30, 2025 · 2 filesMessage 45 · ThinInformational 15Details
Commit message · Niklas Dusenlund

assertions: Add nickez assertions for v9.23.2

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

This commit adds two digital signature files for firmware version 9.23.2. These signatures are part of the project's reproducible-build attestation process, where an independent party (nickez) confirms that the published firmware matches the publicly available source code. No code, no bug fix, and no security vulnerability is present in the change itself.

Security candidatereleases: add sutterseba v9.23.2 assertionby Sebastian Sutter · 3f944799 · Sep 30, 2025 · 2 filesMessage 45 · ThinInformational 15Details
Commit message · Sebastian Sutter

releases: add sutterseba v9.23.2 assertion

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

This commit adds two digital signature files to the repository. They are a third-party reproducible-build assertion for the BitBox02 firmware version 9.23.2, signed by someone named 'sutterseba'. It does not change any firmware code, fix any bug, or introduce any new feature. There is no security issue here.

Security candidatereleases: add v9.23.2by Marko Bencun · 1597e16b · Sep 29, 2025 · 4 filesMessage 38 · OpaqueInformational 15Details
Commit message · Marko Bencun

releases: add v9.23.2

38/100 · OpaqueMessage clarity
✓ Subject identifies a change✓ Names a concrete action or component! No meaningful explanatory body! Opaque security-relevant change
Why it was queued
boot or update path
AI analysis · Informational 15/100

This commit simply adds official release signatures and build attestation files for firmware version 9.23.2. It does not change any source code, fix any bug, or alter any behavior of the BitBox02 device. There is nothing in the commit that introduces or addresses a security issue.

Lower-prioritysd.c: always pause clock after sdcard checkby Marko Bencun · d3e66a8b · Sep 29, 2025 · 2 filesMessage 68 · AdequateTriage 0Details
Commit message · Marko Bencun

sd.c: always pause clock after sdcard check

When the sdcard is inserted, the sdcard check runs into the retry
loop. In that case, the clock was not paused, which could lead to
touch issues.

68/100 · AdequateMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context
Security candidaterust: change imports to util::bb02_asyncby Marko Bencun · 23188260 · Sep 26, 2025 · 26 filesMessage 45 · ThinInformational 15Details
Commit message · Marko Bencun

rust: change imports to util::bb02_async

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

This commit is a routine code cleanup: it changes many Rust source files to import a small async helper module from a shared utility crate (`util::bb02_async`) instead of from the local crate (`crate::bb02_async`). There is no change to program logic, no bug fix, and no security-relevant behavior.

Lower-priorityrust: move async helper functions to the util crateby Marko Bencun · 44e62316 · Sep 26, 2025 · 8 filesMessage 75 · AdequateTriage 0Details
Commit message · Marko Bencun

rust: move async helper functions to the util crate

So the bitbox02 crate can also use it. It will be needed to be able to
use block_on() in the tests there.

75/100 · AdequateMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Provides an explanatory body✓ Mentions testing or verification
Security candidatebitcoin: add support for OP_RETURN outputsby Marko Bencun · 906a5608 · Sep 25, 2025 · 10 filesMessage 80 · StrongLow 38Details
Commit message · Marko Bencun

bitcoin: add support for OP_RETURN outputs

We enforce 0 value on them, so the confirmation screen is not a the
usual recipient component, but can be a full screen confirmation not
showing the amount. We use verify_message flow as it handles both
ascii/binary.

We also only support OP_RETURN outputs with one data push, though an
OP_RETURN output could contain multiple data pushes. This restriction
is for simplicity and because we don't know of a use case. In the
future, support for this can be added if needed.

80/100 · StrongMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context✓ Explains rationale or failure mode
Why it was queued
cryptography-sensitive pathsigning or wallet path
AI analysis · Low 38/100

This commit adds the ability to include OP_RETURN outputs when signing Bitcoin transactions on a BitBox02 hardware wallet. OP_RETURN is a special Bitcoin output type used to embed small pieces of data (like text or hashes) on the blockchain. The device now shows the user the data being embedded and asks for confirmation before signing. The commit also enforces that OP_RETURN outputs must carry zero Bitcoin value, so no money can accidentally be burned into them.

Lower-prioritybitcoin/common: use bitcoin crate to compute pkscriptby Marko Bencun · d6760358 · Sep 24, 2025 · 2 filesMessage 50 · ThinTriage 0Details
Commit message · Marko Bencun

bitcoin/common: use bitcoin crate to compute pkscript

Remove our own code to improve clarity.

50/100 · ThinMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component! No meaningful explanatory body
Lower-prioritybitcoin/common: add unit test for pk_script()by Marko Bencun · fef5ef81 · Sep 24, 2025 · 1 fileMessage 55 · ThinTriage 0Details
Commit message · Marko Bencun

bitcoin/common: add unit test for pk_script()

55/100 · ThinMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Mentions testing or verification! No meaningful explanatory body
Lower-prioritybb02_async: compile block_on only in testingby Marko Bencun · 6d0099b9 · Sep 23, 2025 · 1 fileMessage 78 · AdequateTriage 0Details
Commit message · Marko Bencun

bb02_async: compile block_on only in testing

Not needed anymore in production code. As a result, we can also remove
the screen processing, which is not relevant to the Rust unit tests.

78/100 · AdequateMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context✓ Mentions testing or verification
Security candidatekeystore: move unlock_bip39() to Rustby Marko Bencun · 99755d2f · Sep 23, 2025 · 8 filesMessage 45 · ThinInformational 12Details
Commit message · Marko Bencun

keystore: move unlock_bip39() to Rust

With the goal of making it async.

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

This commit is a straightforward refactoring: it moves the BIP39 seed derivation and wallet-unlock logic from C into Rust, splitting one C function into a Rust wrapper plus two existing C helper functions. There is no change to the cryptographic behavior, no new user-facing feature, and no obvious security bug introduced. It appears to be a code-quality/architecture change to prepare for making the unlock flow asynchronous.

Security candidatekeystore: split keystore_unlock_bip39() into multiple functionsby Marko Bencun · 984fe319 · Sep 23, 2025 · 2 filesMessage 65 · AdequateInformational 15Details
Commit message · Marko Bencun

keystore: split keystore_unlock_bip39() into multiple functions

Simpler to migrate it to Rust, with the goal of making it async.

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

This commit is a simple internal code reorganization. It splits one existing function, keystore_unlock_bip39(), into three smaller functions: a check, a finalize step, and the original wrapper that calls both. The actual behavior and security checks appear unchanged. There is no indication this fixes or introduces a security issue.

Lower-prioritytest: apply clang-formatby Marko Bencun · 0f7b4ffd · Sep 22, 2025 · 1 fileMessage 50 · ThinTriage 0Details
Commit message · Marko Bencun

test: apply clang-format

50/100 · ThinMessage clarity
✓ Subject identifies a change✓ Uses a recognizable type or scope✓ Mentions testing or verification! No meaningful explanatory body
Security candidaterust: update to toolchain 1.90.0by Marko Bencun · ee47c5f0 · Sep 21, 2025 · 1638 filesMessage 80 · StrongInformational 18Details
Commit message · Marko Bencun

rust: update to toolchain 1.90.0

This saves ~2-3kB in binary space in the multi firmware.

`clippy::collapsible-if` is disabled because I didn't like some of the
collapse suggestions. Readability seems worse rather than better.

Applied this to remove duplicate deps, choosing the higher of version
each time.
```
cargo update --precise 0.1.74 --package libc
cargo update --precise 1.0.1 --package cfg-if
```

Rust vendoring now for some reason adds Cargo.toml.orig files, which
part part of the crate checksum, so they are removed from the
.gitignore and committed.

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

This is a routine maintenance update that upgrades the Rust compiler toolchain from an older version to Rust 1.90.0 for the BitBox02 hardware wallet firmware. It refreshes many third-party Rust libraries (vendored dependencies), adjusts build configuration files, and saves a small amount of firmware space. There is no direct evidence in the commit of a security vulnerability being fixed or introduced. The main security consideration is that compiler and library updates can change generated code behavior, so thorough testing is warranted, but nothing in the diff points to an active security issue.

Lower-prioritymaintenance: upload simulator artifact in CI.by Nikolas De Giorgis · 3e643b92 · Sep 15, 2025 · 1 fileMessage 68 · AdequateTriage 0Details
Commit message · Nikolas De Giorgis

maintenance: upload simulator artifact in CI.

This way we can iteratively use new versions of the simulator without
the need for a new release.

We remove the old step that just built the simulator, but did nothing
with it, and include the simulator in the process that builds and
uploads artifact for several targets.

68/100 · AdequateMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context
Why it was queued
documentation-only discount
Lower-prioritychore: fix warnings.by Nikolas De Giorgis · e66a1238 · Sep 15, 2025 · 1 fileMessage 75 · AdequateTriage 0Details
Commit message · Nikolas De Giorgis

chore: fix warnings.

Fix warnings due to either unsigned/signed type mismatch in comparison,
or ignored return values that should have been checked.

75/100 · AdequateMessage clarity
✓ Subject identifies a change✓ Uses a recognizable type or scope✓ Provides detailed explanatory context✓ Explains rationale or failure mode
Lower-prioritypy: bump version and add CHANGELOG entry for btc_xpubsby Marko Bencun · 69fa68b5 · Sep 15, 2025 · 2 filesMessage 50 · ThinTriage 0Details
Commit message · Marko Bencun

py: bump version and add CHANGELOG entry for btc_xpubs

50/100 · ThinMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component! No meaningful explanatory body
Lower-prioritybuild: fix sanitizersby Niklas Dusenlund · 86ac878c · Sep 15, 2025 · 6 filesMessage 73 · AdequateInformational 12Details
Commit message · Niklas Dusenlund

build: fix sanitizers

The recommended way to enable sanitizers nowadays is to add
`-fsanitize=*` as a compiler and linking flags.

Also fix some warnings and remove some targets from "all" to speed up
builds.

Bumping macosx version to 11 since that seems to be necessary for asan
to work.

Add CI check to verify that address santizier is turned on for unit
tests

73/100 · AdequateMessage clarity
✓ Subject identifies a change✓ Uses a recognizable type or scope✓ Provides detailed explanatory context✓ Mentions testing or verification
Why it was queued
defensive validation
AI analysis · Informational 12/100

This commit is a build-system maintenance change. It updates how the project enables memory and behavior error detectors (AddressSanitizer and UndefinedBehaviorSanitizer) so they work with modern compilers, adds a CI check to confirm the sanitizer is actually active, bumps the minimum macOS version for compatibility, and removes some test libraries from the default build to speed things up. There is no indication it fixes a security vulnerability or introduces a security weakness.

Lower-prioritytest: add option for the simulator to write to file.by Nikolas De Giorgis · da6e70d5 · Sep 15, 2025 · 2 filesMessage 95 · StrongTriage 0Details
Commit message · Nikolas De Giorgis

test: add option for the simulator to write to file.

If the env variable FAKE_MEMORY_FILEPATH is provided, the simulator will
write to file using three different files:

- ${FAKE_MEMORY_FILEPATH}_shared
- ${FAKE_MEMORY_FILEPATH}_app
- ${FAKE_MEMORY_FILEPATH}_eeprom

mimicking the behaviour used when reading/writing to memory.

This allows us to re-launch the simulator after making changes in the
BBApp (e.g. renaming the device, accounts etc) while testing, simulating
the effect that unplugging/replugging a device would have.

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
Lower-prioritytest: add option for the simulator to write to file.by Nikolas De Giorgis · 5eaaabb3 · Sep 15, 2025 · 2 filesMessage 95 · StrongTriage 0Details
Commit message · Nikolas De Giorgis

test: add option for the simulator to write to file.

If the env variable FAKE_MEMORY_FILEPATH is provided, the simulator will
write to file using three different files:

- ${FAKE_MEMORY_FILEPATH}_shared
- ${FAKE_MEMORY_FILEPATH}_app
- ${FAKE_MEMORY_FILEPATH}_eeprom

mimicking the behaviour used when reading/writing to memory.

This allows us to re-launch the simulator after making changes in the
BBApp (e.g. renaming the device, accounts etc) while testing, simulating
the effect that unplugging/replugging a device would have.

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
AI review queuedkeystore: reduce SC operations in the seed checkby Marko Bencun · 212bf399 · Sep 10, 2025 · 4 filesMessage 80 · StrongLow 29Details
Commit message · Marko Bencun

keystore: reduce SC operations in the seed check

verify_seed() after storing a seed currently re-stretches the
password, which needs 5 securechip events.

We can skip that because we still have access to the stretched
password.

If the check succeeds, but there was an error involving the password
or secure chip (e.g. the stretching result was corrupted the first
time), the consequence is that the user won't be able to unlock, but
the seed itself on the MCU, on the backup and retained (encrypted) in
seed is unaffected. That trade-off is good, because a failure
there (securechip returns no error but actually had a corruption)
should be exceedingly rare.

This effort is part of mitigating Optiga's throttling mechanism that
kicks in after 133 events - users can run into this by repeatedly
resetting/restoring).

80/100 · StrongMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context✓ Explains rationale or failure mode
Why it was queued
second-pass: broader security terminology
AI analysis · Low 29/100

This commit changes how the BitBox02 hardware wallet verifies a newly stored seed. Instead of re-stretching the user's password through the secure chip (which consumes several secure-chip operations), it reuses the already-stretched encryption key. This is a performance/reliability improvement to avoid hitting a secure-chip throttling limit after many device resets or restores. The commit itself is a defensive hardening change, not an obvious vulnerability fix, but it slightly changes the security assumptions around seed verification.

Security candidatekeystore: pass seed to unlock_bip39() to reduce secure chip eventsby Marko Bencun · bbcdabcc · Sep 10, 2025 · 8 filesMessage 78 · AdequateInformational 18Details
Commit message · Marko Bencun

keystore: pass seed to unlock_bip39() to reduce secure chip events

When restoring a wallet, the seed is already known, so no need to do
another `copy_seed()` which is a secure chip security event. This
reduces the number of secure chip operations when restoring.

The hashed seed is retained so it can be compared without storing it
in plaintext.

This effort is part of mitigating Optiga's throttling mechanism that
kicks in after 133 events - users can run into this by repeatedly
resetting/restoring).

78/100 · AdequateMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context✓ Names security-relevant behavior explicitly
Why it was queued
secret or key material
AI analysis · Informational 18/100

This commit is a performance and reliability improvement, not a security fix. It changes how the BitBox02 hardware wallet restores a wallet so that the device does not repeatedly ask its secure chip for the same seed during restore. Instead, the seed is passed directly to the BIP39 unlock step and verified against a stored hash. The goal is to avoid hitting the secure chip's throttling limit (133 events) when users repeatedly reset or restore the device. The change does not remove any security check; it only avoids an unnecessary secure-chip read by comparing a hash of the seed instead.

AI review queuedreduce number of secure chip security events when creating/restoringby Marko Bencun · f8c1614d · Sep 10, 2025 · 6 filesMessage 78 · AdequateLow 30Details
Commit message · Marko Bencun

reduce number of secure chip security events when creating/restoring

Before, `keystore_encrypt_and_store_seed()` (called when
creating/restoring a seed) would always be followed by
`keystore_unlock(<password>)` with the password the user just chose,
so unlock could never fail. The unlocking part costs many secure chip
operations (for stretching the password).

By making the first function already unlock the keystore, we can avoid
calling `keystore_unlock()`, reducing the number of secure chip events
by 5.

This effort is part of mitigating Optiga's throttling mechanism that
kicks in after 133 events - users can run into this by repeatedly
resetting/restoring).

78/100 · AdequateMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context✓ Names security-relevant behavior explicitly
Why it was queued
second-pass: broader security terminology
AI analysis · Low 30/100

This commit is a performance and reliability improvement, not a security vulnerability fix. It changes how a hardware wallet sets up a new wallet seed so that it performs fewer operations on the secure chip. Previously, after creating or restoring a seed, the software immediately unlocked the wallet with the same password, which wasted secure chip operations. Now the creation/restore step also unlocks the wallet, reducing secure chip events by 5. This helps avoid hitting the secure chip's throttling limit (133 events) when users repeatedly reset or restore their device.

Lower-prioritykeystore: move funcsby Marko Bencun · b3e384fb · Sep 10, 2025 · 1 fileMessage 43 · ThinTriage 0Details
Commit message · Marko Bencun

keystore: move funcs

To be below the static function `_retain_seed()` that will be needed later.

43/100 · ThinMessage clarity
✓ Subject identifies a change✓ Provides an explanatory body