Write private key

This commit is contained in:
Pierre HUBERT 2024-08-15 13:09:01 +02:00
parent 402edb44d5
commit 752bf50ad3
5 changed files with 69 additions and 9 deletions

View File

@ -20,6 +20,7 @@
"ecdsa.h": "c", "ecdsa.h": "c",
"platform.h": "c", "platform.h": "c",
"build_info.h": "c", "build_info.h": "c",
"config_adjust_ssl.h": "c" "config_adjust_ssl.h": "c",
"pk.h": "c"
} }
} }

View File

@ -3,4 +3,9 @@
/** /**
* Device name len * Device name len
*/ */
#define DEV_NAME_LEN 10 #define DEV_NAME_LEN 10
/**
* Private key max length
*/
#define PRV_KEY_DER_MAX_BYTES 1500

View File

@ -1,5 +1,7 @@
#include "crypto.h" #include "crypto.h"
#include "system.h" #include "system.h"
#include "constants.h"
#include "storage.h"
#include <string.h> #include <string.h>
#include <mbedtls/build_info.h> #include <mbedtls/build_info.h>
@ -10,9 +12,6 @@
#include <mbedtls/sha256.h> #include <mbedtls/sha256.h>
#include <mbedtls/pk.h> #include <mbedtls/pk.h>
/*
* Uncomment to force use of a specific curve
*/
#define ECPARAMS MBEDTLS_ECP_DP_SECP256R1 #define ECPARAMS MBEDTLS_ECP_DP_SECP256R1
bool crypto_gen_priv_key() bool crypto_gen_priv_key()
@ -60,7 +59,23 @@ bool crypto_gen_priv_key()
reboot(); reboot();
} }
// Show private key // Export private key
printf("Export private key\n");
unsigned char *key_buff = malloc(PRV_KEY_DER_MAX_BYTES);
if ((ret = mbedtls_pk_write_key_der(&key, key_buff, PRV_KEY_DER_MAX_BYTES)) < 1)
{
mbedtls_printf(" failed\n ! mbedtls_pk_write_key_der returned -0x%04x",
(unsigned int)-ret);
reboot();
}
storage_set_priv_key(key_buff + PRV_KEY_DER_MAX_BYTES - ret, ret);
return true;
}
/**
* // Show private key
printf("Show private key\n"); printf("Show private key\n");
unsigned char *key_buff = malloc(16000); unsigned char *key_buff = malloc(16000);
memset(key_buff, 0, 16000); memset(key_buff, 0, 16000);
@ -74,6 +89,4 @@ bool crypto_gen_priv_key()
printf("%s", key_buff); printf("%s", key_buff);
free(key_buff); free(key_buff);
printf("done\n"); printf("done\n");
*/
return true;
}

View File

@ -7,6 +7,7 @@
#define STORAGE_NAMESPACE "storage" #define STORAGE_NAMESPACE "storage"
#define DEV_NAME_KEY "dev_name" #define DEV_NAME_KEY "dev_name"
#define PRIVATE_KEY "prikey"
bool storage_init() bool storage_init()
{ {
@ -51,5 +52,35 @@ size_t storage_get_dev_name(char *dest)
ESP_ERROR_CHECK(res); ESP_ERROR_CHECK(res);
return len;
}
void storage_set_priv_key(unsigned char *key, size_t len)
{
nvs_handle_t my_handle;
ESP_ERROR_CHECK(nvs_open(STORAGE_NAMESPACE, NVS_READWRITE, &my_handle));
ESP_ERROR_CHECK(nvs_set_blob(my_handle, PRIVATE_KEY, key, len));
nvs_close(my_handle);
}
size_t storage_get_priv_key(unsigned char *key)
{
nvs_handle_t my_handle;
ESP_ERROR_CHECK(nvs_open(STORAGE_NAMESPACE, NVS_READWRITE, &my_handle));
size_t len = (key == NULL ? 0 : PRV_KEY_DER_MAX_BYTES);
esp_err_t res = nvs_get_blob(my_handle, PRIVATE_KEY, key, &len);
nvs_close(my_handle);
if (res == ESP_ERR_NVS_NOT_FOUND || len == 0)
return 0;
ESP_ERROR_CHECK(res);
return len; return len;
} }

View File

@ -27,6 +27,16 @@ extern "C"
*/ */
size_t storage_get_dev_name(char *dest); size_t storage_get_dev_name(char *dest);
/**
* Write private key
*/
void storage_set_priv_key(unsigned char *key, size_t len);
/**
* Get current private key
*/
size_t storage_get_priv_key(unsigned char *key);
#ifdef __cplusplus #ifdef __cplusplus
} }
#endif #endif