Skip to content

Commit 9a47de5

Browse files
committed
Merge branch 'feat/support_esp32c2_eco4_rom_mbedtls_v3.6.0_lts' into 'master'
feat(mbedtls): support esp32c2 rev2.0 ROM mbedTLS v3.6.0-LTS Closes IDF-10680 See merge request espressif/esp-idf!33227
2 parents a900008 + 5bb9306 commit 9a47de5

File tree

8 files changed

+821
-25
lines changed

8 files changed

+821
-25
lines changed

components/esp_rom/CMakeLists.txt

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -251,6 +251,10 @@ else() # Regular app build
251251

252252
if(CONFIG_MBEDTLS_USE_CRYPTO_ROM_IMPL)
253253
rom_linker_script("mbedtls")
254+
# For ESP32C2(ECO4), mbedTLS in ROM has been updated to v3.6.0-LTS
255+
if(CONFIG_ESP32C2_REV_MIN_FULL GREATER_EQUAL 200)
256+
rom_linker_script("mbedtls.eco4")
257+
endif()
254258
endif()
255259

256260
if(CONFIG_IDF_TARGET_ARCH_XTENSA)
Lines changed: 221 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,221 @@
1+
/*
2+
* SPDX-FileCopyrightText: 2024 Espressif Systems (Shanghai) CO LTD
3+
*
4+
* SPDX-License-Identifier: Apache-2.0
5+
*/
6+
7+
/***************************************
8+
Group eco4_rom_mbedtls
9+
***************************************/
10+
11+
/* Functions */
12+
mbedtls_mpi_init = 0x400026dc;
13+
mbedtls_mpi_free = 0x400026e0;
14+
mbedtls_mpi_grow = 0x400026e4;
15+
mbedtls_mpi_shrink = 0x400026e8;
16+
mbedtls_mpi_copy = 0x400026ec;
17+
mbedtls_mpi_safe_cond_assign = 0x400026f0;
18+
mbedtls_mpi_safe_cond_swap = 0x400026f4;
19+
mbedtls_mpi_lset = 0x400026f8;
20+
mbedtls_mpi_get_bit = 0x400026fc;
21+
mbedtls_mpi_set_bit = 0x40002700;
22+
mbedtls_mpi_lsb = 0x40002704;
23+
mbedtls_mpi_bitlen = 0x40002708;
24+
mbedtls_mpi_size = 0x4000270c;
25+
mbedtls_mpi_read_binary = 0x40002710;
26+
mbedtls_mpi_write_binary = 0x40002714;
27+
mbedtls_mpi_shift_l = 0x40002718;
28+
mbedtls_mpi_shift_r = 0x4000271c;
29+
mbedtls_mpi_cmp_abs = 0x40002720;
30+
mbedtls_mpi_cmp_mpi = 0x40002724;
31+
mbedtls_mpi_lt_mpi_ct = 0x40002728;
32+
mbedtls_mpi_cmp_int = 0x4000272c;
33+
mbedtls_mpi_add_abs = 0x40002730;
34+
mbedtls_mpi_sub_abs = 0x40002734;
35+
mbedtls_mpi_add_mpi = 0x40002738;
36+
mbedtls_mpi_sub_mpi = 0x4000273c;
37+
mbedtls_mpi_add_int = 0x40002740;
38+
mbedtls_mpi_sub_int = 0x40002744;
39+
mbedtls_mpi_mul_mpi = 0x40002748;
40+
mbedtls_mpi_mul_int = 0x4000274c;
41+
mbedtls_mpi_div_mpi = 0x40002750;
42+
mbedtls_mpi_div_int = 0x40002754;
43+
mbedtls_mpi_mod_mpi = 0x40002758;
44+
mbedtls_mpi_mod_int = 0x4000275c;
45+
mbedtls_mpi_exp_mod = 0x40002760;
46+
mbedtls_mpi_fill_random = 0x40002764;
47+
mbedtls_mpi_gcd = 0x40002768;
48+
mbedtls_mpi_inv_mod = 0x4000276c;
49+
mbedtls_mpi_is_prime_ext = 0x40002770;
50+
51+
/***************************************
52+
Group eco4_rom_mbedtls
53+
***************************************/
54+
55+
/* Functions */
56+
rom_mbedtls_threading_set_alt = 0x40002c0c;
57+
mbedtls_aes_crypt_cfb8 = 0x40002c10;
58+
mbedtls_mpi_swap = 0x40002c14;
59+
mbedtls_mpi_read_string = 0x40002c18;
60+
mbedtls_mpi_write_string = 0x40002c1c;
61+
mbedtls_mpi_read_binary_le = 0x40002c20;
62+
mbedtls_mpi_write_binary_le = 0x40002c24;
63+
mbedtls_mpi_random = 0x40002c28;
64+
mbedtls_mpi_gen_prime = 0x40002c2c;
65+
mbedtls_ecp_check_budget = 0x40002c30;
66+
mbedtls_ecp_set_max_ops = 0x40002c34;
67+
mbedtls_ecp_restart_is_enabled = 0x40002c38;
68+
mbedtls_ecp_get_type = 0x40002c3c;
69+
mbedtls_ecp_curve_list = 0x40002c40;
70+
mbedtls_ecp_grp_id_list = 0x40002c44;
71+
mbedtls_ecp_curve_info_from_grp_id = 0x40002c48;
72+
mbedtls_ecp_curve_info_from_tls_id = 0x40002c4c;
73+
mbedtls_ecp_curve_info_from_name = 0x40002c50;
74+
mbedtls_ecp_point_init = 0x40002c54;
75+
mbedtls_ecp_group_init = 0x40002c58;
76+
mbedtls_ecp_keypair_init = 0x40002c5c;
77+
mbedtls_ecp_point_free = 0x40002c60;
78+
mbedtls_ecp_group_free = 0x40002c64;
79+
mbedtls_ecp_keypair_free = 0x40002c68;
80+
mbedtls_ecp_restart_init = 0x40002c6c;
81+
mbedtls_ecp_restart_free = 0x40002c70;
82+
mbedtls_ecp_copy = 0x40002c74;
83+
mbedtls_ecp_group_copy = 0x40002c78;
84+
mbedtls_ecp_set_zero = 0x40002c7c;
85+
mbedtls_ecp_is_zero = 0x40002c80;
86+
mbedtls_ecp_point_cmp = 0x40002c84;
87+
mbedtls_ecp_point_read_string = 0x40002c88;
88+
mbedtls_ecp_point_write_binary = 0x40002c8c;
89+
mbedtls_ecp_point_read_binary = 0x40002c90;
90+
mbedtls_ecp_tls_read_point = 0x40002c94;
91+
mbedtls_ecp_tls_write_point = 0x40002c98;
92+
mbedtls_ecp_group_load = 0x40002c9c;
93+
mbedtls_ecp_tls_read_group = 0x40002ca0;
94+
mbedtls_ecp_tls_read_group_id = 0x40002ca4;
95+
mbedtls_ecp_tls_write_group = 0x40002ca8;
96+
mbedtls_ecp_mul = 0x40002cac;
97+
mbedtls_ecp_mul_restartable = 0x40002cb0;
98+
mbedtls_ecp_muladd = 0x40002cb4;
99+
mbedtls_ecp_muladd_restartable = 0x40002cb8;
100+
mbedtls_ecp_check_pubkey = 0x40002cbc;
101+
mbedtls_ecp_check_privkey = 0x40002cc0;
102+
mbedtls_ecp_gen_privkey = 0x40002cc4;
103+
mbedtls_ecp_gen_keypair_base = 0x40002cc8;
104+
mbedtls_ecp_gen_keypair = 0x40002ccc;
105+
mbedtls_ecp_gen_key = 0x40002cd0;
106+
mbedtls_ecp_read_key = 0x40002cd4;
107+
mbedtls_ecp_write_key_ext = 0x40002cd8;
108+
mbedtls_ecp_check_pub_priv = 0x40002cdc;
109+
mbedtls_ecp_export = 0x40002ce0;
110+
mbedtls_asn1_get_enum = 0x40002ce4;
111+
mbedtls_asn1_sequence_free = 0x40002ce8;
112+
mbedtls_asn1_traverse_sequence_of = 0x40002cec;
113+
mbedtls_asn1_find_named_data = 0x40002cf0;
114+
mbedtls_asn1_free_named_data_list = 0x40002cf4;
115+
mbedtls_asn1_free_named_data_list_shallow = 0x40002cf8;
116+
mbedtls_asn1_write_raw_buffer = 0x40002cfc;
117+
mbedtls_asn1_write_null = 0x40002d00;
118+
mbedtls_asn1_write_oid = 0x40002d04;
119+
mbedtls_asn1_write_algorithm_identifier = 0x40002d08;
120+
mbedtls_asn1_write_bool = 0x40002d0c;
121+
mbedtls_asn1_write_int = 0x40002d10;
122+
mbedtls_asn1_write_enum = 0x40002d14;
123+
mbedtls_asn1_write_tagged_string = 0x40002d18;
124+
mbedtls_asn1_write_printable_string = 0x40002d1c;
125+
mbedtls_asn1_write_utf8_string = 0x40002d20;
126+
mbedtls_asn1_write_ia5_string = 0x40002d24;
127+
mbedtls_asn1_write_bitstring = 0x40002d28;
128+
mbedtls_asn1_write_named_bitstring = 0x40002d2c;
129+
mbedtls_asn1_write_octet_string = 0x40002d30;
130+
mbedtls_asn1_store_named_data = 0x40002d34;
131+
mbedtls_ccm_starts = 0x40002d38;
132+
mbedtls_ccm_set_lengths = 0x40002d3c;
133+
mbedtls_ccm_update_ad = 0x40002d40;
134+
mbedtls_ccm_update = 0x40002d44;
135+
mbedtls_ccm_finish = 0x40002d48;
136+
mbedtls_cipher_list = 0x40002d4c;
137+
mbedtls_cipher_info_from_string = 0x40002d50;
138+
mbedtls_cipher_info_from_type = 0x40002d54;
139+
mbedtls_cipher_info_from_values = 0x40002d58;
140+
mbedtls_cipher_free = 0x40002d5c;
141+
mbedtls_cipher_setup = 0x40002d60;
142+
mbedtls_cipher_setkey = 0x40002d64;
143+
mbedtls_cipher_set_iv = 0x40002d68;
144+
mbedtls_cipher_update_ad = 0x40002d6c;
145+
mbedtls_cipher_update = 0x40002d70;
146+
mbedtls_cipher_write_tag = 0x40002d74;
147+
mbedtls_cipher_check_tag = 0x40002d78;
148+
mbedtls_cipher_auth_encrypt_ext = 0x40002d7c;
149+
mbedtls_cipher_auth_decrypt_ext = 0x40002d80;
150+
mbedtls_cipher_cmac_reset = 0x40002d84;
151+
mbedtls_cipher_cmac = 0x40002d88;
152+
mbedtls_aes_cmac_prf_128 = 0x40002d8c;
153+
mbedtls_ctr_drbg_set_prediction_resistance = 0x40002d90;
154+
mbedtls_ctr_drbg_set_entropy_len = 0x40002d94;
155+
mbedtls_ctr_drbg_set_nonce_len = 0x40002d98;
156+
mbedtls_ctr_drbg_set_reseed_interval = 0x40002d9c;
157+
mbedtls_ctr_drbg_update = 0x40002da0;
158+
mbedtls_base64_encode = 0x40002da4;
159+
mbedtls_rsa_init = 0x40002da8;
160+
mbedtls_rsa_set_padding = 0x40002dac;
161+
mbedtls_rsa_get_padding_mode = 0x40002db0;
162+
mbedtls_rsa_get_md_alg = 0x40002db4;
163+
mbedtls_rsa_import = 0x40002db8;
164+
mbedtls_rsa_import_raw = 0x40002dbc;
165+
mbedtls_rsa_complete = 0x40002dc0;
166+
mbedtls_rsa_export = 0x40002dc4;
167+
mbedtls_rsa_export_raw = 0x40002dc8;
168+
mbedtls_rsa_export_crt = 0x40002dcc;
169+
mbedtls_rsa_get_len = 0x40002dd0;
170+
mbedtls_rsa_gen_key = 0x40002dd4;
171+
mbedtls_rsa_check_pubkey = 0x40002dd8;
172+
mbedtls_rsa_check_privkey = 0x40002ddc;
173+
mbedtls_rsa_check_pub_priv = 0x40002de0;
174+
mbedtls_rsa_public = 0x40002de4;
175+
mbedtls_rsa_private = 0x40002de8;
176+
mbedtls_rsa_pkcs1_encrypt = 0x40002dec;
177+
mbedtls_rsa_rsaes_pkcs1_v15_encrypt = 0x40002df0;
178+
mbedtls_rsa_rsaes_oaep_encrypt = 0x40002df4;
179+
mbedtls_rsa_pkcs1_decrypt = 0x40002df8;
180+
mbedtls_rsa_rsaes_pkcs1_v15_decrypt = 0x40002dfc;
181+
mbedtls_rsa_rsaes_oaep_decrypt = 0x40002e00;
182+
mbedtls_rsa_pkcs1_sign = 0x40002e04;
183+
mbedtls_rsa_rsassa_pkcs1_v15_sign = 0x40002e08;
184+
mbedtls_rsa_rsassa_pss_sign_ext = 0x40002e0c;
185+
mbedtls_rsa_rsassa_pss_sign = 0x40002e10;
186+
mbedtls_rsa_pkcs1_verify = 0x40002e14;
187+
mbedtls_rsa_rsassa_pkcs1_v15_verify = 0x40002e18;
188+
mbedtls_rsa_rsassa_pss_verify = 0x40002e1c;
189+
mbedtls_rsa_rsassa_pss_verify_ext = 0x40002e20;
190+
mbedtls_rsa_copy = 0x40002e24;
191+
mbedtls_rsa_free = 0x40002e28;
192+
mbedtls_ecdh_can_do = 0x40002e2c;
193+
mbedtls_ecdh_gen_public = 0x40002e30;
194+
mbedtls_ecdh_compute_shared = 0x40002e34;
195+
mbedtls_ecdh_init = 0x40002e38;
196+
mbedtls_ecdh_setup = 0x40002e3c;
197+
mbedtls_ecdh_free = 0x40002e40;
198+
mbedtls_ecdh_make_params = 0x40002e44;
199+
mbedtls_ecdh_read_params = 0x40002e48;
200+
mbedtls_ecdh_get_params = 0x40002e4c;
201+
mbedtls_ecdh_make_public = 0x40002e50;
202+
mbedtls_ecdh_read_public = 0x40002e54;
203+
mbedtls_ecdh_calc_secret = 0x40002e58;
204+
mbedtls_ecdh_enable_restart = 0x40002e5c;
205+
mbedtls_ecdsa_can_do = 0x40002e60;
206+
mbedtls_ecdsa_sign = 0x40002e64;
207+
mbedtls_ecdsa_sign_det_ext = 0x40002e68;
208+
mbedtls_ecdsa_sign_restartable = 0x40002e6c;
209+
mbedtls_ecdsa_sign_det_restartable = 0x40002e70;
210+
mbedtls_ecdsa_verify = 0x40002e74;
211+
mbedtls_ecdsa_verify_restartable = 0x40002e78;
212+
mbedtls_ecdsa_write_signature = 0x40002e7c;
213+
mbedtls_ecdsa_write_signature_restartable = 0x40002e80;
214+
mbedtls_ecdsa_read_signature = 0x40002e84;
215+
mbedtls_ecdsa_read_signature_restartable = 0x40002e88;
216+
mbedtls_ecdsa_genkey = 0x40002e8c;
217+
mbedtls_ecdsa_from_keypair = 0x40002e90;
218+
mbedtls_ecdsa_init = 0x40002e94;
219+
mbedtls_ecdsa_free = 0x40002e98;
220+
mbedtls_ecdsa_restart_init = 0x40002e9c;
221+
mbedtls_ecdsa_restart_free = 0x40002ea0;

