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 queue230AI analyses
28commits · 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 Bencun390117135258
benma's agent892834162
Niklas Dusenlund1112931059
cedwies1257063
Tomas Vrba947074
Cedric Wiese1239049
Jad811062
thisconnect211072
benma211074
Niklas111035
Yasser Aziza111070
Patrick Steiger111045
Analysis record

Published AI watches

Last scanned 52 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
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
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 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
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
Informational 20 AI analysisMessage 83 · Strong
BB BitBoxBitBox02 firmware BitcoinHardware wallets

blupgrade: keep dev stage1 unsigned

This commit fixes a build script used only for development/testing versions of the BitBox02 bootloader upgrade. It makes the development-stage1 bootloader images unsigned again, while keeping production images fully signature-verified. The…

Signature verification relaxed only for development buildsProduction payload validation still requires signaturesDevelopment stage0 already skipped stage1 signature verification per commit message
476b90e3by Marko Bencun+9−69 files
No security note in commit
High 76 AI analysisMessage 23 · Opaque
BB BitBoxBitBox02 firmware BitcoinHardware wallets

security improvements

This BitBox02 firmware update is a broad security patch that fixes several independent bugs: it prevents a maliciously oversized USB report from overflowing memory, stops a corrupted Bluetooth pairing database from being read or written wi…

Bounds check added to USB HID Set Report input lengthBLE bond DB length validation hardened against negative and oversized valuesBootloader firmware image size limit relaxed to intended maximum
cbb40634by Marko Bencun+1117−25021 files
Vendor flagged security relevance
Low 46 AI analysisMessage 60 · Adequate
BB BitBoxBitBox02 firmware BitcoinHardware wallets

bootloader: allow full sized images

This commit fixes a bootloader bug where the device rejected firmware updates that used the maximum allowed size. The off-by-one check meant legitimate full-sized firmware images could not be installed, potentially blocking updates. The fi…

Off-by-one input validation in firmware-update pathBootloader change affecting firmware chunk count acceptanceCHANGELOG labels the change as a bugfix for full-sized firmware upgrades
f60b93ccby Marko Bencun+5−33 files
No security note in commit
Moderate 59 AI analysisMessage 28 · Opaque
BB BitBoxBitBox02 firmware BitcoinHardware wallets

Add bootloader update

This is a large firmware commit that adds a new two-stage bootloader update mechanism for the BitBox02 hardware wallet. It replaces the old single bootloader with a small, fixed 'stage0' plus a separately signed 'stage1', and ships a speci…

Bootloader architecture changed from monolithic to two-stage (stage0 + signed stage1).Firmware signature hash now includes a 16-bit product_id, binding firmware to product variant.Root public keys were rotated/replaced with a single set across all products.
3f1f3172by Marko Bencun+5003−52379 files
Vendor flagged security relevance
Informational 15 AI analysisMessage 73 · Adequate
BB BitBoxBitBox02 firmware BitcoinHardware wallets

Add flash data backup scripts

This commit adds two helper scripts for developers to back up and restore BitBox02 flash memory areas using a Segger J-Link debugger. The scripts require physical hardware access and a debugging probe, and they are not part of the firmware…

285fa768by Niklas Dusenlund+383−03 files
No security note in commit
Informational 15 AI analysisMessage 40 · Thin
BB BitBoxBitBox02 firmware BitcoinHardware wallets

bb03 UI: placeholder BTC signing workflows

This commit replaces unfinished placeholder code (which would crash with 'todo!()') with simple working user-interface placeholders for Bitcoin signing demonstrations. It adds basic on-screen prompts to confirm a recipient/amount and a tot…

f7b0b082by Jad+24−121 file
No security note in commit
Repository ledger

Explore captured commits

Expand any commit for its author, full message, clarity score, changed files, triage signals, analysis, and source link.

Security candidaterust/keystore: move bip39_unlock and ROOT_FINGERPRINTby Marko Bencun · d02d1390 · Oct 30, 2025 · 3 filesMessage 50 · ThinInformational 12Details
Commit message · Marko Bencun

rust/keystore: move bip39_unlock and ROOT_FINGERPRINT

