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 queue336AI analyses
25commits · 30 days
47commits · 60 days
312commits · 180 days
647commits · 365 days
Backfill bands
Aug 5 → Feb 6335 seen28 candidatesComplete
Feb 6 → Jun 6265 seen19 candidatesComplete
Jun 6 → Jul 619 seen5 candidatesComplete
Jul 6 → Aug 526 seen3 candidatesComplete
Commit communication

Does the history explain itself?

Message quality measures whether a commit identifies its scope, purpose, rationale, testing, and supporting references. It does not change the security-severity score.

59/100 average clarity
65Strong · 80–100
281Adequate · 60–79
230Thin · 40–59
71Opaque · 0–39
23security candidates with opaque commit messaging
Read the scoring rubric →
Developer activity

Who is changing the project?

Public Git author strings; identities are not independently verified.

DeveloperCommitsCandidatesAnalyzedHigh riskMessage avg.
Marko Bencun390117194258
benma's agent892853162
Niklas Dusenlund1112955059
cedwies1257063
Tomas Vrba947074
Cedric Wiese1239049
Jad814062
thisconnect211072
benma211074
Niklas111035
Yasser Aziza111070
Patrick Steiger111045
Analysis record

Published AI watches

Last scanned 31 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
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
Repository ledger

Explore captured commits

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

Lower-priorityoptiga: move kdf_mac and kdf_internalby Marko Bencun · 498585c7 · Jan 6, 2026 · 1 fileMessage 60 · AdequateTriage 0Details
Commit message · Marko Bencun

optiga: move kdf_mac and kdf_internal

Will be used in init_new_password, so needs to be above it.

60/100 · AdequateMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Provides an explanatory body
Lower-priorityoptiga: add _kdf_hmac helper functionby Marko Bencun · 23149395 · Jan 6, 2026 · 1 fileMessage 45 · ThinTriage 0Details
Commit message · Marko Bencun

optiga: add _kdf_hmac helper function

45/100 · ThinMessage clarity
✓ Descriptive subject✓ Names a concrete action or component! No meaningful explanatory body
Lower-prioritymemory: add optiga_config_versionby Marko Bencun · 3e2063b2 · Jan 6, 2026 · 6 filesMessage 50 · ThinTriage 0Details
Commit message · Marko Bencun

memory: add optiga_config_version

So we can remember if we added and checked the new objects.

50/100 · ThinMessage clarity
✓ Descriptive subject✓ Provides an explanatory body
Lower-priorityoptiga: add new objectsby Marko Bencun · a040079b · Jan 6, 2026 · 2 filesMessage 51 · ThinTriage 0Details
Commit message · Marko Bencun

optiga: add new objects

Added for redundancy. They are configured on boot. The next commit
will add a metadata check and a memory flag to remember the update so
it is not repeated once done.

51/100 · ThinMessage clarity
✓ Subject identifies a change✓ Provides detailed explanatory context
Lower-priorityoptiga: rename FINAL_LCSO_STATE -> FINAL_LCSO_STATE_V0by Marko Bencun · c3148a51 · Jan 6, 2026 · 1 fileMessage 63 · AdequateTriage 0Details
Commit message · Marko Bencun

optiga: rename FINAL_LCSO_STATE -> FINAL_LCSO_STATE_V0

To indicate it is used only in the V0 config. V1 config metadatas will have
their own FINAL_LCSO_STATE define, as they can't use the existing one,
as the V0 metadatas are already finalzed/operational.

63/100 · AdequateMessage clarity
✓ Specific, descriptive subject✓ Provides detailed explanatory context
AI review queuedmemory: add password stretch algo memory flagby Marko Bencun · 16e7633d · Jan 6, 2026 · 15 filesMessage 45 · ThinLow 28Details
Commit message · Marko Bencun

memory: add password stretch algo memory flag

45/100 · ThinMessage clarity
✓ Descriptive subject✓ Names a concrete action or component! No meaningful explanatory body
Why it was queued
second-pass: broader security terminology
AI analysis · Low 28/100

