27 #ifndef __DESFIRE_PICC_HDRLAYOUT_H__ 28 #define __DESFIRE_PICC_HDRLAYOUT_H__ 30 #include "DESFireFirmwareSettings.h" 31 #include "DESFireISO14443Support.h" 33 #define DESFIRE_PICC_APP_SLOT 0x00 34 #define DESFIRE_MASTER_KEY_ID 0x00 36 #define DESFIRE_NATIVE_CLA 0x90 37 #define DESFIRE_ISO7816_CLA 0x00 40 #define DESFIRE_EEPROM_BLOCK_SIZE 16 //32 41 #define DESFIRE_BYTES_TO_BLOCKS(x) \ 42 ( ((x) + DESFIRE_EEPROM_BLOCK_SIZE - 1) / DESFIRE_EEPROM_BLOCK_SIZE ) 44 #define DESFIRE_UID_SIZE ISO14443A_UID_SIZE_DOUBLE 46 #define DESFIRE_MAX_PAYLOAD_SIZE 55 // 64 53 #define ATQA_VALUE 0x0344 54 #define SAK_CL1_VALUE (ISO14443A_SAK_INCOMPLETE) 55 #define SAK_CL2_VALUE (ISO14443A_SAK_COMPLETE_COMPLIANT) 56 #define SAK_UID_NOT_FINISHED 0x04 58 #define STATUS_FRAME_SIZE (1 * 8) 60 #define DESFIRE_EV0_ATS_TL_BYTE 0x06 61 #define DESFIRE_EV0_ATS_T0_BYTE 0x75 62 #define DESFIRE_EV0_ATS_TA_BYTE 0x00 63 #define DESFIRE_EV0_ATS_TB_BYTE 0x81 64 #define DESFIRE_EV0_ATS_TC_BYTE 0x02 66 #define GET_LE16(p) (*((uint16_t*)&(p)[0])) 67 #define GET_LE24(p) (*((__uint24*)&(p)[0])) 68 #define GET_LE32(p) (*((uint32_t*)&(p)[0])) 71 #define ID_PHILIPS_NXP 0x04 72 #define DESFIRE_MANUFACTURER_ID ID_PHILIPS_NXP 75 #define DESFIRE_TYPE 0x01 76 #define DESFIRE_SUBTYPE 0x01 77 #define DESFIRE_HW_PROTOCOL_TYPE 0x05 78 #define DESFIRE_SW_PROTOCOL_TYPE 0x05 82 #define DESFIRE_HW_MAJOR_EV0 0x00 83 #define DESFIRE_HW_MINOR_EV0 0x01 84 #define DESFIRE_SW_MAJOR_EV0 0x00 85 #define DESFIRE_SW_MINOR_EV0 0x01 87 #define IsPiccEV0(picc) \ 88 (picc.HwVersionMajor == DESFIRE_HW_MAJOR_EV0 && picc.SwVersionMajor == DESFIRE_SW_MAJOR_EV0) 91 #define DESFIRE_HW_MAJOR_EV1 0x01 92 #define DESFIRE_HW_MINOR_EV1 0x01 93 #define DESFIRE_SW_MAJOR_EV1 0x01 94 #define DESFIRE_SW_MINOR_EV1 0x01 97 #define DESFIRE_HW_MAJOR_EV2 0x12 98 #define DESFIRE_HW_MINOR_EV2 0x01 99 #define DESFIRE_SW_MAJOR_EV2 0x12 100 #define DESFIRE_SW_MINOR_EV2 0x01 140 #define DESFIRE_STORAGE_SIZE_2K 0x16 141 #define DESFIRE_STORAGE_SIZE_4K 0x18 142 #define DESFIRE_STORAGE_SIZE_8K 0x1A 148 #define PICC_FORMAT_BYTE (0xff) 149 #define PICC_EMPTY_BYTE (0x00) 151 typedef struct DESFIRE_FIRMWARE_PACKING {
158 uint8_t Uid[DESFIRE_UID_SIZE] DESFIRE_FIRMWARE_ALIGNAT;
160 uint8_t HwVersionMajor;
161 uint8_t HwVersionMinor;
162 uint8_t SwVersionMajor;
163 uint8_t SwVersionMinor;
164 uint8_t BatchNumber[5] DESFIRE_FIRMWARE_ALIGNAT;
165 uint8_t ProductionWeek;
166 uint8_t ProductionYear;
169 uint16_t FirstFreeBlock;
170 uint8_t TransactionStarted;
171 uint8_t Spare[9] DESFIRE_FIRMWARE_ALIGNAT;
172 } DESFirePICCInfoType;
174 typedef struct DESFIRE_FIRMWARE_PACKING {
179 BYTE CryptoCommStandard;
181 SIZET FileNumbersArrayMap;
182 SIZET FileCommSettings;
183 SIZET FileAccessRights;
185 SIZET KeyVersionsArray;
189 } SelectedAppCacheType;
191 extern BYTE SELECTED_APP_CACHE_TYPE_BLOCK_SIZE;
192 extern BYTE APP_CACHE_KEY_SETTINGS_ARRAY_BLOCK_SIZE;
193 extern BYTE APP_CACHE_FILE_NUMBERS_HASHMAP_BLOCK_SIZE;
194 extern BYTE APP_CACHE_FILE_COMM_SETTINGS_ARRAY_BLOCK_SIZE;
195 extern BYTE APP_CACHE_FILE_ACCESS_RIGHTS_ARRAY_BLOCK_SIZE;
196 extern BYTE APP_CACHE_KEY_VERSIONS_ARRAY_BLOCK_SIZE;
197 extern BYTE APP_CACHE_KEY_TYPES_ARRAY_BLOCK_SIZE;
198 extern BYTE APP_CACHE_KEY_BLOCKIDS_ARRAY_BLOCK_SIZE;
199 extern BYTE APP_CACHE_FILE_BLOCKIDS_ARRAY_BLOCK_SIZE;
200 extern BYTE APP_CACHE_MAX_KEY_BLOCK_SIZE;
202 extern SIZET DESFIRE_PICC_INFO_BLOCK_ID;
203 extern SIZET DESFIRE_APP_DIR_BLOCK_ID;
204 extern SIZET DESFIRE_APP_CACHE_DATA_ARRAY_BLOCK_ID;
205 extern SIZET DESFIRE_INITIAL_FIRST_FREE_BLOCK_ID;
206 extern SIZET DESFIRE_FIRST_FREE_BLOCK_ID;
207 extern SIZET CardCapacityBlocks;
209 typedef enum DESFIRE_FIRMWARE_ENUM_PACKING {
211 DESFIRE_APP_KEY_COUNT,
212 DESFIRE_APP_MAX_KEY_COUNT,
214 DESFIRE_APP_FILE_COUNT,
216 DESFIRE_APP_CRYPTO_COMM_STANDARD,
218 DESFIRE_APP_KEY_SETTINGS_BLOCK_ID,
220 DESFIRE_APP_FILE_NUMBER_ARRAY_MAP_BLOCK_ID,
222 DESFIRE_APP_FILE_COMM_SETTINGS_BLOCK_ID,
224 DESFIRE_APP_FILE_ACCESS_RIGHTS_BLOCK_ID,
226 DESFIRE_APP_KEY_VERSIONS_ARRAY_BLOCK_ID,
228 DESFIRE_APP_KEY_TYPES_ARRAY_BLOCK_ID,
230 DESFIRE_APP_FILES_PTR_BLOCK_ID,
232 DESFIRE_APP_KEYS_PTR_BLOCK_ID,
235 SIZET PrettyPrintPICCHeaderData(BYTE *outputBuffer, SIZET maxLength, BYTE verbose);
236 SIZET PrettyPrintFileContentsData(BYTE *outputBuffer, SIZET maxLength, BYTE fileNumber);
237 SIZET PrettyPrintPICCFile(SelectedAppCacheType *appData, uint8_t fileIndex,
238 BYTE *outputBuffer, SIZET maxLength, BYTE verbose);
239 SIZET PrettyPrintPICCFilesFull(SelectedAppCacheType *appData, BYTE *outputBuffer, SIZET maxLength, BYTE verbose);
240 SIZET PrettyPrintPICCKey(SelectedAppCacheType *appData, uint8_t keyIndex,
241 BYTE *outputBuffer, SIZET maxLength, BYTE verbose);
242 SIZET PrettyPrintPICCKeysFull(SelectedAppCacheType *appData, BYTE *outputBuffer, SIZET maxLength, BYTE verbose);
243 SIZET PrettyPrintPICCAppDir(uint8_t appIndex,
244 BYTE *outputBuffer, SIZET maxLength, BYTE verbose);
245 SIZET PrettyPrintPICCAppDirsFull(BYTE *outputBuffer, SIZET maxLength, BYTE verbose);
246 SIZET PrettyPrintPICCImageData(BYTE *outputBuffer, SIZET maxLength, BYTE verbose);