mirror of
https://github.com/DarkFlippers/unleashed-firmware.git
synced 2024-12-26 23:05:05 +03:00
1a40fae003
* mf desfire: remove unused type * mf desfire: continue reading after failed get free mem cmd * mf desfire: fix processing read master key settings command * mf desfire: don't read applications if they are auth protected * mf desfire: handle multiple rights * mf desfire: fix PVS warnings * mf desfire: fix print format * mf desfire: fix logs * mf classic: add send frame functions to poller * unit tests: add test from mfc crypto frame exchange * mf classic: add documentation * mf classic: fix incorrect name * target: fix api version
187 lines
6.5 KiB
C
187 lines
6.5 KiB
C
#pragma once
|
|
|
|
#include "mf_desfire.h"
|
|
|
|
#define MF_DESFIRE_FFF_PICC_PREFIX "PICC"
|
|
#define MF_DESFIRE_FFF_APP_PREFIX "Application"
|
|
|
|
// Successful operation
|
|
#define MF_DESFIRE_STATUS_OPERATION_OK (0x00)
|
|
// No changes done to backup files, CommitTransaction / AbortTransaction not necessary
|
|
#define MF_DESFIRE_STATUS_NO_CHANGES (0x0C)
|
|
// Insufficient NV-Memory to complete command
|
|
#define MF_DESFIRE_STATUS_OUT_OF_EEPROM_ERROR (0x0E)
|
|
// Command code not supported
|
|
#define MF_DESFIRE_STATUS_ILLEGAL_COMMAND_CODE (0x1C)
|
|
// CRC or MAC does not match data Padding bytes not valid
|
|
#define MF_DESFIRE_STATUS_INTEGRITY_ERROR (0x1E)
|
|
// Invalid key number specified
|
|
#define MF_DESFIRE_STATUS_NO_SUCH_KEY (0x40)
|
|
// Length of command string invalid
|
|
#define MF_DESFIRE_STATUS_LENGTH_ERROR (0x7E)
|
|
// Current configuration / status does not allow the requested command
|
|
#define MF_DESFIRE_STATUS_PERMISSION_DENIED (0x9D)
|
|
// Value of the parameter(s) invalid
|
|
#define MF_DESFIRE_STATUS_PARAMETER_ERROR (0x9E)
|
|
// Requested AID not present on PICC
|
|
#define MF_DESFIRE_STATUS_APPLICATION_NOT_FOUND (0xA0)
|
|
// Unrecoverable error within application, application will be disabled
|
|
#define MF_DESFIRE_STATUS_APPL_INTEGRITY_ERROR (0xA1)
|
|
// Current authentication status does not allow the requested command
|
|
#define MF_DESFIRE_STATUS_AUTHENTICATION_ERROR (0xAE)
|
|
// Additional data frame is expected to be sent
|
|
#define MF_DESFIRE_STATUS_ADDITIONAL_FRAME (0xAF)
|
|
// Attempt to read/write data from/to beyond the file's/record's limits
|
|
// Attempt to exceed the limits of a value file.
|
|
#define MF_DESFIRE_STATUS_BOUNDARY_ERROR (0xBE)
|
|
// Unrecoverable error within PICC, PICC will be disabled
|
|
#define MF_DESFIRE_STATUS_PICC_INTEGRITY_ERROR (0xC1)
|
|
// Previous Command was not fully completed. Not all Frames were requested or provided by the PCD
|
|
#define MF_DESFIRE_STATUS_COMMAND_ABORTED (0xCA)
|
|
// PICC was disabled by an unrecoverable error
|
|
#define MF_DESFIRE_STATUS_PICC_DISABLED_ERROR (0xCD)
|
|
// Number of Applications limited to 28, no additional CreateApplication possible
|
|
#define MF_DESFIRE_STATUS_COUNT_ERROR (0xCE)
|
|
// Creation of file/application failed because file/application with same number already exists
|
|
#define MF_DESFIRE_STATUS_DUBLICATE_ERROR (0xDE)
|
|
// Could not complete NV-write operation due to loss of power, internal backup/rollback mechanism activated
|
|
#define MF_DESFIRE_STATUS_EEPROM_ERROR (0xEE)
|
|
// Specified file number does not exist
|
|
#define MF_DESFIRE_STATUS_FILE_NOT_FOUND (0xF0)
|
|
// Unrecoverable error within file, file will be disabled
|
|
#define MF_DESFIRE_STATUS_FILE_INTEGRITY_ERROR (0xF1)
|
|
|
|
// SimpleArray configurations
|
|
|
|
extern const SimpleArrayConfig mf_desfire_key_version_array_config;
|
|
extern const SimpleArrayConfig mf_desfire_app_id_array_config;
|
|
extern const SimpleArrayConfig mf_desfire_file_id_array_config;
|
|
extern const SimpleArrayConfig mf_desfire_file_settings_array_config;
|
|
extern const SimpleArrayConfig mf_desfire_file_data_array_config;
|
|
extern const SimpleArrayConfig mf_desfire_application_array_config;
|
|
|
|
// Parse internal MfDesfire structures
|
|
|
|
bool mf_desfire_version_parse(MfDesfireVersion* data, const BitBuffer* buf);
|
|
|
|
bool mf_desfire_free_memory_parse(MfDesfireFreeMemory* data, const BitBuffer* buf);
|
|
|
|
bool mf_desfire_key_settings_parse(MfDesfireKeySettings* data, const BitBuffer* buf);
|
|
|
|
bool mf_desfire_key_version_parse(MfDesfireKeyVersion* data, const BitBuffer* buf);
|
|
|
|
bool mf_desfire_application_id_parse(
|
|
MfDesfireApplicationId* data,
|
|
uint32_t index,
|
|
const BitBuffer* buf);
|
|
|
|
bool mf_desfire_file_id_parse(MfDesfireFileId* data, uint32_t index, const BitBuffer* buf);
|
|
|
|
bool mf_desfire_file_settings_parse(MfDesfireFileSettings* data, const BitBuffer* buf);
|
|
|
|
bool mf_desfire_file_data_parse(MfDesfireFileData* data, const BitBuffer* buf);
|
|
|
|
// Init internal MfDesfire structures
|
|
|
|
void mf_desfire_file_data_init(MfDesfireFileData* data);
|
|
|
|
void mf_desfire_application_init(MfDesfireApplication* data);
|
|
|
|
// Reset internal MfDesfire structures
|
|
|
|
void mf_desfire_file_data_reset(MfDesfireFileData* data);
|
|
|
|
void mf_desfire_application_reset(MfDesfireApplication* data);
|
|
|
|
// Copy internal MfDesfire structures
|
|
|
|
void mf_desfire_file_data_copy(MfDesfireFileData* data, const MfDesfireFileData* other);
|
|
|
|
void mf_desfire_application_copy(MfDesfireApplication* data, const MfDesfireApplication* other);
|
|
|
|
// Load internal MfDesfire structures
|
|
|
|
bool mf_desfire_version_load(MfDesfireVersion* data, FlipperFormat* ff);
|
|
|
|
bool mf_desfire_free_memory_load(MfDesfireFreeMemory* data, FlipperFormat* ff);
|
|
|
|
bool mf_desfire_key_settings_load(
|
|
MfDesfireKeySettings* data,
|
|
const char* prefix,
|
|
FlipperFormat* ff);
|
|
|
|
bool mf_desfire_key_version_load(
|
|
MfDesfireKeyVersion* data,
|
|
const char* prefix,
|
|
uint32_t index,
|
|
FlipperFormat* ff);
|
|
|
|
bool mf_desfire_file_count_load(uint32_t* data, const char* prefix, FlipperFormat* ff);
|
|
|
|
bool mf_desfire_file_ids_load(
|
|
MfDesfireFileId* data,
|
|
uint32_t count,
|
|
const char* prefix,
|
|
FlipperFormat* ff);
|
|
|
|
bool mf_desfire_file_settings_load(
|
|
MfDesfireFileSettings* data,
|
|
const char* prefix,
|
|
FlipperFormat* ff);
|
|
|
|
bool mf_desfire_file_data_load(MfDesfireFileData* data, const char* prefix, FlipperFormat* ff);
|
|
|
|
bool mf_desfire_application_count_load(uint32_t* data, FlipperFormat* ff);
|
|
|
|
bool mf_desfire_application_ids_load(
|
|
MfDesfireApplicationId* data,
|
|
uint32_t count,
|
|
FlipperFormat* ff);
|
|
|
|
bool mf_desfire_application_load(MfDesfireApplication* data, const char* prefix, FlipperFormat* ff);
|
|
|
|
// Save internal MFDesfire structures
|
|
|
|
bool mf_desfire_version_save(const MfDesfireVersion* data, FlipperFormat* ff);
|
|
|
|
bool mf_desfire_free_memory_save(const MfDesfireFreeMemory* data, FlipperFormat* ff);
|
|
|
|
bool mf_desfire_key_settings_save(
|
|
const MfDesfireKeySettings* data,
|
|
const char* prefix,
|
|
FlipperFormat* ff);
|
|
|
|
bool mf_desfire_key_version_save(
|
|
const MfDesfireKeyVersion* data,
|
|
const char* prefix,
|
|
uint32_t index,
|
|
FlipperFormat* ff);
|
|
|
|
bool mf_desfire_file_ids_save(
|
|
const MfDesfireFileId* data,
|
|
uint32_t count,
|
|
const char* prefix,
|
|
FlipperFormat* ff);
|
|
|
|
bool mf_desfire_file_settings_save(
|
|
const MfDesfireFileSettings* data,
|
|
const char* prefix,
|
|
FlipperFormat* ff);
|
|
|
|
bool mf_desfire_file_data_save(
|
|
const MfDesfireFileData* data,
|
|
const char* prefix,
|
|
FlipperFormat* ff);
|
|
|
|
bool mf_desfire_application_count_save(const uint32_t* data, FlipperFormat* ff);
|
|
|
|
bool mf_desfire_application_ids_save(
|
|
const MfDesfireApplicationId* data,
|
|
uint32_t count,
|
|
FlipperFormat* ff);
|
|
|
|
bool mf_desfire_application_save(
|
|
const MfDesfireApplication* data,
|
|
const char* prefix,
|
|
FlipperFormat* ff);
|