50/100 · ThinMessage clarity
✓ Specific, 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 code reorganization: it moves the BIP39 seed derivation and root fingerprint storage from one Rust module to another. The same logic is preserved, including a safety check that derives the seed twice to detect memory corruption. There is no visible security fix or vulnerability being introduced.

Security candidatereleases: assert v9.24.0by Niklas Dusenlund · 48283beb · Oct 30, 2025 · 2 filesMessage 38 · OpaqueInformational 15Details
Commit message · Niklas Dusenlund

releases: assert v9.24.0

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 adds two digital signature files for the BitBox02 firmware version 9.24.0. These signatures are part of the release attestation process, where a trusted person (here, 'nickez') cryptographically signs the released firmware so users can verify its authenticity. No code was changed, and there is no indication of any security bug or vulnerability.

Security candidaterust: move bitbox02::keystore::bip39_mnemonic_from_seed() to bip39 moduleby Marko Bencun · c4c11807 · Oct 30, 2025 · 4 filesMessage 50 · ThinInformational 15Details
Commit message · Marko Bencun

rust: move bitbox02::keystore::bip39_mnemonic_from_seed() to bip39 module

50/100 · ThinMessage clarity
✓ Specific, 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 15/100

This commit is a simple internal code reorganization: a function that converts a seed into a BIP39 recovery phrase is moved from one Rust module to another, with all callers updated. The actual behavior of the function is unchanged, and no security bug is introduced or fixed.

Security candidaterust/keystore: move mock_unlocked() etc to bitbox02_rust::keystoreby Marko Bencun · 1d0096a9 · Oct 30, 2025 · 28 filesMessage 50 · ThinInformational 15Details
Commit message · Marko Bencun

rust/keystore: move mock_unlocked() etc to bitbox02_rust::keystore

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

This commit is a code cleanup and refactoring change. It moves test-only helper functions (used to simulate an unlocked device during automated tests) from one internal Rust module to another, closer to where they are actually used. It also moves a BIP39 mnemonic-to-seed conversion function into a more appropriate module. There is no change to the actual device firmware behavior, user-facing functionality, or security logic.

Security candidaterust/keystore: wrap unlock_bip39() and copy_bip39_seed() in bitbox02-rustby Marko Bencun · 46514177 · Oct 30, 2025 · 6 filesMessage 73 · AdequateInformational 18Details
Commit message · Marko Bencun

rust/keystore: wrap unlock_bip39() and copy_bip39_seed() in bitbox02-rust

Original is renamed so the compiler can error if we missed one.

By moving all keystore calls to bitbox02_rust::keystore, we can more
easily replace the function bodies with native Rust
implementations (without wrapping C).

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

This commit is a routine internal code reorganization in the BitBox02 firmware. It moves two existing keystore functions—used to unlock and copy the BIP39 seed—into a higher-level Rust wrapper module, and renames the original low-level functions with an underscore prefix so the compiler flags any remaining direct callers. The change does not alter the cryptographic behavior, add new user-facing features, or fix a known security bug. It is preparation for a future native Rust implementation.

Security candidatefactorysetup: update comment about auto_enter/upside_downby Marko Bencun · 2ee1f2e5 · Oct 29, 2025 · 1 fileMessage 73 · AdequateInformational 15Details
Commit message · Marko Bencun

factorysetup: update comment about auto_enter/upside_down

The old comment was from a time where jlink was already locked when we
flashed this image, so it was required to be able to get into the
bootloader again. Now this is not the case anymore, but we still need
these two flags to be set properly like this regardless.

73/100 · AdequateMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context
Why it was queued
update trust
AI analysis · Informational 15/100

This commit only rewrites comments in the factory setup code to explain why two bootloader flags are set the way they are. No code behavior is changed, so it has no security impact on its own.

Security candidateu2f: Do not turn off BLE when U2F is used over USBby Niklas Dusenlund · d6f22d77 · Oct 16, 2025 · 4 filesMessage 85 · StrongInformational 21Details
Commit message · Niklas Dusenlund

u2f: Do not turn off BLE when U2F is used over USB

iOS devices support u2f over USB, so no need to disable BLE when only
u2f is used.

iOS devices also send one packet of garbage when waking up, 64 null
bytes, which also is ignored, so that the bitbox still can connect to
the iOS device when it is awakened.

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

