TZ
← All projectsTrezor

Trezor firmware

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

BitcoinHardware walletsNormal
Repository coverage

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

1132security candidates374second-pass queue2934AI analyses
281commits · 30 days
709commits · 60 days
1660commits · 180 days
2693commits · 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
648Strong · 80–100
1555Adequate · 60–79
1039Thin · 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 Zeyde679216622372
obrusvit25896236364
PrisionMike10866106272
Andrew Kozlik833481268
Petr Susil1048287
Jakub Janků591838180
Martin Pastyřík26823173
cepetr264106222059
M1nd3r24689227071
Ioan Bizău23076230059
Lukas Bielesch856784067
Analysis record

Published AI watches

Last scanned 27 minutes ago

Informational 15 AI analysisMessage 85 · Strong
TZ TrezorTrezor firmware BitcoinHardware wallets

build(crypto): update `crypto/Makefile` to use `-std=gnu11`

This commit simply changes the C language standard version used to compile the crypto library from GNU C99 to GNU C11. It is a routine build-system update with no security-relevant code change and no functional impact on its own.

fafc7d72by Roman Zeyde+1−11 file
No security note in commit
Low 46 AI analysisMessage 93 · Strong
TZ TrezorTrezor firmware BitcoinHardware wallets

chore(crypto): ensure `secp256k1_context` alignment

This commit fixes how a memory buffer used by the secp256k1 cryptographic library is aligned in memory. The library requires the buffer to be aligned for any data type, but the previous code used a plain byte array, which could be misalign…

Memory alignment hardening for cryptographic context bufferUndefined behavior mitigation in secp256k1-zkp preallocated context creationPotential platform-dependent misalignment risk removed
93860f05by Roman Zeyde+7−11 file
No security note in commit
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
Informational 11 AI analysisMessage 72 · Adequate
TZ TrezorTrezor firmware BitcoinHardware wallets

chore(core): update UI fixtures

This commit only updates the expected screenshots (UI fixtures) used in automated tests. The change reflects that multisig account names are now shown on screen during signing for Bitcoin, Bitcoin Cash and Zcash. There is no code change, n…

247390cbby Petr Susil+1873−5891 file
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
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/ethereum): integrate EIP-7702 delegation into `EthereumSignTxEIP1559`by Roman Zeyde · 9a044adb · Aug 12, 2026 · 4 filesMessage 90 · StrongLow 36Details
Commit message · Roman Zeyde

feat(core/ethereum): integrate EIP-7702 delegation into `EthereumSignTxEIP1559`

For now, let's support at most one EIP-7702 authorization tuple per transaction.

The feature is still experimental, so no changelog entry is added.

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

This commit adds experimental support for a new Ethereum feature (EIP-7702) that lets an account temporarily delegate control to a smart contract. The change is feature work, not a bug fix, and includes several safety guardrails: it is blocked unless experimental features are enabled, requires relaxed safety checks for authorizations (but not revocations), rejects cross-chain delegation, and only allows known delegate addresses. There is no direct evidence in the commit that this fixes a security vulnerability.

Security candidaterefactor(core/ethereum): don't unpack Ethereum signaturesby Roman Zeyde · 5361917d · Aug 11, 2026 · 2 filesMessage 100 · StrongInformational 15Details
Commit message · Roman Zeyde

refactor(core/ethereum): don't unpack Ethereum signatures

```
tests/device_tests/ethereum/test_signtx.py: 176 warnings
/home/rzeyde/src/trezor-firmware/tests/device_tests/ethereum/test_signtx.py:139: DeprecationWarning: Ethereum signature is a dataclass (`SignTxResult`), not a tuple.
sig_v, sig_r, sig_s = ethereum.sign_tx(

tests/device_tests/ethereum/test_signtx.py: 636 warnings
/home/rzeyde/src/trezor-firmware/tests/device_tests/ethereum/test_signtx.py:96: DeprecationWarning: Ethereum signature is a dataclass (`SignTxResult`), not a tuple.
sig_v, sig_r, sig_s = ethereum.sign_tx(

tests/device_tests/ethereum/test_signtx.py: 64 warnings
/home/rzeyde/src/trezor-firmware/tests/device_tests/ethereum/test_signtx.py:258: DeprecationWarning: Ethereum signature is a dataclass (`SignTxResult`), not a tuple.
sig_v, sig_r, sig_s = ethereum.sign_tx_eip1559(

tests/device_tests/ethereum/test_signtx.py: 24 warnings
/home/rzeyde/src/trezor-firmware/tests/device_tests/ethereum/test_signtx.py:685: DeprecationWarning: Ethereum signature is a dataclass (`SignTxResult`), not a tuple.
sig_v, sig_r, sig_s = ethereum.sign_tx_eip1559(

tests/device_tests/ethereum/test_signtx.py: 12 warnings
/home/rzeyde/src/trezor-firmware/tests/device_tests/ethereum/test_signtx.py:471: DeprecationWarning: Ethereum signature is a dataclass (`SignTxResult`), not a tuple.
sig_v, sig_r, sig_s = ethereum.sign_tx_eip1559(
```

