preencrypted fixed

This commit is contained in:
ok-home
2023-10-05 20:13:29 +07:00
parent b7ac0eb7e2
commit 9522219d5b
3 changed files with 99 additions and 85 deletions

View File

@@ -1,3 +1,3 @@
2023-10-04 18:54:18,808 - Debug Adapter (main) - CRITICAL - Debug adapter -> Extension: DEBUG_ADAPTER_STARTED 2023-10-05 19:44:46,943 - Debug Adapter (main) - CRITICAL - Debug adapter -> Extension: DEBUG_ADAPTER_STARTED
2023-10-04 18:54:18,809 - Debug Adapter (main) - CRITICAL - Debug adapter -> Extension: DEBUG_ADAPTER_READY2CONNECT 2023-10-05 19:44:46,944 - Debug Adapter (main) - CRITICAL - Debug adapter -> Extension: DEBUG_ADAPTER_READY2CONNECT
2023-10-04 18:57:36,086 - Debug Adapter (main) - CRITICAL - Debug adapter -> Extension: DEBUG_ADAPTER_STOPPED 2023-10-05 19:45:24,371 - Debug Adapter (main) - CRITICAL - Debug adapter -> Extension: DEBUG_ADAPTER_STOPPED

View File

@@ -1,40 +1,40 @@
-----BEGIN PRIVATE KEY----- -----BEGIN PRIVATE KEY-----
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
JOa1q528gpwjG6xzEfw1bUI= 3YUVwrqlblfFYykcpa1p1llz
-----END PRIVATE KEY----- -----END PRIVATE KEY-----

View File

