//-----------------------------------------------------------------------------\r
// code for work with mifare cards.\r
//-----------------------------------------------------------------------------\r
-#include "crapto1.h"\r
\r
#ifndef __MIFAREUTIL_H\r
#define __MIFAREUTIL_H\r
\r
+#include "crapto1/crapto1.h"\r
+#include "usb_cdc.h"\r
+\r
// mifare authentication\r
#define CRYPT_NONE 0\r
#define CRYPT_ALL 1\r
#define CRYPT_REQUEST 2\r
#define AUTH_FIRST 0 \r
#define AUTH_NESTED 2\r
+#define AUTHENTICATION_TIMEOUT 848 // card times out 1ms after wrong authentication (according to NXP documentation)\r
+#define PRE_AUTHENTICATION_LEADTIME 400 // some (non standard) cards need a pause after select before they are ready for first authentication\r
\r
// mifare 4bit card answers\r
#define CARD_ACK 0x0A // 1010 - ACK\r
int emlSetValBl(uint32_t blReg, uint8_t blBlock, int blockNum);\r
int emlCheckValBl(int blockNum);\r
\r
+// mifare check keys\r
+typedef uint8_t TKeyIndex[2][40];\r
+int MifareChkBlockKey(uint8_t *uid, uint32_t *cuid, uint8_t *cascade_levels, uint64_t ui64Key, uint8_t blockNo, uint8_t keyType, uint8_t debugLevel);\r
+int MifareChkBlockKeys(uint8_t *keys, uint8_t keyCount, uint8_t blockNo, uint8_t keyType, uint8_t debugLevel);\r
+int MifareMultisectorChk(uint8_t *keys, uint8_t keyCount, uint8_t SectorCount, uint8_t keyType, uint8_t debugLevel, TKeyIndex *keyIndex);\r
+\r
#endif\r