[no changelog]

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

This commit is a minor cleanup in Trezor's Python test and command-line code. It stops treating Ethereum transaction signatures as plain tuples (v, r, s) and instead uses a named data class (SignTxResult). The only functional code change is converting the data class back to a tuple in one place so existing callers keep working. There is no security bug being fixed here.

Security candidatefix(legacy): align coinjoin behavior with coreby Andrew Kozlik · e1463ec0 · Aug 11, 2026 · 5 filesMessage 85 · StrongLow 35Details
Commit message · Andrew Kozlik

fix(legacy): align coinjoin behavior with core

An authorization granted by DoPreauthorized was consumed by whatever
message arrived next, and the same applied to a path unlocked by
UnlockPath. Core allows a coinjoin preauthorization to be used only by
SignTx and GetOwnershipProof, and an unlocked path only by GetAddress,
GetPublicKey and SignTx. Apply the same allowlists by dropping the
authorization before dispatching a message it does not apply to, which
reproduces core's behavior of aborting the workflow and reprocessing the
message as a new one.

This is defense in depth rather than a fix for a reachable issue. The
authorization is stored per session, so whoever can use it is the host
that ran AuthorizeCoinJoin, which already holds the SLIP-25 xpub from a
confirmed UnlockPath. Without the allowlist a coinjoin authorization
additionally let GetAddress and GetOwnershipId reach the SLIP-25
external chain without the coinjoin account access confirmation. The
xpub was never exposed, as GetPublicKey checks unlock_path directly.

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

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
access controlboot or update pathauthentication path
AI analysis · Low 35/100

This commit tightens access controls in the older Trezor firmware (legacy) for a privacy feature called CoinJoin. Previously, after a host app was pre-authorized, any next message could consume that authorization. Now only specific message types (SignTx and GetOwnershipProof for preauthorization; GetAddress, GetPublicKey, and SignTx for an unlocked path) can use it. The vendor describes this as defense in depth, not a fix for a directly reachable attack, because the host that could trigger it already has related access. Still, without the change, a preauthorization could let GetAddress or GetOwnershipId touch the CoinJoin account without showing the user the usual confirmation screen.

AI review queuedfix(core): nostr string serializationby Martin Milata · 1239c9e1 · Aug 11, 2026 · 3 filesMessage 57 · ThinModerate 60Details
Commit message · Martin Milata

fix(core): nostr string serialization

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

This commit fixes a bug in how the Trezor hardware wallet builds Nostr event signatures. Previously, special characters in the event content and tags (like quotes, backslashes, tabs, and newlines) were not properly escaped when creating the JSON string that gets signed. This could cause the device to compute a signature that does not match what standard Nostr software expects, or in some cases could allow a malicious app to craft content that changes the meaning of what the user approved on screen versus what is actually signed. The fix adds proper JSON string escaping for both the main content and tag strings.

Security candidatefix(legacy): abort on coinjoin coin-name mismatchby Andrew Kozlik · afc6ebe3 · Aug 11, 2026 · 3 filesMessage 80 · StrongLow 34Details
Commit message · Andrew Kozlik

fix(legacy): abort on coinjoin coin-name mismatch

Enforces a check aligning the behavior with core. The missing check did
not yield anything an attacker couldn't get from a legitimate coinjoin
round on the authorized coin. The inputs signed are always from the
authorized SLIP-25 account regardless of what coin_name claims.

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

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
explicit security languagesigning or wallet pathboot or update pathauthentication path
AI analysis · Low 34/100

