Fix CRC XOR value

This commit is contained in:
Mario Hüttel 2022-10-02 21:42:35 +02:00
parent ea00a0756e
commit dd9eb898a8

17
crc.c
View File

@ -101,7 +101,7 @@ void crc_init(struct crc_calc *crc, const struct crc_settings *settings)
crc->table = (uint32_t *)malloc(256 * sizeof(uint32_t)); crc->table = (uint32_t *)malloc(256 * sizeof(uint32_t));
crc->crc_length = crc_len_from_poly(crc->settings.polynomial); crc->crc_length = crc_len_from_poly(crc->settings.polynomial);
crc->crc_val = settings->start_value; crc->crc_val = settings->start_value ^ settings->xor;
crc->crc_mask = 0x0UL; crc->crc_mask = 0x0UL;
for (i = 0; i < crc->crc_length; i++) for (i = 0; i < crc->crc_length; i++)
@ -142,20 +142,5 @@ uint32_t crc_get_value(struct crc_calc *crc)
void crc_finish_calc(struct crc_calc *crc) void crc_finish_calc(struct crc_calc *crc)
{ {
uint32_t val;
uint32_t i;
if (!crc)
return;
crc->crc_val ^= crc->settings.xor; crc->crc_val ^= crc->settings.xor;
val = crc->crc_val;
if (crc->settings.rev) {
crc->crc_val = 0x0ul;
for (i = 0; i < crc->crc_length; i++) {
if (val & (1<<(crc->crc_length - i - 1))) {
crc->crc_val |= (1 << i);
}
}
}
} }