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.
Lower-priorityInitialize ugui in component testsby Niklas Dusenlund · 83cce2d2 · May 18, 2026 · 1 fileMessage 90 · StrongInformational 14Details
Commit message · Niklas Dusenlund
Initialize ugui in component tests
Set up a minimal ugui instance for UI component tests that create labels. Label sizing now relies on ugui being initialized because ugui null guards are debug assertions instead of release-time early returns.
90/100 · StrongMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context✓ Explains rationale or failure mode✓ Mentions testing or verification
AI analysis · Informational 14/100
This commit fixes a test-only setup problem. The unit tests for on-screen UI components were not initializing the graphics library (ugui) before running. Because label sizing now depends on ugui being set up, the tests could fail or hit debug assertions. The change adds a minimal fake graphics setup so the tests run correctly. It does not change the firmware that runs on the actual device.
Lower-priorityReuse rotated render for logoby Niklas Dusenlund · e3087d04 · May 18, 2026 · 2 filesMessage 68 · AdequateInformational 15Details
Commit message · Niklas Dusenlund
Reuse rotated render for logo
Render the orientation screen's reverse logo state by rotating the existing logo component 180 degrees instead of keeping a second reversed bitmap and component.
68/100 · AdequateMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context
AI analysis · Informational 15/100
This commit is a simple code cleanup in the BitBox02 hardware wallet's user interface. It removes a duplicate, upside-down version of a small 'rotate' icon and instead flips the existing icon when needed. There is no security change.
Lower-priorityUse debug asserts in uguiby Niklas Dusenlund · c63cd971 · May 18, 2026 · 1 fileMessage 68 · AdequateInformational 16Details
Commit message · Niklas Dusenlund
Use debug asserts in ugui
Replace defensive null-check returns in ugui.c with ASSERT() calls. ASSERT is already compiled as a no-op outside DEBUG builds, so release behavior no longer carries the extra null-check branches.
68/100 · AdequateMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context
AI analysis · Informational 16/100
This commit changes a small graphics library inside the BitBox02 hardware wallet so that it uses debug-only safety checks instead of always-on null checks. In normal release builds, the old null checks and the new ASSERT calls both effectively do nothing, so user-facing behavior is unchanged. The main risk is that a developer running a DEBUG build could now trigger a crash if a bug passes a NULL pointer, whereas before the function would silently return. There is no direct evidence this fixes an exploitable security vulnerability.
This commit removes an unused function for drawing transparent characters on the BitBox02 hardware wallet screen. It is a straightforward code cleanup with no security relevance visible in the change.
Replace the text-specific inverted flag with a temporary 180-degree UG rendering transform. Use the component helper to rotate the orientation screen top button while keeping normal text drawing APIs.
Update C and Rust call sites and add coverage for pixel and component rotation.
78/100 · AdequateMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context✓ Mentions testing or verification
Why it was queued
boot or update path
AI analysis · Informational 20/100
This commit is a user-interface cleanup: it removes a special 'draw text upside-down' flag from the graphics library and instead uses a generic 180-degree rotation helper when the screen is flipped. It does not fix a security vulnerability and does not appear to introduce one. The change is mostly about simplifying how text and buttons are rendered on the BitBox02 hardware wallet screen.
Security candidateEnable scope C LTO for firmwareby Marko Bencun · 0b102fb7 · May 17, 2026 · 6 filesMessage 80 · StrongInformational 12Details
Commit message · Marko Bencun
Enable scope C LTO for firmware
Enable scoped GCC LTO for firmware C code to reduce ROM size while preserving section GC and stack protector support. Build firmware C objects plus the optiga and cryptoauthlib static libraries with -flto -ffat-lto-objects, and link only firmware images with -flto, since useful size savings require LTO IR in the linked static libraries.
Switch the ARM toolchain to the LTO-aware archive utilities (arm-none-eabi-gcc-ar, arm-none-eabi-gcc-nm, arm-none-eabi-gcc-ranlib); plain ar/ranlib can archive LTO objects without the plugin and produce invalid tiny images by failing to extract live objects.
Keep bootloaders, factory-setup, ASF4, samd51a-ds, and embedded-swd off the LTO path because startup, interrupt, MMIO, vector-table, linker-script, assembly, callback-table, and section-name interactions are not cheaply auditable for LTO safety. Mark local stack protector symbols as kept/visible so late LTO-generated references to __stack_chk_fail and __stack_chk_guard are retained; no_stack_protector is intentionally not 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
update trustboot or update path
AI analysis · Informational 12/100
This commit changes the build system to enable Link-Time Optimization (LTO), a compiler technique that shrinks the final firmware size. It also adds safeguards to keep the stack protector security feature working under LTO and deliberately excludes sensitive low-level code (bootloader, factory setup, hardware drivers) from LTO to avoid subtle bugs. There is no direct evidence in the commit of a security vulnerability being fixed or introduced.
✓ Descriptive subject! No meaningful explanatory body! Opaque security-relevant change
Why it was queued
boot or update path
AI analysis · Informational 15/100
This commit adds a new factory-setup helper program for the BitBox03 hardware wallet and moves some debug logging code around. It does not change the main wallet firmware's security behavior. There is no indication this fixes or introduces a security vulnerability.
✓ Subject identifies a change! No meaningful explanatory body! Opaque security-relevant change
Why it was queued
boot or update path
AI analysis · Informational 15/100
This commit adds a brand-new, minimal firmware binary for the BitBox03 hardware wallet. It is essentially a development stub: it initializes the board, sets up a debug logger, prints a log message, and then halts. There is no user-facing functionality, no cryptographic code, and no security-sensitive logic introduced in this change. It is a build-system and scaffolding addition, not a security fix or vulnerability.
AI review queuedAdd bitbox03-boot1by Niklas Dusenlund · 473da108 · May 7, 2026 · 11 filesMessage 28 · OpaqueInformational 15Details
Commit message · Niklas Dusenlund
Add bitbox03-boot1
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 adds a new first-stage bootloader component called bitbox03-boot1 for the BitBox03 hardware wallet. It is purely additive: it wires a new Rust binary into the build system, adds a flashing script, and provides a small program that validates a firmware image header and then jumps to the main firmware. Nothing in the commit changes existing security behavior or fixes a known vulnerability.
AI review queuedAdd bitbox03-boot0by Niklas Dusenlund · 524aaa30 · May 7, 2026 · 14 filesMessage 28 · OpaqueInformational 15Details
Commit message · Niklas Dusenlund
Add bitbox03-boot0
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 adds a new first-stage bootloader component called bitbox03-boot0 for an upcoming BitBox03 hardware wallet. It is purely additive development code: it introduces build targets, a linker script, flashing scripts, and a small Rust program that validates and then launches the next-stage bootloader (boot1). There is no indication of a bug fix or security patch, and no disclosed vulnerability.
✓ Descriptive subject! No meaningful explanatory body
Why it was queued
second-pass: opaque commit message
AI analysis · Informational 15/100
This commit simply deletes an unused third-party Rust crate (cmake) from the project's vendored dependencies. It is a cleanup change with no functional code modifications and no apparent security relevance.
Build LVGL directly with cc from an explicit source list and drop the cmake crate dependency. Use the shared bitbox-lvgl-sys lv_conf.h for the BB03 graphical simulator and remove the simulator-specific duplicate config.
Remove cross compilation support in lvgl-sys for now.
68/100 · AdequateMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context
Why it was queued
second-pass: broader security terminology
AI analysis · Informational 17/100
This commit changes how a graphics library (LVGL) is compiled into the BitBox02 firmware build. It removes the CMake-based build and instead compiles the library's C source files directly using Rust's cc crate. It also merges a separate simulator-specific configuration file into a shared one. The visible configuration changes are: color depth increased from 16 to 32 bits, refresh period shortened from 33 ms to 17 ms, and log level changed from warnings to informational messages. These are build-system and configuration cleanups; there is no direct evidence in the commit of a security vulnerability being fixed.
Lower-prioritytooling: Move rust tools out of dockerfileby Niklas Dusenlund · b47b3145 · May 4, 2026 · 3 filesMessage 60 · AdequateInformational 15Details
Commit message · Niklas Dusenlund
tooling: Move rust tools out of dockerfile
It is easier to install the right tools if you aren't using docker.
60/100 · AdequateMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Provides an explanatory body
AI analysis · Informational 15/100
This commit is a routine developer tooling change. It moves the installation of Rust compiler components (such as code formatting, linting, and target platform support) out of the Docker build script and into a standard Rust toolchain configuration file. There is no indication this change fixes or introduces a security issue.
Lower-prioritybuild: run vendoring script from src/rustby Niklas Dusenlund · bd3d0f14 · May 4, 2026 · 2 filesMessage 84 · StrongInformational 15Details
Commit message · Niklas Dusenlund
build: run vendoring script from src/rust
Run rust vendorings script from src/rust so that the correct rust toolchain is picked up.
84/100 · StrongMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Uses a recognizable type or scope✓ Provides an explanatory body✓ Explains rationale or failure mode
AI analysis · Informational 15/100
This commit is a build-script maintenance change. It changes how a Rust dependency-vendoring script is invoked so that the correct Rust compiler version is automatically selected. There is no user-facing feature change and no indication of a security problem being fixed.
✓ Descriptive subject✓ Names a concrete action or component! No meaningful explanatory body
Why it was queued
signing or wallet pathsecond-pass: security-sensitive path
AI analysis · Informational 18/100
This commit is a small optimization in the BitBox02 hardware wallet firmware. It changes how many times the device derives a cryptocurrency address when validating a payment request. Previously, addresses were derived twice (a safety check called 'compute twice'); now they are derived once during payment-request validation, while other operations still derive them twice. This is a performance/counter fix, not a security vulnerability fix. There is no evidence in the commit that it addresses an exploitable bug.
✓ Descriptive subject✓ Names a concrete action or component✓ Uses a recognizable type or scope✓ Mentions testing or verification! No meaningful explanatory body
AI analysis · Informational 14/100
This commit only adds test assertions to check that a secure chip event counter is incremented correctly during payment request validation. It does not change any production code, so it cannot introduce a security vulnerability or fix one directly.
✓ Descriptive subject✓ Names a concrete action or component! No meaningful explanatory body
Why it was queued
signing or wallet pathsecond-pass: security-sensitive path
AI analysis · Informational 15/100
This commit is a straightforward internal code cleanup. It merges two similar functions for computing extended public keys (xpubs) into one function that accepts a mode flag, and moves the mode definition to a more central location. There is no change to security behavior: operations that previously computed xpubs twice still do so, and operations that computed them once still do so. It is a refactoring, not a security fix.
ListBackups returns one protobuf containing all SD card backups. With many backups, the response spans many 64-byte HWW/U2FHID reports. USB sends those reports directly over HID, but BLE first serial-frames each report for the DA14531 and queues the escaped bytes in the fixed-size UART ByteQueue.
The Rust ByteQueue port kept the panicking single-byte put() API and the BLE poller used it for every framed byte. That removed the previous v9.25 backpressure behavior: da14531_protocol_poll() consumed the pending HWW report before knowing whether the whole framed BLE packet fit in the 2048-byte UART queue. If ListBackups produced data faster than UART drained it, put() eventually hit capacity and panicked with bytequeue overflow. USB does not use this UART queue, which is why the same request worked there.
Add ByteQueue::try_put_slice() plus an extern C wrapper that takes util::Bytes and performs an all-or-nothing enqueue. The BLE HWW path now formats the 64-byte report into a temporary serial frame and only clears hww_data after try_put_slice() succeeds. If the queue is full, it returns without writing any bytes, preserving frame boundaries and leaving the same report pending for the next poll after UART has drained.
Keep the existing panicking put() behavior for the other bytequeue callers so the change stays scoped to the actual backpressure boundary. The separate Rust and extern-wrapper tests cover successful writes and failed overflow attempts being atomic.
95/100 · StrongMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context✓ Explains rationale or failure mode✓ Mentions testing or verification✓ Names security-relevant behavior explicitly
Why it was queued
memory safetyparser or protocol path
AI analysis · Moderate 60/100
This update fixes a crash in the BitBox02 hardware wallet when a user lists many backups over a Bluetooth connection. Previously, the device could run out of temporary buffer space while sending a large response, causing it to panic and stop working. The fix makes the Bluetooth sender check whether the whole next chunk fits before writing it, and if not, wait until space becomes available. USB connections were not affected because they use a different path.
Lower-priorityAGENTS: run make commands seriallyby Marko Bencun · 8730c1c6 · Apr 28, 2026 · 1 fileMessage 72 · AdequateInformational 15Details
Commit message · Marko Bencun
AGENTS: run make commands serially
Otherwise the dev-machine can easily lock up.
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
documentation-only discount
AI analysis · Informational 15/100
This commit only updates developer documentation (AGENTS.md). It adds a warning that running multiple make commands in parallel can lock up a development machine, and instructs developers to run them one at a time. There is no code change and no security relevance.
The Optiga C API keeps raw pointers to the Rust wrapper's static buffers until the asynchronous callback completes. The Rust wrapper has a Detached state for futures that were dropped after launching a command, but the individual wrappers initialized their per-operation static buffers before calling begin_async_op().
That meant a repeated call to the same wrapper could clear or overwrite the exact static storage still owned by the detached C command before begin_async_op() noticed the Detached state and waited for the old callback.
Move begin_async_op().await before every static buffer or length-cell mutation. Detached operations are now reclaimed before any static storage is reused, and live concurrent operations still panic before their buffers can be corrupted.
68/100 · AdequateMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context
Why it was queued
second-pass: broader security terminology
AI analysis · Moderate 69/100
This patch fixes a timing bug in how the BitBox02 hardware wallet talks to its secure chip (Optiga). Previously, the code could overwrite memory buffers that were still being used by an unfinished, dropped secure-chip operation. That could corrupt data or cause the device to behave unpredictably when secure-chip commands were started and then abandoned. The fix simply makes sure the code checks for and reclaims any leftover detached operation before touching the shared buffers.
✓ Descriptive subject✓ Names a concrete action or component! No meaningful explanatory body
AI analysis · Informational 15/100
This commit simply removes a printed warning message during the build process. When a certain environment variable (LV_CONF_PATH) is missing, the build script used to warn the developer; now it silently uses a default configuration file instead. There is no change to security logic, runtime behavior, or how the firmware works.
Lower-priorityclippy: warn for large futuresby Niklas Dusenlund · c9c522f0 · Apr 23, 2026 · 2 filesMessage 76 · AdequateInformational 18Details
Commit message · Niklas Dusenlund
clippy: warn for large futures
Large async state machines keep their captured data alive across await points. That can silently bloat task allocations and stack usage, which is especially risky on memory-constrained embedded targets and makes regressions harder to spot in review.
Add the Clippy lint so oversized futures are flagged early instead of only showing up later as memory pressure or failures.
✓ Descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context✓ Links an issue, advisory, or supporting reference
AI analysis · Informational 18/100
This change adds a Rust code-quality warning (Clippy lint) that flags async functions whose internal state machines get too large. It is a preventive development tool, not a fix for an existing security bug. The commit does not change any runtime firmware behavior or patch a known vulnerability.
Pass `-Zfmt-debug=none` in the firmware Rust build.
According to clippy::no_debug (https://rust-lang.github.io/rust-clippy/master/index.html?search=use_debug):
> It should not be used in user-facing output
This tells rustc not to emit normal `Debug` formatter implementations into the cross-compiled firmware image. The option also makes `{:?}` print nothing, so app-visible error status messages must not rely on derived `Debug`.
Keep the live keystore and backup error status screens explicit by formatting those errors through small match-based helpers instead of `Debug`. This preserves the visible diagnostic strings while still allowing derived Debug formatting to be compiled out of the firmware.
There are still live library `Debug` formatting paths in a no-flag build even when our callers map those errors to `InvalidInput`. Protobuf and Miniscript parsers construct detailed errors internally before the caller discards them, for example `WireType` decode errors and Miniscript `NonTopLevel(format!("{:?}", ...))` errors. `fmt-debug=none` prevents those detailed `Debug` formatters and their generic formatting helpers from being linked.
Savings: 6464 bytes
66/100 · AdequateMessage clarity
✓ Descriptive subject✓ Provides detailed explanatory context✓ Links an issue, advisory, or supporting reference
AI analysis · Low 25/100
This commit strips out Rust's automatic 'Debug' text-formatting code from the hardware wallet firmware to save space. It replaces a few user-facing error messages that previously relied on Debug formatting with small, hand-written formatters so users still see useful text. The change is primarily a size optimization and code-hardening step, not a fix for an active security bug.
AI review queuedEnable blake2 size_optby Marko Bencun · 7c20eb38 · Apr 22, 2026 · 1 fileMessage 61 · AdequateInformational 15Details
Commit message · Marko Bencun
Enable blake2 size_opt
The blake2 crate exposes a size_opt feature that trades aggressive inlining for a smaller implementation. In this firmware build the Blake2b compression path was still one of the largest Rust code contributors, so this is a direct ROM for speed trade that matches the current goal.
Enable size_opt for the existing optional dependency. The algorithm, test vectors, and call sites stay the same; only the crate internal code generation strategy changes.
In the resulting image, the large Blake2b compression routine is split into much smaller outlined helpers instead of one heavily inlined body. That is where the ROM reduction comes from.
Saves 11576 bytes in firmware.bin.
61/100 · AdequateMessage clarity
✓ Subject identifies a change✓ Provides detailed explanatory context✓ Mentions testing or verification
Why it was queued
fuzzing or regression evidencesecond-pass: broader security terminology
AI analysis · Informational 15/100
This commit flips a build-time option in the blake2 Rust library from 'fast and large' to 'smaller and less inlined.' It is a pure code-size optimization that does not change the hashing algorithm, inputs, outputs, or how the firmware calls it. There is no security-relevant change visible in the diff.
Lower-prioritymbedtls: use RAM instead of ROM to shrink sizeby Marko Bencun · 9cee2da4 · Apr 22, 2026 · 1 fileMessage 45 · ThinInformational 15Details
Commit message · Marko Bencun
mbedtls: use RAM instead of ROM to shrink size
Saves 2104 bytes.
45/100 · ThinMessage clarity
✓ Descriptive subject✓ Names a concrete action or component! No meaningful explanatory body
AI analysis · Informational 15/100
This commit changes a build-time configuration option for the mbedTLS cryptography library. It disables AES lookup tables stored in read-only flash memory (ROM) and instead uses tables computed at runtime in regular working memory (RAM). The stated purpose is to reduce the overall firmware size by 2,104 bytes. This is a size-optimization change, not a security fix.