This commit fixes a bug in the older Trezor firmware (legacy) where a CoinJoin signing session would not be properly aborted if the requested coin name did not match the one in the prior authorization. Before the fix, the device sent an error message but continued processing, which could allow a malicious or mismatched transaction to proceed. The fix adds an explicit abort and return so the signing stops immediately, matching the behavior of newer Trezor firmware (core). The commit message downplays the practical risk, noting an attacker could not gain more than from a legitimate CoinJoin on the authorized coin.

Security candidatechore(core/ethereum): drop `EthereumSignAuth7702` and its handlerby Roman Zeyde · bd6186c4 · Aug 11, 2026 · 17 filesMessage 77 · AdequateInformational 15Details
Commit message · Roman Zeyde

chore(core/ethereum): drop `EthereumSignAuth7702` and its handler

It will be integrated into `EthereumSignTxEIP1559`.

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

This commit removes an Ethereum feature called EthereumSignAuth7702 from the Trezor firmware and related software. It deletes the message types, the signing handler, the command-line tool, and the tests. The commit message says this feature will later be merged into EthereumSignTxEIP1559. There is no security fix here—this is a routine cleanup/refactoring change.

Security candidatechore(crypto): add hdnode key verificationby M1nd3r · fe2680cd · Aug 11, 2026 · 4 filesMessage 82 · StrongModerate 59Details
Commit message · M1nd3r

chore(crypto): add hdnode key verification

[no changelog]

Assisted-by: Claude, Opus 5

82/100 · StrongMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Uses a recognizable type or scope✓ Provides an explanatory body✓ Mentions testing or verification
Why it was queued
defensive validationcryptography-sensitive path
AI analysis · Moderate 59/100

This commit adds validation checks to Trezor's cryptocurrency wallet code to make sure private and public keys are mathematically valid before they are used. Previously, some code paths accepted invalid keys (such as a private key of zero, a private key equal to or larger than the curve order, or a public key that is not actually a point on the elliptic curve). Using invalid keys could in theory lead to incorrect cryptographic operations or weaken security. The change also fixes a missing check for unknown curve names during deserialization, which could have caused the code to read from a null pointer.

AI review queuedfix(solana): fall back to generic UI for more ALT referencesby Jakub Janků · cd6e7596 · Aug 11, 2026 · 4 filesMessage 93 · StrongModerate 61Details
Commit message · Jakub Janků

fix(solana): fall back to generic UI for more ALT references

transfer_token_instruction.token_mint and
transfer_token_instruction.owner can be Address Lookup Table (ALT)
references. Previously, the predefined token transfer flow
would misleadingly display just the ALT address. The user thus
couldn't distinguish an actual address from an ALT reference.
Now, the handler falls back to the generic ALT-aware confirmation UI.

537b34f847f8e3f97e4444be9f8f50706ac34075 added a check for
transfer_token_instruction.destination_account, but omitted
the token_mint and owner fields which can be ALT references
as well.

Partially fixes: https://github.com/satoshilabs/trezor-firmware/issues/325

(cherry picked from commit b992a24a93d77066b3ac2fec1dae7129d09427d1)

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

This update fixes a display bug in Trezor's Solana token-transfer confirmation screen. When a token transfer uses Solana Address Lookup Tables (ALTs) to refer to the token mint or the owner account, the device previously showed the lookup-table address as if it were the real account address. That could trick a user into approving a transfer they did not fully understand. The fix makes these cases fall back to a more cautious, generic confirmation screen that clearly marks ALT references.

Security candidatetest(core/ethereum): adjust EIP-7702 test vectorsby Roman Zeyde · d5dea04b · Aug 11, 2026 · 3 filesMessage 90 · StrongInformational 15Details
Commit message · Roman Zeyde

test(core/ethereum): adjust EIP-7702 test vectors

- rename `nonce` to `tuple_nonce` since it's not the same as the tx nonce
- set `to_address` to `m/44'/60'/0'/0/0`-derived address
- test non-empty calldata, empty destination and payment request
- update `chain_id` 0 error message
- add mainnet test vectors

[no changelog]