This firmware update fixes a bug where using U2F security-key features over USB accidentally turned off Bluetooth Low Energy (BLE). Because iPhones and iPads can use U2F over USB, disabling BLE meant the device could not reconnect wirelessly after the iOS device woke up. The patch also makes the firmware ignore a harmless 64-byte 'wake-up' packet sent by iOS. There is no direct evidence this is an exploitable security vulnerability; it appears to be a connectivity/availability bug.

Security candidatereleases: add v9.24.0by Marko Bencun · cf9db97e · Oct 15, 2025 · 4 filesMessage 38 · OpaqueInformational 15Details
Commit message · Marko Bencun

releases: add v9.24.0

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 adds release artifacts for BitBox02 firmware version 9.24.0. It contains two signed statements (assertions) confirming that building the source code at a specific git tag produces a firmware binary with a known SHA-256 hash. There is no code change, no bug fix, and no security-related content in the commit itself.

Security candidatereleases: add v9.23.3by Marko Bencun · 4ab640b9 · Oct 13, 2025 · 4 filesMessage 38 · OpaqueInformational 15Details
Commit message · Marko Bencun

releases: add v9.23.3

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 adds release artifacts for firmware version 9.23.3 of the BitBox02 hardware wallet. It contains two signed text files (assertions) confirming the expected SHA-256 hash of the compiled firmware binary for both the standard and Bitcoin-only editions. There is no code change and no security issue visible in the diff.

Security candidatemake unlock-animation slower again like it used to beby Marko Bencun · a5811a57 · Oct 13, 2025 · 3 filesMessage 78 · AdequateLow 25Details
Commit message · Marko Bencun

make unlock-animation slower again like it used to be

When we switched from libwally to rust-bip39, bip39 unlock became
twice as fast. It feels too fast now.

The animation speed is based on the frame render rate, which is
not fixed. If the animation goes longer than the actual bip39 unlock
computation, the animation afterwards is significantly faster as there
is less work performed per mainloop iteration. In absence of fixed
render frame rates, we just perform the bip39 unlock twice to maintain
the same frame rate. Conincidentally, this results in an unlock speed
which is basically the same as before with libwally, and we get a
security check for free (repeat and double check the bip39 seed).

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 · Low 25/100

This commit deliberately runs the wallet-unlock calculation twice instead of once, purely to keep the on-screen unlock animation from finishing too quickly after a performance improvement. The second run is used as a consistency check: if the two results don't match, the device reports a memory error. The change is framed as a user-experience fix that happens to add a safety double-check, not as a response to a known security bug.

Security candidaterust/keystore: make bip39 unlocking asyncby Marko Bencun · 1bd474ef · Oct 10, 2025 · 130 filesMessage 80 · StrongInformational 18Details
Commit message · Marko Bencun

rust/keystore: make bip39 unlocking async

This uses `to_seed_normalized_async(...).await` over
`to_seed_normalized(...)` in bip39 unlocking, propagating the
async/await keywords up the stack.

This commit by itself is not functional yet, as the unlock animation
is still timer-interrupt based, which leads to chaos. The next commit
converts the animation into an async task of its own, not depending on
interrupts.

The bip39 unlock loop is made to yield to the executor in each of the
2048 PBKDF2 stretch rounds. In the simulator however, we don't yield
and finish the computation in a blocking fashion like before, due to a
limitation of the simulator: it does not busy-loop the
mainloop (otherwise CPU would be at 100%), but only when there is an
incoming USB packet, so yielding in BIP39 would make unlocking in the
simulator *very* slow. Running the mainloop quicker in the simulator
does not work well: either CPU load is too high, or unlock is too slow.

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

This commit is a large internal refactoring of the BitBox02 firmware's BIP39 wallet-unlocking code. It converts the slow PBKDF2 key-stretching loop from a blocking (synchronous) operation into an asynchronous one, so the device can briefly pause each round to handle other tasks such as USB messages and screen animations. The commit also vendors the futures-core, futures-lite, and pin-project-lite Rust crates so the firmware can use async/await. The change is explicitly described by the authors as not yet fully functional on its own; a follow-up commit is needed to make the unlock animation work with the new async model. There is no direct evidence in the commit that this fixes or introduces a security vulnerability; it is primarily an architectural/performance change.

