Files
ESPC3-wireless/app/drivers/sertrf/tool.c

140 lines
4.9 KiB
C
Raw Normal View History

#include "tool.h"
2025-10-23 18:39:07 +08:00
uint8_t efuse_mac[6];
int time_out(uint32_t* time_start, uint32_t timeout_ms)
{
uint32_t time_new = os_get_sys_time();
if(time_new - *time_start > timeout_ms)
{
*time_start = time_new;
return 1;
}
return 0;
}
void printf_chill_time(uint8_t chill_time, uint16_t type)
{
static size_t last_time[24] = {0};
static uint16_t cnt[24] = {0};
static uint32_t type_cnt_time[24] = {0};
size_t now_time = os_get_sys_time();
cnt[chill_time]++;
type_cnt_time[chill_time] += now_time - last_time[chill_time];
if(cnt[chill_time] % type == 0 && type_cnt_time[chill_time] / type >= now_time - last_time[chill_time] - 1)
{
SYS_LOG_INF("TIME_CHILL%d : %d : %d\n",chill_time, now_time - last_time[chill_time], type_cnt_time[chill_time]);
cnt[chill_time] = 0;
type_cnt_time[chill_time] = 0;
}
else if(cnt[chill_time] % type == 0)
{
SYS_LOG_WRN("TIME_CHILL%d : %d : %d",chill_time, now_time - last_time[chill_time], type_cnt_time[chill_time]);
cnt[chill_time] = 0;
type_cnt_time[chill_time] = 0;
}
last_time[chill_time] = now_time;
}
uint32_t parse_hex_or_dec(const char *s) {
if (!s) return 0;
if (s[0] == '0' && (s[1]=='x' || s[1]=='X')) return (uint32_t)strtoul(s+2, NULL, 16);
return (uint32_t)strtoul(s, NULL, 0);
2025-10-23 18:39:07 +08:00
}
void aes_test(void)
{
// if(!esp_efuse_mac_get_default_id(efuse_mac))
2025-10-28 16:29:00 +08:00
// SYS_LOG_DBG("mac: %02X:%02X:%02X:%02X:%02X:%02X\n", efuse_mac[0], efuse_mac[1], efuse_mac[2], efuse_mac[3], efuse_mac[4], efuse_mac[5]);
2025-10-23 18:39:07 +08:00
// const unsigned char key[16] = "1234567890abcdef"; // 128-bit key
// unsigned char nonce_counter[16] = {0}; // 初始计数器块 (可用随机数 + 计数)
// unsigned char stream_block[16] = {0}; // 内部缓冲
// size_t nc_off = 0;
// const unsigned char input[] = "Hello AES-CTR on ESP32!";
// unsigned char output[64] = {0};
// mbedtls_aes_context aes;
// mbedtls_aes_init(&aes);
// mbedtls_aes_setkey_enc(&aes, key, 128);
// // 加密
// mbedtls_aes_crypt_ctr(&aes, sizeof(efuse_mac), &nc_off,
// nonce_counter, stream_block, efuse_mac, output);
2025-10-28 16:29:00 +08:00
// SYS_LOG_DBG("Ciphertext (hex): ");
2025-10-23 18:39:07 +08:00
// for (int i = 0; i < sizeof(efuse_mac); i++)
2025-10-28 16:29:00 +08:00
// SYS_LOG_DBG("%02X", output[i]);
// SYS_LOG_DBG("\n");
2025-10-23 18:39:07 +08:00
// // 解密(同一函数)
// unsigned char decrypted[64] = {0};
// nc_off = 0;
// memset(nonce_counter, 0, 16);
// memset(stream_block, 0, 16);
// mbedtls_aes_crypt_ctr(&aes, sizeof(efuse_mac), &nc_off,
// nonce_counter, stream_block, output, decrypted);
2025-10-28 16:29:00 +08:00
// SYS_LOG_DBG("Decrypted: %s\n", decrypted);
2025-10-23 18:39:07 +08:00
// mbedtls_aes_free(&aes);
if(!esp_efuse_mac_get_default_id(efuse_mac))
2025-10-28 16:29:00 +08:00
SYS_LOG_DBG("mac: %02X:%02X:%02X:%02X:%02X:%02X\n", efuse_mac[0], efuse_mac[1], efuse_mac[2], efuse_mac[3], efuse_mac[4], efuse_mac[5]);
2025-10-23 18:39:07 +08:00
uint8_t efuse_mac_encrypt[6] = {0};
sertrf_aes_ctr_encrypt(efuse_mac, 6, efuse_mac_encrypt);
2025-10-28 16:29:00 +08:00
SYS_LOG_DBG("mac: %02X:%02X:%02X:%02X:%02X:%02X\n", efuse_mac_encrypt[0], efuse_mac_encrypt[1], efuse_mac_encrypt[2], efuse_mac_encrypt[3], efuse_mac_encrypt[4], efuse_mac_encrypt[5]);
2025-10-23 18:39:07 +08:00
uint8_t efuse_mac_decrypt[6] = {0};
sertrf_aes_ctr_decrypt(efuse_mac_encrypt, 6, efuse_mac_decrypt);
2025-10-28 16:29:00 +08:00
SYS_LOG_DBG("mac: %02X:%02X:%02X:%02X:%02X:%02X\n", efuse_mac_decrypt[0], efuse_mac_decrypt[1], efuse_mac_decrypt[2], efuse_mac_decrypt[3], efuse_mac_decrypt[4], efuse_mac_decrypt[5]);
2025-10-23 18:39:07 +08:00
}
void sertrf_aes_ctr_encrypt(uint8_t *data, uint32_t len,uint8_t* output)
{
size_t nc_off = 0;
unsigned char nonce_counter[16] = {0}; // 初始计数器块 (可用随机数 + 计数)
unsigned char stream_block[16] = {0}; // 内部缓冲
const unsigned char key[16] = PRIVATE_KEY; // 128-bit key
mbedtls_aes_context aes;
mbedtls_aes_init(&aes);
mbedtls_aes_setkey_enc(&aes, key, 128);
// 加密
mbedtls_aes_crypt_ctr(&aes, len, &nc_off,
nonce_counter, stream_block, data, output);
mbedtls_aes_free(&aes);
}
void sertrf_aes_ctr_decrypt(uint8_t *data, uint32_t len,uint8_t* output)
{
size_t nc_off = 0;
unsigned char nonce_counter[16] = {0}; // 初始计数器块 (可用随机数 + 计数)
unsigned char stream_block[16] = {0}; // 内部缓冲
const unsigned char key[16] = PRIVATE_KEY; // 128-bit key
mbedtls_aes_context aes;
mbedtls_aes_init(&aes);
mbedtls_aes_setkey_enc(&aes, key, 128);
mbedtls_aes_crypt_ctr(&aes, len, &nc_off,
nonce_counter, stream_block, data, output);
mbedtls_aes_free(&aes);
}
esp_err_t esp_efuse_mac_get_default_id(uint8_t *mac)
{
esp_err_t err = esp_efuse_mac_get_default(mac);
if (err != ESP_OK) {
return err;
}
#if CONFIG_SOC_IEEE802154_SUPPORTED
return insert_mac_ext_into_mac(mac);
#else
return ESP_OK;
#endif
}