90/100 · StrongMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Uses a recognizable type or scope✓ Provides detailed explanatory context✓ Mentions testing or verification
Why it was queued
fuzzing or regression evidencesigning or wallet pathauthentication path
AI analysis · Informational 15/100

This commit only updates test data files for Ethereum EIP-7702 (account abstraction) signing. It renames a test field, adds more test cases, updates expected error messages, and adds mainnet transaction test vectors. There are no changes to the actual firmware or production code, so it does not introduce or fix a security vulnerability in the shipped product.

AI review queuedfix(solana): fall back to generic UI if stake lockup setby Jakub Janků · 5a530509 · Aug 11, 2026 · 2 filesMessage 93 · StrongModerate 60Details
Commit message · Jakub Janků

fix(solana): fall back to generic UI if stake lockup set

Prior to this change, the predefined staking flow allowed
lockup.custodian = _SYSTEM_PROGRAM_ID, lockup.epoch > 0, and
lockup.unix_timestamp > 0. However, these values were not displayed
to the user. This could lead to the user loosing access to their
funds if the time values were set to distant future.

The change should not modify the behavior when working with Suite since
it generates init instructions with lockup.epoch=0 and
lockup.unix_timestamp=0:

https://github.com/trezor/trezor-suite/blob/7de6f3e/networks/solana/network-solana/src/runtime/stakingUtils.ts#L104-L118

Partially fixes: https://github.com/satoshilabs/trezor-firmware/issues/325

(cherry picked from commit 5a12ad231741e0406f9d7f7a0b2e15a7237f0bbd)

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

This update fixes a security gap in Trezor's handling of Solana staking. Previously, if someone set up a stake account with a future unlock date (a 'lockup') using values that Trezor's normal flow didn't expect, the device would silently approve the transaction without showing those lockup details on screen. That could trap a user's funds until a far-future date. The fix makes Trezor fall back to a more detailed, generic confirmation screen whenever a lockup is present, so the user can see and approve the terms explicitly.

Security candidatechore(vendor): update secp256k1-zkp to v0.7.1by M1nd3r · 0904b41b · Aug 11, 2026 · 1 fileMessage 88 · StrongInformational 15Details
Commit message · M1nd3r

chore(vendor): update secp256k1-zkp to v0.7.1

- Updated from v0.7.0.
- Pinned to release/commit: https://github.com/bitcoin-core/secp256k1/releases/tag/v0.7.1
- Changelog: https://github.com/bitcoin-core/secp256k1/blob/master/CHANGELOG.md#071---2026-01-26
- Changes: https://github.com/bitcoin-core/secp256k1/compare/v0.7.0...v0.7.1

88/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
Why it was queued
cryptography-sensitive path
AI analysis · Informational 15/100

This commit only updates a bundled cryptographic library (secp256k1-zkp) from version 0.7.0 to 0.7.1. The actual code change is a one-line update to the submodule pointer. The commit message does not describe any security fix, and no security-relevant details are visible in the diff itself.

Security candidatechore: remove libtropic's pin to develop branchby M1nd3r · 8290eeef · Aug 11, 2026 · 1 fileMessage 57 · ThinInformational 15Details
Commit message · M1nd3r

chore: remove libtropic's pin to develop branch

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

This commit removes a single line from the project's Git submodule configuration. It stops pinning the libtropic submodule to the 'develop' branch, meaning the project will now use the submodule's default branch (likely 'main' or 'master'). There is no code change, no bug fix, and no direct security issue visible in the diff itself.

Security candidatechore(core/embed): clear temporary buffer across Optiga/Tropic callsby Roman Zeyde · 01ebda93 · Aug 10, 2026 · 1 fileMessage 70 · AdequateLow 37Details
Commit message · Roman Zeyde

chore(core/embed): clear temporary buffer across Optiga/Tropic calls

We don't need to keep Optiga/Tropic-generated entropy
after XOR-ing it into `dest`.

In addition, it prevents the "Tropic" for-loop from "undoing" the
"Optiga" for-loop result, if `tropic_random_buffer()` somehow succeeds
without modifying its buffer.

The additional `memzero` calls performance impact should be small
compared to Optiga/Tropic communication latency.

[no changelog]

70/100 · AdequateMessage 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! Contains work-in-progress language
Why it was queued
entropy or randomnessseed or entropy path
AI analysis · Low 37/100