components/esp_rom/esp32c2/ld/esp32c2.rom.mbedtls.ld

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -74,7 +74,7 @@ mbedtls_sha512_clone = 0x40002a50;
7474
mbedtls_sha512_starts = 0x40002a54;
7575
mbedtls_sha512_update = 0x40002a58;
7676
mbedtls_sha512_finish = 0x40002a5c;
77-
mbedtls_internal_sha512_process = 0x40002a60;
77+
/*mbedtls_internal_sha512_process = 0x40002a60;*/
7878
mbedtls_sha512 = 0x40002a64;
7979
mbedtls_aes_xts_init = 0x40002b68;
8080
mbedtls_aes_xts_free = 0x40002b6c;
@@ -95,7 +95,7 @@ mbedtls_md5_clone = 0x40002be0;
9595
mbedtls_md5_starts = 0x40002be4;
9696
mbedtls_md5_update = 0x40002be8;
9797
mbedtls_md5_finish = 0x40002bec;
98-
mbedtls_internal_md5_process = 0x40002bf0;
98+
/*mbedtls_internal_md5_process = 0x40002bf0;*/
9999
mbedtls_md5 = 0x40002bf4;
100100
mbedtls_sha1 = 0x40002c08;
101101
/* Data (.data, .bss, .rodata) */

