//-----------------------------------------------------------------------------\r
// code for work with mifare cards.\r
//-----------------------------------------------------------------------------\r
+#include "crapto1.h"\r
\r
#ifndef __MIFAREUTIL_H\r
#define __MIFAREUTIL_H\r
#define AUTH_FIRST 0 \r
#define AUTH_NESTED 2\r
\r
-// mifare 4bit card answers\r
-#define CARD_ACK 0x0A // 1010 - ACK\r
-#define CARD_NACK_NA 0x04 // 0100 - NACK, not allowed (command not allowed)\r
-#define CARD_NACK_TR 0x05 // 0101 - NACK, transmission error\r
-\r
// reader voltage field detector\r
#define MF_MINFIELDV 4000\r
\r
#define MFEMUL_IDLE 1\r
#define MFEMUL_SELECT1 2\r
#define MFEMUL_SELECT2 3\r
-#define MFEMUL_AUTH1 4\r
-#define MFEMUL_AUTH2 5\r
-#define MFEMUL_WORK 6\r
-#define MFEMUL_WRITEBL2 7\r
-#define MFEMUL_INTREG_INC 8\r
-#define MFEMUL_INTREG_DEC 9\r
-#define MFEMUL_INTREG_REST 10\r
-#define MFEMUL_HALTED 11\r
+#define MFEMUL_SELECT3 4\r
+#define MFEMUL_AUTH1 5\r
+#define MFEMUL_AUTH2 6\r
+#define MFEMUL_WORK 7\r
+#define MFEMUL_WRITEBL2 8\r
+#define MFEMUL_INTREG_INC 9\r
+#define MFEMUL_INTREG_DEC 10\r
+#define MFEMUL_INTREG_REST 11\r
+#define MFEMUL_HALTED 12\r
\r
#define cardSTATE_TO_IDLE() cardSTATE = MFEMUL_IDLE; LED_B_OFF(); LED_C_OFF();\r
\r
int mifare_classic_authex(struct Crypto1State *pcs, uint32_t uid, uint8_t blockNo, uint8_t keyType, uint64_t ui64Key, uint8_t isNested, uint32_t * ntptr, uint32_t *timing);
int mifare_classic_readblock(struct Crypto1State *pcs, uint32_t uid, uint8_t blockNo, uint8_t *blockData);\r
int mifare_classic_halt(struct Crypto1State *pcs, uint32_t uid); \r
+int mifare_classic_halt_ex(struct Crypto1State *pcs);\r
int mifare_classic_writeblock(struct Crypto1State *pcs, uint32_t uid, uint8_t blockNo, uint8_t *blockData);\r
\r
// Ultralight/NTAG...\r
// emulator functions\r
void emlClearMem(void);\r
void emlSetMem(uint8_t *data, int blockNum, int blocksCount);\r
+void emlSetMem_xt(uint8_t *data, int blockNum, int blocksCount, int blockBtWidth);\r
void emlGetMem(uint8_t *data, int blockNum, int blocksCount);\r
void emlGetMemBt(uint8_t *data, int bytePtr, int byteCount);\r
uint64_t emlGetKey(int sectorNum, int keyType);\r