修复upSend中packMsg引起的数组异常
cryp.c更新aes_file函数,使支持输入输出为同一文件
This commit is contained in:
parent
20605db7f8
commit
f57ebee26d
@ -166,13 +166,6 @@ void aes_file(const char *fin, const char *fout)
|
|||||||
goto _exit;
|
goto _exit;
|
||||||
}
|
}
|
||||||
|
|
||||||
fd_out = open(fout, O_WRONLY | O_CREAT | O_TRUNC, 0);
|
|
||||||
if (fd_out < 0)
|
|
||||||
{
|
|
||||||
LOG_E("open the output file : %s error!\n", fout);
|
|
||||||
goto _exit;
|
|
||||||
}
|
|
||||||
|
|
||||||
rt_uint16_t file_size = lseek(fd_in, 0, SEEK_END);
|
rt_uint16_t file_size = lseek(fd_in, 0, SEEK_END);
|
||||||
lseek(fd_in, 0, SEEK_SET);
|
lseek(fd_in, 0, SEEK_SET);
|
||||||
|
|
||||||
@ -185,8 +178,15 @@ void aes_file(const char *fin, const char *fout)
|
|||||||
}
|
}
|
||||||
|
|
||||||
read(fd_in, buffer, file_size);
|
read(fd_in, buffer, file_size);
|
||||||
|
close(fd_in);//读取完毕后及时关闭,使支持fin=fout覆盖写入
|
||||||
|
|
||||||
size_t len = aes_256_cbc_pkcs7(buffer, file_size, outbuffer);
|
size_t len = aes_256_cbc_pkcs7(buffer, file_size, outbuffer);
|
||||||
|
fd_out = open(fout, O_WRONLY | O_CREAT | O_TRUNC, 0);
|
||||||
|
if (fd_out < 0)
|
||||||
|
{
|
||||||
|
LOG_E("open the output file : %s error!\n", fout);
|
||||||
|
goto _exit;
|
||||||
|
}
|
||||||
write(fd_out, outbuffer, len);
|
write(fd_out, outbuffer, len);
|
||||||
|
|
||||||
LOG_I("AESed to %s done. File size from %d bytes to %d.\n", fout,file_size, len);
|
LOG_I("AESed to %s done. File size from %d bytes to %d.\n", fout,file_size, len);
|
||||||
@ -214,7 +214,7 @@ void aes_file(const char *fin, const char *fout)
|
|||||||
// return RT_EOK;
|
// return RT_EOK;
|
||||||
}
|
}
|
||||||
|
|
||||||
void aes_file_test(int argc, char **argv)
|
void crypt_file_test(int argc, char **argv)
|
||||||
{
|
{
|
||||||
|
|
||||||
if (argc == 3)
|
if (argc == 3)
|
||||||
@ -230,7 +230,88 @@ void aes_file_test(int argc, char **argv)
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 将文件内容采用AES-256方式加密
|
||||||
|
* @param fin 待加密的文件名称字符串
|
||||||
|
* @param fout 加密后文件名称字符串
|
||||||
|
*/
|
||||||
|
void deaes_file(const char *fin, const char *fout)
|
||||||
|
{
|
||||||
|
rt_uint8_t *buffer = RT_NULL, *outbuffer = RT_NULL;
|
||||||
|
int fd_in = -1, fd_out = -1;
|
||||||
|
|
||||||
|
fd_in = open(fin, O_RDONLY, 0);
|
||||||
|
if (fd_in < 0)
|
||||||
|
{
|
||||||
|
LOG_E("open the input file : %s error!\n", fin);
|
||||||
|
goto _exit;
|
||||||
|
}
|
||||||
|
|
||||||
|
rt_uint16_t file_size = lseek(fd_in, 0, SEEK_END);
|
||||||
|
lseek(fd_in, 0, SEEK_SET);
|
||||||
|
|
||||||
|
buffer = (rt_uint8_t *) malloc(file_size);
|
||||||
|
outbuffer = (rt_uint8_t *) malloc(file_size + 16); //加密后最大大16字节
|
||||||
|
if (!buffer || !outbuffer)
|
||||||
|
{
|
||||||
|
LOG_E("No memory for AES!\n");
|
||||||
|
goto _exit;
|
||||||
|
}
|
||||||
|
|
||||||
|
read(fd_in, buffer, file_size);
|
||||||
|
close(fd_in);//读取完毕后及时关闭,使支持fin=fout覆盖写入
|
||||||
|
|
||||||
|
size_t len = aes_256_cbc_pkcs7_de(buffer, file_size, outbuffer);
|
||||||
|
fd_out = open(fout, O_WRONLY | O_CREAT | O_TRUNC, 0);
|
||||||
|
if (fd_out < 0)
|
||||||
|
{
|
||||||
|
LOG_E("open the output file : %s error!\n", fout);
|
||||||
|
goto _exit;
|
||||||
|
}
|
||||||
|
write(fd_out, outbuffer, len);
|
||||||
|
|
||||||
|
LOG_I("deAESed to %s done. File size from %d bytes to %d.\n", fout,file_size, len);
|
||||||
|
|
||||||
|
// goto _exit;
|
||||||
|
|
||||||
|
_exit: if (buffer)
|
||||||
|
{
|
||||||
|
rt_free(buffer);
|
||||||
|
}
|
||||||
|
if (outbuffer)
|
||||||
|
{
|
||||||
|
rt_free(outbuffer);
|
||||||
|
}
|
||||||
|
if (fd_in >= 0)
|
||||||
|
{
|
||||||
|
close(fd_in);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (fd_out >= 0)
|
||||||
|
{
|
||||||
|
close(fd_out);
|
||||||
|
}
|
||||||
|
|
||||||
|
// return RT_EOK;
|
||||||
|
}
|
||||||
|
void decrypt_file_test(int argc, char **argv)
|
||||||
|
{
|
||||||
|
|
||||||
|
if (argc == 3)
|
||||||
|
{
|
||||||
|
deaes_file(argv[1], argv[2]);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
rt_kprintf("Usage:\n");
|
||||||
|
rt_kprintf("deaes_file_test [input_file] [output_file] \"input_file\" to \"output_file\" \n");
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
#include <finsh.h>
|
#include <finsh.h>
|
||||||
/* 导出到自动初始化 */
|
/* 导出到自动初始化 */
|
||||||
MSH_CMD_EXPORT(aes_string_test, 使用AES-256加密字符串。crypt string using AES-256.);
|
MSH_CMD_EXPORT(aes_string_test, 使用AES-256加密字符串。crypt string using AES-256.);
|
||||||
MSH_CMD_EXPORT(aes_file_test, 使用AES-256加密文件。crypt file using AES-256.);
|
MSH_CMD_EXPORT(crypt_file_test, 使用AES-256加密文件。crypt file using AES-256.);
|
||||||
|
MSH_CMD_EXPORT(decrypt_file_test, 使用AES-256解密文件。decrypt file using AES-256.);
|
||||||
|
@ -154,8 +154,8 @@ return 0x63;
|
|||||||
|
|
||||||
typedef struct
|
typedef struct
|
||||||
{
|
{
|
||||||
rt_uint8_t len;
|
uint16_t len;
|
||||||
rt_uint8_t data[200];
|
rt_uint8_t data[300];
|
||||||
|
|
||||||
} SMSG;//single messgae
|
} SMSG;//single messgae
|
||||||
|
|
||||||
@ -168,6 +168,8 @@ void upSend_thread_entry(void* parameter)
|
|||||||
// LOG_HEX("--",16,msg->data,msg->len);
|
// LOG_HEX("--",16,msg->data,msg->len);
|
||||||
|
|
||||||
//check status
|
//check status
|
||||||
|
#define CHK_STA
|
||||||
|
#ifdef CHK_STA
|
||||||
uint8_t trycnt = 0;
|
uint8_t trycnt = 0;
|
||||||
while (!isTTjh()) //判断TT状态
|
while (!isTTjh()) //判断TT状态
|
||||||
{
|
{
|
||||||
@ -184,7 +186,7 @@ void upSend_thread_entry(void* parameter)
|
|||||||
cacheDataToFile(msg->data, msg->len);
|
cacheDataToFile(msg->data, msg->len);
|
||||||
return ;
|
return ;
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
//打包数据
|
//打包数据
|
||||||
uint8_t dout[300];
|
uint8_t dout[300];
|
||||||
@ -200,17 +202,19 @@ void upSend_thread_entry(void* parameter)
|
|||||||
#ifdef CRYPT_BEFRE_PACK
|
#ifdef CRYPT_BEFRE_PACK
|
||||||
//crypt before pack
|
//crypt before pack
|
||||||
//更改后3S单帧数据升为200+,超出TT最大单包数据容量,须分包
|
//更改后3S单帧数据升为200+,超出TT最大单包数据容量,须分包
|
||||||
|
|
||||||
for (size_t var = 0; var < msg->len; var=var+PACK_SIZE) {
|
for (size_t var = 0; var < msg->len; var=var+PACK_SIZE) {
|
||||||
cfg.fcurpiece[0] = var/PACK_SIZE+1;
|
cfg.fcurpiece[0] = var/PACK_SIZE+1;
|
||||||
|
|
||||||
uint8_t tmp[200];
|
static uint8_t tmp[200];
|
||||||
uint8_t len = cryptSingleMsg(msg->data+var, (msg->len-var)>PACK_SIZE?PACK_SIZE:(msg->len-var), tmp);
|
uint8_t tlen = (msg->len-var)>PACK_SIZE?PACK_SIZE:(msg->len-var);
|
||||||
size_t rst = packMsg(&cfg, tmp, len, dout);//packMsgs
|
uint8_t len = cryptSingleMsg(msg->data+var, tlen, tmp);
|
||||||
|
// LOG_HEX("2",16,msg->data+var,tlen);
|
||||||
|
|
||||||
|
size_t rst = packMsg(&cfg, tmp, len, dout);//引起数据异常
|
||||||
#else
|
#else
|
||||||
size_t rst = packMsg(&cfg, tmpmsg->data, msg->len, dout);//packMsgs
|
size_t rst = packMsg(&cfg, tmpmsg->data, msg->len, dout);//packMsgs
|
||||||
#endif
|
#endif
|
||||||
// LOG_HEX("upSend", 27, dout, rst);
|
LOG_HEX("upSend", 27, dout, rst);
|
||||||
if (rst)
|
if (rst)
|
||||||
{
|
{
|
||||||
if (sendMsg(dout, rst) == RT_EOK)
|
if (sendMsg(dout, rst) == RT_EOK)
|
||||||
@ -394,10 +398,33 @@ void setCommWindow(uint8_t *t, size_t len)
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void d_sw(void)
|
void d_demo(int argc, char **argv)
|
||||||
{
|
{
|
||||||
uint8_t cfg[]={0x03, 0x1F, 0x03, 0x20, 0x07, 0x1F, 0x09, 0x1E};
|
if (argc == 2)
|
||||||
setCommWindow(cfg, 8);
|
{
|
||||||
|
int fd = open(argv[1], O_RDONLY, 0);
|
||||||
|
if (fd < 0)
|
||||||
|
{
|
||||||
|
LOG_E("open the input file : %s error!\n", argv[1]);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
rt_uint16_t file_size = lseek(fd, 0, SEEK_END);
|
||||||
|
lseek(fd, 0, SEEK_SET);
|
||||||
|
|
||||||
|
rt_uint8_t *buffer = RT_NULL;
|
||||||
|
buffer = (rt_uint8_t *) malloc(file_size);
|
||||||
|
if (!buffer)
|
||||||
|
{
|
||||||
|
LOG_E("No memory for reading file!\n");
|
||||||
|
close(fd);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
read(fd, buffer, file_size);
|
||||||
|
close(fd);
|
||||||
|
upSend(buffer, file_size);
|
||||||
|
rt_free(buffer);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -1851,6 +1878,44 @@ int isNeedRestore(void)
|
|||||||
return rst;
|
return rst;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 将密文解密至内存
|
||||||
|
* @param fin 密文文件
|
||||||
|
* @param buffer 解密后数据
|
||||||
|
* @return 数据长度
|
||||||
|
*/
|
||||||
|
size_t decryptCdata(const char *fin, uint8_t *dout)
|
||||||
|
{
|
||||||
|
int fd = -1;
|
||||||
|
fd = open(fin, O_RDONLY, 0);
|
||||||
|
if (fd < 0)
|
||||||
|
{
|
||||||
|
LOG_E("[hex] open the input file : %s error.", fin);
|
||||||
|
return RT_ERROR;
|
||||||
|
}
|
||||||
|
size_t file_size = lseek(fd, 0, SEEK_END);
|
||||||
|
lseek(fd, 0, SEEK_SET);
|
||||||
|
|
||||||
|
rt_uint8_t *buffer = RT_NULL;
|
||||||
|
buffer = rt_malloc(file_size);
|
||||||
|
read(fd, buffer, file_size);
|
||||||
|
close(fd);
|
||||||
|
|
||||||
|
size_t rst = decryp_data(buffer, file_size, dout);
|
||||||
|
rt_free(buffer);
|
||||||
|
|
||||||
|
return rst;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 加密待发的缓存文件,覆盖源文件
|
||||||
|
* @param f 缓存文件
|
||||||
|
*/
|
||||||
|
void cryptCdata(const char *f)
|
||||||
|
{
|
||||||
|
aes_file(f, f);
|
||||||
|
}
|
||||||
|
|
||||||
#define FUNC_DEMO
|
#define FUNC_DEMO
|
||||||
|
|
||||||
#ifdef FUNC_DEMO //测试时导出命令到控制台
|
#ifdef FUNC_DEMO //测试时导出命令到控制台
|
||||||
@ -1863,7 +1928,7 @@ MSH_CMD_EXPORT(d_getFileSize,d_getFileSize);
|
|||||||
MSH_CMD_EXPORT(isEthUP,isEthUP);
|
MSH_CMD_EXPORT(isEthUP,isEthUP);
|
||||||
MSH_CMD_EXPORT(reportSysCfg,reportSysCfg);
|
MSH_CMD_EXPORT(reportSysCfg,reportSysCfg);
|
||||||
MSH_CMD_EXPORT(d_isInFence,d_isInFence);
|
MSH_CMD_EXPORT(d_isInFence,d_isInFence);
|
||||||
MSH_CMD_EXPORT(d_sw,msw);
|
MSH_CMD_EXPORT(d_demo,demo for debug function);
|
||||||
MSH_CMD_EXPORT(set3SRTC,发送指令设置RTC);
|
MSH_CMD_EXPORT(set3SRTC,发送指令设置RTC);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -86,7 +86,7 @@ void show_version(void)
|
|||||||
char str[30];
|
char str[30];
|
||||||
uint8_t t[10];
|
uint8_t t[10];
|
||||||
size_t len=time2Byte(t);
|
size_t len=time2Byte(t);
|
||||||
rt_kprintf("SW Version: %s, build-%s\n","2.61d",bytes2str(t, 3, 10, "", str));
|
rt_kprintf("SW Version: %s, build-%s\n","2.7d",bytes2str(t, 3, 10, "", str));
|
||||||
}
|
}
|
||||||
|
|
||||||
MSH_CMD_EXPORT(show_version,显示版本号);
|
MSH_CMD_EXPORT(show_version,显示版本号);
|
||||||
|
Loading…
Reference in New Issue
Block a user