components/mbedtls/CMakeLists.txt

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,10 @@ endif()
1212
set(mbedtls_srcs "")
1313
set(mbedtls_include_dirs "port/include" "mbedtls/include" "mbedtls/library")
1414

15+
if(CONFIG_MBEDTLS_USE_CRYPTO_ROM_IMPL)
16+
list(APPEND mbedtls_include_dirs "port/mbedtls_rom")
17+
endif()
18+
1519
if(CONFIG_MBEDTLS_CERTIFICATE_BUNDLE)
1620
list(APPEND mbedtls_srcs "esp_crt_bundle/esp_crt_bundle.c")
1721
list(APPEND mbedtls_include_dirs "esp_crt_bundle/include")
@@ -94,6 +98,11 @@ set(Python3_EXECUTABLE ${python})
9498
# Needed to for include_next includes to work from within mbedtls
9599
include_directories("${COMPONENT_DIR}/port/include")
96100

101+
# Needed to for mbedtls_rom includes to work from within mbedtls
102+
if(CONFIG_MBEDTLS_USE_CRYPTO_ROM_IMPL)
103+
include_directories("${COMPONENT_DIR}/port/mbedtls_rom")
104+
endif()
105+
97106
# Import mbedtls library targets
98107
add_subdirectory(mbedtls)
99108

