Skip to content

Commit aa1b04a

Browse files
Harshal5radimkarnis
authored andcommitted
feat(write_flash): Allow encrypted writes using key from the Key Manager
1 parent 944e56a commit aa1b04a

File tree

2 files changed

+23
-3
lines changed

2 files changed

+23
-3
lines changed

esptool/targets/esp32c5.py

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,10 @@ class ESP32C5ROM(ESP32C6ROM):
2525

2626
EFUSE_RD_REG_BASE = EFUSE_BASE + 0x030 # BLOCK0 read base address
2727

28+
EFUSE_FORCE_USE_KEY_MANAGER_KEY_REG = EFUSE_BASE + 0x34
29+
EFUSE_FORCE_USE_KEY_MANAGER_KEY_SHIFT = 10
30+
FORCE_USE_KEY_MANAGER_VAL_XTS_AES_KEY = 2
31+
2832
EFUSE_PURPOSE_KEY0_REG = EFUSE_BASE + 0x34
2933
EFUSE_PURPOSE_KEY0_SHIFT = 22
3034
EFUSE_PURPOSE_KEY1_REG = EFUSE_BASE + 0x34
@@ -192,7 +196,13 @@ def is_flash_encryption_key_valid(self):
192196
self.get_key_block_purpose(b) for b in range(self.EFUSE_MAX_KEY + 1)
193197
]
194198

195-
return any(p == self.PURPOSE_VAL_XTS_AES128_KEY for p in purposes)
199+
if any(p == self.PURPOSE_VAL_XTS_AES128_KEY for p in purposes):
200+
return True
201+
202+
return (
203+
self.read_reg(self.EFUSE_FORCE_USE_KEY_MANAGER_KEY_REG)
204+
>> self.EFUSE_FORCE_USE_KEY_MANAGER_KEY_SHIFT
205+
) & self.FORCE_USE_KEY_MANAGER_VAL_XTS_AES_KEY
196206

197207
def check_spi_connection(self, spi_connection):
198208
if not set(spi_connection).issubset(set(range(0, 29))):

esptool/targets/esp32p4.py

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,10 @@ class ESP32P4ROM(ESP32ROM):
4343

4444
EFUSE_RD_REG_BASE = EFUSE_BASE + 0x030 # BLOCK0 read base address
4545

46+
EFUSE_FORCE_USE_KEY_MANAGER_KEY_REG = EFUSE_BASE + 0x34
47+
EFUSE_FORCE_USE_KEY_MANAGER_KEY_SHIFT = 9
48+
FORCE_USE_KEY_MANAGER_VAL_XTS_AES_KEY = 2
49+
4650
EFUSE_PURPOSE_KEY0_REG = EFUSE_BASE + 0x34
4751
EFUSE_PURPOSE_KEY0_SHIFT = 24
4852
EFUSE_PURPOSE_KEY1_REG = EFUSE_BASE + 0x34
@@ -216,9 +220,15 @@ def is_flash_encryption_key_valid(self):
216220
if any(p == self.PURPOSE_VAL_XTS_AES128_KEY for p in purposes):
217221
return True
218222

219-
return any(p == self.PURPOSE_VAL_XTS_AES256_KEY_1 for p in purposes) and any(
223+
if any(p == self.PURPOSE_VAL_XTS_AES256_KEY_1 for p in purposes) and any(
220224
p == self.PURPOSE_VAL_XTS_AES256_KEY_2 for p in purposes
221-
)
225+
):
226+
return True
227+
228+
return (
229+
self.read_reg(self.EFUSE_FORCE_USE_KEY_MANAGER_KEY_REG)
230+
>> self.EFUSE_FORCE_USE_KEY_MANAGER_KEY_SHIFT
231+
) & self.FORCE_USE_KEY_MANAGER_VAL_XTS_AES_KEY
222232

223233
def change_baud(self, baud):
224234
ESPLoader.change_baud(self, baud)

0 commit comments

Comments
 (0)