LED_shit/main/eeprom_tls.c
2025-11-04 21:33:28 +00:00

68 lines
1.9 KiB
C

#include <string.h>
#include "esp_log.h"
#include "nvs_flash.h"
#include "eeprom_tls.h"
static const char *TAG = "EEPROM_TLS";
// --- Inicializa NVS ---
esp_err_t eeprom_tls_init(void) {
esp_err_t err = nvs_flash_init();
if (err == ESP_ERR_NVS_NO_FREE_PAGES || err == ESP_ERR_NVS_NEW_VERSION_FOUND) {
ESP_ERROR_CHECK(nvs_flash_erase());
err = nvs_flash_init();
}
return err;
}
// --- Grava certificado PEM ---
esp_err_t eeprom_tls_write_cert(const char *cert_pem) {
if (!cert_pem) return ESP_ERR_INVALID_ARG;
nvs_handle_t nvs;
esp_err_t err = nvs_open("storage", NVS_READWRITE, &nvs);
if (err != ESP_OK) return err;
err = nvs_set_blob(nvs, "tls_cert", cert_pem, strlen(cert_pem) + 1);
if (err == ESP_OK) {
nvs_commit(nvs);
ESP_LOGI(TAG, "💾 Certificado TLS gravado na EEPROM (%d bytes)", strlen(cert_pem));
}
nvs_close(nvs);
return err;
}
// --- Lê certificado PEM ---
esp_err_t eeprom_tls_read_cert(char *buffer, size_t buf_size) {
nvs_handle_t nvs;
esp_err_t err = nvs_open("storage", NVS_READONLY, &nvs);
if (err != ESP_OK) return err;
size_t required = buf_size;
err = nvs_get_blob(nvs, "tls_cert", buffer, &required);
nvs_close(nvs);
if (err == ESP_OK) {
ESP_LOGI(TAG, "📦 Certificado TLS lido (%d bytes)", (int)required);
} else if (err == ESP_ERR_NVS_NOT_FOUND) {
ESP_LOGW(TAG, "⚠️ Nenhum certificado TLS encontrado na EEPROM");
} else {
ESP_LOGE(TAG, "❌ Erro ao ler certificado (%s)", esp_err_to_name(err));
}
return err;
}
// --- Apaga certificado ---
esp_err_t eeprom_tls_clear_cert(void) {
nvs_handle_t nvs;
esp_err_t err = nvs_open("storage", NVS_READWRITE, &nvs);
if (err != ESP_OK) return err;
err = nvs_erase_key(nvs, "tls_cert");
nvs_commit(nvs);
nvs_close(nvs);
ESP_LOGW(TAG, "🧹 Certificado TLS removido da EEPROM");
return err;
}