4
4
# SPDX-License-Identifier: GPL-2.0-or-later
5
5
6
6
import struct
7
+ from typing import Dict
7
8
8
9
from .esp32c3 import ESP32C3ROM
9
10
from ..util import FatalError , NotImplementedInROMError
@@ -77,6 +78,21 @@ class ESP32H2BETA1ROM(ESP32C3ROM):
77
78
"12m" : 0x2 ,
78
79
}
79
80
81
+ EFUSE_MAX_KEY = 5
82
+ KEY_PURPOSES : Dict [int , str ] = {
83
+ 0 : "USER/EMPTY" ,
84
+ 1 : "ECDSA_KEY" ,
85
+ 2 : "RESERVED" ,
86
+ 4 : "XTS_AES_128_KEY" ,
87
+ 5 : "HMAC_DOWN_ALL" ,
88
+ 6 : "HMAC_DOWN_JTAG" ,
89
+ 7 : "HMAC_DOWN_DIGITAL_SIGNATURE" ,
90
+ 8 : "HMAC_UP" ,
91
+ 9 : "SECURE_BOOT_DIGEST0" ,
92
+ 10 : "SECURE_BOOT_DIGEST1" ,
93
+ 11 : "SECURE_BOOT_DIGEST2" ,
94
+ }
95
+
80
96
def get_pkg_version (self ):
81
97
num_word = 4
82
98
return (self .read_reg (self .EFUSE_BLOCK1_ADDR + (4 * num_word )) >> 0 ) & 0x07
@@ -121,8 +137,10 @@ def get_flash_crypt_config(self):
121
137
return None # doesn't exist on ESP32-H2
122
138
123
139
def get_key_block_purpose (self , key_block ):
124
- if key_block < 0 or key_block > 5 :
125
- raise FatalError ("Valid key block numbers must be in range 0-5" )
140
+ if key_block < 0 or key_block > self .EFUSE_MAX_KEY :
141
+ raise FatalError (
142
+ f"Valid key block numbers must be in range 0-{ self .EFUSE_MAX_KEY } "
143
+ )
126
144
127
145
reg , shift = [
128
146
(self .EFUSE_PURPOSE_KEY0_REG , self .EFUSE_PURPOSE_KEY0_SHIFT ),
@@ -136,7 +154,9 @@ def get_key_block_purpose(self, key_block):
136
154
137
155
def is_flash_encryption_key_valid (self ):
138
156
# Need to see an AES-128 key
139
- purposes = [self .get_key_block_purpose (b ) for b in range (6 )]
157
+ purposes = [
158
+ self .get_key_block_purpose (b ) for b in range (self .EFUSE_MAX_KEY + 1 )
159
+ ]
140
160
141
161
return any (p == self .PURPOSE_VAL_XTS_AES128_KEY for p in purposes )
142
162
0 commit comments