TZ
← All projectsTrezor

Trezor firmware

Firmware monorepo for Trezor One, Model T, and Safe devices.

BitcoinHardware walletsNormal
Repository coverage

3229 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.

1125security candidates372second-pass queue2925AI analyses
297commits · 30 days
701commits · 60 days
1641commits · 180 days
2707commits · 365 days
Backfill bands
Aug 5 → Feb 61298 seen115 candidatesComplete
Feb 6 → Jun 6775 seen58 candidatesComplete
Jun 6 → Jul 6217 seen13 candidatesComplete
Jul 6 → Aug 5360 seen54 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.

67/100 average clarity
635Strong · 80–100
1551Adequate · 60–79
1036Thin · 40–59
7Opaque · 0–39
1security candidate 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.
tychovrahe343134322564
Roman Zeyde675214620372
obrusvit25395235364
PrisionMike10866106272
Andrew Kozlik833481268
Petr Susil202299
Jakub Janků591838180
Martin Pastyřík26823173
cepetr264106222059
M1nd3r24689227071
Ioan Bizău23076230059
Lukas Bielesch856784067
Analysis record

Published AI watches

Last scanned 14 minutes ago

Informational 15 AI analysisMessage 57 · Thin
TZ TrezorTrezor firmware BitcoinHardware wallets

chore(core): improvements to English copy

This commit is a routine text cleanup for the Trezor hardware wallet's on-screen English messages. It fixes punctuation, removes unnecessary line breaks, and makes small wording tweaks (for example, changing 'PIN will be required' to 'A PI…

1dbc2c3cby Michal Kazda+22−422 files
No security note in commit
Moderate 59 AI analysisMessage 57 · Thin
TZ TrezorTrezor firmware BitcoinHardware wallets

feat(core): app root packet downgrade protection

This commit adds downgrade protection for a new 'app root packet' system in Trezor firmware. Previously, the code had a TODO note saying downgrade protection needed to be considered. The change makes the device remember the timestamps of p…

Replaces a TODO comment ('!@# TODO: Consider downgrade protection') with concrete timestamp-based anti-downgrade checksAdds per-ring timestamp state to prevent rollback of root-of-trust packetsAdds chain_timestamp field and 90-day drift bound to root packet format
4a9cf168by cepetr+335−3112 files
No security note in commit
Moderate 67 AI analysisMessage 62 · Adequate
TZ TrezorTrezor firmware BitcoinHardware wallets

fix(core/rust): discard low-order keys in THP handshake

This commit fixes a cryptographic edge case in Trezor's THP (Trezor Host Protocol) handshake. It now rejects Curve25519 public keys that are all zeros or that produce an all-zero shared secret. A zero public key can cause the Diffie-Hellma…

Curve25519 zero/low-order public key rejection added to DHZero shared-secret output rejected after scalar multiplicationHandshake state machine now transitions to Failed on initiation-response error
429a283dby M1nd3r+45−74 files
No security note in commit
Informational 11 AI analysisMessage 57 · Thin
TZ TrezorTrezor firmware BitcoinHardware wallets

feat(core): enable `ward` with `miniscript`

This commit changes one line in a build configuration file for the Trezor hardware wallet firmware. It adds the 'ward' feature to the existing 'miniscript' feature set. There is no direct evidence in the commit that this is a security fix;…

Single-line Cargo.toml feature flag changeNo code logic modificationNo changelog or security note in commit message
d434a636by Jakub Janků+1−11 file
No security note in commit
Informational 15 AI analysisMessage 80 · Strong
TZ TrezorTrezor firmware BitcoinHardware wallets

feat(core): add `ward` feature flag

This commit adds a new disabled-by-default feature flag called 'ward' to the Trezor firmware build system. It does not change any production firmware behavior; it only wires up a placeholder MicroPython module and build options so that fut…

New feature flag is disabled by default and gated behind optional Cargo featuresCommit message explicitly states intent to exclude WARD from production firmware buildsNew MicroPython module is a stub with no exported functions beyond __name__
7b58e75aby Jakub Janků+55−018 files
No security note in commit
Low 27 AI analysisMessage 57 · Thin
TZ TrezorTrezor firmware BitcoinHardware wallets

feat(core): enable -Wsign-compare

This commit turns on a compiler warning (-Wsign-compare) that catches places where signed and unsigned numbers are compared, and fixes the resulting warnings across the Trezor firmware. Most changes are clean-up casts and loop-index type c…