components/mbedtls/Kconfig

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -379,7 +379,6 @@ menu "mbedTLS"
379379

380380
config MBEDTLS_CMAC_C
381381
bool "Enable CMAC mode for block ciphers"
382-
default y if MBEDTLS_USE_CRYPTO_ROM_IMPL
383382
default n
384383
depends on MBEDTLS_AES_C || MBEDTLS_DES_C
385384
help
@@ -1144,17 +1143,21 @@ menu "mbedTLS"
11441143
select MBEDTLS_SHA512_C
11451144
select MBEDTLS_AES_C
11461145
select MBEDTLS_CCM_C
1146+
select MBEDTLS_CMAC_C
11471147
select MBEDTLS_ROM_MD5
11481148
select MBEDTLS_HARDWARE_SHA
1149+
select MBEDTLS_ECP_RESTARTABLE
1150+
select MBEDTLS_THREADING_C
11491151
help
11501152
Enable this flag to use mbedtls crypto algorithm from ROM instead of ESP-IDF.
11511153

11521154
This configuration option saves flash footprint in the application binary.
1153-
Note that the version of mbedtls crypto algorithm library in ROM is v2.16.12.
1154-
We have done the security analysis of the mbedtls revision in ROM (v2.16.12)
1155+
Note that the version of mbedtls crypto algorithm library in ROM(ECO1~ECO3) is v2.16.12,
1156+
and the version of mbedtls crypto algorithm library in ROM(ECO4) is v3.6.0.
1157+
We have done the security analysis of the mbedtls revision in ROM (ECO1~ECO4)
11551158
and ensured that affected symbols have been patched (removed). If in the future
11561159
mbedtls revisions there are security issues that also affects the version in
1157-
ROM (v2.16.12) then we shall patch the relevant symbols. This would increase
1160+
ROM (ECO1~ECO4) then we shall patch the relevant symbols. This would increase
11581161
the flash footprint and hence care must be taken to keep some reserved space
11591162
for the application binary in flash layout.
11601163

0 commit comments

Comments
 (0)