TZ
← All projectsTrezor

Trezor firmware

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

BitcoinHardware walletsNormal
Repository coverage

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

915security candidates307second-pass queue1045AI analyses
338commits · 30 days
577commits · 60 days
1352commits · 180 days
2649commits · 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.

66/100 average clarity
470Strong · 80–100
1316Adequate · 60–79
859Thin · 40–59
5Opaque · 0–39
Read the scoring rubric →
Developer activity

Who is changing the project?

Public Git author strings; identities are not independently verified.

DeveloperCommitsCandidatesAnalyzedHigh riskMessage avg.
Andrew Kozlik702427266
Roman Zeyde566176208171
tychovrahe292104109161
PrisionMike945975173
Jakub Janků19915184
Martin Pastyřík2389173
cepetr1968282059
Ioan Bizău23076116059
obrusvit2137683064
M1nd3r2067177071
Lukas Bielesch846767067
Martin Milata1744646063
Analysis record

Published AI watches

Last scanned 53 minutes ago

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

chore(core): remove sha1 from regular FW

This commit removes the SHA-1 hashing function from the regular Trezor firmware. SHA-1 is an old, weak hash algorithm that is no longer considered secure for sensitive uses. The change deletes the code that exposes SHA-1 to apps running on…

Removal of a deprecated cryptographic primitive (SHA-1) from the firmware API surfaceReduction of attack surface and prevention of future misuse of a collision-vulnerable hashNo direct vulnerability patch or memory-safety bug is present in the diff
16d15774by M1nd3r+0−2006 files
No security note in commit
Low 27 AI analysisMessage 62 · Adequate
TZ TrezorTrezor firmware BitcoinHardware wallets

refactor(crypto): pass static public key to `noise_xxpsk3_*_init()`

This commit changes how a cryptographic library sets up secure connections. Previously, the code automatically calculated the public key from the private key. Now, the caller must provide the public key directly. This is a code-quality ref…

Cryptographic key handling changed: public key is now supplied rather than derivedPotential reduction of key-mismatch risk if caller provides correct public keyNew null-pointer check added for static_public_key
1b3128a4by Ondřej Vejpustek+20−92 files
No security note in commit
Informational 15 AI analysisMessage 57 · Thin
TZ TrezorTrezor firmware BitcoinHardware wallets

refactor(crypto): change order of parameters

This commit simply reorders the arguments of an internal function called dh() and updates every place that calls it. The actual math and security behavior are unchanged; it is a code cleanup with no security effect.

33a119eeby Ondřej Vejpustek+15−151 file
No security note in commit
Informational 15 AI analysisMessage 47 · Thin
TZ TrezorTrezor firmware BitcoinHardware wallets

refactor(crypto): prefix enums

This commit simply renames two groups of internal status labels (called enums) in the Trezor firmware's cryptographic code. The old names like WAITING_FOR_REQUEST1 were shared between two different parts of the code, so the developer gave …

f1c74046by Ondřej Vejpustek+26−222 files
No security note in commit
Low 37 AI analysisMessage 57 · Thin
TZ TrezorTrezor firmware BitcoinHardware wallets

fix(crypto): prevent calling `memzero(NULL, ...)`

This commit fixes three places in the Trezor firmware's cryptographic code where a memory-clearing function could be called with a NULL pointer. In practice, passing NULL to memzero is harmless on Trezor's platform (it does nothing), but i…

NULL pointer passed to memory-zeroing helper in cryptographic codeUndefined behavior in C standard library contractDefensive hardening in Noise protocol implementation
0394e934by Ondřej Vejpustek+11−51 file
No security note in commit
Informational 18 AI analysisMessage 62 · Adequate
TZ TrezorTrezor firmware BitcoinHardware wallets

refactor(crypto): return remote static key from `noise_xxpsk3_*_handle_*()`

This commit is a code cleanup (refactor) for the cryptographic handshake code used in Trezor devices. It changes how the other party's long-term public key is returned to the caller: instead of storing it inside an internal state structure…

