Store central secure origin
This commit is contained in:
		@@ -14,3 +14,8 @@
 | 
				
			|||||||
 * Private key max length
 | 
					 * Private key max length
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
#define PRV_KEY_DER_MAX_BYTES 1500
 | 
					#define PRV_KEY_DER_MAX_BYTES 1500
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/**
 | 
				
			||||||
 | 
					 * Secure origin len
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					#define SEC_ORIG_LEN 255
 | 
				
			||||||
@@ -118,7 +118,7 @@ esp_err_t _http_event_handler(esp_http_client_event_t *evt)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
char *http_client_exec(const http_request_opts *opts)
 | 
					char *http_client_exec(const http_request_opts *opts)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    char local_response_buffer[MAX_HTTP_OUTPUT_BUFFER + 1] = {0};
 | 
					    char *local_response_buffer = calloc(MAX_HTTP_OUTPUT_BUFFER + 1, 1);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    ESP_LOGI(TAG, "Perform HTTP request on %s", opts->url);
 | 
					    ESP_LOGI(TAG, "Perform HTTP request on %s", opts->url);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -129,26 +129,39 @@ char *http_client_exec(const http_request_opts *opts)
 | 
				
			|||||||
        .disable_auto_redirect = true,
 | 
					        .disable_auto_redirect = true,
 | 
				
			||||||
    };
 | 
					    };
 | 
				
			||||||
    esp_http_client_handle_t client = esp_http_client_init(&config);
 | 
					    esp_http_client_handle_t client = esp_http_client_init(&config);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    if (client == NULL)
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        ESP_LOGE(TAG, "Failed to initialize HTTP connection!");
 | 
				
			||||||
 | 
					        free(local_response_buffer);
 | 
				
			||||||
 | 
					        return NULL;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    ESP_LOGD(TAG, "esp_http_client_perform start");
 | 
				
			||||||
    esp_err_t err = esp_http_client_perform(client);
 | 
					    esp_err_t err = esp_http_client_perform(client);
 | 
				
			||||||
 | 
					    ESP_LOGD(TAG, "esp_http_client_perform end");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    if (err != ESP_OK)
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        esp_http_client_cleanup(client);
 | 
				
			||||||
 | 
					        free(local_response_buffer);
 | 
				
			||||||
 | 
					        ESP_LOGE(TAG, "HTTP request failed with code %d!", err);
 | 
				
			||||||
 | 
					        return NULL;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    const int status = esp_http_client_get_status_code(client);
 | 
					    const int status = esp_http_client_get_status_code(client);
 | 
				
			||||||
    const int64_t resp_len = esp_http_client_get_content_length(client);
 | 
					    const int64_t resp_len = esp_http_client_get_content_length(client);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    esp_http_client_cleanup(client);
 | 
					    esp_http_client_cleanup(client);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if (err != ESP_OK)
 | 
					 | 
				
			||||||
    {
 | 
					 | 
				
			||||||
        ESP_LOGE(TAG, "HTTP request failed with code %xd!", err);
 | 
					 | 
				
			||||||
        return NULL;
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    if (status < 200 || status > 299)
 | 
					    if (status < 200 || status > 299)
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        ESP_LOGE(TAG, "HTTP request failed with status %d!", status);
 | 
					        ESP_LOGE(TAG, "HTTP request failed with status %d!", status);
 | 
				
			||||||
 | 
					        free(local_response_buffer);
 | 
				
			||||||
        return NULL;
 | 
					        return NULL;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    local_response_buffer[resp_len] = 0;
 | 
					    local_response_buffer[resp_len] = 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    return strdup(local_response_buffer);
 | 
					    return local_response_buffer;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
@@ -8,6 +8,7 @@
 | 
				
			|||||||
#include "crypto.h"
 | 
					#include "crypto.h"
 | 
				
			||||||
#include "unsecure_api.h"
 | 
					#include "unsecure_api.h"
 | 
				
			||||||
#include "ethernet.h"
 | 
					#include "ethernet.h"
 | 
				
			||||||
 | 
					#include "constants.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static const char *TAG = "main";
 | 
					static const char *TAG = "main";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -48,9 +49,23 @@ void app_main(void)
 | 
				
			|||||||
    ethernet_wait_for_network();
 | 
					    ethernet_wait_for_network();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    ESP_LOGI(TAG, "Check secure origin\n");
 | 
					    ESP_LOGI(TAG, "Check secure origin\n");
 | 
				
			||||||
    char *sec_orig = unsecure_api_get_secure_origin();
 | 
					    if (storage_get_secure_origin(NULL) == 0)
 | 
				
			||||||
    assert(sec_orig != NULL);
 | 
					    {
 | 
				
			||||||
    printf("Res = %s\n", sec_orig);
 | 
					        char *sec_ori = unsecure_api_get_secure_origin();
 | 
				
			||||||
 | 
					        if (!sec_ori)
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            ESP_LOGE(TAG, "Failed to fetch secure origin!");
 | 
				
			||||||
 | 
					            reboot();
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        storage_set_secure_origin(sec_ori);
 | 
				
			||||||
 | 
					        free(sec_ori);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    ESP_LOGI(TAG, "Get secure origin\n");
 | 
				
			||||||
 | 
					    char *sec_ori = calloc(SEC_ORIG_LEN, 1);
 | 
				
			||||||
 | 
					    assert(storage_get_secure_origin(sec_ori) > 0);
 | 
				
			||||||
 | 
					    ESP_LOGI(TAG, "Current secure origin: %s", sec_ori);
 | 
				
			||||||
 | 
					    free(sec_ori);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    system_sleep(120);
 | 
					    system_sleep(120);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -9,6 +9,7 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
#define DEV_NAME_KEY "dev_name"
 | 
					#define DEV_NAME_KEY "dev_name"
 | 
				
			||||||
#define PRIVATE_KEY "prikey"
 | 
					#define PRIVATE_KEY "prikey"
 | 
				
			||||||
 | 
					#define SEC_ORIG_KEY "secureOrig"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static const char *TAG = "storage";
 | 
					static const char *TAG = "storage";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -28,25 +29,25 @@ bool storage_init()
 | 
				
			|||||||
    return err == ESP_OK;
 | 
					    return err == ESP_OK;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void storage_set_dev_name(const char *name)
 | 
					static void storage_set_str(const char *key, const char *value)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    nvs_handle_t my_handle;
 | 
					    nvs_handle_t my_handle;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    ESP_ERROR_CHECK(nvs_open(STORAGE_NAMESPACE, NVS_READWRITE, &my_handle));
 | 
					    ESP_ERROR_CHECK(nvs_open(STORAGE_NAMESPACE, NVS_READWRITE, &my_handle));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    ESP_ERROR_CHECK(nvs_set_blob(my_handle, DEV_NAME_KEY, name, strlen(name) + 1));
 | 
					    ESP_ERROR_CHECK(nvs_set_blob(my_handle, key, value, strlen(value) + 1));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    nvs_close(my_handle);
 | 
					    nvs_close(my_handle);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
size_t storage_get_dev_name(char *dest)
 | 
					static size_t storage_get_str(const char *key, size_t dest_len, char *dest)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    nvs_handle_t my_handle;
 | 
					    nvs_handle_t my_handle;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    ESP_ERROR_CHECK(nvs_open(STORAGE_NAMESPACE, NVS_READWRITE, &my_handle));
 | 
					    ESP_ERROR_CHECK(nvs_open(STORAGE_NAMESPACE, NVS_READWRITE, &my_handle));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    size_t len = (dest == NULL ? 0 : DEV_NAME_LEN);
 | 
					    size_t len = (dest == NULL ? 0 : dest_len);
 | 
				
			||||||
    esp_err_t res = nvs_get_blob(my_handle, DEV_NAME_KEY, dest, &len);
 | 
					    esp_err_t res = nvs_get_blob(my_handle, key, dest, &len);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    nvs_close(my_handle);
 | 
					    nvs_close(my_handle);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -58,6 +59,16 @@ size_t storage_get_dev_name(char *dest)
 | 
				
			|||||||
    return len;
 | 
					    return len;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void storage_set_dev_name(const char *name)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    storage_set_str(DEV_NAME_KEY, name);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					size_t storage_get_dev_name(char *dest)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    return storage_get_str(DEV_NAME_KEY, DEV_NAME_LEN, dest);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void storage_set_priv_key(unsigned char *key, size_t len)
 | 
					void storage_set_priv_key(unsigned char *key, size_t len)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    nvs_handle_t my_handle;
 | 
					    nvs_handle_t my_handle;
 | 
				
			||||||
@@ -87,3 +98,7 @@ size_t storage_get_priv_key(unsigned char *key)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    return len;
 | 
					    return len;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void storage_set_secure_origin(const char *name) { storage_set_str(SEC_ORIG_KEY, name); }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					size_t storage_get_secure_origin(char *dest) { return storage_get_str(SEC_ORIG_KEY, SEC_ORIG_LEN, dest); }
 | 
				
			||||||
@@ -37,6 +37,16 @@ extern "C"
 | 
				
			|||||||
     */
 | 
					     */
 | 
				
			||||||
    size_t storage_get_priv_key(unsigned char *key);
 | 
					    size_t storage_get_priv_key(unsigned char *key);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * Write secure origin
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    void storage_set_secure_origin(const char *name);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * Get current secure origin
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    size_t storage_get_secure_origin(char *dest);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#ifdef __cplusplus
 | 
					#ifdef __cplusplus
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1127,14 +1127,13 @@ CONFIG_HEAP_TRACING_OFF=y
 | 
				
			|||||||