Compiler warning -Wsign-compare enabled, indicating prior signed/unsigned comparison issuesI/O return-value checks hardened against negative ssize_t values being treated as successPython binding offset/length validation tightened in Monero crypto module
1cc940a4by cepetr+162−15247 files
No security note in commit
Informational 15 AI analysisMessage 62 · Adequate
TZ TrezorTrezor firmware BitcoinHardware wallets

refactor(core): merge passphrase__access_hidden_wallet into passphrase__access_wallet

This commit is a simple user-interface cleanup. It removes one duplicate translation label ('Access hidden wallet') and makes the device use a single, consistent label ('Access wallet') when asking the user to confirm opening a passphrase-…

65402aecby Michal Kazda+2−103 files
No security note in commit
Informational 15 AI analysisMessage 62 · Adequate
TZ TrezorTrezor firmware BitcoinHardware wallets

refactor(core): merge passphrase__hidden_wallet into passphrase__wallet

This commit is a simple user-interface cleanup. It merges two translation labels that both meant 'Passphrase wallet' into a single label, and updates the screens that used the old duplicate label. There is no security-relevant behavior cha…

7ce6887fby Michal Kazda+5−184 files
No security note in commit
Low 45 AI analysisMessage 85 · Strong
TZ TrezorTrezor firmware BitcoinHardware wallets

fix(core/bootloader): keep the full block length for block-0 retries

This commit fixes a bug in the Trezor bootloader's firmware-update code. When updating firmware, the first block of data is fetched in two pieces: a small initial 'header prefetch,' then the rest. If a communication error happened and the …

Firmware update reliability bug in bootloaderBlock-0 retry path truncated data before hash verificationHash mismatch caused by buffer offset/size mismatch, not by attacker
dc937ba2by tychovrahe+81−711 file
No security note in commit
Informational 12 AI analysisMessage 62 · Adequate
TZ TrezorTrezor firmware BitcoinHardware wallets

refactor(core/bootloader): separate image upload and image checks

This commit is a code cleanup in the Trezor bootloader. It moves the generic, image-type-agnostic parts of firmware upload (chunk receiving, retry logic, flash erasing/writing, timeouts) into a new reusable module called wf_image_upload.c,…

Refactor only: logic moved, not changed in security-relevant waysSame signature/version/model/downgrade checks remain in firmware-specific handlerSame flash erase/write sequence preserved in generic engine
caab7d9eby tychovrahe+772−4834 files
No security note in commit
Informational 15 AI analysisMessage 57 · Thin
TZ TrezorTrezor firmware BitcoinHardware wallets

chore(core): remove unused trezor_lib/ui feature

This commit removes an unused Rust Cargo feature flag called 'ui' from the Trezor firmware build configuration. It is a cleanup change: the feature was always enabled in practice, so the code now compiles unconditionally. There is no secur…

1436fbc6by cepetr+2−158 files
No security note in commit
Low 27 AI analysisMessage 57 · Thin
TZ TrezorTrezor firmware BitcoinHardware wallets

fix(core/caesar): change confirm middle button

This commit changes how users confirm an Ethereum authorization screen on Trezor's 'Caesar' layout. Previously, the user had to hold down a button to approve; now a simple tap is enough. The change only affects the user-interface interacti…

UI confirmation gesture changed from hold-to-confirm to tap-to-confirmOnly affects EIP-7702 authorization flow on Caesar (T3B1) layoutTest fixture hashes updated for all supported languages
e231cc94by obrusvit+50−502 files
No security note in commit
Informational 15 AI analysisMessage 62 · Adequate
TZ TrezorTrezor firmware BitcoinHardware wallets

refactor(core): merge firmware and unix cargo packages

This commit is a routine internal cleanup that merges two separate build packages (one for real hardware firmware and one for the desktop emulator) into a single package. It moves source files into subdirectories and updates build scripts …

6be32440by cepetr+48−32025 files
No security note in commit
Informational 15 AI analysisMessage 67 · Adequate
TZ TrezorTrezor firmware BitcoinHardware wallets

chore(core): test aes gcm only if enabled

This commit is a minor build/test maintenance change. It adds a feature flag (USE_AES_GCM) so that AES-GCM tests are only run when the feature is actually enabled in a particular firmware build. There is no security fix or vulnerability be…

890aca93by cepetr+13−14 files
No security note in commit
Informational 15 AI analysisMessage 95 · Strong
TZ TrezorTrezor firmware BitcoinHardware wallets

chore(python, tests): add and update GNU licence headers

This commit only adds or updates copyright and GNU license header comments in Python test and tooling files. It makes no changes to executable code, so it cannot introduce a security vulnerability or fix one.

6dc781c2by M1nd3r+1202−203250 files
No security note in commit
Informational 15 AI analysisMessage 62 · Adequate
TZ TrezorTrezor firmware BitcoinHardware wallets

