kopia lustrzana https://github.com/weetmuts/wmbusmeters
Log the correct expected length when the length byte is wrong.
rodzic
2983957e32
commit
6fcdaca8ad
|
@ -4145,11 +4145,11 @@ bool BusDeviceCommonImplementation::handleTelegram(AboutTelegram &about, vector<
|
|||
|
||||
if (about.type == FrameType::WMBUS)
|
||||
{
|
||||
size_t len = frame[0]+1;
|
||||
if (frame.size() > 0 && len != frame.size())
|
||||
size_t expected_len = frame[0]+1;
|
||||
if (frame.size() > 0 && expected_len != frame.size())
|
||||
{
|
||||
warning("(wmbus) telegram length byte (the first) 0x%02x (%d) is probably wrong. Expected 0x%02x (%zu) based on the length of the telegram.\n",
|
||||
frame[0], frame[0], len, len);
|
||||
frame[0], frame[0], frame.size()-1, frame.size()-1);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -114,6 +114,16 @@ bool decrypt_TPL_AES_CBC_IV(Telegram *t,
|
|||
}
|
||||
|
||||
*num_encrypted_bytes = num_bytes_to_decrypt;
|
||||
|
||||
if (buffer.size() < num_bytes_to_decrypt)
|
||||
{
|
||||
warning("(TPL) warning: aes-cbc-iv decryption received less bytes than expected for decryption! "
|
||||
"Got %zu bytes but expected at least %zu bytes since num encr blocks was %d.\n",
|
||||
buffer.size(), num_bytes_to_decrypt,
|
||||
t->tpl_num_encr_blocks);
|
||||
num_bytes_to_decrypt = buffer.size();
|
||||
}
|
||||
|
||||
*num_not_encrypted_at_end = buffer.size()-num_bytes_to_decrypt;
|
||||
|
||||
debug("(TPL) num encrypted blocks %zu (%d bytes and remaining unencrypted %zu bytes)\n",
|
||||
|
@ -123,15 +133,6 @@ bool decrypt_TPL_AES_CBC_IV(Telegram *t,
|
|||
|
||||
debugPayload("(TPL) AES CBC IV decrypting", buffer);
|
||||
|
||||
if (buffer.size() < num_bytes_to_decrypt)
|
||||
{
|
||||
warning("(TPL) warning: decryption received less bytes than expected for decryption! "
|
||||
"Got %zu bytes but expected at least %zu bytes since num encr blocks was %d.\n",
|
||||
buffer.size(), num_bytes_to_decrypt,
|
||||
t->tpl_num_encr_blocks);
|
||||
num_bytes_to_decrypt = buffer.size();
|
||||
}
|
||||
|
||||
// The content should be a multiple of 16 since we are using AES CBC mode.
|
||||
if (num_bytes_to_decrypt % 16 != 0)
|
||||
{
|
||||
|
@ -208,6 +209,15 @@ bool decrypt_TPL_AES_CBC_NO_IV(Telegram *t, vector<uchar> &frame, vector<uchar>:
|
|||
}
|
||||
|
||||
*num_encrypted_bytes = num_bytes_to_decrypt;
|
||||
if (buffer.size() < num_bytes_to_decrypt)
|
||||
{
|
||||
warning("(TPL) warning: aes-cbc-no-iv decryption received less bytes than expected for decryption! "
|
||||
"Got %zu bytes but expected at least %zu bytes since num encr blocks was %d.\n",
|
||||
buffer.size(), num_bytes_to_decrypt,
|
||||
t->tpl_num_encr_blocks);
|
||||
num_bytes_to_decrypt = buffer.size();
|
||||
}
|
||||
|
||||
*num_not_encrypted_at_end = buffer.size()-num_bytes_to_decrypt;
|
||||
|
||||
debug("(TPL) num encrypted blocks %d (%d bytes and remaining unencrypted %d bytes)\n",
|
||||
|
@ -215,15 +225,6 @@ bool decrypt_TPL_AES_CBC_NO_IV(Telegram *t, vector<uchar> &frame, vector<uchar>:
|
|||
|
||||
if (aeskey.size() == 0) return false;
|
||||
|
||||
if (buffer.size() < num_bytes_to_decrypt)
|
||||
{
|
||||
warning("(TPL) warning: decryption received less bytes than expected for decryption! "
|
||||
"Got %zu bytes but expected at least %zu bytes since num encr blocks was %d.\n",
|
||||
buffer.size(), num_bytes_to_decrypt,
|
||||
t->tpl_num_encr_blocks);
|
||||
num_bytes_to_decrypt = buffer.size();
|
||||
}
|
||||
|
||||
// The content should be a multiple of 16 since we are using AES CBC mode.
|
||||
if (num_bytes_to_decrypt % 16 != 0)
|
||||
{
|
||||
|
|
|
@ -70,7 +70,7 @@ Received telegram from: 58234965
|
|||
type: Heat meter (0xc3)
|
||||
ver: 0x27
|
||||
driver: vario451
|
||||
(wmbus) telegram length byte (the first) 0x31 (49) is probably wrong. Expected 0x32 (50) based on the length of the telegram.
|
||||
(wmbus) telegram length byte (the first) 0x31 (49) is probably wrong. Expected 0x34 (52) based on the length of the telegram.
|
||||
Received telegram from: 11776622
|
||||
manufacturer: (TCH) Techem Service (0x5068)
|
||||
type: Heat Cost Allocator (0x80)
|
||||
|
|
|
@ -55,7 +55,7 @@ RES=$(cat $TEST/thelog2.txt | tr '\n' ' ' | tr -d ' ' | sed 's/|+1 /|+0 /g' )
|
|||
|
||||
# The sed replacement reduces the risk of a failing test when the second counter happens to flip within the test run.
|
||||
|
||||
EXP=$(printf 'telegram=|A244EE4D785634123C067A8F000000_0C1348550000426CE1F14C130000000082046C21298C0413330000008D04931E3A3CFE3300000033000000330000003300000033000000330000003300000033000000330000003300000033000000330000004300000034180000046D0D0B5C2B03FD6C5E150082206C5C290BFD0F0200018C4079678885238310FD3100000082106C01018110FD610002FD66020002FD170000|+0 telegram=|A244EE4D111111113C077AAC000000_0C1389490000426CE1F14C130000000082046C21298C0413010000008D04931E3A3CFE0100000001000000010000000100000001000000010000000100000001000000010000000100000001000000010000001600000031130000046D0A0C5C2B03FD6C60150082206C5C290BFD0F0200018C4079629885238310FD3100000082106C01018110FD610002FD66020002FD170000|+0 telegram=|1E44AE4C9956341268077A36001000_2F2F0413181E0000023B00002F2F2F2F|+0 telegram=|1844AE4C4455223368077A55000000_041389E20100023B0000|+0(wmbus)telegramlengthbyte(thefirst)0x31(49)isprobablywrong.Expected0x32(50)basedonthelengthofthetelegram.' | tr '\n' ' ' | tr -d ' ')
|
||||
EXP=$(printf 'telegram=|A244EE4D785634123C067A8F000000_0C1348550000426CE1F14C130000000082046C21298C0413330000008D04931E3A3CFE3300000033000000330000003300000033000000330000003300000033000000330000003300000033000000330000004300000034180000046D0D0B5C2B03FD6C5E150082206C5C290BFD0F0200018C4079678885238310FD3100000082106C01018110FD610002FD66020002FD170000|+0 telegram=|A244EE4D111111113C077AAC000000_0C1389490000426CE1F14C130000000082046C21298C0413010000008D04931E3A3CFE0100000001000000010000000100000001000000010000000100000001000000010000000100000001000000010000001600000031130000046D0A0C5C2B03FD6C60150082206C5C290BFD0F0200018C4079629885238310FD3100000082106C01018110FD610002FD66020002FD170000|+0 telegram=|1E44AE4C9956341268077A36001000_2F2F0413181E0000023B00002F2F2F2F|+0 telegram=|1844AE4C4455223368077A55000000_041389E20100023B0000|+0(wmbus)telegramlengthbyte(thefirst)0x31(49)isprobablywrong.Expected0x34(52)basedonthelengthofthetelegram.' | tr '\n' ' ' | tr -d ' ')
|
||||
|
||||
if [ "$RES" != "$EXP" ]
|
||||
then
|
||||
|
|
Ładowanie…
Reference in New Issue