| 1 | //----------------------------------------------------------------------------- |
| 2 | // Copyright (C) 2018 Merlok |
| 3 | // Copyright (C) 2018 drHatson |
| 4 | // |
| 5 | // This code is licensed to you under the terms of the GNU GPL, version 2 or, |
| 6 | // at your option, any later version. See the LICENSE.txt file for the text of |
| 7 | // the license. |
| 8 | //----------------------------------------------------------------------------- |
| 9 | // iso14443-4 mifare commands |
| 10 | //----------------------------------------------------------------------------- |
| 11 | |
| 12 | #ifndef MIFARE4_H |
| 13 | #define MIFARE4_H |
| 14 | |
| 15 | #include <stdint.h> |
| 16 | #include <stdbool.h> |
| 17 | #include <stddef.h> |
| 18 | |
| 19 | typedef struct { |
| 20 | bool Authenticated; |
| 21 | uint8_t Key[16]; |
| 22 | uint16_t KeyNum; |
| 23 | uint8_t RndA[16]; |
| 24 | uint8_t RndB[16]; |
| 25 | uint8_t TI[4]; |
| 26 | uint8_t PICCap2[6]; |
| 27 | uint8_t PCDCap2[6]; |
| 28 | uint8_t Kenc[16]; |
| 29 | uint8_t Kmac[16]; |
| 30 | uint16_t R_Ctr; |
| 31 | uint16_t W_Ctr; |
| 32 | }mf4Session; |
| 33 | |
| 34 | typedef enum { |
| 35 | mtypReadCmd, |
| 36 | mtypReadResp, |
| 37 | mtypWriteCmd, |
| 38 | mtypWriteResp, |
| 39 | } MACType_t; |
| 40 | |
| 41 | typedef struct { |
| 42 | uint8_t cond; |
| 43 | char *description; |
| 44 | } AccessConditions_t; |
| 45 | |
| 46 | extern int CalculateMAC(mf4Session *session, MACType_t mtype, uint8_t blockNum, uint8_t blockCount, uint8_t *data, int datalen, uint8_t *mac, bool verbose); |
| 47 | extern int MifareAuth4(mf4Session *session, uint8_t *keyn, uint8_t *key, bool activateField, bool leaveSignalON, bool verbose); |
| 48 | |
| 49 | extern char *mfGetAccessConditionsDesc(uint8_t blockn, uint8_t *data); |
| 50 | |
| 51 | extern uint8_t mfNumBlocksPerSector(uint8_t sectorNo); |
| 52 | extern uint8_t mfFirstBlockOfSector(uint8_t sectorNo); |
| 53 | extern uint8_t mfSectorTrailer(uint8_t blockNo); |
| 54 | extern bool mfIsSectorTrailer(uint8_t blockNo); |
| 55 | extern uint8_t mfSectorNum(uint8_t blockNo); |
| 56 | |
| 57 | |
| 58 | #endif // mifare4.h |