refactor(core): move the multisig XPUB title into a translation template

This commit is a straightforward code cleanup: it moves the on-screen title for multisig XPUB screens from hard-coded English text into the device's translation system. The visible text remains essentially the same, and there is no securit…

6d69df16by Michal Kazda+20279−2023911 files
No security note in commit
Informational 15 AI analysisMessage 77 · Adequate
TZ TrezorTrezor firmware BitcoinHardware wallets

refactor(core): render translated strings verbatim in layouts

This is a cosmetic code cleanup. It moves punctuation and capitalization out of the Python code and into the translation files so translated strings are shown exactly as written. There is no security-relevant change.

162ed3a2by Michal Kazda+12−125 files
No security note in commit
Informational 15 AI analysisMessage 62 · Adequate
TZ TrezorTrezor firmware BitcoinHardware wallets

chore(core/bolt): remove unneeded `use` statements

This commit simply removes two unused Rust import statements (called `use` statements). It does not change any actual code behavior, logic, or security properties of the Trezor firmware.

a56f8c3dby Roman Zeyde+0−22 files
No security note in commit
Informational 18 AI analysisMessage 57 · Thin
TZ TrezorTrezor firmware BitcoinHardware wallets

fix(core): add missing colon in Tron

This commit fixes a UI formatting bug in the Tron cryptocurrency flow on Trezor hardware wallets. A missing colon was added to account information labels shown on the device screen. The change is cosmetic and does not appear to affect cryp…

UI label formatting fix onlyNo changes to signature verification, key handling, or transaction authorizationNo buffer size, memory allocation, or input validation changes observed
739c2968by Michal Kazda+19332−193364 files
No security note in commit
Informational 15 AI analysisMessage 57 · Thin
TZ TrezorTrezor firmware BitcoinHardware wallets

fix(core): combine path/account with labels

This commit is a straightforward user-interface refactoring. It bundles an account/path label together with its corresponding value into a single tuple, instead of passing them as four separate arguments. There is no security-relevant chan…

c66f6f4dby Michal Kazda+51−7413 files
No security note in commit
Repository ledger

Explore captured commits

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

Security candidatebuild: fix builds on MacOS / clang / newer gccby matejcik · ed9a3e31 · Sep 4, 2026 · 6 filesMessage 80 · StrongInformational 18Details
Commit message · matejcik

build: fix builds on MacOS / clang / newer gcc

* Mach-O dislikes section ".buf"
* projects should use local version.h and not rely on it magically being
the only version.h in include path
* g_lt_log_cli is set but not read
* "TRZC" is a 5-byte string which you aren't supposed to stuff into a
4-byte array

80/100 · StrongMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Uses a recognizable type or scope✓ Provides detailed explanatory context
Why it was queued
boot or update path
AI analysis · Informational 18/100

This commit fixes several build-compatibility problems in the Trezor firmware so it compiles on MacOS, clang, and newer gcc. The changes include using the correct local header file, avoiding a special memory section name that MacOS object files reject, silencing a compiler warning about an unused log variable in emulator builds, and fixing a 5-character string being squeezed into a 4-character space. These are primarily build/robustness fixes rather than patches for an active security vulnerability.

Security candidatefeat(core): add a boot command that enters the bootloader ready to talkby tychovrahe · d1330f9e · Sep 4, 2026 · 13 filesMessage 85 · StrongLow 27Details
Commit message · tychovrahe

feat(core): add a boot command that enters the bootloader ready to talk

BOOT_COMMAND_STOP_AND_WAIT lands on the bootloader's intro screen -- "Go to
bootloader menu" per the BootCommand protobuf, which is deliberate. But only
the wait-for-host screen calls workflow_ifaces_init(), so on the intro screen
the wire interfaces are not up: a host that just rebooted the device cannot
talk to it until somebody taps through.

BOOT_COMMAND_STOP_AND_CONNECT is the same stop, entered on the connect
screen instead. The whole behavioural difference is which screen the workflow
starts on:

screen_t screen = connect_to_host ? SCREEN_WAIT_FOR_HOST : SCREEN_INTRO;

It authorizes nothing -- no consent material, no effect on any validity gate
-- which is what makes it safe to hand to firmware, unlike CONTINUE_UPGRADE
(deliberately bridge-less so firmware cannot reach the weaker boot gate).
reboot_and_connect() therefore gets the usual syscall AND smcall bridges,
since firmware runs unprivileged.