This is a hardening change for the random number generator inside Trezor hardware wallets. It makes sure that temporary memory holding secret random values from the Optiga and Tropic security chips is wiped immediately after use, rather than only once at the end. It also fixes a subtle edge case where a buggy Tropic chip call could leave old Optiga randomness in the temporary buffer, potentially weakening the final random output.

Security candidatefeat(core/bolt): implement Rust select_menuby obrusvit · 147f4c60 · Aug 10, 2026 · 4 filesMessage 72 · AdequateInformational 15Details
Commit message · obrusvit

feat(core/bolt): implement Rust select_menu

- implement FirmwareUI::select_menu
- not used in flows yet

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

This commit adds a new Rust-based on-screen menu component for the Trezor hardware wallet's Bolt user interface. It is a straightforward feature implementation and does not fix or introduce any obvious security issue. The component is not yet wired into any user-facing flows.

AI review queuedfeat(nfc): Update RFAL library to version 4.2.0 due to added presence check on ISO-DEP layerby Ludek Farsky · 6e2dbb91 · Aug 10, 2026 · 62 filesMessage 74 · AdequateLow 32Details
Commit message · Ludek Farsky

feat(nfc): Update RFAL library to version 4.2.0 due to added presence check on ISO-DEP layer

[no changelog]

74/100 · AdequateMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Uses a recognizable type or scope✓ Explains rationale or failure mode! No meaningful explanatory body
Why it was queued
second-pass: unusually broad change
AI analysis · Low 32/100

This commit upgrades the third-party STMicroelectronics NFC middleware (RFAL) inside Trezor firmware from version 4.0.2 to 4.2.0. The stated reason is to add a 'presence check' in the ISO-DEP layer, which helps the device verify that an NFC card is still nearby during a transaction. The diff is almost entirely a bulk import of ST's updated library files, so the actual security-relevant changes are not visible in the commit itself. There is no Trezor changelog entry and no CVE or advisory referenced.

Security candidatefeat(common/protobuf): integrate EIP-7702 delegation into `EthereumSignTxEIP1559`by Roman Zeyde · b0932cd4 · Aug 8, 2026 · 5 filesMessage 62 · AdequateInformational 14Details
Commit message · Roman Zeyde

feat(common/protobuf): integrate EIP-7702 delegation into `EthereumSignTxEIP1559`

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

This commit only changes the data format definitions (protobuf messages) used to talk to a Trezor hardware wallet. It adds new optional fields for an upcoming Ethereum feature called EIP-7702, which lets an account temporarily act like a smart contract. The commit does not contain any actual signing logic, user confirmation screens, or security checks. Because it is just a protocol definition update, it does not by itself create a vulnerability, but it is a building block for future code that will handle these authorizations.

Security candidatetest(core/ethereum): EIP-7702 tuple nonce must be non-zeroby Roman Zeyde · 76cd2ed4 · Aug 8, 2026 · 2 filesMessage 72 · AdequateInformational 15Details
Commit message · Roman Zeyde

test(core/ethereum): EIP-7702 tuple nonce must be non-zero

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

This commit only changes test data and expected screen fingerprints for Trezor's Ethereum EIP-7702 signing tests. It replaces one test case that used a nonce of 0 with the same scenario using a nonce of 67, because the real-world protocol rule requires the tuple nonce to be non-zero. No production firmware code is modified, so this commit does not fix or introduce a security vulnerability in shipped devices.

AI review queuedtest(core): drop an unused parameter of `make_payment_request()`by Roman Zeyde · 6dd19fdc · Aug 8, 2026 · 8 filesMessage 72 · AdequateInformational 15Details
Commit message · Roman Zeyde

test(core): drop an unused parameter of `make_payment_request()`

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

This commit only cleans up test code by removing an unused 'session' argument from a helper function used in automated tests. It does not change the actual Trezor firmware or any code that runs on the device, so it has no security impact for users.

Security candidatefeat(core): report nRF SMP-push progressby tychovrahe · 397eab9e · Aug 7, 2026 · 5 filesMessage 80 · StrongInformational 15Details
Commit message · tychovrahe

feat(core): report nRF SMP-push progress

