|
|
@@ -17,6 +17,18 @@ which are undefined if the following flag is not defined */
|
|
|
/* ToDo - Replace them with proper getter-setter once they are added */
|
|
|
#define MBEDTLS_ALLOW_PRIVATE_ACCESS
|
|
|
|
|
|
+/* ToDo - Remove this once appropriate solution is available.
|
|
|
+ * Currently MBEDTLS_LEGACY_CONTEXT is enabled by default for MBEDTLS_ECP_RESTARTABLE
|
|
|
+ * This is a temporary workaround to allow that.
|
|
|
+ * The LEGACY option is soon going to be removed in future mbedtls
|
|
|
+ * once it is removed we can remove the workaround.
|
|
|
+ */
|
|
|
+#ifdef CONFIG_MBEDTLS_ECDH_LEGACY_CONTEXT
|
|
|
+#define ACCESS_ECDH(S, var) S->var
|
|
|
+#else
|
|
|
+#define ACCESS_ECDH(S, var) S->ctx.mbed_ecdh.var
|
|
|
+#endif
|
|
|
+
|
|
|
#include <mbedtls/aes.h>
|
|
|
#include <mbedtls/sha256.h>
|
|
|
#include <mbedtls/entropy.h>
|
|
|
@@ -222,14 +234,14 @@ static esp_err_t handle_session_command0(session_t *cur_session,
|
|
|
goto exit_cmd0;
|
|
|
}
|
|
|
|
|
|
- mbed_err = mbedtls_ecp_group_load(&ctx_server->ctx.mbed_ecdh.grp, MBEDTLS_ECP_DP_CURVE25519);
|
|
|
+ mbed_err = mbedtls_ecp_group_load(ACCESS_ECDH(&ctx_server, grp), MBEDTLS_ECP_DP_CURVE25519);
|
|
|
if (mbed_err != 0) {
|
|
|
ESP_LOGE(TAG, "Failed at mbedtls_ecp_group_load with error code : -0x%x", -mbed_err);
|
|
|
ret = ESP_FAIL;
|
|
|
goto exit_cmd0;
|
|
|
}
|
|
|
|
|
|
- mbed_err = mbedtls_ecdh_gen_public(&ctx_server->ctx.mbed_ecdh.grp, &ctx_server->ctx.mbed_ecdh.d, &ctx_server->ctx.mbed_ecdh.Q,
|
|
|
+ mbed_err = mbedtls_ecdh_gen_public(ACCESS_ECDH(&ctx_server, grp), ACCESS_ECDH(&ctx_server, d), ACCESS_ECDH(&ctx_server, Q),
|
|
|
mbedtls_ctr_drbg_random, ctr_drbg);
|
|
|
if (mbed_err != 0) {
|
|
|
ESP_LOGE(TAG, "Failed at mbedtls_ecdh_gen_public with error code : -0x%x", -mbed_err);
|
|
|
@@ -237,7 +249,7 @@ static esp_err_t handle_session_command0(session_t *cur_session,
|
|
|
goto exit_cmd0;
|
|
|
}
|
|
|
|
|
|
- mbed_err = mbedtls_mpi_write_binary(&ctx_server->ctx.mbed_ecdh.Q.X,
|
|
|
+ mbed_err = mbedtls_mpi_write_binary(ACCESS_ECDH(&ctx_server, Q).X,
|
|
|
cur_session->device_pubkey,
|
|
|
PUBLIC_KEY_LEN);
|
|
|
if (mbed_err != 0) {
|
|
|
@@ -254,7 +266,7 @@ static esp_err_t handle_session_command0(session_t *cur_session,
|
|
|
hexdump("Device pubkey", dev_pubkey, PUBLIC_KEY_LEN);
|
|
|
hexdump("Client pubkey", cli_pubkey, PUBLIC_KEY_LEN);
|
|
|
|
|
|
- mbed_err = mbedtls_mpi_lset(&ctx_server->ctx.mbed_ecdh.Qp.Z, 1);
|
|
|
+ mbed_err = mbedtls_mpi_lset(ACCESS_ECDH(&ctx_server, Qp).Z, 1);
|
|
|
if (mbed_err != 0) {
|
|
|
ESP_LOGE(TAG, "Failed at mbedtls_mpi_lset with error code : -0x%x", -mbed_err);
|
|
|
ret = ESP_FAIL;
|
|
|
@@ -262,7 +274,7 @@ static esp_err_t handle_session_command0(session_t *cur_session,
|
|
|
}
|
|
|
|
|
|
flip_endian(cur_session->client_pubkey, PUBLIC_KEY_LEN);
|
|
|
- mbed_err = mbedtls_mpi_read_binary(&ctx_server->ctx.mbed_ecdh.Qp.X, cli_pubkey, PUBLIC_KEY_LEN);
|
|
|
+ mbed_err = mbedtls_mpi_read_binary(ACCESS_ECDH(&ctx_server, Qp).X, cli_pubkey, PUBLIC_KEY_LEN);
|
|
|
flip_endian(cur_session->client_pubkey, PUBLIC_KEY_LEN);
|
|
|
if (mbed_err != 0) {
|
|
|
ESP_LOGE(TAG, "Failed at mbedtls_mpi_read_binary with error code : -0x%x", -mbed_err);
|
|
|
@@ -270,15 +282,15 @@ static esp_err_t handle_session_command0(session_t *cur_session,
|
|
|
goto exit_cmd0;
|
|
|
}
|
|
|
|
|
|
- mbed_err = mbedtls_ecdh_compute_shared(&ctx_server->ctx.mbed_ecdh.grp, &ctx_server->ctx.mbed_ecdh.z, &ctx_server->ctx.mbed_ecdh.Qp,
|
|
|
- &ctx_server->ctx.mbed_ecdh.d, mbedtls_ctr_drbg_random, ctr_drbg);
|
|
|
+ mbed_err = mbedtls_ecdh_compute_shared(ACCESS_ECDH(&ctx_server, grp), ACCESS_ECDH(&ctx_server, z), ACCESS_ECDH(&ctx_server, Qp),
|
|
|
+ ACCESS_ECDH(&ctx_server, d), mbedtls_ctr_drbg_random, ctr_drbg);
|
|
|
if (mbed_err != 0) {
|
|
|
ESP_LOGE(TAG, "Failed at mbedtls_ecdh_compute_shared with error code : -0x%x", -mbed_err);
|
|
|
ret = ESP_FAIL;
|
|
|
goto exit_cmd0;
|
|
|
}
|
|
|
|
|
|
- mbed_err = mbedtls_mpi_write_binary(&ctx_server->ctx.mbed_ecdh.z, cur_session->sym_key, PUBLIC_KEY_LEN);
|
|
|
+ mbed_err = mbedtls_mpi_write_binary(ACCESS_ECDH(&ctx_server, z), cur_session->sym_key, PUBLIC_KEY_LEN);
|
|
|
if (mbed_err != 0) {
|
|
|
ESP_LOGE(TAG, "Failed at mbedtls_mpi_write_binary with error code : -0x%x", -mbed_err);
|
|
|
ret = ESP_FAIL;
|