The motivating case is a caller that has just invalidated its own firmware
and knows a host is waiting: the intro screen would strand the device behind a
tap it has no way to ask for. Not exposed over the wire yet; a host-initiated
RebootToBootloader still lands on the menu, which a later protobuf addition
could fix.

[no changelog]

Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>

85/100 · StrongMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Uses a recognizable type or scope✓ Provides detailed explanatory context
Why it was queued
update trustdefensive validationcredential or privilege stateboot or update path
AI analysis · Low 27/100

This commit adds a new internal reboot path that lets the Trezor Core firmware restart the device into the bootloader and immediately activate the USB/wire connection, skipping the usual intro screen that normally requires a finger tap. The change is intentionally limited: it does not approve any firmware installation, downgrade, or other security-sensitive action; it only changes which screen the bootloader shows first. It is exposed to unprivileged firmware through both a normal system call and a secure-monitor call, but it is not yet reachable from a host computer over USB. The main security consideration is that it slightly enlarges the attack surface for reboot-based attacks, though the commit message and code comments explicitly describe it as authorization-free and safe compared to the existing auto-upgrade reboot command.

Security candidatechore: remove deadcode from `pyright_tool.py`by obrusvit · ac25643b · Sep 3, 2026 · 3 filesMessage 72 · AdequateInformational 15Details
Commit message · obrusvit

chore: remove deadcode from `pyright_tool.py`

- features removed are not used anywhere

[no changelog]

72/100 · AdequateMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Uses a recognizable type or scope✓ Provides an explanatory body
Why it was queued
seed or entropy path
AI analysis · Informational 15/100

This commit is a routine cleanup of an internal Python linting helper script. It removes unused features from `pyright_tool.py` (a tool that manages type-checker suppressions) and updates two comments in unrelated firmware source files to match a new alias format. There is no change to the actual Trezor firmware code that runs on devices, no security fix, and no vulnerability.

Security candidatechore(core): save 15KB of flash by eliminating source filenamesby cepetr · 8eb27f83 · Sep 3, 2026 · 2 filesMessage 62 · AdequateInformational 11Details
Commit message · cepetr

chore(core): save 15KB of flash by eliminating source filenames

[no changelog]

62/100 · AdequateMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Uses a recognizable type or scope! No meaningful explanatory body
Why it was queued
boot or update path
AI analysis · Informational 11/100

This commit is a routine size-optimization change for the Trezor firmware. It removes source filenames from compiled code to save 15KB of flash storage and rearranges linker sections. There is no indication this is a security fix or introduces a vulnerability.

Security candidatechore(tests): use named parametersby M1nd3r · 54a213d7 · Sep 3, 2026 · 18 filesMessage 82 · StrongInformational 15Details
Commit message · M1nd3r

chore(tests): use named parameters

[no changelog]

Co-Authored-By: Claude Opus 5 (1M) <noreply@anthropic.com>

82/100 · StrongMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Uses a recognizable type or scope✓ Provides an explanatory body✓ Mentions testing or verification
Why it was queued
cryptography-sensitive pathseed or entropy pathsigning or wallet pathauthentication path
AI analysis · Informational 15/100

This commit only rewrites test code to use named pytest parameters (adding readable IDs to test cases). It does not change any production firmware, wallet logic, or security behavior. There is no security issue here.

Security candidatefix(core/bootloader): mark check_vendor_header_lock warn-unused-resultby tychovrahe · f58e7e79 · Sep 3, 2026 · 2 filesMessage 90 · StrongLow 25Details
Commit message · tychovrahe

fix(core/bootloader): mark check_vendor_header_lock warn-unused-result

The three sibling checks in sec/image.h -- check_vendor_header_model, _sig
and _keys -- are all declared `secbool __wur (const vendor_header *const)`.
This one predates them in that respect and had neither the attribute nor the
second const, even though dropping its result would silently skip an
authorization check rather than fail.

No call site changes: both existing callers already consume the value (one
assigns it, one wraps it in ensure()).

[no changelog]

Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>

90/100 · StrongMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Uses a recognizable type or scope✓ Provides detailed explanatory context✓ Names security-relevant behavior explicitly
Why it was queued
access controlupdate trustboot or update path
AI analysis · Low 25/100

This is a small hardening change to the Trezor bootloader. It adds a compiler warning attribute to a security check function so that future programmers cannot accidentally call it and ignore its pass/fail result. The current code already uses the result correctly at both call sites, so there is no active bug being fixed—only prevention of a future mistake.

Security candidatebuild(core): exclude meminfo-related code from FW buildsby Roman Zeyde · 581a50ed · Sep 3, 2026 · 5 filesMessage 77 · AdequateInformational 15Details
Commit message · Roman Zeyde

