textual
[RRG-proxmark3.git] / client / src / mifare / mifare4.h
blob994fb16a5a12873fd75b04e241d070d4de1082af
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 //-----------------------------------------------------------------------------
12 #ifndef MIFARE4_H
13 #define MIFARE4_H
15 #include "common.h"
17 typedef struct {
18 bool Authenticated;
19 uint8_t Key[16];
20 uint16_t KeyNum;
21 uint8_t RndA[16];
22 uint8_t RndB[16];
23 uint8_t TI[4];
24 uint8_t PICCap2[6];
25 uint8_t PCDCap2[6];
26 uint8_t Kenc[16];
27 uint8_t Kmac[16];
28 uint16_t R_Ctr;
29 uint16_t W_Ctr;
30 } mf4Session_t;
32 typedef enum {
33 mtypReadCmd,
34 mtypReadResp,
35 mtypWriteCmd,
36 mtypWriteResp,
37 } MACType_t;
39 typedef struct {
40 uint8_t cond;
41 const char *description;
42 } AccessConditions_t;
45 typedef struct {
46 uint8_t Code;
47 const char *Description;
48 } PlusErrorsElm_t;
50 void mfpSetVerboseMode(bool verbose);
51 const char *mfpGetErrorDescription(uint8_t errorCode);
53 int CalculateMAC(mf4Session_t *mf4session, MACType_t mtype, uint8_t blockNum, uint8_t blockCount, uint8_t *data, int datalen, uint8_t *mac, bool verbose);
54 int MifareAuth4(mf4Session_t *mf4session, uint8_t *keyn, uint8_t *key, bool activateField, bool leaveSignalON, bool dropFieldIfError, bool verbose, bool silentMode);
56 int MFPWritePerso(uint8_t *keyNum, uint8_t *key, bool activateField, bool leaveSignalON, uint8_t *dataout, int maxdataoutlen, int *dataoutlen);
57 int MFPCommitPerso(bool activateField, bool leaveSignalON, uint8_t *dataout, int maxdataoutlen, int *dataoutlen);
58 int MFPReadBlock(mf4Session_t *mf4session, bool plain, uint8_t blockNum, uint8_t blockCount, bool activateField, bool leaveSignalON, uint8_t *dataout, int maxdataoutlen, int *dataoutlen, uint8_t *mac);
59 int MFPWriteBlock(mf4Session_t *mf4session, uint8_t blockNum, uint8_t *data, bool activateField, bool leaveSignalON, uint8_t *dataout, int maxdataoutlen, int *dataoutlen, uint8_t *mac);
60 int mfpReadSector(uint8_t sectorNo, uint8_t keyType, uint8_t *key, uint8_t *dataout, bool verbose);
62 int MFPGetSignature(bool activateField, bool leaveSignalON, uint8_t *dataout, int maxdataoutlen, int *dataoutlen);
63 int MFPGetVersion(bool activateField, bool leaveSignalON, uint8_t *dataout, int maxdataoutlen, int *dataoutlen);
65 const char *mfGetAccessConditionsDesc(uint8_t blockn, uint8_t *data);
67 uint8_t mfNumBlocksPerSector(uint8_t sectorNo);
68 uint8_t mfFirstBlockOfSector(uint8_t sectorNo);
69 uint8_t mfSectorTrailer(uint8_t blockNo);
70 bool mfIsSectorTrailer(uint8_t blockNo);
71 uint8_t mfSectorNum(uint8_t blockNo);
74 #endif // mifare4.h