添加加密EFUSE的mac并发送到APP
This commit is contained in:
@@ -34,6 +34,11 @@ void sertrf_init(void)
|
|||||||
//获取飞控代码地址
|
//获取飞控代码地址
|
||||||
sertrf.fc_address = parse_hex_or_dec(FC_ADDRESS);
|
sertrf.fc_address = parse_hex_or_dec(FC_ADDRESS);
|
||||||
|
|
||||||
|
//获取加密后的efuse MAC 地址
|
||||||
|
if(!esp_efuse_mac_get_default_id(sertrf.efuse_mac))
|
||||||
|
{
|
||||||
|
sertrf_aes_ctr_encrypt(sertrf.efuse_mac, 6, sertrf.efuse_mac_encrypt);
|
||||||
|
}
|
||||||
//初始化环形buff
|
//初始化环形buff
|
||||||
rb_init(&sertrf.data_handle_buffer, DATA_HANDLE_BUFFER_SIZE, sizeof(uint8_t));
|
rb_init(&sertrf.data_handle_buffer, DATA_HANDLE_BUFFER_SIZE, sizeof(uint8_t));
|
||||||
|
|
||||||
@@ -146,7 +151,7 @@ void app_thread(void* arg)
|
|||||||
strcpy(sertrf_stauct.wifi_ap_password, g_cfg_app->app_config_wifi_para.wifi_ap_password);
|
strcpy(sertrf_stauct.wifi_ap_password, g_cfg_app->app_config_wifi_para.wifi_ap_password);
|
||||||
strcpy(sertrf_stauct.wifi_sta_ssid, g_cfg_app->app_config_wifi_para.wifi_sta_ssid);
|
strcpy(sertrf_stauct.wifi_sta_ssid, g_cfg_app->app_config_wifi_para.wifi_sta_ssid);
|
||||||
strcpy(sertrf_stauct.wifi_sta_password, g_cfg_app->app_config_wifi_para.wifi_sta_password);
|
strcpy(sertrf_stauct.wifi_sta_password, g_cfg_app->app_config_wifi_para.wifi_sta_password);
|
||||||
|
memcpy(sertrf_stauct.efuse_mac_encrypt, sertrf.efuse_mac_encrypt, 6);
|
||||||
resend_send_data(&sertrf.resend_device, RESEND_CMD_GET_PARAM, &sertrf_stauct, sizeof(sertrf_stauct_t), 1000);
|
resend_send_data(&sertrf.resend_device, RESEND_CMD_GET_PARAM, &sertrf_stauct, sizeof(sertrf_stauct_t), 1000);
|
||||||
|
|
||||||
sertrf.resend_device.handle_flag = 0;//标志位清零
|
sertrf.resend_device.handle_flag = 0;//标志位清零
|
||||||
|
|||||||
@@ -48,15 +48,21 @@ typedef struct
|
|||||||
// 环形buff
|
// 环形buff
|
||||||
RingBuffer data_handle_buffer;
|
RingBuffer data_handle_buffer;
|
||||||
uint32_t fc_address;
|
uint32_t fc_address;
|
||||||
|
|
||||||
|
// efuse MAC 地址
|
||||||
|
uint8_t efuse_mac[6];
|
||||||
|
uint8_t efuse_mac_encrypt[6];
|
||||||
|
|
||||||
}sertrf_t;
|
}sertrf_t;
|
||||||
|
|
||||||
typedef struct
|
typedef struct __attribute__((packed))
|
||||||
{
|
{
|
||||||
char ble_name[32];
|
char ble_name[32];
|
||||||
char wifi_ap_ssid[32];
|
char wifi_ap_ssid[32];
|
||||||
char wifi_ap_password[32];
|
char wifi_ap_password[32];
|
||||||
char wifi_sta_ssid[32];
|
char wifi_sta_ssid[32];
|
||||||
char wifi_sta_password[32];
|
char wifi_sta_password[32];
|
||||||
|
uint8_t efuse_mac_encrypt[6];
|
||||||
}sertrf_stauct_t;
|
}sertrf_stauct_t;
|
||||||
/**
|
/**
|
||||||
* @brief 模块初始化
|
* @brief 模块初始化
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
#include "tool.h"
|
#include "tool.h"
|
||||||
|
|
||||||
|
uint8_t efuse_mac[6];
|
||||||
int time_out(uint32_t* time_start, uint32_t timeout_ms)
|
int time_out(uint32_t* time_start, uint32_t timeout_ms)
|
||||||
{
|
{
|
||||||
uint32_t time_new = os_get_sys_time();
|
uint32_t time_new = os_get_sys_time();
|
||||||
@@ -39,3 +40,101 @@ uint32_t parse_hex_or_dec(const char *s) {
|
|||||||
if (s[0] == '0' && (s[1]=='x' || s[1]=='X')) return (uint32_t)strtoul(s+2, NULL, 16);
|
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);
|
return (uint32_t)strtoul(s, NULL, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void aes_test(void)
|
||||||
|
{
|
||||||
|
// if(!esp_efuse_mac_get_default_id(efuse_mac))
|
||||||
|
// printf("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]);
|
||||||
|
|
||||||
|
// 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);
|
||||||
|
|
||||||
|
// printf("Ciphertext (hex): ");
|
||||||
|
// for (int i = 0; i < sizeof(efuse_mac); i++)
|
||||||
|
// printf("%02X", output[i]);
|
||||||
|
// printf("\n");
|
||||||
|
|
||||||
|
// // 解密(同一函数)
|
||||||
|
// 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);
|
||||||
|
|
||||||
|
// printf("Decrypted: %s\n", decrypted);
|
||||||
|
|
||||||
|
// mbedtls_aes_free(&aes);
|
||||||
|
|
||||||
|
|
||||||
|
if(!esp_efuse_mac_get_default_id(efuse_mac))
|
||||||
|
printf("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]);
|
||||||
|
|
||||||
|
uint8_t efuse_mac_encrypt[6] = {0};
|
||||||
|
sertrf_aes_ctr_encrypt(efuse_mac, 6, efuse_mac_encrypt);
|
||||||
|
printf("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]);
|
||||||
|
|
||||||
|
uint8_t efuse_mac_decrypt[6] = {0};
|
||||||
|
sertrf_aes_ctr_decrypt(efuse_mac_encrypt, 6, efuse_mac_decrypt);
|
||||||
|
printf("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]);
|
||||||
|
}
|
||||||
|
|
||||||
|
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
|
||||||
|
}
|
||||||
@@ -8,6 +8,13 @@
|
|||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
#include "os/os.h"
|
#include "os/os.h"
|
||||||
#include "sys_log.h"
|
#include "sys_log.h"
|
||||||
|
#include "mbedtls/aes.h"
|
||||||
|
#include <esp_err.h>
|
||||||
|
#include "esp_system.h"
|
||||||
|
#include "esp_mac.h"
|
||||||
|
#include "../data_port/ble_spp/ble_spp_server.h"
|
||||||
|
|
||||||
|
#define PRIVATE_KEY "1234567890abcdef"
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief 超时判断
|
* @brief 超时判断
|
||||||
@@ -22,3 +29,27 @@ void printf_chill_time(uint8_t chill_time, uint16_t type);
|
|||||||
* @brief 字符串转十进制
|
* @brief 字符串转十进制
|
||||||
*/
|
*/
|
||||||
uint32_t parse_hex_or_dec(const char *s);
|
uint32_t parse_hex_or_dec(const char *s);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief AEStest
|
||||||
|
*/
|
||||||
|
void aes_test(void);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief AES加密
|
||||||
|
*/
|
||||||
|
void sertrf_aes_ctr_encrypt(uint8_t *data, uint32_t len,uint8_t* output);
|
||||||
|
/**
|
||||||
|
* @brief AES解密
|
||||||
|
*/
|
||||||
|
void sertrf_aes_ctr_decrypt(uint8_t *data, uint32_t len,uint8_t* output);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @breif 获取ESP MAC地址
|
||||||
|
*/
|
||||||
|
esp_err_t esp_efuse_mac_get_default_id(uint8_t *mac);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief 获取BLE MAC地址
|
||||||
|
*/
|
||||||
|
esp_err_t esp_efuse_ble_mac_get_default(uint8_t *mac);
|
||||||
Reference in New Issue
Block a user