LibLogicalAccess  2.5.0
An Open Source RFID Library
Loading...
Searching...
No Matches
desfireev1commands.hpp
Go to the documentation of this file.
1
7#ifndef LOGICALACCESS_DESFIREEV1COMMANDS_HPP
8#define LOGICALACCESS_DESFIREEV1COMMANDS_HPP
9
13
14namespace logicalaccess
15{
16#ifndef DFEV1_INS
17#define DFEV1_INS
18
19#define DFEV1_DESFIRE_AID "\xd2\x76\x00\x00\x85\x01\x00"
20
21#define DFEV1_INS_FREE_MEM 0x6E
22#define DFEV1_INS_GET_DF_NAMES 0x6D
23#define DFEV1_INS_GET_CARD_UID 0x51
24#define DFEV1_INS_GET_ISO_FILE_IDS 0x61
25#define DFEV1_INS_SET_CONFIGURATION 0x5C
26
27#define DFEV1_INS_AUTHENTICATE_ISO 0x1A
28#define DFEV1_INS_AUTHENTICATE_AES 0xAA
29
30#define SELECT_FILE_BY_AID 0x04
31#define SELECT_FILE_BY_FID 0x00
32#endif
33
34#define CMD_DESFIRE_EV1 "DESFireEV1"
35
39struct DFName
40{
41 unsigned int AID;
42 unsigned short FID;
43 char DF_Name[64];
44};
45
49typedef enum { FIDS_NO_ISO_FID = 0x00, FIDS_ISO_FID = 0x20 } FidSupport;
50
54typedef enum {
57 DFEV1_CMD_MACV = 0x02
59
63typedef enum {
67 DF_ALG_AES = 0x09
69
70class DESFireEV1Chip;
71
75class LLA_CARDS_DESFIRE_API DESFireEV1Commands : public ICommands
76{
77 public:
78 DESFireEV1Commands() = default;
79
84 virtual void selectApplication(std::shared_ptr<DESFireEV1Location> location);
85
92 virtual void createApplication(std::shared_ptr<DESFireEV1Location> location,
93 DESFireKeySettings settings, unsigned char maxNbKeys);
94
101 virtual void createStdDataFile(std::shared_ptr<DESFireEV1Location> location,
102 const DESFireAccessRights &accessRights,
103 unsigned int fileSize);
104
109 virtual unsigned int getFreeMem() = 0;
110
115 virtual std::vector<DFName> getDFNames() = 0;
116
122 virtual std::vector<unsigned short> getISOFileIDs() = 0;
123
128 virtual void selectApplication(unsigned int aid) = 0;
129
136 virtual void createApplication(unsigned int aid, DESFireKeySettings settings,
137 unsigned char maxNbKeys, DESFireKeyType cryptoMethod,
138 FidSupport fidSupported = FIDS_NO_ISO_FID,
139 unsigned short isoFID = 0x00,
140 ByteVector isoDFName = ByteVector()) = 0;
141
148 virtual void getKeySettings(DESFireKeySettings &settings, unsigned char &maxNbKeys,
149 DESFireKeyType &keyType) = 0;
150
155 virtual ByteVector getCardUID() = 0;
156
164 virtual void createStdDataFile(unsigned char fileno, EncryptionMode comSettings,
165 const DESFireAccessRights &accessRights,
166 unsigned int fileSize,
167 unsigned short isoFID = 0x00) = 0;
168
176 virtual void createBackupFile(unsigned char fileno, EncryptionMode comSettings,
177 const DESFireAccessRights &accessRights,
178 unsigned int fileSize,
179 unsigned short isoFID = 0x00) = 0;
180
189 virtual void createLinearRecordFile(unsigned char fileno, EncryptionMode comSettings,
190 const DESFireAccessRights &accessRights,
191 unsigned int fileSize,
192 unsigned int maxNumberOfRecords,
193 unsigned short isoFID = 0x00) = 0;
194
203 virtual void createCyclicRecordFile(unsigned char fileno, EncryptionMode comSettings,
204 const DESFireAccessRights &accessRights,
205 unsigned int fileSize,
206 unsigned int maxNumberOfRecords,
207 unsigned short isoFID = 0x00) = 0;
208
214 virtual void authenticateISO(unsigned char keyno,
215 DESFireISOAlgorithm algorithm = DF_ALG_2K3DES) = 0;
216
221 virtual void authenticateAES(unsigned char keyno) = 0;
222
232 // virtual size_t readData(int fileno, size_t offset, size_t length, void* data,
233 // EncryptionMode mode) = 0;
234
244 // virtual size_t readRecords(int fileno, size_t offset, size_t length, void* data,
245 // EncryptionMode mode) = 0;
246
255 // virtual bool changeFileSettings(int fileno, EncryptionMode comSettings,
256 // DESFireAccessRights accessRights, bool plain) = 0;
257
263 // virtual bool changeKeySettings(DESFireKeySettings settings) = 0;
264
271 // virtual bool changeKey(unsigned char keyno, std::shared_ptr<DESFireKey> key) = 0;
272
278 // virtual bool getVersion(DESFireCommands::DESFireCardVersion& dataVersion) = 0;
279
284 // virtual std::vector<int> getApplicationIDs() = 0;
285
291 // virtual std::vector<int> getFileIDs() = 0;
292
300 // virtual bool getValue(int fileno, EncryptionMode mode, int& value) = 0;
301
308 virtual void setConfiguration(bool formatCardEnabled, bool randomIdEnabled) = 0;
309
314 virtual void setConfiguration(std::shared_ptr<DESFireKey> defaultKey) = 0;
315
320 virtual void setConfiguration(const ByteVector &ats) = 0;
321
322 virtual std::shared_ptr<ISO7816Commands> getISO7816Commands() const
323 {
324 return std::shared_ptr<ISO7816Commands>();
325 }
326
327 protected:
328 std::shared_ptr<DESFireEV1Chip> getDESFireEV1Chip() const;
329};
330}
331
332#endif /* LOGICALACCESS_DESFIREEV1CARDPROVIDER_HPP */
LLA_CARDS_DESFIRE_API void getDESFireEV1Chip(std::shared_ptr< logicalaccess::Chip > *chip)
Definition: libraryentry.cpp:19
The DESFire EV1 base commands class.
Definition: desfireev1commands.hpp:76
virtual void createStdDataFile(unsigned char fileno, EncryptionMode comSettings, const DESFireAccessRights &accessRights, unsigned int fileSize, unsigned short isoFID=0x00)=0
Create a new data file in the current application.
virtual void authenticateAES(unsigned char keyno)=0
AuthenticateAES command.
virtual ByteVector getCardUID()=0
Get a random card UID.
virtual std::shared_ptr< ISO7816Commands > getISO7816Commands() const
Definition: desfireev1commands.hpp:322
virtual void createLinearRecordFile(unsigned char fileno, EncryptionMode comSettings, const DESFireAccessRights &accessRights, unsigned int fileSize, unsigned int maxNumberOfRecords, unsigned short isoFID=0x00)=0
Create a new linear record file in the current application.
virtual void getKeySettings(DESFireKeySettings &settings, unsigned char &maxNbKeys, DESFireKeyType &keyType)=0
Get key settings on the current application.
virtual void createBackupFile(unsigned char fileno, EncryptionMode comSettings, const DESFireAccessRights &accessRights, unsigned int fileSize, unsigned short isoFID=0x00)=0
Create a new backup file in the current application.
virtual void createCyclicRecordFile(unsigned char fileno, EncryptionMode comSettings, const DESFireAccessRights &accessRights, unsigned int fileSize, unsigned int maxNumberOfRecords, unsigned short isoFID=0x00)=0
Create a new cyclic record file in the current application.
virtual void setConfiguration(bool formatCardEnabled, bool randomIdEnabled)=0
Read data from a specific file.
virtual std::vector< unsigned short > getISOFileIDs()=0
Get the ISO FID of all active files within the currently selected application.
virtual void authenticateISO(unsigned char keyno, DESFireISOAlgorithm algorithm=DF_ALG_2K3DES)=0
AuthenticateISO command.
virtual unsigned int getFreeMem()=0
Get the value of available bytes.
virtual std::vector< DFName > getDFNames()=0
Get the ISO DF-Names of all active application.
virtual void createApplication(unsigned int aid, DESFireKeySettings settings, unsigned char maxNbKeys, DESFireKeyType cryptoMethod, FidSupport fidSupported=FIDS_NO_ISO_FID, unsigned short isoFID=0x00, ByteVector isoDFName=ByteVector())=0
Create a new application.
virtual void setConfiguration(const ByteVector &ats)=0
Set a custom card ATS.
virtual void setConfiguration(std::shared_ptr< DESFireKey > defaultKey)=0
Set the card configuration default key. param defaultKey The new default key.
virtual void selectApplication(unsigned int aid)=0
Select an application.
The base abstract commands class for all card commands.
Definition: icommands.hpp:20
DESFire commands.
ISO7816 commands. See http://www.cardwerk.com/smartcards/smartcard_standard_ISO7816-4....
std::vector< uint8_t > ByteVector
Definition: lla_fwd.hpp:80
Definition: asn1.hpp:9
FidSupport
The FID Support for ISO 7816.
Definition: desfireev1commands.hpp:49
@ FIDS_ISO_FID
Definition: desfireev1commands.hpp:49
@ FIDS_NO_ISO_FID
Definition: desfireev1commands.hpp:49
DESFireEV1TransmissionMode
The DESFire EV1 transmission mode.
Definition: desfireev1commands.hpp:54
@ DFEV1_CMD_MACV
Definition: desfireev1commands.hpp:57
@ DFEV1_CMD_PLAIN
Definition: desfireev1commands.hpp:55
@ DFEV1_CMD_NOMACV
Definition: desfireev1commands.hpp:56
EncryptionMode
The file communication mode (or encryption mode)
Definition: desfirelocation.hpp:18
DESFireKeySettings
The key settings.
Definition: desfirecommands.hpp:69
DESFireISOAlgorithm
The DESFire EV1 algorithm.
Definition: desfireev1commands.hpp:63
@ DF_ALG_3K3DES
Definition: desfireev1commands.hpp:66
@ DF_ALG_AES
Definition: desfireev1commands.hpp:67
@ DF_ALG_2K3DES
Definition: desfireev1commands.hpp:65
@ DF_ALG_BY_CONTEXT
Definition: desfireev1commands.hpp:64
DESFireKeyType
The DESFire key type.
Definition: desfirekey.hpp:33
Access rights on DESFire file.
Definition: desfirecommands.hpp:106
The ISO DFName and FID.
Definition: desfireev1commands.hpp:40
unsigned short FID
Definition: desfireev1commands.hpp:42
char DF_Name[64]
Definition: desfireev1commands.hpp:43
unsigned int AID
Definition: desfireev1commands.hpp:41