Removal of long-term public key storage from internal handshake stateCaller-supplied output buffer for remote static public key reduces internal secret retentionError-path memzero of returned key material on failure
3ead1aa6by Ondřej Vejpustek+79−423 files
No security note in commit
Informational 17 AI analysisMessage 57 · Thin
TZ TrezorTrezor firmware BitcoinHardware wallets

feat(xtask): introduce project-toml build-options

This commit is a build-system refactoring for Trezor firmware. It moves the mapping of command-line build options to Rust/cargo features out of hard-coded Rust logic and into per-project TOML files. It also adds a small change so debug bui…

Build-option mapping now lives in project.toml files, increasing the attack surface for supply-chain/build-configuration tamperingMakefile change automatically enables debug-link for PYOPT=0 debug buildsValidation added to reject storage_insecure_testing_mode in production builds
d44de007by cepetr+681−40817 files
No security note in commit
Informational 15 AI analysisMessage 67 · Adequate
TZ TrezorTrezor firmware BitcoinHardware wallets

test(ethereum): fix incorrect address checksum

This commit only updates test data. It corrects the capitalization (checksum) of Ethereum addresses used in automated tests and refreshes the expected screen-shot hashes those tests compare against. There are no changes to the actual Trezo…

2b1938ccby Tomas Martykan+52−523 files
No security note in commit
Low 33 AI analysisMessage 67 · Adequate
TZ TrezorTrezor firmware BitcoinHardware wallets

fix(python/trezorlib): enable entropy check on T1 by default

This commit changes the Trezor Python library so that, when setting up a Trezor Model One (the original Trezor 1 device), it now performs an entropy check by default if the device runs firmware 1.13.1 or newer. Previously, the library only…

Enables a previously disabled security/validation feature (entropy check) for a specific device modelAdds version-gated behavior to avoid errors on older firmwareDefensive hardening of wallet setup randomness verification
a4af9107by Andrew Kozlik+10−42 files
No security note in commit
Informational 15 AI analysisMessage 57 · Thin
TZ TrezorTrezor firmware BitcoinHardware wallets

chore(core): remove scons related files

This commit is a routine cleanup that removes the old SCons build system files from the Trezor Core firmware repository. It deletes Makefiles, SConscripts, and related Python helper scripts, but does not change any firmware source code, cr…

a4b25c31by cepetr+5−927554 files
No security note in commit
Informational 22 AI analysisMessage 80 · Strong
TZ TrezorTrezor firmware BitcoinHardware wallets

refactor(core): assorted micropython-1.28.0 fixes

This commit updates Trezor's embedded MicroPython interpreter from an older version to 1.28.0. It pulls in several upstream MicroPython bug fixes, including stricter buffer-size checks for converting integers to bytes, a new stack-safety A…

Synchronizes upstream MicroPython fixes that include buffer-size and stack-safety hardeningPrevents Ctrl+C interruption of frozen boot code, reducing denial-of-service/control-flow risk during bootFixes sys.stdout.buffer.write() return value, which could affect code relying on correct I/O semantics
7ba7879dby Martin Milata+36−4012 files
No security note in commit
Informational 15 AI analysisMessage 70 · Adequate
TZ TrezorTrezor firmware BitcoinHardware wallets

refactor(core): use mp_obj_new_str_from_cstr

This commit is a simple code cleanup that replaces a common MicroPython string-creation pattern with a new helper function. It does not change what the code does, only how it is written. There is no security issue visible in the change.

6a889e6aby Martin Milata+3−33 files
No security note in commit
Informational 15 AI analysisMessage 80 · Strong
TZ TrezorTrezor firmware BitcoinHardware wallets

refactor(core): replace hexlify with bytes.hex()

This is a large but straightforward internal cleanup: the project switched from using the MicroPython `ubinascii` module's `hexlify`/`unhexlify` functions to the standard Python `bytes.hex()` and `bytes.fromhex()` methods. The change remov…

