Write private key
This commit is contained in:
parent
402edb44d5
commit
752bf50ad3
3
esp32_device/.vscode/settings.json
vendored
3
esp32_device/.vscode/settings.json
vendored
@ -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"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -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
|
@ -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;
|
|
||||||
}
|
|
@ -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;
|
||||||
}
|
}
|
@ -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
|
||||||
|
Loading…
Reference in New Issue
Block a user