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 queue354AI analyses
25commits · 30 days
45commits · 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 Bencun390117196258
benma's agent892856162
Niklas Dusenlund1112965059
cedwies1257063
Tomas Vrba947074
Cedric Wiese1239049
Jad817062
thisconnect211072
benma211074
Yasser Aziza111070
Niklas111035
Patrick Steiger111045
Analysis record

Published AI watches

Last scanned 35 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.

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

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

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

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

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

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

rust: add bip39 dep and vendor it

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

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

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

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

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

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

Lower-priorityui: be more explicit about number of words displayedby Marko Bencun · 4d694f47 · Aug 26, 2025 · 2 filesMessage 73 · AdequateTriage 0Details
Commit message · Marko Bencun

ui: be more explicit about number of words displayed

When displaying a mnemonic, confirm the number of words that will be
shown. This may help users that accidentally have a typo in the number
of words chosen and then confuse the word-quizz that follows for
additional words.

73/100 · AdequateMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context
Lower-priorityui: change title to include number of wordsby Marko Bencun · 7d98baf0 · Aug 26, 2025 · 2 filesMessage 68 · AdequateTriage 0Details
Commit message · Marko Bencun

ui: change title to include number of words

`1 of 24`, `2 of 24`, ... instead of `1st word`, `2nd word`, ...

This is to be more explicit about the number of words being restored.

68/100 · AdequateMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context
Lower-priorityci: Post a shortlog with the artifactby Niklas Dusenlund · f260c8e4 · Aug 25, 2025 · 1 fileMessage 57 · ThinTriage 0Details
Commit message · Niklas Dusenlund

ci: Post a shortlog with the artifact

57/100 · ThinMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Uses a recognizable type or scope! No meaningful explanatory body
Why it was queued
documentation-only discount
AI review queuedcmake: Remove unused variableby Niklas Dusenlund · 5a841344 · Aug 22, 2025 · 1 fileMessage 35 · OpaqueInformational 15Details
Commit message · Niklas Dusenlund

cmake: Remove unused variable

35/100 · OpaqueMessage clarity
✓ Descriptive subject! No meaningful explanatory body
Why it was queued
documentation-only discountsecond-pass: opaque commit message
AI analysis · Informational 15/100

This commit removes an unused CMake variable and the code that built it. It is a routine cleanup with no apparent security relevance.

AI review queuedda14531: avoid swd in unit testsby Niklas Dusenlund · 8146af88 · Aug 22, 2025 · 1 fileMessage 55 · ThinInformational 17Details
Commit message · Niklas Dusenlund

da14531: avoid swd in unit tests

55/100 · ThinMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Mentions testing or verification! No meaningful explanatory body
Why it was queued
parser or protocol pathsecond-pass: security-sensitive path
AI analysis · Informational 17/100

This commit adjusts build conditions so that a low-level hardware reset routine for the Bluetooth chip is skipped during automated unit-test builds. It is a build/test hygiene change rather than a fix for an exploitable security flaw in production firmware. There is no direct evidence that this change was made in response to a security incident or vulnerability report.

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

screen: Abstract out oled functions

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

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

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

Lower-prioritygestures: constify const valueby Niklas Dusenlund · 0871da0f · Aug 21, 2025 · 9 filesMessage 50 · ThinTriage 0Details
Commit message · Niklas Dusenlund

gestures: constify const value

In rust later I prefer to use const instead of mut pointers where possible

50/100 · ThinMessage clarity
✓ Descriptive subject✓ Provides an explanatory body
AI review queuedugui.c: latin1 > utf8by Niklas Dusenlund · 22a95bb7 · Aug 21, 2025 · 1 fileMessage 28 · OpaqueInformational 15Details
Commit message · Niklas Dusenlund

ugui.c: latin1 > utf8

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

This commit only fixes garbled comments in the source code. The actual code logic—mapping Latin-1 byte values to other byte values for display—remains completely unchanged. It is a cosmetic/documentation cleanup with no security relevance.