Security candidatevendor: add rust-bip39 depby Marko Bencun · dc6934fb · Oct 10, 2025 · 7 filesMessage 80 · StrongInformational 17Details
Commit message · Marko Bencun

vendor: add rust-bip39 dep

We use our fork that has two custom patches:
- fix bitcoin_hashes transitive dep version to avoid duplicates
- add async version of the function to derive a bip39 seed

This will be used to convert our BIP39 unlock to be an async
operation, not blocking the mainloop.

80/100 · StrongMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context✓ Explains rationale or failure mode
Why it was queued
secret or key materialcryptography-sensitive path
AI analysis · Informational 17/100

This commit updates the BitBox02 firmware's vendored copy of a Rust library (rust-bip39) used to turn a recovery phrase into a cryptographic seed. The main change is adding an async (cooperative multitasking) version of the seed-derivation function so the device can briefly pause between heavy PBKDF2 rounds instead of blocking the main loop. It also moves the dependency from a personal fork to the BitBoxSwiss organization fork and adjusts a transitive dependency version. There is no direct security fix or vulnerability patch visible in this commit; it is a dependency/vendor refresh and async API addition.

Security candidatekeystore: fewer securechip calls when checking passwordby Marko Bencun · a4d8f413 · Oct 9, 2025 · 3 filesMessage 78 · AdequateLow 25Details
Commit message · Marko Bencun

keystore: fewer securechip calls when checking password

The sanity check to see if the seed has changed does not need a
securechip operation, it can use the retained seed hash instead, same
as `unlock_bip39()`. This reduces the number of securechip operations
needed to do a password check, which reduces the risk of running into
the Optiga throttling security mechanism.

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 · Low 25/100

This commit is a hardening improvement, not a fix for an active vulnerability. It reduces how often the BitBox02 hardware wallet talks to its secure chip (the Optiga) when checking a password. Previously, an extra secure-chip call was made to fetch and compare the seed; now the device compares a locally retained hash instead. This lowers the chance of hitting the secure chip's throttling/lockout counter during normal use, which could otherwise make the device temporarily unusable or even require reset. The change does not introduce a known exploit path.

Security candidatejlink-scripts: reset before loadby Niklas Dusenlund · eb00f569 · Oct 7, 2025 · 2 filesMessage 68 · AdequateInformational 15Details
Commit message · Niklas Dusenlund

jlink-scripts: reset before load

When using the watchdog it became clear that one must reset the CPU
before loading a new FW. It behaved very strange with the old order of
things.

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

This commit changes the order of operations in two developer-only GDB scripts used with J-Link debuggers. Previously the scripts loaded new firmware onto the device and then reset the CPU; now they reset the CPU first and then load the firmware. The change is described as a reliability fix for odd behavior seen when the device's watchdog timer is enabled. It only affects how engineers flash firmware during development/debugging and does not change any firmware code, cryptography, or user-facing behavior.

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.

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.

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.

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.

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.

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.

Security candidateapi: add BTCXpubsRequest to fetch multiple xpubs at onceby Marko Bencun · 0334a516 · Sep 10, 2025 · 14 filesMessage 90 · StrongLow 30Details
Commit message · Marko Bencun

api: add BTCXpubsRequest to fetch multiple xpubs at once

To reduce the number of secure chip operations needed, we introduce a
new API call to fetch multiple xpubs at once. This only requires two
operations in total, instead of two per xpub.

We want to reduce the number of secure chip operations to avoid
running into Optiga's throttling security measure.

90/100 · StrongMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context✓ Explains rationale or failure mode✓ Names security-relevant behavior explicitly
Why it was queued
cryptography-sensitive path
AI analysis · Low 30/100

This commit adds a new device API that lets a host computer request up to 20 Bitcoin extended public keys (xpubs) in a single call, instead of making one call per key. The goal is to reduce how often the device talks to its secure chip, avoiding a throttling safeguard. The change itself is a feature addition, not a fix for a known vulnerability, and the code applies existing keypath validation and a double-check against bitflips.

Security candidatekeystore: use bitcoin_hashes for hmacby Marko Bencun · 5c0907f9 · Sep 9, 2025 · 1 fileMessage 68 · AdequateInformational 18Details
Commit message · Marko Bencun

keystore: use bitcoin_hashes for hmac

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

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

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