# CONFIG_LOG_DEFAULT_LEVEL_NONE is not set
 | 
					# CONFIG_LOG_DEFAULT_LEVEL_NONE is not set
 | 
				
			||||||
# CONFIG_LOG_DEFAULT_LEVEL_ERROR is not set
 | 
					# CONFIG_LOG_DEFAULT_LEVEL_ERROR is not set
 | 
				
			||||||
# CONFIG_LOG_DEFAULT_LEVEL_WARN is not set
 | 
					# CONFIG_LOG_DEFAULT_LEVEL_WARN is not set
 | 
				
			||||||
CONFIG_LOG_DEFAULT_LEVEL_INFO=y
 | 
					# CONFIG_LOG_DEFAULT_LEVEL_INFO is not set
 | 
				
			||||||
# CONFIG_LOG_DEFAULT_LEVEL_DEBUG is not set
 | 
					CONFIG_LOG_DEFAULT_LEVEL_DEBUG=y
 | 
				
			||||||
# CONFIG_LOG_DEFAULT_LEVEL_VERBOSE is not set
 | 
					# CONFIG_LOG_DEFAULT_LEVEL_VERBOSE is not set
 | 
				
			||||||
CONFIG_LOG_DEFAULT_LEVEL=3
 | 
					CONFIG_LOG_DEFAULT_LEVEL=4
 | 
				
			||||||
CONFIG_LOG_MAXIMUM_EQUALS_DEFAULT=y
 | 
					CONFIG_LOG_MAXIMUM_EQUALS_DEFAULT=y
 | 
				
			||||||
# CONFIG_LOG_MAXIMUM_LEVEL_DEBUG is not set
 | 
					 | 
				
			||||||
# CONFIG_LOG_MAXIMUM_LEVEL_VERBOSE is not set
 | 
					# CONFIG_LOG_MAXIMUM_LEVEL_VERBOSE is not set
 | 
				
			||||||
CONFIG_LOG_MAXIMUM_LEVEL=3
 | 
					CONFIG_LOG_MAXIMUM_LEVEL=4
 | 
				
			||||||
# CONFIG_LOG_MASTER_LEVEL is not set
 | 
					# CONFIG_LOG_MASTER_LEVEL is not set
 | 
				
			||||||
CONFIG_LOG_COLORS=y
 | 
					CONFIG_LOG_COLORS=y
 | 
				
			||||||
CONFIG_LOG_TIMESTAMP_SOURCE_RTOS=y
 | 
					CONFIG_LOG_TIMESTAMP_SOURCE_RTOS=y
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user