Lower-prioritysimulator: exclude from target `all`by Niklas Dusenlund · 09039140 · Aug 21, 2025 · 1 fileMessage 70 · AdequateTriage 0Details
Commit message · Niklas Dusenlund

simulator: exclude from target `all`

`make unit-test` builds `all` and shouldn't build simulator.

70/100 · AdequateMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Provides an explanatory body✓ Mentions testing or verification
Why it was queued
documentation-only discount
Lower-prioritybuild: unify noasan build directoryby Niklas Dusenlund · 83687bf9 · Aug 21, 2025 · 1 fileMessage 57 · ThinTriage 0Details
Commit message · Niklas Dusenlund

build: unify noasan build directory

57/100 · ThinMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Uses a recognizable type or scope! No meaningful explanatory body
Security candidaterust/bitbox02/keystore: remove Bip39Wordlistby Marko Bencun · 2077f3d6 · Aug 20, 2025 · 3 filesMessage 60 · AdequateInformational 15Details
Commit message · Marko Bencun

rust/bitbox02/keystore: remove Bip39Wordlist

After the previous refactor, this became a thin wrapper, and is not
even wrapping any C function anymore.

60/100 · AdequateMessage clarity
✓ 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 routine code cleanup. It removes a thin Rust wrapper type called Bip39Wordlist and replaces it with direct use of a plain list of word indices. The behavior of the BIP39 wordlist used for entering recovery words on the device stays the same; no security vulnerability is introduced or fixed.

Security candidateui/trinary_input_string: merge autocomplete to optimize speedby Marko Bencun · a3a602bd · Aug 20, 2025 · 1 fileMessage 73 · AdequateInformational 12Details
Commit message · Marko Bencun

ui/trinary_input_string: merge autocomplete to optimize speed

_maybe_autocomplete is folded into _set_alphabet, so we avoid looping
over all bip39 words yet another time, making the keyboard more speedy.

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

This commit is a routine code cleanup in the on-screen keyboard used to type BIP39 wallet recovery words. It merges two functions that both scanned the BIP39 wordlist into one loop, aiming to make typing feel faster. There is no indication in the commit or supplied references that this fixes a security bug.

Security candidateui/trinary_input_string: merge two funcs to optimize speedby Marko Bencun · 966f5415 · Aug 20, 2025 · 1 fileMessage 73 · AdequateInformational 15Details
Commit message · Marko Bencun

ui/trinary_input_string: merge two funcs to optimize speed

_set_can_confirm can be folded into _set_alphabet, so we avoid looping
over all bip39 words a second time, making the keyboard more speedy.

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

This is a harmless code cleanup in the BitBox02 hardware wallet's on-screen keyboard. The developer merged two functions that did similar work into one, so the device no longer loops through the BIP39 word list twice when typing a recovery word. The visible behavior is unchanged; only performance improved.

Security candidateui/trinary_input_string: directly fetch bip39 wordsby Marko Bencun · e6b29798 · Aug 20, 2025 · 5 filesMessage 73 · AdequateInformational 15Details
Commit message · Marko Bencun

ui/trinary_input_string: directly fetch bip39 words

Previously the component was passed an array of string pointers, which
worked well with libwally's static BIP39 word list.

When we want to move to a Rust bip39 wordlist, we can't directly pass
Rust word string pointers (not null terminated).

This commit adapts the component to call a function to get a BIP39
word by index, which can be replaced with a Rust implementation later.

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

This is a routine internal refactoring of how the on-screen keyboard looks up BIP39 seed words. It changes the code from carrying around actual word strings to carrying around word numbers and asking a helper function for the word when needed. There is no security bug being fixed here and no new attack path introduced by the change itself.

AI review queuedprost: improve error reportingby Niklas Dusenlund · f7d565fa · Aug 20, 2025 · 1 fileMessage 35 · OpaqueInformational 15Details
Commit message · Niklas Dusenlund

prost: improve error reporting