44aa469eby Martin Milata+1334−1383120 files
No security note in commit
Informational 18 AI analysisMessage 70 · Adequate
TZ TrezorTrezor firmware BitcoinHardware wallets

refactor(core): replace m_new_obj_with_finaliser

This commit is a routine code cleanup in the Trezor firmware's embedded MicroPython modules. It replaces an older, two-step object allocation pattern with a newer helper that allocates memory and sets the object type in one step. The chang…

No security-relevant logic changes observedNo input validation changesNo memory safety bug fixes (e.g., no overflow, use-after-free, or uninitialized memory fixes)
142794eaby Martin Milata+40−5619 files
No security note in commit
Informational 15 AI analysisMessage 80 · Strong
TZ TrezorTrezor firmware BitcoinHardware wallets

refactor(core): bundle the utimeq module

This commit is a routine maintenance refactor. MicroPython removed its built-in 'utimeq' module, so Trezor copied the same code into its own firmware tree and renamed it to 'timeq'. There is no security bug being fixed and no new vulnerabi…

617bc806by Martin Milata+284−2211 files
No security note in commit
Informational 17 AI analysisMessage 70 · Adequate
TZ TrezorTrezor firmware BitcoinHardware wallets

refactor(core): use mp_obj_new_str_from_vstr

This is a code cleanup change in Trezor's firmware that swaps one MicroPython internal helper for another. It replaces calls that create byte or string objects from a vstr buffer with newer, purpose-built helpers. The commit message says t…

Refactor only: helper function renames with equivalent semanticsNew str helper adds UTF-8 validation; bytes helper does not validateNo input validation, length, or error-handling changes observed
7ea11191by Martin Milata+72−7433 files
No security note in commit
Informational 15 AI analysisMessage 85 · Strong
TZ TrezorTrezor firmware BitcoinHardware wallets

refactor(core): switch to slots-based mp_obj_type_t

This commit is a routine internal cleanup that switches how Trezor's firmware defines built-in MicroPython object types. It replaces older, manually-written type structures with a newer macro provided by the upstream MicroPython project. T…

ab51798fby Martin Milata+163−16624 files
No security note in commit
Informational 15 AI analysisMessage 62 · Adequate
TZ TrezorTrezor firmware BitcoinHardware wallets

refactor(core/rust): bindgen wrapper for calling static micropython functions

This commit is a straightforward internal code refactor. It adds a small C wrapper file so that Rust code can call two specific internal MicroPython functions that are declared as static/inline in headers. There is no user-facing change, n…

d5121d92by Martin Milata+20−06 files
No security note in commit
Informational 15 AI analysisMessage 80 · Strong
TZ TrezorTrezor firmware BitcoinHardware wallets

build(core): adjust mpy-cross paths

This commit is a routine build-system update for the Trezor firmware. It changes where the build process looks for the MicroPython cross-compiler binary (mpy-cross) and synchronizes a configuration header with newer MicroPython code. There…

2ef70e16by Martin Milata+18−264 files
No security note in commit
Low 30 AI analysisMessage 80 · Strong
TZ TrezorTrezor firmware BitcoinHardware wallets

build(core): collect micropython GC root pointers

This commit updates the Trezor firmware build system to use a newer MicroPython mechanism for tracking special memory pointers called 'root pointers.' It removes hard-coded lists of these pointers from configuration files and instead colle…

GC root pointer handling changedBuild system now auto-collects root pointers instead of hard-coding themRemoves manual MICROPY_PORT_ROOT_POINTERS lists
fc128f3dby Martin Milata+75−107 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 candidatedocs(core/rust): fix a small typoby Roman Zeyde · 72540c6c · Jun 26, 2026 · 1 fileMessage 57 · ThinInformational 15Details
Commit message · Roman Zeyde

docs(core/rust): fix a small typo

