feat(core): Add optiga suspend/resume functions + refactor the optiga initialization routines.
What changed, and why it matters
This commit refactors how the Trezor hardware wallet talks to its built-in Infineon OPTIGA security chip. It splits the old 'init/deinit' routines into smaller steps (power up/down, open/close channel) and adds new suspend/resume logic. The goal appears to be reducing wear on the OPTIGA chip by avoiding full power cycles when the chip's internal security-event counter (SEC) is high. There is no direct evidence in the commit that this fixes a known exploitable vulnerability, but it changes sensitive secure-element lifecycle code and introduces new secure-monitor call interfaces that could affect device security if misused.
Treat as a security-relevant hardening/refactor rather than a confirmed vulnerability fix. Review the new SMCALL interfaces for authorization and state-machine correctness, verify that optiga_resume() cannot leave the OPTIGA powered up unexpectedly, and ensure the RTC-scheduled power-down callback cannot be abused to corrupt secure-element state. If this commit is part of a release, request a security note from the vendor clarifying whether it addresses any disclosed or internally found issue.
Security signals we found
Refactor of secure-element initialization and lifecycle code
Addition of new secure-monitor calls exposing optiga_close_channel, optiga_power_down, and optiga_init_and_configure to non-secure world
Introduction of delayed power-down logic tied to OPTIGA security event counter (SEC) throttling
New constant OPTIGA_T_MAX_MS (5000 ms) representing maximum throttling delay
Removal of optiga_config.c and creation of optiga_init.c with expanded API surface
Changes affect all Trezor model build configurations using OPTIGA
Evidence from the diff
The patch renames optiga_config.c/h to optiga_init.c/h and separates transport-level power and channel management: optiga_transport_power_up/down(), optiga_transport_open/close_channel(). optiga_init() now calls power_up + open_channel; optiga_deinit() calls close_channel + power_down. New kernel-mode functions optiga_suspend() and optiga_resume() use the RTC scheduler to delay full power-down when the OPTIGA security event counter (SEC) exceeds OPTIGA_SEC_SUSPEND_THR (20), calculating a delay of (sec - threshold) * OPTIGA_T_MAX_MS / 1000 seconds. Three new SMCALLs (SMCALL_OPTIGA_CLOSE_CHANNEL, SMCALL_OPTIGA_POWER_DOWN, SMCALL_OPTIGA_INIT_AND_CONFIGURE) are added to the secure-monitor dispatch table and stub functions. The change is applied to all current Trezor models (T2B1, T3B1, T3T1, T3W1 revB/C).
Changed components
core/embed/sec/optiga/optiga_init.c (new)core/embed/sec/optiga/inc/sec/optiga_init.h (new)core/embed/sec/optiga/optiga_transport.ccore/embed/sec/optiga/inc/sec/optiga_commands.hcore/embed/sec/optiga/inc/sec/optiga_transport.hcore/embed/sys/smcall/stm32/smcall_dispatch.ccore/embed/sys/smcall/stm32/smcall_numbers.hcore/embed/sys/smcall/stm32/smcall_stubs.cTrezor model build configs: T2B1, T3B1, T3T1, T3W1 revB/CInspect captured patch +306 / −128
diff --git a/core/embed/sec/optiga/inc/sec/optiga_commands.h b/core/embed/sec/optiga/inc/sec/optiga_commands.h
index 1d8c785d6..da13cedef 100644
--- a/core/embed/sec/optiga/inc/sec/optiga_commands.h
+++ b/core/embed/sec/optiga/inc/sec/optiga_commands.h
@@ -173,6 +173,9 @@ typedef struct {
#define OPTIGA_RANDOM_MAX_SIZE 256
#define OPTIGA_MAX_CERT_SIZE 1728
+// The throttling delay when the security event counter is at its maximum.
+#define OPTIGA_T_MAX_MS 5000
+
#define OPTIGA_ACCESS_CONDITION(ac_id, oid) \
(const optiga_metadata_item) { \
(const uint8_t[]){ac_id, oid >> 8, oid & 0xff}, 3 \
diff --git a/core/embed/sec/optiga/inc/sec/optiga_config.h b/core/embed/sec/optiga/inc/sec/optiga_config.h
deleted file mode 100644
index 3e4e6f16a..000000000
--- a/core/embed/sec/optiga/inc/sec/optiga_config.h
+++ /dev/null
@@ -1,28 +0,0 @@
-/*
- * This file is part of the Trezor project, https://trezor.io/
- *
- * Copyright (c) SatoshiLabs
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-#pragma once
-
-#ifdef SECURE_MODE
-
-// Initializes the optiga driver, establishes a secure channel by providing
-// a shared secret and finally opens the application.
-void optiga_init_and_configure(void);
-
-#endif // SECURE_MODE
diff --git a/core/embed/sec/optiga/inc/sec/optiga_init.h b/core/embed/sec/optiga/inc/sec/optiga_init.h
new file mode 100644
index 000000000..0f3abbd57
--- /dev/null
+++ b/core/embed/sec/optiga/inc/sec/optiga_init.h
@@ -0,0 +1,87 @@
+/*
+ * This file is part of the Trezor project, https://trezor.io/
+ *
+ * Copyright (c) SatoshiLabs
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#pragma once
+
+#include <sec/optiga_common.h>
+
+// Security event counter threshold to suspend optiga without postponing
+// optiga deinitialization
+#define OPTIGA_SEC_SUSPEND_THR 20
+
+/**
+ * @brief Initialize optiga driver
+ *
+ * This function powers up the OPTIGA chip and initializes the communication
+ * channel.
+ *
+ * @return OPTIGA_SUCCESS in case the driver was sucessfully initialized.
+ */
+optiga_result optiga_init(void);
+
+/**
+ * @brief Deinitialize optiga driver
+ *
+ * Close the communication channel and power down the OPTIGA chip.
+ */
+void optiga_deinit(void);
+
+/**
+ * @brief Close the communication channel to the OPTIGA chip
+ *
+ * This function should be called when the communication with the OPTIGA chip
+ * is no longer needed. It will release any resources associated with the
+ * communication channel.
+ */
+void optiga_close_channel(void);
+
+/**
+ * @brief Power down of the OPTIGA chip
+ *
+ * @note This function should be called after optiga_close_channel().
+ */
+void optiga_power_down(void);
+
+/**
+ * @brief Initializes the optiga driver, establishes a secure channel by
+ * providing a shared secret and finally opens the application.
+ *
+ */
+void optiga_init_and_configure(void);
+
+/* *****************************************************************************
+ * KERNEL PART
+ * ****************************************************************************/
+
+/**
+ * @brief Suspends optiga driver
+ *
+ * @note This is part of driver is used in KERNEL_MODE since it schedules RTC
+ * event to power down the optiga chip when its left powered up due to high
+ * SEC counter value.
+ */
+void optiga_suspend();
+
+/**
+ * @brief Resumes optiga driver
+ *
+ * @note This part of driver is used in KERNEL_MODE since it handles/cancel
+ * active RTC power down event when resuming from suspend.
+ */
+void optiga_resume();
diff --git a/core/embed/sec/optiga/inc/sec/optiga_transport.h b/core/embed/sec/optiga/inc/sec/optiga_transport.h
index 8ddb3c5a3..78178cfeb 100644
--- a/core/embed/sec/optiga/inc/sec/optiga_transport.h
+++ b/core/embed/sec/optiga/inc/sec/optiga_transport.h
@@ -30,8 +30,10 @@
// Maximum command and response APDU size supported by OPTIGA.
#define OPTIGA_MAX_APDU_SIZE 1557
-optiga_result optiga_init(void);
-void optiga_deinit(void);
+optiga_result optiga_transport_open_channel(void);
+void optiga_transport_close_channel(void);
+void optiga_transport_power_up(void);
+void optiga_transport_power_down(void);
optiga_result optiga_sec_chan_handshake(const uint8_t *secret,
size_t secret_size);
diff --git a/core/embed/sec/optiga/optiga_config.c b/core/embed/sec/optiga/optiga_config.c
deleted file mode 100644
index b616dc437..000000000
--- a/core/embed/sec/optiga/optiga_config.c
+++ /dev/null
@@ -1,83 +0,0 @@
-/*
- * This file is part of the Trezor project, https://trezor.io/
- *
- * Copyright (c) SatoshiLabs
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-#ifdef SECURE_MODE
-
-#include <trezor_rtl.h>
-
-#include <sec/optiga.h>
-#include <sec/optiga_commands.h>
-#include <sec/optiga_transport.h>
-#include <sec/secret_keys.h>
-#include <sys/systick.h>
-
-#include "memzero.h"
-
-#ifdef USE_DBG_CONSOLE
-#include <sys/dbg_console.h>
-#endif
-
-#if defined(USE_DBG_CONSOLE) && defined(USE_OPTIGA_LOGGING)
-#include <inttypes.h>
-#if 1 // color log
-#define OPTIGA_LOG_FORMAT \
- "%d.%03d \x1b[35moptiga\x1b[0m \x1b[32mDEBUG\x1b[0m %s: "
-#else
-#define OPTIGA_LOG_FORMAT "%d.%03d optiga DEBUG %s: "
-#endif
-static void optiga_log_hex(const char *prefix, const uint8_t *data,
- size_t data_size) {
- ticks_t now = hal_ticks_ms();
- uint32_t sec = now / 1000;
- uint32_t msec = now % 1000;
- dbg_console_printf(OPTIGA_LOG_FORMAT, sec, msec, prefix);
- for (size_t i = 0; i < data_size; i++) {
- dbg_console_printf("%02x", data[i]);
- }
- dbg_console_printf("\n");
-}
-#endif
-
-void optiga_init_and_configure(void) {
-#if defined(USE_DBG_CONSOLE) && defined(USE_OPTIGA_LOGGING)
- // command log is relatively quiet so we enable it in debug builds
- optiga_command_set_log_hex(optiga_log_hex);
- // transport log can be spammy, uncomment if you want it:
- // optiga_transport_set_log_hex(optiga_log_hex);
-#endif
-
- optiga_init();
-
- uint8_t secret[OPTIGA_PAIRING_SECRET_SIZE] = {0};
- secbool secret_ok = secret_key_optiga_pairing(secret);
-
- if (sectrue == secret_ok) {
- // If the shielded connection cannot be established, reset Optiga and
- // continue without it. In this case, OID_KEY_FIDO and OID_KEY_DEV cannot be
- // used, which means device and FIDO attestation will not work.
- if (optiga_sec_chan_handshake(secret, sizeof(secret)) != OPTIGA_SUCCESS) {
- optiga_soft_reset();
- }
- }
- memzero(secret, sizeof(secret));
- ensure(sectrue * (optiga_open_application() == OPTIGA_SUCCESS),
- "Cannot initialize optiga.");
-}
-
-#endif // SECURE_MODE
diff --git a/core/embed/sec/optiga/optiga_init.c b/core/embed/sec/optiga/optiga_init.c
new file mode 100644
index 000000000..3e5dbcd7e
--- /dev/null
+++ b/core/embed/sec/optiga/optiga_init.c
@@ -0,0 +1,173 @@
+/*
+ * This file is part of the Trezor project, https://trezor.io/
+ *
+ * Copyright (c) SatoshiLabs
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#ifdef SECURE_MODE
+
+#include <trezor_rtl.h>
+
+#include <sec/optiga.h>
+#include <sec/optiga_commands.h>
+#include <sec/optiga_init.h>
+#include <sec/optiga_transport.h>
+#include <sec/secret_keys.h>
+#include <sys/systick.h>
+
+#include "memzero.h"
+
+#ifdef USE_DBG_CONSOLE
+#include <sys/dbg_console.h>
+#endif
+
+#if defined(USE_DBG_CONSOLE) && defined(USE_OPTIGA_LOGGING)
+#include <inttypes.h>
+#if 1 // color log
+#define OPTIGA_LOG_FORMAT \
+ "%d.%03d \x1b[35moptiga\x1b[0m \x1b[32mDEBUG\x1b[0m %s: "
+#else
+#define OPTIGA_LOG_FORMAT "%d.%03d optiga DEBUG %s: "
+#endif
+static void optiga_log_hex(const char *prefix, const uint8_t *data,
+ size_t data_size) {
+ ticks_t now = hal_ticks_ms();
+ uint32_t sec = now / 1000;
+ uint32_t msec = now % 1000;
+ dbg_console_printf(OPTIGA_LOG_FORMAT, sec, msec, prefix);
+ for (size_t i = 0; i < data_size; i++) {
+ dbg_console_printf("%02x", data[i]);
+ }
+ dbg_console_printf("\n");
+}
+#endif
+
+optiga_result optiga_init() {
+ optiga_transport_power_up();
+ return optiga_transport_open_channel();
+}
+
+void optiga_deinit() {
+ optiga_transport_close_channel();
+ optiga_transport_power_down();
+}
+
+void optiga_close_channel() { optiga_transport_close_channel(); }
+
+void optiga_power_down() { optiga_transport_power_down(); }
+
+void optiga_init_and_configure(void) {
+#if defined(USE_DBG_CONSOLE) && defined(USE_OPTIGA_LOGGING)
+ // command log is relatively quiet so we enable it in debug builds
+ optiga_command_set_log_hex(optiga_log_hex);
+ // transport log can be spammy, uncomment if you want it:
+ // optiga_transport_set_log_hex(optiga_log_hex);
+#endif
+
+ optiga_init();
+
+ uint8_t secret[OPTIGA_PAIRING_SECRET_SIZE] = {0};
+ secbool secret_ok = secret_key_optiga_pairing(secret);
+
+ if (sectrue == secret_ok) {
+ // If the shielded connection cannot be established, reset Optiga and
+ // continue without it. In this case, OID_KEY_FIDO and OID_KEY_DEV cannot be
+ // used, which means device and FIDO attestation will not work.
+ if (optiga_sec_chan_handshake(secret, sizeof(secret)) != OPTIGA_SUCCESS) {
+ optiga_soft_reset();
+ }
+ }
+ memzero(secret, sizeof(secret));
+ ensure(sectrue * (optiga_open_application() == OPTIGA_SUCCESS),
+ "Cannot initialize optiga.");
+}
+
+#endif // SECURE_MODE
+
+#ifdef KERNEL_MODE
+
+#include <sec/optiga.h>
+#include <sec/optiga_commands.h>
+#include <sec/optiga_init.h>
+#include <sys/irq.h>
+
+#ifdef USE_RTC
+
+#include <sys/rtc.h>
+#include <sys/rtc_scheduler.h>
+
+uint32_t rtc_wakeup_event_id = 0;
+
+void optiga_rtc_wakeup_callback(void *context) {
+ optiga_power_down();
+ rtc_wakeup_event_id = 0;
+}
+
+static void optiga_schedule_power_down(uint32_t power_down_time_s) {
+ uint32_t current_timestamp;
+ rtc_get_timestamp(¤t_timestamp);
+
+ if (!rtc_schedule_wakeup_event(current_timestamp + power_down_time_s,
+ optiga_rtc_wakeup_callback, NULL,
+ &rtc_wakeup_event_id)) {
+ // Failed to schedule RTC event, deinit optiga right away
+ optiga_power_down();
+ }
+}
+
+#endif
+
+void optiga_suspend() {
+#ifdef USE_RTC
+
+ uint8_t sec;
+ bool status = optiga_read_sec(&sec);
+
+ optiga_close_channel();
+
+ if (status && sec > OPTIGA_SEC_SUSPEND_THR) {
+ // Optiga SEC is high, schedule power down after certain time
+ // to make sure SEC has enough time to decrease.
+ uint32_t power_down_time_s =
+ ((sec - OPTIGA_SEC_SUSPEND_THR) * OPTIGA_T_MAX_MS) / 1000;
+ optiga_schedule_power_down(power_down_time_s);
+
+ } else {
+ optiga_power_down();
+ }
+
+#else
+
+ optiga_deinit();
+
+#endif // USE_RTC
+}
+
+void optiga_resume() {
+#ifdef USE_RTC
+
+ if (rtc_wakeup_event_id != 0) {
+ rtc_cancel_wakeup_event(rtc_wakeup_event_id);
+ rtc_wakeup_event_id = 0;
+ optiga_power_down();
+ }
+
+#endif
+
+ optiga_init_and_configure();
+}
+
+#endif // KERNEL_MODE
diff --git a/core/embed/sec/optiga/optiga_transport.c b/core/embed/sec/optiga/optiga_transport.c
index dbb9cfc23..f64ef3b9b 100644
--- a/core/embed/sec/optiga/optiga_transport.c
+++ b/core/embed/sec/optiga/optiga_transport.c
@@ -189,9 +189,11 @@ static uint16_t calc_crc(uint8_t *data, size_t data_size) {
return crc;
}
-optiga_result optiga_init(void) {
- optiga_hal_init();
+void optiga_transport_power_up(void) { optiga_hal_init(); }
+void optiga_transport_power_down(void) { optiga_hal_deinit(); }
+
+optiga_result optiga_transport_open_channel(void) {
i2c_bus = i2c_bus_open(OPTIGA_I2C_INSTANCE);
if (i2c_bus == NULL) {
return OPTIGA_ERR_I2C_OPEN;
@@ -200,7 +202,7 @@ optiga_result optiga_init(void) {
return optiga_set_data_reg_len(OPTIGA_DATA_REG_LEN);
}
-void optiga_deinit(void) {
+void optiga_transport_close_channel(void) {
i2c_bus_close(i2c_bus);
i2c_bus = NULL;
@@ -215,8 +217,6 @@ void optiga_deinit(void) {
memzero(sec_chan_decr_nonce, sizeof(sec_chan_decr_nonce));
memzero(sec_chan_buffer, sizeof(sec_chan_buffer));
sec_chan_size = 0;
-
- optiga_hal_deinit();
}
static optiga_result optiga_i2c_write(const uint8_t *data, uint16_t data_size) {
diff --git a/core/embed/sys/smcall/stm32/smcall_dispatch.c b/core/embed/sys/smcall/stm32/smcall_dispatch.c
index d02ea5fb3..b5f5d7285 100644
--- a/core/embed/sys/smcall/stm32/smcall_dispatch.c
+++ b/core/embed/sys/smcall/stm32/smcall_dispatch.c
@@ -39,6 +39,7 @@
#ifdef USE_OPTIGA
#include <sec/optiga.h>
+#include <sec/optiga_init.h>
#endif
#ifdef USE_SUSPEND
@@ -192,6 +193,18 @@ __attribute((no_stack_protector)) void smcall_handler(uint32_t *args,
args[0] = optiga_read_sec__verified(sec);
} break;
+ case SMCALL_OPTIGA_CLOSE_CHANNEL: {
+ optiga_close_channel();
+ } break;
+
+ case SMCALL_OPTIGA_POWER_DOWN: {
+ optiga_power_down();
+ } break;
+
+ case SMCALL_OPTIGA_INIT_AND_CONFIGURE: {
+ optiga_init_and_configure();
+ } break;
+
#if PYOPT == 0
case SMCALL_OPTIGA_SET_SEC_MAX: {
optiga_set_sec_max();
diff --git a/core/embed/sys/smcall/stm32/smcall_numbers.h b/core/embed/sys/smcall/stm32/smcall_numbers.h
index a264f5f92..6312b4c8e 100644
--- a/core/embed/sys/smcall/stm32/smcall_numbers.h
+++ b/core/embed/sys/smcall/stm32/smcall_numbers.h
@@ -63,6 +63,9 @@ typedef enum {
SMCALL_OPTIGA_READ_CERT,
SMCALL_OPTIGA_READ_SEC,
SMCALL_OPTIGA_SET_SEC_MAX,
+ SMCALL_OPTIGA_CLOSE_CHANNEL,
+ SMCALL_OPTIGA_POWER_DOWN,
+ SMCALL_OPTIGA_INIT_AND_CONFIGURE,
SMCALL_STORAGE_SETUP,
SMCALL_STORAGE_WIPE,
diff --git a/core/embed/sys/smcall/stm32/smcall_stubs.c b/core/embed/sys/smcall/stm32/smcall_stubs.c
index 8c56aaff6..2f6a9460e 100644
--- a/core/embed/sys/smcall/stm32/smcall_stubs.c
+++ b/core/embed/sys/smcall/stm32/smcall_stubs.c
@@ -195,6 +195,19 @@ bool optiga_read_sec(uint8_t *sec) {
return (bool)smcall_invoke1((uint32_t)sec, SMCALL_OPTIGA_READ_SEC);
}
+void optiga_close_channel(void) { smcall_invoke0(SMCALL_OPTIGA_CLOSE_CHANNEL); }
+
+void optiga_power_down(void) { smcall_invoke0(SMCALL_OPTIGA_POWER_DOWN); }
+
+void optiga_init_and_configure(void) {
+ smcall_invoke0(SMCALL_OPTIGA_INIT_AND_CONFIGURE);
+}
+
+#if PYOPT == 0
+void optiga_set_sec_max(void) { smcall_invoke0(SMCALL_OPTIGA_SET_SEC_MAX); }
+
+#endif
+
#endif // USE_OPTIGA
// =============================================================================
@@ -208,11 +221,6 @@ secbool secret_key_delegated_identity(uint8_t dest[ECDSA_PRIVATE_KEY_SIZE]) {
SMCALL_SECRET_KEYS_GET_DELEGATED_IDENTITY_KEY);
}
-#if PYOPT == 0
-void optiga_set_sec_max(void) { smcall_invoke0(SMCALL_OPTIGA_SET_SEC_MAX); }
-
-#endif
-
// =============================================================================
// storage.h
// =============================================================================
diff --git a/core/site_scons/models/T2B1/trezor_r_v10.py b/core/site_scons/models/T2B1/trezor_r_v10.py
index 47d144443..e0834e306 100644
--- a/core/site_scons/models/T2B1/trezor_r_v10.py
+++ b/core/site_scons/models/T2B1/trezor_r_v10.py
@@ -79,7 +79,7 @@ def configure(
sources += ["embed/sec/optiga/stm32/optiga_hal.c"]
sources += ["embed/sec/optiga/optiga.c"]
sources += ["embed/sec/optiga/optiga_commands.c"]
- sources += ["embed/sec/optiga/optiga_config.c"]
+ sources += ["embed/sec/optiga/optiga_init.c"]
sources += ["embed/sec/optiga/optiga_transport.c"]
sources += ["vendor/trezor-crypto/hash_to_curve.c"]
paths += ["embed/io/i2c_bus/inc"]
diff --git a/core/site_scons/models/T3B1/trezor_t3b1_revB.py b/core/site_scons/models/T3B1/trezor_t3b1_revB.py
index 7b96d7b8b..af7110765 100644
--- a/core/site_scons/models/T3B1/trezor_t3b1_revB.py
+++ b/core/site_scons/models/T3B1/trezor_t3b1_revB.py
@@ -71,7 +71,7 @@ def configure(
sources += ["embed/sec/optiga/stm32/optiga_hal.c"]
sources += ["embed/sec/optiga/optiga.c"]
sources += ["embed/sec/optiga/optiga_commands.c"]
- sources += ["embed/sec/optiga/optiga_config.c"]
+ sources += ["embed/sec/optiga/optiga_init.c"]
sources += ["embed/sec/optiga/optiga_transport.c"]
sources += ["vendor/trezor-crypto/hash_to_curve.c"]
paths += ["embed/io/i2c_bus/inc"]
diff --git a/core/site_scons/models/T3T1/trezor_t3t1_revE.py b/core/site_scons/models/T3T1/trezor_t3t1_revE.py
index d103e397c..bdedeb2f0 100644
--- a/core/site_scons/models/T3T1/trezor_t3t1_revE.py
+++ b/core/site_scons/models/T3T1/trezor_t3t1_revE.py
@@ -113,7 +113,7 @@ def configure(
sources += ["embed/sec/optiga/stm32/optiga_hal.c"]
sources += ["embed/sec/optiga/optiga.c"]
sources += ["embed/sec/optiga/optiga_commands.c"]
- sources += ["embed/sec/optiga/optiga_config.c"]
+ sources += ["embed/sec/optiga/optiga_init.c"]
sources += ["embed/sec/optiga/optiga_transport.c"]
sources += ["vendor/trezor-crypto/hash_to_curve.c"]
paths += ["embed/sec/optiga/inc"]
diff --git a/core/site_scons/models/T3W1/trezor_t3w1_revB.py b/core/site_scons/models/T3W1/trezor_t3w1_revB.py
index b46be591c..12cfe7c9f 100644
--- a/core/site_scons/models/T3W1/trezor_t3w1_revB.py
+++ b/core/site_scons/models/T3W1/trezor_t3w1_revB.py
@@ -181,7 +181,7 @@ def configure(
sources += ["embed/sec/optiga/stm32/optiga_hal.c"]
sources += ["embed/sec/optiga/optiga.c"]
sources += ["embed/sec/optiga/optiga_commands.c"]
- sources += ["embed/sec/optiga/optiga_config.c"]
+ sources += ["embed/sec/optiga/optiga_init.c"]
sources += ["embed/sec/optiga/optiga_transport.c"]
sources += ["vendor/trezor-crypto/hash_to_curve.c"]
paths += ["embed/sec/optiga/inc"]
diff --git a/core/site_scons/models/T3W1/trezor_t3w1_revC.py b/core/site_scons/models/T3W1/trezor_t3w1_revC.py
index 17609f149..2665918eb 100644
--- a/core/site_scons/models/T3W1/trezor_t3w1_revC.py
+++ b/core/site_scons/models/T3W1/trezor_t3w1_revC.py
@@ -180,7 +180,7 @@ def configure(
sources += ["embed/sec/optiga/stm32/optiga_hal.c"]
sources += ["embed/sec/optiga/optiga.c"]
sources += ["embed/sec/optiga/optiga_commands.c"]
- sources += ["embed/sec/optiga/optiga_config.c"]
+ sources += ["embed/sec/optiga/optiga_init.c"]
sources += ["embed/sec/optiga/optiga_transport.c"]
sources += ["vendor/trezor-crypto/hash_to_curve.c"]
paths += ["embed/sec/optiga/inc"]
Why this scored 33/100
Community notes
Notes can correct, qualify, or add evidence to the AI analysis. Every note shown here has been validated by a human moderator.
The AI analysis stands alone for now. Submit a note if you can add evidence or important context.