This commit adds a new memory flag that records which password-stretching algorithm was used to protect the wallet seed. It does not change the actual stretching math yet; it only stores the choice so future firmware can support a newer algorithm while still recognizing older backups. There is no immediate security fix, but it is infrastructure for a future security improvement.

Security candidateMove "get_attestation_*" functions to HALby cedwies · 45355e61 · Jan 3, 2026 · 2 filesMessage 55 · ThinInformational 18Details
Commit message · cedwies

Move "get_attestation_*" functions to HAL

attestation.rs was expanded with 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
update trustboot or update path
AI analysis · Informational 18/100

This commit is a code cleanup and test-improvement change. It moves two device-attestation helper functions from a direct hardware call into a software 'hardware abstraction layer' (HAL) so the code can be tested without the real device. It also adds unit tests that simulate the attestation process. There is no indication this fixes a security bug or introduces a new vulnerability.

Lower-priorityremove testing::UnsafeSyncRefCellby benma's agent · fa4efc82 · Dec 30, 2025 · 2 filesMessage 60 · AdequateTriage 0Details
Commit message · benma's agent

remove testing::UnsafeSyncRefCell

Its only use was in xpubcache.rs, where we can use a regular RefCell.

60/100 · AdequateMessage clarity
✓ Descriptive subject✓ Provides an explanatory body✓ Mentions testing or verification
Lower-prioritybitbox02-rust: compile mnemonic.rs again in testingby Marko Bencun · 11f64525 · Dec 26, 2025 · 2 filesMessage 83 · StrongTriage 0Details
Commit message · Marko Bencun

bitbox02-rust: compile mnemonic.rs again in testing

Since a1c553b20064b9d01985fd352b5b96e761d9ae95, the mnemonic module
was not compiled during testing by accident, as a specific
implementation was compiled in for c-unit-testing.

This means that the unit tests and clippy were not running for mnemonic.rs.

83/100 · StrongMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context✓ Mentions testing or verification
Lower-priorityremove empty bitbox02::keystore moduleby Marko Bencun · 7b506ed5 · Dec 26, 2025 · 3 filesMessage 45 · ThinTriage 0Details
Commit message · Marko Bencun

remove empty bitbox02::keystore module

No need to keep that.

45/100 · ThinMessage clarity
✓ Descriptive subject✓ Names a concrete action or component! No meaningful explanatory body
Lower-priorityhal: add get_mnemonic to UIby Marko Bencun · ad292539 · Dec 26, 2025 · 5 filesMessage 78 · AdequateTriage 0Details
Commit message · Marko Bencun

hal: add get_mnemonic to UI

So unit tests don't have to perform intricate mocks to enter a
mneomnic using enter_string, menu, etc.

Same mnemonic as in mnemonic_c_unit_tests.rs, as it will be used in
the unit tests of api::restore.

78/100 · AdequateMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context✓ Mentions testing or verification
Security candidatelicense: add header to files where it was missingby benma's agent · 3483cf65 · Dec 22, 2025 · 16 filesMessage 45 · ThinInformational 15Details
Commit message · benma's agent

license: add header to files where it was missing

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 only adds Apache-2.0 license header comments to 16 source files that were missing them. It makes no functional changes to the BitBox02 firmware or its Python tools. There is no security impact.

Security candidatelicense: replace Shift Apache headersby benma's agent · 52b9db70 · Dec 22, 2025 · 429 filesMessage 80 · StrongInformational 15Details
Commit message · benma's agent

license: replace Shift Apache headers

Replace the existing Shift Crypto/Shift Devices Apache-2.0 boilerplate header blocks with the standard SPDX License Identifier tag: "SPDX-License-Identifier: Apache-2.0".

This is better than the previous multi-line text header because it is machine-readable, unambiguous, and widely understood by tooling (scanners, compliance automation), while keeping files smaller and reducing header churn.

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 pathboot or update pathauthentication pathparser or protocol path
AI analysis · Informational 15/100