[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 fixes a spelling mistake in a code comment ('Chcek' to 'Check'). No program logic, user interface behavior, or security properties were changed.

Security candidatechore(core/rust): use `deref()` instead of `deref_mut()`by Roman Zeyde · 61557dca · Jun 26, 2026 · 1 fileMessage 62 · AdequateInformational 12Details
Commit message · Roman Zeyde

chore(core/rust): use `deref()` instead of `deref_mut()`

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

This is a one-line code cleanup in the user-interface code for a Trezor hardware wallet screen. It changes a mutable borrow (`deref_mut`) to an immutable borrow (`deref`) where the code only reads a value. This is a routine Rust style/refactor change with no visible security effect.

Security candidatechore(deps): added `construct-typing` for typecheckingby M1nd3r · 855c08a9 · Jun 26, 2026 · 8 filesMessage 85 · StrongInformational 15Details
Commit message · M1nd3r

chore(deps): added `construct-typing` for typechecking

- `construct-typing` is used for typechecking in files using `Construct`.
- Also fixed formatting of type/pyright ignore comments.
[no changelog]

Co-authored-by: matejcik <596073+matejcik@users.noreply.github.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
boot or update path
AI analysis · Informational 15/100

This commit only adds a development dependency called construct-typing to improve type checking and adjusts some type-checker ignore comments. It does not change how the Trezor firmware or tools behave at runtime, and it does not fix or introduce any security issue.

AI review queuedrefactor(core): close other workflows when starting `ProgressLayout`by Roman Zeyde · ada6a447 · Jun 26, 2026 · 4 filesMessage 62 · AdequateLow 26Details
Commit message · Roman Zeyde

refactor(core): close other workflows when starting `ProgressLayout`

[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
signing or wallet pathsecond-pass: security-sensitive path
AI analysis · Low 26/100

This commit moves the responsibility for closing other on-screen workflows into the ProgressLayout class itself, rather than having each individual feature call a separate 'close others' function. It is a code cleanup (refactor) and does not appear to introduce or fix a security vulnerability. The change makes UI behavior more consistent but does not change what the device ultimately allows.

Security candidatetest(core): don't run FIDO2 tests on BTC-only buildsby Roman Zeyde · f386bdf8 · Jun 26, 2026 · 1 fileMessage 72 · AdequateInformational 15Details
Commit message · Roman Zeyde

test(core): don't run FIDO2 tests on BTC-only builds

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

This commit only changes a test file so that FIDO2/WebAuthn tests are skipped on Bitcoin-only firmware builds. It does not change any production code, wallet logic, or security behavior. There is no vulnerability or security fix here.

Security candidatefix(python): fix trezorctl get-sessionby matejcik · fda4ad4b · Jun 26, 2026 · 2 filesMessage 92 · StrongLow 32Details
Commit message · matejcik

fix(python): fix trezorctl get-session

* if an invalid base64 string is set in TREZOR_SESSION_ID, trezorctl
would crash.
* when resuming a THP session, pairing.finish() was not called, leading
to an invalid state. Ensure that pairing.finish() is called even in case
a pairing flow did not run.
* change `@get_session(passphrase=False)` to mean "do not prompt for
passphrase" as opposed to "force use standard wallet". That matches the
actual usages in code.
* try resuming session first in `get_session`, so that if we do have
a session to resume, prompt_passphrase=False will use it without
(re)deriving a standard wallet. (There is no situation where we explicitly
*need* a standard wallet for something, what we actually have are situations
where we *don't need* to ask for passphrase.)
* take advantage of improved ensure_unlocked() and remove trezorctl-specific
reuse of standard session (which is now no longer auto-created).

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

This commit fixes the `trezorctl get-session` command in Trezor's Python library. It prevents crashes when an invalid session ID is supplied, ensures a required pairing step is completed when resuming secure (THP) sessions, and changes the meaning of `passphrase=False` from 'always use a standard wallet' to 'do not ask for a passphrase.' These are reliability and state-correctness fixes in the command-line tool, not the hardware wallet firmware itself.

Security candidatechore: update UI fixturesby matejcik · 05711517 · Jun 26, 2026 · 1 fileMessage 85 · StrongInformational 15Details
Commit message · matejcik

chore: update UI fixtures

ensure_unlocked() no longer derives a session so all tests where a PIN
keyboard is shown after an ensure_unlocked() call will see changed
entropy

85/100 · StrongMessage clarity
✓ Descriptive subject✓ Uses a recognizable type or scope✓ Provides detailed explanatory context✓ Mentions testing or verification✓ Names security-relevant behavior explicitly
Why it was queued
entropy or randomness
AI analysis · Informational 15/100

This commit only updates expected test screenshots (called UI fixtures) recorded as cryptographic hashes. The firmware code itself is not changed. The message explains that a helper function called ensure_unlocked() no longer creates a new session, so tests that show a PIN keyboard afterward now produce different screen images. This is a routine test-maintenance change with no direct security impact.

Security candidatefeat(python): client.ensure_unlocked() works without deriving a sessionby matejcik · b56edf29 · Jun 26, 2026 · 2 filesMessage 85 · StrongInformational 19Details
Commit message · matejcik

feat(python): client.ensure_unlocked() works without deriving a session

The trick here is that ApplySettings requires a PIN unlock, but if we
don't specify any setting to apply, nothing happens. (And we get a
failure "no setting provided" which we don't care about.)
ApplySettings doesn't need seed derivation and so works on a seedless
session, so we can use _get_any_session() to call it, and save time
deriving the seed in the common case.

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

This is a small optimization in the Trezor Python library. The `ensure_unlocked()` helper used to pick or create a wallet session, which forced the hardware wallet to derive the master seed just to check if the device was unlocked. The new code instead sends a harmless 'ApplyFlags(0)' command, which requires the user to enter their PIN but does not need seed derivation. This is a performance and usability improvement, not a security fix. There is no evidence in the commit of a vulnerability being patched.

Security candidaterefactor(python/trezorctl): respect prompt_passphrase when creating a new sessionby matejcik · 011a3413 · Jun 26, 2026 · 1 fileMessage 85 · StrongLow 35Details
Commit message · matejcik

refactor(python/trezorctl): respect prompt_passphrase when creating a new session

the previous sequence of changes removed a short circuit path for "not
prompt_passphrase", this commit restores the correct behavior

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

This commit fixes a regression in the Trezor command-line tool (trezorctl). A recent earlier change accidentally removed a shortcut that skips asking the user for their passphrase when the caller explicitly says it is not needed. Because of that regression, trezorctl could prompt for or require a passphrase even in situations where it should not, such as when running commands that do not need a wallet. The patch restores the intended behavior by adding a `prompt_passphrase` flag and returning an empty passphrase when it is false.

AI review queuedfix(solana): show the program id for unknown programs in the tx details view instead of a generic "Unsupported program" label.by Sammy Harris · 7ea33494 · Jun 25, 2026 · 4 filesMessage 77 · AdequateInformational 20Details
Commit message · Sammy Harris

fix(solana): show the program id for unknown programs in the tx details view instead of a generic "Unsupported program" label.

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

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
signing or wallet pathsecond-pass: security-sensitive path
AI analysis · Informational 20/100

This change improves the Trezor hardware wallet's Solana transaction confirmation screen. When a transaction contains an unknown program (smart contract), the device now shows the actual program ID instead of a generic 'Unsupported program' label. This helps users make a more informed decision before approving a transaction, but it is a user-interface improvement rather than a fix for a code vulnerability.

Security candidatechore(python): remove `magic` and `code_length` fields from `LegacyFirmware` structby M1nd3r · 163c927c · Jun 23, 2026 · 1 fileMessage 62 · AdequateInformational 15Details
Commit message · M1nd3r

chore(python): remove `magic` and `code_length` fields from `LegacyFirmware` 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
boot or update path
AI analysis · Informational 15/100

This is a small internal cleanup in the Python helper library that handles Trezor One firmware files. It removes two exposed fields ('magic' and 'code_length') from a Python class and renames them to private internal names ('_magic' and '_code_length'). The actual binary parsing behavior is unchanged: the 'TRZR' magic bytes are still required, and the code length is still computed and embedded exactly as before. There is no security fix or vulnerability here.

Security candidatefeat(python): introduce `NrfHeader` and `NrfImage`by M1nd3r · af1a4b51 · Jun 23, 2026 · 3 filesMessage 77 · AdequateInformational 19Details
Commit message · M1nd3r

feat(python): introduce `NrfHeader` and `NrfImage`

[no changelog]

Co-authored-by: matejcik <596073+matejcik@users.noreply.github.com>

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

This commit adds new Python code to the Trezor firmware tools for parsing and building Nordic Semiconductor (nRF) style firmware images. It is a feature addition, not a fix. The code handles firmware headers, TLV metadata blocks, SHA-256 digests, Ed25519 signatures, and device model identifiers. There is no indication in the commit that this resolves a security bug or is being released as a security patch.

Security candidatefix(python): fix trezor model parsingby matejcik · 09520872 · Jun 23, 2026 · 1 fileMessage 72 · AdequateInformational 20Details
Commit message · matejcik

fix(python): fix trezor model parsing

[no changelog]

Co-authored-by: m1nd3r <63123927+m1nd3r@users.noreply.github.com>

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

This commit fixes a small bug in the Python Trezor library that identifies which Trezor hardware model is being used. Previously, the code would crash when it saw a valid but unrecognized model identifier. The fix makes the parser accept any valid model identifier instead of rejecting unknown ones. This is a routine robustness improvement, not a clear security vulnerability, but it could affect how firmware updates or device interactions behave if a new model is introduced.

Security candidaterefactor(python): remove nrf magic from HeaderTypeby M1nd3r · 2e90694f · Jun 23, 2026 · 2 filesMessage 62 · AdequateInformational 15Details
Commit message · M1nd3r

refactor(python): remove nrf magic from HeaderType

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

This is a small code cleanup in Trezor's Python firmware-handling library. It removes an unused firmware header type for Nordic (NRF) chips and renames an internal 'magic' field so it is no longer treated as a user-facing header type. It also fixes two default boolean values from the integers 1 to the Python booleans True. There is no security-relevant change here.

Security candidatefeat(core/build): handle bootloader padding in memusageby tychovrahe · 1f7cbfde · Jun 23, 2026 · 3 filesMessage 62 · AdequateInformational 15Details
Commit message · tychovrahe

feat(core/build): handle bootloader padding in memusage

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

This commit changes how a build reporting tool calculates memory usage for the Trezor bootloader. Previously, the tool counted the zero padding that fills the bootloader image up to its maximum size as 'used' memory, making the bootloader always appear 100% full. The patch lets the linker export the padding size and subtracts it from the reported usage so developers see real content size versus padding. It is a build tooling and reporting improvement, not a fix for a runtime security bug.

Security candidatefeat(core): add support for PQ uild on STM32U58xby tychovrahe · e25721d3 · Jun 23, 2026 · 1 fileMessage 57 · ThinInformational 17Details
Commit message · tychovrahe

feat(core): add support for PQ uild on STM32U58x

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

This commit updates a bootloader linker script for a new STM32U58-based Trezor variant to support an alternative 'PQ' (post-quantum) bootloader header format. It adds a code-size symbol, a small padding section, and changes how the bootloader image is padded to its maximum size. There is no direct evidence in the commit that this fixes a security vulnerability; it reads as a build/enablement change for a new hardware configuration.

Security candidaterefactor(core): avoid allocation in `confirm_payment_request()`by Roman Zeyde · 0f93b31e · Jun 22, 2026 · 8 filesMessage 62 · AdequateInformational 18Details
Commit message · Roman Zeyde

refactor(core): avoid allocation in `confirm_payment_request()`

[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 · Informational 18/100

This is a small internal code cleanup in the Trezor firmware's Ethereum transaction confirmation flow. It changes several function parameters from 'Iterable' (a general 'can be looped over' type) to 'Sequence' (a type that supports indexing and has a known length). The commit title says the goal is to 'avoid allocation' because the code no longer needs to convert the items into a list before passing them to the UI. There is no direct evidence in the commit of a security vulnerability being fixed; it reads as a performance or memory-efficiency refactor.

Security candidatechore(vendor): disable unused MicroPython featuresby Roman Zeyde · c21e4efa · Jun 22, 2026 · 2 filesMessage 62 · AdequateLow 26Details
Commit message · Roman Zeyde

chore(vendor): disable unused MicroPython features

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

This commit turns off several unused features in the MicroPython interpreter that runs on Trezor hardware wallets. It is a hardening change that reduces the amount of code available to an attacker, but it does not by itself fix a known, exploitable bug. The commit message explicitly calls it a routine cleanup ('chore') and says it needs no changelog entry.

Security candidatetest(core): add N4W1-based fixtures to reset/recovery device testsby Roman Zeyde · 388c3ec0 · Jun 22, 2026 · 7 filesMessage 72 · AdequateInformational 15Details
Commit message · Roman Zeyde

test(core): add N4W1-based fixtures to reset/recovery device 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
cryptography-sensitive path
AI analysis · Informational 15/100

This commit only updates automated test scripts and recorded test snapshots (fixtures) for the Trezor firmware. It adds support for testing a new backup method called N4W1 alongside the existing on-screen display backup method. There are no changes to the actual device firmware, wallet logic, or security-critical code, so this commit does not introduce or fix a security vulnerability.

Security candidatefix(core/xtask): place combined sections at their flash offsetsby tychovrahe · 534df742 · Jun 22, 2026 · 1 fileMessage 85 · StrongLow 29Details
Commit message · tychovrahe

fix(core/xtask): place combined sections at their flash offsets

combine concatenated boardloader/bootloader/firmware back-to-back, but
the .bin files are content-sized, so every section after the boardloader
landed too early and the flashed image didn't boot. Place each section at
its memory.ld offset (relative to BOARDLOADER_START), padding gaps with
zeros. Affects all models.

[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 trust
AI analysis · Low 29/100

This commit fixes a bug in the tool that builds Trezor hardware wallet flash images. Previously, when combining the boardloader, bootloader, and firmware into one file, later sections were placed too early because earlier files were smaller than their reserved flash space. The fix pads the gaps with zeros so each piece lands at its correct memory address, preventing the resulting image from failing to boot. It is a build-time tooling fix, not a runtime vulnerability in the device itself.

Security candidaterefactor(core/build): remove special bolt layout casesby tychovrahe · 8792e14c · Jun 22, 2026 · 14 filesMessage 62 · AdequateInformational 15Details
Commit message · tychovrahe

refactor(core/build): remove special bolt layout cases

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

This commit is a straightforward build-system cleanup. It removes special-case layout feature bundles (like layout_bolt_d001 and layout_bolt_d002) and replaces them with separate, explicit display-type features (display_mono, display_rgb565, display_rgba8888). Model configuration files now list the display type directly alongside the layout type. There is no change to runtime code, no bug fix, and no security-related behavior.

AI review queuedfix(solana): use template for indexed cosigners [no changelog]by Michal Kazda · 4c25a6fd · Jun 21, 2026 · 7 filesMessage 77 · AdequateInformational 16Details
Commit message · Michal Kazda

fix(solana): use template for indexed cosigners
[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
signing or wallet pathsecond-pass: security-sensitive path
AI analysis · Informational 16/100

This commit fixes a minor user-interface wording issue in Trezor's Solana app. Previously, the device built the cosigner label by manually combining the word 'Cosigner' with a number, which could cause problems for translations. Now it uses a proper translation template 'Cosigner {0}'. There is no direct evidence this is a security vulnerability, but inconsistent or untranslatable labels could theoretically contribute to user confusion when reviewing multisig signers.

Security candidatefix(common): correct wire direction for Monero *Request messagesby Martin Varmuza · 38db13a4 · Jun 19, 2026 · 3 filesMessage 93 · StrongInformational 20Details
Commit message · Martin Varmuza

fix(common): correct wire direction for Monero *Request messages

The 11 stateful Monero *Request messages (transaction signing and
key-image sync) were tagged (wire_out) even though the host sends them
device-bound; they should be (wire_in). The firmware reads each one as
input (workflow entry points in workflow_handlers.py, subsequent steps
via ctx.read()/call() in apps/monero/sign_tx.py and key_image_sync.py)
and answers with the matching *Ack, which correctly stays (wire_out).

The Monero live-refresh requests (552/554/556), MoneroGetTxKeyRequest
and DebugMoneroDiagRequest were already correct; only the tx-signing
(501-517) and key-image-sync (530-534) request branches were wrong.

Regenerated both checked-in host descriptors that embed the wire
direction: rust/trezor-client/src/protos/generated/messages.rs (via
rust/trezor-client/scripts/build_protos) and
rust/trezor-thp/examples/host-cli/pb/messages.rs (via
`cargo run --example gen-protobuf examples/host-cli/pb/`). Each flips
the same 11 EnumValueOptions tags from field 50003 (wire_out) to 50002
(wire_in); no message IDs, *Ack values, or unrelated entries change.

No functional firmware change: the on-device protobuf blobs
(proto_*.data, consumed by core/embed/rust/src/protobuf/defs.rs) are
generated by common/protob/pb2py from the integer wire_type only --
wire_in/wire_out are never read -- and runtime dispatch is keyed on the
integer message type, so core behavior is byte-identical. The generated
Python does not encode wire direction either. Legacy (T1) is unaffected
(Monero is in SKIPPED_MESSAGES).

Upstream fix for the wire-direction inconsistency worked around in
trezor/trezor-suite#28859.

[no changelog]

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

93/100 · StrongMessage clarity
✓ Specific, 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
Why it was queued
signing boundary
AI analysis · Informational 20/100

This commit fixes a labeling mistake in the Trezor firmware's protocol definition: eleven Monero request messages were incorrectly marked as traveling from the device to the host, when in reality the host sends them to the device. The change only updates metadata in generated host-side descriptors; the firmware itself does not use this metadata, so on-device behavior is unchanged. It is a correctness fix for host libraries, not a patch for an exploitable device bug.

Security candidatechore(common): remove deprecated passphrase-related protobuf messagesby Roman Zeyde · 7c514195 · Jun 19, 2026 · 7 filesMessage 62 · AdequateInformational 15Details
Commit message · Roman Zeyde

chore(common): remove deprecated passphrase-related protobuf messages

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

This commit is a routine cleanup: it removes two old, already-deprecated message types related to passphrase handling from Trezor's protocol definitions and generated code. There is no security fix or vulnerability being patched here; the messages were marked deprecated years ago and are now being deleted entirely.

Security candidatechore(common): remove deprecated fields from passphrase-related messagesby Roman Zeyde · a96a9f91 · Jun 19, 2026 · 3 filesMessage 62 · AdequateInformational 15Details
Commit message · Roman Zeyde

chore(common): remove deprecated fields from passphrase-related messages

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

This commit is a routine cleanup: it removes two old, already-deprecated fields from the messages that Trezor devices and apps use to exchange passphrase information. The fields were marked deprecated in firmware version 2.3.0 and are no longer used. Removing them does not change active behavior and does not fix or introduce a security vulnerability.