1 /*
2  * SPDX-FileCopyrightText: 2023-2024 Espressif Systems (Shanghai) CO LTD
3  *
4  * SPDX-License-Identifier: Apache-2.0
5  */
6 
7 #if !defined(MBEDTLS_CONFIG_FILE)
8 #include "mbedtls/config.h"
9 #else
10 #include MBEDTLS_CONFIG_FILE
11 #endif
12 
13 #include "soc/chip_revision.h"
14 #include "hal/efuse_hal.h"
15 #include "mbedtls/platform.h"
16 #include "mbedtls_rom_osi.h"
17 
18 void mbedtls_rom_osi_functions_init(void);
19 
mbedtls_rom_mutex_init(mbedtls_threading_mutex_t * mutex)20 static void mbedtls_rom_mutex_init( mbedtls_threading_mutex_t *mutex )
21 {
22     if (mutex == NULL) {
23         return;
24     }
25 
26 #if defined(MBEDTLS_THREADING_ALT)
27     mutex->mutex = xSemaphoreCreateMutex();
28     assert(mutex->mutex != NULL);
29 #else
30     mbedtls_mutex_init(mutex);
31 #endif
32 }
33 
mbedtls_rom_mutex_free(mbedtls_threading_mutex_t * mutex)34 static void mbedtls_rom_mutex_free( mbedtls_threading_mutex_t *mutex )
35 {
36     if (mutex == NULL) {
37         return;
38     }
39 
40 #if defined(MBEDTLS_THREADING_ALT)
41     vSemaphoreDelete(mutex->mutex);
42 #else
43     mbedtls_mutex_free(mutex);
44 #endif
45 }
46 
mbedtls_rom_mutex_lock(mbedtls_threading_mutex_t * mutex)47 static int mbedtls_rom_mutex_lock( mbedtls_threading_mutex_t *mutex )
48 {
49     if (mutex == NULL) {
50         return MBEDTLS_ERR_THREADING_BAD_INPUT_DATA;
51     }
52 
53 #if defined(MBEDTLS_THREADING_ALT)
54     if (xSemaphoreTake(mutex->mutex, portMAX_DELAY) != pdTRUE) {
55         return MBEDTLS_ERR_THREADING_MUTEX_ERROR;
56     }
57     return 0;
58 #else
59     return mbedtls_mutex_lock(mutex);
60 #endif
61 }
62 
mbedtls_rom_mutex_unlock(mbedtls_threading_mutex_t * mutex)63 static int mbedtls_rom_mutex_unlock( mbedtls_threading_mutex_t *mutex )
64 {
65     if (mutex == NULL) {
66         return MBEDTLS_ERR_THREADING_BAD_INPUT_DATA;
67     }
68 
69 #if defined(MBEDTLS_THREADING_ALT)
70     if (xSemaphoreGive(mutex->mutex) != pdTRUE) {
71         return MBEDTLS_ERR_THREADING_MUTEX_ERROR;
72     }
73     return 0;
74 #else
75     return mbedtls_mutex_unlock(mutex);
76 #endif
77 }
78 
79 /* This structure can be automatically generated by the script with rom.mbedtls.ld. */
80 static const mbedtls_rom_funcs_t mbedtls_rom_funcs_table = {
81     /* Fill the ROM functions into mbedtls rom function table. */
82     /* aes module */
83     ._rom_mbedtls_aes_init = mbedtls_aes_init,
84     ._rom_mbedtls_aes_free = mbedtls_aes_free,
85     ._rom_mbedtls_aes_setkey_enc = mbedtls_aes_setkey_enc,
86     ._rom_mbedtls_aes_setkey_dec = mbedtls_aes_setkey_dec,
87     ._rom_mbedtls_aes_crypt_ecb = mbedtls_aes_crypt_ecb,
88     ._rom_mbedtls_aes_crypt_cbc = mbedtls_aes_crypt_cbc,
89     ._rom_mbedtls_internal_aes_encrypt = mbedtls_internal_aes_encrypt,
90     ._rom_mbedtls_internal_aes_decrypt = mbedtls_internal_aes_decrypt,
91     /* asn1 module */
92     ._rom_mbedtls_asn1_get_len = mbedtls_asn1_get_len,
93     ._rom_mbedtls_asn1_get_tag = mbedtls_asn1_get_tag,
94     ._rom_mbedtls_asn1_get_bool = mbedtls_asn1_get_bool,
95     ._rom_mbedtls_asn1_get_int = mbedtls_asn1_get_int,
96     ._rom_mbedtls_asn1_get_bitstring = mbedtls_asn1_get_bitstring,
97     ._rom_mbedtls_asn1_get_bitstring_null = mbedtls_asn1_get_bitstring_null,
98     ._rom_mbedtls_asn1_get_sequence_of = mbedtls_asn1_get_sequence_of,
99     ._rom_mbedtls_asn1_get_mpi = mbedtls_asn1_get_mpi,
100     ._rom_mbedtls_asn1_get_alg = mbedtls_asn1_get_alg,
101     ._rom_mbedtls_asn1_get_alg_null = mbedtls_asn1_get_alg_null,
102     ._rom_mbedtls_asn1_write_len = mbedtls_asn1_write_len,
103     ._rom_mbedtls_asn1_write_tag = mbedtls_asn1_write_tag,
104     ._rom_mbedtls_asn1_write_mpi = mbedtls_asn1_write_mpi,
105     /* base64 module */
106     ._rom_mbedtls_base64_decode = mbedtls_base64_decode,
107     /* bignum module */
108     ._rom_mbedtls_mpi_init = mbedtls_mpi_init,
109     ._rom_mbedtls_mpi_free = mbedtls_mpi_free,
110     ._rom_mbedtls_mpi_grow = mbedtls_mpi_grow,
111     ._rom_mbedtls_mpi_shrink = mbedtls_mpi_shrink,
112     ._rom_mbedtls_mpi_copy = mbedtls_mpi_copy,
113     ._rom_mbedtls_mpi_safe_cond_assign = mbedtls_mpi_safe_cond_assign,
114     ._rom_mbedtls_mpi_safe_cond_swap = mbedtls_mpi_safe_cond_swap,
115     ._rom_mbedtls_mpi_lset = mbedtls_mpi_lset,
116     ._rom_mbedtls_mpi_get_bit = mbedtls_mpi_get_bit,
117     ._rom_mbedtls_mpi_set_bit = mbedtls_mpi_set_bit,
118     ._rom_mbedtls_mpi_lsb = mbedtls_mpi_lsb,
119     ._rom_mbedtls_mpi_bitlen = mbedtls_mpi_bitlen,
120     ._rom_mbedtls_mpi_size = mbedtls_mpi_size,
121     ._rom_mbedtls_mpi_read_binary = mbedtls_mpi_read_binary,
122     ._rom_mbedtls_mpi_write_binary = mbedtls_mpi_write_binary,
123     ._rom_mbedtls_mpi_shift_l = mbedtls_mpi_shift_l,
124     ._rom_mbedtls_mpi_shift_r = mbedtls_mpi_shift_r,
125     ._rom_mbedtls_mpi_cmp_abs = mbedtls_mpi_cmp_abs,
126     ._rom_mbedtls_mpi_cmp_mpi = mbedtls_mpi_cmp_mpi,
127     ._rom_mbedtls_mpi_lt_mpi_ct = mbedtls_mpi_lt_mpi_ct,
128     ._rom_mbedtls_mpi_cmp_int = mbedtls_mpi_cmp_int,
129     ._rom_mbedtls_mpi_add_abs = mbedtls_mpi_add_abs,
130     ._rom_mbedtls_mpi_sub_abs = mbedtls_mpi_sub_abs,
131     ._rom_mbedtls_mpi_add_mpi = mbedtls_mpi_add_mpi,
132     ._rom_mbedtls_mpi_sub_mpi = mbedtls_mpi_sub_mpi,
133     ._rom_mbedtls_mpi_add_int = mbedtls_mpi_add_int,
134     ._rom_mbedtls_mpi_sub_int = mbedtls_mpi_sub_int,
135     ._rom_mbedtls_mpi_mul_mpi = mbedtls_mpi_mul_mpi,
136     ._rom_mbedtls_mpi_mul_int = mbedtls_mpi_mul_int,
137     ._rom_mbedtls_mpi_div_mpi = mbedtls_mpi_div_mpi,
138     ._rom_mbedtls_mpi_div_int = mbedtls_mpi_div_int,
139     ._rom_mbedtls_mpi_mod_mpi = mbedtls_mpi_mod_mpi,
140     ._rom_mbedtls_mpi_mod_int = mbedtls_mpi_mod_int,
141     ._rom_mbedtls_mpi_exp_mod = mbedtls_mpi_exp_mod,
142     ._rom_mbedtls_mpi_fill_random = mbedtls_mpi_fill_random,
143     ._rom_mbedtls_mpi_gcd = mbedtls_mpi_gcd,
144     ._rom_mbedtls_mpi_inv_mod = mbedtls_mpi_inv_mod,
145     ._rom_mbedtls_mpi_is_prime_ext = mbedtls_mpi_is_prime_ext,
146     /* ccm module */
147     ._rom_mbedtls_ccm_star_encrypt_and_tag = mbedtls_ccm_star_encrypt_and_tag,
148     ._rom_mbedtls_ccm_star_auth_decrypt = mbedtls_ccm_star_auth_decrypt,
149     /* cipher module */
150     ._rom_mbedtls_cipher_init = mbedtls_cipher_init,
151     ._rom_mbedtls_cipher_set_padding_mode = mbedtls_cipher_set_padding_mode,
152     ._rom_mbedtls_cipher_reset = mbedtls_cipher_reset,
153     ._rom_mbedtls_cipher_finish = mbedtls_cipher_finish,
154     ._rom_mbedtls_cipher_crypt = mbedtls_cipher_crypt,
155     ._rom_mbedtls_cipher_cmac_starts = mbedtls_cipher_cmac_starts,
156     ._rom_mbedtls_cipher_cmac_update = mbedtls_cipher_cmac_update,
157     ._rom_mbedtls_cipher_cmac_finish = mbedtls_cipher_cmac_finish,
158     /* ctr drbg module */
159     ._rom_mbedtls_ctr_drbg_init = mbedtls_ctr_drbg_init,
160     ._rom_mbedtls_ctr_drbg_seed = mbedtls_ctr_drbg_seed,
161     ._rom_mbedtls_ctr_drbg_free = mbedtls_ctr_drbg_free,
162     ._rom_mbedtls_ctr_drbg_reseed = mbedtls_ctr_drbg_reseed,
163     ._rom_mbedtls_ctr_drbg_random_with_add = mbedtls_ctr_drbg_random_with_add,
164     ._rom_mbedtls_ctr_drbg_random = mbedtls_ctr_drbg_random,
165     /* sha1 module */
166     ._rom_mbedtls_sha1_init = mbedtls_sha1_init,
167     ._rom_mbedtls_sha1_free = mbedtls_sha1_free,
168     ._rom_mbedtls_sha1_clone = mbedtls_sha1_clone,
169     ._rom_mbedtls_sha1_starts = mbedtls_sha1_starts,
170     ._rom_mbedtls_sha1_finish = mbedtls_sha1_finish,
171     /* sha256 module */
172     ._rom_mbedtls_sha256_init = mbedtls_sha256_init,
173     ._rom_mbedtls_sha256_free = mbedtls_sha256_free,
174     ._rom_mbedtls_sha256_clone = mbedtls_sha256_clone,
175     ._rom_mbedtls_sha256_starts = mbedtls_sha256_starts,
176     ._rom_mbedtls_sha256_finish = mbedtls_sha256_finish,
177     ._rom_mbedtls_sha256 = mbedtls_sha256,
178     /* sha512 module */
179     ._rom_mbedtls_sha512_init = mbedtls_sha512_init,
180     ._rom_mbedtls_sha512_free = mbedtls_sha512_free,
181     ._rom_mbedtls_sha512_clone = mbedtls_sha512_clone,
182     ._rom_mbedtls_sha512_starts = mbedtls_sha512_starts,
183     ._rom_mbedtls_sha512_update = mbedtls_sha512_update,
184     ._rom_mbedtls_sha512_finish = mbedtls_sha512_finish,
185     ._rom_mbedtls_internal_sha512_process = mbedtls_internal_sha512_process,
186     ._rom_mbedtls_sha512 = mbedtls_sha512,
187 
188     /* Fill the platform functions into mbedtls rom function table. */
189     ._mbedtls_mutex_init = mbedtls_rom_mutex_init,
190     ._mbedtls_mutex_free = mbedtls_rom_mutex_free,
191     ._mbedtls_mutex_lock = mbedtls_rom_mutex_lock,
192     ._mbedtls_mutex_unlock = mbedtls_rom_mutex_unlock,
193     ._mbedtls_calloc = MBEDTLS_PLATFORM_STD_CALLOC,
194     ._mbedtls_free = MBEDTLS_PLATFORM_STD_FREE,
195 
196     /* Fill the SHA functions into mbedtls rom function table, since these functions are not exported in the ROM interface. */
197     ._mbedtls_sha1_update = mbedtls_sha1_update,
198     ._mbedtls_internal_sha1_process = mbedtls_internal_sha1_process,
199     ._mbedtls_sha256_update = mbedtls_sha256_update,
200     ._mbedtls_internal_sha256_process = mbedtls_internal_sha256_process,
201 };
202 
203 /* This structure can be automatically generated by the script with rom.mbedtls.ld. */
204 static const mbedtls_rom_eco4_funcs_t mbedtls_rom_eco4_funcs_table = {
205     /* Fill the ROM functions into mbedtls rom function table. */
206     /* aes module */
207     ._rom_mbedtls_aes_init = mbedtls_aes_init,
208     ._rom_mbedtls_aes_free = mbedtls_aes_free,
209     ._rom_mbedtls_aes_setkey_enc = mbedtls_aes_setkey_enc,
210     ._rom_mbedtls_aes_setkey_dec = mbedtls_aes_setkey_dec,
211     ._rom_mbedtls_aes_crypt_ecb = mbedtls_aes_crypt_ecb,
212     ._rom_mbedtls_aes_crypt_cbc = mbedtls_aes_crypt_cbc,
213     ._rom_mbedtls_internal_aes_encrypt = mbedtls_internal_aes_encrypt,
214     ._rom_mbedtls_internal_aes_decrypt = mbedtls_internal_aes_decrypt,
215     /* asn1 module */
216     ._rom_mbedtls_asn1_get_len = mbedtls_asn1_get_len,
217     ._rom_mbedtls_asn1_get_tag = mbedtls_asn1_get_tag,
218     ._rom_mbedtls_asn1_get_bool = mbedtls_asn1_get_bool,
219     ._rom_mbedtls_asn1_get_int = mbedtls_asn1_get_int,
220     ._rom_mbedtls_asn1_get_bitstring = mbedtls_asn1_get_bitstring,
221     ._rom_mbedtls_asn1_get_bitstring_null = mbedtls_asn1_get_bitstring_null,
222     ._rom_mbedtls_asn1_get_sequence_of = mbedtls_asn1_get_sequence_of,
223     ._rom_mbedtls_asn1_get_mpi = mbedtls_asn1_get_mpi,
224     ._rom_mbedtls_asn1_get_alg = mbedtls_asn1_get_alg,
225     ._rom_mbedtls_asn1_get_alg_null = mbedtls_asn1_get_alg_null,
226     ._rom_mbedtls_asn1_write_len = mbedtls_asn1_write_len,
227     ._rom_mbedtls_asn1_write_tag = mbedtls_asn1_write_tag,
228     ._rom_mbedtls_asn1_write_mpi = mbedtls_asn1_write_mpi,
229     /* base64 module */
230     ._rom_mbedtls_base64_decode = mbedtls_base64_decode,
231     /* bignum module */
232     ._rom_mbedtls_mpi_init = mbedtls_mpi_init,
233     ._rom_mbedtls_mpi_free = mbedtls_mpi_free,
234     ._rom_mbedtls_mpi_grow = mbedtls_mpi_grow,
235     ._rom_mbedtls_mpi_shrink = mbedtls_mpi_shrink,
236     ._rom_mbedtls_mpi_copy = mbedtls_mpi_copy,
237     ._rom_mbedtls_mpi_safe_cond_assign = mbedtls_mpi_safe_cond_assign,
238     ._rom_mbedtls_mpi_safe_cond_swap = mbedtls_mpi_safe_cond_swap,
239     ._rom_mbedtls_mpi_lset = mbedtls_mpi_lset,
240     ._rom_mbedtls_mpi_get_bit = mbedtls_mpi_get_bit,
241     ._rom_mbedtls_mpi_set_bit = mbedtls_mpi_set_bit,
242     ._rom_mbedtls_mpi_lsb = mbedtls_mpi_lsb,
243     ._rom_mbedtls_mpi_bitlen = mbedtls_mpi_bitlen,
244     ._rom_mbedtls_mpi_size = mbedtls_mpi_size,
245     ._rom_mbedtls_mpi_read_binary = mbedtls_mpi_read_binary,
246     ._rom_mbedtls_mpi_write_binary = mbedtls_mpi_write_binary,
247     ._rom_mbedtls_mpi_shift_l = mbedtls_mpi_shift_l,
248     ._rom_mbedtls_mpi_shift_r = mbedtls_mpi_shift_r,
249     ._rom_mbedtls_mpi_cmp_abs = mbedtls_mpi_cmp_abs,
250     ._rom_mbedtls_mpi_cmp_mpi = mbedtls_mpi_cmp_mpi,
251     ._rom_mbedtls_mpi_lt_mpi_ct = mbedtls_mpi_lt_mpi_ct,
252     ._rom_mbedtls_mpi_cmp_int = mbedtls_mpi_cmp_int,
253     ._rom_mbedtls_mpi_add_abs = mbedtls_mpi_add_abs,
254     ._rom_mbedtls_mpi_sub_abs = mbedtls_mpi_sub_abs,
255     ._rom_mbedtls_mpi_add_mpi = mbedtls_mpi_add_mpi,
256     ._rom_mbedtls_mpi_sub_mpi = mbedtls_mpi_sub_mpi,
257     ._rom_mbedtls_mpi_add_int = mbedtls_mpi_add_int,
258     ._rom_mbedtls_mpi_sub_int = mbedtls_mpi_sub_int,
259     ._rom_mbedtls_mpi_mul_mpi = mbedtls_mpi_mul_mpi,
260     ._rom_mbedtls_mpi_mul_int = mbedtls_mpi_mul_int,
261     ._rom_mbedtls_mpi_div_mpi = mbedtls_mpi_div_mpi,
262     ._rom_mbedtls_mpi_div_int = mbedtls_mpi_div_int,
263     ._rom_mbedtls_mpi_mod_mpi = mbedtls_mpi_mod_mpi,
264     ._rom_mbedtls_mpi_mod_int = mbedtls_mpi_mod_int,
265     ._rom_mbedtls_mpi_exp_mod = mbedtls_mpi_exp_mod,
266     ._rom_mbedtls_mpi_fill_random = mbedtls_mpi_fill_random,
267     ._rom_mbedtls_mpi_gcd = mbedtls_mpi_gcd,
268     ._rom_mbedtls_mpi_inv_mod = mbedtls_mpi_inv_mod,
269     ._rom_mbedtls_mpi_is_prime_ext = mbedtls_mpi_is_prime_ext,
270     /* ccm module */
271     ._rom_mbedtls_ccm_star_encrypt_and_tag = mbedtls_ccm_star_encrypt_and_tag,
272     ._rom_mbedtls_ccm_star_auth_decrypt = mbedtls_ccm_star_auth_decrypt,
273     /* cipher module */
274     ._rom_mbedtls_cipher_init = mbedtls_cipher_init,
275     ._rom_mbedtls_cipher_set_padding_mode = mbedtls_cipher_set_padding_mode,
276     ._rom_mbedtls_cipher_reset = mbedtls_cipher_reset,
277     ._rom_mbedtls_cipher_finish = mbedtls_cipher_finish,
278     ._rom_mbedtls_cipher_crypt = mbedtls_cipher_crypt,
279     ._rom_mbedtls_cipher_cmac_starts = mbedtls_cipher_cmac_starts,
280     ._rom_mbedtls_cipher_cmac_update = mbedtls_cipher_cmac_update,
281     ._rom_mbedtls_cipher_cmac_finish = mbedtls_cipher_cmac_finish,
282     /* ctr drbg module */
283     ._rom_mbedtls_ctr_drbg_init = mbedtls_ctr_drbg_init,
284     ._rom_mbedtls_ctr_drbg_seed = mbedtls_ctr_drbg_seed,
285     ._rom_mbedtls_ctr_drbg_free = mbedtls_ctr_drbg_free,
286     ._rom_mbedtls_ctr_drbg_reseed = mbedtls_ctr_drbg_reseed,
287     ._rom_mbedtls_ctr_drbg_random_with_add = mbedtls_ctr_drbg_random_with_add,
288     ._rom_mbedtls_ctr_drbg_random = mbedtls_ctr_drbg_random,
289     /* sha1 module */
290     ._rom_mbedtls_sha1_init = mbedtls_sha1_init,
291     ._rom_mbedtls_sha1_free = mbedtls_sha1_free,
292     ._rom_mbedtls_sha1_clone = mbedtls_sha1_clone,
293     ._rom_mbedtls_sha1_starts = mbedtls_sha1_starts,
294     ._rom_mbedtls_sha1_finish = mbedtls_sha1_finish,
295     /* sha256 module */
296     ._rom_mbedtls_sha256_init = mbedtls_sha256_init,
297     ._rom_mbedtls_sha256_free = mbedtls_sha256_free,
298     ._rom_mbedtls_sha256_clone = mbedtls_sha256_clone,
299     ._rom_mbedtls_sha256_starts = mbedtls_sha256_starts,
300     ._rom_mbedtls_sha256_finish = mbedtls_sha256_finish,
301     ._rom_mbedtls_sha256 = mbedtls_sha256,
302     /* sha512 module */
303     ._rom_mbedtls_sha512_init = mbedtls_sha512_init,
304     ._rom_mbedtls_sha512_free = mbedtls_sha512_free,
305     ._rom_mbedtls_sha512_clone = mbedtls_sha512_clone,
306     ._rom_mbedtls_sha512_starts = mbedtls_sha512_starts,
307     ._rom_mbedtls_sha512_update = mbedtls_sha512_update,
308     ._rom_mbedtls_sha512_finish = mbedtls_sha512_finish,
309     //._rom_mbedtls_internal_sha512_process = mbedtls_internal_sha512_process,
310     ._rom_mbedtls_sha512 = mbedtls_sha512,
311 
312     ._rom_mbedtls_aes_xts_init = mbedtls_aes_xts_init,
313     ._rom_mbedtls_aes_xts_free = mbedtls_aes_xts_free,
314     ._rom_mbedtls_aes_xts_setkey_enc = mbedtls_aes_xts_setkey_enc,
315     ._rom_mbedtls_aes_xts_setkey_dec = mbedtls_aes_xts_setkey_dec,
316     ._rom_mbedtls_aes_crypt_xts = mbedtls_aes_crypt_xts,
317     ._rom_mbedtls_aes_crypt_cfb128 = mbedtls_aes_crypt_cfb128,
318     ._rom_mbedtls_aes_crypt_ofb = mbedtls_aes_crypt_ofb,
319     ._rom_mbedtls_aes_crypt_ctr = mbedtls_aes_crypt_ctr,
320     ._rom_mbedtls_ccm_init = mbedtls_ccm_init,
321     ._rom_mbedtls_ccm_setkey = mbedtls_ccm_setkey,
322     ._rom_mbedtls_ccm_free = mbedtls_ccm_free,
323     ._rom_mbedtls_ccm_encrypt_and_tag = mbedtls_ccm_encrypt_and_tag,
324     ._rom_mbedtls_ccm_auth_decrypt = mbedtls_ccm_auth_decrypt,
325     ._rom_mbedtls_md5_init = mbedtls_md5_init,
326     ._rom_mbedtls_md5_free = mbedtls_md5_free,
327     ._rom_mbedtls_md5_clone = mbedtls_md5_clone,
328     ._rom_mbedtls_md5_starts = mbedtls_md5_starts,
329     ._rom_mbedtls_md5_update = mbedtls_md5_update,
330     ._rom_mbedtls_md5_finish = mbedtls_md5_finish,
331     ._rom_mbedtls_md5 = mbedtls_md5,
332     ._rom_mbedtls_sha1 = mbedtls_sha1,
333 
334     // eco4 rom mbedtls functions
335     ._rom_mbedtls_aes_crypt_cfb8 = mbedtls_aes_crypt_cfb8,
336     ._rom_mbedtls_mpi_swap = mbedtls_mpi_swap,
337     ._rom_mbedtls_mpi_read_string = mbedtls_mpi_read_string,
338     ._rom_mbedtls_mpi_write_string = mbedtls_mpi_write_string,
339     ._rom_mbedtls_mpi_read_binary_le = mbedtls_mpi_read_binary_le,
340     ._rom_mbedtls_mpi_write_binary_le = mbedtls_mpi_write_binary_le,
341     ._rom_mbedtls_mpi_random = mbedtls_mpi_random,
342     ._rom_mbedtls_mpi_gen_prime = mbedtls_mpi_gen_prime,
343     ._rom_mbedtls_ecp_check_budget = mbedtls_ecp_check_budget,
344     ._rom_mbedtls_ecp_set_max_ops = mbedtls_ecp_set_max_ops,
345     ._rom_mbedtls_ecp_restart_is_enabled = mbedtls_ecp_restart_is_enabled,
346     ._rom_mbedtls_ecp_get_type = mbedtls_ecp_get_type,
347     ._rom_mbedtls_ecp_curve_list = mbedtls_ecp_curve_list,
348     ._rom_mbedtls_ecp_grp_id_list = mbedtls_ecp_grp_id_list,
349     ._rom_mbedtls_ecp_curve_info_from_grp_id = mbedtls_ecp_curve_info_from_grp_id,
350     ._rom_mbedtls_ecp_curve_info_from_tls_id = mbedtls_ecp_curve_info_from_tls_id,
351     ._rom_mbedtls_ecp_curve_info_from_name = mbedtls_ecp_curve_info_from_name,
352     ._rom_mbedtls_ecp_point_init = mbedtls_ecp_point_init,
353     ._rom_mbedtls_ecp_group_init = mbedtls_ecp_group_init,
354     ._rom_mbedtls_ecp_keypair_init = mbedtls_ecp_keypair_init,
355     ._rom_mbedtls_ecp_point_free = mbedtls_ecp_point_free,
356     ._rom_mbedtls_ecp_group_free = mbedtls_ecp_group_free,
357     ._rom_mbedtls_ecp_keypair_free = mbedtls_ecp_keypair_free,
358     ._rom_mbedtls_ecp_restart_init = mbedtls_ecp_restart_init,
359     ._rom_mbedtls_ecp_restart_free = mbedtls_ecp_restart_free,
360     ._rom_mbedtls_ecp_copy = mbedtls_ecp_copy,
361     ._rom_mbedtls_ecp_group_copy = mbedtls_ecp_group_copy,
362     ._rom_mbedtls_ecp_set_zero = mbedtls_ecp_set_zero,
363     ._rom_mbedtls_ecp_is_zero = mbedtls_ecp_is_zero,
364     ._rom_mbedtls_ecp_point_cmp = mbedtls_ecp_point_cmp,
365     ._rom_mbedtls_ecp_point_read_string = mbedtls_ecp_point_read_string,
366     ._rom_mbedtls_ecp_point_write_binary = mbedtls_ecp_point_write_binary,
367     ._rom_mbedtls_ecp_point_read_binary = mbedtls_ecp_point_read_binary,
368     ._rom_mbedtls_ecp_tls_read_point = mbedtls_ecp_tls_read_point,
369     ._rom_mbedtls_ecp_tls_write_point = mbedtls_ecp_tls_write_point,
370     ._rom_mbedtls_ecp_group_load = mbedtls_ecp_group_load,
371     ._rom_mbedtls_ecp_tls_read_group = mbedtls_ecp_tls_read_group,
372     ._rom_mbedtls_ecp_tls_read_group_id = mbedtls_ecp_tls_read_group_id,
373     ._rom_mbedtls_ecp_tls_write_group = mbedtls_ecp_tls_write_group,
374     ._rom_mbedtls_ecp_mul = mbedtls_ecp_mul,
375     ._rom_mbedtls_ecp_mul_restartable = mbedtls_ecp_mul_restartable,
376     ._rom_mbedtls_ecp_muladd = mbedtls_ecp_muladd,
377     ._rom_mbedtls_ecp_muladd_restartable = mbedtls_ecp_muladd_restartable,
378     ._rom_mbedtls_ecp_check_pubkey = mbedtls_ecp_check_pubkey,
379     ._rom_mbedtls_ecp_check_privkey = mbedtls_ecp_check_privkey,
380     ._rom_mbedtls_ecp_gen_privkey = mbedtls_ecp_gen_privkey,
381     ._rom_mbedtls_ecp_gen_keypair_base = mbedtls_ecp_gen_keypair_base,
382     ._rom_mbedtls_ecp_gen_keypair = mbedtls_ecp_gen_keypair,
383     ._rom_mbedtls_ecp_gen_key = mbedtls_ecp_gen_key,
384     ._rom_mbedtls_ecp_read_key = mbedtls_ecp_read_key,
385     ._rom_mbedtls_ecp_write_key_ext = mbedtls_ecp_write_key_ext,
386     ._rom_mbedtls_ecp_check_pub_priv = mbedtls_ecp_check_pub_priv,
387     ._rom_mbedtls_ecp_export = mbedtls_ecp_export,
388     ._rom_mbedtls_asn1_get_enum = mbedtls_asn1_get_enum,
389     ._rom_mbedtls_asn1_sequence_free = mbedtls_asn1_sequence_free,
390     ._rom_mbedtls_asn1_traverse_sequence_of = mbedtls_asn1_traverse_sequence_of,
391     ._rom_mbedtls_asn1_find_named_data = mbedtls_asn1_find_named_data,
392     ._rom_mbedtls_asn1_free_named_data_list = mbedtls_asn1_free_named_data_list,
393     ._rom_mbedtls_asn1_free_named_data_list_shallow = mbedtls_asn1_free_named_data_list_shallow,
394     ._rom_mbedtls_asn1_write_raw_buffer = mbedtls_asn1_write_raw_buffer,
395     ._rom_mbedtls_asn1_write_null = mbedtls_asn1_write_null,
396     ._rom_mbedtls_asn1_write_oid = mbedtls_asn1_write_oid,
397     ._rom_mbedtls_asn1_write_algorithm_identifier = mbedtls_asn1_write_algorithm_identifier,
398     ._rom_mbedtls_asn1_write_bool = mbedtls_asn1_write_bool,
399     ._rom_mbedtls_asn1_write_int = mbedtls_asn1_write_int,
400     ._rom_mbedtls_asn1_write_enum = mbedtls_asn1_write_enum,
401     ._rom_mbedtls_asn1_write_tagged_string = mbedtls_asn1_write_tagged_string,
402     ._rom_mbedtls_asn1_write_printable_string = mbedtls_asn1_write_printable_string,
403     ._rom_mbedtls_asn1_write_utf8_string = mbedtls_asn1_write_utf8_string,
404     ._rom_mbedtls_asn1_write_ia5_string = mbedtls_asn1_write_ia5_string,
405     ._rom_mbedtls_asn1_write_bitstring = mbedtls_asn1_write_bitstring,
406     ._rom_mbedtls_asn1_write_named_bitstring = mbedtls_asn1_write_named_bitstring,
407     ._rom_mbedtls_asn1_write_octet_string = mbedtls_asn1_write_octet_string,
408     ._rom_mbedtls_asn1_store_named_data = mbedtls_asn1_store_named_data,
409     ._rom_mbedtls_ccm_starts = mbedtls_ccm_starts,
410     ._rom_mbedtls_ccm_set_lengths = mbedtls_ccm_set_lengths,
411     ._rom_mbedtls_ccm_update_ad = mbedtls_ccm_update_ad,
412     ._rom_mbedtls_ccm_update = mbedtls_ccm_update,
413     ._rom_mbedtls_ccm_finish = mbedtls_ccm_finish,
414     ._rom_mbedtls_cipher_list = mbedtls_cipher_list,
415     ._rom_mbedtls_cipher_info_from_string = mbedtls_cipher_info_from_string,
416     ._rom_mbedtls_cipher_info_from_type = mbedtls_cipher_info_from_type,
417     ._rom_mbedtls_cipher_info_from_values = mbedtls_cipher_info_from_values,
418     ._rom_mbedtls_cipher_free = mbedtls_cipher_free,
419     ._rom_mbedtls_cipher_setup = mbedtls_cipher_setup,
420     ._rom_mbedtls_cipher_setkey = mbedtls_cipher_setkey,
421     ._rom_mbedtls_cipher_set_iv = mbedtls_cipher_set_iv,
422     ._rom_mbedtls_cipher_update_ad = mbedtls_cipher_update_ad,
423     ._rom_mbedtls_cipher_update = mbedtls_cipher_update,
424     ._rom_mbedtls_cipher_write_tag = mbedtls_cipher_write_tag,
425     ._rom_mbedtls_cipher_check_tag = mbedtls_cipher_check_tag,
426     ._rom_mbedtls_cipher_auth_encrypt_ext = mbedtls_cipher_auth_encrypt_ext,
427     ._rom_mbedtls_cipher_auth_decrypt_ext = mbedtls_cipher_auth_decrypt_ext,
428     ._rom_mbedtls_cipher_cmac_reset = mbedtls_cipher_cmac_reset,
429     ._rom_mbedtls_cipher_cmac = mbedtls_cipher_cmac,
430     ._rom_mbedtls_aes_cmac_prf_128 = mbedtls_aes_cmac_prf_128,
431     ._rom_mbedtls_ctr_drbg_set_prediction_resistance = mbedtls_ctr_drbg_set_prediction_resistance,
432     ._rom_mbedtls_ctr_drbg_set_entropy_len = mbedtls_ctr_drbg_set_entropy_len,
433     ._rom_mbedtls_ctr_drbg_set_nonce_len = mbedtls_ctr_drbg_set_nonce_len,
434     ._rom_mbedtls_ctr_drbg_set_reseed_interval = mbedtls_ctr_drbg_set_reseed_interval,
435     ._rom_mbedtls_ctr_drbg_update = mbedtls_ctr_drbg_update,
436     ._rom_mbedtls_base64_encode = mbedtls_base64_encode,
437 
438     /* Fill the SHA hardware functions into mbedtls rom function table */
439     ._rom_mbedtls_sha1_update = mbedtls_sha1_update,
440     ._rom_mbedtls_sha256_update = mbedtls_sha256_update,
441 
442     //memory calloc free
443     ._rom_mbedtls_mem_calloc = MBEDTLS_PLATFORM_STD_CALLOC,
444     ._rom_mbedtls_mem_free = MBEDTLS_PLATFORM_STD_FREE,
445 };
446 
mbedtls_rom_osi_functions_init(void)447 __attribute__((constructor)) void mbedtls_rom_osi_functions_init(void)
448 {
449     /* Export the rom mbedtls functions table pointer */
450     extern void *mbedtls_rom_osi_funcs_ptr;
451 
452 #if defined(MBEDTLS_THREADING_ALT)
453     mbedtls_threading_set_alt(mbedtls_rom_mutex_init, mbedtls_rom_mutex_free, mbedtls_rom_mutex_lock, mbedtls_rom_mutex_unlock);
454 #endif
455 
456     unsigned chip_version = efuse_hal_chip_revision();
457     if ( ESP_CHIP_REV_ABOVE(chip_version, 200) ) {
458         /* Initialize the rom function mbedtls_threading_set_alt on chip rev2.0 with rom eco4 */
459         _rom_mbedtls_threading_set_alt_t rom_mbedtls_threading_set_alt = (_rom_mbedtls_threading_set_alt_t)0x40002c0c;
460         rom_mbedtls_threading_set_alt(mbedtls_rom_mutex_init, mbedtls_rom_mutex_free, mbedtls_rom_mutex_lock, mbedtls_rom_mutex_unlock);
461 
462         /* Initialize the pointer of rom eco4 mbedtls functions table. */
463         mbedtls_rom_osi_funcs_ptr = (mbedtls_rom_eco4_funcs_t *)&mbedtls_rom_eco4_funcs_table;
464     } else {
465         /* Initialize the pointer of rom mbedtls functions table. */
466         mbedtls_rom_osi_funcs_ptr = (mbedtls_rom_funcs_t *)&mbedtls_rom_funcs_table;
467     }
468 }
469