Thread a per-chunk progress callback through upload_image/smp_upload_app_image; add nrf_update_with_progress (nrf_update delegates with NULL, so the coreapp syscall ABI is unchanged).

[no changelog]

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

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 progress bar feature for firmware updates sent to the nRF wireless chip inside Trezor devices. It threads a callback function through the upload code so the bootloader can show how much of the image has been transferred. The existing public syscall entry point is deliberately left unchanged, so normal app behavior is unaffected. There is no security fix or vulnerability here.

Security candidatedocs(core): document rng_fill_buffer_strong_time()by Andrew Kozlik · c5687f76 · Aug 7, 2026 · 1 fileMessage 67 · AdequateInformational 15Details
Commit message · Andrew Kozlik

docs(core): document rng_fill_buffer_strong_time()

[no changelog]

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

67/100 · AdequateMessage clarity
✓ Specific, descriptive subject✓ Uses a recognizable type or scope✓ Provides an explanatory body
Why it was queued
entropy or randomnessseed or entropy path
AI analysis · Informational 15/100

This commit only adds a plain-English comment explaining an existing function that estimates how long a random-number generation call takes. No code behavior changed, and nothing was fixed or added that affects security.

Security candidatechore: guard against insecure PRNG in bare-metal buildby Andrew Kozlik · 4f8f4586 · Aug 7, 2026 · 1 fileMessage 77 · AdequateLow 44Details
Commit message · Andrew Kozlik

chore: guard against insecure PRNG in bare-metal build

[no changelog]

Co-Authored-By: Claude Fable 5 <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
entropy or randomnesscryptography-sensitive path
AI analysis · Low 44/100

This commit adds compile-time guards to prevent an intentionally insecure random-number generator from being accidentally included in firmware that runs directly on Trezor hardware. It does not fix an active bug, but it adds safety rails so a future build misconfiguration cannot silently ship weak randomness to real devices.

Security candidatebuild(core/io): move headers to the right placeby matejcik · cf3597e9 · Aug 7, 2026 · 4 filesMessage 57 · ThinInformational 15Details
Commit message · matejcik

build(core/io): move headers to the right place

after smp had been moved to io crate

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

This commit is a routine build cleanup. It moves a header file to the correct folder and updates two source files to include it from the new location. There is no security-relevant change here.

AI review queuedbuild(core): drop stale trezor_lib dependency from kernelby matejcik · 7e64fef5 · Aug 7, 2026 · 3 filesMessage 62 · AdequateInformational 12Details
Commit message · matejcik

build(core): drop stale trezor_lib dependency from kernel

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
second-pass: broader security terminology
AI analysis · Informational 12/100

This is a routine build cleanup in the Trezor firmware kernel. It removes an unused Rust library dependency called 'trezor_lib' and replaces it with a reference to another module ('io') to ensure certain Rust symbols are still included during linking. There is no indication this change fixes or introduces a security vulnerability.

Security candidatefeat(core/rust): move nrf and smp out of trezor_libby matejcik · 53761741 · Aug 7, 2026 · 31 filesMessage 77 · AdequateInformational 15Details
Commit message · matejcik

feat(core/rust): move nrf and smp out of trezor_lib

* moves irq to sys::irq
* moves from_c_str and from_c_array to rtl::util
* moves smp and trezorhal::nrf to io

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

This commit is a straightforward internal code reorganization. It moves several low-level hardware communication modules (NRF radio, SMP firmware-update protocol, IRQ utilities, and C-string helpers) into different Rust crates so the project structure is cleaner. No security vulnerability is introduced or fixed; it is purely a refactoring change.

Security candidatebuild(core): propagate emulator feature from projectsby matejcik · 5642074c · Aug 7, 2026 · 4 filesMessage 85 · StrongInformational 15Details
Commit message · matejcik

build(core): propagate emulator feature from projects

left out:
* firmware, which removes emulator feature instead
* kernel, whose dep on trezor_lib will be removed in a followup PR

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 is a build-system cleanup for the Trezor firmware's Rust code. It changes how the 'emulator' feature flag is passed between different software components. The firmware project no longer supports the emulator feature (which makes sense because real firmware runs on hardware, not an emulator), while the bootloader, prodtest, and core Rust library now propagate the feature more consistently. There is no indication of a security vulnerability in this change.