@@ -1,4 +1,4 @@
/* /*
This example code is in the Public Domain (or CC0 licensed, at your option.) This example code is in the Public Domain (or CC0 licensed, at your option.)
Unless required by applicable law or agreed to in writing, this Unless required by applicable law or agreed to in writing, this
@@ -16,7 +16,6 @@ openssl genrsa -out rsa_key/private.pem 3072
*/ */
#include "esp_ota_ops.h" #include "esp_ota_ops.h"
#include "esp_flash_partitions.h" #include "esp_flash_partitions.h"
#include "esp_partition.h" #include "esp_partition.h"
@@ -29,30 +28,30 @@ static const char *TAG = "ota_ws_esp";
static const esp_partition_t *update_partition = NULL; static const esp_partition_t *update_partition = NULL;
static bool image_header_was_checked = false; static bool image_header_was_checked = false;
static esp_ota_handle_t update_handle = NULL; static esp_ota_handle_t update_handle = 0;
// pre-encrypted handle // pre-encrypted handle
static esp_decrypt_handle_t enc_handle = NULL; // handle static esp_decrypt_handle_t enc_handle = NULL; // handle
static esp_decrypt_cfg_t enc_cfg = {0}; // cfg static esp_decrypt_cfg_t enc_cfg = {0}; // cfg
static pre_enc_decrypt_arg_t enc_arg = {0}; // arg static pre_enc_decrypt_arg_t enc_arg = {0}; // arg
static int tst_c=0; // static int tst_c=0;
extern const char rsa_private_pem_start[] asm("_binary_private_pem_start"); extern const char rsa_private_pem_start[] asm("_binary_private_pem_start");
extern const char rsa_private_pem_end[] asm("_binary_private_pem_end"); extern const char rsa_private_pem_end[] asm("_binary_private_pem_end");
esp_err_t start_ota_ws(void) esp_err_t start_ota_ws(void)
{ {
//return ESP_OK; // debug return // return ESP_OK; // debug return
tst_c=0; // tst_c=0;
esp_err_t err; esp_err_t err;
ESP_LOGI(TAG, "Starting OTA"); ESP_LOGI(TAG, "Starting OTA");
const esp_partition_t *configured = esp_ota_get_boot_partition(); const esp_partition_t *configured = esp_ota_get_boot_partition();
const esp_partition_t *running = esp_ota_get_running_partition(); const esp_partition_t *running = esp_ota_get_running_partition();
if(configured==NULL || running == NULL) if (configured == NULL || running == NULL)
{ {
ESP_LOGE(TAG,"OTA data not found"); ESP_LOGE(TAG, "OTA data not found");
return ESP_FAIL; return ESP_FAIL;
} }
@@ -79,34 +78,34 @@ esp_err_t start_ota_ws(void)
image_header_was_checked = false; image_header_was_checked = false;
enc_cfg.rsa_priv_key = rsa_private_pem_start; enc_cfg.rsa_priv_key = rsa_private_pem_start;
enc_cfg.rsa_priv_key_len = rsa_private_pem_end-rsa_private_pem_start; enc_cfg.rsa_priv_key_len = rsa_private_pem_end - rsa_private_pem_start;
enc_handle = esp_encrypted_img_decrypt_start(&enc_cfg); enc_handle = esp_encrypted_img_decrypt_start(&enc_cfg);
if(enc_handle == NULL) if (enc_handle == NULL)
{ {
ESP_LOGE(TAG, "esp_encrypted_img_decrypt_start failed "); ESP_LOGE(TAG, "esp_encrypted_img_decrypt_start failed ");
abort_ota_ws(); abort_ota_ws();
return ESP_FAIL; return ESP_FAIL;
} }
memset(&enc_arg,0,sizeof(pre_enc_decrypt_arg_t)); //?? memset(&enc_arg, 0, sizeof(pre_enc_decrypt_arg_t)); //??
ESP_LOGI(TAG, "esp_ota_begin succeeded"); ESP_LOGI(TAG, "esp_ota_begin succeeded");
return ESP_OK; return ESP_OK;
} }
esp_err_t write_ota_ws(int enc_data_read, uint8_t *enc_ota_write_data) esp_err_t write_ota_ws(int enc_data_read, uint8_t *enc_ota_write_data)
{ {
//return ESP_OK; // debug return // return ESP_OK; // debug return
enc_arg.data_in = (char*)enc_ota_write_data; enc_arg.data_in = (char *)enc_ota_write_data;
enc_arg.data_in_len = enc_data_read; enc_arg.data_in_len = enc_data_read;
esp_err_t ret = esp_encrypted_img_decrypt_data(enc_handle, &enc_arg); esp_err_t ret = esp_encrypted_img_decrypt_data(enc_handle, &enc_arg);
ESP_LOGI("OTA ENC ","ret=%x len=%d",ret,enc_arg.data_out_len); // ESP_LOGI("OTA ENC ","ret=%x len=%d",ret,enc_arg.data_out_len);
if(ret == ESP_FAIL || ret == ESP_ERR_INVALID_ARG) if (ret == ESP_FAIL || ret == ESP_ERR_INVALID_ARG)
{ {
ESP_LOGE(TAG, "data decrypt err %x",ret); ESP_LOGE(TAG, "data decrypt err %x", ret);
abort_ota_ws(); abort_ota_ws();
return ret; return ret;
} }
int data_read = enc_arg.data_out_len; int data_read = enc_arg.data_out_len;
uint8_t *ota_write_data = (uint8_t*)enc_arg.data_out; uint8_t *ota_write_data = (uint8_t *)enc_arg.data_out;
if (image_header_was_checked == false) // first segment if (image_header_was_checked == false) // first segment
{ {
@@ -126,29 +125,31 @@ esp_err_t write_ota_ws(int enc_data_read, uint8_t *enc_ota_write_data)
} }
} }
ret = esp_ota_write(update_handle, (const void *)ota_write_data, data_read); ret = esp_ota_write(update_handle, (const void *)ota_write_data, data_read);
tst_c += data_read; // tst_c += data_read;
ESP_LOGI("OTA WRITE","ret=%x len=%d tst_c=%d",ret,data_read,tst_c); // ESP_LOGI("OTA WRITE","ret=%x len=%d tst_c=%d",ret,data_read,tst_c);
if (ret != ESP_OK) if (ret != ESP_OK)
{ {
ESP_LOGE(TAG, "esp_ota_write err"); ESP_LOGE(TAG, "esp_ota_write err");
abort_ota_ws(); abort_ota_ws();
return ret; return ret;
} }
return ESP_OK; return ESP_OK;
} }
esp_err_t end_ota_ws(void) esp_err_t end_ota_ws(void)
{ {
//return ESP_OK; // debug return // return ESP_OK; // debug return
esp_err_t ret = esp_encrypted_img_decrypt_end(enc_handle); esp_err_t ret = esp_encrypted_img_decrypt_end(enc_handle);
if(ret) if (ret)
{ {
ESP_LOGE(TAG, "esp_encrypted_img_decrypt_end (%s)!", esp_err_to_name(ret)); ESP_LOGE(TAG, "esp_encrypted_img_decrypt_end (%s)!", esp_err_to_name(ret));
abort_ota_ws(); abort_ota_ws();
return ret; return ret;
} }
ret = esp_ota_end(update_handle); ret = esp_ota_end(update_handle);
if (ret != ESP_OK) { if (ret != ESP_OK)
if (ret == ESP_ERR_OTA_VALIDATE_FAILED) { {
if (ret == ESP_ERR_OTA_VALIDATE_FAILED)
{
ESP_LOGE(TAG, "Image validation failed, image is corrupted"); ESP_LOGE(TAG, "Image validation failed, image is corrupted");
abort_ota_ws(); abort_ota_ws();
return ret; return ret;
@@ -158,25 +159,36 @@ esp_err_t end_ota_ws(void)
return ret; return ret;
} }
ret = esp_ota_set_boot_partition(update_partition); ret = esp_ota_set_boot_partition(update_partition);
if (ret != ESP_OK) { if (ret != ESP_OK)
{
ESP_LOGE(TAG, "esp_ota_set_boot_partition failed (%s)!", esp_err_to_name(ret)); ESP_LOGE(TAG, "esp_ota_set_boot_partition failed (%s)!", esp_err_to_name(ret));
abort_ota_ws(); abort_ota_ws();
return ret; return ret;
} }
if(enc_arg.data_out) if (enc_arg.data_out)
{ free(enc_arg.data_out);} {
return ESP_OK; free(enc_arg.data_out);
}
return ESP_OK;
} }
esp_err_t abort_ota_ws(void) esp_err_t abort_ota_ws(void)
{ {
if(enc_handle) if (enc_handle)
{esp_encrypted_img_decrypt_abort(enc_handle);} {
if(update_handle) ESP_LOGI("abort", "abort cmd");
{esp_ota_abort(update_handle);} esp_encrypted_img_decrypt_abort(enc_handle);
}
if (update_handle)
{
esp_ota_abort(update_handle);
}
if (enc_arg.data_out)
{
free(enc_arg.data_out);
}
enc_handle = NULL; enc_handle = NULL;
update_handle = NULL; update_handle = 0;
if(enc_arg.data_out) memset(&enc_arg, 0, sizeof(pre_enc_decrypt_arg_t));
{ free(enc_arg.data_out);}
return ESP_OK; return ESP_OK;
} }
// false - rollback disable // false - rollback disable
@@ -186,21 +198,23 @@ bool check_ota_ws_rollback_enable(void)
#ifdef CONFIG_BOOTLOADER_APP_ROLLBACK_ENABLE #ifdef CONFIG_BOOTLOADER_APP_ROLLBACK_ENABLE
esp_ota_img_states_t ota_state_running_part; esp_ota_img_states_t ota_state_running_part;
const esp_partition_t *running = esp_ota_get_running_partition(); const esp_partition_t *running = esp_ota_get_running_partition();
if (esp_ota_get_state_partition(running, &ota_state_running_part) == ESP_OK) { if (esp_ota_get_state_partition(running, &ota_state_running_part) == ESP_OK)
if (ota_state_running_part == ESP_OTA_IMG_PENDING_VERIFY) { {
if (ota_state_running_part == ESP_OTA_IMG_PENDING_VERIFY)
{
ESP_LOGI(TAG, "Running app has ESP_OTA_IMG_PENDING_VERIFY state"); ESP_LOGI(TAG, "Running app has ESP_OTA_IMG_PENDING_VERIFY state");
return true; return true;
} }
} }
#endif #endif
return false; return false;
} }
// rollback == true - rollback // rollback == true - rollback
// rollback == false - app valid? confirm update -> no rollback // rollback == false - app valid? confirm update -> no rollback
esp_err_t rollback_ota_ws(bool rollback) esp_err_t rollback_ota_ws(bool rollback)
{ {
#ifdef CONFIG_BOOTLOADER_APP_ROLLBACK_ENABLE #ifdef CONFIG_BOOTLOADER_APP_ROLLBACK_ENABLE
if(rollback == false) if (rollback == false)
{ {
return esp_ota_mark_app_valid_cancel_rollback(); // app valid return esp_ota_mark_app_valid_cancel_rollback(); // app valid
} }