]>
Commit | Line | Data |
---|---|---|
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 void mfpSetVerboseMode(bool verbose); | |
47 | extern const char *mfpGetErrorDescription(uint8_t errorCode); | |
48 | ||
49 | extern int CalculateMAC(mf4Session *session, MACType_t mtype, uint8_t blockNum, uint8_t blockCount, uint8_t *data, int datalen, uint8_t *mac, bool verbose); | |
50 | extern int MifareAuth4(mf4Session *session, uint8_t *keyn, uint8_t *key, bool activateField, bool leaveSignalON, bool verbose); | |
51 | ||
52 | extern int MFPWritePerso(uint8_t *keyNum, uint8_t *key, bool activateField, bool leaveSignalON, uint8_t *dataout, int maxdataoutlen, int *dataoutlen); | |
53 | extern int MFPCommitPerso(bool activateField, bool leaveSignalON, uint8_t *dataout, int maxdataoutlen, int *dataoutlen); | |
54 | extern int MFPReadBlock(mf4Session *session, bool plain, uint8_t blockNum, uint8_t blockCount, bool activateField, bool leaveSignalON, uint8_t *dataout, int maxdataoutlen, int *dataoutlen, uint8_t *mac); | |
55 | extern int MFPWriteBlock(mf4Session *session, uint8_t blockNum, uint8_t *data, bool activateField, bool leaveSignalON, uint8_t *dataout, int maxdataoutlen, int *dataoutlen, uint8_t *mac); | |
56 | extern int mfpReadSector(uint8_t sectorNo, uint8_t keyType, uint8_t *key, uint8_t *dataout, bool verbose); | |
57 | ||
58 | extern char *mfGetAccessConditionsDesc(uint8_t blockn, uint8_t *data); | |
59 | ||
60 | extern uint8_t mfNumBlocksPerSector(uint8_t sectorNo); | |
61 | extern uint8_t mfFirstBlockOfSector(uint8_t sectorNo); | |
62 | extern uint8_t mfSectorTrailer(uint8_t blockNo); | |
63 | extern bool mfIsSectorTrailer(uint8_t blockNo); | |
64 | extern uint8_t mfSectorNum(uint8_t blockNo); | |
65 | ||
66 | ||
67 | #endif // mifare4.h |