#include "main.h" #include "gprs_sundry_api.h" #include "AES128.h" #include "gprs.h" #include "cyclic_storage_cfg_api.h" GPRS_PROTOCOL_ENCRYPT_PARA gprs_protocol_encrypt_para_g = {0}; GPRS_SAVE_SEND_PARA_T __attribute__ ((aligned (4))) gprs_save_send_para_g = {0}; /* desc:ÏàËÆPKCS5PaddingµÄ²¹ÆëËã·¨ pLength£ºÐè²¹ÆëµÄ³¤¶È/²¹ÆëµÄÖµ plen£ºÃ÷Îij¤¶È return£º²¹ÆëºóµÄ³¤¶È */ uint16_t PKCS5Padding_like(uint8_t *pLength, uint16_t plen) { uint8_t remain; if ((plen & 15) == 0) //µÈ¼ÛÓÚplen % 16 == 0 { *pLength = 0; return plen; }else { remain = plen & 15; *pLength = 16 - remain; } return *pLength + plen; } /* GPRS½ÓÊÕÊý¾ÝAES128½âÃÜ pDecryptData : ½âÃܵÄÊý¾Ý decrypt_data_length £º½âÃÜÊý¾Ý³¤¶È */ void Gprs_Recv_Data_Aes128_Ecb_Decrypt(uint8_t *pDecryptData, uint16_t decrypt_data_length) { uint8_t cnt = 0; #if GPRS_PROTOCOL_SELECT uint16_t decrypt_len = decrypt_data_length - PROTOCOL_HEAD_LENGTH - PROTOCOL_TAIL_LENGTH; #else uint16_t decrypt_len = decrypt_data_length - PROTOCOL_HEAD_LENGTH - PROTOCOL_DATA_FIELD_HEAD_LENGTH - PROTOCOL_TAIL_LENGTH; #endif if ((decrypt_len & 15) == 0)//µÈ¼ÛÓÚplen % 16 == 0 { cnt = decrypt_len >> 4; for (uint8_t i = 0; i < cnt; i++) AES128_ECB_decrypt(&pDecryptData[16 * i], KVer_AES_128, &pDecryptData[16 * i]); } } /* Ô¶´«·¢ËÍÊý¾ÝAES128Ìî³äºÍ¼ÓÃÜ pEncryptData £º ¼ÓÃÜÊý¾Ý */ void Gprs_Send_Data_Aes128_Ecb_Encrypt_Padding(uint8_t *pEncryptData, GPRS_PROTOCOL_ENCRYPT_PARA *gprs_protocol_encrypt_para_p) { uint8_t cnt = gprs_protocol_encrypt_para_p->padding_total_length >> 4; // ×ܳ¤±ØÐëΪ16µÄ±¶Êý X >> 4 µÈ¼ÛÓÚ X / 16 /*¼ÓÃÜÊý¾ÝÌî³ä²¹ÆëÖÁ16µÄ±¶Êý*/ if (gprs_protocol_encrypt_para_p->padding_length != 0) { /*²¹ÆëµÄÊý¾ÝΪȱÉÙµÄÖµ*/ #if GPRS_PROTOCOL_SELECT for (uint8_t i = 0;i < gprs_protocol_encrypt_para_p->padding_length; i++) pEncryptData[gprs_protocol_encrypt_para_p->plaintext_length + i] = gprs_protocol_encrypt_para_p->padding_length; #else pEncryptData[gprs_protocol_encrypt_para_p->plaintext_length] = 0x80; for (uint8_t i = 0; i < gprs_protocol_encrypt_para_p->padding_length - 1; i++) pEncryptData[gprs_protocol_encrypt_para_p->plaintext_length + 1 + i] = 0; #endif } /*¼ÓÃÜÊý¾Ý*/ for (uint8_t i = 0; i < cnt; i++) AES128_ECB_encrypt(&pEncryptData[16 * i], KVer_AES_128, &pEncryptData[16 * i]); } uint8_t Gprs_Protocol_GetSendDataNum_FrameSum(GPRS_SAVE_SEND_PARA_T * send_para_p) { /*ʼÖÕΪ1*/ gprs_protocol_head_tail_g.gprs_protocol_head.frame_num = 1; /*¼ÆËãÐèÒª·¢Ë͵ÄÌõÊý*/ #if GPRS_HISTORY_OR_REAL_DATA send_para_p->now_send_data_num = send_para_p->last_remain_data_num + send_para_p->send_data_log_save_cnt; // ±¾´Î·¢Ë͵ÄÌõÊý = ÉÏ´ÎÁôϵÄÌõÊý + Éϴε½±¾´Î·¢ËÍÖ®¼äµÄ¼ä¸ô´¢´æÌõÊý #else send_para_p->now_send_data_num = 1; // ÔÝʱĬÈÏΪһÌõ #endif if(send_para_p->now_send_data_num > 72) send_para_p->now_send_data_num = 24; send_para_p->last_remain_data_num = send_para_p->now_send_data_num; send_para_p->send_data_log_save_cnt = 0; #if GPRS_HISTORY_OR_REAL_DATA send_para_p->start_addr = Sys_Log_E2pCyclic_ReverseGetStartAddr(&sys_log_cyclic_table[CYCL_SEND_FLOW_DATA], send_para_p->now_send_data_num); #endif /*¼ÆËã·¢Ë͵Ä×ÜÖ¡Êý*/ if ((send_para_p->now_send_data_num % SEND_DATA_PACK_MAX) == 0) return send_para_p->now_send_data_num / SEND_DATA_PACK_MAX; else return (send_para_p->now_send_data_num / SEND_DATA_PACK_MAX) + 1; }