proxmark3/client/mifare/mifare4.h

75 lines
2.8 KiB
C
Raw Normal View History

2018-10-24 23:18:05 +08:00
//-----------------------------------------------------------------------------
// Copyright (C) 2018 Merlok
2018-11-01 01:39:32 +08:00
// Copyright (C) 2018 drHatson
2018-10-24 23:18:05 +08:00
//
// This code is licensed to you under the terms of the GNU GPL, version 2 or,
// at your option, any later version. See the LICENSE.txt file for the text of
// the license.
//-----------------------------------------------------------------------------
// iso14443-4 mifare commands
//-----------------------------------------------------------------------------
#ifndef MIFARE4_H
#define MIFARE4_H
#include "common.h"
2018-10-24 23:18:05 +08:00
typedef struct {
2019-03-10 06:35:06 +08:00
bool Authenticated;
uint8_t Key[16];
uint16_t KeyNum;
uint8_t RndA[16];
uint8_t RndB[16];
uint8_t TI[4];
uint8_t PICCap2[6];
uint8_t PCDCap2[6];
uint8_t Kenc[16];
uint8_t Kmac[16];
uint16_t R_Ctr;
uint16_t W_Ctr;
2019-12-31 04:11:18 +08:00
} mf4Session_t;
2018-11-01 01:39:32 +08:00
typedef enum {
2019-03-10 06:35:06 +08:00
mtypReadCmd,
mtypReadResp,
mtypWriteCmd,
mtypWriteResp,
2018-11-01 01:39:32 +08:00
} MACType_t;
2018-10-24 23:18:05 +08:00
2018-11-29 22:05:57 +08:00
typedef struct {
2019-03-10 06:35:06 +08:00
uint8_t cond;
const char *description;
2018-11-29 22:05:57 +08:00
} AccessConditions_t;
2020-01-06 05:55:10 +08:00
typedef struct {
uint8_t Code;
const char *Description;
} PlusErrorsElm_t;
2019-04-06 06:52:55 +08:00
void mfpSetVerboseMode(bool verbose);
const char *mfpGetErrorDescription(uint8_t errorCode);
2019-12-31 04:11:18 +08:00
int CalculateMAC(mf4Session_t *session, MACType_t mtype, uint8_t blockNum, uint8_t blockCount, uint8_t *data, int datalen, uint8_t *mac, bool verbose);
int MifareAuth4(mf4Session_t *session, uint8_t *keyn, uint8_t *key, bool activateField, bool leaveSignalON, bool dropFieldIfError, bool verbose, bool silentMode);
2018-10-24 23:18:05 +08:00
2019-04-06 06:52:55 +08:00
int MFPWritePerso(uint8_t *keyNum, uint8_t *key, bool activateField, bool leaveSignalON, uint8_t *dataout, int maxdataoutlen, int *dataoutlen);
int MFPCommitPerso(bool activateField, bool leaveSignalON, uint8_t *dataout, int maxdataoutlen, int *dataoutlen);
2019-12-31 04:11:18 +08:00
int MFPReadBlock(mf4Session_t *session, bool plain, uint8_t blockNum, uint8_t blockCount, bool activateField, bool leaveSignalON, uint8_t *dataout, int maxdataoutlen, int *dataoutlen, uint8_t *mac);
int MFPWriteBlock(mf4Session_t *session, uint8_t blockNum, uint8_t *data, bool activateField, bool leaveSignalON, uint8_t *dataout, int maxdataoutlen, int *dataoutlen, uint8_t *mac);
2019-04-06 06:52:55 +08:00
int mfpReadSector(uint8_t sectorNo, uint8_t keyType, uint8_t *key, uint8_t *dataout, bool verbose);
2019-03-02 01:05:51 +08:00
int MFPGetSignature(bool activateField, bool leaveSignalON, uint8_t *dataout, int maxdataoutlen, int *dataoutlen);
int MFPGetVersion(bool activateField, bool leaveSignalON, uint8_t *dataout, int maxdataoutlen, int *dataoutlen);
const char *mfGetAccessConditionsDesc(uint8_t blockn, uint8_t *data);
2018-11-29 22:05:57 +08:00
2019-04-06 06:52:55 +08:00
uint8_t mfNumBlocksPerSector(uint8_t sectorNo);
uint8_t mfFirstBlockOfSector(uint8_t sectorNo);
uint8_t mfSectorTrailer(uint8_t blockNo);
bool mfIsSectorTrailer(uint8_t blockNo);
uint8_t mfSectorNum(uint8_t blockNo);
2018-10-24 23:18:05 +08:00
#endif // mifare4.h