1
0
Fork 0

checksums are simply additive

This commit is contained in:
Kevin Matz 2023-05-15 11:38:05 -04:00
parent 258910efe1
commit 7e4734f56a
2 changed files with 3 additions and 13 deletions

View File

@ -186,7 +186,7 @@ void Message::write(std::vector<uint8_t> &buffer) const
writeType(buffer, mdb.pid);
buffer.push_back(mdb.pdl());
buffer.insert(buffer.end(), mdb.pd.begin(), mdb.pd.end());
writeType(buffer, checksum());
writeType(buffer, checksum(buffer));
}
@ -278,7 +278,7 @@ uint16_t Message::checksum(std::vector<uint8_t> data)
{
uint16_t sum = 0;
for (const auto &byte : data)
addSum_(sum, byte);
sum += byte;
return sum;
}

View File

@ -146,19 +146,9 @@ private: // templates
template<typename T>
static void addSum_(uint16_t &sum, const T &val)
{
uint8_t byte;
uint16_t carry;
auto data = reinterpret_cast<const uint8_t*>(&val);
for (int i = 0; i < sizeof(T); i++)
{
byte = data[sizeof(T)-1-i];
while (byte != 0)
{
carry = sum & byte;
sum = sum ^ byte;
byte = carry << 1;
}
}
sum += data[sizeof(T)-1-i];
}
}; // struct Message