build(core): exclude meminfo-related code from FW builds

Saves ~7.3KB on T2T1.

Keep it for emulators.

[no changelog]

77/100 · AdequateMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Uses a recognizable type or scope✓ Provides an explanatory body
Why it was queued
boot or update path
AI analysis · Informational 15/100

This commit is a routine firmware size optimization. It removes a developer-only memory debugging feature (meminfo) from production hardware builds to save about 7.3KB of flash storage, while keeping it available in emulator builds. There is no security vulnerability here.

Security candidatefeat(core): encapsulate select menu item in a structby Vojtěch Nevřela · f67410a6 · Sep 3, 2026 · 7 filesMessage 62 · AdequateInformational 15Details
Commit message · Vojtěch Nevřela

feat(core): encapsulate select menu item in a struct

[no changelog]

62/100 · AdequateMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Uses a recognizable type or scope! No meaningful explanatory body
Why it was queued
cryptography-sensitive pathboot or update path
AI analysis · Informational 15/100

This commit is a straightforward internal code cleanup in the Trezor firmware's user-interface code. It replaces a raw two-value pair (text label + intent) with a named struct called SelectMenuItem. There is no change to user-visible behavior, no bug fix, and no security-related change.

Security candidatefix(core): fix image size alignment on f4 devicesby cepetr · 65e3b480 · Sep 3, 2026 · 1 fileMessage 57 · ThinLow 27Details
Commit message · cepetr

fix(core): fix image size alignment on f4 devices

[no changelog]

57/100 · ThinMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Uses a recognizable type or scope! No meaningful explanatory body
Why it was queued
boot or update path
AI analysis · Low 27/100

This commit adjusts memory layout alignment settings in the linker script used for Trezor's STM32F4 hardware wallet firmware. It moves a 512-byte alignment boundary from the end of one flash section to the end of another. The change is described by the vendor as fixing image size alignment on F4 devices. There is no explicit security claim in the commit, and the diff alone does not demonstrate a vulnerability or exploit path. It could plausibly relate to ensuring correct firmware image boundaries for secure boot or flashing, but that is speculative.

Security candidatetest: check `Features.max_passphrase_len` in device testsby Roman Zeyde · 0bd16deb · Sep 3, 2026 · 1 fileMessage 87 · StrongInformational 15Details
Commit message · Roman Zeyde

test: check `Features.max_passphrase_len` in device tests

Following 835efbb65caa8284c08da97e7378f5677eecb019, legacy and core have different passphrase limits.

[no changelog]

87/100 · StrongMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Uses a recognizable type or scope✓ Provides an explanatory body✓ Mentions testing or verification
Why it was queued
access controlauthentication path
AI analysis · Informational 15/100

This commit only adds a test assertion to verify that the maximum passphrase length reported by a Trezor device matches the expected value for its model family (50 characters for legacy devices, 128 for newer 'core' devices). It is a pure test-code change with no product behavior change and no security fix.

Security candidatetest(core): use equality for passphrase click testsby Roman Zeyde · 2bd21719 · Sep 2, 2026 · 1 fileMessage 72 · AdequateInformational 15Details
Commit message · Roman Zeyde

test(core): use equality for passphrase click tests

[no changelog]

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

This commit only changes automated test code for the Trezor hardware wallet. It makes passphrase display checks stricter in a test file (using exact equality instead of substring matching). There is no change to the actual firmware, wallet logic, or any code that runs on a user's device. It cannot affect real users or introduce a security vulnerability.

Security candidaterefactor(core/eckhart): replace `String<99>` with `ShortString`by Roman Zeyde · 22cec1ea · Sep 2, 2026 · 1 fileMessage 77 · AdequateInformational 15Details
Commit message · Roman Zeyde

refactor(core/eckhart): replace `String<99>` with `ShortString`

9695e1c2ef has increased `ShortString` size to 128.

[no changelog]

77/100 · AdequateMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Uses a recognizable type or scope✓ Provides an explanatory body
Why it was queued
boot or update pathauthentication path
AI analysis · Informational 15/100

This is a small internal code cleanup in the Trezor firmware's PIN entry screen. It swaps one fixed-size text container (`String<99>`) for another (`ShortString`) that was already enlarged to 128 bytes in a prior commit. The behavior and safety limits remain the same, and there is no indication of a security fix.

Security candidatefix(core): mark .buf and .no_dma_buffers sections as NOLOADby cepetr · bce462ee · Sep 2, 2026 · 20 filesMessage 62 · AdequateLow 44Details
Commit message · cepetr

fix(core): mark .buf and .no_dma_buffers sections as NOLOAD

[no changelog]

