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 13 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 candidatechore(core): improvements to English copyby Michal Kazda · 1dbc2c3c · Sep 22, 2026 · 2 filesMessage 57 · ThinInformational 15Details
Commit message · Michal Kazda

chore(core): improvements to English copy
[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 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 PIN will be required'). There is no change to security logic, cryptography, or how the device protects funds.

Security candidatefeat(core): app root packet downgrade protectionby cepetr · 4a9cf168 · Sep 21, 2026 · 12 filesMessage 57 · ThinModerate 59Details
Commit message · cepetr

feat(core): app root packet downgrade protection

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

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 previously accepted root packets and reject older or inconsistent ones. It also adds a new Python-exposed state object so the wallet software can persist these timestamps. This is a security-hardening feature rather than a fix for a currently exploitable bug, but it closes a design gap that could have allowed an attacker to roll back trusted application lists to older, potentially vulnerable versions.

Security candidatefix(core/rust): discard low-order keys in THP handshakeby M1nd3r · 429a283d · Sep 21, 2026 · 4 filesMessage 62 · AdequateModerate 67Details
Commit message · M1nd3r

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

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

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-Hellman exchange to collapse to a predictable value, which could let an attacker on the USB/bus learn or manipulate session keys. The patch also makes the handshake fail more gracefully for that single channel instead of aborting all channels.

Security candidatefeat(core): enable `ward` with `miniscript`by Jakub Janků · d434a636 · Sep 21, 2026 · 1 fileMessage 57 · ThinInformational 11Details
Commit message · Jakub Janků

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

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

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; it appears to be a routine feature-enablement change. Without additional context, the security relevance is unclear and likely low.

Security candidatefeat(core): add `ward` feature flagby Jakub Janků · 7b58e75a · Sep 21, 2026 · 18 filesMessage 80 · StrongInformational 15Details
Commit message · Jakub Janků

feat(core): add `ward` feature flag

Will be used to incrementally introduce WARD-related functionality into
the codebase, while excluding it from production FW builds:

- add `ward` feature to the firmware build
- add `trezorward` MicroPython module, backed by a new `ward` module in
`trezor_lib` that depends on the shared `trezor-ward` crate

[no changelog]

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

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 future WARD-related code can be developed safely behind the flag. There is no security vulnerability visible in this change.

Security candidatefeat(core): enable -Wsign-compareby cepetr · 1cc940a4 · Sep 21, 2026 · 47 filesMessage 57 · ThinLow 27Details
Commit message · cepetr

feat(core): enable -Wsign-compare

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

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 changes. A few spots also fix real logic bugs, such as treating a negative I/O return value as a successful byte count, or using the wrong argument index for an optional offset. These are defensive improvements rather than a single obvious exploit, but in embedded security code they can prevent subtle memory or parsing issues.

Security candidaterefactor(core): merge passphrase__access_hidden_wallet into passphrase__access_walletby Michal Kazda · 65402aec · Sep 21, 2026 · 3 filesMessage 62 · AdequateInformational 15Details
Commit message · Michal Kazda

refactor(core): merge passphrase__access_hidden_wallet into passphrase__access_wallet
[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 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-protected wallet. There is no change to security logic, cryptography, or how passphrases are handled.

Security candidaterefactor(core): merge passphrase__hidden_wallet into passphrase__walletby Michal Kazda · 7ce6887f · Sep 21, 2026 · 4 filesMessage 62 · AdequateInformational 15Details
Commit message · Michal Kazda

refactor(core): merge passphrase__hidden_wallet into passphrase__wallet
[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 controlauthentication path
AI analysis · Informational 15/100

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

Security candidatefix(core/bootloader): keep the full block length for block-0 retriesby tychovrahe · dc937ba2 · Sep 18, 2026 · 1 fileMessage 85 · StrongLow 45Details
Commit message · tychovrahe

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

Block 0 is the only block fetched in two requests: an initial
IMAGE_INIT_CHUNK_SIZE prefetch so the headers can be validated, then the
remainder. `chunk_requested` was serving three roles at once -- request size,
expected buffer fill, and the amount still owed on `remaining` -- and after the
header prefetch it holds only the remainder.

A retry then asked for that remainder from offset 0. The size check compared
`chunk_size` against `chunk_requested + read_offset`, i.e. the remainder against
itself, so it passed and `on_chunk` received a truncated block: the first
`chunk_limit - IMAGE_INIT_CHUNK_SIZE` bytes sitting at buffer offset 0. The hash
then necessarily mismatched, so the retry budget burned down and the upload
aborted. Block-0 retries could never succeed -- on T3W1 that is a 256 KB block,
where a transient BLE error is most likely.

Replace `chunk_requested` with `chunk_expected`: the bytes the buffer must hold
for the chunk to be complete, i.e. the whole block. It is the only field of its
kind left -- every request is derived from it, `remaining` is decremented by what
actually arrived, and `read_offset` goes back to being purely a buffer write
offset. The retry re-fetches the whole block from its start, and the size check
compares against what the buffer must actually hold.

No behavioural change on the success path: the bytes asked for at each request
site are the same as before, and what the old check computed is exactly what
`chunk_expected` now holds.

Alongside, in the same code: the image-size validation becomes an early guard in
`run_image_upload`, which is what guarantees a full init chunk to prefetch;
`confirmed` folds into `headers_parsed`, both having been set at the same point;
and the result dispatch becomes a switch.

The same bug is in wf_firmware_update.c on main; this fix is written against the
extracted engine but applies there unchanged.

[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 validationboot or update path
AI analysis · Low 45/100

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 bootloader tried to retry, it accidentally asked for only the leftover remainder but placed it at the start of the buffer. That produced a corrupted block, the hash check failed, every retry failed, and the firmware update aborted. The fix makes retries request the whole first block again from the beginning. There is no evidence this bug was exploitable by an attacker; it appears to be a reliability defect that could brick or stall legitimate updates, especially over Bluetooth on the T3W1 model.

Security candidaterefactor(core/bootloader): separate image upload and image checksby tychovrahe · caab7d9e · Sep 18, 2026 · 4 filesMessage 62 · AdequateInformational 12Details
Commit message · tychovrahe

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

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

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, while keeping the firmware-specific checks (signatures, versions, user confirmation, per-chunk hash checks) in wf_firmware_update.c. There is no direct evidence in the diff that this change fixes or introduces a security vulnerability; it appears to be a structural refactor to make the upload code reusable for other image types in the future.

Security candidatechore(core): remove unused trezor_lib/ui featureby cepetr · 1436fbc6 · Sep 18, 2026 · 8 filesMessage 57 · ThinInformational 15Details
Commit message · cepetr

chore(core): remove unused trezor_lib/ui feature

[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 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 security-relevant change to runtime behavior, no bug fix, and no vulnerability patch.

Security candidatefix(core/caesar): change confirm middle buttonby obrusvit · e231cc94 · Sep 17, 2026 · 2 filesMessage 57 · ThinLow 27Details
Commit message · obrusvit

fix(core/caesar): change confirm middle button

[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 path
AI analysis · Low 27/100

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 interaction for one specific screen (EIP-7702 authorizations) and updates the corresponding visual test snapshots. There is no direct evidence in the commit that this fixes a security vulnerability, but it could slightly reduce the chance of an accidental or coerced approval if the hold-to-confirm behavior was considered too easy to bypass or too confusing.

Security candidaterefactor(core): merge firmware and unix cargo packagesby cepetr · 6be32440 · Sep 17, 2026 · 25 filesMessage 62 · AdequateInformational 15Details
Commit message · cepetr

refactor(core): merge firmware and unix cargo packages

[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 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 accordingly. There is no user-facing change, no bug fix, and no security-relevant behavior change visible in the diff.

Security candidatechore(core): test aes gcm only if enabledby cepetr · 890aca93 · Sep 17, 2026 · 4 filesMessage 67 · AdequateInformational 15Details
Commit message · cepetr

chore(core): test aes gcm only if enabled

[no changelog]

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 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 being patched.

Security candidate chore(python, tests): add and update GNU licence headersby M1nd3r · 6dc781c2 · Sep 17, 2026 · 250 filesMessage 95 · StrongInformational 15Details
Commit message · M1nd3r

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

- Follow-up to: https://github.com/trezor/trezor-firmware/pull/5471.

[no changelog]

95/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✓ Links an issue, advisory, or supporting reference
Why it was queued
cryptography-sensitive pathseed or entropy pathsigning or wallet pathboot or update pathauthentication path
AI analysis · Informational 15/100

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.

Security candidaterefactor(core): move the multisig XPUB title into a translation templateby Michal Kazda · 6d69df16 · Sep 17, 2026 · 11 filesMessage 62 · AdequateInformational 15Details
Commit message · Michal Kazda

refactor(core): move the multisig XPUB title into a translation template
[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 15/100

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 security change.

Security candidaterefactor(core): render translated strings verbatim in layoutsby Michal Kazda · 162ed3a2 · Sep 17, 2026 · 5 filesMessage 77 · AdequateInformational 15Details
Commit message · Michal Kazda

refactor(core): render translated strings verbatim in layouts
- en.json adapted accordingly
[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 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.

Security candidatechore(core/bolt): remove unneeded `use` statementsby Roman Zeyde · a56f8c3d · Sep 17, 2026 · 2 filesMessage 62 · AdequateInformational 15Details
Commit message · Roman Zeyde

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

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

Security candidatefix(core): add missing colon in Tronby Michal Kazda · 739c2968 · Sep 17, 2026 · 4 filesMessage 57 · ThinInformational 18Details
Commit message · Michal Kazda

fix(core): add missing colon in Tron
[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 18/100

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 cryptographic operations, fund safety, or device security.

Security candidatefix(core): combine path/account with labelsby Michal Kazda · c66f6f4d · Sep 17, 2026 · 13 filesMessage 57 · ThinInformational 15Details
Commit message · Michal Kazda

fix(core): combine path/account with labels
[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 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 change visible in the code.

Security candidatebuild(core): exclude `FirmwareUI::confirm_fido()` in BTC-only buildsby Roman Zeyde · 93bd25fa · Sep 16, 2026 · 8 filesMessage 62 · AdequateInformational 18Details
Commit message · Roman Zeyde

build(core): exclude `FirmwareUI::confirm_fido()` in BTC-only builds

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

This commit is a build cleanup, not a security fix. It makes sure the FIDO (WebAuthn/passwordless login) confirmation screen is only compiled into the universal firmware that supports altcoins and FIDO, and is left out of the smaller Bitcoin-only firmware build. Previously the code was included in all builds but returned a 'not implemented' error on Bitcoin-only devices. The change reduces unused code and build size; it does not patch a vulnerability or change runtime behavior in a security-relevant way.

Security candidatechore: bump versionsby Roman Zeyde · 18da22f8 · Sep 15, 2026 · 12 filesMessage 63 · AdequateInformational 15Details
Commit message · Roman Zeyde

chore: bump versions

$ tools/bump-version.py core 2.12.6
$ tools/bump-version.py core/embed/projects/secmon 1.0.15
$ tools/bump-version.py core/embed/projects/prodtest 0.3.10
wrote 357 error codes across 25 modules to /home/rzeyde/src/trezor-firmware/core/embed/projects/prodtest/error_codes.json

[no changelog]

63/100 · AdequateMessage clarity
✓ Subject identifies a change✓ Uses a recognizable type or scope✓ Provides detailed explanatory context
Why it was queued
signing or wallet pathboot or update path
AI analysis · Informational 15/100

This commit only updates version numbers and translation metadata. It changes no actual code, logic, or security behavior. There is no security issue here.

Security candidatechore(core): production feature cleanupby cepetr · e122517a · Sep 14, 2026 · 2 filesMessage 57 · ThinLow 26Details
Commit message · cepetr

chore(core): production feature cleanup

[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 path
AI analysis · Low 26/100

This is a small build-configuration cleanup in the Trezor firmware. It changes which internal feature flag the 'production' build mode depends on, removing one old reference and switching another. There is no direct evidence in the commit that this fixes a security vulnerability; it appears to be routine maintenance to keep production builds using the correct set of features.

Security candidaterefactor(core/sys): make writing bootargs a privilege, not a conventionby tychovrahe · 69d3435c · Sep 14, 2026 · 7 filesMessage 97 · StrongModerate 60Details
Commit message · tychovrahe

refactor(core/sys): make writing bootargs a privilege, not a convention

The smcall surface exposed a raw bootargs setter, letting unprivileged code name
any boot command. It had no user -- firmware goes through the reboot_* calls in
bootutils.h, each of which fixes its own -- so remove it rather than filter it.
The dispatch's fatal default is then the enforcement.

Make the rule structural too: bootargs_set is declared only under SECURE_MODE,
and system_emergency_rescue is compiled only where bootargs can be written. It
linked before only because --gc-sections dropped it as unreferenced.

[no changelog]

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

97/100 · StrongMessage clarity
✓ Specific, 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 · Moderate 60/100

This commit removes a low-level interface that let any software component tell the device what to do on its next reboot. The change makes reboot control a privileged operation only, so unprivileged code can no longer pick arbitrary boot commands. It is a hardening/refactoring change rather than a documented fix for a specific active bug.

Security candidatedocs(crypto): reproduce third-party license texts in crypto/LICENSE (#7529)by petrsusil · eaffadba · Sep 14, 2026 · 8 filesMessage 93 · StrongInformational 15Details
Commit message · petrsusil

docs(crypto): reproduce third-party license texts in crypto/LICENSE (#7529)

* docs(crypto): reproduce third-party license texts in crypto/LICENSE

Several components of crypto are not covered by the MIT license at the top
of crypto/LICENSE, and some of them (Gifford's SHA-2, the Monero files,
Gladman's AES) require their copyright notice and disclaimer to accompany
binary distributions as well as source. Until now that text existed only in
the individual file headers, which a binary consumer never receives.

Append to crypto/LICENSE a verbatim reproduction of every third-party
license, the files each one covers, the additional copyright holders under
the MIT terms, the public domain / CC0 components, and the GPL-licensed
files. Point at it from LICENSE.md and state that it must be distributed
together with binaries built from crypto.

No code changes; the existing MIT block is unmodified.

* chore: change licence of first-party code from GPL to MIT

(cherry picked from commit e7be2cc8cfffe6906ab7cb96958e8e67d88372f2)

* docs(crypto): add missing third-party attributions to crypto/LICENSE

Add entries for files whose authorship was missing or covered by an
over-broad glob: Dusan Klinec's monero sources, aes/aestst.c under
Brian Gladman's older non-endorsement licence variant, Andrew Moon's
poly1305-donna, and D. J. Bernstein's eSTREAM ECRYPT headers. Narrow
the chacha20poly1305/ entry to the files actually written by Will Glozer.

(cherry picked from commit e7a3c82d6d99548f428a45d5d6caf108795463ac)

* chore: fix typos in licences

(cherry picked from commit f23f9b659e3520ddd962c29b3b59e67a3d30a318)

---------

Co-authored-by: Ondřej Vejpustek <ondrej.vejpustek@satoshilabs.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
cryptography-sensitive path
AI analysis · Informational 15/100

This commit is purely legal and administrative housekeeping. It adds missing third-party copyright notices and license texts to the crypto/LICENSE file, fixes a typo in a few license headers, and changes the stated license of some first-party files from GPL to MIT. No executable code was changed, so it cannot introduce a security vulnerability or fix one.