FIX: 'LF PYRAMID' the crc8_MAXIM and crc16_DNP was calling the wrong crc method. (update2 is the older and correct version). This solves the pyrmid issue with wrong checksums calculated.
Thanks to @rookieatall @marshmellow42 for pointing out the bug. ref: http://www.proxmark.org/forum/viewtopic.php?id=4006
This commit is contained in:
@@ -68,7 +68,6 @@ void crc_update(crc_t *crc, uint32_t data, int data_width)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
uint32_t crc_finish(crc_t *crc) {
|
||||
uint32_t val = crc->state;
|
||||
if (crc->refout) val = reflect(val, crc->order);
|
||||
@@ -96,7 +95,7 @@ uint32_t CRC8Maxim(uint8_t *buff, size_t size) {
|
||||
crc_t crc;
|
||||
crc_init_ref(&crc, 8, 0x31, 0, 0, TRUE, TRUE);
|
||||
for ( int i=0; i < size; ++i)
|
||||
crc_update(&crc, buff[i], 8);
|
||||
crc_update2(&crc, buff[i], 8);
|
||||
return crc_finish(&crc);
|
||||
}
|
||||
|
||||
@@ -139,7 +138,7 @@ uint32_t CRC16_DNP(uint8_t *buff, size_t size) {
|
||||
crc_t crc;
|
||||
crc_init_ref(&crc, 16, 0x3d65, 0, 0xffff, TRUE, TRUE);
|
||||
for ( int i=0; i < size; ++i)
|
||||
crc_update(&crc, buff[i], 8);
|
||||
crc_update2(&crc, buff[i], 8);
|
||||
|
||||
return BSWAP_16(crc_finish(&crc));
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user