This commit is a bulk license-header cleanup. It replaces long, multi-line copyright and Apache-2.0 license notices at the top of 429 source files with a single, standardized machine-readable tag: 'SPDX-License-Identifier: Apache-2.0'. No program logic, build rules, or file contents other than the header comments were changed. It does not introduce or fix any security vulnerability.

AI review queuedupdate LICENSE yearby benma's agent · 21434125 · Dec 22, 2025 · 2 filesMessage 28 · OpaqueInformational 15Details
Commit message · benma's agent

update LICENSE year

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 updates copyright years in two LICENSE files. It makes no changes to software code, functionality, or security controls. There is no security relevance.

Lower-priorityui/menu: fix clang tidy warningby Marko Bencun · 212fc028 · Dec 22, 2025 · 1 fileMessage 60 · AdequateTriage 0Details
Commit message · Marko Bencun

ui/menu: fix clang tidy warning

bugprone-multi-level-implicit-pointer-conversion

60/100 · AdequateMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Provides an explanatory body
Lower-prioritycomponents/button: disable a lintby Marko Bencun · 34cb2f44 · Dec 22, 2025 · 1 fileMessage 60 · AdequateTriage 0Details
Commit message · Marko Bencun

components/button: disable a lint

Fired while touching the file for unrelated reasons.

60/100 · AdequateMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Provides an explanatory body
Security candidatepy: fix fmt linterby Marko Bencun · b77c25c7 · Dec 22, 2025 · 3 filesMessage 51 · ThinInformational 15Details
Commit message · Marko Bencun

py: fix fmt linter

Before a recent black update, black would, for each file it formatted,
apply the pyproject.toml related to it, e.g. py/pyproject.toml for all
files in py/, and not for files outside of py/. Since the black
update, if formatting files both inside and outside of py/, it would
ignore pyproject.toml, as it's not in the root.

We do a workaround by supplying configuring the linter to use
py/pyproject.toml for all files. Alternative would be to apply black
file-by-file, but that is much slower. Another alternative is to make
split it into two runs, but that was too much trouble. Moving
pyproject.toml from py/ to the root seemed wrong, as the root is not a
Py project.

51/100 · ThinMessage clarity
✓ Subject identifies a change✓ Provides detailed explanatory context
Why it was queued
signing or wallet pathboot or update path
AI analysis · Informational 15/100

This commit is a routine code-style fix. It updates the Python formatter (black) configuration so the linter uses the correct pyproject.toml file, and reformats two Python files to match the new style rules. There are no security changes to the firmware or any sensitive logic.

Lower-priorityworkflow/unlock: fix typo and reformat docstringby Marko Bencun · 58c5181e · Dec 22, 2025 · 1 fileMessage 45 · ThinTriage 0Details
Commit message · Marko Bencun

workflow/unlock: fix typo and reformat docstring

45/100 · ThinMessage clarity
✓ Descriptive subject✓ Names a concrete action or component! No meaningful explanatory body
Lower-priorityworkflows/unlock: show remaning attempts before unlocking, not afterby benma's agent · fb11d812 · Dec 22, 2025 · 4 filesMessage 73 · AdequateTriage 0Details
Commit message · benma's agent

workflows/unlock: show remaning attempts before unlocking, not after

With a special warning and longtouch for the last attempt.

This way, the warning is clearer, as it can't be missed or
forgotten. Another benefit is that it is shown in other workflows
where unlocking is required, e.g. when showing mnemonic, etc.

73/100 · AdequateMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context
Security candidatesecp256k1: fix docstring typoby Marko Bencun · 36397779 · Dec 22, 2025 · 1 fileMessage 63 · AdequateInformational 15Details
Commit message · Marko Bencun

secp256k1: fix docstring typo

keystore locked error used to be the case in the past when this
function took the private key from the keystore, but that changed.

