mirror of
https://github.com/RfidResearchGroup/proxmark3.git
synced 2025-08-14 18:48:13 -07:00
chg: adjusted the input parameters for crc16 implementations.
This commit is contained in:
parent
1f5477491f
commit
205e4b2300
8 changed files with 206 additions and 61 deletions
20
common/crc.c
20
common/crc.c
|
@ -70,7 +70,8 @@ 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);
|
||||
if (crc->refout)
|
||||
val = reflect(val, crc->order);
|
||||
return ( val ^ crc->final_xor ) & crc->mask;
|
||||
}
|
||||
|
||||
|
@ -159,20 +160,3 @@ uint32_t CRC16_CCITT(uint8_t *buff, size_t size) {
|
|||
crc_update(&crc, buff[i], 8);
|
||||
return crc_finish(&crc);
|
||||
}
|
||||
//width=16 poly=0x8408 init=0xffff refin=false refout=true xorout=0xffff check=0xF0B8 name="CRC-16/ISO/IEC 13239"
|
||||
uint32_t CRC16_Iso15693(uint8_t *buff, size_t size) {
|
||||
crc_t crc;
|
||||
crc_init_ref(&crc, 16, 0x8408, 0xFFFF, 0xFFFF, true, false);
|
||||
for ( int i=0; i < size; ++i)
|
||||
crc_update(&crc, buff[i], 8);
|
||||
return reflect16(crc_finish(&crc));
|
||||
}
|
||||
//width=16 poly=0x8408 init=0xffff refin=true refout=true xorout=0x0BC3 check=0xF0B8 name="CRC-16/ICLASS"
|
||||
uint32_t CRC16_ICLASS(uint8_t *buff, size_t size) {
|
||||
|
||||
crc_t crc;
|
||||
crc_init_ref(&crc, 16, 0x8408, 0xFFFF, 0x0BC3, false, false);
|
||||
for ( int i=0; i < size; ++i)
|
||||
crc_update(&crc, buff[i], 8);
|
||||
return crc_finish(&crc);
|
||||
}
|
|
@ -70,8 +70,6 @@ uint32_t CRC16Legic(uint8_t *buff, size_t size, uint8_t uidcrc);
|
|||
// test crc 16.
|
||||
uint32_t CRC16_DNP(uint8_t *buff, size_t size);
|
||||
uint32_t CRC16_CCITT(uint8_t *buff, size_t size);
|
||||
uint32_t CRC16_Iso15693(uint8_t *buff, size_t size);
|
||||
uint32_t CRC16_ICLASS(uint8_t *buff, size_t size);
|
||||
|
||||
/* Static initialization of a crc structure */
|
||||
#define CRC_INITIALIZER(_order, _polynom, _initial_value, _final_xor) { \
|
||||
|
|
|
@ -30,7 +30,7 @@ uint16_t update_crc16( uint16_t crc, uint8_t c ) {
|
|||
// two ways.
|
||||
// msb or lsb loop.
|
||||
//
|
||||
uint16_t crc16(uint8_t const *d, int length, uint16_t remainder, uint16_t polynomial, bool refin, bool refout) {
|
||||
uint16_t crc16(uint8_t const *d, size_t length, uint16_t remainder, uint16_t polynomial, bool refin, bool refout) {
|
||||
|
||||
if (length == 0)
|
||||
return (~remainder);
|
||||
|
@ -63,35 +63,44 @@ uint16_t crc16(uint8_t const *d, int length, uint16_t remainder, uint16_t polyno
|
|||
|
||||
return remainder;
|
||||
}
|
||||
uint16_t crc16_ccitt(uint8_t const *d, int n) {
|
||||
uint16_t crc16_ccitt(uint8_t const *d, size_t n) {
|
||||
return crc16(d, n, 0xffff, CRC16_POLY_CCITT, false, false);
|
||||
}
|
||||
//poly=0x1021 init=0x0000 refin=true refout=true xorout=0x0000 name="KERMIT"
|
||||
uint16_t crc16_ccitt_kermit(uint8_t const *message, int length){
|
||||
return crc16_kermit(message, length);
|
||||
uint16_t crc16_ccitt_kermit(uint8_t const *d, size_t n){
|
||||
return crc16_kermit(d, n);
|
||||
}
|
||||
uint16_t crc16_kermit(uint8_t const *d, int n) {
|
||||
uint16_t crc16_kermit(uint8_t const *d, size_t n) {
|
||||
return crc16(d, n, 0x0000, CRC16_POLY_CCITT, true, true);
|
||||
}
|
||||
//FeliCa uses XMODEM
|
||||
//poly=0x1021 init=0x0000 refin=false refout=false xorout=0x0000 name="XMODEM"
|
||||
uint16_t crc16_xmodem(uint8_t const *d, int n) {
|
||||
uint16_t crc16_xmodem(uint8_t const *d, size_t n) {
|
||||
return crc16(d, n, 0x0000, CRC16_POLY_CCITT, false, false);
|
||||
}
|
||||
//ISO 15693 uses X-25, CRC_B (or 14443-3 )
|
||||
//poly=0x1021 init=0xffff refin=true refout=true xorout=0xffff name="X-25"
|
||||
uint16_t crc16_x25(uint8_t const *d, int n) {
|
||||
uint16_t crc16_x25(uint8_t const *d, size_t n) {
|
||||
uint16_t crc = crc16(d, n, 0xffff, CRC16_POLY_CCITT, true, true);
|
||||
crc ^= 0xFFFF;
|
||||
return crc;
|
||||
}
|
||||
//CRC-A (14443-3)
|
||||
//poly=0x1021 init=0xc6c6 refin=true refout=true xorout=0x0000 name="CRC-A"
|
||||
uint16_t crc16_a(uint8_t const *d, int n) {
|
||||
uint16_t crc16_a(uint8_t const *d, size_t n) {
|
||||
return crc16(d, n, 0xc6c6, 0x1021, true, true);
|
||||
}
|
||||
|
||||
bool check_crc16_ccitt(uint8_t const *d, int n) {
|
||||
//width=16 poly=0x8408 init=0xffff refin=true refout=true xorout=0x0BC3 check=0xF0B8 name="CRC-16/ICLASS"
|
||||
uint16_t crc16_iclass(uint8_t const *d, size_t n) {
|
||||
uint16_t crc = crc16(d, n, 0xffff, CRC16_POLY_CCITT, true, true);
|
||||
crc ^= 0x0BC3;
|
||||
return crc;
|
||||
}
|
||||
|
||||
|
||||
// CHECK functions.
|
||||
bool check_crc16_ccitt(uint8_t const *d, size_t n) {
|
||||
if (n < 3) return false;
|
||||
|
||||
uint16_t crc = crc16_ccitt(d, n - 2);
|
||||
|
|
|
@ -17,17 +17,18 @@
|
|||
|
||||
uint16_t update_crc16_ex( uint16_t crc, uint8_t c, uint16_t polynomial );
|
||||
uint16_t update_crc16(uint16_t crc, uint8_t c);
|
||||
uint16_t crc16(uint8_t const *message, int length, uint16_t remainder, uint16_t polynomial, bool refin, bool refout);
|
||||
uint16_t crc16_ccitt(uint8_t const *message, int length);
|
||||
uint16_t crc16(uint8_t const *message, size_t length, uint16_t remainder, uint16_t polynomial, bool refin, bool refout);
|
||||
|
||||
uint16_t crc16_ccitt_kermit(uint8_t const *message, int length);
|
||||
uint16_t crc16_kermit(uint8_t const *message, int length);
|
||||
uint16_t crc16_xmodem(uint8_t const *d, int n);
|
||||
uint16_t crc16_ccitt(uint8_t const *d, size_t n);
|
||||
uint16_t crc16_ccitt_kermit(uint8_t const *d, size_t n);
|
||||
uint16_t crc16_kermit(uint8_t const *d, size_t n);
|
||||
uint16_t crc16_xmodem(uint8_t const *d, size_t n);
|
||||
uint16_t crc16_x25(uint8_t const *d, size_t n);
|
||||
uint16_t crc16_a(uint8_t const *d, size_t n);
|
||||
uint16_t crc16_iclass(uint8_t const *d, size_t size);
|
||||
|
||||
uint16_t crc16_x25(uint8_t const *d, int n);
|
||||
uint16_t crc16_a(uint8_t const *d, int n);
|
||||
|
||||
bool check_crc16_ccitt(uint8_t const *d, int n);
|
||||
//checks
|
||||
bool check_crc16_ccitt(uint8_t const *d, size_t n);
|
||||
|
||||
//felica imp
|
||||
void felica_test();
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue