Protocol: Add CRC for zigbee crypto frame.

This commit is contained in:
Mentalflow 2024-03-12 17:13:11 +08:00
parent 075b222670
commit 402b5ff08a
Signed by: Mentalflow
GPG Key ID: 5AE68D4401A2EE71
3 changed files with 7 additions and 0 deletions

View File

@ -121,6 +121,7 @@ typedef struct crypto_zdata_frame
{
u16 head;
u16 length;
u16 crc;
u8 data[100];
}crypto_zdata_frame;

View File

@ -166,6 +166,7 @@ void Protocol::zigbee_data_encrypt(uint8_t *data, uint8_t data_len, crypto_zdata
QByteArray key = QByteArray::fromHex(en_key == "" ? hmac_verify_key.toLatin1() : en_key.toLatin1());
SM4_encrypt((u8 *)key.data(), 16, data, data_len, zdata->data,&len,false);
zdata->length = len + CRYPTO_ZDATA_FRAME_PREFIX_LEN;
zdata->crc = crc16_xmodem(data, data_len);
}
bool Protocol::zigbee_data_dectypt(uint8_t *data, uint8_t *data_len, crypto_zdata_frame *zdata,
@ -179,6 +180,9 @@ bool Protocol::zigbee_data_dectypt(uint8_t *data, uint8_t *data_len, crypto_zdat
QByteArray key = QByteArray::fromHex(en_key == "" ? hmac_verify_key.toLatin1() : en_key.toLatin1());
SM4_decrypt((u8 *)key.data(), 16, zdata->data, msglen, data, &len,false);
*data_len = len;
u16 crc = crc16_xmodem(data, *data_len);
if (crc != zdata->crc)
return false;
return true;
}

View File

@ -251,6 +251,7 @@ void ZigBeeDataResolver::des_port_parser(zigbee_protocol::ZigbeeFrame &zframe, b
object.insert("note_text",QJsonValue(note_text));
emit data_send("zigbee_recv_data_view",object);
node->second.id=0;
node->second.verified=0;
new_data_frame(5) dframe;
memset(&dframe,0,sizeof (dframe));
_protocol->protocal_wrapper((data_frame *)&dframe, 0, 5, (u8 *)"RESET", false);
@ -324,6 +325,7 @@ void ZigBeeDataResolver::des_port_parser(zigbee_protocol::ZigbeeFrame &zframe, b
object.insert("type","zigbee_recv_data");
emit data_send("zigbee_recv_data_view",object);
node->second.id=0;
node->second.verified=0;
new_data_frame(5) dframe;
memset(&dframe,0,sizeof (dframe));
_protocol->protocal_wrapper((data_frame *)&dframe, 0, 5, (u8 *)"RESET", false);