35/100 · OpaqueMessage clarity
✓ Descriptive subject! No meaningful explanatory body
Why it was queued
second-pass: opaque commit message
AI analysis · Informational 15/100

This commit changes a build-time helper tool so that, instead of crashing with a generic panic when protobuf compilation fails, it prints the actual error message and exits with a clean error code. It is a developer-experience improvement with no runtime security effect on the BitBox02 device firmware.

Lower-prioritybtc/xpubcache: typo in commentby Marko Bencun · 48fa4666 · Aug 19, 2025 · 1 fileMessage 45 · ThinTriage 0Details
Commit message · Marko Bencun

btc/xpubcache: typo in comment

45/100 · ThinMessage clarity
✓ Descriptive subject✓ Names a concrete action or component! No meaningful explanatory body
Security candidatexpubcache: allow choosing if xpub computation should be repeatedby Marko Bencun · 73836b67 · Aug 19, 2025 · 11 filesMessage 78 · AdequateLow 29Details
Commit message · Marko Bencun

xpubcache: allow choosing if xpub computation should be repeated

End-goal: reduce the number of secure chip ops when signing a BTC
transaction, to reduce the chance of going over the Optiga chip's
"rate limit", which induces throttling.

By default keystore::get_xpub computed the xpub twice, to mitigate
potential bitflips, which could be bad when delivering the wrong
xpub (or derivatives) to the host.

When signing a transaction however, one does not need the extra
protection - if there is a bit flip, the resulting signature will be
invalid.

This commit reduces the number of secure chip ops needed when the
bitflip mitigation is not required.

The existing method `get_xpub` was renamed so the compiler can tell us
all the instances where we need to decide between one or the other.

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
signing boundarycryptography-sensitive pathsigning or wallet path
AI analysis · Low 29/100

This commit is a performance and reliability optimization, not a typical security bug fix. It lets the BitBox02 firmware choose whether to compute an extended public key (xpub) once or twice. Computing twice helps catch rare hardware bit-flip errors when sharing xpubs with a computer. Computing once reduces workload on the secure chip during Bitcoin transaction signing, lowering the risk of hitting the chip's rate limit and causing throttling. The change is intentional and the security trade-off is documented: during signing, a bit flip would just produce an invalid signature, not leak or lose funds.

Lower-priorityCI: build tags, publish elf/map, print sha256by Niklas Dusenlund · 98247ce5 · Aug 12, 2025 · 3 filesMessage 57 · ThinTriage 0Details
Commit message · Niklas Dusenlund

CI: build tags, publish elf/map, print sha256

57/100 · ThinMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Uses a recognizable type or scope! No meaningful explanatory body
Security candidatekeystore: pass private key to nonce_commit() and sign()by Marko Bencun · cb3ddcee · Aug 7, 2025 · 9 filesMessage 78 · AdequateInformational 18Details
Commit message · Marko Bencun

keystore: pass private key to nonce_commit() and sign()

End-goal: reduce the number of secure chip ops when signing a BTC
transaction, to reduce the chance of going over the Optiga chip's
"rate limit", which induces throttling.

With antiklepto, we derived the private key twice for each input that
is signed: once to commit to the nonce, and after that to sign.

This commit decouples the nonce commit and sign functions from the
underlying keystore, and allows reusing a private key instead of
re-deriving it, which requires secure chip operations.

This halves the number of secure chip ops needed per input when
signing a BTC transaction.

We do not reuse the privkey for the other instances of
antiklepto (signing a msg, signing an ETH tx), as there it's one
commit/sign pair only and unlikely to cause secure chip throttling.

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 materialsigning boundarysigning or wallet path
AI analysis · Informational 18/100

This commit is a performance optimization for the BitBox02 hardware wallet. It changes how Bitcoin transaction signing uses the secure chip, so the device only derives a private key once per transaction input instead of twice. This reduces the chance of hitting the secure chip's rate limit and avoids throttling. The change does not appear to introduce a security flaw; it is a refactoring to reuse an already-derived key for two related signing steps.