]>
Commit | Line | Data |
---|---|---|
ae3340a0 OM |
1 | //----------------------------------------------------------------------------- |
2 | // Copyright (C) 2018 Merlok | |
4b5d696c | 3 | // Copyright (C) 2018 drHatson |
ae3340a0 OM |
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; | |
c8a0f550 | 21 | uint8_t Key[16]; |
ae3340a0 | 22 | uint16_t KeyNum; |
4b5d696c | 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; | |
ae3340a0 OM |
32 | }mf4Session; |
33 | ||
4b5d696c | 34 | typedef enum { |
35 | mtypReadCmd, | |
36 | mtypReadResp, | |
37 | mtypWriteCmd, | |
38 | mtypWriteResp, | |
39 | } MACType_t; | |
40 | ||
ac4ecfe3 OM |
41 | typedef struct { |
42 | uint8_t cond; | |
43 | char *description; | |
44 | } AccessConditions_t; | |
45 | ||
fdd9395d OM |
46 | extern void mfpSetVerboseMode(bool verbose); |
47 | extern const char *mfpGetErrorDescription(uint8_t errorCode); | |
48 | ||
4b5d696c | 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); |
ae3340a0 OM |
50 | extern int MifareAuth4(mf4Session *session, uint8_t *keyn, uint8_t *key, bool activateField, bool leaveSignalON, bool verbose); |
51 | ||
fdd9395d OM |
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 | ||
ac4ecfe3 OM |
58 | extern char *mfGetAccessConditionsDesc(uint8_t blockn, uint8_t *data); |
59 | ||
c8a0f550 OM |
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); | |
ae3340a0 OM |
65 | |
66 | ||
67 | #endif // mifare4.h |