forked from espressif/esp-idf
ci(esp_tee): Enable the TEE test-apps for ESP32-C61
This commit is contained in:
@@ -2,10 +2,10 @@
|
||||
|
||||
components/esp_tee/test_apps/tee_cli_app:
|
||||
disable:
|
||||
- if: IDF_TARGET not in ["esp32c6", "esp32c5"]
|
||||
reason: only supported with c6 and c5
|
||||
- if: IDF_TARGET not in ["esp32c6", "esp32c5", "esp32c61"]
|
||||
reason: only supported with c6, c5 and c61
|
||||
|
||||
components/esp_tee/test_apps/tee_test_fw:
|
||||
disable:
|
||||
- if: IDF_TARGET not in ["esp32c6", "esp32h2", "esp32c5"]
|
||||
reason: only supported with c6, h2 and c5
|
||||
- if: IDF_TARGET not in ["esp32c6", "esp32h2", "esp32c5", "esp32c61"]
|
||||
reason: only supported with c6, h2, c5 and c61
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
| Supported Targets | ESP32-C5 | ESP32-C6 |
|
||||
| ----------------- | -------- | -------- |
|
||||
| Supported Targets | ESP32-C5 | ESP32-C6 | ESP32-C61 |
|
||||
| ----------------- | -------- | -------- | --------- |
|
||||
|
||||
# TEE CLI Application: Secure Services Demonstration
|
||||
|
||||
|
||||
@@ -21,7 +21,7 @@ from ecdsa.util import sigdecode_der
|
||||
from pytest_embedded import Dut
|
||||
from pytest_embedded_idf.utils import idf_parametrize
|
||||
|
||||
SUPPORTED_TARGETS = ['esp32c6', 'esp32c5']
|
||||
SUPPORTED_TARGETS = ['esp32c6', 'esp32c5', 'esp32c61']
|
||||
|
||||
TEST_MSG = 'hello world'
|
||||
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
| Supported Targets | ESP32-C5 | ESP32-C6 | ESP32-H2 |
|
||||
| ----------------- | -------- | -------- | -------- |
|
||||
| Supported Targets | ESP32-C5 | ESP32-C6 | ESP32-C61 | ESP32-H2 |
|
||||
| ----------------- | -------- | -------- | --------- | -------- |
|
||||
|
||||
## ESP-TEE: Test Suite
|
||||
|
||||
|
||||
@@ -28,11 +28,12 @@ esp_tee_empty_bin = {
|
||||
0x20, 0x00, 0x00, 0x42, 0x00, 0x02, 0x00, 0x00,
|
||||
# esp_app_desc structure
|
||||
0x32, 0x54, 0xCD, 0xAB, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x76, 0x35, 0x2E, 0x35, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x31, 0x2E, 0x30, 0x2E, 0x30, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x65, 0x73, 0x70, 0x5F, 0x74, 0x65, 0x65, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x30, 0x30, 0x3A, 0x30, 0x30, 0x3A, 0x30, 0x30, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x4E, 0x6F, 0x76, 0x20, 0x31, 0x31, 0x20, 0x32,
|
||||
0x30, 0x32, 0x34, 0x00, 0x00, 0x00, 0x00, 0x00, 0x76, 0x35, 0x2E, 0x35,
|
||||
@@ -41,7 +42,7 @@ esp_tee_empty_bin = {
|
||||
0x00, 0x00, 0x00, 0x00, 0x2D, 0x63, 0x66, 0x8B, 0x75, 0xFA, 0x59, 0x05,
|
||||
0x53, 0x34, 0x91, 0x71, 0x51, 0x33, 0x91, 0xDD, 0xF8, 0xB1, 0xFE, 0x83,
|
||||
0x06, 0xEB, 0x03, 0x80, 0x45, 0xC9, 0x18, 0x20, 0x83, 0x7E, 0x2E, 0x43,
|
||||
*([0x00] * 0x58),
|
||||
*([0x00] * 0x50),
|
||||
# Padding
|
||||
*([0x00] * 0x100),
|
||||
# IRAM segment
|
||||
@@ -56,11 +57,11 @@ esp_tee_empty_bin = {
|
||||
# Padding
|
||||
*([0x00] * 0x0F),
|
||||
# CRC8 checksum
|
||||
0x56,
|
||||
0x3F,
|
||||
# Image SHA256
|
||||
0xF4, 0xA4, 0xCF, 0x06, 0xAE, 0x94, 0x75, 0x47, 0xBC, 0x88, 0xA2, 0xCA,
|
||||
0x52, 0x97, 0x7A, 0x5C, 0x55, 0x43, 0xD9, 0xF5, 0xD3, 0x45, 0xD1, 0x34,
|
||||
0xFC, 0x74, 0xB2, 0xB9, 0x34, 0x72, 0xC3, 0x00
|
||||
0x2B, 0xF4, 0x49, 0x65, 0x93, 0xDD, 0xA6, 0x65, 0xE4, 0x31, 0xEA, 0xC5,
|
||||
0x42, 0x40, 0xA0, 0x96, 0x8B, 0x70, 0x48, 0xFE, 0xD9, 0x7E, 0x6F, 0x21,
|
||||
0x0B, 0xC1, 0xA5, 0xD4, 0x43, 0x87, 0x52, 0x2A
|
||||
],
|
||||
'esp32h2': [
|
||||
0xE9, 0x04, 0x02, 0x1F, 0x00, 0x00, 0x80, 0x40, 0xEE, 0x00, 0x00, 0x00,
|
||||
@@ -69,11 +70,12 @@ esp_tee_empty_bin = {
|
||||
0x20, 0x00, 0x00, 0x42, 0x00, 0x02, 0x00, 0x00,
|
||||
# esp_app_desc structure
|
||||
0x32, 0x54, 0xCD, 0xAB, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x76, 0x35, 0x2E, 0x35, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x31, 0x2E, 0x30, 0x2E, 0x30, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x65, 0x73, 0x70, 0x5F, 0x74, 0x65, 0x65, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x30, 0x30, 0x3A, 0x30, 0x30, 0x3A, 0x30, 0x30, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x4E, 0x6F, 0x76, 0x20, 0x31, 0x31, 0x20, 0x32,
|
||||
0x30, 0x32, 0x34, 0x00, 0x00, 0x00, 0x00, 0x00, 0x76, 0x35, 0x2E, 0x35,
|
||||
@@ -82,7 +84,7 @@ esp_tee_empty_bin = {
|
||||
0x00, 0x00, 0x00, 0x00, 0x2D, 0x63, 0x66, 0x8B, 0x75, 0xFA, 0x59, 0x05,
|
||||
0x53, 0x34, 0x91, 0x71, 0x51, 0x33, 0x91, 0xDD, 0xF8, 0xB1, 0xFE, 0x83,
|
||||
0x06, 0xEB, 0x03, 0x80, 0x45, 0xC9, 0x18, 0x20, 0x83, 0x7E, 0x2E, 0x43,
|
||||
*([0x00] * 0x58),
|
||||
*([0x00] * 0x50),
|
||||
# Padding
|
||||
*([0x00] * 0x100),
|
||||
# IRAM segment
|
||||
@@ -97,11 +99,11 @@ esp_tee_empty_bin = {
|
||||
# Padding
|
||||
*([0x00] * 0x0F),
|
||||
# CRC8 checksum
|
||||
0x56,
|
||||
0x3F,
|
||||
# Image SHA256
|
||||
0xDC, 0x60, 0x86, 0x6C, 0x37, 0x76, 0xAA, 0x30, 0x1F, 0x61, 0x48, 0x23,
|
||||
0xEA, 0x34, 0xAA, 0x19, 0xE8, 0xDE, 0x04, 0x7D, 0x2A, 0x30, 0xC1, 0xDD,
|
||||
0x61, 0x38, 0x9D, 0xB5, 0xCA, 0x13, 0x5A, 0x79
|
||||
0x9B, 0x83, 0x45, 0x5A, 0xCD, 0x07, 0xC2, 0x4D, 0x54, 0x29, 0xA9, 0x2B,
|
||||
0xA3, 0xB0, 0xFA, 0x97, 0x62, 0x95, 0xDA, 0x5C, 0xAD, 0xEF, 0xAC, 0x9D,
|
||||
0xB6, 0xF7, 0x09, 0x95, 0xC2, 0x33, 0x8E, 0x36
|
||||
],
|
||||
'esp32c5': [
|
||||
0xE9, 0x04, 0x02, 0x1F, 0x00, 0x00, 0x80, 0x40, 0xEE, 0x00, 0x00, 0x00,
|
||||
@@ -110,11 +112,12 @@ esp_tee_empty_bin = {
|
||||
0x20, 0x00, 0x00, 0x42, 0x00, 0x02, 0x00, 0x00,
|
||||
# esp_app_desc structure
|
||||
0x32, 0x54, 0xCD, 0xAB, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x76, 0x35, 0x2E, 0x35, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x31, 0x2E, 0x30, 0x2E, 0x30, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x65, 0x73, 0x70, 0x5F, 0x74, 0x65, 0x65, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x30, 0x30, 0x3A, 0x30, 0x30, 0x3A, 0x30, 0x30, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x4E, 0x6F, 0x76, 0x20, 0x31, 0x31, 0x20, 0x32,
|
||||
0x30, 0x32, 0x34, 0x00, 0x00, 0x00, 0x00, 0x00, 0x76, 0x35, 0x2E, 0x35,
|
||||
@@ -123,7 +126,7 @@ esp_tee_empty_bin = {
|
||||
0x00, 0x00, 0x00, 0x00, 0x2D, 0x63, 0x66, 0x8B, 0x75, 0xFA, 0x59, 0x05,
|
||||
0x53, 0x34, 0x91, 0x71, 0x51, 0x33, 0x91, 0xDD, 0xF8, 0xB1, 0xFE, 0x83,
|
||||
0x06, 0xEB, 0x03, 0x80, 0x45, 0xC9, 0x18, 0x20, 0x83, 0x7E, 0x2E, 0x43,
|
||||
*([0x00] * 0x58),
|
||||
*([0x00] * 0x50),
|
||||
# Padding
|
||||
*([0x00] * 0x100),
|
||||
# IRAM segment
|
||||
@@ -138,11 +141,53 @@ esp_tee_empty_bin = {
|
||||
# Padding
|
||||
*([0x00] * 0x0F),
|
||||
# CRC8 checksum
|
||||
0x56,
|
||||
0x3F,
|
||||
# Image SHA256
|
||||
0xCD, 0xCC, 0xF2, 0xE3, 0x52, 0x76, 0xE5, 0x6D, 0xF6, 0x32, 0x95, 0x27,
|
||||
0x5F, 0xF3, 0xD8, 0x90, 0xD7, 0x95, 0xA0, 0x95, 0xD5, 0xDA, 0xE7, 0xA4,
|
||||
0x58, 0x08, 0x84, 0xBB, 0x8F, 0x29, 0xAB, 0xE4
|
||||
0x1C, 0x25, 0x32, 0xD0, 0x99, 0xBD, 0xA4, 0xE8, 0x20, 0x8E, 0x43, 0x61,
|
||||
0xDA, 0xCD, 0x47, 0x3B, 0x2A, 0x1C, 0xCE, 0x38, 0x0F, 0x74, 0xA5, 0x7E,
|
||||
0xAA, 0x05, 0xA3, 0x8F, 0x6A, 0x22, 0xAE, 0x0B
|
||||
],
|
||||
'esp32c61': [
|
||||
0xE9, 0x04, 0x02, 0x1F, 0x00, 0x00, 0x80, 0x40, 0xEE, 0x00, 0x00, 0x00,
|
||||
0x14, 0x00, 0x00, 0x64, 0x00, 0xC7, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01,
|
||||
# DROM segment
|
||||
0x20, 0x00, 0x00, 0x42, 0x00, 0x02, 0x00, 0x00,
|
||||
# esp_app_desc structure
|
||||
0x32, 0x54, 0xCD, 0xAB, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x31, 0x2E, 0x30, 0x2E, 0x30, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x65, 0x73, 0x70, 0x5F, 0x74, 0x65, 0x65, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x30, 0x30, 0x3A, 0x30, 0x30, 0x3A, 0x30, 0x30, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x4E, 0x6F, 0x76, 0x20, 0x31, 0x31, 0x20, 0x32,
|
||||
0x30, 0x32, 0x34, 0x00, 0x00, 0x00, 0x00, 0x00, 0x76, 0x35, 0x2E, 0x35,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x2D, 0x63, 0x66, 0x8B, 0x75, 0xFA, 0x59, 0x05,
|
||||
0x53, 0x34, 0x91, 0x71, 0x51, 0x33, 0x91, 0xDD, 0xF8, 0xB1, 0xFE, 0x83,
|
||||
0x06, 0xEB, 0x03, 0x80, 0x45, 0xC9, 0x18, 0x20, 0x83, 0x7E, 0x2E, 0x43,
|
||||
*([0x00] * 0x50),
|
||||
# Padding
|
||||
*([0x00] * 0x100),
|
||||
# IRAM segment
|
||||
0x00, 0x00, 0x80, 0x40, 0x20, 0x00, 0x00, 0x00,
|
||||
*([0x00] * 0x20),
|
||||
# PADDING segment
|
||||
0x00, 0x00, 0x00, 0x00, 0xC8, 0x7D, 0x00, 0x00,
|
||||
*([0x00] * 0x7DC8),
|
||||
# IROM segment
|
||||
0x20, 0x80, 0x00, 0x42, 0x00, 0x01, 0x00, 0x00,
|
||||
*([0x00] * 0x100),
|
||||
# Padding
|
||||
*([0x00] * 0x0F),
|
||||
# CRC8 checksum
|
||||
0x3F,
|
||||
# Image SHA256
|
||||
0x3F, 0xD4, 0x9C, 0xF4, 0xBC, 0x38, 0xA3, 0x6A, 0xB9, 0xCA, 0x09, 0x3A,
|
||||
0x79, 0xFD, 0x9C, 0x20, 0xE2, 0x74, 0x89, 0xA5, 0x04, 0xAD, 0x7C, 0x45,
|
||||
0xB7, 0xB7, 0x56, 0xCD, 0x55, 0x8F, 0xD5, 0x6D
|
||||
],
|
||||
}
|
||||
# fmt: on
|
||||
|
||||
@@ -9,7 +9,7 @@ from pytest_embedded_idf.utils import idf_parametrize
|
||||
|
||||
# ---------------- Pytest build parameters ----------------
|
||||
|
||||
SUPPORTED_TARGETS = ['esp32c6', 'esp32h2', 'esp32c5']
|
||||
SUPPORTED_TARGETS = ['esp32c6', 'esp32h2', 'esp32c5', 'esp32c61']
|
||||
|
||||
CONFIG_DEFAULT = [
|
||||
# 'config, target, markers',
|
||||
@@ -53,7 +53,7 @@ REE_ISOLATION_TEST_EXC_RSN: dict[str, str] = {
|
||||
('MMU-spillover'): 'Cache error',
|
||||
}
|
||||
|
||||
TEE_APM_VIOLATION_EXC_CHK = ['eFuse', 'MMU', 'AES', 'HMAC', 'DS', 'SHA PCR', 'ECC PCR', 'SWDT/BOD']
|
||||
TEE_APM_VIOLATION_EXC_CHK = ['eFuse', 'MMU', 'SWDT/BOD', 'AES', 'HMAC', 'DS', 'SHA PCR', 'ECC PCR']
|
||||
|
||||
# ---------------- TEE default tests ----------------
|
||||
|
||||
@@ -74,6 +74,8 @@ def test_esp_tee(dut: IdfDut) -> None:
|
||||
indirect=['config', 'target'],
|
||||
)
|
||||
def test_esp_tee_crypto_aes(dut: IdfDut) -> None:
|
||||
if dut.target == 'esp32c61':
|
||||
pytest.skip(f'AES not supported on {dut.target}')
|
||||
dut.run_all_single_board_cases(group='aes')
|
||||
dut.run_all_single_board_cases(group='aes-gcm')
|
||||
|
||||
@@ -95,7 +97,8 @@ def test_esp_tee_crypto_sha(dut: IdfDut) -> None:
|
||||
indirect=['config', 'target'],
|
||||
)
|
||||
def test_esp_tee_aes_perf(dut: IdfDut) -> None:
|
||||
# start test
|
||||
if dut.target == 'esp32c61':
|
||||
pytest.skip(f'AES not supported on {dut.target}')
|
||||
for i in range(24):
|
||||
dut.run_all_single_board_cases(name=['mbedtls AES performance'])
|
||||
|
||||
@@ -110,10 +113,12 @@ def test_esp_tee_aes_perf(dut: IdfDut) -> None:
|
||||
)
|
||||
def test_esp_tee_apm_violation(dut: IdfDut) -> None:
|
||||
for check in TEE_APM_VIOLATION_EXC_CHK:
|
||||
if dut.target == 'esp32c61' and check in ('AES', 'HMAC', 'DS'):
|
||||
continue
|
||||
dut.expect_exact('Press ENTER to see the list of tests')
|
||||
dut.write(f'"Test APM violation: {check}"')
|
||||
exc = dut.expect(r'Core ([01]) panic\'ed \(([^)]+)\)', timeout=30).group(2).decode()
|
||||
if dut.target == 'esp32c5' or (dut.target == 'esp32h2' and check == 'eFuse'):
|
||||
if dut.target in ('esp32c5', 'esp32c61') or (dut.target == 'esp32h2' and check == 'eFuse'):
|
||||
exp_str = 'APM - Space exception'
|
||||
elif check == 'SWDT/BOD':
|
||||
exp_str = 'Store access fault'
|
||||
@@ -144,8 +149,9 @@ def test_esp_tee_illegal_instruction(dut: IdfDut) -> None:
|
||||
def test_esp_tee_violation_checks(dut: IdfDut) -> None:
|
||||
checks_list = TEE_VIOLATION_TEST_EXC_RSN
|
||||
for test, expected_exc in checks_list.items():
|
||||
if expected_exc is None or dut.target == 'esp32c5':
|
||||
# TODO: Enable when TEE SRAM is partitioned as IRAM (RX) and DRAM (RW)
|
||||
# NOTE: For ESP32-C5, access to the region before the SRAM does
|
||||
# not generate exceptions due to TEE PMA configuration
|
||||
if expected_exc is None or (dut.target == 'esp32c5' and test == 'IRAM-W1'):
|
||||
continue
|
||||
dut.expect_exact('Press ENTER to see the list of tests')
|
||||
dut.write(f'"Test TEE-TEE violation: {test}"')
|
||||
@@ -166,8 +172,8 @@ def test_esp_tee_isolation_checks(dut: IdfDut) -> None:
|
||||
continue
|
||||
dut.expect_exact('Press ENTER to see the list of tests')
|
||||
dut.write(f'"Test REE-TEE isolation: {test}"')
|
||||
# NOTE: For ESP32-C5, the MMU-spillover test fails gracefully without raising panic
|
||||
if dut.target == 'esp32c5' and test == 'MMU-spillover':
|
||||
# NOTE: For ESP32-C5 and C61, the MMU-spillover test fails gracefully without raising panic
|
||||
if dut.target in {'esp32c5', 'esp32c61'} and test == 'MMU-spillover':
|
||||
dut.expect_exact('Failed MMU operation, rebooting!')
|
||||
continue
|
||||
else:
|
||||
|
||||
Reference in New Issue
Block a user