Browse Source

修改bug

YunZhiNeng 1 year ago
parent
commit
4a8b0e3199

+ 1 - 1
Drivers/Business/PumpBusiness.c

@@ -14,7 +14,7 @@
 // 计时相关的变量
 uint8_t Business_time_flag = 0;
 uint32_t Business_timer_ms = 0;
-uint32_t Business_wait_time = 300; // 秒
+uint32_t Business_wait_time = 1200; // 秒
 uint8_t resend_counter = 0;//nb失败重发标志
 uint8_t send_data_switch = 1; // 发送数据的开关,0表示发送数据
 uint8_t networkTest_Flag=0;//开机判断是否有信号,0是未知默认状态,1是失败状态,2是成功状态。

+ 71 - 48
Drivers/Encrypt/mbedtls_util.c

@@ -8,7 +8,7 @@
 #include "mbedtls/base64.h"
 #include "sys.h"
 #include <stdio.h>
-
+#include "AT.h"
 #define KEY_IOPAD_SIZE 64
 
 #define SHA1_DIGEST_SIZE 20
@@ -20,27 +20,27 @@
 #define AES_BLOCK_SIZE 16
 
 //unsigned char buffer[AES_LEN_SIZE*2]={0};
-char plaintextdata[AES_LEN_SIZE]= {0};
+static char plaintextdata[AES_LEN_SIZE]= {0};
 /**
 * 填充源码,返回填充后的数据长度
 */
-static int fillAESPKCS7Data(char* data)
-{
-	int left= 0;
-	int len = strlen(data);
-	if(len%AES_BLOCK_SIZE != 0)
-	{
-		left = AES_BLOCK_SIZE-strlen(data)%AES_BLOCK_SIZE;
-		
-	}
-	else
-	{
-		left = AES_BLOCK_SIZE;
-	}
-	memset(data+strlen(data),left,left);
-	len+=left;
-	return len;
-}
+//static int fillAESPKCS7Data(char* data)
+//{
+//	int left= 0;
+//	int len = strlen(data);
+//	if(len%AES_BLOCK_SIZE != 0)
+//	{
+//		left = AES_BLOCK_SIZE-strlen(data)%AES_BLOCK_SIZE;
+//		
+//	}
+//	else
+//	{
+//		left = AES_BLOCK_SIZE;
+//	}
+//	memset(data+strlen(data),left,left);
+//	len+=left;
+//	return len;
+//}
 
 
 static int fillAESPKCS7DataWithLength(uint8_t * data, uint16_t data_length)
@@ -123,19 +123,23 @@ void utils_hmac_sha1_str(const char *msg, int msg_len, char *digest, const char
 	mbedtls_sha1_free(&context);
 		
 }
-
+//static char testhexdata[512] ={0};
 void utils_sha256(const char *msg, int msg_len, char * digest)
 {
 
 		//hmac sha1加密处理
     mbedtls_sha256_context context;
-
+//   memset(testhexdata, 0, sizeof(testhexdata));
     /* perform inner MD5 */
     mbedtls_sha256_init(&context);                                      /* init context for 1st pass */
     mbedtls_sha256_starts(&context,0);                                    /* setup context for 1st pass */
     mbedtls_sha256_update(&context, (unsigned char *) msg, msg_len);    /* then text of datagram */
     mbedtls_sha256_finish(&context, (unsigned char *) digest);                               /* finish up 1st pass */
     mbedtls_sha256_free(&context);
+//	byteToHexStr((const unsigned char *)digest,testhexdata, strlen((char * )digest));
+//	Log_Printf_Debug("数据报文msg:%s,%d\r\n", msg,msg_len);
+//	Log_Printf_Debug("数据报文digest:%s\r\n", testhexdata);
+	
 }
 
 //void utils_sha256_str(const char *msg, int msg_len, char *digest)
@@ -155,39 +159,58 @@ void utils_sha256(const char *msg, int msg_len, char * digest)
 /**
 *AES CBC加密 , plaintext:源数据,ciphertext:加密数据, 返回加密长度
 */
