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
294commits · 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 35 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 candidatefeat(core): introduce framebuffer_access applet privilegeby cepetr · d587eed6 · Aug 20, 2026 · 10 filesMessage 62 · AdequateLow 46Details
Commit message · cepetr

feat(core): introduce framebuffer_access applet privilege

[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
credential or privilege state
AI analysis · Low 46/100

This commit adds a new security permission called framebuffer_access that controls whether a small helper app (applet) running on the Trezor can read from or write to the device's screen memory. Previously, applets could access the framebuffer based only on memory location checks. Now they must also be explicitly granted the framebuffer_access privilege. The change is a hardening/feature addition, not a fix for an active exploit, and it removes an older privilege called assets_area_access that was apparently unused or being replaced.

Security candidaterefactor(core/rust): fix Layout::return_value() after Error is no longer Cloneby matejcik · e6e9ec08 · Aug 20, 2026 · 5 filesMessage 62 · AdequateLow 26Details
Commit message · matejcik

refactor(core/rust): fix Layout::return_value() after Error is no longer Clone

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

This commit is a small internal code cleanup in the Trezor firmware's Rust UI layer. It changes how a layout object hands back its result to caller code: instead of returning a copy of the result, it now 'takes' the result away so the same value cannot be retrieved twice. The change was needed because the error type no longer supports being copied (Clone). There is no direct evidence in the commit that this fixes an exploitable security bug; it appears to be a refactoring to keep the code compiling and to make the API behavior clearer (subsequent calls return None).

Security candidatefeat(rust/micropython): more ergonomic tuplesby matejcik · 89e4ee10 · Aug 20, 2026 · 11 filesMessage 57 · ThinInformational 15Details
Commit message · matejcik

feat(rust/micropython): more ergonomic tuples

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 path
AI analysis · Informational 15/100

This commit is a routine internal code cleanup in the Trezor firmware's Rust/MicroPython bridge. It introduces a dedicated tuple helper module so developers can write tuple conversions more naturally, and removes an older, less ergonomic helper. There is no indication it fixes a security bug or changes security-relevant behavior.

Security candidatefix(core): assert the monotonic versions fit what monoctr can storeby tychovrahe · 4156e6aa · Aug 20, 2026 · 1 fileMessage 85 · StrongLow 34Details
Commit message · tychovrahe

fix(core): assert the monotonic versions fit what monoctr can store

monoctr stores its counters UNARY -- value N is N written 16-byte blocks -- so
the encoding, not the uint8_t the value travels in, is what caps them at
MONOCTR_MAX_VALUE (63). A model that raises a monotonic version past that gets no
build error; it fails later, at runtime, and confusingly:

* the boardloader compares the boot header against the stored floor, cannot
write the new value, and reports "BOOTLOADER DOWNGRADED" on a perfectly good
image;
* the firmware and secmon floors silently stop advancing, so anti-rollback
quietly weakens instead of failing.

Assert all three at build time instead. Every model is well inside the limit
today (highest is 3), so this only fixes the failure mode of a future bump.

version_check.c is the only place all three can be checked. The firmware and
secmon values reach their images through header.S, where _Static_assert cannot
go, and model_version.h is itself pulled into that assembly via version.h, so
the checks cannot live there either. This translation unit both sees all three
constants and owns the monoctr policy they feed.

SECMON_MONOTONIC_VERSION is guarded: only models with a secmon define it (4 of 9
today).

Verified by temporarily setting a model to 64 and confirming the build stops, and
by building models with and without a secmon so both sides of the #ifdef compile.

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

[no changelog]

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 · Low 34/100

This commit adds build-time safety checks to prevent future Trezor firmware versions from accidentally setting anti-rollback version numbers too high for the hardware storage to handle. If a version were set above the storage limit, the device could either wrongly refuse to boot a valid update, or silently stop enforcing downgrade protection. The fix prevents that mistake at compile time, before any device is shipped. It does not fix an active bug today because all current models are well below the limit.

Security candidatefeat(core/prodtest): Add pin padding to AUTHENTICATE and SET_PIN command.by kopecdav · 2beb4b17 · Aug 20, 2026 · 1 fileMessage 62 · AdequateLow 44Details
Commit message · kopecdav

feat(core/prodtest): Add pin padding to AUTHENTICATE and SET_PIN command.

[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
access control
AI analysis · Low 44/100

This commit changes a Trezor factory-testing tool (prodtest) so that PINs sent during NFC backup authentication and PIN setup are padded to a fixed length and encrypted with the Noise XXpsk3 protocol before being transmitted. Previously, the raw PIN was placed directly into the NFC APDU command. The change reduces the risk that someone sniffing NFC traffic could learn the PIN length or the PIN itself in plaintext. It is a defensive hardening improvement in a manufacturing/debug utility, not a fix for an active exploit in end-user firmware.

Security candidatefix(core): add missing buffer length checksby cepetr · a698d6fa · Aug 19, 2026 · 6 filesMessage 57 · ThinModerate 51Details
Commit message · cepetr

fix(core): add missing buffer length checks

[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 · Moderate 51/100

This commit adds several missing safety checks in low-level hardware code for the Trezor hardware wallet. It prevents reading past the end of a too-short firmware image, avoids odd behavior when asked to read or write zero SD card blocks, ensures a signature buffer is large enough before use, and fixes a debug-message routine that could truncate or mishandle strings. These are defensive fixes; the commit message does not call them security fixes, but missing length checks in embedded code can sometimes be exploited to crash the device or leak nearby memory.

Security candidatechore(python): generate CoSi nonces randomly by defaultby M1nd3r · 114f6e2f · Aug 19, 2026 · 7 filesMessage 85 · StrongModerate 60Details
Commit message · M1nd3r

chore(python): generate CoSi nonces randomly by default

- Deterministic nonce derivation is persisted, it is safe for publicly known keys only. It is used for reproducible CoSi signing with dev keys.

[no changelog]

(cherry picked from commit 65fa3edbf020dc1fe356a905b944da92a1b55766)

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
signing boundary
AI analysis · Moderate 60/100

This commit changes the Trezor Python library's collective signing (CoSi) helper so that, by default, it generates random nonces instead of deriving them deterministically from the private key and message. The old deterministic mode is kept only for publicly known development keys, because using it with real secret keys is dangerous: a malicious coordinator could trick the same key into signing the same message twice with different combined nonces, which would leak the private key. The patch itself is a security improvement, not an exploit, but it fixes a latent vulnerability in the library's API design.

Security candidatefeat(core,python): definitions payload versionby obrusvit · d0f290cb · Aug 19, 2026 · 12 filesMessage 85 · StrongInformational 23Details
Commit message · obrusvit

feat(core,python): definitions payload version

- reinterpret the definitions magic `trzd1` as magic + version, i.e.
`trzd` + `1`
- this allows us to release backwards incompatible definitions with a
bumped version
- this is a necessary preparation for a signature quorum change

[no changelog]

85/100 · StrongMessage clarity
✓ 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
signing boundary
AI analysis · Informational 23/100

This commit refactors how Trezor firmware recognizes external 'definitions' files (the data blobs that describe Ethereum networks and tokens). It splits the old 5-byte header 'trzd1' into a 4-byte magic 'trzd' plus a 1-byte version number. The change is framed by the authors as a necessary preparation for a future signature-quorum change, not as a fix for an active vulnerability. No currently reachable security flaw is present in the diff; the code still only accepts version '1', which keeps the existing 2-of-3 signature requirement.

Security candidatefeat(ui,tron): support for native transfer with smart contract interactionby PrisionMike · f36dff00 · Aug 19, 2026 · 6 filesMessage 62 · AdequateLow 28Details
Commit message · PrisionMike

feat(ui,tron): support for native transfer with smart contract interaction

[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 pathsigning or wallet path
AI analysis · Low 28/100

This commit adds user-interface support for Tron smart-contract transactions that also move native TRX coins. Previously, the device screen did not show the native TRX amount when a smart contract was involved. Now it can display that amount so the user sees what they are really sending. The change is mostly UI wiring and test data; it does not appear to alter transaction validation or signing logic.

Security candidatefeat(legacy,core): add make.me.blink U2F dummy app IDby Andrew Kozlik · 1fe0ea1c · Aug 18, 2026 · 4 filesMessage 77 · AdequateInformational 21Details
Commit message · Andrew Kozlik

feat(legacy,core): add make.me.blink U2F dummy app ID

Show "not registered" message instead of a registration prompt when
Firefox sends its dummy U2F register request.

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

This commit is a small user-experience fix, not a security patch. Firefox's U2F support sends a special dummy registration request to check whether a security key is present. Trezor previously recognized two such dummy IDs, but Firefox's newer authenticator code uses a third one ('make.me.blink'). Without this change, Trezor would prompt the user to register the device, which is confusing. The fix makes Trezor show a simple 'not registered / already registered' message instead. It does not fix a vulnerability that lets an attacker steal funds or bypass protection.

Security candidatechore(crypto): remove NOISE_TAG_SIZE_BYTES defineby M1nd3r · 4a7a9950 · Aug 18, 2026 · 1 fileMessage 72 · AdequateInformational 15Details
Commit message · M1nd3r

chore(crypto): remove NOISE_TAG_SIZE_BYTES define

- Replaced by NOISE_XXPSK3_TAG_SIZE.

[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 path
AI analysis · Informational 15/100

This is a simple code cleanup: the developer removed a local alias named NOISE_TAG_SIZE_BYTES and replaced every use of it with the existing official constant NOISE_XXPSK3_TAG_SIZE. The numeric value and behavior of the code are unchanged, so there is no security impact.

Security candidatechore(crypto): add checks to noiseby M1nd3r · c59f833b · Aug 18, 2026 · 5 filesMessage 72 · AdequateModerate 59Details
Commit message · M1nd3r

chore(crypto): add checks to noise

- Check max message size.
- Respect aes-gcm block limits.

[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 path
AI analysis · Moderate 59/100

This commit hardens the Noise protocol code used in Trezor firmware by adding size limits and nonce limits to prevent two cryptographic problems: encrypting or decrypting messages that are too large for the protocol, and reusing the same encryption nonce after the counter wraps around. Reusing a nonce with AES-GCM can destroy the confidentiality of messages and allow attackers to forge fake messages. The patch also wipes sensitive context data more thoroughly when errors occur, reducing the chance that leftover key material could leak.

Security candidatefeat(stellar): show network in signing flowsby Jakub Janků · 7e4bbee9 · Aug 18, 2026 · 9 filesMessage 93 · StrongLow 30Details
Commit message · Jakub Janků

feat(stellar): show network in signing flows

The network can be optionally viewed in the info menu on the last
screen of the tx and auth entry signing flows.

The network was intentionally omitted from the confirmation flow
during a recent redesign:
https://github.com/trezor/trezor-firmware/issues/5148#issuecomment-2975448688

However, the stated rationale somewhat overlooked users that wish to
interact with multiple networks. For users that have accounts both
on mainnet and testnet, it is crucial to be able to distinguish that
they don't sign a transaction for mainnet that was actually meant to
be sent to testnet only.

Fixes: https://github.com/satoshilabs/trezor-firmware/issues/319
(cherry picked from commit cb97b0b37cccfa60619111ebc35aad518635d5b3)

93/100 · StrongMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Uses a recognizable type or scope✓ Provides detailed explanatory context✓ Links an issue, advisory, or supporting reference✓ Names security-relevant behavior explicitly
Why it was queued
signing boundarycryptography-sensitive pathsigning or wallet pathauthentication path
AI analysis · Low 30/100

This commit improves the Stellar signing experience on Trezor hardware wallets by letting users see which network (Mainnet, Testnet, or Futurenet) a transaction is for before approving it. Previously, the network was intentionally hidden from the main confirmation flow after a redesign, which could lead someone with accounts on both mainnet and testnet to accidentally approve a mainnet transaction they only intended for testnet. The fix adds the network name to an info menu on the final review screen for both regular Stellar transactions and Soroban authorizations. It also adds support for the Stellar Futurenet network passphrase. This is a security/usability improvement rather than a remote-exploitable vulnerability.

Security candidatefeat(bolt): increase item limit in show_info_with_cancelby Jakub Janků · 063b3f2a · Aug 18, 2026 · 1 fileMessage 85 · StrongInformational 15Details
Commit message · Jakub Janků

feat(bolt): increase item limit in show_info_with_cancel

One info item occupies 2 paragraphs; the limit is therefore
increased from 4 to 18 items.

This is a preparatory commit.

[no changelog]

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
boot or update path
AI analysis · Informational 15/100

This commit changes the on-screen display component used by one user-interface helper from a short paragraph container to a long one, raising the maximum number of info lines that can be shown from 4 to 18. The commit message explicitly calls it a 'preparatory commit' and there is no indication of a security bug or fix.

Security candidatefix(caesar): don't omit description in confirm_valueby Jakub Janků · c9c2d315 · Aug 18, 2026 · 3 filesMessage 85 · StrongModerate 51Details
Commit message · Jakub Janků

fix(caesar): don't omit description in confirm_value

... when info_items is non-empty.

This fixes an issue in Ripple confirm_account_deletion where the
fee limit is shown without any description and multiple similar
issues in Stellar payment-like operations (which internally use
confirm_stellar_output_amount).

[no changelog]

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
cryptography-sensitive pathboot or update path
AI analysis · Moderate 51/100

This commit fixes a display bug in Trezor hardware wallets running the 'Caesar' user interface. In certain Ripple and Stellar transaction confirmation screens, a helpful description label (for example, explaining that a shown number is a fee limit or payment amount) was accidentally left off. The fix makes sure the description appears alongside the value, so users are less likely to misread what they are approving. It is a user-interface clarity issue rather than a direct theft-of-funds vulnerability, but it could contribute to a user approving a transaction they do not fully understand.

Security candidatefix(l10n): change words__ into buttons__ in codeby Michal Kazda · ccf540df · Aug 18, 2026 · 11 filesMessage 57 · ThinInformational 15Details
Commit message · Michal Kazda

fix(l10n): change words__ into buttons__ in code
[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 15/100

This commit is a straightforward internal cleanup of translation key names. It changes labels like 'words__continue_anyway' to 'buttons__continue_anyway' in code that displays on-screen buttons and menu items. The actual user-facing text shown on the device is unchanged; only the internal identifier used to look up that text was renamed. There is no security-relevant change.

Security candidatefeat(core): support "dangerous" hold-to-confirm on Deliziaby Roman Zeyde · 31a076a8 · Aug 17, 2026 · 3 filesMessage 62 · AdequateInformational 20Details
Commit message · Roman Zeyde

feat(core): support "dangerous" hold-to-confirm on Delizia

[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 20/100

This commit adds a new user-interface option for the Trezor Safe 5 (Delizia) that lets certain confirmation screens use a red 'danger' hold-to-confirm style instead of the normal green one. It is purely a visual/theming change and does not alter what the device signs, what it allows, or any security policy. The large diff is mostly updated test screenshot hashes caused by the changed colors/text.

Security candidatechore(core): move `trezor.crypto.cosi` module to unittestsby Roman Zeyde · 2af21738 · Aug 17, 2026 · 4 filesMessage 77 · AdequateInformational 15Details
Commit message · Roman Zeyde

chore(core): move `trezor.crypto.cosi` module to unittests

It's no longer used in firmware.

[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
cryptography-sensitive path
AI analysis · Informational 15/100

This commit removes an unused cryptography helper module from the actual Trezor firmware and keeps it only in the test suite. There is no security bug being fixed here; it is a routine cleanup to avoid shipping dead code.

Security candidatechore(core/tools): drop bootloader_hashes for boot_ucb modelsby tychovrahe · c5a23c8e · Aug 17, 2026 · 7 filesMessage 100 · StrongInformational 15Details
Commit message · tychovrahe

chore(core/tools): drop bootloader_hashes for boot_ucb models

UCB models verify a staged bootloader through its PQ boot-header
signature (boot_image_replace under USE_BOOT_UCB), not through the padded
blake2s digests in bootloader_hashes.h -- boot_image_embdata.c only wires
.hash_00/.hash_FF `#ifndef USE_BOOT_UCB`, and that file is compiled only
by the firmware project, which enables boot_ucb for these models. The
digests are therefore never referenced for UCB models; the generated
header only churned whenever the bootloader binary changed, for no
consumer.

Skip generation for boot_ucb models (detected from the model.toml
features list), remove the now-dead #include from their model headers,
and delete the stale generated files for T3W1, D002 and T3T2.

[no changelog]

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>

100/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✓ Names security-relevant behavior explicitly
Why it was queued
signing boundaryupdate trustboot or update path
AI analysis · Informational 15/100

This is a cleanup change that stops generating unused bootloader hash files for newer Trezor models (D002, T3T2, T3W1). These models already verify the bootloader using a different mechanism (UCB with post-quantum signatures), so the old hash files were never actually used. The commit deletes the stale files and removes their #include references. There is no security vulnerability here.

Security candidatefix(stellar,python): use -p for --network-passphraseby Jakub Janků · 2f2ab1f7 · Aug 16, 2026 · 1 fileMessage 90 · StrongInformational 20Details
Commit message · Jakub Janků

fix(stellar,python): use -p for --network-passphrase

Previously, -n was used which collided with -n for --address.
The short name -p is used in the sign-soroban-authorization command
for the corresponding option with the same effect.

[no changelog]

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 control
AI analysis · Informational 20/100

This is a tiny command-line interface (CLI) fix for the Stellar-related commands in Trezor's Python library. Two different options were accidentally using the same short flag '-n': one for '--address' and one for '--network-passphrase'. The patch changes '--network-passphrase' to use '-p' instead, matching another Stellar command. This is mainly a usability bug, not a direct security vulnerability, because users could not reliably select the intended option by short flag.

Security candidatefeat(core): support dev-signed definitions on non-production buildsby Roman Zeyde · 3006c023 · Aug 16, 2026 · 12 filesMessage 85 · StrongInformational 19Details
Commit message · Roman Zeyde

feat(core): support dev-signed definitions on non-production builds

Similar to how dev-signed translations are supported via the `dev_keys` feature.

Definitions public keys are moved to `core/embed/rust/src/definitions/constants.rs`.

[no changelog]

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
boot or update path
AI analysis · Informational 19/100

This commit moves the public keys used to verify coin/token definitions from Python code into a new Rust module. It also makes development-signed definitions accepted on non-production builds, similar to an existing feature for translations. The change is a build/configuration refactor rather than a fix for an active security flaw. Production firmware still requires production signatures; dev keys are only accepted when the `dev_keys` feature is enabled, which is intended for development builds.

Security candidatefix(legacy): hardening ETH unstake and claimby obrusvit · b41173f3 · Aug 16, 2026 · 4 filesMessage 92 · StrongHigh 70Details
Commit message · obrusvit

fix(legacy): hardening ETH unstake and claim

- unlike stake, the value of unstake and claim is supplied as a contract
arg. Even though the contracts are non-payable, we must enforce
`msg.value` to be 0
- in addition, enforce the right chain_id to prevent replay attacks

(cherry picked from commit f0cd25f93bde76a0f71d0b47ec1907484b0abeba)

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
explicit security languagedefensive validationboot or update path
AI analysis · High 70/100

This update fixes a security flaw in Trezor's older hardware wallet firmware for Ethereum staking operations. Previously, when a user tried to 'unstake' or 'claim' staked ETH, the device did not reliably block ETH from being sent along with the transaction (msg.value), even though those smart-contract functions are not supposed to accept money. It also did not strictly check that the transaction was on the correct Ethereum network (chain ID), which could have allowed a malicious or accidental transaction on one network to be replayed on another. The fix enforces zero ETH value for unstake/claim and ties each allowed contract address to its proper network.

Security candidatefix(core): hardening ETH unstake and claimby obrusvit · 72414778 · Aug 16, 2026 · 4 filesMessage 92 · StrongHigh 74Details
Commit message · obrusvit

fix(core): hardening ETH unstake and claim

- unlike stake, the value of unstake and claim is supplied as a contract
arg. Even though the contracts are non-payable, we must enforce
`msg.value` to be 0
- in addition, enforce the right chain_id to prevent replay attacks

(cherry picked from commit 31323e62fbae7bb7b9ccc17a236e97cd8efeb91a)

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
explicit security languagedefensive validationsigning or wallet path
AI analysis · High 74/100

This update tightens the rules for two Ethereum staking operations—unstake and claim—on Trezor hardware wallets. Before the fix, the device did not verify that the user was on the correct Ethereum network (chain ID) and did not block ETH from being attached to unstake/claim transactions. Because those contract functions reject incoming ETH, any ETH sent with them would normally be lost. The patch now rejects such transactions before they can be signed, preventing accidental or malicious loss of funds and cross-chain replay attacks.

Security candidatefeat(l10n): add Indonesian JSONby Michal Kazda · 8f890956 · Aug 15, 2026 · 1 fileMessage 72 · AdequateInformational 15Details
Commit message · Michal Kazda

feat(l10n): add Indonesian JSON
- including updated signatures
[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
signing boundarytranslation-only discount
AI analysis · Informational 15/100

This commit adds an Indonesian language translation file (id.json) to the Trezor firmware. It is a localization-only change with no executable code, no security logic, and no functional behavior changes. There is no indication this introduces any security issue.

Security candidatefix(core): show ETH public key derivation pathby Roman Zeyde · fa5e3906 · Aug 14, 2026 · 2 filesMessage 57 · ThinInformational 20Details
Commit message · Roman Zeyde

fix(core): show ETH public key derivation path

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
secret or key material
AI analysis · Informational 20/100

This commit fixes a user-interface detail on Trezor hardware wallets: when displaying an Ethereum public key on the device screen, it now also shows the derivation path (the sequence of numbers that identifies which account/key the public key belongs to). Previously only the public key was shown. This is a usability and transparency improvement, not a fix for a code vulnerability that could be exploited remotely.