Merge pull request #2616 from jmichelp/fix14b
[RRG-proxmark3.git] / armsrc / mifarecmd.h
blob8f19528c230dad8a77b028072a38e1af573b1ba9
1 //-----------------------------------------------------------------------------
2 // Copyright (C) Gerhard de Koning Gans - May 2008
3 // Copyright (C) Proxmark3 contributors. See AUTHORS.md for details.
4 //
5 // This program is free software: you can redistribute it and/or modify
6 // it under the terms of the GNU General Public License as published by
7 // the Free Software Foundation, either version 3 of the License, or
8 // (at your option) any later version.
9 //
10 // This program is distributed in the hope that it will be useful,
11 // but WITHOUT ANY WARRANTY; without even the implied warranty of
12 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 // GNU General Public License for more details.
15 // See LICENSE.txt for the text of the license.
16 //-----------------------------------------------------------------------------
17 #ifndef __MIFARECMD_H
18 #define __MIFARECMD_H
20 #include "common.h"
21 #include "pm3_cmd.h"
23 int16_t mifare_cmd_readblocks(MifareWakeupType wakeup, uint8_t key_auth_cmd, uint8_t *key, uint8_t read_cmd, uint8_t block_no, uint8_t count, uint8_t *block_data);
24 int16_t mifare_cmd_writeblocks(MifareWakeupType wakeup, uint8_t key_auth_cmd, uint8_t *key, uint8_t write_cmd, uint8_t block_no, uint8_t count, uint8_t *block_data);
25 void MifareReadSector(uint8_t sector_no, uint8_t key_type, uint8_t *key);
26 void MifareValue(uint8_t arg0, uint8_t arg1, uint8_t arg2, uint8_t *datain);
28 void MifareUReadBlock(uint8_t arg0, uint8_t arg1, uint8_t *datain);
29 void MifareUC_Auth(uint8_t arg0, uint8_t *keybytes);
30 void MifareUL_AES_Auth(bool turn_off_field, uint8_t keyno, uint8_t *keybytes);
32 void MifareUReadCard(uint8_t arg0, uint16_t arg1, uint8_t arg2, uint8_t *datain);
33 void MifareUWriteBlockCompat(uint8_t arg0, uint8_t arg1, uint8_t *datain);
34 void MifareUWriteBlock(uint8_t arg0, uint8_t arg1, uint8_t *datain);
36 void MifareNested(uint8_t blockNo, uint8_t keyType, uint8_t targetBlockNo, uint8_t targetKeyType, bool calibrate, uint8_t *key);
37 void MifareStaticNested(uint8_t blockNo, uint8_t keyType, uint8_t targetBlockNo, uint8_t targetKeyType, uint8_t *key);
39 void MifareAcquireEncryptedNonces(uint32_t arg0, uint32_t arg1, uint32_t flags, uint8_t *datain);
40 int MifareAcquireStaticEncryptedNonces(uint32_t flags, const uint8_t *key, bool reply);
41 void MifareAcquireNonces(uint32_t arg0, uint32_t flags);
42 void MifareChkKeys(uint8_t *datain, uint8_t reserved_mem);
43 void MifareChkKeys_fast(uint32_t arg0, uint32_t arg1, uint32_t arg2, uint8_t *datain);
44 void MifareChkKeys_file(uint8_t *fn);
46 void MifareEMemClr(void);
47 void MifareEMemGet(uint8_t blockno, uint8_t blockcnt);
48 int MifareECardLoad(uint8_t sectorcnt, uint8_t keytype, uint8_t *key);
49 int MifareECardLoadExt(uint8_t sectorcnt, uint8_t keytype, uint8_t *key);
51 // MFC GEN1a /1b
52 void MifareCSetBlock(uint32_t arg0, uint32_t arg1, uint8_t *datain); // Work with "magic Chinese" card
53 void MifareCGetBlock(uint32_t arg0, uint32_t arg1, uint8_t *datain);
54 void MifareCIdent(bool is_mfc, uint8_t keytype, uint8_t *key); // is "magic chinese" card?
55 void MifareHasStaticNonce(void); // Has the tag a static nonce?
56 void MifareHasStaticEncryptedNonce(uint8_t block_no, uint8_t key_type, uint8_t *key, uint8_t block_no_nested, uint8_t key_type_nested, uint8_t *key_nested, uint8_t nr_nested, bool reset, bool hardreset, bool addread, bool addauth, bool incblk2, bool corruptnrar, bool corruptnrarparity); // Has the tag a static encrypted nonce?
58 // MFC GEN3
59 int DoGen3Cmd(uint8_t *cmd, uint8_t cmd_len);
60 void MifareGen3UID(uint8_t uidlen, uint8_t *uid); // Gen 3 magic card set UID without manufacturer block
61 void MifareGen3Blk(uint8_t block_len, uint8_t *block); // Gen 3 magic card overwrite manufacturer block
62 void MifareGen3Freez(void); // Gen 3 magic card lock further UID changes
64 // MFC GEN4 GTU
65 void MifareG4ReadBlk(uint8_t blockno, uint8_t *pwd, uint8_t workFlags);
66 void MifareG4WriteBlk(uint8_t blockno, uint8_t *pwd, uint8_t *data, uint8_t workFlags);
68 void MifareSetMod(uint8_t *datain);
69 void MifarePersonalizeUID(uint8_t keyType, uint8_t perso_option, uint64_t key);
71 void MifareUSetPwd(uint8_t arg0, uint8_t *datain);
72 void OnSuccessMagic(void);
73 void OnErrorMagic(uint8_t reason);
75 int32_t dist_nt(uint32_t nt1, uint32_t nt2);
76 //void RAMFUNC SniffMifare(uint8_t param);
78 void Mifare_DES_Auth1(uint8_t arg0, uint8_t *datain);
79 void Mifare_DES_Auth2(uint32_t arg0, uint8_t *datain);
81 // Tear-off test for MFU
82 void MifareU_Otp_Tearoff(uint8_t blno, uint32_t tearoff_time, uint8_t *data_testwrite);
83 void MifareU_Counter_Tearoff(uint8_t counter, uint32_t tearoff_time, uint8_t *datain);
84 #endif