-int utils_aes128_cbc_enc(char *aes_key, char *iv, char *plaintext, char *ciphertext)
-{
+char iv_use[16] = {0};
+//int utils_aes128_cbc_enc(uint8_t * aes_key, char *iv, char *plaintext, char *ciphertext)
+//{
 
-		char iv_use[16] = {0};
-		memset(plaintextdata, '\0', sizeof(plaintextdata));
-		mbedtls_aes_context aes_ctx;
-		if(strlen(plaintext)+16 > AES_LEN_SIZE) return 0;
-		memcpy(iv_use,iv,16);
-		memcpy(plaintextdata,(const char *)plaintext,strlen(plaintext));
-    int len = fillAESPKCS7Data(plaintextdata);
-    
-    mbedtls_aes_init(&aes_ctx);
-    //setkey_dec
-    mbedtls_aes_setkey_enc(&aes_ctx, (unsigned char * )aes_key, 128);
-		mbedtls_aes_crypt_cbc(&aes_ctx, MBEDTLS_AES_ENCRYPT, len, (unsigned char * )iv_use, (unsigned char * )plaintextdata, (unsigned char * )ciphertext);
-    
-    mbedtls_aes_free(&aes_ctx);
-    return len; //OK
+//		
+//		memset(testhexdata, 0, sizeof(testhexdata));
+//		byteToHexStr((const unsigned char *)aes_key,testhexdata, 16);
+//		Log_Printf_Debug("数据报文aes_key:%s,iv:%s\r\n", testhexdata,iv);
+//		memset(testhexdata, 0, sizeof(testhexdata));
+//		memset(plaintextdata, 0, sizeof(plaintextdata));
+//		mbedtls_aes_context aes_ctx;
+//		if(strlen(plaintext)+16 > AES_LEN_SIZE) return 0;
+//	    memset(iv_use,0,sizeof(iv_use));
+//		memcpy(iv_use,iv,16);
+//		memcpy(plaintextdata,(const char *)plaintext,strlen(plaintext));
+//		byteToHexStr((const unsigned char *)plaintextdata,testhexdata, strlen((char * )plaintextdata));
+//		Log_Printf_Debug("数据报文加密数据plaintextdata:%s\r\n", testhexdata);
+////    int len = fillAESPKCS7Data(plaintextdata);
+//	int len = fillAESPKCS7DataWithLength((uint8_t *)plaintextdata, strlen((char * )plaintextdata));
+//		memset(testhexdata, 0, sizeof(testhexdata));
+//		byteToHexStr((const unsigned char *)plaintextdata,testhexdata, len);
+//		Log_Printf_Debug("数据报文加密数据填充后plaintextdata:%s\r\n", testhexdata);
+//    
+//    mbedtls_aes_init(&aes_ctx);
+//    //setkey_dec
+//      mbedtls_aes_setkey_enc(&aes_ctx, aes_key, 128);
+//		 mbedtls_aes_crypt_cbc(&aes_ctx, MBEDTLS_AES_ENCRYPT, len, (unsigned char * )iv_use, (unsigned char * )plaintextdata, (unsigned char * )ciphertext);
+//		byteToHexStr((const unsigned char *)ciphertext,testhexdata, len);
+//		Log_Printf_Debug("数据报文加密数据后ciphertext:%s,ciphertext:%d,testhexdata:%d,len2:%d\r\n", testhexdata,strlen((char * )ciphertext),strlen(testhexdata),len);
+//		
+//    
+//    mbedtls_aes_free(&aes_ctx);
+//    return len; //OK
 
-}
+//}
 
 
-int utils_aes128_cbc_enc_with_length(char *aes_key, char *iv, uint8_t * plaintext, uint16_t plaintext_length, uint8_t * ciphertext)
+int utils_aes128_cbc_enc_with_length(uint8_t *aes_key, char *iv, uint8_t * plaintext, uint16_t plaintext_length, uint8_t * ciphertext)
 {
 
-		char iv_use[16] = {0};
-		memset(plaintextdata, '\0', sizeof(plaintextdata));
+
+
+		memset(plaintextdata, 0, sizeof(plaintextdata));
 		mbedtls_aes_context aes_ctx;
 		if(plaintext_length + 16 > AES_LEN_SIZE) return -1;
+	     memset(iv_use,0,sizeof(iv_use));
 		memcpy(iv_use,iv,16);
 		memcpy(plaintextdata, (const char *)plaintext, plaintext_length);
+
     int len = fillAESPKCS7DataWithLength((uint8_t *)plaintextdata, plaintext_length);
-    
+
+ 
     mbedtls_aes_init(&aes_ctx);
     //setkey_dec
     mbedtls_aes_setkey_enc(&aes_ctx, (unsigned char * )aes_key, 128);
@@ -203,12 +226,12 @@ int utils_aes128_cbc_enc_with_length(char *aes_key, char *iv, uint8_t * plaintex
 int utils_aes128_ECB_base64_enc_with_length(char *aes_key, uint8_t * plaintext)
 {
 	int times=0;
- 		memset(plaintextdata, '\0', sizeof(plaintextdata));
+ 		memset(plaintextdata, 0, sizeof(plaintextdata));
 		mbedtls_aes_context aes_ctx;
 		if(strlen((const char *)plaintext) + 16 > AES_LEN_SIZE) return -1;
 		memcpy(plaintextdata, plaintext, strlen((const char *)plaintext));
 
-    int len = fillAESPKCS7Data(plaintextdata);
+    int len = fillAESPKCS7DataWithLength((uint8_t *)plaintextdata, strlen((const char *)plaintext));
 	
 	mbedtls_aes_init(&aes_ctx);
 	   //setkey_dec
@@ -231,7 +254,7 @@ int utils_aes128_ECB_base64_enc_with_length(char *aes_key, uint8_t * plaintext)
 int utils_aes128_ECB_base64_dec(char *aes_key, uint8_t * plaintext, uint16_t recvdata_length)
 {
 	int times=0;
- 		memset(plaintextdata, '\0', sizeof(plaintextdata));
+ 		memset(plaintextdata, 0, sizeof(plaintextdata));
 		mbedtls_aes_context aes_ctx;
 		if(strlen((const char *)plaintext) + 16 > AES_LEN_SIZE) return -1;
 		memcpy(plaintextdata, plaintext, strlen((const char *)plaintext));
@@ -253,7 +276,7 @@ int utils_aes128_ECB_base64_dec(char *aes_key, uint8_t * plaintext, uint16_t rec
 /**
 *AES CBC解密 ciphertext:加密数据, len:加密数据长度,plaintext:解密到的数据
 */
-int utils_aes128_cbc_dec(char *aes_key, char *iv, char *ciphertext, int len, char *plaintext)
+int utils_aes128_cbc_dec(uint8_t *aes_key, char *iv, char *ciphertext, int len, char *plaintext)
 {
 
 		char iv_use[16] = {0};
@@ -262,7 +285,7 @@ int utils_aes128_cbc_dec(char *aes_key, char *iv, char *ciphertext, int len, cha
 		memcpy(iv_use,iv,16);
     mbedtls_aes_init(&aes_ctx);
     //setkey_dec
-    mbedtls_aes_setkey_dec(&aes_ctx, (unsigned char * )aes_key, 128);
+    mbedtls_aes_setkey_dec(&aes_ctx, aes_key, 128);
 		mbedtls_aes_crypt_cbc(&aes_ctx, MBEDTLS_AES_DECRYPT, len, (unsigned char * )iv_use, (unsigned char * )ciphertext, (unsigned char * )plaintext);
     cutAESPKCS7Data((char *)plaintext);
     mbedtls_aes_free(&aes_ctx);

+ 3 - 3
Drivers/Encrypt/mbedtls_util.h

@@ -8,10 +8,10 @@ void utils_sha256(const char *msg, int msg_len, char *digest);
 
 void utils_sha256_str(const char *msg, int msg_len, char *digest);
 
-int utils_aes128_cbc_enc(char *aes_key, char *iv, char *plaintext, char *ciphertext);
+int utils_aes128_cbc_enc(uint8_t *aes_key, char *iv, char *plaintext, char *ciphertext);
 
-int utils_aes128_cbc_dec(char *aes_key, char *iv, char *ciphertext, int len, char *plaintext);
-int utils_aes128_cbc_enc_with_length(char *aes_key, char *iv, uint8_t * plaintext, uint16_t plaintext_length, uint8_t * ciphertext);
+int utils_aes128_cbc_dec(uint8_t *aes_key, char *iv, char *ciphertext, int len, char *plaintext);
+int utils_aes128_cbc_enc_with_length(uint8_t *aes_key, char *iv, uint8_t * plaintext, uint16_t plaintext_length, uint8_t * ciphertext);
 
 int utils_aes128_cbc_base64_enc(char *aes_key, char *iv, uint8_t *src,int dataLen, char *ciphertext);
 

+ 2 - 2
Drivers/Regist.c

@@ -45,9 +45,9 @@ extern uint8_t register_success;
 static uint8_t tcpconnectID = 2;
 static char * REGIST_SERVER ="8337239yf4.yicp.fun" ; //注册服务器地址
 static uint16_t REGIST_PORT=22155; //端口号
-char qcciddata[31]={0};//
+static char qcciddata[31]={0};//
 //char registData[100] = {0};
-char recvdata[512]={0};//和registData共用
+static char recvdata[512]={0};//和registData共用
 /**
 * 
 *注册信息打包

+ 27 - 6
Drivers/module/aliyuniot.c

@@ -146,10 +146,13 @@ void aliyuniot_get_auth_message(uint8_t * coap_message, uint16_t * coap_message_
 	// 签名相关
 	memset(StrForSignature, 0, sizeof(StrForSignature));
 	sprintf(StrForSignature, "clientId%sdeviceName%sproductKey%sseq%d", ClientID, DeviceName, ProductKey, SeqOffset);
+	Log_Printf_Debug("认证报文StrForSignature:%s\r\n", StrForSignature);
 	// 签名
 	memset(sign, 0, sizeof(sign));
+	
 	utils_hmac_sha1_str(StrForSignature, strlen((char * )StrForSignature), sign, DeviceSecret, strlen(DeviceSecret));
 
+
 	// payload
 	memset(payload, 0, sizeof(payload));
 	sprintf((char * )payload, "{\"clientId\":\"%s\",\"signmethod\":\"hmacsha1\",\"sign\":\"%s\",\"productKey\":\"%s\",\"deviceName\":\"%s\",\"seq\":\"%d\"}", ClientID, sign, ProductKey, DeviceName, SeqOffset);
@@ -168,11 +171,16 @@ static uint8_t aes_key[16] = {0};
 static char iv[] = "543yhjy97ae7fyfg";
 static char out[80];
 static char sha256_source[100];
+
+static char Rand2089[10] = {'\0'};
+static char Opt2089[20] = {'\0'};
 void aliyuniot_get_data_message(uint8_t * data, uint8_t data_length, uint8_t * coap_message, uint16_t * coap_message_length)
 {
+	aliyuniot_printf_params();
 	// 先初始化clientID和Host
 	initClientIdAndHost();
 	SeqOffset++;
+
 	Log_Printf_Debug("STEP: 拼接数据报文,seqOffset=%d\r\n", SeqOffset);
 	
 	// 获取密钥
@@ -183,6 +191,17 @@ void aliyuniot_get_data_message(uint8_t * data, uint8_t data_length, uint8_t * c
 	utils_sha256(sha256_source, strlen(sha256_source), out);
 	memset(aes_key, 0, sizeof(aes_key));
 	memcpy(aes_key, out+8, 16); //获取key
+	Log_Printf_Debug("数据报文aes_key:");
+	for(int i=0;i<16;i++)
+	{
+	Log_Printf_Debug("%d",aes_key[i]);
+	}
+	Log_Printf_Debug("\r\n");
+	for(int i=0;i<16;i++)
+	{
+	Log_Printf_Debug("%02x",aes_key[i]);
+	}
+	Log_Printf_Debug("\r\n");
 	
 	// CoAP协议
 	CoAP_Init();
@@ -209,15 +228,17 @@ void aliyuniot_get_data_message(uint8_t * data, uint8_t data_length, uint8_t * c
 	// 2088
 	CoAP_Set_Option_Str(2088, Token);
 	// 2089
-	char Rand2089[10] = {'\0'};
-	char Opt2089[20] = {'\0'};
+	memset(Rand2089, 0, sizeof(Rand2089));
+	memset(Opt2089, 0, sizeof(Opt2089));
 	my_itoa(SeqOffset, Rand2089, 10);
-	int Opt2089_Length = utils_aes128_cbc_enc((char * )aes_key, iv, Rand2089, Opt2089);
-	CoAP_Set_Option_Str(2089, Opt2089);
+//	int Opt2089_Length = utils_aes128_cbc_enc(aes_key, iv, Rand2089, Opt2089);
+int Opt2089_Length = utils_aes128_cbc_enc_with_length(aes_key, iv, (uint8_t *)Rand2089, strlen(Rand2089),(uint8_t *)Opt2089);
+	CoAP_Set_Option(2089,Opt2089_Length, (uint8_t *)Opt2089);
+//    CoAP_Set_Option_Str(2088, Opt2089);
 	
 	// payload
 	memset(payload, 0, sizeof(payload));
-	int payload_length = utils_aes128_cbc_enc_with_length((char * )aes_key, iv, data, data_length, payload);
+	int payload_length = utils_aes128_cbc_enc_with_length(aes_key, iv, data, data_length, payload);
 	
 	CoAP_Set_Payload(payload, payload_length);
 	
@@ -274,7 +295,7 @@ uint8_t aliyuniot_recv_data_handle(uint8_t * coap_message, uint16_t coap_message
 	{
 		// 数据发送成功返回
 		memset(plaintext, 0, sizeof(plaintext));
-		uint16_t plaintext_length = utils_aes128_cbc_dec((char * )aes_key, iv, (char * )payload, payload_length, (char * )plaintext);
+		uint16_t plaintext_length = utils_aes128_cbc_dec(aes_key, iv, (char * )payload, payload_length, (char * )plaintext);
 		Log_Printf_Debug("\r\nplaintext(%d): %s\r\n",plaintext_length, (char *)plaintext);
 		return 2;
 	}

+ 1 - 1
Drivers/module/bc260.c

@@ -27,7 +27,7 @@
 
 #if  NBFLAG
 
-char hexData[800] = {0};//数据发送的中间数据
+static char hexData[800] = {0};//数据发送的中间数据
 // 方法声明
 
 void bc260y_reset(void); // 重置状态。该文件中的方法共用状态,在使用下面的方法前需要重置一下状态。

+ 2 - 0
User/main.c

@@ -63,6 +63,8 @@ int main(void)
 		
 		pump_business_loop_execution();
 		
+		
+		
 	}
 	
 }