TZ
← All projectsTrezor

Trezor firmware

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

BitcoinHardware walletsNormal
Repository coverage

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

921security candidates311second-pass queue2660AI analyses
322commits · 30 days
549commits · 60 days
1358commits · 180 days
2638commits · 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
478Strong · 80–100
1321Adequate · 60–79
863Thin · 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.
tychovrahe292104292461
Roman Zeyde577181575272
PrisionMike945994273
Andrew Kozlik712470265
obrusvit21376213164
Jakub Janků22919182
Martin Pastyřík23823173
cepetr19682196059
Ioan Bizău23076230059
M1nd3r20772207071
Lukas Bielesch846784067
Martin Milata17446174063
Analysis record

Published AI watches

Last scanned 7 minutes ago

Low 27 AI analysisMessage 93 · Strong
TZ TrezorTrezor firmware BitcoinHardware wallets

refactor(core): digest EIP-1559/EIP-7702 magic without RLP encoding

This commit is a small internal cleanup in Trezor's Ethereum signing code. It changes how two special 'magic' bytes (the transaction type markers for newer Ethereum transaction formats) are fed into the cryptographic hash. Previously the c…

Refactor of cryptographic hashing path for Ethereum transaction signingRemoval of implicit assumption that RLP encodes small integers as single bytesChange affects EIP-1559 and EIP-7702 transaction type markers
2362bc6fby Roman Zeyde+6−32 files
No security note in commit
Informational 15 AI analysisMessage 98 · Strong
TZ TrezorTrezor firmware BitcoinHardware wallets

test(core): test RLP self-encoding bytestrings

This commit only adds a new unit test to the Trezor firmware codebase. It verifies that very short Ethereum RLP-encoded byte strings and small positive integers encode to themselves, which is a known property of the RLP specification. No p…

41538733by Roman Zeyde+16−01 file
No security note in commit
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 15 AI analysisMessage 62 · Adequate
TZ TrezorTrezor firmware BitcoinHardware wallets

refactor(xtask): rename ProjectProfile to ProjectConfig

This commit is a simple rename from 'ProjectProfile' to 'ProjectConfig' in two Rust source files. It only changes variable names, struct names, and error messages. There is no change to program logic, security behavior, or how data is hand…

581b37bcby cepetr+18−182 files
No security note in commit
Informational 15 AI analysisMessage 47 · Thin
TZ TrezorTrezor firmware BitcoinHardware wallets

refactor(xtask): introduce ResolvedBuildArgs

This commit is a straightforward internal code refactor in Trezor's build tooling. It introduces a new ResolvedBuildArgs structure that centralizes default values for command-line build options before they are used. There is no change to u…

c24d1be8by cepetr+99−295 files
No security note in commit
Informational 15 AI analysisMessage 57 · Thin
TZ TrezorTrezor firmware BitcoinHardware wallets

refactor(xtask): make build args tristate

This commit is a straightforward internal refactor of the Trezor firmware build tool's command-line argument handling. It changes many on/off flags from plain booleans to optional booleans so they can explicitly be set to true, false, or l…

271e249aby cepetr+57−561 file
No security note in commit
Informational 15 AI analysisMessage 57 · Thin
TZ TrezorTrezor firmware BitcoinHardware wallets

refactor(xtask): introduce build options

This commit is a straightforward internal code reorganization in Trezor's build tooling. It moves build-option definitions from one Rust source file to a new module and adds the ability to load those options from a configuration file. Ther…

75085e2aby cepetr+275−2007 files
No security note in commit
Informational 15 AI analysisMessage 57 · Thin
TZ TrezorTrezor firmware BitcoinHardware wallets

feat(xtask): introduce build presets

This commit is a developer tooling change for the Trezor firmware build system. It introduces 'build presets'—named configuration bundles stored in TOML files—so developers can select common build settings with a single command-line flag i…

eefe8f7fby cepetr+397−419 files
No security note in commit
Informational 15 AI analysisMessage 62 · Adequate
TZ TrezorTrezor firmware BitcoinHardware wallets

feat(xtask): upgrade manifest.yaml for tf-tools 0.3.0

This commit is a routine update to a build-system manifest file used by Trezor's internal tooling. It reorganizes and re-labels feature flags (for example, moving options between 'Features', 'Debugging', and 'Signing' groups and simplifyin…

