First Ethernet activation

This commit is contained in:
2024-08-17 17:19:47 +02:00
parent 0d90973842
commit d5dc6dae46
10 changed files with 216 additions and 35 deletions

View File

@ -13,9 +13,12 @@
#include <mbedtls/sha256.h>
#include <mbedtls/pk.h>
#include <mbedtls/x509_csr.h>
#include "esp_log.h"
#define ECPARAMS MBEDTLS_ECP_DP_SECP256R1
static const char *TAG = "crypto";
static const char *pers = "ecdsa";
static void seed_ctr_drbg_context(mbedtls_entropy_context *entropy, mbedtls_ctr_drbg_context *ctr_drbg)
@ -25,12 +28,12 @@ static void seed_ctr_drbg_context(mbedtls_entropy_context *entropy, mbedtls_ctr_
mbedtls_entropy_init(entropy);
mbedtls_ctr_drbg_init(ctr_drbg);
printf("Seed Mbedtls\n");
ESP_LOGI(TAG, "Seed Mbedtls\n");
if ((ret = mbedtls_ctr_drbg_seed(ctr_drbg, mbedtls_entropy_func, entropy,
(const unsigned char *)pers,
strlen(pers))) != 0)
{
mbedtls_printf(" failed\n ! mbedtls_ctr_drbg_seed returned %d\n", ret);
ESP_LOGE(TAG, " failed\n ! mbedtls_ctr_drbg_seed returned %d\n", ret);
reboot();
}
}
@ -50,32 +53,32 @@ bool crypto_gen_priv_key()
mbedtls_ctr_drbg_context ctr_drbg;
seed_ctr_drbg_context(&entropy, &ctr_drbg);
printf("PK info from type\n");
ESP_LOGI(TAG, "PK info from type\n");
if ((ret = mbedtls_pk_setup(&key, mbedtls_pk_info_from_type(MBEDTLS_PK_ECKEY))) != 0)
{
mbedtls_printf(" failed\n ! mbedtls_pk_setup returned -0x%04x", (unsigned int)-ret);
ESP_LOGE(TAG, " failed\n ! mbedtls_pk_setup returned -0x%04x", (unsigned int)-ret);
reboot();
}
// Generate private key
printf("Generate private key\n");
ESP_LOGI(TAG, "Generate private key\n");
ret = mbedtls_ecp_gen_key(ECPARAMS,
mbedtls_pk_ec(key),
mbedtls_ctr_drbg_random, &ctr_drbg);
if (ret != 0)
{
mbedtls_printf(" failed\n ! mbedtls_ecp_gen_key returned -0x%04x",
(unsigned int)-ret);
ESP_LOGE(TAG, " failed\n ! mbedtls_ecp_gen_key returned -0x%04x",
(unsigned int)-ret);
reboot();
}
// Export private key
printf("Export private key\n");
ESP_LOGI(TAG, "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);
ESP_LOGE(TAG, " failed\n ! mbedtls_pk_write_key_der returned -0x%04x",
(unsigned int)-ret);
reboot();
}
@ -104,26 +107,26 @@ void crypto_print_priv_key()
mbedtls_ctr_drbg_context ctr_drbg;
seed_ctr_drbg_context(&entropy, &ctr_drbg);
printf("Parse private key (len = %d)\n", key_len);
ESP_LOGI(TAG, "Parse private key (len = %d)\n", key_len);
if ((ret = mbedtls_pk_parse_key(&key, key_buff, key_len, NULL, 0, mbedtls_ctr_drbg_random, &ctr_drbg)) != 0)
{
mbedtls_printf(" failed\n ! mbedtls_pk_parse_key returned -0x%04x",
(unsigned int)-ret);
ESP_LOGE(TAG, " failed\n ! mbedtls_pk_parse_key returned -0x%04x",
(unsigned int)-ret);
reboot();
}
free(key_buff);
printf("Show private key\n");
ESP_LOGI(TAG, "Show private key\n");
unsigned char *out = malloc(16000);
memset(out, 0, 16000);
if ((ret = mbedtls_pk_write_key_pem(&key, out, 16000)) != 0)
{
mbedtls_printf(" failed\n ! mbedtls_pk_write_key_pem returned -0x%04x",
(unsigned int)-ret);
ESP_LOGE(TAG, " failed\n ! mbedtls_pk_write_key_pem returned -0x%04x",
(unsigned int)-ret);
reboot();
}
printf("%s", out);
ESP_LOGI(TAG, "%s", out);
free(out);
mbedtls_pk_free(&key);
@ -146,11 +149,11 @@ char *crypto_get_csr()
mbedtls_ctr_drbg_context ctr_drbg;
seed_ctr_drbg_context(&entropy, &ctr_drbg);
printf("Parse private key (len = %d)\n", key_len);
ESP_LOGI(TAG, "Parse private key (len = %d)\n", key_len);
if ((ret = mbedtls_pk_parse_key(&key, key_buff, key_len, NULL, 0, mbedtls_ctr_drbg_random, &ctr_drbg)) != 0)
{
mbedtls_printf(" failed\n ! mbedtls_pk_parse_key returned -0x%04x",
(unsigned int)-ret);
ESP_LOGE(TAG, " failed\n ! mbedtls_pk_parse_key returned -0x%04x",
(unsigned int)-ret);
reboot();
}
free(key_buff);
@ -166,17 +169,17 @@ char *crypto_get_csr()
free(n);
if ((ret = mbedtls_x509write_csr_set_subject_name(&req, subj)) != 0)
{
mbedtls_printf(" failed\n ! mbedtls_x509write_csr_set_subject_name returned %d", ret);
ESP_LOGE(TAG, " failed\n ! mbedtls_x509write_csr_set_subject_name returned %d", ret);
reboot();
}
printf("Sign CSR with private key\n");
ESP_LOGI(TAG, "Sign CSR with private key\n");
mbedtls_x509write_csr_set_key(&req, &key);
char *csr = malloc(4096);
if ((ret = mbedtls_x509write_csr_pem(&req, (u_char *)csr, 4096, mbedtls_ctr_drbg_random, &ctr_drbg)) < 0)
{
mbedtls_printf(" failed\n ! mbedtls_x509write_csr_pem returned %d", ret);
ESP_LOGE(TAG, " failed\n ! mbedtls_x509write_csr_pem returned %d", ret);
reboot();
}