62/100 · AdequateMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Uses a recognizable type or scope! No meaningful explanatory body
Why it was queued
boot or update path
AI analysis · Low 44/100

This commit changes how the Trezor firmware's embedded linker scripts reserve memory for special buffer sections. It marks sections named .buf and .no_dma_buffers as NOLOAD, meaning the linker will reserve RAM space for them but will not include their initial contents in the firmware binary or copy them during startup. Without NOLOAD, these uninitialized buffers could be included in the binary image, increasing its size and potentially causing startup initialization issues. The change is a correctness fix for embedded memory layout, but the commit message does not frame it as a security fix and no exploit is demonstrated.

Security candidaterefactor(core/bootloader): drop the unreachable turn_on command listby tychovrahe · a51e73fc · Sep 2, 2026 · 1 fileMessage 85 · StrongInformational 15Details
Commit message · tychovrahe

refactor(core/bootloader): drop the unreachable turn_on command list

The command enumeration has been dead since ad3cb11056 ("start the device on
short press"). That commit widened the condition below it from
`manufacturing_mode && cmd != BOOT_COMMAND_POWER_OFF` to just the latter, which
subsumes the list entirely -- nothing the list selects can still change the
outcome.

The widening was deliberate. What the list was trying to express is already
covered: BOOT_COMMAND_POWER_OFF is set in exactly one place
(reboot_and_power_off), so it alone marks the state that has no reason to boot.
Every other command boots through -- and a boot with the button held still reaches
the press loop via the button_is_down check just
below, so long-press bootloader entry is unaffected.

Keeping the enumeration around only implies it still selects something, and any
command added to it is a silent no-op.

[no changelog]

Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>

85/100 · StrongMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Uses a recognizable type or scope✓ Provides detailed explanatory context
Why it was queued
update trustboot or update path
AI analysis · Informational 15/100

This is a code cleanup in the Trezor bootloader. It removes a list of commands that was no longer doing anything useful, because a simpler check already covered all cases. There is no security bug being fixed here; the change only makes the code easier to understand and prevents future mistakes where someone might add a command to the now-deleted list and expect it to matter.

Security candidatefix(core): fix FLASH region overflow on T2T1by M1nd3r · 7bea7466 · Sep 2, 2026 · 1 fileMessage 85 · StrongLow 44Details
Commit message · M1nd3r

fix(core): fix FLASH region overflow on T2T1

Fixes https://github.com/trezor/trezor-firmware/issues/7792.

[no changelog]

85/100 · StrongMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Uses a recognizable type or scope✓ Provides an explanatory body✓ Links an issue, advisory, or supporting reference✓ Names security-relevant behavior explicitly
Why it was queued
memory safetyboot or update path
AI analysis · Low 44/100

This commit changes how a memory buffer section named .buf is handled during the build process for the Trezor Model T (T2T1) hardware wallet. By marking it as NOLOAD, the linker no longer includes this uninitialized buffer in the firmware image file, which prevents the firmware from exceeding its allowed flash storage region. This is a build/linker fix that avoids a firmware size overflow; it does not by itself appear to be an exploitable vulnerability, but overflowing a flash region could in some cases cause build failures, boot issues, or undefined behavior if an oversized image were written to the device.

Security candidatefeat(xtask): allow --asan for all projectsby cepetr · b9529b56 · Sep 2, 2026 · 17 filesMessage 57 · ThinInformational 15Details
Commit message · cepetr

feat(xtask): allow --asan for all projects

[no changelog]

57/100 · ThinMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Uses a recognizable type or scope! No meaningful explanatory body
Why it was queued
boot or update path
AI analysis · Informational 15/100

This commit is a build-system feature change. It lets developers use the Address Sanitizer (ASAN) debugging tool with all Trezor firmware projects, not just the emulator. It also adds a guard that stops ASAN from being used in real hardware builds, where it is unsupported. There is no security vulnerability here.

Security candidatetest(core/rust/crypto): add tests for ECDSAby matejcik · 24891227 · Sep 2, 2026 · 1 fileMessage 67 · AdequateInformational 15Details
Commit message · matejcik

test(core/rust/crypto): add tests for ECDSA

67/100 · AdequateMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Uses a recognizable type or scope✓ Mentions testing or verification! No meaningful explanatory body
Why it was queued
cryptography-sensitive path
AI analysis · Informational 15/100

This commit adds automated tests for the ECDSA cryptographic code in the Trezor firmware. It also introduces a small, safer wrapper type (RecId) for signature recovery IDs so only valid values (0-3) can be passed to the underlying C code. There is no fix for a known vulnerability here; it is a hardening and test-coverage change.

Security candidaterefactor(core/rust/crypto: introduce testing harness and zkp supportby matejcik · 410d40d3 · Sep 2, 2026 · 6 filesMessage 100 · StrongInformational 18Details
Commit message · matejcik

refactor(core/rust/crypto: introduce testing harness and zkp support

moves the test-only `rand` insecure PRNG into a dedicated test-only
module `testutil`

implements `random_buffer` extern "C" export that delegates to the
insecure PRNG
and applies a xor with a masking string <PRNG-Rust-Tests> so that its
presence can be detected within a compiled artifact
(required for secp256-zkp EC arithmetic even for verification because
curve_to_jacobian needs random data for FIH masking)

explicitly runs the test harness and initializes the zkp context before
start (also required by secp256-zkp)

moves the secp256-zkp default error handlers from modtrezorcrypto.c to
the crypto crate, so that they're properly set for any user of crypto,
not just firmware.
(this removes the "raise ValueError" feature for illegal arguments --
that shouldn't matter too much, these are checks on "is the function
called properly", not on validity of user provided input)

100/100 · StrongMessage clarity
✓ Specific, 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
entropy or randomnessdefensive validationcryptography-sensitive path
AI analysis · Informational 18/100

This commit reorganizes how a test-only random number generator and certain Bitcoin-related cryptographic error handlers are wired up in the Trezor firmware's Rust crypto code. It moves an insecure PRNG used only in unit tests into its own module and exports it under a detectable name so test builds can find it. It also moves default error callbacks for the secp256k1-zkp library from the Python module layer into the core crypto crate so all users of the crate share them. The change removes a Python ValueError raise for illegal library arguments, replacing it with a system error shutdown. There is no direct evidence in the commit of a vulnerability being fixed; it reads as a refactoring to support testing and a new cryptographic feature (zero-knowledge proofs).

Security candidatefeat(core/rust): introduce rtl::CSliceMutby matejcik · c511a1a2 · Sep 2, 2026 · 5 filesMessage 80 · StrongLow 29Details
Commit message · matejcik

feat(core/rust): introduce rtl::CSliceMut

a counterpart to CSlice for mutable slices

Necessitated a refactor of previous CSlice code to use a shared internal
helper. I also took the opportunity to change as_slice / as_slice_mut to
always return a slice that may be empty, collapsing the NULL/empty
distinction on the Rust side too.

Fun had been had on all sides, esp. with obscure provenance bugs and the
correct safety properties.

80/100 · StrongMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Uses a recognizable type or scope✓ Provides detailed explanatory context
Why it was queued
boot or update path
AI analysis · Low 29/100

This commit is a code-quality refactor in the Trezor firmware's Rust layer. It introduces a new mutable-slice helper (CSliceMut) and changes the existing CSlice so that empty/NULL slices return an empty Rust slice instead of an optional value that callers had to unwrap. The change is described by the developer as fixing 'obscure provenance bugs' and aligning safety properties. There is no direct evidence in the commit of an exploitable vulnerability; it reads as defensive hardening of the boundary between C and Rust code.

Security candidatedocs(storage): document the public storage APIby tychovrahe · ee7c5efb · Sep 1, 2026 · 1 fileMessage 92 · StrongInformational 15Details
Commit message · tychovrahe

docs(storage): document the public storage API

Add doxygen comments to `storage.h` in the style used across core,
covering all public functions and the UI callback.

The NULL contract of every pointer argument is stated explicitly, matched
against the syscall and smcall verifiers so that the header and the
privilege boundary agree on which arguments are optional.

The only deliberate divergence is `storage_get()`, whose `val` ignores
`max_len` when NULL, while the verifiers require `max_len` to be 0 in
that case. The header documents the stricter rule.

Comments only, no functional change.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>

[no changelog]

92/100 · StrongMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Uses a recognizable type or scope✓ Provides detailed explanatory context✓ Explains rationale or failure mode
Why it was queued
credential or privilege state
AI analysis · Informational 15/100

This commit only adds documentation comments to a C header file. No program code was changed, so it cannot introduce or fix a security bug by itself. The comments describe how the storage API is already supposed to behave, including rules about which pointer arguments may be NULL.

Security candidatefix(core): unify MAX_LENGTH for SimpleChoiceby Vojtěch Nevřela · ecdd6c2a · Sep 1, 2026 · 5 filesMessage 57 · ThinLow 35Details
Commit message · Vojtěch Nevřela

fix(core): unify MAX_LENGTH for SimpleChoice

[no changelog]

57/100 · ThinMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Uses a recognizable type or scope! No meaningful explanatory body
Why it was queued
cryptography-sensitive pathboot or update path
AI analysis · Low 35/100

This commit tightens a safety check in the Trezor hardware wallet's user-interface code. It makes sure that a small on-screen menu component can hold at least as many items as the firmware might ever ask it to display, preventing a capacity mismatch that could crash the device when a user is choosing recovery-seed word counts or similar options. There is no direct evidence in the commit that this crash was exploitable to steal funds or bypass security.

Security candidaterefactor(core): separate norcow config from flash layoutby tychovrahe · bbbfa2af · Sep 1, 2026 · 3 filesMessage 95 · StrongInformational 15Details
Commit message · tychovrahe

refactor(core): separate norcow config from flash layout

`norcow_config.h` lived in the flash module and was pulled in by
`sys/flash.h`, while storage's `norcow.h` includes `norcow_config.h`,
which itself includes `sys/flash.h` — a cycle between the two modules.

Split it along its natural seam:

- `STORAGE_AREAS` / `STORAGE_AREAS_COUNT` are flash layout (defined by
`flash_layout.c`, used by `flash_utils.c` and the bootloader emulator),
so they join the other area declarations in `sys/flash.h`.
- The norcow parameters move to `sec/storage/inc/norcow_config.h`, next
to the module that needs them, and `NORCOW_SECTOR_COUNT` is now derived
from `STORAGE_AREAS_COUNT` so the two cannot disagree.

`projects/unix/main_main.c` uses `MODEL_INTERNAL_NAME` but reached
`trezor_model.h` only through the removed include chain, so it now
includes it directly.

Legacy and `storage/tests` are unaffected: each supplies its own
`norcow_config.h`.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>

[no changelog]

95/100 · StrongMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Uses a recognizable type or scope✓ Provides detailed explanatory context✓ Mentions testing or verification
Why it was queued
update trust
AI analysis · Informational 15/100

This commit is a straightforward internal code cleanup. It moves two configuration constants between header files to remove a circular include dependency between the flash and storage modules. There is no user-facing change, no bug fix, and no security-sensitive behavior change.

Security candidatefix(core/rust): adjust menu item limits to prevent overflow errorsby Vojtěch Nevřela · c81e063e · Sep 1, 2026 · 3 filesMessage 79 · AdequateLow 42Details
Commit message · Vojtěch Nevřela

fix(core/rust): adjust menu item limits to prevent overflow errors

[no changelog]

79/100 · AdequateMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Uses a recognizable type or scope✓ Explains rationale or failure mode✓ Names security-relevant behavior explicitly! No meaningful explanatory body
Why it was queued
memory safetyboot or update path
AI analysis · Low 42/100

This commit fixes a capacity mismatch in the Trezor hardware wallet's on-screen menus. A global limit allowed up to 6 menu entries, but the internal storage for two menu layouts only held 5. When a 6-item menu was built, the code would panic (crash) instead of showing the menu. The patch raises both storage capacities to 6 and adds compile-time checks so the bug cannot silently recur if the global limit is changed again. The crash is a denial-of-service issue for the device UI, not a direct theft-of-funds vulnerability.

Security candidatechore: use ruff instead of black and isortby obrusvit · 724737f5 · Aug 31, 2026 · 136 filesMessage 72 · AdequateInformational 15Details
Commit message · obrusvit

chore: use ruff instead of black and isort

- reducing the number of tools in the repo
- in the future, we may replace also pylint and pyright

[no changelog]

72/100 · AdequateMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Uses a recognizable type or scope✓ Provides an explanatory body
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 routine housekeeping change that swaps the Python code-formatting tools used in the project from `black` and `isort` to `ruff`. It updates configuration files, build scripts, and reformats many source files to match the new tool's style. There is no change to what the software actually does, no new features, and no indication of any security problem or fix.

Security candidatefix(core): cleanup menu handling irregularitiesby Vojtěch Nevřela · 1601205f · Aug 31, 2026 · 12 filesMessage 57 · ThinInformational 17Details
Commit message · Vojtěch Nevřela

fix(core): cleanup menu handling irregularities

[no changelog]

57/100 · ThinMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Uses a recognizable type or scope! No meaningful explanatory body
Why it was queued
cryptography-sensitive pathboot or update path
AI analysis · Informational 17/100

This commit is a code cleanup in the Trezor firmware's user-interface layer. It moves a small 'menu item intent' type to a better location, fixes a minor error-handling inconsistency, and reorders some on-screen menu entries so the cancel option appears first. There is no direct evidence this fixes an exploitable security vulnerability, but the reordering could be a defensive usability improvement to prevent accidental destructive actions.