57b28b89by cepetr+86−1351 file
No security note in commit
Informational 15 AI analysisMessage 62 · Adequate
TZ TrezorTrezor firmware BitcoinHardware wallets

feat(core): add tf-tools 0.3.1+ configuration file

This commit adds a single configuration file for a Trezor developer tool (a VS Code extension). It only points the tool to existing folders in the repository and contains no executable code, no secrets, and no changes to firmware behavior.…

e554f618by cepetr+8−01 file
No security note in commit
Informational 15 AI analysisMessage 62 · Adequate
TZ TrezorTrezor firmware BitcoinHardware wallets

refactor(xtask): rename ResolvedBuild to ResolvedBuildFeatures

This commit is a simple internal code cleanup: it renames a Rust data structure called ResolvedBuild to ResolvedBuildFeatures and updates the places that use it. There are no functional changes, no security fixes, and no changes to how the…

aaa2780bby cepetr+5−52 files
No security note in commit
Informational 15 AI analysisMessage 57 · Thin
TZ TrezorTrezor firmware BitcoinHardware wallets

fix(core): fix up clippy warnings in storage.rs

This is a tiny code cleanup commit that replaces two calls to `ptr::null()` with Rust's `unwrap_or_default()` to silence automated Clippy lint warnings. It does not change what value is produced (still a null pointer when no salt is provid…

62354461by cepetr+2−21 file
No security note in commit
Informational 15 AI analysisMessage 47 · Thin
TZ TrezorTrezor firmware BitcoinHardware wallets

refactor(xtask): simplify dependencies

This commit is a straightforward internal code cleanup in Trezor's build tooling. It moves a data structure and two helper methods from one Rust source file to another and updates callers accordingly. There is no change to user-facing beha…

6268349fby cepetr+9−193 files
No security note in commit
Informational 15 AI analysisMessage 47 · Thin
TZ TrezorTrezor firmware BitcoinHardware wallets

docs: add xtask documentation

This commit only adds documentation. It updates the table of contents and adds a new markdown page plus a diagram explaining the project's 'xtask' build helper. No code, build scripts, or firmware logic was changed, so it cannot introduce …

4879dababy cepetr+296−03 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
Repository ledger

Explore captured commits

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

Security candidaterefactor(core): move board_capabilities to sec layerby cepetr · 8d4546a8 · Jan 13, 2026 · 15 filesMessage 62 · AdequateInformational 15Details
Commit message · cepetr

refactor(core): move board_capabilities to sec layer

