mirror of
https://github.com/RfidResearchGroup/proxmark3.git
synced 2025-03-21 04:29:53 +08:00
Moved iclass crc to be based on a lookup table
This commit is contained in:
parent
337818f7ab
commit
39d3ce5dd6
2 changed files with 18 additions and 10 deletions
|
@ -1595,6 +1595,15 @@ void ReaderIClass(uint8_t arg0) {
|
|||
void ReaderIClass_Replay(uint8_t arg0, uint8_t *MAC) {
|
||||
|
||||
uint8_t card_data[24]={0};
|
||||
uint16_t block_crc_LUT[255] = {0};
|
||||
|
||||
{//Generate a lookup table for block crc
|
||||
for(int block = 0; block < 255; block++){
|
||||
char bl = block;
|
||||
block_crc_LUT[block] = iclass_crc16(&bl ,1);
|
||||
}
|
||||
}
|
||||
//Dbprintf("Lookup table: %02x %02x %02x" ,block_crc_LUT[0],block_crc_LUT[1],block_crc_LUT[2]);
|
||||
|
||||
uint8_t check[] = { 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
|
||||
uint8_t read[] = { 0x0c, 0x00, 0x00, 0x00 };
|
||||
|
@ -1618,12 +1627,13 @@ void ReaderIClass_Replay(uint8_t arg0, uint8_t *MAC) {
|
|||
|
||||
while(!BUTTON_PRESS()) {
|
||||
|
||||
WDT_HIT();
|
||||
|
||||
if(traceLen > TRACE_SIZE) {
|
||||
DbpString("Trace full");
|
||||
break;
|
||||
}
|
||||
|
||||
|
||||
uint8_t read_status = handshakeIclassTag(card_data);
|
||||
if(read_status < 2) continue;
|
||||
|
||||
|
@ -1636,16 +1646,15 @@ void ReaderIClass_Replay(uint8_t arg0, uint8_t *MAC) {
|
|||
continue;
|
||||
}
|
||||
|
||||
//first get configuration block
|
||||
//first get configuration block (block 1)
|
||||
crc = block_crc_LUT[1];
|
||||
read[1]=1;
|
||||
uint8_t *blockno=&read[1];
|
||||
crc = iclass_crc16((char *)blockno,1);
|
||||
read[2] = crc >> 8;
|
||||
read[3] = crc & 0xff;
|
||||
|
||||
if(sendCmdGetResponseWithRetries(read, sizeof(read),resp, 10, 10))
|
||||
{
|
||||
Dbprintf("Dump config block failed");
|
||||
Dbprintf("Dump config (block 1) failed");
|
||||
continue;
|
||||
}
|
||||
|
||||
|
@ -1660,10 +1669,10 @@ void ReaderIClass_Replay(uint8_t arg0, uint8_t *MAC) {
|
|||
WDT_HIT();
|
||||
|
||||
//then loop around remaining blocks
|
||||
for(char block=0; block < cardsize; block++){
|
||||
for(int block=0; block < cardsize; block++){
|
||||
|
||||
read[1]= block;
|
||||
crc = iclass_crc16(&block ,1);
|
||||
crc = block_crc_LUT[block];
|
||||
read[2] = crc >> 8;
|
||||
read[3] = crc & 0xff;
|
||||
|
||||
|
@ -1681,7 +1690,6 @@ void ReaderIClass_Replay(uint8_t arg0, uint8_t *MAC) {
|
|||
}
|
||||
//If we got here, let's break
|
||||
break;
|
||||
WDT_HIT();
|
||||
}
|
||||
LED_A_OFF();
|
||||
}
|
||||
|
|
|
@ -66,11 +66,11 @@ char* Iso15693sprintUID(char *target,uint8_t *uid) {
|
|||
return target;
|
||||
}
|
||||
|
||||
unsigned short iclass_crc16(char *data_p, unsigned short length)
|
||||
uint16_t iclass_crc16(char *data_p, unsigned short length)
|
||||
{
|
||||
unsigned char i;
|
||||
unsigned int data;
|
||||
unsigned int crc = 0xffff;
|
||||
uint16_t crc = 0xffff;
|
||||
|
||||
if (length == 0)
|
||||
return (~crc);
|
||||
|
|
Loading…
Add table
Reference in a new issue