63/100 · AdequateMessage clarity
✓ Descriptive subject✓ Provides detailed explanatory context✓ Names security-relevant behavior explicitly
Why it was queued
secret or key materialcryptography-sensitive path
AI analysis · Informational 15/100

This commit only fixes a typo in a code comment (docstring). It changes the description of when a function can return an error, matching the fact that the function now receives the private key directly rather than fetching it from a locked keystore. No actual code behavior is changed.

Security candidateremove use of EC_PUBLIC_KEY_LENby Marko Bencun · de9d4828 · Dec 22, 2025 · 3 filesMessage 58 · ThinInformational 15Details
Commit message · Marko Bencun

remove use of EC_PUBLIC_KEY_LEN

It was a leftover from the time we used libwally-core. The same
constant is available in bitcoin::secp256k1::constants::PUBLIC_KEY_SIZE.

58/100 · ThinMessage clarity
✓ Descriptive subject✓ Provides detailed explanatory context
Why it was queued
cryptography-sensitive path
AI analysis · Informational 15/100

This commit is a routine code cleanup. It removes a locally defined constant for compressed secp256k1 public key size (33 bytes) and replaces it with an equivalent constant already provided by the upstream Rust bitcoin/secp256k1 library. The numeric value and behavior remain exactly the same.

AI review queuedremove keystore.hby Marko Bencun · 41ee7867 · Dec 22, 2025 · 7 filesMessage 28 · OpaqueInformational 15Details
Commit message · Marko Bencun

remove keystore.h

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 removes an unused header file called keystore.h and updates the code that previously included it. The two constants that were defined in that header (KEYSTORE_U2F_SEED_LENGTH and XPUB_ENCODED_LEN) are no longer referenced through the header. In the U2F code, the seed length is now taken directly from the size of the local seed variable using sizeof(seed), which is functionally equivalent because the seed is a fixed-size array of the same length. There is no security-relevant change here—this is a cleanup refactor.

Security candidatetrinary_input_string: simply bip39 word helper functionby benma's agent · 400289a5 · Dec 22, 2025 · 1 fileMessage 50 · ThinInformational 15Details
Commit message · benma's agent

trinary_input_string: simply bip39 word helper function

50/100 · ThinMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component! No meaningful explanatory body
Why it was queued
secret or key material
AI analysis · Informational 15/100

This is a small internal cleanup in the BitBox02 firmware's on-screen text input component. A helper function that fetches BIP39 seed words was simplified so callers no longer check its return value; the helper itself now aborts on failure. There is no security vulnerability here—just a minor code-style refactor that keeps the same failure behavior.

Security candidateremove keystore.cby benma's agent · a8d387df · Dec 22, 2025 · 5 filesMessage 43 · ThinInformational 12Details
Commit message · benma's agent

remove keystore.c

The two remaning functions are unrelated to keystore, and inlined into
the Rust C wrappers of secp256k1.

43/100 · ThinMessage clarity
✓ Subject identifies a change✓ Provides an explanatory body
Why it was queued
cryptography-sensitive path
AI analysis · Informational 12/100

This commit removes an old C source file called keystore.c and moves two small cryptographic helper functions directly into the Rust part of the project. The functions themselves still do exactly the same secp256k1 signing and nonce-commitment work as before; they are just called from Rust instead of going through a thin C wrapper. There is no indication this fixes or introduces a security bug.

Security candidatekeystore: move keystore_get_bip39_word_stack out of keystore.cby benma's agent · 9fd859e5 · Dec 22, 2025 · 3 filesMessage 50 · ThinInformational 15Details
Commit message · benma's agent

keystore: move keystore_get_bip39_word_stack out of keystore.c

It has nothing to do with the keystore.

50/100 · ThinMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component! No meaningful explanatory body
Why it was queued
secret or key material
AI analysis · Informational 15/100

This commit simply moves a helper function that looks up a BIP39 word by its index from one source file to another. The function's behavior and the callers' logic are unchanged; it is a code cleanup with no security impact.