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.
Message quality measures whether a commit identifies its scope, purpose, rationale, testing, and supporting references. It does not change the security-severity score.
58/100 average clarity
68Strong · 80–100
321Adequate · 60–79
302Thin · 40–59
88Opaque · 0–39
26security candidates with opaque commit messaging
This commit adds a new 'session reset' command to the BitBox02 hardware wallet's USB protocol. It lets the host computer cleanly reset the device connection if a previous operation was interrupted, instead of leaving the device stuck mid-t…
New USB control command added to host-wallet protocolReset path cancels async task, resets Noise state, unlocks USB processing, and clears output queueU2F UI ownership check prevents reset from interrupting an active U2F workflow
This is a routine Python code refactor. It moves an existing 'reset session' command from one internal class to another and adds a version check so older firmware simply skips it. There is no security bug being fixed here; it is purely org…
This commit fixes a bug in the BitBox02 hardware wallet where unplugging the USB cable at the wrong moment could leave a half-finished operation running. If the device stayed powered and a new host reconnected, the new host's first message…
Fixes cross-session state confusion on USB reconnectAdds explicit session reset command to cancel stale async workflowsResets Noise cryptographic session to prevent old-key encrypted responses
This commit adds a new recovery-word entry screen for the upcoming BitBox03 hardware wallet. It is a large feature patch: it introduces a dedicated BIP39 wordlist keyboard, a new recovery-words review screen, and changes how the device han…
New UI workflow distinguishes 'back' from 'cancel' during seed restoration, reducing accidental aborts.Cancel actions still require an explicit confirmation prompt before the restore is abandoned.Wordlist keyboard disables keys that cannot lead to a valid BIP39 word, preventing invalid-word compositions at the widget level.
This commit improves the BitBox02 hardware wallet's Ethereum token-approval screen. When a user signs an ERC20 token transfer, the device now also shows the token's smart-contract address if the token symbol is ambiguous (the same ticker, …
UI hardening: adds contract-address confirmation for ERC20 tokens with ambiguous or unknown symbolsRegistry validation: rejects payment requests for tokens not present in the firmware's ERC20 registryBuild-time ambiguity detection: generates a sorted list of units shared by multiple contracts
This commit relaxes a version check in the BitBox02 bootloader upgrade code. Previously, the firmware installer required that a stage0 bootloader descriptor's version exactly matched the currently expected image version. Now it accepts des…
Strict version equality check removed from bootloader descriptor parsingChange located in bootloader upgrade / firmware installer verification pathNo bounds, length, or pointer validation changes observed
This commit hardens the BitBox02 firmware so it stops trusting that incoming text strings are valid UTF-8 or plain ASCII. It replaces risky C string copies with length-checked, UTF-8-aware helpers, rejects non-ASCII characters at UI bounda…
Replaced snprintf-based string copies with length-bounded UTF-8-aware copiesAdded explicit length parameter to memory_set_device_name and reject embedded/invalid nullsAdded printable-ASCII enforcement at Rust UI boundary before C rendering
This commit fixes a coding guideline violation in the BitBox02 factory setup code. A 32-byte buffer that receives output from a Rust function was not initialized to zeroes before use. The accompanying documentation now explicitly requires …
Uninitialized stack buffer used as output buffer for Rust/C FFI callDefensive zero-initialization added to prevent use of stale stack data on error or partial write pathsProject coding guidelines updated to mandate zero-initialization for rust_util_bytes_mut buffers
This commit fixes a display behavior issue during startup of the BitBox02 hardware wallet. Previously, when the device turned on, the screen's reset pin was left in a state that could allow leftover images or text from an earlier session t…
Information disclosure via residual display content during bootOLED reset pin sequencing hardeningDefense against stale/misleading UI state before verified firmware initializes display
This commit trims the BitBox02 factory-setup firmware image by switching stored root attestation public keys from 65-byte uncompressed to 33-byte compressed secp256k1 keys, and by using a smaller static secp256k1 verification context inste…
Change in trusted public-key table format and derivation logicSwitch to static/no-precomp secp256k1 verification contextAddition of secp256k1 self-test at boot
This commit adds extra safety checks in the BitBox02 Python library for ECDSA signatures used in Bitcoin and Ethereum signing. It now validates that signatures have the correct length, use valid numbers, and use the safer low-S form. It al…
Defensive validation added for ECDSA signature format and low-S encodingRecovery ID range validation added for recoverable signaturesAnti-Klepto verification now rejects malformed/malleable signatures before nonce verification
This commit tweaks how the BitBox02 hardware wallet displays a payment-request memo on screen. It changes the label from 'Memo from\n\nMerchant' to 'Memo from: Merchant' and makes the screen scrollable so long merchant names don't get cut …
No security-relevant signal in commit message or diffUI/UX change only: text formatting and scrollabilityNo memory-safety, cryptographic, or authorization changes observed
This commit is a hardening and size-optimization change for the BitBox02 factory-setup firmware. It stores the 110 built-in root attestation public keys in compressed (33-byte) form instead of uncompressed (65-byte) form, and marks the tab…
Data table moved from writable RAM to read-only flash (const)Public-key table size reduced from 65 to 33 bytes per keyNew Rust helper normalizes compressed/uncompressed keys before hashing
This commit swaps one internal cryptography library for another when computing HMAC-SHA256 in the factory-setup code. The goal is to reduce firmware size by reusing an existing SHA-256 implementation, not to fix a security bug. New test ve…
Cryptographic implementation change in HMAC-SHA256 helperUse of `.unwrap()` on `new_from_slice`, which can panic if key length is unsupported; for HMAC-SHA256 the RustCrypto `new_from_slice` accepts any key length, so this is effectively safe but still a panic pathNo removal of existing call sites; normal firmware still uses `bitcoin_hashes` for other callers
This commit changes how the BitBox02 factory-setup program checks digital signatures. It switches from a dynamically created crypto context to a built-in, read-only verification context, which makes the factory-setup firmware about 35 KB s…
Cryptographic context change in verification pathRemoval of dynamic secp256k1 context creation in factory setupExplicit addition of secp256k1_selftest() to compensate for skipped implicit self-test
This commit is a performance optimization in the BitBox02 factory setup process. It changes how the device picks which trusted root public key to use when verifying an attestation certificate. Previously, the device tried verifying the sig…
No removal of cryptographic verification: rust_secp256k1_verify is still performed after key selection.No change to accepted inputs: any certificate accepted before is still accepted, and any rejected before is still rejected.Identifier comparison uses MEMEQ over the full 32-byte SHA-256 digest, so collision resistance is standard.
This commit is a large feature merge that adds initial support for a new hardware variant, the BitBox03 (STM32U5-based development kit). It introduces new bootloader and firmware binaries, board support crates, vendored Rust dependencies (…
This commit adds a progress bar that appears while the BitBox02 is loading large Ethereum transaction data from a connected computer. It is a user-experience improvement, not a security fix. The code only changes how progress is displayed …
This commit adds a configuration file for OpenOCD, a debugging tool used during hardware development and testing. It tells the debugger how to connect to an STM32U5 test board using a J-Link adapter. There is no change to firmware code, no…
This commit only adds explanatory comments to Python type-stub files describing what happens when an optional anti-klepto host nonce commitment is left out. It does not change any firmware logic, cryptographic code, or default behavior. Th…
Documentation-only change in generated Python stubsMentions anti-klepto / S2C nonce commitment fallback behaviorNo logic, default, or cryptographic implementation change
Expand any commit for its author, full message, clarity score, changed files, triage signals, analysis, and source link.
Security candidateAssert firmware-btc-v9.23.3by Patrick Steiger · 91bf6418 · Nov 3, 2025 · 2 filesMessage 45 · ThinInformational 15Details
Commit message · Patrick Steiger
Assert firmware-btc-v9.23.3
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 a PGP public key and a signature file for a firmware release. It is a routine release attestation step, not a code change, and contains no security fix or vulnerability.
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.
✓ 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.
✓ 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.
✓ 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.
✓ 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.
✓ 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.
✓ 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.
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.
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.