-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
- iso14443a_setup(FPGA_HF_ISO14443A_READER_LISTEN);\r
- clear_trace();\r
- set_tracing(TRUE);\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