\r
memcpy(key, datain, 16);\r
\r
- // Dbprintf("KEY: %02x %02x %02x %02x %02x %02x %02x %02x", key[0],key[1],key[2],key[3],key[4],key[5],key[6],key[7] );\r
- // Dbprintf("KEY: %02x %02x %02x %02x %02x %02x %02x %02x", key[8],key[9],key[10],key[11],key[12],key[13],key[14],key[15] );\r
-\r
uint8_t a[8] = {1,1,1,1,1,1,1,1 };\r
uint8_t b[8] = {0x00};\r
uint8_t enc_b[8] = {0x00};\r
uint8_t sectorNo = arg0;\r
int Pages = arg1;\r
int countpages = 0;\r
- byte_t dataout[176] = {0x00};;\r
- uint32_t cuid = 0x00;\r
+ uint8_t dataout[176] = {0x00};;\r
\r
- LED_A_ON(); LED_B_OFF(); LED_C_OFF();\r
+ LEDsoff();\r
+ LED_A_ON(); \r
clear_trace();\r
iso14443a_setup(FPGA_HF_ISO14443A_READER_LISTEN);\r
\r
- int len = iso14443a_select_card(NULL, NULL, &cuid);\r
+ int len = iso14443a_select_card(NULL, NULL, NULL);\r
if (!len) {\r
if (MF_DBGLEVEL >= MF_DBG_ERROR) Dbprintf("Can't select card (RC:%d)",len);\r
OnError(1);\r
}\r
}\r
\r
- len = mifare_ultra_halt();\r
- if (len) {\r
+ if (mifare_ultra_halt()) {\r
if (MF_DBGLEVEL >= MF_DBG_ERROR) Dbprintf("Halt error");\r
OnError(3);\r
return;\r
}\r
\r
- if (MF_DBGLEVEL >= MF_DBG_ALL) Dbprintf("Pages read %d", countpages);\r
+ if (MF_DBGLEVEL >= MF_DBG_EXTENDED) Dbprintf("Pages read %d", countpages);\r
\r
- len = 16*4; //64 bytes\r
+ // Read a UL-C, EV1,\r
+ // if lockbits, \r
+ if (countpages > 16) \r
+ len = Pages*4;\r
+ else\r
+ len = Pages*4;\r
\r
- // Read a UL-C\r
- if (Pages == 44 && countpages > 16) \r
- len = 176;\r
\r
cmd_send(CMD_ACK, 1, 0, 0, dataout, len); \r
FpgaWriteConfWord(FPGA_MAJOR_MODE_OFF);\r
cmd_send(CMD_ACK,isOK,0,0,0,0);\r
}\r
\r
- //\r
+void MifareCollectNonces(uint32_t arg0, uint32_t arg1){\r
+\r
+ BigBuf_free();\r
+\r
+ uint32_t iterations = arg0;\r
+ uint8_t uid[10] = {0x00};\r
+\r
+ uint8_t *response = BigBuf_malloc(MAX_MIFARE_FRAME_SIZE);\r
+ uint8_t *responsePar = BigBuf_malloc(MAX_MIFARE_PARITY_SIZE);\r
+\r
+ uint8_t mf_auth[] = { 0x60,0x00,0xf5,0x7b };\r
+ \r
+ // get memory from BigBuf.\r
+ uint8_t *nonces = BigBuf_malloc(iterations * 4);\r
+\r
+ LED_A_ON();\r
+ LED_B_OFF();\r
+ LED_C_OFF();\r
+\r
+ clear_trace();\r
+ set_tracing(TRUE);\r
+ iso14443a_setup(FPGA_HF_ISO14443A_READER_LISTEN);\r
+ \r
+ for (int i = 0; i < iterations; i++) {\r
+ \r
+ WDT_HIT();\r
+\r
+ // Test if the action was cancelled\r
+ if(BUTTON_PRESS()) break;\r
+ \r
+ // if(mifare_classic_halt(pcs, cuid)) {\r
+ // if (MF_DBGLEVEL >= 1) Dbprintf("Halt error");\r
+ //}\r
+\r
+ if(!iso14443a_select_card(uid, NULL, NULL)) {\r
+ if (MF_DBGLEVEL >= 1) Dbprintf("Can't select card");\r
+ continue;\r
+ };\r
+\r
+ // Transmit MIFARE_CLASSIC_AUTH.\r
+ ReaderTransmit(mf_auth, sizeof(mf_auth), NULL);\r
+\r
+ // Receive the (4 Byte) "random" nonce\r
+ if (!ReaderReceive(response, responsePar)) {\r
+ if (MF_DBGLEVEL >= 1) Dbprintf("Couldn't receive tag nonce");\r
+ continue;\r
+ } \r
+ \r
+ nonces[i*4] = bytes_to_num(response, 4);\r
+ }\r
+ \r
+ int packLen = iterations * 4;\r
+ int packSize = 0;\r
+ int packNum = 0;\r
+ while (packLen > 0) {\r
+ packSize = MIN(USB_CMD_DATA_SIZE, packLen);\r
+ LED_B_ON();\r
+ cmd_send(CMD_ACK, 77, 0, packSize, nonces - packLen, packSize);\r
+ LED_B_OFF();\r
+\r
+ packLen -= packSize;\r
+ packNum++;\r
+ }\r
+\r
+ FpgaWriteConfWord(FPGA_MAJOR_MODE_OFF);\r
+ LEDsoff();\r
+}\r
+\r
+//\r
// DESFIRE\r
//\r
\r