+ uint8_t* resp = (((uint8_t *)BigBuf) + RECV_RESP_OFFSET);
+
+ setupIclassReader();
+
+
+ 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;
+
+ //for now replay captured auth (as cc not updated)
+ memcpy(check+5,MAC,4);
+
+ if(sendCmdGetResponseWithRetries(check, sizeof(check),resp, 4, 5))
+ {
+ Dbprintf("Error: Authentication Fail!");
+ continue;
+ }
+
+ //first get configuration block (block 1)
+ crc = block_crc_LUT[1];
+ read[1]=1;
+ read[2] = crc >> 8;
+ read[3] = crc & 0xff;
+
+ if(sendCmdGetResponseWithRetries(read, sizeof(read),resp, 10, 10))
+ {
+ Dbprintf("Dump config (block 1) failed");
+ continue;
+ }
+
+ mem=resp[5];
+ memory.k16= (mem & 0x80);
+ memory.book= (mem & 0x20);
+ memory.k2= (mem & 0x8);
+ memory.lockauth= (mem & 0x2);
+ memory.keyaccess= (mem & 0x1);
+
+ cardsize = memory.k16 ? 255 : 32;
+ WDT_HIT();
+
+ //then loop around remaining blocks
+ for(int block=0; block < cardsize; block++){
+
+ read[1]= block;
+ crc = block_crc_LUT[block];
+ read[2] = crc >> 8;
+ read[3] = crc & 0xff;
+
+ if(!sendCmdGetResponseWithRetries(read, sizeof(read), resp, 10, 10))
+ {
+ Dbprintf(" %02x: %02x %02x %02x %02x %02x %02x %02x %02x",
+ block, resp[0], resp[1], resp[2],
+ resp[3], resp[4], resp[5],
+ resp[6], resp[7]);
+
+ }else{
+ Dbprintf("Failed to dump block %d", block);
+
+ }
+ }
+ //If we got here, let's break
+ break;
+ }
+ LED_A_OFF();
+}
+
+//2. Create Read method (cut-down from above) based off responses from 1.
+// Since we have the MAC could continue to use replay function.
+//3. Create Write method
+/*
+void IClass_iso14443A_write(uint8_t arg0, uint8_t blockNo, uint8_t *data, uint8_t *MAC) {
+ uint8_t act_all[] = { 0x0a };
+ uint8_t identify[] = { 0x0c };
+ uint8_t select[] = { 0x81, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
+ uint8_t readcheck_cc[]= { 0x88, 0x02 };
+ uint8_t check[] = { 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
+ uint8_t read[] = { 0x0c, 0x00, 0x00, 0x00 };
+ uint8_t write[] = { 0x87, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
+
+ uint16_t crc = 0;
+
+ uint8_t* resp = (((uint8_t *)BigBuf) + 3560);