[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 pure code reorganization: it moves the board_capabilities module from the util directory to the sec directory and updates all include paths and build files accordingly. No functionality, logic, or security behavior changes. It is a refactoring with no user-visible or security-relevant effect.

Security candidaterefactor(core): move notify module to io layerby cepetr · 5b63706d · Jan 13, 2026 · 15 filesMessage 57 · ThinInformational 15Details
Commit message · cepetr

refactor(core): move notify module to io layer

[no changelog]

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

This commit is a pure code reorganization: it moves the 'notify' module from one directory to another and updates all references. No functionality was changed, no bugs were fixed, and no security behavior was altered.

Security candidaterefactor(core): remove circular deps between rtl and sysby cepetr · 1a37ddf1 · Jan 13, 2026 · 26 filesMessage 62 · AdequateInformational 15Details
Commit message · cepetr

refactor(core): remove circular deps between rtl and sys

[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 code cleanup. It moves the logging header file from one directory to another and splits out a system-exit declaration to remove circular dependencies between two low-level software layers. No security vulnerability is introduced or fixed; the functionality of the code remains the same.

Security candidaterefactor(core): move scm_revision to rtl layerby cepetr · 0fb65da6 · Jan 13, 2026 · 12 filesMessage 57 · ThinInformational 15Details
Commit message · cepetr

refactor(core): move scm_revision to rtl layer

[no changelog]

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

This commit is a simple internal code reorganization: it moves the source-code-management revision identifier (a build-time constant that records which Git commit the firmware was built from) from one internal directory to another. No behavior changes, no security fixes, and no new vulnerabilities are visible in the diff.

Security candidaterefactor(core): move flash driver to sys layerby cepetr · 79dd851f · Jan 13, 2026 · 65 filesMessage 57 · ThinInformational 15Details
Commit message · cepetr

refactor(core): move flash driver to sys layer

[no changelog]

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

This commit is a pure code reorganization: it moves the flash memory driver files from one directory (embed/util/flash) to another (embed/sys/flash) and updates all include paths and build scripts accordingly. The actual flash programming, erasing, and one-time-programmable (OTP) logic is copied verbatim, with no functional changes. There is no indication this fixes or introduces a security vulnerability.

Security candidaterefactor(core): move translatations module to io layerby cepetr · cd8b7b62 · Jan 13, 2026 · 15 filesMessage 62 · AdequateInformational 15Details
Commit message · cepetr

refactor(core): move translatations module to io layer

[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 pure code reorganization: it moves the 'translations' module from one directory location to another without changing what the code does. The functions that read, write, and erase translation data in device flash remain identical. There is no visible security bug or fix in the change.

Security candidaterefactor(core): move gfx to io/gfxby cepetr · 47a7ba72 · Jan 13, 2026 · 51 filesMessage 57 · ThinInformational 15Details
Commit message · cepetr

refactor(core): move gfx to io/gfx

[no changelog]

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

This commit is a pure code reorganization: it moves the graphics (gfx) subsystem from the `embed/gfx/` directory into `embed/io/gfx/`, updates all build scripts and include paths accordingly, and renames some internal subdirectories (for example, `fonts/` becomes `terminal/`). The actual graphics logic, functions, and behavior appear unchanged. There is no indication this fixes or introduces a security issue.

Security candidaterefactor(core): move backup_ram driver from sys to secby cepetr · cb1b9cc4 · Jan 13, 2026 · 23 filesMessage 62 · AdequateInformational 13Details
Commit message · cepetr

refactor(core): move backup_ram driver from sys to sec

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

This commit is a pure code reorganization: it moves the backup RAM driver from the 'sys' directory to the 'sec' directory and updates all include paths accordingly. The actual C source code for the driver is identical before and after the move. There is no functional change, no bug fix, and no security patch visible in the diff.

Security candidaterefactor(core): split rng module into sys/rng and sec/rng_strongby cepetr · 2761e69f · Jan 13, 2026 · 45 filesMessage 62 · AdequateInformational 14Details
Commit message · cepetr

refactor(core): split rng module into sys/rng and sec/rng_strong

[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
entropy or randomnesscryptography-sensitive pathseed or entropy pathboot or update path
AI analysis · Informational 14/100

This commit is a code reorganization: it splits the random-number generator (RNG) module into two parts. The basic hardware RNG moves from the security subsystem to the system subsystem, while the stronger multi-source RNG stays in the security subsystem under a new name. All call sites are updated to include the correct new header. The actual logic of how random numbers are generated does not change.

Lower-priorityrefactor(core): move telemetry to sec layersby cepetr · 7cf653c2 · Jan 13, 2026 · 7 filesMessage 57 · ThinInformational 12Details
Commit message · cepetr

refactor(core): move telemetry to sec layers

[no changelog]

57/100 · ThinMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Uses a recognizable type or scope! No meaningful explanatory body
AI analysis · Informational 12/100

This commit is a code reorganization: it moves the small telemetry module that records battery temperature from one internal directory to another. The actual logic for reading, writing, and validating the temperature data is unchanged. There is no indication this fixes a security bug or introduces a new vulnerability.

AI review queuedrefactor(core): split and move suspend module into io and sec layersby cepetr · 521cdb2e · Jan 13, 2026 · 23 filesMessage 62 · AdequateInformational 15Details
Commit message · cepetr

refactor(core): split and move suspend module into io and sec layers

[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
second-pass: unusually broad change
AI analysis · Informational 15/100

This commit is a code reorganization (refactor) that moves the suspend/resume functionality from one part of the codebase to another. It splits the suspend module into an I/O layer and a security layer, updates include paths, and adjusts build configuration files. There is no indication of a security fix or vulnerability being addressed.

Lower-priorityrefactor(core): move hw_revision to sec layerby cepetr · 0703f968 · Jan 13, 2026 · 9 filesMessage 57 · ThinInformational 15Details
Commit message · cepetr

refactor(core): move hw_revision to sec layer

[no changelog]

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

This commit is a straightforward internal code reorganization: it moves the hardware revision detection module from a general utility folder into the security (sec) layer. The actual logic for reading the hardware revision from GPIO pins is unchanged. There is no user-facing behavior change and no indication of a security fix or vulnerability.

AI review queuedrefactor(core): move i2c_bus driver to sys layerby cepetr · 01da3643 · Jan 13, 2026 · 23 filesMessage 57 · ThinInformational 15Details
Commit message · cepetr

refactor(core): move i2c_bus driver to sys layer

[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
second-pass: unusually broad change
AI analysis · Informational 15/100

This commit is a pure code reorganization: it moves the I2C bus driver files from one directory (io/i2c_bus) to another (sys/i2c_bus) and updates all include paths accordingly. No functionality, logic, or behavior of the firmware was changed. It is a housekeeping refactor with no user-visible or security-relevant effect.

AI review queuedrefactor(core): remove pvd -> backlight dependencyby cepetr · fc166333 · Jan 13, 2026 · 1 fileMessage 62 · AdequateLow 26Details
Commit message · cepetr

refactor(core): remove pvd -> backlight dependency

[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
second-pass: broader security terminology
AI analysis · Low 26/100

This commit removes code that turned off the screen backlight when a power-voltage drop (PVD) interrupt fired. The change is described as a simple internal cleanup ('refactor') with no changelog entry. It is not clearly a security fix, but removing a safety behavior during a low-power event could have minor security or reliability implications if the backlight was meant to blank the screen before shutdown.

Lower-priorityrefactor(core): move tsqueue to io layerby cepetr · 272730b4 · Jan 13, 2026 · 8 filesMessage 57 · ThinInformational 15Details
Commit message · cepetr

refactor(core): move tsqueue to io layer

[no changelog]

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

This commit is a pure code reorganization: it moves a small queue utility (tsqueue) from one internal directory to another and updates the include paths in the files that use it. No functionality was changed, no bugs were fixed, and no security behavior was altered.

Lower-priorityrefactor(core): remove circulars deps between util and sysby cepetr · dc48609b · Jan 13, 2026 · 7 filesMessage 62 · AdequateInformational 12Details
Commit message · cepetr

refactor(core): remove circulars deps between util and sys

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

This is a code cleanup change that removes circular dependencies between low-level system modules and image-handling utilities. It replaces a few shared macro definitions with local equivalents and adds compile-time checks to ensure the duplicated constants stay in sync. There is no indication this fixes a security bug or changes device behavior in a security-relevant way.

Lower-priorityrefactor(core): move option_bytes to sec layerby cepetr · 6fb3167a · Jan 13, 2026 · 8 filesMessage 57 · ThinInformational 12Details
Commit message · cepetr

refactor(core): move option_bytes to sec layer

[no changelog]

57/100 · ThinMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Uses a recognizable type or scope! No meaningful explanatory body
AI analysis · Informational 12/100

This commit is a pure code reorganization: it moves the 'option_bytes' source files from the general utility directory into the security (sec) layer and updates the include paths and build files accordingly. The actual logic for reading and writing the microcontroller's flash option bytes is unchanged. There is no visible security bug introduced by this change.

Lower-priorityrefactor(core): move cpuid to sys layerby cepetr · 9c915a7c · Jan 13, 2026 · 7 filesMessage 57 · ThinInformational 15Details
Commit message · cepetr

refactor(core): move cpuid to sys layer

[no changelog]

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

This commit is a pure code reorganization: it moves the CPU-ID reading module from a 'util' directory to a 'sys' directory, updating include paths and build lists accordingly. The actual logic for reading the chip's unique identifier is unchanged, and there is no visible security fix or behavior change.

Lower-priorityrefactor(core): move fwutils to sec layerby cepetr · 899323cf · Jan 13, 2026 · 13 filesMessage 57 · ThinInformational 15Details
Commit message · cepetr

refactor(core): move fwutils to sec layer

[no changelog]

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

This commit is a pure code reorganization: it moves the firmware utility code (used for hashing firmware, reading vendor info, and invalidating firmware headers) from a general utilities directory into a security-focused directory. The actual code logic is unchanged, and there is no indication this fixes or introduces a security vulnerability.

Lower-prioritychore: remove obsolete darwin depedenciesby Thalarion · 13fbf3b7 · Jan 13, 2026 · 1 fileMessage 57 · ThinInformational 15Details
Commit message · Thalarion

chore: remove obsolete darwin depedencies

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

This commit removes unused Apple macOS framework dependencies from the project's Nix shell environment file. It is a routine cleanup with no apparent security relevance.

Lower-priorityfeat(core): detect battery error statesby tychovrahe · 2e724a91 · Jan 13, 2026 · 17 filesMessage 57 · ThinInformational 24Details
Commit message · tychovrahe

feat(core): detect battery error states

[no changelog]

57/100 · ThinMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Uses a recognizable type or scope! No meaningful explanatory body
AI analysis · Informational 24/100

This commit adds battery safety monitoring to Trezor hardware wallets. It detects problems like a disconnected temperature sensor (NTC), charging that is stuck at a low current, and sudden jumps in battery temperature or voltage. When such a problem is detected during production testing, the device shows a red error screen and disables charging. The change is defensive: it is meant to prevent unsafe charging conditions rather than introduce a security flaw.

Lower-prioritychore(tests): update UI fixturesby Martin Pastyřík · 3612a2cf · Jan 13, 2026 · 1 fileMessage 67 · AdequateInformational 15Details
Commit message · Martin Pastyřík

chore(tests): update UI fixtures

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

This commit only updates expected screenshot fingerprints (called UI fixtures) used by automated tests. It does not change any firmware, application, or wallet code that runs on a real Trezor device. There is no user-facing or security-relevant change in this commit itself.

Security candidatefix(tests): fix Evolu tests on HW devicesby Martin Pastyřík · d1d28b86 · Jan 13, 2026 · 7 filesMessage 100 · StrongInformational 15Details
Commit message · Martin Pastyřík

fix(tests): fix Evolu tests on HW devices

Evolu tests now do not depend on hardocded values but compute the expected value from the `delegated_idenetity_key` of the tested device. Therefore enabling testing on HW devices where the master key is not initialized to all zeroes.

A check function was added to the `sign_registration` tests to determine if the device has Optiga available. If not, the test will mark itself as `xfail` - we expect Optiga signing to fail if there is no Optiga.

All the Evolu test have been simplified so that the logic is the same for THP and non-THP devices.

Lastly, the verification of certificate chain and Optiga and Tropic signatures and certificates has been refactored from `test_authenticate_device.py` as it is now used in other tests.

[no changelog]

100/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✓ Mentions testing or verification
Why it was queued
signing boundarydefensive validationsigning or wallet pathauthentication path
AI analysis · Informational 15/100

This commit only changes test code for the Trezor hardware wallet. It refactors how tests compute expected cryptographic values so they can run on real hardware devices instead of only on emulators, and moves certificate-verification helper code into a shared test utility. There is no change to the actual firmware or wallet behavior, and no security vulnerability is introduced or fixed.

Security candidatefeat(core): introduce secmon downgrade protectionby tychovrahe · e2bfa908 · Jan 13, 2026 · 15 filesMessage 57 · ThinLow 26Details
Commit message · tychovrahe

feat(core): introduce secmon downgrade protection

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

This commit adds downgrade protection for the Secure Monitor (secmon), a small privileged security component that runs alongside the main firmware on Trezor hardware wallets. Previously, only the bootloader and firmware had downgrade protection via monotonic counters stored in secure flash. This change reserves a third monotonic counter, records the secmon version in the image header, and makes the bootloader reject older or rolled-back secmon images during firmware updates and boot. It is a defensive hardening feature, not a fix for an active vulnerability, and the initial secmon monotonic version starts at 0 so existing images remain compatible.

Security candidatefeat(core): introduce telemetryby tychovrahe · 5d5358da · Jan 13, 2026 · 13 filesMessage 47 · ThinInformational 23Details
Commit message · tychovrahe

feat(core): introduce telemetry

[no changelog]

47/100 · ThinMessage clarity
✓ Descriptive subject✓ Uses a recognizable type or scope! No meaningful explanatory body
Why it was queued
boot or update path
AI analysis · Informational 23/100

This commit adds a new internal telemetry feature to the Trezor firmware that records the minimum and maximum battery temperature in a small, protected memory area (backup RAM). It only stores a float value for the coldest and hottest battery readings and does not send data anywhere. There is no obvious security bug in the code, but it is a new subsystem that touches low-level firmware components and could become relevant if future changes connect it to untrusted inputs or expose it externally.