From f7bbc56db3e581366b1faa01e7972149f104e919 Mon Sep 17 00:00:00 2001 From: developer34 Date: Wed, 28 Aug 2019 09:31:59 +0200 Subject: [PATCH] ESP32 component support added. --- esp32/component.mk | 4 + esp32/include/uFCoder.h | 8747 +++++++++++++++++++ esp32/lib/libufcoder.a | Bin 0 -> 1695348 bytes include/uFCoder.h | 17494 +++++++++++++++++++------------------- 4 files changed, 17498 insertions(+), 8747 deletions(-) create mode 100644 esp32/component.mk create mode 100644 esp32/include/uFCoder.h create mode 100644 esp32/lib/libufcoder.a diff --git a/esp32/component.mk b/esp32/component.mk new file mode 100644 index 0000000..7e1ff9f --- /dev/null +++ b/esp32/component.mk @@ -0,0 +1,4 @@ +COMPONENT_ADD_INCLUDEDIRS := include +CFLAGS := -Wno-pragmas -Wno-unused-variable -Wno-maybe-uninitialized -Wno-implicit-function-declaration -mlongcalls -DDEBUG_PRINT=0 -D_NO_FTDI=1 + +COMPONENT_ADD_LDFLAGS += $(COMPONENT_PATH)/lib/libufcoder.a \ No newline at end of file diff --git a/esp32/include/uFCoder.h b/esp32/include/uFCoder.h new file mode 100644 index 0000000..0d8a4bd --- /dev/null +++ b/esp32/include/uFCoder.h @@ -0,0 +1,8747 @@ +/* + * uFCoder.h + * + * library version: 5.0.14 + * + * Created on: 2009-01-14 + * Last edited: 2019-08-28 + * + * Author: D-Logic + */ + +#ifndef uFCoder_H_ +#define uFCoder_H_ + +#include +#include + +#define IN //array that you pass to function +#define OUT //array that you receive from funciton +#define VAR //first element of array that you receive from function (single variable) + + +//////////////////////////////////////////////////////////////////// +/** + * Type for representing null terminated char array ( aka C-String ) + * Array is always one byte longer ( for null character ) then string + * Memory space for array must be allocated before use. + */ +typedef const char * c_string; +//////////////////////////////////////////////////////////////////// + +#ifdef _WIN32 +// WINDOWS +# if defined(DL_CREATE_STATIC_LIB) || defined(DL_USE_STATIC_LIB) +# define DL_API +# else +# ifndef DL_uFC_EXPORTS +# ifdef _WIN_IOT +# define DL_API __declspec(dllimport) // Win IoT +# else +# define DL_API /*__declspec(dllimport) */ __stdcall // STDCALL - GCC - .NET +# endif // _WIN_IOT +# else +# define DL_API __declspec(dllexport) __stdcall +# endif // DL_uFC_EXPORTS +# endif // DL_CREATE_STATIC_LIB +#else +// Linux & MAC OS +# define DL_API +#endif // _WIN32 + +#if defined(DL_uFC_EXPORTS) || defined(DL_CREATE_STATIC_LIB) || defined(__ANDROID__) || defined(ESP_PLATFORM) + typedef struct S_UFR_HANDLE * UFR_HANDLE; +#else + typedef void * UFR_HANDLE; +#endif + +// MIFARE CLASSIC type id's: +#define MIFARE_CLASSIC_1k 0x08 +#define MF1ICS50 0x08 +#define SLE66R35 0x88 // Infineon = Mifare Classic 1k +#define MIFARE_CLASSIC_4k 0x18 +#define MF1ICS70 0x18 +#define MIFARE_CLASSIC_MINI 0x09 +#define MF1ICS20 0x09 + +//DLOGIC CARD TYPE +#define TAG_UNKNOWN 0 +#define DL_MIFARE_ULTRALIGHT 0x01 +#define DL_MIFARE_ULTRALIGHT_EV1_11 0x02 +#define DL_MIFARE_ULTRALIGHT_EV1_21 0x03 +#define DL_MIFARE_ULTRALIGHT_C 0x04 +#define DL_NTAG_203 0x05 +#define DL_NTAG_210 0x06 +#define DL_NTAG_212 0x07 +#define DL_NTAG_213 0x08 +#define DL_NTAG_215 0x09 +#define DL_NTAG_216 0x0A +#define DL_MIKRON_MIK640D 0x0B +#define NFC_T2T_GENERIC 0x0C +#define DL_NT3H_1101 0x0D +#define DL_NT3H_1201 0x0E +#define DL_NT3H_2111 0x0F +#define DL_NT3H_2211 0x10 + +#define DL_MIFARE_MINI 0x20 +#define DL_MIFARE_CLASSIC_1K 0x21 +#define DL_MIFARE_CLASSIC_4K 0x22 +#define DL_MIFARE_PLUS_S_2K_SL0 0x23 +#define DL_MIFARE_PLUS_S_4K_SL0 0x24 +#define DL_MIFARE_PLUS_X_2K_SL0 0x25 +#define DL_MIFARE_PLUS_X_4K_SL0 0x26 +#define DL_MIFARE_DESFIRE 0x27 +#define DL_MIFARE_DESFIRE_EV1_2K 0x28 +#define DL_MIFARE_DESFIRE_EV1_4K 0x29 +#define DL_MIFARE_DESFIRE_EV1_8K 0x2A +#define DL_MIFARE_DESFIRE_EV2_2K 0x2B +#define DL_MIFARE_DESFIRE_EV2_4K 0x2C +#define DL_MIFARE_DESFIRE_EV2_8K 0x2D +#define DL_MIFARE_PLUS_S_2K_SL1 0x2E +#define DL_MIFARE_PLUS_X_2K_SL1 0x2F +#define DL_MIFARE_PLUS_EV1_2K_SL1 0x30 +#define DL_MIFARE_PLUS_X_2K_SL2 0x31 +#define DL_MIFARE_PLUS_S_2K_SL3 0x32 +#define DL_MIFARE_PLUS_X_2K_SL3 0x33 +#define DL_MIFARE_PLUS_EV1_2K_SL3 0x34 +#define DL_MIFARE_PLUS_S_4K_SL1 0x35 +#define DL_MIFARE_PLUS_X_4K_SL1 0x36 +#define DL_MIFARE_PLUS_EV1_4K_SL1 0x37 +#define DL_MIFARE_PLUS_X_4K_SL2 0x38 +#define DL_MIFARE_PLUS_S_4K_SL3 0x39 +#define DL_MIFARE_PLUS_X_4K_SL3 0x3A +#define DL_MIFARE_PLUS_EV1_4K_SL3 0x3B + +#define DL_UNKNOWN_ISO_14443_4 0x40 +#define DL_GENERIC_ISO14443_4 0x40 +#define DL_GENERIC_ISO14443_4_TYPE_B 0x41 +#define DL_GENERIC_ISO14443_3_TYPE_B 0x42 +#define DL_IMEI_UID 0x80 + +// ST Product ID-s: +#define M24SR02 0x82 +#define M24SR02_AUTOMOTIVE 0x8A +#define M24SR04 0x86 +#define M24SR04_AUTOMOTIVE 0x8E +#define M24SR16 0x85 +#define M24SR16_AUTOMOTIVE 0x8D +#define M24SR64 0x84 +#define M24SR64_AUTOMOTIVE 0x8C + +// DLJavaCardTypes: +#define DLSigner81 0xA0 +#define DLSigner22 0xA1 +#define DLSigner30 0xA2 +#define DLSigner10 0xA3 +#define DLSigner145 0xAA + +// DLJavaCardSignerAlgorithmTypes: +enum E_SIGNER_CIPHERS { + SIG_CIPHER_RSA = 0, + SIG_CIPHER_ECDSA, + + SIG_CIPHER_MAX_SUPPORTED +}; + +enum E_SIGNER_PADDINGS { + PAD_NULL = 0, + PAD_PKCS1, + + SIG_PAD_MAX_SUPPORTED +}; + +enum E_SIGNER_DIGESTS { + ALG_NULL = 0, + ALG_SHA, + ALG_SHA_256, + ALG_SHA_384, + ALG_SHA_512, + ALG_SHA_224, + + SIG_DIGEST_MAX_SUPPORTED +}; + +enum E_KEY_TYPES { + TYPE_RSA_PRIVATE = 0, + TYPE_RSA_CRT_PRIVATE, + TYPE_EC_F2M_PRIVATE, + TYPE_EC_FP_PRIVATE +}; + +enum E_OBJ_TYPES { + OBJ_TYPE_RSA_CERT = 0, + OBJ_TYPE_EC_CERT, + OBJ_TYPE_CA_CERT, + + OBJ_TYPES_COUNT +}; + +// JCDL_AIDs +#define DL_RAW_SIZEOF_SZ(x) (sizeof(x) - 1) +#define DL_AID_RID_PLUS "\xF0" "DLogic" +#define DL_SIGNER_PIX "\x00\x01" +#define DL_STORAGE_PIX "\x01\x01" +#define DL_SIGNER_AID DL_AID_RID_PLUS DL_SIGNER_PIX +#define DL_SIGNER_AID_SIZE 9 +#define DL_STORAGE_AID DL_AID_RID_PLUS DL_STORAGE_PIX +#define DL_STORAGE_AID_SIZE 9 + +// Universal JCDL instructions: +#define INS_LOGIN 0x20 +#define INS_GET_PIN_TRIES_REMAINING 0x21 +#define INS_PIN_CHANGE 0x22 +#define INS_PIN_UNBLOCK 0x23 + +// JCDLStorage instructions: +#define INS_PIN_ENABLE 0x24 +#define INS_PIN_DISABLE 0x25 +#define INS_LIST_FILES 0x31 +#define INS_GET_FILE_SIZE 0x32 +#define INS_READ_FILE 0x33 +#define INS_WRITE_FILE 0x34 +#define INS_DELETE_FILE 0x3F + +// JCDLSigner instructions: +#define INS_SET_RSA_PRIKEY 0x51 +#define INS_GEN_RSA_KEY_PAIR 0x52 +#define INS_GET_RSA_PUBKEY_MODULUS 0x53 +#define INS_GET_RSA_PUBKEY_EXPONENT 0x54 +#define INS_DEL_RSA_KEY_PAIR 0x5F +#define INS_SET_EC_PRIKEY 0x61 +#define INS_GEN_EC_KEY_PAIR 0x62 +#define INS_GET_EC_PUBKEY 0x63 +#define INS_GET_EC_FIELD 0x64 +#define INS_GET_EC_AB 0x65 +#define INS_GET_EC_G 0x66 +#define INS_GET_EC_RK_SIZE 0x67 +#define INS_DEL_EC_KEY_PAIR 0x6F +#define INS_GET_SIGNATURE 0x71 +#define INS_PUT_OBJ 0x31 +#define INS_PUT_OBJ_SUBJECT 0x32 +#define INS_INVALIDATE_CERT 0x33 +#define INS_GET_OBJ 0x41 +#define INS_GET_OBJ_ID 0x42 +#define INS_GET_OBJ_SUBJECT 0x43 + +// Universal JCDL constants: +#define PIN_MAX_TRIES 5 +#define PIN_MIN_LENGTH 4 +#define PIN_MAX_LENGTH 8 +#define PUK_MAX_TRIES 10 +#define PUK_LENGTH 8 + +// JCDLSigner constants: +#define JC_APP_MAX_KEY_INDEX ((3) - 1) +#define JC_APP_MAX_CA_CERT_INDEX ((12) - 1) +#define JC_APP_MAX_ID_SIZE 253 +#define JC_APP_MAX_SUBJECT_SIZE 255 +#define JC_APP_MAX_SIGNATURE_LEN 256 +#define JC_APP_MAX_PIN_LENGTH 8 + +// JCDLStorage constants: +#define JC_DL_STORAGE_MAX_FILES 16 +#define JC_DL_STORAGE_MAX_FILE_SIZE (32 * 1024 - 2) // 32KB - 2 byte system reserved + +// MIFARE CLASSIC Authentication Modes: +enum MIFARE_AUTHENTICATION +{ + MIFARE_AUTHENT1A = 0x60, + MIFARE_AUTHENT1B = 0x61, +}; + +//MIFARE PLUS AES Authentication Modes: +enum MIFARE_PLUS_AES_AUTHENTICATION +{ + MIFARE_PLUS_AES_AUTHENT1A = 0x80, + MIFARE_PLUS_AES_AUTHENT1B = 0x81, +}; + +// T2T authentication constants: +enum T2T_AUTHENTICATION +{ + T2T_NO_PWD_AUTH = 0, + T2T_RKA_PWD_AUTH = 1, + T2T_PK_PWD_AUTH = 3, + T2T_WITHOUT_PWD_AUTH = 0x60, + T2T_WITH_PWD_AUTH = 0x61, +}; + +enum ADDRESS_MODE +{ + ADDRESS_MODE_BLOCK = 0, + ADDRESS_MODE_SECTOR, +}; + +#define MAX_UID_LEN 10 +#define ECC_SIG_LEN 32 + +// API Status Codes Type: +typedef enum UFCODER_ERROR_CODES +{ + UFR_OK = 0x00, + UFR_COMMUNICATION_ERROR = 0x01, + UFR_CHKSUM_ERROR = 0x02, + UFR_READING_ERROR = 0x03, + UFR_WRITING_ERROR = 0x04, + UFR_BUFFER_OVERFLOW = 0x05, + UFR_MAX_ADDRESS_EXCEEDED = 0x06, + UFR_MAX_KEY_INDEX_EXCEEDED = 0x07, + UFR_NO_CARD = 0x08, + UFR_COMMAND_NOT_SUPPORTED = 0x09, + UFR_FORBIDEN_DIRECT_WRITE_IN_SECTOR_TRAILER = 0x0A, + UFR_ADDRESSED_BLOCK_IS_NOT_SECTOR_TRAILER = 0x0B, + UFR_WRONG_ADDRESS_MODE = 0x0C, + UFR_WRONG_ACCESS_BITS_VALUES = 0x0D, + UFR_AUTH_ERROR = 0x0E, + UFR_PARAMETERS_ERROR = 0x0F, // ToDo, point 5. + UFR_MAX_SIZE_EXCEEDED = 0x10, + UFR_UNSUPPORTED_CARD_TYPE = 0x11, + + UFR_COMMUNICATION_BREAK = 0x50, + UFR_NO_MEMORY_ERROR = 0x51, + UFR_CAN_NOT_OPEN_READER = 0x52, + UFR_READER_NOT_SUPPORTED = 0x53, + UFR_READER_OPENING_ERROR = 0x54, + UFR_READER_PORT_NOT_OPENED = 0x55, + UFR_CANT_CLOSE_READER_PORT = 0x56, + + UFR_WRITE_VERIFICATION_ERROR = 0x70, + UFR_BUFFER_SIZE_EXCEEDED = 0x71, + UFR_VALUE_BLOCK_INVALID = 0x72, + UFR_VALUE_BLOCK_ADDR_INVALID = 0x73, + UFR_VALUE_BLOCK_MANIPULATION_ERROR = 0x74, + UFR_WRONG_UI_MODE = 0x75, + UFR_KEYS_LOCKED = 0x76, + UFR_KEYS_UNLOCKED = 0x77, + UFR_WRONG_PASSWORD = 0x78, + UFR_CAN_NOT_LOCK_DEVICE = 0x79, + UFR_CAN_NOT_UNLOCK_DEVICE = 0x7A, + UFR_DEVICE_EEPROM_BUSY = 0x7B, + UFR_RTC_SET_ERROR = 0x7C, + + ANTI_COLLISION_DISABLED = 0x7D, + NO_TAGS_ENUMERRATED = 0x7E, + CARD_ALREADY_SELECTED = 0x7F, + + // NDEF error codes + UFR_WRONG_NDEF_CARD_FORMAT = 0x80, + UFR_NDEF_MESSAGE_NOT_FOUND = 0x81, + UFR_NDEF_UNSUPPORTED_CARD_TYPE = 0x82, + UFR_NDEF_CARD_FORMAT_ERROR = 0x83, + UFR_MAD_NOT_ENABLED = 0x84, + UFR_MAD_VERSION_NOT_SUPPORTED = 0x85, + UFR_NDEF_MESSAGE_NOT_COMPATIBLE = 0x86, + + // Tag emulation mode errors: + FORBIDDEN_IN_TAG_EMULATION_MODE = 0x90, + + // FTDI errors: + UFR_FT_STATUS_ERROR_1 = 0xA0, + UFR_FT_STATUS_ERROR_2 = 0xA1, + UFR_FT_STATUS_ERROR_3 = 0xA2, + UFR_FT_STATUS_ERROR_4 = 0xA3, + UFR_FT_STATUS_ERROR_5 = 0xA4, + UFR_FT_STATUS_ERROR_6 = 0xA5, + UFR_FT_STATUS_ERROR_7 = 0xA6, + UFR_FT_STATUS_ERROR_8 = 0xA7, + UFR_FT_STATUS_ERROR_9 = 0xA8, + + //MIFARE PLUS error codes + UFR_MFP_COMMAND_OVERFLOW = 0xB0, + UFR_MFP_INVALID_MAC = 0xB1, + UFR_MFP_INVALID_BLOCK_NR = 0xB2, + UFR_MFP_NOT_EXIST_BLOCK_NR = 0xB3, + UFR_MFP_COND_OF_USE_ERROR = 0xB4, + UFR_MFP_LENGTH_ERROR = 0xB5, + UFR_MFP_GENERAL_MANIP_ERROR = 0xB6, + UFR_MFP_SWITCH_TO_ISO14443_4_ERROR = 0xB7, + UFR_MFP_ILLEGAL_STATUS_CODE = 0xB8, + UFR_MFP_MULTI_BLOCKS_READ = 0xB9, + + // multiple units - return from the functions with ReaderList_ prefix in name + UFR_DEVICE_WRONG_HANDLE = 0x100, + UFR_DEVICE_INDEX_OUT_OF_BOUND, + UFR_DEVICE_ALREADY_OPENED, + UFR_DEVICE_ALREADY_CLOSED, + UFR_DEVICE_IS_NOT_CONNECTED, + + // Originality Check Error Codes: + UFR_NOT_NXP_GENUINE = 0x200, + UFR_OPEN_SSL_DYNAMIC_LIB_FAILED, + UFR_OPEN_SSL_DYNAMIC_LIB_NOT_FOUND, + + // DESFIRE Card Status Error Codes: + READER_ERROR = 0xBB7, // 2999 [dec] + NO_CARD_DETECTED = 0xBB8, // 3000 [dec] + CARD_OPERATION_OK = 0xBB9, // 3001 [dec] + WRONG_KEY_TYPE = 0xBBA, // 3002 [dec] + KEY_AUTH_ERROR = 0xBBB, // 3003 [dec] + CARD_CRYPTO_ERROR = 0xBBC, // 3004 [dec] + READER_CARD_COMM_ERROR = 0xBBD, // 3005 [dec] + PC_READER_COMM_ERROR = 0xBBE, // 3006 [dec] + COMMIT_TRANSACTION_NO_REPLY = 0xBBF, // 3007 [dec] + COMMIT_TRANSACTION_ERROR = 0xBC0, // 3008 [dec] + + DESFIRE_CARD_NO_CHANGES = 0x0C0C, + DESFIRE_CARD_OUT_OF_EEPROM_ERROR = 0x0C0E, + DESFIRE_CARD_ILLEGAL_COMMAND_CODE = 0x0C1C, + DESFIRE_CARD_INTEGRITY_ERROR = 0x0C1E, + DESFIRE_CARD_NO_SUCH_KEY = 0x0C40, + DESFIRE_CARD_LENGTH_ERROR = 0x0C7E, + DESFIRE_CARD_PERMISSION_DENIED = 0x0C9D, + DESFIRE_CARD_PARAMETER_ERROR = 0x0C9E, + DESFIRE_CARD_APPLICATION_NOT_FOUND = 0x0CA0, + DESFIRE_CARD_APPL_INTEGRITY_ERROR = 0x0CA1, + DESFIRE_CARD_AUTHENTICATION_ERROR = 0x0CAE, + DESFIRE_CARD_ADDITIONAL_FRAME = 0x0CAF, + DESFIRE_CARD_BOUNDARY_ERROR = 0x0CBE, + DESFIRE_CARD_PICC_INTEGRITY_ERROR = 0x0CC1, + DESFIRE_CARD_COMMAND_ABORTED = 0x0CCA, + DESFIRE_CARD_PICC_DISABLED_ERROR = 0x0CCD, + DESFIRE_CARD_COUNT_ERROR = 0x0CCE, + DESFIRE_CARD_DUPLICATE_ERROR = 0x0CDE, + DESFIRE_CARD_EEPROM_ERROR_DES = 0x0CEE, + DESFIRE_CARD_FILE_NOT_FOUND = 0x0CF0, + DESFIRE_CARD_FILE_INTEGRITY_ERROR = 0x0CF1, + + // uFCoder library errors: + UFR_NOT_IMPLEMENTED = 0x1000, + UFR_COMMAND_FAILED = 0x1001, + UFR_TIMEOUT_ERR = 0x1002, + UFR_FILE_SYSTEM_ERROR = 0x1003, + UFR_FILE_SYSTEM_PATH_NOT_EXISTS = 0x1004, + UFR_FILE_NOT_EXISTS = 0x1005, + + // JC cards APDU Error Codes: + UFR_APDU_TRANSCEIVE_ERROR = 0xAE, + UFR_APDU_JC_APP_NOT_SELECTED = 0x6000, + UFR_APDU_JC_APP_BUFF_EMPTY = 0x6001, + UFR_APDU_WRONG_SELECT_RESPONSE = 0x6002, + UFR_APDU_WRONG_KEY_TYPE = 0x6003, + UFR_APDU_WRONG_KEY_SIZE = 0x6004, + UFR_APDU_WRONG_KEY_PARAMS = 0x6005, + UFR_APDU_WRONG_SIGNING_ALGORITHM = 0x6006, + UFR_APDU_PLAIN_TEXT_MAX_SIZE_EXCEEDED = 0x6007, + UFR_APDU_UNSUPPORTED_KEY_SIZE = 0x6008, + UFR_APDU_UNSUPPORTED_ALGORITHMS = 0x6009, + UFR_APDU_PKI_OBJECT_NOT_FOUND = 0x600A, + UFR_APDU_MAX_PIN_LENGTH_EXCEEDED = 0x600B, + UFR_DIGEST_LENGTH_DOES_NOT_MATCH = 0x600C, + + // Secure channel specific errors: + UFR_SECURE_CHANNEL_SESSION_FAILED = 0x6C00, + + // ISO7816-4 Errors (R-APDU) - 2 SW bytes returned by the card, prefixed with 0x000A: + UFR_APDU_SW_TAG = 0x000A0000, + UFR_APDU_SW_WRONG_LENGTH = 0x000A6700, + UFR_APDU_SW_SECURITY_STATUS_NOT_SATISFIED = 0x000A6982, + UFR_APDU_SW_AUTHENTICATION_METHOD_BLOCKED = 0x000A6983, + UFR_APDU_SW_DATA_INVALID = 0x000A6984, + UFR_APDU_SW_CONDITIONS_NOT_SATISFIED = 0x000A6985, + UFR_APDU_SW_WRONG_DATA = 0x000A6A80, + UFR_APDU_SW_FILE_NOT_FOUND = 0x000A6A82, + UFR_APDU_SW_RECORD_NOT_FOUND = 0x000A6A83, + UFR_APDU_SW_DATA_NOT_FOUND = 0x000A6A88, + UFR_APDU_SW_ENTITY_ALREADY_EXISTS = 0x000A6A89, + UFR_APDU_SW_INS_NOT_SUPPORTED = 0x000A6D00, + UFR_APDU_SW_NO_PRECISE_DIAGNOSTIC = 0x000A6F00, + //SAM module error codes: + UFR_SAM_APDU_ERROR = 0x2000, + UFR_SAM_AUTH_ERROR, + UFR_SAM_CRYPTO_ERROR, + + MAX_UFR_STATUS = 0x7FFFFFFF + +} UFR_STATUS; + +//DESFIRE key settings values +#define DESFIRE_KEY_SET_CREATE_WITH_AUTH_SET_CHANGE_KEY_CHANGE 0x09 +#define DESFIRE_KEY_SET_CREATE_WITHOUT_AUTH_SET_CHANGE_KEY_CHANGE 0x0F +#define DESFIRE_KEY_SET_CREATE_WITH_AUTH_SET_NOT_CHANGE_KEY_CHANGE 0x01 +#define DESFIRE_KEY_SET_CREATE_WITHOUT_AUTH_SET_NOT_CHANGE_KEY_CHANGE 0x07 +#define DESFIRE_KEY_SET_CREATE_WITH_AUTH_SET_CHANGE_KEY_NOT_CHANGE 0x08 +#define DESFIRE_KEY_SET_CREATE_WITHOUT_AUTH_SET_CHANGE_KEY_NOT_CHANGE 0x0E +#define DESFIRE_KEY_SET_CREATE_WITH_AUTH_SET_NOT_CHANGE_KEY_NOT_CHANGE 0x00 +#define DESFIRE_KEY_SET_CREATE_WITHOUT_AUTH_SET_NOT_CHANGE_KEY_NOT_CHANGE 0x06 + +#define DESFIRE_KEY_SET_CREATE_WITH_AUTH_SET_CHANGE_KEY_CHANGE_APP_IDS_WITH_AUTH 0x09 +#define DESFIRE_KEY_SET_CREATE_WITHOUT_AUTH_SET_CHANGE_KEY_CHANGE_APP_IDS_WIDTHOUT_AUTH 0x0F +#define DESFIRE_KEY_SET_CREATE_WITH_AUTH_SET_NOT_CHANGE_KEY_CHANGE_APP_IDS_WITH_AUTH 0x01 +#define DESFIRE_KEY_SET_CREATE_WITHOUT_AUTH_SET_NOT_CHANGE_KEY_CHANGE_APP_IDS_WIDTHOUT_AUTH 0x07 +#define DESFIRE_KEY_SET_CREATE_WITH_AUTH_SET_CHANGE_KEY_NOT_CHANGE_APP_IDS_WITH_AUTH 0x08 +#define DESFIRE_KEY_SET_CREATE_WITHOUT_AUTH_SET_CHANGE_KEY_NOT_CHANGE_APP_IDS_WIDTHOUT_AUTH 0x0E +#define DESFIRE_KEY_SET_CREATE_WITH_AUTH_SET_NOT_CHANGE_KEY_NOT_CHANGE_APP_IDS_WITH_AUTH 0x00 +#define DESFIRE_KEY_SET_CREATE_WITHOUT_AUTH_SET_NOT_CHANGE_KEY_NOT_CHANGE_APP_IDS_WIDTHOUT_AUTH 0x06 +#define DESFIRE_KEY_SET_CREATE_WITH_AUTH_SET_CHANGE_KEY_CHANGE_APP_IDS_WIDTHOUT_AUTH 0x0B +#define DESFIRE_KEY_SET_CREATE_WITH_AUTH_SET_NOT_CHANGE_KEY_CHANGE_APP_IDS_WIDTHOUT_AUTH 0x02 +#define DESFIRE_KEY_SET_CREATE_WITH_AUTH_SET_CHANGE_KEY_NOT_CHANGE_APP_IDS_WIDTHOUT_AUTH 0x0A +#define DESFIRE_KEY_SET_CREATE_WITH_AUTH_SET_NOT_CHANGE_KEY_NOT_CHANGE_APP_IDS_WIDTHOUT_AUTH 0x02 + + +enum E_ASYMMETRIC_KEY_TYPES { + RSA_PRIVATE_KEY = 0, + ECDSA_PRIVATE_KEY, + + ASYMMETRIC_KEY_TYPES_NUM +}; + +typedef enum { + USER_PIN = 0, + SO_PIN, + USER_PUK, + SO_PUK +} dl_sec_code_t; + +//SAM definition +typedef enum E_SAM_HW_VER { + SAM_UNKNOWN_TYPE, + SAM_T1AD2060_AV1_MODE , + SAM_T1AD2060_AV2_MODE, + SAM_T1AR1070_AV1_MODE, + SAM_T1AR1070_AV2_MODE +}SAM_HW_TYPE; + +#ifdef __cplusplus +extern "C" +{ +#endif + +//-------------------------------------------------------------------------------------------------- + +UFR_STATUS DL_API ReaderOpen(void); + +/** + * Useful for speed up opening for non uFR basic reader type + * + * @param reader_type : 0 : auto > same as call ReaderOpen() + * 1 : uFR type (1 Mbps) + * 2 : uFR RS232 type (115200 bps) + * 3 : BASE HD uFR (XRC) type (250 Kbps) + * @return + */ +UFR_STATUS DL_API ReaderOpenByType(uint32_t reader_type); + +/** + * ReaderOpenEx() is a function for opening port with + * + * @param reader_type : 0 : auto > same as call ReaderOpen() + * 1 : uFR type (1 Mbps) + * 2 : uFR RS232 type (115200 bps) + * 3 : BASE HD uFR (XRC) type (250 Kbps) + * @param port_name : serial port name, identifier, like + * "COM3" on Window or + * "/dev/ttyS0" on Linux or + * "/dev/tty.serial1" on OS X + * or if you select FTDI + * "UN123456" if Reader have integrated FTDI interface + * "192.168.1.162:8881" IP adress:port for TCP/IP or UDP I/F + * @param port_interface : type of communication interfaces + * 0 : auto - first try FTDI than serial if no port_name defined + * 1 : try serial / virtual COM port / interfaces + * 2 : try only FTDI communication interfaces + * // Digital Logic Shields + * 10 : open Digital Logic Shields with RS232 uFReader on Raspberry Pi (serial interfaces with GPIO reset) + * 84 ('T') : TCP/IP interface + * 85 ('U') : UDP interface + * @param arg : additional settings in c-string format: + * "UNIT_OPEN_RESET_DISABLE" : do not reset the reader when opening + * "UNIT_OPEN_RESET_FORCE" : force reset the reader when opening + * "READER_ACTIVE_ON_RTS_LOW" : (default) Reset the reader when RTS is high - the reader works when RTS is low + * "READER_ACTIVE_ON_RTS_HIGH" : Reset the reader when RTS is low - the reader works when RTS is high + * "RTS_ALWAYS_HIGH" : not implemented yet + * "RTS_ALWAYS_LOW" : not implemented yet + * "RTS_DISCONNECTED" : disconnect RTS (RTS is not initiate nor use) + * + * @return + */ +UFR_STATUS DL_API ReaderOpenEx(uint32_t reader_type, + IN c_string port_name, + uint32_t port_interface, + IN void *arg); + +UFR_STATUS DL_API ReaderReset(void); +UFR_STATUS DL_API ReaderClose(void); +UFR_STATUS DL_API ReaderSoftRestart(void); +UFR_STATUS DL_API ReaderHwReset(void); +UFR_STATUS DL_API GetReaderType(IN uint32_t *lpulReaderType); +UFR_STATUS DL_API GetReaderSerialNumber(IN uint32_t *lpulSerialNumber); + +UFR_STATUS DL_API ReaderStillConnected(VAR uint32_t *connected); + +UFR_STATUS DL_API ReaderKeyWrite(IN const uint8_t *aucKey, uint8_t ucKeyIndex); +UFR_STATUS DL_API ReaderKeysLock(IN const uint8_t *password); +UFR_STATUS DL_API ReaderKeysUnlock(IN const uint8_t *password); +UFR_STATUS DL_API ReaderUISignal(uint8_t light_signal_mode, + uint8_t beep_signal_mode); +UFR_STATUS DL_API ReadUserData(OUT uint8_t *aucData); +UFR_STATUS DL_API WriteUserData(IN const uint8_t *aucData); +UFR_STATUS DL_API GetCardId(VAR uint8_t *lpucCardType, OUT uint32_t *lpulCardSerial); +UFR_STATUS DL_API BlockRead(OUT uint8_t *data, + uint8_t block_address, + uint8_t auth_mode, + uint8_t key_index); +UFR_STATUS DL_API BlockReadSamKey(OUT uint8_t *data, uint8_t block_address, + uint8_t auth_mode, uint8_t key_index); +UFR_STATUS DL_API BlockWrite(IN const uint8_t *data, + uint8_t block_address, + uint8_t auth_mode, + uint8_t key_index); +UFR_STATUS DL_API BlockWriteSamKey(IN const uint8_t *data, + uint8_t block_address, uint8_t auth_mode, uint8_t key_index); +UFR_STATUS DL_API BlockInSectorRead(OUT uint8_t *data, + uint8_t sector_address, + uint8_t block_in_sector_address, + uint8_t auth_mode, + uint8_t key_index); +UFR_STATUS DL_API BlockInSectorReadSamKey(OUT uint8_t *data, + uint8_t sector_address, + uint8_t block_in_sector_address, + uint8_t auth_mode, + uint8_t key_index); +UFR_STATUS DL_API BlockInSectorWrite(IN const uint8_t *data, + uint8_t sector_address, + uint8_t block_in_sector_address, + uint8_t auth_mode, + uint8_t key_index); +UFR_STATUS DL_API BlockInSectorWriteSamKey(IN const uint8_t *data, + uint8_t sector_address, + uint8_t block_in_sector_address, + uint8_t auth_mode, + uint8_t key_index); +UFR_STATUS DL_API LinearRead(OUT uint8_t *aucData, + uint16_t usLinearAddress, + uint16_t usDataLength, + VAR uint16_t *lpusBytesReturned, + uint8_t ucKeyMode, + uint8_t ucReaderKeyIndex); +UFR_STATUS DL_API LinearReadSamKey(OUT uint8_t *aucData, + uint16_t usLinearAddress, + uint16_t usDataLength, + VAR uint16_t *lpusBytesReturned, + uint8_t ucKeyMode, + uint8_t ucReaderKeyIndex); + +UFR_STATUS DL_API LinRowRead(OUT uint8_t *aucData, + uint16_t usLinearAddress, + uint16_t usDataLength, + VAR uint16_t *lpusBytesReturned, + uint8_t ucKeyMode, + uint8_t ucReaderKeyIndex); + +UFR_STATUS DL_API LinearWrite(IN const uint8_t *aucData, + uint16_t usLinearAddress, + uint16_t usDataLength, + VAR uint16_t *lpusBytesWritten, + uint8_t ucKeyMode, + uint8_t ucReaderKeyIndex); +UFR_STATUS DL_API LinearWriteSamKey(IN const uint8_t *aucData, + uint16_t usLinearAddress, + uint16_t usDataLength, + VAR uint16_t *lpusBytesWritten, + uint8_t ucKeyMode, + uint8_t ucReaderKeyIndex); +UFR_STATUS DL_API LinearFormatCard(IN const uint8_t *new_key_A, + uint8_t blocks_access_bits, + uint8_t sector_trailers_access_bits, + uint8_t sector_trailers_byte9, + IN const uint8_t *new_key_B, + VAR uint8_t *lpucSectorsFormatted, + uint8_t auth_mode, + uint8_t key_index); + +UFR_STATUS DL_API SectorTrailerWrite(uint8_t addressing_mode, + uint8_t address, + IN const uint8_t *new_key_A, + uint8_t block0_access_bits, + uint8_t block1_access_bits, + uint8_t block2_access_bits, + uint8_t sector_trailer_access_bits, + uint8_t sector_trailer_byte9, + IN const uint8_t *new_key_B, + uint8_t auth_mode, + uint8_t key_index); +UFR_STATUS DL_API SectorTrailerWriteUnsafe(uint8_t addressing_mode, + uint8_t address, + IN const uint8_t *sector_trailer, + uint8_t auth_mode, + uint8_t key_index); +UFR_STATUS DL_API ValueBlockRead(VAR int32_t *value, + VAR uint8_t *value_addr, + uint8_t block_address, + uint8_t auth_mode, + uint8_t key_index); +UFR_STATUS DL_API ValueBlockInSectorRead(VAR int32_t *value, + VAR uint8_t *value_addr, + uint8_t sector_address, + uint8_t block_in_sector_address, + uint8_t auth_mode, + uint8_t key_index); +UFR_STATUS DL_API ValueBlockReadSamKey(VAR int32_t *value, + VAR uint8_t *value_addr, + uint8_t block_address, + uint8_t auth_mode, + uint8_t key_index); + + +UFR_STATUS DL_API ValueBlockInSectorReadSamKey(VAR int32_t *value, + VAR uint8_t *value_addr, + uint8_t sector_address, + uint8_t block_in_sector_address, + uint8_t auth_mode, + uint8_t key_index); +UFR_STATUS DL_API ValueBlockWrite(int32_t value, + uint8_t value_addr, + uint8_t block_address, + uint8_t auth_mode, + uint8_t key_index); +UFR_STATUS DL_API ValueBlockWriteSamKey(int32_t value, + uint8_t value_addr, + uint8_t block_address, + uint8_t auth_mode, + uint8_t key_index); +UFR_STATUS DL_API ValueBlockInSectorWrite(int32_t value, + uint8_t value_addr, + uint8_t sector_address, + uint8_t block_in_sector_address, + uint8_t auth_mode, + uint8_t key_index); +UFR_STATUS DL_API ValueBlockInSectorWriteSamKey(int32_t value, + uint8_t value_addr, + uint8_t sector_address, + uint8_t block_in_sector_address, + uint8_t auth_mode, + uint8_t key_index); +UFR_STATUS DL_API ValueBlockIncrement(int32_t increment_value, + uint8_t block_address, + uint8_t auth_mode, + uint8_t key_index); +UFR_STATUS DL_API ValueBlockIncrementSamKey(int32_t increment_value, + uint8_t block_address, + uint8_t auth_mode, + uint8_t key_index); +UFR_STATUS DL_API ValueBlockInSectorIncrement(int32_t increment_value, + uint8_t sector_address, + uint8_t block_in_sector_address, + uint8_t auth_mode, + uint8_t key_index); +UFR_STATUS DL_API ValueBlockInSectorIncrementSamKey(int32_t increment_value, + uint8_t sector_address, + uint8_t block_in_sector_address, + uint8_t auth_mode, + uint8_t key_index); +UFR_STATUS DL_API ValueBlockDecrement(int32_t decrement_value, + uint8_t block_address, + uint8_t auth_mode, + uint8_t key_index); +UFR_STATUS DL_API ValueBlockDecrementSamKey(int32_t decrement_value, + uint8_t block_address, + uint8_t auth_mode, + uint8_t key_index); +UFR_STATUS DL_API ValueBlockInSectorDecrement(int32_t decrement_value, + uint8_t sector_address, + uint8_t block_in_sector_address, + uint8_t auth_mode, + uint8_t key_index); +UFR_STATUS DL_API ValueBlockInSectorDecrementSamKey(int32_t decrement_value, + uint8_t sector_address, + uint8_t block_in_sector_address, + uint8_t auth_mode, + uint8_t key_index); +UFR_STATUS DL_API BlockRead_AKM1(OUT uint8_t *data, + uint8_t block_address, + uint8_t auth_mode); +UFR_STATUS DL_API BlockWrite_AKM1(IN const uint8_t *data, + uint8_t block_address, + uint8_t auth_mode); +UFR_STATUS DL_API BlockInSectorRead_AKM1(OUT uint8_t *data, + uint8_t sector_address, + uint8_t block_in_sector_address, + uint8_t auth_mode); +UFR_STATUS DL_API BlockInSectorWrite_AKM1(IN const uint8_t *data, + uint8_t sector_address, + uint8_t block_in_sector_address, + uint8_t auth_mode); +UFR_STATUS DL_API LinearRead_AKM1(OUT uint8_t *data, + uint16_t linear_address, + uint16_t length, + VAR uint16_t *bytes_returned, + uint8_t auth_mode); +UFR_STATUS DL_API LinRowRead_AKM1(OUT uint8_t *data, + uint16_t linear_address, + uint16_t length, + VAR uint16_t *bytes_returned, + uint8_t auth_mode); +UFR_STATUS DL_API LinearWrite_AKM1(IN const uint8_t *data, + uint16_t linear_address, + uint16_t length, + VAR uint16_t *bytes_written, + uint8_t auth_mode); +UFR_STATUS DL_API LinearFormatCard_AKM1(IN const uint8_t *new_key_A, + uint8_t blocks_access_bits, + uint8_t sector_trailers_access_bits, + uint8_t sector_trailers_byte9, + IN const uint8_t *new_key_B, + VAR uint8_t *lpucSectorsFormatted, + uint8_t auth_mode); +UFR_STATUS DL_API SectorTrailerWrite_AKM1(uint8_t addressing_mode, + uint8_t address, + IN const uint8_t *new_key_A, + uint8_t block0_access_bits, + uint8_t block1_access_bits, + uint8_t block2_access_bits, + uint8_t sector_trailer_access_bits, + uint8_t sector_trailer_byte9, + IN const uint8_t *new_key_B, + uint8_t auth_mode); +UFR_STATUS DL_API SectorTrailerWriteUnsafe_AKM1(uint8_t addressing_mode, + uint8_t address, + IN const uint8_t *sector_trailer, + uint8_t auth_mode); +UFR_STATUS DL_API ValueBlockRead_AKM1(VAR int32_t *value, + VAR uint8_t *value_addr, + uint8_t block_address, + uint8_t auth_mode); +UFR_STATUS DL_API ValueBlockInSectorRead_AKM1(VAR int32_t *value, + VAR uint8_t *value_addr, + uint8_t sector_address, + uint8_t block_in_sector_address, + uint8_t auth_mode); +UFR_STATUS DL_API ValueBlockWrite_AKM1(int32_t value, + uint8_t value_addr, + uint8_t block_address, + uint8_t auth_mode); +UFR_STATUS DL_API ValueBlockInSectorWrite_AKM1(int32_t value, + uint8_t value_addr, + uint8_t sector_address, + uint8_t block_in_sector_address, + uint8_t auth_mode); +UFR_STATUS DL_API ValueBlockIncrement_AKM1(int32_t increment_value, + uint8_t block_address, + uint8_t auth_mode); +UFR_STATUS DL_API ValueBlockInSectorIncrement_AKM1(int32_t increment_value, + uint8_t sector_address, + uint8_t block_in_sector_address, + uint8_t auth_mode); +UFR_STATUS DL_API ValueBlockDecrement_AKM1(int32_t decrement_value, + uint8_t block_address, + uint8_t auth_mode); +UFR_STATUS DL_API ValueBlockInSectorDecrement_AKM1(int32_t decrement_value, + uint8_t sector_address, + uint8_t block_in_sector_address, + uint8_t auth_mode); + +UFR_STATUS DL_API BlockRead_AKM2(OUT uint8_t *data, + uint8_t block_address, + uint8_t auth_mode); +UFR_STATUS DL_API BlockWrite_AKM2(IN const uint8_t *data, + uint8_t block_address, + uint8_t auth_mode); +UFR_STATUS DL_API BlockInSectorRead_AKM2(OUT uint8_t *data, + uint8_t sector_address, + uint8_t block_in_sector_address, + uint8_t auth_mode); +UFR_STATUS DL_API BlockInSectorWrite_AKM2(IN const uint8_t *data, + uint8_t sector_address, + uint8_t block_in_sector_address, + uint8_t auth_mode); +UFR_STATUS DL_API LinearRead_AKM2(OUT uint8_t *data, + uint16_t linear_address, + uint16_t length, + VAR uint16_t *bytes_returned, + uint8_t auth_mode); +UFR_STATUS DL_API LinRowRead_AKM2(OUT uint8_t *data, + uint16_t linear_address, + uint16_t length, + VAR uint16_t *bytes_returned, + uint8_t auth_mode); +UFR_STATUS DL_API LinearWrite_AKM2(IN const uint8_t *data, + uint16_t linear_address, + uint16_t length, + VAR uint16_t *bytes_written, + uint8_t auth_mode); +UFR_STATUS DL_API LinearFormatCard_AKM2(IN const uint8_t *new_key_A, + uint8_t blocks_access_bits, + uint8_t sector_trailers_access_bits, + uint8_t sector_trailers_byte9, + IN const uint8_t *new_key_B, + VAR uint8_t *lpucSectorsFormatted, + uint8_t auth_mode); +UFR_STATUS DL_API SectorTrailerWrite_AKM2(uint8_t addressing_mode, + uint8_t address, + IN const uint8_t *new_key_A, + uint8_t block0_access_bits, + uint8_t block1_access_bits, + uint8_t block2_access_bits, + uint8_t sector_trailer_access_bits, + uint8_t sector_trailer_byte9, + IN const uint8_t *new_key_B, + uint8_t auth_mode); +UFR_STATUS DL_API SectorTrailerWriteUnsafe_AKM2(uint8_t addressing_mode, + uint8_t address, + IN const uint8_t *sector_trailer, + uint8_t auth_mode); +UFR_STATUS DL_API ValueBlockRead_AKM2(VAR int32_t *value, + VAR uint8_t *value_addr, + uint8_t block_address, + uint8_t auth_mode); +UFR_STATUS DL_API ValueBlockInSectorRead_AKM2(VAR int32_t *value, + VAR uint8_t *value_addr, + uint8_t sector_address, + uint8_t block_in_sector_address, + uint8_t auth_mode); +UFR_STATUS DL_API ValueBlockWrite_AKM2(int32_t value, + uint8_t value_addr, + uint8_t block_address, + uint8_t auth_mode); +UFR_STATUS DL_API ValueBlockInSectorWrite_AKM2(int32_t value, + uint8_t value_addr, + uint8_t sector_address, + uint8_t block_in_sector_address, + uint8_t auth_mode); +UFR_STATUS DL_API ValueBlockIncrement_AKM2(int32_t increment_value, + uint8_t block_address, + uint8_t auth_mode); +UFR_STATUS DL_API ValueBlockInSectorIncrement_AKM2(int32_t increment_value, + uint8_t sector_address, + uint8_t block_in_sector_address, + uint8_t auth_mode); +UFR_STATUS DL_API ValueBlockDecrement_AKM2(int32_t decrement_value, + uint8_t block_address, + uint8_t auth_mode); +UFR_STATUS DL_API ValueBlockInSectorDecrement_AKM2(int32_t decrement_value, + uint8_t sector_address, + uint8_t block_in_sector_address, + uint8_t auth_mode); + +UFR_STATUS DL_API BlockRead_PK(OUT uint8_t *data, + uint8_t block_address, + uint8_t auth_mode, + IN const uint8_t *key); +UFR_STATUS DL_API BlockWrite_PK(IN const uint8_t *data, + uint8_t block_address, + uint8_t auth_mode, + IN const uint8_t *key); +UFR_STATUS DL_API BlockInSectorRead_PK(OUT uint8_t *data, + uint8_t sector_address, + uint8_t block_in_sector_address, + uint8_t auth_mode, + IN const uint8_t *key); +UFR_STATUS DL_API BlockInSectorWrite_PK(IN const uint8_t *data, + uint8_t sector_address, + uint8_t block_in_sector_address, + uint8_t auth_mode, + IN const uint8_t *key); +UFR_STATUS DL_API LinearRead_PK(OUT uint8_t *data, + uint16_t linear_address, + uint16_t length, + VAR uint16_t *bytes_returned, + uint8_t auth_mode, + IN const uint8_t *key); +UFR_STATUS DL_API LinRowRead_PK(OUT uint8_t *data, + uint16_t linear_address, + uint16_t length, + VAR uint16_t *bytes_returned, + uint8_t auth_mode, + IN const uint8_t *key); +UFR_STATUS DL_API LinearWrite_PK(IN const uint8_t *data, + uint16_t linear_address, + uint16_t length, + VAR uint16_t *bytes_written, + uint8_t auth_mode, + IN const uint8_t *key); +UFR_STATUS DL_API LinearFormatCard_PK(IN const uint8_t *new_key_A, + uint8_t blocks_access_bits, + uint8_t sector_trailers_access_bits, + uint8_t sector_trailers_byte9, + IN const uint8_t *new_key_B, + VAR uint8_t *lpucSectorsFormatted, + uint8_t auth_mode, + IN const uint8_t *key); +UFR_STATUS DL_API SectorTrailerWrite_PK(uint8_t addressing_mode, + uint8_t address, + IN const uint8_t *new_key_A, + uint8_t block0_access_bits, + uint8_t block1_access_bits, + uint8_t block2_access_bits, + uint8_t sector_trailer_access_bits, + uint8_t sector_trailer_byte9, + IN const uint8_t *new_key_B, + uint8_t auth_mode, + IN const uint8_t *key); +UFR_STATUS DL_API SectorTrailerWriteUnsafe_PK(uint8_t addressing_mode, + uint8_t address, + IN const uint8_t *sector_trailer, + uint8_t auth_mode, + IN const uint8_t *key); +UFR_STATUS DL_API ValueBlockRead_PK(VAR int32_t *value, + VAR uint8_t *value_addr, + uint8_t block_address, + uint8_t auth_mode, + IN const uint8_t *key); +UFR_STATUS DL_API ValueBlockInSectorRead_PK(VAR int32_t *value, + VAR uint8_t *value_addr, + uint8_t sector_address, + uint8_t block_in_sector_address, + uint8_t auth_mode, + IN const uint8_t *key); +UFR_STATUS DL_API ValueBlockWrite_PK(int32_t value, + uint8_t value_addr, + uint8_t block_address, + uint8_t auth_mode, + IN const uint8_t *key); +UFR_STATUS DL_API ValueBlockInSectorWrite_PK(int32_t value, + uint8_t value_addr, + uint8_t sector_address, + uint8_t block_in_sector_address, + uint8_t auth_mode, + IN const uint8_t *key); +UFR_STATUS DL_API ValueBlockIncrement_PK(int32_t increment_value, + uint8_t block_address, + uint8_t auth_mode, + IN const uint8_t *key); +UFR_STATUS DL_API ValueBlockInSectorIncrement_PK(int32_t increment_value, + uint8_t sector_address, + uint8_t block_in_sector_address, + uint8_t auth_mode, + IN const uint8_t *key); +UFR_STATUS DL_API ValueBlockDecrement_PK(int32_t decrement_value, + uint8_t block_address, + uint8_t auth_mode, + IN const uint8_t *key); +UFR_STATUS DL_API ValueBlockInSectorDecrement_PK(int32_t decrement_value, + uint8_t sector_address, + uint8_t block_in_sector_address, + uint8_t auth_mode, + IN const uint8_t *key); +UFR_STATUS DL_API GetReaderHardwareVersion(VAR uint8_t *version_major, + VAR uint8_t *version_minor); +UFR_STATUS DL_API GetReaderFirmwareVersion(VAR uint8_t *version_major, + VAR uint8_t *version_minor); + +// New commands (for RTC & I2C EEPROM): +UFR_STATUS DL_API GetReaderTime(VAR uint8_t *time); +UFR_STATUS DL_API SetReaderTime(IN uint8_t *password, VAR uint8_t *time); +UFR_STATUS DL_API ChangeReaderPassword(IN uint8_t *old_password, IN uint8_t *new_password); +UFR_STATUS DL_API ReaderEepromWrite(IN uint8_t *data, uint32_t address, uint32_t size, IN uint8_t *password); +UFR_STATUS DL_API ReaderEepromRead(OUT uint8_t *data, uint32_t address, uint32_t size); + +UFR_STATUS DL_API SubscribeSector(uint8_t block_nr, uint32_t admin_serial); +UFR_STATUS DL_API SubscribeBlock(uint8_t block_nr, uint32_t admin_serial); +UFR_STATUS DL_API BusAdminCardMake(uint32_t serial, IN uint8_t *password); + +UFR_STATUS DL_API GetReaderSerialDescription(OUT uint8_t pSerialDescription[8]); + +// New since version 2.0: +UFR_STATUS DL_API GetBuildNumber(VAR uint8_t *build); +UFR_STATUS DL_API GetCardIdEx(VAR uint8_t *lpucSak, OUT uint8_t *aucUid, + VAR uint8_t *lpucUidSize); +UFR_STATUS DL_API GetLastCardIdEx(VAR uint8_t *lpucSak, OUT uint8_t *aucUid, + VAR uint8_t *lpucUidSize); +//------------------------------------------------------------------------------ +//Multi-card (anti collision) mode: +//------------------------------------------------------------------------------ +UFR_STATUS DL_API EnableAntiCollision(void); +UFR_STATUS DL_API DisableAntiCollision(void); +UFR_STATUS DL_API EnumCards(VAR uint8_t *lpucCardsNumber, OUT uint8_t *lpucUidListSize); // Card pointer is on the first card in list +UFR_STATUS DL_API ListCards(OUT uint8_t *aucUidList, uint8_t ucUidListSize); // Before calling this function you must call EnumCards() first. +UFR_STATUS DL_API SelectCard(IN const uint8_t *aucUid, uint8_t ucUidSize, OUT uint8_t *lpucSelctedCardType); +UFR_STATUS DL_API DeslectCard(void); +UFR_STATUS DL_API GetAntiCollisionStatus(VAR int8_t *lpcIsAntiCollEnabled, VAR int8_t *lpcIsAnyCardSelected); +//------------------------------------------------------------------------------ +UFR_STATUS DL_API GetDlogicCardType(VAR uint8_t *lpucCardType); +UFR_STATUS DL_API GetNfcT2TVersion(OUT uint8_t lpucVersionResponse[8]); +UFR_STATUS DL_API GetCardSize(VAR uint32_t *lpulLinearSize, VAR uint32_t *lpulRawSize); + +// uFCoder PRO MODE +UFR_STATUS DL_API GetReaderProMode(VAR uint32_t *pReaderProMode, OUT uint32_t *pReaderProConfig); +UFR_STATUS DL_API SetReaderProMode(const uint32_t ReaderProMode); + +// QR barcode crypt algorithm +// initialization. with TB serial like 'TB123456' +UFR_STATUS DL_API CardEncryption_Initialize(IN const uint8_t *TBSerialString, uint16_t job_number); + +// You must define 25 bytes array in memory for out_card_data[] +UFR_STATUS DL_API CardEncryption_GetNextEncryptedCard(const uint32_t from_timestamp, const uint32_t to_timestamp, + OUT uint8_t out_card_data[]); + +enum CARD_ENCRYPTION_CODE_TYPE +{ + CODE_TYPE_STANDARD, + CODE_TYPE_GROUP, + CODE_TYPE_DAILY_RANGE, // valid from, but only to_timestamp / every day +}; + +/** + * Same function like CardEncryption_GetNextEncryptedCard() with an additional byte + * to set master byte on the encrypted card ID + * + * @param code_type card type, look in CARD_ENCRYPTION_CODE_TYPE enumeration + * @param from_timestamp start date-time validity of the generated card + * @param to_timestamp end date-time validity of the generated card + * @param additional_data_size additional data size in bytes + * @param additional_data array with additional data - only master byte on the encrypted card ID for now + * @param out_card_data_size returns how many bytes are stored in the out_card_data array + * @param out_card_data pointer to the allocated byte array in memory (minimal size of 20 bytes) for the output data + * @return + */ +UFR_STATUS DL_API CardEncryption_GetNext(const uint32_t code_type, + const uint32_t from_timestamp, const uint32_t to_timestamp, + const uint32_t additional_data_size, IN const uint8_t additional_data[], + VAR uint32_t *out_card_data_size, OUT uint8_t out_card_data[]); + +UFR_STATUS DL_API CardEncryption_GetActualCardSN(OUT uint32_t *ActualCard_SN, VAR uint32_t *ActualCard_SN_LOG); +UFR_STATUS DL_API CardEncryption_GetJobSN(VAR uint32_t *JobSN); +UFR_STATUS DL_API CardEncryption_GetSalterSN(OUT uint8_t SalterSN[8], VAR uint8_t * magicByte); + +UFR_STATUS DL_API read_ndef_record(uint8_t message_nr, uint8_t record_nr, VAR uint8_t *tnf, OUT uint8_t *type_record, VAR uint8_t *type_length, OUT uint8_t *id, VAR uint8_t *id_length, + OUT uint8_t *payload, VAR uint32_t *payload_length); +UFR_STATUS DL_API write_ndef_record(uint8_t message_nr, + IN uint8_t *tnf, + IN uint8_t *type_record, + IN uint8_t *type_length, + IN uint8_t *id, + IN uint8_t *id_length, + IN uint8_t *payload, + IN uint32_t *payload_length, + VAR uint8_t *card_formated); +UFR_STATUS DL_API write_ndef_record_mirroring(uint8_t message_nr, + IN uint8_t *tnf, + IN uint8_t *type_record, + IN uint8_t *type_length, + IN uint8_t *id, + IN uint8_t *id_length, + IN uint8_t *payload, + IN uint32_t *payload_length, + VAR uint8_t *card_formated, + int use_uid_ascii_mirror, + int use_counter_ascii_mirror, + uint32_t payload_mirroring_pos); +UFR_STATUS DL_API get_ndef_record_count(VAR uint8_t *ndef_message_cnt, VAR uint8_t *ndef_record_cnt, OUT uint8_t *ndef_record_array, VAR uint8_t *empty_ndef_message_cnt); +UFR_STATUS DL_API erase_last_ndef_record(uint8_t message_nr); +UFR_STATUS DL_API erase_all_ndef_records(uint8_t message_nr); +UFR_STATUS DL_API ndef_card_initialization(void); +//--------------------------------------------------------------------- +// Card emulation: +//--------------------------------------------------------------------- +UFR_STATUS DL_API WriteEmulationNdef(uint8_t tnf, + IN uint8_t* type_record, + uint8_t type_length, + IN uint8_t* id, + uint8_t id_length, + IN uint8_t* payload, + uint8_t payload_length); +UFR_STATUS DL_API WriteEmulationNdefWithAAR( + uint8_t tnf, + IN uint8_t *type_record, + uint8_t type_length, + IN uint8_t *id, + uint8_t id_length, + IN uint8_t *payload, + uint8_t payload_length, + IN uint8_t *aar, + uint8_t aar_length); +UFR_STATUS DL_API TagEmulationStart(void); +UFR_STATUS DL_API TagEmulationStop(void); +UFR_STATUS DL_API CombinedModeEmulationStart(void); +UFR_STATUS DL_API AdHocEmulationStart(void); +UFR_STATUS DL_API AdHocEmulationStop(void); +UFR_STATUS DL_API GetAdHocEmulationParams(VAR uint8_t *ThresholdMinLevel, VAR uint8_t *ThresholdCollLevel, + VAR uint8_t *RFLevelAmp, VAR uint8_t *RxGain, VAR uint8_t *RFLevel); +UFR_STATUS DL_API SetAdHocEmulationParams(uint8_t ThresholdMinLevel, uint8_t ThresholdCollLevel, + uint8_t RFLevelAmp, uint8_t RxGain, uint8_t RFLevel); +UFR_STATUS DL_API GetExternalFieldState(VAR uint8_t *is_field_present); +UFR_STATUS DL_API EnterShareRamCommMode(void); +UFR_STATUS DL_API ExitShareRamCommMode(void); +UFR_STATUS DL_API WriteShareRam(IN uint8_t *ram_data, uint8_t addr, uint8_t data_len); +UFR_STATUS DL_API ReadShareRam(OUT uint8_t *ram_data, uint8_t addr, uint8_t data_len); + +//------------------------------------------------------------------------------ + +// GetNfcT2TVersion() returns 8 bytes (see T2T documentation): +typedef struct t2t_version_struct { + uint8_t header; + uint8_t vendor_id; + uint8_t product_type; + uint8_t product_subtype; + uint8_t major_product_version; + uint8_t minor_product_version; + uint8_t storage_size; + uint8_t protocol_type; +} t2t_version_t; + +// NfcT2TSafeConvertVersion() returns converts version_record that returned from GetNfcT2TVersion() +// or GetNfcT2TVersionM(). Conversion is "alignment safe" +// (you don't need to pay attention on structure byte alignment): +void DL_API NfcT2TSafeConvertVersion(t2t_version_t *version, const uint8_t *version_record); +UFR_STATUS DL_API ReadECCSignature(IN uint8_t lpucECCSignature[ECC_SIG_LEN], + OUT uint8_t lpucUid[MAX_UID_LEN], VAR uint8_t *lpucUidLen, VAR uint8_t *lpucDlogicCardType); + +//------------------------------------------------------------------------------ +UFR_STATUS DL_API ReadCounter(uint8_t counter_address, VAR uint32_t *value); +UFR_STATUS DL_API IncrementCounter(uint8_t counter_address, uint32_t inc_value); +UFR_STATUS DL_API ReadNFCCounter(VAR uint32_t *value); // Same as ReadCounter(2, &value); +UFR_STATUS DL_API ReadNFCCounterPwdAuth_RK(VAR uint32_t *value, uint8_t reader_key_index); +UFR_STATUS DL_API ReadNFCCounterPwdAuth_PK(VAR uint32_t *value, IN const uint8_t *key); + +//------------------------------------------------------------------------------ + +UFR_STATUS DL_API SetAsyncCardIdSendConfig(uint8_t send_enable, + uint8_t prefix_enable, uint8_t prefix, uint8_t suffix, + uint8_t send_removed_enable, uint32_t async_baud_rate); + +UFR_STATUS DL_API SetAsyncCardIdSendConfigEx(uint8_t send_enable, + uint8_t prefix_enable, uint8_t prefix, uint8_t suffix, + uint8_t send_removed_enable, uint8_t reverse_byte_order, + uint8_t decimal_representation, uint32_t async_baud_rate); + +UFR_STATUS DL_API GetAsyncCardIdSendConfig(VAR uint8_t *send_enable, + VAR uint8_t *prefix_enable, VAR uint8_t *prefix, VAR uint8_t *suffix, + VAR uint8_t *send_removed_enable, VAR uint32_t *async_baud_rate); + +UFR_STATUS DL_API GetAsyncCardIdSendConfigEx(VAR uint8_t *send_enable, + VAR uint8_t *prefix_enable, VAR uint8_t *prefix, VAR uint8_t *suffix, + VAR uint8_t *send_removed_enable, VAR uint8_t *reverse_byte_order, + VAR uint8_t *decimal_representation, VAR uint32_t *async_baud_rate); + +/***************************************************************************** + * AIS FUNCTIONS + ***************************************************************************** + */ + +/** + * ais_get_card_number() read assigned serial number from AIS cards + * + * @param card_number ( pointer to reserved 32 bit integer ) AIS card serial number + * @return UFR_STATUS execution status + */ +UFR_STATUS DL_API ais_get_card_number(VAR uint32_t *card_number); + +UFR_STATUS DL_API ais_set_right_record(uint8_t record_number, uint16_t first_reader_nr, uint16_t last_reader_nr, + uint8_t start_hour, uint8_t start_minute, uint8_t end_hour, uint8_t end_minute, IN uint8_t *days); +UFR_STATUS DL_API ais_get_right_record(uint8_t record_number, VAR uint16_t *first_reader_nr, VAR uint16_t *last_reader_nr, + VAR uint8_t *start_hour, VAR uint8_t *start_minute, VAR uint8_t *end_hour, VAR uint8_t *end_minute, OUT uint8_t *days); +UFR_STATUS DL_API ais_erase_right_record(uint8_t record_number); +UFR_STATUS DL_API ais_set_validate_record(uint8_t begin_year, uint8_t begin_month, uint8_t begin_day, uint8_t begin_hour, uint8_t begin_minute, + uint8_t end_year, uint8_t end_month, uint8_t end_day, uint8_t end_hour, uint8_t end_minute); +UFR_STATUS DL_API ais_get_validate_record(VAR uint8_t *begin_year, VAR uint8_t *begin_month, VAR uint8_t *begin_day, VAR uint8_t *begin_hour, VAR uint8_t *begin_minute, + VAR uint8_t *end_year, VAR uint8_t *end_month, VAR uint8_t *end_day, VAR uint8_t *end_hour, VAR uint8_t *end_minute); +UFR_STATUS DL_API ais_set_card_type(uint8_t card_type); +UFR_STATUS DL_API ais_get_card_type(VAR uint8_t *card_type); +UFR_STATUS DL_API ais_set_card_daily_duration(uint16_t duration); +UFR_STATUS DL_API ais_get_card_daily_duration(VAR uint16_t *duration); +UFR_STATUS DL_API ais_set_card_total_duration(uint32_t duration); +UFR_STATUS DL_API ais_get_card_total_duration(VAR uint32_t *duration); + +// swimming pool ************************************************************** +/** + * ais_get_credit_and_period_validity() > get information about credit and period of validity + * + * @param credit ( pointer to integer ) : + * @param begin_year ( pointer to integer ) : + * @param begin_month ( pointer to integer ) : + * @param begin_day ( pointer to integer ) : + * @param begin_hour ( pointer to integer ) : + * @param begin_minute ( pointer to integer ) : + * @param end_year ( pointer to integer ) : + * @param end_month ( pointer to integer ) : + * @param end_day ( pointer to integer ) : + * @param end_hour ( pointer to integer ) : + * @param end_minute ( pointer to integer ) : + * @return + */ +UFR_STATUS DL_API ais_get_credit_and_period_validity(VAR int32_t *credit, + VAR uint32_t *begin_year, VAR uint32_t *begin_month, VAR uint32_t *begin_day, + VAR uint32_t *begin_hour, + VAR uint32_t *begin_minute, // + VAR uint32_t *end_year, VAR uint32_t *end_month, VAR uint32_t *end_day, + VAR uint32_t *end_hour, VAR uint32_t *end_minute); + +/** + * ais_set_credit_and_period_validity() > set credit and period of validity + * + * @param credit ( integer ) : + * @param begin_year ( integer ) : + * @param begin_month ( integer ) : + * @param begin_day ( integer ) : + * @param begin_hour ( integer ) : + * @param begin_minute ( integer ) : + * @param end_year ( integer ) : + * @param end_month ( integer ) : + * @param end_day ( integer ) : + * @param end_hour ( integer ) : + * @param end_minute ( integer ) : + * @return + */ +UFR_STATUS DL_API ais_set_credit_and_period_validity(int32_t credit, + uint32_t begin_year, uint32_t begin_month, uint32_t begin_day, + uint32_t begin_hour, + uint32_t begin_minute, // + uint32_t end_year, uint32_t end_month, uint32_t end_day, + uint32_t end_hour, uint32_t end_minute); + +UFR_STATUS DL_API ais_set_right_type_record(uint8_t record_number, + uint8_t right_record_type, IN uint8_t *right_data); + +UFR_STATUS DL_API ais_get_right_type_record(uint8_t record_number, + VAR uint8_t *right_record_type, OUT uint8_t *right_data); + +UFR_STATUS DL_API ais_set_right_record_type_max_daily_counter(uint8_t record_number, + uint16_t first_reader_nr, uint16_t last_reader_nr, uint8_t start_hour, + uint8_t start_minute, uint8_t end_hour, uint8_t end_minute, + IN uint8_t *days, uint8_t max_daily_counter); + +UFR_STATUS DL_API ais_get_right_record_type_max_daily_counter(uint8_t record_number, + VAR uint16_t *first_reader_nr, VAR uint16_t *last_reader_nr, + VAR uint8_t *start_hour, VAR uint8_t *start_minute, VAR uint8_t *end_hour, + VAR uint8_t *end_minute, OUT uint8_t *days, VAR uint8_t *max_daily_counter); + +//============================================================================= + +UFR_STATUS DL_API UfrXrcLockOn(uint16_t pulse_duration); +UFR_STATUS DL_API UfrXrcRelayState(uint8_t state); +UFR_STATUS DL_API UfrXrcGetIoState(VAR uint8_t *intercom, VAR uint8_t *door, VAR uint8_t *relay_state); +UFR_STATUS DL_API UfrRedLightControl(uint8_t light_status); +UFR_STATUS DL_API UfrRgbLightControl(uint8_t red, uint8_t green, uint8_t blue, uint8_t intensity, uint8_t enable); + +UFR_STATUS DL_API UfrSetBadSelectCardNrMax(uint8_t bad_select_nr_max); +UFR_STATUS DL_API UfrGetBadSelectCardNrMax(VAR uint8_t *bad_select_nr_max); + +UFR_STATUS DL_API UfrEnterSleepMode(void); +UFR_STATUS DL_API UfrLeaveSleepMode(void); +UFR_STATUS DL_API AutoSleepSet(uint8_t seconds_wait); +UFR_STATUS DL_API AutoSleepGet(VAR uint8_t *seconds_wait); + +UFR_STATUS DL_API SetSpeedPermanently(unsigned char tx_speed, unsigned char rx_speed); +UFR_STATUS DL_API GetSpeedParameters(VAR unsigned char *tx_speed, VAR unsigned char *rx_speed); +UFR_STATUS DL_API SetDisplayData(IN uint8_t *display_data, uint8_t data_length); +UFR_STATUS DL_API SetSpeakerFrequency(uint16_t frequency); +UFR_STATUS DL_API SetDisplayIntensity(uint8_t intensity); +UFR_STATUS DL_API GetDisplayIntensity(VAR uint8_t *intensity); +// DESFIRE functions ************************************************************** + +/** + * + * @param chaining + * @param timeout + * @param block_length + * @param snd_data_array + * @param rcv_length + * @param rcv_data_array + * @param ufr_status + * @return + */ +UFR_STATUS DL_API SetISO14443_4_Mode(void); +UFR_STATUS DL_API SetISO14443_4_DLStorage(void); +UFR_STATUS DL_API uFR_i_block_transceive(uint8_t chaining, uint8_t timeout, + uint8_t block_length, IN uint8_t *snd_data_array, VAR size_t *rcv_length, + OUT uint8_t *rcv_data_array, VAR uint32_t *ufr_status); + +UFR_STATUS DL_API uFR_APDU_Transceive(uint8_t cls, uint8_t ins, uint8_t p1, uint8_t p2, + IN uint8_t *data_out, uint8_t data_out_len, OUT uint8_t *data_in, uint32_t max_data_in_len, VAR uint32_t *response_len, + uint8_t send_le, OUT uint8_t *apdu_status); + +UFR_STATUS DL_API APDUHexStrTransceive(IN const char *c_apdu, OUT char **r_apdu); +UFR_STATUS DL_API APDUPlainTransceive(IN const uint8_t *c_apdu, uint32_t c_apdu_len, OUT uint8_t *r_apdu, VAR uint32_t *r_apdu_len); +UFR_STATUS DL_API APDUTransceive(uint8_t cls, uint8_t ins, uint8_t p1, uint8_t p2, + IN const uint8_t *data_out, uint32_t Nc, OUT uint8_t *data_in, VAR uint32_t *Ne, + uint8_t send_le, OUT uint8_t *apdu_status); +UFR_STATUS DL_API i_block_trans_rcv_chain(uint8_t chaining, uint8_t timeout, + uint8_t block_length, IN uint8_t *snd_data_array, + VAR uint8_t *rcv_length, OUT uint8_t *rcv_data_array, VAR uint8_t *rcv_chained, VAR uint32_t *ufr_status); +UFR_STATUS DL_API r_block_transceive(uint8_t ack, uint8_t timeout, + VAR uint8_t *rcv_length, OUT uint8_t *rcv_data_array, VAR uint8_t *rcv_chained, VAR uint32_t *ufr_status); +UFR_STATUS DL_API s_block_deselect(uint8_t timeout); + +UFR_STATUS DL_API card_transceive(uint8_t card_activate, uint8_t card_halted, uint8_t tx_crc, uint8_t rx_crc, uint8_t crypto1, + uint32_t timeout, IN uint8_t *tx_data, uint8_t tx_data_len, OUT uint8_t *rx_data, VAR uint8_t *rx_data_len); +UFR_STATUS DL_API card_transceive_mode_start(uint8_t tx_crc, uint8_t rx_crc, uint32_t rf_timeout, uint32_t uart_timeout); +UFR_STATUS DL_API card_transceive_mode_stop(void); +UFR_STATUS DL_API card_halt_enable(void); + +UFR_STATUS DL_API uart_transceive(IN uint8_t *send_data, uint8_t send_len, OUT uint8_t *rcv_data, uint32_t bytes_to_receive, VAR uint32_t *rcv_len); + +UFR_STATUS DL_API open_ISO7816_interface(OUT uint8_t *atr_data, VAR uint8_t *atr_len); +UFR_STATUS DL_API APDU_switch_to_ISO7816_interface(void); +UFR_STATUS DL_API close_ISO7816_interface_no_APDU(void); +UFR_STATUS DL_API close_ISO7816_interface_APDU_ISO14443_4(void); +UFR_STATUS DL_API APDU_switch_to_ISO14443_4_interface(void); +UFR_STATUS DL_API APDU_switch_off_from_ISO7816_interface(void); + +//============================================================================== +UFR_STATUS DL_API JCAppSelectByAid(IN const uint8_t *aid, uint8_t aid_len, OUT uint8_t selection_response[16]); +UFR_STATUS DL_API JCAppPutPrivateKey(uint8_t key_type, uint8_t key_index, + IN const uint8_t *key, uint16_t key_bit_len, const IN uint8_t *key_param, uint16_t key_parm_len); +UFR_STATUS DL_API JCAppGenerateKeyPair(uint8_t key_type, uint8_t key_index, uint8_t key_designator, + uint16_t key_bit_len, IN const uint8_t *params, uint16_t params_size); +UFR_STATUS DL_API JCAppDeleteRsaKeyPair(uint8_t key_index); +UFR_STATUS DL_API JCAppDeleteEcKeyPair(uint8_t key_index); +UFR_STATUS DL_API JCAppSignatureBegin(uint8_t cipher, uint8_t digest, uint8_t padding, + uint8_t key_index, + IN const uint8_t *chunk, uint16_t chunk_len, IN const uint8_t *alg_param, uint16_t alg_parm_len); +UFR_STATUS DL_API JCAppSignatureUpdate(IN const uint8_t *chunk, uint16_t chunk_len); +UFR_STATUS DL_API JCAppSignatureEnd(VAR uint16_t *sig_len); +UFR_STATUS DL_API JCAppGenerateSignature(uint8_t cipher, uint8_t digest, uint8_t padding, + uint8_t key_index, + IN const uint8_t *plain_data, uint16_t plain_data_len, VAR uint16_t *sig_len, + IN const uint8_t *alg_param, uint16_t alg_parm_len); +UFR_STATUS DL_API JCAppGetSignature(OUT uint8_t *sig, uint16_t sig_len); +UFR_STATUS DL_API JCAppPutObj(uint8_t obj_type, uint8_t obj_index, IN uint8_t *obj, int16_t obj_size, IN uint8_t *id, uint8_t id_size); +UFR_STATUS DL_API JCAppPutObjSubject(uint8_t obj_type, uint8_t obj_index, IN uint8_t *subject, uint8_t size); +UFR_STATUS DL_API JCAppInvalidateCert(uint8_t obj_type, uint8_t obj_index); +UFR_STATUS DL_API JCAppGetObjId(uint8_t obj_type, uint8_t obj_index, OUT uint8_t *id, VAR uint16_t *id_size); // when id == NULL returns size +UFR_STATUS DL_API JCAppGetObjSubject(uint8_t obj_type, uint8_t obj_index, OUT uint8_t *subject, VAR uint16_t *size); // when subject == NULL returns size +UFR_STATUS DL_API JCAppGetObj(uint8_t obj_type, uint8_t obj_index, OUT uint8_t *obj, int16_t size); // when obj == NULL returns size +c_string DL_API JCAppGetErrorDescription(UFR_STATUS apdu_error_status); +UFR_STATUS DL_API JCAppLogin(uint8_t SO, IN uint8_t *pin, uint8_t pinSize); +UFR_STATUS DL_API JCAppGetPinTriesRemaining(dl_sec_code_t secureCodeType, VAR uint16_t *triesRemaining); +UFR_STATUS DL_API JCAppPinChange(dl_sec_code_t secureCodeType, IN uint8_t *newPin, uint8_t newPinSize); +UFR_STATUS DL_API JCAppPinUnblock(uint8_t SO, IN uint8_t *puk, uint8_t pukSize); +UFR_STATUS DL_API JCAppPinEnable(uint8_t SO); +UFR_STATUS DL_API JCAppPinDisable(uint8_t SO); +UFR_STATUS DL_API JCAppGetRsaPublicKey(uint8_t key_index, OUT uint8_t *modulus, VAR uint16_t *modulus_size, + OUT uint8_t *exponent, VAR uint16_t *exponent_size); // when modulus == NULL, returns sizes and exponent ignored +UFR_STATUS DL_API JCAppGetEcPublicKey(uint8_t key_index, OUT uint8_t *keyW, VAR uint16_t *kexWSize, // when keyW == NULL, returns size + OUT uint8_t *field, VAR uint16_t *field_size, OUT uint8_t *ab , VAR uint16_t *ab_size, OUT uint8_t *g, VAR uint16_t *g_size, + OUT uint8_t *r, VAR uint16_t *r_size, VAR uint16_t *k, VAR uint16_t *key_size_bits, VAR uint16_t *key_designator); +UFR_STATUS DL_API JCAppGetEcKeySizeBits(uint8_t key_index, VAR uint16_t *key_size_bits, VAR uint16_t *key_designator); +//------------------------------------------------------------------------------ +UFR_STATUS DL_API JCStorageGetFilesListSize(VAR uint32_t *list_size); +UFR_STATUS DL_API JCStorageListFiles(OUT uint8_t *list, uint32_t list_bytes_allocated); +UFR_STATUS DL_API JCStorageGetFileSize(uint8_t card_file_index, VAR uint32_t *file_size); +UFR_STATUS DL_API JCStorageReadFile(uint8_t card_file_index, OUT uint8_t *data, uint32_t data_bytes_allocated); +UFR_STATUS DL_API JCStorageReadFileToFileSystem(uint8_t card_file_index, IN const char *file_system_path_name); +UFR_STATUS DL_API JCStorageWriteFile(uint8_t card_file_index, IN const uint8_t *data, uint32_t data_size); +UFR_STATUS DL_API JCStorageWriteFileFromFileSystem(uint8_t card_file_index, IN const char *file_system_path_name); +UFR_STATUS DL_API JCStorageDeleteFile(uint8_t file_index); +//------------------------------------------------------------------------------ +UFR_STATUS DL_API MRTDAppSelectAndAuthenticateBac(IN const uint8_t mrz_proto_key[25], OUT uint8_t *ksenc, OUT uint8_t *ksmac, + VAR uint64_t *send_sequence_cnt); +UFR_STATUS DL_API MRTDFileReadBacToHeap(IN const uint8_t *file_index, VAR uint8_t **output, OUT uint32_t *output_length, IN const uint8_t *ksenc, + IN const uint8_t *ksmac, VAR uint64_t *send_sequence_cnt); +UFR_STATUS DL_API MRTD_MRZDataToMRZProtoKey(IN const char *doc_number, IN const char *date_of_birth, IN const char *date_of_expiry, + OUT uint8_t mrz_proto_key[25]); +UFR_STATUS DL_API MRTD_MRZSubjacentToMRZProtoKey(IN const uint8_t mrz[44], OUT uint8_t mrz_proto_key[25]); +//============================================================================== +UFR_STATUS DL_API DES_to_AES_key_type(void); +UFR_STATUS DL_API AES_to_DES_key_type(void); + +//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ + +enum KEY_TYPE +{ + AES_KEY_TYPE, + DES3K_KEY_TYPE, + DES_KEY_TYPE, + DES2K_KEY_TYPE +}; + +UFR_STATUS DL_API uFR_int_GetDesfireUid( + uint8_t aes_key_nr, + uint32_t aid, + uint8_t aid_key_nr, + OUT uint8_t *card_uid, + VAR uint8_t *card_uid_len, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_GetDesfireUid_aes( + uint8_t aes_key_nr, + uint32_t aid, + uint8_t aid_key_nr, + OUT uint8_t *card_uid, + VAR uint8_t *card_uid_len, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_GetDesfireUid_des( + uint8_t des_key_nr, + uint32_t aid, + uint8_t aid_key_nr, + OUT uint8_t *card_uid, + VAR uint8_t *card_uid_len, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_GetDesfireUid_2k3des( + uint8_t des2k_key_nr, + uint32_t aid, + uint8_t aid_key_nr, + OUT uint8_t *card_uid, + VAR uint8_t *card_uid_len, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_GetDesfireUid_3k3des( + uint8_t des3k_key_nr, + uint32_t aid, + uint8_t aid_key_nr, + OUT uint8_t *card_uid, + VAR uint8_t *card_uid_len, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_GetDesfireUid_PK( + IN uint8_t *aes_key_ext, + uint32_t aid, + uint8_t aid_key_nr, + OUT uint8_t *card_uid, + VAR uint8_t *card_uid_len, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_GetDesfireUid_aes_PK( + IN uint8_t *aes_key_ext, + uint32_t aid, + uint8_t aid_key_nr, + OUT uint8_t *card_uid, + VAR uint8_t *card_uid_len, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_GetDesfireUid_des_PK( + IN uint8_t *des_key_ext, + uint32_t aid, + uint8_t aid_key_nr, + OUT uint8_t *card_uid, + VAR uint8_t *card_uid_len, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_GetDesfireUid_2k3des_PK( + IN uint8_t *des2k_key_ext, + uint32_t aid, + uint8_t aid_key_nr, + OUT uint8_t *card_uid, + VAR uint8_t *card_uid_len, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_GetDesfireUid_3k3des_PK( + IN uint8_t *des3k_key_ext, + uint32_t aid, + uint8_t aid_key_nr, + OUT uint8_t *card_uid, + VAR uint8_t *card_uid_len, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_SAM_GetDesfireUidAesAuth( + uint8_t aes_key_nr, + uint32_t aid, + uint8_t aid_key_nr, + OUT uint8_t *card_uid, + VAR uint8_t *card_uid_len, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_SAM_GetDesfireUid3k3desAuth( + uint8_t des3k_key_nr, + uint32_t aid, + uint8_t aid_key_nr, + OUT uint8_t *card_uid, + VAR uint8_t *card_uid_len, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); + +UFR_STATUS DL_API uFR_int_DesfireFreeMem( + VAR uint32_t *free_mem_byte, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); + +UFR_STATUS DL_API uFR_int_DesfireFormatCard( + uint8_t aes_key_nr, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireFormatCard_aes( + uint8_t aes_key_nr, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireFormatCard_des( + uint8_t des_key_nr, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireFormatCard_2k3des( + uint8_t des2k_key_nr, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireFormatCard_3k3des( + uint8_t des3k_key_nr, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireFormatCard_PK( + IN uint8_t *aes_key_ext, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireFormatCard_aes_PK( + IN uint8_t *aes_key_ext, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireFormatCard_des_PK( + IN uint8_t *des_key_ext, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireFormatCard_2k3des_PK( + IN uint8_t *des2k_key_ext, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireFormatCard_3k3des_PK( + IN uint8_t *des3k_key_ext, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_SAM_DesfireFormatCardAesAuth( + uint8_t aes_key_nr, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_SAM_DesfireFormatCard3k3desAuth( + uint8_t des3k_key_nr, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); + +UFR_STATUS DL_API uFR_int_DesfireCreateStdDataFile( + uint8_t aes_key_nr, + uint32_t aid, + uint8_t file_id, + uint32_t file_size, + uint8_t read_key_no, + uint8_t write_key_no, + uint8_t read_write_key_no, + uint8_t change_key_no, + uint8_t communication_settings, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireCreateStdDataFile_aes( + uint8_t aes_key_nr, + uint32_t aid, + uint8_t file_id, + uint32_t file_size, + uint8_t read_key_no, + uint8_t write_key_no, + uint8_t read_write_key_no, + uint8_t change_key_no, + uint8_t communication_settings, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireCreateStdDataFile_des( + uint8_t des_key_nr, + uint32_t aid, + uint8_t file_id, + uint32_t file_size, + uint8_t read_key_no, + uint8_t write_key_no, + uint8_t read_write_key_no, + uint8_t change_key_no, + uint8_t communication_settings, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireCreateStdDataFile_2k3des( + uint8_t des2k_key_nr, + uint32_t aid, + uint8_t file_id, + uint32_t file_size, + uint8_t read_key_no, + uint8_t write_key_no, + uint8_t read_write_key_no, + uint8_t change_key_no, + uint8_t communication_settings, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireCreateStdDataFile_3k3des( + uint8_t des3k_key_nr, + uint32_t aid, + uint8_t file_id, + uint32_t file_size, + uint8_t read_key_no, + uint8_t write_key_no, + uint8_t read_write_key_no, + uint8_t change_key_no, + uint8_t communication_settings, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireCreateStdDataFile_PK( + IN uint8_t *aes_key_ext, + uint32_t aid, + uint8_t file_id, + uint32_t file_size, + uint8_t read_key_no, + uint8_t write_key_no, + uint8_t read_write_key_no, + uint8_t change_key_no, + uint8_t communication_settings, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireCreateStdDataFile_aes_PK( + IN uint8_t *aes_key_ext, + uint32_t aid, + uint8_t file_id, + uint32_t file_size, + uint8_t read_key_no, + uint8_t write_key_no, + uint8_t read_write_key_no, + uint8_t change_key_no, + uint8_t communication_settings, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireCreateStdDataFile_des_PK( + IN uint8_t *des_key_ext, + uint32_t aid, + uint8_t file_id, + uint32_t file_size, + uint8_t read_key_no, + uint8_t write_key_no, + uint8_t read_write_key_no, + uint8_t change_key_no, + uint8_t communication_settings, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireCreateStdDataFile_2k3des_PK( + IN uint8_t *des2k_key_ext, + uint32_t aid, + uint8_t file_id, + uint32_t file_size, + uint8_t read_key_no, + uint8_t write_key_no, + uint8_t read_write_key_no, + uint8_t change_key_no, + uint8_t communication_settings, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireCreateStdDataFile_3k3des_PK( + IN uint8_t *des3k_key_ext, + uint32_t aid, + uint8_t file_id, + uint32_t file_size, + uint8_t read_key_no, + uint8_t write_key_no, + uint8_t read_write_key_no, + uint8_t change_key_no, + uint8_t communication_settings, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_SAM_DesfireCreateStdDataFileAesAuth( + uint8_t aes_key_nr, + uint32_t aid, + uint8_t file_id, + uint32_t file_size, + uint8_t read_key_no, + uint8_t write_key_no, + uint8_t read_write_key_no, + uint8_t change_key_no, + uint8_t communication_settings, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_SAM_DesfireCreateStdDataFile3k3desAuth( + uint8_t des3k_key_nr, + uint32_t aid, + uint8_t file_id, + uint32_t file_size, + uint8_t read_key_no, + uint8_t write_key_no, + uint8_t read_write_key_no, + uint8_t change_key_no, + uint8_t communication_settings, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireCreateStdDataFile_no_auth( + uint32_t aid, + uint8_t file_id, + uint32_t file_size, + uint8_t read_key_no, + uint8_t write_key_no, + uint8_t read_write_key_no, + uint8_t change_key_no, + uint8_t communication_settings, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); + +UFR_STATUS DL_API uFR_int_DesfireDeleteFile( + uint8_t aes_key_nr, + uint32_t aid, + uint8_t file_id, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireDeleteFile_aes( + uint8_t aes_key_nr, + uint32_t aid, + uint8_t file_id, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireDeleteFile_des( + uint8_t des_key_nr, + uint32_t aid, + uint8_t file_id, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireDeleteFile_2k3des( + uint8_t des2k_key_nr, + uint32_t aid, + uint8_t file_id, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireDeleteFile_3k3des( + uint8_t des3k_key_nr, + uint32_t aid, + uint8_t file_id, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireDeleteFile_PK( + IN uint8_t *aes_key_ext, + uint32_t aid, + uint8_t file_id, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireDeleteFile_aes_PK( + IN uint8_t *aes_key_ext, + uint32_t aid, + uint8_t file_id, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireDeleteFile_des_PK( + IN uint8_t *des_key_ext, + uint32_t aid, + uint8_t file_id, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireDeleteFile_2k3des_PK( + IN uint8_t *des2k_key_ext, + uint32_t aid, + uint8_t file_id, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireDeleteFile_3k3des_PK( + IN uint8_t *des3k_key_ext, + uint32_t aid, + uint8_t file_id, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_SAM_DesfireDeleteFileAesAuth( + uint8_t aes_key_nr, + uint32_t aid, + uint8_t file_id, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_SAM_DesfireDeleteFile3k3desAuth( + uint8_t des3k_key_nr, + uint32_t aid, + uint8_t file_id, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireDeleteFile_no_auth( + uint32_t aid, + uint8_t file_id, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); + +UFR_STATUS DL_API uFR_int_DesfireCreateAesApplication( + uint8_t aes_key_nr, + uint32_t aid, + uint8_t setting, + uint8_t max_key_no, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireCreateAesApplication_aes( + uint8_t aes_key_nr, + uint32_t aid, + uint8_t setting, + uint8_t max_key_no, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireCreate3k3desApplication_aes( + uint8_t aes_key_nr, + uint32_t aid, + uint8_t setting, + uint8_t max_key_no, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireCreateDesApplication_aes( + uint8_t aes_key_nr, + uint32_t aid, + uint8_t setting, + uint8_t max_key_no, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireCreateAesApplication_3k3des( + uint8_t des3k_key_nr, + uint32_t aid, + uint8_t setting, + uint8_t max_key_no, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireCreate3k3desApplication_3k3des( + uint8_t des3k_key_nr, + uint32_t aid, + uint8_t setting, + uint8_t max_key_no, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireCreateDesApplication_3k3des( + uint8_t des3k_key_nr, + uint32_t aid, + uint8_t setting, + uint8_t max_key_no, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireCreateAesApplication_2k3des( + uint8_t des2k_key_nr, + uint32_t aid, + uint8_t setting, + uint8_t max_key_no, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireCreate3k3desApplication_2k3des( + uint8_t des2k_key_nr, + uint32_t aid, + uint8_t setting, + uint8_t max_key_no, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireCreateDesApplication_2k3des( + uint8_t des2k_key_nr, + uint32_t aid, + uint8_t setting, + uint8_t max_key_no, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireCreateAesApplication_des( + uint8_t des_key_nr, + uint32_t aid, + uint8_t setting, + uint8_t max_key_no, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireCreate3k3desApplication_des( + uint8_t des_key_nr, + uint32_t aid, + uint8_t setting, + uint8_t max_key_no, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireCreateDesApplication_des( + uint8_t des_key_nr, + uint32_t aid, + uint8_t setting, + uint8_t max_key_no, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireCreateAesApplication_PK( + IN uint8_t *aes_key_ext, + uint32_t aid, + uint8_t setting, + uint8_t max_key_no, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireCreateAesApplication_aes_PK( + IN uint8_t *aes_key_ext, + uint32_t aid, + uint8_t setting, + uint8_t max_key_no, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireCreate3k3desApplication_aes_PK( + IN uint8_t *aes_key_ext, + uint32_t aid, + uint8_t setting, + uint8_t max_key_no, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireCreateDesApplication_aes_PK( + IN uint8_t *aes_key_ext, + uint32_t aid, + uint8_t setting, + uint8_t max_key_no, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireCreateAesApplication_3k3des_PK( + IN uint8_t *des3k_key_ext, + uint32_t aid, + uint8_t setting, + uint8_t max_key_no, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireCreate3k3desApplication_3k3des_PK( + IN uint8_t *des3k_key_ext, + uint32_t aid, + uint8_t setting, + uint8_t max_key_no, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireCreateDesApplication_3k3des_PK( + IN uint8_t *des3k_key_ext, + uint32_t aid, + uint8_t setting, + uint8_t max_key_no, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireCreateAesApplication_2k3des_PK( + IN uint8_t *des2k_key_ext, + uint32_t aid, + uint8_t setting, + uint8_t max_key_no, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireCreate3k3desApplication_2k3des_PK( + IN uint8_t *des2k_key_ext, + uint32_t aid, + uint8_t setting, + uint8_t max_key_no, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireCreateDesApplication_2k3des_PK( + IN uint8_t *des2k_key_ext, + uint32_t aid, + uint8_t setting, + uint8_t max_key_no, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireCreateAesApplication_des_PK( + IN uint8_t *des_key_ext, + uint32_t aid, + uint8_t setting, + uint8_t max_key_no, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireCreate3k3desApplication_des_PK( + IN uint8_t *des_key_ext, + uint32_t aid, + uint8_t setting, + uint8_t max_key_no, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireCreateDesApplication_des_PK( + IN uint8_t *des_key_ext, + uint32_t aid, + uint8_t setting, + uint8_t max_key_no, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_SAM_DesfireCreateAesApplicationAesAuth( + uint8_t aes_key_nr, + uint32_t aid, + uint8_t setting, + uint8_t max_key_no, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_SAM_DesfireCreate3k3desApplicationAesAuth( + uint8_t aes_key_nr, + uint32_t aid, + uint8_t setting, + uint8_t max_key_no, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_SAM_DesfireCreateAesApplication3k3desAuth( + uint8_t des3k_key_nr, + uint32_t aid, + uint8_t setting, + uint8_t max_key_no, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_SAM_DesfireCreate3k3desApplication3k3desAuth( + uint8_t des3k_key_nr, + uint32_t aid, + uint8_t setting, + uint8_t max_key_no, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireCreateAesApplication_no_auth( + uint32_t aid, + uint8_t setting, + uint8_t max_key_no, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireCreate3k3desApplication_no_auth( + uint32_t aid, + uint8_t setting, + uint8_t max_key_no, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireCreateDesApplication_no_auth( + uint32_t aid, + uint8_t setting, + uint8_t max_key_no, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); + +UFR_STATUS DL_API uFR_int_DesfireDeleteApplication( + uint8_t aes_key_nr, + uint32_t aid, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireDeleteApplication_aes( + uint8_t aes_key_nr, + uint32_t aid, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireDeleteApplication_des( + uint8_t des_key_nr, + uint32_t aid, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireDeleteApplication_2k3des( + uint8_t des2k_key_nr, + uint32_t aid, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireDeleteApplication_3k3des( + uint8_t des3k_key_nr, + uint32_t aid, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireDeleteApplication_PK( + IN uint8_t *aes_key_ext, + uint32_t aid, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireDeleteApplication_aes_PK( + IN uint8_t *aes_key_ext, + uint32_t aid, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireDeleteApplication_des_PK( + IN uint8_t *des_key_ext, + uint32_t aid, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireDeleteApplication_2k3des_PK( + IN uint8_t *des2k_key_ext, + uint32_t aid, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireDeleteApplication_3k3des_PK( + IN uint8_t *des3k_key_ext, + uint32_t aid, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_SAM_DesfireDeleteApplicationAesAuth( + uint8_t aes_key_nr, + uint32_t aid, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_SAM_DesfireDeleteApplication3k3desAuth( + uint8_t des3k_key_nr, + uint32_t aid, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); + +UFR_STATUS DL_API uFR_int_DesfireSetConfiguration( + uint8_t aes_key_nr, + uint8_t random_uid, + uint8_t format_disable, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireSetConfiguration_aes( + uint8_t aes_key_nr, + uint8_t random_uid, + uint8_t format_disable, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireSetConfiguration_des( + uint8_t des_key_nr, + uint8_t random_uid, + uint8_t format_disable, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireSetConfiguration_2k3des( + uint8_t des2k_key_nr, + uint8_t random_uid, + uint8_t format_disable, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireSetConfiguration_3k3des( + uint8_t des3k_key_nr, + uint8_t random_uid, + uint8_t format_disable, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireSetConfiguration_PK( + IN uint8_t *aes_key_ext, + uint8_t random_uid, + uint8_t format_disable, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireSetConfiguration_aes_PK( + IN uint8_t *aes_key_ext, + uint8_t random_uid, + uint8_t format_disable, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireSetConfiguration_des_PK( + IN uint8_t *des_key_ext, + uint8_t random_uid, + uint8_t format_disable, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireSetConfiguration_2k3des_PK( + IN uint8_t *des2k_key_ext, + uint8_t random_uid, + uint8_t format_disable, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireSetConfiguration_3k3des_PK( + IN uint8_t *des3k_key_ext, + uint8_t random_uid, + uint8_t format_disable, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_SAM_DesfireSetConfigurationAesAuth( + uint8_t aes_key_nr, + uint8_t random_uid, + uint8_t format_disable, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_SAM_DesfireSetConfiguration3k3desAuth( + uint8_t des3k_key_nr, + uint8_t random_uid, + uint8_t format_disable, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); + +UFR_STATUS DL_API uFR_int_DesfireGetKeySettings( + uint8_t aes_key_nr, + uint32_t aid, + VAR uint8_t *setting, + VAR uint8_t *max_key_no, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireGetKeySettings_aes( + uint8_t aes_key_nr, + uint32_t aid, + VAR uint8_t *setting, + VAR uint8_t *max_key_no, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireGetKeySettings_des( + uint8_t des_key_nr, + uint32_t aid, + VAR uint8_t *setting, + VAR uint8_t *max_key_no, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireGetKeySettings_2k3des( + uint8_t des2k_key_nr, + uint32_t aid, + VAR uint8_t *setting, + VAR uint8_t *max_key_no, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireGetKeySettings_3k3des( + uint8_t des3k_key_nr, + uint32_t aid, + VAR uint8_t *setting, + VAR uint8_t *max_key_no, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireGetKeySettings_PK( + IN uint8_t *aes_key_ext, + uint32_t aid, + VAR uint8_t *setting, + VAR uint8_t *max_key_no, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireGetKeySettings_aes_PK( + IN uint8_t *aes_key_ext, + uint32_t aid, + VAR uint8_t *setting, + VAR uint8_t *max_key_no, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireGetKeySettings_des_PK( + IN uint8_t *des_key_ext, + uint32_t aid, + VAR uint8_t *setting, + VAR uint8_t *max_key_no, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireGetKeySettings_2k3des_PK( + IN uint8_t *des2k_key_ext, + uint32_t aid, + VAR uint8_t *setting, + VAR uint8_t *max_key_no, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireGetKeySettings_3k3des_PK( + IN uint8_t *des3k_key_ext, + uint32_t aid, + VAR uint8_t *setting, + VAR uint8_t *max_key_no, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_SAM_DesfireGetKeySettingsAesAuth( + uint8_t aes_key_nr, + uint32_t aid, + VAR uint8_t *setting, + VAR uint8_t *max_key_no, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_SAM_DesfireGetKeySettings3k3desAuth( + uint8_t des3k_key_nr, + uint32_t aid, + VAR uint8_t *setting, + VAR uint8_t *max_key_no, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); + +UFR_STATUS DL_API uFR_int_DesfireChangeKeySettings( + uint8_t aes_key_nr, + uint32_t aid, + uint8_t setting, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireChangeKeySettings_aes( + uint8_t aes_key_nr, + uint32_t aid, + uint8_t setting, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireChangeKeySettings_des( + uint8_t des_key_nr, + uint32_t aid, + uint8_t setting, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireChangeKeySettings_2k3des( + uint8_t des2k_key_nr, + uint32_t aid, + uint8_t setting, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireChangeKeySettings_3k3des( + uint8_t des3k_key_nr, + uint32_t aid, + uint8_t setting, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireChangeKeySettings_PK( + IN uint8_t *aes_key_ext, + uint32_t aid, + uint8_t setting, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireChangeKeySettings_aes_PK( + IN uint8_t *aes_key_ext, + uint32_t aid, + uint8_t setting, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireChangeKeySettings_des_PK( + IN uint8_t *des_key_ext, + uint32_t aid, + uint8_t setting, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireChangeKeySettings_2k3des_PK( + IN uint8_t *des2k_key_ext, + uint32_t aid, + uint8_t setting, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireChangeKeySettings_3k3des_PK( + IN uint8_t *des3k_key_ext, + uint32_t aid, + uint8_t setting, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_SAM_DesfireChangeKeySettingsAesAuth( + uint8_t aes_key_nr, + uint32_t aid, + uint8_t setting, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_SAM_DesfireChangeKeySettings3k3desAuth( + uint8_t des3k_key_nr, + uint32_t aid, + uint8_t setting, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); + +UFR_STATUS DL_API uFR_int_DesfireChangeAesKey( + uint8_t aes_key_nr, + uint32_t aid, + uint8_t aid_key_no_auth, + IN uint8_t new_aes_key[16], + uint8_t aid_key_no, + IN uint8_t old_aes_key[16], + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +// all keys are in reader +UFR_STATUS DL_API uFR_int_DesfireChangeAesKey_A( + uint8_t aes_key_nr, + uint32_t aid, + uint8_t aid_key_no_auth, + uint8_t new_aes_key_nr, + uint8_t aid_key_no, + uint8_t old_aes_key_nr, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireChangeAesKey_aes( + uint8_t aes_key_nr, + uint32_t aid, + uint8_t aid_key_no_auth, + uint8_t new_aes_key_nr, + uint8_t aid_key_no, + uint8_t old_aes_key_nr, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireChangeDesKey_des( + uint8_t auth_des_key_nr, + uint32_t aid, + uint8_t aid_key_no_auth, + uint8_t new_des_key_nr, + uint8_t aid_key_no, + uint8_t old_des_key_nr, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireChange2K3DesKey_des( + uint8_t auth_des_key_nr, + uint32_t aid, + uint8_t aid_key_no_auth, + uint8_t new_2k3des_key_nr, + uint8_t aid_key_no, + uint8_t old_2k3des_key_nr, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireChangeDesKey_2k3des( + uint8_t auth_des2k_key_nr, + uint32_t aid, + uint8_t aid_key_no_auth, + uint8_t new_des_key_nr, + uint8_t aid_key_no, + uint8_t old_des_key_nr, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireChange2K3DesKey_2k3des( + uint8_t auth_des2k_key_nr, + uint32_t aid, + uint8_t aid_key_no_auth, + uint8_t new_2k3des_key_nr, + uint8_t aid_key_no, + uint8_t old_2k3des_key_nr, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireChange3K3DesKey_3k3des( + uint8_t auth_des3k_key_nr, + uint32_t aid, + uint8_t aid_key_no_auth, + uint8_t new_3k3des_key_nr, + uint8_t aid_key_no, + uint8_t old_3k3des_key_nr, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireChangeMasterKey( + uint8_t auth_key_nr, + uint8_t auth_key_type, + uint8_t new_key_nr, + uint8_t new_key_type, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireChangeAesKey_PK( + IN uint8_t *aes_key_ext, + uint32_t aid, + uint8_t aid_key_no_auth, + IN uint8_t new_aes_key[16], + uint8_t aid_key_no, + IN uint8_t old_aes_key[16], + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireChangeAesKey_aes_PK( + IN uint8_t *aes_key_ext, + uint32_t aid, + uint8_t aid_key_no_auth, + IN uint8_t new_aes_key[16], + uint8_t aid_key_no, + IN uint8_t old_aes_key[16], + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireChangeDesKey_des_PK( + IN uint8_t *auth_des_key, + uint32_t aid, + uint8_t aid_key_no_auth, + IN uint8_t new_des_key[8], + uint8_t aid_key_no, + IN uint8_t old_des_key[8], + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireChange2K3DesKey_des_PK( + IN uint8_t *auth_des_key, + uint32_t aid, + uint8_t aid_key_no_auth, + IN uint8_t new_2k3des_key[16], + uint8_t aid_key_no, + IN uint8_t old_2k3des_key[16], + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireChangeDesKey_2k3des_PK( + IN uint8_t *auth_des2k_key, + uint32_t aid, + uint8_t aid_key_no_auth, + IN uint8_t new_des_key[8], + uint8_t aid_key_no, + IN uint8_t old_des_key[8], + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireChange2K3DesKey_2k3des_PK( + IN uint8_t *auth_des2k_key, + uint32_t aid, + uint8_t aid_key_no_auth, + IN uint8_t new_2k3des_key[16], + uint8_t aid_key_no, + IN uint8_t old_2k3des_key[16], + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireChange3K3DesKey_3k3des_PK( + IN uint8_t *auth_des3k_key, + uint32_t aid, + uint8_t aid_key_no_auth, + IN uint8_t new_3k3des_key[24], + uint8_t aid_key_no, + IN uint8_t old_3k3des_key[24], + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireChangeMasterKey_PK( + IN uint8_t *auth_key, + uint8_t auth_key_type, + IN uint8_t *new_key, + uint8_t new_key_type, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_SAM_DesfireChangeKey_AesAuth( + uint8_t aes_key_nr, + uint32_t aid, + uint8_t aid_key_no_auth, + uint8_t new_aes_key_nr, + uint8_t aid_key_no, + uint8_t old_aes_key_nr, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_SAM_DesfireChangeKey_3k3desAuth( + uint8_t des3k_key_nr, + uint32_t aid, + uint8_t aid_key_no_auth, + uint8_t new_aes_key_nr, + uint8_t aid_key_no, + uint8_t old_aes_key_nr, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); + +UFR_STATUS DL_API uFR_int_DesfireWriteAesKey( + uint8_t aes_key_no, + IN uint8_t *aes_key); +UFR_STATUS DL_API uFR_int_DesfireWriteKey( + uint8_t key_no, + IN uint8_t *key, + uint8_t key_type); + +UFR_STATUS DL_API uFR_int_DesfireReadStdDataFile( + uint8_t aes_key_nr, + uint32_t aid, + uint8_t aid_key_nr, + uint8_t file_id, + uint16_t offset, + uint16_t data_length, + uint8_t communication_settings, + OUT uint8_t *data, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireReadStdDataFile_aes( + uint8_t aes_key_nr, + uint32_t aid, + uint8_t aid_key_nr, + uint8_t file_id, + uint16_t offset, + uint16_t data_length, + uint8_t communication_settings, + OUT uint8_t *data, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireReadStdDataFile_des( + uint8_t des_key_nr, + uint32_t aid, + uint8_t aid_key_nr, + uint8_t file_id, + uint16_t offset, + uint16_t data_length, + uint8_t communication_settings, + OUT uint8_t *data, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireReadStdDataFile_2k3des( + uint8_t des2k_key_nr, + uint32_t aid, + uint8_t aid_key_nr, + uint8_t file_id, + uint16_t offset, + uint16_t data_length, + uint8_t communication_settings, + OUT uint8_t *data, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireReadStdDataFile_3k3des( + uint8_t des3k_key_nr, + uint32_t aid, + uint8_t aid_key_nr, + uint8_t file_id, + uint16_t offset, + uint16_t data_length, + uint8_t communication_settings, + OUT uint8_t *data, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireReadStdDataFile_PK( + IN uint8_t *aes_key_ext, + uint32_t aid, + uint8_t aid_key_nr, + uint8_t file_id, + uint16_t offset, + uint16_t data_length, + uint8_t communication_settings, + OUT uint8_t *data, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireReadStdDataFile_aes_PK( + IN uint8_t *aes_key_ext, + uint32_t aid, + uint8_t aid_key_nr, + uint8_t file_id, + uint16_t offset, + uint16_t data_length, + uint8_t communication_settings, + OUT uint8_t *data, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireReadStdDataFile_des_PK( + IN uint8_t *des_key_ext, + uint32_t aid, + uint8_t aid_key_nr, + uint8_t file_id, + uint16_t offset, + uint16_t data_length, + uint8_t communication_settings, + OUT uint8_t *data, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireReadStdDataFile_2k3des_PK( + IN uint8_t *des2k_key_ext, + uint32_t aid, + uint8_t aid_key_nr, + uint8_t file_id, + uint16_t offset, + uint16_t data_length, + uint8_t communication_settings, + OUT uint8_t *data, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireReadStdDataFile_3k3des_PK( + IN uint8_t *des3k_key_ext, + uint32_t aid, + uint8_t aid_key_nr, + uint8_t file_id, + uint16_t offset, + uint16_t data_length, + uint8_t communication_settings, + OUT uint8_t *data, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_SAM_DesfireReadStdDataFileAesAuth( + uint8_t aes_key_nr, + uint32_t aid, + uint8_t aid_key_nr, + uint8_t file_id, + uint16_t offset, + uint16_t data_length, + uint8_t communication_settings, + OUT uint8_t *data, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_SAM_DesfireReadStdDataFile3k3desAuth( + uint8_t des3k_key_nr, + uint32_t aid, + uint8_t aid_key_nr, + uint8_t file_id, + uint16_t offset, + uint16_t data_length, + uint8_t communication_settings, + OUT uint8_t *data, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireReadStdDataFile_no_auth( + uint32_t aid, + uint8_t aid_key_nr, + uint8_t file_id, + uint16_t offset, + uint16_t data_length, + uint8_t communication_settings, + OUT uint8_t *data, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); + +UFR_STATUS DL_API uFR_int_DesfireWriteStdDataFile( + uint8_t aes_key_nr, + uint32_t aid, + uint8_t aid_key_nr, + uint8_t file_id, + uint16_t offset, + uint16_t data_length, + uint8_t communication_settings, + IN uint8_t *data, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireWriteStdDataFile_aes( + uint8_t aes_key_nr, + uint32_t aid, + uint8_t aid_key_nr, + uint8_t file_id, + uint16_t offset, + uint16_t data_length, + uint8_t communication_settings, + IN uint8_t *data, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireWriteStdDataFile_3k3des( + uint8_t des3k_key_nr, + uint32_t aid, + uint8_t aid_key_nr, + uint8_t file_id, + uint16_t offset, + uint16_t data_length, + uint8_t communication_settings, + IN uint8_t *data, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireWriteStdDataFile_des( + uint8_t des_key_nr, + uint32_t aid, + uint8_t aid_key_nr, + uint8_t file_id, + uint16_t offset, + uint16_t data_length, + uint8_t communication_settings, + IN uint8_t *data, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireWriteStdDataFile_2k3des( + uint8_t des2k_key_nr, + uint32_t aid, + uint8_t aid_key_nr, + uint8_t file_id, + uint16_t offset, + uint16_t data_length, + uint8_t communication_settings, + IN uint8_t *data, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireWriteStdDataFile_PK( + IN uint8_t *aes_key_ext, + uint32_t aid, + uint8_t aid_key_nr, + uint8_t file_id, + uint16_t offset, + uint16_t data_length, + uint8_t communication_settings, + IN uint8_t *data, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireWriteStdDataFile_aes_PK( + IN uint8_t *aes_key_ext, + uint32_t aid, + uint8_t aid_key_nr, + uint8_t file_id, + uint16_t offset, + uint16_t data_length, + uint8_t communication_settings, + IN uint8_t *data, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireWriteStdDataFile_3k3des_PK( + IN uint8_t *des3k_key_ext, + uint32_t aid, + uint8_t aid_key_nr, + uint8_t file_id, + uint16_t offset, + uint16_t data_length, + uint8_t communication_settings, + IN uint8_t *data, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireWriteStdDataFile_des_PK( + IN uint8_t *des_key_ext, + uint32_t aid, + uint8_t aid_key_nr, + uint8_t file_id, + uint16_t offset, + uint16_t data_length, + uint8_t communication_settings, + IN uint8_t *data, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireWriteStdDataFile_2k3des_PK( + IN uint8_t *des2k_key_ext, + uint32_t aid, + uint8_t aid_key_nr, + uint8_t file_id, + uint16_t offset, + uint16_t data_length, + uint8_t communication_settings, + IN uint8_t *data, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_SAM_DesfireWriteStdDataFileAesAuth( + uint8_t aes_key_nr, + uint32_t aid, + uint8_t aid_key_nr, + uint8_t file_id, + uint16_t offset, + uint16_t data_length, + uint8_t communication_settings, + IN uint8_t *data, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_SAM_DesfireWriteStdDataFile3k3desAuth( + uint8_t des3k_key_nr, + uint32_t aid, + uint8_t aid_key_nr, + uint8_t file_id, + uint16_t offset, + uint16_t data_length, + uint8_t communication_settings, + IN uint8_t *data, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireWriteStdDataFile_no_auth( + uint32_t aid, + uint8_t aid_key_nr, + uint8_t file_id, + uint16_t offset, + uint16_t data_length, + uint8_t communication_settings, + IN uint8_t *data, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); + +UFR_STATUS DL_API uFR_int_DesfireCreateValueFile( + uint8_t aes_key_nr, + uint32_t aid, + uint8_t file_id, + int32_t lower_limit, + int32_t upper_limit, + int32_t value, + uint8_t limited_credit_enabled, + uint8_t read_key_no, + uint8_t write_key_no, + uint8_t read_write_key_no, + uint8_t change_key_no, + uint8_t communication_settings, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireCreateValueFile_aes( + uint8_t aes_key_nr, + uint32_t aid, + uint8_t file_id, + int32_t lower_limit, + int32_t upper_limit, + int32_t value, + uint8_t limited_credit_enabled, + uint8_t read_key_no, + uint8_t write_key_no, + uint8_t read_write_key_no, + uint8_t change_key_no, + uint8_t communication_settings, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireCreateValueFile_des( + uint8_t des_key_nr, + uint32_t aid, + uint8_t file_id, + int32_t lower_limit, + int32_t upper_limit, + int32_t value, + uint8_t limited_credit_enabled, + uint8_t read_key_no, + uint8_t write_key_no, + uint8_t read_write_key_no, + uint8_t change_key_no, + uint8_t communication_settings, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireCreateValueFile_2k3des( + uint8_t des2k_key_nr, + uint32_t aid, + uint8_t file_id, + int32_t lower_limit, + int32_t upper_limit, + int32_t value, + uint8_t limited_credit_enabled, + uint8_t read_key_no, + uint8_t write_key_no, + uint8_t read_write_key_no, + uint8_t change_key_no, + uint8_t communication_settings, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireCreateValueFile_3k3des( + uint8_t des3k_key_nr, + uint32_t aid, + uint8_t file_id, + int32_t lower_limit, + int32_t upper_limit, + int32_t value, + uint8_t limited_credit_enabled, + uint8_t read_key_no, + uint8_t write_key_no, + uint8_t read_write_key_no, + uint8_t change_key_no, + uint8_t communication_settings, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireCreateValueFile_PK( + IN uint8_t *aes_key_ext, + uint32_t aid, + uint8_t file_id, + int32_t lower_limit, + int32_t upper_limit, + int32_t value, + uint8_t limited_credit_enabled, + uint8_t read_key_no, + uint8_t write_key_no, + uint8_t read_write_key_no, + uint8_t change_key_no, + uint8_t communication_settings, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireCreateValueFile_aes_PK( + IN uint8_t *aes_key_ext, + uint32_t aid, + uint8_t file_id, + int32_t lower_limit, + int32_t upper_limit, + int32_t value, + uint8_t limited_credit_enabled, + uint8_t read_key_no, + uint8_t write_key_no, + uint8_t read_write_key_no, + uint8_t change_key_no, + uint8_t communication_settings, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireCreateValueFile_des_PK( + IN uint8_t *des_key_ext, + uint32_t aid, + uint8_t file_id, + int32_t lower_limit, + int32_t upper_limit, + int32_t value, + uint8_t limited_credit_enabled, + uint8_t read_key_no, + uint8_t write_key_no, + uint8_t read_write_key_no, + uint8_t change_key_no, + uint8_t communication_settings, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireCreateValueFile_2k3des_PK( + IN uint8_t *des2k_key_ext, + uint32_t aid, + uint8_t file_id, + int32_t lower_limit, + int32_t upper_limit, + int32_t value, + uint8_t limited_credit_enabled, + uint8_t read_key_no, + uint8_t write_key_no, + uint8_t read_write_key_no, + uint8_t change_key_no, + uint8_t communication_settings, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireCreateValueFile_3k3des_PK( + IN uint8_t *des3k_key_ext, + uint32_t aid, + uint8_t file_id, + int32_t lower_limit, + int32_t upper_limit, + int32_t value, + uint8_t limited_credit_enabled, + uint8_t read_key_no, + uint8_t write_key_no, + uint8_t read_write_key_no, + uint8_t change_key_no, + uint8_t communication_settings, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_SAM_DesfireCreateValueFileAesAuth( + uint8_t aes_key_nr, + uint32_t aid, + uint8_t file_id, + int32_t lower_limit, + int32_t upper_limit, + int32_t value, + uint8_t limited_credit_enabled, + uint8_t read_key_no, + uint8_t write_key_no, + uint8_t read_write_key_no, + uint8_t change_key_no, + uint8_t communication_settings, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_SAM_DesfireCreateValueFile3k3desAuth( + uint8_t des3k_key_nr, + uint32_t aid, + uint8_t file_id, + int32_t lower_limit, + int32_t upper_limit, + int32_t value, + uint8_t limited_credit_enabled, + uint8_t read_key_no, + uint8_t write_key_no, + uint8_t read_write_key_no, + uint8_t change_key_no, + uint8_t communication_settings, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireCreateValueFile_no_auth( + uint32_t aid, + uint8_t file_id, + int32_t lower_limit, + int32_t upper_limit, + int32_t value, + uint8_t limited_credit_enabled, + uint8_t read_key_no, + uint8_t write_key_no, + uint8_t read_write_key_no, + uint8_t change_key_no, + uint8_t communication_settings, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); + +UFR_STATUS DL_API uFR_int_DesfireReadValueFile( + uint8_t aes_key_nr, + uint32_t aid, + uint8_t aid_key_nr, + uint8_t file_id, + uint8_t communication_settings, + VAR int32_t *value, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireReadValueFile_aes( + uint8_t aes_key_nr, + uint32_t aid, + uint8_t aid_key_nr, + uint8_t file_id, + uint8_t communication_settings, + VAR int32_t *value, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireReadValueFile_des( + uint8_t des_key_nr, + uint32_t aid, + uint8_t aid_key_nr, + uint8_t file_id, + uint8_t communication_settings, + VAR int32_t *value, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireReadValueFile_2k3des( + uint8_t des2k_key_nr, + uint32_t aid, + uint8_t aid_key_nr, + uint8_t file_id, + uint8_t communication_settings, + VAR int32_t *value, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireReadValueFile_3k3des( + uint8_t des3k_key_nr, + uint32_t aid, + uint8_t aid_key_nr, + uint8_t file_id, + uint8_t communication_settings, + VAR int32_t *value, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireReadValueFile_PK( + IN uint8_t *aes_key_ext, + uint32_t aid, + uint8_t aid_key_nr, + uint8_t file_id, + uint8_t communication_settings, + VAR int32_t *value, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireReadValueFile_aes_PK( + IN uint8_t *aes_key_ext, + uint32_t aid, + uint8_t aid_key_nr, + uint8_t file_id, + uint8_t communication_settings, + VAR int32_t *value, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireReadValueFile_des_PK( + IN uint8_t *des_key_ext, + uint32_t aid, + uint8_t aid_key_nr, + uint8_t file_id, + uint8_t communication_settings, + VAR int32_t *value, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireReadValueFile_2k3des_PK( + IN uint8_t *des2k_key_ext, + uint32_t aid, + uint8_t aid_key_nr, + uint8_t file_id, + uint8_t communication_settings, + VAR int32_t *value, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireReadValueFile_3k3des_PK( + IN uint8_t *des3k_key_ext, + uint32_t aid, + uint8_t aid_key_nr, + uint8_t file_id, + uint8_t communication_settings, + VAR int32_t *value, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_SAM_DesfireReadValueFileAesAuth( + uint8_t aes_key_nr, + uint32_t aid, + uint8_t aid_key_nr, + uint8_t file_id, + uint8_t communication_settings, + VAR int32_t *value, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_SAM_DesfireReadValueFile3k3desAuth( + uint8_t des3k_key_nr, + uint32_t aid, + uint8_t aid_key_nr, + uint8_t file_id, + uint8_t communication_settings, + VAR int32_t *value, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireReadValueFile_no_auth( + uint32_t aid, + uint8_t aid_key_nr, + uint8_t file_id, + uint8_t communication_settings, + VAR int32_t *value, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); + +UFR_STATUS DL_API uFR_int_DesfireIncreaseValueFile( + uint8_t aes_key_nr, + uint32_t aid, + uint8_t aid_key_nr, + uint8_t file_id, + uint8_t communication_settings, + uint32_t value, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireIncreaseValueFile_aes( + uint8_t aes_key_nr, + uint32_t aid, + uint8_t aid_key_nr, + uint8_t file_id, + uint8_t communication_settings, + uint32_t value, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireIncreaseValueFile_des( + uint8_t des_key_nr, + uint32_t aid, + uint8_t aid_key_nr, + uint8_t file_id, + uint8_t communication_settings, + uint32_t value, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireIncreaseValueFile_2k3des( + uint8_t des2k_key_nr, + uint32_t aid, + uint8_t aid_key_nr, + uint8_t file_id, + uint8_t communication_settings, + uint32_t value, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireIncreaseValueFile_3k3des( + uint8_t des3k_key_nr, + uint32_t aid, + uint8_t aid_key_nr, + uint8_t file_id, + uint8_t communication_settings, + uint32_t value, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireIncreaseValueFile_PK( + IN uint8_t *aes_key_ext, + uint32_t aid, + uint8_t aid_key_nr, + uint8_t file_id, + uint8_t communication_settings, + uint32_t value, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireIncreaseValueFile_aes_PK( + IN uint8_t *aes_key_ext, + uint32_t aid, + uint8_t aid_key_nr, + uint8_t file_id, + uint8_t communication_settings, + uint32_t value, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireIncreaseValueFile_des_PK( + IN uint8_t *des_key_ext, + uint32_t aid, + uint8_t aid_key_nr, + uint8_t file_id, + uint8_t communication_settings, + uint32_t value, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireIncreaseValueFile_2k3des_PK( + IN uint8_t *des2k_key_ext, + uint32_t aid, + uint8_t aid_key_nr, + uint8_t file_id, + uint8_t communication_settings, + uint32_t value, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireIncreaseValueFile_3k3des_PK( + IN uint8_t *des3k_key_ext, + uint32_t aid, + uint8_t aid_key_nr, + uint8_t file_id, + uint8_t communication_settings, + uint32_t value, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_SAM_DesfireIncreaseValueFileAesAuth( + uint8_t aes_key_nr, + uint32_t aid, + uint8_t aid_key_nr, + uint8_t file_id, + uint8_t communication_settings, + uint32_t value, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_SAM_DesfireIncreaseValueFile3k3desAuth( + uint8_t des3k_key_nr, + uint32_t aid, + uint8_t aid_key_nr, + uint8_t file_id, + uint8_t communication_settings, + uint32_t value, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireIncreaseValueFile_no_auth( + uint32_t aid, + uint8_t aid_key_nr, + uint8_t file_id, + uint8_t communication_settings, + uint32_t value, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); + +UFR_STATUS DL_API uFR_int_DesfireDecreaseValueFile( + uint8_t aes_key_nr, + uint32_t aid, + uint8_t aid_key_nr, + uint8_t file_id, + uint8_t communication_settings, + uint32_t value, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireDecreaseValueFile_aes( + uint8_t aes_key_nr, + uint32_t aid, + uint8_t aid_key_nr, + uint8_t file_id, + uint8_t communication_settings, + uint32_t value, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireDecreaseValueFile_des( + uint8_t des_key_nr, + uint32_t aid, + uint8_t aid_key_nr, + uint8_t file_id, + uint8_t communication_settings, + uint32_t value, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireDecreaseValueFile_2k3des( + uint8_t des2k_key_nr, + uint32_t aid, + uint8_t aid_key_nr, + uint8_t file_id, + uint8_t communication_settings, + uint32_t value, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireDecreaseValueFile_3k3des( + uint8_t des3_key_nr, + uint32_t aid, + uint8_t aid_key_nr, + uint8_t file_id, + uint8_t communication_settings, + uint32_t value, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireDecreaseValueFile_PK( + IN uint8_t *aes_key_ext, + uint32_t aid, + uint8_t aid_key_nr, + uint8_t file_id, + uint8_t communication_settings, + uint32_t value, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireDecreaseValueFile_aes_PK( + IN uint8_t *aes_key_ext, + uint32_t aid, + uint8_t aid_key_nr, + uint8_t file_id, + uint8_t communication_settings, + uint32_t value, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireDecreaseValueFile_des_PK( + IN uint8_t *des_key_ext, + uint32_t aid, + uint8_t aid_key_nr, + uint8_t file_id, + uint8_t communication_settings, + uint32_t value, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireDecreaseValueFile_2k3des_PK( + IN uint8_t *des2k_key_ext, + uint32_t aid, + uint8_t aid_key_nr, + uint8_t file_id, + uint8_t communication_settings, + uint32_t value, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireDecreaseValueFile_3k3des_PK( + IN uint8_t *des3k_key_ext, + uint32_t aid, + uint8_t aid_key_nr, + uint8_t file_id, + uint8_t communication_settings, + uint32_t value, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_SAM_DesfireDecreaseValueFileAesAuth( + uint8_t aes_key_nr, + uint32_t aid, + uint8_t aid_key_nr, + uint8_t file_id, + uint8_t communication_settings, + uint32_t value, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_SAM_DesfireDecreaseValueFile3k3desAuth( + uint8_t des3k_key_nr, + uint32_t aid, + uint8_t aid_key_nr, + uint8_t file_id, + uint8_t communication_settings, + uint32_t value, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireDecreaseValueFile_no_auth( + uint32_t aid, + uint8_t aid_key_nr, + uint8_t file_id, + uint8_t communication_settings, + uint32_t value, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); + +UFR_STATUS DL_API uFR_int_DesfireGetApplicationIds( + uint8_t aes_key_nr, + OUT uint32_t *application_ids, + VAR uint8_t *number_of_aplication_ids, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireGetApplicationIds_aes( + uint8_t aes_key_nr, + OUT uint32_t *application_ids, + VAR uint8_t *number_of_aplication_ids, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireGetApplicationIds_des( + uint8_t des_key_nr, + OUT uint32_t *application_ids, + VAR uint8_t *number_of_aplication_ids, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireGetApplicationIds_2k3des( + uint8_t des2k_key_nr, + OUT uint32_t *application_ids, + VAR uint8_t *number_of_aplication_ids, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireGetApplicationIds_3k3des( + uint8_t des3k_key_nr, + OUT uint32_t *application_ids, + VAR uint8_t *number_of_aplication_ids, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_SAM_DesfireGetApplicationIdsAesAuth( + uint8_t aes_key_nr, + OUT uint32_t *application_ids, + VAR uint8_t *number_of_aplication_ids, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_SAM_DesfireGetApplicationIds3k3desAuth( + uint8_t des3k_key_nr, + OUT uint32_t *application_ids, + VAR uint8_t *number_of_aplication_ids, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireGetApplicationIds_PK( + IN uint8_t *aes_key_ext, + OUT uint32_t *application_ids, + VAR uint8_t *number_of_aplication_ids, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireGetApplicationIds_aes_PK( + IN uint8_t *aes_key_ext, + OUT uint32_t *application_ids, + VAR uint8_t *number_of_aplication_ids, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireGetApplicationIds_des_PK( + IN uint8_t *des_key_ext, + OUT uint32_t *application_ids, + VAR uint8_t *number_of_aplication_ids, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireGetApplicationIds_2k3des_PK( + IN uint8_t *des2k_key_ext, + OUT uint32_t *application_ids, + VAR uint8_t *number_of_aplication_ids, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireGetApplicationIds_3k3des_PK( + IN uint8_t *des3k_key_ext, + OUT uint32_t *application_ids, + VAR uint8_t *number_of_aplication_ids, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireGetApplicationIds_no_auth( + OUT uint32_t *application_ids, + VAR uint8_t *number_of_aplication_ids, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); + +UFR_STATUS DL_API uFR_int_DesfireCreateLinearRecordFile_aes( + uint8_t aes_key_nr, + uint32_t aid, uint8_t file_id, + uint32_t record_size, + uint32_t max_rec_no, + uint8_t read_key_no, + uint8_t write_key_no, + uint8_t read_write_key_no, + uint8_t change_key_no, + uint8_t communication_settings, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireCreateLinearRecordFile_des( + uint8_t des_key_nr, + uint32_t aid, uint8_t file_id, + uint32_t record_size, + uint32_t max_rec_no, + uint8_t read_key_no, + uint8_t write_key_no, + uint8_t read_write_key_no, + uint8_t change_key_no, + uint8_t communication_settings, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireCreateLinearRecordFile_2k3des( + uint8_t des2k_key_nr, + uint32_t aid, uint8_t file_id, + uint32_t record_size, + uint32_t max_rec_no, + uint8_t read_key_no, + uint8_t write_key_no, + uint8_t read_write_key_no, + uint8_t change_key_no, + uint8_t communication_settings, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireCreateLinearRecordFile_3k3des( + uint8_t des3k_key_nr, + uint32_t aid, uint8_t file_id, + uint32_t record_size, + uint32_t max_rec_no, + uint8_t read_key_no, + uint8_t write_key_no, + uint8_t read_write_key_no, + uint8_t change_key_no, + uint8_t communication_settings, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_SAM_DesfireCreateLinearRecordFileAesAuth( + uint8_t aes_key_nr, + uint32_t aid, + uint8_t file_id, + uint32_t record_size, + uint32_t max_rec_no, + uint8_t read_key_no, + uint8_t write_key_no, + uint8_t read_write_key_no, + uint8_t change_key_no, + uint8_t communication_settings, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_SAM_DesfireCreateLinearRecordFile3k3desAuth( + uint8_t des3k_key_nr, + uint32_t aid, + uint8_t file_id, + uint32_t record_size, + uint32_t max_rec_no, + uint8_t read_key_no, + uint8_t write_key_no, + uint8_t read_write_key_no, + uint8_t change_key_no, + uint8_t communication_settings, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); + +UFR_STATUS DL_API uFR_int_DesfireCreateLinearRecordFile_aes_PK( + IN uint8_t *aes_key_ext, + uint32_t aid, + uint8_t file_id, + uint32_t record_size, + uint32_t max_rec_no, + uint8_t read_key_no, + uint8_t write_key_no, + uint8_t read_write_key_no, + uint8_t change_key_no, + uint8_t communication_settings, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireCreateLinearRecordFile_des_PK( + IN uint8_t *des_key_ext, + uint32_t aid, + uint8_t file_id, + uint32_t record_size, + uint32_t max_rec_no, + uint8_t read_key_no, + uint8_t write_key_no, + uint8_t read_write_key_no, + uint8_t change_key_no, + uint8_t communication_settings, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireCreateLinearRecordFile_2k3des_PK( + IN uint8_t *des2k_key_ext, + uint32_t aid, + uint8_t file_id, + uint32_t record_size, + uint32_t max_rec_no, + uint8_t read_key_no, + uint8_t write_key_no, + uint8_t read_write_key_no, + uint8_t change_key_no, + uint8_t communication_settings, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireCreateLinearRecordFile_3k3des_PK( + IN uint8_t *des3k_key_ext, + uint32_t aid, + uint8_t file_id, + uint32_t record_size, + uint32_t max_rec_no, + uint8_t read_key_no, + uint8_t write_key_no, + uint8_t read_write_key_no, + uint8_t change_key_no, + uint8_t communication_settings, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireCreateLinearRecordFile_no_auth( + uint32_t aid, + uint8_t file_id, + uint32_t record_size, + uint32_t max_rec_no, + uint8_t read_key_no, + uint8_t write_key_no, + uint8_t read_write_key_no, + uint8_t change_key_no, + uint8_t communication_settings, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); + +UFR_STATUS DL_API uFR_int_DesfireCreateCyclicRecordFile_aes( + uint8_t aes_key_nr, + uint32_t aid, + uint8_t file_id, + uint32_t record_size, + uint32_t max_rec_no, + uint8_t read_key_no, + uint8_t write_key_no, + uint8_t read_write_key_no, + uint8_t change_key_no, + uint8_t communication_settings, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireCreateCyclicRecordFile_des( + uint8_t des_key_nr, + uint32_t aid, + uint8_t file_id, + uint32_t record_size, + uint32_t max_rec_no, + uint8_t read_key_no, + uint8_t write_key_no, + uint8_t read_write_key_no, + uint8_t change_key_no, + uint8_t communication_settings, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireCreateCyclicRecordFile_2k3des( + uint8_t des2k_key_nr, + uint32_t aid, + uint8_t file_id, + uint32_t record_size, + uint32_t max_rec_no, + uint8_t read_key_no, + uint8_t write_key_no, + uint8_t read_write_key_no, + uint8_t change_key_no, + uint8_t communication_settings, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireCreateCyclicRecordFile_3k3des( + uint8_t des3k_key_nr, + uint32_t aid, + uint8_t file_id, + uint32_t record_size, + uint32_t max_rec_no, + uint8_t read_key_no, + uint8_t write_key_no, + uint8_t read_write_key_no, + uint8_t change_key_no, + uint8_t communication_settings, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_SAM_DesfireCreateCyclicRecordFileAesAuth( + uint8_t aes_key_nr, + uint32_t aid, + uint8_t file_id, + uint32_t record_size, + uint32_t max_rec_no, + uint8_t read_key_no, + uint8_t write_key_no, + uint8_t read_write_key_no, + uint8_t change_key_no, + uint8_t communication_settings, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_SAM_DesfireCreateCyclicRecordFile3k3desAuth( + uint8_t des3k_key_nr, + uint32_t aid, + uint8_t file_id, + uint32_t record_size, + uint32_t max_rec_no, + uint8_t read_key_no, + uint8_t write_key_no, + uint8_t read_write_key_no, + uint8_t change_key_no, + uint8_t communication_settings, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireCreateCyclicRecordFile_aes_PK( + IN uint8_t *aes_key_ext, + uint32_t aid, + uint8_t file_id, + uint32_t record_size, + uint32_t max_rec_no, + uint8_t read_key_no, + uint8_t write_key_no, + uint8_t read_write_key_no, + uint8_t change_key_no, + uint8_t communication_settings, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireCreateCyclicRecordFile_des_PK( + IN uint8_t *des_key_ext, + uint32_t aid, + uint8_t file_id, + uint32_t record_size, + uint32_t max_rec_no, + uint8_t read_key_no, + uint8_t write_key_no, + uint8_t read_write_key_no, + uint8_t change_key_no, + uint8_t communication_settings, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireCreateCyclicRecordFile_2k3des_PK( + IN uint8_t *des2k_key_ext, + uint32_t aid, + uint8_t file_id, + uint32_t record_size, + uint32_t max_rec_no, + uint8_t read_key_no, + uint8_t write_key_no, + uint8_t read_write_key_no, + uint8_t change_key_no, + uint8_t communication_settings, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireCreateCyclicRecordFile_3k3des_PK( + IN uint8_t *des3k_key_ext, + uint32_t aid, + uint8_t file_id, + uint32_t record_size, + uint32_t max_rec_no, + uint8_t read_key_no, + uint8_t write_key_no, + uint8_t read_write_key_no, + uint8_t change_key_no, + uint8_t communication_settings, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireCreateCyclicRecordFile_no_auth( + uint32_t aid, + uint8_t file_id, + uint32_t record_size, + uint32_t max_rec_no, + uint8_t read_key_no, + uint8_t write_key_no, + uint8_t read_write_key_no, + uint8_t change_key_no, + uint8_t communication_settings, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); + +UFR_STATUS DL_API uFR_int_DesfireWriteRecord_aes( + uint8_t aes_key_nr, + uint32_t aid, + uint8_t aid_key_nr, + uint8_t file_id, + uint16_t offset, + uint16_t data_length, + uint8_t communication_settings, + IN uint8_t *data, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireWriteRecord_des( + uint8_t des_key_nr, + uint32_t aid, + uint8_t aid_key_nr, + uint8_t file_id, + uint16_t offset, + uint16_t data_length, + uint8_t communication_settings, + IN uint8_t *data, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireWriteRecord_2k3des( + uint8_t des2k_key_nr, + uint32_t aid, + uint8_t aid_key_nr, + uint8_t file_id, + uint16_t offset, + uint16_t data_length, + uint8_t communication_settings, + IN uint8_t *data, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireWriteRecord_3k3des( + uint8_t des3k_key_nr, + uint32_t aid, + uint8_t aid_key_nr, + uint8_t file_id, + uint16_t offset, + uint16_t data_length, + uint8_t communication_settings, + IN uint8_t *data, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_SAM_DesfireWriteRecordAesAuth( + uint8_t aes_key_nr, + uint32_t aid, + uint8_t aid_key_nr, + uint8_t file_id, + uint16_t offset, + uint16_t data_length, + uint8_t communication_settings, + IN uint8_t *data, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_SAM_DesfireWriteRecord3k3desAuth( + uint8_t des3k_key_nr, + uint32_t aid, + uint8_t aid_key_nr, + uint8_t file_id, + uint16_t offset, + uint16_t data_length, + uint8_t communication_settings, + IN uint8_t *data, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireWriteRecord_aes_PK( + IN uint8_t *aes_key_ext, + uint32_t aid, + uint8_t aid_key_nr, + uint8_t file_id, + uint16_t offset, + uint16_t data_length, + uint8_t communication_settings, + IN uint8_t *data, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireWriteRecord_des_PK( + IN uint8_t *des_key_ext, + uint32_t aid, + uint8_t aid_key_nr, + uint8_t file_id, + uint16_t offset, + uint16_t data_length, + uint8_t communication_settings, + IN uint8_t *data, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireWriteRecord_2k3des_PK( + IN uint8_t *des2k_key_ext, + uint32_t aid, + uint8_t aid_key_nr, + uint8_t file_id, + uint16_t offset, + uint16_t data_length, + uint8_t communication_settings, + IN uint8_t *data, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireWriteRecord_3k3des_PK( + IN uint8_t *des3k_key_ext, + uint32_t aid, + uint8_t aid_key_nr, + uint8_t file_id, + uint16_t offset, + uint16_t data_length, + uint8_t communication_settings, + IN uint8_t *data, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireWriteRecord_no_auth( + uint32_t aid, + uint8_t aid_key_nr, + uint8_t file_id, + uint16_t offset, + uint16_t data_length, + uint8_t communication_settings, + IN uint8_t *data, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); + +UFR_STATUS DL_API uFR_int_DesfireReadRecords_aes( + uint8_t aes_key_nr, + uint32_t aid, + uint8_t aid_key_nr, + uint8_t file_id, + uint16_t offset, + uint16_t number_of_records, + uint16_t record_size, + uint8_t communication_settings, + OUT uint8_t *data, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireReadRecords_des( + uint8_t des_key_nr, + uint32_t aid, + uint8_t aid_key_nr, + uint8_t file_id, + uint16_t offset, + uint16_t number_of_records, + uint16_t record_size, + uint8_t communication_settings, + OUT uint8_t *data, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireReadRecords_2k3des( + uint8_t des2k_key_nr, + uint32_t aid, + uint8_t aid_key_nr, + uint8_t file_id, + uint16_t offset, + uint16_t number_of_records, + uint16_t record_size, + uint8_t communication_settings, + OUT uint8_t *data, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireReadRecords_3k3des( + uint8_t des3k_key_nr, + uint32_t aid, + uint8_t aid_key_nr, + uint8_t file_id, + uint16_t offset, + uint16_t number_of_records, + uint16_t record_size, + uint8_t communication_settings, + OUT uint8_t *data, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_SAM_DesfireReadRecordsAesAuth( + uint8_t aes_key_nr, + uint32_t aid, + uint8_t aid_key_nr, + uint8_t file_id, + uint16_t offset, + uint16_t number_of_records, + uint16_t record_size, + uint8_t communication_settings, + OUT uint8_t *data, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_SAM_DesfireReadRecords3k3desAuth( + uint8_t des3k_key_nr, + uint32_t aid, + uint8_t aid_key_nr, + uint8_t file_id, + uint16_t offset, + uint16_t number_of_records, + uint16_t record_size, + uint8_t communication_settings, + OUT uint8_t *data, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireReadRecords_aes_PK( + IN uint8_t *aes_key_ext, + uint32_t aid, + uint8_t aid_key_nr, + uint8_t file_id, + uint16_t offset, + uint16_t number_of_records, + uint16_t record_size, + uint8_t communication_settings, + OUT uint8_t *data, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireReadRecords_des_PK( + IN uint8_t *des_key_ext, + uint32_t aid, + uint8_t aid_key_nr, + uint8_t file_id, + uint16_t offset, + uint16_t number_of_records, + uint16_t record_size, + uint8_t communication_settings, + OUT uint8_t *data, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireReadRecords_2k3des_PK( + IN uint8_t *des2k_key_ext, + uint32_t aid, + uint8_t aid_key_nr, + uint8_t file_id, + uint16_t offset, + uint16_t number_of_records, + uint16_t record_size, + uint8_t communication_settings, + OUT uint8_t *data, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireReadRecords_3k3des_PK( + IN uint8_t *des3k_key_ext, + uint32_t aid, + uint8_t aid_key_nr, + uint8_t file_id, + uint16_t offset, + uint16_t number_of_records, + uint16_t record_size, + uint8_t communication_settings, + OUT uint8_t *data, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireReadRecords_no_auth( + uint32_t aid, + uint8_t aid_key_nr, + uint8_t file_id, + uint16_t offset, + uint16_t number_of_records, + uint16_t record_size, + uint8_t communication_settings, + OUT uint8_t *data, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); + +UFR_STATUS DL_API uFR_int_DesfireClearRecordFile( + uint8_t aes_key_nr, + uint32_t aid, + uint8_t file_id, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireClearRecordFile_aes( + uint8_t aes_key_nr, + uint32_t aid, + uint8_t file_id, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireClearRecordFile_des( + uint8_t des_key_nr, + uint32_t aid, + uint8_t file_id, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireClearRecordFile_2k3des( + uint8_t des2k_key_nr, + uint32_t aid, + uint8_t file_id, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireClearRecordFile_3k3des( + uint8_t des3k_key_nr, + uint32_t aid, + uint8_t file_id, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_SAM_DesfireClearRecordFileAesAuth( + uint8_t aes_key_nr, + uint32_t aid, + uint8_t file_id, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_SAM_DesfireClearRecordFile3k3desAuth( + uint8_t des3k_key_nr, + uint32_t aid, + uint8_t file_id, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireClearRecordFile_PK( + IN uint8_t *aes_key_ext, + uint32_t aid, + uint8_t file_id, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireClearRecordFile_aes_PK( + IN uint8_t *aes_key_ext, + uint32_t aid, + uint8_t file_id, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireClearRecordFile_des_PK( + IN uint8_t *des_key_ext, + uint32_t aid, + uint8_t file_id, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireClearRecordFile_2k3des_PK( + IN uint8_t *des2k_key_ext, + uint32_t aid, + uint8_t file_id, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireClearRecordFile_3k3des_PK( + IN uint8_t *des3k_key_ext, + uint32_t aid, + uint8_t file_id, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireClearRecordFile_no_auth( + uint32_t aid, + uint8_t file_id, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); + +///////////////////////////////////////////////////////////////////// + +UFR_STATUS DL_API GreenLedBlinkingTurnOn(void); +UFR_STATUS DL_API GreenLedBlinkingTurnOff(void); + +///////////////////////////////////////////////////////////////////// + +UFR_STATUS DL_API SetRfAnalogRegistersTypeA(uint8_t ThresholdMinLevel, uint8_t ThresholdCollLevel, + uint8_t RFLevelAmp, uint8_t RxGain, uint8_t RFLevel); +UFR_STATUS DL_API SetRfAnalogRegistersTypeB(uint8_t ThresholdMinLevel, uint8_t ThresholdCollLevel, + uint8_t RFLevelAmp, uint8_t RxGain, uint8_t RFLevel); +UFR_STATUS DL_API SetRfAnalogRegistersISO14443_212(uint8_t ThresholdMinLevel, uint8_t ThresholdCollLevel, + uint8_t RFLevelAmp, uint8_t RxGain, uint8_t RFLevel); +UFR_STATUS DL_API SetRfAnalogRegistersISO14443_424(uint8_t ThresholdMinLevel, uint8_t ThresholdCollLevel, + uint8_t RFLevelAmp, uint8_t RxGain, uint8_t RFLevel); + +UFR_STATUS DL_API SetRfAnalogRegistersTypeADefault(void); +UFR_STATUS DL_API SetRfAnalogRegistersTypeBDefault(void); +UFR_STATUS DL_API SetRfAnalogRegistersISO14443_212Default(void); +UFR_STATUS DL_API SetRfAnalogRegistersISO14443_424Default(void); + +UFR_STATUS DL_API GetRfAnalogRegistersTypeA(VAR uint8_t *ThresholdMinLevel, VAR uint8_t *ThresholdCollLevel, + VAR uint8_t *RFLevelAmp, VAR uint8_t *RxGain, VAR uint8_t *RFLevel); +UFR_STATUS DL_API GetRfAnalogRegistersTypeB(VAR uint8_t *ThresholdMinLevel, VAR uint8_t *ThresholdCollLevel, + VAR uint8_t *RFLevelAmp, VAR uint8_t *RxGain, VAR uint8_t *RFLevel); +UFR_STATUS DL_API GetRfAnalogRegistersISO14443_212(VAR uint8_t *ThresholdMinLevel, VAR uint8_t *ThresholdCollLevel, + VAR uint8_t *RFLevelAmp, VAR uint8_t *RxGain, VAR uint8_t *RFLevel); +UFR_STATUS DL_API GetRfAnalogRegistersISO14443_424(VAR uint8_t *ThresholdMinLevel, VAR uint8_t *ThresholdCollLevel, + VAR uint8_t *RFLevelAmp, VAR uint8_t *RxGain, VAR uint8_t *RFLevel); + +UFR_STATUS DL_API SetRfAnalogRegistersTypeATrans(uint8_t ThresholdMinLevel, uint8_t ThresholdCollLevel, + uint8_t RFLevelAmp, uint8_t RxGain, uint8_t RFLevel, + uint8_t CWGsNOn, uint8_t ModGsNOn, uint8_t CWGsP, + uint8_t CWGsNOff, uint8_t ModGsNOff); +UFR_STATUS DL_API SetRfAnalogRegistersTypeBTrans(uint8_t ThresholdMinLevel, uint8_t ThresholdCollLevel, + uint8_t RFLevelAmp, uint8_t RxGain, uint8_t RFLevel, + uint8_t CWGsNOn, uint8_t ModGsNOn, uint8_t CWGsP, uint8_t ModGsP); + +UFR_STATUS DL_API GetRfAnalogRegistersTypeATrans(VAR uint8_t *ThresholdMinLevel, VAR uint8_t *ThresholdCollLevel, + VAR uint8_t *RFLevelAmp, VAR uint8_t *RxGain, VAR uint8_t *RFLevel, + VAR uint8_t *CWGsNOn, VAR uint8_t *ModGsNOn, VAR uint8_t *CWGsP, + VAR uint8_t *CWGsNOff, VAR uint8_t *ModGsNOff); +UFR_STATUS DL_API GetRfAnalogRegistersTypeBTrans(VAR uint8_t *ThresholdMinLevel, VAR uint8_t *ThresholdCollLevel, + VAR uint8_t *RFLevelAmp, VAR uint8_t *RxGain, VAR uint8_t *RFLevel, + VAR uint8_t *CWGsNOn, VAR uint8_t *ModGsNOn, VAR uint8_t *CWGsP, VAR uint8_t *ModGsP); + +UFR_STATUS DL_API CheckBootFirmware(VAR uint8_t *exec_location); +UFR_STATUS DL_API FastFlashCheck(void); +UFR_STATUS DL_API DefaultBaudrateFlashCheck(void); +UFR_STATUS DL_API GetReaderParameters(OUT uint8_t *mui, OUT uint8_t *serial_nr, + VAR uint8_t *hw_type, VAR uint8_t *hw_ver, VAR uint8_t *device_type, + VAR uint8_t *fw_ver_major, VAR uint8_t *fw_ver_minor, VAR uint8_t *fw_ver_build); + +//SAM +UFR_STATUS DL_API SAM_get_version_raw(OUT uint8_t *data, + VAR uint8_t *length); +UFR_STATUS DL_API SAM_get_version(VAR SAM_HW_TYPE *sam_type, + OUT uint8_t *sam_uid); +UFR_STATUS DL_API SAM_get_key_entry_raw(uint8_t key_no, + OUT uint8_t *key_entry, + VAR uint8_t *key_length, + OUT uint8_t *apdu_sw); +UFR_STATUS DL_API SAM_authenticate_host_no_div_des(uint8_t key_no, + uint8_t key_v, + IN uint8_t *des_key); +UFR_STATUS DL_API SAM_pre_pesonalization_master_AES128_key(IN uint8_t *aes_key_ver_a, uint8_t ver_a, IN uint8_t *aes_key_ver_b, uint8_t ver_b, + IN uint8_t *aes_key_ver_c, uint8_t ver_c, OUT uint8_t *apdu_sw); +UFR_STATUS DL_API SAM_pre_personalization_switch_to_AV2_mode(IN uint8_t *master_aes_key, uint8_t key_version, OUT uint8_t *apdu_sw); +UFR_STATUS DL_API SAM_authenticate_host_AV2(IN uint8_t *master_aes_key, uint8_t key_nr, uint8_t key_version, uint8_t host_mode, OUT uint8_t *apdu_sw); + +UFR_STATUS DL_API SAM_change_key_entry_mifare_AV2_plain_one_key(uint8_t key_entry_no, IN uint8_t *keyA, IN uint8_t *keyB, + uint8_t key_no_CEK, uint8_t key_v_CEK, uint8_t ref_no_KUC, OUT uint8_t *apdu_sw); +UFR_STATUS DL_API SAM_change_key_entry_AES_AV2_plain_one_key(uint8_t key_entry_no, IN uint8_t *key, + uint8_t key_no_CEK, uint8_t key_v_CEK, uint8_t ref_no_KUC, OUT uint8_t *apdu_sw); +UFR_STATUS DL_API SAM_change_key_entry_3K3DES_AV2_plain_one_key(uint8_t key_entry_no, IN uint8_t *key, + uint8_t key_no_CEK, uint8_t key_v_CEK, uint8_t ref_no_KUC, OUT uint8_t *apdu_sw); +UFR_STATUS DL_API SAM_change_key_entry_2K3DES_AV2_plain_one_key(uint8_t key_entry_no, IN uint8_t *key, + uint8_t key_no_CEK, uint8_t key_v_CEK, uint8_t ref_no_KUC, OUT uint8_t *apdu_sw); +UFR_STATUS DL_API SAM_change_key_entry_aes_AV2_plain_host_key(uint8_t key_entry_no, + IN uint8_t *aes_key_ver_a, uint8_t ver_a, IN uint8_t *aes_key_ver_b, uint8_t ver_b, + IN uint8_t *aes_key_ver_c, uint8_t ver_c, + uint8_t key_no_CEK, uint8_t key_v_CEK, uint8_t ref_no_KUC, + uint8_t sam_lock_unlock, OUT uint8_t *apdu_sw); +UFR_STATUS DL_API WriteSamUnlockKey(uint8_t key_no, uint8_t key_ver, IN uint8_t *aes_key); + +//MIFARE PLUS +UFR_STATUS DL_API MFP_WritePerso(uint16_t address, IN uint8_t *data); +UFR_STATUS DL_API MFP_CommitPerso(void); +UFR_STATUS DL_API MFP_PersonalizationMinimal(IN uint8_t *card_master_key, IN uint8_t *card_config_key, + IN uint8_t *level_2_switch_key, IN uint8_t *level_3_switch_key, IN uint8_t *level_1_auth_key, + IN uint8_t *select_vc_key, IN uint8_t *prox_chk_key, IN uint8_t *vc_poll_enc_key, IN uint8_t *vc_poll_mac_key); +UFR_STATUS DL_API MFP_SwitchToSecurityLevel3(uint8_t key_index); +UFR_STATUS DL_API MFP_SwitchToSecurityLevel3_PK(IN uint8_t *aes_key); +UFR_STATUS DL_API MFP_AesAuthSecurityLevel1(uint8_t key_index); +UFR_STATUS DL_API MFP_AesAuthSecurityLevel1_PK(IN uint8_t *aes_key); +UFR_STATUS DL_API MFP_ChangeMasterKey(uint8_t key_index, IN uint8_t *new_key); +UFR_STATUS DL_API MFP_ChangeMasterKey_PK(IN uint8_t *old_key, IN uint8_t *new_key); +UFR_STATUS DL_API MFP_ChangeConfigurationKey(uint8_t key_index, IN uint8_t *new_key); +UFR_STATUS DL_API MFP_ChangeConfigurationKey_PK(IN uint8_t *old_key, IN uint8_t *new_key); +UFR_STATUS DL_API MFP_ChangeConfigurationKeySamKey(uint8_t key_index, uint8_t new_key_index); + +UFR_STATUS DL_API MFP_FieldConfigurationSet(uint8_t configuration_key_index, uint8_t rid_use, uint8_t prox_check_use); +UFR_STATUS DL_API MFP_FieldConfigurationSet_PK(IN uint8_t *configuration_key, uint8_t rid_use, uint8_t prox_check_use); +UFR_STATUS DL_API MFP_FieldConfigurationSetSamKey(uint8_t configuration_key_index, uint8_t rid_use, uint8_t prox_check_use); +UFR_STATUS DL_API MFP_ChangeSectorKey(uint8_t sector_nr, uint8_t auth_mode, uint8_t key_index, IN uint8_t *new_key); +UFR_STATUS DL_API MFP_ChangeSectorKey_PK(uint8_t sector_nr, uint8_t auth_mode, IN uint8_t *old_key, IN uint8_t *new_key); +UFR_STATUS DL_API MFP_GetUid(uint8_t key_index_vc_poll_enc_key, uint8_t key_index_vc_poll_mac_key, OUT uint8_t *uid, VAR uint8_t *uid_len); +UFR_STATUS DL_API MFP_GetUidSamKey(uint8_t key_index_vc_poll_enc_key, uint8_t key_index_vc_poll_mac_key, OUT uint8_t *uid, VAR uint8_t *uid_len); +UFR_STATUS DL_API MFP_GetUid_PK(IN uint8_t *vc_poll_enc_key, IN uint8_t *vc_poll_mac_key, OUT uint8_t *uid, VAR uint8_t *uid_len); +UFR_STATUS DL_API MFP_ChangeVcPollingEncKey(uint8_t configuration_key_index, IN uint8_t *new_key); +UFR_STATUS DL_API MFP_ChangeVcPollingEncKeySamKey(uint8_t configuration_key_index, uint8_t new_key_index); +UFR_STATUS DL_API MFP_ChangeVcPollingEncKey_PK(IN uint8_t *configuration_key, IN uint8_t *new_key); +UFR_STATUS DL_API MFP_ChangeVcPollingMacKey(uint8_t configuration_key_index, IN uint8_t *new_key); +UFR_STATUS DL_API MFP_ChangeVcPollingMacKeySamKey(uint8_t configuration_key_index, uint8_t new_key_index); +UFR_STATUS DL_API MFP_ChangeVcPollingMacKey_PK(IN uint8_t *configuration_key, IN uint8_t *new_key); + +//ULTRALIGHT C +UFR_STATUS DL_API ULC_ExternalAuth_PK(IN uint8_t *key); +UFR_STATUS DL_API ULC_write_3des_key_no_auth(IN uint8_t *new_3des_key); +UFR_STATUS DL_API ULC_write_3des_key_factory_key(IN uint8_t *new_3des_key); +UFR_STATUS DL_API ULC_write_3des_key(IN uint8_t *new_3des_key, IN uint8_t *old_3des_key); + +/** + * BalanceGet() gets balance of the AIS SDK formated cards + * + * @param auth_mode only MIFARE_AUTHENT1A supported for now + * @param auth_value pointer to the Crypto1 6-bytes key array, for now + * @param credit how many credits is on the card + * + * @return execution status + */ +UFR_STATUS DL_API BalanceGet(uint32_t auth_mode, IN void *auth_value, VAR int32_t *credit); + +/** + * BalanceSet() sets balance of the AIS SDK formated cards + * + * @param auth_mode only MIFARE_AUTHENT1A supported for now + * @param auth_value pointer to the Crypto1 6-bytes key array, for now + * @param credit new credit balance + * + * @return execution status + */ +UFR_STATUS DL_API BalanceSet(uint32_t auth_mode, IN void *auth_value, int32_t credit); + +//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ +// XXX: Support for multiple readers with same DLL +//############################################################################# +//############################################################################# +//############################################################################# +//############################################################################# +//############################################################################# +//############################################################################# +//############################################################################# +//############################################################################# +//############################################################################# +//############################################################################# +//################# M U L T I R E A D E R S U P P O R T ################# +//################# M U L T I R E A D E R S U P P O R T ################# +//################# M U L T I R E A D E R S U P P O R T ################# +//################# M U L T I R E A D E R S U P P O R T ################# +//################# M U L T I R E A D E R S U P P O R T ################# +//################# M U L T I R E A D E R S U P P O R T ################# +//################# M U L T I R E A D E R S U P P O R T ################# +//################# M U L T I R E A D E R S U P P O R T ################# +//################# M U L T I R E A D E R S U P P O R T ################# +//################# M U L T I R E A D E R S U P P O R T ################# +//############################################################################# +//############################################################################# +//############################################################################# +//############################################################################# +//############################################################################# +//############################################################################# +//############################################################################# +//############################################################################# +//############################################################################# +//############################################################################# + +//-------------------------------------------------------------------------------------------------- +/** + * This is the main function of the multi-reader support. + * ReaderList_UpdateAndGetCount() scan all communication ports for compatible devices. + * Function probes opened readers if still connected, if not close and mark them handles for deletion. + * If some device is disconnected from system this function should remove its handle. + * + * @param NumberOfDevices + * @return status of execution + */ +UFR_STATUS DL_API ReaderList_UpdateAndGetCount(VAR int32_t * NumberOfDevices); + +/** + * Function for getting all relevant information about connected readers. + * + * Eg. If you have tree connected readers, detected by ReaderList_UpdateAndGetCount(), + * you should call this function tree times. + * + * @param DeviceHandle + * @param DeviceSerialNumber + * @param DeviceType + * @param DeviceFWver + * @param DeviceCommID + * @param DeviceCommSpeed + * @param DeviceCommFTDISerial + * @param DeviceCommFTDIDescription + * @param DeviceIsOpened + * @param DeviceStatus + * @return + */ +UFR_STATUS DL_API ReaderList_GetInformation( // + VAR UFR_HANDLE *DeviceHandle, //// assigned Handle + OUT c_string *DeviceSerialNumber, //// device serial number + VAR int *DeviceType, //// device type - device identification in AIS database + VAR int *DeviceFWver, //// version of firmware + VAR int *DeviceCommID, //// device identification number (master) + VAR int *DeviceCommSpeed, //// communication speed + OUT c_string *DeviceCommFTDISerial, //// FTDI COM port identification + OUT c_string *DeviceCommFTDIDescription, //// FTDI COM port description + VAR int *DeviceIsOpened, //// is Device opened + VAR int *DeviceStatus //// actual device status +); + +/** + * If the handle exists in the list of opened devices, + * function would try to close communication port and destroy the handle. + * ( ReaderList_UpdateAndGetCount() will do that automatically in next execution) + * + * Good when you identify that the reader is no longer connected, and want to release the handle. + * + * @param DeviceHandle the handle that will be destroyed + * @return + */ +UFR_STATUS DL_API ReaderList_Destroy(UFR_HANDLE DeviceHandle); + +// XXX: Obsolete functions - remain for backward compatibility +UFR_STATUS DL_API ReaderList_GetSerialByIndex(int32_t DeviceIndex, VAR uint32_t *lpulSerialNumber); +UFR_STATUS DL_API ReaderList_GetSerialDescriptionByIndex(int32_t DeviceIndex, OUT uint8_t pSerialDescription[8]); +UFR_STATUS DL_API ReaderList_GetTypeByIndex(int32_t DeviceIndex, VAR uint32_t *lpulReaderType); +UFR_STATUS DL_API ReaderList_GetFTDISerialByIndex(int32_t DeviceIndex, OUT char ** Device_Serial); +UFR_STATUS DL_API ReaderList_GetFTDIDescriptionByIndex(int32_t DeviceIndex, OUT char ** Device_Description); +UFR_STATUS DL_API ReaderList_OpenByIndex(const int32_t DeviceIndex, VAR UFR_HANDLE *hndUFR); +UFR_STATUS DL_API ReaderList_OpenBySerial(const char Device_SN[16], VAR UFR_HANDLE *hndUFR); // ! not implemented + +//-------------------------------------------------------------------------------------------------- + +// open first/next Reader and return handle - better to use ReaderList_OpenByIndex() +UFR_STATUS DL_API ReaderOpenM(VAR UFR_HANDLE *hndUFR); + +UFR_STATUS DL_API ReaderResetM(UFR_HANDLE hndUFR); + +UFR_STATUS DL_API ReaderCloseM(UFR_HANDLE hndUFR); + +UFR_STATUS DL_API ReaderSoftRestartM(UFR_HANDLE hndUFR); + +UFR_STATUS DL_API GetReaderTypeM(UFR_HANDLE hndUFR, + IN uint32_t *lpulReaderType); + +UFR_STATUS DL_API GetReaderSerialNumberM(UFR_HANDLE hndUFR, + IN uint32_t *lpulSerialNumber); + +UFR_STATUS DL_API ReaderStillConnectedM(UFR_HANDLE hndUFR, + VAR uint32_t *connected); + +UFR_STATUS DL_API ReaderKeyWriteM(UFR_HANDLE hndUFR, + IN const uint8_t *aucKey, + uint8_t ucKeyIndex); + +UFR_STATUS DL_API ReaderKeysLockM(UFR_HANDLE hndUFR, + IN const uint8_t *password); + +UFR_STATUS DL_API ReaderKeysUnlockM(UFR_HANDLE hndUFR, + IN const uint8_t *password); + +UFR_STATUS DL_API ReaderUISignalM(UFR_HANDLE hndUFR, + uint8_t light_signal_mode, + uint8_t beep_signal_mode); + +UFR_STATUS DL_API ReadUserDataM(UFR_HANDLE hndUFR, + OUT uint8_t *aucData); + +UFR_STATUS DL_API WriteUserDataM(UFR_HANDLE hndUFR, + IN const uint8_t *aucData); + +UFR_STATUS DL_API GetCardIdM(UFR_HANDLE hndUFR, + VAR uint8_t *lpucCardType, + OUT uint32_t *lpulCardSerial); + +UFR_STATUS DL_API BlockReadM(UFR_HANDLE hndUFR, + OUT uint8_t *data, + uint8_t block_address, + uint8_t auth_mode, + uint8_t key_index); +UFR_STATUS DL_API BlockReadSamKeyM(UFR_HANDLE hndUFR, + OUT uint8_t *data, + uint8_t block_address, + uint8_t auth_mode, uint8_t key_index); + +UFR_STATUS DL_API BlockWriteM(UFR_HANDLE hndUFR, + IN const uint8_t *data, + uint8_t block_address, + uint8_t auth_mode, + uint8_t key_index); +UFR_STATUS DL_API BlockWriteSamKeyM(UFR_HANDLE hndUFR, + IN const uint8_t *data, + uint8_t block_address, + uint8_t auth_mode, + uint8_t key_index); + +UFR_STATUS DL_API BlockInSectorReadM(UFR_HANDLE hndUFR, + OUT uint8_t *data, + uint8_t sector_address, + uint8_t block_in_sector_address, + uint8_t auth_mode, + uint8_t key_index); +UFR_STATUS DL_API BlockInSectorReadSamKeyM(UFR_HANDLE hndUFR, + OUT uint8_t *data, + uint8_t sector_address, + uint8_t block_in_sector_address, + uint8_t auth_mode, + uint8_t key_index); + + +UFR_STATUS DL_API BlockInSectorWriteM(UFR_HANDLE hndUFR, + IN const uint8_t *data, + uint8_t sector_address, + uint8_t block_in_sector_address, + uint8_t auth_mode, + uint8_t key_index); +UFR_STATUS DL_API BlockInSectorWriteSamKeyM(UFR_HANDLE hndUFR, + IN const uint8_t *data, + uint8_t sector_address, + uint8_t block_in_sector_address, + uint8_t auth_mode, + uint8_t key_index); + +UFR_STATUS DL_API LinearReadM(UFR_HANDLE hndUFR, + OUT uint8_t *aucData, + uint16_t usLinearAddress, + uint16_t usDataLength, + VAR uint16_t *lpusBytesReturned, + uint8_t ucKeyMode, + uint8_t ucReaderKeyIndex); +UFR_STATUS DL_API LinearReadSamKeyM(UFR_HANDLE hndUFR, + OUT uint8_t *aucData, + uint16_t usLinearAddress, + uint16_t usDataLength, + VAR uint16_t *lpusBytesReturned, + uint8_t ucKeyMode, + uint8_t ucReaderKeyIndex); + +UFR_STATUS DL_API LinRowReadM(UFR_HANDLE hndUFR, + OUT uint8_t *aucData, + uint16_t usLinearAddress, + uint16_t usDataLength, + VAR uint16_t *lpusBytesReturned, + uint8_t ucKeyMode, + uint8_t ucReaderKeyIndex); + +UFR_STATUS DL_API LinearWriteM(UFR_HANDLE hndUFR, + IN const uint8_t *aucData, + uint16_t usLinearAddress, + uint16_t usDataLength, + VAR uint16_t *lpusBytesWritten, + uint8_t ucKeyMode, + uint8_t ucReaderKeyIndex); +UFR_STATUS DL_API LinearWriteSamKeyM(UFR_HANDLE hndUFR, + IN const uint8_t *aucData, + uint16_t usLinearAddress, + uint16_t usDataLength, + VAR uint16_t *lpusBytesWritten, + uint8_t ucKeyMode, + uint8_t ucReaderKeyIndex); + +UFR_STATUS DL_API LinearFormatCardM(UFR_HANDLE hndUFR, + IN const uint8_t *new_key_A, + uint8_t blocks_access_bits, + uint8_t sector_trailers_access_bits, + uint8_t sector_trailers_byte9, + IN const uint8_t *new_key_B, + VAR uint8_t *lpucSectorsFormatted, + uint8_t auth_mode, + uint8_t key_index); + + +UFR_STATUS DL_API SectorTrailerWriteM(UFR_HANDLE hndUFR, + uint8_t addressing_mode, + uint8_t address, + IN const uint8_t *new_key_A, + uint8_t block0_access_bits, + uint8_t block1_access_bits, + uint8_t block2_access_bits, + uint8_t sector_trailer_access_bits, + uint8_t sector_trailer_byte9, + IN const uint8_t *new_key_B, + uint8_t auth_mode, + uint8_t key_index); + +UFR_STATUS DL_API SectorTrailerWriteUnsafeM(UFR_HANDLE hndUFR, + uint8_t addressing_mode, + uint8_t address, + IN const uint8_t *sector_trailer, + uint8_t auth_mode, + uint8_t key_index); + +UFR_STATUS DL_API ValueBlockReadM(UFR_HANDLE hndUFR, + VAR int32_t *value, + VAR uint8_t *value_addr, + uint8_t block_address, + uint8_t auth_mode, + uint8_t key_index); +UFR_STATUS DL_API ValueBlockReadSamKeyM(UFR_HANDLE hndUFR, + VAR int32_t *value, + VAR uint8_t *value_addr, + uint8_t block_address, + uint8_t auth_mode, + uint8_t key_index); + +UFR_STATUS DL_API ValueBlockInSectorReadM(UFR_HANDLE hndUFR, + VAR int32_t *value, + VAR uint8_t *value_addr, + uint8_t sector_address, + uint8_t block_in_sector_address, + uint8_t auth_mode, + uint8_t key_index); +UFR_STATUS DL_API ValueBlockInSectorReadSamKeyM(UFR_HANDLE hndUFR, + VAR int32_t *value, + VAR uint8_t *value_addr, + uint8_t sector_address, + uint8_t block_in_sector_address, + uint8_t auth_mode, + uint8_t key_index); + +UFR_STATUS DL_API ValueBlockWriteM(UFR_HANDLE hndUFR, + int32_t value, + uint8_t value_addr, + uint8_t block_address, + uint8_t auth_mode, + uint8_t key_index); +UFR_STATUS DL_API ValueBlockWriteSamKeyM(UFR_HANDLE hndUFR, int32_t value, + uint8_t value_addr, + uint8_t block_address, + uint8_t auth_mode, + uint8_t key_index); + +UFR_STATUS DL_API ValueBlockInSectorWriteM(UFR_HANDLE hndUFR, + int32_t value, + uint8_t value_addr, + uint8_t sector_address, + uint8_t block_in_sector_address, + uint8_t auth_mode, + uint8_t key_index); +UFR_STATUS DL_API ValueBlockInSectorWriteSamKeyM(UFR_HANDLE hndUFR, int32_t value, + uint8_t value_addr, + uint8_t sector_address, + uint8_t block_in_sector_address, + uint8_t auth_mode, + uint8_t key_index); + +UFR_STATUS DL_API ValueBlockIncrementM(UFR_HANDLE hndUFR, + int32_t increment_value, + uint8_t block_address, + uint8_t auth_mode, + uint8_t key_index); +UFR_STATUS DL_API ValueBlockIncrementSamKeyM(UFR_HANDLE hndUFR, int32_t increment_value, + uint8_t block_address, + uint8_t auth_mode, + uint8_t key_index); + + +UFR_STATUS DL_API ValueBlockInSectorIncrementM(UFR_HANDLE hndUFR, + int32_t increment_value, + uint8_t sector_address, + uint8_t block_in_sector_address, + uint8_t auth_mode, + uint8_t key_index); +UFR_STATUS DL_API ValueBlockInSectorIncrementSamKeyM(UFR_HANDLE hndUFR, int32_t increment_value, + uint8_t sector_address, + uint8_t block_in_sector_address, + uint8_t auth_mode, + uint8_t key_index); + +UFR_STATUS DL_API ValueBlockDecrementM(UFR_HANDLE hndUFR, + int32_t decrement_value, + uint8_t block_address, + uint8_t auth_mode, + uint8_t key_index); +UFR_STATUS DL_API ValueBlockDecrementSamKeyM(UFR_HANDLE hndUFR, int32_t decrement_value, + uint8_t block_address, + uint8_t auth_mode, + uint8_t key_index); + + +UFR_STATUS DL_API ValueBlockInSectorDecrementM(UFR_HANDLE hndUFR, + int32_t decrement_value, + uint8_t sector_address, + uint8_t block_in_sector_address, + uint8_t auth_mode, + uint8_t key_index); +UFR_STATUS DL_API ValueBlockInSectorDecrementSamKeyM(UFR_HANDLE hndUFR, int32_t decrement_value, + uint8_t sector_address, + uint8_t block_in_sector_address, + uint8_t auth_mode, + uint8_t key_index); + +UFR_STATUS DL_API BlockRead_AKM1M(UFR_HANDLE hndUFR, + OUT uint8_t *data, + uint8_t block_address, + uint8_t auth_mode); + +UFR_STATUS DL_API BlockWrite_AKM1M(UFR_HANDLE hndUFR, + IN const uint8_t *data, + uint8_t block_address, + uint8_t auth_mode); +UFR_STATUS DL_API BlockInSectorRead_AKM1M(UFR_HANDLE hndUFR, + OUT uint8_t *data, + uint8_t sector_address, + uint8_t block_in_sector_address, + uint8_t auth_mode); +UFR_STATUS DL_API BlockInSectorWrite_AKM1M(UFR_HANDLE hndUFR, + IN const uint8_t *data, + uint8_t sector_address, + uint8_t block_in_sector_address, + uint8_t auth_mode); +UFR_STATUS DL_API LinearRead_AKM1M(UFR_HANDLE hndUFR, + OUT uint8_t *data, + uint16_t linear_address, + uint16_t length, + VAR uint16_t *bytes_returned, + uint8_t auth_mode); +UFR_STATUS DL_API LinRowRead_AKM1M(UFR_HANDLE hndUFR, + OUT uint8_t *data, + uint16_t linear_address, + uint16_t length, + VAR uint16_t *bytes_returned, + uint8_t auth_mode); +UFR_STATUS DL_API LinearWrite_AKM1M(UFR_HANDLE hndUFR, + IN const uint8_t *data, + uint16_t linear_address, + uint16_t length, + VAR uint16_t *bytes_written, + uint8_t auth_mode); +UFR_STATUS DL_API LinearFormatCard_AKM1M(UFR_HANDLE hndUFR, + IN const uint8_t *new_key_A, + uint8_t blocks_access_bits, + uint8_t sector_trailers_access_bits, + uint8_t sector_trailers_byte9, + IN const uint8_t *new_key_B, + VAR uint8_t *lpucSectorsFormatted, + uint8_t auth_mode); + +UFR_STATUS DL_API SectorTrailerWrite_AKM1M(UFR_HANDLE hndUFR, + uint8_t addressing_mode, + uint8_t address, + IN const uint8_t *new_key_A, + uint8_t block0_access_bits, + uint8_t block1_access_bits, + uint8_t block2_access_bits, + uint8_t sector_trailer_access_bits, + uint8_t sector_trailer_byte9, + IN const uint8_t *new_key_B, + uint8_t auth_mode); + +UFR_STATUS DL_API SectorTrailerWriteUnsafe_AKM1M(UFR_HANDLE hndUFR, + uint8_t addressing_mode, + uint8_t address, + IN const uint8_t *sector_trailer, + uint8_t auth_mode); + +UFR_STATUS DL_API ValueBlockRead_AKM1M(UFR_HANDLE hndUFR, + VAR int32_t *value, + VAR uint8_t *value_addr, + uint8_t block_address, + uint8_t auth_mode); + +UFR_STATUS DL_API ValueBlockInSectorRead_AKM1M(UFR_HANDLE hndUFR, + VAR int32_t *value, + VAR uint8_t *value_addr, + uint8_t sector_address, + uint8_t block_in_sector_address, + uint8_t auth_mode); + +UFR_STATUS DL_API ValueBlockWrite_AKM1M(UFR_HANDLE hndUFR, + int32_t value, + uint8_t value_addr, + uint8_t block_address, + uint8_t auth_mode); + +UFR_STATUS DL_API ValueBlockInSectorWrite_AKM1M(UFR_HANDLE hndUFR, + int32_t value, + uint8_t value_addr, + uint8_t sector_address, + uint8_t block_in_sector_address, + uint8_t auth_mode); + +UFR_STATUS DL_API ValueBlockIncrement_AKM1M(UFR_HANDLE hndUFR, + int32_t increment_value, + uint8_t block_address, + uint8_t auth_mode); + +UFR_STATUS DL_API ValueBlockInSectorIncrement_AKM1M(UFR_HANDLE hndUFR, + int32_t increment_value, + uint8_t sector_address, + uint8_t block_in_sector_address, + uint8_t auth_mode); + +UFR_STATUS DL_API ValueBlockDecrement_AKM1M(UFR_HANDLE hndUFR, + int32_t decrement_value, + uint8_t block_address, + uint8_t auth_mode); + +UFR_STATUS DL_API ValueBlockInSectorDecrement_AKM1M(UFR_HANDLE hndUFR, + int32_t decrement_value, + uint8_t sector_address, + uint8_t block_in_sector_address, + uint8_t auth_mode); + +UFR_STATUS DL_API BlockRead_AKM2M(UFR_HANDLE hndUFR, + OUT uint8_t *data, + uint8_t block_address, + uint8_t auth_mode); + +UFR_STATUS DL_API BlockWrite_AKM2M(UFR_HANDLE hndUFR, + IN const uint8_t *data, + uint8_t block_address, + uint8_t auth_mode); + +UFR_STATUS DL_API BlockInSectorRead_AKM2M(UFR_HANDLE hndUFR, + OUT uint8_t *data, + uint8_t sector_address, + uint8_t block_in_sector_address, + uint8_t auth_mode); + +UFR_STATUS DL_API BlockInSectorWrite_AKM2M(UFR_HANDLE hndUFR, + IN const uint8_t *data, + uint8_t sector_address, + uint8_t block_in_sector_address, + uint8_t auth_mode); + +UFR_STATUS DL_API LinearRead_AKM2M(UFR_HANDLE hndUFR, + OUT uint8_t *data, + uint16_t linear_address, + uint16_t length, + VAR uint16_t *bytes_returned, + uint8_t auth_mode); + +UFR_STATUS DL_API LinRowRead_AKM2M(UFR_HANDLE hndUFR, + OUT uint8_t *data, + uint16_t linear_address, + uint16_t length, + VAR uint16_t *bytes_returned, + uint8_t auth_mode); + +UFR_STATUS DL_API LinearWrite_AKM2M(UFR_HANDLE hndUFR, + IN const uint8_t *data, + uint16_t linear_address, + uint16_t length, + VAR uint16_t *bytes_written, + uint8_t auth_mode); + +UFR_STATUS DL_API LinearFormatCard_AKM2M(UFR_HANDLE hndUFR, + IN const uint8_t *new_key_A, + uint8_t blocks_access_bits, + uint8_t sector_trailers_access_bits, + uint8_t sector_trailers_byte9, + IN const uint8_t *new_key_B, + VAR uint8_t *lpucSectorsFormatted, + uint8_t auth_mode); + +UFR_STATUS DL_API SectorTrailerWrite_AKM2M(UFR_HANDLE hndUFR, + uint8_t addressing_mode, + uint8_t address, + IN const uint8_t *new_key_A, + uint8_t block0_access_bits, + uint8_t block1_access_bits, + uint8_t block2_access_bits, + uint8_t sector_trailer_access_bits, + uint8_t sector_trailer_byte9, + IN const uint8_t *new_key_B, + uint8_t auth_mode); + +UFR_STATUS DL_API SectorTrailerWriteUnsafe_AKM2M(UFR_HANDLE hndUFR, + uint8_t addressing_mode, + uint8_t address, + IN const uint8_t *sector_trailer, + uint8_t auth_mode); + +UFR_STATUS DL_API ValueBlockRead_AKM2M(UFR_HANDLE hndUFR, + VAR int32_t *value, + VAR uint8_t *value_addr, + uint8_t block_address, + uint8_t auth_mode); + +UFR_STATUS DL_API ValueBlockInSectorRead_AKM2M(UFR_HANDLE hndUFR, + VAR int32_t *value, + VAR uint8_t *value_addr, + uint8_t sector_address, + uint8_t block_in_sector_address, + uint8_t auth_mode); + +UFR_STATUS DL_API ValueBlockWrite_AKM2M(UFR_HANDLE hndUFR, + int32_t value, + uint8_t value_addr, + uint8_t block_address, + uint8_t auth_mode); + +UFR_STATUS DL_API ValueBlockInSectorWrite_AKM2M(UFR_HANDLE hndUFR, + int32_t value, + uint8_t value_addr, + uint8_t sector_address, + uint8_t block_in_sector_address, + uint8_t auth_mode); + +UFR_STATUS DL_API ValueBlockIncrement_AKM2M(UFR_HANDLE hndUFR, + int32_t increment_value, + uint8_t block_address, + uint8_t auth_mode); + +UFR_STATUS DL_API ValueBlockInSectorIncrement_AKM2M(UFR_HANDLE hndUFR, + int32_t increment_value, + uint8_t sector_address, + uint8_t block_in_sector_address, + uint8_t auth_mode); + +UFR_STATUS DL_API ValueBlockDecrement_AKM2M(UFR_HANDLE hndUFR, + int32_t decrement_value, + uint8_t block_address, + uint8_t auth_mode); + +UFR_STATUS DL_API ValueBlockInSectorDecrement_AKM2M(UFR_HANDLE hndUFR, + int32_t decrement_value, + uint8_t sector_address, + uint8_t block_in_sector_address, + uint8_t auth_mode); + +UFR_STATUS DL_API BlockRead_PKM(UFR_HANDLE hndUFR, + OUT uint8_t *data, + uint8_t block_address, + uint8_t auth_mode, + IN const uint8_t *key); + +UFR_STATUS DL_API BlockWrite_PKM(UFR_HANDLE hndUFR, + IN const uint8_t *data, + uint8_t block_address, + uint8_t auth_mode, + IN const uint8_t *key); + +UFR_STATUS DL_API BlockInSectorRead_PKM(UFR_HANDLE hndUFR, + OUT uint8_t *data, + uint8_t sector_address, + uint8_t block_in_sector_address, + uint8_t auth_mode, + IN const uint8_t *key); + +UFR_STATUS DL_API BlockInSectorWrite_PKM(UFR_HANDLE hndUFR, + IN const uint8_t *data, + uint8_t sector_address, + uint8_t block_in_sector_address, + uint8_t auth_mode, + IN const uint8_t *key); + +UFR_STATUS DL_API LinearRead_PKM(UFR_HANDLE hndUFR, + OUT uint8_t *data, + uint16_t linear_address, + uint16_t length, + VAR uint16_t *bytes_returned, + uint8_t auth_mode, + IN const uint8_t *key); + +UFR_STATUS DL_API LinRowRead_PKM(UFR_HANDLE hndUFR, + OUT uint8_t *data, + uint16_t linear_address, + uint16_t length, + VAR uint16_t *bytes_returned, + uint8_t auth_mode, + IN const uint8_t *key); + +UFR_STATUS DL_API LinearWrite_PKM(UFR_HANDLE hndUFR, + IN const uint8_t *data, + uint16_t linear_address, + uint16_t length, + VAR uint16_t *bytes_written, + uint8_t auth_mode, + IN const uint8_t *key); + +UFR_STATUS DL_API LinearFormatCard_PKM(UFR_HANDLE hndUFR, + IN const uint8_t *new_key_A, + uint8_t blocks_access_bits, + uint8_t sector_trailers_access_bits, + uint8_t sector_trailers_byte9, + IN const uint8_t *new_key_B, + VAR uint8_t *lpucSectorsFormatted, + uint8_t auth_mode, + IN const uint8_t *key); + +UFR_STATUS DL_API SectorTrailerWrite_PKM(UFR_HANDLE hndUFR, + uint8_t addressing_mode, + uint8_t address, + IN const uint8_t *new_key_A, + uint8_t block0_access_bits, + uint8_t block1_access_bits, + uint8_t block2_access_bits, + uint8_t sector_trailer_access_bits, + uint8_t sector_trailer_byte9, + IN const uint8_t *new_key_B, + uint8_t auth_mode, + IN const uint8_t *key); + +UFR_STATUS DL_API SectorTrailerWriteUnsafe_PKM(UFR_HANDLE hndUFR, + uint8_t addressing_mode, + uint8_t address, + IN const uint8_t *sector_trailer, + uint8_t auth_mode, + IN const uint8_t *key); + +UFR_STATUS DL_API ValueBlockRead_PKM(UFR_HANDLE hndUFR, + VAR int32_t *value, + VAR uint8_t *value_addr, + uint8_t block_address, + uint8_t auth_mode, + IN const uint8_t *key); + +UFR_STATUS DL_API ValueBlockInSectorRead_PKM(UFR_HANDLE hndUFR, + VAR int32_t *value, + VAR uint8_t *value_addr, + uint8_t sector_address, + uint8_t block_in_sector_address, + uint8_t auth_mode, + IN const uint8_t *key); + +UFR_STATUS DL_API ValueBlockWrite_PKM(UFR_HANDLE hndUFR, + int32_t value, + uint8_t value_addr, + uint8_t block_address, + uint8_t auth_mode, + IN const uint8_t *key); + +UFR_STATUS DL_API ValueBlockInSectorWrite_PKM(UFR_HANDLE hndUFR, + int32_t value, + uint8_t value_addr, + uint8_t sector_address, + uint8_t block_in_sector_address, + uint8_t auth_mode, + IN const uint8_t *key); + +UFR_STATUS DL_API ValueBlockIncrement_PKM(UFR_HANDLE hndUFR, + int32_t increment_value, + uint8_t block_address, + uint8_t auth_mode, + IN const uint8_t *key); + +UFR_STATUS DL_API ValueBlockInSectorIncrement_PKM(UFR_HANDLE hndUFR, + int32_t increment_value, + uint8_t sector_address, + uint8_t block_in_sector_address, + uint8_t auth_mode, + IN const uint8_t *key); + +UFR_STATUS DL_API ValueBlockDecrement_PKM(UFR_HANDLE hndUFR, + int32_t decrement_value, + uint8_t block_address, + uint8_t auth_mode, + IN const uint8_t *key); + +UFR_STATUS DL_API ValueBlockInSectorDecrement_PKM(UFR_HANDLE hndUFR, + int32_t decrement_value, + uint8_t sector_address, + uint8_t block_in_sector_address, + uint8_t auth_mode, + IN const uint8_t *key); + +UFR_STATUS DL_API GetReaderHardwareVersionM(UFR_HANDLE hndUFR, + VAR uint8_t *version_major, + VAR uint8_t *version_minor); + +UFR_STATUS DL_API GetReaderFirmwareVersionM(UFR_HANDLE hndUFR, + VAR uint8_t *version_major, + VAR uint8_t *version_minor); + +// New commands (for RTC & I2C EEPROM): +UFR_STATUS DL_API GetReaderTimeM(UFR_HANDLE hndUFR, + VAR uint8_t *time); + +UFR_STATUS DL_API SetReaderTimeM(UFR_HANDLE hndUFR, + IN uint8_t *password, + VAR uint8_t *time); + +UFR_STATUS DL_API ChangeReaderPasswordM(UFR_HANDLE hndUFR, + IN uint8_t *old_password, + IN uint8_t *new_password); + +UFR_STATUS DL_API ReaderEepromWriteM(UFR_HANDLE hndUFR, + IN uint8_t *data, + uint32_t address, + uint32_t size, + IN uint8_t *password); + +UFR_STATUS DL_API ReaderEepromReadM(UFR_HANDLE hndUFR, + OUT uint8_t *data, + uint32_t address, + uint32_t size); + +UFR_STATUS DL_API GetReaderSerialDescriptionM(UFR_HANDLE hndUFR, + OUT uint8_t pSerialDescription[8]); + +// New since version 2.0: +UFR_STATUS DL_API GetBuildNumberM(UFR_HANDLE hndUFR, + VAR uint8_t *build); + +UFR_STATUS DL_API GetCardIdExM(UFR_HANDLE hndUFR, + VAR uint8_t *lpucSak, + OUT uint8_t *aucUid, + VAR uint8_t *lpucUidSize); + +UFR_STATUS DL_API GetLastCardIdExM(UFR_HANDLE hndUFR, + VAR uint8_t *lpucSak, + OUT uint8_t *aucUid, + VAR uint8_t *lpucUidSize); + +//------------------------------------------------------------------------------ +//Multi card mode: +//------------------------------------------------------------------------------ +UFR_STATUS DL_API EnableAntiCollisionM(UFR_HANDLE hndUFR); + +UFR_STATUS DL_API DisableAntiCollisionM(UFR_HANDLE hndUFR); + +UFR_STATUS DL_API EnumCardsM(UFR_HANDLE hndUFR, + VAR uint8_t *lpucCardsNumber, + OUT uint8_t *lpucUidListSize); // Card pointer is on the first card in list + +UFR_STATUS DL_API ListCardsM(UFR_HANDLE hndUFR, + OUT uint8_t *aucUidList, + uint8_t ucUidListSize); // Before calling this function you must call EnumCards() first. + +UFR_STATUS DL_API SelectCardM(UFR_HANDLE hndUFR, + IN const uint8_t *aucUid, + uint8_t ucUidSize, + OUT uint8_t *lpucSelctedCardType); + +UFR_STATUS DL_API DeslectCardM(UFR_HANDLE hndUFR); + +UFR_STATUS DL_API GetAntiCollisionStatusM(UFR_HANDLE hndUFR, + VAR int8_t *lpcIsAntiCollEnabled, + VAR int8_t *lpcIsAnyCardSelected); +//------------------------------------------------------------------------------ + +UFR_STATUS DL_API GetDlogicCardTypeM(UFR_HANDLE hndUFR, + VAR uint8_t *lpucCardType); + +UFR_STATUS DL_API GetNfcT2TVersionM(UFR_HANDLE hndUFR, + OUT uint8_t lpucVersionResponse[8]); + +UFR_STATUS DL_API GetCardSizeM(UFR_HANDLE hndUFR, + VAR uint32_t *lpulLinearSize, + VAR uint32_t *lpulRawSize); + +// uFCoder PRO MODE +UFR_STATUS DL_API GetReaderProModeM(UFR_HANDLE hndUFR, + VAR uint32_t *pReaderProMode, + OUT uint32_t *pReaderProConfig); + +UFR_STATUS DL_API SetReaderProModeM(UFR_HANDLE hndUFR, + const uint32_t ReaderProMode); + +// QR barcode crypt algorithm +// initialization. with TB serial like 'TB123456' +UFR_STATUS DL_API CardEncryption_InitializeM(UFR_HANDLE hndUFR, + IN const uint8_t *TBSerialString, + uint16_t job_number); + +// You must define 25 bytes array in memory for out_card_data[] +UFR_STATUS DL_API CardEncryption_GetNextEncryptedCardM(UFR_HANDLE hndUFR, + const uint32_t from_timestamp, + const uint32_t to_timestamp, + OUT uint8_t out_card_data[]); + +UFR_STATUS DL_API CardEncryption_GetNextM(UFR_HANDLE hndUFR, + const uint32_t code_type, + const uint32_t from_timestamp, + const uint32_t to_timestamp, + const uint32_t additional_data_size, + IN const uint8_t additional_data[], + VAR uint32_t *out_card_data_size, + OUT uint8_t out_card_data[]); + +UFR_STATUS DL_API CardEncryption_GetActualCardSNM(UFR_HANDLE hndUFR, + OUT uint32_t *ActualCard_SN, + VAR uint32_t *ActualCard_SN_LOG); + +UFR_STATUS DL_API CardEncryption_GetJobSNM(UFR_HANDLE hndUFR, + VAR uint32_t *JobSN); + +UFR_STATUS DL_API CardEncryption_GetSalterSNM(UFR_HANDLE hndUFR, + OUT uint8_t SalterSN[8], + VAR uint8_t * magicByte); + +UFR_STATUS DL_API read_ndef_recordM(UFR_HANDLE hndUFR, + uint8_t message_nr, + uint8_t record_nr, + VAR uint8_t *tnf, + OUT uint8_t *type_record, + VAR uint8_t *type_length, + OUT uint8_t *id, + VAR uint8_t *id_length, + OUT uint8_t *payload, + VAR uint32_t *payload_length); + +UFR_STATUS DL_API write_ndef_recordM(UFR_HANDLE hndUFR, + uint8_t message_nr, + uint8_t *tnf, + IN uint8_t *type_record, + uint8_t *type_length, + IN uint8_t *id, + uint8_t *id_length, + IN uint8_t *payload, + uint32_t *payload_length, + VAR uint8_t *card_formated); + +UFR_STATUS DL_API write_ndef_record_mirroringM(UFR_HANDLE hndUFR, + uint8_t message_nr, + uint8_t *tnf, + IN uint8_t *type_record, + uint8_t *type_length, + IN uint8_t *id, + uint8_t *id_length, + IN uint8_t *payload, + uint32_t *payload_length, + VAR uint8_t *card_formated, + int use_uid_ascii_mirror, + int use_counter_ascii_mirror, + uint32_t payload_mirroring_pos); + +UFR_STATUS DL_API get_ndef_record_countM(UFR_HANDLE hndUFR, + VAR uint8_t *ndef_message_cnt, + VAR uint8_t *ndef_record_cnt, + OUT uint8_t *ndef_record_array, + VAR uint8_t *empty_ndef_message_cnt); + +UFR_STATUS DL_API erase_last_ndef_recordM(UFR_HANDLE hndUFR, + uint8_t message_nr); + +UFR_STATUS DL_API erase_all_ndef_recordsM(UFR_HANDLE hndUFR, + uint8_t message_nr); + +UFR_STATUS DL_API ndef_card_initializationM(UFR_HANDLE hndUFR); + +//--------------------------------------------------------------------- +// Card emulation: +//--------------------------------------------------------------------- +UFR_STATUS DL_API WriteEmulationNdefM(UFR_HANDLE hndUFR, + uint8_t tnf, + IN uint8_t* type_record, + uint8_t type_length, + IN uint8_t* id, + uint8_t id_length, + IN uint8_t* payload, + uint8_t payload_length); + +UFR_STATUS DL_API TagEmulationStartM(UFR_HANDLE hndUFR); + +UFR_STATUS DL_API TagEmulationStopM(UFR_HANDLE hndUFR); + +UFR_STATUS DL_API CombinedModeEmulationStartM(UFR_HANDLE hndUFR); + +UFR_STATUS DL_API AdHocEmulationStartM(UFR_HANDLE hndUFR); + +UFR_STATUS DL_API AdHocEmulationStopM(UFR_HANDLE hndUFR); + +UFR_STATUS DL_API GetAdHocEmulationParamsM(UFR_HANDLE hndUFR, + VAR uint8_t *ThresholdMinLevel, + VAR uint8_t *ThresholdCollLevel, + VAR uint8_t *RFLevelAmp, + VAR uint8_t *RxGain, + VAR uint8_t *RFLevel); + +UFR_STATUS DL_API SetAdHocEmulationParamsM(UFR_HANDLE hndUFR, + uint8_t ThresholdMinLevel, + uint8_t ThresholdCollLevel, + uint8_t RFLevelAmp, + uint8_t RxGain, + uint8_t RFLevel); + +UFR_STATUS DL_API GetExternalFieldStateM(UFR_HANDLE hndUFR, + VAR uint8_t *is_field_present); +//------------------------------------------------------------------------------ +UFR_STATUS DL_API ReadECCSignatureM(UFR_HANDLE hndUFR, + IN uint8_t lpucECCSignature[ECC_SIG_LEN], + OUT uint8_t lpucUid[MAX_UID_LEN], + VAR uint8_t *lpucUidLen, + VAR uint8_t *lpucDlogicCardType); + +//------------------------------------------------------------------------------ +UFR_STATUS DL_API ReadCounterM(UFR_HANDLE hndUFR, + uint8_t counter_address, + VAR uint32_t *value); + +UFR_STATUS DL_API IncrementCounterM(UFR_HANDLE hndUFR, + uint8_t counter_address, + uint32_t inc_value); + +UFR_STATUS DL_API ReadNFCCounterM(UFR_HANDLE hndUFR, + VAR uint32_t *value); // Same as ReadCounter(2, &value); + +UFR_STATUS DL_API ReadNFCCounterPwdAuth_RKM(UFR_HANDLE hndUFR, + VAR uint32_t *value, + uint8_t reader_key_index); + +UFR_STATUS DL_API ReadNFCCounterPwdAuth_PKM(UFR_HANDLE hndUFR, + VAR uint32_t *value, + IN const uint8_t *key); +//------------------------------------------------------------------------------ + +UFR_STATUS DL_API SetAsyncCardIdSendConfigM(UFR_HANDLE hndUFR, + uint8_t send_enable, + uint8_t prefix_enable, + uint8_t prefix, + uint8_t suffix, + uint8_t send_removed_enable, + uint32_t async_baud_rate); + +UFR_STATUS DL_API SetAsyncCardIdSendConfigExM(UFR_HANDLE hndUFR, + uint8_t send_enable, + uint8_t prefix_enable, + uint8_t prefix, + uint8_t suffix, + uint8_t send_removed_enable, + uint8_t reverse_byte_order, + uint8_t decimal_representation, + uint32_t async_baud_rate); + +UFR_STATUS DL_API GetAsyncCardIdSendConfigM(UFR_HANDLE hndUFR, + VAR uint8_t *send_enable, + VAR uint8_t *prefix_enable, + VAR uint8_t *prefix, + VAR uint8_t *suffix, + VAR uint8_t *send_removed_enable, + VAR uint32_t *async_baud_rate); + +UFR_STATUS DL_API GetAsyncCardIdSendConfigExM(UFR_HANDLE hndUFR, + VAR uint8_t *send_enable, + VAR uint8_t *prefix_enable, + VAR uint8_t *prefix, + VAR uint8_t *suffix, + VAR uint8_t *send_removed_enable, + VAR uint8_t *reverse_byte_order, + VAR uint8_t *decimal_representation, + VAR uint32_t *async_baud_rate); + +/***************************************************************************** + * AIS FUNCTIONS + ***************************************************************************** + */ + +UFR_STATUS DL_API ais_get_card_numberM(UFR_HANDLE hndUFR, + VAR uint32_t *card_number); + +UFR_STATUS DL_API ais_set_right_recordM(UFR_HANDLE hndUFR, + uint8_t record_number, + uint16_t first_reader_nr, + uint16_t last_reader_nr, + uint8_t start_hour, + uint8_t start_minute, + uint8_t end_hour, + uint8_t end_minute, + IN uint8_t *days); + +UFR_STATUS DL_API ais_get_right_recordM(UFR_HANDLE hndUFR, + uint8_t record_number, + VAR uint16_t *first_reader_nr, + VAR uint16_t *last_reader_nr, + VAR uint8_t *start_hour, + VAR uint8_t *start_minute, + VAR uint8_t *end_hour, + VAR uint8_t *end_minute, + OUT uint8_t *days); + +UFR_STATUS DL_API ais_erase_right_recordM(UFR_HANDLE hndUFR, + uint8_t record_number); + +UFR_STATUS DL_API ais_set_validate_recordM(UFR_HANDLE hndUFR, + uint8_t begin_year, + uint8_t begin_month, + uint8_t begin_day, + uint8_t begin_hour, + uint8_t begin_minute, + uint8_t end_year, + uint8_t end_month, + uint8_t end_day, + uint8_t end_hour, + uint8_t end_minute); + +UFR_STATUS DL_API ais_get_validate_recordM(UFR_HANDLE hndUFR, + VAR uint8_t *begin_year, + VAR uint8_t *begin_month, + VAR uint8_t *begin_day, + VAR uint8_t *begin_hour, + VAR uint8_t *begin_minute, + VAR uint8_t *end_year, + VAR uint8_t *end_month, + VAR uint8_t *end_day, + VAR uint8_t *end_hour, + VAR uint8_t *end_minute); + +UFR_STATUS DL_API ais_set_card_typeM(UFR_HANDLE hndUFR, + uint8_t card_type); + +UFR_STATUS DL_API ais_get_card_typeM(UFR_HANDLE hndUFR, + VAR uint8_t *card_type); + +UFR_STATUS DL_API ais_set_card_daily_durationM(UFR_HANDLE hndUFR, + uint16_t duration); + +UFR_STATUS DL_API ais_get_card_daily_durationM(UFR_HANDLE hndUFR, + VAR uint16_t *duration); + +UFR_STATUS DL_API ais_set_card_total_durationM(UFR_HANDLE hndUFR, + uint32_t duration); + +UFR_STATUS DL_API ais_get_card_total_durationM(UFR_HANDLE hndUFR, + VAR uint32_t *duration); + +// swimming pool ************************************************************** + +UFR_STATUS DL_API ais_get_credit_and_period_validityM(UFR_HANDLE hndUFR, + VAR int32_t *credit, + VAR uint32_t *begin_year, + VAR uint32_t *begin_month, + VAR uint32_t *begin_day, + VAR uint32_t *begin_hour, + VAR uint32_t *begin_minute, + VAR uint32_t *end_year, + VAR uint32_t *end_month, + VAR uint32_t *end_day, + VAR uint32_t *end_hour, + VAR uint32_t *end_minute); + +UFR_STATUS DL_API ais_set_credit_and_period_validityM(UFR_HANDLE hndUFR, + int32_t credit, + uint32_t begin_year, + uint32_t begin_month, + uint32_t begin_day, + uint32_t begin_hour, + uint32_t begin_minute, + uint32_t end_year, + uint32_t end_month, + uint32_t end_day, + uint32_t end_hour, + uint32_t end_minute); + +UFR_STATUS DL_API ais_set_right_type_recordM(UFR_HANDLE hndUFR, + uint8_t record_number, + uint8_t right_record_type, + IN uint8_t *right_data); + +UFR_STATUS DL_API ais_get_right_type_recordM(UFR_HANDLE hndUFR, + uint8_t record_number, + VAR uint8_t *right_record_type, + OUT uint8_t *right_data); + +UFR_STATUS DL_API ais_set_right_record_type_max_daily_counterM(UFR_HANDLE hndUFR, + uint8_t record_number, + uint16_t first_reader_nr, + uint16_t last_reader_nr, + uint8_t start_hour, + uint8_t start_minute, + uint8_t end_hour, + uint8_t end_minute, + IN uint8_t *days, + uint8_t max_daily_counter); + +//============================================================================= + +UFR_STATUS DL_API UfrXrcLockOnM(UFR_HANDLE hndUFR, + uint16_t pulse_duration); + +UFR_STATUS DL_API UfrXrcRelayStateM(UFR_HANDLE hndUFR, + uint8_t state); + +UFR_STATUS DL_API UfrXrcGetIoStateM(UFR_HANDLE hndUFR, + VAR uint8_t *intercom, + VAR uint8_t *door, + VAR uint8_t *relay_state); + +UFR_STATUS DL_API UfrRedLightControlM(UFR_HANDLE hndUFR, + uint8_t light_status); + +UFR_STATUS DL_API UfrRgbLightControlM(UFR_HANDLE hndUFR, + uint8_t red, + uint8_t green, + uint8_t blue, + uint8_t intensity, + uint8_t enable); + +UFR_STATUS DL_API UfrSetBadSelectCardNrMaxM(UFR_HANDLE hndUFR, + uint8_t bad_select_nr_max); + +UFR_STATUS DL_API UfrGetBadSelectCardNrMaxM(UFR_HANDLE hndUFR, + VAR uint8_t *bad_select_nr_max); + +UFR_STATUS DL_API UfrEnterSleepModeM(UFR_HANDLE hndUFR); + +UFR_STATUS DL_API UfrLeaveSleepModeM(UFR_HANDLE hndUFR); + +UFR_STATUS DL_API AutoSleepSetM(UFR_HANDLE hndUFR, + uint8_t seconds_wait); + +UFR_STATUS DL_API AutoSleepGetM(UFR_HANDLE hndUFR, + VAR uint8_t *seconds_wait); + +UFR_STATUS DL_API SetSpeedPermanentlyM(UFR_HANDLE hndUFR, + unsigned char tx_speed, + unsigned char rx_speed); + +UFR_STATUS DL_API GetSpeedParametersM(UFR_HANDLE hndUFR, + VAR unsigned char *tx_speed, + VAR unsigned char *rx_speed); + +UFR_STATUS DL_API SetDisplayDataM(UFR_HANDLE hndUFR, + IN uint8_t *display_data, + uint8_t data_length); + +UFR_STATUS DL_API SetSpeakerFrequencyM(UFR_HANDLE hndUFR, + uint16_t frequency); + +UFR_STATUS DL_API SetDisplayIntensityM(UFR_HANDLE hndUFR, + uint8_t intensity); + +UFR_STATUS DL_API GetDisplayIntensityM(UFR_HANDLE hndUFR, + VAR uint8_t *intensity); + +//############################################################################# +//############################################################################# + +UFR_STATUS DL_API SetISO14443_4_ModeM(UFR_HANDLE hndUFR); + +UFR_STATUS DL_API SetISO14443_4_DLStorageM(UFR_HANDLE hndUFR); + +UFR_STATUS DL_API uFR_i_block_transceiveM(UFR_HANDLE hndUFR, + uint8_t chaining, + uint8_t timeout, + uint8_t block_length, + IN uint8_t *snd_data_array, + VAR size_t *rcv_length, + OUT uint8_t *rcv_data_array, + VAR uint32_t *ufr_status); + +UFR_STATUS DL_API uFR_APDU_TransceiveM(UFR_HANDLE hndUFR, + uint8_t cls, + uint8_t ins, + uint8_t p1, + uint8_t p2, + IN uint8_t *data_out, + uint8_t data_out_len, + OUT uint8_t *data_in, + uint32_t max_data_in_len, + VAR uint32_t *response_len, + uint8_t send_le, + OUT uint8_t *apdu_status); + +UFR_STATUS DL_API APDUHexStrTransceiveM(UFR_HANDLE hndUFR, + IN const char *c_apdu, + OUT char **r_apdu); + +UFR_STATUS DL_API APDUPlainTransceiveM(UFR_HANDLE hndUFR, + IN const uint8_t *c_apdu, + uint32_t c_apdu_len, + OUT uint8_t *r_apdu, + VAR uint32_t *r_apdu_len); + +UFR_STATUS DL_API APDUTransceiveM(UFR_HANDLE hndUFR, + uint8_t cls, + uint8_t ins, + uint8_t p1, + uint8_t p2, + IN const uint8_t *data_out, + uint32_t Nc, + OUT uint8_t *data_in, + VAR uint32_t *Ne, + uint8_t send_le, + OUT uint8_t *apdu_status); + +UFR_STATUS DL_API i_block_trans_rcv_chainM(UFR_HANDLE hndUFR, + uint8_t chaining, + uint8_t timeout, + uint8_t block_length, + IN uint8_t *snd_data_array, + VAR uint8_t *rcv_length, + OUT uint8_t *rcv_data_array, + VAR uint8_t *rcv_chained, + VAR uint32_t *ufr_status); + +UFR_STATUS DL_API r_block_transceiveM(UFR_HANDLE hndUFR, + uint8_t ack, + uint8_t timeout, + VAR uint8_t *rcv_length, + OUT uint8_t *rcv_data_array, + VAR uint8_t *rcv_chained, + VAR uint32_t *ufr_status); + +UFR_STATUS DL_API s_block_deselectM(UFR_HANDLE hndUFR, + uint8_t timeout); + +UFR_STATUS DL_API card_transceiveM(UFR_HANDLE hndUFR, + uint8_t card_activate, + uint8_t card_halted, + uint8_t tx_crc, + uint8_t rx_crc, + uint8_t crypto1, + uint32_t timeout, + IN uint8_t *tx_data, + uint8_t tx_data_len, + OUT uint8_t *rx_data, + VAR uint8_t *rx_data_len); + +UFR_STATUS DL_API card_transceive_mode_startM(UFR_HANDLE hndUFR, + uint8_t tx_crc, + uint8_t rx_crc, + uint32_t rf_timeout, + uint32_t uart_timeout); + +UFR_STATUS DL_API card_transceive_mode_stopM(UFR_HANDLE hndUFR); + +UFR_STATUS DL_API card_halt_enableM(UFR_HANDLE hndUFR); + +UFR_STATUS DL_API uart_transceiveM(UFR_HANDLE hndUFR, + IN uint8_t *send_data, + uint8_t send_len, + OUT uint8_t *rcv_data, + uint32_t bytes_to_receive, + VAR uint32_t *rcv_len); + +UFR_STATUS DL_API open_ISO7816_interfaceM(UFR_HANDLE hndUFR, + OUT uint8_t *atr_data, + VAR uint8_t *atr_len); + +UFR_STATUS DL_API APDU_switch_to_ISO7816_interfaceM(UFR_HANDLE hndUFR); + +UFR_STATUS DL_API close_ISO7816_interface_no_APDUM(UFR_HANDLE hndUFR); + +UFR_STATUS DL_API close_ISO7816_interface_APDU_ISO14443_4M(UFR_HANDLE hndUFR); + +UFR_STATUS DL_API APDU_switch_to_ISO14443_4_interfaceM(UFR_HANDLE hndUFR); + +UFR_STATUS DL_API APDU_switch_off_from_ISO7816_interfaceM(UFR_HANDLE hndUFR); + +//------------------------------------------------------------------------------ +UFR_STATUS DL_API JCAppSelectByAidM(UFR_HANDLE hndUFR, + IN const uint8_t *aid, + uint8_t aid_len, + OUT uint8_t selection_response[16]); + +UFR_STATUS DL_API JCAppPutPrivateKeyM(UFR_HANDLE hndUFR, + uint8_t key_type, + uint8_t key_index, + IN const uint8_t *key, + uint16_t key_bit_len, + const IN uint8_t *key_param, + uint16_t key_parm_len); + +UFR_STATUS DL_API JCAppGenerateKeyPairM(UFR_HANDLE hndUFR, + uint8_t key_type, + uint8_t key_index, + uint8_t key_designator, + uint16_t key_bit_len, + IN const uint8_t *params, + uint16_t params_size); + +UFR_STATUS DL_API JCAppDeleteRsaKeyPairM(UFR_HANDLE hndUFR, + uint8_t key_index); + +UFR_STATUS DL_API JCAppDeleteEcKeyPairM(UFR_HANDLE hndUFR, + uint8_t key_index); + +UFR_STATUS DL_API JCAppSignatureBeginM(UFR_HANDLE hndUFR, + uint8_t cipher, + uint8_t digest, + uint8_t padding, + uint8_t key_index, + IN const uint8_t *chunk, + uint16_t chunk_len, + IN const uint8_t *alg_param, + uint16_t alg_parm_len); + +UFR_STATUS DL_API JCAppSignatureUpdateM(UFR_HANDLE hndUFR, + IN const uint8_t *chunk, + uint16_t chunk_len); + +UFR_STATUS DL_API JCAppSignatureEndM(UFR_HANDLE hndUFR, + VAR uint16_t *sig_len); + +UFR_STATUS DL_API JCAppGenerateSignatureM(UFR_HANDLE hndUFR, + uint8_t cipher, + uint8_t digest, + uint8_t padding, + uint8_t key_index, + IN const uint8_t *plain_data, + uint16_t plain_data_len, + VAR uint16_t *sig_len, + IN const uint8_t *alg_param, + uint16_t alg_parm_len); + +UFR_STATUS DL_API JCAppPutObjM(UFR_HANDLE hndUFR, + uint8_t obj_type, + uint8_t obj_index, + IN uint8_t *obj, + int16_t obj_size, + IN uint8_t *id, + uint8_t id_size); + +UFR_STATUS DL_API JCAppPutObjSubjectM(UFR_HANDLE hndUFR, + uint8_t obj_type, + uint8_t obj_index, + IN uint8_t *subject, + uint8_t size); + +UFR_STATUS DL_API JCAppInvalidateCertM(UFR_HANDLE hndUFR, + uint8_t obj_type, + uint8_t obj_index); + +UFR_STATUS DL_API JCAppGetObjIdM(UFR_HANDLE hndUFR, + uint8_t obj_type, + uint8_t obj_index, + OUT uint8_t *id, + VAR uint16_t *id_size); // when id == NULL returns size + +UFR_STATUS DL_API JCAppGetObjSubjectM(UFR_HANDLE hndUFR, + uint8_t obj_type, + uint8_t obj_index, + OUT uint8_t *subject, + VAR uint16_t *size); // when subject == NULL returns size + +UFR_STATUS DL_API JCAppGetObjM(UFR_HANDLE hndUFR, + uint8_t obj_type, + uint8_t obj_index, + OUT uint8_t *obj, + int16_t size); // when obj == NULL returns size + +UFR_STATUS DL_API JCAppLoginM(UFR_HANDLE hndUFR, + uint8_t SO, + IN uint8_t *pin, + uint8_t pinSize); + +UFR_STATUS DL_API JCAppGetPinTriesRemainingM(UFR_HANDLE hndUFR, + dl_sec_code_t secureCodeType, + VAR uint16_t *triesRemaining); + +UFR_STATUS DL_API JCAppPinChangeM(UFR_HANDLE hndUFR, + dl_sec_code_t secureCodeType, + IN uint8_t *newPin, + uint8_t newPinSize); + +UFR_STATUS DL_API JCAppPinUnblockM(UFR_HANDLE hndUFR, + uint8_t SO, + IN uint8_t *puk, + uint8_t pukSize); + +UFR_STATUS DL_API JCAppPinEnableM(UFR_HANDLE hndUFR, uint8_t SO); + +UFR_STATUS DL_API JCAppPinDisableM(UFR_HANDLE hndUFR, uint8_t SO); + +UFR_STATUS DL_API JCAppGetRsaPublicKeyM(UFR_HANDLE hndUFR, + uint8_t key_index, + OUT uint8_t *modulus, + VAR uint16_t *modulus_size, + OUT uint8_t *exponent, + VAR uint16_t *exponent_size); // when modulus == NULL, returns sizes and exponent ignored + +UFR_STATUS DL_API JCAppGetEcPublicKeyM(UFR_HANDLE hndUFR, + uint8_t key_index, + OUT uint8_t *keyW, + VAR uint16_t *kexWSize, + OUT uint8_t *field, + VAR uint16_t *field_size, + OUT uint8_t *ab, + VAR uint16_t *ab_size, + OUT uint8_t *g, + VAR uint16_t *g_size, + OUT uint8_t *r, + VAR uint16_t *r_size, + VAR uint16_t *k, + VAR uint16_t *key_size_bits, + VAR uint16_t *key_designator); // when keyW == NULL, returns size + +UFR_STATUS DL_API JCAppGetEcKeySizeBitsM(UFR_HANDLE hndUFR, + uint8_t key_index, + VAR uint16_t *key_size_bits, + VAR uint16_t *key_designator); +//------------------------------------------------------------------------------ +UFR_STATUS DL_API JCStorageGetFilesListSizeM(UFR_HANDLE hndUFR, VAR uint32_t *list_size); +UFR_STATUS DL_API JCStorageListFilesM(UFR_HANDLE hndUFR, OUT uint8_t *list, uint32_t list_bytes_allocated); +UFR_STATUS DL_API JCStorageGetFileSizeM(UFR_HANDLE hndUFR, uint8_t card_file_index, VAR uint32_t *file_size); +UFR_STATUS DL_API JCStorageReadFileM(UFR_HANDLE hndUFR, uint8_t card_file_index, OUT uint8_t *data, uint32_t data_bytes_allocated); +UFR_STATUS DL_API JCStorageReadFileToFileSystemM(UFR_HANDLE hndUFR, uint8_t card_file_index, IN const char *file_system_path_name); +UFR_STATUS DL_API JCStorageWriteFileM(UFR_HANDLE hndUFR, uint8_t card_file_index, IN const uint8_t *data, uint32_t data_size); +UFR_STATUS DL_API JCStorageWriteFileFromFileSystemM(UFR_HANDLE hndUFR, uint8_t card_file_index, IN const char *file_system_path_name); +UFR_STATUS DL_API JCStorageDeleteFileM(UFR_HANDLE hndUFR, uint8_t file_index); +//------------------------------------------------------------------------------ +UFR_STATUS DL_API MRTDAppSelectAndAuthenticateBacM(UFR_HANDLE hndUFR, IN const uint8_t mrz_proto_key[25], OUT uint8_t *ksenc, OUT uint8_t *ksmac, + VAR uint64_t *send_sequence_cnt); +UFR_STATUS DL_API MRTDFileReadBacToHeapM(UFR_HANDLE hndUFR, IN const uint8_t *file_index, VAR uint8_t **output, OUT uint32_t *output_length, IN const uint8_t *ksenc, + IN const uint8_t *ksmac, VAR uint64_t *send_sequence_cnt); +//############################################################################# + +UFR_STATUS DL_API uFR_DESFIRE_Start(void); +UFR_STATUS DL_API uFR_DESFIRE_StartM(UFR_HANDLE hndUFR); +UFR_STATUS DL_API uFR_DESFIRE_Stop(void); +UFR_STATUS DL_API uFR_DESFIRE_StopM(UFR_HANDLE hndUFR); +UFR_STATUS DL_API uFR_APDU_Start(void); // Alias for uFR_DESFIRE_Start() +UFR_STATUS DL_API uFR_APDU_StartM(UFR_HANDLE hndUFR); // Alias for uFR_DESFIRE_StartM() +UFR_STATUS DL_API uFR_APDU_Stop(void); // Alias for uFR_DESFIRE_Stop() +UFR_STATUS DL_API uFR_APDU_StopM(UFR_HANDLE hndUFR); // Alias for uFR_DESFIRE_StopM() + +//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ + +UFR_STATUS DL_API uFR_int_GetDesfireUidM(UFR_HANDLE hndUFR, + uint8_t aes_key_nr, + uint32_t aid, + uint8_t aid_key_nr, + OUT uint8_t *card_uid, + VAR uint8_t *card_uid_len, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_GetDesfireUid_aesM(UFR_HANDLE hndUFR, + uint8_t aes_key_nr, + uint32_t aid, + uint8_t aid_key_nr, + OUT uint8_t *card_uid, + VAR uint8_t *card_uid_len, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_GetDesfireUid_desM(UFR_HANDLE hndUFR, + uint8_t des_key_nr, + uint32_t aid, + uint8_t aid_key_nr, + OUT uint8_t *card_uid, + VAR uint8_t *card_uid_len, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_GetDesfireUid_2k3desM(UFR_HANDLE hndUFR, + uint8_t des2k_key_nr, + uint32_t aid, + uint8_t aid_key_nr, + OUT uint8_t *card_uid, + VAR uint8_t *card_uid_len, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_GetDesfireUid_3k3desM(UFR_HANDLE hndUFR, + IN uint8_t des3k_key_nr, + uint32_t aid, + uint8_t aid_key_nr, + OUT uint8_t *card_uid, + VAR uint8_t *card_uid_len, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_GetDesfireUid_PK_M(UFR_HANDLE hndUFR, + IN uint8_t *aes_key_ext, + uint32_t aid, + uint8_t aid_key_nr, + OUT uint8_t *card_uid, + VAR uint8_t *card_uid_len, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_GetDesfireUid_aes_PK_M(UFR_HANDLE hndUFR, + IN uint8_t *aes_key_ext, + uint32_t aid, + uint8_t aid_key_nr, + OUT uint8_t *card_uid, + VAR uint8_t *card_uid_len, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_GetDesfireUid_des_PK_M(UFR_HANDLE hndUFR, + IN uint8_t *des_key_ext, + uint32_t aid, + uint8_t aid_key_nr, + OUT uint8_t *card_uid, + VAR uint8_t *card_uid_len, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_GetDesfireUid_2k3des_PK_M(UFR_HANDLE hndUFR, + IN uint8_t *des2k_key_ext, + uint32_t aid, + uint8_t aid_key_nr, + OUT uint8_t *card_uid, + VAR uint8_t *card_uid_len, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_GetDesfireUid_3k3des_PK_M(UFR_HANDLE hndUFR, + IN uint8_t *des3k_key_ext, + uint32_t aid, + uint8_t aid_key_nr, + OUT uint8_t *card_uid, + VAR uint8_t *card_uid_len, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_SAM_GetDesfireUidAesAuthM(UFR_HANDLE hndUFR, + uint8_t aes_key_nr, + uint32_t aid, + uint8_t aid_key_nr, + OUT uint8_t *card_uid, + VAR uint8_t *card_uid_len, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_SAM_GetDesfireUid3k3desAuthM(UFR_HANDLE hndUFR, + uint8_t des3k_key_nr, + uint32_t aid, + uint8_t aid_key_nr, + OUT uint8_t *card_uid, + VAR uint8_t *card_uid_len, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); + +UFR_STATUS DL_API uFR_int_DesfireFreeMemM(UFR_HANDLE hndUFR, + VAR uint32_t *free_mem_byte, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); + +UFR_STATUS DL_API uFR_int_DesfireFormatCardM(UFR_HANDLE hndUFR, + uint8_t aes_key_nr, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireFormatCard_aesM(UFR_HANDLE hndUFR, + uint8_t aes_key_nr, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireFormatCard_desM(UFR_HANDLE hndUFR, + uint8_t des_key_nr, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireFormatCard_2k3desM(UFR_HANDLE hndUFR, + uint8_t des2k_key_nr, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireFormatCard_3k3desM(UFR_HANDLE hndUFR, + uint8_t des3k_key_nr, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireFormatCard_PK_M(UFR_HANDLE hndUFR, + IN uint8_t *aes_key_ext, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireFormatCard_aes_PK_M(UFR_HANDLE hndUFR, + IN uint8_t *aes_key_ext, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireFormatCard_des_PK_M(UFR_HANDLE hndUFR, + IN uint8_t *des_key_ext, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireFormatCard_2k3des_PK_M(UFR_HANDLE hndUFR, + IN uint8_t *des2k_key_ext, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireFormatCard_3k3des_PK_M(UFR_HANDLE hndUFR, + IN uint8_t *des3k_key_ext, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_SAM_DesfireFormatCardAesAuthM(UFR_HANDLE hndUFR, + uint8_t aes_key_nr, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_SAM_DesfireFormatCard3k3desAuthM(UFR_HANDLE hndUFR, + uint8_t des3k_key_nr, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); + +UFR_STATUS DL_API uFR_int_DesfireCreateStdDataFileM(UFR_HANDLE hndUFR, + uint8_t aes_key_nr, + uint32_t aid, + uint8_t file_id, + uint32_t file_size, + uint8_t read_key_no, + uint8_t write_key_no, + uint8_t read_write_key_no, + uint8_t change_key_no, + uint8_t communication_settings, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireCreateStdDataFile_aesM(UFR_HANDLE hndUFR, + uint8_t aes_key_nr, + uint32_t aid, + uint8_t file_id, + uint32_t file_size, + uint8_t read_key_no, + uint8_t write_key_no, + uint8_t read_write_key_no, + uint8_t change_key_no, + uint8_t communication_settings, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireCreateStdDataFile_desM(UFR_HANDLE hndUFR, + uint8_t des_key_nr, + uint32_t aid, + uint8_t file_id, + uint32_t file_size, + uint8_t read_key_no, + uint8_t write_key_no, + uint8_t read_write_key_no, + uint8_t change_key_no, + uint8_t communication_settings, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireCreateStdDataFile_2k3desM(UFR_HANDLE hndUFR, + uint8_t des2k_key_nr, + uint32_t aid, + uint8_t file_id, + uint32_t file_size, + uint8_t read_key_no, + uint8_t write_key_no, + uint8_t read_write_key_no, + uint8_t change_key_no, + uint8_t communication_settings, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireCreateStdDataFile_3k3desM(UFR_HANDLE hndUFR, + uint8_t des3k_key_nr, + uint32_t aid, + uint8_t file_id, + uint32_t file_size, + uint8_t read_key_no, + uint8_t write_key_no, + uint8_t read_write_key_no, + uint8_t change_key_no, + uint8_t communication_settings, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireCreateStdDataFile_PK_M(UFR_HANDLE hndUFR, + IN uint8_t *aes_key_ext, + uint32_t aid, + uint8_t file_id, + uint32_t file_size, + uint8_t read_key_no, + uint8_t write_key_no, + uint8_t read_write_key_no, + uint8_t change_key_no, + uint8_t communication_settings, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireCreateStdDataFile_aes_PK_M(UFR_HANDLE hndUFR, + IN uint8_t *aes_key_ext, + uint32_t aid, + uint8_t file_id, + uint32_t file_size, + uint8_t read_key_no, + uint8_t write_key_no, + uint8_t read_write_key_no, + uint8_t change_key_no, + uint8_t communication_settings, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireCreateStdDataFile_des_PK_M(UFR_HANDLE hndUFR, + IN uint8_t *des_key_ext, + uint32_t aid, + uint8_t file_id, + uint32_t file_size, + uint8_t read_key_no, + uint8_t write_key_no, + uint8_t read_write_key_no, + uint8_t change_key_no, + uint8_t communication_settings, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireCreateStdDataFile_2k3des_PK_M(UFR_HANDLE hndUFR, + IN uint8_t *des2k_key_ext, + uint32_t aid, + uint8_t file_id, + uint32_t file_size, + uint8_t read_key_no, + uint8_t write_key_no, + uint8_t read_write_key_no, + uint8_t change_key_no, + uint8_t communication_settings, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireCreateStdDataFile_3k3des_PK_M(UFR_HANDLE hndUFR, + IN uint8_t *des3k_key_ext, + uint32_t aid, + uint8_t file_id, + uint32_t file_size, + uint8_t read_key_no, + uint8_t write_key_no, + uint8_t read_write_key_no, + uint8_t change_key_no, + uint8_t communication_settings, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_SAM_DesfireCreateStdDataFileAesAuthM(UFR_HANDLE hndUFR, + uint8_t aes_key_nr, + uint32_t aid, + uint8_t file_id, + uint32_t file_size, + uint8_t read_key_no, + uint8_t write_key_no, + uint8_t read_write_key_no, + uint8_t change_key_no, + uint8_t communication_settings, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_SAM_DesfireCreateStdDataFile3k3desAuthM(UFR_HANDLE hndUFR, + uint8_t des3k_key_nr, + uint32_t aid, + uint8_t file_id, + uint32_t file_size, + uint8_t read_key_no, + uint8_t write_key_no, + uint8_t read_write_key_no, + uint8_t change_key_no, + uint8_t communication_settings, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireCreateStdDataFile_no_auth_M(UFR_HANDLE hndUFR, + uint32_t aid, + uint8_t file_id, + uint32_t file_size, + uint8_t read_key_no, + uint8_t write_key_no, + uint8_t read_write_key_no, + uint8_t change_key_no, + uint8_t communication_settings, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); + +UFR_STATUS DL_API uFR_int_DesfireDeleteFileM(UFR_HANDLE hndUFR, + uint8_t aes_key_nr, + uint32_t aid, + uint8_t file_id, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireDeleteFile_aesM(UFR_HANDLE hndUFR, + uint8_t aes_key_nr, + uint32_t aid, + uint8_t file_id, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireDeleteFile_desM(UFR_HANDLE hndUFR, + uint8_t des_key_nr, + uint32_t aid, + uint8_t file_id, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireDeleteFile_2k3desM(UFR_HANDLE hndUFR, + uint8_t des2k_key_nr, + uint32_t aid, + uint8_t file_id, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireDeleteFile_3k3desM(UFR_HANDLE hndUFR, + uint8_t des3k_key_nr, + uint32_t aid, + uint8_t file_id, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireDeleteFile_PK_M(UFR_HANDLE hndUFR, + IN uint8_t *aes_key_ext, + uint32_t aid, + uint8_t file_id, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireDeleteFile_aes_PK_M(UFR_HANDLE hndUFR, + IN uint8_t *aes_key_ext, + uint32_t aid, + uint8_t file_id, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireDeleteFile_des_PK_M(UFR_HANDLE hndUFR, + IN uint8_t *des_key_ext, + uint32_t aid, + uint8_t file_id, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireDeleteFile_2k3des_PK_M(UFR_HANDLE hndUFR, + IN uint8_t *des2k_key_ext, + uint32_t aid, + uint8_t file_id, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireDeleteFile_3k3des_PK_M(UFR_HANDLE hndUFR, + IN uint8_t *des3k_key_ext, + uint32_t aid, + uint8_t file_id, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_SAM_DesfireDeleteFileAesAuthM(UFR_HANDLE hndUFR, + uint8_t aes_key_nr, + uint32_t aid, + uint8_t file_id, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_SAM_DesfireDeleteFile3k3desAuthM(UFR_HANDLE hndUFR, + uint8_t des3k_key_nr, + uint32_t aid, + uint8_t file_id, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); + +UFR_STATUS DL_API uFR_int_DesfireDeleteFile_no_auth_M(UFR_HANDLE hndUFR, + uint32_t aid, + uint8_t file_id, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireCreateAesApplicationM(UFR_HANDLE hndUFR, + uint8_t aes_key_nr, + uint32_t aid, + uint8_t setting, + uint8_t max_key_no, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireCreateAesApplication_aesM(UFR_HANDLE hndUFR, + uint8_t aes_key_nr, + uint32_t aid, + uint8_t setting, + uint8_t max_key_no, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireCreate3k3desApplication_aesM(UFR_HANDLE hndUFR, + uint8_t aes_key_nr, + uint32_t aid, + uint8_t setting, + uint8_t max_key_no, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireCreateDesApplication_aesM(UFR_HANDLE hndUFR, + uint8_t aes_key_nr, + uint32_t aid, + uint8_t setting, + uint8_t max_key_no, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireCreateAesApplication_3k3desM(UFR_HANDLE hndUFR, + uint8_t des3k_key_nr, + uint32_t aid, + uint8_t setting, + uint8_t max_key_no, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireCreate3k3desApplication_3k3desM(UFR_HANDLE hndUFR, + uint8_t des3k_key_nr, + uint32_t aid, + uint8_t setting, + uint8_t max_key_no, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireCreateDesApplication_3k3desM(UFR_HANDLE hndUFR, + uint8_t des3k_key_nr, + uint32_t aid, + uint8_t setting, + uint8_t max_key_no, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireCreateAesApplication_2k3desM(UFR_HANDLE hndUFR, + uint8_t des2k_key_nr, + uint32_t aid, + uint8_t setting, + uint8_t max_key_no, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireCreate3k3desApplication_2k3desM(UFR_HANDLE hndUFR, + uint8_t des2k_key_nr, + uint32_t aid, + uint8_t setting, + uint8_t max_key_no, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireCreateDesApplication_2k3desM(UFR_HANDLE hndUFR, + uint8_t des2k_key_nr, + uint32_t aid, + uint8_t setting, + uint8_t max_key_no, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireCreateAesApplication_desM(UFR_HANDLE hndUFR, + uint8_t des_key_nr, + uint32_t aid, + uint8_t setting, + uint8_t max_key_no, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireCreate3k3desApplication_desM(UFR_HANDLE hndUFR, + uint8_t des_key_nr, + uint32_t aid, + uint8_t setting, + uint8_t max_key_no, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireCreateDesApplication_desM(UFR_HANDLE hndUFR, + uint8_t des_key_nr, + uint32_t aid, + uint8_t setting, + uint8_t max_key_no, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireCreateAesApplication_PK_M(UFR_HANDLE hndUFR, + IN uint8_t *aes_key_ext, + uint32_t aid, + uint8_t setting, + uint8_t max_key_no, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireCreateAesApplication_aes_PK_M(UFR_HANDLE hndUFR, + IN uint8_t *aes_key_ext, + uint32_t aid, + uint8_t setting, + uint8_t max_key_no, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireCreate3k3desApplication_aes_PK_M(UFR_HANDLE hndUFR, + IN uint8_t *aes_key_ext, + uint32_t aid, + uint8_t setting, + uint8_t max_key_no, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireCreateDesApplication_aes_PK_M(UFR_HANDLE hndUFR, + IN uint8_t *aes_key_ext, + uint32_t aid, + uint8_t setting, + uint8_t max_key_no, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireCreateAesApplication_3k3des_PK_M(UFR_HANDLE hndUFR, + IN uint8_t *des3k_key_ext, + uint32_t aid, + uint8_t setting, + uint8_t max_key_no, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireCreate3k3desApplication_3k3des_PK_M(UFR_HANDLE hndUFR, + IN uint8_t *des3k_key_ext, + uint32_t aid, + uint8_t setting, + uint8_t max_key_no, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireCreateDesApplication_3k3des_PK_M(UFR_HANDLE hndUFR, + IN uint8_t *des3k_key_ext, + uint32_t aid, + uint8_t setting, + uint8_t max_key_no, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireCreateAesApplication_2k3des_PK_M(UFR_HANDLE hndUFR, + IN uint8_t *des2k_key_ext, + uint32_t aid, + uint8_t setting, + uint8_t max_key_no, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireCreate3k3desApplication_2k3des_PK_M(UFR_HANDLE hndUFR, + IN uint8_t *des2k_key_ext, + uint32_t aid, + uint8_t setting, + uint8_t max_key_no, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireCreateDesApplication_2k3des_PK_M(UFR_HANDLE hndUFR, + IN uint8_t *des2k_key_ext, + uint32_t aid, + uint8_t setting, + uint8_t max_key_no, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireCreateAesApplication_des_PK_M(UFR_HANDLE hndUFR, + IN uint8_t *des_key_ext, + uint32_t aid, + uint8_t setting, + uint8_t max_key_no, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireCreate3k3desApplication_des_PK_M(UFR_HANDLE hndUFR, + IN uint8_t *des_key_ext, + uint32_t aid, + uint8_t setting, + uint8_t max_key_no, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireCreateDesApplication_des_PK_M(UFR_HANDLE hndUFR, + IN uint8_t *des_key_ext, + uint32_t aid, + uint8_t setting, + uint8_t max_key_no, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_SAM_DesfireCreateAesApplicationAesAuthM(UFR_HANDLE hndUFR, + uint8_t aes_key_nr, + uint32_t aid, + uint8_t setting, + uint8_t max_key_no, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_SAM_DesfireCreate3k3desApplicationAesAuthM(UFR_HANDLE hndUFR, + uint8_t aes_key_nr, uint32_t aid, + uint8_t setting, + uint8_t max_key_no, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_SAM_DesfireCreateAesApplication3k3desAuthM(UFR_HANDLE hndUFR, + uint8_t des3k_key_nr, + uint32_t aid, + uint8_t setting, + uint8_t max_key_no, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_SAM_DesfireCreate3k3desApplication3k3desAuthM(UFR_HANDLE hndUFR, + uint8_t des3k_key_nr, + uint32_t aid, + uint8_t setting, + uint8_t max_key_no, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireCreateAesApplication_no_auth_M(UFR_HANDLE hndUFR, + uint32_t aid, + uint8_t setting, + uint8_t max_key_no, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireCreate3k3desApplication_no_auth_M(UFR_HANDLE hndUFR, + uint32_t aid, + uint8_t setting, + uint8_t max_key_no, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireCreateDesApplication_no_auth_M(UFR_HANDLE hndUFR, + uint32_t aid, + uint8_t setting, + uint8_t max_key_no, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); + +UFR_STATUS DL_API uFR_int_DesfireDeleteApplicationM(UFR_HANDLE hndUFR, + uint8_t aes_key_nr, + uint32_t aid, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireDeleteApplication_aesM(UFR_HANDLE hndUFR, + uint8_t aes_key_nr, + uint32_t aid, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireDeleteApplication_desM(UFR_HANDLE hndUFR, + uint8_t des_key_nr, + uint32_t aid, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireDeleteApplication_2k3desM(UFR_HANDLE hndUFR, + uint8_t des2k_key_nr, + uint32_t aid, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireDeleteApplication_3k3desM(UFR_HANDLE hndUFR, + uint8_t des3k_key_nr, + uint32_t aid, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireDeleteApplication_PK_M(UFR_HANDLE hndUFR, + IN uint8_t *aes_key_ext, + uint32_t aid, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireDeleteApplication_aes_PK_M(UFR_HANDLE hndUFR, + IN uint8_t *aes_key_ext, + uint32_t aid, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireDeleteApplication_des_PK_M(UFR_HANDLE hndUFR, + IN uint8_t *des_key_ext, + uint32_t aid, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireDeleteApplication_2k3des_PK_M(UFR_HANDLE hndUFR, + IN uint8_t *des2k_key_ext, + uint32_t aid, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireDeleteApplication_3k3des_PK_M(UFR_HANDLE hndUFR, + IN uint8_t *des3k_key_ext, + uint32_t aid, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_SAM_DesfireDeleteApplicationAesAuthM(UFR_HANDLE hndUFR, + uint8_t aes_key_nr, + uint32_t aid, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_SAM_DesfireDeleteApplication3k3desAuthM(UFR_HANDLE hndUFR, + uint8_t des3k_key_nr, + uint32_t aid, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); + +UFR_STATUS DL_API uFR_int_DesfireSetConfigurationM(UFR_HANDLE hndUFR, + uint8_t aes_key_nr, + uint8_t random_uid, + uint8_t format_disable, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireSetConfiguration_aesM(UFR_HANDLE hndUFR, + uint8_t aes_key_nr, + uint8_t random_uid, + uint8_t format_disable, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireSetConfiguration_desM(UFR_HANDLE hndUFR, + uint8_t des_key_nr, + uint8_t random_uid, + uint8_t format_disable, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireSetConfiguration_2k3desM(UFR_HANDLE hndUFR, + uint8_t des2k_key_nr, + uint8_t random_uid, + uint8_t format_disable, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireSetConfiguration_3k3desM(UFR_HANDLE hndUFR, + uint8_t des3k_key_nr, + uint8_t random_uid, + uint8_t format_disable, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireSetConfiguration_PK_M(UFR_HANDLE hndUFR, + IN uint8_t *aes_key_ext, + uint8_t random_uid, + uint8_t format_disable, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireSetConfiguration_aes_PK_M(UFR_HANDLE hndUFR, + IN uint8_t *aes_key_ext, + uint8_t random_uid, + uint8_t format_disable, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireSetConfiguration_des_PK_M(UFR_HANDLE hndUFR, + IN uint8_t *des_key_ext, + uint8_t random_uid, + uint8_t format_disable, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireSetConfiguration_2k3des_PK_M(UFR_HANDLE hndUFR, + IN uint8_t *des2k_key_ext, + uint8_t random_uid, + uint8_t format_disable, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireSetConfiguration_3k3des_PK_M(UFR_HANDLE hndUFR, + IN uint8_t *des3k_key_ext, + uint8_t random_uid, + uint8_t format_disable, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_SAM_DesfireSetConfigurationAesAuthM(UFR_HANDLE hndUFR, + uint8_t aes_key_nr, + uint8_t random_uid, + uint8_t format_disable, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_SAM_DesfireSetConfiguration3k3desAuthM(UFR_HANDLE hndUFR, + uint8_t des3k_key_nr, + uint8_t random_uid, + uint8_t format_disable, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); + +UFR_STATUS DL_API uFR_int_DesfireGetKeySettingsM(UFR_HANDLE hndUFR, + uint8_t aes_key_nr, + uint32_t aid, + VAR uint8_t *setting, + VAR uint8_t *max_key_no, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireGetKeySettings_aesM(UFR_HANDLE hndUFR, + uint8_t aes_key_nr, + uint32_t aid, + VAR uint8_t *setting, + VAR uint8_t *max_key_no, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireGetKeySettings_desM(UFR_HANDLE hndUFR, + uint8_t des_key_nr, + uint32_t aid, + VAR uint8_t *setting, + VAR uint8_t *max_key_no, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireGetKeySettings_2k3desM(UFR_HANDLE hndUFR, + uint8_t des2k_key_nr, + uint32_t aid, + VAR uint8_t *setting, + VAR uint8_t *max_key_no, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireGetKeySettings_3k3desM(UFR_HANDLE hndUFR, + uint8_t des3k_key_nr, + uint32_t aid, + VAR uint8_t *setting, + VAR uint8_t *max_key_no, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireGetKeySettings_PK_M(UFR_HANDLE hndUFR, + IN uint8_t *aes_key_ext, + uint32_t aid, + VAR uint8_t *setting, + VAR uint8_t *max_key_no, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireGetKeySettings_aes_PK_M(UFR_HANDLE hndUFR, + IN uint8_t *aes_key_ext, + uint32_t aid, + VAR uint8_t *setting, + VAR uint8_t *max_key_no, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireGetKeySettings_des_PK_M(UFR_HANDLE hndUFR, + IN uint8_t *des_key_ext, + uint32_t aid, + VAR uint8_t *setting, + VAR uint8_t *max_key_no, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireGetKeySettings_2k3des_PK_M(UFR_HANDLE hndUFR, + IN uint8_t *des2k_key_ext, + uint32_t aid, + VAR uint8_t *setting, + VAR uint8_t *max_key_no, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireGetKeySettings_3k3des_PK_M(UFR_HANDLE hndUFR, + IN uint8_t *des3k_key_ext, + uint32_t aid, + VAR uint8_t *setting, + VAR uint8_t *max_key_no, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_SAM_DesfireGetKeySettingsAesAuthM(UFR_HANDLE hndUFR, + uint8_t aes_key_nr, + uint32_t aid, + VAR uint8_t *setting, + VAR uint8_t *max_key_no, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_SAM_DesfireGetKeySettings3k3desAuthM(UFR_HANDLE hndUFR, + uint8_t des3k_key_nr, + uint32_t aid, + VAR uint8_t *setting, + VAR uint8_t *max_key_no, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); + + +UFR_STATUS DL_API uFR_int_DesfireChangeKeySettingsM(UFR_HANDLE hndUFR, + uint8_t aes_key_nr, + uint32_t aid, + uint8_t setting, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireChangeKeySettings_aesM(UFR_HANDLE hndUFR, + uint8_t aes_key_nr, + uint32_t aid, + uint8_t setting, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireChangeKeySettings_desM(UFR_HANDLE hndUFR, + uint8_t des_key_nr, + uint32_t aid, + uint8_t setting, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireChangeKeySettings_2k3desM(UFR_HANDLE hndUFR, + uint8_t des2k_key_nr, + uint32_t aid, + uint8_t setting, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireChangeKeySettings_3k3desM(UFR_HANDLE hndUFR, + uint8_t des3k_key_nr, + uint32_t aid, + uint8_t setting, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireChangeKeySettings_PK_M(UFR_HANDLE hndUFR, + IN uint8_t *aes_key_ext, + uint32_t aid, + uint8_t setting, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireChangeKeySettings_aes_PK_M(UFR_HANDLE hndUFR, + IN uint8_t *aes_key_ext, + uint32_t aid, + uint8_t setting, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireChangeKeySettings_des_PK_M(UFR_HANDLE hndUFR, + IN uint8_t *des_key_ext, + uint32_t aid, + uint8_t setting, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireChangeKeySettings_2k3des_PK_M(UFR_HANDLE hndUFR, + IN uint8_t *des2k_key_ext, + uint32_t aid, + uint8_t setting, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireChangeKeySettings_3k3des_PK_M(UFR_HANDLE hndUFR, + IN uint8_t *des3k_key_ext, + uint32_t aid, + uint8_t setting, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_SAM_DesfireChangeKeySettingsAesAuthM(UFR_HANDLE hndUFR, + uint8_t aes_key_nr, + uint32_t aid, + uint8_t setting, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_SAM_DesfireChangeKeySettings3k3desAuthM(UFR_HANDLE hndUFR, + uint8_t des3k_key_nr, + uint32_t aid, + uint8_t setting, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); + +UFR_STATUS DL_API uFR_int_DesfireChangeAesKeyM(UFR_HANDLE hndUFR, + uint8_t aes_key_nr, + uint32_t aid, + uint8_t aid_key_no_auth, + IN uint8_t new_aes_key[16], + uint8_t aid_key_no, + IN uint8_t old_aes_key[16], + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireChangeAesKey_aesM(UFR_HANDLE hndUFR, + uint8_t aes_key_nr, + uint32_t aid, + uint8_t aid_key_no_auth, + uint8_t new_aes_key_nr, + uint8_t aid_key_no, + uint8_t old_aes_key_nr, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireChangeDesKey_desM(UFR_HANDLE hndUFR, + uint8_t auth_des_key_nr, + uint32_t aid, + uint8_t aid_key_no_auth, + uint8_t new_des_key_nr, + uint8_t aid_key_no, + uint8_t old_des_key_nr, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireChangeDesKey_desM(UFR_HANDLE hndUFR, + uint8_t auth_des_key_nr, + uint32_t aid, + uint8_t aid_key_no_auth, + uint8_t new_des_key_nr, + uint8_t aid_key_no, + uint8_t old_des_key_nr, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireChange2K3DesKey_desM(UFR_HANDLE hndUFR, + uint8_t auth_des_key_nr, + uint32_t aid, + uint8_t aid_key_no_auth, + uint8_t new_2k3des_key_nr, + uint8_t aid_key_no, + uint8_t old_2k3des_key_nr, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireChangeDesKey_2k3desM(UFR_HANDLE hndUFR, + uint8_t auth_des2k_key_nr, + uint32_t aid, + uint8_t aid_key_no_auth, + uint8_t new_des_key_nr, + uint8_t aid_key_no, + uint8_t old_des_key_nr, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireChange2K3DesKey_2k3desM(UFR_HANDLE hndUFR, + uint8_t auth_des2k_key_nr, + uint32_t aid, + uint8_t aid_key_no_auth, + uint8_t new_2k3des_key_nr, + uint8_t aid_key_no, + uint8_t old_2k3des_key_nr, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireChange3K3DesKey_3k3desM(UFR_HANDLE hndUFR, + uint8_t auth_des3k_key_nr, + uint32_t aid, + uint8_t aid_key_no_auth, + uint8_t new_3k3des_key_nr, + uint8_t aid_key_no, + uint8_t old_3k3des_key_nr, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireChangeMasterKeyM(UFR_HANDLE hndUFR, + uint8_t auth_key_nr, + uint8_t auth_key_type, + uint8_t new_key_nr, + uint8_t new_key_type, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireChangeAesKey_PK_M(UFR_HANDLE hndUFR, + IN uint8_t *aes_key_ext, + uint32_t aid, + uint8_t aid_key_no_auth, + IN uint8_t new_aes_key[16], + uint8_t aid_key_no, + IN uint8_t old_aes_key[16], + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireChangeAesKey_aes_PK_M(UFR_HANDLE hndUFR, + IN uint8_t *aes_key_ext, + uint32_t aid, + uint8_t aid_key_no_auth, + IN uint8_t new_aes_key[16], + uint8_t aid_key_no, + IN uint8_t old_aes_key[16], + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireChangeDesKey_des_PK_M(UFR_HANDLE hndUFR, + IN uint8_t *auth_des_key, + uint32_t aid, + uint8_t aid_key_no_auth, + IN uint8_t new_des_key[8], + uint8_t aid_key_no, + IN uint8_t old_des_key[8], + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireChange2K3DesKey_des_PK_M(UFR_HANDLE hndUFR, + IN uint8_t *auth_des_key, + uint32_t aid, + uint8_t aid_key_no_auth, + IN uint8_t new_2k3des_key[16], + uint8_t aid_key_no, + IN uint8_t old_2k3des_key[16], + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireChangeDesKey_2k3des_PK_M(UFR_HANDLE hndUFR, + IN uint8_t *auth_des2k_key, + uint32_t aid, + uint8_t aid_key_no_auth, + IN uint8_t new_des_key[8], + uint8_t aid_key_no, + IN uint8_t old_des_key[8], + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireChange2K3DesKey_2k3des_PK_M(UFR_HANDLE hndUFR, + IN uint8_t *auth_des2k_key, + uint32_t aid, + uint8_t aid_key_no_auth, + IN uint8_t new_2k3des_key[16], + uint8_t aid_key_no, + IN uint8_t old_2k3des_key[16], + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireChange3K3DesKey_3k3des_PK_M(UFR_HANDLE hndUFR, + IN uint8_t *auth_des3k_key, + uint32_t aid, + uint8_t aid_key_no_auth, + IN uint8_t new_3k3des_key[24], + uint8_t aid_key_no, + IN uint8_t old_3k3des_key[24], + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireChangeMasterKey_PK_M(UFR_HANDLE hndUFR, + IN uint8_t *auth_key, + uint8_t auth_key_type, + IN uint8_t *new_key, + uint8_t new_key_type, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_SAM_DesfireChangeKey_AesAuthM(UFR_HANDLE hndUFR, + uint8_t aes_key_nr, + uint32_t aid, + uint8_t aid_key_no_auth, + uint8_t new_aes_key_nr, + uint8_t aid_key_no, + uint8_t old_aes_key_nr, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_SAM_DesfireChangeKey_3k3desAuthM(UFR_HANDLE hndUFR, + uint8_t des3k_key_nr, + uint32_t aid, + uint8_t aid_key_no_auth, + uint8_t new_aes_key_nr, + uint8_t aid_key_no, + uint8_t old_aes_key_nr, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); + +UFR_STATUS DL_API uFR_int_DesfireWriteAesKeyM(UFR_HANDLE hndUFR, + uint8_t aes_key_no, + IN uint8_t *aes_key); +UFR_STATUS DL_API uFR_int_DesfireWriteKeyM(UFR_HANDLE hndUFR, + uint8_t key_no, + IN uint8_t *key, + uint8_t key_type); + +UFR_STATUS DL_API uFR_int_DesfireReadStddDataFileM(UFR_HANDLE hndUFR, + uint8_t aes_key_nr, + uint32_t aid, + uint8_t aid_key_nr, + uint8_t file_id, + uint16_t offset, + uint16_t data_length, + uint8_t communication_settings, + OUT uint8_t *data, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireReadStddDataFile_aesM(UFR_HANDLE hndUFR, + uint8_t aes_key_nr, + uint32_t aid, + uint8_t aid_key_nr, + uint8_t file_id, + uint16_t offset, + uint16_t data_length, + uint8_t communication_settings, + OUT uint8_t *data, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireReadStddDataFile_desM(UFR_HANDLE hndUFR, + uint8_t des_key_nr, + uint32_t aid, + uint8_t aid_key_nr, + uint8_t file_id, + uint16_t offset, + uint16_t data_length, + uint8_t communication_settings, + OUT uint8_t *data, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireReadStddDataFile_2k3desM(UFR_HANDLE hndUFR, + uint8_t des2k_key_nr, + uint32_t aid, + uint8_t aid_key_nr, + uint8_t file_id, + uint16_t offset, + uint16_t data_length, + uint8_t communication_settings, + OUT uint8_t *data, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireReadStddDataFile_3k3desM(UFR_HANDLE hndUFR, + uint8_t des3k_key_nr, + uint32_t aid, + uint8_t aid_key_nr, + uint8_t file_id, + uint16_t offset, + uint16_t data_length, + uint8_t communication_settings, + OUT uint8_t *data, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireReadStdDataFile_PK_M(UFR_HANDLE hndUFR, + IN uint8_t *aes_key_ext, + uint32_t aid, + uint8_t aid_key_nr, + uint8_t file_id, + uint16_t offset, + uint16_t data_length, + uint8_t communication_settings, + OUT uint8_t *data, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireReadStdDataFile_aes_PK_M(UFR_HANDLE hndUFR, + IN uint8_t *aes_key_ext, + uint32_t aid, + uint8_t aid_key_nr, + uint8_t file_id, + uint16_t offset, + uint16_t data_length, + uint8_t communication_settings, + OUT uint8_t *data, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireReadStdDataFile_des_PK_M(UFR_HANDLE hndUFR, + IN uint8_t *des_key_ext, + uint32_t aid, + uint8_t aid_key_nr, + uint8_t file_id, + uint16_t offset, + uint16_t data_length, + uint8_t communication_settings, + OUT uint8_t *data, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireReadStdDataFile_2k3des_PK_M(UFR_HANDLE hndUFR, + IN uint8_t *des2k_key_ext, + uint32_t aid, + uint8_t aid_key_nr, + uint8_t file_id, + uint16_t offset, + uint16_t data_length, + uint8_t communication_settings, + OUT uint8_t *data, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireReadStdDataFile_3k3des_PK_M(UFR_HANDLE hndUFR, + IN uint8_t *des3k_key_ext, + uint32_t aid, + uint8_t aid_key_nr, + uint8_t file_id, + uint16_t offset, + uint16_t data_length, + uint8_t communication_settings, + OUT uint8_t *data, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_SAM_DesfireReadStdDataFileAesAuthM(UFR_HANDLE hndUFR, + uint8_t aes_key_nr, + uint32_t aid, + uint8_t aid_key_nr, + uint8_t file_id, + uint16_t offset, + uint16_t data_length, + uint8_t communication_settings, + OUT uint8_t *data, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_SAM_DesfireReadStdDataFile3k3desAuthM(UFR_HANDLE hndUFR, + uint8_t des3k_key_nr, + uint32_t aid, + uint8_t aid_key_nr, + uint8_t file_id, + uint16_t offset, + uint16_t data_length, + uint8_t communication_settings, + OUT uint8_t *data, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireReadStdDataFile_no_auth_M(UFR_HANDLE hndUFR, + uint32_t aid, + uint8_t aid_key_nr, + uint8_t file_id, + uint16_t offset, + uint16_t data_length, + uint8_t communication_settings, + OUT uint8_t *data, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); + +UFR_STATUS DL_API uFR_int_DesfireWriteStdDataFileM(UFR_HANDLE hndUFR, + uint8_t aes_key_nr, + uint32_t aid, + uint8_t aid_key_nr, + uint8_t file_id, + uint16_t offset, + uint16_t data_length, + uint8_t communication_settings, + IN uint8_t *data, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireWriteStdDataFile_aesM(UFR_HANDLE hndUFR, + uint8_t aes_key_nr, + uint32_t aid, + uint8_t aid_key_nr, + uint8_t file_id, + uint16_t offset, + uint16_t data_length, + uint8_t communication_settings, + IN uint8_t *data, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireWriteStdDataFile_3k3desM(UFR_HANDLE hndUFR, + uint8_t des3k_key_nr, + uint32_t aid, + uint8_t aid_key_nr, + uint8_t file_id, + uint16_t offset, + uint16_t data_length, + uint8_t communication_settings, + IN uint8_t *data, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireWriteStdDataFile_desM(UFR_HANDLE hndUFR, + uint8_t des_key_nr, + uint32_t aid, + uint8_t aid_key_nr, + uint8_t file_id, + uint16_t offset, + uint16_t data_length, + uint8_t communication_settings, + IN uint8_t *data, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireWriteStdDataFile_2k3desM(UFR_HANDLE hndUFR, + uint8_t des2k_key_nr, + uint32_t aid, + uint8_t aid_key_nr, + uint8_t file_id, + uint16_t offset, + uint16_t data_length, + uint8_t communication_settings, + IN uint8_t *data, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireWriteStdDataFile_PK_M(UFR_HANDLE hndUFR, + IN uint8_t *aes_key_ext, + uint32_t aid, + uint8_t aid_key_nr, + uint8_t file_id, + uint16_t offset, + uint16_t data_length, + uint8_t communication_settings, + IN uint8_t *data, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireWriteStdDataFile_aes_PK_M(UFR_HANDLE hndUFR, + IN uint8_t *aes_key_ext, + uint32_t aid, + uint8_t aid_key_nr, + uint8_t file_id, + uint16_t offset, + uint16_t data_length, + uint8_t communication_settings, + IN uint8_t *data, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireWriteStdDataFile_3k3des_PK_M(UFR_HANDLE hndUFR, + IN uint8_t *des3k_key_ext, + uint32_t aid, + uint8_t aid_key_nr, + uint8_t file_id, + uint16_t offset, + uint16_t data_length, + uint8_t communication_settings, + IN uint8_t *data, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireWriteStdDataFile_des_PK_M(UFR_HANDLE hndUFR, + IN uint8_t *des_key_ext, + uint32_t aid, + uint8_t aid_key_nr, + uint8_t file_id, + uint16_t offset, + uint16_t data_length, + uint8_t communication_settings, + IN uint8_t *data, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireWriteStdDataFile_2k3des_PK_M(UFR_HANDLE hndUFR, + IN uint8_t *des2k_key_ext, + uint32_t aid, + uint8_t aid_key_nr, + uint8_t file_id, + uint16_t offset, + uint16_t data_length, + uint8_t communication_settings, + IN uint8_t *data, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_SAM_DesfireWriteStdDataFileAesAuthM(UFR_HANDLE hndUFR, + uint8_t aes_key_nr, + uint32_t aid, + uint8_t aid_key_nr, + uint8_t file_id, + uint16_t offset, + uint16_t data_length, + uint8_t communication_settings, + IN uint8_t *data, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_SAM_DesfireWriteStdDataFile3k3desAuthM(UFR_HANDLE hndUFR, + uint8_t des3k_key_nr, + uint32_t aid, + uint8_t aid_key_nr, + uint8_t file_id, + uint16_t offset, + uint16_t data_length, + uint8_t communication_settings, + IN uint8_t *data, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireWriteStdDataFile_no_auth_M(UFR_HANDLE hndUFR, + uint32_t aid, + uint8_t aid_key_nr, + uint8_t file_id, + uint16_t offset, + uint16_t data_length, + uint8_t communication_settings, + IN uint8_t *data, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); + +UFR_STATUS DL_API uFR_int_DesfireCreateValueFileM(UFR_HANDLE hndUFR, + uint8_t aes_key_nr, + uint32_t aid, + uint8_t file_id, + int32_t lower_limit, + int32_t upper_limit, + int32_t value, + uint8_t limited_credit_enabled, + uint8_t read_key_no, + uint8_t write_key_no, + uint8_t read_write_key_no, + uint8_t change_key_no, + uint8_t communication_settings, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireCreateValueFile_desM(UFR_HANDLE hndUFR, + uint8_t des_key_nr, + uint32_t aid, + uint8_t file_id, + int32_t lower_limit, + int32_t upper_limit, + int32_t value, + uint8_t limited_credit_enabled, + uint8_t read_key_no, + uint8_t write_key_no, + uint8_t read_write_key_no, + uint8_t change_key_no, + uint8_t communication_settings, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireCreateValueFile_2k3desM(UFR_HANDLE hndUFR, + uint8_t des2k_key_nr, + uint32_t aid, + uint8_t file_id, + int32_t lower_limit, + int32_t upper_limit, + int32_t value, + uint8_t limited_credit_enabled, + uint8_t read_key_no, + uint8_t write_key_no, + uint8_t read_write_key_no, + uint8_t change_key_no, + uint8_t communication_settings, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireCreateValueFile_3k3desM(UFR_HANDLE hndUFR, + uint8_t des3k_key_nr, + uint32_t aid, + uint8_t file_id, + int32_t lower_limit, + int32_t upper_limit, + int32_t value, + uint8_t limited_credit_enabled, + uint8_t read_key_no, + uint8_t write_key_no, + uint8_t read_write_key_no, + uint8_t change_key_no, + uint8_t communication_settings, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireCreateValueFile_PK_M(UFR_HANDLE hndUFR, + IN uint8_t *aes_key_ext, + uint32_t aid, + uint8_t file_id, + int32_t lower_limit, + int32_t upper_limit, + int32_t value, + uint8_t limited_credit_enabled, + uint8_t read_key_no, + uint8_t write_key_no, + uint8_t read_write_key_no, + uint8_t change_key_no, + uint8_t communication_settings, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireCreateValueFile_des_PK_M(UFR_HANDLE hndUFR, + IN uint8_t *des_key_ext, + uint32_t aid, + uint8_t file_id, + int32_t lower_limit, + int32_t upper_limit, + int32_t value, + uint8_t limited_credit_enabled, + uint8_t read_key_no, + uint8_t write_key_no, + uint8_t read_write_key_no, + uint8_t change_key_no, + uint8_t communication_settings, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireCreateValueFile_2k3des_PK_M(UFR_HANDLE hndUFR, + IN uint8_t *des2k_key_ext, + uint32_t aid, + uint8_t file_id, + int32_t lower_limit, + int32_t upper_limit, + int32_t value, + uint8_t limited_credit_enabled, + uint8_t read_key_no, + uint8_t write_key_no, + uint8_t read_write_key_no, + uint8_t change_key_no, + uint8_t communication_settings, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireCreateValueFile_3k3des_PK_M(UFR_HANDLE hndUFR, + IN uint8_t *des3k_key_ext, + uint32_t aid, + uint8_t file_id, + int32_t lower_limit, + int32_t upper_limit, + int32_t value, + uint8_t limited_credit_enabled, + uint8_t read_key_no, + uint8_t write_key_no, + uint8_t read_write_key_no, + uint8_t change_key_no, + uint8_t communication_settings, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_SAM_DesfireCreateValueFileAesAuthM(UFR_HANDLE hndUFR, + uint8_t aes_key_nr, + uint32_t aid, + uint8_t file_id, + int32_t lower_limit, + int32_t upper_limit, + int32_t value, + uint8_t limited_credit_enabled, + uint8_t read_key_no, + uint8_t write_key_no, + uint8_t read_write_key_no, + uint8_t change_key_no, + uint8_t communication_settings, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_SAM_DesfireCreateValueFile3k3desAuthM(UFR_HANDLE hndUFR, + uint8_t des3k_key_nr, + uint32_t aid, + uint8_t file_id, + int32_t lower_limit, + int32_t upper_limit, + int32_t value, + uint8_t limited_credit_enabled, + uint8_t read_key_no, + uint8_t write_key_no, + uint8_t read_write_key_no, + uint8_t change_key_no, + uint8_t communication_settings, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireCreateValueFile_no_auth_M(UFR_HANDLE hndUFR, + uint32_t aid, + uint8_t file_id, + int32_t lower_limit, + int32_t upper_limit, + int32_t value, + uint8_t limited_credit_enabled, + uint8_t read_key_no, + uint8_t write_key_no, + uint8_t read_write_key_no, + uint8_t change_key_no, + uint8_t communication_settings, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); + +UFR_STATUS DL_API uFR_int_DesfireReadValueFileM(UFR_HANDLE hndUFR, + uint8_t aes_key_nr, + uint32_t aid, + uint8_t aid_key_nr, + uint8_t file_id, + uint8_t communication_settings, + VAR int32_t *value, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireReadValueFile_aesM(UFR_HANDLE hndUFR, + uint8_t aes_key_nr, + uint32_t aid, + uint8_t aid_key_nr, + uint8_t file_id, + uint8_t communication_settings, + VAR int32_t *value, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireReadValueFile_desM(UFR_HANDLE hndUFR, + uint8_t des_key_nr, + uint32_t aid, + uint8_t aid_key_nr, + uint8_t file_id, + uint8_t communication_settings, + VAR int32_t *value, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireReadValueFile_2k3desM(UFR_HANDLE hndUFR, + uint8_t des2k_key_nr, + uint32_t aid, + uint8_t aid_key_nr, + uint8_t file_id, + uint8_t communication_settings, + VAR int32_t *value, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireReadValueFile_3k3desM(UFR_HANDLE hndUFR, + uint8_t des3k_key_nr, + uint32_t aid, + uint8_t aid_key_nr, + uint8_t file_id, + uint8_t communication_settings, + VAR int32_t *value, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireReadValueFile_PK_M(UFR_HANDLE hndUFR, + IN uint8_t *aes_key_ext, + uint32_t aid, + uint8_t aid_key_nr, + uint8_t file_id, + uint8_t communication_settings, + VAR int32_t *value, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireReadValueFile_aes_PK_M(UFR_HANDLE hndUFR, + IN uint8_t *aes_key_ext, + uint32_t aid, + uint8_t aid_key_nr, + uint8_t file_id, + uint8_t communication_settings, + VAR int32_t *value, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireReadValueFile_des_PK_M(UFR_HANDLE hndUFR, + IN uint8_t *des_key_ext, + uint32_t aid, + uint8_t aid_key_nr, + uint8_t file_id, + uint8_t communication_settings, + VAR int32_t *value, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireReadValueFile_2k3des_PK_M(UFR_HANDLE hndUFR, + IN uint8_t *des2k_key_ext, + uint32_t aid, + uint8_t aid_key_nr, + uint8_t file_id, + uint8_t communication_settings, + VAR int32_t *value, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireReadValueFile_3k3des_PK_M(UFR_HANDLE hndUFR, + IN uint8_t *des3k_key_ext, + uint32_t aid, + uint8_t aid_key_nr, + uint8_t file_id, + uint8_t communication_settings, + VAR int32_t *value, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_SAM_DesfireReadValueFileAesAuthM(UFR_HANDLE hndUFR, + uint8_t aes_key_nr, + uint32_t aid, + uint8_t aid_key_nr, + uint8_t file_id, + uint8_t communication_settings, + VAR int32_t *value, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_SAM_DesfireReadValueFile3k3desAuthM(UFR_HANDLE hndUFR, + uint8_t des3k_key_nr, + uint32_t aid, + uint8_t aid_key_nr, + uint8_t file_id, + uint8_t communication_settings, + VAR int32_t *value, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireReadValueFile_no_auth_M(UFR_HANDLE hndUFR, + uint32_t aid, + uint8_t aid_key_nr, + uint8_t file_id, + uint8_t communication_settings, + VAR int32_t *value, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); + +UFR_STATUS DL_API uFR_int_DesfireIncreaseValueFileM(UFR_HANDLE hndUFR, + uint8_t aes_key_nr, + uint32_t aid, + uint8_t aid_key_nr, + uint8_t file_id, + uint8_t communication_settings, + uint32_t value, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireIncreaseValueFile_aesM(UFR_HANDLE hndUFR, + uint8_t aes_key_nr, + uint32_t aid, + uint8_t aid_key_nr, + uint8_t file_id, + uint8_t communication_settings, + uint32_t value, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireIncreaseValueFile_desM(UFR_HANDLE hndUFR, + uint8_t des_key_nr, + uint32_t aid, + uint8_t aid_key_nr, + uint8_t file_id, + uint8_t communication_settings, + uint32_t value, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireIncreaseValueFile_2k3desM(UFR_HANDLE hndUFR, + uint8_t des2k_key_nr, + uint32_t aid, + uint8_t aid_key_nr, + uint8_t file_id, + uint8_t communication_settings, + uint32_t value, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireIncreaseValueFile_3k3desM(UFR_HANDLE hndUFR, + uint8_t des3k_key_nr, + uint32_t aid, + uint8_t aid_key_nr, + uint8_t file_id, + uint8_t communication_settings, + uint32_t value, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireIncreaseValueFile_PK_M(UFR_HANDLE hndUFR, + IN uint8_t *aes_key_ext, + uint32_t aid, + uint8_t aid_key_nr, + uint8_t file_id, + uint8_t communication_settings, + uint32_t value, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireIncreaseValueFile_aes_PK_M(UFR_HANDLE hndUFR, + IN uint8_t *aes_key_ext, + uint32_t aid, + uint8_t aid_key_nr, + uint8_t file_id, + uint8_t communication_settings, + uint32_t value, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireIncreaseValueFile_des_PK_M(UFR_HANDLE hndUFR, + IN uint8_t *des_key_ext, + uint32_t aid, + uint8_t aid_key_nr, + uint8_t file_id, + uint8_t communication_settings, + uint32_t value, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireIncreaseValueFile_2k3des_PK_M(UFR_HANDLE hndUFR, + IN uint8_t *des2k_key_ext, + uint32_t aid, + uint8_t aid_key_nr, + uint8_t file_id, + uint8_t communication_settings, + uint32_t value, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireIncreaseValueFile_3k3des_PK_M(UFR_HANDLE hndUFR, + IN uint8_t *des3k_key_ext, + uint32_t aid, + uint8_t aid_key_nr, + uint8_t file_id, + uint8_t communication_settings, + uint32_t value, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_SAM_DesfireIncreaseValueFileAesAuthM(UFR_HANDLE hndUFR, + uint8_t aes_key_nr, + uint32_t aid, + uint8_t aid_key_nr, + uint8_t file_id, + uint8_t communication_settings, + uint32_t value, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_SAM_DesfireIncreaseValueFile3k3desAuthM(UFR_HANDLE hndUFR, + uint8_t des3k_key_nr, + uint32_t aid, + uint8_t aid_key_nr, + uint8_t file_id, + uint8_t communication_settings, + uint32_t value, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireIncreaseValueFile_no_auth_M(UFR_HANDLE hndUFR, + uint32_t aid, + uint8_t aid_key_nr, + uint8_t file_id, + uint8_t communication_settings, + uint32_t value, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); + +UFR_STATUS DL_API uFR_int_DesfireDecreaseValueFileM(UFR_HANDLE hndUFR, + uint8_t aes_key_nr, + uint32_t aid, + uint8_t aid_key_nr, + uint8_t file_id, + uint8_t communication_settings, + uint32_t value, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireDecreaseValueFile_aesM(UFR_HANDLE hndUFR, + uint8_t aes_key_nr, + uint32_t aid, + uint8_t aid_key_nr, + uint8_t file_id, + uint8_t communication_settings, + uint32_t value, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireDecreaseValueFile_desM(UFR_HANDLE hndUFR, + uint8_t des_key_nr, + uint32_t aid, + uint8_t aid_key_nr, + uint8_t file_id, + uint8_t communication_settings, + uint32_t value, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireDecreaseValueFile_2k3desM(UFR_HANDLE hndUFR, + uint8_t des2k_key_nr, + uint32_t aid, + uint8_t aid_key_nr, + uint8_t file_id, + uint8_t communication_settings, + uint32_t value, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireDecreaseValueFile_3k3desM(UFR_HANDLE hndUFR, + uint8_t des3k_key_nr, + uint32_t aid, + uint8_t aid_key_nr, + uint8_t file_id, + uint8_t communication_settings, + uint32_t value, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireDecreaseValueFile_PK_M(UFR_HANDLE hndUFR, + IN uint8_t *aes_key_ext, + uint32_t aid, + uint8_t aid_key_nr, + uint8_t file_id, + uint8_t communication_settings, + uint32_t value, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireDecreaseValueFile_aes_PK_M(UFR_HANDLE hndUFR, + IN uint8_t *aes_key_ext, + uint32_t aid, + uint8_t aid_key_nr, + uint8_t file_id, + uint8_t communication_settings, + uint32_t value, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireDecreaseValueFile_des_PK_M(UFR_HANDLE hndUFR, + IN uint8_t *des_key_ext, + uint32_t aid, + uint8_t aid_key_nr, + uint8_t file_id, + uint8_t communication_settings, + uint32_t value, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireDecreaseValueFile_2k3des_PK_M(UFR_HANDLE hndUFR, + IN uint8_t *des2k_key_ext, + uint32_t aid, + uint8_t aid_key_nr, + uint8_t file_id, + uint8_t communication_settings, + uint32_t value, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireDecreaseValueFile_3k3des_PK_M(UFR_HANDLE hndUFR, + IN uint8_t *des3k_key_ext, + uint32_t aid, + uint8_t aid_key_nr, + uint8_t file_id, + uint8_t communication_settings, + uint32_t value, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_SAM_DesfireDecreaseValueFileAesAuthM(UFR_HANDLE hndUFR, + uint8_t aes_key_nr, + uint32_t aid, + uint8_t aid_key_nr, + uint8_t file_id, + uint8_t communication_settings, + uint32_t value, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_SAM_DesfireDecreaseValueFile3k3desAuthM(UFR_HANDLE hndUFR, + uint8_t des3k_key_nr, + uint32_t aid, + uint8_t aid_key_nr, + uint8_t file_id, + uint8_t communication_settings, + uint32_t value, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireDecreaseValueFile_no_auth_M(UFR_HANDLE hndUFR, + uint32_t aid, + uint8_t aid_key_nr, + uint8_t file_id, + uint8_t communication_settings, + uint32_t value, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); + +UFR_STATUS DL_API uFR_int_DesfireGetApplicationIdsM(UFR_HANDLE hndUFR, + uint8_t aes_key_nr, + OUT uint32_t *application_ids, + VAR uint8_t *number_of_aplication_ids, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireGetApplicationIds_aesM(UFR_HANDLE hndUFR, + uint8_t aes_key_nr, + OUT uint32_t *application_ids, + VAR uint8_t *number_of_aplication_ids, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireGetApplicationIds_desM(UFR_HANDLE hndUFR, + uint8_t des_key_nr, + OUT uint32_t *application_ids, + VAR uint8_t *number_of_aplication_ids, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireGetApplicationIds_2k3desM(UFR_HANDLE hndUFR, + uint8_t des2k_key_nr, + OUT uint32_t *application_ids, + VAR uint8_t *number_of_aplication_ids, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireGetApplicationIds_3k3desM(UFR_HANDLE hndUFR, + uint8_t des3k_key_nr, + OUT uint32_t *application_ids, + VAR uint8_t *number_of_aplication_ids, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_SAM_DesfireGetApplicationIdsAesAuthM(UFR_HANDLE hndUFR, + uint8_t aes_key_nr, + OUT uint32_t *application_ids, + VAR uint8_t *number_of_aplication_ids, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_SAM_DesfireGetApplicationIds3k3desAuthM(UFR_HANDLE hndUFR, + uint8_t des3k_key_nr, + OUT uint32_t *application_ids, + VAR uint8_t *number_of_aplication_ids, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireGetApplicationIds_PK_M(UFR_HANDLE hndUFR, + IN uint8_t *aes_key_ext, + OUT uint32_t *application_ids, + VAR uint8_t *number_of_aplication_ids, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireGetApplicationIds_aes_PK_M(UFR_HANDLE hndUFR, + IN uint8_t *aes_key_ext, + OUT uint32_t *application_ids, + VAR uint8_t *number_of_aplication_ids, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireGetApplicationIds_des_PK_M(UFR_HANDLE hndUFR, + IN uint8_t *des_key_ext, + OUT uint32_t *application_ids, + VAR uint8_t *number_of_aplication_ids, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireGetApplicationIds_2k3aes_PK_M(UFR_HANDLE hndUFR, + IN uint8_t *des2k_key_ext, + OUT uint32_t *application_ids, + VAR uint8_t *number_of_aplication_ids, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireGetApplicationIds_3k3des_PK_M(UFR_HANDLE hndUFR, + IN uint8_t *des3k_key_ext, + OUT uint32_t *application_ids, + VAR uint8_t *number_of_aplication_ids, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireGetApplicationIds_no_auth_M(UFR_HANDLE hndUFR, + OUT uint32_t *application_ids, + VAR uint8_t *number_of_aplication_ids, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); + +UFR_STATUS DL_API uFR_int_DesfireCreateLinearRecordFile_aesM(UFR_HANDLE hndUFR, + uint8_t aes_key_nr, + uint32_t aid, + uint8_t file_id, + uint32_t record_size, + uint32_t max_rec_no, + uint8_t read_key_no, + uint8_t write_key_no, + uint8_t read_write_key_no, + uint8_t change_key_no, + uint8_t communication_settings, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireCreateLinearRecordFile_desM(UFR_HANDLE hndUFR, + uint8_t des_key_nr, + uint32_t aid, + uint8_t file_id, + uint32_t record_size, + uint32_t max_rec_no, + uint8_t read_key_no, + uint8_t write_key_no, + uint8_t read_write_key_no, + uint8_t change_key_no, + uint8_t communication_settings, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireCreateLinearRecordFile_2k3desM(UFR_HANDLE hndUFR, + uint8_t des2k_key_nr, + uint32_t aid, + uint8_t file_id, + uint32_t record_size, + uint32_t max_rec_no, + uint8_t read_key_no, + uint8_t write_key_no, + uint8_t read_write_key_no, + uint8_t change_key_no, + uint8_t communication_settings, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireCreateLinearRecordFile_3k3desM(UFR_HANDLE hndUFR, + uint8_t des3k_key_nr, + uint32_t aid, + uint8_t file_id, + uint32_t record_size, + uint32_t max_rec_no, + uint8_t read_key_no, + uint8_t write_key_no, + uint8_t read_write_key_no, + uint8_t change_key_no, + uint8_t communication_settings, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_SAM_DesfireCreateLinearRecordFileAesAuthM(UFR_HANDLE hndUFR, + uint8_t aes_key_nr, + uint32_t aid, + uint8_t file_id, + uint32_t record_size, + uint32_t max_rec_no, + uint8_t read_key_no, + uint8_t write_key_no, + uint8_t read_write_key_no, + uint8_t change_key_no, + uint8_t communication_settings, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_SAM_DesfireCreateLinearRecordFile3k3desAuthM(UFR_HANDLE hndUFR, + uint8_t des3k_key_nr, + uint32_t aid, + uint8_t file_id, + uint32_t record_size, + uint32_t max_rec_no, + uint8_t read_key_no, + uint8_t write_key_no, + uint8_t read_write_key_no, + uint8_t change_key_no, + uint8_t communication_settings, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireCreateLinearRecordFile_aes_PK_M(UFR_HANDLE hndUFR, + IN uint8_t *aes_key_ext, + uint32_t aid, + uint8_t file_id, + uint32_t record_size, + uint32_t max_rec_no, + uint8_t read_key_no, + uint8_t write_key_no, + uint8_t read_write_key_no, + uint8_t change_key_no, + uint8_t communication_settings, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireCreateLinearRecordFile_des_PK_M(UFR_HANDLE hndUFR, + IN uint8_t *des_key_ext, + uint32_t aid, + uint8_t file_id, + uint32_t record_size, + uint32_t max_rec_no, + uint8_t read_key_no, + uint8_t write_key_no, + uint8_t read_write_key_no, + uint8_t change_key_no, + uint8_t communication_settings, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireCreateLinearRecordFile_2k3des_PK_M(UFR_HANDLE hndUFR, + IN uint8_t *des2k_key_ext, + uint32_t aid, + uint8_t file_id, + uint32_t record_size, + uint32_t max_rec_no, + uint8_t read_key_no, + uint8_t write_key_no, + uint8_t read_write_key_no, + uint8_t change_key_no, + uint8_t communication_settings, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireCreateLinearRecordFile_3k3des_PK_M(UFR_HANDLE hndUFR, + IN uint8_t *des3k_key_ext, + uint32_t aid, + uint8_t file_id, + uint32_t record_size, + uint32_t max_rec_no, + uint8_t read_key_no, + uint8_t write_key_no, + uint8_t read_write_key_no, + uint8_t change_key_no, + uint8_t communication_settings, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireCreateLinearRecordFile_no_authM(UFR_HANDLE hndUFR, + uint32_t aid, + uint8_t file_id, + uint32_t record_size, + uint32_t max_rec_no, + uint8_t read_key_no, + uint8_t write_key_no, + uint8_t read_write_key_no, + uint8_t change_key_no, + uint8_t communication_settings, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); + +UFR_STATUS DL_API uFR_int_DesfireCreateCyclicRecordFile_aesM(UFR_HANDLE hndUFR, + uint8_t aes_key_nr, + uint32_t aid, + uint8_t file_id, + uint32_t record_size, + uint32_t max_rec_no, + uint8_t read_key_no, + uint8_t write_key_no, + uint8_t read_write_key_no, + uint8_t change_key_no, + uint8_t communication_settings, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireCreateCyclicRecordFile_desM(UFR_HANDLE hndUFR, + uint8_t des_key_nr, + uint32_t aid, + uint8_t file_id, + uint32_t record_size, + uint32_t max_rec_no, + uint8_t read_key_no, + uint8_t write_key_no, + uint8_t read_write_key_no, + uint8_t change_key_no, + uint8_t communication_settings, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireCreateCyclicRecordFile_2k3desM(UFR_HANDLE hndUFR, + uint8_t des2k_key_nr, + uint32_t aid, + uint8_t file_id, + uint32_t record_size, + uint32_t max_rec_no, + uint8_t read_key_no, + uint8_t write_key_no, + uint8_t read_write_key_no, + uint8_t change_key_no, + uint8_t communication_settings, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireCreateCyclicRecordFile_3k3desM(UFR_HANDLE hndUFR, + uint8_t des3k_key_nr, + uint32_t aid, + uint8_t file_id, + uint32_t record_size, + uint32_t max_rec_no, + uint8_t read_key_no, + uint8_t write_key_no, + uint8_t read_write_key_no, + uint8_t change_key_no, + uint8_t communication_settings, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_SAM_DesfireCreateCyclicRecordFileAesAuthM(UFR_HANDLE hndUFR, + uint8_t aes_key_nr, + uint32_t aid, + uint8_t file_id, + uint32_t record_size, + uint32_t max_rec_no, + uint8_t read_key_no, + uint8_t write_key_no, + uint8_t read_write_key_no, + uint8_t change_key_no, + uint8_t communication_settings, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_SAM_DesfireCreateCyclicRecordFile3k3desAuthM(UFR_HANDLE hndUFR, + uint8_t des3k_key_nr, + uint32_t aid, + uint8_t file_id, + uint32_t record_size, + uint32_t max_rec_no, + uint8_t read_key_no, + uint8_t write_key_no, + uint8_t read_write_key_no, + uint8_t change_key_no, + uint8_t communication_settings, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireCreateCyclicRecordFile_aes_PK_M(UFR_HANDLE hndUFR, + IN uint8_t *aes_key_ext, + uint32_t aid, + uint8_t file_id, + uint32_t record_size, + uint32_t max_rec_no, + uint8_t read_key_no, + uint8_t write_key_no, + uint8_t read_write_key_no, + uint8_t change_key_no, + uint8_t communication_settings, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireCreateCyclicRecordFile_des_PK_M(UFR_HANDLE hndUFR, + IN uint8_t *des_key_ext, + uint32_t aid, + uint8_t file_id, + uint32_t record_size, + uint32_t max_rec_no, + uint8_t read_key_no, + uint8_t write_key_no, + uint8_t read_write_key_no, + uint8_t change_key_no, + uint8_t communication_settings, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireCreateCyclicRecordFile_2k3des_PK_M(UFR_HANDLE hndUFR, + IN uint8_t *des2k_key_ext, + uint32_t aid, + uint8_t file_id, + uint32_t record_size, + uint32_t max_rec_no, + uint8_t read_key_no, + uint8_t write_key_no, + uint8_t read_write_key_no, + uint8_t change_key_no, + uint8_t communication_settings, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireCreateCyclicRecordFile_3k3des_PK_M(UFR_HANDLE hndUFR, + IN uint8_t *des3k_key_ext, + uint32_t aid, + uint8_t file_id, + uint32_t record_size, + uint32_t max_rec_no, + uint8_t read_key_no, + uint8_t write_key_no, + uint8_t read_write_key_no, + uint8_t change_key_no, + uint8_t communication_settings, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireCreateCyclicRecordFile_no_authM(UFR_HANDLE hndUFR, + uint32_t aid, + uint8_t file_id, + uint32_t record_size, + uint32_t max_rec_no, + uint8_t read_key_no, + uint8_t write_key_no, + uint8_t read_write_key_no, + uint8_t change_key_no, + uint8_t communication_settings, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); + +UFR_STATUS DL_API uFR_int_DesfireWriteRecord_aesM(UFR_HANDLE hndUFR, + uint8_t aes_key_nr, + uint32_t aid, + uint8_t aid_key_nr, + uint8_t file_id, + uint16_t offset, + uint16_t data_length, + uint8_t communication_settings, + uint8_t *data, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireWriteRecord_desM(UFR_HANDLE hndUFR, + uint8_t des_key_nr, + uint32_t aid, + uint8_t aid_key_nr, + uint8_t file_id, + uint16_t offset, + uint16_t data_length, + uint8_t communication_settings, + uint8_t *data, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireWriteRecord_2k3desM(UFR_HANDLE hndUFR, + uint8_t des2k_key_nr, + uint32_t aid, + uint8_t aid_key_nr, + uint8_t file_id, + uint16_t offset, + uint16_t data_length, + uint8_t communication_settings, + uint8_t *data, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireWriteRecord_3k3desM(UFR_HANDLE hndUFR, + uint8_t des3k_key_nr, + uint32_t aid, + uint8_t aid_key_nr, + uint8_t file_id, + uint16_t offset, + uint16_t data_length, + uint8_t communication_settings, + uint8_t *data, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_SAM_DesfireWriteRecordAesAuthM(UFR_HANDLE hndUFR, + uint8_t aes_key_nr, + uint32_t aid, + uint8_t aid_key_nr, + uint8_t file_id, + uint16_t offset, + uint16_t data_length, + uint8_t communication_settings, + IN uint8_t *data, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_SAM_DesfireWriteRecord3k3desAuthM(UFR_HANDLE hndUFR, + uint8_t aes_key_nr, + uint32_t aid, + uint8_t aid_key_nr, + uint8_t file_id, + uint16_t offset, + uint16_t data_length, + uint8_t communication_settings, + IN uint8_t *data, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireWriteRecord_aes_PK_M(UFR_HANDLE hndUFR, + IN uint8_t *aes_key_ext, + uint32_t aid, + uint8_t aid_key_nr, + uint8_t file_id, + uint16_t offset, + uint16_t data_length, + uint8_t communication_settings, + IN uint8_t *data, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireWriteRecord_des_PK_M(UFR_HANDLE hndUFR, + IN uint8_t *des_key_ext, + uint32_t aid, + uint8_t aid_key_nr, + uint8_t file_id, + uint16_t offset, + uint16_t data_length, + uint8_t communication_settings, + IN uint8_t *data, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireWriteRecord_2k3des_PK_M(UFR_HANDLE hndUFR, + IN uint8_t *des2k_key_ext, + uint32_t aid, + uint8_t aid_key_nr, + uint8_t file_id, + uint16_t offset, + uint16_t data_length, + uint8_t communication_settings, + IN uint8_t *data, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireWriteRecord_3k3des_PK_M(UFR_HANDLE hndUFR, + IN uint8_t *des3k_key_ext, + uint32_t aid, + uint8_t aid_key_nr, + uint8_t file_id, + uint16_t offset, + uint16_t data_length, + uint8_t communication_settings, + IN uint8_t *data, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireWriteRecord_no_authM(UFR_HANDLE hndUFR, + uint32_t aid, + uint8_t aid_key_nr, + uint8_t file_id, + uint16_t offset, + uint16_t data_length, + uint8_t communication_settings, + IN uint8_t *data, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); + +UFR_STATUS DL_API uFR_int_DesfireReadRecords_aesM(UFR_HANDLE hndUFR, + uint8_t aes_key_nr, + uint32_t aid, + uint8_t aid_key_nr, + uint8_t file_id, + uint16_t offset, + uint16_t number_of_records, + uint16_t record_size, + uint8_t communication_settings, + OUT uint8_t *data, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireReadRecords_desM(UFR_HANDLE hndUFR, + uint8_t des_key_nr, + uint32_t aid, + uint8_t aid_key_nr, + uint8_t file_id, + uint16_t offset, + uint16_t number_of_records, + uint16_t record_size, + uint8_t communication_settings, + OUT uint8_t *data, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireReadRecords_2k3desM(UFR_HANDLE hndUFR, + uint8_t des2k_key_nr, + uint32_t aid, + uint8_t aid_key_nr, + uint8_t file_id, + uint16_t offset, + uint16_t number_of_records, + uint16_t record_size, + uint8_t communication_settings, + OUT uint8_t *data, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireReadRecords_3k3desM(UFR_HANDLE hndUFR, + uint8_t des3k_key_nr, + uint32_t aid, + uint8_t aid_key_nr, + uint8_t file_id, + uint16_t offset, + uint16_t number_of_records, + uint16_t record_size, + uint8_t communication_settings, + OUT uint8_t *data, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_SAM_DesfireReadRecordsAesAuthM(UFR_HANDLE hndUFR, + uint8_t aes_key_nr, + uint32_t aid, + uint8_t aid_key_nr, + uint8_t file_id, + uint16_t offset, + uint16_t number_of_records, + uint16_t record_size, + uint8_t communication_settings, + OUT uint8_t *data, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_SAM_DesfireReadRecords3k3desAuthM(UFR_HANDLE hndUFR, + uint8_t aes_key_nr, + uint32_t aid, + uint8_t aid_key_nr, + uint8_t file_id, + uint16_t offset, + uint16_t number_of_records, + uint16_t record_size, + uint8_t communication_settings, + OUT uint8_t *data, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireReadRecords_aes_PK_M(UFR_HANDLE hndUFR, + IN uint8_t *aes_key_ext, + uint32_t aid, + uint8_t aid_key_nr, + uint8_t file_id, + uint16_t offset, + uint16_t number_of_records, + uint16_t record_size, + uint8_t communication_settings, + OUT uint8_t *data, + VAR uint16_t *card_status, VAR + uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireReadRecords_des_PK_M(UFR_HANDLE hndUFR, + IN uint8_t *des_key_ext, + uint32_t aid, + uint8_t aid_key_nr, + uint8_t file_id, + uint16_t offset, + uint16_t number_of_records, + uint16_t record_size, + uint8_t communication_settings, + OUT uint8_t *data, + VAR uint16_t *card_status, VAR + uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireReadRecords_2k3des_PK_M(UFR_HANDLE hndUFR, + IN uint8_t *des2k_key_ext, + uint32_t aid, + uint8_t aid_key_nr, + uint8_t file_id, + uint16_t offset, + uint16_t number_of_records, + uint16_t record_size, + uint8_t communication_settings, + OUT uint8_t *data, + VAR uint16_t *card_status, VAR + uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireReadRecords_3k3des_PK_M(UFR_HANDLE hndUFR, + IN uint8_t *des3k_key_ext, + uint32_t aid, + uint8_t aid_key_nr, + uint8_t file_id, + uint16_t offset, + uint16_t number_of_records, + uint16_t record_size, + uint8_t communication_settings, + OUT uint8_t *data, + VAR uint16_t *card_status, VAR + uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireReadRecords_no_authM(UFR_HANDLE hndUFR, + uint32_t aid, + uint8_t aid_key_nr, + uint8_t file_id, + uint16_t offset, + uint16_t number_of_records, + uint16_t record_size, + uint8_t communication_settings, + uint8_t *data, + uint16_t *card_status, + uint16_t *exec_time); + +UFR_STATUS DL_API uFR_int_DesfireClearRecordFile_aesM(UFR_HANDLE hndUFR, + uint8_t aes_key_nr, + uint32_t aid, + uint8_t file_id, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireClearRecordFile_desM(UFR_HANDLE hndUFR, + uint8_t des_key_nr, + uint32_t aid, + uint8_t file_id, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireClearRecordFile_2k3desM(UFR_HANDLE hndUFR, + uint8_t des2k_key_nr, + uint32_t aid, + uint8_t file_id, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireClearRecordFile_3k3desM(UFR_HANDLE hndUFR, + uint8_t des3k_key_nr, + uint32_t aid, + uint8_t file_id, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_SAM_DesfireClearRecordFileAesAuthM(UFR_HANDLE hndUFR, + uint8_t aes_key_nr, + uint32_t aid, + uint8_t file_id, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_SAM_DesfireClearRecordFile3k3desAuthM(UFR_HANDLE hndUFR, + uint8_t des3k_key_nr, + uint32_t aid, + uint8_t file_id, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireClearRecordFile_PK_M(UFR_HANDLE hndUFR, + IN uint8_t *aes_key_ext, + uint32_t aid, + uint8_t file_id, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireClearRecordFile_aes_PK_M(UFR_HANDLE hndUFR, + IN uint8_t *aes_key_ext, + uint32_t aid, + uint8_t file_id, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireClearRecordFile_des_PK_M(UFR_HANDLE hndUFR, + IN uint8_t *des_key_ext, + uint32_t aid, + uint8_t file_id, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireClearRecordFile_2k3des_PK_M(UFR_HANDLE hndUFR, + IN uint8_t *des2k_key_ext, + uint32_t aid, + uint8_t file_id, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireClearRecordFile_3k3des_PK_M(UFR_HANDLE hndUFR, + IN uint8_t *des3k_key_ext, + uint32_t aid, + uint8_t file_id, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireClearRecordFile_no_authM(UFR_HANDLE hndUFR, + uint32_t aid, + uint8_t file_id, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +//--------------------------------------------------------------------------------------------- + +UFR_STATUS DL_API GreenLedBlinkingTurnOnM(UFR_HANDLE hndUFR); + +UFR_STATUS DL_API GreenLedBlinkingTurnOffM(UFR_HANDLE hndUFR); + +///////////////////////////////////////////////////////////////////// + +UFR_STATUS DL_API SetRfAnalogRegistersTypeAM(UFR_HANDLE hndUFR, + uint8_t ThresholdMinLevel, + uint8_t ThresholdCollLevel, + uint8_t RFLevelAmp, + uint8_t RxGain, + uint8_t RFLevel); + +UFR_STATUS DL_API SetRfAnalogRegistersTypeBM(UFR_HANDLE hndUFR, + uint8_t ThresholdMinLevel, + uint8_t ThresholdCollLevel, + uint8_t RFLevelAmp, + uint8_t RxGain, + uint8_t RFLevel); + +UFR_STATUS DL_API SetRfAnalogRegistersISO14443_212M(UFR_HANDLE hndUFR, + uint8_t ThresholdMinLevel, + uint8_t ThresholdCollLevel, + uint8_t RFLevelAmp, + uint8_t RxGain, + uint8_t RFLevel); + +UFR_STATUS DL_API SetRfAnalogRegistersISO14443_424M(UFR_HANDLE hndUFR, + uint8_t ThresholdMinLevel, + uint8_t ThresholdCollLevel, + uint8_t RFLevelAmp, + uint8_t RxGain, + uint8_t RFLevel); + +UFR_STATUS DL_API SetRfAnalogRegistersTypeADefaultM(UFR_HANDLE hndUFR); + +UFR_STATUS DL_API SetRfAnalogRegistersTypeBDefaultM(UFR_HANDLE hndUFR); + +UFR_STATUS DL_API SetRfAnalogRegistersISO14443_212DefaultM(UFR_HANDLE hndUFR); + +UFR_STATUS DL_API SetRfAnalogRegistersISO14443_424DefaultM(UFR_HANDLE hndUFR); + +UFR_STATUS DL_API GetRfAnalogRegistersTypeAM(UFR_HANDLE hndUFR, + VAR uint8_t *ThresholdMinLevel, + VAR uint8_t *ThresholdCollLevel, + VAR uint8_t *RFLevelAmp, + VAR uint8_t *RxGain, + VAR uint8_t *RFLevel); + +UFR_STATUS DL_API GetRfAnalogRegistersTypeBM(UFR_HANDLE hndUFR, + VAR uint8_t *ThresholdMinLevel, + VAR uint8_t *ThresholdCollLevel, + VAR uint8_t *RFLevelAmp, + VAR uint8_t *RxGain, + VAR uint8_t *RFLevel); + +UFR_STATUS DL_API GetRfAnalogRegistersISO14443_212M(UFR_HANDLE hndUFR, + VAR uint8_t *ThresholdMinLevel, + VAR uint8_t *ThresholdCollLevel, + VAR uint8_t *RFLevelAmp, + VAR uint8_t *RxGain, + VAR uint8_t *RFLevel); + +UFR_STATUS DL_API GetRfAnalogRegistersISO14443_424M(UFR_HANDLE hndUFR, + VAR uint8_t *ThresholdMinLevel, + VAR uint8_t *ThresholdCollLevel, + VAR uint8_t *RFLevelAmp, + VAR uint8_t *RxGain, + VAR uint8_t *RFLevel); + +UFR_STATUS DL_API SetRfAnalogRegistersTypeATransM(UFR_HANDLE hndUFR, + uint8_t ThresholdMinLevel, + uint8_t ThresholdCollLevel, + uint8_t RFLevelAmp, + uint8_t RxGain, + uint8_t RFLevel, + uint8_t CWGsNOn, + uint8_t ModGsNOn, + uint8_t CWGsP, + uint8_t CWGsNOff, + uint8_t ModGsNOff); + +UFR_STATUS DL_API SetRfAnalogRegistersTypeBTransM(UFR_HANDLE hndUFR, + uint8_t ThresholdMinLevel, + uint8_t ThresholdCollLevel, + uint8_t RFLevelAmp, + uint8_t RxGain, + uint8_t RFLevel, + uint8_t CWGsNOn, + uint8_t ModGsNOn, + uint8_t CWGsP, + uint8_t ModGsP); + +UFR_STATUS DL_API GetRfAnalogRegistersTypeATransM(UFR_HANDLE hndUFR, + VAR uint8_t *ThresholdMinLevel, + VAR uint8_t *ThresholdCollLevel, + VAR uint8_t *RFLevelAmp, + VAR uint8_t *RxGain, + VAR uint8_t *RFLevel, + VAR uint8_t *CWGsNOn, + VAR uint8_t *ModGsNOn, + VAR uint8_t *CWGsP, + VAR uint8_t *CWGsNOff, + VAR uint8_t *ModGsNOff); + +UFR_STATUS DL_API GetRfAnalogRegistersTypeBTransM(UFR_HANDLE hndUFR, + VAR uint8_t *ThresholdMinLevel, + VAR uint8_t *ThresholdCollLevel, + VAR uint8_t *RFLevelAmp, + VAR uint8_t *RxGain, + VAR uint8_t *RFLevel, + VAR uint8_t *CWGsNOn, + VAR uint8_t *ModGsNOn, + VAR uint8_t *CWGsP, + VAR uint8_t *ModGsP); + +UFR_STATUS DL_API FastFlashCheckM(UFR_HANDLE hndUFR); +UFR_STATUS DL_API DefaultBaudrateFlashCheckM(UFR_HANDLE hndUFR); + +UFR_STATUS DL_API GetReaderParametersM(UFR_HANDLE hndUFR, uint8_t *mui, uint8_t *serial_nr, + uint8_t *hw_type, uint8_t *hw_ver, uint8_t *device_type, + uint8_t *fw_ver_major, uint8_t *fw_ver_minor, uint8_t *fw_ver_build); + +//SAM +UFR_STATUS DL_API SAM_get_version_rawM(UFR_HANDLE hndUFR, + OUT uint8_t *data, + VAR uint8_t *length); +UFR_STATUS DL_API SAM_get_versionM(UFR_HANDLE hndUFR, + VAR SAM_HW_TYPE *sam_type, + VAR uint8_t *sam_uid); +UFR_STATUS DL_API SAM_get_key_entry_rawM(UFR_HANDLE hndUFR, + uint8_t key_no, + OUT uint8_t *key_entry, + VAR uint8_t *key_length, + OUT uint8_t *apdu_sw); +UFR_STATUS DL_API SAM_authenticate_host_no_div_desM(UFR_HANDLE hndUFR, + uint8_t key_no, + uint8_t key_v, + IN uint8_t *des_key); +UFR_STATUS DL_API SAM_pre_pesonalization_master_AES128_keyM(UFR_HANDLE hndUFR, + IN uint8_t *aes_key_ver_a, + uint8_t ver_a, + IN uint8_t *aes_key_ver_b, + uint8_t ver_b, + IN uint8_t *aes_key_ver_c, + uint8_t ver_c, + OUT uint8_t *apdu_sw); +UFR_STATUS DL_API SAM_pre_personalization_switch_to_AV2_modeM(UFR_HANDLE hndUFR, + IN uint8_t *master_aes_key, + uint8_t key_version, + OUT uint8_t *apdu_sw); +UFR_STATUS DL_API SAM_authenticate_host_AV2M(UFR_HANDLE hndUFR, + IN uint8_t *master_aes_key, + uint8_t key_nr, + uint8_t key_version, + uint8_t host_mode, + OUT uint8_t *apdu_sw); +UFR_STATUS DL_API SAM_change_key_entry_mifare_AV2_plain_one_keyM(UFR_HANDLE hndUFR, + uint8_t key_entry_no, + IN uint8_t *keyA, + IN uint8_t *keyB, + uint8_t key_no_CEK, + uint8_t key_v_CEK, + uint8_t ref_no_KUC, + OUT uint8_t *apdu_sw); +UFR_STATUS DL_API SAM_change_key_entry_AES_AV2_plain_one_keyM(UFR_HANDLE hndUFR, + uint8_t key_entry_no, + IN uint8_t *key, + uint8_t key_no_CEK, + uint8_t key_v_CEK, + uint8_t ref_no_KUC, + OUT uint8_t *apdu_sw); +UFR_STATUS DL_API SAM_change_key_entry_3K3DES_AV2_plain_one_keyM(UFR_HANDLE hndUFR, + uint8_t key_entry_no, + IN uint8_t *key, + uint8_t key_no_CEK, + uint8_t key_v_CEK, + uint8_t ref_no_KUC, + OUT uint8_t *apdu_sw); +UFR_STATUS DL_API SAM_change_key_entry_2K3DES_AV2_plain_one_keyM(UFR_HANDLE hndUFR, + uint8_t key_entry_no, + IN uint8_t *key, + uint8_t key_no_CEK, + uint8_t key_v_CEK, + uint8_t ref_no_KUC, + OUT uint8_t *apdu_sw); +UFR_STATUS DL_API SAM_change_key_entry_aes_AV2_plain_host_keyM(UFR_HANDLE hndUFR, + uint8_t key_entry_no, + IN uint8_t *aes_key_ver_a, + uint8_t ver_a, + IN uint8_t *aes_key_ver_b, + uint8_t ver_b, + IN uint8_t *aes_key_ver_c, + uint8_t ver_c, + uint8_t key_no_CEK, + uint8_t key_v_CEK, + uint8_t ref_no_KUC, + uint8_t sam_lock_unlock, + OUT uint8_t *apdu_sw); +UFR_STATUS DL_API WriteSamUnlockKeyM(UFR_HANDLE hndUFR, + uint8_t key_no, + uint8_t key_ver, + IN uint8_t *aes_key); + +//MIFARE PLUS +UFR_STATUS DL_API MFP_WritePersoM(UFR_HANDLE hndUFR, + uint16_t address, + IN uint8_t *data); +UFR_STATUS DL_API MFP_CommitPersoM(UFR_HANDLE hndUFR); +UFR_STATUS DL_API MFP_PersonalizationMinimalM(UFR_HANDLE hndUFR, + IN uint8_t *card_master_key, + IN uint8_t *card_config_key, + IN uint8_t *level_2_switch_key, + IN uint8_t *level_3_switch_key, + IN uint8_t *level_1_auth_key, + IN uint8_t *select_vc_key, + IN uint8_t *prox_chk_key, + IN uint8_t *vc_poll_enc_key, + IN uint8_t *vc_poll_mac_key); + +UFR_STATUS DL_API MFP_SwitchToSecurityLevel3M(UFR_HANDLE hndUFR, + uint8_t key_index); +UFR_STATUS DL_API MFP_SwitchToSecurityLevel3_PKM(UFR_HANDLE hndUFR, + IN uint8_t *aes_key); + +UFR_STATUS DL_API MFP_AesAuthSecurityLevel1M(UFR_HANDLE hndUFR, + uint8_t key_index); +UFR_STATUS DL_API MFP_AesAuthSecurityLevel1_PKM(UFR_HANDLE hndUFR, + IN uint8_t *aes_key); + +UFR_STATUS DL_API MFP_ChangeMasterKeyM(UFR_HANDLE hndUFR, + uint8_t key_index, + IN uint8_t *new_key); +UFR_STATUS DL_API MFP_ChangeMasterKeySamKeyM(UFR_HANDLE hndUFR, + uint8_t key_index, + uint8_t new_key_index); +UFR_STATUS DL_API MFP_ChangeMasterKey_PKM(UFR_HANDLE hndUFR, + IN uint8_t *old_key, + IN uint8_t *new_key); + +UFR_STATUS DL_API MFP_ChangeConfigurationKeyM(UFR_HANDLE hndUFR, + uint8_t key_index, + IN uint8_t *new_key); +UFR_STATUS DL_API MFP_ChangeConfigurationKeySamKeyM(UFR_HANDLE hndUFR, + uint8_t key_index, + uint8_t new_key_index); +UFR_STATUS DL_API MFP_ChangeConfigurationKey_PKM(UFR_HANDLE hndUFR, + IN uint8_t *old_key, + IN uint8_t *new_key); + +UFR_STATUS DL_API MFP_FieldConfigurationSetM(UFR_HANDLE hndUFR, + uint8_t configuration_key_index, + uint8_t rid_use, + uint8_t prox_check_use); +UFR_STATUS DL_API MFP_FieldConfigurationSetSamKeyM(UFR_HANDLE hndUFR, + uint8_t configuration_key_index, + uint8_t rid_use, + uint8_t prox_check_use); +UFR_STATUS DL_API MFP_FieldConfigurationSet_PKM(UFR_HANDLE hndUFR, + IN uint8_t *configuration_key, + uint8_t rid_use, + uint8_t prox_check_use); + +UFR_STATUS DL_API MFP_ChangeSectorKeyM(UFR_HANDLE hndUFR, + uint8_t sector_nr, + uint8_t auth_mode, + uint8_t key_index, + IN uint8_t *new_key); +UFR_STATUS DL_API MFP_ChangeSectorKeySamKeyM(UFR_HANDLE hndUFR, + uint8_t sector_nr, + uint8_t auth_mode, + uint8_t key_index, + uint8_t new_key_index); +UFR_STATUS DL_API MFP_ChangeSectorKey_PKM(UFR_HANDLE hndUFR, + uint8_t sector_nr, + uint8_t auth_mode, + IN uint8_t *old_key, + IN uint8_t *new_key); + +UFR_STATUS DL_API MFP_GetUidM(UFR_HANDLE hndUFR, + uint8_t key_index_vc_poll_enc_key, + uint8_t key_index_vc_poll_mac_key, + OUT uint8_t *uid, + VAR uint8_t *uid_len); +UFR_STATUS DL_API MFP_GetUidSamKeyM(UFR_HANDLE hndUFR, + uint8_t key_index_vc_poll_enc_key, + uint8_t key_index_vc_poll_mac_key, + OUT uint8_t *uid, + VAR uint8_t *uid_len); +UFR_STATUS DL_API MFP_GetUid_PKM(UFR_HANDLE hndUFR, + IN uint8_t *vc_poll_enc_key, + IN uint8_t *vc_poll_mac_key, + OUT uint8_t *uid, + VAR uint8_t *uid_len); + +UFR_STATUS DL_API MFP_ChangeVcPollingEncKeyM(UFR_HANDLE hndUFR, + uint8_t configuration_key_index, + IN uint8_t *new_key); +UFR_STATUS DL_API MFP_ChangeVcPollingEncKeySamKeyM(UFR_HANDLE hndUFR, + uint8_t configuration_key_index, + uint8_t new_key_index); +UFR_STATUS DL_API MFP_ChangeVcPollingEncKey_PKM(UFR_HANDLE hndUFR, + IN uint8_t *configuration_key, + IN uint8_t *new_key); + +UFR_STATUS DL_API MFP_ChangeVcPollingMacKeyM(UFR_HANDLE hndUFR, + uint8_t configuration_key_index, + IN uint8_t *new_key); +UFR_STATUS DL_API MFP_ChangeVcPollingMacKeySamKeyM(UFR_HANDLE hndUFR, + uint8_t configuration_key_index, + uint8_t new_key_index); +UFR_STATUS DL_API MFP_ChangeVcPollingMacKey_PKM(UFR_HANDLE hndUFR, + IN uint8_t *configuration_key, + IN uint8_t *new_key); + + +//ULTRALIGHT C +UFR_STATUS DL_API ULC_ExternalAuth_PKM(UFR_HANDLE hndUFR, + IN uint8_t *key); + +UFR_STATUS DL_API ULC_write_3des_key_no_authM(UFR_HANDLE hndUFR, + IN uint8_t *new_3des_key); + +UFR_STATUS DL_API ULC_write_3des_key_factory_keyM(UFR_HANDLE hndUFR, + IN uint8_t *new_3des_key); + +UFR_STATUS DL_API ULC_write_3des_keyM(UFR_HANDLE hndUFR, + IN uint8_t *new_3des_key, + IN uint8_t *old_3des_key); + +//ESP32 +UFR_STATUS DL_API EspSetDisplayData(IN uint8_t *display_data, IN uint8_t data_length, uint16_t duration); +UFR_STATUS DL_API EspReaderReset(void); +UFR_STATUS DL_API EspChangeReaderPassword(IN uint8_t *old_password, IN uint8_t *new_password); +UFR_STATUS DL_API EspReaderEepromWrite(IN uint8_t *data, uint32_t address, uint32_t size, IN uint8_t *password); +UFR_STATUS DL_API EspReaderEepromRead(OUT uint8_t *data, uint32_t address, uint32_t size); +UFR_STATUS DL_API EspGetReaderTime(OUT uint8_t *time); +UFR_STATUS DL_API EspSetReaderTime(IN uint8_t *password, IN uint8_t *time); +UFR_STATUS DL_API EspSetIOState(uint8_t pin, uint8_t state); +UFR_STATUS DL_API EspGetIOState(OUT uint8_t *state); + +//NDEF MESSAGES +//---------------------------------------------------------- + +enum NDEF_STORAGE_MODE +{ + STORE_INTO_READER = 0, + STORE_INTO_CARD +}; + +enum NDEF_SKYPE_ACTION +{ + CALL = 0, + CHAT +}; + +//WiFi NDEF authentication type +enum WIFI_AUTH_TYPE +{ + OPEN = 0, + WPA_PERSONAL, + WPA_ENTERPRISE, + WPA2_ENTERPRISE, + WPA2_PERSONAL +}; + +//WiFi NDEF encryption type +enum WIFI_ENC_TYPE +{ + NONE = 0, + WEP, + TKIP, + AES, + AES_TKIP +}; + +UFR_STATUS DL_API WriteNdefRecord_WiFi(uint8_t ndef_storage, IN const char *ssid, uint8_t auth_type, uint8_t encryption_type, IN const char *password); +UFR_STATUS DL_API WriteNdefRecord_Bluetooth(uint8_t ndef_storage, IN const char *bt_mac_address); +UFR_STATUS DL_API WriteNdefRecord_SMS(uint8_t ndef_storage, IN const char *phone_number, IN const char *message); +UFR_STATUS DL_API WriteNdefRecord_Bitcoin(uint8_t ndef_storage, IN const char *bitcoin_address, IN const char *amount, IN const char *message); +UFR_STATUS DL_API WriteNdefRecord_GeoLocation(uint8_t ndef_storage, IN const char *latitude, IN const char *longitude); +UFR_STATUS DL_API WriteNdefRecord_NaviDestination(uint8_t ndef_storage, IN const char *destination); +UFR_STATUS DL_API WriteNdefRecord_Email(uint8_t ndef_storage, IN const char *email_address, IN const char *subject, IN const char *message); +UFR_STATUS DL_API WriteNdefRecord_Address(uint8_t ndef_storage, IN const char *address); +UFR_STATUS DL_API WriteNdefRecord_AndroidApp(uint8_t ndef_storage, IN const char *package_name); +UFR_STATUS DL_API WriteNdefRecord_Text(uint8_t ndef_storage, IN const char *text); +UFR_STATUS DL_API WriteNdefRecord_StreetView(uint8_t ndef_storage, IN const char *latitude, IN const char *longitude); +UFR_STATUS DL_API WriteNdefRecord_Skype(uint8_t ndef_storage, IN const char *user_name, uint8_t action); +UFR_STATUS DL_API WriteNdefRecord_Whatsapp(uint8_t ndef_storage, IN const char *message); +UFR_STATUS DL_API WriteNdefRecord_Viber(uint8_t ndef_storage, IN const char *message); +UFR_STATUS DL_API WriteNdefRecord_Contact(uint8_t ndef_storage, IN const char *name, IN const char *company, IN const char *address, IN const char *phone, IN const char *email, IN const char *website); +UFR_STATUS DL_API WriteNdefRecord_Phone(uint8_t ndef_storage, IN const char *phone_number); + +UFR_STATUS DL_API WriteNdefRecord_WiFiM(UFR_HANDLE hndUFR, uint8_t ndef_storage, IN const char *ssid, uint8_t auth_type, uint8_t encryption_type, IN const char *password); +UFR_STATUS DL_API WriteNdefRecord_BluetoothM(UFR_HANDLE hndUFR, uint8_t ndef_storage, IN const char *bt_mac_address); +UFR_STATUS DL_API WriteNdefRecord_SMSM(UFR_HANDLE hndUFR, uint8_t ndef_storage, IN const char *phone_number, IN const char *message); +UFR_STATUS DL_API WriteNdefRecord_BitcoinM(UFR_HANDLE hndUFR, uint8_t ndef_storage, IN const char *bitcoin_address, IN const char *amount, IN const char *message); +UFR_STATUS DL_API WriteNdefRecord_GeoLocationM(UFR_HANDLE hndUFR, uint8_t ndef_storage, IN const char *latitude, IN const char *longitude); +UFR_STATUS DL_API WriteNdefRecord_NaviDestinationM(UFR_HANDLE hndUFR, uint8_t ndef_storage, IN const char *destination); +UFR_STATUS DL_API WriteNdefRecord_EmailM(UFR_HANDLE hndUFR, uint8_t ndef_storage, IN const char *email_address, IN const char *subject, IN const char *message); +UFR_STATUS DL_API WriteNdefRecord_AddressM(UFR_HANDLE hndUFR, uint8_t ndef_storage, IN const char *address); +UFR_STATUS DL_API WriteNdefRecord_AndroidAppM(UFR_HANDLE hndUFR, uint8_t ndef_storage, IN const char *package_name); +UFR_STATUS DL_API WriteNdefRecord_TextM(UFR_HANDLE hndUFR, uint8_t ndef_storage, IN const char *text); +UFR_STATUS DL_API WriteNdefRecord_StreetViewM(UFR_HANDLE hndUFR, uint8_t ndef_storage, IN const char *latitude, IN const char *longitude); +UFR_STATUS DL_API WriteNdefRecord_SkypeM(UFR_HANDLE hndUFR, uint8_t ndef_storage, IN const char *user_name, uint8_t action); +UFR_STATUS DL_API WriteNdefRecord_WhatsappM(UFR_HANDLE hndUFR, uint8_t ndef_storage, IN const char *message); +UFR_STATUS DL_API WriteNdefRecord_ViberM(UFR_HANDLE hndUFR, uint8_t ndef_storage, IN const char *message); +UFR_STATUS DL_API WriteNdefRecord_ContactM(UFR_HANDLE hndUFR, uint8_t ndef_storage, IN const char *name, IN const char *company, IN const char *address, IN const char *phone, IN const char *email, IN const char *website); +UFR_STATUS DL_API WriteNdefRecord_PhoneM(UFR_HANDLE hndUFR, uint8_t ndef_storage, IN const char *phone_number); +//--------------------------------------------------------------------------------------------- +UFR_STATUS DL_API ReadNdefRecord_WiFi(OUT char *ssid, OUT char *auth_type, OUT char *encryption_type, OUT char *password); +UFR_STATUS DL_API ReadNdefRecord_Bitcoin(OUT char *bitcoin_address, OUT char *amount, OUT char *message); +UFR_STATUS DL_API ReadNdefRecord_GeoLocation(OUT char *latitude, OUT char *longitude); +UFR_STATUS DL_API ReadNdefRecord_NaviDestination(OUT char *destination); +UFR_STATUS DL_API ReadNdefRecord_Email(OUT char *email_address, OUT char *subject, OUT char *message); +UFR_STATUS DL_API ReadNdefRecord_Address(OUT char *address); +UFR_STATUS DL_API ReadNdefRecord_AndroidApp(OUT char *package_name); +UFR_STATUS DL_API ReadNdefRecord_Text(OUT char *text); +UFR_STATUS DL_API ReadNdefRecord_StreetView(OUT char *latitude, OUT char *longitude); +UFR_STATUS DL_API ReadNdefRecord_Skype(OUT char *user_name, OUT char *action); +UFR_STATUS DL_API ReadNdefRecord_Whatsapp(OUT char *message); +UFR_STATUS DL_API ReadNdefRecord_Viber(OUT char *message); +UFR_STATUS DL_API ReadNdefRecord_Contact(OUT char *vCard); +UFR_STATUS DL_API ReadNdefRecord_Phone(OUT char *phone_number); +UFR_STATUS DL_API ReadNdefRecord_SMS(OUT char *phone_number, OUT char *message); +UFR_STATUS DL_API ReadNdefRecord_Bluetooth(OUT char *bt_mac_address); + +UFR_STATUS DL_API ReadNdefRecord_WiFiM(UFR_HANDLE hndUFR, OUT char *ssid, OUT char *auth_type, OUT char *encryption_type, OUT char *password); +UFR_STATUS DL_API ReadNdefRecord_BitcoinM(UFR_HANDLE hndUFR, OUT char *bitcoin_address, OUT char *amount, OUT char *message); +UFR_STATUS DL_API ReadNdefRecord_GeoLocationM(UFR_HANDLE hndUFR, OUT char *latitude, OUT char *longitude); +UFR_STATUS DL_API ReadNdefRecord_NaviDestinationM(UFR_HANDLE hndUFR, OUT char *destination); +UFR_STATUS DL_API ReadNdefRecord_EmailM(UFR_HANDLE hndUFR, OUT char *email_address, OUT char *subject, OUT char *message); +UFR_STATUS DL_API ReadNdefRecord_AddressM(UFR_HANDLE hndUFR, OUT char *address); +UFR_STATUS DL_API ReadNdefRecord_AndroidAppM(UFR_HANDLE hndUFR, OUT char *package_name); +UFR_STATUS DL_API ReadNdefRecord_TextM(UFR_HANDLE hndUFR, OUT char *text); +UFR_STATUS DL_API ReadNdefRecord_StreetViewM(UFR_HANDLE hndUFR, OUT char *latitude, OUT char *longitude); +UFR_STATUS DL_API ReadNdefRecord_SkypeM(UFR_HANDLE hndUFR, OUT char *user_name, OUT char *action); +UFR_STATUS DL_API ReadNdefRecord_WhatsappM(UFR_HANDLE hndUFR, OUT char *message); +UFR_STATUS DL_API ReadNdefRecord_ViberM(UFR_HANDLE hndUFR, OUT char *message); +UFR_STATUS DL_API ReadNdefRecord_ContactM(UFR_HANDLE hndUFR, OUT char *vCard); +UFR_STATUS DL_API ReadNdefRecord_PhoneM(UFR_HANDLE hndUFR, OUT char *phone_number); +UFR_STATUS DL_API ReadNdefRecord_SMSM(UFR_HANDLE hndUFR, OUT char *phone_number, OUT char *message); +UFR_STATUS DL_API ReadNdefRecord_BluetoothM(UFR_HANDLE hndUFR, OUT char *bt_mac_address); + +//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ + +// DLL version ---------------------------------------------------------------- +uint32_t DL_API GetDllVersion(void); + +/* + * Get "exploded" dll version example: + * + * #include + * #include + * + * void main(int argc, char *argv[]) + * { + * uint32_t dwDllVersion = 0; + * uint32_t dwDllMajorVersion = 0; + * uint32_t dwDllMinorVersion = 0; + * uint32_t dwDllBuild = 0; + * + * dwDllVersion = GetDllVersion(); + * + * // "explode" the dll version: + * dwDllMajorVersion = (DWORD)(LOBYTE(LOWORD(dwDllVersion))); + * dwDllMinorVersion = (DWORD)(HIBYTE(LOWORD(dwDllVersion))); + * + * // Get the dll build number. + * dwDllBuild = (DWORD)(HIWORD(dwDllVersion)); + * + * printf("Dll version is %ld.%ld (%ld)\n", dwDllMajorVersion, + * dwDllMinorVersion, + * dwDllBuild); + * } + * + */ + +// Originality Check (performs the check is the chip on the card/tag NXP genuine): +UFR_STATUS DL_API OriginalityCheck(IN const uint8_t *signature, IN const uint8_t *uid, uint8_t uid_len, uint8_t DlogicCardType); +// Returns: +// UFR_OPEN_SSL_DYNAMIC_LIB_NOT_FOUND in case there is no OpenSSL library (libeay32.dll) in current folder or path +// UFR_OPEN_SSL_DYNAMIC_LIB_FAILED in case of OpenSSL library error (e.g. wrong OpenSSL version) +// UFR_NOT_NXP_GENUINE if chip on the card/tag is NOT NXP genuine +// UFR_OK is chip on the card/tag is NXP GENUINE + +//// debug functions: +c_string DL_API GetDllVersionStr(void); +c_string DL_API UFR_Status2String(const UFR_STATUS status); +c_string DL_API UFR_DLCardType2String(uint8_t dl_type_code); + +//// Helper functions: +#ifndef _WIN32 + +unsigned long GetTickCount(void); + +#endif // #ifndef _WIN32 + +//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ + +c_string DL_API GetReaderDescription(void); +c_string DL_API GetReaderDescriptionM(UFR_HANDLE hndUFR); + +//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ +//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ +#ifdef __ANDROID__ +#include + +JNIEnv *global_env; +jclass global_class; +void DL_API initVM(JNIEnv *env, jclass class1); +#endif + +#ifdef __cplusplus +} +#endif + +#endif /* uFCoder_H_ */ diff --git a/esp32/lib/libufcoder.a b/esp32/lib/libufcoder.a new file mode 100644 index 0000000000000000000000000000000000000000..fec3a2c27e449c05fdbc142c76522a4a5dbf59be GIT binary patch literal 1695348 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

qUb{T|_E7bjc+NK)H&gErGm`=K75kd2Eb}1s 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 z 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%0Dy2=H@J!Iso7~7Jy?)@pzOQ4gr?){AD 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 z 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 -#include - -#define IN //array that you pass to function -#define OUT //array that you receive from funciton -#define VAR //first element of array that you receive from function (single variable) - - -//////////////////////////////////////////////////////////////////// -/** - * Type for representing null terminated char array ( aka C-String ) - * Array is always one byte longer ( for null character ) then string - * Memory space for array must be allocated before use. - */ -typedef const char * c_string; -//////////////////////////////////////////////////////////////////// - -#ifdef _WIN32 -// WINDOWS -# if defined(DL_CREATE_STATIC_LIB) || defined(DL_USE_STATIC_LIB) -# define DL_API -# else -# ifndef DL_uFC_EXPORTS -# ifdef _WIN_IOT -# define DL_API __declspec(dllimport) // Win IoT -# else -# define DL_API /*__declspec(dllimport) */ __stdcall // STDCALL - GCC - .NET -# endif // _WIN_IOT -# else -# define DL_API __declspec(dllexport) __stdcall -# endif // DL_uFC_EXPORTS -# endif // DL_CREATE_STATIC_LIB -#else -// Linux & MAC OS -# define DL_API -#endif // _WIN32 - -#if defined(DL_uFC_EXPORTS) || defined(DL_CREATE_STATIC_LIB) || defined(__ANDROID__) - typedef struct S_UFR_HANDLE * UFR_HANDLE; -#else - typedef void * UFR_HANDLE; -#endif - -// MIFARE CLASSIC type id's: -#define MIFARE_CLASSIC_1k 0x08 -#define MF1ICS50 0x08 -#define SLE66R35 0x88 // Infineon = Mifare Classic 1k -#define MIFARE_CLASSIC_4k 0x18 -#define MF1ICS70 0x18 -#define MIFARE_CLASSIC_MINI 0x09 -#define MF1ICS20 0x09 - -//DLOGIC CARD TYPE -#define TAG_UNKNOWN 0 -#define DL_MIFARE_ULTRALIGHT 0x01 -#define DL_MIFARE_ULTRALIGHT_EV1_11 0x02 -#define DL_MIFARE_ULTRALIGHT_EV1_21 0x03 -#define DL_MIFARE_ULTRALIGHT_C 0x04 -#define DL_NTAG_203 0x05 -#define DL_NTAG_210 0x06 -#define DL_NTAG_212 0x07 -#define DL_NTAG_213 0x08 -#define DL_NTAG_215 0x09 -#define DL_NTAG_216 0x0A -#define DL_MIKRON_MIK640D 0x0B -#define NFC_T2T_GENERIC 0x0C -#define DL_NT3H_1101 0x0D -#define DL_NT3H_1201 0x0E -#define DL_NT3H_2111 0x0F -#define DL_NT3H_2211 0x10 - -#define DL_MIFARE_MINI 0x20 -#define DL_MIFARE_CLASSIC_1K 0x21 -#define DL_MIFARE_CLASSIC_4K 0x22 -#define DL_MIFARE_PLUS_S_2K_SL0 0x23 -#define DL_MIFARE_PLUS_S_4K_SL0 0x24 -#define DL_MIFARE_PLUS_X_2K_SL0 0x25 -#define DL_MIFARE_PLUS_X_4K_SL0 0x26 -#define DL_MIFARE_DESFIRE 0x27 -#define DL_MIFARE_DESFIRE_EV1_2K 0x28 -#define DL_MIFARE_DESFIRE_EV1_4K 0x29 -#define DL_MIFARE_DESFIRE_EV1_8K 0x2A -#define DL_MIFARE_DESFIRE_EV2_2K 0x2B -#define DL_MIFARE_DESFIRE_EV2_4K 0x2C -#define DL_MIFARE_DESFIRE_EV2_8K 0x2D -#define DL_MIFARE_PLUS_S_2K_SL1 0x2E -#define DL_MIFARE_PLUS_X_2K_SL1 0x2F -#define DL_MIFARE_PLUS_EV1_2K_SL1 0x30 -#define DL_MIFARE_PLUS_X_2K_SL2 0x31 -#define DL_MIFARE_PLUS_S_2K_SL3 0x32 -#define DL_MIFARE_PLUS_X_2K_SL3 0x33 -#define DL_MIFARE_PLUS_EV1_2K_SL3 0x34 -#define DL_MIFARE_PLUS_S_4K_SL1 0x35 -#define DL_MIFARE_PLUS_X_4K_SL1 0x36 -#define DL_MIFARE_PLUS_EV1_4K_SL1 0x37 -#define DL_MIFARE_PLUS_X_4K_SL2 0x38 -#define DL_MIFARE_PLUS_S_4K_SL3 0x39 -#define DL_MIFARE_PLUS_X_4K_SL3 0x3A -#define DL_MIFARE_PLUS_EV1_4K_SL3 0x3B - -#define DL_UNKNOWN_ISO_14443_4 0x40 -#define DL_GENERIC_ISO14443_4 0x40 -#define DL_GENERIC_ISO14443_4_TYPE_B 0x41 -#define DL_GENERIC_ISO14443_3_TYPE_B 0x42 -#define DL_IMEI_UID 0x80 - -// ST Product ID-s: -#define M24SR02 0x82 -#define M24SR02_AUTOMOTIVE 0x8A -#define M24SR04 0x86 -#define M24SR04_AUTOMOTIVE 0x8E -#define M24SR16 0x85 -#define M24SR16_AUTOMOTIVE 0x8D -#define M24SR64 0x84 -#define M24SR64_AUTOMOTIVE 0x8C - -// DLJavaCardTypes: -#define DLSigner81 0xA0 -#define DLSigner22 0xA1 -#define DLSigner30 0xA2 -#define DLSigner10 0xA3 -#define DLSigner145 0xAA - -// DLJavaCardSignerAlgorithmTypes: -enum E_SIGNER_CIPHERS { - SIG_CIPHER_RSA = 0, - SIG_CIPHER_ECDSA, - - SIG_CIPHER_MAX_SUPPORTED -}; - -enum E_SIGNER_PADDINGS { - PAD_NULL = 0, - PAD_PKCS1, - - SIG_PAD_MAX_SUPPORTED -}; - -enum E_SIGNER_DIGESTS { - ALG_NULL = 0, - ALG_SHA, - ALG_SHA_256, - ALG_SHA_384, - ALG_SHA_512, - ALG_SHA_224, - - SIG_DIGEST_MAX_SUPPORTED -}; - -enum E_KEY_TYPES { - TYPE_RSA_PRIVATE = 0, - TYPE_RSA_CRT_PRIVATE, - TYPE_EC_F2M_PRIVATE, - TYPE_EC_FP_PRIVATE -}; - -enum E_OBJ_TYPES { - OBJ_TYPE_RSA_CERT = 0, - OBJ_TYPE_EC_CERT, - OBJ_TYPE_CA_CERT, - - OBJ_TYPES_COUNT -}; - -// JCDL_AIDs -#define DL_RAW_SIZEOF_SZ(x) (sizeof(x) - 1) -#define DL_AID_RID_PLUS "\xF0" "DLogic" -#define DL_SIGNER_PIX "\x00\x01" -#define DL_STORAGE_PIX "\x01\x01" -#define DL_SIGNER_AID DL_AID_RID_PLUS DL_SIGNER_PIX -#define DL_SIGNER_AID_SIZE 9 -#define DL_STORAGE_AID DL_AID_RID_PLUS DL_STORAGE_PIX -#define DL_STORAGE_AID_SIZE 9 - -// Universal JCDL instructions: -#define INS_LOGIN 0x20 -#define INS_GET_PIN_TRIES_REMAINING 0x21 -#define INS_PIN_CHANGE 0x22 -#define INS_PIN_UNBLOCK 0x23 - -// JCDLStorage instructions: -#define INS_PIN_ENABLE 0x24 -#define INS_PIN_DISABLE 0x25 -#define INS_LIST_FILES 0x31 -#define INS_GET_FILE_SIZE 0x32 -#define INS_READ_FILE 0x33 -#define INS_WRITE_FILE 0x34 -#define INS_DELETE_FILE 0x3F - -// JCDLSigner instructions: -#define INS_SET_RSA_PRIKEY 0x51 -#define INS_GEN_RSA_KEY_PAIR 0x52 -#define INS_GET_RSA_PUBKEY_MODULUS 0x53 -#define INS_GET_RSA_PUBKEY_EXPONENT 0x54 -#define INS_DEL_RSA_KEY_PAIR 0x5F -#define INS_SET_EC_PRIKEY 0x61 -#define INS_GEN_EC_KEY_PAIR 0x62 -#define INS_GET_EC_PUBKEY 0x63 -#define INS_GET_EC_FIELD 0x64 -#define INS_GET_EC_AB 0x65 -#define INS_GET_EC_G 0x66 -#define INS_GET_EC_RK_SIZE 0x67 -#define INS_DEL_EC_KEY_PAIR 0x6F -#define INS_GET_SIGNATURE 0x71 -#define INS_PUT_OBJ 0x31 -#define INS_PUT_OBJ_SUBJECT 0x32 -#define INS_INVALIDATE_CERT 0x33 -#define INS_GET_OBJ 0x41 -#define INS_GET_OBJ_ID 0x42 -#define INS_GET_OBJ_SUBJECT 0x43 - -// Universal JCDL constants: -#define PIN_MAX_TRIES 5 -#define PIN_MIN_LENGTH 4 -#define PIN_MAX_LENGTH 8 -#define PUK_MAX_TRIES 10 -#define PUK_LENGTH 8 - -// JCDLSigner constants: -#define JC_APP_MAX_KEY_INDEX ((3) - 1) -#define JC_APP_MAX_CA_CERT_INDEX ((12) - 1) -#define JC_APP_MAX_ID_SIZE 253 -#define JC_APP_MAX_SUBJECT_SIZE 255 -#define JC_APP_MAX_SIGNATURE_LEN 256 -#define JC_APP_MAX_PIN_LENGTH 8 - -// JCDLStorage constants: -#define JC_DL_STORAGE_MAX_FILES 16 -#define JC_DL_STORAGE_MAX_FILE_SIZE (32 * 1024 - 2) // 32KB - 2 byte system reserved - -// MIFARE CLASSIC Authentication Modes: -enum MIFARE_AUTHENTICATION -{ - MIFARE_AUTHENT1A = 0x60, - MIFARE_AUTHENT1B = 0x61, -}; - -//MIFARE PLUS AES Authentication Modes: -enum MIFARE_PLUS_AES_AUTHENTICATION -{ - MIFARE_PLUS_AES_AUTHENT1A = 0x80, - MIFARE_PLUS_AES_AUTHENT1B = 0x81, -}; - -// T2T authentication constants: -enum T2T_AUTHENTICATION -{ - T2T_NO_PWD_AUTH = 0, - T2T_RKA_PWD_AUTH = 1, - T2T_PK_PWD_AUTH = 3, - T2T_WITHOUT_PWD_AUTH = 0x60, - T2T_WITH_PWD_AUTH = 0x61, -}; - -enum ADDRESS_MODE -{ - ADDRESS_MODE_BLOCK = 0, - ADDRESS_MODE_SECTOR, -}; - -#define MAX_UID_LEN 10 -#define ECC_SIG_LEN 32 - -// API Status Codes Type: -typedef enum UFCODER_ERROR_CODES -{ - UFR_OK = 0x00, - UFR_COMMUNICATION_ERROR = 0x01, - UFR_CHKSUM_ERROR = 0x02, - UFR_READING_ERROR = 0x03, - UFR_WRITING_ERROR = 0x04, - UFR_BUFFER_OVERFLOW = 0x05, - UFR_MAX_ADDRESS_EXCEEDED = 0x06, - UFR_MAX_KEY_INDEX_EXCEEDED = 0x07, - UFR_NO_CARD = 0x08, - UFR_COMMAND_NOT_SUPPORTED = 0x09, - UFR_FORBIDEN_DIRECT_WRITE_IN_SECTOR_TRAILER = 0x0A, - UFR_ADDRESSED_BLOCK_IS_NOT_SECTOR_TRAILER = 0x0B, - UFR_WRONG_ADDRESS_MODE = 0x0C, - UFR_WRONG_ACCESS_BITS_VALUES = 0x0D, - UFR_AUTH_ERROR = 0x0E, - UFR_PARAMETERS_ERROR = 0x0F, // ToDo, point 5. - UFR_MAX_SIZE_EXCEEDED = 0x10, - UFR_UNSUPPORTED_CARD_TYPE = 0x11, - - UFR_COMMUNICATION_BREAK = 0x50, - UFR_NO_MEMORY_ERROR = 0x51, - UFR_CAN_NOT_OPEN_READER = 0x52, - UFR_READER_NOT_SUPPORTED = 0x53, - UFR_READER_OPENING_ERROR = 0x54, - UFR_READER_PORT_NOT_OPENED = 0x55, - UFR_CANT_CLOSE_READER_PORT = 0x56, - - UFR_WRITE_VERIFICATION_ERROR = 0x70, - UFR_BUFFER_SIZE_EXCEEDED = 0x71, - UFR_VALUE_BLOCK_INVALID = 0x72, - UFR_VALUE_BLOCK_ADDR_INVALID = 0x73, - UFR_VALUE_BLOCK_MANIPULATION_ERROR = 0x74, - UFR_WRONG_UI_MODE = 0x75, - UFR_KEYS_LOCKED = 0x76, - UFR_KEYS_UNLOCKED = 0x77, - UFR_WRONG_PASSWORD = 0x78, - UFR_CAN_NOT_LOCK_DEVICE = 0x79, - UFR_CAN_NOT_UNLOCK_DEVICE = 0x7A, - UFR_DEVICE_EEPROM_BUSY = 0x7B, - UFR_RTC_SET_ERROR = 0x7C, - - ANTI_COLLISION_DISABLED = 0x7D, - NO_TAGS_ENUMERRATED = 0x7E, - CARD_ALREADY_SELECTED = 0x7F, - - // NDEF error codes - UFR_WRONG_NDEF_CARD_FORMAT = 0x80, - UFR_NDEF_MESSAGE_NOT_FOUND = 0x81, - UFR_NDEF_UNSUPPORTED_CARD_TYPE = 0x82, - UFR_NDEF_CARD_FORMAT_ERROR = 0x83, - UFR_MAD_NOT_ENABLED = 0x84, - UFR_MAD_VERSION_NOT_SUPPORTED = 0x85, - UFR_NDEF_MESSAGE_NOT_COMPATIBLE = 0x86, - - // Tag emulation mode errors: - FORBIDDEN_IN_TAG_EMULATION_MODE = 0x90, - - // FTDI errors: - UFR_FT_STATUS_ERROR_1 = 0xA0, - UFR_FT_STATUS_ERROR_2 = 0xA1, - UFR_FT_STATUS_ERROR_3 = 0xA2, - UFR_FT_STATUS_ERROR_4 = 0xA3, - UFR_FT_STATUS_ERROR_5 = 0xA4, - UFR_FT_STATUS_ERROR_6 = 0xA5, - UFR_FT_STATUS_ERROR_7 = 0xA6, - UFR_FT_STATUS_ERROR_8 = 0xA7, - UFR_FT_STATUS_ERROR_9 = 0xA8, - - //MIFARE PLUS error codes - UFR_MFP_COMMAND_OVERFLOW = 0xB0, - UFR_MFP_INVALID_MAC = 0xB1, - UFR_MFP_INVALID_BLOCK_NR = 0xB2, - UFR_MFP_NOT_EXIST_BLOCK_NR = 0xB3, - UFR_MFP_COND_OF_USE_ERROR = 0xB4, - UFR_MFP_LENGTH_ERROR = 0xB5, - UFR_MFP_GENERAL_MANIP_ERROR = 0xB6, - UFR_MFP_SWITCH_TO_ISO14443_4_ERROR = 0xB7, - UFR_MFP_ILLEGAL_STATUS_CODE = 0xB8, - UFR_MFP_MULTI_BLOCKS_READ = 0xB9, - - // multiple units - return from the functions with ReaderList_ prefix in name - UFR_DEVICE_WRONG_HANDLE = 0x100, - UFR_DEVICE_INDEX_OUT_OF_BOUND, - UFR_DEVICE_ALREADY_OPENED, - UFR_DEVICE_ALREADY_CLOSED, - UFR_DEVICE_IS_NOT_CONNECTED, - - // Originality Check Error Codes: - UFR_NOT_NXP_GENUINE = 0x200, - UFR_OPEN_SSL_DYNAMIC_LIB_FAILED, - UFR_OPEN_SSL_DYNAMIC_LIB_NOT_FOUND, - - // DESFIRE Card Status Error Codes: - READER_ERROR = 0xBB7, // 2999 [dec] - NO_CARD_DETECTED = 0xBB8, // 3000 [dec] - CARD_OPERATION_OK = 0xBB9, // 3001 [dec] - WRONG_KEY_TYPE = 0xBBA, // 3002 [dec] - KEY_AUTH_ERROR = 0xBBB, // 3003 [dec] - CARD_CRYPTO_ERROR = 0xBBC, // 3004 [dec] - READER_CARD_COMM_ERROR = 0xBBD, // 3005 [dec] - PC_READER_COMM_ERROR = 0xBBE, // 3006 [dec] - COMMIT_TRANSACTION_NO_REPLY = 0xBBF, // 3007 [dec] - COMMIT_TRANSACTION_ERROR = 0xBC0, // 3008 [dec] - - DESFIRE_CARD_NO_CHANGES = 0x0C0C, - DESFIRE_CARD_OUT_OF_EEPROM_ERROR = 0x0C0E, - DESFIRE_CARD_ILLEGAL_COMMAND_CODE = 0x0C1C, - DESFIRE_CARD_INTEGRITY_ERROR = 0x0C1E, - DESFIRE_CARD_NO_SUCH_KEY = 0x0C40, - DESFIRE_CARD_LENGTH_ERROR = 0x0C7E, - DESFIRE_CARD_PERMISSION_DENIED = 0x0C9D, - DESFIRE_CARD_PARAMETER_ERROR = 0x0C9E, - DESFIRE_CARD_APPLICATION_NOT_FOUND = 0x0CA0, - DESFIRE_CARD_APPL_INTEGRITY_ERROR = 0x0CA1, - DESFIRE_CARD_AUTHENTICATION_ERROR = 0x0CAE, - DESFIRE_CARD_ADDITIONAL_FRAME = 0x0CAF, - DESFIRE_CARD_BOUNDARY_ERROR = 0x0CBE, - DESFIRE_CARD_PICC_INTEGRITY_ERROR = 0x0CC1, - DESFIRE_CARD_COMMAND_ABORTED = 0x0CCA, - DESFIRE_CARD_PICC_DISABLED_ERROR = 0x0CCD, - DESFIRE_CARD_COUNT_ERROR = 0x0CCE, - DESFIRE_CARD_DUPLICATE_ERROR = 0x0CDE, - DESFIRE_CARD_EEPROM_ERROR_DES = 0x0CEE, - DESFIRE_CARD_FILE_NOT_FOUND = 0x0CF0, - DESFIRE_CARD_FILE_INTEGRITY_ERROR = 0x0CF1, - - // uFCoder library errors: - UFR_NOT_IMPLEMENTED = 0x1000, - UFR_COMMAND_FAILED = 0x1001, - UFR_TIMEOUT_ERR = 0x1002, - UFR_FILE_SYSTEM_ERROR = 0x1003, - UFR_FILE_SYSTEM_PATH_NOT_EXISTS = 0x1004, - UFR_FILE_NOT_EXISTS = 0x1005, - - // JC cards APDU Error Codes: - UFR_APDU_TRANSCEIVE_ERROR = 0xAE, - UFR_APDU_JC_APP_NOT_SELECTED = 0x6000, - UFR_APDU_JC_APP_BUFF_EMPTY = 0x6001, - UFR_APDU_WRONG_SELECT_RESPONSE = 0x6002, - UFR_APDU_WRONG_KEY_TYPE = 0x6003, - UFR_APDU_WRONG_KEY_SIZE = 0x6004, - UFR_APDU_WRONG_KEY_PARAMS = 0x6005, - UFR_APDU_WRONG_SIGNING_ALGORITHM = 0x6006, - UFR_APDU_PLAIN_TEXT_MAX_SIZE_EXCEEDED = 0x6007, - UFR_APDU_UNSUPPORTED_KEY_SIZE = 0x6008, - UFR_APDU_UNSUPPORTED_ALGORITHMS = 0x6009, - UFR_APDU_PKI_OBJECT_NOT_FOUND = 0x600A, - UFR_APDU_MAX_PIN_LENGTH_EXCEEDED = 0x600B, - UFR_DIGEST_LENGTH_DOES_NOT_MATCH = 0x600C, - - // Secure channel specific errors: - UFR_SECURE_CHANNEL_SESSION_FAILED = 0x6C00, - - // ISO7816-4 Errors (R-APDU) - 2 SW bytes returned by the card, prefixed with 0x000A: - UFR_APDU_SW_TAG = 0x000A0000, - UFR_APDU_SW_WRONG_LENGTH = 0x000A6700, - UFR_APDU_SW_SECURITY_STATUS_NOT_SATISFIED = 0x000A6982, - UFR_APDU_SW_AUTHENTICATION_METHOD_BLOCKED = 0x000A6983, - UFR_APDU_SW_DATA_INVALID = 0x000A6984, - UFR_APDU_SW_CONDITIONS_NOT_SATISFIED = 0x000A6985, - UFR_APDU_SW_WRONG_DATA = 0x000A6A80, - UFR_APDU_SW_FILE_NOT_FOUND = 0x000A6A82, - UFR_APDU_SW_RECORD_NOT_FOUND = 0x000A6A83, - UFR_APDU_SW_DATA_NOT_FOUND = 0x000A6A88, - UFR_APDU_SW_ENTITY_ALREADY_EXISTS = 0x000A6A89, - UFR_APDU_SW_INS_NOT_SUPPORTED = 0x000A6D00, - UFR_APDU_SW_NO_PRECISE_DIAGNOSTIC = 0x000A6F00, - //SAM module error codes: - UFR_SAM_APDU_ERROR = 0x2000, - UFR_SAM_AUTH_ERROR, - UFR_SAM_CRYPTO_ERROR, - - MAX_UFR_STATUS = 0x7FFFFFFF - -} UFR_STATUS; - -//DESFIRE key settings values -#define DESFIRE_KEY_SET_CREATE_WITH_AUTH_SET_CHANGE_KEY_CHANGE 0x09 -#define DESFIRE_KEY_SET_CREATE_WITHOUT_AUTH_SET_CHANGE_KEY_CHANGE 0x0F -#define DESFIRE_KEY_SET_CREATE_WITH_AUTH_SET_NOT_CHANGE_KEY_CHANGE 0x01 -#define DESFIRE_KEY_SET_CREATE_WITHOUT_AUTH_SET_NOT_CHANGE_KEY_CHANGE 0x07 -#define DESFIRE_KEY_SET_CREATE_WITH_AUTH_SET_CHANGE_KEY_NOT_CHANGE 0x08 -#define DESFIRE_KEY_SET_CREATE_WITHOUT_AUTH_SET_CHANGE_KEY_NOT_CHANGE 0x0E -#define DESFIRE_KEY_SET_CREATE_WITH_AUTH_SET_NOT_CHANGE_KEY_NOT_CHANGE 0x00 -#define DESFIRE_KEY_SET_CREATE_WITHOUT_AUTH_SET_NOT_CHANGE_KEY_NOT_CHANGE 0x06 - -#define DESFIRE_KEY_SET_CREATE_WITH_AUTH_SET_CHANGE_KEY_CHANGE_APP_IDS_WITH_AUTH 0x09 -#define DESFIRE_KEY_SET_CREATE_WITHOUT_AUTH_SET_CHANGE_KEY_CHANGE_APP_IDS_WIDTHOUT_AUTH 0x0F -#define DESFIRE_KEY_SET_CREATE_WITH_AUTH_SET_NOT_CHANGE_KEY_CHANGE_APP_IDS_WITH_AUTH 0x01 -#define DESFIRE_KEY_SET_CREATE_WITHOUT_AUTH_SET_NOT_CHANGE_KEY_CHANGE_APP_IDS_WIDTHOUT_AUTH 0x07 -#define DESFIRE_KEY_SET_CREATE_WITH_AUTH_SET_CHANGE_KEY_NOT_CHANGE_APP_IDS_WITH_AUTH 0x08 -#define DESFIRE_KEY_SET_CREATE_WITHOUT_AUTH_SET_CHANGE_KEY_NOT_CHANGE_APP_IDS_WIDTHOUT_AUTH 0x0E -#define DESFIRE_KEY_SET_CREATE_WITH_AUTH_SET_NOT_CHANGE_KEY_NOT_CHANGE_APP_IDS_WITH_AUTH 0x00 -#define DESFIRE_KEY_SET_CREATE_WITHOUT_AUTH_SET_NOT_CHANGE_KEY_NOT_CHANGE_APP_IDS_WIDTHOUT_AUTH 0x06 -#define DESFIRE_KEY_SET_CREATE_WITH_AUTH_SET_CHANGE_KEY_CHANGE_APP_IDS_WIDTHOUT_AUTH 0x0B -#define DESFIRE_KEY_SET_CREATE_WITH_AUTH_SET_NOT_CHANGE_KEY_CHANGE_APP_IDS_WIDTHOUT_AUTH 0x02 -#define DESFIRE_KEY_SET_CREATE_WITH_AUTH_SET_CHANGE_KEY_NOT_CHANGE_APP_IDS_WIDTHOUT_AUTH 0x0A -#define DESFIRE_KEY_SET_CREATE_WITH_AUTH_SET_NOT_CHANGE_KEY_NOT_CHANGE_APP_IDS_WIDTHOUT_AUTH 0x02 - - -enum E_ASYMMETRIC_KEY_TYPES { - RSA_PRIVATE_KEY = 0, - ECDSA_PRIVATE_KEY, - - ASYMMETRIC_KEY_TYPES_NUM -}; - -typedef enum { - USER_PIN = 0, - SO_PIN, - USER_PUK, - SO_PUK -} dl_sec_code_t; - -//SAM definition -typedef enum E_SAM_HW_VER { - SAM_UNKNOWN_TYPE, - SAM_T1AD2060_AV1_MODE , - SAM_T1AD2060_AV2_MODE, - SAM_T1AR1070_AV1_MODE, - SAM_T1AR1070_AV2_MODE -}SAM_HW_TYPE; - -#ifdef __cplusplus -extern "C" -{ -#endif - -//-------------------------------------------------------------------------------------------------- - -UFR_STATUS DL_API ReaderOpen(void); - -/** - * Useful for speed up opening for non uFR basic reader type - * - * @param reader_type : 0 : auto > same as call ReaderOpen() - * 1 : uFR type (1 Mbps) - * 2 : uFR RS232 type (115200 bps) - * 3 : BASE HD uFR (XRC) type (250 Kbps) - * @return - */ -UFR_STATUS DL_API ReaderOpenByType(uint32_t reader_type); - -/** - * ReaderOpenEx() is a function for opening port with - * - * @param reader_type : 0 : auto > same as call ReaderOpen() - * 1 : uFR type (1 Mbps) - * 2 : uFR RS232 type (115200 bps) - * 3 : BASE HD uFR (XRC) type (250 Kbps) - * @param port_name : serial port name, identifier, like - * "COM3" on Window or - * "/dev/ttyS0" on Linux or - * "/dev/tty.serial1" on OS X - * or if you select FTDI - * "UN123456" if Reader have integrated FTDI interface - * "192.168.1.162:8881" IP adress:port for TCP/IP or UDP I/F - * @param port_interface : type of communication interfaces - * 0 : auto - first try FTDI than serial if no port_name defined - * 1 : try serial / virtual COM port / interfaces - * 2 : try only FTDI communication interfaces - * // Digital Logic Shields - * 10 : open Digital Logic Shields with RS232 uFReader on Raspberry Pi (serial interfaces with GPIO reset) - * 84 ('T') : TCP/IP interface - * 85 ('U') : UDP interface - * @param arg : additional settings in c-string format: - * "UNIT_OPEN_RESET_DISABLE" : do not reset the reader when opening - * "UNIT_OPEN_RESET_FORCE" : force reset the reader when opening - * "READER_ACTIVE_ON_RTS_LOW" : (default) Reset the reader when RTS is high - the reader works when RTS is low - * "READER_ACTIVE_ON_RTS_HIGH" : Reset the reader when RTS is low - the reader works when RTS is high - * "RTS_ALWAYS_HIGH" : not implemented yet - * "RTS_ALWAYS_LOW" : not implemented yet - * "RTS_DISCONNECTED" : disconnect RTS (RTS is not initiate nor use) - * - * @return - */ -UFR_STATUS DL_API ReaderOpenEx(uint32_t reader_type, - IN c_string port_name, - uint32_t port_interface, - IN void *arg); - -UFR_STATUS DL_API ReaderReset(void); -UFR_STATUS DL_API ReaderClose(void); -UFR_STATUS DL_API ReaderSoftRestart(void); -UFR_STATUS DL_API ReaderHwReset(void); -UFR_STATUS DL_API GetReaderType(IN uint32_t *lpulReaderType); -UFR_STATUS DL_API GetReaderSerialNumber(IN uint32_t *lpulSerialNumber); - -UFR_STATUS DL_API ReaderStillConnected(VAR uint32_t *connected); - -UFR_STATUS DL_API ReaderKeyWrite(IN const uint8_t *aucKey, uint8_t ucKeyIndex); -UFR_STATUS DL_API ReaderKeysLock(IN const uint8_t *password); -UFR_STATUS DL_API ReaderKeysUnlock(IN const uint8_t *password); -UFR_STATUS DL_API ReaderUISignal(uint8_t light_signal_mode, - uint8_t beep_signal_mode); -UFR_STATUS DL_API ReadUserData(OUT uint8_t *aucData); -UFR_STATUS DL_API WriteUserData(IN const uint8_t *aucData); -UFR_STATUS DL_API GetCardId(VAR uint8_t *lpucCardType, OUT uint32_t *lpulCardSerial); -UFR_STATUS DL_API BlockRead(OUT uint8_t *data, - uint8_t block_address, - uint8_t auth_mode, - uint8_t key_index); -UFR_STATUS DL_API BlockReadSamKey(OUT uint8_t *data, uint8_t block_address, - uint8_t auth_mode, uint8_t key_index); -UFR_STATUS DL_API BlockWrite(IN const uint8_t *data, - uint8_t block_address, - uint8_t auth_mode, - uint8_t key_index); -UFR_STATUS DL_API BlockWriteSamKey(IN const uint8_t *data, - uint8_t block_address, uint8_t auth_mode, uint8_t key_index); -UFR_STATUS DL_API BlockInSectorRead(OUT uint8_t *data, - uint8_t sector_address, - uint8_t block_in_sector_address, - uint8_t auth_mode, - uint8_t key_index); -UFR_STATUS DL_API BlockInSectorReadSamKey(OUT uint8_t *data, - uint8_t sector_address, - uint8_t block_in_sector_address, - uint8_t auth_mode, - uint8_t key_index); -UFR_STATUS DL_API BlockInSectorWrite(IN const uint8_t *data, - uint8_t sector_address, - uint8_t block_in_sector_address, - uint8_t auth_mode, - uint8_t key_index); -UFR_STATUS DL_API BlockInSectorWriteSamKey(IN const uint8_t *data, - uint8_t sector_address, - uint8_t block_in_sector_address, - uint8_t auth_mode, - uint8_t key_index); -UFR_STATUS DL_API LinearRead(OUT uint8_t *aucData, - uint16_t usLinearAddress, - uint16_t usDataLength, - VAR uint16_t *lpusBytesReturned, - uint8_t ucKeyMode, - uint8_t ucReaderKeyIndex); -UFR_STATUS DL_API LinearReadSamKey(OUT uint8_t *aucData, - uint16_t usLinearAddress, - uint16_t usDataLength, - VAR uint16_t *lpusBytesReturned, - uint8_t ucKeyMode, - uint8_t ucReaderKeyIndex); - -UFR_STATUS DL_API LinRowRead(OUT uint8_t *aucData, - uint16_t usLinearAddress, - uint16_t usDataLength, - VAR uint16_t *lpusBytesReturned, - uint8_t ucKeyMode, - uint8_t ucReaderKeyIndex); - -UFR_STATUS DL_API LinearWrite(IN const uint8_t *aucData, - uint16_t usLinearAddress, - uint16_t usDataLength, - VAR uint16_t *lpusBytesWritten, - uint8_t ucKeyMode, - uint8_t ucReaderKeyIndex); -UFR_STATUS DL_API LinearWriteSamKey(IN const uint8_t *aucData, - uint16_t usLinearAddress, - uint16_t usDataLength, - VAR uint16_t *lpusBytesWritten, - uint8_t ucKeyMode, - uint8_t ucReaderKeyIndex); -UFR_STATUS DL_API LinearFormatCard(IN const uint8_t *new_key_A, - uint8_t blocks_access_bits, - uint8_t sector_trailers_access_bits, - uint8_t sector_trailers_byte9, - IN const uint8_t *new_key_B, - VAR uint8_t *lpucSectorsFormatted, - uint8_t auth_mode, - uint8_t key_index); - -UFR_STATUS DL_API SectorTrailerWrite(uint8_t addressing_mode, - uint8_t address, - IN const uint8_t *new_key_A, - uint8_t block0_access_bits, - uint8_t block1_access_bits, - uint8_t block2_access_bits, - uint8_t sector_trailer_access_bits, - uint8_t sector_trailer_byte9, - IN const uint8_t *new_key_B, - uint8_t auth_mode, - uint8_t key_index); -UFR_STATUS DL_API SectorTrailerWriteUnsafe(uint8_t addressing_mode, - uint8_t address, - IN const uint8_t *sector_trailer, - uint8_t auth_mode, - uint8_t key_index); -UFR_STATUS DL_API ValueBlockRead(VAR int32_t *value, - VAR uint8_t *value_addr, - uint8_t block_address, - uint8_t auth_mode, - uint8_t key_index); -UFR_STATUS DL_API ValueBlockInSectorRead(VAR int32_t *value, - VAR uint8_t *value_addr, - uint8_t sector_address, - uint8_t block_in_sector_address, - uint8_t auth_mode, - uint8_t key_index); -UFR_STATUS DL_API ValueBlockReadSamKey(VAR int32_t *value, - VAR uint8_t *value_addr, - uint8_t block_address, - uint8_t auth_mode, - uint8_t key_index); - - -UFR_STATUS DL_API ValueBlockInSectorReadSamKey(VAR int32_t *value, - VAR uint8_t *value_addr, - uint8_t sector_address, - uint8_t block_in_sector_address, - uint8_t auth_mode, - uint8_t key_index); -UFR_STATUS DL_API ValueBlockWrite(int32_t value, - uint8_t value_addr, - uint8_t block_address, - uint8_t auth_mode, - uint8_t key_index); -UFR_STATUS DL_API ValueBlockWriteSamKey(int32_t value, - uint8_t value_addr, - uint8_t block_address, - uint8_t auth_mode, - uint8_t key_index); -UFR_STATUS DL_API ValueBlockInSectorWrite(int32_t value, - uint8_t value_addr, - uint8_t sector_address, - uint8_t block_in_sector_address, - uint8_t auth_mode, - uint8_t key_index); -UFR_STATUS DL_API ValueBlockInSectorWriteSamKey(int32_t value, - uint8_t value_addr, - uint8_t sector_address, - uint8_t block_in_sector_address, - uint8_t auth_mode, - uint8_t key_index); -UFR_STATUS DL_API ValueBlockIncrement(int32_t increment_value, - uint8_t block_address, - uint8_t auth_mode, - uint8_t key_index); -UFR_STATUS DL_API ValueBlockIncrementSamKey(int32_t increment_value, - uint8_t block_address, - uint8_t auth_mode, - uint8_t key_index); -UFR_STATUS DL_API ValueBlockInSectorIncrement(int32_t increment_value, - uint8_t sector_address, - uint8_t block_in_sector_address, - uint8_t auth_mode, - uint8_t key_index); -UFR_STATUS DL_API ValueBlockInSectorIncrementSamKey(int32_t increment_value, - uint8_t sector_address, - uint8_t block_in_sector_address, - uint8_t auth_mode, - uint8_t key_index); -UFR_STATUS DL_API ValueBlockDecrement(int32_t decrement_value, - uint8_t block_address, - uint8_t auth_mode, - uint8_t key_index); -UFR_STATUS DL_API ValueBlockDecrementSamKey(int32_t decrement_value, - uint8_t block_address, - uint8_t auth_mode, - uint8_t key_index); -UFR_STATUS DL_API ValueBlockInSectorDecrement(int32_t decrement_value, - uint8_t sector_address, - uint8_t block_in_sector_address, - uint8_t auth_mode, - uint8_t key_index); -UFR_STATUS DL_API ValueBlockInSectorDecrementSamKey(int32_t decrement_value, - uint8_t sector_address, - uint8_t block_in_sector_address, - uint8_t auth_mode, - uint8_t key_index); -UFR_STATUS DL_API BlockRead_AKM1(OUT uint8_t *data, - uint8_t block_address, - uint8_t auth_mode); -UFR_STATUS DL_API BlockWrite_AKM1(IN const uint8_t *data, - uint8_t block_address, - uint8_t auth_mode); -UFR_STATUS DL_API BlockInSectorRead_AKM1(OUT uint8_t *data, - uint8_t sector_address, - uint8_t block_in_sector_address, - uint8_t auth_mode); -UFR_STATUS DL_API BlockInSectorWrite_AKM1(IN const uint8_t *data, - uint8_t sector_address, - uint8_t block_in_sector_address, - uint8_t auth_mode); -UFR_STATUS DL_API LinearRead_AKM1(OUT uint8_t *data, - uint16_t linear_address, - uint16_t length, - VAR uint16_t *bytes_returned, - uint8_t auth_mode); -UFR_STATUS DL_API LinRowRead_AKM1(OUT uint8_t *data, - uint16_t linear_address, - uint16_t length, - VAR uint16_t *bytes_returned, - uint8_t auth_mode); -UFR_STATUS DL_API LinearWrite_AKM1(IN const uint8_t *data, - uint16_t linear_address, - uint16_t length, - VAR uint16_t *bytes_written, - uint8_t auth_mode); -UFR_STATUS DL_API LinearFormatCard_AKM1(IN const uint8_t *new_key_A, - uint8_t blocks_access_bits, - uint8_t sector_trailers_access_bits, - uint8_t sector_trailers_byte9, - IN const uint8_t *new_key_B, - VAR uint8_t *lpucSectorsFormatted, - uint8_t auth_mode); -UFR_STATUS DL_API SectorTrailerWrite_AKM1(uint8_t addressing_mode, - uint8_t address, - IN const uint8_t *new_key_A, - uint8_t block0_access_bits, - uint8_t block1_access_bits, - uint8_t block2_access_bits, - uint8_t sector_trailer_access_bits, - uint8_t sector_trailer_byte9, - IN const uint8_t *new_key_B, - uint8_t auth_mode); -UFR_STATUS DL_API SectorTrailerWriteUnsafe_AKM1(uint8_t addressing_mode, - uint8_t address, - IN const uint8_t *sector_trailer, - uint8_t auth_mode); -UFR_STATUS DL_API ValueBlockRead_AKM1(VAR int32_t *value, - VAR uint8_t *value_addr, - uint8_t block_address, - uint8_t auth_mode); -UFR_STATUS DL_API ValueBlockInSectorRead_AKM1(VAR int32_t *value, - VAR uint8_t *value_addr, - uint8_t sector_address, - uint8_t block_in_sector_address, - uint8_t auth_mode); -UFR_STATUS DL_API ValueBlockWrite_AKM1(int32_t value, - uint8_t value_addr, - uint8_t block_address, - uint8_t auth_mode); -UFR_STATUS DL_API ValueBlockInSectorWrite_AKM1(int32_t value, - uint8_t value_addr, - uint8_t sector_address, - uint8_t block_in_sector_address, - uint8_t auth_mode); -UFR_STATUS DL_API ValueBlockIncrement_AKM1(int32_t increment_value, - uint8_t block_address, - uint8_t auth_mode); -UFR_STATUS DL_API ValueBlockInSectorIncrement_AKM1(int32_t increment_value, - uint8_t sector_address, - uint8_t block_in_sector_address, - uint8_t auth_mode); -UFR_STATUS DL_API ValueBlockDecrement_AKM1(int32_t decrement_value, - uint8_t block_address, - uint8_t auth_mode); -UFR_STATUS DL_API ValueBlockInSectorDecrement_AKM1(int32_t decrement_value, - uint8_t sector_address, - uint8_t block_in_sector_address, - uint8_t auth_mode); - -UFR_STATUS DL_API BlockRead_AKM2(OUT uint8_t *data, - uint8_t block_address, - uint8_t auth_mode); -UFR_STATUS DL_API BlockWrite_AKM2(IN const uint8_t *data, - uint8_t block_address, - uint8_t auth_mode); -UFR_STATUS DL_API BlockInSectorRead_AKM2(OUT uint8_t *data, - uint8_t sector_address, - uint8_t block_in_sector_address, - uint8_t auth_mode); -UFR_STATUS DL_API BlockInSectorWrite_AKM2(IN const uint8_t *data, - uint8_t sector_address, - uint8_t block_in_sector_address, - uint8_t auth_mode); -UFR_STATUS DL_API LinearRead_AKM2(OUT uint8_t *data, - uint16_t linear_address, - uint16_t length, - VAR uint16_t *bytes_returned, - uint8_t auth_mode); -UFR_STATUS DL_API LinRowRead_AKM2(OUT uint8_t *data, - uint16_t linear_address, - uint16_t length, - VAR uint16_t *bytes_returned, - uint8_t auth_mode); -UFR_STATUS DL_API LinearWrite_AKM2(IN const uint8_t *data, - uint16_t linear_address, - uint16_t length, - VAR uint16_t *bytes_written, - uint8_t auth_mode); -UFR_STATUS DL_API LinearFormatCard_AKM2(IN const uint8_t *new_key_A, - uint8_t blocks_access_bits, - uint8_t sector_trailers_access_bits, - uint8_t sector_trailers_byte9, - IN const uint8_t *new_key_B, - VAR uint8_t *lpucSectorsFormatted, - uint8_t auth_mode); -UFR_STATUS DL_API SectorTrailerWrite_AKM2(uint8_t addressing_mode, - uint8_t address, - IN const uint8_t *new_key_A, - uint8_t block0_access_bits, - uint8_t block1_access_bits, - uint8_t block2_access_bits, - uint8_t sector_trailer_access_bits, - uint8_t sector_trailer_byte9, - IN const uint8_t *new_key_B, - uint8_t auth_mode); -UFR_STATUS DL_API SectorTrailerWriteUnsafe_AKM2(uint8_t addressing_mode, - uint8_t address, - IN const uint8_t *sector_trailer, - uint8_t auth_mode); -UFR_STATUS DL_API ValueBlockRead_AKM2(VAR int32_t *value, - VAR uint8_t *value_addr, - uint8_t block_address, - uint8_t auth_mode); -UFR_STATUS DL_API ValueBlockInSectorRead_AKM2(VAR int32_t *value, - VAR uint8_t *value_addr, - uint8_t sector_address, - uint8_t block_in_sector_address, - uint8_t auth_mode); -UFR_STATUS DL_API ValueBlockWrite_AKM2(int32_t value, - uint8_t value_addr, - uint8_t block_address, - uint8_t auth_mode); -UFR_STATUS DL_API ValueBlockInSectorWrite_AKM2(int32_t value, - uint8_t value_addr, - uint8_t sector_address, - uint8_t block_in_sector_address, - uint8_t auth_mode); -UFR_STATUS DL_API ValueBlockIncrement_AKM2(int32_t increment_value, - uint8_t block_address, - uint8_t auth_mode); -UFR_STATUS DL_API ValueBlockInSectorIncrement_AKM2(int32_t increment_value, - uint8_t sector_address, - uint8_t block_in_sector_address, - uint8_t auth_mode); -UFR_STATUS DL_API ValueBlockDecrement_AKM2(int32_t decrement_value, - uint8_t block_address, - uint8_t auth_mode); -UFR_STATUS DL_API ValueBlockInSectorDecrement_AKM2(int32_t decrement_value, - uint8_t sector_address, - uint8_t block_in_sector_address, - uint8_t auth_mode); - -UFR_STATUS DL_API BlockRead_PK(OUT uint8_t *data, - uint8_t block_address, - uint8_t auth_mode, - IN const uint8_t *key); -UFR_STATUS DL_API BlockWrite_PK(IN const uint8_t *data, - uint8_t block_address, - uint8_t auth_mode, - IN const uint8_t *key); -UFR_STATUS DL_API BlockInSectorRead_PK(OUT uint8_t *data, - uint8_t sector_address, - uint8_t block_in_sector_address, - uint8_t auth_mode, - IN const uint8_t *key); -UFR_STATUS DL_API BlockInSectorWrite_PK(IN const uint8_t *data, - uint8_t sector_address, - uint8_t block_in_sector_address, - uint8_t auth_mode, - IN const uint8_t *key); -UFR_STATUS DL_API LinearRead_PK(OUT uint8_t *data, - uint16_t linear_address, - uint16_t length, - VAR uint16_t *bytes_returned, - uint8_t auth_mode, - IN const uint8_t *key); -UFR_STATUS DL_API LinRowRead_PK(OUT uint8_t *data, - uint16_t linear_address, - uint16_t length, - VAR uint16_t *bytes_returned, - uint8_t auth_mode, - IN const uint8_t *key); -UFR_STATUS DL_API LinearWrite_PK(IN const uint8_t *data, - uint16_t linear_address, - uint16_t length, - VAR uint16_t *bytes_written, - uint8_t auth_mode, - IN const uint8_t *key); -UFR_STATUS DL_API LinearFormatCard_PK(IN const uint8_t *new_key_A, - uint8_t blocks_access_bits, - uint8_t sector_trailers_access_bits, - uint8_t sector_trailers_byte9, - IN const uint8_t *new_key_B, - VAR uint8_t *lpucSectorsFormatted, - uint8_t auth_mode, - IN const uint8_t *key); -UFR_STATUS DL_API SectorTrailerWrite_PK(uint8_t addressing_mode, - uint8_t address, - IN const uint8_t *new_key_A, - uint8_t block0_access_bits, - uint8_t block1_access_bits, - uint8_t block2_access_bits, - uint8_t sector_trailer_access_bits, - uint8_t sector_trailer_byte9, - IN const uint8_t *new_key_B, - uint8_t auth_mode, - IN const uint8_t *key); -UFR_STATUS DL_API SectorTrailerWriteUnsafe_PK(uint8_t addressing_mode, - uint8_t address, - IN const uint8_t *sector_trailer, - uint8_t auth_mode, - IN const uint8_t *key); -UFR_STATUS DL_API ValueBlockRead_PK(VAR int32_t *value, - VAR uint8_t *value_addr, - uint8_t block_address, - uint8_t auth_mode, - IN const uint8_t *key); -UFR_STATUS DL_API ValueBlockInSectorRead_PK(VAR int32_t *value, - VAR uint8_t *value_addr, - uint8_t sector_address, - uint8_t block_in_sector_address, - uint8_t auth_mode, - IN const uint8_t *key); -UFR_STATUS DL_API ValueBlockWrite_PK(int32_t value, - uint8_t value_addr, - uint8_t block_address, - uint8_t auth_mode, - IN const uint8_t *key); -UFR_STATUS DL_API ValueBlockInSectorWrite_PK(int32_t value, - uint8_t value_addr, - uint8_t sector_address, - uint8_t block_in_sector_address, - uint8_t auth_mode, - IN const uint8_t *key); -UFR_STATUS DL_API ValueBlockIncrement_PK(int32_t increment_value, - uint8_t block_address, - uint8_t auth_mode, - IN const uint8_t *key); -UFR_STATUS DL_API ValueBlockInSectorIncrement_PK(int32_t increment_value, - uint8_t sector_address, - uint8_t block_in_sector_address, - uint8_t auth_mode, - IN const uint8_t *key); -UFR_STATUS DL_API ValueBlockDecrement_PK(int32_t decrement_value, - uint8_t block_address, - uint8_t auth_mode, - IN const uint8_t *key); -UFR_STATUS DL_API ValueBlockInSectorDecrement_PK(int32_t decrement_value, - uint8_t sector_address, - uint8_t block_in_sector_address, - uint8_t auth_mode, - IN const uint8_t *key); -UFR_STATUS DL_API GetReaderHardwareVersion(VAR uint8_t *version_major, - VAR uint8_t *version_minor); -UFR_STATUS DL_API GetReaderFirmwareVersion(VAR uint8_t *version_major, - VAR uint8_t *version_minor); - -// New commands (for RTC & I2C EEPROM): -UFR_STATUS DL_API GetReaderTime(VAR uint8_t *time); -UFR_STATUS DL_API SetReaderTime(IN uint8_t *password, VAR uint8_t *time); -UFR_STATUS DL_API ChangeReaderPassword(IN uint8_t *old_password, IN uint8_t *new_password); -UFR_STATUS DL_API ReaderEepromWrite(IN uint8_t *data, uint32_t address, uint32_t size, IN uint8_t *password); -UFR_STATUS DL_API ReaderEepromRead(OUT uint8_t *data, uint32_t address, uint32_t size); - -UFR_STATUS DL_API SubscribeSector(uint8_t block_nr, uint32_t admin_serial); -UFR_STATUS DL_API SubscribeBlock(uint8_t block_nr, uint32_t admin_serial); -UFR_STATUS DL_API BusAdminCardMake(uint32_t serial, IN uint8_t *password); - -UFR_STATUS DL_API GetReaderSerialDescription(OUT uint8_t pSerialDescription[8]); - -// New since version 2.0: -UFR_STATUS DL_API GetBuildNumber(VAR uint8_t *build); -UFR_STATUS DL_API GetCardIdEx(VAR uint8_t *lpucSak, OUT uint8_t *aucUid, - VAR uint8_t *lpucUidSize); -UFR_STATUS DL_API GetLastCardIdEx(VAR uint8_t *lpucSak, OUT uint8_t *aucUid, - VAR uint8_t *lpucUidSize); -//------------------------------------------------------------------------------ -//Multi-card (anti collision) mode: -//------------------------------------------------------------------------------ -UFR_STATUS DL_API EnableAntiCollision(void); -UFR_STATUS DL_API DisableAntiCollision(void); -UFR_STATUS DL_API EnumCards(VAR uint8_t *lpucCardsNumber, OUT uint8_t *lpucUidListSize); // Card pointer is on the first card in list -UFR_STATUS DL_API ListCards(OUT uint8_t *aucUidList, uint8_t ucUidListSize); // Before calling this function you must call EnumCards() first. -UFR_STATUS DL_API SelectCard(IN const uint8_t *aucUid, uint8_t ucUidSize, OUT uint8_t *lpucSelctedCardType); -UFR_STATUS DL_API DeslectCard(void); -UFR_STATUS DL_API GetAntiCollisionStatus(VAR int8_t *lpcIsAntiCollEnabled, VAR int8_t *lpcIsAnyCardSelected); -//------------------------------------------------------------------------------ -UFR_STATUS DL_API GetDlogicCardType(VAR uint8_t *lpucCardType); -UFR_STATUS DL_API GetNfcT2TVersion(OUT uint8_t lpucVersionResponse[8]); -UFR_STATUS DL_API GetCardSize(VAR uint32_t *lpulLinearSize, VAR uint32_t *lpulRawSize); - -// uFCoder PRO MODE -UFR_STATUS DL_API GetReaderProMode(VAR uint32_t *pReaderProMode, OUT uint32_t *pReaderProConfig); -UFR_STATUS DL_API SetReaderProMode(const uint32_t ReaderProMode); - -// QR barcode crypt algorithm -// initialization. with TB serial like 'TB123456' -UFR_STATUS DL_API CardEncryption_Initialize(IN const uint8_t *TBSerialString, uint16_t job_number); - -// You must define 25 bytes array in memory for out_card_data[] -UFR_STATUS DL_API CardEncryption_GetNextEncryptedCard(const uint32_t from_timestamp, const uint32_t to_timestamp, - OUT uint8_t out_card_data[]); - -enum CARD_ENCRYPTION_CODE_TYPE -{ - CODE_TYPE_STANDARD, - CODE_TYPE_GROUP, - CODE_TYPE_DAILY_RANGE, // valid from, but only to_timestamp / every day -}; - -/** - * Same function like CardEncryption_GetNextEncryptedCard() with an additional byte - * to set master byte on the encrypted card ID - * - * @param code_type card type, look in CARD_ENCRYPTION_CODE_TYPE enumeration - * @param from_timestamp start date-time validity of the generated card - * @param to_timestamp end date-time validity of the generated card - * @param additional_data_size additional data size in bytes - * @param additional_data array with additional data - only master byte on the encrypted card ID for now - * @param out_card_data_size returns how many bytes are stored in the out_card_data array - * @param out_card_data pointer to the allocated byte array in memory (minimal size of 20 bytes) for the output data - * @return - */ -UFR_STATUS DL_API CardEncryption_GetNext(const uint32_t code_type, - const uint32_t from_timestamp, const uint32_t to_timestamp, - const uint32_t additional_data_size, IN const uint8_t additional_data[], - VAR uint32_t *out_card_data_size, OUT uint8_t out_card_data[]); - -UFR_STATUS DL_API CardEncryption_GetActualCardSN(OUT uint32_t *ActualCard_SN, VAR uint32_t *ActualCard_SN_LOG); -UFR_STATUS DL_API CardEncryption_GetJobSN(VAR uint32_t *JobSN); -UFR_STATUS DL_API CardEncryption_GetSalterSN(OUT uint8_t SalterSN[8], VAR uint8_t * magicByte); - -UFR_STATUS DL_API read_ndef_record(uint8_t message_nr, uint8_t record_nr, VAR uint8_t *tnf, OUT uint8_t *type_record, VAR uint8_t *type_length, OUT uint8_t *id, VAR uint8_t *id_length, - OUT uint8_t *payload, VAR uint32_t *payload_length); -UFR_STATUS DL_API write_ndef_record(uint8_t message_nr, - IN uint8_t *tnf, - IN uint8_t *type_record, - IN uint8_t *type_length, - IN uint8_t *id, - IN uint8_t *id_length, - IN uint8_t *payload, - IN uint32_t *payload_length, - VAR uint8_t *card_formated); -UFR_STATUS DL_API write_ndef_record_mirroring(uint8_t message_nr, - IN uint8_t *tnf, - IN uint8_t *type_record, - IN uint8_t *type_length, - IN uint8_t *id, - IN uint8_t *id_length, - IN uint8_t *payload, - IN uint32_t *payload_length, - VAR uint8_t *card_formated, - int use_uid_ascii_mirror, - int use_counter_ascii_mirror, - uint32_t payload_mirroring_pos); -UFR_STATUS DL_API get_ndef_record_count(VAR uint8_t *ndef_message_cnt, VAR uint8_t *ndef_record_cnt, OUT uint8_t *ndef_record_array, VAR uint8_t *empty_ndef_message_cnt); -UFR_STATUS DL_API erase_last_ndef_record(uint8_t message_nr); -UFR_STATUS DL_API erase_all_ndef_records(uint8_t message_nr); -UFR_STATUS DL_API ndef_card_initialization(void); -//--------------------------------------------------------------------- -// Card emulation: -//--------------------------------------------------------------------- -UFR_STATUS DL_API WriteEmulationNdef(uint8_t tnf, - IN uint8_t* type_record, - uint8_t type_length, - IN uint8_t* id, - uint8_t id_length, - IN uint8_t* payload, - uint8_t payload_length); -UFR_STATUS DL_API WriteEmulationNdefWithAAR( - uint8_t tnf, - IN uint8_t *type_record, - uint8_t type_length, - IN uint8_t *id, - uint8_t id_length, - IN uint8_t *payload, - uint8_t payload_length, - IN uint8_t *aar, - uint8_t aar_length); -UFR_STATUS DL_API TagEmulationStart(void); -UFR_STATUS DL_API TagEmulationStop(void); -UFR_STATUS DL_API CombinedModeEmulationStart(void); -UFR_STATUS DL_API AdHocEmulationStart(void); -UFR_STATUS DL_API AdHocEmulationStop(void); -UFR_STATUS DL_API GetAdHocEmulationParams(VAR uint8_t *ThresholdMinLevel, VAR uint8_t *ThresholdCollLevel, - VAR uint8_t *RFLevelAmp, VAR uint8_t *RxGain, VAR uint8_t *RFLevel); -UFR_STATUS DL_API SetAdHocEmulationParams(uint8_t ThresholdMinLevel, uint8_t ThresholdCollLevel, - uint8_t RFLevelAmp, uint8_t RxGain, uint8_t RFLevel); -UFR_STATUS DL_API GetExternalFieldState(VAR uint8_t *is_field_present); -UFR_STATUS DL_API EnterShareRamCommMode(void); -UFR_STATUS DL_API ExitShareRamCommMode(void); -UFR_STATUS DL_API WriteShareRam(IN uint8_t *ram_data, uint8_t addr, uint8_t data_len); -UFR_STATUS DL_API ReadShareRam(OUT uint8_t *ram_data, uint8_t addr, uint8_t data_len); - -//------------------------------------------------------------------------------ - -// GetNfcT2TVersion() returns 8 bytes (see T2T documentation): -typedef struct t2t_version_struct { - uint8_t header; - uint8_t vendor_id; - uint8_t product_type; - uint8_t product_subtype; - uint8_t major_product_version; - uint8_t minor_product_version; - uint8_t storage_size; - uint8_t protocol_type; -} t2t_version_t; - -// NfcT2TSafeConvertVersion() returns converts version_record that returned from GetNfcT2TVersion() -// or GetNfcT2TVersionM(). Conversion is "alignment safe" -// (you don't need to pay attention on structure byte alignment): -void DL_API NfcT2TSafeConvertVersion(t2t_version_t *version, const uint8_t *version_record); -UFR_STATUS DL_API ReadECCSignature(IN uint8_t lpucECCSignature[ECC_SIG_LEN], - OUT uint8_t lpucUid[MAX_UID_LEN], VAR uint8_t *lpucUidLen, VAR uint8_t *lpucDlogicCardType); - -//------------------------------------------------------------------------------ -UFR_STATUS DL_API ReadCounter(uint8_t counter_address, VAR uint32_t *value); -UFR_STATUS DL_API IncrementCounter(uint8_t counter_address, uint32_t inc_value); -UFR_STATUS DL_API ReadNFCCounter(VAR uint32_t *value); // Same as ReadCounter(2, &value); -UFR_STATUS DL_API ReadNFCCounterPwdAuth_RK(VAR uint32_t *value, uint8_t reader_key_index); -UFR_STATUS DL_API ReadNFCCounterPwdAuth_PK(VAR uint32_t *value, IN const uint8_t *key); - -//------------------------------------------------------------------------------ - -UFR_STATUS DL_API SetAsyncCardIdSendConfig(uint8_t send_enable, - uint8_t prefix_enable, uint8_t prefix, uint8_t suffix, - uint8_t send_removed_enable, uint32_t async_baud_rate); - -UFR_STATUS DL_API SetAsyncCardIdSendConfigEx(uint8_t send_enable, - uint8_t prefix_enable, uint8_t prefix, uint8_t suffix, - uint8_t send_removed_enable, uint8_t reverse_byte_order, - uint8_t decimal_representation, uint32_t async_baud_rate); - -UFR_STATUS DL_API GetAsyncCardIdSendConfig(VAR uint8_t *send_enable, - VAR uint8_t *prefix_enable, VAR uint8_t *prefix, VAR uint8_t *suffix, - VAR uint8_t *send_removed_enable, VAR uint32_t *async_baud_rate); - -UFR_STATUS DL_API GetAsyncCardIdSendConfigEx(VAR uint8_t *send_enable, - VAR uint8_t *prefix_enable, VAR uint8_t *prefix, VAR uint8_t *suffix, - VAR uint8_t *send_removed_enable, VAR uint8_t *reverse_byte_order, - VAR uint8_t *decimal_representation, VAR uint32_t *async_baud_rate); - -/***************************************************************************** - * AIS FUNCTIONS - ***************************************************************************** - */ - -/** - * ais_get_card_number() read assigned serial number from AIS cards - * - * @param card_number ( pointer to reserved 32 bit integer ) AIS card serial number - * @return UFR_STATUS execution status - */ -UFR_STATUS DL_API ais_get_card_number(VAR uint32_t *card_number); - -UFR_STATUS DL_API ais_set_right_record(uint8_t record_number, uint16_t first_reader_nr, uint16_t last_reader_nr, - uint8_t start_hour, uint8_t start_minute, uint8_t end_hour, uint8_t end_minute, IN uint8_t *days); -UFR_STATUS DL_API ais_get_right_record(uint8_t record_number, VAR uint16_t *first_reader_nr, VAR uint16_t *last_reader_nr, - VAR uint8_t *start_hour, VAR uint8_t *start_minute, VAR uint8_t *end_hour, VAR uint8_t *end_minute, OUT uint8_t *days); -UFR_STATUS DL_API ais_erase_right_record(uint8_t record_number); -UFR_STATUS DL_API ais_set_validate_record(uint8_t begin_year, uint8_t begin_month, uint8_t begin_day, uint8_t begin_hour, uint8_t begin_minute, - uint8_t end_year, uint8_t end_month, uint8_t end_day, uint8_t end_hour, uint8_t end_minute); -UFR_STATUS DL_API ais_get_validate_record(VAR uint8_t *begin_year, VAR uint8_t *begin_month, VAR uint8_t *begin_day, VAR uint8_t *begin_hour, VAR uint8_t *begin_minute, - VAR uint8_t *end_year, VAR uint8_t *end_month, VAR uint8_t *end_day, VAR uint8_t *end_hour, VAR uint8_t *end_minute); -UFR_STATUS DL_API ais_set_card_type(uint8_t card_type); -UFR_STATUS DL_API ais_get_card_type(VAR uint8_t *card_type); -UFR_STATUS DL_API ais_set_card_daily_duration(uint16_t duration); -UFR_STATUS DL_API ais_get_card_daily_duration(VAR uint16_t *duration); -UFR_STATUS DL_API ais_set_card_total_duration(uint32_t duration); -UFR_STATUS DL_API ais_get_card_total_duration(VAR uint32_t *duration); - -// swimming pool ************************************************************** -/** - * ais_get_credit_and_period_validity() > get information about credit and period of validity - * - * @param credit ( pointer to integer ) : - * @param begin_year ( pointer to integer ) : - * @param begin_month ( pointer to integer ) : - * @param begin_day ( pointer to integer ) : - * @param begin_hour ( pointer to integer ) : - * @param begin_minute ( pointer to integer ) : - * @param end_year ( pointer to integer ) : - * @param end_month ( pointer to integer ) : - * @param end_day ( pointer to integer ) : - * @param end_hour ( pointer to integer ) : - * @param end_minute ( pointer to integer ) : - * @return - */ -UFR_STATUS DL_API ais_get_credit_and_period_validity(VAR int32_t *credit, - VAR uint32_t *begin_year, VAR uint32_t *begin_month, VAR uint32_t *begin_day, - VAR uint32_t *begin_hour, - VAR uint32_t *begin_minute, // - VAR uint32_t *end_year, VAR uint32_t *end_month, VAR uint32_t *end_day, - VAR uint32_t *end_hour, VAR uint32_t *end_minute); - -/** - * ais_set_credit_and_period_validity() > set credit and period of validity - * - * @param credit ( integer ) : - * @param begin_year ( integer ) : - * @param begin_month ( integer ) : - * @param begin_day ( integer ) : - * @param begin_hour ( integer ) : - * @param begin_minute ( integer ) : - * @param end_year ( integer ) : - * @param end_month ( integer ) : - * @param end_day ( integer ) : - * @param end_hour ( integer ) : - * @param end_minute ( integer ) : - * @return - */ -UFR_STATUS DL_API ais_set_credit_and_period_validity(int32_t credit, - uint32_t begin_year, uint32_t begin_month, uint32_t begin_day, - uint32_t begin_hour, - uint32_t begin_minute, // - uint32_t end_year, uint32_t end_month, uint32_t end_day, - uint32_t end_hour, uint32_t end_minute); - -UFR_STATUS DL_API ais_set_right_type_record(uint8_t record_number, - uint8_t right_record_type, IN uint8_t *right_data); - -UFR_STATUS DL_API ais_get_right_type_record(uint8_t record_number, - VAR uint8_t *right_record_type, OUT uint8_t *right_data); - -UFR_STATUS DL_API ais_set_right_record_type_max_daily_counter(uint8_t record_number, - uint16_t first_reader_nr, uint16_t last_reader_nr, uint8_t start_hour, - uint8_t start_minute, uint8_t end_hour, uint8_t end_minute, - IN uint8_t *days, uint8_t max_daily_counter); - -UFR_STATUS DL_API ais_get_right_record_type_max_daily_counter(uint8_t record_number, - VAR uint16_t *first_reader_nr, VAR uint16_t *last_reader_nr, - VAR uint8_t *start_hour, VAR uint8_t *start_minute, VAR uint8_t *end_hour, - VAR uint8_t *end_minute, OUT uint8_t *days, VAR uint8_t *max_daily_counter); - -//============================================================================= - -UFR_STATUS DL_API UfrXrcLockOn(uint16_t pulse_duration); -UFR_STATUS DL_API UfrXrcRelayState(uint8_t state); -UFR_STATUS DL_API UfrXrcGetIoState(VAR uint8_t *intercom, VAR uint8_t *door, VAR uint8_t *relay_state); -UFR_STATUS DL_API UfrRedLightControl(uint8_t light_status); -UFR_STATUS DL_API UfrRgbLightControl(uint8_t red, uint8_t green, uint8_t blue, uint8_t intensity, uint8_t enable); - -UFR_STATUS DL_API UfrSetBadSelectCardNrMax(uint8_t bad_select_nr_max); -UFR_STATUS DL_API UfrGetBadSelectCardNrMax(VAR uint8_t *bad_select_nr_max); - -UFR_STATUS DL_API UfrEnterSleepMode(void); -UFR_STATUS DL_API UfrLeaveSleepMode(void); -UFR_STATUS DL_API AutoSleepSet(uint8_t seconds_wait); -UFR_STATUS DL_API AutoSleepGet(VAR uint8_t *seconds_wait); - -UFR_STATUS DL_API SetSpeedPermanently(unsigned char tx_speed, unsigned char rx_speed); -UFR_STATUS DL_API GetSpeedParameters(VAR unsigned char *tx_speed, VAR unsigned char *rx_speed); -UFR_STATUS DL_API SetDisplayData(IN uint8_t *display_data, uint8_t data_length); -UFR_STATUS DL_API SetSpeakerFrequency(uint16_t frequency); -UFR_STATUS DL_API SetDisplayIntensity(uint8_t intensity); -UFR_STATUS DL_API GetDisplayIntensity(VAR uint8_t *intensity); -// DESFIRE functions ************************************************************** - -/** - * - * @param chaining - * @param timeout - * @param block_length - * @param snd_data_array - * @param rcv_length - * @param rcv_data_array - * @param ufr_status - * @return - */ -UFR_STATUS DL_API SetISO14443_4_Mode(void); -UFR_STATUS DL_API SetISO14443_4_DLStorage(void); -UFR_STATUS DL_API uFR_i_block_transceive(uint8_t chaining, uint8_t timeout, - uint8_t block_length, IN uint8_t *snd_data_array, VAR size_t *rcv_length, - OUT uint8_t *rcv_data_array, VAR uint32_t *ufr_status); - -UFR_STATUS DL_API uFR_APDU_Transceive(uint8_t cls, uint8_t ins, uint8_t p1, uint8_t p2, - IN uint8_t *data_out, uint8_t data_out_len, OUT uint8_t *data_in, uint32_t max_data_in_len, VAR uint32_t *response_len, - uint8_t send_le, OUT uint8_t *apdu_status); - -UFR_STATUS DL_API APDUHexStrTransceive(IN const char *c_apdu, OUT char **r_apdu); -UFR_STATUS DL_API APDUPlainTransceive(IN const uint8_t *c_apdu, uint32_t c_apdu_len, OUT uint8_t *r_apdu, VAR uint32_t *r_apdu_len); -UFR_STATUS DL_API APDUTransceive(uint8_t cls, uint8_t ins, uint8_t p1, uint8_t p2, - IN const uint8_t *data_out, uint32_t Nc, OUT uint8_t *data_in, VAR uint32_t *Ne, - uint8_t send_le, OUT uint8_t *apdu_status); -UFR_STATUS DL_API i_block_trans_rcv_chain(uint8_t chaining, uint8_t timeout, - uint8_t block_length, IN uint8_t *snd_data_array, - VAR uint8_t *rcv_length, OUT uint8_t *rcv_data_array, VAR uint8_t *rcv_chained, VAR uint32_t *ufr_status); -UFR_STATUS DL_API r_block_transceive(uint8_t ack, uint8_t timeout, - VAR uint8_t *rcv_length, OUT uint8_t *rcv_data_array, VAR uint8_t *rcv_chained, VAR uint32_t *ufr_status); -UFR_STATUS DL_API s_block_deselect(uint8_t timeout); - -UFR_STATUS DL_API card_transceive(uint8_t card_activate, uint8_t card_halted, uint8_t tx_crc, uint8_t rx_crc, uint8_t crypto1, - uint32_t timeout, IN uint8_t *tx_data, uint8_t tx_data_len, OUT uint8_t *rx_data, VAR uint8_t *rx_data_len); -UFR_STATUS DL_API card_transceive_mode_start(uint8_t tx_crc, uint8_t rx_crc, uint32_t rf_timeout, uint32_t uart_timeout); -UFR_STATUS DL_API card_transceive_mode_stop(void); -UFR_STATUS DL_API card_halt_enable(void); - -UFR_STATUS DL_API uart_transceive(IN uint8_t *send_data, uint8_t send_len, OUT uint8_t *rcv_data, uint32_t bytes_to_receive, VAR uint32_t *rcv_len); - -UFR_STATUS DL_API open_ISO7816_interface(OUT uint8_t *atr_data, VAR uint8_t *atr_len); -UFR_STATUS DL_API APDU_switch_to_ISO7816_interface(void); -UFR_STATUS DL_API close_ISO7816_interface_no_APDU(void); -UFR_STATUS DL_API close_ISO7816_interface_APDU_ISO14443_4(void); -UFR_STATUS DL_API APDU_switch_to_ISO14443_4_interface(void); -UFR_STATUS DL_API APDU_switch_off_from_ISO7816_interface(void); - -//============================================================================== -UFR_STATUS DL_API JCAppSelectByAid(IN const uint8_t *aid, uint8_t aid_len, OUT uint8_t selection_response[16]); -UFR_STATUS DL_API JCAppPutPrivateKey(uint8_t key_type, uint8_t key_index, - IN const uint8_t *key, uint16_t key_bit_len, const IN uint8_t *key_param, uint16_t key_parm_len); -UFR_STATUS DL_API JCAppGenerateKeyPair(uint8_t key_type, uint8_t key_index, uint8_t key_designator, - uint16_t key_bit_len, IN const uint8_t *params, uint16_t params_size); -UFR_STATUS DL_API JCAppDeleteRsaKeyPair(uint8_t key_index); -UFR_STATUS DL_API JCAppDeleteEcKeyPair(uint8_t key_index); -UFR_STATUS DL_API JCAppSignatureBegin(uint8_t cipher, uint8_t digest, uint8_t padding, - uint8_t key_index, - IN const uint8_t *chunk, uint16_t chunk_len, IN const uint8_t *alg_param, uint16_t alg_parm_len); -UFR_STATUS DL_API JCAppSignatureUpdate(IN const uint8_t *chunk, uint16_t chunk_len); -UFR_STATUS DL_API JCAppSignatureEnd(VAR uint16_t *sig_len); -UFR_STATUS DL_API JCAppGenerateSignature(uint8_t cipher, uint8_t digest, uint8_t padding, - uint8_t key_index, - IN const uint8_t *plain_data, uint16_t plain_data_len, VAR uint16_t *sig_len, - IN const uint8_t *alg_param, uint16_t alg_parm_len); -UFR_STATUS DL_API JCAppGetSignature(OUT uint8_t *sig, uint16_t sig_len); -UFR_STATUS DL_API JCAppPutObj(uint8_t obj_type, uint8_t obj_index, IN uint8_t *obj, int16_t obj_size, IN uint8_t *id, uint8_t id_size); -UFR_STATUS DL_API JCAppPutObjSubject(uint8_t obj_type, uint8_t obj_index, IN uint8_t *subject, uint8_t size); -UFR_STATUS DL_API JCAppInvalidateCert(uint8_t obj_type, uint8_t obj_index); -UFR_STATUS DL_API JCAppGetObjId(uint8_t obj_type, uint8_t obj_index, OUT uint8_t *id, VAR uint16_t *id_size); // when id == NULL returns size -UFR_STATUS DL_API JCAppGetObjSubject(uint8_t obj_type, uint8_t obj_index, OUT uint8_t *subject, VAR uint16_t *size); // when subject == NULL returns size -UFR_STATUS DL_API JCAppGetObj(uint8_t obj_type, uint8_t obj_index, OUT uint8_t *obj, int16_t size); // when obj == NULL returns size -c_string DL_API JCAppGetErrorDescription(UFR_STATUS apdu_error_status); -UFR_STATUS DL_API JCAppLogin(uint8_t SO, IN uint8_t *pin, uint8_t pinSize); -UFR_STATUS DL_API JCAppGetPinTriesRemaining(dl_sec_code_t secureCodeType, VAR uint16_t *triesRemaining); -UFR_STATUS DL_API JCAppPinChange(dl_sec_code_t secureCodeType, IN uint8_t *newPin, uint8_t newPinSize); -UFR_STATUS DL_API JCAppPinUnblock(uint8_t SO, IN uint8_t *puk, uint8_t pukSize); -UFR_STATUS DL_API JCAppPinEnable(uint8_t SO); -UFR_STATUS DL_API JCAppPinDisable(uint8_t SO); -UFR_STATUS DL_API JCAppGetRsaPublicKey(uint8_t key_index, OUT uint8_t *modulus, VAR uint16_t *modulus_size, - OUT uint8_t *exponent, VAR uint16_t *exponent_size); // when modulus == NULL, returns sizes and exponent ignored -UFR_STATUS DL_API JCAppGetEcPublicKey(uint8_t key_index, OUT uint8_t *keyW, VAR uint16_t *kexWSize, // when keyW == NULL, returns size - OUT uint8_t *field, VAR uint16_t *field_size, OUT uint8_t *ab , VAR uint16_t *ab_size, OUT uint8_t *g, VAR uint16_t *g_size, - OUT uint8_t *r, VAR uint16_t *r_size, VAR uint16_t *k, VAR uint16_t *key_size_bits, VAR uint16_t *key_designator); -UFR_STATUS DL_API JCAppGetEcKeySizeBits(uint8_t key_index, VAR uint16_t *key_size_bits, VAR uint16_t *key_designator); -//------------------------------------------------------------------------------ -UFR_STATUS DL_API JCStorageGetFilesListSize(VAR uint32_t *list_size); -UFR_STATUS DL_API JCStorageListFiles(OUT uint8_t *list, uint32_t list_bytes_allocated); -UFR_STATUS DL_API JCStorageGetFileSize(uint8_t card_file_index, VAR uint32_t *file_size); -UFR_STATUS DL_API JCStorageReadFile(uint8_t card_file_index, OUT uint8_t *data, uint32_t data_bytes_allocated); -UFR_STATUS DL_API JCStorageReadFileToFileSystem(uint8_t card_file_index, IN const char *file_system_path_name); -UFR_STATUS DL_API JCStorageWriteFile(uint8_t card_file_index, IN const uint8_t *data, uint32_t data_size); -UFR_STATUS DL_API JCStorageWriteFileFromFileSystem(uint8_t card_file_index, IN const char *file_system_path_name); -UFR_STATUS DL_API JCStorageDeleteFile(uint8_t file_index); -//------------------------------------------------------------------------------ -UFR_STATUS DL_API MRTDAppSelectAndAuthenticateBac(IN const uint8_t mrz_proto_key[25], OUT uint8_t *ksenc, OUT uint8_t *ksmac, - VAR uint64_t *send_sequence_cnt); -UFR_STATUS DL_API MRTDFileReadBacToHeap(IN const uint8_t *file_index, VAR uint8_t **output, OUT uint32_t *output_length, IN const uint8_t *ksenc, - IN const uint8_t *ksmac, VAR uint64_t *send_sequence_cnt); -UFR_STATUS DL_API MRTD_MRZDataToMRZProtoKey(IN const char *doc_number, IN const char *date_of_birth, IN const char *date_of_expiry, - OUT uint8_t mrz_proto_key[25]); -UFR_STATUS DL_API MRTD_MRZSubjacentToMRZProtoKey(IN const uint8_t mrz[44], OUT uint8_t mrz_proto_key[25]); -//============================================================================== -UFR_STATUS DL_API DES_to_AES_key_type(void); -UFR_STATUS DL_API AES_to_DES_key_type(void); - -//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ - -enum KEY_TYPE -{ - AES_KEY_TYPE, - DES3K_KEY_TYPE, - DES_KEY_TYPE, - DES2K_KEY_TYPE -}; - -UFR_STATUS DL_API uFR_int_GetDesfireUid( - uint8_t aes_key_nr, - uint32_t aid, - uint8_t aid_key_nr, - OUT uint8_t *card_uid, - VAR uint8_t *card_uid_len, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_int_GetDesfireUid_aes( - uint8_t aes_key_nr, - uint32_t aid, - uint8_t aid_key_nr, - OUT uint8_t *card_uid, - VAR uint8_t *card_uid_len, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_int_GetDesfireUid_des( - uint8_t des_key_nr, - uint32_t aid, - uint8_t aid_key_nr, - OUT uint8_t *card_uid, - VAR uint8_t *card_uid_len, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_int_GetDesfireUid_2k3des( - uint8_t des2k_key_nr, - uint32_t aid, - uint8_t aid_key_nr, - OUT uint8_t *card_uid, - VAR uint8_t *card_uid_len, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_int_GetDesfireUid_3k3des( - uint8_t des3k_key_nr, - uint32_t aid, - uint8_t aid_key_nr, - OUT uint8_t *card_uid, - VAR uint8_t *card_uid_len, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_int_GetDesfireUid_PK( - IN uint8_t *aes_key_ext, - uint32_t aid, - uint8_t aid_key_nr, - OUT uint8_t *card_uid, - VAR uint8_t *card_uid_len, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_int_GetDesfireUid_aes_PK( - IN uint8_t *aes_key_ext, - uint32_t aid, - uint8_t aid_key_nr, - OUT uint8_t *card_uid, - VAR uint8_t *card_uid_len, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_int_GetDesfireUid_des_PK( - IN uint8_t *des_key_ext, - uint32_t aid, - uint8_t aid_key_nr, - OUT uint8_t *card_uid, - VAR uint8_t *card_uid_len, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_int_GetDesfireUid_2k3des_PK( - IN uint8_t *des2k_key_ext, - uint32_t aid, - uint8_t aid_key_nr, - OUT uint8_t *card_uid, - VAR uint8_t *card_uid_len, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_int_GetDesfireUid_3k3des_PK( - IN uint8_t *des3k_key_ext, - uint32_t aid, - uint8_t aid_key_nr, - OUT uint8_t *card_uid, - VAR uint8_t *card_uid_len, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_SAM_GetDesfireUidAesAuth( - uint8_t aes_key_nr, - uint32_t aid, - uint8_t aid_key_nr, - OUT uint8_t *card_uid, - VAR uint8_t *card_uid_len, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_SAM_GetDesfireUid3k3desAuth( - uint8_t des3k_key_nr, - uint32_t aid, - uint8_t aid_key_nr, - OUT uint8_t *card_uid, - VAR uint8_t *card_uid_len, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); - -UFR_STATUS DL_API uFR_int_DesfireFreeMem( - VAR uint32_t *free_mem_byte, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); - -UFR_STATUS DL_API uFR_int_DesfireFormatCard( - uint8_t aes_key_nr, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_int_DesfireFormatCard_aes( - uint8_t aes_key_nr, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_int_DesfireFormatCard_des( - uint8_t des_key_nr, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_int_DesfireFormatCard_2k3des( - uint8_t des2k_key_nr, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_int_DesfireFormatCard_3k3des( - uint8_t des3k_key_nr, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_int_DesfireFormatCard_PK( - IN uint8_t *aes_key_ext, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_int_DesfireFormatCard_aes_PK( - IN uint8_t *aes_key_ext, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_int_DesfireFormatCard_des_PK( - IN uint8_t *des_key_ext, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_int_DesfireFormatCard_2k3des_PK( - IN uint8_t *des2k_key_ext, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_int_DesfireFormatCard_3k3des_PK( - IN uint8_t *des3k_key_ext, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_SAM_DesfireFormatCardAesAuth( - uint8_t aes_key_nr, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_SAM_DesfireFormatCard3k3desAuth( - uint8_t des3k_key_nr, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); - -UFR_STATUS DL_API uFR_int_DesfireCreateStdDataFile( - uint8_t aes_key_nr, - uint32_t aid, - uint8_t file_id, - uint32_t file_size, - uint8_t read_key_no, - uint8_t write_key_no, - uint8_t read_write_key_no, - uint8_t change_key_no, - uint8_t communication_settings, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_int_DesfireCreateStdDataFile_aes( - uint8_t aes_key_nr, - uint32_t aid, - uint8_t file_id, - uint32_t file_size, - uint8_t read_key_no, - uint8_t write_key_no, - uint8_t read_write_key_no, - uint8_t change_key_no, - uint8_t communication_settings, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_int_DesfireCreateStdDataFile_des( - uint8_t des_key_nr, - uint32_t aid, - uint8_t file_id, - uint32_t file_size, - uint8_t read_key_no, - uint8_t write_key_no, - uint8_t read_write_key_no, - uint8_t change_key_no, - uint8_t communication_settings, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_int_DesfireCreateStdDataFile_2k3des( - uint8_t des2k_key_nr, - uint32_t aid, - uint8_t file_id, - uint32_t file_size, - uint8_t read_key_no, - uint8_t write_key_no, - uint8_t read_write_key_no, - uint8_t change_key_no, - uint8_t communication_settings, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_int_DesfireCreateStdDataFile_3k3des( - uint8_t des3k_key_nr, - uint32_t aid, - uint8_t file_id, - uint32_t file_size, - uint8_t read_key_no, - uint8_t write_key_no, - uint8_t read_write_key_no, - uint8_t change_key_no, - uint8_t communication_settings, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_int_DesfireCreateStdDataFile_PK( - IN uint8_t *aes_key_ext, - uint32_t aid, - uint8_t file_id, - uint32_t file_size, - uint8_t read_key_no, - uint8_t write_key_no, - uint8_t read_write_key_no, - uint8_t change_key_no, - uint8_t communication_settings, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_int_DesfireCreateStdDataFile_aes_PK( - IN uint8_t *aes_key_ext, - uint32_t aid, - uint8_t file_id, - uint32_t file_size, - uint8_t read_key_no, - uint8_t write_key_no, - uint8_t read_write_key_no, - uint8_t change_key_no, - uint8_t communication_settings, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_int_DesfireCreateStdDataFile_des_PK( - IN uint8_t *des_key_ext, - uint32_t aid, - uint8_t file_id, - uint32_t file_size, - uint8_t read_key_no, - uint8_t write_key_no, - uint8_t read_write_key_no, - uint8_t change_key_no, - uint8_t communication_settings, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_int_DesfireCreateStdDataFile_2k3des_PK( - IN uint8_t *des2k_key_ext, - uint32_t aid, - uint8_t file_id, - uint32_t file_size, - uint8_t read_key_no, - uint8_t write_key_no, - uint8_t read_write_key_no, - uint8_t change_key_no, - uint8_t communication_settings, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_int_DesfireCreateStdDataFile_3k3des_PK( - IN uint8_t *des3k_key_ext, - uint32_t aid, - uint8_t file_id, - uint32_t file_size, - uint8_t read_key_no, - uint8_t write_key_no, - uint8_t read_write_key_no, - uint8_t change_key_no, - uint8_t communication_settings, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_SAM_DesfireCreateStdDataFileAesAuth( - uint8_t aes_key_nr, - uint32_t aid, - uint8_t file_id, - uint32_t file_size, - uint8_t read_key_no, - uint8_t write_key_no, - uint8_t read_write_key_no, - uint8_t change_key_no, - uint8_t communication_settings, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_SAM_DesfireCreateStdDataFile3k3desAuth( - uint8_t des3k_key_nr, - uint32_t aid, - uint8_t file_id, - uint32_t file_size, - uint8_t read_key_no, - uint8_t write_key_no, - uint8_t read_write_key_no, - uint8_t change_key_no, - uint8_t communication_settings, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_int_DesfireCreateStdDataFile_no_auth( - uint32_t aid, - uint8_t file_id, - uint32_t file_size, - uint8_t read_key_no, - uint8_t write_key_no, - uint8_t read_write_key_no, - uint8_t change_key_no, - uint8_t communication_settings, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); - -UFR_STATUS DL_API uFR_int_DesfireDeleteFile( - uint8_t aes_key_nr, - uint32_t aid, - uint8_t file_id, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_int_DesfireDeleteFile_aes( - uint8_t aes_key_nr, - uint32_t aid, - uint8_t file_id, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_int_DesfireDeleteFile_des( - uint8_t des_key_nr, - uint32_t aid, - uint8_t file_id, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_int_DesfireDeleteFile_2k3des( - uint8_t des2k_key_nr, - uint32_t aid, - uint8_t file_id, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_int_DesfireDeleteFile_3k3des( - uint8_t des3k_key_nr, - uint32_t aid, - uint8_t file_id, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_int_DesfireDeleteFile_PK( - IN uint8_t *aes_key_ext, - uint32_t aid, - uint8_t file_id, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_int_DesfireDeleteFile_aes_PK( - IN uint8_t *aes_key_ext, - uint32_t aid, - uint8_t file_id, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_int_DesfireDeleteFile_des_PK( - IN uint8_t *des_key_ext, - uint32_t aid, - uint8_t file_id, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_int_DesfireDeleteFile_2k3des_PK( - IN uint8_t *des2k_key_ext, - uint32_t aid, - uint8_t file_id, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_int_DesfireDeleteFile_3k3des_PK( - IN uint8_t *des3k_key_ext, - uint32_t aid, - uint8_t file_id, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_SAM_DesfireDeleteFileAesAuth( - uint8_t aes_key_nr, - uint32_t aid, - uint8_t file_id, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_SAM_DesfireDeleteFile3k3desAuth( - uint8_t des3k_key_nr, - uint32_t aid, - uint8_t file_id, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_int_DesfireDeleteFile_no_auth( - uint32_t aid, - uint8_t file_id, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); - -UFR_STATUS DL_API uFR_int_DesfireCreateAesApplication( - uint8_t aes_key_nr, - uint32_t aid, - uint8_t setting, - uint8_t max_key_no, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_int_DesfireCreateAesApplication_aes( - uint8_t aes_key_nr, - uint32_t aid, - uint8_t setting, - uint8_t max_key_no, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_int_DesfireCreate3k3desApplication_aes( - uint8_t aes_key_nr, - uint32_t aid, - uint8_t setting, - uint8_t max_key_no, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_int_DesfireCreateDesApplication_aes( - uint8_t aes_key_nr, - uint32_t aid, - uint8_t setting, - uint8_t max_key_no, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_int_DesfireCreateAesApplication_3k3des( - uint8_t des3k_key_nr, - uint32_t aid, - uint8_t setting, - uint8_t max_key_no, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_int_DesfireCreate3k3desApplication_3k3des( - uint8_t des3k_key_nr, - uint32_t aid, - uint8_t setting, - uint8_t max_key_no, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_int_DesfireCreateDesApplication_3k3des( - uint8_t des3k_key_nr, - uint32_t aid, - uint8_t setting, - uint8_t max_key_no, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_int_DesfireCreateAesApplication_2k3des( - uint8_t des2k_key_nr, - uint32_t aid, - uint8_t setting, - uint8_t max_key_no, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_int_DesfireCreate3k3desApplication_2k3des( - uint8_t des2k_key_nr, - uint32_t aid, - uint8_t setting, - uint8_t max_key_no, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_int_DesfireCreateDesApplication_2k3des( - uint8_t des2k_key_nr, - uint32_t aid, - uint8_t setting, - uint8_t max_key_no, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_int_DesfireCreateAesApplication_des( - uint8_t des_key_nr, - uint32_t aid, - uint8_t setting, - uint8_t max_key_no, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_int_DesfireCreate3k3desApplication_des( - uint8_t des_key_nr, - uint32_t aid, - uint8_t setting, - uint8_t max_key_no, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_int_DesfireCreateDesApplication_des( - uint8_t des_key_nr, - uint32_t aid, - uint8_t setting, - uint8_t max_key_no, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_int_DesfireCreateAesApplication_PK( - IN uint8_t *aes_key_ext, - uint32_t aid, - uint8_t setting, - uint8_t max_key_no, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_int_DesfireCreateAesApplication_aes_PK( - IN uint8_t *aes_key_ext, - uint32_t aid, - uint8_t setting, - uint8_t max_key_no, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_int_DesfireCreate3k3desApplication_aes_PK( - IN uint8_t *aes_key_ext, - uint32_t aid, - uint8_t setting, - uint8_t max_key_no, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_int_DesfireCreateDesApplication_aes_PK( - IN uint8_t *aes_key_ext, - uint32_t aid, - uint8_t setting, - uint8_t max_key_no, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_int_DesfireCreateAesApplication_3k3des_PK( - IN uint8_t *des3k_key_ext, - uint32_t aid, - uint8_t setting, - uint8_t max_key_no, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_int_DesfireCreate3k3desApplication_3k3des_PK( - IN uint8_t *des3k_key_ext, - uint32_t aid, - uint8_t setting, - uint8_t max_key_no, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_int_DesfireCreateDesApplication_3k3des_PK( - IN uint8_t *des3k_key_ext, - uint32_t aid, - uint8_t setting, - uint8_t max_key_no, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_int_DesfireCreateAesApplication_2k3des_PK( - IN uint8_t *des2k_key_ext, - uint32_t aid, - uint8_t setting, - uint8_t max_key_no, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_int_DesfireCreate3k3desApplication_2k3des_PK( - IN uint8_t *des2k_key_ext, - uint32_t aid, - uint8_t setting, - uint8_t max_key_no, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_int_DesfireCreateDesApplication_2k3des_PK( - IN uint8_t *des2k_key_ext, - uint32_t aid, - uint8_t setting, - uint8_t max_key_no, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_int_DesfireCreateAesApplication_des_PK( - IN uint8_t *des_key_ext, - uint32_t aid, - uint8_t setting, - uint8_t max_key_no, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_int_DesfireCreate3k3desApplication_des_PK( - IN uint8_t *des_key_ext, - uint32_t aid, - uint8_t setting, - uint8_t max_key_no, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_int_DesfireCreateDesApplication_des_PK( - IN uint8_t *des_key_ext, - uint32_t aid, - uint8_t setting, - uint8_t max_key_no, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_SAM_DesfireCreateAesApplicationAesAuth( - uint8_t aes_key_nr, - uint32_t aid, - uint8_t setting, - uint8_t max_key_no, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_SAM_DesfireCreate3k3desApplicationAesAuth( - uint8_t aes_key_nr, - uint32_t aid, - uint8_t setting, - uint8_t max_key_no, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_SAM_DesfireCreateAesApplication3k3desAuth( - uint8_t des3k_key_nr, - uint32_t aid, - uint8_t setting, - uint8_t max_key_no, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_SAM_DesfireCreate3k3desApplication3k3desAuth( - uint8_t des3k_key_nr, - uint32_t aid, - uint8_t setting, - uint8_t max_key_no, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_int_DesfireCreateAesApplication_no_auth( - uint32_t aid, - uint8_t setting, - uint8_t max_key_no, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_int_DesfireCreate3k3desApplication_no_auth( - uint32_t aid, - uint8_t setting, - uint8_t max_key_no, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_int_DesfireCreateDesApplication_no_auth( - uint32_t aid, - uint8_t setting, - uint8_t max_key_no, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); - -UFR_STATUS DL_API uFR_int_DesfireDeleteApplication( - uint8_t aes_key_nr, - uint32_t aid, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_int_DesfireDeleteApplication_aes( - uint8_t aes_key_nr, - uint32_t aid, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_int_DesfireDeleteApplication_des( - uint8_t des_key_nr, - uint32_t aid, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_int_DesfireDeleteApplication_2k3des( - uint8_t des2k_key_nr, - uint32_t aid, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_int_DesfireDeleteApplication_3k3des( - uint8_t des3k_key_nr, - uint32_t aid, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_int_DesfireDeleteApplication_PK( - IN uint8_t *aes_key_ext, - uint32_t aid, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_int_DesfireDeleteApplication_aes_PK( - IN uint8_t *aes_key_ext, - uint32_t aid, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_int_DesfireDeleteApplication_des_PK( - IN uint8_t *des_key_ext, - uint32_t aid, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_int_DesfireDeleteApplication_2k3des_PK( - IN uint8_t *des2k_key_ext, - uint32_t aid, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_int_DesfireDeleteApplication_3k3des_PK( - IN uint8_t *des3k_key_ext, - uint32_t aid, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_SAM_DesfireDeleteApplicationAesAuth( - uint8_t aes_key_nr, - uint32_t aid, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_SAM_DesfireDeleteApplication3k3desAuth( - uint8_t des3k_key_nr, - uint32_t aid, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); - -UFR_STATUS DL_API uFR_int_DesfireSetConfiguration( - uint8_t aes_key_nr, - uint8_t random_uid, - uint8_t format_disable, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_int_DesfireSetConfiguration_aes( - uint8_t aes_key_nr, - uint8_t random_uid, - uint8_t format_disable, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_int_DesfireSetConfiguration_des( - uint8_t des_key_nr, - uint8_t random_uid, - uint8_t format_disable, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_int_DesfireSetConfiguration_2k3des( - uint8_t des2k_key_nr, - uint8_t random_uid, - uint8_t format_disable, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_int_DesfireSetConfiguration_3k3des( - uint8_t des3k_key_nr, - uint8_t random_uid, - uint8_t format_disable, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_int_DesfireSetConfiguration_PK( - IN uint8_t *aes_key_ext, - uint8_t random_uid, - uint8_t format_disable, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_int_DesfireSetConfiguration_aes_PK( - IN uint8_t *aes_key_ext, - uint8_t random_uid, - uint8_t format_disable, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_int_DesfireSetConfiguration_des_PK( - IN uint8_t *des_key_ext, - uint8_t random_uid, - uint8_t format_disable, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_int_DesfireSetConfiguration_2k3des_PK( - IN uint8_t *des2k_key_ext, - uint8_t random_uid, - uint8_t format_disable, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_int_DesfireSetConfiguration_3k3des_PK( - IN uint8_t *des3k_key_ext, - uint8_t random_uid, - uint8_t format_disable, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_SAM_DesfireSetConfigurationAesAuth( - uint8_t aes_key_nr, - uint8_t random_uid, - uint8_t format_disable, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_SAM_DesfireSetConfiguration3k3desAuth( - uint8_t des3k_key_nr, - uint8_t random_uid, - uint8_t format_disable, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); - -UFR_STATUS DL_API uFR_int_DesfireGetKeySettings( - uint8_t aes_key_nr, - uint32_t aid, - VAR uint8_t *setting, - VAR uint8_t *max_key_no, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_int_DesfireGetKeySettings_aes( - uint8_t aes_key_nr, - uint32_t aid, - VAR uint8_t *setting, - VAR uint8_t *max_key_no, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_int_DesfireGetKeySettings_des( - uint8_t des_key_nr, - uint32_t aid, - VAR uint8_t *setting, - VAR uint8_t *max_key_no, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_int_DesfireGetKeySettings_2k3des( - uint8_t des2k_key_nr, - uint32_t aid, - VAR uint8_t *setting, - VAR uint8_t *max_key_no, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_int_DesfireGetKeySettings_3k3des( - uint8_t des3k_key_nr, - uint32_t aid, - VAR uint8_t *setting, - VAR uint8_t *max_key_no, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_int_DesfireGetKeySettings_PK( - IN uint8_t *aes_key_ext, - uint32_t aid, - VAR uint8_t *setting, - VAR uint8_t *max_key_no, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_int_DesfireGetKeySettings_aes_PK( - IN uint8_t *aes_key_ext, - uint32_t aid, - VAR uint8_t *setting, - VAR uint8_t *max_key_no, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_int_DesfireGetKeySettings_des_PK( - IN uint8_t *des_key_ext, - uint32_t aid, - VAR uint8_t *setting, - VAR uint8_t *max_key_no, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_int_DesfireGetKeySettings_2k3des_PK( - IN uint8_t *des2k_key_ext, - uint32_t aid, - VAR uint8_t *setting, - VAR uint8_t *max_key_no, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_int_DesfireGetKeySettings_3k3des_PK( - IN uint8_t *des3k_key_ext, - uint32_t aid, - VAR uint8_t *setting, - VAR uint8_t *max_key_no, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_SAM_DesfireGetKeySettingsAesAuth( - uint8_t aes_key_nr, - uint32_t aid, - VAR uint8_t *setting, - VAR uint8_t *max_key_no, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_SAM_DesfireGetKeySettings3k3desAuth( - uint8_t des3k_key_nr, - uint32_t aid, - VAR uint8_t *setting, - VAR uint8_t *max_key_no, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); - -UFR_STATUS DL_API uFR_int_DesfireChangeKeySettings( - uint8_t aes_key_nr, - uint32_t aid, - uint8_t setting, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_int_DesfireChangeKeySettings_aes( - uint8_t aes_key_nr, - uint32_t aid, - uint8_t setting, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_int_DesfireChangeKeySettings_des( - uint8_t des_key_nr, - uint32_t aid, - uint8_t setting, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_int_DesfireChangeKeySettings_2k3des( - uint8_t des2k_key_nr, - uint32_t aid, - uint8_t setting, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_int_DesfireChangeKeySettings_3k3des( - uint8_t des3k_key_nr, - uint32_t aid, - uint8_t setting, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_int_DesfireChangeKeySettings_PK( - IN uint8_t *aes_key_ext, - uint32_t aid, - uint8_t setting, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_int_DesfireChangeKeySettings_aes_PK( - IN uint8_t *aes_key_ext, - uint32_t aid, - uint8_t setting, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_int_DesfireChangeKeySettings_des_PK( - IN uint8_t *des_key_ext, - uint32_t aid, - uint8_t setting, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_int_DesfireChangeKeySettings_2k3des_PK( - IN uint8_t *des2k_key_ext, - uint32_t aid, - uint8_t setting, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_int_DesfireChangeKeySettings_3k3des_PK( - IN uint8_t *des3k_key_ext, - uint32_t aid, - uint8_t setting, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_SAM_DesfireChangeKeySettingsAesAuth( - uint8_t aes_key_nr, - uint32_t aid, - uint8_t setting, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_SAM_DesfireChangeKeySettings3k3desAuth( - uint8_t des3k_key_nr, - uint32_t aid, - uint8_t setting, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); - -UFR_STATUS DL_API uFR_int_DesfireChangeAesKey( - uint8_t aes_key_nr, - uint32_t aid, - uint8_t aid_key_no_auth, - IN uint8_t new_aes_key[16], - uint8_t aid_key_no, - IN uint8_t old_aes_key[16], - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -// all keys are in reader -UFR_STATUS DL_API uFR_int_DesfireChangeAesKey_A( - uint8_t aes_key_nr, - uint32_t aid, - uint8_t aid_key_no_auth, - uint8_t new_aes_key_nr, - uint8_t aid_key_no, - uint8_t old_aes_key_nr, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_int_DesfireChangeAesKey_aes( - uint8_t aes_key_nr, - uint32_t aid, - uint8_t aid_key_no_auth, - uint8_t new_aes_key_nr, - uint8_t aid_key_no, - uint8_t old_aes_key_nr, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_int_DesfireChangeDesKey_des( - uint8_t auth_des_key_nr, - uint32_t aid, - uint8_t aid_key_no_auth, - uint8_t new_des_key_nr, - uint8_t aid_key_no, - uint8_t old_des_key_nr, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_int_DesfireChange2K3DesKey_des( - uint8_t auth_des_key_nr, - uint32_t aid, - uint8_t aid_key_no_auth, - uint8_t new_2k3des_key_nr, - uint8_t aid_key_no, - uint8_t old_2k3des_key_nr, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_int_DesfireChangeDesKey_2k3des( - uint8_t auth_des2k_key_nr, - uint32_t aid, - uint8_t aid_key_no_auth, - uint8_t new_des_key_nr, - uint8_t aid_key_no, - uint8_t old_des_key_nr, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_int_DesfireChange2K3DesKey_2k3des( - uint8_t auth_des2k_key_nr, - uint32_t aid, - uint8_t aid_key_no_auth, - uint8_t new_2k3des_key_nr, - uint8_t aid_key_no, - uint8_t old_2k3des_key_nr, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_int_DesfireChange3K3DesKey_3k3des( - uint8_t auth_des3k_key_nr, - uint32_t aid, - uint8_t aid_key_no_auth, - uint8_t new_3k3des_key_nr, - uint8_t aid_key_no, - uint8_t old_3k3des_key_nr, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_int_DesfireChangeMasterKey( - uint8_t auth_key_nr, - uint8_t auth_key_type, - uint8_t new_key_nr, - uint8_t new_key_type, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_int_DesfireChangeAesKey_PK( - IN uint8_t *aes_key_ext, - uint32_t aid, - uint8_t aid_key_no_auth, - IN uint8_t new_aes_key[16], - uint8_t aid_key_no, - IN uint8_t old_aes_key[16], - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_int_DesfireChangeAesKey_aes_PK( - IN uint8_t *aes_key_ext, - uint32_t aid, - uint8_t aid_key_no_auth, - IN uint8_t new_aes_key[16], - uint8_t aid_key_no, - IN uint8_t old_aes_key[16], - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_int_DesfireChangeDesKey_des_PK( - IN uint8_t *auth_des_key, - uint32_t aid, - uint8_t aid_key_no_auth, - IN uint8_t new_des_key[8], - uint8_t aid_key_no, - IN uint8_t old_des_key[8], - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_int_DesfireChange2K3DesKey_des_PK( - IN uint8_t *auth_des_key, - uint32_t aid, - uint8_t aid_key_no_auth, - IN uint8_t new_2k3des_key[16], - uint8_t aid_key_no, - IN uint8_t old_2k3des_key[16], - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_int_DesfireChangeDesKey_2k3des_PK( - IN uint8_t *auth_des2k_key, - uint32_t aid, - uint8_t aid_key_no_auth, - IN uint8_t new_des_key[8], - uint8_t aid_key_no, - IN uint8_t old_des_key[8], - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_int_DesfireChange2K3DesKey_2k3des_PK( - IN uint8_t *auth_des2k_key, - uint32_t aid, - uint8_t aid_key_no_auth, - IN uint8_t new_2k3des_key[16], - uint8_t aid_key_no, - IN uint8_t old_2k3des_key[16], - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_int_DesfireChange3K3DesKey_3k3des_PK( - IN uint8_t *auth_des3k_key, - uint32_t aid, - uint8_t aid_key_no_auth, - IN uint8_t new_3k3des_key[24], - uint8_t aid_key_no, - IN uint8_t old_3k3des_key[24], - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_int_DesfireChangeMasterKey_PK( - IN uint8_t *auth_key, - uint8_t auth_key_type, - IN uint8_t *new_key, - uint8_t new_key_type, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_SAM_DesfireChangeKey_AesAuth( - uint8_t aes_key_nr, - uint32_t aid, - uint8_t aid_key_no_auth, - uint8_t new_aes_key_nr, - uint8_t aid_key_no, - uint8_t old_aes_key_nr, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_SAM_DesfireChangeKey_3k3desAuth( - uint8_t des3k_key_nr, - uint32_t aid, - uint8_t aid_key_no_auth, - uint8_t new_aes_key_nr, - uint8_t aid_key_no, - uint8_t old_aes_key_nr, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); - -UFR_STATUS DL_API uFR_int_DesfireWriteAesKey( - uint8_t aes_key_no, - IN uint8_t *aes_key); -UFR_STATUS DL_API uFR_int_DesfireWriteKey( - uint8_t key_no, - IN uint8_t *key, - uint8_t key_type); - -UFR_STATUS DL_API uFR_int_DesfireReadStdDataFile( - uint8_t aes_key_nr, - uint32_t aid, - uint8_t aid_key_nr, - uint8_t file_id, - uint16_t offset, - uint16_t data_length, - uint8_t communication_settings, - OUT uint8_t *data, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_int_DesfireReadStdDataFile_aes( - uint8_t aes_key_nr, - uint32_t aid, - uint8_t aid_key_nr, - uint8_t file_id, - uint16_t offset, - uint16_t data_length, - uint8_t communication_settings, - OUT uint8_t *data, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_int_DesfireReadStdDataFile_des( - uint8_t des_key_nr, - uint32_t aid, - uint8_t aid_key_nr, - uint8_t file_id, - uint16_t offset, - uint16_t data_length, - uint8_t communication_settings, - OUT uint8_t *data, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_int_DesfireReadStdDataFile_2k3des( - uint8_t des2k_key_nr, - uint32_t aid, - uint8_t aid_key_nr, - uint8_t file_id, - uint16_t offset, - uint16_t data_length, - uint8_t communication_settings, - OUT uint8_t *data, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_int_DesfireReadStdDataFile_3k3des( - uint8_t des3k_key_nr, - uint32_t aid, - uint8_t aid_key_nr, - uint8_t file_id, - uint16_t offset, - uint16_t data_length, - uint8_t communication_settings, - OUT uint8_t *data, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_int_DesfireReadStdDataFile_PK( - IN uint8_t *aes_key_ext, - uint32_t aid, - uint8_t aid_key_nr, - uint8_t file_id, - uint16_t offset, - uint16_t data_length, - uint8_t communication_settings, - OUT uint8_t *data, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_int_DesfireReadStdDataFile_aes_PK( - IN uint8_t *aes_key_ext, - uint32_t aid, - uint8_t aid_key_nr, - uint8_t file_id, - uint16_t offset, - uint16_t data_length, - uint8_t communication_settings, - OUT uint8_t *data, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_int_DesfireReadStdDataFile_des_PK( - IN uint8_t *des_key_ext, - uint32_t aid, - uint8_t aid_key_nr, - uint8_t file_id, - uint16_t offset, - uint16_t data_length, - uint8_t communication_settings, - OUT uint8_t *data, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_int_DesfireReadStdDataFile_2k3des_PK( - IN uint8_t *des2k_key_ext, - uint32_t aid, - uint8_t aid_key_nr, - uint8_t file_id, - uint16_t offset, - uint16_t data_length, - uint8_t communication_settings, - OUT uint8_t *data, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_int_DesfireReadStdDataFile_3k3des_PK( - IN uint8_t *des3k_key_ext, - uint32_t aid, - uint8_t aid_key_nr, - uint8_t file_id, - uint16_t offset, - uint16_t data_length, - uint8_t communication_settings, - OUT uint8_t *data, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_SAM_DesfireReadStdDataFileAesAuth( - uint8_t aes_key_nr, - uint32_t aid, - uint8_t aid_key_nr, - uint8_t file_id, - uint16_t offset, - uint16_t data_length, - uint8_t communication_settings, - OUT uint8_t *data, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_SAM_DesfireReadStdDataFile3k3desAuth( - uint8_t des3k_key_nr, - uint32_t aid, - uint8_t aid_key_nr, - uint8_t file_id, - uint16_t offset, - uint16_t data_length, - uint8_t communication_settings, - OUT uint8_t *data, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_int_DesfireReadStdDataFile_no_auth( - uint32_t aid, - uint8_t aid_key_nr, - uint8_t file_id, - uint16_t offset, - uint16_t data_length, - uint8_t communication_settings, - OUT uint8_t *data, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); - -UFR_STATUS DL_API uFR_int_DesfireWriteStdDataFile( - uint8_t aes_key_nr, - uint32_t aid, - uint8_t aid_key_nr, - uint8_t file_id, - uint16_t offset, - uint16_t data_length, - uint8_t communication_settings, - IN uint8_t *data, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_int_DesfireWriteStdDataFile_aes( - uint8_t aes_key_nr, - uint32_t aid, - uint8_t aid_key_nr, - uint8_t file_id, - uint16_t offset, - uint16_t data_length, - uint8_t communication_settings, - IN uint8_t *data, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_int_DesfireWriteStdDataFile_3k3des( - uint8_t des3k_key_nr, - uint32_t aid, - uint8_t aid_key_nr, - uint8_t file_id, - uint16_t offset, - uint16_t data_length, - uint8_t communication_settings, - IN uint8_t *data, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_int_DesfireWriteStdDataFile_des( - uint8_t des_key_nr, - uint32_t aid, - uint8_t aid_key_nr, - uint8_t file_id, - uint16_t offset, - uint16_t data_length, - uint8_t communication_settings, - IN uint8_t *data, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_int_DesfireWriteStdDataFile_2k3des( - uint8_t des2k_key_nr, - uint32_t aid, - uint8_t aid_key_nr, - uint8_t file_id, - uint16_t offset, - uint16_t data_length, - uint8_t communication_settings, - IN uint8_t *data, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_int_DesfireWriteStdDataFile_PK( - IN uint8_t *aes_key_ext, - uint32_t aid, - uint8_t aid_key_nr, - uint8_t file_id, - uint16_t offset, - uint16_t data_length, - uint8_t communication_settings, - IN uint8_t *data, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_int_DesfireWriteStdDataFile_aes_PK( - IN uint8_t *aes_key_ext, - uint32_t aid, - uint8_t aid_key_nr, - uint8_t file_id, - uint16_t offset, - uint16_t data_length, - uint8_t communication_settings, - IN uint8_t *data, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_int_DesfireWriteStdDataFile_3k3des_PK( - IN uint8_t *des3k_key_ext, - uint32_t aid, - uint8_t aid_key_nr, - uint8_t file_id, - uint16_t offset, - uint16_t data_length, - uint8_t communication_settings, - IN uint8_t *data, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_int_DesfireWriteStdDataFile_des_PK( - IN uint8_t *des_key_ext, - uint32_t aid, - uint8_t aid_key_nr, - uint8_t file_id, - uint16_t offset, - uint16_t data_length, - uint8_t communication_settings, - IN uint8_t *data, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_int_DesfireWriteStdDataFile_2k3des_PK( - IN uint8_t *des2k_key_ext, - uint32_t aid, - uint8_t aid_key_nr, - uint8_t file_id, - uint16_t offset, - uint16_t data_length, - uint8_t communication_settings, - IN uint8_t *data, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_SAM_DesfireWriteStdDataFileAesAuth( - uint8_t aes_key_nr, - uint32_t aid, - uint8_t aid_key_nr, - uint8_t file_id, - uint16_t offset, - uint16_t data_length, - uint8_t communication_settings, - IN uint8_t *data, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_SAM_DesfireWriteStdDataFile3k3desAuth( - uint8_t des3k_key_nr, - uint32_t aid, - uint8_t aid_key_nr, - uint8_t file_id, - uint16_t offset, - uint16_t data_length, - uint8_t communication_settings, - IN uint8_t *data, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_int_DesfireWriteStdDataFile_no_auth( - uint32_t aid, - uint8_t aid_key_nr, - uint8_t file_id, - uint16_t offset, - uint16_t data_length, - uint8_t communication_settings, - IN uint8_t *data, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); - -UFR_STATUS DL_API uFR_int_DesfireCreateValueFile( - uint8_t aes_key_nr, - uint32_t aid, - uint8_t file_id, - int32_t lower_limit, - int32_t upper_limit, - int32_t value, - uint8_t limited_credit_enabled, - uint8_t read_key_no, - uint8_t write_key_no, - uint8_t read_write_key_no, - uint8_t change_key_no, - uint8_t communication_settings, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_int_DesfireCreateValueFile_aes( - uint8_t aes_key_nr, - uint32_t aid, - uint8_t file_id, - int32_t lower_limit, - int32_t upper_limit, - int32_t value, - uint8_t limited_credit_enabled, - uint8_t read_key_no, - uint8_t write_key_no, - uint8_t read_write_key_no, - uint8_t change_key_no, - uint8_t communication_settings, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_int_DesfireCreateValueFile_des( - uint8_t des_key_nr, - uint32_t aid, - uint8_t file_id, - int32_t lower_limit, - int32_t upper_limit, - int32_t value, - uint8_t limited_credit_enabled, - uint8_t read_key_no, - uint8_t write_key_no, - uint8_t read_write_key_no, - uint8_t change_key_no, - uint8_t communication_settings, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_int_DesfireCreateValueFile_2k3des( - uint8_t des2k_key_nr, - uint32_t aid, - uint8_t file_id, - int32_t lower_limit, - int32_t upper_limit, - int32_t value, - uint8_t limited_credit_enabled, - uint8_t read_key_no, - uint8_t write_key_no, - uint8_t read_write_key_no, - uint8_t change_key_no, - uint8_t communication_settings, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_int_DesfireCreateValueFile_3k3des( - uint8_t des3k_key_nr, - uint32_t aid, - uint8_t file_id, - int32_t lower_limit, - int32_t upper_limit, - int32_t value, - uint8_t limited_credit_enabled, - uint8_t read_key_no, - uint8_t write_key_no, - uint8_t read_write_key_no, - uint8_t change_key_no, - uint8_t communication_settings, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_int_DesfireCreateValueFile_PK( - IN uint8_t *aes_key_ext, - uint32_t aid, - uint8_t file_id, - int32_t lower_limit, - int32_t upper_limit, - int32_t value, - uint8_t limited_credit_enabled, - uint8_t read_key_no, - uint8_t write_key_no, - uint8_t read_write_key_no, - uint8_t change_key_no, - uint8_t communication_settings, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_int_DesfireCreateValueFile_aes_PK( - IN uint8_t *aes_key_ext, - uint32_t aid, - uint8_t file_id, - int32_t lower_limit, - int32_t upper_limit, - int32_t value, - uint8_t limited_credit_enabled, - uint8_t read_key_no, - uint8_t write_key_no, - uint8_t read_write_key_no, - uint8_t change_key_no, - uint8_t communication_settings, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_int_DesfireCreateValueFile_des_PK( - IN uint8_t *des_key_ext, - uint32_t aid, - uint8_t file_id, - int32_t lower_limit, - int32_t upper_limit, - int32_t value, - uint8_t limited_credit_enabled, - uint8_t read_key_no, - uint8_t write_key_no, - uint8_t read_write_key_no, - uint8_t change_key_no, - uint8_t communication_settings, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_int_DesfireCreateValueFile_2k3des_PK( - IN uint8_t *des2k_key_ext, - uint32_t aid, - uint8_t file_id, - int32_t lower_limit, - int32_t upper_limit, - int32_t value, - uint8_t limited_credit_enabled, - uint8_t read_key_no, - uint8_t write_key_no, - uint8_t read_write_key_no, - uint8_t change_key_no, - uint8_t communication_settings, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_int_DesfireCreateValueFile_3k3des_PK( - IN uint8_t *des3k_key_ext, - uint32_t aid, - uint8_t file_id, - int32_t lower_limit, - int32_t upper_limit, - int32_t value, - uint8_t limited_credit_enabled, - uint8_t read_key_no, - uint8_t write_key_no, - uint8_t read_write_key_no, - uint8_t change_key_no, - uint8_t communication_settings, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_SAM_DesfireCreateValueFileAesAuth( - uint8_t aes_key_nr, - uint32_t aid, - uint8_t file_id, - int32_t lower_limit, - int32_t upper_limit, - int32_t value, - uint8_t limited_credit_enabled, - uint8_t read_key_no, - uint8_t write_key_no, - uint8_t read_write_key_no, - uint8_t change_key_no, - uint8_t communication_settings, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_SAM_DesfireCreateValueFile3k3desAuth( - uint8_t des3k_key_nr, - uint32_t aid, - uint8_t file_id, - int32_t lower_limit, - int32_t upper_limit, - int32_t value, - uint8_t limited_credit_enabled, - uint8_t read_key_no, - uint8_t write_key_no, - uint8_t read_write_key_no, - uint8_t change_key_no, - uint8_t communication_settings, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_int_DesfireCreateValueFile_no_auth( - uint32_t aid, - uint8_t file_id, - int32_t lower_limit, - int32_t upper_limit, - int32_t value, - uint8_t limited_credit_enabled, - uint8_t read_key_no, - uint8_t write_key_no, - uint8_t read_write_key_no, - uint8_t change_key_no, - uint8_t communication_settings, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); - -UFR_STATUS DL_API uFR_int_DesfireReadValueFile( - uint8_t aes_key_nr, - uint32_t aid, - uint8_t aid_key_nr, - uint8_t file_id, - uint8_t communication_settings, - VAR int32_t *value, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_int_DesfireReadValueFile_aes( - uint8_t aes_key_nr, - uint32_t aid, - uint8_t aid_key_nr, - uint8_t file_id, - uint8_t communication_settings, - VAR int32_t *value, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_int_DesfireReadValueFile_des( - uint8_t des_key_nr, - uint32_t aid, - uint8_t aid_key_nr, - uint8_t file_id, - uint8_t communication_settings, - VAR int32_t *value, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_int_DesfireReadValueFile_2k3des( - uint8_t des2k_key_nr, - uint32_t aid, - uint8_t aid_key_nr, - uint8_t file_id, - uint8_t communication_settings, - VAR int32_t *value, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_int_DesfireReadValueFile_3k3des( - uint8_t des3k_key_nr, - uint32_t aid, - uint8_t aid_key_nr, - uint8_t file_id, - uint8_t communication_settings, - VAR int32_t *value, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_int_DesfireReadValueFile_PK( - IN uint8_t *aes_key_ext, - uint32_t aid, - uint8_t aid_key_nr, - uint8_t file_id, - uint8_t communication_settings, - VAR int32_t *value, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_int_DesfireReadValueFile_aes_PK( - IN uint8_t *aes_key_ext, - uint32_t aid, - uint8_t aid_key_nr, - uint8_t file_id, - uint8_t communication_settings, - VAR int32_t *value, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_int_DesfireReadValueFile_des_PK( - IN uint8_t *des_key_ext, - uint32_t aid, - uint8_t aid_key_nr, - uint8_t file_id, - uint8_t communication_settings, - VAR int32_t *value, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_int_DesfireReadValueFile_2k3des_PK( - IN uint8_t *des2k_key_ext, - uint32_t aid, - uint8_t aid_key_nr, - uint8_t file_id, - uint8_t communication_settings, - VAR int32_t *value, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_int_DesfireReadValueFile_3k3des_PK( - IN uint8_t *des3k_key_ext, - uint32_t aid, - uint8_t aid_key_nr, - uint8_t file_id, - uint8_t communication_settings, - VAR int32_t *value, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_SAM_DesfireReadValueFileAesAuth( - uint8_t aes_key_nr, - uint32_t aid, - uint8_t aid_key_nr, - uint8_t file_id, - uint8_t communication_settings, - VAR int32_t *value, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_SAM_DesfireReadValueFile3k3desAuth( - uint8_t des3k_key_nr, - uint32_t aid, - uint8_t aid_key_nr, - uint8_t file_id, - uint8_t communication_settings, - VAR int32_t *value, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_int_DesfireReadValueFile_no_auth( - uint32_t aid, - uint8_t aid_key_nr, - uint8_t file_id, - uint8_t communication_settings, - VAR int32_t *value, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); - -UFR_STATUS DL_API uFR_int_DesfireIncreaseValueFile( - uint8_t aes_key_nr, - uint32_t aid, - uint8_t aid_key_nr, - uint8_t file_id, - uint8_t communication_settings, - uint32_t value, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_int_DesfireIncreaseValueFile_aes( - uint8_t aes_key_nr, - uint32_t aid, - uint8_t aid_key_nr, - uint8_t file_id, - uint8_t communication_settings, - uint32_t value, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_int_DesfireIncreaseValueFile_des( - uint8_t des_key_nr, - uint32_t aid, - uint8_t aid_key_nr, - uint8_t file_id, - uint8_t communication_settings, - uint32_t value, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_int_DesfireIncreaseValueFile_2k3des( - uint8_t des2k_key_nr, - uint32_t aid, - uint8_t aid_key_nr, - uint8_t file_id, - uint8_t communication_settings, - uint32_t value, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_int_DesfireIncreaseValueFile_3k3des( - uint8_t des3k_key_nr, - uint32_t aid, - uint8_t aid_key_nr, - uint8_t file_id, - uint8_t communication_settings, - uint32_t value, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_int_DesfireIncreaseValueFile_PK( - IN uint8_t *aes_key_ext, - uint32_t aid, - uint8_t aid_key_nr, - uint8_t file_id, - uint8_t communication_settings, - uint32_t value, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_int_DesfireIncreaseValueFile_aes_PK( - IN uint8_t *aes_key_ext, - uint32_t aid, - uint8_t aid_key_nr, - uint8_t file_id, - uint8_t communication_settings, - uint32_t value, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_int_DesfireIncreaseValueFile_des_PK( - IN uint8_t *des_key_ext, - uint32_t aid, - uint8_t aid_key_nr, - uint8_t file_id, - uint8_t communication_settings, - uint32_t value, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_int_DesfireIncreaseValueFile_2k3des_PK( - IN uint8_t *des2k_key_ext, - uint32_t aid, - uint8_t aid_key_nr, - uint8_t file_id, - uint8_t communication_settings, - uint32_t value, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_int_DesfireIncreaseValueFile_3k3des_PK( - IN uint8_t *des3k_key_ext, - uint32_t aid, - uint8_t aid_key_nr, - uint8_t file_id, - uint8_t communication_settings, - uint32_t value, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_SAM_DesfireIncreaseValueFileAesAuth( - uint8_t aes_key_nr, - uint32_t aid, - uint8_t aid_key_nr, - uint8_t file_id, - uint8_t communication_settings, - uint32_t value, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_SAM_DesfireIncreaseValueFile3k3desAuth( - uint8_t des3k_key_nr, - uint32_t aid, - uint8_t aid_key_nr, - uint8_t file_id, - uint8_t communication_settings, - uint32_t value, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_int_DesfireIncreaseValueFile_no_auth( - uint32_t aid, - uint8_t aid_key_nr, - uint8_t file_id, - uint8_t communication_settings, - uint32_t value, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); - -UFR_STATUS DL_API uFR_int_DesfireDecreaseValueFile( - uint8_t aes_key_nr, - uint32_t aid, - uint8_t aid_key_nr, - uint8_t file_id, - uint8_t communication_settings, - uint32_t value, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_int_DesfireDecreaseValueFile_aes( - uint8_t aes_key_nr, - uint32_t aid, - uint8_t aid_key_nr, - uint8_t file_id, - uint8_t communication_settings, - uint32_t value, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_int_DesfireDecreaseValueFile_des( - uint8_t des_key_nr, - uint32_t aid, - uint8_t aid_key_nr, - uint8_t file_id, - uint8_t communication_settings, - uint32_t value, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_int_DesfireDecreaseValueFile_2k3des( - uint8_t des2k_key_nr, - uint32_t aid, - uint8_t aid_key_nr, - uint8_t file_id, - uint8_t communication_settings, - uint32_t value, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_int_DesfireDecreaseValueFile_3k3des( - uint8_t des3_key_nr, - uint32_t aid, - uint8_t aid_key_nr, - uint8_t file_id, - uint8_t communication_settings, - uint32_t value, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_int_DesfireDecreaseValueFile_PK( - IN uint8_t *aes_key_ext, - uint32_t aid, - uint8_t aid_key_nr, - uint8_t file_id, - uint8_t communication_settings, - uint32_t value, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_int_DesfireDecreaseValueFile_aes_PK( - IN uint8_t *aes_key_ext, - uint32_t aid, - uint8_t aid_key_nr, - uint8_t file_id, - uint8_t communication_settings, - uint32_t value, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_int_DesfireDecreaseValueFile_des_PK( - IN uint8_t *des_key_ext, - uint32_t aid, - uint8_t aid_key_nr, - uint8_t file_id, - uint8_t communication_settings, - uint32_t value, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_int_DesfireDecreaseValueFile_2k3des_PK( - IN uint8_t *des2k_key_ext, - uint32_t aid, - uint8_t aid_key_nr, - uint8_t file_id, - uint8_t communication_settings, - uint32_t value, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_int_DesfireDecreaseValueFile_3k3des_PK( - IN uint8_t *des3k_key_ext, - uint32_t aid, - uint8_t aid_key_nr, - uint8_t file_id, - uint8_t communication_settings, - uint32_t value, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_SAM_DesfireDecreaseValueFileAesAuth( - uint8_t aes_key_nr, - uint32_t aid, - uint8_t aid_key_nr, - uint8_t file_id, - uint8_t communication_settings, - uint32_t value, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_SAM_DesfireDecreaseValueFile3k3desAuth( - uint8_t des3k_key_nr, - uint32_t aid, - uint8_t aid_key_nr, - uint8_t file_id, - uint8_t communication_settings, - uint32_t value, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_int_DesfireDecreaseValueFile_no_auth( - uint32_t aid, - uint8_t aid_key_nr, - uint8_t file_id, - uint8_t communication_settings, - uint32_t value, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); - -UFR_STATUS DL_API uFR_int_DesfireGetApplicationIds( - uint8_t aes_key_nr, - OUT uint32_t *application_ids, - VAR uint8_t *number_of_aplication_ids, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_int_DesfireGetApplicationIds_aes( - uint8_t aes_key_nr, - OUT uint32_t *application_ids, - VAR uint8_t *number_of_aplication_ids, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_int_DesfireGetApplicationIds_des( - uint8_t des_key_nr, - OUT uint32_t *application_ids, - VAR uint8_t *number_of_aplication_ids, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_int_DesfireGetApplicationIds_2k3des( - uint8_t des2k_key_nr, - OUT uint32_t *application_ids, - VAR uint8_t *number_of_aplication_ids, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_int_DesfireGetApplicationIds_3k3des( - uint8_t des3k_key_nr, - OUT uint32_t *application_ids, - VAR uint8_t *number_of_aplication_ids, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_SAM_DesfireGetApplicationIdsAesAuth( - uint8_t aes_key_nr, - OUT uint32_t *application_ids, - VAR uint8_t *number_of_aplication_ids, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_SAM_DesfireGetApplicationIds3k3desAuth( - uint8_t des3k_key_nr, - OUT uint32_t *application_ids, - VAR uint8_t *number_of_aplication_ids, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_int_DesfireGetApplicationIds_PK( - IN uint8_t *aes_key_ext, - OUT uint32_t *application_ids, - VAR uint8_t *number_of_aplication_ids, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_int_DesfireGetApplicationIds_aes_PK( - IN uint8_t *aes_key_ext, - OUT uint32_t *application_ids, - VAR uint8_t *number_of_aplication_ids, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_int_DesfireGetApplicationIds_des_PK( - IN uint8_t *des_key_ext, - OUT uint32_t *application_ids, - VAR uint8_t *number_of_aplication_ids, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_int_DesfireGetApplicationIds_2k3des_PK( - IN uint8_t *des2k_key_ext, - OUT uint32_t *application_ids, - VAR uint8_t *number_of_aplication_ids, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_int_DesfireGetApplicationIds_3k3des_PK( - IN uint8_t *des3k_key_ext, - OUT uint32_t *application_ids, - VAR uint8_t *number_of_aplication_ids, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_int_DesfireGetApplicationIds_no_auth( - OUT uint32_t *application_ids, - VAR uint8_t *number_of_aplication_ids, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); - -UFR_STATUS DL_API uFR_int_DesfireCreateLinearRecordFile_aes( - uint8_t aes_key_nr, - uint32_t aid, uint8_t file_id, - uint32_t record_size, - uint32_t max_rec_no, - uint8_t read_key_no, - uint8_t write_key_no, - uint8_t read_write_key_no, - uint8_t change_key_no, - uint8_t communication_settings, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_int_DesfireCreateLinearRecordFile_des( - uint8_t des_key_nr, - uint32_t aid, uint8_t file_id, - uint32_t record_size, - uint32_t max_rec_no, - uint8_t read_key_no, - uint8_t write_key_no, - uint8_t read_write_key_no, - uint8_t change_key_no, - uint8_t communication_settings, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_int_DesfireCreateLinearRecordFile_2k3des( - uint8_t des2k_key_nr, - uint32_t aid, uint8_t file_id, - uint32_t record_size, - uint32_t max_rec_no, - uint8_t read_key_no, - uint8_t write_key_no, - uint8_t read_write_key_no, - uint8_t change_key_no, - uint8_t communication_settings, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_int_DesfireCreateLinearRecordFile_3k3des( - uint8_t des3k_key_nr, - uint32_t aid, uint8_t file_id, - uint32_t record_size, - uint32_t max_rec_no, - uint8_t read_key_no, - uint8_t write_key_no, - uint8_t read_write_key_no, - uint8_t change_key_no, - uint8_t communication_settings, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_SAM_DesfireCreateLinearRecordFileAesAuth( - uint8_t aes_key_nr, - uint32_t aid, - uint8_t file_id, - uint32_t record_size, - uint32_t max_rec_no, - uint8_t read_key_no, - uint8_t write_key_no, - uint8_t read_write_key_no, - uint8_t change_key_no, - uint8_t communication_settings, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_SAM_DesfireCreateLinearRecordFile3k3desAuth( - uint8_t des3k_key_nr, - uint32_t aid, - uint8_t file_id, - uint32_t record_size, - uint32_t max_rec_no, - uint8_t read_key_no, - uint8_t write_key_no, - uint8_t read_write_key_no, - uint8_t change_key_no, - uint8_t communication_settings, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); - -UFR_STATUS DL_API uFR_int_DesfireCreateLinearRecordFile_aes_PK( - IN uint8_t *aes_key_ext, - uint32_t aid, - uint8_t file_id, - uint32_t record_size, - uint32_t max_rec_no, - uint8_t read_key_no, - uint8_t write_key_no, - uint8_t read_write_key_no, - uint8_t change_key_no, - uint8_t communication_settings, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_int_DesfireCreateLinearRecordFile_des_PK( - IN uint8_t *des_key_ext, - uint32_t aid, - uint8_t file_id, - uint32_t record_size, - uint32_t max_rec_no, - uint8_t read_key_no, - uint8_t write_key_no, - uint8_t read_write_key_no, - uint8_t change_key_no, - uint8_t communication_settings, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_int_DesfireCreateLinearRecordFile_2k3des_PK( - IN uint8_t *des2k_key_ext, - uint32_t aid, - uint8_t file_id, - uint32_t record_size, - uint32_t max_rec_no, - uint8_t read_key_no, - uint8_t write_key_no, - uint8_t read_write_key_no, - uint8_t change_key_no, - uint8_t communication_settings, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_int_DesfireCreateLinearRecordFile_3k3des_PK( - IN uint8_t *des3k_key_ext, - uint32_t aid, - uint8_t file_id, - uint32_t record_size, - uint32_t max_rec_no, - uint8_t read_key_no, - uint8_t write_key_no, - uint8_t read_write_key_no, - uint8_t change_key_no, - uint8_t communication_settings, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_int_DesfireCreateLinearRecordFile_no_auth( - uint32_t aid, - uint8_t file_id, - uint32_t record_size, - uint32_t max_rec_no, - uint8_t read_key_no, - uint8_t write_key_no, - uint8_t read_write_key_no, - uint8_t change_key_no, - uint8_t communication_settings, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); - -UFR_STATUS DL_API uFR_int_DesfireCreateCyclicRecordFile_aes( - uint8_t aes_key_nr, - uint32_t aid, - uint8_t file_id, - uint32_t record_size, - uint32_t max_rec_no, - uint8_t read_key_no, - uint8_t write_key_no, - uint8_t read_write_key_no, - uint8_t change_key_no, - uint8_t communication_settings, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_int_DesfireCreateCyclicRecordFile_des( - uint8_t des_key_nr, - uint32_t aid, - uint8_t file_id, - uint32_t record_size, - uint32_t max_rec_no, - uint8_t read_key_no, - uint8_t write_key_no, - uint8_t read_write_key_no, - uint8_t change_key_no, - uint8_t communication_settings, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_int_DesfireCreateCyclicRecordFile_2k3des( - uint8_t des2k_key_nr, - uint32_t aid, - uint8_t file_id, - uint32_t record_size, - uint32_t max_rec_no, - uint8_t read_key_no, - uint8_t write_key_no, - uint8_t read_write_key_no, - uint8_t change_key_no, - uint8_t communication_settings, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_int_DesfireCreateCyclicRecordFile_3k3des( - uint8_t des3k_key_nr, - uint32_t aid, - uint8_t file_id, - uint32_t record_size, - uint32_t max_rec_no, - uint8_t read_key_no, - uint8_t write_key_no, - uint8_t read_write_key_no, - uint8_t change_key_no, - uint8_t communication_settings, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_SAM_DesfireCreateCyclicRecordFileAesAuth( - uint8_t aes_key_nr, - uint32_t aid, - uint8_t file_id, - uint32_t record_size, - uint32_t max_rec_no, - uint8_t read_key_no, - uint8_t write_key_no, - uint8_t read_write_key_no, - uint8_t change_key_no, - uint8_t communication_settings, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_SAM_DesfireCreateCyclicRecordFile3k3desAuth( - uint8_t des3k_key_nr, - uint32_t aid, - uint8_t file_id, - uint32_t record_size, - uint32_t max_rec_no, - uint8_t read_key_no, - uint8_t write_key_no, - uint8_t read_write_key_no, - uint8_t change_key_no, - uint8_t communication_settings, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_int_DesfireCreateCyclicRecordFile_aes_PK( - IN uint8_t *aes_key_ext, - uint32_t aid, - uint8_t file_id, - uint32_t record_size, - uint32_t max_rec_no, - uint8_t read_key_no, - uint8_t write_key_no, - uint8_t read_write_key_no, - uint8_t change_key_no, - uint8_t communication_settings, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_int_DesfireCreateCyclicRecordFile_des_PK( - IN uint8_t *des_key_ext, - uint32_t aid, - uint8_t file_id, - uint32_t record_size, - uint32_t max_rec_no, - uint8_t read_key_no, - uint8_t write_key_no, - uint8_t read_write_key_no, - uint8_t change_key_no, - uint8_t communication_settings, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_int_DesfireCreateCyclicRecordFile_2k3des_PK( - IN uint8_t *des2k_key_ext, - uint32_t aid, - uint8_t file_id, - uint32_t record_size, - uint32_t max_rec_no, - uint8_t read_key_no, - uint8_t write_key_no, - uint8_t read_write_key_no, - uint8_t change_key_no, - uint8_t communication_settings, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_int_DesfireCreateCyclicRecordFile_3k3des_PK( - IN uint8_t *des3k_key_ext, - uint32_t aid, - uint8_t file_id, - uint32_t record_size, - uint32_t max_rec_no, - uint8_t read_key_no, - uint8_t write_key_no, - uint8_t read_write_key_no, - uint8_t change_key_no, - uint8_t communication_settings, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_int_DesfireCreateCyclicRecordFile_no_auth( - uint32_t aid, - uint8_t file_id, - uint32_t record_size, - uint32_t max_rec_no, - uint8_t read_key_no, - uint8_t write_key_no, - uint8_t read_write_key_no, - uint8_t change_key_no, - uint8_t communication_settings, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); - -UFR_STATUS DL_API uFR_int_DesfireWriteRecord_aes( - uint8_t aes_key_nr, - uint32_t aid, - uint8_t aid_key_nr, - uint8_t file_id, - uint16_t offset, - uint16_t data_length, - uint8_t communication_settings, - IN uint8_t *data, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_int_DesfireWriteRecord_des( - uint8_t des_key_nr, - uint32_t aid, - uint8_t aid_key_nr, - uint8_t file_id, - uint16_t offset, - uint16_t data_length, - uint8_t communication_settings, - IN uint8_t *data, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_int_DesfireWriteRecord_2k3des( - uint8_t des2k_key_nr, - uint32_t aid, - uint8_t aid_key_nr, - uint8_t file_id, - uint16_t offset, - uint16_t data_length, - uint8_t communication_settings, - IN uint8_t *data, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_int_DesfireWriteRecord_3k3des( - uint8_t des3k_key_nr, - uint32_t aid, - uint8_t aid_key_nr, - uint8_t file_id, - uint16_t offset, - uint16_t data_length, - uint8_t communication_settings, - IN uint8_t *data, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_SAM_DesfireWriteRecordAesAuth( - uint8_t aes_key_nr, - uint32_t aid, - uint8_t aid_key_nr, - uint8_t file_id, - uint16_t offset, - uint16_t data_length, - uint8_t communication_settings, - IN uint8_t *data, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_SAM_DesfireWriteRecord3k3desAuth( - uint8_t des3k_key_nr, - uint32_t aid, - uint8_t aid_key_nr, - uint8_t file_id, - uint16_t offset, - uint16_t data_length, - uint8_t communication_settings, - IN uint8_t *data, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_int_DesfireWriteRecord_aes_PK( - IN uint8_t *aes_key_ext, - uint32_t aid, - uint8_t aid_key_nr, - uint8_t file_id, - uint16_t offset, - uint16_t data_length, - uint8_t communication_settings, - IN uint8_t *data, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_int_DesfireWriteRecord_des_PK( - IN uint8_t *des_key_ext, - uint32_t aid, - uint8_t aid_key_nr, - uint8_t file_id, - uint16_t offset, - uint16_t data_length, - uint8_t communication_settings, - IN uint8_t *data, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_int_DesfireWriteRecord_2k3des_PK( - IN uint8_t *des2k_key_ext, - uint32_t aid, - uint8_t aid_key_nr, - uint8_t file_id, - uint16_t offset, - uint16_t data_length, - uint8_t communication_settings, - IN uint8_t *data, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_int_DesfireWriteRecord_3k3des_PK( - IN uint8_t *des3k_key_ext, - uint32_t aid, - uint8_t aid_key_nr, - uint8_t file_id, - uint16_t offset, - uint16_t data_length, - uint8_t communication_settings, - IN uint8_t *data, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_int_DesfireWriteRecord_no_auth( - uint32_t aid, - uint8_t aid_key_nr, - uint8_t file_id, - uint16_t offset, - uint16_t data_length, - uint8_t communication_settings, - IN uint8_t *data, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); - -UFR_STATUS DL_API uFR_int_DesfireReadRecords_aes( - uint8_t aes_key_nr, - uint32_t aid, - uint8_t aid_key_nr, - uint8_t file_id, - uint16_t offset, - uint16_t number_of_records, - uint16_t record_size, - uint8_t communication_settings, - OUT uint8_t *data, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_int_DesfireReadRecords_des( - uint8_t des_key_nr, - uint32_t aid, - uint8_t aid_key_nr, - uint8_t file_id, - uint16_t offset, - uint16_t number_of_records, - uint16_t record_size, - uint8_t communication_settings, - OUT uint8_t *data, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_int_DesfireReadRecords_2k3des( - uint8_t des2k_key_nr, - uint32_t aid, - uint8_t aid_key_nr, - uint8_t file_id, - uint16_t offset, - uint16_t number_of_records, - uint16_t record_size, - uint8_t communication_settings, - OUT uint8_t *data, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_int_DesfireReadRecords_3k3des( - uint8_t des3k_key_nr, - uint32_t aid, - uint8_t aid_key_nr, - uint8_t file_id, - uint16_t offset, - uint16_t number_of_records, - uint16_t record_size, - uint8_t communication_settings, - OUT uint8_t *data, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_SAM_DesfireReadRecordsAesAuth( - uint8_t aes_key_nr, - uint32_t aid, - uint8_t aid_key_nr, - uint8_t file_id, - uint16_t offset, - uint16_t number_of_records, - uint16_t record_size, - uint8_t communication_settings, - OUT uint8_t *data, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_SAM_DesfireReadRecords3k3desAuth( - uint8_t des3k_key_nr, - uint32_t aid, - uint8_t aid_key_nr, - uint8_t file_id, - uint16_t offset, - uint16_t number_of_records, - uint16_t record_size, - uint8_t communication_settings, - OUT uint8_t *data, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_int_DesfireReadRecords_aes_PK( - IN uint8_t *aes_key_ext, - uint32_t aid, - uint8_t aid_key_nr, - uint8_t file_id, - uint16_t offset, - uint16_t number_of_records, - uint16_t record_size, - uint8_t communication_settings, - OUT uint8_t *data, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_int_DesfireReadRecords_des_PK( - IN uint8_t *des_key_ext, - uint32_t aid, - uint8_t aid_key_nr, - uint8_t file_id, - uint16_t offset, - uint16_t number_of_records, - uint16_t record_size, - uint8_t communication_settings, - OUT uint8_t *data, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_int_DesfireReadRecords_2k3des_PK( - IN uint8_t *des2k_key_ext, - uint32_t aid, - uint8_t aid_key_nr, - uint8_t file_id, - uint16_t offset, - uint16_t number_of_records, - uint16_t record_size, - uint8_t communication_settings, - OUT uint8_t *data, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_int_DesfireReadRecords_3k3des_PK( - IN uint8_t *des3k_key_ext, - uint32_t aid, - uint8_t aid_key_nr, - uint8_t file_id, - uint16_t offset, - uint16_t number_of_records, - uint16_t record_size, - uint8_t communication_settings, - OUT uint8_t *data, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_int_DesfireReadRecords_no_auth( - uint32_t aid, - uint8_t aid_key_nr, - uint8_t file_id, - uint16_t offset, - uint16_t number_of_records, - uint16_t record_size, - uint8_t communication_settings, - OUT uint8_t *data, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); - -UFR_STATUS DL_API uFR_int_DesfireClearRecordFile( - uint8_t aes_key_nr, - uint32_t aid, - uint8_t file_id, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_int_DesfireClearRecordFile_aes( - uint8_t aes_key_nr, - uint32_t aid, - uint8_t file_id, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_int_DesfireClearRecordFile_des( - uint8_t des_key_nr, - uint32_t aid, - uint8_t file_id, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_int_DesfireClearRecordFile_2k3des( - uint8_t des2k_key_nr, - uint32_t aid, - uint8_t file_id, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_int_DesfireClearRecordFile_3k3des( - uint8_t des3k_key_nr, - uint32_t aid, - uint8_t file_id, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_SAM_DesfireClearRecordFileAesAuth( - uint8_t aes_key_nr, - uint32_t aid, - uint8_t file_id, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_SAM_DesfireClearRecordFile3k3desAuth( - uint8_t des3k_key_nr, - uint32_t aid, - uint8_t file_id, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_int_DesfireClearRecordFile_PK( - IN uint8_t *aes_key_ext, - uint32_t aid, - uint8_t file_id, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_int_DesfireClearRecordFile_aes_PK( - IN uint8_t *aes_key_ext, - uint32_t aid, - uint8_t file_id, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_int_DesfireClearRecordFile_des_PK( - IN uint8_t *des_key_ext, - uint32_t aid, - uint8_t file_id, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_int_DesfireClearRecordFile_2k3des_PK( - IN uint8_t *des2k_key_ext, - uint32_t aid, - uint8_t file_id, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_int_DesfireClearRecordFile_3k3des_PK( - IN uint8_t *des3k_key_ext, - uint32_t aid, - uint8_t file_id, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_int_DesfireClearRecordFile_no_auth( - uint32_t aid, - uint8_t file_id, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); - -///////////////////////////////////////////////////////////////////// - -UFR_STATUS DL_API GreenLedBlinkingTurnOn(void); -UFR_STATUS DL_API GreenLedBlinkingTurnOff(void); - -///////////////////////////////////////////////////////////////////// - -UFR_STATUS DL_API SetRfAnalogRegistersTypeA(uint8_t ThresholdMinLevel, uint8_t ThresholdCollLevel, - uint8_t RFLevelAmp, uint8_t RxGain, uint8_t RFLevel); -UFR_STATUS DL_API SetRfAnalogRegistersTypeB(uint8_t ThresholdMinLevel, uint8_t ThresholdCollLevel, - uint8_t RFLevelAmp, uint8_t RxGain, uint8_t RFLevel); -UFR_STATUS DL_API SetRfAnalogRegistersISO14443_212(uint8_t ThresholdMinLevel, uint8_t ThresholdCollLevel, - uint8_t RFLevelAmp, uint8_t RxGain, uint8_t RFLevel); -UFR_STATUS DL_API SetRfAnalogRegistersISO14443_424(uint8_t ThresholdMinLevel, uint8_t ThresholdCollLevel, - uint8_t RFLevelAmp, uint8_t RxGain, uint8_t RFLevel); - -UFR_STATUS DL_API SetRfAnalogRegistersTypeADefault(void); -UFR_STATUS DL_API SetRfAnalogRegistersTypeBDefault(void); -UFR_STATUS DL_API SetRfAnalogRegistersISO14443_212Default(void); -UFR_STATUS DL_API SetRfAnalogRegistersISO14443_424Default(void); - -UFR_STATUS DL_API GetRfAnalogRegistersTypeA(VAR uint8_t *ThresholdMinLevel, VAR uint8_t *ThresholdCollLevel, - VAR uint8_t *RFLevelAmp, VAR uint8_t *RxGain, VAR uint8_t *RFLevel); -UFR_STATUS DL_API GetRfAnalogRegistersTypeB(VAR uint8_t *ThresholdMinLevel, VAR uint8_t *ThresholdCollLevel, - VAR uint8_t *RFLevelAmp, VAR uint8_t *RxGain, VAR uint8_t *RFLevel); -UFR_STATUS DL_API GetRfAnalogRegistersISO14443_212(VAR uint8_t *ThresholdMinLevel, VAR uint8_t *ThresholdCollLevel, - VAR uint8_t *RFLevelAmp, VAR uint8_t *RxGain, VAR uint8_t *RFLevel); -UFR_STATUS DL_API GetRfAnalogRegistersISO14443_424(VAR uint8_t *ThresholdMinLevel, VAR uint8_t *ThresholdCollLevel, - VAR uint8_t *RFLevelAmp, VAR uint8_t *RxGain, VAR uint8_t *RFLevel); - -UFR_STATUS DL_API SetRfAnalogRegistersTypeATrans(uint8_t ThresholdMinLevel, uint8_t ThresholdCollLevel, - uint8_t RFLevelAmp, uint8_t RxGain, uint8_t RFLevel, - uint8_t CWGsNOn, uint8_t ModGsNOn, uint8_t CWGsP, - uint8_t CWGsNOff, uint8_t ModGsNOff); -UFR_STATUS DL_API SetRfAnalogRegistersTypeBTrans(uint8_t ThresholdMinLevel, uint8_t ThresholdCollLevel, - uint8_t RFLevelAmp, uint8_t RxGain, uint8_t RFLevel, - uint8_t CWGsNOn, uint8_t ModGsNOn, uint8_t CWGsP, uint8_t ModGsP); - -UFR_STATUS DL_API GetRfAnalogRegistersTypeATrans(VAR uint8_t *ThresholdMinLevel, VAR uint8_t *ThresholdCollLevel, - VAR uint8_t *RFLevelAmp, VAR uint8_t *RxGain, VAR uint8_t *RFLevel, - VAR uint8_t *CWGsNOn, VAR uint8_t *ModGsNOn, VAR uint8_t *CWGsP, - VAR uint8_t *CWGsNOff, VAR uint8_t *ModGsNOff); -UFR_STATUS DL_API GetRfAnalogRegistersTypeBTrans(VAR uint8_t *ThresholdMinLevel, VAR uint8_t *ThresholdCollLevel, - VAR uint8_t *RFLevelAmp, VAR uint8_t *RxGain, VAR uint8_t *RFLevel, - VAR uint8_t *CWGsNOn, VAR uint8_t *ModGsNOn, VAR uint8_t *CWGsP, VAR uint8_t *ModGsP); - -UFR_STATUS DL_API CheckBootFirmware(VAR uint8_t *exec_location); -UFR_STATUS DL_API FastFlashCheck(void); -UFR_STATUS DL_API DefaultBaudrateFlashCheck(void); -UFR_STATUS DL_API GetReaderParameters(OUT uint8_t *mui, OUT uint8_t *serial_nr, - VAR uint8_t *hw_type, VAR uint8_t *hw_ver, VAR uint8_t *device_type, - VAR uint8_t *fw_ver_major, VAR uint8_t *fw_ver_minor, VAR uint8_t *fw_ver_build); - -//SAM -UFR_STATUS DL_API SAM_get_version_raw(OUT uint8_t *data, - VAR uint8_t *length); -UFR_STATUS DL_API SAM_get_version(VAR SAM_HW_TYPE *sam_type, - OUT uint8_t *sam_uid); -UFR_STATUS DL_API SAM_get_key_entry_raw(uint8_t key_no, - OUT uint8_t *key_entry, - VAR uint8_t *key_length, - OUT uint8_t *apdu_sw); -UFR_STATUS DL_API SAM_authenticate_host_no_div_des(uint8_t key_no, - uint8_t key_v, - IN uint8_t *des_key); -UFR_STATUS DL_API SAM_pre_pesonalization_master_AES128_key(IN uint8_t *aes_key_ver_a, uint8_t ver_a, IN uint8_t *aes_key_ver_b, uint8_t ver_b, - IN uint8_t *aes_key_ver_c, uint8_t ver_c, OUT uint8_t *apdu_sw); -UFR_STATUS DL_API SAM_pre_personalization_switch_to_AV2_mode(IN uint8_t *master_aes_key, uint8_t key_version, OUT uint8_t *apdu_sw); -UFR_STATUS DL_API SAM_authenticate_host_AV2(IN uint8_t *master_aes_key, uint8_t key_nr, uint8_t key_version, uint8_t host_mode, OUT uint8_t *apdu_sw); - -UFR_STATUS DL_API SAM_change_key_entry_mifare_AV2_plain_one_key(uint8_t key_entry_no, IN uint8_t *keyA, IN uint8_t *keyB, - uint8_t key_no_CEK, uint8_t key_v_CEK, uint8_t ref_no_KUC, OUT uint8_t *apdu_sw); -UFR_STATUS DL_API SAM_change_key_entry_AES_AV2_plain_one_key(uint8_t key_entry_no, IN uint8_t *key, - uint8_t key_no_CEK, uint8_t key_v_CEK, uint8_t ref_no_KUC, OUT uint8_t *apdu_sw); -UFR_STATUS DL_API SAM_change_key_entry_3K3DES_AV2_plain_one_key(uint8_t key_entry_no, IN uint8_t *key, - uint8_t key_no_CEK, uint8_t key_v_CEK, uint8_t ref_no_KUC, OUT uint8_t *apdu_sw); -UFR_STATUS DL_API SAM_change_key_entry_2K3DES_AV2_plain_one_key(uint8_t key_entry_no, IN uint8_t *key, - uint8_t key_no_CEK, uint8_t key_v_CEK, uint8_t ref_no_KUC, OUT uint8_t *apdu_sw); -UFR_STATUS DL_API SAM_change_key_entry_aes_AV2_plain_host_key(uint8_t key_entry_no, - IN uint8_t *aes_key_ver_a, uint8_t ver_a, IN uint8_t *aes_key_ver_b, uint8_t ver_b, - IN uint8_t *aes_key_ver_c, uint8_t ver_c, - uint8_t key_no_CEK, uint8_t key_v_CEK, uint8_t ref_no_KUC, - uint8_t sam_lock_unlock, OUT uint8_t *apdu_sw); -UFR_STATUS DL_API WriteSamUnlockKey(uint8_t key_no, uint8_t key_ver, IN uint8_t *aes_key); - -//MIFARE PLUS -UFR_STATUS DL_API MFP_WritePerso(uint16_t address, IN uint8_t *data); -UFR_STATUS DL_API MFP_CommitPerso(void); -UFR_STATUS DL_API MFP_PersonalizationMinimal(IN uint8_t *card_master_key, IN uint8_t *card_config_key, - IN uint8_t *level_2_switch_key, IN uint8_t *level_3_switch_key, IN uint8_t *level_1_auth_key, - IN uint8_t *select_vc_key, IN uint8_t *prox_chk_key, IN uint8_t *vc_poll_enc_key, IN uint8_t *vc_poll_mac_key); -UFR_STATUS DL_API MFP_SwitchToSecurityLevel3(uint8_t key_index); -UFR_STATUS DL_API MFP_SwitchToSecurityLevel3_PK(IN uint8_t *aes_key); -UFR_STATUS DL_API MFP_AesAuthSecurityLevel1(uint8_t key_index); -UFR_STATUS DL_API MFP_AesAuthSecurityLevel1_PK(IN uint8_t *aes_key); -UFR_STATUS DL_API MFP_ChangeMasterKey(uint8_t key_index, IN uint8_t *new_key); -UFR_STATUS DL_API MFP_ChangeMasterKey_PK(IN uint8_t *old_key, IN uint8_t *new_key); -UFR_STATUS DL_API MFP_ChangeConfigurationKey(uint8_t key_index, IN uint8_t *new_key); -UFR_STATUS DL_API MFP_ChangeConfigurationKey_PK(IN uint8_t *old_key, IN uint8_t *new_key); -UFR_STATUS DL_API MFP_ChangeConfigurationKeySamKey(uint8_t key_index, uint8_t new_key_index); - -UFR_STATUS DL_API MFP_FieldConfigurationSet(uint8_t configuration_key_index, uint8_t rid_use, uint8_t prox_check_use); -UFR_STATUS DL_API MFP_FieldConfigurationSet_PK(IN uint8_t *configuration_key, uint8_t rid_use, uint8_t prox_check_use); -UFR_STATUS DL_API MFP_FieldConfigurationSetSamKey(uint8_t configuration_key_index, uint8_t rid_use, uint8_t prox_check_use); -UFR_STATUS DL_API MFP_ChangeSectorKey(uint8_t sector_nr, uint8_t auth_mode, uint8_t key_index, IN uint8_t *new_key); -UFR_STATUS DL_API MFP_ChangeSectorKey_PK(uint8_t sector_nr, uint8_t auth_mode, IN uint8_t *old_key, IN uint8_t *new_key); -UFR_STATUS DL_API MFP_GetUid(uint8_t key_index_vc_poll_enc_key, uint8_t key_index_vc_poll_mac_key, OUT uint8_t *uid, VAR uint8_t *uid_len); -UFR_STATUS DL_API MFP_GetUidSamKey(uint8_t key_index_vc_poll_enc_key, uint8_t key_index_vc_poll_mac_key, OUT uint8_t *uid, VAR uint8_t *uid_len); -UFR_STATUS DL_API MFP_GetUid_PK(IN uint8_t *vc_poll_enc_key, IN uint8_t *vc_poll_mac_key, OUT uint8_t *uid, VAR uint8_t *uid_len); -UFR_STATUS DL_API MFP_ChangeVcPollingEncKey(uint8_t configuration_key_index, IN uint8_t *new_key); -UFR_STATUS DL_API MFP_ChangeVcPollingEncKeySamKey(uint8_t configuration_key_index, uint8_t new_key_index); -UFR_STATUS DL_API MFP_ChangeVcPollingEncKey_PK(IN uint8_t *configuration_key, IN uint8_t *new_key); -UFR_STATUS DL_API MFP_ChangeVcPollingMacKey(uint8_t configuration_key_index, IN uint8_t *new_key); -UFR_STATUS DL_API MFP_ChangeVcPollingMacKeySamKey(uint8_t configuration_key_index, uint8_t new_key_index); -UFR_STATUS DL_API MFP_ChangeVcPollingMacKey_PK(IN uint8_t *configuration_key, IN uint8_t *new_key); - -//ULTRALIGHT C -UFR_STATUS DL_API ULC_ExternalAuth_PK(IN uint8_t *key); -UFR_STATUS DL_API ULC_write_3des_key_no_auth(IN uint8_t *new_3des_key); -UFR_STATUS DL_API ULC_write_3des_key_factory_key(IN uint8_t *new_3des_key); -UFR_STATUS DL_API ULC_write_3des_key(IN uint8_t *new_3des_key, IN uint8_t *old_3des_key); - -/** - * BalanceGet() gets balance of the AIS SDK formated cards - * - * @param auth_mode only MIFARE_AUTHENT1A supported for now - * @param auth_value pointer to the Crypto1 6-bytes key array, for now - * @param credit how many credits is on the card - * - * @return execution status - */ -UFR_STATUS DL_API BalanceGet(uint32_t auth_mode, IN void *auth_value, VAR int32_t *credit); - -/** - * BalanceSet() sets balance of the AIS SDK formated cards - * - * @param auth_mode only MIFARE_AUTHENT1A supported for now - * @param auth_value pointer to the Crypto1 6-bytes key array, for now - * @param credit new credit balance - * - * @return execution status - */ -UFR_STATUS DL_API BalanceSet(uint32_t auth_mode, IN void *auth_value, int32_t credit); - -//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ -// XXX: Support for multiple readers with same DLL -//############################################################################# -//############################################################################# -//############################################################################# -//############################################################################# -//############################################################################# -//############################################################################# -//############################################################################# -//############################################################################# -//############################################################################# -//############################################################################# -//################# M U L T I R E A D E R S U P P O R T ################# -//################# M U L T I R E A D E R S U P P O R T ################# -//################# M U L T I R E A D E R S U P P O R T ################# -//################# M U L T I R E A D E R S U P P O R T ################# -//################# M U L T I R E A D E R S U P P O R T ################# -//################# M U L T I R E A D E R S U P P O R T ################# -//################# M U L T I R E A D E R S U P P O R T ################# -//################# M U L T I R E A D E R S U P P O R T ################# -//################# M U L T I R E A D E R S U P P O R T ################# -//################# M U L T I R E A D E R S U P P O R T ################# -//############################################################################# -//############################################################################# -//############################################################################# -//############################################################################# -//############################################################################# -//############################################################################# -//############################################################################# -//############################################################################# -//############################################################################# -//############################################################################# - -//-------------------------------------------------------------------------------------------------- -/** - * This is the main function of the multi-reader support. - * ReaderList_UpdateAndGetCount() scan all communication ports for compatible devices. - * Function probes opened readers if still connected, if not close and mark them handles for deletion. - * If some device is disconnected from system this function should remove its handle. - * - * @param NumberOfDevices - * @return status of execution - */ -UFR_STATUS DL_API ReaderList_UpdateAndGetCount(VAR int32_t * NumberOfDevices); - -/** - * Function for getting all relevant information about connected readers. - * - * Eg. If you have tree connected readers, detected by ReaderList_UpdateAndGetCount(), - * you should call this function tree times. - * - * @param DeviceHandle - * @param DeviceSerialNumber - * @param DeviceType - * @param DeviceFWver - * @param DeviceCommID - * @param DeviceCommSpeed - * @param DeviceCommFTDISerial - * @param DeviceCommFTDIDescription - * @param DeviceIsOpened - * @param DeviceStatus - * @return - */ -UFR_STATUS DL_API ReaderList_GetInformation( // - VAR UFR_HANDLE *DeviceHandle, //// assigned Handle - OUT c_string *DeviceSerialNumber, //// device serial number - VAR int *DeviceType, //// device type - device identification in AIS database - VAR int *DeviceFWver, //// version of firmware - VAR int *DeviceCommID, //// device identification number (master) - VAR int *DeviceCommSpeed, //// communication speed - OUT c_string *DeviceCommFTDISerial, //// FTDI COM port identification - OUT c_string *DeviceCommFTDIDescription, //// FTDI COM port description - VAR int *DeviceIsOpened, //// is Device opened - VAR int *DeviceStatus //// actual device status -); - -/** - * If the handle exists in the list of opened devices, - * function would try to close communication port and destroy the handle. - * ( ReaderList_UpdateAndGetCount() will do that automatically in next execution) - * - * Good when you identify that the reader is no longer connected, and want to release the handle. - * - * @param DeviceHandle the handle that will be destroyed - * @return - */ -UFR_STATUS DL_API ReaderList_Destroy(UFR_HANDLE DeviceHandle); - -// XXX: Obsolete functions - remain for backward compatibility -UFR_STATUS DL_API ReaderList_GetSerialByIndex(int32_t DeviceIndex, VAR uint32_t *lpulSerialNumber); -UFR_STATUS DL_API ReaderList_GetSerialDescriptionByIndex(int32_t DeviceIndex, OUT uint8_t pSerialDescription[8]); -UFR_STATUS DL_API ReaderList_GetTypeByIndex(int32_t DeviceIndex, VAR uint32_t *lpulReaderType); -UFR_STATUS DL_API ReaderList_GetFTDISerialByIndex(int32_t DeviceIndex, OUT char ** Device_Serial); -UFR_STATUS DL_API ReaderList_GetFTDIDescriptionByIndex(int32_t DeviceIndex, OUT char ** Device_Description); -UFR_STATUS DL_API ReaderList_OpenByIndex(const int32_t DeviceIndex, VAR UFR_HANDLE *hndUFR); -UFR_STATUS DL_API ReaderList_OpenBySerial(const char Device_SN[16], VAR UFR_HANDLE *hndUFR); // ! not implemented - -//-------------------------------------------------------------------------------------------------- - -// open first/next Reader and return handle - better to use ReaderList_OpenByIndex() -UFR_STATUS DL_API ReaderOpenM(VAR UFR_HANDLE *hndUFR); - -UFR_STATUS DL_API ReaderResetM(UFR_HANDLE hndUFR); - -UFR_STATUS DL_API ReaderCloseM(UFR_HANDLE hndUFR); - -UFR_STATUS DL_API ReaderSoftRestartM(UFR_HANDLE hndUFR); - -UFR_STATUS DL_API GetReaderTypeM(UFR_HANDLE hndUFR, - IN uint32_t *lpulReaderType); - -UFR_STATUS DL_API GetReaderSerialNumberM(UFR_HANDLE hndUFR, - IN uint32_t *lpulSerialNumber); - -UFR_STATUS DL_API ReaderStillConnectedM(UFR_HANDLE hndUFR, - VAR uint32_t *connected); - -UFR_STATUS DL_API ReaderKeyWriteM(UFR_HANDLE hndUFR, - IN const uint8_t *aucKey, - uint8_t ucKeyIndex); - -UFR_STATUS DL_API ReaderKeysLockM(UFR_HANDLE hndUFR, - IN const uint8_t *password); - -UFR_STATUS DL_API ReaderKeysUnlockM(UFR_HANDLE hndUFR, - IN const uint8_t *password); - -UFR_STATUS DL_API ReaderUISignalM(UFR_HANDLE hndUFR, - uint8_t light_signal_mode, - uint8_t beep_signal_mode); - -UFR_STATUS DL_API ReadUserDataM(UFR_HANDLE hndUFR, - OUT uint8_t *aucData); - -UFR_STATUS DL_API WriteUserDataM(UFR_HANDLE hndUFR, - IN const uint8_t *aucData); - -UFR_STATUS DL_API GetCardIdM(UFR_HANDLE hndUFR, - VAR uint8_t *lpucCardType, - OUT uint32_t *lpulCardSerial); - -UFR_STATUS DL_API BlockReadM(UFR_HANDLE hndUFR, - OUT uint8_t *data, - uint8_t block_address, - uint8_t auth_mode, - uint8_t key_index); -UFR_STATUS DL_API BlockReadSamKeyM(UFR_HANDLE hndUFR, - OUT uint8_t *data, - uint8_t block_address, - uint8_t auth_mode, uint8_t key_index); - -UFR_STATUS DL_API BlockWriteM(UFR_HANDLE hndUFR, - IN const uint8_t *data, - uint8_t block_address, - uint8_t auth_mode, - uint8_t key_index); -UFR_STATUS DL_API BlockWriteSamKeyM(UFR_HANDLE hndUFR, - IN const uint8_t *data, - uint8_t block_address, - uint8_t auth_mode, - uint8_t key_index); - -UFR_STATUS DL_API BlockInSectorReadM(UFR_HANDLE hndUFR, - OUT uint8_t *data, - uint8_t sector_address, - uint8_t block_in_sector_address, - uint8_t auth_mode, - uint8_t key_index); -UFR_STATUS DL_API BlockInSectorReadSamKeyM(UFR_HANDLE hndUFR, - OUT uint8_t *data, - uint8_t sector_address, - uint8_t block_in_sector_address, - uint8_t auth_mode, - uint8_t key_index); - - -UFR_STATUS DL_API BlockInSectorWriteM(UFR_HANDLE hndUFR, - IN const uint8_t *data, - uint8_t sector_address, - uint8_t block_in_sector_address, - uint8_t auth_mode, - uint8_t key_index); -UFR_STATUS DL_API BlockInSectorWriteSamKeyM(UFR_HANDLE hndUFR, - IN const uint8_t *data, - uint8_t sector_address, - uint8_t block_in_sector_address, - uint8_t auth_mode, - uint8_t key_index); - -UFR_STATUS DL_API LinearReadM(UFR_HANDLE hndUFR, - OUT uint8_t *aucData, - uint16_t usLinearAddress, - uint16_t usDataLength, - VAR uint16_t *lpusBytesReturned, - uint8_t ucKeyMode, - uint8_t ucReaderKeyIndex); -UFR_STATUS DL_API LinearReadSamKeyM(UFR_HANDLE hndUFR, - OUT uint8_t *aucData, - uint16_t usLinearAddress, - uint16_t usDataLength, - VAR uint16_t *lpusBytesReturned, - uint8_t ucKeyMode, - uint8_t ucReaderKeyIndex); - -UFR_STATUS DL_API LinRowReadM(UFR_HANDLE hndUFR, - OUT uint8_t *aucData, - uint16_t usLinearAddress, - uint16_t usDataLength, - VAR uint16_t *lpusBytesReturned, - uint8_t ucKeyMode, - uint8_t ucReaderKeyIndex); - -UFR_STATUS DL_API LinearWriteM(UFR_HANDLE hndUFR, - IN const uint8_t *aucData, - uint16_t usLinearAddress, - uint16_t usDataLength, - VAR uint16_t *lpusBytesWritten, - uint8_t ucKeyMode, - uint8_t ucReaderKeyIndex); -UFR_STATUS DL_API LinearWriteSamKeyM(UFR_HANDLE hndUFR, - IN const uint8_t *aucData, - uint16_t usLinearAddress, - uint16_t usDataLength, - VAR uint16_t *lpusBytesWritten, - uint8_t ucKeyMode, - uint8_t ucReaderKeyIndex); - -UFR_STATUS DL_API LinearFormatCardM(UFR_HANDLE hndUFR, - IN const uint8_t *new_key_A, - uint8_t blocks_access_bits, - uint8_t sector_trailers_access_bits, - uint8_t sector_trailers_byte9, - IN const uint8_t *new_key_B, - VAR uint8_t *lpucSectorsFormatted, - uint8_t auth_mode, - uint8_t key_index); - - -UFR_STATUS DL_API SectorTrailerWriteM(UFR_HANDLE hndUFR, - uint8_t addressing_mode, - uint8_t address, - IN const uint8_t *new_key_A, - uint8_t block0_access_bits, - uint8_t block1_access_bits, - uint8_t block2_access_bits, - uint8_t sector_trailer_access_bits, - uint8_t sector_trailer_byte9, - IN const uint8_t *new_key_B, - uint8_t auth_mode, - uint8_t key_index); - -UFR_STATUS DL_API SectorTrailerWriteUnsafeM(UFR_HANDLE hndUFR, - uint8_t addressing_mode, - uint8_t address, - IN const uint8_t *sector_trailer, - uint8_t auth_mode, - uint8_t key_index); - -UFR_STATUS DL_API ValueBlockReadM(UFR_HANDLE hndUFR, - VAR int32_t *value, - VAR uint8_t *value_addr, - uint8_t block_address, - uint8_t auth_mode, - uint8_t key_index); -UFR_STATUS DL_API ValueBlockReadSamKeyM(UFR_HANDLE hndUFR, - VAR int32_t *value, - VAR uint8_t *value_addr, - uint8_t block_address, - uint8_t auth_mode, - uint8_t key_index); - -UFR_STATUS DL_API ValueBlockInSectorReadM(UFR_HANDLE hndUFR, - VAR int32_t *value, - VAR uint8_t *value_addr, - uint8_t sector_address, - uint8_t block_in_sector_address, - uint8_t auth_mode, - uint8_t key_index); -UFR_STATUS DL_API ValueBlockInSectorReadSamKeyM(UFR_HANDLE hndUFR, - VAR int32_t *value, - VAR uint8_t *value_addr, - uint8_t sector_address, - uint8_t block_in_sector_address, - uint8_t auth_mode, - uint8_t key_index); - -UFR_STATUS DL_API ValueBlockWriteM(UFR_HANDLE hndUFR, - int32_t value, - uint8_t value_addr, - uint8_t block_address, - uint8_t auth_mode, - uint8_t key_index); -UFR_STATUS DL_API ValueBlockWriteSamKeyM(UFR_HANDLE hndUFR, int32_t value, - uint8_t value_addr, - uint8_t block_address, - uint8_t auth_mode, - uint8_t key_index); - -UFR_STATUS DL_API ValueBlockInSectorWriteM(UFR_HANDLE hndUFR, - int32_t value, - uint8_t value_addr, - uint8_t sector_address, - uint8_t block_in_sector_address, - uint8_t auth_mode, - uint8_t key_index); -UFR_STATUS DL_API ValueBlockInSectorWriteSamKeyM(UFR_HANDLE hndUFR, int32_t value, - uint8_t value_addr, - uint8_t sector_address, - uint8_t block_in_sector_address, - uint8_t auth_mode, - uint8_t key_index); - -UFR_STATUS DL_API ValueBlockIncrementM(UFR_HANDLE hndUFR, - int32_t increment_value, - uint8_t block_address, - uint8_t auth_mode, - uint8_t key_index); -UFR_STATUS DL_API ValueBlockIncrementSamKeyM(UFR_HANDLE hndUFR, int32_t increment_value, - uint8_t block_address, - uint8_t auth_mode, - uint8_t key_index); - - -UFR_STATUS DL_API ValueBlockInSectorIncrementM(UFR_HANDLE hndUFR, - int32_t increment_value, - uint8_t sector_address, - uint8_t block_in_sector_address, - uint8_t auth_mode, - uint8_t key_index); -UFR_STATUS DL_API ValueBlockInSectorIncrementSamKeyM(UFR_HANDLE hndUFR, int32_t increment_value, - uint8_t sector_address, - uint8_t block_in_sector_address, - uint8_t auth_mode, - uint8_t key_index); - -UFR_STATUS DL_API ValueBlockDecrementM(UFR_HANDLE hndUFR, - int32_t decrement_value, - uint8_t block_address, - uint8_t auth_mode, - uint8_t key_index); -UFR_STATUS DL_API ValueBlockDecrementSamKeyM(UFR_HANDLE hndUFR, int32_t decrement_value, - uint8_t block_address, - uint8_t auth_mode, - uint8_t key_index); - - -UFR_STATUS DL_API ValueBlockInSectorDecrementM(UFR_HANDLE hndUFR, - int32_t decrement_value, - uint8_t sector_address, - uint8_t block_in_sector_address, - uint8_t auth_mode, - uint8_t key_index); -UFR_STATUS DL_API ValueBlockInSectorDecrementSamKeyM(UFR_HANDLE hndUFR, int32_t decrement_value, - uint8_t sector_address, - uint8_t block_in_sector_address, - uint8_t auth_mode, - uint8_t key_index); - -UFR_STATUS DL_API BlockRead_AKM1M(UFR_HANDLE hndUFR, - OUT uint8_t *data, - uint8_t block_address, - uint8_t auth_mode); - -UFR_STATUS DL_API BlockWrite_AKM1M(UFR_HANDLE hndUFR, - IN const uint8_t *data, - uint8_t block_address, - uint8_t auth_mode); -UFR_STATUS DL_API BlockInSectorRead_AKM1M(UFR_HANDLE hndUFR, - OUT uint8_t *data, - uint8_t sector_address, - uint8_t block_in_sector_address, - uint8_t auth_mode); -UFR_STATUS DL_API BlockInSectorWrite_AKM1M(UFR_HANDLE hndUFR, - IN const uint8_t *data, - uint8_t sector_address, - uint8_t block_in_sector_address, - uint8_t auth_mode); -UFR_STATUS DL_API LinearRead_AKM1M(UFR_HANDLE hndUFR, - OUT uint8_t *data, - uint16_t linear_address, - uint16_t length, - VAR uint16_t *bytes_returned, - uint8_t auth_mode); -UFR_STATUS DL_API LinRowRead_AKM1M(UFR_HANDLE hndUFR, - OUT uint8_t *data, - uint16_t linear_address, - uint16_t length, - VAR uint16_t *bytes_returned, - uint8_t auth_mode); -UFR_STATUS DL_API LinearWrite_AKM1M(UFR_HANDLE hndUFR, - IN const uint8_t *data, - uint16_t linear_address, - uint16_t length, - VAR uint16_t *bytes_written, - uint8_t auth_mode); -UFR_STATUS DL_API LinearFormatCard_AKM1M(UFR_HANDLE hndUFR, - IN const uint8_t *new_key_A, - uint8_t blocks_access_bits, - uint8_t sector_trailers_access_bits, - uint8_t sector_trailers_byte9, - IN const uint8_t *new_key_B, - VAR uint8_t *lpucSectorsFormatted, - uint8_t auth_mode); - -UFR_STATUS DL_API SectorTrailerWrite_AKM1M(UFR_HANDLE hndUFR, - uint8_t addressing_mode, - uint8_t address, - IN const uint8_t *new_key_A, - uint8_t block0_access_bits, - uint8_t block1_access_bits, - uint8_t block2_access_bits, - uint8_t sector_trailer_access_bits, - uint8_t sector_trailer_byte9, - IN const uint8_t *new_key_B, - uint8_t auth_mode); - -UFR_STATUS DL_API SectorTrailerWriteUnsafe_AKM1M(UFR_HANDLE hndUFR, - uint8_t addressing_mode, - uint8_t address, - IN const uint8_t *sector_trailer, - uint8_t auth_mode); - -UFR_STATUS DL_API ValueBlockRead_AKM1M(UFR_HANDLE hndUFR, - VAR int32_t *value, - VAR uint8_t *value_addr, - uint8_t block_address, - uint8_t auth_mode); - -UFR_STATUS DL_API ValueBlockInSectorRead_AKM1M(UFR_HANDLE hndUFR, - VAR int32_t *value, - VAR uint8_t *value_addr, - uint8_t sector_address, - uint8_t block_in_sector_address, - uint8_t auth_mode); - -UFR_STATUS DL_API ValueBlockWrite_AKM1M(UFR_HANDLE hndUFR, - int32_t value, - uint8_t value_addr, - uint8_t block_address, - uint8_t auth_mode); - -UFR_STATUS DL_API ValueBlockInSectorWrite_AKM1M(UFR_HANDLE hndUFR, - int32_t value, - uint8_t value_addr, - uint8_t sector_address, - uint8_t block_in_sector_address, - uint8_t auth_mode); - -UFR_STATUS DL_API ValueBlockIncrement_AKM1M(UFR_HANDLE hndUFR, - int32_t increment_value, - uint8_t block_address, - uint8_t auth_mode); - -UFR_STATUS DL_API ValueBlockInSectorIncrement_AKM1M(UFR_HANDLE hndUFR, - int32_t increment_value, - uint8_t sector_address, - uint8_t block_in_sector_address, - uint8_t auth_mode); - -UFR_STATUS DL_API ValueBlockDecrement_AKM1M(UFR_HANDLE hndUFR, - int32_t decrement_value, - uint8_t block_address, - uint8_t auth_mode); - -UFR_STATUS DL_API ValueBlockInSectorDecrement_AKM1M(UFR_HANDLE hndUFR, - int32_t decrement_value, - uint8_t sector_address, - uint8_t block_in_sector_address, - uint8_t auth_mode); - -UFR_STATUS DL_API BlockRead_AKM2M(UFR_HANDLE hndUFR, - OUT uint8_t *data, - uint8_t block_address, - uint8_t auth_mode); - -UFR_STATUS DL_API BlockWrite_AKM2M(UFR_HANDLE hndUFR, - IN const uint8_t *data, - uint8_t block_address, - uint8_t auth_mode); - -UFR_STATUS DL_API BlockInSectorRead_AKM2M(UFR_HANDLE hndUFR, - OUT uint8_t *data, - uint8_t sector_address, - uint8_t block_in_sector_address, - uint8_t auth_mode); - -UFR_STATUS DL_API BlockInSectorWrite_AKM2M(UFR_HANDLE hndUFR, - IN const uint8_t *data, - uint8_t sector_address, - uint8_t block_in_sector_address, - uint8_t auth_mode); - -UFR_STATUS DL_API LinearRead_AKM2M(UFR_HANDLE hndUFR, - OUT uint8_t *data, - uint16_t linear_address, - uint16_t length, - VAR uint16_t *bytes_returned, - uint8_t auth_mode); - -UFR_STATUS DL_API LinRowRead_AKM2M(UFR_HANDLE hndUFR, - OUT uint8_t *data, - uint16_t linear_address, - uint16_t length, - VAR uint16_t *bytes_returned, - uint8_t auth_mode); - -UFR_STATUS DL_API LinearWrite_AKM2M(UFR_HANDLE hndUFR, - IN const uint8_t *data, - uint16_t linear_address, - uint16_t length, - VAR uint16_t *bytes_written, - uint8_t auth_mode); - -UFR_STATUS DL_API LinearFormatCard_AKM2M(UFR_HANDLE hndUFR, - IN const uint8_t *new_key_A, - uint8_t blocks_access_bits, - uint8_t sector_trailers_access_bits, - uint8_t sector_trailers_byte9, - IN const uint8_t *new_key_B, - VAR uint8_t *lpucSectorsFormatted, - uint8_t auth_mode); - -UFR_STATUS DL_API SectorTrailerWrite_AKM2M(UFR_HANDLE hndUFR, - uint8_t addressing_mode, - uint8_t address, - IN const uint8_t *new_key_A, - uint8_t block0_access_bits, - uint8_t block1_access_bits, - uint8_t block2_access_bits, - uint8_t sector_trailer_access_bits, - uint8_t sector_trailer_byte9, - IN const uint8_t *new_key_B, - uint8_t auth_mode); - -UFR_STATUS DL_API SectorTrailerWriteUnsafe_AKM2M(UFR_HANDLE hndUFR, - uint8_t addressing_mode, - uint8_t address, - IN const uint8_t *sector_trailer, - uint8_t auth_mode); - -UFR_STATUS DL_API ValueBlockRead_AKM2M(UFR_HANDLE hndUFR, - VAR int32_t *value, - VAR uint8_t *value_addr, - uint8_t block_address, - uint8_t auth_mode); - -UFR_STATUS DL_API ValueBlockInSectorRead_AKM2M(UFR_HANDLE hndUFR, - VAR int32_t *value, - VAR uint8_t *value_addr, - uint8_t sector_address, - uint8_t block_in_sector_address, - uint8_t auth_mode); - -UFR_STATUS DL_API ValueBlockWrite_AKM2M(UFR_HANDLE hndUFR, - int32_t value, - uint8_t value_addr, - uint8_t block_address, - uint8_t auth_mode); - -UFR_STATUS DL_API ValueBlockInSectorWrite_AKM2M(UFR_HANDLE hndUFR, - int32_t value, - uint8_t value_addr, - uint8_t sector_address, - uint8_t block_in_sector_address, - uint8_t auth_mode); - -UFR_STATUS DL_API ValueBlockIncrement_AKM2M(UFR_HANDLE hndUFR, - int32_t increment_value, - uint8_t block_address, - uint8_t auth_mode); - -UFR_STATUS DL_API ValueBlockInSectorIncrement_AKM2M(UFR_HANDLE hndUFR, - int32_t increment_value, - uint8_t sector_address, - uint8_t block_in_sector_address, - uint8_t auth_mode); - -UFR_STATUS DL_API ValueBlockDecrement_AKM2M(UFR_HANDLE hndUFR, - int32_t decrement_value, - uint8_t block_address, - uint8_t auth_mode); - -UFR_STATUS DL_API ValueBlockInSectorDecrement_AKM2M(UFR_HANDLE hndUFR, - int32_t decrement_value, - uint8_t sector_address, - uint8_t block_in_sector_address, - uint8_t auth_mode); - -UFR_STATUS DL_API BlockRead_PKM(UFR_HANDLE hndUFR, - OUT uint8_t *data, - uint8_t block_address, - uint8_t auth_mode, - IN const uint8_t *key); - -UFR_STATUS DL_API BlockWrite_PKM(UFR_HANDLE hndUFR, - IN const uint8_t *data, - uint8_t block_address, - uint8_t auth_mode, - IN const uint8_t *key); - -UFR_STATUS DL_API BlockInSectorRead_PKM(UFR_HANDLE hndUFR, - OUT uint8_t *data, - uint8_t sector_address, - uint8_t block_in_sector_address, - uint8_t auth_mode, - IN const uint8_t *key); - -UFR_STATUS DL_API BlockInSectorWrite_PKM(UFR_HANDLE hndUFR, - IN const uint8_t *data, - uint8_t sector_address, - uint8_t block_in_sector_address, - uint8_t auth_mode, - IN const uint8_t *key); - -UFR_STATUS DL_API LinearRead_PKM(UFR_HANDLE hndUFR, - OUT uint8_t *data, - uint16_t linear_address, - uint16_t length, - VAR uint16_t *bytes_returned, - uint8_t auth_mode, - IN const uint8_t *key); - -UFR_STATUS DL_API LinRowRead_PKM(UFR_HANDLE hndUFR, - OUT uint8_t *data, - uint16_t linear_address, - uint16_t length, - VAR uint16_t *bytes_returned, - uint8_t auth_mode, - IN const uint8_t *key); - -UFR_STATUS DL_API LinearWrite_PKM(UFR_HANDLE hndUFR, - IN const uint8_t *data, - uint16_t linear_address, - uint16_t length, - VAR uint16_t *bytes_written, - uint8_t auth_mode, - IN const uint8_t *key); - -UFR_STATUS DL_API LinearFormatCard_PKM(UFR_HANDLE hndUFR, - IN const uint8_t *new_key_A, - uint8_t blocks_access_bits, - uint8_t sector_trailers_access_bits, - uint8_t sector_trailers_byte9, - IN const uint8_t *new_key_B, - VAR uint8_t *lpucSectorsFormatted, - uint8_t auth_mode, - IN const uint8_t *key); - -UFR_STATUS DL_API SectorTrailerWrite_PKM(UFR_HANDLE hndUFR, - uint8_t addressing_mode, - uint8_t address, - IN const uint8_t *new_key_A, - uint8_t block0_access_bits, - uint8_t block1_access_bits, - uint8_t block2_access_bits, - uint8_t sector_trailer_access_bits, - uint8_t sector_trailer_byte9, - IN const uint8_t *new_key_B, - uint8_t auth_mode, - IN const uint8_t *key); - -UFR_STATUS DL_API SectorTrailerWriteUnsafe_PKM(UFR_HANDLE hndUFR, - uint8_t addressing_mode, - uint8_t address, - IN const uint8_t *sector_trailer, - uint8_t auth_mode, - IN const uint8_t *key); - -UFR_STATUS DL_API ValueBlockRead_PKM(UFR_HANDLE hndUFR, - VAR int32_t *value, - VAR uint8_t *value_addr, - uint8_t block_address, - uint8_t auth_mode, - IN const uint8_t *key); - -UFR_STATUS DL_API ValueBlockInSectorRead_PKM(UFR_HANDLE hndUFR, - VAR int32_t *value, - VAR uint8_t *value_addr, - uint8_t sector_address, - uint8_t block_in_sector_address, - uint8_t auth_mode, - IN const uint8_t *key); - -UFR_STATUS DL_API ValueBlockWrite_PKM(UFR_HANDLE hndUFR, - int32_t value, - uint8_t value_addr, - uint8_t block_address, - uint8_t auth_mode, - IN const uint8_t *key); - -UFR_STATUS DL_API ValueBlockInSectorWrite_PKM(UFR_HANDLE hndUFR, - int32_t value, - uint8_t value_addr, - uint8_t sector_address, - uint8_t block_in_sector_address, - uint8_t auth_mode, - IN const uint8_t *key); - -UFR_STATUS DL_API ValueBlockIncrement_PKM(UFR_HANDLE hndUFR, - int32_t increment_value, - uint8_t block_address, - uint8_t auth_mode, - IN const uint8_t *key); - -UFR_STATUS DL_API ValueBlockInSectorIncrement_PKM(UFR_HANDLE hndUFR, - int32_t increment_value, - uint8_t sector_address, - uint8_t block_in_sector_address, - uint8_t auth_mode, - IN const uint8_t *key); - -UFR_STATUS DL_API ValueBlockDecrement_PKM(UFR_HANDLE hndUFR, - int32_t decrement_value, - uint8_t block_address, - uint8_t auth_mode, - IN const uint8_t *key); - -UFR_STATUS DL_API ValueBlockInSectorDecrement_PKM(UFR_HANDLE hndUFR, - int32_t decrement_value, - uint8_t sector_address, - uint8_t block_in_sector_address, - uint8_t auth_mode, - IN const uint8_t *key); - -UFR_STATUS DL_API GetReaderHardwareVersionM(UFR_HANDLE hndUFR, - VAR uint8_t *version_major, - VAR uint8_t *version_minor); - -UFR_STATUS DL_API GetReaderFirmwareVersionM(UFR_HANDLE hndUFR, - VAR uint8_t *version_major, - VAR uint8_t *version_minor); - -// New commands (for RTC & I2C EEPROM): -UFR_STATUS DL_API GetReaderTimeM(UFR_HANDLE hndUFR, - VAR uint8_t *time); - -UFR_STATUS DL_API SetReaderTimeM(UFR_HANDLE hndUFR, - IN uint8_t *password, - VAR uint8_t *time); - -UFR_STATUS DL_API ChangeReaderPasswordM(UFR_HANDLE hndUFR, - IN uint8_t *old_password, - IN uint8_t *new_password); - -UFR_STATUS DL_API ReaderEepromWriteM(UFR_HANDLE hndUFR, - IN uint8_t *data, - uint32_t address, - uint32_t size, - IN uint8_t *password); - -UFR_STATUS DL_API ReaderEepromReadM(UFR_HANDLE hndUFR, - OUT uint8_t *data, - uint32_t address, - uint32_t size); - -UFR_STATUS DL_API GetReaderSerialDescriptionM(UFR_HANDLE hndUFR, - OUT uint8_t pSerialDescription[8]); - -// New since version 2.0: -UFR_STATUS DL_API GetBuildNumberM(UFR_HANDLE hndUFR, - VAR uint8_t *build); - -UFR_STATUS DL_API GetCardIdExM(UFR_HANDLE hndUFR, - VAR uint8_t *lpucSak, - OUT uint8_t *aucUid, - VAR uint8_t *lpucUidSize); - -UFR_STATUS DL_API GetLastCardIdExM(UFR_HANDLE hndUFR, - VAR uint8_t *lpucSak, - OUT uint8_t *aucUid, - VAR uint8_t *lpucUidSize); - -//------------------------------------------------------------------------------ -//Multi card mode: -//------------------------------------------------------------------------------ -UFR_STATUS DL_API EnableAntiCollisionM(UFR_HANDLE hndUFR); - -UFR_STATUS DL_API DisableAntiCollisionM(UFR_HANDLE hndUFR); - -UFR_STATUS DL_API EnumCardsM(UFR_HANDLE hndUFR, - VAR uint8_t *lpucCardsNumber, - OUT uint8_t *lpucUidListSize); // Card pointer is on the first card in list - -UFR_STATUS DL_API ListCardsM(UFR_HANDLE hndUFR, - OUT uint8_t *aucUidList, - uint8_t ucUidListSize); // Before calling this function you must call EnumCards() first. - -UFR_STATUS DL_API SelectCardM(UFR_HANDLE hndUFR, - IN const uint8_t *aucUid, - uint8_t ucUidSize, - OUT uint8_t *lpucSelctedCardType); - -UFR_STATUS DL_API DeslectCardM(UFR_HANDLE hndUFR); - -UFR_STATUS DL_API GetAntiCollisionStatusM(UFR_HANDLE hndUFR, - VAR int8_t *lpcIsAntiCollEnabled, - VAR int8_t *lpcIsAnyCardSelected); -//------------------------------------------------------------------------------ - -UFR_STATUS DL_API GetDlogicCardTypeM(UFR_HANDLE hndUFR, - VAR uint8_t *lpucCardType); - -UFR_STATUS DL_API GetNfcT2TVersionM(UFR_HANDLE hndUFR, - OUT uint8_t lpucVersionResponse[8]); - -UFR_STATUS DL_API GetCardSizeM(UFR_HANDLE hndUFR, - VAR uint32_t *lpulLinearSize, - VAR uint32_t *lpulRawSize); - -// uFCoder PRO MODE -UFR_STATUS DL_API GetReaderProModeM(UFR_HANDLE hndUFR, - VAR uint32_t *pReaderProMode, - OUT uint32_t *pReaderProConfig); - -UFR_STATUS DL_API SetReaderProModeM(UFR_HANDLE hndUFR, - const uint32_t ReaderProMode); - -// QR barcode crypt algorithm -// initialization. with TB serial like 'TB123456' -UFR_STATUS DL_API CardEncryption_InitializeM(UFR_HANDLE hndUFR, - IN const uint8_t *TBSerialString, - uint16_t job_number); - -// You must define 25 bytes array in memory for out_card_data[] -UFR_STATUS DL_API CardEncryption_GetNextEncryptedCardM(UFR_HANDLE hndUFR, - const uint32_t from_timestamp, - const uint32_t to_timestamp, - OUT uint8_t out_card_data[]); - -UFR_STATUS DL_API CardEncryption_GetNextM(UFR_HANDLE hndUFR, - const uint32_t code_type, - const uint32_t from_timestamp, - const uint32_t to_timestamp, - const uint32_t additional_data_size, - IN const uint8_t additional_data[], - VAR uint32_t *out_card_data_size, - OUT uint8_t out_card_data[]); - -UFR_STATUS DL_API CardEncryption_GetActualCardSNM(UFR_HANDLE hndUFR, - OUT uint32_t *ActualCard_SN, - VAR uint32_t *ActualCard_SN_LOG); - -UFR_STATUS DL_API CardEncryption_GetJobSNM(UFR_HANDLE hndUFR, - VAR uint32_t *JobSN); - -UFR_STATUS DL_API CardEncryption_GetSalterSNM(UFR_HANDLE hndUFR, - OUT uint8_t SalterSN[8], - VAR uint8_t * magicByte); - -UFR_STATUS DL_API read_ndef_recordM(UFR_HANDLE hndUFR, - uint8_t message_nr, - uint8_t record_nr, - VAR uint8_t *tnf, - OUT uint8_t *type_record, - VAR uint8_t *type_length, - OUT uint8_t *id, - VAR uint8_t *id_length, - OUT uint8_t *payload, - VAR uint32_t *payload_length); - -UFR_STATUS DL_API write_ndef_recordM(UFR_HANDLE hndUFR, - uint8_t message_nr, - uint8_t *tnf, - IN uint8_t *type_record, - uint8_t *type_length, - IN uint8_t *id, - uint8_t *id_length, - IN uint8_t *payload, - uint32_t *payload_length, - VAR uint8_t *card_formated); - -UFR_STATUS DL_API write_ndef_record_mirroringM(UFR_HANDLE hndUFR, - uint8_t message_nr, - uint8_t *tnf, - IN uint8_t *type_record, - uint8_t *type_length, - IN uint8_t *id, - uint8_t *id_length, - IN uint8_t *payload, - uint32_t *payload_length, - VAR uint8_t *card_formated, - int use_uid_ascii_mirror, - int use_counter_ascii_mirror, - uint32_t payload_mirroring_pos); - -UFR_STATUS DL_API get_ndef_record_countM(UFR_HANDLE hndUFR, - VAR uint8_t *ndef_message_cnt, - VAR uint8_t *ndef_record_cnt, - OUT uint8_t *ndef_record_array, - VAR uint8_t *empty_ndef_message_cnt); - -UFR_STATUS DL_API erase_last_ndef_recordM(UFR_HANDLE hndUFR, - uint8_t message_nr); - -UFR_STATUS DL_API erase_all_ndef_recordsM(UFR_HANDLE hndUFR, - uint8_t message_nr); - -UFR_STATUS DL_API ndef_card_initializationM(UFR_HANDLE hndUFR); - -//--------------------------------------------------------------------- -// Card emulation: -//--------------------------------------------------------------------- -UFR_STATUS DL_API WriteEmulationNdefM(UFR_HANDLE hndUFR, - uint8_t tnf, - IN uint8_t* type_record, - uint8_t type_length, - IN uint8_t* id, - uint8_t id_length, - IN uint8_t* payload, - uint8_t payload_length); - -UFR_STATUS DL_API TagEmulationStartM(UFR_HANDLE hndUFR); - -UFR_STATUS DL_API TagEmulationStopM(UFR_HANDLE hndUFR); - -UFR_STATUS DL_API CombinedModeEmulationStartM(UFR_HANDLE hndUFR); - -UFR_STATUS DL_API AdHocEmulationStartM(UFR_HANDLE hndUFR); - -UFR_STATUS DL_API AdHocEmulationStopM(UFR_HANDLE hndUFR); - -UFR_STATUS DL_API GetAdHocEmulationParamsM(UFR_HANDLE hndUFR, - VAR uint8_t *ThresholdMinLevel, - VAR uint8_t *ThresholdCollLevel, - VAR uint8_t *RFLevelAmp, - VAR uint8_t *RxGain, - VAR uint8_t *RFLevel); - -UFR_STATUS DL_API SetAdHocEmulationParamsM(UFR_HANDLE hndUFR, - uint8_t ThresholdMinLevel, - uint8_t ThresholdCollLevel, - uint8_t RFLevelAmp, - uint8_t RxGain, - uint8_t RFLevel); - -UFR_STATUS DL_API GetExternalFieldStateM(UFR_HANDLE hndUFR, - VAR uint8_t *is_field_present); -//------------------------------------------------------------------------------ -UFR_STATUS DL_API ReadECCSignatureM(UFR_HANDLE hndUFR, - IN uint8_t lpucECCSignature[ECC_SIG_LEN], - OUT uint8_t lpucUid[MAX_UID_LEN], - VAR uint8_t *lpucUidLen, - VAR uint8_t *lpucDlogicCardType); - -//------------------------------------------------------------------------------ -UFR_STATUS DL_API ReadCounterM(UFR_HANDLE hndUFR, - uint8_t counter_address, - VAR uint32_t *value); - -UFR_STATUS DL_API IncrementCounterM(UFR_HANDLE hndUFR, - uint8_t counter_address, - uint32_t inc_value); - -UFR_STATUS DL_API ReadNFCCounterM(UFR_HANDLE hndUFR, - VAR uint32_t *value); // Same as ReadCounter(2, &value); - -UFR_STATUS DL_API ReadNFCCounterPwdAuth_RKM(UFR_HANDLE hndUFR, - VAR uint32_t *value, - uint8_t reader_key_index); - -UFR_STATUS DL_API ReadNFCCounterPwdAuth_PKM(UFR_HANDLE hndUFR, - VAR uint32_t *value, - IN const uint8_t *key); -//------------------------------------------------------------------------------ - -UFR_STATUS DL_API SetAsyncCardIdSendConfigM(UFR_HANDLE hndUFR, - uint8_t send_enable, - uint8_t prefix_enable, - uint8_t prefix, - uint8_t suffix, - uint8_t send_removed_enable, - uint32_t async_baud_rate); - -UFR_STATUS DL_API SetAsyncCardIdSendConfigExM(UFR_HANDLE hndUFR, - uint8_t send_enable, - uint8_t prefix_enable, - uint8_t prefix, - uint8_t suffix, - uint8_t send_removed_enable, - uint8_t reverse_byte_order, - uint8_t decimal_representation, - uint32_t async_baud_rate); - -UFR_STATUS DL_API GetAsyncCardIdSendConfigM(UFR_HANDLE hndUFR, - VAR uint8_t *send_enable, - VAR uint8_t *prefix_enable, - VAR uint8_t *prefix, - VAR uint8_t *suffix, - VAR uint8_t *send_removed_enable, - VAR uint32_t *async_baud_rate); - -UFR_STATUS DL_API GetAsyncCardIdSendConfigExM(UFR_HANDLE hndUFR, - VAR uint8_t *send_enable, - VAR uint8_t *prefix_enable, - VAR uint8_t *prefix, - VAR uint8_t *suffix, - VAR uint8_t *send_removed_enable, - VAR uint8_t *reverse_byte_order, - VAR uint8_t *decimal_representation, - VAR uint32_t *async_baud_rate); - -/***************************************************************************** - * AIS FUNCTIONS - ***************************************************************************** - */ - -UFR_STATUS DL_API ais_get_card_numberM(UFR_HANDLE hndUFR, - VAR uint32_t *card_number); - -UFR_STATUS DL_API ais_set_right_recordM(UFR_HANDLE hndUFR, - uint8_t record_number, - uint16_t first_reader_nr, - uint16_t last_reader_nr, - uint8_t start_hour, - uint8_t start_minute, - uint8_t end_hour, - uint8_t end_minute, - IN uint8_t *days); - -UFR_STATUS DL_API ais_get_right_recordM(UFR_HANDLE hndUFR, - uint8_t record_number, - VAR uint16_t *first_reader_nr, - VAR uint16_t *last_reader_nr, - VAR uint8_t *start_hour, - VAR uint8_t *start_minute, - VAR uint8_t *end_hour, - VAR uint8_t *end_minute, - OUT uint8_t *days); - -UFR_STATUS DL_API ais_erase_right_recordM(UFR_HANDLE hndUFR, - uint8_t record_number); - -UFR_STATUS DL_API ais_set_validate_recordM(UFR_HANDLE hndUFR, - uint8_t begin_year, - uint8_t begin_month, - uint8_t begin_day, - uint8_t begin_hour, - uint8_t begin_minute, - uint8_t end_year, - uint8_t end_month, - uint8_t end_day, - uint8_t end_hour, - uint8_t end_minute); - -UFR_STATUS DL_API ais_get_validate_recordM(UFR_HANDLE hndUFR, - VAR uint8_t *begin_year, - VAR uint8_t *begin_month, - VAR uint8_t *begin_day, - VAR uint8_t *begin_hour, - VAR uint8_t *begin_minute, - VAR uint8_t *end_year, - VAR uint8_t *end_month, - VAR uint8_t *end_day, - VAR uint8_t *end_hour, - VAR uint8_t *end_minute); - -UFR_STATUS DL_API ais_set_card_typeM(UFR_HANDLE hndUFR, - uint8_t card_type); - -UFR_STATUS DL_API ais_get_card_typeM(UFR_HANDLE hndUFR, - VAR uint8_t *card_type); - -UFR_STATUS DL_API ais_set_card_daily_durationM(UFR_HANDLE hndUFR, - uint16_t duration); - -UFR_STATUS DL_API ais_get_card_daily_durationM(UFR_HANDLE hndUFR, - VAR uint16_t *duration); - -UFR_STATUS DL_API ais_set_card_total_durationM(UFR_HANDLE hndUFR, - uint32_t duration); - -UFR_STATUS DL_API ais_get_card_total_durationM(UFR_HANDLE hndUFR, - VAR uint32_t *duration); - -// swimming pool ************************************************************** - -UFR_STATUS DL_API ais_get_credit_and_period_validityM(UFR_HANDLE hndUFR, - VAR int32_t *credit, - VAR uint32_t *begin_year, - VAR uint32_t *begin_month, - VAR uint32_t *begin_day, - VAR uint32_t *begin_hour, - VAR uint32_t *begin_minute, - VAR uint32_t *end_year, - VAR uint32_t *end_month, - VAR uint32_t *end_day, - VAR uint32_t *end_hour, - VAR uint32_t *end_minute); - -UFR_STATUS DL_API ais_set_credit_and_period_validityM(UFR_HANDLE hndUFR, - int32_t credit, - uint32_t begin_year, - uint32_t begin_month, - uint32_t begin_day, - uint32_t begin_hour, - uint32_t begin_minute, - uint32_t end_year, - uint32_t end_month, - uint32_t end_day, - uint32_t end_hour, - uint32_t end_minute); - -UFR_STATUS DL_API ais_set_right_type_recordM(UFR_HANDLE hndUFR, - uint8_t record_number, - uint8_t right_record_type, - IN uint8_t *right_data); - -UFR_STATUS DL_API ais_get_right_type_recordM(UFR_HANDLE hndUFR, - uint8_t record_number, - VAR uint8_t *right_record_type, - OUT uint8_t *right_data); - -UFR_STATUS DL_API ais_set_right_record_type_max_daily_counterM(UFR_HANDLE hndUFR, - uint8_t record_number, - uint16_t first_reader_nr, - uint16_t last_reader_nr, - uint8_t start_hour, - uint8_t start_minute, - uint8_t end_hour, - uint8_t end_minute, - IN uint8_t *days, - uint8_t max_daily_counter); - -//============================================================================= - -UFR_STATUS DL_API UfrXrcLockOnM(UFR_HANDLE hndUFR, - uint16_t pulse_duration); - -UFR_STATUS DL_API UfrXrcRelayStateM(UFR_HANDLE hndUFR, - uint8_t state); - -UFR_STATUS DL_API UfrXrcGetIoStateM(UFR_HANDLE hndUFR, - VAR uint8_t *intercom, - VAR uint8_t *door, - VAR uint8_t *relay_state); - -UFR_STATUS DL_API UfrRedLightControlM(UFR_HANDLE hndUFR, - uint8_t light_status); - -UFR_STATUS DL_API UfrRgbLightControlM(UFR_HANDLE hndUFR, - uint8_t red, - uint8_t green, - uint8_t blue, - uint8_t intensity, - uint8_t enable); - -UFR_STATUS DL_API UfrSetBadSelectCardNrMaxM(UFR_HANDLE hndUFR, - uint8_t bad_select_nr_max); - -UFR_STATUS DL_API UfrGetBadSelectCardNrMaxM(UFR_HANDLE hndUFR, - VAR uint8_t *bad_select_nr_max); - -UFR_STATUS DL_API UfrEnterSleepModeM(UFR_HANDLE hndUFR); - -UFR_STATUS DL_API UfrLeaveSleepModeM(UFR_HANDLE hndUFR); - -UFR_STATUS DL_API AutoSleepSetM(UFR_HANDLE hndUFR, - uint8_t seconds_wait); - -UFR_STATUS DL_API AutoSleepGetM(UFR_HANDLE hndUFR, - VAR uint8_t *seconds_wait); - -UFR_STATUS DL_API SetSpeedPermanentlyM(UFR_HANDLE hndUFR, - unsigned char tx_speed, - unsigned char rx_speed); - -UFR_STATUS DL_API GetSpeedParametersM(UFR_HANDLE hndUFR, - VAR unsigned char *tx_speed, - VAR unsigned char *rx_speed); - -UFR_STATUS DL_API SetDisplayDataM(UFR_HANDLE hndUFR, - IN uint8_t *display_data, - uint8_t data_length); - -UFR_STATUS DL_API SetSpeakerFrequencyM(UFR_HANDLE hndUFR, - uint16_t frequency); - -UFR_STATUS DL_API SetDisplayIntensityM(UFR_HANDLE hndUFR, - uint8_t intensity); - -UFR_STATUS DL_API GetDisplayIntensityM(UFR_HANDLE hndUFR, - VAR uint8_t *intensity); - -//############################################################################# -//############################################################################# - -UFR_STATUS DL_API SetISO14443_4_ModeM(UFR_HANDLE hndUFR); - -UFR_STATUS DL_API SetISO14443_4_DLStorageM(UFR_HANDLE hndUFR); - -UFR_STATUS DL_API uFR_i_block_transceiveM(UFR_HANDLE hndUFR, - uint8_t chaining, - uint8_t timeout, - uint8_t block_length, - IN uint8_t *snd_data_array, - VAR size_t *rcv_length, - OUT uint8_t *rcv_data_array, - VAR uint32_t *ufr_status); - -UFR_STATUS DL_API uFR_APDU_TransceiveM(UFR_HANDLE hndUFR, - uint8_t cls, - uint8_t ins, - uint8_t p1, - uint8_t p2, - IN uint8_t *data_out, - uint8_t data_out_len, - OUT uint8_t *data_in, - uint32_t max_data_in_len, - VAR uint32_t *response_len, - uint8_t send_le, - OUT uint8_t *apdu_status); - -UFR_STATUS DL_API APDUHexStrTransceiveM(UFR_HANDLE hndUFR, - IN const char *c_apdu, - OUT char **r_apdu); - -UFR_STATUS DL_API APDUPlainTransceiveM(UFR_HANDLE hndUFR, - IN const uint8_t *c_apdu, - uint32_t c_apdu_len, - OUT uint8_t *r_apdu, - VAR uint32_t *r_apdu_len); - -UFR_STATUS DL_API APDUTransceiveM(UFR_HANDLE hndUFR, - uint8_t cls, - uint8_t ins, - uint8_t p1, - uint8_t p2, - IN const uint8_t *data_out, - uint32_t Nc, - OUT uint8_t *data_in, - VAR uint32_t *Ne, - uint8_t send_le, - OUT uint8_t *apdu_status); - -UFR_STATUS DL_API i_block_trans_rcv_chainM(UFR_HANDLE hndUFR, - uint8_t chaining, - uint8_t timeout, - uint8_t block_length, - IN uint8_t *snd_data_array, - VAR uint8_t *rcv_length, - OUT uint8_t *rcv_data_array, - VAR uint8_t *rcv_chained, - VAR uint32_t *ufr_status); - -UFR_STATUS DL_API r_block_transceiveM(UFR_HANDLE hndUFR, - uint8_t ack, - uint8_t timeout, - VAR uint8_t *rcv_length, - OUT uint8_t *rcv_data_array, - VAR uint8_t *rcv_chained, - VAR uint32_t *ufr_status); - -UFR_STATUS DL_API s_block_deselectM(UFR_HANDLE hndUFR, - uint8_t timeout); - -UFR_STATUS DL_API card_transceiveM(UFR_HANDLE hndUFR, - uint8_t card_activate, - uint8_t card_halted, - uint8_t tx_crc, - uint8_t rx_crc, - uint8_t crypto1, - uint32_t timeout, - IN uint8_t *tx_data, - uint8_t tx_data_len, - OUT uint8_t *rx_data, - VAR uint8_t *rx_data_len); - -UFR_STATUS DL_API card_transceive_mode_startM(UFR_HANDLE hndUFR, - uint8_t tx_crc, - uint8_t rx_crc, - uint32_t rf_timeout, - uint32_t uart_timeout); - -UFR_STATUS DL_API card_transceive_mode_stopM(UFR_HANDLE hndUFR); - -UFR_STATUS DL_API card_halt_enableM(UFR_HANDLE hndUFR); - -UFR_STATUS DL_API uart_transceiveM(UFR_HANDLE hndUFR, - IN uint8_t *send_data, - uint8_t send_len, - OUT uint8_t *rcv_data, - uint32_t bytes_to_receive, - VAR uint32_t *rcv_len); - -UFR_STATUS DL_API open_ISO7816_interfaceM(UFR_HANDLE hndUFR, - OUT uint8_t *atr_data, - VAR uint8_t *atr_len); - -UFR_STATUS DL_API APDU_switch_to_ISO7816_interfaceM(UFR_HANDLE hndUFR); - -UFR_STATUS DL_API close_ISO7816_interface_no_APDUM(UFR_HANDLE hndUFR); - -UFR_STATUS DL_API close_ISO7816_interface_APDU_ISO14443_4M(UFR_HANDLE hndUFR); - -UFR_STATUS DL_API APDU_switch_to_ISO14443_4_interfaceM(UFR_HANDLE hndUFR); - -UFR_STATUS DL_API APDU_switch_off_from_ISO7816_interfaceM(UFR_HANDLE hndUFR); - -//------------------------------------------------------------------------------ -UFR_STATUS DL_API JCAppSelectByAidM(UFR_HANDLE hndUFR, - IN const uint8_t *aid, - uint8_t aid_len, - OUT uint8_t selection_response[16]); - -UFR_STATUS DL_API JCAppPutPrivateKeyM(UFR_HANDLE hndUFR, - uint8_t key_type, - uint8_t key_index, - IN const uint8_t *key, - uint16_t key_bit_len, - const IN uint8_t *key_param, - uint16_t key_parm_len); - -UFR_STATUS DL_API JCAppGenerateKeyPairM(UFR_HANDLE hndUFR, - uint8_t key_type, - uint8_t key_index, - uint8_t key_designator, - uint16_t key_bit_len, - IN const uint8_t *params, - uint16_t params_size); - -UFR_STATUS DL_API JCAppDeleteRsaKeyPairM(UFR_HANDLE hndUFR, - uint8_t key_index); - -UFR_STATUS DL_API JCAppDeleteEcKeyPairM(UFR_HANDLE hndUFR, - uint8_t key_index); - -UFR_STATUS DL_API JCAppSignatureBeginM(UFR_HANDLE hndUFR, - uint8_t cipher, - uint8_t digest, - uint8_t padding, - uint8_t key_index, - IN const uint8_t *chunk, - uint16_t chunk_len, - IN const uint8_t *alg_param, - uint16_t alg_parm_len); - -UFR_STATUS DL_API JCAppSignatureUpdateM(UFR_HANDLE hndUFR, - IN const uint8_t *chunk, - uint16_t chunk_len); - -UFR_STATUS DL_API JCAppSignatureEndM(UFR_HANDLE hndUFR, - VAR uint16_t *sig_len); - -UFR_STATUS DL_API JCAppGenerateSignatureM(UFR_HANDLE hndUFR, - uint8_t cipher, - uint8_t digest, - uint8_t padding, - uint8_t key_index, - IN const uint8_t *plain_data, - uint16_t plain_data_len, - VAR uint16_t *sig_len, - IN const uint8_t *alg_param, - uint16_t alg_parm_len); - -UFR_STATUS DL_API JCAppPutObjM(UFR_HANDLE hndUFR, - uint8_t obj_type, - uint8_t obj_index, - IN uint8_t *obj, - int16_t obj_size, - IN uint8_t *id, - uint8_t id_size); - -UFR_STATUS DL_API JCAppPutObjSubjectM(UFR_HANDLE hndUFR, - uint8_t obj_type, - uint8_t obj_index, - IN uint8_t *subject, - uint8_t size); - -UFR_STATUS DL_API JCAppInvalidateCertM(UFR_HANDLE hndUFR, - uint8_t obj_type, - uint8_t obj_index); - -UFR_STATUS DL_API JCAppGetObjIdM(UFR_HANDLE hndUFR, - uint8_t obj_type, - uint8_t obj_index, - OUT uint8_t *id, - VAR uint16_t *id_size); // when id == NULL returns size - -UFR_STATUS DL_API JCAppGetObjSubjectM(UFR_HANDLE hndUFR, - uint8_t obj_type, - uint8_t obj_index, - OUT uint8_t *subject, - VAR uint16_t *size); // when subject == NULL returns size - -UFR_STATUS DL_API JCAppGetObjM(UFR_HANDLE hndUFR, - uint8_t obj_type, - uint8_t obj_index, - OUT uint8_t *obj, - int16_t size); // when obj == NULL returns size - -UFR_STATUS DL_API JCAppLoginM(UFR_HANDLE hndUFR, - uint8_t SO, - IN uint8_t *pin, - uint8_t pinSize); - -UFR_STATUS DL_API JCAppGetPinTriesRemainingM(UFR_HANDLE hndUFR, - dl_sec_code_t secureCodeType, - VAR uint16_t *triesRemaining); - -UFR_STATUS DL_API JCAppPinChangeM(UFR_HANDLE hndUFR, - dl_sec_code_t secureCodeType, - IN uint8_t *newPin, - uint8_t newPinSize); - -UFR_STATUS DL_API JCAppPinUnblockM(UFR_HANDLE hndUFR, - uint8_t SO, - IN uint8_t *puk, - uint8_t pukSize); - -UFR_STATUS DL_API JCAppPinEnableM(UFR_HANDLE hndUFR, uint8_t SO); - -UFR_STATUS DL_API JCAppPinDisableM(UFR_HANDLE hndUFR, uint8_t SO); - -UFR_STATUS DL_API JCAppGetRsaPublicKeyM(UFR_HANDLE hndUFR, - uint8_t key_index, - OUT uint8_t *modulus, - VAR uint16_t *modulus_size, - OUT uint8_t *exponent, - VAR uint16_t *exponent_size); // when modulus == NULL, returns sizes and exponent ignored - -UFR_STATUS DL_API JCAppGetEcPublicKeyM(UFR_HANDLE hndUFR, - uint8_t key_index, - OUT uint8_t *keyW, - VAR uint16_t *kexWSize, - OUT uint8_t *field, - VAR uint16_t *field_size, - OUT uint8_t *ab, - VAR uint16_t *ab_size, - OUT uint8_t *g, - VAR uint16_t *g_size, - OUT uint8_t *r, - VAR uint16_t *r_size, - VAR uint16_t *k, - VAR uint16_t *key_size_bits, - VAR uint16_t *key_designator); // when keyW == NULL, returns size - -UFR_STATUS DL_API JCAppGetEcKeySizeBitsM(UFR_HANDLE hndUFR, - uint8_t key_index, - VAR uint16_t *key_size_bits, - VAR uint16_t *key_designator); -//------------------------------------------------------------------------------ -UFR_STATUS DL_API JCStorageGetFilesListSizeM(UFR_HANDLE hndUFR, VAR uint32_t *list_size); -UFR_STATUS DL_API JCStorageListFilesM(UFR_HANDLE hndUFR, OUT uint8_t *list, uint32_t list_bytes_allocated); -UFR_STATUS DL_API JCStorageGetFileSizeM(UFR_HANDLE hndUFR, uint8_t card_file_index, VAR uint32_t *file_size); -UFR_STATUS DL_API JCStorageReadFileM(UFR_HANDLE hndUFR, uint8_t card_file_index, OUT uint8_t *data, uint32_t data_bytes_allocated); -UFR_STATUS DL_API JCStorageReadFileToFileSystemM(UFR_HANDLE hndUFR, uint8_t card_file_index, IN const char *file_system_path_name); -UFR_STATUS DL_API JCStorageWriteFileM(UFR_HANDLE hndUFR, uint8_t card_file_index, IN const uint8_t *data, uint32_t data_size); -UFR_STATUS DL_API JCStorageWriteFileFromFileSystemM(UFR_HANDLE hndUFR, uint8_t card_file_index, IN const char *file_system_path_name); -UFR_STATUS DL_API JCStorageDeleteFileM(UFR_HANDLE hndUFR, uint8_t file_index); -//------------------------------------------------------------------------------ -UFR_STATUS DL_API MRTDAppSelectAndAuthenticateBacM(UFR_HANDLE hndUFR, IN const uint8_t mrz_proto_key[25], OUT uint8_t *ksenc, OUT uint8_t *ksmac, - VAR uint64_t *send_sequence_cnt); -UFR_STATUS DL_API MRTDFileReadBacToHeapM(UFR_HANDLE hndUFR, IN const uint8_t *file_index, VAR uint8_t **output, OUT uint32_t *output_length, IN const uint8_t *ksenc, - IN const uint8_t *ksmac, VAR uint64_t *send_sequence_cnt); -//############################################################################# - -UFR_STATUS DL_API uFR_DESFIRE_Start(void); -UFR_STATUS DL_API uFR_DESFIRE_StartM(UFR_HANDLE hndUFR); -UFR_STATUS DL_API uFR_DESFIRE_Stop(void); -UFR_STATUS DL_API uFR_DESFIRE_StopM(UFR_HANDLE hndUFR); -UFR_STATUS DL_API uFR_APDU_Start(void); // Alias for uFR_DESFIRE_Start() -UFR_STATUS DL_API uFR_APDU_StartM(UFR_HANDLE hndUFR); // Alias for uFR_DESFIRE_StartM() -UFR_STATUS DL_API uFR_APDU_Stop(void); // Alias for uFR_DESFIRE_Stop() -UFR_STATUS DL_API uFR_APDU_StopM(UFR_HANDLE hndUFR); // Alias for uFR_DESFIRE_StopM() - -//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ - -UFR_STATUS DL_API uFR_int_GetDesfireUidM(UFR_HANDLE hndUFR, - uint8_t aes_key_nr, - uint32_t aid, - uint8_t aid_key_nr, - OUT uint8_t *card_uid, - VAR uint8_t *card_uid_len, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_int_GetDesfireUid_aesM(UFR_HANDLE hndUFR, - uint8_t aes_key_nr, - uint32_t aid, - uint8_t aid_key_nr, - OUT uint8_t *card_uid, - VAR uint8_t *card_uid_len, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_int_GetDesfireUid_desM(UFR_HANDLE hndUFR, - uint8_t des_key_nr, - uint32_t aid, - uint8_t aid_key_nr, - OUT uint8_t *card_uid, - VAR uint8_t *card_uid_len, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_int_GetDesfireUid_2k3desM(UFR_HANDLE hndUFR, - uint8_t des2k_key_nr, - uint32_t aid, - uint8_t aid_key_nr, - OUT uint8_t *card_uid, - VAR uint8_t *card_uid_len, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_int_GetDesfireUid_3k3desM(UFR_HANDLE hndUFR, - IN uint8_t des3k_key_nr, - uint32_t aid, - uint8_t aid_key_nr, - OUT uint8_t *card_uid, - VAR uint8_t *card_uid_len, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_int_GetDesfireUid_PK_M(UFR_HANDLE hndUFR, - IN uint8_t *aes_key_ext, - uint32_t aid, - uint8_t aid_key_nr, - OUT uint8_t *card_uid, - VAR uint8_t *card_uid_len, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_int_GetDesfireUid_aes_PK_M(UFR_HANDLE hndUFR, - IN uint8_t *aes_key_ext, - uint32_t aid, - uint8_t aid_key_nr, - OUT uint8_t *card_uid, - VAR uint8_t *card_uid_len, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_int_GetDesfireUid_des_PK_M(UFR_HANDLE hndUFR, - IN uint8_t *des_key_ext, - uint32_t aid, - uint8_t aid_key_nr, - OUT uint8_t *card_uid, - VAR uint8_t *card_uid_len, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_int_GetDesfireUid_2k3des_PK_M(UFR_HANDLE hndUFR, - IN uint8_t *des2k_key_ext, - uint32_t aid, - uint8_t aid_key_nr, - OUT uint8_t *card_uid, - VAR uint8_t *card_uid_len, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_int_GetDesfireUid_3k3des_PK_M(UFR_HANDLE hndUFR, - IN uint8_t *des3k_key_ext, - uint32_t aid, - uint8_t aid_key_nr, - OUT uint8_t *card_uid, - VAR uint8_t *card_uid_len, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_SAM_GetDesfireUidAesAuthM(UFR_HANDLE hndUFR, - uint8_t aes_key_nr, - uint32_t aid, - uint8_t aid_key_nr, - OUT uint8_t *card_uid, - VAR uint8_t *card_uid_len, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_SAM_GetDesfireUid3k3desAuthM(UFR_HANDLE hndUFR, - uint8_t des3k_key_nr, - uint32_t aid, - uint8_t aid_key_nr, - OUT uint8_t *card_uid, - VAR uint8_t *card_uid_len, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); - -UFR_STATUS DL_API uFR_int_DesfireFreeMemM(UFR_HANDLE hndUFR, - VAR uint32_t *free_mem_byte, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); - -UFR_STATUS DL_API uFR_int_DesfireFormatCardM(UFR_HANDLE hndUFR, - uint8_t aes_key_nr, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_int_DesfireFormatCard_aesM(UFR_HANDLE hndUFR, - uint8_t aes_key_nr, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_int_DesfireFormatCard_desM(UFR_HANDLE hndUFR, - uint8_t des_key_nr, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_int_DesfireFormatCard_2k3desM(UFR_HANDLE hndUFR, - uint8_t des2k_key_nr, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_int_DesfireFormatCard_3k3desM(UFR_HANDLE hndUFR, - uint8_t des3k_key_nr, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_int_DesfireFormatCard_PK_M(UFR_HANDLE hndUFR, - IN uint8_t *aes_key_ext, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_int_DesfireFormatCard_aes_PK_M(UFR_HANDLE hndUFR, - IN uint8_t *aes_key_ext, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_int_DesfireFormatCard_des_PK_M(UFR_HANDLE hndUFR, - IN uint8_t *des_key_ext, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_int_DesfireFormatCard_2k3des_PK_M(UFR_HANDLE hndUFR, - IN uint8_t *des2k_key_ext, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_int_DesfireFormatCard_3k3des_PK_M(UFR_HANDLE hndUFR, - IN uint8_t *des3k_key_ext, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_SAM_DesfireFormatCardAesAuthM(UFR_HANDLE hndUFR, - uint8_t aes_key_nr, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_SAM_DesfireFormatCard3k3desAuthM(UFR_HANDLE hndUFR, - uint8_t des3k_key_nr, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); - -UFR_STATUS DL_API uFR_int_DesfireCreateStdDataFileM(UFR_HANDLE hndUFR, - uint8_t aes_key_nr, - uint32_t aid, - uint8_t file_id, - uint32_t file_size, - uint8_t read_key_no, - uint8_t write_key_no, - uint8_t read_write_key_no, - uint8_t change_key_no, - uint8_t communication_settings, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_int_DesfireCreateStdDataFile_aesM(UFR_HANDLE hndUFR, - uint8_t aes_key_nr, - uint32_t aid, - uint8_t file_id, - uint32_t file_size, - uint8_t read_key_no, - uint8_t write_key_no, - uint8_t read_write_key_no, - uint8_t change_key_no, - uint8_t communication_settings, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_int_DesfireCreateStdDataFile_desM(UFR_HANDLE hndUFR, - uint8_t des_key_nr, - uint32_t aid, - uint8_t file_id, - uint32_t file_size, - uint8_t read_key_no, - uint8_t write_key_no, - uint8_t read_write_key_no, - uint8_t change_key_no, - uint8_t communication_settings, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_int_DesfireCreateStdDataFile_2k3desM(UFR_HANDLE hndUFR, - uint8_t des2k_key_nr, - uint32_t aid, - uint8_t file_id, - uint32_t file_size, - uint8_t read_key_no, - uint8_t write_key_no, - uint8_t read_write_key_no, - uint8_t change_key_no, - uint8_t communication_settings, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_int_DesfireCreateStdDataFile_3k3desM(UFR_HANDLE hndUFR, - uint8_t des3k_key_nr, - uint32_t aid, - uint8_t file_id, - uint32_t file_size, - uint8_t read_key_no, - uint8_t write_key_no, - uint8_t read_write_key_no, - uint8_t change_key_no, - uint8_t communication_settings, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_int_DesfireCreateStdDataFile_PK_M(UFR_HANDLE hndUFR, - IN uint8_t *aes_key_ext, - uint32_t aid, - uint8_t file_id, - uint32_t file_size, - uint8_t read_key_no, - uint8_t write_key_no, - uint8_t read_write_key_no, - uint8_t change_key_no, - uint8_t communication_settings, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_int_DesfireCreateStdDataFile_aes_PK_M(UFR_HANDLE hndUFR, - IN uint8_t *aes_key_ext, - uint32_t aid, - uint8_t file_id, - uint32_t file_size, - uint8_t read_key_no, - uint8_t write_key_no, - uint8_t read_write_key_no, - uint8_t change_key_no, - uint8_t communication_settings, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_int_DesfireCreateStdDataFile_des_PK_M(UFR_HANDLE hndUFR, - IN uint8_t *des_key_ext, - uint32_t aid, - uint8_t file_id, - uint32_t file_size, - uint8_t read_key_no, - uint8_t write_key_no, - uint8_t read_write_key_no, - uint8_t change_key_no, - uint8_t communication_settings, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_int_DesfireCreateStdDataFile_2k3des_PK_M(UFR_HANDLE hndUFR, - IN uint8_t *des2k_key_ext, - uint32_t aid, - uint8_t file_id, - uint32_t file_size, - uint8_t read_key_no, - uint8_t write_key_no, - uint8_t read_write_key_no, - uint8_t change_key_no, - uint8_t communication_settings, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_int_DesfireCreateStdDataFile_3k3des_PK_M(UFR_HANDLE hndUFR, - IN uint8_t *des3k_key_ext, - uint32_t aid, - uint8_t file_id, - uint32_t file_size, - uint8_t read_key_no, - uint8_t write_key_no, - uint8_t read_write_key_no, - uint8_t change_key_no, - uint8_t communication_settings, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_SAM_DesfireCreateStdDataFileAesAuthM(UFR_HANDLE hndUFR, - uint8_t aes_key_nr, - uint32_t aid, - uint8_t file_id, - uint32_t file_size, - uint8_t read_key_no, - uint8_t write_key_no, - uint8_t read_write_key_no, - uint8_t change_key_no, - uint8_t communication_settings, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_SAM_DesfireCreateStdDataFile3k3desAuthM(UFR_HANDLE hndUFR, - uint8_t des3k_key_nr, - uint32_t aid, - uint8_t file_id, - uint32_t file_size, - uint8_t read_key_no, - uint8_t write_key_no, - uint8_t read_write_key_no, - uint8_t change_key_no, - uint8_t communication_settings, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_int_DesfireCreateStdDataFile_no_auth_M(UFR_HANDLE hndUFR, - uint32_t aid, - uint8_t file_id, - uint32_t file_size, - uint8_t read_key_no, - uint8_t write_key_no, - uint8_t read_write_key_no, - uint8_t change_key_no, - uint8_t communication_settings, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); - -UFR_STATUS DL_API uFR_int_DesfireDeleteFileM(UFR_HANDLE hndUFR, - uint8_t aes_key_nr, - uint32_t aid, - uint8_t file_id, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_int_DesfireDeleteFile_aesM(UFR_HANDLE hndUFR, - uint8_t aes_key_nr, - uint32_t aid, - uint8_t file_id, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_int_DesfireDeleteFile_desM(UFR_HANDLE hndUFR, - uint8_t des_key_nr, - uint32_t aid, - uint8_t file_id, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_int_DesfireDeleteFile_2k3desM(UFR_HANDLE hndUFR, - uint8_t des2k_key_nr, - uint32_t aid, - uint8_t file_id, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_int_DesfireDeleteFile_3k3desM(UFR_HANDLE hndUFR, - uint8_t des3k_key_nr, - uint32_t aid, - uint8_t file_id, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_int_DesfireDeleteFile_PK_M(UFR_HANDLE hndUFR, - IN uint8_t *aes_key_ext, - uint32_t aid, - uint8_t file_id, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_int_DesfireDeleteFile_aes_PK_M(UFR_HANDLE hndUFR, - IN uint8_t *aes_key_ext, - uint32_t aid, - uint8_t file_id, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_int_DesfireDeleteFile_des_PK_M(UFR_HANDLE hndUFR, - IN uint8_t *des_key_ext, - uint32_t aid, - uint8_t file_id, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_int_DesfireDeleteFile_2k3des_PK_M(UFR_HANDLE hndUFR, - IN uint8_t *des2k_key_ext, - uint32_t aid, - uint8_t file_id, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_int_DesfireDeleteFile_3k3des_PK_M(UFR_HANDLE hndUFR, - IN uint8_t *des3k_key_ext, - uint32_t aid, - uint8_t file_id, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_SAM_DesfireDeleteFileAesAuthM(UFR_HANDLE hndUFR, - uint8_t aes_key_nr, - uint32_t aid, - uint8_t file_id, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_SAM_DesfireDeleteFile3k3desAuthM(UFR_HANDLE hndUFR, - uint8_t des3k_key_nr, - uint32_t aid, - uint8_t file_id, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); - -UFR_STATUS DL_API uFR_int_DesfireDeleteFile_no_auth_M(UFR_HANDLE hndUFR, - uint32_t aid, - uint8_t file_id, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_int_DesfireCreateAesApplicationM(UFR_HANDLE hndUFR, - uint8_t aes_key_nr, - uint32_t aid, - uint8_t setting, - uint8_t max_key_no, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_int_DesfireCreateAesApplication_aesM(UFR_HANDLE hndUFR, - uint8_t aes_key_nr, - uint32_t aid, - uint8_t setting, - uint8_t max_key_no, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_int_DesfireCreate3k3desApplication_aesM(UFR_HANDLE hndUFR, - uint8_t aes_key_nr, - uint32_t aid, - uint8_t setting, - uint8_t max_key_no, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_int_DesfireCreateDesApplication_aesM(UFR_HANDLE hndUFR, - uint8_t aes_key_nr, - uint32_t aid, - uint8_t setting, - uint8_t max_key_no, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_int_DesfireCreateAesApplication_3k3desM(UFR_HANDLE hndUFR, - uint8_t des3k_key_nr, - uint32_t aid, - uint8_t setting, - uint8_t max_key_no, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_int_DesfireCreate3k3desApplication_3k3desM(UFR_HANDLE hndUFR, - uint8_t des3k_key_nr, - uint32_t aid, - uint8_t setting, - uint8_t max_key_no, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_int_DesfireCreateDesApplication_3k3desM(UFR_HANDLE hndUFR, - uint8_t des3k_key_nr, - uint32_t aid, - uint8_t setting, - uint8_t max_key_no, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_int_DesfireCreateAesApplication_2k3desM(UFR_HANDLE hndUFR, - uint8_t des2k_key_nr, - uint32_t aid, - uint8_t setting, - uint8_t max_key_no, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_int_DesfireCreate3k3desApplication_2k3desM(UFR_HANDLE hndUFR, - uint8_t des2k_key_nr, - uint32_t aid, - uint8_t setting, - uint8_t max_key_no, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_int_DesfireCreateDesApplication_2k3desM(UFR_HANDLE hndUFR, - uint8_t des2k_key_nr, - uint32_t aid, - uint8_t setting, - uint8_t max_key_no, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_int_DesfireCreateAesApplication_desM(UFR_HANDLE hndUFR, - uint8_t des_key_nr, - uint32_t aid, - uint8_t setting, - uint8_t max_key_no, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_int_DesfireCreate3k3desApplication_desM(UFR_HANDLE hndUFR, - uint8_t des_key_nr, - uint32_t aid, - uint8_t setting, - uint8_t max_key_no, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_int_DesfireCreateDesApplication_desM(UFR_HANDLE hndUFR, - uint8_t des_key_nr, - uint32_t aid, - uint8_t setting, - uint8_t max_key_no, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_int_DesfireCreateAesApplication_PK_M(UFR_HANDLE hndUFR, - IN uint8_t *aes_key_ext, - uint32_t aid, - uint8_t setting, - uint8_t max_key_no, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_int_DesfireCreateAesApplication_aes_PK_M(UFR_HANDLE hndUFR, - IN uint8_t *aes_key_ext, - uint32_t aid, - uint8_t setting, - uint8_t max_key_no, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_int_DesfireCreate3k3desApplication_aes_PK_M(UFR_HANDLE hndUFR, - IN uint8_t *aes_key_ext, - uint32_t aid, - uint8_t setting, - uint8_t max_key_no, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_int_DesfireCreateDesApplication_aes_PK_M(UFR_HANDLE hndUFR, - IN uint8_t *aes_key_ext, - uint32_t aid, - uint8_t setting, - uint8_t max_key_no, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_int_DesfireCreateAesApplication_3k3des_PK_M(UFR_HANDLE hndUFR, - IN uint8_t *des3k_key_ext, - uint32_t aid, - uint8_t setting, - uint8_t max_key_no, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_int_DesfireCreate3k3desApplication_3k3des_PK_M(UFR_HANDLE hndUFR, - IN uint8_t *des3k_key_ext, - uint32_t aid, - uint8_t setting, - uint8_t max_key_no, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_int_DesfireCreateDesApplication_3k3des_PK_M(UFR_HANDLE hndUFR, - IN uint8_t *des3k_key_ext, - uint32_t aid, - uint8_t setting, - uint8_t max_key_no, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_int_DesfireCreateAesApplication_2k3des_PK_M(UFR_HANDLE hndUFR, - IN uint8_t *des2k_key_ext, - uint32_t aid, - uint8_t setting, - uint8_t max_key_no, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_int_DesfireCreate3k3desApplication_2k3des_PK_M(UFR_HANDLE hndUFR, - IN uint8_t *des2k_key_ext, - uint32_t aid, - uint8_t setting, - uint8_t max_key_no, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_int_DesfireCreateDesApplication_2k3des_PK_M(UFR_HANDLE hndUFR, - IN uint8_t *des2k_key_ext, - uint32_t aid, - uint8_t setting, - uint8_t max_key_no, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_int_DesfireCreateAesApplication_des_PK_M(UFR_HANDLE hndUFR, - IN uint8_t *des_key_ext, - uint32_t aid, - uint8_t setting, - uint8_t max_key_no, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_int_DesfireCreate3k3desApplication_des_PK_M(UFR_HANDLE hndUFR, - IN uint8_t *des_key_ext, - uint32_t aid, - uint8_t setting, - uint8_t max_key_no, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_int_DesfireCreateDesApplication_des_PK_M(UFR_HANDLE hndUFR, - IN uint8_t *des_key_ext, - uint32_t aid, - uint8_t setting, - uint8_t max_key_no, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_SAM_DesfireCreateAesApplicationAesAuthM(UFR_HANDLE hndUFR, - uint8_t aes_key_nr, - uint32_t aid, - uint8_t setting, - uint8_t max_key_no, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_SAM_DesfireCreate3k3desApplicationAesAuthM(UFR_HANDLE hndUFR, - uint8_t aes_key_nr, uint32_t aid, - uint8_t setting, - uint8_t max_key_no, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_SAM_DesfireCreateAesApplication3k3desAuthM(UFR_HANDLE hndUFR, - uint8_t des3k_key_nr, - uint32_t aid, - uint8_t setting, - uint8_t max_key_no, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_SAM_DesfireCreate3k3desApplication3k3desAuthM(UFR_HANDLE hndUFR, - uint8_t des3k_key_nr, - uint32_t aid, - uint8_t setting, - uint8_t max_key_no, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_int_DesfireCreateAesApplication_no_auth_M(UFR_HANDLE hndUFR, - uint32_t aid, - uint8_t setting, - uint8_t max_key_no, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_int_DesfireCreate3k3desApplication_no_auth_M(UFR_HANDLE hndUFR, - uint32_t aid, - uint8_t setting, - uint8_t max_key_no, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_int_DesfireCreateDesApplication_no_auth_M(UFR_HANDLE hndUFR, - uint32_t aid, - uint8_t setting, - uint8_t max_key_no, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); - -UFR_STATUS DL_API uFR_int_DesfireDeleteApplicationM(UFR_HANDLE hndUFR, - uint8_t aes_key_nr, - uint32_t aid, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_int_DesfireDeleteApplication_aesM(UFR_HANDLE hndUFR, - uint8_t aes_key_nr, - uint32_t aid, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_int_DesfireDeleteApplication_desM(UFR_HANDLE hndUFR, - uint8_t des_key_nr, - uint32_t aid, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_int_DesfireDeleteApplication_2k3desM(UFR_HANDLE hndUFR, - uint8_t des2k_key_nr, - uint32_t aid, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_int_DesfireDeleteApplication_3k3desM(UFR_HANDLE hndUFR, - uint8_t des3k_key_nr, - uint32_t aid, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_int_DesfireDeleteApplication_PK_M(UFR_HANDLE hndUFR, - IN uint8_t *aes_key_ext, - uint32_t aid, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_int_DesfireDeleteApplication_aes_PK_M(UFR_HANDLE hndUFR, - IN uint8_t *aes_key_ext, - uint32_t aid, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_int_DesfireDeleteApplication_des_PK_M(UFR_HANDLE hndUFR, - IN uint8_t *des_key_ext, - uint32_t aid, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_int_DesfireDeleteApplication_2k3des_PK_M(UFR_HANDLE hndUFR, - IN uint8_t *des2k_key_ext, - uint32_t aid, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_int_DesfireDeleteApplication_3k3des_PK_M(UFR_HANDLE hndUFR, - IN uint8_t *des3k_key_ext, - uint32_t aid, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_SAM_DesfireDeleteApplicationAesAuthM(UFR_HANDLE hndUFR, - uint8_t aes_key_nr, - uint32_t aid, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_SAM_DesfireDeleteApplication3k3desAuthM(UFR_HANDLE hndUFR, - uint8_t des3k_key_nr, - uint32_t aid, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); - -UFR_STATUS DL_API uFR_int_DesfireSetConfigurationM(UFR_HANDLE hndUFR, - uint8_t aes_key_nr, - uint8_t random_uid, - uint8_t format_disable, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_int_DesfireSetConfiguration_aesM(UFR_HANDLE hndUFR, - uint8_t aes_key_nr, - uint8_t random_uid, - uint8_t format_disable, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_int_DesfireSetConfiguration_desM(UFR_HANDLE hndUFR, - uint8_t des_key_nr, - uint8_t random_uid, - uint8_t format_disable, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_int_DesfireSetConfiguration_2k3desM(UFR_HANDLE hndUFR, - uint8_t des2k_key_nr, - uint8_t random_uid, - uint8_t format_disable, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_int_DesfireSetConfiguration_3k3desM(UFR_HANDLE hndUFR, - uint8_t des3k_key_nr, - uint8_t random_uid, - uint8_t format_disable, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_int_DesfireSetConfiguration_PK_M(UFR_HANDLE hndUFR, - IN uint8_t *aes_key_ext, - uint8_t random_uid, - uint8_t format_disable, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_int_DesfireSetConfiguration_aes_PK_M(UFR_HANDLE hndUFR, - IN uint8_t *aes_key_ext, - uint8_t random_uid, - uint8_t format_disable, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_int_DesfireSetConfiguration_des_PK_M(UFR_HANDLE hndUFR, - IN uint8_t *des_key_ext, - uint8_t random_uid, - uint8_t format_disable, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_int_DesfireSetConfiguration_2k3des_PK_M(UFR_HANDLE hndUFR, - IN uint8_t *des2k_key_ext, - uint8_t random_uid, - uint8_t format_disable, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_int_DesfireSetConfiguration_3k3des_PK_M(UFR_HANDLE hndUFR, - IN uint8_t *des3k_key_ext, - uint8_t random_uid, - uint8_t format_disable, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_SAM_DesfireSetConfigurationAesAuthM(UFR_HANDLE hndUFR, - uint8_t aes_key_nr, - uint8_t random_uid, - uint8_t format_disable, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_SAM_DesfireSetConfiguration3k3desAuthM(UFR_HANDLE hndUFR, - uint8_t des3k_key_nr, - uint8_t random_uid, - uint8_t format_disable, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); - -UFR_STATUS DL_API uFR_int_DesfireGetKeySettingsM(UFR_HANDLE hndUFR, - uint8_t aes_key_nr, - uint32_t aid, - VAR uint8_t *setting, - VAR uint8_t *max_key_no, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_int_DesfireGetKeySettings_aesM(UFR_HANDLE hndUFR, - uint8_t aes_key_nr, - uint32_t aid, - VAR uint8_t *setting, - VAR uint8_t *max_key_no, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_int_DesfireGetKeySettings_desM(UFR_HANDLE hndUFR, - uint8_t des_key_nr, - uint32_t aid, - VAR uint8_t *setting, - VAR uint8_t *max_key_no, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_int_DesfireGetKeySettings_2k3desM(UFR_HANDLE hndUFR, - uint8_t des2k_key_nr, - uint32_t aid, - VAR uint8_t *setting, - VAR uint8_t *max_key_no, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_int_DesfireGetKeySettings_3k3desM(UFR_HANDLE hndUFR, - uint8_t des3k_key_nr, - uint32_t aid, - VAR uint8_t *setting, - VAR uint8_t *max_key_no, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_int_DesfireGetKeySettings_PK_M(UFR_HANDLE hndUFR, - IN uint8_t *aes_key_ext, - uint32_t aid, - VAR uint8_t *setting, - VAR uint8_t *max_key_no, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_int_DesfireGetKeySettings_aes_PK_M(UFR_HANDLE hndUFR, - IN uint8_t *aes_key_ext, - uint32_t aid, - VAR uint8_t *setting, - VAR uint8_t *max_key_no, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_int_DesfireGetKeySettings_des_PK_M(UFR_HANDLE hndUFR, - IN uint8_t *des_key_ext, - uint32_t aid, - VAR uint8_t *setting, - VAR uint8_t *max_key_no, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_int_DesfireGetKeySettings_2k3des_PK_M(UFR_HANDLE hndUFR, - IN uint8_t *des2k_key_ext, - uint32_t aid, - VAR uint8_t *setting, - VAR uint8_t *max_key_no, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_int_DesfireGetKeySettings_3k3des_PK_M(UFR_HANDLE hndUFR, - IN uint8_t *des3k_key_ext, - uint32_t aid, - VAR uint8_t *setting, - VAR uint8_t *max_key_no, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_SAM_DesfireGetKeySettingsAesAuthM(UFR_HANDLE hndUFR, - uint8_t aes_key_nr, - uint32_t aid, - VAR uint8_t *setting, - VAR uint8_t *max_key_no, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_SAM_DesfireGetKeySettings3k3desAuthM(UFR_HANDLE hndUFR, - uint8_t des3k_key_nr, - uint32_t aid, - VAR uint8_t *setting, - VAR uint8_t *max_key_no, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); - - -UFR_STATUS DL_API uFR_int_DesfireChangeKeySettingsM(UFR_HANDLE hndUFR, - uint8_t aes_key_nr, - uint32_t aid, - uint8_t setting, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_int_DesfireChangeKeySettings_aesM(UFR_HANDLE hndUFR, - uint8_t aes_key_nr, - uint32_t aid, - uint8_t setting, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_int_DesfireChangeKeySettings_desM(UFR_HANDLE hndUFR, - uint8_t des_key_nr, - uint32_t aid, - uint8_t setting, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_int_DesfireChangeKeySettings_2k3desM(UFR_HANDLE hndUFR, - uint8_t des2k_key_nr, - uint32_t aid, - uint8_t setting, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_int_DesfireChangeKeySettings_3k3desM(UFR_HANDLE hndUFR, - uint8_t des3k_key_nr, - uint32_t aid, - uint8_t setting, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_int_DesfireChangeKeySettings_PK_M(UFR_HANDLE hndUFR, - IN uint8_t *aes_key_ext, - uint32_t aid, - uint8_t setting, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_int_DesfireChangeKeySettings_aes_PK_M(UFR_HANDLE hndUFR, - IN uint8_t *aes_key_ext, - uint32_t aid, - uint8_t setting, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_int_DesfireChangeKeySettings_des_PK_M(UFR_HANDLE hndUFR, - IN uint8_t *des_key_ext, - uint32_t aid, - uint8_t setting, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_int_DesfireChangeKeySettings_2k3des_PK_M(UFR_HANDLE hndUFR, - IN uint8_t *des2k_key_ext, - uint32_t aid, - uint8_t setting, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_int_DesfireChangeKeySettings_3k3des_PK_M(UFR_HANDLE hndUFR, - IN uint8_t *des3k_key_ext, - uint32_t aid, - uint8_t setting, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_SAM_DesfireChangeKeySettingsAesAuthM(UFR_HANDLE hndUFR, - uint8_t aes_key_nr, - uint32_t aid, - uint8_t setting, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_SAM_DesfireChangeKeySettings3k3desAuthM(UFR_HANDLE hndUFR, - uint8_t des3k_key_nr, - uint32_t aid, - uint8_t setting, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); - -UFR_STATUS DL_API uFR_int_DesfireChangeAesKeyM(UFR_HANDLE hndUFR, - uint8_t aes_key_nr, - uint32_t aid, - uint8_t aid_key_no_auth, - IN uint8_t new_aes_key[16], - uint8_t aid_key_no, - IN uint8_t old_aes_key[16], - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_int_DesfireChangeAesKey_aesM(UFR_HANDLE hndUFR, - uint8_t aes_key_nr, - uint32_t aid, - uint8_t aid_key_no_auth, - uint8_t new_aes_key_nr, - uint8_t aid_key_no, - uint8_t old_aes_key_nr, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_int_DesfireChangeDesKey_desM(UFR_HANDLE hndUFR, - uint8_t auth_des_key_nr, - uint32_t aid, - uint8_t aid_key_no_auth, - uint8_t new_des_key_nr, - uint8_t aid_key_no, - uint8_t old_des_key_nr, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_int_DesfireChangeDesKey_desM(UFR_HANDLE hndUFR, - uint8_t auth_des_key_nr, - uint32_t aid, - uint8_t aid_key_no_auth, - uint8_t new_des_key_nr, - uint8_t aid_key_no, - uint8_t old_des_key_nr, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_int_DesfireChange2K3DesKey_desM(UFR_HANDLE hndUFR, - uint8_t auth_des_key_nr, - uint32_t aid, - uint8_t aid_key_no_auth, - uint8_t new_2k3des_key_nr, - uint8_t aid_key_no, - uint8_t old_2k3des_key_nr, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_int_DesfireChangeDesKey_2k3desM(UFR_HANDLE hndUFR, - uint8_t auth_des2k_key_nr, - uint32_t aid, - uint8_t aid_key_no_auth, - uint8_t new_des_key_nr, - uint8_t aid_key_no, - uint8_t old_des_key_nr, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_int_DesfireChange2K3DesKey_2k3desM(UFR_HANDLE hndUFR, - uint8_t auth_des2k_key_nr, - uint32_t aid, - uint8_t aid_key_no_auth, - uint8_t new_2k3des_key_nr, - uint8_t aid_key_no, - uint8_t old_2k3des_key_nr, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_int_DesfireChange3K3DesKey_3k3desM(UFR_HANDLE hndUFR, - uint8_t auth_des3k_key_nr, - uint32_t aid, - uint8_t aid_key_no_auth, - uint8_t new_3k3des_key_nr, - uint8_t aid_key_no, - uint8_t old_3k3des_key_nr, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_int_DesfireChangeMasterKeyM(UFR_HANDLE hndUFR, - uint8_t auth_key_nr, - uint8_t auth_key_type, - uint8_t new_key_nr, - uint8_t new_key_type, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_int_DesfireChangeAesKey_PK_M(UFR_HANDLE hndUFR, - IN uint8_t *aes_key_ext, - uint32_t aid, - uint8_t aid_key_no_auth, - IN uint8_t new_aes_key[16], - uint8_t aid_key_no, - IN uint8_t old_aes_key[16], - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_int_DesfireChangeAesKey_aes_PK_M(UFR_HANDLE hndUFR, - IN uint8_t *aes_key_ext, - uint32_t aid, - uint8_t aid_key_no_auth, - IN uint8_t new_aes_key[16], - uint8_t aid_key_no, - IN uint8_t old_aes_key[16], - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_int_DesfireChangeDesKey_des_PK_M(UFR_HANDLE hndUFR, - IN uint8_t *auth_des_key, - uint32_t aid, - uint8_t aid_key_no_auth, - IN uint8_t new_des_key[8], - uint8_t aid_key_no, - IN uint8_t old_des_key[8], - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_int_DesfireChange2K3DesKey_des_PK_M(UFR_HANDLE hndUFR, - IN uint8_t *auth_des_key, - uint32_t aid, - uint8_t aid_key_no_auth, - IN uint8_t new_2k3des_key[16], - uint8_t aid_key_no, - IN uint8_t old_2k3des_key[16], - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_int_DesfireChangeDesKey_2k3des_PK_M(UFR_HANDLE hndUFR, - IN uint8_t *auth_des2k_key, - uint32_t aid, - uint8_t aid_key_no_auth, - IN uint8_t new_des_key[8], - uint8_t aid_key_no, - IN uint8_t old_des_key[8], - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_int_DesfireChange2K3DesKey_2k3des_PK_M(UFR_HANDLE hndUFR, - IN uint8_t *auth_des2k_key, - uint32_t aid, - uint8_t aid_key_no_auth, - IN uint8_t new_2k3des_key[16], - uint8_t aid_key_no, - IN uint8_t old_2k3des_key[16], - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_int_DesfireChange3K3DesKey_3k3des_PK_M(UFR_HANDLE hndUFR, - IN uint8_t *auth_des3k_key, - uint32_t aid, - uint8_t aid_key_no_auth, - IN uint8_t new_3k3des_key[24], - uint8_t aid_key_no, - IN uint8_t old_3k3des_key[24], - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_int_DesfireChangeMasterKey_PK_M(UFR_HANDLE hndUFR, - IN uint8_t *auth_key, - uint8_t auth_key_type, - IN uint8_t *new_key, - uint8_t new_key_type, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_SAM_DesfireChangeKey_AesAuthM(UFR_HANDLE hndUFR, - uint8_t aes_key_nr, - uint32_t aid, - uint8_t aid_key_no_auth, - uint8_t new_aes_key_nr, - uint8_t aid_key_no, - uint8_t old_aes_key_nr, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_SAM_DesfireChangeKey_3k3desAuthM(UFR_HANDLE hndUFR, - uint8_t des3k_key_nr, - uint32_t aid, - uint8_t aid_key_no_auth, - uint8_t new_aes_key_nr, - uint8_t aid_key_no, - uint8_t old_aes_key_nr, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); - -UFR_STATUS DL_API uFR_int_DesfireWriteAesKeyM(UFR_HANDLE hndUFR, - uint8_t aes_key_no, - IN uint8_t *aes_key); -UFR_STATUS DL_API uFR_int_DesfireWriteKeyM(UFR_HANDLE hndUFR, - uint8_t key_no, - IN uint8_t *key, - uint8_t key_type); - -UFR_STATUS DL_API uFR_int_DesfireReadStddDataFileM(UFR_HANDLE hndUFR, - uint8_t aes_key_nr, - uint32_t aid, - uint8_t aid_key_nr, - uint8_t file_id, - uint16_t offset, - uint16_t data_length, - uint8_t communication_settings, - OUT uint8_t *data, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_int_DesfireReadStddDataFile_aesM(UFR_HANDLE hndUFR, - uint8_t aes_key_nr, - uint32_t aid, - uint8_t aid_key_nr, - uint8_t file_id, - uint16_t offset, - uint16_t data_length, - uint8_t communication_settings, - OUT uint8_t *data, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_int_DesfireReadStddDataFile_desM(UFR_HANDLE hndUFR, - uint8_t des_key_nr, - uint32_t aid, - uint8_t aid_key_nr, - uint8_t file_id, - uint16_t offset, - uint16_t data_length, - uint8_t communication_settings, - OUT uint8_t *data, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_int_DesfireReadStddDataFile_2k3desM(UFR_HANDLE hndUFR, - uint8_t des2k_key_nr, - uint32_t aid, - uint8_t aid_key_nr, - uint8_t file_id, - uint16_t offset, - uint16_t data_length, - uint8_t communication_settings, - OUT uint8_t *data, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_int_DesfireReadStddDataFile_3k3desM(UFR_HANDLE hndUFR, - uint8_t des3k_key_nr, - uint32_t aid, - uint8_t aid_key_nr, - uint8_t file_id, - uint16_t offset, - uint16_t data_length, - uint8_t communication_settings, - OUT uint8_t *data, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_int_DesfireReadStdDataFile_PK_M(UFR_HANDLE hndUFR, - IN uint8_t *aes_key_ext, - uint32_t aid, - uint8_t aid_key_nr, - uint8_t file_id, - uint16_t offset, - uint16_t data_length, - uint8_t communication_settings, - OUT uint8_t *data, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_int_DesfireReadStdDataFile_aes_PK_M(UFR_HANDLE hndUFR, - IN uint8_t *aes_key_ext, - uint32_t aid, - uint8_t aid_key_nr, - uint8_t file_id, - uint16_t offset, - uint16_t data_length, - uint8_t communication_settings, - OUT uint8_t *data, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_int_DesfireReadStdDataFile_des_PK_M(UFR_HANDLE hndUFR, - IN uint8_t *des_key_ext, - uint32_t aid, - uint8_t aid_key_nr, - uint8_t file_id, - uint16_t offset, - uint16_t data_length, - uint8_t communication_settings, - OUT uint8_t *data, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_int_DesfireReadStdDataFile_2k3des_PK_M(UFR_HANDLE hndUFR, - IN uint8_t *des2k_key_ext, - uint32_t aid, - uint8_t aid_key_nr, - uint8_t file_id, - uint16_t offset, - uint16_t data_length, - uint8_t communication_settings, - OUT uint8_t *data, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_int_DesfireReadStdDataFile_3k3des_PK_M(UFR_HANDLE hndUFR, - IN uint8_t *des3k_key_ext, - uint32_t aid, - uint8_t aid_key_nr, - uint8_t file_id, - uint16_t offset, - uint16_t data_length, - uint8_t communication_settings, - OUT uint8_t *data, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_SAM_DesfireReadStdDataFileAesAuthM(UFR_HANDLE hndUFR, - uint8_t aes_key_nr, - uint32_t aid, - uint8_t aid_key_nr, - uint8_t file_id, - uint16_t offset, - uint16_t data_length, - uint8_t communication_settings, - OUT uint8_t *data, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_SAM_DesfireReadStdDataFile3k3desAuthM(UFR_HANDLE hndUFR, - uint8_t des3k_key_nr, - uint32_t aid, - uint8_t aid_key_nr, - uint8_t file_id, - uint16_t offset, - uint16_t data_length, - uint8_t communication_settings, - OUT uint8_t *data, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_int_DesfireReadStdDataFile_no_auth_M(UFR_HANDLE hndUFR, - uint32_t aid, - uint8_t aid_key_nr, - uint8_t file_id, - uint16_t offset, - uint16_t data_length, - uint8_t communication_settings, - OUT uint8_t *data, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); - -UFR_STATUS DL_API uFR_int_DesfireWriteStdDataFileM(UFR_HANDLE hndUFR, - uint8_t aes_key_nr, - uint32_t aid, - uint8_t aid_key_nr, - uint8_t file_id, - uint16_t offset, - uint16_t data_length, - uint8_t communication_settings, - IN uint8_t *data, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_int_DesfireWriteStdDataFile_aesM(UFR_HANDLE hndUFR, - uint8_t aes_key_nr, - uint32_t aid, - uint8_t aid_key_nr, - uint8_t file_id, - uint16_t offset, - uint16_t data_length, - uint8_t communication_settings, - IN uint8_t *data, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_int_DesfireWriteStdDataFile_3k3desM(UFR_HANDLE hndUFR, - uint8_t des3k_key_nr, - uint32_t aid, - uint8_t aid_key_nr, - uint8_t file_id, - uint16_t offset, - uint16_t data_length, - uint8_t communication_settings, - IN uint8_t *data, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_int_DesfireWriteStdDataFile_desM(UFR_HANDLE hndUFR, - uint8_t des_key_nr, - uint32_t aid, - uint8_t aid_key_nr, - uint8_t file_id, - uint16_t offset, - uint16_t data_length, - uint8_t communication_settings, - IN uint8_t *data, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_int_DesfireWriteStdDataFile_2k3desM(UFR_HANDLE hndUFR, - uint8_t des2k_key_nr, - uint32_t aid, - uint8_t aid_key_nr, - uint8_t file_id, - uint16_t offset, - uint16_t data_length, - uint8_t communication_settings, - IN uint8_t *data, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_int_DesfireWriteStdDataFile_PK_M(UFR_HANDLE hndUFR, - IN uint8_t *aes_key_ext, - uint32_t aid, - uint8_t aid_key_nr, - uint8_t file_id, - uint16_t offset, - uint16_t data_length, - uint8_t communication_settings, - IN uint8_t *data, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_int_DesfireWriteStdDataFile_aes_PK_M(UFR_HANDLE hndUFR, - IN uint8_t *aes_key_ext, - uint32_t aid, - uint8_t aid_key_nr, - uint8_t file_id, - uint16_t offset, - uint16_t data_length, - uint8_t communication_settings, - IN uint8_t *data, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_int_DesfireWriteStdDataFile_3k3des_PK_M(UFR_HANDLE hndUFR, - IN uint8_t *des3k_key_ext, - uint32_t aid, - uint8_t aid_key_nr, - uint8_t file_id, - uint16_t offset, - uint16_t data_length, - uint8_t communication_settings, - IN uint8_t *data, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_int_DesfireWriteStdDataFile_des_PK_M(UFR_HANDLE hndUFR, - IN uint8_t *des_key_ext, - uint32_t aid, - uint8_t aid_key_nr, - uint8_t file_id, - uint16_t offset, - uint16_t data_length, - uint8_t communication_settings, - IN uint8_t *data, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_int_DesfireWriteStdDataFile_2k3des_PK_M(UFR_HANDLE hndUFR, - IN uint8_t *des2k_key_ext, - uint32_t aid, - uint8_t aid_key_nr, - uint8_t file_id, - uint16_t offset, - uint16_t data_length, - uint8_t communication_settings, - IN uint8_t *data, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_SAM_DesfireWriteStdDataFileAesAuthM(UFR_HANDLE hndUFR, - uint8_t aes_key_nr, - uint32_t aid, - uint8_t aid_key_nr, - uint8_t file_id, - uint16_t offset, - uint16_t data_length, - uint8_t communication_settings, - IN uint8_t *data, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_SAM_DesfireWriteStdDataFile3k3desAuthM(UFR_HANDLE hndUFR, - uint8_t des3k_key_nr, - uint32_t aid, - uint8_t aid_key_nr, - uint8_t file_id, - uint16_t offset, - uint16_t data_length, - uint8_t communication_settings, - IN uint8_t *data, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_int_DesfireWriteStdDataFile_no_auth_M(UFR_HANDLE hndUFR, - uint32_t aid, - uint8_t aid_key_nr, - uint8_t file_id, - uint16_t offset, - uint16_t data_length, - uint8_t communication_settings, - IN uint8_t *data, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); - -UFR_STATUS DL_API uFR_int_DesfireCreateValueFileM(UFR_HANDLE hndUFR, - uint8_t aes_key_nr, - uint32_t aid, - uint8_t file_id, - int32_t lower_limit, - int32_t upper_limit, - int32_t value, - uint8_t limited_credit_enabled, - uint8_t read_key_no, - uint8_t write_key_no, - uint8_t read_write_key_no, - uint8_t change_key_no, - uint8_t communication_settings, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_int_DesfireCreateValueFile_desM(UFR_HANDLE hndUFR, - uint8_t des_key_nr, - uint32_t aid, - uint8_t file_id, - int32_t lower_limit, - int32_t upper_limit, - int32_t value, - uint8_t limited_credit_enabled, - uint8_t read_key_no, - uint8_t write_key_no, - uint8_t read_write_key_no, - uint8_t change_key_no, - uint8_t communication_settings, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_int_DesfireCreateValueFile_2k3desM(UFR_HANDLE hndUFR, - uint8_t des2k_key_nr, - uint32_t aid, - uint8_t file_id, - int32_t lower_limit, - int32_t upper_limit, - int32_t value, - uint8_t limited_credit_enabled, - uint8_t read_key_no, - uint8_t write_key_no, - uint8_t read_write_key_no, - uint8_t change_key_no, - uint8_t communication_settings, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_int_DesfireCreateValueFile_3k3desM(UFR_HANDLE hndUFR, - uint8_t des3k_key_nr, - uint32_t aid, - uint8_t file_id, - int32_t lower_limit, - int32_t upper_limit, - int32_t value, - uint8_t limited_credit_enabled, - uint8_t read_key_no, - uint8_t write_key_no, - uint8_t read_write_key_no, - uint8_t change_key_no, - uint8_t communication_settings, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_int_DesfireCreateValueFile_PK_M(UFR_HANDLE hndUFR, - IN uint8_t *aes_key_ext, - uint32_t aid, - uint8_t file_id, - int32_t lower_limit, - int32_t upper_limit, - int32_t value, - uint8_t limited_credit_enabled, - uint8_t read_key_no, - uint8_t write_key_no, - uint8_t read_write_key_no, - uint8_t change_key_no, - uint8_t communication_settings, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_int_DesfireCreateValueFile_des_PK_M(UFR_HANDLE hndUFR, - IN uint8_t *des_key_ext, - uint32_t aid, - uint8_t file_id, - int32_t lower_limit, - int32_t upper_limit, - int32_t value, - uint8_t limited_credit_enabled, - uint8_t read_key_no, - uint8_t write_key_no, - uint8_t read_write_key_no, - uint8_t change_key_no, - uint8_t communication_settings, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_int_DesfireCreateValueFile_2k3des_PK_M(UFR_HANDLE hndUFR, - IN uint8_t *des2k_key_ext, - uint32_t aid, - uint8_t file_id, - int32_t lower_limit, - int32_t upper_limit, - int32_t value, - uint8_t limited_credit_enabled, - uint8_t read_key_no, - uint8_t write_key_no, - uint8_t read_write_key_no, - uint8_t change_key_no, - uint8_t communication_settings, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_int_DesfireCreateValueFile_3k3des_PK_M(UFR_HANDLE hndUFR, - IN uint8_t *des3k_key_ext, - uint32_t aid, - uint8_t file_id, - int32_t lower_limit, - int32_t upper_limit, - int32_t value, - uint8_t limited_credit_enabled, - uint8_t read_key_no, - uint8_t write_key_no, - uint8_t read_write_key_no, - uint8_t change_key_no, - uint8_t communication_settings, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_SAM_DesfireCreateValueFileAesAuthM(UFR_HANDLE hndUFR, - uint8_t aes_key_nr, - uint32_t aid, - uint8_t file_id, - int32_t lower_limit, - int32_t upper_limit, - int32_t value, - uint8_t limited_credit_enabled, - uint8_t read_key_no, - uint8_t write_key_no, - uint8_t read_write_key_no, - uint8_t change_key_no, - uint8_t communication_settings, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_SAM_DesfireCreateValueFile3k3desAuthM(UFR_HANDLE hndUFR, - uint8_t des3k_key_nr, - uint32_t aid, - uint8_t file_id, - int32_t lower_limit, - int32_t upper_limit, - int32_t value, - uint8_t limited_credit_enabled, - uint8_t read_key_no, - uint8_t write_key_no, - uint8_t read_write_key_no, - uint8_t change_key_no, - uint8_t communication_settings, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_int_DesfireCreateValueFile_no_auth_M(UFR_HANDLE hndUFR, - uint32_t aid, - uint8_t file_id, - int32_t lower_limit, - int32_t upper_limit, - int32_t value, - uint8_t limited_credit_enabled, - uint8_t read_key_no, - uint8_t write_key_no, - uint8_t read_write_key_no, - uint8_t change_key_no, - uint8_t communication_settings, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); - -UFR_STATUS DL_API uFR_int_DesfireReadValueFileM(UFR_HANDLE hndUFR, - uint8_t aes_key_nr, - uint32_t aid, - uint8_t aid_key_nr, - uint8_t file_id, - uint8_t communication_settings, - VAR int32_t *value, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_int_DesfireReadValueFile_aesM(UFR_HANDLE hndUFR, - uint8_t aes_key_nr, - uint32_t aid, - uint8_t aid_key_nr, - uint8_t file_id, - uint8_t communication_settings, - VAR int32_t *value, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_int_DesfireReadValueFile_desM(UFR_HANDLE hndUFR, - uint8_t des_key_nr, - uint32_t aid, - uint8_t aid_key_nr, - uint8_t file_id, - uint8_t communication_settings, - VAR int32_t *value, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_int_DesfireReadValueFile_2k3desM(UFR_HANDLE hndUFR, - uint8_t des2k_key_nr, - uint32_t aid, - uint8_t aid_key_nr, - uint8_t file_id, - uint8_t communication_settings, - VAR int32_t *value, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_int_DesfireReadValueFile_3k3desM(UFR_HANDLE hndUFR, - uint8_t des3k_key_nr, - uint32_t aid, - uint8_t aid_key_nr, - uint8_t file_id, - uint8_t communication_settings, - VAR int32_t *value, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_int_DesfireReadValueFile_PK_M(UFR_HANDLE hndUFR, - IN uint8_t *aes_key_ext, - uint32_t aid, - uint8_t aid_key_nr, - uint8_t file_id, - uint8_t communication_settings, - VAR int32_t *value, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_int_DesfireReadValueFile_aes_PK_M(UFR_HANDLE hndUFR, - IN uint8_t *aes_key_ext, - uint32_t aid, - uint8_t aid_key_nr, - uint8_t file_id, - uint8_t communication_settings, - VAR int32_t *value, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_int_DesfireReadValueFile_des_PK_M(UFR_HANDLE hndUFR, - IN uint8_t *des_key_ext, - uint32_t aid, - uint8_t aid_key_nr, - uint8_t file_id, - uint8_t communication_settings, - VAR int32_t *value, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_int_DesfireReadValueFile_2k3des_PK_M(UFR_HANDLE hndUFR, - IN uint8_t *des2k_key_ext, - uint32_t aid, - uint8_t aid_key_nr, - uint8_t file_id, - uint8_t communication_settings, - VAR int32_t *value, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_int_DesfireReadValueFile_3k3des_PK_M(UFR_HANDLE hndUFR, - IN uint8_t *des3k_key_ext, - uint32_t aid, - uint8_t aid_key_nr, - uint8_t file_id, - uint8_t communication_settings, - VAR int32_t *value, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_SAM_DesfireReadValueFileAesAuthM(UFR_HANDLE hndUFR, - uint8_t aes_key_nr, - uint32_t aid, - uint8_t aid_key_nr, - uint8_t file_id, - uint8_t communication_settings, - VAR int32_t *value, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_SAM_DesfireReadValueFile3k3desAuthM(UFR_HANDLE hndUFR, - uint8_t des3k_key_nr, - uint32_t aid, - uint8_t aid_key_nr, - uint8_t file_id, - uint8_t communication_settings, - VAR int32_t *value, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_int_DesfireReadValueFile_no_auth_M(UFR_HANDLE hndUFR, - uint32_t aid, - uint8_t aid_key_nr, - uint8_t file_id, - uint8_t communication_settings, - VAR int32_t *value, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); - -UFR_STATUS DL_API uFR_int_DesfireIncreaseValueFileM(UFR_HANDLE hndUFR, - uint8_t aes_key_nr, - uint32_t aid, - uint8_t aid_key_nr, - uint8_t file_id, - uint8_t communication_settings, - uint32_t value, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_int_DesfireIncreaseValueFile_aesM(UFR_HANDLE hndUFR, - uint8_t aes_key_nr, - uint32_t aid, - uint8_t aid_key_nr, - uint8_t file_id, - uint8_t communication_settings, - uint32_t value, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_int_DesfireIncreaseValueFile_desM(UFR_HANDLE hndUFR, - uint8_t des_key_nr, - uint32_t aid, - uint8_t aid_key_nr, - uint8_t file_id, - uint8_t communication_settings, - uint32_t value, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_int_DesfireIncreaseValueFile_2k3desM(UFR_HANDLE hndUFR, - uint8_t des2k_key_nr, - uint32_t aid, - uint8_t aid_key_nr, - uint8_t file_id, - uint8_t communication_settings, - uint32_t value, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_int_DesfireIncreaseValueFile_3k3desM(UFR_HANDLE hndUFR, - uint8_t des3k_key_nr, - uint32_t aid, - uint8_t aid_key_nr, - uint8_t file_id, - uint8_t communication_settings, - uint32_t value, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_int_DesfireIncreaseValueFile_PK_M(UFR_HANDLE hndUFR, - IN uint8_t *aes_key_ext, - uint32_t aid, - uint8_t aid_key_nr, - uint8_t file_id, - uint8_t communication_settings, - uint32_t value, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_int_DesfireIncreaseValueFile_aes_PK_M(UFR_HANDLE hndUFR, - IN uint8_t *aes_key_ext, - uint32_t aid, - uint8_t aid_key_nr, - uint8_t file_id, - uint8_t communication_settings, - uint32_t value, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_int_DesfireIncreaseValueFile_des_PK_M(UFR_HANDLE hndUFR, - IN uint8_t *des_key_ext, - uint32_t aid, - uint8_t aid_key_nr, - uint8_t file_id, - uint8_t communication_settings, - uint32_t value, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_int_DesfireIncreaseValueFile_2k3des_PK_M(UFR_HANDLE hndUFR, - IN uint8_t *des2k_key_ext, - uint32_t aid, - uint8_t aid_key_nr, - uint8_t file_id, - uint8_t communication_settings, - uint32_t value, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_int_DesfireIncreaseValueFile_3k3des_PK_M(UFR_HANDLE hndUFR, - IN uint8_t *des3k_key_ext, - uint32_t aid, - uint8_t aid_key_nr, - uint8_t file_id, - uint8_t communication_settings, - uint32_t value, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_SAM_DesfireIncreaseValueFileAesAuthM(UFR_HANDLE hndUFR, - uint8_t aes_key_nr, - uint32_t aid, - uint8_t aid_key_nr, - uint8_t file_id, - uint8_t communication_settings, - uint32_t value, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_SAM_DesfireIncreaseValueFile3k3desAuthM(UFR_HANDLE hndUFR, - uint8_t des3k_key_nr, - uint32_t aid, - uint8_t aid_key_nr, - uint8_t file_id, - uint8_t communication_settings, - uint32_t value, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_int_DesfireIncreaseValueFile_no_auth_M(UFR_HANDLE hndUFR, - uint32_t aid, - uint8_t aid_key_nr, - uint8_t file_id, - uint8_t communication_settings, - uint32_t value, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); - -UFR_STATUS DL_API uFR_int_DesfireDecreaseValueFileM(UFR_HANDLE hndUFR, - uint8_t aes_key_nr, - uint32_t aid, - uint8_t aid_key_nr, - uint8_t file_id, - uint8_t communication_settings, - uint32_t value, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_int_DesfireDecreaseValueFile_aesM(UFR_HANDLE hndUFR, - uint8_t aes_key_nr, - uint32_t aid, - uint8_t aid_key_nr, - uint8_t file_id, - uint8_t communication_settings, - uint32_t value, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_int_DesfireDecreaseValueFile_desM(UFR_HANDLE hndUFR, - uint8_t des_key_nr, - uint32_t aid, - uint8_t aid_key_nr, - uint8_t file_id, - uint8_t communication_settings, - uint32_t value, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_int_DesfireDecreaseValueFile_2k3desM(UFR_HANDLE hndUFR, - uint8_t des2k_key_nr, - uint32_t aid, - uint8_t aid_key_nr, - uint8_t file_id, - uint8_t communication_settings, - uint32_t value, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_int_DesfireDecreaseValueFile_3k3desM(UFR_HANDLE hndUFR, - uint8_t des3k_key_nr, - uint32_t aid, - uint8_t aid_key_nr, - uint8_t file_id, - uint8_t communication_settings, - uint32_t value, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_int_DesfireDecreaseValueFile_PK_M(UFR_HANDLE hndUFR, - IN uint8_t *aes_key_ext, - uint32_t aid, - uint8_t aid_key_nr, - uint8_t file_id, - uint8_t communication_settings, - uint32_t value, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_int_DesfireDecreaseValueFile_aes_PK_M(UFR_HANDLE hndUFR, - IN uint8_t *aes_key_ext, - uint32_t aid, - uint8_t aid_key_nr, - uint8_t file_id, - uint8_t communication_settings, - uint32_t value, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_int_DesfireDecreaseValueFile_des_PK_M(UFR_HANDLE hndUFR, - IN uint8_t *des_key_ext, - uint32_t aid, - uint8_t aid_key_nr, - uint8_t file_id, - uint8_t communication_settings, - uint32_t value, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_int_DesfireDecreaseValueFile_2k3des_PK_M(UFR_HANDLE hndUFR, - IN uint8_t *des2k_key_ext, - uint32_t aid, - uint8_t aid_key_nr, - uint8_t file_id, - uint8_t communication_settings, - uint32_t value, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_int_DesfireDecreaseValueFile_3k3des_PK_M(UFR_HANDLE hndUFR, - IN uint8_t *des3k_key_ext, - uint32_t aid, - uint8_t aid_key_nr, - uint8_t file_id, - uint8_t communication_settings, - uint32_t value, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_SAM_DesfireDecreaseValueFileAesAuthM(UFR_HANDLE hndUFR, - uint8_t aes_key_nr, - uint32_t aid, - uint8_t aid_key_nr, - uint8_t file_id, - uint8_t communication_settings, - uint32_t value, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_SAM_DesfireDecreaseValueFile3k3desAuthM(UFR_HANDLE hndUFR, - uint8_t des3k_key_nr, - uint32_t aid, - uint8_t aid_key_nr, - uint8_t file_id, - uint8_t communication_settings, - uint32_t value, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_int_DesfireDecreaseValueFile_no_auth_M(UFR_HANDLE hndUFR, - uint32_t aid, - uint8_t aid_key_nr, - uint8_t file_id, - uint8_t communication_settings, - uint32_t value, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); - -UFR_STATUS DL_API uFR_int_DesfireGetApplicationIdsM(UFR_HANDLE hndUFR, - uint8_t aes_key_nr, - OUT uint32_t *application_ids, - VAR uint8_t *number_of_aplication_ids, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_int_DesfireGetApplicationIds_aesM(UFR_HANDLE hndUFR, - uint8_t aes_key_nr, - OUT uint32_t *application_ids, - VAR uint8_t *number_of_aplication_ids, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_int_DesfireGetApplicationIds_desM(UFR_HANDLE hndUFR, - uint8_t des_key_nr, - OUT uint32_t *application_ids, - VAR uint8_t *number_of_aplication_ids, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_int_DesfireGetApplicationIds_2k3desM(UFR_HANDLE hndUFR, - uint8_t des2k_key_nr, - OUT uint32_t *application_ids, - VAR uint8_t *number_of_aplication_ids, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_int_DesfireGetApplicationIds_3k3desM(UFR_HANDLE hndUFR, - uint8_t des3k_key_nr, - OUT uint32_t *application_ids, - VAR uint8_t *number_of_aplication_ids, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_SAM_DesfireGetApplicationIdsAesAuthM(UFR_HANDLE hndUFR, - uint8_t aes_key_nr, - OUT uint32_t *application_ids, - VAR uint8_t *number_of_aplication_ids, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_SAM_DesfireGetApplicationIds3k3desAuthM(UFR_HANDLE hndUFR, - uint8_t des3k_key_nr, - OUT uint32_t *application_ids, - VAR uint8_t *number_of_aplication_ids, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_int_DesfireGetApplicationIds_PK_M(UFR_HANDLE hndUFR, - IN uint8_t *aes_key_ext, - OUT uint32_t *application_ids, - VAR uint8_t *number_of_aplication_ids, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_int_DesfireGetApplicationIds_aes_PK_M(UFR_HANDLE hndUFR, - IN uint8_t *aes_key_ext, - OUT uint32_t *application_ids, - VAR uint8_t *number_of_aplication_ids, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_int_DesfireGetApplicationIds_des_PK_M(UFR_HANDLE hndUFR, - IN uint8_t *des_key_ext, - OUT uint32_t *application_ids, - VAR uint8_t *number_of_aplication_ids, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_int_DesfireGetApplicationIds_2k3aes_PK_M(UFR_HANDLE hndUFR, - IN uint8_t *des2k_key_ext, - OUT uint32_t *application_ids, - VAR uint8_t *number_of_aplication_ids, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_int_DesfireGetApplicationIds_3k3des_PK_M(UFR_HANDLE hndUFR, - IN uint8_t *des3k_key_ext, - OUT uint32_t *application_ids, - VAR uint8_t *number_of_aplication_ids, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_int_DesfireGetApplicationIds_no_auth_M(UFR_HANDLE hndUFR, - OUT uint32_t *application_ids, - VAR uint8_t *number_of_aplication_ids, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); - -UFR_STATUS DL_API uFR_int_DesfireCreateLinearRecordFile_aesM(UFR_HANDLE hndUFR, - uint8_t aes_key_nr, - uint32_t aid, - uint8_t file_id, - uint32_t record_size, - uint32_t max_rec_no, - uint8_t read_key_no, - uint8_t write_key_no, - uint8_t read_write_key_no, - uint8_t change_key_no, - uint8_t communication_settings, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_int_DesfireCreateLinearRecordFile_desM(UFR_HANDLE hndUFR, - uint8_t des_key_nr, - uint32_t aid, - uint8_t file_id, - uint32_t record_size, - uint32_t max_rec_no, - uint8_t read_key_no, - uint8_t write_key_no, - uint8_t read_write_key_no, - uint8_t change_key_no, - uint8_t communication_settings, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_int_DesfireCreateLinearRecordFile_2k3desM(UFR_HANDLE hndUFR, - uint8_t des2k_key_nr, - uint32_t aid, - uint8_t file_id, - uint32_t record_size, - uint32_t max_rec_no, - uint8_t read_key_no, - uint8_t write_key_no, - uint8_t read_write_key_no, - uint8_t change_key_no, - uint8_t communication_settings, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_int_DesfireCreateLinearRecordFile_3k3desM(UFR_HANDLE hndUFR, - uint8_t des3k_key_nr, - uint32_t aid, - uint8_t file_id, - uint32_t record_size, - uint32_t max_rec_no, - uint8_t read_key_no, - uint8_t write_key_no, - uint8_t read_write_key_no, - uint8_t change_key_no, - uint8_t communication_settings, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_SAM_DesfireCreateLinearRecordFileAesAuthM(UFR_HANDLE hndUFR, - uint8_t aes_key_nr, - uint32_t aid, - uint8_t file_id, - uint32_t record_size, - uint32_t max_rec_no, - uint8_t read_key_no, - uint8_t write_key_no, - uint8_t read_write_key_no, - uint8_t change_key_no, - uint8_t communication_settings, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_SAM_DesfireCreateLinearRecordFile3k3desAuthM(UFR_HANDLE hndUFR, - uint8_t des3k_key_nr, - uint32_t aid, - uint8_t file_id, - uint32_t record_size, - uint32_t max_rec_no, - uint8_t read_key_no, - uint8_t write_key_no, - uint8_t read_write_key_no, - uint8_t change_key_no, - uint8_t communication_settings, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_int_DesfireCreateLinearRecordFile_aes_PK_M(UFR_HANDLE hndUFR, - IN uint8_t *aes_key_ext, - uint32_t aid, - uint8_t file_id, - uint32_t record_size, - uint32_t max_rec_no, - uint8_t read_key_no, - uint8_t write_key_no, - uint8_t read_write_key_no, - uint8_t change_key_no, - uint8_t communication_settings, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_int_DesfireCreateLinearRecordFile_des_PK_M(UFR_HANDLE hndUFR, - IN uint8_t *des_key_ext, - uint32_t aid, - uint8_t file_id, - uint32_t record_size, - uint32_t max_rec_no, - uint8_t read_key_no, - uint8_t write_key_no, - uint8_t read_write_key_no, - uint8_t change_key_no, - uint8_t communication_settings, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_int_DesfireCreateLinearRecordFile_2k3des_PK_M(UFR_HANDLE hndUFR, - IN uint8_t *des2k_key_ext, - uint32_t aid, - uint8_t file_id, - uint32_t record_size, - uint32_t max_rec_no, - uint8_t read_key_no, - uint8_t write_key_no, - uint8_t read_write_key_no, - uint8_t change_key_no, - uint8_t communication_settings, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_int_DesfireCreateLinearRecordFile_3k3des_PK_M(UFR_HANDLE hndUFR, - IN uint8_t *des3k_key_ext, - uint32_t aid, - uint8_t file_id, - uint32_t record_size, - uint32_t max_rec_no, - uint8_t read_key_no, - uint8_t write_key_no, - uint8_t read_write_key_no, - uint8_t change_key_no, - uint8_t communication_settings, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_int_DesfireCreateLinearRecordFile_no_authM(UFR_HANDLE hndUFR, - uint32_t aid, - uint8_t file_id, - uint32_t record_size, - uint32_t max_rec_no, - uint8_t read_key_no, - uint8_t write_key_no, - uint8_t read_write_key_no, - uint8_t change_key_no, - uint8_t communication_settings, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); - -UFR_STATUS DL_API uFR_int_DesfireCreateCyclicRecordFile_aesM(UFR_HANDLE hndUFR, - uint8_t aes_key_nr, - uint32_t aid, - uint8_t file_id, - uint32_t record_size, - uint32_t max_rec_no, - uint8_t read_key_no, - uint8_t write_key_no, - uint8_t read_write_key_no, - uint8_t change_key_no, - uint8_t communication_settings, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_int_DesfireCreateCyclicRecordFile_desM(UFR_HANDLE hndUFR, - uint8_t des_key_nr, - uint32_t aid, - uint8_t file_id, - uint32_t record_size, - uint32_t max_rec_no, - uint8_t read_key_no, - uint8_t write_key_no, - uint8_t read_write_key_no, - uint8_t change_key_no, - uint8_t communication_settings, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_int_DesfireCreateCyclicRecordFile_2k3desM(UFR_HANDLE hndUFR, - uint8_t des2k_key_nr, - uint32_t aid, - uint8_t file_id, - uint32_t record_size, - uint32_t max_rec_no, - uint8_t read_key_no, - uint8_t write_key_no, - uint8_t read_write_key_no, - uint8_t change_key_no, - uint8_t communication_settings, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_int_DesfireCreateCyclicRecordFile_3k3desM(UFR_HANDLE hndUFR, - uint8_t des3k_key_nr, - uint32_t aid, - uint8_t file_id, - uint32_t record_size, - uint32_t max_rec_no, - uint8_t read_key_no, - uint8_t write_key_no, - uint8_t read_write_key_no, - uint8_t change_key_no, - uint8_t communication_settings, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_SAM_DesfireCreateCyclicRecordFileAesAuthM(UFR_HANDLE hndUFR, - uint8_t aes_key_nr, - uint32_t aid, - uint8_t file_id, - uint32_t record_size, - uint32_t max_rec_no, - uint8_t read_key_no, - uint8_t write_key_no, - uint8_t read_write_key_no, - uint8_t change_key_no, - uint8_t communication_settings, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_SAM_DesfireCreateCyclicRecordFile3k3desAuthM(UFR_HANDLE hndUFR, - uint8_t des3k_key_nr, - uint32_t aid, - uint8_t file_id, - uint32_t record_size, - uint32_t max_rec_no, - uint8_t read_key_no, - uint8_t write_key_no, - uint8_t read_write_key_no, - uint8_t change_key_no, - uint8_t communication_settings, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_int_DesfireCreateCyclicRecordFile_aes_PK_M(UFR_HANDLE hndUFR, - IN uint8_t *aes_key_ext, - uint32_t aid, - uint8_t file_id, - uint32_t record_size, - uint32_t max_rec_no, - uint8_t read_key_no, - uint8_t write_key_no, - uint8_t read_write_key_no, - uint8_t change_key_no, - uint8_t communication_settings, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_int_DesfireCreateCyclicRecordFile_des_PK_M(UFR_HANDLE hndUFR, - IN uint8_t *des_key_ext, - uint32_t aid, - uint8_t file_id, - uint32_t record_size, - uint32_t max_rec_no, - uint8_t read_key_no, - uint8_t write_key_no, - uint8_t read_write_key_no, - uint8_t change_key_no, - uint8_t communication_settings, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_int_DesfireCreateCyclicRecordFile_2k3des_PK_M(UFR_HANDLE hndUFR, - IN uint8_t *des2k_key_ext, - uint32_t aid, - uint8_t file_id, - uint32_t record_size, - uint32_t max_rec_no, - uint8_t read_key_no, - uint8_t write_key_no, - uint8_t read_write_key_no, - uint8_t change_key_no, - uint8_t communication_settings, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_int_DesfireCreateCyclicRecordFile_3k3des_PK_M(UFR_HANDLE hndUFR, - IN uint8_t *des3k_key_ext, - uint32_t aid, - uint8_t file_id, - uint32_t record_size, - uint32_t max_rec_no, - uint8_t read_key_no, - uint8_t write_key_no, - uint8_t read_write_key_no, - uint8_t change_key_no, - uint8_t communication_settings, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_int_DesfireCreateCyclicRecordFile_no_authM(UFR_HANDLE hndUFR, - uint32_t aid, - uint8_t file_id, - uint32_t record_size, - uint32_t max_rec_no, - uint8_t read_key_no, - uint8_t write_key_no, - uint8_t read_write_key_no, - uint8_t change_key_no, - uint8_t communication_settings, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); - -UFR_STATUS DL_API uFR_int_DesfireWriteRecord_aesM(UFR_HANDLE hndUFR, - uint8_t aes_key_nr, - uint32_t aid, - uint8_t aid_key_nr, - uint8_t file_id, - uint16_t offset, - uint16_t data_length, - uint8_t communication_settings, - uint8_t *data, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_int_DesfireWriteRecord_desM(UFR_HANDLE hndUFR, - uint8_t des_key_nr, - uint32_t aid, - uint8_t aid_key_nr, - uint8_t file_id, - uint16_t offset, - uint16_t data_length, - uint8_t communication_settings, - uint8_t *data, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_int_DesfireWriteRecord_2k3desM(UFR_HANDLE hndUFR, - uint8_t des2k_key_nr, - uint32_t aid, - uint8_t aid_key_nr, - uint8_t file_id, - uint16_t offset, - uint16_t data_length, - uint8_t communication_settings, - uint8_t *data, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_int_DesfireWriteRecord_3k3desM(UFR_HANDLE hndUFR, - uint8_t des3k_key_nr, - uint32_t aid, - uint8_t aid_key_nr, - uint8_t file_id, - uint16_t offset, - uint16_t data_length, - uint8_t communication_settings, - uint8_t *data, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_SAM_DesfireWriteRecordAesAuthM(UFR_HANDLE hndUFR, - uint8_t aes_key_nr, - uint32_t aid, - uint8_t aid_key_nr, - uint8_t file_id, - uint16_t offset, - uint16_t data_length, - uint8_t communication_settings, - IN uint8_t *data, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_SAM_DesfireWriteRecord3k3desAuthM(UFR_HANDLE hndUFR, - uint8_t aes_key_nr, - uint32_t aid, - uint8_t aid_key_nr, - uint8_t file_id, - uint16_t offset, - uint16_t data_length, - uint8_t communication_settings, - IN uint8_t *data, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_int_DesfireWriteRecord_aes_PK_M(UFR_HANDLE hndUFR, - IN uint8_t *aes_key_ext, - uint32_t aid, - uint8_t aid_key_nr, - uint8_t file_id, - uint16_t offset, - uint16_t data_length, - uint8_t communication_settings, - IN uint8_t *data, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_int_DesfireWriteRecord_des_PK_M(UFR_HANDLE hndUFR, - IN uint8_t *des_key_ext, - uint32_t aid, - uint8_t aid_key_nr, - uint8_t file_id, - uint16_t offset, - uint16_t data_length, - uint8_t communication_settings, - IN uint8_t *data, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_int_DesfireWriteRecord_2k3des_PK_M(UFR_HANDLE hndUFR, - IN uint8_t *des2k_key_ext, - uint32_t aid, - uint8_t aid_key_nr, - uint8_t file_id, - uint16_t offset, - uint16_t data_length, - uint8_t communication_settings, - IN uint8_t *data, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_int_DesfireWriteRecord_3k3des_PK_M(UFR_HANDLE hndUFR, - IN uint8_t *des3k_key_ext, - uint32_t aid, - uint8_t aid_key_nr, - uint8_t file_id, - uint16_t offset, - uint16_t data_length, - uint8_t communication_settings, - IN uint8_t *data, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_int_DesfireWriteRecord_no_authM(UFR_HANDLE hndUFR, - uint32_t aid, - uint8_t aid_key_nr, - uint8_t file_id, - uint16_t offset, - uint16_t data_length, - uint8_t communication_settings, - IN uint8_t *data, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); - -UFR_STATUS DL_API uFR_int_DesfireReadRecords_aesM(UFR_HANDLE hndUFR, - uint8_t aes_key_nr, - uint32_t aid, - uint8_t aid_key_nr, - uint8_t file_id, - uint16_t offset, - uint16_t number_of_records, - uint16_t record_size, - uint8_t communication_settings, - OUT uint8_t *data, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_int_DesfireReadRecords_desM(UFR_HANDLE hndUFR, - uint8_t des_key_nr, - uint32_t aid, - uint8_t aid_key_nr, - uint8_t file_id, - uint16_t offset, - uint16_t number_of_records, - uint16_t record_size, - uint8_t communication_settings, - OUT uint8_t *data, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_int_DesfireReadRecords_2k3desM(UFR_HANDLE hndUFR, - uint8_t des2k_key_nr, - uint32_t aid, - uint8_t aid_key_nr, - uint8_t file_id, - uint16_t offset, - uint16_t number_of_records, - uint16_t record_size, - uint8_t communication_settings, - OUT uint8_t *data, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_int_DesfireReadRecords_3k3desM(UFR_HANDLE hndUFR, - uint8_t des3k_key_nr, - uint32_t aid, - uint8_t aid_key_nr, - uint8_t file_id, - uint16_t offset, - uint16_t number_of_records, - uint16_t record_size, - uint8_t communication_settings, - OUT uint8_t *data, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_SAM_DesfireReadRecordsAesAuthM(UFR_HANDLE hndUFR, - uint8_t aes_key_nr, - uint32_t aid, - uint8_t aid_key_nr, - uint8_t file_id, - uint16_t offset, - uint16_t number_of_records, - uint16_t record_size, - uint8_t communication_settings, - OUT uint8_t *data, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_SAM_DesfireReadRecords3k3desAuthM(UFR_HANDLE hndUFR, - uint8_t aes_key_nr, - uint32_t aid, - uint8_t aid_key_nr, - uint8_t file_id, - uint16_t offset, - uint16_t number_of_records, - uint16_t record_size, - uint8_t communication_settings, - OUT uint8_t *data, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_int_DesfireReadRecords_aes_PK_M(UFR_HANDLE hndUFR, - IN uint8_t *aes_key_ext, - uint32_t aid, - uint8_t aid_key_nr, - uint8_t file_id, - uint16_t offset, - uint16_t number_of_records, - uint16_t record_size, - uint8_t communication_settings, - OUT uint8_t *data, - VAR uint16_t *card_status, VAR - uint16_t *exec_time); -UFR_STATUS DL_API uFR_int_DesfireReadRecords_des_PK_M(UFR_HANDLE hndUFR, - IN uint8_t *des_key_ext, - uint32_t aid, - uint8_t aid_key_nr, - uint8_t file_id, - uint16_t offset, - uint16_t number_of_records, - uint16_t record_size, - uint8_t communication_settings, - OUT uint8_t *data, - VAR uint16_t *card_status, VAR - uint16_t *exec_time); -UFR_STATUS DL_API uFR_int_DesfireReadRecords_2k3des_PK_M(UFR_HANDLE hndUFR, - IN uint8_t *des2k_key_ext, - uint32_t aid, - uint8_t aid_key_nr, - uint8_t file_id, - uint16_t offset, - uint16_t number_of_records, - uint16_t record_size, - uint8_t communication_settings, - OUT uint8_t *data, - VAR uint16_t *card_status, VAR - uint16_t *exec_time); -UFR_STATUS DL_API uFR_int_DesfireReadRecords_3k3des_PK_M(UFR_HANDLE hndUFR, - IN uint8_t *des3k_key_ext, - uint32_t aid, - uint8_t aid_key_nr, - uint8_t file_id, - uint16_t offset, - uint16_t number_of_records, - uint16_t record_size, - uint8_t communication_settings, - OUT uint8_t *data, - VAR uint16_t *card_status, VAR - uint16_t *exec_time); -UFR_STATUS DL_API uFR_int_DesfireReadRecords_no_authM(UFR_HANDLE hndUFR, - uint32_t aid, - uint8_t aid_key_nr, - uint8_t file_id, - uint16_t offset, - uint16_t number_of_records, - uint16_t record_size, - uint8_t communication_settings, - uint8_t *data, - uint16_t *card_status, - uint16_t *exec_time); - -UFR_STATUS DL_API uFR_int_DesfireClearRecordFile_aesM(UFR_HANDLE hndUFR, - uint8_t aes_key_nr, - uint32_t aid, - uint8_t file_id, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_int_DesfireClearRecordFile_desM(UFR_HANDLE hndUFR, - uint8_t des_key_nr, - uint32_t aid, - uint8_t file_id, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_int_DesfireClearRecordFile_2k3desM(UFR_HANDLE hndUFR, - uint8_t des2k_key_nr, - uint32_t aid, - uint8_t file_id, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_int_DesfireClearRecordFile_3k3desM(UFR_HANDLE hndUFR, - uint8_t des3k_key_nr, - uint32_t aid, - uint8_t file_id, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_SAM_DesfireClearRecordFileAesAuthM(UFR_HANDLE hndUFR, - uint8_t aes_key_nr, - uint32_t aid, - uint8_t file_id, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_SAM_DesfireClearRecordFile3k3desAuthM(UFR_HANDLE hndUFR, - uint8_t des3k_key_nr, - uint32_t aid, - uint8_t file_id, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_int_DesfireClearRecordFile_PK_M(UFR_HANDLE hndUFR, - IN uint8_t *aes_key_ext, - uint32_t aid, - uint8_t file_id, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_int_DesfireClearRecordFile_aes_PK_M(UFR_HANDLE hndUFR, - IN uint8_t *aes_key_ext, - uint32_t aid, - uint8_t file_id, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_int_DesfireClearRecordFile_des_PK_M(UFR_HANDLE hndUFR, - IN uint8_t *des_key_ext, - uint32_t aid, - uint8_t file_id, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_int_DesfireClearRecordFile_2k3des_PK_M(UFR_HANDLE hndUFR, - IN uint8_t *des2k_key_ext, - uint32_t aid, - uint8_t file_id, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_int_DesfireClearRecordFile_3k3des_PK_M(UFR_HANDLE hndUFR, - IN uint8_t *des3k_key_ext, - uint32_t aid, - uint8_t file_id, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -UFR_STATUS DL_API uFR_int_DesfireClearRecordFile_no_authM(UFR_HANDLE hndUFR, - uint32_t aid, - uint8_t file_id, - VAR uint16_t *card_status, - VAR uint16_t *exec_time); -//--------------------------------------------------------------------------------------------- - -UFR_STATUS DL_API GreenLedBlinkingTurnOnM(UFR_HANDLE hndUFR); - -UFR_STATUS DL_API GreenLedBlinkingTurnOffM(UFR_HANDLE hndUFR); - -///////////////////////////////////////////////////////////////////// - -UFR_STATUS DL_API SetRfAnalogRegistersTypeAM(UFR_HANDLE hndUFR, - uint8_t ThresholdMinLevel, - uint8_t ThresholdCollLevel, - uint8_t RFLevelAmp, - uint8_t RxGain, - uint8_t RFLevel); - -UFR_STATUS DL_API SetRfAnalogRegistersTypeBM(UFR_HANDLE hndUFR, - uint8_t ThresholdMinLevel, - uint8_t ThresholdCollLevel, - uint8_t RFLevelAmp, - uint8_t RxGain, - uint8_t RFLevel); - -UFR_STATUS DL_API SetRfAnalogRegistersISO14443_212M(UFR_HANDLE hndUFR, - uint8_t ThresholdMinLevel, - uint8_t ThresholdCollLevel, - uint8_t RFLevelAmp, - uint8_t RxGain, - uint8_t RFLevel); - -UFR_STATUS DL_API SetRfAnalogRegistersISO14443_424M(UFR_HANDLE hndUFR, - uint8_t ThresholdMinLevel, - uint8_t ThresholdCollLevel, - uint8_t RFLevelAmp, - uint8_t RxGain, - uint8_t RFLevel); - -UFR_STATUS DL_API SetRfAnalogRegistersTypeADefaultM(UFR_HANDLE hndUFR); - -UFR_STATUS DL_API SetRfAnalogRegistersTypeBDefaultM(UFR_HANDLE hndUFR); - -UFR_STATUS DL_API SetRfAnalogRegistersISO14443_212DefaultM(UFR_HANDLE hndUFR); - -UFR_STATUS DL_API SetRfAnalogRegistersISO14443_424DefaultM(UFR_HANDLE hndUFR); - -UFR_STATUS DL_API GetRfAnalogRegistersTypeAM(UFR_HANDLE hndUFR, - VAR uint8_t *ThresholdMinLevel, - VAR uint8_t *ThresholdCollLevel, - VAR uint8_t *RFLevelAmp, - VAR uint8_t *RxGain, - VAR uint8_t *RFLevel); - -UFR_STATUS DL_API GetRfAnalogRegistersTypeBM(UFR_HANDLE hndUFR, - VAR uint8_t *ThresholdMinLevel, - VAR uint8_t *ThresholdCollLevel, - VAR uint8_t *RFLevelAmp, - VAR uint8_t *RxGain, - VAR uint8_t *RFLevel); - -UFR_STATUS DL_API GetRfAnalogRegistersISO14443_212M(UFR_HANDLE hndUFR, - VAR uint8_t *ThresholdMinLevel, - VAR uint8_t *ThresholdCollLevel, - VAR uint8_t *RFLevelAmp, - VAR uint8_t *RxGain, - VAR uint8_t *RFLevel); - -UFR_STATUS DL_API GetRfAnalogRegistersISO14443_424M(UFR_HANDLE hndUFR, - VAR uint8_t *ThresholdMinLevel, - VAR uint8_t *ThresholdCollLevel, - VAR uint8_t *RFLevelAmp, - VAR uint8_t *RxGain, - VAR uint8_t *RFLevel); - -UFR_STATUS DL_API SetRfAnalogRegistersTypeATransM(UFR_HANDLE hndUFR, - uint8_t ThresholdMinLevel, - uint8_t ThresholdCollLevel, - uint8_t RFLevelAmp, - uint8_t RxGain, - uint8_t RFLevel, - uint8_t CWGsNOn, - uint8_t ModGsNOn, - uint8_t CWGsP, - uint8_t CWGsNOff, - uint8_t ModGsNOff); - -UFR_STATUS DL_API SetRfAnalogRegistersTypeBTransM(UFR_HANDLE hndUFR, - uint8_t ThresholdMinLevel, - uint8_t ThresholdCollLevel, - uint8_t RFLevelAmp, - uint8_t RxGain, - uint8_t RFLevel, - uint8_t CWGsNOn, - uint8_t ModGsNOn, - uint8_t CWGsP, - uint8_t ModGsP); - -UFR_STATUS DL_API GetRfAnalogRegistersTypeATransM(UFR_HANDLE hndUFR, - VAR uint8_t *ThresholdMinLevel, - VAR uint8_t *ThresholdCollLevel, - VAR uint8_t *RFLevelAmp, - VAR uint8_t *RxGain, - VAR uint8_t *RFLevel, - VAR uint8_t *CWGsNOn, - VAR uint8_t *ModGsNOn, - VAR uint8_t *CWGsP, - VAR uint8_t *CWGsNOff, - VAR uint8_t *ModGsNOff); - -UFR_STATUS DL_API GetRfAnalogRegistersTypeBTransM(UFR_HANDLE hndUFR, - VAR uint8_t *ThresholdMinLevel, - VAR uint8_t *ThresholdCollLevel, - VAR uint8_t *RFLevelAmp, - VAR uint8_t *RxGain, - VAR uint8_t *RFLevel, - VAR uint8_t *CWGsNOn, - VAR uint8_t *ModGsNOn, - VAR uint8_t *CWGsP, - VAR uint8_t *ModGsP); - -UFR_STATUS DL_API FastFlashCheckM(UFR_HANDLE hndUFR); -UFR_STATUS DL_API DefaultBaudrateFlashCheckM(UFR_HANDLE hndUFR); - -UFR_STATUS DL_API GetReaderParametersM(UFR_HANDLE hndUFR, uint8_t *mui, uint8_t *serial_nr, - uint8_t *hw_type, uint8_t *hw_ver, uint8_t *device_type, - uint8_t *fw_ver_major, uint8_t *fw_ver_minor, uint8_t *fw_ver_build); - -//SAM -UFR_STATUS DL_API SAM_get_version_rawM(UFR_HANDLE hndUFR, - OUT uint8_t *data, - VAR uint8_t *length); -UFR_STATUS DL_API SAM_get_versionM(UFR_HANDLE hndUFR, - VAR SAM_HW_TYPE *sam_type, - VAR uint8_t *sam_uid); -UFR_STATUS DL_API SAM_get_key_entry_rawM(UFR_HANDLE hndUFR, - uint8_t key_no, - OUT uint8_t *key_entry, - VAR uint8_t *key_length, - OUT uint8_t *apdu_sw); -UFR_STATUS DL_API SAM_authenticate_host_no_div_desM(UFR_HANDLE hndUFR, - uint8_t key_no, - uint8_t key_v, - IN uint8_t *des_key); -UFR_STATUS DL_API SAM_pre_pesonalization_master_AES128_keyM(UFR_HANDLE hndUFR, - IN uint8_t *aes_key_ver_a, - uint8_t ver_a, - IN uint8_t *aes_key_ver_b, - uint8_t ver_b, - IN uint8_t *aes_key_ver_c, - uint8_t ver_c, - OUT uint8_t *apdu_sw); -UFR_STATUS DL_API SAM_pre_personalization_switch_to_AV2_modeM(UFR_HANDLE hndUFR, - IN uint8_t *master_aes_key, - uint8_t key_version, - OUT uint8_t *apdu_sw); -UFR_STATUS DL_API SAM_authenticate_host_AV2M(UFR_HANDLE hndUFR, - IN uint8_t *master_aes_key, - uint8_t key_nr, - uint8_t key_version, - uint8_t host_mode, - OUT uint8_t *apdu_sw); -UFR_STATUS DL_API SAM_change_key_entry_mifare_AV2_plain_one_keyM(UFR_HANDLE hndUFR, - uint8_t key_entry_no, - IN uint8_t *keyA, - IN uint8_t *keyB, - uint8_t key_no_CEK, - uint8_t key_v_CEK, - uint8_t ref_no_KUC, - OUT uint8_t *apdu_sw); -UFR_STATUS DL_API SAM_change_key_entry_AES_AV2_plain_one_keyM(UFR_HANDLE hndUFR, - uint8_t key_entry_no, - IN uint8_t *key, - uint8_t key_no_CEK, - uint8_t key_v_CEK, - uint8_t ref_no_KUC, - OUT uint8_t *apdu_sw); -UFR_STATUS DL_API SAM_change_key_entry_3K3DES_AV2_plain_one_keyM(UFR_HANDLE hndUFR, - uint8_t key_entry_no, - IN uint8_t *key, - uint8_t key_no_CEK, - uint8_t key_v_CEK, - uint8_t ref_no_KUC, - OUT uint8_t *apdu_sw); -UFR_STATUS DL_API SAM_change_key_entry_2K3DES_AV2_plain_one_keyM(UFR_HANDLE hndUFR, - uint8_t key_entry_no, - IN uint8_t *key, - uint8_t key_no_CEK, - uint8_t key_v_CEK, - uint8_t ref_no_KUC, - OUT uint8_t *apdu_sw); -UFR_STATUS DL_API SAM_change_key_entry_aes_AV2_plain_host_keyM(UFR_HANDLE hndUFR, - uint8_t key_entry_no, - IN uint8_t *aes_key_ver_a, - uint8_t ver_a, - IN uint8_t *aes_key_ver_b, - uint8_t ver_b, - IN uint8_t *aes_key_ver_c, - uint8_t ver_c, - uint8_t key_no_CEK, - uint8_t key_v_CEK, - uint8_t ref_no_KUC, - uint8_t sam_lock_unlock, - OUT uint8_t *apdu_sw); -UFR_STATUS DL_API WriteSamUnlockKeyM(UFR_HANDLE hndUFR, - uint8_t key_no, - uint8_t key_ver, - IN uint8_t *aes_key); - -//MIFARE PLUS -UFR_STATUS DL_API MFP_WritePersoM(UFR_HANDLE hndUFR, - uint16_t address, - IN uint8_t *data); -UFR_STATUS DL_API MFP_CommitPersoM(UFR_HANDLE hndUFR); -UFR_STATUS DL_API MFP_PersonalizationMinimalM(UFR_HANDLE hndUFR, - IN uint8_t *card_master_key, - IN uint8_t *card_config_key, - IN uint8_t *level_2_switch_key, - IN uint8_t *level_3_switch_key, - IN uint8_t *level_1_auth_key, - IN uint8_t *select_vc_key, - IN uint8_t *prox_chk_key, - IN uint8_t *vc_poll_enc_key, - IN uint8_t *vc_poll_mac_key); - -UFR_STATUS DL_API MFP_SwitchToSecurityLevel3M(UFR_HANDLE hndUFR, - uint8_t key_index); -UFR_STATUS DL_API MFP_SwitchToSecurityLevel3_PKM(UFR_HANDLE hndUFR, - IN uint8_t *aes_key); - -UFR_STATUS DL_API MFP_AesAuthSecurityLevel1M(UFR_HANDLE hndUFR, - uint8_t key_index); -UFR_STATUS DL_API MFP_AesAuthSecurityLevel1_PKM(UFR_HANDLE hndUFR, - IN uint8_t *aes_key); - -UFR_STATUS DL_API MFP_ChangeMasterKeyM(UFR_HANDLE hndUFR, - uint8_t key_index, - IN uint8_t *new_key); -UFR_STATUS DL_API MFP_ChangeMasterKeySamKeyM(UFR_HANDLE hndUFR, - uint8_t key_index, - uint8_t new_key_index); -UFR_STATUS DL_API MFP_ChangeMasterKey_PKM(UFR_HANDLE hndUFR, - IN uint8_t *old_key, - IN uint8_t *new_key); - -UFR_STATUS DL_API MFP_ChangeConfigurationKeyM(UFR_HANDLE hndUFR, - uint8_t key_index, - IN uint8_t *new_key); -UFR_STATUS DL_API MFP_ChangeConfigurationKeySamKeyM(UFR_HANDLE hndUFR, - uint8_t key_index, - uint8_t new_key_index); -UFR_STATUS DL_API MFP_ChangeConfigurationKey_PKM(UFR_HANDLE hndUFR, - IN uint8_t *old_key, - IN uint8_t *new_key); - -UFR_STATUS DL_API MFP_FieldConfigurationSetM(UFR_HANDLE hndUFR, - uint8_t configuration_key_index, - uint8_t rid_use, - uint8_t prox_check_use); -UFR_STATUS DL_API MFP_FieldConfigurationSetSamKeyM(UFR_HANDLE hndUFR, - uint8_t configuration_key_index, - uint8_t rid_use, - uint8_t prox_check_use); -UFR_STATUS DL_API MFP_FieldConfigurationSet_PKM(UFR_HANDLE hndUFR, - IN uint8_t *configuration_key, - uint8_t rid_use, - uint8_t prox_check_use); - -UFR_STATUS DL_API MFP_ChangeSectorKeyM(UFR_HANDLE hndUFR, - uint8_t sector_nr, - uint8_t auth_mode, - uint8_t key_index, - IN uint8_t *new_key); -UFR_STATUS DL_API MFP_ChangeSectorKeySamKeyM(UFR_HANDLE hndUFR, - uint8_t sector_nr, - uint8_t auth_mode, - uint8_t key_index, - uint8_t new_key_index); -UFR_STATUS DL_API MFP_ChangeSectorKey_PKM(UFR_HANDLE hndUFR, - uint8_t sector_nr, - uint8_t auth_mode, - IN uint8_t *old_key, - IN uint8_t *new_key); - -UFR_STATUS DL_API MFP_GetUidM(UFR_HANDLE hndUFR, - uint8_t key_index_vc_poll_enc_key, - uint8_t key_index_vc_poll_mac_key, - OUT uint8_t *uid, - VAR uint8_t *uid_len); -UFR_STATUS DL_API MFP_GetUidSamKeyM(UFR_HANDLE hndUFR, - uint8_t key_index_vc_poll_enc_key, - uint8_t key_index_vc_poll_mac_key, - OUT uint8_t *uid, - VAR uint8_t *uid_len); -UFR_STATUS DL_API MFP_GetUid_PKM(UFR_HANDLE hndUFR, - IN uint8_t *vc_poll_enc_key, - IN uint8_t *vc_poll_mac_key, - OUT uint8_t *uid, - VAR uint8_t *uid_len); - -UFR_STATUS DL_API MFP_ChangeVcPollingEncKeyM(UFR_HANDLE hndUFR, - uint8_t configuration_key_index, - IN uint8_t *new_key); -UFR_STATUS DL_API MFP_ChangeVcPollingEncKeySamKeyM(UFR_HANDLE hndUFR, - uint8_t configuration_key_index, - uint8_t new_key_index); -UFR_STATUS DL_API MFP_ChangeVcPollingEncKey_PKM(UFR_HANDLE hndUFR, - IN uint8_t *configuration_key, - IN uint8_t *new_key); - -UFR_STATUS DL_API MFP_ChangeVcPollingMacKeyM(UFR_HANDLE hndUFR, - uint8_t configuration_key_index, - IN uint8_t *new_key); -UFR_STATUS DL_API MFP_ChangeVcPollingMacKeySamKeyM(UFR_HANDLE hndUFR, - uint8_t configuration_key_index, - uint8_t new_key_index); -UFR_STATUS DL_API MFP_ChangeVcPollingMacKey_PKM(UFR_HANDLE hndUFR, - IN uint8_t *configuration_key, - IN uint8_t *new_key); - - -//ULTRALIGHT C -UFR_STATUS DL_API ULC_ExternalAuth_PKM(UFR_HANDLE hndUFR, - IN uint8_t *key); - -UFR_STATUS DL_API ULC_write_3des_key_no_authM(UFR_HANDLE hndUFR, - IN uint8_t *new_3des_key); - -UFR_STATUS DL_API ULC_write_3des_key_factory_keyM(UFR_HANDLE hndUFR, - IN uint8_t *new_3des_key); - -UFR_STATUS DL_API ULC_write_3des_keyM(UFR_HANDLE hndUFR, - IN uint8_t *new_3des_key, - IN uint8_t *old_3des_key); - -//ESP32 -UFR_STATUS DL_API EspSetDisplayData(IN uint8_t *display_data, IN uint8_t data_length, uint16_t duration); -UFR_STATUS DL_API EspReaderReset(void); -UFR_STATUS DL_API EspChangeReaderPassword(IN uint8_t *old_password, IN uint8_t *new_password); -UFR_STATUS DL_API EspReaderEepromWrite(IN uint8_t *data, uint32_t address, uint32_t size, IN uint8_t *password); -UFR_STATUS DL_API EspReaderEepromRead(OUT uint8_t *data, uint32_t address, uint32_t size); -UFR_STATUS DL_API EspGetReaderTime(OUT uint8_t *time); -UFR_STATUS DL_API EspSetReaderTime(IN uint8_t *password, IN uint8_t *time); -UFR_STATUS DL_API EspSetIOState(uint8_t pin, uint8_t state); -UFR_STATUS DL_API EspGetIOState(OUT uint8_t *state); - -//NDEF MESSAGES -//---------------------------------------------------------- - -enum NDEF_STORAGE_MODE -{ - STORE_INTO_READER = 0, - STORE_INTO_CARD -}; - -enum NDEF_SKYPE_ACTION -{ - CALL = 0, - CHAT -}; - -//WiFi NDEF authentication type -enum WIFI_AUTH_TYPE -{ - OPEN = 0, - WPA_PERSONAL, - WPA_ENTERPRISE, - WPA2_ENTERPRISE, - WPA2_PERSONAL -}; - -//WiFi NDEF encryption type -enum WIFI_ENC_TYPE -{ - NONE = 0, - WEP, - TKIP, - AES, - AES_TKIP -}; - -UFR_STATUS DL_API WriteNdefRecord_WiFi(uint8_t ndef_storage, IN const char *ssid, uint8_t auth_type, uint8_t encryption_type, IN const char *password); -UFR_STATUS DL_API WriteNdefRecord_Bluetooth(uint8_t ndef_storage, IN const char *bt_mac_address); -UFR_STATUS DL_API WriteNdefRecord_SMS(uint8_t ndef_storage, IN const char *phone_number, IN const char *message); -UFR_STATUS DL_API WriteNdefRecord_Bitcoin(uint8_t ndef_storage, IN const char *bitcoin_address, IN const char *amount, IN const char *message); -UFR_STATUS DL_API WriteNdefRecord_GeoLocation(uint8_t ndef_storage, IN const char *latitude, IN const char *longitude); -UFR_STATUS DL_API WriteNdefRecord_NaviDestination(uint8_t ndef_storage, IN const char *destination); -UFR_STATUS DL_API WriteNdefRecord_Email(uint8_t ndef_storage, IN const char *email_address, IN const char *subject, IN const char *message); -UFR_STATUS DL_API WriteNdefRecord_Address(uint8_t ndef_storage, IN const char *address); -UFR_STATUS DL_API WriteNdefRecord_AndroidApp(uint8_t ndef_storage, IN const char *package_name); -UFR_STATUS DL_API WriteNdefRecord_Text(uint8_t ndef_storage, IN const char *text); -UFR_STATUS DL_API WriteNdefRecord_StreetView(uint8_t ndef_storage, IN const char *latitude, IN const char *longitude); -UFR_STATUS DL_API WriteNdefRecord_Skype(uint8_t ndef_storage, IN const char *user_name, uint8_t action); -UFR_STATUS DL_API WriteNdefRecord_Whatsapp(uint8_t ndef_storage, IN const char *message); -UFR_STATUS DL_API WriteNdefRecord_Viber(uint8_t ndef_storage, IN const char *message); -UFR_STATUS DL_API WriteNdefRecord_Contact(uint8_t ndef_storage, IN const char *name, IN const char *company, IN const char *address, IN const char *phone, IN const char *email, IN const char *website); -UFR_STATUS DL_API WriteNdefRecord_Phone(uint8_t ndef_storage, IN const char *phone_number); - -UFR_STATUS DL_API WriteNdefRecord_WiFiM(UFR_HANDLE hndUFR, uint8_t ndef_storage, IN const char *ssid, uint8_t auth_type, uint8_t encryption_type, IN const char *password); -UFR_STATUS DL_API WriteNdefRecord_BluetoothM(UFR_HANDLE hndUFR, uint8_t ndef_storage, IN const char *bt_mac_address); -UFR_STATUS DL_API WriteNdefRecord_SMSM(UFR_HANDLE hndUFR, uint8_t ndef_storage, IN const char *phone_number, IN const char *message); -UFR_STATUS DL_API WriteNdefRecord_BitcoinM(UFR_HANDLE hndUFR, uint8_t ndef_storage, IN const char *bitcoin_address, IN const char *amount, IN const char *message); -UFR_STATUS DL_API WriteNdefRecord_GeoLocationM(UFR_HANDLE hndUFR, uint8_t ndef_storage, IN const char *latitude, IN const char *longitude); -UFR_STATUS DL_API WriteNdefRecord_NaviDestinationM(UFR_HANDLE hndUFR, uint8_t ndef_storage, IN const char *destination); -UFR_STATUS DL_API WriteNdefRecord_EmailM(UFR_HANDLE hndUFR, uint8_t ndef_storage, IN const char *email_address, IN const char *subject, IN const char *message); -UFR_STATUS DL_API WriteNdefRecord_AddressM(UFR_HANDLE hndUFR, uint8_t ndef_storage, IN const char *address); -UFR_STATUS DL_API WriteNdefRecord_AndroidAppM(UFR_HANDLE hndUFR, uint8_t ndef_storage, IN const char *package_name); -UFR_STATUS DL_API WriteNdefRecord_TextM(UFR_HANDLE hndUFR, uint8_t ndef_storage, IN const char *text); -UFR_STATUS DL_API WriteNdefRecord_StreetViewM(UFR_HANDLE hndUFR, uint8_t ndef_storage, IN const char *latitude, IN const char *longitude); -UFR_STATUS DL_API WriteNdefRecord_SkypeM(UFR_HANDLE hndUFR, uint8_t ndef_storage, IN const char *user_name, uint8_t action); -UFR_STATUS DL_API WriteNdefRecord_WhatsappM(UFR_HANDLE hndUFR, uint8_t ndef_storage, IN const char *message); -UFR_STATUS DL_API WriteNdefRecord_ViberM(UFR_HANDLE hndUFR, uint8_t ndef_storage, IN const char *message); -UFR_STATUS DL_API WriteNdefRecord_ContactM(UFR_HANDLE hndUFR, uint8_t ndef_storage, IN const char *name, IN const char *company, IN const char *address, IN const char *phone, IN const char *email, IN const char *website); -UFR_STATUS DL_API WriteNdefRecord_PhoneM(UFR_HANDLE hndUFR, uint8_t ndef_storage, IN const char *phone_number); -//--------------------------------------------------------------------------------------------- -UFR_STATUS DL_API ReadNdefRecord_WiFi(OUT char *ssid, OUT char *auth_type, OUT char *encryption_type, OUT char *password); -UFR_STATUS DL_API ReadNdefRecord_Bitcoin(OUT char *bitcoin_address, OUT char *amount, OUT char *message); -UFR_STATUS DL_API ReadNdefRecord_GeoLocation(OUT char *latitude, OUT char *longitude); -UFR_STATUS DL_API ReadNdefRecord_NaviDestination(OUT char *destination); -UFR_STATUS DL_API ReadNdefRecord_Email(OUT char *email_address, OUT char *subject, OUT char *message); -UFR_STATUS DL_API ReadNdefRecord_Address(OUT char *address); -UFR_STATUS DL_API ReadNdefRecord_AndroidApp(OUT char *package_name); -UFR_STATUS DL_API ReadNdefRecord_Text(OUT char *text); -UFR_STATUS DL_API ReadNdefRecord_StreetView(OUT char *latitude, OUT char *longitude); -UFR_STATUS DL_API ReadNdefRecord_Skype(OUT char *user_name, OUT char *action); -UFR_STATUS DL_API ReadNdefRecord_Whatsapp(OUT char *message); -UFR_STATUS DL_API ReadNdefRecord_Viber(OUT char *message); -UFR_STATUS DL_API ReadNdefRecord_Contact(OUT char *vCard); -UFR_STATUS DL_API ReadNdefRecord_Phone(OUT char *phone_number); -UFR_STATUS DL_API ReadNdefRecord_SMS(OUT char *phone_number, OUT char *message); -UFR_STATUS DL_API ReadNdefRecord_Bluetooth(OUT char *bt_mac_address); - -UFR_STATUS DL_API ReadNdefRecord_WiFiM(UFR_HANDLE hndUFR, OUT char *ssid, OUT char *auth_type, OUT char *encryption_type, OUT char *password); -UFR_STATUS DL_API ReadNdefRecord_BitcoinM(UFR_HANDLE hndUFR, OUT char *bitcoin_address, OUT char *amount, OUT char *message); -UFR_STATUS DL_API ReadNdefRecord_GeoLocationM(UFR_HANDLE hndUFR, OUT char *latitude, OUT char *longitude); -UFR_STATUS DL_API ReadNdefRecord_NaviDestinationM(UFR_HANDLE hndUFR, OUT char *destination); -UFR_STATUS DL_API ReadNdefRecord_EmailM(UFR_HANDLE hndUFR, OUT char *email_address, OUT char *subject, OUT char *message); -UFR_STATUS DL_API ReadNdefRecord_AddressM(UFR_HANDLE hndUFR, OUT char *address); -UFR_STATUS DL_API ReadNdefRecord_AndroidAppM(UFR_HANDLE hndUFR, OUT char *package_name); -UFR_STATUS DL_API ReadNdefRecord_TextM(UFR_HANDLE hndUFR, OUT char *text); -UFR_STATUS DL_API ReadNdefRecord_StreetViewM(UFR_HANDLE hndUFR, OUT char *latitude, OUT char *longitude); -UFR_STATUS DL_API ReadNdefRecord_SkypeM(UFR_HANDLE hndUFR, OUT char *user_name, OUT char *action); -UFR_STATUS DL_API ReadNdefRecord_WhatsappM(UFR_HANDLE hndUFR, OUT char *message); -UFR_STATUS DL_API ReadNdefRecord_ViberM(UFR_HANDLE hndUFR, OUT char *message); -UFR_STATUS DL_API ReadNdefRecord_ContactM(UFR_HANDLE hndUFR, OUT char *vCard); -UFR_STATUS DL_API ReadNdefRecord_PhoneM(UFR_HANDLE hndUFR, OUT char *phone_number); -UFR_STATUS DL_API ReadNdefRecord_SMSM(UFR_HANDLE hndUFR, OUT char *phone_number, OUT char *message); -UFR_STATUS DL_API ReadNdefRecord_BluetoothM(UFR_HANDLE hndUFR, OUT char *bt_mac_address); - -//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ - -// DLL version ---------------------------------------------------------------- -uint32_t DL_API GetDllVersion(void); - -/* - * Get "exploded" dll version example: - * - * #include - * #include - * - * void main(int argc, char *argv[]) - * { - * uint32_t dwDllVersion = 0; - * uint32_t dwDllMajorVersion = 0; - * uint32_t dwDllMinorVersion = 0; - * uint32_t dwDllBuild = 0; - * - * dwDllVersion = GetDllVersion(); - * - * // "explode" the dll version: - * dwDllMajorVersion = (DWORD)(LOBYTE(LOWORD(dwDllVersion))); - * dwDllMinorVersion = (DWORD)(HIBYTE(LOWORD(dwDllVersion))); - * - * // Get the dll build number. - * dwDllBuild = (DWORD)(HIWORD(dwDllVersion)); - * - * printf("Dll version is %ld.%ld (%ld)\n", dwDllMajorVersion, - * dwDllMinorVersion, - * dwDllBuild); - * } - * - */ - -// Originality Check (performs the check is the chip on the card/tag NXP genuine): -UFR_STATUS DL_API OriginalityCheck(IN const uint8_t *signature, IN const uint8_t *uid, uint8_t uid_len, uint8_t DlogicCardType); -// Returns: -// UFR_OPEN_SSL_DYNAMIC_LIB_NOT_FOUND in case there is no OpenSSL library (libeay32.dll) in current folder or path -// UFR_OPEN_SSL_DYNAMIC_LIB_FAILED in case of OpenSSL library error (e.g. wrong OpenSSL version) -// UFR_NOT_NXP_GENUINE if chip on the card/tag is NOT NXP genuine -// UFR_OK is chip on the card/tag is NXP GENUINE - -//// debug functions: -c_string DL_API GetDllVersionStr(void); -c_string DL_API UFR_Status2String(const UFR_STATUS status); -c_string DL_API UFR_DLCardType2String(uint8_t dl_type_code); - -//// Helper functions: -#ifndef _WIN32 - -unsigned long GetTickCount(void); - -#endif // #ifndef _WIN32 - -//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ - -c_string DL_API GetReaderDescription(void); -c_string DL_API GetReaderDescriptionM(UFR_HANDLE hndUFR); - -//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ -//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ -#ifdef __ANDROID__ -#include - -JNIEnv *global_env; -jclass global_class; -void DL_API initVM(JNIEnv *env, jclass class1); -#endif - -#ifdef __cplusplus -} -#endif - -#endif /* uFCoder_H_ */ +/* + * uFCoder.h + * + * library version: 5.0.14 + * + * Created on: 2009-01-14 + * Last edited: 2019-08-28 + * + * Author: D-Logic + */ + +#ifndef uFCoder_H_ +#define uFCoder_H_ + +#include +#include + +#define IN //array that you pass to function +#define OUT //array that you receive from funciton +#define VAR //first element of array that you receive from function (single variable) + + +//////////////////////////////////////////////////////////////////// +/** + * Type for representing null terminated char array ( aka C-String ) + * Array is always one byte longer ( for null character ) then string + * Memory space for array must be allocated before use. + */ +typedef const char * c_string; +//////////////////////////////////////////////////////////////////// + +#ifdef _WIN32 +// WINDOWS +# if defined(DL_CREATE_STATIC_LIB) || defined(DL_USE_STATIC_LIB) +# define DL_API +# else +# ifndef DL_uFC_EXPORTS +# ifdef _WIN_IOT +# define DL_API __declspec(dllimport) // Win IoT +# else +# define DL_API /*__declspec(dllimport) */ __stdcall // STDCALL - GCC - .NET +# endif // _WIN_IOT +# else +# define DL_API __declspec(dllexport) __stdcall +# endif // DL_uFC_EXPORTS +# endif // DL_CREATE_STATIC_LIB +#else +// Linux & MAC OS +# define DL_API +#endif // _WIN32 + +#if defined(DL_uFC_EXPORTS) || defined(DL_CREATE_STATIC_LIB) || defined(__ANDROID__) || defined(ESP_PLATFORM) + typedef struct S_UFR_HANDLE * UFR_HANDLE; +#else + typedef void * UFR_HANDLE; +#endif + +// MIFARE CLASSIC type id's: +#define MIFARE_CLASSIC_1k 0x08 +#define MF1ICS50 0x08 +#define SLE66R35 0x88 // Infineon = Mifare Classic 1k +#define MIFARE_CLASSIC_4k 0x18 +#define MF1ICS70 0x18 +#define MIFARE_CLASSIC_MINI 0x09 +#define MF1ICS20 0x09 + +//DLOGIC CARD TYPE +#define TAG_UNKNOWN 0 +#define DL_MIFARE_ULTRALIGHT 0x01 +#define DL_MIFARE_ULTRALIGHT_EV1_11 0x02 +#define DL_MIFARE_ULTRALIGHT_EV1_21 0x03 +#define DL_MIFARE_ULTRALIGHT_C 0x04 +#define DL_NTAG_203 0x05 +#define DL_NTAG_210 0x06 +#define DL_NTAG_212 0x07 +#define DL_NTAG_213 0x08 +#define DL_NTAG_215 0x09 +#define DL_NTAG_216 0x0A +#define DL_MIKRON_MIK640D 0x0B +#define NFC_T2T_GENERIC 0x0C +#define DL_NT3H_1101 0x0D +#define DL_NT3H_1201 0x0E +#define DL_NT3H_2111 0x0F +#define DL_NT3H_2211 0x10 + +#define DL_MIFARE_MINI 0x20 +#define DL_MIFARE_CLASSIC_1K 0x21 +#define DL_MIFARE_CLASSIC_4K 0x22 +#define DL_MIFARE_PLUS_S_2K_SL0 0x23 +#define DL_MIFARE_PLUS_S_4K_SL0 0x24 +#define DL_MIFARE_PLUS_X_2K_SL0 0x25 +#define DL_MIFARE_PLUS_X_4K_SL0 0x26 +#define DL_MIFARE_DESFIRE 0x27 +#define DL_MIFARE_DESFIRE_EV1_2K 0x28 +#define DL_MIFARE_DESFIRE_EV1_4K 0x29 +#define DL_MIFARE_DESFIRE_EV1_8K 0x2A +#define DL_MIFARE_DESFIRE_EV2_2K 0x2B +#define DL_MIFARE_DESFIRE_EV2_4K 0x2C +#define DL_MIFARE_DESFIRE_EV2_8K 0x2D +#define DL_MIFARE_PLUS_S_2K_SL1 0x2E +#define DL_MIFARE_PLUS_X_2K_SL1 0x2F +#define DL_MIFARE_PLUS_EV1_2K_SL1 0x30 +#define DL_MIFARE_PLUS_X_2K_SL2 0x31 +#define DL_MIFARE_PLUS_S_2K_SL3 0x32 +#define DL_MIFARE_PLUS_X_2K_SL3 0x33 +#define DL_MIFARE_PLUS_EV1_2K_SL3 0x34 +#define DL_MIFARE_PLUS_S_4K_SL1 0x35 +#define DL_MIFARE_PLUS_X_4K_SL1 0x36 +#define DL_MIFARE_PLUS_EV1_4K_SL1 0x37 +#define DL_MIFARE_PLUS_X_4K_SL2 0x38 +#define DL_MIFARE_PLUS_S_4K_SL3 0x39 +#define DL_MIFARE_PLUS_X_4K_SL3 0x3A +#define DL_MIFARE_PLUS_EV1_4K_SL3 0x3B + +#define DL_UNKNOWN_ISO_14443_4 0x40 +#define DL_GENERIC_ISO14443_4 0x40 +#define DL_GENERIC_ISO14443_4_TYPE_B 0x41 +#define DL_GENERIC_ISO14443_3_TYPE_B 0x42 +#define DL_IMEI_UID 0x80 + +// ST Product ID-s: +#define M24SR02 0x82 +#define M24SR02_AUTOMOTIVE 0x8A +#define M24SR04 0x86 +#define M24SR04_AUTOMOTIVE 0x8E +#define M24SR16 0x85 +#define M24SR16_AUTOMOTIVE 0x8D +#define M24SR64 0x84 +#define M24SR64_AUTOMOTIVE 0x8C + +// DLJavaCardTypes: +#define DLSigner81 0xA0 +#define DLSigner22 0xA1 +#define DLSigner30 0xA2 +#define DLSigner10 0xA3 +#define DLSigner145 0xAA + +// DLJavaCardSignerAlgorithmTypes: +enum E_SIGNER_CIPHERS { + SIG_CIPHER_RSA = 0, + SIG_CIPHER_ECDSA, + + SIG_CIPHER_MAX_SUPPORTED +}; + +enum E_SIGNER_PADDINGS { + PAD_NULL = 0, + PAD_PKCS1, + + SIG_PAD_MAX_SUPPORTED +}; + +enum E_SIGNER_DIGESTS { + ALG_NULL = 0, + ALG_SHA, + ALG_SHA_256, + ALG_SHA_384, + ALG_SHA_512, + ALG_SHA_224, + + SIG_DIGEST_MAX_SUPPORTED +}; + +enum E_KEY_TYPES { + TYPE_RSA_PRIVATE = 0, + TYPE_RSA_CRT_PRIVATE, + TYPE_EC_F2M_PRIVATE, + TYPE_EC_FP_PRIVATE +}; + +enum E_OBJ_TYPES { + OBJ_TYPE_RSA_CERT = 0, + OBJ_TYPE_EC_CERT, + OBJ_TYPE_CA_CERT, + + OBJ_TYPES_COUNT +}; + +// JCDL_AIDs +#define DL_RAW_SIZEOF_SZ(x) (sizeof(x) - 1) +#define DL_AID_RID_PLUS "\xF0" "DLogic" +#define DL_SIGNER_PIX "\x00\x01" +#define DL_STORAGE_PIX "\x01\x01" +#define DL_SIGNER_AID DL_AID_RID_PLUS DL_SIGNER_PIX +#define DL_SIGNER_AID_SIZE 9 +#define DL_STORAGE_AID DL_AID_RID_PLUS DL_STORAGE_PIX +#define DL_STORAGE_AID_SIZE 9 + +// Universal JCDL instructions: +#define INS_LOGIN 0x20 +#define INS_GET_PIN_TRIES_REMAINING 0x21 +#define INS_PIN_CHANGE 0x22 +#define INS_PIN_UNBLOCK 0x23 + +// JCDLStorage instructions: +#define INS_PIN_ENABLE 0x24 +#define INS_PIN_DISABLE 0x25 +#define INS_LIST_FILES 0x31 +#define INS_GET_FILE_SIZE 0x32 +#define INS_READ_FILE 0x33 +#define INS_WRITE_FILE 0x34 +#define INS_DELETE_FILE 0x3F + +// JCDLSigner instructions: +#define INS_SET_RSA_PRIKEY 0x51 +#define INS_GEN_RSA_KEY_PAIR 0x52 +#define INS_GET_RSA_PUBKEY_MODULUS 0x53 +#define INS_GET_RSA_PUBKEY_EXPONENT 0x54 +#define INS_DEL_RSA_KEY_PAIR 0x5F +#define INS_SET_EC_PRIKEY 0x61 +#define INS_GEN_EC_KEY_PAIR 0x62 +#define INS_GET_EC_PUBKEY 0x63 +#define INS_GET_EC_FIELD 0x64 +#define INS_GET_EC_AB 0x65 +#define INS_GET_EC_G 0x66 +#define INS_GET_EC_RK_SIZE 0x67 +#define INS_DEL_EC_KEY_PAIR 0x6F +#define INS_GET_SIGNATURE 0x71 +#define INS_PUT_OBJ 0x31 +#define INS_PUT_OBJ_SUBJECT 0x32 +#define INS_INVALIDATE_CERT 0x33 +#define INS_GET_OBJ 0x41 +#define INS_GET_OBJ_ID 0x42 +#define INS_GET_OBJ_SUBJECT 0x43 + +// Universal JCDL constants: +#define PIN_MAX_TRIES 5 +#define PIN_MIN_LENGTH 4 +#define PIN_MAX_LENGTH 8 +#define PUK_MAX_TRIES 10 +#define PUK_LENGTH 8 + +// JCDLSigner constants: +#define JC_APP_MAX_KEY_INDEX ((3) - 1) +#define JC_APP_MAX_CA_CERT_INDEX ((12) - 1) +#define JC_APP_MAX_ID_SIZE 253 +#define JC_APP_MAX_SUBJECT_SIZE 255 +#define JC_APP_MAX_SIGNATURE_LEN 256 +#define JC_APP_MAX_PIN_LENGTH 8 + +// JCDLStorage constants: +#define JC_DL_STORAGE_MAX_FILES 16 +#define JC_DL_STORAGE_MAX_FILE_SIZE (32 * 1024 - 2) // 32KB - 2 byte system reserved + +// MIFARE CLASSIC Authentication Modes: +enum MIFARE_AUTHENTICATION +{ + MIFARE_AUTHENT1A = 0x60, + MIFARE_AUTHENT1B = 0x61, +}; + +//MIFARE PLUS AES Authentication Modes: +enum MIFARE_PLUS_AES_AUTHENTICATION +{ + MIFARE_PLUS_AES_AUTHENT1A = 0x80, + MIFARE_PLUS_AES_AUTHENT1B = 0x81, +}; + +// T2T authentication constants: +enum T2T_AUTHENTICATION +{ + T2T_NO_PWD_AUTH = 0, + T2T_RKA_PWD_AUTH = 1, + T2T_PK_PWD_AUTH = 3, + T2T_WITHOUT_PWD_AUTH = 0x60, + T2T_WITH_PWD_AUTH = 0x61, +}; + +enum ADDRESS_MODE +{ + ADDRESS_MODE_BLOCK = 0, + ADDRESS_MODE_SECTOR, +}; + +#define MAX_UID_LEN 10 +#define ECC_SIG_LEN 32 + +// API Status Codes Type: +typedef enum UFCODER_ERROR_CODES +{ + UFR_OK = 0x00, + UFR_COMMUNICATION_ERROR = 0x01, + UFR_CHKSUM_ERROR = 0x02, + UFR_READING_ERROR = 0x03, + UFR_WRITING_ERROR = 0x04, + UFR_BUFFER_OVERFLOW = 0x05, + UFR_MAX_ADDRESS_EXCEEDED = 0x06, + UFR_MAX_KEY_INDEX_EXCEEDED = 0x07, + UFR_NO_CARD = 0x08, + UFR_COMMAND_NOT_SUPPORTED = 0x09, + UFR_FORBIDEN_DIRECT_WRITE_IN_SECTOR_TRAILER = 0x0A, + UFR_ADDRESSED_BLOCK_IS_NOT_SECTOR_TRAILER = 0x0B, + UFR_WRONG_ADDRESS_MODE = 0x0C, + UFR_WRONG_ACCESS_BITS_VALUES = 0x0D, + UFR_AUTH_ERROR = 0x0E, + UFR_PARAMETERS_ERROR = 0x0F, // ToDo, point 5. + UFR_MAX_SIZE_EXCEEDED = 0x10, + UFR_UNSUPPORTED_CARD_TYPE = 0x11, + + UFR_COMMUNICATION_BREAK = 0x50, + UFR_NO_MEMORY_ERROR = 0x51, + UFR_CAN_NOT_OPEN_READER = 0x52, + UFR_READER_NOT_SUPPORTED = 0x53, + UFR_READER_OPENING_ERROR = 0x54, + UFR_READER_PORT_NOT_OPENED = 0x55, + UFR_CANT_CLOSE_READER_PORT = 0x56, + + UFR_WRITE_VERIFICATION_ERROR = 0x70, + UFR_BUFFER_SIZE_EXCEEDED = 0x71, + UFR_VALUE_BLOCK_INVALID = 0x72, + UFR_VALUE_BLOCK_ADDR_INVALID = 0x73, + UFR_VALUE_BLOCK_MANIPULATION_ERROR = 0x74, + UFR_WRONG_UI_MODE = 0x75, + UFR_KEYS_LOCKED = 0x76, + UFR_KEYS_UNLOCKED = 0x77, + UFR_WRONG_PASSWORD = 0x78, + UFR_CAN_NOT_LOCK_DEVICE = 0x79, + UFR_CAN_NOT_UNLOCK_DEVICE = 0x7A, + UFR_DEVICE_EEPROM_BUSY = 0x7B, + UFR_RTC_SET_ERROR = 0x7C, + + ANTI_COLLISION_DISABLED = 0x7D, + NO_TAGS_ENUMERRATED = 0x7E, + CARD_ALREADY_SELECTED = 0x7F, + + // NDEF error codes + UFR_WRONG_NDEF_CARD_FORMAT = 0x80, + UFR_NDEF_MESSAGE_NOT_FOUND = 0x81, + UFR_NDEF_UNSUPPORTED_CARD_TYPE = 0x82, + UFR_NDEF_CARD_FORMAT_ERROR = 0x83, + UFR_MAD_NOT_ENABLED = 0x84, + UFR_MAD_VERSION_NOT_SUPPORTED = 0x85, + UFR_NDEF_MESSAGE_NOT_COMPATIBLE = 0x86, + + // Tag emulation mode errors: + FORBIDDEN_IN_TAG_EMULATION_MODE = 0x90, + + // FTDI errors: + UFR_FT_STATUS_ERROR_1 = 0xA0, + UFR_FT_STATUS_ERROR_2 = 0xA1, + UFR_FT_STATUS_ERROR_3 = 0xA2, + UFR_FT_STATUS_ERROR_4 = 0xA3, + UFR_FT_STATUS_ERROR_5 = 0xA4, + UFR_FT_STATUS_ERROR_6 = 0xA5, + UFR_FT_STATUS_ERROR_7 = 0xA6, + UFR_FT_STATUS_ERROR_8 = 0xA7, + UFR_FT_STATUS_ERROR_9 = 0xA8, + + //MIFARE PLUS error codes + UFR_MFP_COMMAND_OVERFLOW = 0xB0, + UFR_MFP_INVALID_MAC = 0xB1, + UFR_MFP_INVALID_BLOCK_NR = 0xB2, + UFR_MFP_NOT_EXIST_BLOCK_NR = 0xB3, + UFR_MFP_COND_OF_USE_ERROR = 0xB4, + UFR_MFP_LENGTH_ERROR = 0xB5, + UFR_MFP_GENERAL_MANIP_ERROR = 0xB6, + UFR_MFP_SWITCH_TO_ISO14443_4_ERROR = 0xB7, + UFR_MFP_ILLEGAL_STATUS_CODE = 0xB8, + UFR_MFP_MULTI_BLOCKS_READ = 0xB9, + + // multiple units - return from the functions with ReaderList_ prefix in name + UFR_DEVICE_WRONG_HANDLE = 0x100, + UFR_DEVICE_INDEX_OUT_OF_BOUND, + UFR_DEVICE_ALREADY_OPENED, + UFR_DEVICE_ALREADY_CLOSED, + UFR_DEVICE_IS_NOT_CONNECTED, + + // Originality Check Error Codes: + UFR_NOT_NXP_GENUINE = 0x200, + UFR_OPEN_SSL_DYNAMIC_LIB_FAILED, + UFR_OPEN_SSL_DYNAMIC_LIB_NOT_FOUND, + + // DESFIRE Card Status Error Codes: + READER_ERROR = 0xBB7, // 2999 [dec] + NO_CARD_DETECTED = 0xBB8, // 3000 [dec] + CARD_OPERATION_OK = 0xBB9, // 3001 [dec] + WRONG_KEY_TYPE = 0xBBA, // 3002 [dec] + KEY_AUTH_ERROR = 0xBBB, // 3003 [dec] + CARD_CRYPTO_ERROR = 0xBBC, // 3004 [dec] + READER_CARD_COMM_ERROR = 0xBBD, // 3005 [dec] + PC_READER_COMM_ERROR = 0xBBE, // 3006 [dec] + COMMIT_TRANSACTION_NO_REPLY = 0xBBF, // 3007 [dec] + COMMIT_TRANSACTION_ERROR = 0xBC0, // 3008 [dec] + + DESFIRE_CARD_NO_CHANGES = 0x0C0C, + DESFIRE_CARD_OUT_OF_EEPROM_ERROR = 0x0C0E, + DESFIRE_CARD_ILLEGAL_COMMAND_CODE = 0x0C1C, + DESFIRE_CARD_INTEGRITY_ERROR = 0x0C1E, + DESFIRE_CARD_NO_SUCH_KEY = 0x0C40, + DESFIRE_CARD_LENGTH_ERROR = 0x0C7E, + DESFIRE_CARD_PERMISSION_DENIED = 0x0C9D, + DESFIRE_CARD_PARAMETER_ERROR = 0x0C9E, + DESFIRE_CARD_APPLICATION_NOT_FOUND = 0x0CA0, + DESFIRE_CARD_APPL_INTEGRITY_ERROR = 0x0CA1, + DESFIRE_CARD_AUTHENTICATION_ERROR = 0x0CAE, + DESFIRE_CARD_ADDITIONAL_FRAME = 0x0CAF, + DESFIRE_CARD_BOUNDARY_ERROR = 0x0CBE, + DESFIRE_CARD_PICC_INTEGRITY_ERROR = 0x0CC1, + DESFIRE_CARD_COMMAND_ABORTED = 0x0CCA, + DESFIRE_CARD_PICC_DISABLED_ERROR = 0x0CCD, + DESFIRE_CARD_COUNT_ERROR = 0x0CCE, + DESFIRE_CARD_DUPLICATE_ERROR = 0x0CDE, + DESFIRE_CARD_EEPROM_ERROR_DES = 0x0CEE, + DESFIRE_CARD_FILE_NOT_FOUND = 0x0CF0, + DESFIRE_CARD_FILE_INTEGRITY_ERROR = 0x0CF1, + + // uFCoder library errors: + UFR_NOT_IMPLEMENTED = 0x1000, + UFR_COMMAND_FAILED = 0x1001, + UFR_TIMEOUT_ERR = 0x1002, + UFR_FILE_SYSTEM_ERROR = 0x1003, + UFR_FILE_SYSTEM_PATH_NOT_EXISTS = 0x1004, + UFR_FILE_NOT_EXISTS = 0x1005, + + // JC cards APDU Error Codes: + UFR_APDU_TRANSCEIVE_ERROR = 0xAE, + UFR_APDU_JC_APP_NOT_SELECTED = 0x6000, + UFR_APDU_JC_APP_BUFF_EMPTY = 0x6001, + UFR_APDU_WRONG_SELECT_RESPONSE = 0x6002, + UFR_APDU_WRONG_KEY_TYPE = 0x6003, + UFR_APDU_WRONG_KEY_SIZE = 0x6004, + UFR_APDU_WRONG_KEY_PARAMS = 0x6005, + UFR_APDU_WRONG_SIGNING_ALGORITHM = 0x6006, + UFR_APDU_PLAIN_TEXT_MAX_SIZE_EXCEEDED = 0x6007, + UFR_APDU_UNSUPPORTED_KEY_SIZE = 0x6008, + UFR_APDU_UNSUPPORTED_ALGORITHMS = 0x6009, + UFR_APDU_PKI_OBJECT_NOT_FOUND = 0x600A, + UFR_APDU_MAX_PIN_LENGTH_EXCEEDED = 0x600B, + UFR_DIGEST_LENGTH_DOES_NOT_MATCH = 0x600C, + + // Secure channel specific errors: + UFR_SECURE_CHANNEL_SESSION_FAILED = 0x6C00, + + // ISO7816-4 Errors (R-APDU) - 2 SW bytes returned by the card, prefixed with 0x000A: + UFR_APDU_SW_TAG = 0x000A0000, + UFR_APDU_SW_WRONG_LENGTH = 0x000A6700, + UFR_APDU_SW_SECURITY_STATUS_NOT_SATISFIED = 0x000A6982, + UFR_APDU_SW_AUTHENTICATION_METHOD_BLOCKED = 0x000A6983, + UFR_APDU_SW_DATA_INVALID = 0x000A6984, + UFR_APDU_SW_CONDITIONS_NOT_SATISFIED = 0x000A6985, + UFR_APDU_SW_WRONG_DATA = 0x000A6A80, + UFR_APDU_SW_FILE_NOT_FOUND = 0x000A6A82, + UFR_APDU_SW_RECORD_NOT_FOUND = 0x000A6A83, + UFR_APDU_SW_DATA_NOT_FOUND = 0x000A6A88, + UFR_APDU_SW_ENTITY_ALREADY_EXISTS = 0x000A6A89, + UFR_APDU_SW_INS_NOT_SUPPORTED = 0x000A6D00, + UFR_APDU_SW_NO_PRECISE_DIAGNOSTIC = 0x000A6F00, + //SAM module error codes: + UFR_SAM_APDU_ERROR = 0x2000, + UFR_SAM_AUTH_ERROR, + UFR_SAM_CRYPTO_ERROR, + + MAX_UFR_STATUS = 0x7FFFFFFF + +} UFR_STATUS; + +//DESFIRE key settings values +#define DESFIRE_KEY_SET_CREATE_WITH_AUTH_SET_CHANGE_KEY_CHANGE 0x09 +#define DESFIRE_KEY_SET_CREATE_WITHOUT_AUTH_SET_CHANGE_KEY_CHANGE 0x0F +#define DESFIRE_KEY_SET_CREATE_WITH_AUTH_SET_NOT_CHANGE_KEY_CHANGE 0x01 +#define DESFIRE_KEY_SET_CREATE_WITHOUT_AUTH_SET_NOT_CHANGE_KEY_CHANGE 0x07 +#define DESFIRE_KEY_SET_CREATE_WITH_AUTH_SET_CHANGE_KEY_NOT_CHANGE 0x08 +#define DESFIRE_KEY_SET_CREATE_WITHOUT_AUTH_SET_CHANGE_KEY_NOT_CHANGE 0x0E +#define DESFIRE_KEY_SET_CREATE_WITH_AUTH_SET_NOT_CHANGE_KEY_NOT_CHANGE 0x00 +#define DESFIRE_KEY_SET_CREATE_WITHOUT_AUTH_SET_NOT_CHANGE_KEY_NOT_CHANGE 0x06 + +#define DESFIRE_KEY_SET_CREATE_WITH_AUTH_SET_CHANGE_KEY_CHANGE_APP_IDS_WITH_AUTH 0x09 +#define DESFIRE_KEY_SET_CREATE_WITHOUT_AUTH_SET_CHANGE_KEY_CHANGE_APP_IDS_WIDTHOUT_AUTH 0x0F +#define DESFIRE_KEY_SET_CREATE_WITH_AUTH_SET_NOT_CHANGE_KEY_CHANGE_APP_IDS_WITH_AUTH 0x01 +#define DESFIRE_KEY_SET_CREATE_WITHOUT_AUTH_SET_NOT_CHANGE_KEY_CHANGE_APP_IDS_WIDTHOUT_AUTH 0x07 +#define DESFIRE_KEY_SET_CREATE_WITH_AUTH_SET_CHANGE_KEY_NOT_CHANGE_APP_IDS_WITH_AUTH 0x08 +#define DESFIRE_KEY_SET_CREATE_WITHOUT_AUTH_SET_CHANGE_KEY_NOT_CHANGE_APP_IDS_WIDTHOUT_AUTH 0x0E +#define DESFIRE_KEY_SET_CREATE_WITH_AUTH_SET_NOT_CHANGE_KEY_NOT_CHANGE_APP_IDS_WITH_AUTH 0x00 +#define DESFIRE_KEY_SET_CREATE_WITHOUT_AUTH_SET_NOT_CHANGE_KEY_NOT_CHANGE_APP_IDS_WIDTHOUT_AUTH 0x06 +#define DESFIRE_KEY_SET_CREATE_WITH_AUTH_SET_CHANGE_KEY_CHANGE_APP_IDS_WIDTHOUT_AUTH 0x0B +#define DESFIRE_KEY_SET_CREATE_WITH_AUTH_SET_NOT_CHANGE_KEY_CHANGE_APP_IDS_WIDTHOUT_AUTH 0x02 +#define DESFIRE_KEY_SET_CREATE_WITH_AUTH_SET_CHANGE_KEY_NOT_CHANGE_APP_IDS_WIDTHOUT_AUTH 0x0A +#define DESFIRE_KEY_SET_CREATE_WITH_AUTH_SET_NOT_CHANGE_KEY_NOT_CHANGE_APP_IDS_WIDTHOUT_AUTH 0x02 + + +enum E_ASYMMETRIC_KEY_TYPES { + RSA_PRIVATE_KEY = 0, + ECDSA_PRIVATE_KEY, + + ASYMMETRIC_KEY_TYPES_NUM +}; + +typedef enum { + USER_PIN = 0, + SO_PIN, + USER_PUK, + SO_PUK +} dl_sec_code_t; + +//SAM definition +typedef enum E_SAM_HW_VER { + SAM_UNKNOWN_TYPE, + SAM_T1AD2060_AV1_MODE , + SAM_T1AD2060_AV2_MODE, + SAM_T1AR1070_AV1_MODE, + SAM_T1AR1070_AV2_MODE +}SAM_HW_TYPE; + +#ifdef __cplusplus +extern "C" +{ +#endif + +//-------------------------------------------------------------------------------------------------- + +UFR_STATUS DL_API ReaderOpen(void); + +/** + * Useful for speed up opening for non uFR basic reader type + * + * @param reader_type : 0 : auto > same as call ReaderOpen() + * 1 : uFR type (1 Mbps) + * 2 : uFR RS232 type (115200 bps) + * 3 : BASE HD uFR (XRC) type (250 Kbps) + * @return + */ +UFR_STATUS DL_API ReaderOpenByType(uint32_t reader_type); + +/** + * ReaderOpenEx() is a function for opening port with + * + * @param reader_type : 0 : auto > same as call ReaderOpen() + * 1 : uFR type (1 Mbps) + * 2 : uFR RS232 type (115200 bps) + * 3 : BASE HD uFR (XRC) type (250 Kbps) + * @param port_name : serial port name, identifier, like + * "COM3" on Window or + * "/dev/ttyS0" on Linux or + * "/dev/tty.serial1" on OS X + * or if you select FTDI + * "UN123456" if Reader have integrated FTDI interface + * "192.168.1.162:8881" IP adress:port for TCP/IP or UDP I/F + * @param port_interface : type of communication interfaces + * 0 : auto - first try FTDI than serial if no port_name defined + * 1 : try serial / virtual COM port / interfaces + * 2 : try only FTDI communication interfaces + * // Digital Logic Shields + * 10 : open Digital Logic Shields with RS232 uFReader on Raspberry Pi (serial interfaces with GPIO reset) + * 84 ('T') : TCP/IP interface + * 85 ('U') : UDP interface + * @param arg : additional settings in c-string format: + * "UNIT_OPEN_RESET_DISABLE" : do not reset the reader when opening + * "UNIT_OPEN_RESET_FORCE" : force reset the reader when opening + * "READER_ACTIVE_ON_RTS_LOW" : (default) Reset the reader when RTS is high - the reader works when RTS is low + * "READER_ACTIVE_ON_RTS_HIGH" : Reset the reader when RTS is low - the reader works when RTS is high + * "RTS_ALWAYS_HIGH" : not implemented yet + * "RTS_ALWAYS_LOW" : not implemented yet + * "RTS_DISCONNECTED" : disconnect RTS (RTS is not initiate nor use) + * + * @return + */ +UFR_STATUS DL_API ReaderOpenEx(uint32_t reader_type, + IN c_string port_name, + uint32_t port_interface, + IN void *arg); + +UFR_STATUS DL_API ReaderReset(void); +UFR_STATUS DL_API ReaderClose(void); +UFR_STATUS DL_API ReaderSoftRestart(void); +UFR_STATUS DL_API ReaderHwReset(void); +UFR_STATUS DL_API GetReaderType(IN uint32_t *lpulReaderType); +UFR_STATUS DL_API GetReaderSerialNumber(IN uint32_t *lpulSerialNumber); + +UFR_STATUS DL_API ReaderStillConnected(VAR uint32_t *connected); + +UFR_STATUS DL_API ReaderKeyWrite(IN const uint8_t *aucKey, uint8_t ucKeyIndex); +UFR_STATUS DL_API ReaderKeysLock(IN const uint8_t *password); +UFR_STATUS DL_API ReaderKeysUnlock(IN const uint8_t *password); +UFR_STATUS DL_API ReaderUISignal(uint8_t light_signal_mode, + uint8_t beep_signal_mode); +UFR_STATUS DL_API ReadUserData(OUT uint8_t *aucData); +UFR_STATUS DL_API WriteUserData(IN const uint8_t *aucData); +UFR_STATUS DL_API GetCardId(VAR uint8_t *lpucCardType, OUT uint32_t *lpulCardSerial); +UFR_STATUS DL_API BlockRead(OUT uint8_t *data, + uint8_t block_address, + uint8_t auth_mode, + uint8_t key_index); +UFR_STATUS DL_API BlockReadSamKey(OUT uint8_t *data, uint8_t block_address, + uint8_t auth_mode, uint8_t key_index); +UFR_STATUS DL_API BlockWrite(IN const uint8_t *data, + uint8_t block_address, + uint8_t auth_mode, + uint8_t key_index); +UFR_STATUS DL_API BlockWriteSamKey(IN const uint8_t *data, + uint8_t block_address, uint8_t auth_mode, uint8_t key_index); +UFR_STATUS DL_API BlockInSectorRead(OUT uint8_t *data, + uint8_t sector_address, + uint8_t block_in_sector_address, + uint8_t auth_mode, + uint8_t key_index); +UFR_STATUS DL_API BlockInSectorReadSamKey(OUT uint8_t *data, + uint8_t sector_address, + uint8_t block_in_sector_address, + uint8_t auth_mode, + uint8_t key_index); +UFR_STATUS DL_API BlockInSectorWrite(IN const uint8_t *data, + uint8_t sector_address, + uint8_t block_in_sector_address, + uint8_t auth_mode, + uint8_t key_index); +UFR_STATUS DL_API BlockInSectorWriteSamKey(IN const uint8_t *data, + uint8_t sector_address, + uint8_t block_in_sector_address, + uint8_t auth_mode, + uint8_t key_index); +UFR_STATUS DL_API LinearRead(OUT uint8_t *aucData, + uint16_t usLinearAddress, + uint16_t usDataLength, + VAR uint16_t *lpusBytesReturned, + uint8_t ucKeyMode, + uint8_t ucReaderKeyIndex); +UFR_STATUS DL_API LinearReadSamKey(OUT uint8_t *aucData, + uint16_t usLinearAddress, + uint16_t usDataLength, + VAR uint16_t *lpusBytesReturned, + uint8_t ucKeyMode, + uint8_t ucReaderKeyIndex); + +UFR_STATUS DL_API LinRowRead(OUT uint8_t *aucData, + uint16_t usLinearAddress, + uint16_t usDataLength, + VAR uint16_t *lpusBytesReturned, + uint8_t ucKeyMode, + uint8_t ucReaderKeyIndex); + +UFR_STATUS DL_API LinearWrite(IN const uint8_t *aucData, + uint16_t usLinearAddress, + uint16_t usDataLength, + VAR uint16_t *lpusBytesWritten, + uint8_t ucKeyMode, + uint8_t ucReaderKeyIndex); +UFR_STATUS DL_API LinearWriteSamKey(IN const uint8_t *aucData, + uint16_t usLinearAddress, + uint16_t usDataLength, + VAR uint16_t *lpusBytesWritten, + uint8_t ucKeyMode, + uint8_t ucReaderKeyIndex); +UFR_STATUS DL_API LinearFormatCard(IN const uint8_t *new_key_A, + uint8_t blocks_access_bits, + uint8_t sector_trailers_access_bits, + uint8_t sector_trailers_byte9, + IN const uint8_t *new_key_B, + VAR uint8_t *lpucSectorsFormatted, + uint8_t auth_mode, + uint8_t key_index); + +UFR_STATUS DL_API SectorTrailerWrite(uint8_t addressing_mode, + uint8_t address, + IN const uint8_t *new_key_A, + uint8_t block0_access_bits, + uint8_t block1_access_bits, + uint8_t block2_access_bits, + uint8_t sector_trailer_access_bits, + uint8_t sector_trailer_byte9, + IN const uint8_t *new_key_B, + uint8_t auth_mode, + uint8_t key_index); +UFR_STATUS DL_API SectorTrailerWriteUnsafe(uint8_t addressing_mode, + uint8_t address, + IN const uint8_t *sector_trailer, + uint8_t auth_mode, + uint8_t key_index); +UFR_STATUS DL_API ValueBlockRead(VAR int32_t *value, + VAR uint8_t *value_addr, + uint8_t block_address, + uint8_t auth_mode, + uint8_t key_index); +UFR_STATUS DL_API ValueBlockInSectorRead(VAR int32_t *value, + VAR uint8_t *value_addr, + uint8_t sector_address, + uint8_t block_in_sector_address, + uint8_t auth_mode, + uint8_t key_index); +UFR_STATUS DL_API ValueBlockReadSamKey(VAR int32_t *value, + VAR uint8_t *value_addr, + uint8_t block_address, + uint8_t auth_mode, + uint8_t key_index); + + +UFR_STATUS DL_API ValueBlockInSectorReadSamKey(VAR int32_t *value, + VAR uint8_t *value_addr, + uint8_t sector_address, + uint8_t block_in_sector_address, + uint8_t auth_mode, + uint8_t key_index); +UFR_STATUS DL_API ValueBlockWrite(int32_t value, + uint8_t value_addr, + uint8_t block_address, + uint8_t auth_mode, + uint8_t key_index); +UFR_STATUS DL_API ValueBlockWriteSamKey(int32_t value, + uint8_t value_addr, + uint8_t block_address, + uint8_t auth_mode, + uint8_t key_index); +UFR_STATUS DL_API ValueBlockInSectorWrite(int32_t value, + uint8_t value_addr, + uint8_t sector_address, + uint8_t block_in_sector_address, + uint8_t auth_mode, + uint8_t key_index); +UFR_STATUS DL_API ValueBlockInSectorWriteSamKey(int32_t value, + uint8_t value_addr, + uint8_t sector_address, + uint8_t block_in_sector_address, + uint8_t auth_mode, + uint8_t key_index); +UFR_STATUS DL_API ValueBlockIncrement(int32_t increment_value, + uint8_t block_address, + uint8_t auth_mode, + uint8_t key_index); +UFR_STATUS DL_API ValueBlockIncrementSamKey(int32_t increment_value, + uint8_t block_address, + uint8_t auth_mode, + uint8_t key_index); +UFR_STATUS DL_API ValueBlockInSectorIncrement(int32_t increment_value, + uint8_t sector_address, + uint8_t block_in_sector_address, + uint8_t auth_mode, + uint8_t key_index); +UFR_STATUS DL_API ValueBlockInSectorIncrementSamKey(int32_t increment_value, + uint8_t sector_address, + uint8_t block_in_sector_address, + uint8_t auth_mode, + uint8_t key_index); +UFR_STATUS DL_API ValueBlockDecrement(int32_t decrement_value, + uint8_t block_address, + uint8_t auth_mode, + uint8_t key_index); +UFR_STATUS DL_API ValueBlockDecrementSamKey(int32_t decrement_value, + uint8_t block_address, + uint8_t auth_mode, + uint8_t key_index); +UFR_STATUS DL_API ValueBlockInSectorDecrement(int32_t decrement_value, + uint8_t sector_address, + uint8_t block_in_sector_address, + uint8_t auth_mode, + uint8_t key_index); +UFR_STATUS DL_API ValueBlockInSectorDecrementSamKey(int32_t decrement_value, + uint8_t sector_address, + uint8_t block_in_sector_address, + uint8_t auth_mode, + uint8_t key_index); +UFR_STATUS DL_API BlockRead_AKM1(OUT uint8_t *data, + uint8_t block_address, + uint8_t auth_mode); +UFR_STATUS DL_API BlockWrite_AKM1(IN const uint8_t *data, + uint8_t block_address, + uint8_t auth_mode); +UFR_STATUS DL_API BlockInSectorRead_AKM1(OUT uint8_t *data, + uint8_t sector_address, + uint8_t block_in_sector_address, + uint8_t auth_mode); +UFR_STATUS DL_API BlockInSectorWrite_AKM1(IN const uint8_t *data, + uint8_t sector_address, + uint8_t block_in_sector_address, + uint8_t auth_mode); +UFR_STATUS DL_API LinearRead_AKM1(OUT uint8_t *data, + uint16_t linear_address, + uint16_t length, + VAR uint16_t *bytes_returned, + uint8_t auth_mode); +UFR_STATUS DL_API LinRowRead_AKM1(OUT uint8_t *data, + uint16_t linear_address, + uint16_t length, + VAR uint16_t *bytes_returned, + uint8_t auth_mode); +UFR_STATUS DL_API LinearWrite_AKM1(IN const uint8_t *data, + uint16_t linear_address, + uint16_t length, + VAR uint16_t *bytes_written, + uint8_t auth_mode); +UFR_STATUS DL_API LinearFormatCard_AKM1(IN const uint8_t *new_key_A, + uint8_t blocks_access_bits, + uint8_t sector_trailers_access_bits, + uint8_t sector_trailers_byte9, + IN const uint8_t *new_key_B, + VAR uint8_t *lpucSectorsFormatted, + uint8_t auth_mode); +UFR_STATUS DL_API SectorTrailerWrite_AKM1(uint8_t addressing_mode, + uint8_t address, + IN const uint8_t *new_key_A, + uint8_t block0_access_bits, + uint8_t block1_access_bits, + uint8_t block2_access_bits, + uint8_t sector_trailer_access_bits, + uint8_t sector_trailer_byte9, + IN const uint8_t *new_key_B, + uint8_t auth_mode); +UFR_STATUS DL_API SectorTrailerWriteUnsafe_AKM1(uint8_t addressing_mode, + uint8_t address, + IN const uint8_t *sector_trailer, + uint8_t auth_mode); +UFR_STATUS DL_API ValueBlockRead_AKM1(VAR int32_t *value, + VAR uint8_t *value_addr, + uint8_t block_address, + uint8_t auth_mode); +UFR_STATUS DL_API ValueBlockInSectorRead_AKM1(VAR int32_t *value, + VAR uint8_t *value_addr, + uint8_t sector_address, + uint8_t block_in_sector_address, + uint8_t auth_mode); +UFR_STATUS DL_API ValueBlockWrite_AKM1(int32_t value, + uint8_t value_addr, + uint8_t block_address, + uint8_t auth_mode); +UFR_STATUS DL_API ValueBlockInSectorWrite_AKM1(int32_t value, + uint8_t value_addr, + uint8_t sector_address, + uint8_t block_in_sector_address, + uint8_t auth_mode); +UFR_STATUS DL_API ValueBlockIncrement_AKM1(int32_t increment_value, + uint8_t block_address, + uint8_t auth_mode); +UFR_STATUS DL_API ValueBlockInSectorIncrement_AKM1(int32_t increment_value, + uint8_t sector_address, + uint8_t block_in_sector_address, + uint8_t auth_mode); +UFR_STATUS DL_API ValueBlockDecrement_AKM1(int32_t decrement_value, + uint8_t block_address, + uint8_t auth_mode); +UFR_STATUS DL_API ValueBlockInSectorDecrement_AKM1(int32_t decrement_value, + uint8_t sector_address, + uint8_t block_in_sector_address, + uint8_t auth_mode); + +UFR_STATUS DL_API BlockRead_AKM2(OUT uint8_t *data, + uint8_t block_address, + uint8_t auth_mode); +UFR_STATUS DL_API BlockWrite_AKM2(IN const uint8_t *data, + uint8_t block_address, + uint8_t auth_mode); +UFR_STATUS DL_API BlockInSectorRead_AKM2(OUT uint8_t *data, + uint8_t sector_address, + uint8_t block_in_sector_address, + uint8_t auth_mode); +UFR_STATUS DL_API BlockInSectorWrite_AKM2(IN const uint8_t *data, + uint8_t sector_address, + uint8_t block_in_sector_address, + uint8_t auth_mode); +UFR_STATUS DL_API LinearRead_AKM2(OUT uint8_t *data, + uint16_t linear_address, + uint16_t length, + VAR uint16_t *bytes_returned, + uint8_t auth_mode); +UFR_STATUS DL_API LinRowRead_AKM2(OUT uint8_t *data, + uint16_t linear_address, + uint16_t length, + VAR uint16_t *bytes_returned, + uint8_t auth_mode); +UFR_STATUS DL_API LinearWrite_AKM2(IN const uint8_t *data, + uint16_t linear_address, + uint16_t length, + VAR uint16_t *bytes_written, + uint8_t auth_mode); +UFR_STATUS DL_API LinearFormatCard_AKM2(IN const uint8_t *new_key_A, + uint8_t blocks_access_bits, + uint8_t sector_trailers_access_bits, + uint8_t sector_trailers_byte9, + IN const uint8_t *new_key_B, + VAR uint8_t *lpucSectorsFormatted, + uint8_t auth_mode); +UFR_STATUS DL_API SectorTrailerWrite_AKM2(uint8_t addressing_mode, + uint8_t address, + IN const uint8_t *new_key_A, + uint8_t block0_access_bits, + uint8_t block1_access_bits, + uint8_t block2_access_bits, + uint8_t sector_trailer_access_bits, + uint8_t sector_trailer_byte9, + IN const uint8_t *new_key_B, + uint8_t auth_mode); +UFR_STATUS DL_API SectorTrailerWriteUnsafe_AKM2(uint8_t addressing_mode, + uint8_t address, + IN const uint8_t *sector_trailer, + uint8_t auth_mode); +UFR_STATUS DL_API ValueBlockRead_AKM2(VAR int32_t *value, + VAR uint8_t *value_addr, + uint8_t block_address, + uint8_t auth_mode); +UFR_STATUS DL_API ValueBlockInSectorRead_AKM2(VAR int32_t *value, + VAR uint8_t *value_addr, + uint8_t sector_address, + uint8_t block_in_sector_address, + uint8_t auth_mode); +UFR_STATUS DL_API ValueBlockWrite_AKM2(int32_t value, + uint8_t value_addr, + uint8_t block_address, + uint8_t auth_mode); +UFR_STATUS DL_API ValueBlockInSectorWrite_AKM2(int32_t value, + uint8_t value_addr, + uint8_t sector_address, + uint8_t block_in_sector_address, + uint8_t auth_mode); +UFR_STATUS DL_API ValueBlockIncrement_AKM2(int32_t increment_value, + uint8_t block_address, + uint8_t auth_mode); +UFR_STATUS DL_API ValueBlockInSectorIncrement_AKM2(int32_t increment_value, + uint8_t sector_address, + uint8_t block_in_sector_address, + uint8_t auth_mode); +UFR_STATUS DL_API ValueBlockDecrement_AKM2(int32_t decrement_value, + uint8_t block_address, + uint8_t auth_mode); +UFR_STATUS DL_API ValueBlockInSectorDecrement_AKM2(int32_t decrement_value, + uint8_t sector_address, + uint8_t block_in_sector_address, + uint8_t auth_mode); + +UFR_STATUS DL_API BlockRead_PK(OUT uint8_t *data, + uint8_t block_address, + uint8_t auth_mode, + IN const uint8_t *key); +UFR_STATUS DL_API BlockWrite_PK(IN const uint8_t *data, + uint8_t block_address, + uint8_t auth_mode, + IN const uint8_t *key); +UFR_STATUS DL_API BlockInSectorRead_PK(OUT uint8_t *data, + uint8_t sector_address, + uint8_t block_in_sector_address, + uint8_t auth_mode, + IN const uint8_t *key); +UFR_STATUS DL_API BlockInSectorWrite_PK(IN const uint8_t *data, + uint8_t sector_address, + uint8_t block_in_sector_address, + uint8_t auth_mode, + IN const uint8_t *key); +UFR_STATUS DL_API LinearRead_PK(OUT uint8_t *data, + uint16_t linear_address, + uint16_t length, + VAR uint16_t *bytes_returned, + uint8_t auth_mode, + IN const uint8_t *key); +UFR_STATUS DL_API LinRowRead_PK(OUT uint8_t *data, + uint16_t linear_address, + uint16_t length, + VAR uint16_t *bytes_returned, + uint8_t auth_mode, + IN const uint8_t *key); +UFR_STATUS DL_API LinearWrite_PK(IN const uint8_t *data, + uint16_t linear_address, + uint16_t length, + VAR uint16_t *bytes_written, + uint8_t auth_mode, + IN const uint8_t *key); +UFR_STATUS DL_API LinearFormatCard_PK(IN const uint8_t *new_key_A, + uint8_t blocks_access_bits, + uint8_t sector_trailers_access_bits, + uint8_t sector_trailers_byte9, + IN const uint8_t *new_key_B, + VAR uint8_t *lpucSectorsFormatted, + uint8_t auth_mode, + IN const uint8_t *key); +UFR_STATUS DL_API SectorTrailerWrite_PK(uint8_t addressing_mode, + uint8_t address, + IN const uint8_t *new_key_A, + uint8_t block0_access_bits, + uint8_t block1_access_bits, + uint8_t block2_access_bits, + uint8_t sector_trailer_access_bits, + uint8_t sector_trailer_byte9, + IN const uint8_t *new_key_B, + uint8_t auth_mode, + IN const uint8_t *key); +UFR_STATUS DL_API SectorTrailerWriteUnsafe_PK(uint8_t addressing_mode, + uint8_t address, + IN const uint8_t *sector_trailer, + uint8_t auth_mode, + IN const uint8_t *key); +UFR_STATUS DL_API ValueBlockRead_PK(VAR int32_t *value, + VAR uint8_t *value_addr, + uint8_t block_address, + uint8_t auth_mode, + IN const uint8_t *key); +UFR_STATUS DL_API ValueBlockInSectorRead_PK(VAR int32_t *value, + VAR uint8_t *value_addr, + uint8_t sector_address, + uint8_t block_in_sector_address, + uint8_t auth_mode, + IN const uint8_t *key); +UFR_STATUS DL_API ValueBlockWrite_PK(int32_t value, + uint8_t value_addr, + uint8_t block_address, + uint8_t auth_mode, + IN const uint8_t *key); +UFR_STATUS DL_API ValueBlockInSectorWrite_PK(int32_t value, + uint8_t value_addr, + uint8_t sector_address, + uint8_t block_in_sector_address, + uint8_t auth_mode, + IN const uint8_t *key); +UFR_STATUS DL_API ValueBlockIncrement_PK(int32_t increment_value, + uint8_t block_address, + uint8_t auth_mode, + IN const uint8_t *key); +UFR_STATUS DL_API ValueBlockInSectorIncrement_PK(int32_t increment_value, + uint8_t sector_address, + uint8_t block_in_sector_address, + uint8_t auth_mode, + IN const uint8_t *key); +UFR_STATUS DL_API ValueBlockDecrement_PK(int32_t decrement_value, + uint8_t block_address, + uint8_t auth_mode, + IN const uint8_t *key); +UFR_STATUS DL_API ValueBlockInSectorDecrement_PK(int32_t decrement_value, + uint8_t sector_address, + uint8_t block_in_sector_address, + uint8_t auth_mode, + IN const uint8_t *key); +UFR_STATUS DL_API GetReaderHardwareVersion(VAR uint8_t *version_major, + VAR uint8_t *version_minor); +UFR_STATUS DL_API GetReaderFirmwareVersion(VAR uint8_t *version_major, + VAR uint8_t *version_minor); + +// New commands (for RTC & I2C EEPROM): +UFR_STATUS DL_API GetReaderTime(VAR uint8_t *time); +UFR_STATUS DL_API SetReaderTime(IN uint8_t *password, VAR uint8_t *time); +UFR_STATUS DL_API ChangeReaderPassword(IN uint8_t *old_password, IN uint8_t *new_password); +UFR_STATUS DL_API ReaderEepromWrite(IN uint8_t *data, uint32_t address, uint32_t size, IN uint8_t *password); +UFR_STATUS DL_API ReaderEepromRead(OUT uint8_t *data, uint32_t address, uint32_t size); + +UFR_STATUS DL_API SubscribeSector(uint8_t block_nr, uint32_t admin_serial); +UFR_STATUS DL_API SubscribeBlock(uint8_t block_nr, uint32_t admin_serial); +UFR_STATUS DL_API BusAdminCardMake(uint32_t serial, IN uint8_t *password); + +UFR_STATUS DL_API GetReaderSerialDescription(OUT uint8_t pSerialDescription[8]); + +// New since version 2.0: +UFR_STATUS DL_API GetBuildNumber(VAR uint8_t *build); +UFR_STATUS DL_API GetCardIdEx(VAR uint8_t *lpucSak, OUT uint8_t *aucUid, + VAR uint8_t *lpucUidSize); +UFR_STATUS DL_API GetLastCardIdEx(VAR uint8_t *lpucSak, OUT uint8_t *aucUid, + VAR uint8_t *lpucUidSize); +//------------------------------------------------------------------------------ +//Multi-card (anti collision) mode: +//------------------------------------------------------------------------------ +UFR_STATUS DL_API EnableAntiCollision(void); +UFR_STATUS DL_API DisableAntiCollision(void); +UFR_STATUS DL_API EnumCards(VAR uint8_t *lpucCardsNumber, OUT uint8_t *lpucUidListSize); // Card pointer is on the first card in list +UFR_STATUS DL_API ListCards(OUT uint8_t *aucUidList, uint8_t ucUidListSize); // Before calling this function you must call EnumCards() first. +UFR_STATUS DL_API SelectCard(IN const uint8_t *aucUid, uint8_t ucUidSize, OUT uint8_t *lpucSelctedCardType); +UFR_STATUS DL_API DeslectCard(void); +UFR_STATUS DL_API GetAntiCollisionStatus(VAR int8_t *lpcIsAntiCollEnabled, VAR int8_t *lpcIsAnyCardSelected); +//------------------------------------------------------------------------------ +UFR_STATUS DL_API GetDlogicCardType(VAR uint8_t *lpucCardType); +UFR_STATUS DL_API GetNfcT2TVersion(OUT uint8_t lpucVersionResponse[8]); +UFR_STATUS DL_API GetCardSize(VAR uint32_t *lpulLinearSize, VAR uint32_t *lpulRawSize); + +// uFCoder PRO MODE +UFR_STATUS DL_API GetReaderProMode(VAR uint32_t *pReaderProMode, OUT uint32_t *pReaderProConfig); +UFR_STATUS DL_API SetReaderProMode(const uint32_t ReaderProMode); + +// QR barcode crypt algorithm +// initialization. with TB serial like 'TB123456' +UFR_STATUS DL_API CardEncryption_Initialize(IN const uint8_t *TBSerialString, uint16_t job_number); + +// You must define 25 bytes array in memory for out_card_data[] +UFR_STATUS DL_API CardEncryption_GetNextEncryptedCard(const uint32_t from_timestamp, const uint32_t to_timestamp, + OUT uint8_t out_card_data[]); + +enum CARD_ENCRYPTION_CODE_TYPE +{ + CODE_TYPE_STANDARD, + CODE_TYPE_GROUP, + CODE_TYPE_DAILY_RANGE, // valid from, but only to_timestamp / every day +}; + +/** + * Same function like CardEncryption_GetNextEncryptedCard() with an additional byte + * to set master byte on the encrypted card ID + * + * @param code_type card type, look in CARD_ENCRYPTION_CODE_TYPE enumeration + * @param from_timestamp start date-time validity of the generated card + * @param to_timestamp end date-time validity of the generated card + * @param additional_data_size additional data size in bytes + * @param additional_data array with additional data - only master byte on the encrypted card ID for now + * @param out_card_data_size returns how many bytes are stored in the out_card_data array + * @param out_card_data pointer to the allocated byte array in memory (minimal size of 20 bytes) for the output data + * @return + */ +UFR_STATUS DL_API CardEncryption_GetNext(const uint32_t code_type, + const uint32_t from_timestamp, const uint32_t to_timestamp, + const uint32_t additional_data_size, IN const uint8_t additional_data[], + VAR uint32_t *out_card_data_size, OUT uint8_t out_card_data[]); + +UFR_STATUS DL_API CardEncryption_GetActualCardSN(OUT uint32_t *ActualCard_SN, VAR uint32_t *ActualCard_SN_LOG); +UFR_STATUS DL_API CardEncryption_GetJobSN(VAR uint32_t *JobSN); +UFR_STATUS DL_API CardEncryption_GetSalterSN(OUT uint8_t SalterSN[8], VAR uint8_t * magicByte); + +UFR_STATUS DL_API read_ndef_record(uint8_t message_nr, uint8_t record_nr, VAR uint8_t *tnf, OUT uint8_t *type_record, VAR uint8_t *type_length, OUT uint8_t *id, VAR uint8_t *id_length, + OUT uint8_t *payload, VAR uint32_t *payload_length); +UFR_STATUS DL_API write_ndef_record(uint8_t message_nr, + IN uint8_t *tnf, + IN uint8_t *type_record, + IN uint8_t *type_length, + IN uint8_t *id, + IN uint8_t *id_length, + IN uint8_t *payload, + IN uint32_t *payload_length, + VAR uint8_t *card_formated); +UFR_STATUS DL_API write_ndef_record_mirroring(uint8_t message_nr, + IN uint8_t *tnf, + IN uint8_t *type_record, + IN uint8_t *type_length, + IN uint8_t *id, + IN uint8_t *id_length, + IN uint8_t *payload, + IN uint32_t *payload_length, + VAR uint8_t *card_formated, + int use_uid_ascii_mirror, + int use_counter_ascii_mirror, + uint32_t payload_mirroring_pos); +UFR_STATUS DL_API get_ndef_record_count(VAR uint8_t *ndef_message_cnt, VAR uint8_t *ndef_record_cnt, OUT uint8_t *ndef_record_array, VAR uint8_t *empty_ndef_message_cnt); +UFR_STATUS DL_API erase_last_ndef_record(uint8_t message_nr); +UFR_STATUS DL_API erase_all_ndef_records(uint8_t message_nr); +UFR_STATUS DL_API ndef_card_initialization(void); +//--------------------------------------------------------------------- +// Card emulation: +//--------------------------------------------------------------------- +UFR_STATUS DL_API WriteEmulationNdef(uint8_t tnf, + IN uint8_t* type_record, + uint8_t type_length, + IN uint8_t* id, + uint8_t id_length, + IN uint8_t* payload, + uint8_t payload_length); +UFR_STATUS DL_API WriteEmulationNdefWithAAR( + uint8_t tnf, + IN uint8_t *type_record, + uint8_t type_length, + IN uint8_t *id, + uint8_t id_length, + IN uint8_t *payload, + uint8_t payload_length, + IN uint8_t *aar, + uint8_t aar_length); +UFR_STATUS DL_API TagEmulationStart(void); +UFR_STATUS DL_API TagEmulationStop(void); +UFR_STATUS DL_API CombinedModeEmulationStart(void); +UFR_STATUS DL_API AdHocEmulationStart(void); +UFR_STATUS DL_API AdHocEmulationStop(void); +UFR_STATUS DL_API GetAdHocEmulationParams(VAR uint8_t *ThresholdMinLevel, VAR uint8_t *ThresholdCollLevel, + VAR uint8_t *RFLevelAmp, VAR uint8_t *RxGain, VAR uint8_t *RFLevel); +UFR_STATUS DL_API SetAdHocEmulationParams(uint8_t ThresholdMinLevel, uint8_t ThresholdCollLevel, + uint8_t RFLevelAmp, uint8_t RxGain, uint8_t RFLevel); +UFR_STATUS DL_API GetExternalFieldState(VAR uint8_t *is_field_present); +UFR_STATUS DL_API EnterShareRamCommMode(void); +UFR_STATUS DL_API ExitShareRamCommMode(void); +UFR_STATUS DL_API WriteShareRam(IN uint8_t *ram_data, uint8_t addr, uint8_t data_len); +UFR_STATUS DL_API ReadShareRam(OUT uint8_t *ram_data, uint8_t addr, uint8_t data_len); + +//------------------------------------------------------------------------------ + +// GetNfcT2TVersion() returns 8 bytes (see T2T documentation): +typedef struct t2t_version_struct { + uint8_t header; + uint8_t vendor_id; + uint8_t product_type; + uint8_t product_subtype; + uint8_t major_product_version; + uint8_t minor_product_version; + uint8_t storage_size; + uint8_t protocol_type; +} t2t_version_t; + +// NfcT2TSafeConvertVersion() returns converts version_record that returned from GetNfcT2TVersion() +// or GetNfcT2TVersionM(). Conversion is "alignment safe" +// (you don't need to pay attention on structure byte alignment): +void DL_API NfcT2TSafeConvertVersion(t2t_version_t *version, const uint8_t *version_record); +UFR_STATUS DL_API ReadECCSignature(IN uint8_t lpucECCSignature[ECC_SIG_LEN], + OUT uint8_t lpucUid[MAX_UID_LEN], VAR uint8_t *lpucUidLen, VAR uint8_t *lpucDlogicCardType); + +//------------------------------------------------------------------------------ +UFR_STATUS DL_API ReadCounter(uint8_t counter_address, VAR uint32_t *value); +UFR_STATUS DL_API IncrementCounter(uint8_t counter_address, uint32_t inc_value); +UFR_STATUS DL_API ReadNFCCounter(VAR uint32_t *value); // Same as ReadCounter(2, &value); +UFR_STATUS DL_API ReadNFCCounterPwdAuth_RK(VAR uint32_t *value, uint8_t reader_key_index); +UFR_STATUS DL_API ReadNFCCounterPwdAuth_PK(VAR uint32_t *value, IN const uint8_t *key); + +//------------------------------------------------------------------------------ + +UFR_STATUS DL_API SetAsyncCardIdSendConfig(uint8_t send_enable, + uint8_t prefix_enable, uint8_t prefix, uint8_t suffix, + uint8_t send_removed_enable, uint32_t async_baud_rate); + +UFR_STATUS DL_API SetAsyncCardIdSendConfigEx(uint8_t send_enable, + uint8_t prefix_enable, uint8_t prefix, uint8_t suffix, + uint8_t send_removed_enable, uint8_t reverse_byte_order, + uint8_t decimal_representation, uint32_t async_baud_rate); + +UFR_STATUS DL_API GetAsyncCardIdSendConfig(VAR uint8_t *send_enable, + VAR uint8_t *prefix_enable, VAR uint8_t *prefix, VAR uint8_t *suffix, + VAR uint8_t *send_removed_enable, VAR uint32_t *async_baud_rate); + +UFR_STATUS DL_API GetAsyncCardIdSendConfigEx(VAR uint8_t *send_enable, + VAR uint8_t *prefix_enable, VAR uint8_t *prefix, VAR uint8_t *suffix, + VAR uint8_t *send_removed_enable, VAR uint8_t *reverse_byte_order, + VAR uint8_t *decimal_representation, VAR uint32_t *async_baud_rate); + +/***************************************************************************** + * AIS FUNCTIONS + ***************************************************************************** + */ + +/** + * ais_get_card_number() read assigned serial number from AIS cards + * + * @param card_number ( pointer to reserved 32 bit integer ) AIS card serial number + * @return UFR_STATUS execution status + */ +UFR_STATUS DL_API ais_get_card_number(VAR uint32_t *card_number); + +UFR_STATUS DL_API ais_set_right_record(uint8_t record_number, uint16_t first_reader_nr, uint16_t last_reader_nr, + uint8_t start_hour, uint8_t start_minute, uint8_t end_hour, uint8_t end_minute, IN uint8_t *days); +UFR_STATUS DL_API ais_get_right_record(uint8_t record_number, VAR uint16_t *first_reader_nr, VAR uint16_t *last_reader_nr, + VAR uint8_t *start_hour, VAR uint8_t *start_minute, VAR uint8_t *end_hour, VAR uint8_t *end_minute, OUT uint8_t *days); +UFR_STATUS DL_API ais_erase_right_record(uint8_t record_number); +UFR_STATUS DL_API ais_set_validate_record(uint8_t begin_year, uint8_t begin_month, uint8_t begin_day, uint8_t begin_hour, uint8_t begin_minute, + uint8_t end_year, uint8_t end_month, uint8_t end_day, uint8_t end_hour, uint8_t end_minute); +UFR_STATUS DL_API ais_get_validate_record(VAR uint8_t *begin_year, VAR uint8_t *begin_month, VAR uint8_t *begin_day, VAR uint8_t *begin_hour, VAR uint8_t *begin_minute, + VAR uint8_t *end_year, VAR uint8_t *end_month, VAR uint8_t *end_day, VAR uint8_t *end_hour, VAR uint8_t *end_minute); +UFR_STATUS DL_API ais_set_card_type(uint8_t card_type); +UFR_STATUS DL_API ais_get_card_type(VAR uint8_t *card_type); +UFR_STATUS DL_API ais_set_card_daily_duration(uint16_t duration); +UFR_STATUS DL_API ais_get_card_daily_duration(VAR uint16_t *duration); +UFR_STATUS DL_API ais_set_card_total_duration(uint32_t duration); +UFR_STATUS DL_API ais_get_card_total_duration(VAR uint32_t *duration); + +// swimming pool ************************************************************** +/** + * ais_get_credit_and_period_validity() > get information about credit and period of validity + * + * @param credit ( pointer to integer ) : + * @param begin_year ( pointer to integer ) : + * @param begin_month ( pointer to integer ) : + * @param begin_day ( pointer to integer ) : + * @param begin_hour ( pointer to integer ) : + * @param begin_minute ( pointer to integer ) : + * @param end_year ( pointer to integer ) : + * @param end_month ( pointer to integer ) : + * @param end_day ( pointer to integer ) : + * @param end_hour ( pointer to integer ) : + * @param end_minute ( pointer to integer ) : + * @return + */ +UFR_STATUS DL_API ais_get_credit_and_period_validity(VAR int32_t *credit, + VAR uint32_t *begin_year, VAR uint32_t *begin_month, VAR uint32_t *begin_day, + VAR uint32_t *begin_hour, + VAR uint32_t *begin_minute, // + VAR uint32_t *end_year, VAR uint32_t *end_month, VAR uint32_t *end_day, + VAR uint32_t *end_hour, VAR uint32_t *end_minute); + +/** + * ais_set_credit_and_period_validity() > set credit and period of validity + * + * @param credit ( integer ) : + * @param begin_year ( integer ) : + * @param begin_month ( integer ) : + * @param begin_day ( integer ) : + * @param begin_hour ( integer ) : + * @param begin_minute ( integer ) : + * @param end_year ( integer ) : + * @param end_month ( integer ) : + * @param end_day ( integer ) : + * @param end_hour ( integer ) : + * @param end_minute ( integer ) : + * @return + */ +UFR_STATUS DL_API ais_set_credit_and_period_validity(int32_t credit, + uint32_t begin_year, uint32_t begin_month, uint32_t begin_day, + uint32_t begin_hour, + uint32_t begin_minute, // + uint32_t end_year, uint32_t end_month, uint32_t end_day, + uint32_t end_hour, uint32_t end_minute); + +UFR_STATUS DL_API ais_set_right_type_record(uint8_t record_number, + uint8_t right_record_type, IN uint8_t *right_data); + +UFR_STATUS DL_API ais_get_right_type_record(uint8_t record_number, + VAR uint8_t *right_record_type, OUT uint8_t *right_data); + +UFR_STATUS DL_API ais_set_right_record_type_max_daily_counter(uint8_t record_number, + uint16_t first_reader_nr, uint16_t last_reader_nr, uint8_t start_hour, + uint8_t start_minute, uint8_t end_hour, uint8_t end_minute, + IN uint8_t *days, uint8_t max_daily_counter); + +UFR_STATUS DL_API ais_get_right_record_type_max_daily_counter(uint8_t record_number, + VAR uint16_t *first_reader_nr, VAR uint16_t *last_reader_nr, + VAR uint8_t *start_hour, VAR uint8_t *start_minute, VAR uint8_t *end_hour, + VAR uint8_t *end_minute, OUT uint8_t *days, VAR uint8_t *max_daily_counter); + +//============================================================================= + +UFR_STATUS DL_API UfrXrcLockOn(uint16_t pulse_duration); +UFR_STATUS DL_API UfrXrcRelayState(uint8_t state); +UFR_STATUS DL_API UfrXrcGetIoState(VAR uint8_t *intercom, VAR uint8_t *door, VAR uint8_t *relay_state); +UFR_STATUS DL_API UfrRedLightControl(uint8_t light_status); +UFR_STATUS DL_API UfrRgbLightControl(uint8_t red, uint8_t green, uint8_t blue, uint8_t intensity, uint8_t enable); + +UFR_STATUS DL_API UfrSetBadSelectCardNrMax(uint8_t bad_select_nr_max); +UFR_STATUS DL_API UfrGetBadSelectCardNrMax(VAR uint8_t *bad_select_nr_max); + +UFR_STATUS DL_API UfrEnterSleepMode(void); +UFR_STATUS DL_API UfrLeaveSleepMode(void); +UFR_STATUS DL_API AutoSleepSet(uint8_t seconds_wait); +UFR_STATUS DL_API AutoSleepGet(VAR uint8_t *seconds_wait); + +UFR_STATUS DL_API SetSpeedPermanently(unsigned char tx_speed, unsigned char rx_speed); +UFR_STATUS DL_API GetSpeedParameters(VAR unsigned char *tx_speed, VAR unsigned char *rx_speed); +UFR_STATUS DL_API SetDisplayData(IN uint8_t *display_data, uint8_t data_length); +UFR_STATUS DL_API SetSpeakerFrequency(uint16_t frequency); +UFR_STATUS DL_API SetDisplayIntensity(uint8_t intensity); +UFR_STATUS DL_API GetDisplayIntensity(VAR uint8_t *intensity); +// DESFIRE functions ************************************************************** + +/** + * + * @param chaining + * @param timeout + * @param block_length + * @param snd_data_array + * @param rcv_length + * @param rcv_data_array + * @param ufr_status + * @return + */ +UFR_STATUS DL_API SetISO14443_4_Mode(void); +UFR_STATUS DL_API SetISO14443_4_DLStorage(void); +UFR_STATUS DL_API uFR_i_block_transceive(uint8_t chaining, uint8_t timeout, + uint8_t block_length, IN uint8_t *snd_data_array, VAR size_t *rcv_length, + OUT uint8_t *rcv_data_array, VAR uint32_t *ufr_status); + +UFR_STATUS DL_API uFR_APDU_Transceive(uint8_t cls, uint8_t ins, uint8_t p1, uint8_t p2, + IN uint8_t *data_out, uint8_t data_out_len, OUT uint8_t *data_in, uint32_t max_data_in_len, VAR uint32_t *response_len, + uint8_t send_le, OUT uint8_t *apdu_status); + +UFR_STATUS DL_API APDUHexStrTransceive(IN const char *c_apdu, OUT char **r_apdu); +UFR_STATUS DL_API APDUPlainTransceive(IN const uint8_t *c_apdu, uint32_t c_apdu_len, OUT uint8_t *r_apdu, VAR uint32_t *r_apdu_len); +UFR_STATUS DL_API APDUTransceive(uint8_t cls, uint8_t ins, uint8_t p1, uint8_t p2, + IN const uint8_t *data_out, uint32_t Nc, OUT uint8_t *data_in, VAR uint32_t *Ne, + uint8_t send_le, OUT uint8_t *apdu_status); +UFR_STATUS DL_API i_block_trans_rcv_chain(uint8_t chaining, uint8_t timeout, + uint8_t block_length, IN uint8_t *snd_data_array, + VAR uint8_t *rcv_length, OUT uint8_t *rcv_data_array, VAR uint8_t *rcv_chained, VAR uint32_t *ufr_status); +UFR_STATUS DL_API r_block_transceive(uint8_t ack, uint8_t timeout, + VAR uint8_t *rcv_length, OUT uint8_t *rcv_data_array, VAR uint8_t *rcv_chained, VAR uint32_t *ufr_status); +UFR_STATUS DL_API s_block_deselect(uint8_t timeout); + +UFR_STATUS DL_API card_transceive(uint8_t card_activate, uint8_t card_halted, uint8_t tx_crc, uint8_t rx_crc, uint8_t crypto1, + uint32_t timeout, IN uint8_t *tx_data, uint8_t tx_data_len, OUT uint8_t *rx_data, VAR uint8_t *rx_data_len); +UFR_STATUS DL_API card_transceive_mode_start(uint8_t tx_crc, uint8_t rx_crc, uint32_t rf_timeout, uint32_t uart_timeout); +UFR_STATUS DL_API card_transceive_mode_stop(void); +UFR_STATUS DL_API card_halt_enable(void); + +UFR_STATUS DL_API uart_transceive(IN uint8_t *send_data, uint8_t send_len, OUT uint8_t *rcv_data, uint32_t bytes_to_receive, VAR uint32_t *rcv_len); + +UFR_STATUS DL_API open_ISO7816_interface(OUT uint8_t *atr_data, VAR uint8_t *atr_len); +UFR_STATUS DL_API APDU_switch_to_ISO7816_interface(void); +UFR_STATUS DL_API close_ISO7816_interface_no_APDU(void); +UFR_STATUS DL_API close_ISO7816_interface_APDU_ISO14443_4(void); +UFR_STATUS DL_API APDU_switch_to_ISO14443_4_interface(void); +UFR_STATUS DL_API APDU_switch_off_from_ISO7816_interface(void); + +//============================================================================== +UFR_STATUS DL_API JCAppSelectByAid(IN const uint8_t *aid, uint8_t aid_len, OUT uint8_t selection_response[16]); +UFR_STATUS DL_API JCAppPutPrivateKey(uint8_t key_type, uint8_t key_index, + IN const uint8_t *key, uint16_t key_bit_len, const IN uint8_t *key_param, uint16_t key_parm_len); +UFR_STATUS DL_API JCAppGenerateKeyPair(uint8_t key_type, uint8_t key_index, uint8_t key_designator, + uint16_t key_bit_len, IN const uint8_t *params, uint16_t params_size); +UFR_STATUS DL_API JCAppDeleteRsaKeyPair(uint8_t key_index); +UFR_STATUS DL_API JCAppDeleteEcKeyPair(uint8_t key_index); +UFR_STATUS DL_API JCAppSignatureBegin(uint8_t cipher, uint8_t digest, uint8_t padding, + uint8_t key_index, + IN const uint8_t *chunk, uint16_t chunk_len, IN const uint8_t *alg_param, uint16_t alg_parm_len); +UFR_STATUS DL_API JCAppSignatureUpdate(IN const uint8_t *chunk, uint16_t chunk_len); +UFR_STATUS DL_API JCAppSignatureEnd(VAR uint16_t *sig_len); +UFR_STATUS DL_API JCAppGenerateSignature(uint8_t cipher, uint8_t digest, uint8_t padding, + uint8_t key_index, + IN const uint8_t *plain_data, uint16_t plain_data_len, VAR uint16_t *sig_len, + IN const uint8_t *alg_param, uint16_t alg_parm_len); +UFR_STATUS DL_API JCAppGetSignature(OUT uint8_t *sig, uint16_t sig_len); +UFR_STATUS DL_API JCAppPutObj(uint8_t obj_type, uint8_t obj_index, IN uint8_t *obj, int16_t obj_size, IN uint8_t *id, uint8_t id_size); +UFR_STATUS DL_API JCAppPutObjSubject(uint8_t obj_type, uint8_t obj_index, IN uint8_t *subject, uint8_t size); +UFR_STATUS DL_API JCAppInvalidateCert(uint8_t obj_type, uint8_t obj_index); +UFR_STATUS DL_API JCAppGetObjId(uint8_t obj_type, uint8_t obj_index, OUT uint8_t *id, VAR uint16_t *id_size); // when id == NULL returns size +UFR_STATUS DL_API JCAppGetObjSubject(uint8_t obj_type, uint8_t obj_index, OUT uint8_t *subject, VAR uint16_t *size); // when subject == NULL returns size +UFR_STATUS DL_API JCAppGetObj(uint8_t obj_type, uint8_t obj_index, OUT uint8_t *obj, int16_t size); // when obj == NULL returns size +c_string DL_API JCAppGetErrorDescription(UFR_STATUS apdu_error_status); +UFR_STATUS DL_API JCAppLogin(uint8_t SO, IN uint8_t *pin, uint8_t pinSize); +UFR_STATUS DL_API JCAppGetPinTriesRemaining(dl_sec_code_t secureCodeType, VAR uint16_t *triesRemaining); +UFR_STATUS DL_API JCAppPinChange(dl_sec_code_t secureCodeType, IN uint8_t *newPin, uint8_t newPinSize); +UFR_STATUS DL_API JCAppPinUnblock(uint8_t SO, IN uint8_t *puk, uint8_t pukSize); +UFR_STATUS DL_API JCAppPinEnable(uint8_t SO); +UFR_STATUS DL_API JCAppPinDisable(uint8_t SO); +UFR_STATUS DL_API JCAppGetRsaPublicKey(uint8_t key_index, OUT uint8_t *modulus, VAR uint16_t *modulus_size, + OUT uint8_t *exponent, VAR uint16_t *exponent_size); // when modulus == NULL, returns sizes and exponent ignored +UFR_STATUS DL_API JCAppGetEcPublicKey(uint8_t key_index, OUT uint8_t *keyW, VAR uint16_t *kexWSize, // when keyW == NULL, returns size + OUT uint8_t *field, VAR uint16_t *field_size, OUT uint8_t *ab , VAR uint16_t *ab_size, OUT uint8_t *g, VAR uint16_t *g_size, + OUT uint8_t *r, VAR uint16_t *r_size, VAR uint16_t *k, VAR uint16_t *key_size_bits, VAR uint16_t *key_designator); +UFR_STATUS DL_API JCAppGetEcKeySizeBits(uint8_t key_index, VAR uint16_t *key_size_bits, VAR uint16_t *key_designator); +//------------------------------------------------------------------------------ +UFR_STATUS DL_API JCStorageGetFilesListSize(VAR uint32_t *list_size); +UFR_STATUS DL_API JCStorageListFiles(OUT uint8_t *list, uint32_t list_bytes_allocated); +UFR_STATUS DL_API JCStorageGetFileSize(uint8_t card_file_index, VAR uint32_t *file_size); +UFR_STATUS DL_API JCStorageReadFile(uint8_t card_file_index, OUT uint8_t *data, uint32_t data_bytes_allocated); +UFR_STATUS DL_API JCStorageReadFileToFileSystem(uint8_t card_file_index, IN const char *file_system_path_name); +UFR_STATUS DL_API JCStorageWriteFile(uint8_t card_file_index, IN const uint8_t *data, uint32_t data_size); +UFR_STATUS DL_API JCStorageWriteFileFromFileSystem(uint8_t card_file_index, IN const char *file_system_path_name); +UFR_STATUS DL_API JCStorageDeleteFile(uint8_t file_index); +//------------------------------------------------------------------------------ +UFR_STATUS DL_API MRTDAppSelectAndAuthenticateBac(IN const uint8_t mrz_proto_key[25], OUT uint8_t *ksenc, OUT uint8_t *ksmac, + VAR uint64_t *send_sequence_cnt); +UFR_STATUS DL_API MRTDFileReadBacToHeap(IN const uint8_t *file_index, VAR uint8_t **output, OUT uint32_t *output_length, IN const uint8_t *ksenc, + IN const uint8_t *ksmac, VAR uint64_t *send_sequence_cnt); +UFR_STATUS DL_API MRTD_MRZDataToMRZProtoKey(IN const char *doc_number, IN const char *date_of_birth, IN const char *date_of_expiry, + OUT uint8_t mrz_proto_key[25]); +UFR_STATUS DL_API MRTD_MRZSubjacentToMRZProtoKey(IN const uint8_t mrz[44], OUT uint8_t mrz_proto_key[25]); +//============================================================================== +UFR_STATUS DL_API DES_to_AES_key_type(void); +UFR_STATUS DL_API AES_to_DES_key_type(void); + +//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ + +enum KEY_TYPE +{ + AES_KEY_TYPE, + DES3K_KEY_TYPE, + DES_KEY_TYPE, + DES2K_KEY_TYPE +}; + +UFR_STATUS DL_API uFR_int_GetDesfireUid( + uint8_t aes_key_nr, + uint32_t aid, + uint8_t aid_key_nr, + OUT uint8_t *card_uid, + VAR uint8_t *card_uid_len, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_GetDesfireUid_aes( + uint8_t aes_key_nr, + uint32_t aid, + uint8_t aid_key_nr, + OUT uint8_t *card_uid, + VAR uint8_t *card_uid_len, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_GetDesfireUid_des( + uint8_t des_key_nr, + uint32_t aid, + uint8_t aid_key_nr, + OUT uint8_t *card_uid, + VAR uint8_t *card_uid_len, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_GetDesfireUid_2k3des( + uint8_t des2k_key_nr, + uint32_t aid, + uint8_t aid_key_nr, + OUT uint8_t *card_uid, + VAR uint8_t *card_uid_len, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_GetDesfireUid_3k3des( + uint8_t des3k_key_nr, + uint32_t aid, + uint8_t aid_key_nr, + OUT uint8_t *card_uid, + VAR uint8_t *card_uid_len, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_GetDesfireUid_PK( + IN uint8_t *aes_key_ext, + uint32_t aid, + uint8_t aid_key_nr, + OUT uint8_t *card_uid, + VAR uint8_t *card_uid_len, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_GetDesfireUid_aes_PK( + IN uint8_t *aes_key_ext, + uint32_t aid, + uint8_t aid_key_nr, + OUT uint8_t *card_uid, + VAR uint8_t *card_uid_len, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_GetDesfireUid_des_PK( + IN uint8_t *des_key_ext, + uint32_t aid, + uint8_t aid_key_nr, + OUT uint8_t *card_uid, + VAR uint8_t *card_uid_len, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_GetDesfireUid_2k3des_PK( + IN uint8_t *des2k_key_ext, + uint32_t aid, + uint8_t aid_key_nr, + OUT uint8_t *card_uid, + VAR uint8_t *card_uid_len, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_GetDesfireUid_3k3des_PK( + IN uint8_t *des3k_key_ext, + uint32_t aid, + uint8_t aid_key_nr, + OUT uint8_t *card_uid, + VAR uint8_t *card_uid_len, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_SAM_GetDesfireUidAesAuth( + uint8_t aes_key_nr, + uint32_t aid, + uint8_t aid_key_nr, + OUT uint8_t *card_uid, + VAR uint8_t *card_uid_len, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_SAM_GetDesfireUid3k3desAuth( + uint8_t des3k_key_nr, + uint32_t aid, + uint8_t aid_key_nr, + OUT uint8_t *card_uid, + VAR uint8_t *card_uid_len, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); + +UFR_STATUS DL_API uFR_int_DesfireFreeMem( + VAR uint32_t *free_mem_byte, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); + +UFR_STATUS DL_API uFR_int_DesfireFormatCard( + uint8_t aes_key_nr, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireFormatCard_aes( + uint8_t aes_key_nr, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireFormatCard_des( + uint8_t des_key_nr, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireFormatCard_2k3des( + uint8_t des2k_key_nr, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireFormatCard_3k3des( + uint8_t des3k_key_nr, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireFormatCard_PK( + IN uint8_t *aes_key_ext, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireFormatCard_aes_PK( + IN uint8_t *aes_key_ext, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireFormatCard_des_PK( + IN uint8_t *des_key_ext, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireFormatCard_2k3des_PK( + IN uint8_t *des2k_key_ext, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireFormatCard_3k3des_PK( + IN uint8_t *des3k_key_ext, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_SAM_DesfireFormatCardAesAuth( + uint8_t aes_key_nr, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_SAM_DesfireFormatCard3k3desAuth( + uint8_t des3k_key_nr, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); + +UFR_STATUS DL_API uFR_int_DesfireCreateStdDataFile( + uint8_t aes_key_nr, + uint32_t aid, + uint8_t file_id, + uint32_t file_size, + uint8_t read_key_no, + uint8_t write_key_no, + uint8_t read_write_key_no, + uint8_t change_key_no, + uint8_t communication_settings, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireCreateStdDataFile_aes( + uint8_t aes_key_nr, + uint32_t aid, + uint8_t file_id, + uint32_t file_size, + uint8_t read_key_no, + uint8_t write_key_no, + uint8_t read_write_key_no, + uint8_t change_key_no, + uint8_t communication_settings, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireCreateStdDataFile_des( + uint8_t des_key_nr, + uint32_t aid, + uint8_t file_id, + uint32_t file_size, + uint8_t read_key_no, + uint8_t write_key_no, + uint8_t read_write_key_no, + uint8_t change_key_no, + uint8_t communication_settings, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireCreateStdDataFile_2k3des( + uint8_t des2k_key_nr, + uint32_t aid, + uint8_t file_id, + uint32_t file_size, + uint8_t read_key_no, + uint8_t write_key_no, + uint8_t read_write_key_no, + uint8_t change_key_no, + uint8_t communication_settings, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireCreateStdDataFile_3k3des( + uint8_t des3k_key_nr, + uint32_t aid, + uint8_t file_id, + uint32_t file_size, + uint8_t read_key_no, + uint8_t write_key_no, + uint8_t read_write_key_no, + uint8_t change_key_no, + uint8_t communication_settings, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireCreateStdDataFile_PK( + IN uint8_t *aes_key_ext, + uint32_t aid, + uint8_t file_id, + uint32_t file_size, + uint8_t read_key_no, + uint8_t write_key_no, + uint8_t read_write_key_no, + uint8_t change_key_no, + uint8_t communication_settings, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireCreateStdDataFile_aes_PK( + IN uint8_t *aes_key_ext, + uint32_t aid, + uint8_t file_id, + uint32_t file_size, + uint8_t read_key_no, + uint8_t write_key_no, + uint8_t read_write_key_no, + uint8_t change_key_no, + uint8_t communication_settings, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireCreateStdDataFile_des_PK( + IN uint8_t *des_key_ext, + uint32_t aid, + uint8_t file_id, + uint32_t file_size, + uint8_t read_key_no, + uint8_t write_key_no, + uint8_t read_write_key_no, + uint8_t change_key_no, + uint8_t communication_settings, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireCreateStdDataFile_2k3des_PK( + IN uint8_t *des2k_key_ext, + uint32_t aid, + uint8_t file_id, + uint32_t file_size, + uint8_t read_key_no, + uint8_t write_key_no, + uint8_t read_write_key_no, + uint8_t change_key_no, + uint8_t communication_settings, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireCreateStdDataFile_3k3des_PK( + IN uint8_t *des3k_key_ext, + uint32_t aid, + uint8_t file_id, + uint32_t file_size, + uint8_t read_key_no, + uint8_t write_key_no, + uint8_t read_write_key_no, + uint8_t change_key_no, + uint8_t communication_settings, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_SAM_DesfireCreateStdDataFileAesAuth( + uint8_t aes_key_nr, + uint32_t aid, + uint8_t file_id, + uint32_t file_size, + uint8_t read_key_no, + uint8_t write_key_no, + uint8_t read_write_key_no, + uint8_t change_key_no, + uint8_t communication_settings, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_SAM_DesfireCreateStdDataFile3k3desAuth( + uint8_t des3k_key_nr, + uint32_t aid, + uint8_t file_id, + uint32_t file_size, + uint8_t read_key_no, + uint8_t write_key_no, + uint8_t read_write_key_no, + uint8_t change_key_no, + uint8_t communication_settings, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireCreateStdDataFile_no_auth( + uint32_t aid, + uint8_t file_id, + uint32_t file_size, + uint8_t read_key_no, + uint8_t write_key_no, + uint8_t read_write_key_no, + uint8_t change_key_no, + uint8_t communication_settings, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); + +UFR_STATUS DL_API uFR_int_DesfireDeleteFile( + uint8_t aes_key_nr, + uint32_t aid, + uint8_t file_id, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireDeleteFile_aes( + uint8_t aes_key_nr, + uint32_t aid, + uint8_t file_id, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireDeleteFile_des( + uint8_t des_key_nr, + uint32_t aid, + uint8_t file_id, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireDeleteFile_2k3des( + uint8_t des2k_key_nr, + uint32_t aid, + uint8_t file_id, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireDeleteFile_3k3des( + uint8_t des3k_key_nr, + uint32_t aid, + uint8_t file_id, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireDeleteFile_PK( + IN uint8_t *aes_key_ext, + uint32_t aid, + uint8_t file_id, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireDeleteFile_aes_PK( + IN uint8_t *aes_key_ext, + uint32_t aid, + uint8_t file_id, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireDeleteFile_des_PK( + IN uint8_t *des_key_ext, + uint32_t aid, + uint8_t file_id, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireDeleteFile_2k3des_PK( + IN uint8_t *des2k_key_ext, + uint32_t aid, + uint8_t file_id, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireDeleteFile_3k3des_PK( + IN uint8_t *des3k_key_ext, + uint32_t aid, + uint8_t file_id, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_SAM_DesfireDeleteFileAesAuth( + uint8_t aes_key_nr, + uint32_t aid, + uint8_t file_id, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_SAM_DesfireDeleteFile3k3desAuth( + uint8_t des3k_key_nr, + uint32_t aid, + uint8_t file_id, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireDeleteFile_no_auth( + uint32_t aid, + uint8_t file_id, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); + +UFR_STATUS DL_API uFR_int_DesfireCreateAesApplication( + uint8_t aes_key_nr, + uint32_t aid, + uint8_t setting, + uint8_t max_key_no, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireCreateAesApplication_aes( + uint8_t aes_key_nr, + uint32_t aid, + uint8_t setting, + uint8_t max_key_no, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireCreate3k3desApplication_aes( + uint8_t aes_key_nr, + uint32_t aid, + uint8_t setting, + uint8_t max_key_no, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireCreateDesApplication_aes( + uint8_t aes_key_nr, + uint32_t aid, + uint8_t setting, + uint8_t max_key_no, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireCreateAesApplication_3k3des( + uint8_t des3k_key_nr, + uint32_t aid, + uint8_t setting, + uint8_t max_key_no, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireCreate3k3desApplication_3k3des( + uint8_t des3k_key_nr, + uint32_t aid, + uint8_t setting, + uint8_t max_key_no, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireCreateDesApplication_3k3des( + uint8_t des3k_key_nr, + uint32_t aid, + uint8_t setting, + uint8_t max_key_no, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireCreateAesApplication_2k3des( + uint8_t des2k_key_nr, + uint32_t aid, + uint8_t setting, + uint8_t max_key_no, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireCreate3k3desApplication_2k3des( + uint8_t des2k_key_nr, + uint32_t aid, + uint8_t setting, + uint8_t max_key_no, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireCreateDesApplication_2k3des( + uint8_t des2k_key_nr, + uint32_t aid, + uint8_t setting, + uint8_t max_key_no, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireCreateAesApplication_des( + uint8_t des_key_nr, + uint32_t aid, + uint8_t setting, + uint8_t max_key_no, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireCreate3k3desApplication_des( + uint8_t des_key_nr, + uint32_t aid, + uint8_t setting, + uint8_t max_key_no, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireCreateDesApplication_des( + uint8_t des_key_nr, + uint32_t aid, + uint8_t setting, + uint8_t max_key_no, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireCreateAesApplication_PK( + IN uint8_t *aes_key_ext, + uint32_t aid, + uint8_t setting, + uint8_t max_key_no, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireCreateAesApplication_aes_PK( + IN uint8_t *aes_key_ext, + uint32_t aid, + uint8_t setting, + uint8_t max_key_no, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireCreate3k3desApplication_aes_PK( + IN uint8_t *aes_key_ext, + uint32_t aid, + uint8_t setting, + uint8_t max_key_no, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireCreateDesApplication_aes_PK( + IN uint8_t *aes_key_ext, + uint32_t aid, + uint8_t setting, + uint8_t max_key_no, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireCreateAesApplication_3k3des_PK( + IN uint8_t *des3k_key_ext, + uint32_t aid, + uint8_t setting, + uint8_t max_key_no, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireCreate3k3desApplication_3k3des_PK( + IN uint8_t *des3k_key_ext, + uint32_t aid, + uint8_t setting, + uint8_t max_key_no, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireCreateDesApplication_3k3des_PK( + IN uint8_t *des3k_key_ext, + uint32_t aid, + uint8_t setting, + uint8_t max_key_no, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireCreateAesApplication_2k3des_PK( + IN uint8_t *des2k_key_ext, + uint32_t aid, + uint8_t setting, + uint8_t max_key_no, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireCreate3k3desApplication_2k3des_PK( + IN uint8_t *des2k_key_ext, + uint32_t aid, + uint8_t setting, + uint8_t max_key_no, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireCreateDesApplication_2k3des_PK( + IN uint8_t *des2k_key_ext, + uint32_t aid, + uint8_t setting, + uint8_t max_key_no, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireCreateAesApplication_des_PK( + IN uint8_t *des_key_ext, + uint32_t aid, + uint8_t setting, + uint8_t max_key_no, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireCreate3k3desApplication_des_PK( + IN uint8_t *des_key_ext, + uint32_t aid, + uint8_t setting, + uint8_t max_key_no, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireCreateDesApplication_des_PK( + IN uint8_t *des_key_ext, + uint32_t aid, + uint8_t setting, + uint8_t max_key_no, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_SAM_DesfireCreateAesApplicationAesAuth( + uint8_t aes_key_nr, + uint32_t aid, + uint8_t setting, + uint8_t max_key_no, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_SAM_DesfireCreate3k3desApplicationAesAuth( + uint8_t aes_key_nr, + uint32_t aid, + uint8_t setting, + uint8_t max_key_no, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_SAM_DesfireCreateAesApplication3k3desAuth( + uint8_t des3k_key_nr, + uint32_t aid, + uint8_t setting, + uint8_t max_key_no, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_SAM_DesfireCreate3k3desApplication3k3desAuth( + uint8_t des3k_key_nr, + uint32_t aid, + uint8_t setting, + uint8_t max_key_no, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireCreateAesApplication_no_auth( + uint32_t aid, + uint8_t setting, + uint8_t max_key_no, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireCreate3k3desApplication_no_auth( + uint32_t aid, + uint8_t setting, + uint8_t max_key_no, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireCreateDesApplication_no_auth( + uint32_t aid, + uint8_t setting, + uint8_t max_key_no, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); + +UFR_STATUS DL_API uFR_int_DesfireDeleteApplication( + uint8_t aes_key_nr, + uint32_t aid, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireDeleteApplication_aes( + uint8_t aes_key_nr, + uint32_t aid, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireDeleteApplication_des( + uint8_t des_key_nr, + uint32_t aid, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireDeleteApplication_2k3des( + uint8_t des2k_key_nr, + uint32_t aid, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireDeleteApplication_3k3des( + uint8_t des3k_key_nr, + uint32_t aid, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireDeleteApplication_PK( + IN uint8_t *aes_key_ext, + uint32_t aid, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireDeleteApplication_aes_PK( + IN uint8_t *aes_key_ext, + uint32_t aid, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireDeleteApplication_des_PK( + IN uint8_t *des_key_ext, + uint32_t aid, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireDeleteApplication_2k3des_PK( + IN uint8_t *des2k_key_ext, + uint32_t aid, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireDeleteApplication_3k3des_PK( + IN uint8_t *des3k_key_ext, + uint32_t aid, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_SAM_DesfireDeleteApplicationAesAuth( + uint8_t aes_key_nr, + uint32_t aid, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_SAM_DesfireDeleteApplication3k3desAuth( + uint8_t des3k_key_nr, + uint32_t aid, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); + +UFR_STATUS DL_API uFR_int_DesfireSetConfiguration( + uint8_t aes_key_nr, + uint8_t random_uid, + uint8_t format_disable, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireSetConfiguration_aes( + uint8_t aes_key_nr, + uint8_t random_uid, + uint8_t format_disable, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireSetConfiguration_des( + uint8_t des_key_nr, + uint8_t random_uid, + uint8_t format_disable, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireSetConfiguration_2k3des( + uint8_t des2k_key_nr, + uint8_t random_uid, + uint8_t format_disable, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireSetConfiguration_3k3des( + uint8_t des3k_key_nr, + uint8_t random_uid, + uint8_t format_disable, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireSetConfiguration_PK( + IN uint8_t *aes_key_ext, + uint8_t random_uid, + uint8_t format_disable, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireSetConfiguration_aes_PK( + IN uint8_t *aes_key_ext, + uint8_t random_uid, + uint8_t format_disable, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireSetConfiguration_des_PK( + IN uint8_t *des_key_ext, + uint8_t random_uid, + uint8_t format_disable, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireSetConfiguration_2k3des_PK( + IN uint8_t *des2k_key_ext, + uint8_t random_uid, + uint8_t format_disable, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireSetConfiguration_3k3des_PK( + IN uint8_t *des3k_key_ext, + uint8_t random_uid, + uint8_t format_disable, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_SAM_DesfireSetConfigurationAesAuth( + uint8_t aes_key_nr, + uint8_t random_uid, + uint8_t format_disable, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_SAM_DesfireSetConfiguration3k3desAuth( + uint8_t des3k_key_nr, + uint8_t random_uid, + uint8_t format_disable, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); + +UFR_STATUS DL_API uFR_int_DesfireGetKeySettings( + uint8_t aes_key_nr, + uint32_t aid, + VAR uint8_t *setting, + VAR uint8_t *max_key_no, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireGetKeySettings_aes( + uint8_t aes_key_nr, + uint32_t aid, + VAR uint8_t *setting, + VAR uint8_t *max_key_no, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireGetKeySettings_des( + uint8_t des_key_nr, + uint32_t aid, + VAR uint8_t *setting, + VAR uint8_t *max_key_no, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireGetKeySettings_2k3des( + uint8_t des2k_key_nr, + uint32_t aid, + VAR uint8_t *setting, + VAR uint8_t *max_key_no, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireGetKeySettings_3k3des( + uint8_t des3k_key_nr, + uint32_t aid, + VAR uint8_t *setting, + VAR uint8_t *max_key_no, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireGetKeySettings_PK( + IN uint8_t *aes_key_ext, + uint32_t aid, + VAR uint8_t *setting, + VAR uint8_t *max_key_no, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireGetKeySettings_aes_PK( + IN uint8_t *aes_key_ext, + uint32_t aid, + VAR uint8_t *setting, + VAR uint8_t *max_key_no, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireGetKeySettings_des_PK( + IN uint8_t *des_key_ext, + uint32_t aid, + VAR uint8_t *setting, + VAR uint8_t *max_key_no, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireGetKeySettings_2k3des_PK( + IN uint8_t *des2k_key_ext, + uint32_t aid, + VAR uint8_t *setting, + VAR uint8_t *max_key_no, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireGetKeySettings_3k3des_PK( + IN uint8_t *des3k_key_ext, + uint32_t aid, + VAR uint8_t *setting, + VAR uint8_t *max_key_no, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_SAM_DesfireGetKeySettingsAesAuth( + uint8_t aes_key_nr, + uint32_t aid, + VAR uint8_t *setting, + VAR uint8_t *max_key_no, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_SAM_DesfireGetKeySettings3k3desAuth( + uint8_t des3k_key_nr, + uint32_t aid, + VAR uint8_t *setting, + VAR uint8_t *max_key_no, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); + +UFR_STATUS DL_API uFR_int_DesfireChangeKeySettings( + uint8_t aes_key_nr, + uint32_t aid, + uint8_t setting, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireChangeKeySettings_aes( + uint8_t aes_key_nr, + uint32_t aid, + uint8_t setting, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireChangeKeySettings_des( + uint8_t des_key_nr, + uint32_t aid, + uint8_t setting, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireChangeKeySettings_2k3des( + uint8_t des2k_key_nr, + uint32_t aid, + uint8_t setting, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireChangeKeySettings_3k3des( + uint8_t des3k_key_nr, + uint32_t aid, + uint8_t setting, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireChangeKeySettings_PK( + IN uint8_t *aes_key_ext, + uint32_t aid, + uint8_t setting, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireChangeKeySettings_aes_PK( + IN uint8_t *aes_key_ext, + uint32_t aid, + uint8_t setting, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireChangeKeySettings_des_PK( + IN uint8_t *des_key_ext, + uint32_t aid, + uint8_t setting, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireChangeKeySettings_2k3des_PK( + IN uint8_t *des2k_key_ext, + uint32_t aid, + uint8_t setting, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireChangeKeySettings_3k3des_PK( + IN uint8_t *des3k_key_ext, + uint32_t aid, + uint8_t setting, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_SAM_DesfireChangeKeySettingsAesAuth( + uint8_t aes_key_nr, + uint32_t aid, + uint8_t setting, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_SAM_DesfireChangeKeySettings3k3desAuth( + uint8_t des3k_key_nr, + uint32_t aid, + uint8_t setting, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); + +UFR_STATUS DL_API uFR_int_DesfireChangeAesKey( + uint8_t aes_key_nr, + uint32_t aid, + uint8_t aid_key_no_auth, + IN uint8_t new_aes_key[16], + uint8_t aid_key_no, + IN uint8_t old_aes_key[16], + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +// all keys are in reader +UFR_STATUS DL_API uFR_int_DesfireChangeAesKey_A( + uint8_t aes_key_nr, + uint32_t aid, + uint8_t aid_key_no_auth, + uint8_t new_aes_key_nr, + uint8_t aid_key_no, + uint8_t old_aes_key_nr, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireChangeAesKey_aes( + uint8_t aes_key_nr, + uint32_t aid, + uint8_t aid_key_no_auth, + uint8_t new_aes_key_nr, + uint8_t aid_key_no, + uint8_t old_aes_key_nr, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireChangeDesKey_des( + uint8_t auth_des_key_nr, + uint32_t aid, + uint8_t aid_key_no_auth, + uint8_t new_des_key_nr, + uint8_t aid_key_no, + uint8_t old_des_key_nr, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireChange2K3DesKey_des( + uint8_t auth_des_key_nr, + uint32_t aid, + uint8_t aid_key_no_auth, + uint8_t new_2k3des_key_nr, + uint8_t aid_key_no, + uint8_t old_2k3des_key_nr, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireChangeDesKey_2k3des( + uint8_t auth_des2k_key_nr, + uint32_t aid, + uint8_t aid_key_no_auth, + uint8_t new_des_key_nr, + uint8_t aid_key_no, + uint8_t old_des_key_nr, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireChange2K3DesKey_2k3des( + uint8_t auth_des2k_key_nr, + uint32_t aid, + uint8_t aid_key_no_auth, + uint8_t new_2k3des_key_nr, + uint8_t aid_key_no, + uint8_t old_2k3des_key_nr, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireChange3K3DesKey_3k3des( + uint8_t auth_des3k_key_nr, + uint32_t aid, + uint8_t aid_key_no_auth, + uint8_t new_3k3des_key_nr, + uint8_t aid_key_no, + uint8_t old_3k3des_key_nr, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireChangeMasterKey( + uint8_t auth_key_nr, + uint8_t auth_key_type, + uint8_t new_key_nr, + uint8_t new_key_type, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireChangeAesKey_PK( + IN uint8_t *aes_key_ext, + uint32_t aid, + uint8_t aid_key_no_auth, + IN uint8_t new_aes_key[16], + uint8_t aid_key_no, + IN uint8_t old_aes_key[16], + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireChangeAesKey_aes_PK( + IN uint8_t *aes_key_ext, + uint32_t aid, + uint8_t aid_key_no_auth, + IN uint8_t new_aes_key[16], + uint8_t aid_key_no, + IN uint8_t old_aes_key[16], + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireChangeDesKey_des_PK( + IN uint8_t *auth_des_key, + uint32_t aid, + uint8_t aid_key_no_auth, + IN uint8_t new_des_key[8], + uint8_t aid_key_no, + IN uint8_t old_des_key[8], + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireChange2K3DesKey_des_PK( + IN uint8_t *auth_des_key, + uint32_t aid, + uint8_t aid_key_no_auth, + IN uint8_t new_2k3des_key[16], + uint8_t aid_key_no, + IN uint8_t old_2k3des_key[16], + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireChangeDesKey_2k3des_PK( + IN uint8_t *auth_des2k_key, + uint32_t aid, + uint8_t aid_key_no_auth, + IN uint8_t new_des_key[8], + uint8_t aid_key_no, + IN uint8_t old_des_key[8], + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireChange2K3DesKey_2k3des_PK( + IN uint8_t *auth_des2k_key, + uint32_t aid, + uint8_t aid_key_no_auth, + IN uint8_t new_2k3des_key[16], + uint8_t aid_key_no, + IN uint8_t old_2k3des_key[16], + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireChange3K3DesKey_3k3des_PK( + IN uint8_t *auth_des3k_key, + uint32_t aid, + uint8_t aid_key_no_auth, + IN uint8_t new_3k3des_key[24], + uint8_t aid_key_no, + IN uint8_t old_3k3des_key[24], + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireChangeMasterKey_PK( + IN uint8_t *auth_key, + uint8_t auth_key_type, + IN uint8_t *new_key, + uint8_t new_key_type, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_SAM_DesfireChangeKey_AesAuth( + uint8_t aes_key_nr, + uint32_t aid, + uint8_t aid_key_no_auth, + uint8_t new_aes_key_nr, + uint8_t aid_key_no, + uint8_t old_aes_key_nr, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_SAM_DesfireChangeKey_3k3desAuth( + uint8_t des3k_key_nr, + uint32_t aid, + uint8_t aid_key_no_auth, + uint8_t new_aes_key_nr, + uint8_t aid_key_no, + uint8_t old_aes_key_nr, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); + +UFR_STATUS DL_API uFR_int_DesfireWriteAesKey( + uint8_t aes_key_no, + IN uint8_t *aes_key); +UFR_STATUS DL_API uFR_int_DesfireWriteKey( + uint8_t key_no, + IN uint8_t *key, + uint8_t key_type); + +UFR_STATUS DL_API uFR_int_DesfireReadStdDataFile( + uint8_t aes_key_nr, + uint32_t aid, + uint8_t aid_key_nr, + uint8_t file_id, + uint16_t offset, + uint16_t data_length, + uint8_t communication_settings, + OUT uint8_t *data, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireReadStdDataFile_aes( + uint8_t aes_key_nr, + uint32_t aid, + uint8_t aid_key_nr, + uint8_t file_id, + uint16_t offset, + uint16_t data_length, + uint8_t communication_settings, + OUT uint8_t *data, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireReadStdDataFile_des( + uint8_t des_key_nr, + uint32_t aid, + uint8_t aid_key_nr, + uint8_t file_id, + uint16_t offset, + uint16_t data_length, + uint8_t communication_settings, + OUT uint8_t *data, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireReadStdDataFile_2k3des( + uint8_t des2k_key_nr, + uint32_t aid, + uint8_t aid_key_nr, + uint8_t file_id, + uint16_t offset, + uint16_t data_length, + uint8_t communication_settings, + OUT uint8_t *data, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireReadStdDataFile_3k3des( + uint8_t des3k_key_nr, + uint32_t aid, + uint8_t aid_key_nr, + uint8_t file_id, + uint16_t offset, + uint16_t data_length, + uint8_t communication_settings, + OUT uint8_t *data, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireReadStdDataFile_PK( + IN uint8_t *aes_key_ext, + uint32_t aid, + uint8_t aid_key_nr, + uint8_t file_id, + uint16_t offset, + uint16_t data_length, + uint8_t communication_settings, + OUT uint8_t *data, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireReadStdDataFile_aes_PK( + IN uint8_t *aes_key_ext, + uint32_t aid, + uint8_t aid_key_nr, + uint8_t file_id, + uint16_t offset, + uint16_t data_length, + uint8_t communication_settings, + OUT uint8_t *data, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireReadStdDataFile_des_PK( + IN uint8_t *des_key_ext, + uint32_t aid, + uint8_t aid_key_nr, + uint8_t file_id, + uint16_t offset, + uint16_t data_length, + uint8_t communication_settings, + OUT uint8_t *data, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireReadStdDataFile_2k3des_PK( + IN uint8_t *des2k_key_ext, + uint32_t aid, + uint8_t aid_key_nr, + uint8_t file_id, + uint16_t offset, + uint16_t data_length, + uint8_t communication_settings, + OUT uint8_t *data, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireReadStdDataFile_3k3des_PK( + IN uint8_t *des3k_key_ext, + uint32_t aid, + uint8_t aid_key_nr, + uint8_t file_id, + uint16_t offset, + uint16_t data_length, + uint8_t communication_settings, + OUT uint8_t *data, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_SAM_DesfireReadStdDataFileAesAuth( + uint8_t aes_key_nr, + uint32_t aid, + uint8_t aid_key_nr, + uint8_t file_id, + uint16_t offset, + uint16_t data_length, + uint8_t communication_settings, + OUT uint8_t *data, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_SAM_DesfireReadStdDataFile3k3desAuth( + uint8_t des3k_key_nr, + uint32_t aid, + uint8_t aid_key_nr, + uint8_t file_id, + uint16_t offset, + uint16_t data_length, + uint8_t communication_settings, + OUT uint8_t *data, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireReadStdDataFile_no_auth( + uint32_t aid, + uint8_t aid_key_nr, + uint8_t file_id, + uint16_t offset, + uint16_t data_length, + uint8_t communication_settings, + OUT uint8_t *data, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); + +UFR_STATUS DL_API uFR_int_DesfireWriteStdDataFile( + uint8_t aes_key_nr, + uint32_t aid, + uint8_t aid_key_nr, + uint8_t file_id, + uint16_t offset, + uint16_t data_length, + uint8_t communication_settings, + IN uint8_t *data, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireWriteStdDataFile_aes( + uint8_t aes_key_nr, + uint32_t aid, + uint8_t aid_key_nr, + uint8_t file_id, + uint16_t offset, + uint16_t data_length, + uint8_t communication_settings, + IN uint8_t *data, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireWriteStdDataFile_3k3des( + uint8_t des3k_key_nr, + uint32_t aid, + uint8_t aid_key_nr, + uint8_t file_id, + uint16_t offset, + uint16_t data_length, + uint8_t communication_settings, + IN uint8_t *data, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireWriteStdDataFile_des( + uint8_t des_key_nr, + uint32_t aid, + uint8_t aid_key_nr, + uint8_t file_id, + uint16_t offset, + uint16_t data_length, + uint8_t communication_settings, + IN uint8_t *data, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireWriteStdDataFile_2k3des( + uint8_t des2k_key_nr, + uint32_t aid, + uint8_t aid_key_nr, + uint8_t file_id, + uint16_t offset, + uint16_t data_length, + uint8_t communication_settings, + IN uint8_t *data, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireWriteStdDataFile_PK( + IN uint8_t *aes_key_ext, + uint32_t aid, + uint8_t aid_key_nr, + uint8_t file_id, + uint16_t offset, + uint16_t data_length, + uint8_t communication_settings, + IN uint8_t *data, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireWriteStdDataFile_aes_PK( + IN uint8_t *aes_key_ext, + uint32_t aid, + uint8_t aid_key_nr, + uint8_t file_id, + uint16_t offset, + uint16_t data_length, + uint8_t communication_settings, + IN uint8_t *data, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireWriteStdDataFile_3k3des_PK( + IN uint8_t *des3k_key_ext, + uint32_t aid, + uint8_t aid_key_nr, + uint8_t file_id, + uint16_t offset, + uint16_t data_length, + uint8_t communication_settings, + IN uint8_t *data, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireWriteStdDataFile_des_PK( + IN uint8_t *des_key_ext, + uint32_t aid, + uint8_t aid_key_nr, + uint8_t file_id, + uint16_t offset, + uint16_t data_length, + uint8_t communication_settings, + IN uint8_t *data, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireWriteStdDataFile_2k3des_PK( + IN uint8_t *des2k_key_ext, + uint32_t aid, + uint8_t aid_key_nr, + uint8_t file_id, + uint16_t offset, + uint16_t data_length, + uint8_t communication_settings, + IN uint8_t *data, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_SAM_DesfireWriteStdDataFileAesAuth( + uint8_t aes_key_nr, + uint32_t aid, + uint8_t aid_key_nr, + uint8_t file_id, + uint16_t offset, + uint16_t data_length, + uint8_t communication_settings, + IN uint8_t *data, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_SAM_DesfireWriteStdDataFile3k3desAuth( + uint8_t des3k_key_nr, + uint32_t aid, + uint8_t aid_key_nr, + uint8_t file_id, + uint16_t offset, + uint16_t data_length, + uint8_t communication_settings, + IN uint8_t *data, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireWriteStdDataFile_no_auth( + uint32_t aid, + uint8_t aid_key_nr, + uint8_t file_id, + uint16_t offset, + uint16_t data_length, + uint8_t communication_settings, + IN uint8_t *data, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); + +UFR_STATUS DL_API uFR_int_DesfireCreateValueFile( + uint8_t aes_key_nr, + uint32_t aid, + uint8_t file_id, + int32_t lower_limit, + int32_t upper_limit, + int32_t value, + uint8_t limited_credit_enabled, + uint8_t read_key_no, + uint8_t write_key_no, + uint8_t read_write_key_no, + uint8_t change_key_no, + uint8_t communication_settings, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireCreateValueFile_aes( + uint8_t aes_key_nr, + uint32_t aid, + uint8_t file_id, + int32_t lower_limit, + int32_t upper_limit, + int32_t value, + uint8_t limited_credit_enabled, + uint8_t read_key_no, + uint8_t write_key_no, + uint8_t read_write_key_no, + uint8_t change_key_no, + uint8_t communication_settings, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireCreateValueFile_des( + uint8_t des_key_nr, + uint32_t aid, + uint8_t file_id, + int32_t lower_limit, + int32_t upper_limit, + int32_t value, + uint8_t limited_credit_enabled, + uint8_t read_key_no, + uint8_t write_key_no, + uint8_t read_write_key_no, + uint8_t change_key_no, + uint8_t communication_settings, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireCreateValueFile_2k3des( + uint8_t des2k_key_nr, + uint32_t aid, + uint8_t file_id, + int32_t lower_limit, + int32_t upper_limit, + int32_t value, + uint8_t limited_credit_enabled, + uint8_t read_key_no, + uint8_t write_key_no, + uint8_t read_write_key_no, + uint8_t change_key_no, + uint8_t communication_settings, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireCreateValueFile_3k3des( + uint8_t des3k_key_nr, + uint32_t aid, + uint8_t file_id, + int32_t lower_limit, + int32_t upper_limit, + int32_t value, + uint8_t limited_credit_enabled, + uint8_t read_key_no, + uint8_t write_key_no, + uint8_t read_write_key_no, + uint8_t change_key_no, + uint8_t communication_settings, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireCreateValueFile_PK( + IN uint8_t *aes_key_ext, + uint32_t aid, + uint8_t file_id, + int32_t lower_limit, + int32_t upper_limit, + int32_t value, + uint8_t limited_credit_enabled, + uint8_t read_key_no, + uint8_t write_key_no, + uint8_t read_write_key_no, + uint8_t change_key_no, + uint8_t communication_settings, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireCreateValueFile_aes_PK( + IN uint8_t *aes_key_ext, + uint32_t aid, + uint8_t file_id, + int32_t lower_limit, + int32_t upper_limit, + int32_t value, + uint8_t limited_credit_enabled, + uint8_t read_key_no, + uint8_t write_key_no, + uint8_t read_write_key_no, + uint8_t change_key_no, + uint8_t communication_settings, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireCreateValueFile_des_PK( + IN uint8_t *des_key_ext, + uint32_t aid, + uint8_t file_id, + int32_t lower_limit, + int32_t upper_limit, + int32_t value, + uint8_t limited_credit_enabled, + uint8_t read_key_no, + uint8_t write_key_no, + uint8_t read_write_key_no, + uint8_t change_key_no, + uint8_t communication_settings, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireCreateValueFile_2k3des_PK( + IN uint8_t *des2k_key_ext, + uint32_t aid, + uint8_t file_id, + int32_t lower_limit, + int32_t upper_limit, + int32_t value, + uint8_t limited_credit_enabled, + uint8_t read_key_no, + uint8_t write_key_no, + uint8_t read_write_key_no, + uint8_t change_key_no, + uint8_t communication_settings, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireCreateValueFile_3k3des_PK( + IN uint8_t *des3k_key_ext, + uint32_t aid, + uint8_t file_id, + int32_t lower_limit, + int32_t upper_limit, + int32_t value, + uint8_t limited_credit_enabled, + uint8_t read_key_no, + uint8_t write_key_no, + uint8_t read_write_key_no, + uint8_t change_key_no, + uint8_t communication_settings, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_SAM_DesfireCreateValueFileAesAuth( + uint8_t aes_key_nr, + uint32_t aid, + uint8_t file_id, + int32_t lower_limit, + int32_t upper_limit, + int32_t value, + uint8_t limited_credit_enabled, + uint8_t read_key_no, + uint8_t write_key_no, + uint8_t read_write_key_no, + uint8_t change_key_no, + uint8_t communication_settings, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_SAM_DesfireCreateValueFile3k3desAuth( + uint8_t des3k_key_nr, + uint32_t aid, + uint8_t file_id, + int32_t lower_limit, + int32_t upper_limit, + int32_t value, + uint8_t limited_credit_enabled, + uint8_t read_key_no, + uint8_t write_key_no, + uint8_t read_write_key_no, + uint8_t change_key_no, + uint8_t communication_settings, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireCreateValueFile_no_auth( + uint32_t aid, + uint8_t file_id, + int32_t lower_limit, + int32_t upper_limit, + int32_t value, + uint8_t limited_credit_enabled, + uint8_t read_key_no, + uint8_t write_key_no, + uint8_t read_write_key_no, + uint8_t change_key_no, + uint8_t communication_settings, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); + +UFR_STATUS DL_API uFR_int_DesfireReadValueFile( + uint8_t aes_key_nr, + uint32_t aid, + uint8_t aid_key_nr, + uint8_t file_id, + uint8_t communication_settings, + VAR int32_t *value, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireReadValueFile_aes( + uint8_t aes_key_nr, + uint32_t aid, + uint8_t aid_key_nr, + uint8_t file_id, + uint8_t communication_settings, + VAR int32_t *value, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireReadValueFile_des( + uint8_t des_key_nr, + uint32_t aid, + uint8_t aid_key_nr, + uint8_t file_id, + uint8_t communication_settings, + VAR int32_t *value, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireReadValueFile_2k3des( + uint8_t des2k_key_nr, + uint32_t aid, + uint8_t aid_key_nr, + uint8_t file_id, + uint8_t communication_settings, + VAR int32_t *value, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireReadValueFile_3k3des( + uint8_t des3k_key_nr, + uint32_t aid, + uint8_t aid_key_nr, + uint8_t file_id, + uint8_t communication_settings, + VAR int32_t *value, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireReadValueFile_PK( + IN uint8_t *aes_key_ext, + uint32_t aid, + uint8_t aid_key_nr, + uint8_t file_id, + uint8_t communication_settings, + VAR int32_t *value, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireReadValueFile_aes_PK( + IN uint8_t *aes_key_ext, + uint32_t aid, + uint8_t aid_key_nr, + uint8_t file_id, + uint8_t communication_settings, + VAR int32_t *value, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireReadValueFile_des_PK( + IN uint8_t *des_key_ext, + uint32_t aid, + uint8_t aid_key_nr, + uint8_t file_id, + uint8_t communication_settings, + VAR int32_t *value, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireReadValueFile_2k3des_PK( + IN uint8_t *des2k_key_ext, + uint32_t aid, + uint8_t aid_key_nr, + uint8_t file_id, + uint8_t communication_settings, + VAR int32_t *value, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireReadValueFile_3k3des_PK( + IN uint8_t *des3k_key_ext, + uint32_t aid, + uint8_t aid_key_nr, + uint8_t file_id, + uint8_t communication_settings, + VAR int32_t *value, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_SAM_DesfireReadValueFileAesAuth( + uint8_t aes_key_nr, + uint32_t aid, + uint8_t aid_key_nr, + uint8_t file_id, + uint8_t communication_settings, + VAR int32_t *value, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_SAM_DesfireReadValueFile3k3desAuth( + uint8_t des3k_key_nr, + uint32_t aid, + uint8_t aid_key_nr, + uint8_t file_id, + uint8_t communication_settings, + VAR int32_t *value, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireReadValueFile_no_auth( + uint32_t aid, + uint8_t aid_key_nr, + uint8_t file_id, + uint8_t communication_settings, + VAR int32_t *value, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); + +UFR_STATUS DL_API uFR_int_DesfireIncreaseValueFile( + uint8_t aes_key_nr, + uint32_t aid, + uint8_t aid_key_nr, + uint8_t file_id, + uint8_t communication_settings, + uint32_t value, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireIncreaseValueFile_aes( + uint8_t aes_key_nr, + uint32_t aid, + uint8_t aid_key_nr, + uint8_t file_id, + uint8_t communication_settings, + uint32_t value, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireIncreaseValueFile_des( + uint8_t des_key_nr, + uint32_t aid, + uint8_t aid_key_nr, + uint8_t file_id, + uint8_t communication_settings, + uint32_t value, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireIncreaseValueFile_2k3des( + uint8_t des2k_key_nr, + uint32_t aid, + uint8_t aid_key_nr, + uint8_t file_id, + uint8_t communication_settings, + uint32_t value, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireIncreaseValueFile_3k3des( + uint8_t des3k_key_nr, + uint32_t aid, + uint8_t aid_key_nr, + uint8_t file_id, + uint8_t communication_settings, + uint32_t value, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireIncreaseValueFile_PK( + IN uint8_t *aes_key_ext, + uint32_t aid, + uint8_t aid_key_nr, + uint8_t file_id, + uint8_t communication_settings, + uint32_t value, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireIncreaseValueFile_aes_PK( + IN uint8_t *aes_key_ext, + uint32_t aid, + uint8_t aid_key_nr, + uint8_t file_id, + uint8_t communication_settings, + uint32_t value, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireIncreaseValueFile_des_PK( + IN uint8_t *des_key_ext, + uint32_t aid, + uint8_t aid_key_nr, + uint8_t file_id, + uint8_t communication_settings, + uint32_t value, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireIncreaseValueFile_2k3des_PK( + IN uint8_t *des2k_key_ext, + uint32_t aid, + uint8_t aid_key_nr, + uint8_t file_id, + uint8_t communication_settings, + uint32_t value, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireIncreaseValueFile_3k3des_PK( + IN uint8_t *des3k_key_ext, + uint32_t aid, + uint8_t aid_key_nr, + uint8_t file_id, + uint8_t communication_settings, + uint32_t value, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_SAM_DesfireIncreaseValueFileAesAuth( + uint8_t aes_key_nr, + uint32_t aid, + uint8_t aid_key_nr, + uint8_t file_id, + uint8_t communication_settings, + uint32_t value, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_SAM_DesfireIncreaseValueFile3k3desAuth( + uint8_t des3k_key_nr, + uint32_t aid, + uint8_t aid_key_nr, + uint8_t file_id, + uint8_t communication_settings, + uint32_t value, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireIncreaseValueFile_no_auth( + uint32_t aid, + uint8_t aid_key_nr, + uint8_t file_id, + uint8_t communication_settings, + uint32_t value, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); + +UFR_STATUS DL_API uFR_int_DesfireDecreaseValueFile( + uint8_t aes_key_nr, + uint32_t aid, + uint8_t aid_key_nr, + uint8_t file_id, + uint8_t communication_settings, + uint32_t value, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireDecreaseValueFile_aes( + uint8_t aes_key_nr, + uint32_t aid, + uint8_t aid_key_nr, + uint8_t file_id, + uint8_t communication_settings, + uint32_t value, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireDecreaseValueFile_des( + uint8_t des_key_nr, + uint32_t aid, + uint8_t aid_key_nr, + uint8_t file_id, + uint8_t communication_settings, + uint32_t value, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireDecreaseValueFile_2k3des( + uint8_t des2k_key_nr, + uint32_t aid, + uint8_t aid_key_nr, + uint8_t file_id, + uint8_t communication_settings, + uint32_t value, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireDecreaseValueFile_3k3des( + uint8_t des3_key_nr, + uint32_t aid, + uint8_t aid_key_nr, + uint8_t file_id, + uint8_t communication_settings, + uint32_t value, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireDecreaseValueFile_PK( + IN uint8_t *aes_key_ext, + uint32_t aid, + uint8_t aid_key_nr, + uint8_t file_id, + uint8_t communication_settings, + uint32_t value, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireDecreaseValueFile_aes_PK( + IN uint8_t *aes_key_ext, + uint32_t aid, + uint8_t aid_key_nr, + uint8_t file_id, + uint8_t communication_settings, + uint32_t value, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireDecreaseValueFile_des_PK( + IN uint8_t *des_key_ext, + uint32_t aid, + uint8_t aid_key_nr, + uint8_t file_id, + uint8_t communication_settings, + uint32_t value, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireDecreaseValueFile_2k3des_PK( + IN uint8_t *des2k_key_ext, + uint32_t aid, + uint8_t aid_key_nr, + uint8_t file_id, + uint8_t communication_settings, + uint32_t value, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireDecreaseValueFile_3k3des_PK( + IN uint8_t *des3k_key_ext, + uint32_t aid, + uint8_t aid_key_nr, + uint8_t file_id, + uint8_t communication_settings, + uint32_t value, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_SAM_DesfireDecreaseValueFileAesAuth( + uint8_t aes_key_nr, + uint32_t aid, + uint8_t aid_key_nr, + uint8_t file_id, + uint8_t communication_settings, + uint32_t value, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_SAM_DesfireDecreaseValueFile3k3desAuth( + uint8_t des3k_key_nr, + uint32_t aid, + uint8_t aid_key_nr, + uint8_t file_id, + uint8_t communication_settings, + uint32_t value, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireDecreaseValueFile_no_auth( + uint32_t aid, + uint8_t aid_key_nr, + uint8_t file_id, + uint8_t communication_settings, + uint32_t value, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); + +UFR_STATUS DL_API uFR_int_DesfireGetApplicationIds( + uint8_t aes_key_nr, + OUT uint32_t *application_ids, + VAR uint8_t *number_of_aplication_ids, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireGetApplicationIds_aes( + uint8_t aes_key_nr, + OUT uint32_t *application_ids, + VAR uint8_t *number_of_aplication_ids, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireGetApplicationIds_des( + uint8_t des_key_nr, + OUT uint32_t *application_ids, + VAR uint8_t *number_of_aplication_ids, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireGetApplicationIds_2k3des( + uint8_t des2k_key_nr, + OUT uint32_t *application_ids, + VAR uint8_t *number_of_aplication_ids, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireGetApplicationIds_3k3des( + uint8_t des3k_key_nr, + OUT uint32_t *application_ids, + VAR uint8_t *number_of_aplication_ids, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_SAM_DesfireGetApplicationIdsAesAuth( + uint8_t aes_key_nr, + OUT uint32_t *application_ids, + VAR uint8_t *number_of_aplication_ids, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_SAM_DesfireGetApplicationIds3k3desAuth( + uint8_t des3k_key_nr, + OUT uint32_t *application_ids, + VAR uint8_t *number_of_aplication_ids, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireGetApplicationIds_PK( + IN uint8_t *aes_key_ext, + OUT uint32_t *application_ids, + VAR uint8_t *number_of_aplication_ids, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireGetApplicationIds_aes_PK( + IN uint8_t *aes_key_ext, + OUT uint32_t *application_ids, + VAR uint8_t *number_of_aplication_ids, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireGetApplicationIds_des_PK( + IN uint8_t *des_key_ext, + OUT uint32_t *application_ids, + VAR uint8_t *number_of_aplication_ids, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireGetApplicationIds_2k3des_PK( + IN uint8_t *des2k_key_ext, + OUT uint32_t *application_ids, + VAR uint8_t *number_of_aplication_ids, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireGetApplicationIds_3k3des_PK( + IN uint8_t *des3k_key_ext, + OUT uint32_t *application_ids, + VAR uint8_t *number_of_aplication_ids, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireGetApplicationIds_no_auth( + OUT uint32_t *application_ids, + VAR uint8_t *number_of_aplication_ids, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); + +UFR_STATUS DL_API uFR_int_DesfireCreateLinearRecordFile_aes( + uint8_t aes_key_nr, + uint32_t aid, uint8_t file_id, + uint32_t record_size, + uint32_t max_rec_no, + uint8_t read_key_no, + uint8_t write_key_no, + uint8_t read_write_key_no, + uint8_t change_key_no, + uint8_t communication_settings, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireCreateLinearRecordFile_des( + uint8_t des_key_nr, + uint32_t aid, uint8_t file_id, + uint32_t record_size, + uint32_t max_rec_no, + uint8_t read_key_no, + uint8_t write_key_no, + uint8_t read_write_key_no, + uint8_t change_key_no, + uint8_t communication_settings, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireCreateLinearRecordFile_2k3des( + uint8_t des2k_key_nr, + uint32_t aid, uint8_t file_id, + uint32_t record_size, + uint32_t max_rec_no, + uint8_t read_key_no, + uint8_t write_key_no, + uint8_t read_write_key_no, + uint8_t change_key_no, + uint8_t communication_settings, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireCreateLinearRecordFile_3k3des( + uint8_t des3k_key_nr, + uint32_t aid, uint8_t file_id, + uint32_t record_size, + uint32_t max_rec_no, + uint8_t read_key_no, + uint8_t write_key_no, + uint8_t read_write_key_no, + uint8_t change_key_no, + uint8_t communication_settings, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_SAM_DesfireCreateLinearRecordFileAesAuth( + uint8_t aes_key_nr, + uint32_t aid, + uint8_t file_id, + uint32_t record_size, + uint32_t max_rec_no, + uint8_t read_key_no, + uint8_t write_key_no, + uint8_t read_write_key_no, + uint8_t change_key_no, + uint8_t communication_settings, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_SAM_DesfireCreateLinearRecordFile3k3desAuth( + uint8_t des3k_key_nr, + uint32_t aid, + uint8_t file_id, + uint32_t record_size, + uint32_t max_rec_no, + uint8_t read_key_no, + uint8_t write_key_no, + uint8_t read_write_key_no, + uint8_t change_key_no, + uint8_t communication_settings, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); + +UFR_STATUS DL_API uFR_int_DesfireCreateLinearRecordFile_aes_PK( + IN uint8_t *aes_key_ext, + uint32_t aid, + uint8_t file_id, + uint32_t record_size, + uint32_t max_rec_no, + uint8_t read_key_no, + uint8_t write_key_no, + uint8_t read_write_key_no, + uint8_t change_key_no, + uint8_t communication_settings, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireCreateLinearRecordFile_des_PK( + IN uint8_t *des_key_ext, + uint32_t aid, + uint8_t file_id, + uint32_t record_size, + uint32_t max_rec_no, + uint8_t read_key_no, + uint8_t write_key_no, + uint8_t read_write_key_no, + uint8_t change_key_no, + uint8_t communication_settings, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireCreateLinearRecordFile_2k3des_PK( + IN uint8_t *des2k_key_ext, + uint32_t aid, + uint8_t file_id, + uint32_t record_size, + uint32_t max_rec_no, + uint8_t read_key_no, + uint8_t write_key_no, + uint8_t read_write_key_no, + uint8_t change_key_no, + uint8_t communication_settings, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireCreateLinearRecordFile_3k3des_PK( + IN uint8_t *des3k_key_ext, + uint32_t aid, + uint8_t file_id, + uint32_t record_size, + uint32_t max_rec_no, + uint8_t read_key_no, + uint8_t write_key_no, + uint8_t read_write_key_no, + uint8_t change_key_no, + uint8_t communication_settings, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireCreateLinearRecordFile_no_auth( + uint32_t aid, + uint8_t file_id, + uint32_t record_size, + uint32_t max_rec_no, + uint8_t read_key_no, + uint8_t write_key_no, + uint8_t read_write_key_no, + uint8_t change_key_no, + uint8_t communication_settings, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); + +UFR_STATUS DL_API uFR_int_DesfireCreateCyclicRecordFile_aes( + uint8_t aes_key_nr, + uint32_t aid, + uint8_t file_id, + uint32_t record_size, + uint32_t max_rec_no, + uint8_t read_key_no, + uint8_t write_key_no, + uint8_t read_write_key_no, + uint8_t change_key_no, + uint8_t communication_settings, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireCreateCyclicRecordFile_des( + uint8_t des_key_nr, + uint32_t aid, + uint8_t file_id, + uint32_t record_size, + uint32_t max_rec_no, + uint8_t read_key_no, + uint8_t write_key_no, + uint8_t read_write_key_no, + uint8_t change_key_no, + uint8_t communication_settings, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireCreateCyclicRecordFile_2k3des( + uint8_t des2k_key_nr, + uint32_t aid, + uint8_t file_id, + uint32_t record_size, + uint32_t max_rec_no, + uint8_t read_key_no, + uint8_t write_key_no, + uint8_t read_write_key_no, + uint8_t change_key_no, + uint8_t communication_settings, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireCreateCyclicRecordFile_3k3des( + uint8_t des3k_key_nr, + uint32_t aid, + uint8_t file_id, + uint32_t record_size, + uint32_t max_rec_no, + uint8_t read_key_no, + uint8_t write_key_no, + uint8_t read_write_key_no, + uint8_t change_key_no, + uint8_t communication_settings, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_SAM_DesfireCreateCyclicRecordFileAesAuth( + uint8_t aes_key_nr, + uint32_t aid, + uint8_t file_id, + uint32_t record_size, + uint32_t max_rec_no, + uint8_t read_key_no, + uint8_t write_key_no, + uint8_t read_write_key_no, + uint8_t change_key_no, + uint8_t communication_settings, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_SAM_DesfireCreateCyclicRecordFile3k3desAuth( + uint8_t des3k_key_nr, + uint32_t aid, + uint8_t file_id, + uint32_t record_size, + uint32_t max_rec_no, + uint8_t read_key_no, + uint8_t write_key_no, + uint8_t read_write_key_no, + uint8_t change_key_no, + uint8_t communication_settings, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireCreateCyclicRecordFile_aes_PK( + IN uint8_t *aes_key_ext, + uint32_t aid, + uint8_t file_id, + uint32_t record_size, + uint32_t max_rec_no, + uint8_t read_key_no, + uint8_t write_key_no, + uint8_t read_write_key_no, + uint8_t change_key_no, + uint8_t communication_settings, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireCreateCyclicRecordFile_des_PK( + IN uint8_t *des_key_ext, + uint32_t aid, + uint8_t file_id, + uint32_t record_size, + uint32_t max_rec_no, + uint8_t read_key_no, + uint8_t write_key_no, + uint8_t read_write_key_no, + uint8_t change_key_no, + uint8_t communication_settings, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireCreateCyclicRecordFile_2k3des_PK( + IN uint8_t *des2k_key_ext, + uint32_t aid, + uint8_t file_id, + uint32_t record_size, + uint32_t max_rec_no, + uint8_t read_key_no, + uint8_t write_key_no, + uint8_t read_write_key_no, + uint8_t change_key_no, + uint8_t communication_settings, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireCreateCyclicRecordFile_3k3des_PK( + IN uint8_t *des3k_key_ext, + uint32_t aid, + uint8_t file_id, + uint32_t record_size, + uint32_t max_rec_no, + uint8_t read_key_no, + uint8_t write_key_no, + uint8_t read_write_key_no, + uint8_t change_key_no, + uint8_t communication_settings, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireCreateCyclicRecordFile_no_auth( + uint32_t aid, + uint8_t file_id, + uint32_t record_size, + uint32_t max_rec_no, + uint8_t read_key_no, + uint8_t write_key_no, + uint8_t read_write_key_no, + uint8_t change_key_no, + uint8_t communication_settings, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); + +UFR_STATUS DL_API uFR_int_DesfireWriteRecord_aes( + uint8_t aes_key_nr, + uint32_t aid, + uint8_t aid_key_nr, + uint8_t file_id, + uint16_t offset, + uint16_t data_length, + uint8_t communication_settings, + IN uint8_t *data, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireWriteRecord_des( + uint8_t des_key_nr, + uint32_t aid, + uint8_t aid_key_nr, + uint8_t file_id, + uint16_t offset, + uint16_t data_length, + uint8_t communication_settings, + IN uint8_t *data, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireWriteRecord_2k3des( + uint8_t des2k_key_nr, + uint32_t aid, + uint8_t aid_key_nr, + uint8_t file_id, + uint16_t offset, + uint16_t data_length, + uint8_t communication_settings, + IN uint8_t *data, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireWriteRecord_3k3des( + uint8_t des3k_key_nr, + uint32_t aid, + uint8_t aid_key_nr, + uint8_t file_id, + uint16_t offset, + uint16_t data_length, + uint8_t communication_settings, + IN uint8_t *data, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_SAM_DesfireWriteRecordAesAuth( + uint8_t aes_key_nr, + uint32_t aid, + uint8_t aid_key_nr, + uint8_t file_id, + uint16_t offset, + uint16_t data_length, + uint8_t communication_settings, + IN uint8_t *data, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_SAM_DesfireWriteRecord3k3desAuth( + uint8_t des3k_key_nr, + uint32_t aid, + uint8_t aid_key_nr, + uint8_t file_id, + uint16_t offset, + uint16_t data_length, + uint8_t communication_settings, + IN uint8_t *data, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireWriteRecord_aes_PK( + IN uint8_t *aes_key_ext, + uint32_t aid, + uint8_t aid_key_nr, + uint8_t file_id, + uint16_t offset, + uint16_t data_length, + uint8_t communication_settings, + IN uint8_t *data, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireWriteRecord_des_PK( + IN uint8_t *des_key_ext, + uint32_t aid, + uint8_t aid_key_nr, + uint8_t file_id, + uint16_t offset, + uint16_t data_length, + uint8_t communication_settings, + IN uint8_t *data, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireWriteRecord_2k3des_PK( + IN uint8_t *des2k_key_ext, + uint32_t aid, + uint8_t aid_key_nr, + uint8_t file_id, + uint16_t offset, + uint16_t data_length, + uint8_t communication_settings, + IN uint8_t *data, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireWriteRecord_3k3des_PK( + IN uint8_t *des3k_key_ext, + uint32_t aid, + uint8_t aid_key_nr, + uint8_t file_id, + uint16_t offset, + uint16_t data_length, + uint8_t communication_settings, + IN uint8_t *data, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireWriteRecord_no_auth( + uint32_t aid, + uint8_t aid_key_nr, + uint8_t file_id, + uint16_t offset, + uint16_t data_length, + uint8_t communication_settings, + IN uint8_t *data, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); + +UFR_STATUS DL_API uFR_int_DesfireReadRecords_aes( + uint8_t aes_key_nr, + uint32_t aid, + uint8_t aid_key_nr, + uint8_t file_id, + uint16_t offset, + uint16_t number_of_records, + uint16_t record_size, + uint8_t communication_settings, + OUT uint8_t *data, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireReadRecords_des( + uint8_t des_key_nr, + uint32_t aid, + uint8_t aid_key_nr, + uint8_t file_id, + uint16_t offset, + uint16_t number_of_records, + uint16_t record_size, + uint8_t communication_settings, + OUT uint8_t *data, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireReadRecords_2k3des( + uint8_t des2k_key_nr, + uint32_t aid, + uint8_t aid_key_nr, + uint8_t file_id, + uint16_t offset, + uint16_t number_of_records, + uint16_t record_size, + uint8_t communication_settings, + OUT uint8_t *data, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireReadRecords_3k3des( + uint8_t des3k_key_nr, + uint32_t aid, + uint8_t aid_key_nr, + uint8_t file_id, + uint16_t offset, + uint16_t number_of_records, + uint16_t record_size, + uint8_t communication_settings, + OUT uint8_t *data, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_SAM_DesfireReadRecordsAesAuth( + uint8_t aes_key_nr, + uint32_t aid, + uint8_t aid_key_nr, + uint8_t file_id, + uint16_t offset, + uint16_t number_of_records, + uint16_t record_size, + uint8_t communication_settings, + OUT uint8_t *data, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_SAM_DesfireReadRecords3k3desAuth( + uint8_t des3k_key_nr, + uint32_t aid, + uint8_t aid_key_nr, + uint8_t file_id, + uint16_t offset, + uint16_t number_of_records, + uint16_t record_size, + uint8_t communication_settings, + OUT uint8_t *data, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireReadRecords_aes_PK( + IN uint8_t *aes_key_ext, + uint32_t aid, + uint8_t aid_key_nr, + uint8_t file_id, + uint16_t offset, + uint16_t number_of_records, + uint16_t record_size, + uint8_t communication_settings, + OUT uint8_t *data, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireReadRecords_des_PK( + IN uint8_t *des_key_ext, + uint32_t aid, + uint8_t aid_key_nr, + uint8_t file_id, + uint16_t offset, + uint16_t number_of_records, + uint16_t record_size, + uint8_t communication_settings, + OUT uint8_t *data, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireReadRecords_2k3des_PK( + IN uint8_t *des2k_key_ext, + uint32_t aid, + uint8_t aid_key_nr, + uint8_t file_id, + uint16_t offset, + uint16_t number_of_records, + uint16_t record_size, + uint8_t communication_settings, + OUT uint8_t *data, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireReadRecords_3k3des_PK( + IN uint8_t *des3k_key_ext, + uint32_t aid, + uint8_t aid_key_nr, + uint8_t file_id, + uint16_t offset, + uint16_t number_of_records, + uint16_t record_size, + uint8_t communication_settings, + OUT uint8_t *data, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireReadRecords_no_auth( + uint32_t aid, + uint8_t aid_key_nr, + uint8_t file_id, + uint16_t offset, + uint16_t number_of_records, + uint16_t record_size, + uint8_t communication_settings, + OUT uint8_t *data, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); + +UFR_STATUS DL_API uFR_int_DesfireClearRecordFile( + uint8_t aes_key_nr, + uint32_t aid, + uint8_t file_id, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireClearRecordFile_aes( + uint8_t aes_key_nr, + uint32_t aid, + uint8_t file_id, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireClearRecordFile_des( + uint8_t des_key_nr, + uint32_t aid, + uint8_t file_id, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireClearRecordFile_2k3des( + uint8_t des2k_key_nr, + uint32_t aid, + uint8_t file_id, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireClearRecordFile_3k3des( + uint8_t des3k_key_nr, + uint32_t aid, + uint8_t file_id, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_SAM_DesfireClearRecordFileAesAuth( + uint8_t aes_key_nr, + uint32_t aid, + uint8_t file_id, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_SAM_DesfireClearRecordFile3k3desAuth( + uint8_t des3k_key_nr, + uint32_t aid, + uint8_t file_id, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireClearRecordFile_PK( + IN uint8_t *aes_key_ext, + uint32_t aid, + uint8_t file_id, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireClearRecordFile_aes_PK( + IN uint8_t *aes_key_ext, + uint32_t aid, + uint8_t file_id, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireClearRecordFile_des_PK( + IN uint8_t *des_key_ext, + uint32_t aid, + uint8_t file_id, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireClearRecordFile_2k3des_PK( + IN uint8_t *des2k_key_ext, + uint32_t aid, + uint8_t file_id, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireClearRecordFile_3k3des_PK( + IN uint8_t *des3k_key_ext, + uint32_t aid, + uint8_t file_id, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireClearRecordFile_no_auth( + uint32_t aid, + uint8_t file_id, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); + +///////////////////////////////////////////////////////////////////// + +UFR_STATUS DL_API GreenLedBlinkingTurnOn(void); +UFR_STATUS DL_API GreenLedBlinkingTurnOff(void); + +///////////////////////////////////////////////////////////////////// + +UFR_STATUS DL_API SetRfAnalogRegistersTypeA(uint8_t ThresholdMinLevel, uint8_t ThresholdCollLevel, + uint8_t RFLevelAmp, uint8_t RxGain, uint8_t RFLevel); +UFR_STATUS DL_API SetRfAnalogRegistersTypeB(uint8_t ThresholdMinLevel, uint8_t ThresholdCollLevel, + uint8_t RFLevelAmp, uint8_t RxGain, uint8_t RFLevel); +UFR_STATUS DL_API SetRfAnalogRegistersISO14443_212(uint8_t ThresholdMinLevel, uint8_t ThresholdCollLevel, + uint8_t RFLevelAmp, uint8_t RxGain, uint8_t RFLevel); +UFR_STATUS DL_API SetRfAnalogRegistersISO14443_424(uint8_t ThresholdMinLevel, uint8_t ThresholdCollLevel, + uint8_t RFLevelAmp, uint8_t RxGain, uint8_t RFLevel); + +UFR_STATUS DL_API SetRfAnalogRegistersTypeADefault(void); +UFR_STATUS DL_API SetRfAnalogRegistersTypeBDefault(void); +UFR_STATUS DL_API SetRfAnalogRegistersISO14443_212Default(void); +UFR_STATUS DL_API SetRfAnalogRegistersISO14443_424Default(void); + +UFR_STATUS DL_API GetRfAnalogRegistersTypeA(VAR uint8_t *ThresholdMinLevel, VAR uint8_t *ThresholdCollLevel, + VAR uint8_t *RFLevelAmp, VAR uint8_t *RxGain, VAR uint8_t *RFLevel); +UFR_STATUS DL_API GetRfAnalogRegistersTypeB(VAR uint8_t *ThresholdMinLevel, VAR uint8_t *ThresholdCollLevel, + VAR uint8_t *RFLevelAmp, VAR uint8_t *RxGain, VAR uint8_t *RFLevel); +UFR_STATUS DL_API GetRfAnalogRegistersISO14443_212(VAR uint8_t *ThresholdMinLevel, VAR uint8_t *ThresholdCollLevel, + VAR uint8_t *RFLevelAmp, VAR uint8_t *RxGain, VAR uint8_t *RFLevel); +UFR_STATUS DL_API GetRfAnalogRegistersISO14443_424(VAR uint8_t *ThresholdMinLevel, VAR uint8_t *ThresholdCollLevel, + VAR uint8_t *RFLevelAmp, VAR uint8_t *RxGain, VAR uint8_t *RFLevel); + +UFR_STATUS DL_API SetRfAnalogRegistersTypeATrans(uint8_t ThresholdMinLevel, uint8_t ThresholdCollLevel, + uint8_t RFLevelAmp, uint8_t RxGain, uint8_t RFLevel, + uint8_t CWGsNOn, uint8_t ModGsNOn, uint8_t CWGsP, + uint8_t CWGsNOff, uint8_t ModGsNOff); +UFR_STATUS DL_API SetRfAnalogRegistersTypeBTrans(uint8_t ThresholdMinLevel, uint8_t ThresholdCollLevel, + uint8_t RFLevelAmp, uint8_t RxGain, uint8_t RFLevel, + uint8_t CWGsNOn, uint8_t ModGsNOn, uint8_t CWGsP, uint8_t ModGsP); + +UFR_STATUS DL_API GetRfAnalogRegistersTypeATrans(VAR uint8_t *ThresholdMinLevel, VAR uint8_t *ThresholdCollLevel, + VAR uint8_t *RFLevelAmp, VAR uint8_t *RxGain, VAR uint8_t *RFLevel, + VAR uint8_t *CWGsNOn, VAR uint8_t *ModGsNOn, VAR uint8_t *CWGsP, + VAR uint8_t *CWGsNOff, VAR uint8_t *ModGsNOff); +UFR_STATUS DL_API GetRfAnalogRegistersTypeBTrans(VAR uint8_t *ThresholdMinLevel, VAR uint8_t *ThresholdCollLevel, + VAR uint8_t *RFLevelAmp, VAR uint8_t *RxGain, VAR uint8_t *RFLevel, + VAR uint8_t *CWGsNOn, VAR uint8_t *ModGsNOn, VAR uint8_t *CWGsP, VAR uint8_t *ModGsP); + +UFR_STATUS DL_API CheckBootFirmware(VAR uint8_t *exec_location); +UFR_STATUS DL_API FastFlashCheck(void); +UFR_STATUS DL_API DefaultBaudrateFlashCheck(void); +UFR_STATUS DL_API GetReaderParameters(OUT uint8_t *mui, OUT uint8_t *serial_nr, + VAR uint8_t *hw_type, VAR uint8_t *hw_ver, VAR uint8_t *device_type, + VAR uint8_t *fw_ver_major, VAR uint8_t *fw_ver_minor, VAR uint8_t *fw_ver_build); + +//SAM +UFR_STATUS DL_API SAM_get_version_raw(OUT uint8_t *data, + VAR uint8_t *length); +UFR_STATUS DL_API SAM_get_version(VAR SAM_HW_TYPE *sam_type, + OUT uint8_t *sam_uid); +UFR_STATUS DL_API SAM_get_key_entry_raw(uint8_t key_no, + OUT uint8_t *key_entry, + VAR uint8_t *key_length, + OUT uint8_t *apdu_sw); +UFR_STATUS DL_API SAM_authenticate_host_no_div_des(uint8_t key_no, + uint8_t key_v, + IN uint8_t *des_key); +UFR_STATUS DL_API SAM_pre_pesonalization_master_AES128_key(IN uint8_t *aes_key_ver_a, uint8_t ver_a, IN uint8_t *aes_key_ver_b, uint8_t ver_b, + IN uint8_t *aes_key_ver_c, uint8_t ver_c, OUT uint8_t *apdu_sw); +UFR_STATUS DL_API SAM_pre_personalization_switch_to_AV2_mode(IN uint8_t *master_aes_key, uint8_t key_version, OUT uint8_t *apdu_sw); +UFR_STATUS DL_API SAM_authenticate_host_AV2(IN uint8_t *master_aes_key, uint8_t key_nr, uint8_t key_version, uint8_t host_mode, OUT uint8_t *apdu_sw); + +UFR_STATUS DL_API SAM_change_key_entry_mifare_AV2_plain_one_key(uint8_t key_entry_no, IN uint8_t *keyA, IN uint8_t *keyB, + uint8_t key_no_CEK, uint8_t key_v_CEK, uint8_t ref_no_KUC, OUT uint8_t *apdu_sw); +UFR_STATUS DL_API SAM_change_key_entry_AES_AV2_plain_one_key(uint8_t key_entry_no, IN uint8_t *key, + uint8_t key_no_CEK, uint8_t key_v_CEK, uint8_t ref_no_KUC, OUT uint8_t *apdu_sw); +UFR_STATUS DL_API SAM_change_key_entry_3K3DES_AV2_plain_one_key(uint8_t key_entry_no, IN uint8_t *key, + uint8_t key_no_CEK, uint8_t key_v_CEK, uint8_t ref_no_KUC, OUT uint8_t *apdu_sw); +UFR_STATUS DL_API SAM_change_key_entry_2K3DES_AV2_plain_one_key(uint8_t key_entry_no, IN uint8_t *key, + uint8_t key_no_CEK, uint8_t key_v_CEK, uint8_t ref_no_KUC, OUT uint8_t *apdu_sw); +UFR_STATUS DL_API SAM_change_key_entry_aes_AV2_plain_host_key(uint8_t key_entry_no, + IN uint8_t *aes_key_ver_a, uint8_t ver_a, IN uint8_t *aes_key_ver_b, uint8_t ver_b, + IN uint8_t *aes_key_ver_c, uint8_t ver_c, + uint8_t key_no_CEK, uint8_t key_v_CEK, uint8_t ref_no_KUC, + uint8_t sam_lock_unlock, OUT uint8_t *apdu_sw); +UFR_STATUS DL_API WriteSamUnlockKey(uint8_t key_no, uint8_t key_ver, IN uint8_t *aes_key); + +//MIFARE PLUS +UFR_STATUS DL_API MFP_WritePerso(uint16_t address, IN uint8_t *data); +UFR_STATUS DL_API MFP_CommitPerso(void); +UFR_STATUS DL_API MFP_PersonalizationMinimal(IN uint8_t *card_master_key, IN uint8_t *card_config_key, + IN uint8_t *level_2_switch_key, IN uint8_t *level_3_switch_key, IN uint8_t *level_1_auth_key, + IN uint8_t *select_vc_key, IN uint8_t *prox_chk_key, IN uint8_t *vc_poll_enc_key, IN uint8_t *vc_poll_mac_key); +UFR_STATUS DL_API MFP_SwitchToSecurityLevel3(uint8_t key_index); +UFR_STATUS DL_API MFP_SwitchToSecurityLevel3_PK(IN uint8_t *aes_key); +UFR_STATUS DL_API MFP_AesAuthSecurityLevel1(uint8_t key_index); +UFR_STATUS DL_API MFP_AesAuthSecurityLevel1_PK(IN uint8_t *aes_key); +UFR_STATUS DL_API MFP_ChangeMasterKey(uint8_t key_index, IN uint8_t *new_key); +UFR_STATUS DL_API MFP_ChangeMasterKey_PK(IN uint8_t *old_key, IN uint8_t *new_key); +UFR_STATUS DL_API MFP_ChangeConfigurationKey(uint8_t key_index, IN uint8_t *new_key); +UFR_STATUS DL_API MFP_ChangeConfigurationKey_PK(IN uint8_t *old_key, IN uint8_t *new_key); +UFR_STATUS DL_API MFP_ChangeConfigurationKeySamKey(uint8_t key_index, uint8_t new_key_index); + +UFR_STATUS DL_API MFP_FieldConfigurationSet(uint8_t configuration_key_index, uint8_t rid_use, uint8_t prox_check_use); +UFR_STATUS DL_API MFP_FieldConfigurationSet_PK(IN uint8_t *configuration_key, uint8_t rid_use, uint8_t prox_check_use); +UFR_STATUS DL_API MFP_FieldConfigurationSetSamKey(uint8_t configuration_key_index, uint8_t rid_use, uint8_t prox_check_use); +UFR_STATUS DL_API MFP_ChangeSectorKey(uint8_t sector_nr, uint8_t auth_mode, uint8_t key_index, IN uint8_t *new_key); +UFR_STATUS DL_API MFP_ChangeSectorKey_PK(uint8_t sector_nr, uint8_t auth_mode, IN uint8_t *old_key, IN uint8_t *new_key); +UFR_STATUS DL_API MFP_GetUid(uint8_t key_index_vc_poll_enc_key, uint8_t key_index_vc_poll_mac_key, OUT uint8_t *uid, VAR uint8_t *uid_len); +UFR_STATUS DL_API MFP_GetUidSamKey(uint8_t key_index_vc_poll_enc_key, uint8_t key_index_vc_poll_mac_key, OUT uint8_t *uid, VAR uint8_t *uid_len); +UFR_STATUS DL_API MFP_GetUid_PK(IN uint8_t *vc_poll_enc_key, IN uint8_t *vc_poll_mac_key, OUT uint8_t *uid, VAR uint8_t *uid_len); +UFR_STATUS DL_API MFP_ChangeVcPollingEncKey(uint8_t configuration_key_index, IN uint8_t *new_key); +UFR_STATUS DL_API MFP_ChangeVcPollingEncKeySamKey(uint8_t configuration_key_index, uint8_t new_key_index); +UFR_STATUS DL_API MFP_ChangeVcPollingEncKey_PK(IN uint8_t *configuration_key, IN uint8_t *new_key); +UFR_STATUS DL_API MFP_ChangeVcPollingMacKey(uint8_t configuration_key_index, IN uint8_t *new_key); +UFR_STATUS DL_API MFP_ChangeVcPollingMacKeySamKey(uint8_t configuration_key_index, uint8_t new_key_index); +UFR_STATUS DL_API MFP_ChangeVcPollingMacKey_PK(IN uint8_t *configuration_key, IN uint8_t *new_key); + +//ULTRALIGHT C +UFR_STATUS DL_API ULC_ExternalAuth_PK(IN uint8_t *key); +UFR_STATUS DL_API ULC_write_3des_key_no_auth(IN uint8_t *new_3des_key); +UFR_STATUS DL_API ULC_write_3des_key_factory_key(IN uint8_t *new_3des_key); +UFR_STATUS DL_API ULC_write_3des_key(IN uint8_t *new_3des_key, IN uint8_t *old_3des_key); + +/** + * BalanceGet() gets balance of the AIS SDK formated cards + * + * @param auth_mode only MIFARE_AUTHENT1A supported for now + * @param auth_value pointer to the Crypto1 6-bytes key array, for now + * @param credit how many credits is on the card + * + * @return execution status + */ +UFR_STATUS DL_API BalanceGet(uint32_t auth_mode, IN void *auth_value, VAR int32_t *credit); + +/** + * BalanceSet() sets balance of the AIS SDK formated cards + * + * @param auth_mode only MIFARE_AUTHENT1A supported for now + * @param auth_value pointer to the Crypto1 6-bytes key array, for now + * @param credit new credit balance + * + * @return execution status + */ +UFR_STATUS DL_API BalanceSet(uint32_t auth_mode, IN void *auth_value, int32_t credit); + +//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ +// XXX: Support for multiple readers with same DLL +//############################################################################# +//############################################################################# +//############################################################################# +//############################################################################# +//############################################################################# +//############################################################################# +//############################################################################# +//############################################################################# +//############################################################################# +//############################################################################# +//################# M U L T I R E A D E R S U P P O R T ################# +//################# M U L T I R E A D E R S U P P O R T ################# +//################# M U L T I R E A D E R S U P P O R T ################# +//################# M U L T I R E A D E R S U P P O R T ################# +//################# M U L T I R E A D E R S U P P O R T ################# +//################# M U L T I R E A D E R S U P P O R T ################# +//################# M U L T I R E A D E R S U P P O R T ################# +//################# M U L T I R E A D E R S U P P O R T ################# +//################# M U L T I R E A D E R S U P P O R T ################# +//################# M U L T I R E A D E R S U P P O R T ################# +//############################################################################# +//############################################################################# +//############################################################################# +//############################################################################# +//############################################################################# +//############################################################################# +//############################################################################# +//############################################################################# +//############################################################################# +//############################################################################# + +//-------------------------------------------------------------------------------------------------- +/** + * This is the main function of the multi-reader support. + * ReaderList_UpdateAndGetCount() scan all communication ports for compatible devices. + * Function probes opened readers if still connected, if not close and mark them handles for deletion. + * If some device is disconnected from system this function should remove its handle. + * + * @param NumberOfDevices + * @return status of execution + */ +UFR_STATUS DL_API ReaderList_UpdateAndGetCount(VAR int32_t * NumberOfDevices); + +/** + * Function for getting all relevant information about connected readers. + * + * Eg. If you have tree connected readers, detected by ReaderList_UpdateAndGetCount(), + * you should call this function tree times. + * + * @param DeviceHandle + * @param DeviceSerialNumber + * @param DeviceType + * @param DeviceFWver + * @param DeviceCommID + * @param DeviceCommSpeed + * @param DeviceCommFTDISerial + * @param DeviceCommFTDIDescription + * @param DeviceIsOpened + * @param DeviceStatus + * @return + */ +UFR_STATUS DL_API ReaderList_GetInformation( // + VAR UFR_HANDLE *DeviceHandle, //// assigned Handle + OUT c_string *DeviceSerialNumber, //// device serial number + VAR int *DeviceType, //// device type - device identification in AIS database + VAR int *DeviceFWver, //// version of firmware + VAR int *DeviceCommID, //// device identification number (master) + VAR int *DeviceCommSpeed, //// communication speed + OUT c_string *DeviceCommFTDISerial, //// FTDI COM port identification + OUT c_string *DeviceCommFTDIDescription, //// FTDI COM port description + VAR int *DeviceIsOpened, //// is Device opened + VAR int *DeviceStatus //// actual device status +); + +/** + * If the handle exists in the list of opened devices, + * function would try to close communication port and destroy the handle. + * ( ReaderList_UpdateAndGetCount() will do that automatically in next execution) + * + * Good when you identify that the reader is no longer connected, and want to release the handle. + * + * @param DeviceHandle the handle that will be destroyed + * @return + */ +UFR_STATUS DL_API ReaderList_Destroy(UFR_HANDLE DeviceHandle); + +// XXX: Obsolete functions - remain for backward compatibility +UFR_STATUS DL_API ReaderList_GetSerialByIndex(int32_t DeviceIndex, VAR uint32_t *lpulSerialNumber); +UFR_STATUS DL_API ReaderList_GetSerialDescriptionByIndex(int32_t DeviceIndex, OUT uint8_t pSerialDescription[8]); +UFR_STATUS DL_API ReaderList_GetTypeByIndex(int32_t DeviceIndex, VAR uint32_t *lpulReaderType); +UFR_STATUS DL_API ReaderList_GetFTDISerialByIndex(int32_t DeviceIndex, OUT char ** Device_Serial); +UFR_STATUS DL_API ReaderList_GetFTDIDescriptionByIndex(int32_t DeviceIndex, OUT char ** Device_Description); +UFR_STATUS DL_API ReaderList_OpenByIndex(const int32_t DeviceIndex, VAR UFR_HANDLE *hndUFR); +UFR_STATUS DL_API ReaderList_OpenBySerial(const char Device_SN[16], VAR UFR_HANDLE *hndUFR); // ! not implemented + +//-------------------------------------------------------------------------------------------------- + +// open first/next Reader and return handle - better to use ReaderList_OpenByIndex() +UFR_STATUS DL_API ReaderOpenM(VAR UFR_HANDLE *hndUFR); + +UFR_STATUS DL_API ReaderResetM(UFR_HANDLE hndUFR); + +UFR_STATUS DL_API ReaderCloseM(UFR_HANDLE hndUFR); + +UFR_STATUS DL_API ReaderSoftRestartM(UFR_HANDLE hndUFR); + +UFR_STATUS DL_API GetReaderTypeM(UFR_HANDLE hndUFR, + IN uint32_t *lpulReaderType); + +UFR_STATUS DL_API GetReaderSerialNumberM(UFR_HANDLE hndUFR, + IN uint32_t *lpulSerialNumber); + +UFR_STATUS DL_API ReaderStillConnectedM(UFR_HANDLE hndUFR, + VAR uint32_t *connected); + +UFR_STATUS DL_API ReaderKeyWriteM(UFR_HANDLE hndUFR, + IN const uint8_t *aucKey, + uint8_t ucKeyIndex); + +UFR_STATUS DL_API ReaderKeysLockM(UFR_HANDLE hndUFR, + IN const uint8_t *password); + +UFR_STATUS DL_API ReaderKeysUnlockM(UFR_HANDLE hndUFR, + IN const uint8_t *password); + +UFR_STATUS DL_API ReaderUISignalM(UFR_HANDLE hndUFR, + uint8_t light_signal_mode, + uint8_t beep_signal_mode); + +UFR_STATUS DL_API ReadUserDataM(UFR_HANDLE hndUFR, + OUT uint8_t *aucData); + +UFR_STATUS DL_API WriteUserDataM(UFR_HANDLE hndUFR, + IN const uint8_t *aucData); + +UFR_STATUS DL_API GetCardIdM(UFR_HANDLE hndUFR, + VAR uint8_t *lpucCardType, + OUT uint32_t *lpulCardSerial); + +UFR_STATUS DL_API BlockReadM(UFR_HANDLE hndUFR, + OUT uint8_t *data, + uint8_t block_address, + uint8_t auth_mode, + uint8_t key_index); +UFR_STATUS DL_API BlockReadSamKeyM(UFR_HANDLE hndUFR, + OUT uint8_t *data, + uint8_t block_address, + uint8_t auth_mode, uint8_t key_index); + +UFR_STATUS DL_API BlockWriteM(UFR_HANDLE hndUFR, + IN const uint8_t *data, + uint8_t block_address, + uint8_t auth_mode, + uint8_t key_index); +UFR_STATUS DL_API BlockWriteSamKeyM(UFR_HANDLE hndUFR, + IN const uint8_t *data, + uint8_t block_address, + uint8_t auth_mode, + uint8_t key_index); + +UFR_STATUS DL_API BlockInSectorReadM(UFR_HANDLE hndUFR, + OUT uint8_t *data, + uint8_t sector_address, + uint8_t block_in_sector_address, + uint8_t auth_mode, + uint8_t key_index); +UFR_STATUS DL_API BlockInSectorReadSamKeyM(UFR_HANDLE hndUFR, + OUT uint8_t *data, + uint8_t sector_address, + uint8_t block_in_sector_address, + uint8_t auth_mode, + uint8_t key_index); + + +UFR_STATUS DL_API BlockInSectorWriteM(UFR_HANDLE hndUFR, + IN const uint8_t *data, + uint8_t sector_address, + uint8_t block_in_sector_address, + uint8_t auth_mode, + uint8_t key_index); +UFR_STATUS DL_API BlockInSectorWriteSamKeyM(UFR_HANDLE hndUFR, + IN const uint8_t *data, + uint8_t sector_address, + uint8_t block_in_sector_address, + uint8_t auth_mode, + uint8_t key_index); + +UFR_STATUS DL_API LinearReadM(UFR_HANDLE hndUFR, + OUT uint8_t *aucData, + uint16_t usLinearAddress, + uint16_t usDataLength, + VAR uint16_t *lpusBytesReturned, + uint8_t ucKeyMode, + uint8_t ucReaderKeyIndex); +UFR_STATUS DL_API LinearReadSamKeyM(UFR_HANDLE hndUFR, + OUT uint8_t *aucData, + uint16_t usLinearAddress, + uint16_t usDataLength, + VAR uint16_t *lpusBytesReturned, + uint8_t ucKeyMode, + uint8_t ucReaderKeyIndex); + +UFR_STATUS DL_API LinRowReadM(UFR_HANDLE hndUFR, + OUT uint8_t *aucData, + uint16_t usLinearAddress, + uint16_t usDataLength, + VAR uint16_t *lpusBytesReturned, + uint8_t ucKeyMode, + uint8_t ucReaderKeyIndex); + +UFR_STATUS DL_API LinearWriteM(UFR_HANDLE hndUFR, + IN const uint8_t *aucData, + uint16_t usLinearAddress, + uint16_t usDataLength, + VAR uint16_t *lpusBytesWritten, + uint8_t ucKeyMode, + uint8_t ucReaderKeyIndex); +UFR_STATUS DL_API LinearWriteSamKeyM(UFR_HANDLE hndUFR, + IN const uint8_t *aucData, + uint16_t usLinearAddress, + uint16_t usDataLength, + VAR uint16_t *lpusBytesWritten, + uint8_t ucKeyMode, + uint8_t ucReaderKeyIndex); + +UFR_STATUS DL_API LinearFormatCardM(UFR_HANDLE hndUFR, + IN const uint8_t *new_key_A, + uint8_t blocks_access_bits, + uint8_t sector_trailers_access_bits, + uint8_t sector_trailers_byte9, + IN const uint8_t *new_key_B, + VAR uint8_t *lpucSectorsFormatted, + uint8_t auth_mode, + uint8_t key_index); + + +UFR_STATUS DL_API SectorTrailerWriteM(UFR_HANDLE hndUFR, + uint8_t addressing_mode, + uint8_t address, + IN const uint8_t *new_key_A, + uint8_t block0_access_bits, + uint8_t block1_access_bits, + uint8_t block2_access_bits, + uint8_t sector_trailer_access_bits, + uint8_t sector_trailer_byte9, + IN const uint8_t *new_key_B, + uint8_t auth_mode, + uint8_t key_index); + +UFR_STATUS DL_API SectorTrailerWriteUnsafeM(UFR_HANDLE hndUFR, + uint8_t addressing_mode, + uint8_t address, + IN const uint8_t *sector_trailer, + uint8_t auth_mode, + uint8_t key_index); + +UFR_STATUS DL_API ValueBlockReadM(UFR_HANDLE hndUFR, + VAR int32_t *value, + VAR uint8_t *value_addr, + uint8_t block_address, + uint8_t auth_mode, + uint8_t key_index); +UFR_STATUS DL_API ValueBlockReadSamKeyM(UFR_HANDLE hndUFR, + VAR int32_t *value, + VAR uint8_t *value_addr, + uint8_t block_address, + uint8_t auth_mode, + uint8_t key_index); + +UFR_STATUS DL_API ValueBlockInSectorReadM(UFR_HANDLE hndUFR, + VAR int32_t *value, + VAR uint8_t *value_addr, + uint8_t sector_address, + uint8_t block_in_sector_address, + uint8_t auth_mode, + uint8_t key_index); +UFR_STATUS DL_API ValueBlockInSectorReadSamKeyM(UFR_HANDLE hndUFR, + VAR int32_t *value, + VAR uint8_t *value_addr, + uint8_t sector_address, + uint8_t block_in_sector_address, + uint8_t auth_mode, + uint8_t key_index); + +UFR_STATUS DL_API ValueBlockWriteM(UFR_HANDLE hndUFR, + int32_t value, + uint8_t value_addr, + uint8_t block_address, + uint8_t auth_mode, + uint8_t key_index); +UFR_STATUS DL_API ValueBlockWriteSamKeyM(UFR_HANDLE hndUFR, int32_t value, + uint8_t value_addr, + uint8_t block_address, + uint8_t auth_mode, + uint8_t key_index); + +UFR_STATUS DL_API ValueBlockInSectorWriteM(UFR_HANDLE hndUFR, + int32_t value, + uint8_t value_addr, + uint8_t sector_address, + uint8_t block_in_sector_address, + uint8_t auth_mode, + uint8_t key_index); +UFR_STATUS DL_API ValueBlockInSectorWriteSamKeyM(UFR_HANDLE hndUFR, int32_t value, + uint8_t value_addr, + uint8_t sector_address, + uint8_t block_in_sector_address, + uint8_t auth_mode, + uint8_t key_index); + +UFR_STATUS DL_API ValueBlockIncrementM(UFR_HANDLE hndUFR, + int32_t increment_value, + uint8_t block_address, + uint8_t auth_mode, + uint8_t key_index); +UFR_STATUS DL_API ValueBlockIncrementSamKeyM(UFR_HANDLE hndUFR, int32_t increment_value, + uint8_t block_address, + uint8_t auth_mode, + uint8_t key_index); + + +UFR_STATUS DL_API ValueBlockInSectorIncrementM(UFR_HANDLE hndUFR, + int32_t increment_value, + uint8_t sector_address, + uint8_t block_in_sector_address, + uint8_t auth_mode, + uint8_t key_index); +UFR_STATUS DL_API ValueBlockInSectorIncrementSamKeyM(UFR_HANDLE hndUFR, int32_t increment_value, + uint8_t sector_address, + uint8_t block_in_sector_address, + uint8_t auth_mode, + uint8_t key_index); + +UFR_STATUS DL_API ValueBlockDecrementM(UFR_HANDLE hndUFR, + int32_t decrement_value, + uint8_t block_address, + uint8_t auth_mode, + uint8_t key_index); +UFR_STATUS DL_API ValueBlockDecrementSamKeyM(UFR_HANDLE hndUFR, int32_t decrement_value, + uint8_t block_address, + uint8_t auth_mode, + uint8_t key_index); + + +UFR_STATUS DL_API ValueBlockInSectorDecrementM(UFR_HANDLE hndUFR, + int32_t decrement_value, + uint8_t sector_address, + uint8_t block_in_sector_address, + uint8_t auth_mode, + uint8_t key_index); +UFR_STATUS DL_API ValueBlockInSectorDecrementSamKeyM(UFR_HANDLE hndUFR, int32_t decrement_value, + uint8_t sector_address, + uint8_t block_in_sector_address, + uint8_t auth_mode, + uint8_t key_index); + +UFR_STATUS DL_API BlockRead_AKM1M(UFR_HANDLE hndUFR, + OUT uint8_t *data, + uint8_t block_address, + uint8_t auth_mode); + +UFR_STATUS DL_API BlockWrite_AKM1M(UFR_HANDLE hndUFR, + IN const uint8_t *data, + uint8_t block_address, + uint8_t auth_mode); +UFR_STATUS DL_API BlockInSectorRead_AKM1M(UFR_HANDLE hndUFR, + OUT uint8_t *data, + uint8_t sector_address, + uint8_t block_in_sector_address, + uint8_t auth_mode); +UFR_STATUS DL_API BlockInSectorWrite_AKM1M(UFR_HANDLE hndUFR, + IN const uint8_t *data, + uint8_t sector_address, + uint8_t block_in_sector_address, + uint8_t auth_mode); +UFR_STATUS DL_API LinearRead_AKM1M(UFR_HANDLE hndUFR, + OUT uint8_t *data, + uint16_t linear_address, + uint16_t length, + VAR uint16_t *bytes_returned, + uint8_t auth_mode); +UFR_STATUS DL_API LinRowRead_AKM1M(UFR_HANDLE hndUFR, + OUT uint8_t *data, + uint16_t linear_address, + uint16_t length, + VAR uint16_t *bytes_returned, + uint8_t auth_mode); +UFR_STATUS DL_API LinearWrite_AKM1M(UFR_HANDLE hndUFR, + IN const uint8_t *data, + uint16_t linear_address, + uint16_t length, + VAR uint16_t *bytes_written, + uint8_t auth_mode); +UFR_STATUS DL_API LinearFormatCard_AKM1M(UFR_HANDLE hndUFR, + IN const uint8_t *new_key_A, + uint8_t blocks_access_bits, + uint8_t sector_trailers_access_bits, + uint8_t sector_trailers_byte9, + IN const uint8_t *new_key_B, + VAR uint8_t *lpucSectorsFormatted, + uint8_t auth_mode); + +UFR_STATUS DL_API SectorTrailerWrite_AKM1M(UFR_HANDLE hndUFR, + uint8_t addressing_mode, + uint8_t address, + IN const uint8_t *new_key_A, + uint8_t block0_access_bits, + uint8_t block1_access_bits, + uint8_t block2_access_bits, + uint8_t sector_trailer_access_bits, + uint8_t sector_trailer_byte9, + IN const uint8_t *new_key_B, + uint8_t auth_mode); + +UFR_STATUS DL_API SectorTrailerWriteUnsafe_AKM1M(UFR_HANDLE hndUFR, + uint8_t addressing_mode, + uint8_t address, + IN const uint8_t *sector_trailer, + uint8_t auth_mode); + +UFR_STATUS DL_API ValueBlockRead_AKM1M(UFR_HANDLE hndUFR, + VAR int32_t *value, + VAR uint8_t *value_addr, + uint8_t block_address, + uint8_t auth_mode); + +UFR_STATUS DL_API ValueBlockInSectorRead_AKM1M(UFR_HANDLE hndUFR, + VAR int32_t *value, + VAR uint8_t *value_addr, + uint8_t sector_address, + uint8_t block_in_sector_address, + uint8_t auth_mode); + +UFR_STATUS DL_API ValueBlockWrite_AKM1M(UFR_HANDLE hndUFR, + int32_t value, + uint8_t value_addr, + uint8_t block_address, + uint8_t auth_mode); + +UFR_STATUS DL_API ValueBlockInSectorWrite_AKM1M(UFR_HANDLE hndUFR, + int32_t value, + uint8_t value_addr, + uint8_t sector_address, + uint8_t block_in_sector_address, + uint8_t auth_mode); + +UFR_STATUS DL_API ValueBlockIncrement_AKM1M(UFR_HANDLE hndUFR, + int32_t increment_value, + uint8_t block_address, + uint8_t auth_mode); + +UFR_STATUS DL_API ValueBlockInSectorIncrement_AKM1M(UFR_HANDLE hndUFR, + int32_t increment_value, + uint8_t sector_address, + uint8_t block_in_sector_address, + uint8_t auth_mode); + +UFR_STATUS DL_API ValueBlockDecrement_AKM1M(UFR_HANDLE hndUFR, + int32_t decrement_value, + uint8_t block_address, + uint8_t auth_mode); + +UFR_STATUS DL_API ValueBlockInSectorDecrement_AKM1M(UFR_HANDLE hndUFR, + int32_t decrement_value, + uint8_t sector_address, + uint8_t block_in_sector_address, + uint8_t auth_mode); + +UFR_STATUS DL_API BlockRead_AKM2M(UFR_HANDLE hndUFR, + OUT uint8_t *data, + uint8_t block_address, + uint8_t auth_mode); + +UFR_STATUS DL_API BlockWrite_AKM2M(UFR_HANDLE hndUFR, + IN const uint8_t *data, + uint8_t block_address, + uint8_t auth_mode); + +UFR_STATUS DL_API BlockInSectorRead_AKM2M(UFR_HANDLE hndUFR, + OUT uint8_t *data, + uint8_t sector_address, + uint8_t block_in_sector_address, + uint8_t auth_mode); + +UFR_STATUS DL_API BlockInSectorWrite_AKM2M(UFR_HANDLE hndUFR, + IN const uint8_t *data, + uint8_t sector_address, + uint8_t block_in_sector_address, + uint8_t auth_mode); + +UFR_STATUS DL_API LinearRead_AKM2M(UFR_HANDLE hndUFR, + OUT uint8_t *data, + uint16_t linear_address, + uint16_t length, + VAR uint16_t *bytes_returned, + uint8_t auth_mode); + +UFR_STATUS DL_API LinRowRead_AKM2M(UFR_HANDLE hndUFR, + OUT uint8_t *data, + uint16_t linear_address, + uint16_t length, + VAR uint16_t *bytes_returned, + uint8_t auth_mode); + +UFR_STATUS DL_API LinearWrite_AKM2M(UFR_HANDLE hndUFR, + IN const uint8_t *data, + uint16_t linear_address, + uint16_t length, + VAR uint16_t *bytes_written, + uint8_t auth_mode); + +UFR_STATUS DL_API LinearFormatCard_AKM2M(UFR_HANDLE hndUFR, + IN const uint8_t *new_key_A, + uint8_t blocks_access_bits, + uint8_t sector_trailers_access_bits, + uint8_t sector_trailers_byte9, + IN const uint8_t *new_key_B, + VAR uint8_t *lpucSectorsFormatted, + uint8_t auth_mode); + +UFR_STATUS DL_API SectorTrailerWrite_AKM2M(UFR_HANDLE hndUFR, + uint8_t addressing_mode, + uint8_t address, + IN const uint8_t *new_key_A, + uint8_t block0_access_bits, + uint8_t block1_access_bits, + uint8_t block2_access_bits, + uint8_t sector_trailer_access_bits, + uint8_t sector_trailer_byte9, + IN const uint8_t *new_key_B, + uint8_t auth_mode); + +UFR_STATUS DL_API SectorTrailerWriteUnsafe_AKM2M(UFR_HANDLE hndUFR, + uint8_t addressing_mode, + uint8_t address, + IN const uint8_t *sector_trailer, + uint8_t auth_mode); + +UFR_STATUS DL_API ValueBlockRead_AKM2M(UFR_HANDLE hndUFR, + VAR int32_t *value, + VAR uint8_t *value_addr, + uint8_t block_address, + uint8_t auth_mode); + +UFR_STATUS DL_API ValueBlockInSectorRead_AKM2M(UFR_HANDLE hndUFR, + VAR int32_t *value, + VAR uint8_t *value_addr, + uint8_t sector_address, + uint8_t block_in_sector_address, + uint8_t auth_mode); + +UFR_STATUS DL_API ValueBlockWrite_AKM2M(UFR_HANDLE hndUFR, + int32_t value, + uint8_t value_addr, + uint8_t block_address, + uint8_t auth_mode); + +UFR_STATUS DL_API ValueBlockInSectorWrite_AKM2M(UFR_HANDLE hndUFR, + int32_t value, + uint8_t value_addr, + uint8_t sector_address, + uint8_t block_in_sector_address, + uint8_t auth_mode); + +UFR_STATUS DL_API ValueBlockIncrement_AKM2M(UFR_HANDLE hndUFR, + int32_t increment_value, + uint8_t block_address, + uint8_t auth_mode); + +UFR_STATUS DL_API ValueBlockInSectorIncrement_AKM2M(UFR_HANDLE hndUFR, + int32_t increment_value, + uint8_t sector_address, + uint8_t block_in_sector_address, + uint8_t auth_mode); + +UFR_STATUS DL_API ValueBlockDecrement_AKM2M(UFR_HANDLE hndUFR, + int32_t decrement_value, + uint8_t block_address, + uint8_t auth_mode); + +UFR_STATUS DL_API ValueBlockInSectorDecrement_AKM2M(UFR_HANDLE hndUFR, + int32_t decrement_value, + uint8_t sector_address, + uint8_t block_in_sector_address, + uint8_t auth_mode); + +UFR_STATUS DL_API BlockRead_PKM(UFR_HANDLE hndUFR, + OUT uint8_t *data, + uint8_t block_address, + uint8_t auth_mode, + IN const uint8_t *key); + +UFR_STATUS DL_API BlockWrite_PKM(UFR_HANDLE hndUFR, + IN const uint8_t *data, + uint8_t block_address, + uint8_t auth_mode, + IN const uint8_t *key); + +UFR_STATUS DL_API BlockInSectorRead_PKM(UFR_HANDLE hndUFR, + OUT uint8_t *data, + uint8_t sector_address, + uint8_t block_in_sector_address, + uint8_t auth_mode, + IN const uint8_t *key); + +UFR_STATUS DL_API BlockInSectorWrite_PKM(UFR_HANDLE hndUFR, + IN const uint8_t *data, + uint8_t sector_address, + uint8_t block_in_sector_address, + uint8_t auth_mode, + IN const uint8_t *key); + +UFR_STATUS DL_API LinearRead_PKM(UFR_HANDLE hndUFR, + OUT uint8_t *data, + uint16_t linear_address, + uint16_t length, + VAR uint16_t *bytes_returned, + uint8_t auth_mode, + IN const uint8_t *key); + +UFR_STATUS DL_API LinRowRead_PKM(UFR_HANDLE hndUFR, + OUT uint8_t *data, + uint16_t linear_address, + uint16_t length, + VAR uint16_t *bytes_returned, + uint8_t auth_mode, + IN const uint8_t *key); + +UFR_STATUS DL_API LinearWrite_PKM(UFR_HANDLE hndUFR, + IN const uint8_t *data, + uint16_t linear_address, + uint16_t length, + VAR uint16_t *bytes_written, + uint8_t auth_mode, + IN const uint8_t *key); + +UFR_STATUS DL_API LinearFormatCard_PKM(UFR_HANDLE hndUFR, + IN const uint8_t *new_key_A, + uint8_t blocks_access_bits, + uint8_t sector_trailers_access_bits, + uint8_t sector_trailers_byte9, + IN const uint8_t *new_key_B, + VAR uint8_t *lpucSectorsFormatted, + uint8_t auth_mode, + IN const uint8_t *key); + +UFR_STATUS DL_API SectorTrailerWrite_PKM(UFR_HANDLE hndUFR, + uint8_t addressing_mode, + uint8_t address, + IN const uint8_t *new_key_A, + uint8_t block0_access_bits, + uint8_t block1_access_bits, + uint8_t block2_access_bits, + uint8_t sector_trailer_access_bits, + uint8_t sector_trailer_byte9, + IN const uint8_t *new_key_B, + uint8_t auth_mode, + IN const uint8_t *key); + +UFR_STATUS DL_API SectorTrailerWriteUnsafe_PKM(UFR_HANDLE hndUFR, + uint8_t addressing_mode, + uint8_t address, + IN const uint8_t *sector_trailer, + uint8_t auth_mode, + IN const uint8_t *key); + +UFR_STATUS DL_API ValueBlockRead_PKM(UFR_HANDLE hndUFR, + VAR int32_t *value, + VAR uint8_t *value_addr, + uint8_t block_address, + uint8_t auth_mode, + IN const uint8_t *key); + +UFR_STATUS DL_API ValueBlockInSectorRead_PKM(UFR_HANDLE hndUFR, + VAR int32_t *value, + VAR uint8_t *value_addr, + uint8_t sector_address, + uint8_t block_in_sector_address, + uint8_t auth_mode, + IN const uint8_t *key); + +UFR_STATUS DL_API ValueBlockWrite_PKM(UFR_HANDLE hndUFR, + int32_t value, + uint8_t value_addr, + uint8_t block_address, + uint8_t auth_mode, + IN const uint8_t *key); + +UFR_STATUS DL_API ValueBlockInSectorWrite_PKM(UFR_HANDLE hndUFR, + int32_t value, + uint8_t value_addr, + uint8_t sector_address, + uint8_t block_in_sector_address, + uint8_t auth_mode, + IN const uint8_t *key); + +UFR_STATUS DL_API ValueBlockIncrement_PKM(UFR_HANDLE hndUFR, + int32_t increment_value, + uint8_t block_address, + uint8_t auth_mode, + IN const uint8_t *key); + +UFR_STATUS DL_API ValueBlockInSectorIncrement_PKM(UFR_HANDLE hndUFR, + int32_t increment_value, + uint8_t sector_address, + uint8_t block_in_sector_address, + uint8_t auth_mode, + IN const uint8_t *key); + +UFR_STATUS DL_API ValueBlockDecrement_PKM(UFR_HANDLE hndUFR, + int32_t decrement_value, + uint8_t block_address, + uint8_t auth_mode, + IN const uint8_t *key); + +UFR_STATUS DL_API ValueBlockInSectorDecrement_PKM(UFR_HANDLE hndUFR, + int32_t decrement_value, + uint8_t sector_address, + uint8_t block_in_sector_address, + uint8_t auth_mode, + IN const uint8_t *key); + +UFR_STATUS DL_API GetReaderHardwareVersionM(UFR_HANDLE hndUFR, + VAR uint8_t *version_major, + VAR uint8_t *version_minor); + +UFR_STATUS DL_API GetReaderFirmwareVersionM(UFR_HANDLE hndUFR, + VAR uint8_t *version_major, + VAR uint8_t *version_minor); + +// New commands (for RTC & I2C EEPROM): +UFR_STATUS DL_API GetReaderTimeM(UFR_HANDLE hndUFR, + VAR uint8_t *time); + +UFR_STATUS DL_API SetReaderTimeM(UFR_HANDLE hndUFR, + IN uint8_t *password, + VAR uint8_t *time); + +UFR_STATUS DL_API ChangeReaderPasswordM(UFR_HANDLE hndUFR, + IN uint8_t *old_password, + IN uint8_t *new_password); + +UFR_STATUS DL_API ReaderEepromWriteM(UFR_HANDLE hndUFR, + IN uint8_t *data, + uint32_t address, + uint32_t size, + IN uint8_t *password); + +UFR_STATUS DL_API ReaderEepromReadM(UFR_HANDLE hndUFR, + OUT uint8_t *data, + uint32_t address, + uint32_t size); + +UFR_STATUS DL_API GetReaderSerialDescriptionM(UFR_HANDLE hndUFR, + OUT uint8_t pSerialDescription[8]); + +// New since version 2.0: +UFR_STATUS DL_API GetBuildNumberM(UFR_HANDLE hndUFR, + VAR uint8_t *build); + +UFR_STATUS DL_API GetCardIdExM(UFR_HANDLE hndUFR, + VAR uint8_t *lpucSak, + OUT uint8_t *aucUid, + VAR uint8_t *lpucUidSize); + +UFR_STATUS DL_API GetLastCardIdExM(UFR_HANDLE hndUFR, + VAR uint8_t *lpucSak, + OUT uint8_t *aucUid, + VAR uint8_t *lpucUidSize); + +//------------------------------------------------------------------------------ +//Multi card mode: +//------------------------------------------------------------------------------ +UFR_STATUS DL_API EnableAntiCollisionM(UFR_HANDLE hndUFR); + +UFR_STATUS DL_API DisableAntiCollisionM(UFR_HANDLE hndUFR); + +UFR_STATUS DL_API EnumCardsM(UFR_HANDLE hndUFR, + VAR uint8_t *lpucCardsNumber, + OUT uint8_t *lpucUidListSize); // Card pointer is on the first card in list + +UFR_STATUS DL_API ListCardsM(UFR_HANDLE hndUFR, + OUT uint8_t *aucUidList, + uint8_t ucUidListSize); // Before calling this function you must call EnumCards() first. + +UFR_STATUS DL_API SelectCardM(UFR_HANDLE hndUFR, + IN const uint8_t *aucUid, + uint8_t ucUidSize, + OUT uint8_t *lpucSelctedCardType); + +UFR_STATUS DL_API DeslectCardM(UFR_HANDLE hndUFR); + +UFR_STATUS DL_API GetAntiCollisionStatusM(UFR_HANDLE hndUFR, + VAR int8_t *lpcIsAntiCollEnabled, + VAR int8_t *lpcIsAnyCardSelected); +//------------------------------------------------------------------------------ + +UFR_STATUS DL_API GetDlogicCardTypeM(UFR_HANDLE hndUFR, + VAR uint8_t *lpucCardType); + +UFR_STATUS DL_API GetNfcT2TVersionM(UFR_HANDLE hndUFR, + OUT uint8_t lpucVersionResponse[8]); + +UFR_STATUS DL_API GetCardSizeM(UFR_HANDLE hndUFR, + VAR uint32_t *lpulLinearSize, + VAR uint32_t *lpulRawSize); + +// uFCoder PRO MODE +UFR_STATUS DL_API GetReaderProModeM(UFR_HANDLE hndUFR, + VAR uint32_t *pReaderProMode, + OUT uint32_t *pReaderProConfig); + +UFR_STATUS DL_API SetReaderProModeM(UFR_HANDLE hndUFR, + const uint32_t ReaderProMode); + +// QR barcode crypt algorithm +// initialization. with TB serial like 'TB123456' +UFR_STATUS DL_API CardEncryption_InitializeM(UFR_HANDLE hndUFR, + IN const uint8_t *TBSerialString, + uint16_t job_number); + +// You must define 25 bytes array in memory for out_card_data[] +UFR_STATUS DL_API CardEncryption_GetNextEncryptedCardM(UFR_HANDLE hndUFR, + const uint32_t from_timestamp, + const uint32_t to_timestamp, + OUT uint8_t out_card_data[]); + +UFR_STATUS DL_API CardEncryption_GetNextM(UFR_HANDLE hndUFR, + const uint32_t code_type, + const uint32_t from_timestamp, + const uint32_t to_timestamp, + const uint32_t additional_data_size, + IN const uint8_t additional_data[], + VAR uint32_t *out_card_data_size, + OUT uint8_t out_card_data[]); + +UFR_STATUS DL_API CardEncryption_GetActualCardSNM(UFR_HANDLE hndUFR, + OUT uint32_t *ActualCard_SN, + VAR uint32_t *ActualCard_SN_LOG); + +UFR_STATUS DL_API CardEncryption_GetJobSNM(UFR_HANDLE hndUFR, + VAR uint32_t *JobSN); + +UFR_STATUS DL_API CardEncryption_GetSalterSNM(UFR_HANDLE hndUFR, + OUT uint8_t SalterSN[8], + VAR uint8_t * magicByte); + +UFR_STATUS DL_API read_ndef_recordM(UFR_HANDLE hndUFR, + uint8_t message_nr, + uint8_t record_nr, + VAR uint8_t *tnf, + OUT uint8_t *type_record, + VAR uint8_t *type_length, + OUT uint8_t *id, + VAR uint8_t *id_length, + OUT uint8_t *payload, + VAR uint32_t *payload_length); + +UFR_STATUS DL_API write_ndef_recordM(UFR_HANDLE hndUFR, + uint8_t message_nr, + uint8_t *tnf, + IN uint8_t *type_record, + uint8_t *type_length, + IN uint8_t *id, + uint8_t *id_length, + IN uint8_t *payload, + uint32_t *payload_length, + VAR uint8_t *card_formated); + +UFR_STATUS DL_API write_ndef_record_mirroringM(UFR_HANDLE hndUFR, + uint8_t message_nr, + uint8_t *tnf, + IN uint8_t *type_record, + uint8_t *type_length, + IN uint8_t *id, + uint8_t *id_length, + IN uint8_t *payload, + uint32_t *payload_length, + VAR uint8_t *card_formated, + int use_uid_ascii_mirror, + int use_counter_ascii_mirror, + uint32_t payload_mirroring_pos); + +UFR_STATUS DL_API get_ndef_record_countM(UFR_HANDLE hndUFR, + VAR uint8_t *ndef_message_cnt, + VAR uint8_t *ndef_record_cnt, + OUT uint8_t *ndef_record_array, + VAR uint8_t *empty_ndef_message_cnt); + +UFR_STATUS DL_API erase_last_ndef_recordM(UFR_HANDLE hndUFR, + uint8_t message_nr); + +UFR_STATUS DL_API erase_all_ndef_recordsM(UFR_HANDLE hndUFR, + uint8_t message_nr); + +UFR_STATUS DL_API ndef_card_initializationM(UFR_HANDLE hndUFR); + +//--------------------------------------------------------------------- +// Card emulation: +//--------------------------------------------------------------------- +UFR_STATUS DL_API WriteEmulationNdefM(UFR_HANDLE hndUFR, + uint8_t tnf, + IN uint8_t* type_record, + uint8_t type_length, + IN uint8_t* id, + uint8_t id_length, + IN uint8_t* payload, + uint8_t payload_length); + +UFR_STATUS DL_API TagEmulationStartM(UFR_HANDLE hndUFR); + +UFR_STATUS DL_API TagEmulationStopM(UFR_HANDLE hndUFR); + +UFR_STATUS DL_API CombinedModeEmulationStartM(UFR_HANDLE hndUFR); + +UFR_STATUS DL_API AdHocEmulationStartM(UFR_HANDLE hndUFR); + +UFR_STATUS DL_API AdHocEmulationStopM(UFR_HANDLE hndUFR); + +UFR_STATUS DL_API GetAdHocEmulationParamsM(UFR_HANDLE hndUFR, + VAR uint8_t *ThresholdMinLevel, + VAR uint8_t *ThresholdCollLevel, + VAR uint8_t *RFLevelAmp, + VAR uint8_t *RxGain, + VAR uint8_t *RFLevel); + +UFR_STATUS DL_API SetAdHocEmulationParamsM(UFR_HANDLE hndUFR, + uint8_t ThresholdMinLevel, + uint8_t ThresholdCollLevel, + uint8_t RFLevelAmp, + uint8_t RxGain, + uint8_t RFLevel); + +UFR_STATUS DL_API GetExternalFieldStateM(UFR_HANDLE hndUFR, + VAR uint8_t *is_field_present); +//------------------------------------------------------------------------------ +UFR_STATUS DL_API ReadECCSignatureM(UFR_HANDLE hndUFR, + IN uint8_t lpucECCSignature[ECC_SIG_LEN], + OUT uint8_t lpucUid[MAX_UID_LEN], + VAR uint8_t *lpucUidLen, + VAR uint8_t *lpucDlogicCardType); + +//------------------------------------------------------------------------------ +UFR_STATUS DL_API ReadCounterM(UFR_HANDLE hndUFR, + uint8_t counter_address, + VAR uint32_t *value); + +UFR_STATUS DL_API IncrementCounterM(UFR_HANDLE hndUFR, + uint8_t counter_address, + uint32_t inc_value); + +UFR_STATUS DL_API ReadNFCCounterM(UFR_HANDLE hndUFR, + VAR uint32_t *value); // Same as ReadCounter(2, &value); + +UFR_STATUS DL_API ReadNFCCounterPwdAuth_RKM(UFR_HANDLE hndUFR, + VAR uint32_t *value, + uint8_t reader_key_index); + +UFR_STATUS DL_API ReadNFCCounterPwdAuth_PKM(UFR_HANDLE hndUFR, + VAR uint32_t *value, + IN const uint8_t *key); +//------------------------------------------------------------------------------ + +UFR_STATUS DL_API SetAsyncCardIdSendConfigM(UFR_HANDLE hndUFR, + uint8_t send_enable, + uint8_t prefix_enable, + uint8_t prefix, + uint8_t suffix, + uint8_t send_removed_enable, + uint32_t async_baud_rate); + +UFR_STATUS DL_API SetAsyncCardIdSendConfigExM(UFR_HANDLE hndUFR, + uint8_t send_enable, + uint8_t prefix_enable, + uint8_t prefix, + uint8_t suffix, + uint8_t send_removed_enable, + uint8_t reverse_byte_order, + uint8_t decimal_representation, + uint32_t async_baud_rate); + +UFR_STATUS DL_API GetAsyncCardIdSendConfigM(UFR_HANDLE hndUFR, + VAR uint8_t *send_enable, + VAR uint8_t *prefix_enable, + VAR uint8_t *prefix, + VAR uint8_t *suffix, + VAR uint8_t *send_removed_enable, + VAR uint32_t *async_baud_rate); + +UFR_STATUS DL_API GetAsyncCardIdSendConfigExM(UFR_HANDLE hndUFR, + VAR uint8_t *send_enable, + VAR uint8_t *prefix_enable, + VAR uint8_t *prefix, + VAR uint8_t *suffix, + VAR uint8_t *send_removed_enable, + VAR uint8_t *reverse_byte_order, + VAR uint8_t *decimal_representation, + VAR uint32_t *async_baud_rate); + +/***************************************************************************** + * AIS FUNCTIONS + ***************************************************************************** + */ + +UFR_STATUS DL_API ais_get_card_numberM(UFR_HANDLE hndUFR, + VAR uint32_t *card_number); + +UFR_STATUS DL_API ais_set_right_recordM(UFR_HANDLE hndUFR, + uint8_t record_number, + uint16_t first_reader_nr, + uint16_t last_reader_nr, + uint8_t start_hour, + uint8_t start_minute, + uint8_t end_hour, + uint8_t end_minute, + IN uint8_t *days); + +UFR_STATUS DL_API ais_get_right_recordM(UFR_HANDLE hndUFR, + uint8_t record_number, + VAR uint16_t *first_reader_nr, + VAR uint16_t *last_reader_nr, + VAR uint8_t *start_hour, + VAR uint8_t *start_minute, + VAR uint8_t *end_hour, + VAR uint8_t *end_minute, + OUT uint8_t *days); + +UFR_STATUS DL_API ais_erase_right_recordM(UFR_HANDLE hndUFR, + uint8_t record_number); + +UFR_STATUS DL_API ais_set_validate_recordM(UFR_HANDLE hndUFR, + uint8_t begin_year, + uint8_t begin_month, + uint8_t begin_day, + uint8_t begin_hour, + uint8_t begin_minute, + uint8_t end_year, + uint8_t end_month, + uint8_t end_day, + uint8_t end_hour, + uint8_t end_minute); + +UFR_STATUS DL_API ais_get_validate_recordM(UFR_HANDLE hndUFR, + VAR uint8_t *begin_year, + VAR uint8_t *begin_month, + VAR uint8_t *begin_day, + VAR uint8_t *begin_hour, + VAR uint8_t *begin_minute, + VAR uint8_t *end_year, + VAR uint8_t *end_month, + VAR uint8_t *end_day, + VAR uint8_t *end_hour, + VAR uint8_t *end_minute); + +UFR_STATUS DL_API ais_set_card_typeM(UFR_HANDLE hndUFR, + uint8_t card_type); + +UFR_STATUS DL_API ais_get_card_typeM(UFR_HANDLE hndUFR, + VAR uint8_t *card_type); + +UFR_STATUS DL_API ais_set_card_daily_durationM(UFR_HANDLE hndUFR, + uint16_t duration); + +UFR_STATUS DL_API ais_get_card_daily_durationM(UFR_HANDLE hndUFR, + VAR uint16_t *duration); + +UFR_STATUS DL_API ais_set_card_total_durationM(UFR_HANDLE hndUFR, + uint32_t duration); + +UFR_STATUS DL_API ais_get_card_total_durationM(UFR_HANDLE hndUFR, + VAR uint32_t *duration); + +// swimming pool ************************************************************** + +UFR_STATUS DL_API ais_get_credit_and_period_validityM(UFR_HANDLE hndUFR, + VAR int32_t *credit, + VAR uint32_t *begin_year, + VAR uint32_t *begin_month, + VAR uint32_t *begin_day, + VAR uint32_t *begin_hour, + VAR uint32_t *begin_minute, + VAR uint32_t *end_year, + VAR uint32_t *end_month, + VAR uint32_t *end_day, + VAR uint32_t *end_hour, + VAR uint32_t *end_minute); + +UFR_STATUS DL_API ais_set_credit_and_period_validityM(UFR_HANDLE hndUFR, + int32_t credit, + uint32_t begin_year, + uint32_t begin_month, + uint32_t begin_day, + uint32_t begin_hour, + uint32_t begin_minute, + uint32_t end_year, + uint32_t end_month, + uint32_t end_day, + uint32_t end_hour, + uint32_t end_minute); + +UFR_STATUS DL_API ais_set_right_type_recordM(UFR_HANDLE hndUFR, + uint8_t record_number, + uint8_t right_record_type, + IN uint8_t *right_data); + +UFR_STATUS DL_API ais_get_right_type_recordM(UFR_HANDLE hndUFR, + uint8_t record_number, + VAR uint8_t *right_record_type, + OUT uint8_t *right_data); + +UFR_STATUS DL_API ais_set_right_record_type_max_daily_counterM(UFR_HANDLE hndUFR, + uint8_t record_number, + uint16_t first_reader_nr, + uint16_t last_reader_nr, + uint8_t start_hour, + uint8_t start_minute, + uint8_t end_hour, + uint8_t end_minute, + IN uint8_t *days, + uint8_t max_daily_counter); + +//============================================================================= + +UFR_STATUS DL_API UfrXrcLockOnM(UFR_HANDLE hndUFR, + uint16_t pulse_duration); + +UFR_STATUS DL_API UfrXrcRelayStateM(UFR_HANDLE hndUFR, + uint8_t state); + +UFR_STATUS DL_API UfrXrcGetIoStateM(UFR_HANDLE hndUFR, + VAR uint8_t *intercom, + VAR uint8_t *door, + VAR uint8_t *relay_state); + +UFR_STATUS DL_API UfrRedLightControlM(UFR_HANDLE hndUFR, + uint8_t light_status); + +UFR_STATUS DL_API UfrRgbLightControlM(UFR_HANDLE hndUFR, + uint8_t red, + uint8_t green, + uint8_t blue, + uint8_t intensity, + uint8_t enable); + +UFR_STATUS DL_API UfrSetBadSelectCardNrMaxM(UFR_HANDLE hndUFR, + uint8_t bad_select_nr_max); + +UFR_STATUS DL_API UfrGetBadSelectCardNrMaxM(UFR_HANDLE hndUFR, + VAR uint8_t *bad_select_nr_max); + +UFR_STATUS DL_API UfrEnterSleepModeM(UFR_HANDLE hndUFR); + +UFR_STATUS DL_API UfrLeaveSleepModeM(UFR_HANDLE hndUFR); + +UFR_STATUS DL_API AutoSleepSetM(UFR_HANDLE hndUFR, + uint8_t seconds_wait); + +UFR_STATUS DL_API AutoSleepGetM(UFR_HANDLE hndUFR, + VAR uint8_t *seconds_wait); + +UFR_STATUS DL_API SetSpeedPermanentlyM(UFR_HANDLE hndUFR, + unsigned char tx_speed, + unsigned char rx_speed); + +UFR_STATUS DL_API GetSpeedParametersM(UFR_HANDLE hndUFR, + VAR unsigned char *tx_speed, + VAR unsigned char *rx_speed); + +UFR_STATUS DL_API SetDisplayDataM(UFR_HANDLE hndUFR, + IN uint8_t *display_data, + uint8_t data_length); + +UFR_STATUS DL_API SetSpeakerFrequencyM(UFR_HANDLE hndUFR, + uint16_t frequency); + +UFR_STATUS DL_API SetDisplayIntensityM(UFR_HANDLE hndUFR, + uint8_t intensity); + +UFR_STATUS DL_API GetDisplayIntensityM(UFR_HANDLE hndUFR, + VAR uint8_t *intensity); + +//############################################################################# +//############################################################################# + +UFR_STATUS DL_API SetISO14443_4_ModeM(UFR_HANDLE hndUFR); + +UFR_STATUS DL_API SetISO14443_4_DLStorageM(UFR_HANDLE hndUFR); + +UFR_STATUS DL_API uFR_i_block_transceiveM(UFR_HANDLE hndUFR, + uint8_t chaining, + uint8_t timeout, + uint8_t block_length, + IN uint8_t *snd_data_array, + VAR size_t *rcv_length, + OUT uint8_t *rcv_data_array, + VAR uint32_t *ufr_status); + +UFR_STATUS DL_API uFR_APDU_TransceiveM(UFR_HANDLE hndUFR, + uint8_t cls, + uint8_t ins, + uint8_t p1, + uint8_t p2, + IN uint8_t *data_out, + uint8_t data_out_len, + OUT uint8_t *data_in, + uint32_t max_data_in_len, + VAR uint32_t *response_len, + uint8_t send_le, + OUT uint8_t *apdu_status); + +UFR_STATUS DL_API APDUHexStrTransceiveM(UFR_HANDLE hndUFR, + IN const char *c_apdu, + OUT char **r_apdu); + +UFR_STATUS DL_API APDUPlainTransceiveM(UFR_HANDLE hndUFR, + IN const uint8_t *c_apdu, + uint32_t c_apdu_len, + OUT uint8_t *r_apdu, + VAR uint32_t *r_apdu_len); + +UFR_STATUS DL_API APDUTransceiveM(UFR_HANDLE hndUFR, + uint8_t cls, + uint8_t ins, + uint8_t p1, + uint8_t p2, + IN const uint8_t *data_out, + uint32_t Nc, + OUT uint8_t *data_in, + VAR uint32_t *Ne, + uint8_t send_le, + OUT uint8_t *apdu_status); + +UFR_STATUS DL_API i_block_trans_rcv_chainM(UFR_HANDLE hndUFR, + uint8_t chaining, + uint8_t timeout, + uint8_t block_length, + IN uint8_t *snd_data_array, + VAR uint8_t *rcv_length, + OUT uint8_t *rcv_data_array, + VAR uint8_t *rcv_chained, + VAR uint32_t *ufr_status); + +UFR_STATUS DL_API r_block_transceiveM(UFR_HANDLE hndUFR, + uint8_t ack, + uint8_t timeout, + VAR uint8_t *rcv_length, + OUT uint8_t *rcv_data_array, + VAR uint8_t *rcv_chained, + VAR uint32_t *ufr_status); + +UFR_STATUS DL_API s_block_deselectM(UFR_HANDLE hndUFR, + uint8_t timeout); + +UFR_STATUS DL_API card_transceiveM(UFR_HANDLE hndUFR, + uint8_t card_activate, + uint8_t card_halted, + uint8_t tx_crc, + uint8_t rx_crc, + uint8_t crypto1, + uint32_t timeout, + IN uint8_t *tx_data, + uint8_t tx_data_len, + OUT uint8_t *rx_data, + VAR uint8_t *rx_data_len); + +UFR_STATUS DL_API card_transceive_mode_startM(UFR_HANDLE hndUFR, + uint8_t tx_crc, + uint8_t rx_crc, + uint32_t rf_timeout, + uint32_t uart_timeout); + +UFR_STATUS DL_API card_transceive_mode_stopM(UFR_HANDLE hndUFR); + +UFR_STATUS DL_API card_halt_enableM(UFR_HANDLE hndUFR); + +UFR_STATUS DL_API uart_transceiveM(UFR_HANDLE hndUFR, + IN uint8_t *send_data, + uint8_t send_len, + OUT uint8_t *rcv_data, + uint32_t bytes_to_receive, + VAR uint32_t *rcv_len); + +UFR_STATUS DL_API open_ISO7816_interfaceM(UFR_HANDLE hndUFR, + OUT uint8_t *atr_data, + VAR uint8_t *atr_len); + +UFR_STATUS DL_API APDU_switch_to_ISO7816_interfaceM(UFR_HANDLE hndUFR); + +UFR_STATUS DL_API close_ISO7816_interface_no_APDUM(UFR_HANDLE hndUFR); + +UFR_STATUS DL_API close_ISO7816_interface_APDU_ISO14443_4M(UFR_HANDLE hndUFR); + +UFR_STATUS DL_API APDU_switch_to_ISO14443_4_interfaceM(UFR_HANDLE hndUFR); + +UFR_STATUS DL_API APDU_switch_off_from_ISO7816_interfaceM(UFR_HANDLE hndUFR); + +//------------------------------------------------------------------------------ +UFR_STATUS DL_API JCAppSelectByAidM(UFR_HANDLE hndUFR, + IN const uint8_t *aid, + uint8_t aid_len, + OUT uint8_t selection_response[16]); + +UFR_STATUS DL_API JCAppPutPrivateKeyM(UFR_HANDLE hndUFR, + uint8_t key_type, + uint8_t key_index, + IN const uint8_t *key, + uint16_t key_bit_len, + const IN uint8_t *key_param, + uint16_t key_parm_len); + +UFR_STATUS DL_API JCAppGenerateKeyPairM(UFR_HANDLE hndUFR, + uint8_t key_type, + uint8_t key_index, + uint8_t key_designator, + uint16_t key_bit_len, + IN const uint8_t *params, + uint16_t params_size); + +UFR_STATUS DL_API JCAppDeleteRsaKeyPairM(UFR_HANDLE hndUFR, + uint8_t key_index); + +UFR_STATUS DL_API JCAppDeleteEcKeyPairM(UFR_HANDLE hndUFR, + uint8_t key_index); + +UFR_STATUS DL_API JCAppSignatureBeginM(UFR_HANDLE hndUFR, + uint8_t cipher, + uint8_t digest, + uint8_t padding, + uint8_t key_index, + IN const uint8_t *chunk, + uint16_t chunk_len, + IN const uint8_t *alg_param, + uint16_t alg_parm_len); + +UFR_STATUS DL_API JCAppSignatureUpdateM(UFR_HANDLE hndUFR, + IN const uint8_t *chunk, + uint16_t chunk_len); + +UFR_STATUS DL_API JCAppSignatureEndM(UFR_HANDLE hndUFR, + VAR uint16_t *sig_len); + +UFR_STATUS DL_API JCAppGenerateSignatureM(UFR_HANDLE hndUFR, + uint8_t cipher, + uint8_t digest, + uint8_t padding, + uint8_t key_index, + IN const uint8_t *plain_data, + uint16_t plain_data_len, + VAR uint16_t *sig_len, + IN const uint8_t *alg_param, + uint16_t alg_parm_len); + +UFR_STATUS DL_API JCAppPutObjM(UFR_HANDLE hndUFR, + uint8_t obj_type, + uint8_t obj_index, + IN uint8_t *obj, + int16_t obj_size, + IN uint8_t *id, + uint8_t id_size); + +UFR_STATUS DL_API JCAppPutObjSubjectM(UFR_HANDLE hndUFR, + uint8_t obj_type, + uint8_t obj_index, + IN uint8_t *subject, + uint8_t size); + +UFR_STATUS DL_API JCAppInvalidateCertM(UFR_HANDLE hndUFR, + uint8_t obj_type, + uint8_t obj_index); + +UFR_STATUS DL_API JCAppGetObjIdM(UFR_HANDLE hndUFR, + uint8_t obj_type, + uint8_t obj_index, + OUT uint8_t *id, + VAR uint16_t *id_size); // when id == NULL returns size + +UFR_STATUS DL_API JCAppGetObjSubjectM(UFR_HANDLE hndUFR, + uint8_t obj_type, + uint8_t obj_index, + OUT uint8_t *subject, + VAR uint16_t *size); // when subject == NULL returns size + +UFR_STATUS DL_API JCAppGetObjM(UFR_HANDLE hndUFR, + uint8_t obj_type, + uint8_t obj_index, + OUT uint8_t *obj, + int16_t size); // when obj == NULL returns size + +UFR_STATUS DL_API JCAppLoginM(UFR_HANDLE hndUFR, + uint8_t SO, + IN uint8_t *pin, + uint8_t pinSize); + +UFR_STATUS DL_API JCAppGetPinTriesRemainingM(UFR_HANDLE hndUFR, + dl_sec_code_t secureCodeType, + VAR uint16_t *triesRemaining); + +UFR_STATUS DL_API JCAppPinChangeM(UFR_HANDLE hndUFR, + dl_sec_code_t secureCodeType, + IN uint8_t *newPin, + uint8_t newPinSize); + +UFR_STATUS DL_API JCAppPinUnblockM(UFR_HANDLE hndUFR, + uint8_t SO, + IN uint8_t *puk, + uint8_t pukSize); + +UFR_STATUS DL_API JCAppPinEnableM(UFR_HANDLE hndUFR, uint8_t SO); + +UFR_STATUS DL_API JCAppPinDisableM(UFR_HANDLE hndUFR, uint8_t SO); + +UFR_STATUS DL_API JCAppGetRsaPublicKeyM(UFR_HANDLE hndUFR, + uint8_t key_index, + OUT uint8_t *modulus, + VAR uint16_t *modulus_size, + OUT uint8_t *exponent, + VAR uint16_t *exponent_size); // when modulus == NULL, returns sizes and exponent ignored + +UFR_STATUS DL_API JCAppGetEcPublicKeyM(UFR_HANDLE hndUFR, + uint8_t key_index, + OUT uint8_t *keyW, + VAR uint16_t *kexWSize, + OUT uint8_t *field, + VAR uint16_t *field_size, + OUT uint8_t *ab, + VAR uint16_t *ab_size, + OUT uint8_t *g, + VAR uint16_t *g_size, + OUT uint8_t *r, + VAR uint16_t *r_size, + VAR uint16_t *k, + VAR uint16_t *key_size_bits, + VAR uint16_t *key_designator); // when keyW == NULL, returns size + +UFR_STATUS DL_API JCAppGetEcKeySizeBitsM(UFR_HANDLE hndUFR, + uint8_t key_index, + VAR uint16_t *key_size_bits, + VAR uint16_t *key_designator); +//------------------------------------------------------------------------------ +UFR_STATUS DL_API JCStorageGetFilesListSizeM(UFR_HANDLE hndUFR, VAR uint32_t *list_size); +UFR_STATUS DL_API JCStorageListFilesM(UFR_HANDLE hndUFR, OUT uint8_t *list, uint32_t list_bytes_allocated); +UFR_STATUS DL_API JCStorageGetFileSizeM(UFR_HANDLE hndUFR, uint8_t card_file_index, VAR uint32_t *file_size); +UFR_STATUS DL_API JCStorageReadFileM(UFR_HANDLE hndUFR, uint8_t card_file_index, OUT uint8_t *data, uint32_t data_bytes_allocated); +UFR_STATUS DL_API JCStorageReadFileToFileSystemM(UFR_HANDLE hndUFR, uint8_t card_file_index, IN const char *file_system_path_name); +UFR_STATUS DL_API JCStorageWriteFileM(UFR_HANDLE hndUFR, uint8_t card_file_index, IN const uint8_t *data, uint32_t data_size); +UFR_STATUS DL_API JCStorageWriteFileFromFileSystemM(UFR_HANDLE hndUFR, uint8_t card_file_index, IN const char *file_system_path_name); +UFR_STATUS DL_API JCStorageDeleteFileM(UFR_HANDLE hndUFR, uint8_t file_index); +//------------------------------------------------------------------------------ +UFR_STATUS DL_API MRTDAppSelectAndAuthenticateBacM(UFR_HANDLE hndUFR, IN const uint8_t mrz_proto_key[25], OUT uint8_t *ksenc, OUT uint8_t *ksmac, + VAR uint64_t *send_sequence_cnt); +UFR_STATUS DL_API MRTDFileReadBacToHeapM(UFR_HANDLE hndUFR, IN const uint8_t *file_index, VAR uint8_t **output, OUT uint32_t *output_length, IN const uint8_t *ksenc, + IN const uint8_t *ksmac, VAR uint64_t *send_sequence_cnt); +//############################################################################# + +UFR_STATUS DL_API uFR_DESFIRE_Start(void); +UFR_STATUS DL_API uFR_DESFIRE_StartM(UFR_HANDLE hndUFR); +UFR_STATUS DL_API uFR_DESFIRE_Stop(void); +UFR_STATUS DL_API uFR_DESFIRE_StopM(UFR_HANDLE hndUFR); +UFR_STATUS DL_API uFR_APDU_Start(void); // Alias for uFR_DESFIRE_Start() +UFR_STATUS DL_API uFR_APDU_StartM(UFR_HANDLE hndUFR); // Alias for uFR_DESFIRE_StartM() +UFR_STATUS DL_API uFR_APDU_Stop(void); // Alias for uFR_DESFIRE_Stop() +UFR_STATUS DL_API uFR_APDU_StopM(UFR_HANDLE hndUFR); // Alias for uFR_DESFIRE_StopM() + +//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ + +UFR_STATUS DL_API uFR_int_GetDesfireUidM(UFR_HANDLE hndUFR, + uint8_t aes_key_nr, + uint32_t aid, + uint8_t aid_key_nr, + OUT uint8_t *card_uid, + VAR uint8_t *card_uid_len, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_GetDesfireUid_aesM(UFR_HANDLE hndUFR, + uint8_t aes_key_nr, + uint32_t aid, + uint8_t aid_key_nr, + OUT uint8_t *card_uid, + VAR uint8_t *card_uid_len, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_GetDesfireUid_desM(UFR_HANDLE hndUFR, + uint8_t des_key_nr, + uint32_t aid, + uint8_t aid_key_nr, + OUT uint8_t *card_uid, + VAR uint8_t *card_uid_len, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_GetDesfireUid_2k3desM(UFR_HANDLE hndUFR, + uint8_t des2k_key_nr, + uint32_t aid, + uint8_t aid_key_nr, + OUT uint8_t *card_uid, + VAR uint8_t *card_uid_len, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_GetDesfireUid_3k3desM(UFR_HANDLE hndUFR, + IN uint8_t des3k_key_nr, + uint32_t aid, + uint8_t aid_key_nr, + OUT uint8_t *card_uid, + VAR uint8_t *card_uid_len, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_GetDesfireUid_PK_M(UFR_HANDLE hndUFR, + IN uint8_t *aes_key_ext, + uint32_t aid, + uint8_t aid_key_nr, + OUT uint8_t *card_uid, + VAR uint8_t *card_uid_len, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_GetDesfireUid_aes_PK_M(UFR_HANDLE hndUFR, + IN uint8_t *aes_key_ext, + uint32_t aid, + uint8_t aid_key_nr, + OUT uint8_t *card_uid, + VAR uint8_t *card_uid_len, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_GetDesfireUid_des_PK_M(UFR_HANDLE hndUFR, + IN uint8_t *des_key_ext, + uint32_t aid, + uint8_t aid_key_nr, + OUT uint8_t *card_uid, + VAR uint8_t *card_uid_len, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_GetDesfireUid_2k3des_PK_M(UFR_HANDLE hndUFR, + IN uint8_t *des2k_key_ext, + uint32_t aid, + uint8_t aid_key_nr, + OUT uint8_t *card_uid, + VAR uint8_t *card_uid_len, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_GetDesfireUid_3k3des_PK_M(UFR_HANDLE hndUFR, + IN uint8_t *des3k_key_ext, + uint32_t aid, + uint8_t aid_key_nr, + OUT uint8_t *card_uid, + VAR uint8_t *card_uid_len, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_SAM_GetDesfireUidAesAuthM(UFR_HANDLE hndUFR, + uint8_t aes_key_nr, + uint32_t aid, + uint8_t aid_key_nr, + OUT uint8_t *card_uid, + VAR uint8_t *card_uid_len, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_SAM_GetDesfireUid3k3desAuthM(UFR_HANDLE hndUFR, + uint8_t des3k_key_nr, + uint32_t aid, + uint8_t aid_key_nr, + OUT uint8_t *card_uid, + VAR uint8_t *card_uid_len, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); + +UFR_STATUS DL_API uFR_int_DesfireFreeMemM(UFR_HANDLE hndUFR, + VAR uint32_t *free_mem_byte, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); + +UFR_STATUS DL_API uFR_int_DesfireFormatCardM(UFR_HANDLE hndUFR, + uint8_t aes_key_nr, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireFormatCard_aesM(UFR_HANDLE hndUFR, + uint8_t aes_key_nr, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireFormatCard_desM(UFR_HANDLE hndUFR, + uint8_t des_key_nr, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireFormatCard_2k3desM(UFR_HANDLE hndUFR, + uint8_t des2k_key_nr, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireFormatCard_3k3desM(UFR_HANDLE hndUFR, + uint8_t des3k_key_nr, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireFormatCard_PK_M(UFR_HANDLE hndUFR, + IN uint8_t *aes_key_ext, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireFormatCard_aes_PK_M(UFR_HANDLE hndUFR, + IN uint8_t *aes_key_ext, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireFormatCard_des_PK_M(UFR_HANDLE hndUFR, + IN uint8_t *des_key_ext, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireFormatCard_2k3des_PK_M(UFR_HANDLE hndUFR, + IN uint8_t *des2k_key_ext, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireFormatCard_3k3des_PK_M(UFR_HANDLE hndUFR, + IN uint8_t *des3k_key_ext, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_SAM_DesfireFormatCardAesAuthM(UFR_HANDLE hndUFR, + uint8_t aes_key_nr, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_SAM_DesfireFormatCard3k3desAuthM(UFR_HANDLE hndUFR, + uint8_t des3k_key_nr, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); + +UFR_STATUS DL_API uFR_int_DesfireCreateStdDataFileM(UFR_HANDLE hndUFR, + uint8_t aes_key_nr, + uint32_t aid, + uint8_t file_id, + uint32_t file_size, + uint8_t read_key_no, + uint8_t write_key_no, + uint8_t read_write_key_no, + uint8_t change_key_no, + uint8_t communication_settings, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireCreateStdDataFile_aesM(UFR_HANDLE hndUFR, + uint8_t aes_key_nr, + uint32_t aid, + uint8_t file_id, + uint32_t file_size, + uint8_t read_key_no, + uint8_t write_key_no, + uint8_t read_write_key_no, + uint8_t change_key_no, + uint8_t communication_settings, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireCreateStdDataFile_desM(UFR_HANDLE hndUFR, + uint8_t des_key_nr, + uint32_t aid, + uint8_t file_id, + uint32_t file_size, + uint8_t read_key_no, + uint8_t write_key_no, + uint8_t read_write_key_no, + uint8_t change_key_no, + uint8_t communication_settings, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireCreateStdDataFile_2k3desM(UFR_HANDLE hndUFR, + uint8_t des2k_key_nr, + uint32_t aid, + uint8_t file_id, + uint32_t file_size, + uint8_t read_key_no, + uint8_t write_key_no, + uint8_t read_write_key_no, + uint8_t change_key_no, + uint8_t communication_settings, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireCreateStdDataFile_3k3desM(UFR_HANDLE hndUFR, + uint8_t des3k_key_nr, + uint32_t aid, + uint8_t file_id, + uint32_t file_size, + uint8_t read_key_no, + uint8_t write_key_no, + uint8_t read_write_key_no, + uint8_t change_key_no, + uint8_t communication_settings, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireCreateStdDataFile_PK_M(UFR_HANDLE hndUFR, + IN uint8_t *aes_key_ext, + uint32_t aid, + uint8_t file_id, + uint32_t file_size, + uint8_t read_key_no, + uint8_t write_key_no, + uint8_t read_write_key_no, + uint8_t change_key_no, + uint8_t communication_settings, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireCreateStdDataFile_aes_PK_M(UFR_HANDLE hndUFR, + IN uint8_t *aes_key_ext, + uint32_t aid, + uint8_t file_id, + uint32_t file_size, + uint8_t read_key_no, + uint8_t write_key_no, + uint8_t read_write_key_no, + uint8_t change_key_no, + uint8_t communication_settings, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireCreateStdDataFile_des_PK_M(UFR_HANDLE hndUFR, + IN uint8_t *des_key_ext, + uint32_t aid, + uint8_t file_id, + uint32_t file_size, + uint8_t read_key_no, + uint8_t write_key_no, + uint8_t read_write_key_no, + uint8_t change_key_no, + uint8_t communication_settings, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireCreateStdDataFile_2k3des_PK_M(UFR_HANDLE hndUFR, + IN uint8_t *des2k_key_ext, + uint32_t aid, + uint8_t file_id, + uint32_t file_size, + uint8_t read_key_no, + uint8_t write_key_no, + uint8_t read_write_key_no, + uint8_t change_key_no, + uint8_t communication_settings, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireCreateStdDataFile_3k3des_PK_M(UFR_HANDLE hndUFR, + IN uint8_t *des3k_key_ext, + uint32_t aid, + uint8_t file_id, + uint32_t file_size, + uint8_t read_key_no, + uint8_t write_key_no, + uint8_t read_write_key_no, + uint8_t change_key_no, + uint8_t communication_settings, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_SAM_DesfireCreateStdDataFileAesAuthM(UFR_HANDLE hndUFR, + uint8_t aes_key_nr, + uint32_t aid, + uint8_t file_id, + uint32_t file_size, + uint8_t read_key_no, + uint8_t write_key_no, + uint8_t read_write_key_no, + uint8_t change_key_no, + uint8_t communication_settings, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_SAM_DesfireCreateStdDataFile3k3desAuthM(UFR_HANDLE hndUFR, + uint8_t des3k_key_nr, + uint32_t aid, + uint8_t file_id, + uint32_t file_size, + uint8_t read_key_no, + uint8_t write_key_no, + uint8_t read_write_key_no, + uint8_t change_key_no, + uint8_t communication_settings, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireCreateStdDataFile_no_auth_M(UFR_HANDLE hndUFR, + uint32_t aid, + uint8_t file_id, + uint32_t file_size, + uint8_t read_key_no, + uint8_t write_key_no, + uint8_t read_write_key_no, + uint8_t change_key_no, + uint8_t communication_settings, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); + +UFR_STATUS DL_API uFR_int_DesfireDeleteFileM(UFR_HANDLE hndUFR, + uint8_t aes_key_nr, + uint32_t aid, + uint8_t file_id, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireDeleteFile_aesM(UFR_HANDLE hndUFR, + uint8_t aes_key_nr, + uint32_t aid, + uint8_t file_id, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireDeleteFile_desM(UFR_HANDLE hndUFR, + uint8_t des_key_nr, + uint32_t aid, + uint8_t file_id, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireDeleteFile_2k3desM(UFR_HANDLE hndUFR, + uint8_t des2k_key_nr, + uint32_t aid, + uint8_t file_id, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireDeleteFile_3k3desM(UFR_HANDLE hndUFR, + uint8_t des3k_key_nr, + uint32_t aid, + uint8_t file_id, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireDeleteFile_PK_M(UFR_HANDLE hndUFR, + IN uint8_t *aes_key_ext, + uint32_t aid, + uint8_t file_id, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireDeleteFile_aes_PK_M(UFR_HANDLE hndUFR, + IN uint8_t *aes_key_ext, + uint32_t aid, + uint8_t file_id, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireDeleteFile_des_PK_M(UFR_HANDLE hndUFR, + IN uint8_t *des_key_ext, + uint32_t aid, + uint8_t file_id, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireDeleteFile_2k3des_PK_M(UFR_HANDLE hndUFR, + IN uint8_t *des2k_key_ext, + uint32_t aid, + uint8_t file_id, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireDeleteFile_3k3des_PK_M(UFR_HANDLE hndUFR, + IN uint8_t *des3k_key_ext, + uint32_t aid, + uint8_t file_id, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_SAM_DesfireDeleteFileAesAuthM(UFR_HANDLE hndUFR, + uint8_t aes_key_nr, + uint32_t aid, + uint8_t file_id, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_SAM_DesfireDeleteFile3k3desAuthM(UFR_HANDLE hndUFR, + uint8_t des3k_key_nr, + uint32_t aid, + uint8_t file_id, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); + +UFR_STATUS DL_API uFR_int_DesfireDeleteFile_no_auth_M(UFR_HANDLE hndUFR, + uint32_t aid, + uint8_t file_id, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireCreateAesApplicationM(UFR_HANDLE hndUFR, + uint8_t aes_key_nr, + uint32_t aid, + uint8_t setting, + uint8_t max_key_no, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireCreateAesApplication_aesM(UFR_HANDLE hndUFR, + uint8_t aes_key_nr, + uint32_t aid, + uint8_t setting, + uint8_t max_key_no, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireCreate3k3desApplication_aesM(UFR_HANDLE hndUFR, + uint8_t aes_key_nr, + uint32_t aid, + uint8_t setting, + uint8_t max_key_no, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireCreateDesApplication_aesM(UFR_HANDLE hndUFR, + uint8_t aes_key_nr, + uint32_t aid, + uint8_t setting, + uint8_t max_key_no, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireCreateAesApplication_3k3desM(UFR_HANDLE hndUFR, + uint8_t des3k_key_nr, + uint32_t aid, + uint8_t setting, + uint8_t max_key_no, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireCreate3k3desApplication_3k3desM(UFR_HANDLE hndUFR, + uint8_t des3k_key_nr, + uint32_t aid, + uint8_t setting, + uint8_t max_key_no, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireCreateDesApplication_3k3desM(UFR_HANDLE hndUFR, + uint8_t des3k_key_nr, + uint32_t aid, + uint8_t setting, + uint8_t max_key_no, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireCreateAesApplication_2k3desM(UFR_HANDLE hndUFR, + uint8_t des2k_key_nr, + uint32_t aid, + uint8_t setting, + uint8_t max_key_no, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireCreate3k3desApplication_2k3desM(UFR_HANDLE hndUFR, + uint8_t des2k_key_nr, + uint32_t aid, + uint8_t setting, + uint8_t max_key_no, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireCreateDesApplication_2k3desM(UFR_HANDLE hndUFR, + uint8_t des2k_key_nr, + uint32_t aid, + uint8_t setting, + uint8_t max_key_no, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireCreateAesApplication_desM(UFR_HANDLE hndUFR, + uint8_t des_key_nr, + uint32_t aid, + uint8_t setting, + uint8_t max_key_no, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireCreate3k3desApplication_desM(UFR_HANDLE hndUFR, + uint8_t des_key_nr, + uint32_t aid, + uint8_t setting, + uint8_t max_key_no, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireCreateDesApplication_desM(UFR_HANDLE hndUFR, + uint8_t des_key_nr, + uint32_t aid, + uint8_t setting, + uint8_t max_key_no, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireCreateAesApplication_PK_M(UFR_HANDLE hndUFR, + IN uint8_t *aes_key_ext, + uint32_t aid, + uint8_t setting, + uint8_t max_key_no, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireCreateAesApplication_aes_PK_M(UFR_HANDLE hndUFR, + IN uint8_t *aes_key_ext, + uint32_t aid, + uint8_t setting, + uint8_t max_key_no, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireCreate3k3desApplication_aes_PK_M(UFR_HANDLE hndUFR, + IN uint8_t *aes_key_ext, + uint32_t aid, + uint8_t setting, + uint8_t max_key_no, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireCreateDesApplication_aes_PK_M(UFR_HANDLE hndUFR, + IN uint8_t *aes_key_ext, + uint32_t aid, + uint8_t setting, + uint8_t max_key_no, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireCreateAesApplication_3k3des_PK_M(UFR_HANDLE hndUFR, + IN uint8_t *des3k_key_ext, + uint32_t aid, + uint8_t setting, + uint8_t max_key_no, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireCreate3k3desApplication_3k3des_PK_M(UFR_HANDLE hndUFR, + IN uint8_t *des3k_key_ext, + uint32_t aid, + uint8_t setting, + uint8_t max_key_no, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireCreateDesApplication_3k3des_PK_M(UFR_HANDLE hndUFR, + IN uint8_t *des3k_key_ext, + uint32_t aid, + uint8_t setting, + uint8_t max_key_no, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireCreateAesApplication_2k3des_PK_M(UFR_HANDLE hndUFR, + IN uint8_t *des2k_key_ext, + uint32_t aid, + uint8_t setting, + uint8_t max_key_no, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireCreate3k3desApplication_2k3des_PK_M(UFR_HANDLE hndUFR, + IN uint8_t *des2k_key_ext, + uint32_t aid, + uint8_t setting, + uint8_t max_key_no, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireCreateDesApplication_2k3des_PK_M(UFR_HANDLE hndUFR, + IN uint8_t *des2k_key_ext, + uint32_t aid, + uint8_t setting, + uint8_t max_key_no, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireCreateAesApplication_des_PK_M(UFR_HANDLE hndUFR, + IN uint8_t *des_key_ext, + uint32_t aid, + uint8_t setting, + uint8_t max_key_no, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireCreate3k3desApplication_des_PK_M(UFR_HANDLE hndUFR, + IN uint8_t *des_key_ext, + uint32_t aid, + uint8_t setting, + uint8_t max_key_no, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireCreateDesApplication_des_PK_M(UFR_HANDLE hndUFR, + IN uint8_t *des_key_ext, + uint32_t aid, + uint8_t setting, + uint8_t max_key_no, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_SAM_DesfireCreateAesApplicationAesAuthM(UFR_HANDLE hndUFR, + uint8_t aes_key_nr, + uint32_t aid, + uint8_t setting, + uint8_t max_key_no, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_SAM_DesfireCreate3k3desApplicationAesAuthM(UFR_HANDLE hndUFR, + uint8_t aes_key_nr, uint32_t aid, + uint8_t setting, + uint8_t max_key_no, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_SAM_DesfireCreateAesApplication3k3desAuthM(UFR_HANDLE hndUFR, + uint8_t des3k_key_nr, + uint32_t aid, + uint8_t setting, + uint8_t max_key_no, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_SAM_DesfireCreate3k3desApplication3k3desAuthM(UFR_HANDLE hndUFR, + uint8_t des3k_key_nr, + uint32_t aid, + uint8_t setting, + uint8_t max_key_no, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireCreateAesApplication_no_auth_M(UFR_HANDLE hndUFR, + uint32_t aid, + uint8_t setting, + uint8_t max_key_no, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireCreate3k3desApplication_no_auth_M(UFR_HANDLE hndUFR, + uint32_t aid, + uint8_t setting, + uint8_t max_key_no, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireCreateDesApplication_no_auth_M(UFR_HANDLE hndUFR, + uint32_t aid, + uint8_t setting, + uint8_t max_key_no, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); + +UFR_STATUS DL_API uFR_int_DesfireDeleteApplicationM(UFR_HANDLE hndUFR, + uint8_t aes_key_nr, + uint32_t aid, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireDeleteApplication_aesM(UFR_HANDLE hndUFR, + uint8_t aes_key_nr, + uint32_t aid, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireDeleteApplication_desM(UFR_HANDLE hndUFR, + uint8_t des_key_nr, + uint32_t aid, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireDeleteApplication_2k3desM(UFR_HANDLE hndUFR, + uint8_t des2k_key_nr, + uint32_t aid, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireDeleteApplication_3k3desM(UFR_HANDLE hndUFR, + uint8_t des3k_key_nr, + uint32_t aid, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireDeleteApplication_PK_M(UFR_HANDLE hndUFR, + IN uint8_t *aes_key_ext, + uint32_t aid, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireDeleteApplication_aes_PK_M(UFR_HANDLE hndUFR, + IN uint8_t *aes_key_ext, + uint32_t aid, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireDeleteApplication_des_PK_M(UFR_HANDLE hndUFR, + IN uint8_t *des_key_ext, + uint32_t aid, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireDeleteApplication_2k3des_PK_M(UFR_HANDLE hndUFR, + IN uint8_t *des2k_key_ext, + uint32_t aid, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireDeleteApplication_3k3des_PK_M(UFR_HANDLE hndUFR, + IN uint8_t *des3k_key_ext, + uint32_t aid, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_SAM_DesfireDeleteApplicationAesAuthM(UFR_HANDLE hndUFR, + uint8_t aes_key_nr, + uint32_t aid, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_SAM_DesfireDeleteApplication3k3desAuthM(UFR_HANDLE hndUFR, + uint8_t des3k_key_nr, + uint32_t aid, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); + +UFR_STATUS DL_API uFR_int_DesfireSetConfigurationM(UFR_HANDLE hndUFR, + uint8_t aes_key_nr, + uint8_t random_uid, + uint8_t format_disable, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireSetConfiguration_aesM(UFR_HANDLE hndUFR, + uint8_t aes_key_nr, + uint8_t random_uid, + uint8_t format_disable, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireSetConfiguration_desM(UFR_HANDLE hndUFR, + uint8_t des_key_nr, + uint8_t random_uid, + uint8_t format_disable, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireSetConfiguration_2k3desM(UFR_HANDLE hndUFR, + uint8_t des2k_key_nr, + uint8_t random_uid, + uint8_t format_disable, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireSetConfiguration_3k3desM(UFR_HANDLE hndUFR, + uint8_t des3k_key_nr, + uint8_t random_uid, + uint8_t format_disable, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireSetConfiguration_PK_M(UFR_HANDLE hndUFR, + IN uint8_t *aes_key_ext, + uint8_t random_uid, + uint8_t format_disable, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireSetConfiguration_aes_PK_M(UFR_HANDLE hndUFR, + IN uint8_t *aes_key_ext, + uint8_t random_uid, + uint8_t format_disable, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireSetConfiguration_des_PK_M(UFR_HANDLE hndUFR, + IN uint8_t *des_key_ext, + uint8_t random_uid, + uint8_t format_disable, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireSetConfiguration_2k3des_PK_M(UFR_HANDLE hndUFR, + IN uint8_t *des2k_key_ext, + uint8_t random_uid, + uint8_t format_disable, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireSetConfiguration_3k3des_PK_M(UFR_HANDLE hndUFR, + IN uint8_t *des3k_key_ext, + uint8_t random_uid, + uint8_t format_disable, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_SAM_DesfireSetConfigurationAesAuthM(UFR_HANDLE hndUFR, + uint8_t aes_key_nr, + uint8_t random_uid, + uint8_t format_disable, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_SAM_DesfireSetConfiguration3k3desAuthM(UFR_HANDLE hndUFR, + uint8_t des3k_key_nr, + uint8_t random_uid, + uint8_t format_disable, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); + +UFR_STATUS DL_API uFR_int_DesfireGetKeySettingsM(UFR_HANDLE hndUFR, + uint8_t aes_key_nr, + uint32_t aid, + VAR uint8_t *setting, + VAR uint8_t *max_key_no, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireGetKeySettings_aesM(UFR_HANDLE hndUFR, + uint8_t aes_key_nr, + uint32_t aid, + VAR uint8_t *setting, + VAR uint8_t *max_key_no, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireGetKeySettings_desM(UFR_HANDLE hndUFR, + uint8_t des_key_nr, + uint32_t aid, + VAR uint8_t *setting, + VAR uint8_t *max_key_no, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireGetKeySettings_2k3desM(UFR_HANDLE hndUFR, + uint8_t des2k_key_nr, + uint32_t aid, + VAR uint8_t *setting, + VAR uint8_t *max_key_no, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireGetKeySettings_3k3desM(UFR_HANDLE hndUFR, + uint8_t des3k_key_nr, + uint32_t aid, + VAR uint8_t *setting, + VAR uint8_t *max_key_no, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireGetKeySettings_PK_M(UFR_HANDLE hndUFR, + IN uint8_t *aes_key_ext, + uint32_t aid, + VAR uint8_t *setting, + VAR uint8_t *max_key_no, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireGetKeySettings_aes_PK_M(UFR_HANDLE hndUFR, + IN uint8_t *aes_key_ext, + uint32_t aid, + VAR uint8_t *setting, + VAR uint8_t *max_key_no, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireGetKeySettings_des_PK_M(UFR_HANDLE hndUFR, + IN uint8_t *des_key_ext, + uint32_t aid, + VAR uint8_t *setting, + VAR uint8_t *max_key_no, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireGetKeySettings_2k3des_PK_M(UFR_HANDLE hndUFR, + IN uint8_t *des2k_key_ext, + uint32_t aid, + VAR uint8_t *setting, + VAR uint8_t *max_key_no, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireGetKeySettings_3k3des_PK_M(UFR_HANDLE hndUFR, + IN uint8_t *des3k_key_ext, + uint32_t aid, + VAR uint8_t *setting, + VAR uint8_t *max_key_no, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_SAM_DesfireGetKeySettingsAesAuthM(UFR_HANDLE hndUFR, + uint8_t aes_key_nr, + uint32_t aid, + VAR uint8_t *setting, + VAR uint8_t *max_key_no, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_SAM_DesfireGetKeySettings3k3desAuthM(UFR_HANDLE hndUFR, + uint8_t des3k_key_nr, + uint32_t aid, + VAR uint8_t *setting, + VAR uint8_t *max_key_no, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); + + +UFR_STATUS DL_API uFR_int_DesfireChangeKeySettingsM(UFR_HANDLE hndUFR, + uint8_t aes_key_nr, + uint32_t aid, + uint8_t setting, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireChangeKeySettings_aesM(UFR_HANDLE hndUFR, + uint8_t aes_key_nr, + uint32_t aid, + uint8_t setting, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireChangeKeySettings_desM(UFR_HANDLE hndUFR, + uint8_t des_key_nr, + uint32_t aid, + uint8_t setting, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireChangeKeySettings_2k3desM(UFR_HANDLE hndUFR, + uint8_t des2k_key_nr, + uint32_t aid, + uint8_t setting, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireChangeKeySettings_3k3desM(UFR_HANDLE hndUFR, + uint8_t des3k_key_nr, + uint32_t aid, + uint8_t setting, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireChangeKeySettings_PK_M(UFR_HANDLE hndUFR, + IN uint8_t *aes_key_ext, + uint32_t aid, + uint8_t setting, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireChangeKeySettings_aes_PK_M(UFR_HANDLE hndUFR, + IN uint8_t *aes_key_ext, + uint32_t aid, + uint8_t setting, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireChangeKeySettings_des_PK_M(UFR_HANDLE hndUFR, + IN uint8_t *des_key_ext, + uint32_t aid, + uint8_t setting, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireChangeKeySettings_2k3des_PK_M(UFR_HANDLE hndUFR, + IN uint8_t *des2k_key_ext, + uint32_t aid, + uint8_t setting, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireChangeKeySettings_3k3des_PK_M(UFR_HANDLE hndUFR, + IN uint8_t *des3k_key_ext, + uint32_t aid, + uint8_t setting, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_SAM_DesfireChangeKeySettingsAesAuthM(UFR_HANDLE hndUFR, + uint8_t aes_key_nr, + uint32_t aid, + uint8_t setting, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_SAM_DesfireChangeKeySettings3k3desAuthM(UFR_HANDLE hndUFR, + uint8_t des3k_key_nr, + uint32_t aid, + uint8_t setting, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); + +UFR_STATUS DL_API uFR_int_DesfireChangeAesKeyM(UFR_HANDLE hndUFR, + uint8_t aes_key_nr, + uint32_t aid, + uint8_t aid_key_no_auth, + IN uint8_t new_aes_key[16], + uint8_t aid_key_no, + IN uint8_t old_aes_key[16], + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireChangeAesKey_aesM(UFR_HANDLE hndUFR, + uint8_t aes_key_nr, + uint32_t aid, + uint8_t aid_key_no_auth, + uint8_t new_aes_key_nr, + uint8_t aid_key_no, + uint8_t old_aes_key_nr, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireChangeDesKey_desM(UFR_HANDLE hndUFR, + uint8_t auth_des_key_nr, + uint32_t aid, + uint8_t aid_key_no_auth, + uint8_t new_des_key_nr, + uint8_t aid_key_no, + uint8_t old_des_key_nr, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireChangeDesKey_desM(UFR_HANDLE hndUFR, + uint8_t auth_des_key_nr, + uint32_t aid, + uint8_t aid_key_no_auth, + uint8_t new_des_key_nr, + uint8_t aid_key_no, + uint8_t old_des_key_nr, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireChange2K3DesKey_desM(UFR_HANDLE hndUFR, + uint8_t auth_des_key_nr, + uint32_t aid, + uint8_t aid_key_no_auth, + uint8_t new_2k3des_key_nr, + uint8_t aid_key_no, + uint8_t old_2k3des_key_nr, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireChangeDesKey_2k3desM(UFR_HANDLE hndUFR, + uint8_t auth_des2k_key_nr, + uint32_t aid, + uint8_t aid_key_no_auth, + uint8_t new_des_key_nr, + uint8_t aid_key_no, + uint8_t old_des_key_nr, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireChange2K3DesKey_2k3desM(UFR_HANDLE hndUFR, + uint8_t auth_des2k_key_nr, + uint32_t aid, + uint8_t aid_key_no_auth, + uint8_t new_2k3des_key_nr, + uint8_t aid_key_no, + uint8_t old_2k3des_key_nr, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireChange3K3DesKey_3k3desM(UFR_HANDLE hndUFR, + uint8_t auth_des3k_key_nr, + uint32_t aid, + uint8_t aid_key_no_auth, + uint8_t new_3k3des_key_nr, + uint8_t aid_key_no, + uint8_t old_3k3des_key_nr, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireChangeMasterKeyM(UFR_HANDLE hndUFR, + uint8_t auth_key_nr, + uint8_t auth_key_type, + uint8_t new_key_nr, + uint8_t new_key_type, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireChangeAesKey_PK_M(UFR_HANDLE hndUFR, + IN uint8_t *aes_key_ext, + uint32_t aid, + uint8_t aid_key_no_auth, + IN uint8_t new_aes_key[16], + uint8_t aid_key_no, + IN uint8_t old_aes_key[16], + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireChangeAesKey_aes_PK_M(UFR_HANDLE hndUFR, + IN uint8_t *aes_key_ext, + uint32_t aid, + uint8_t aid_key_no_auth, + IN uint8_t new_aes_key[16], + uint8_t aid_key_no, + IN uint8_t old_aes_key[16], + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireChangeDesKey_des_PK_M(UFR_HANDLE hndUFR, + IN uint8_t *auth_des_key, + uint32_t aid, + uint8_t aid_key_no_auth, + IN uint8_t new_des_key[8], + uint8_t aid_key_no, + IN uint8_t old_des_key[8], + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireChange2K3DesKey_des_PK_M(UFR_HANDLE hndUFR, + IN uint8_t *auth_des_key, + uint32_t aid, + uint8_t aid_key_no_auth, + IN uint8_t new_2k3des_key[16], + uint8_t aid_key_no, + IN uint8_t old_2k3des_key[16], + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireChangeDesKey_2k3des_PK_M(UFR_HANDLE hndUFR, + IN uint8_t *auth_des2k_key, + uint32_t aid, + uint8_t aid_key_no_auth, + IN uint8_t new_des_key[8], + uint8_t aid_key_no, + IN uint8_t old_des_key[8], + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireChange2K3DesKey_2k3des_PK_M(UFR_HANDLE hndUFR, + IN uint8_t *auth_des2k_key, + uint32_t aid, + uint8_t aid_key_no_auth, + IN uint8_t new_2k3des_key[16], + uint8_t aid_key_no, + IN uint8_t old_2k3des_key[16], + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireChange3K3DesKey_3k3des_PK_M(UFR_HANDLE hndUFR, + IN uint8_t *auth_des3k_key, + uint32_t aid, + uint8_t aid_key_no_auth, + IN uint8_t new_3k3des_key[24], + uint8_t aid_key_no, + IN uint8_t old_3k3des_key[24], + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireChangeMasterKey_PK_M(UFR_HANDLE hndUFR, + IN uint8_t *auth_key, + uint8_t auth_key_type, + IN uint8_t *new_key, + uint8_t new_key_type, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_SAM_DesfireChangeKey_AesAuthM(UFR_HANDLE hndUFR, + uint8_t aes_key_nr, + uint32_t aid, + uint8_t aid_key_no_auth, + uint8_t new_aes_key_nr, + uint8_t aid_key_no, + uint8_t old_aes_key_nr, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_SAM_DesfireChangeKey_3k3desAuthM(UFR_HANDLE hndUFR, + uint8_t des3k_key_nr, + uint32_t aid, + uint8_t aid_key_no_auth, + uint8_t new_aes_key_nr, + uint8_t aid_key_no, + uint8_t old_aes_key_nr, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); + +UFR_STATUS DL_API uFR_int_DesfireWriteAesKeyM(UFR_HANDLE hndUFR, + uint8_t aes_key_no, + IN uint8_t *aes_key); +UFR_STATUS DL_API uFR_int_DesfireWriteKeyM(UFR_HANDLE hndUFR, + uint8_t key_no, + IN uint8_t *key, + uint8_t key_type); + +UFR_STATUS DL_API uFR_int_DesfireReadStddDataFileM(UFR_HANDLE hndUFR, + uint8_t aes_key_nr, + uint32_t aid, + uint8_t aid_key_nr, + uint8_t file_id, + uint16_t offset, + uint16_t data_length, + uint8_t communication_settings, + OUT uint8_t *data, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireReadStddDataFile_aesM(UFR_HANDLE hndUFR, + uint8_t aes_key_nr, + uint32_t aid, + uint8_t aid_key_nr, + uint8_t file_id, + uint16_t offset, + uint16_t data_length, + uint8_t communication_settings, + OUT uint8_t *data, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireReadStddDataFile_desM(UFR_HANDLE hndUFR, + uint8_t des_key_nr, + uint32_t aid, + uint8_t aid_key_nr, + uint8_t file_id, + uint16_t offset, + uint16_t data_length, + uint8_t communication_settings, + OUT uint8_t *data, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireReadStddDataFile_2k3desM(UFR_HANDLE hndUFR, + uint8_t des2k_key_nr, + uint32_t aid, + uint8_t aid_key_nr, + uint8_t file_id, + uint16_t offset, + uint16_t data_length, + uint8_t communication_settings, + OUT uint8_t *data, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireReadStddDataFile_3k3desM(UFR_HANDLE hndUFR, + uint8_t des3k_key_nr, + uint32_t aid, + uint8_t aid_key_nr, + uint8_t file_id, + uint16_t offset, + uint16_t data_length, + uint8_t communication_settings, + OUT uint8_t *data, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireReadStdDataFile_PK_M(UFR_HANDLE hndUFR, + IN uint8_t *aes_key_ext, + uint32_t aid, + uint8_t aid_key_nr, + uint8_t file_id, + uint16_t offset, + uint16_t data_length, + uint8_t communication_settings, + OUT uint8_t *data, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireReadStdDataFile_aes_PK_M(UFR_HANDLE hndUFR, + IN uint8_t *aes_key_ext, + uint32_t aid, + uint8_t aid_key_nr, + uint8_t file_id, + uint16_t offset, + uint16_t data_length, + uint8_t communication_settings, + OUT uint8_t *data, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireReadStdDataFile_des_PK_M(UFR_HANDLE hndUFR, + IN uint8_t *des_key_ext, + uint32_t aid, + uint8_t aid_key_nr, + uint8_t file_id, + uint16_t offset, + uint16_t data_length, + uint8_t communication_settings, + OUT uint8_t *data, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireReadStdDataFile_2k3des_PK_M(UFR_HANDLE hndUFR, + IN uint8_t *des2k_key_ext, + uint32_t aid, + uint8_t aid_key_nr, + uint8_t file_id, + uint16_t offset, + uint16_t data_length, + uint8_t communication_settings, + OUT uint8_t *data, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireReadStdDataFile_3k3des_PK_M(UFR_HANDLE hndUFR, + IN uint8_t *des3k_key_ext, + uint32_t aid, + uint8_t aid_key_nr, + uint8_t file_id, + uint16_t offset, + uint16_t data_length, + uint8_t communication_settings, + OUT uint8_t *data, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_SAM_DesfireReadStdDataFileAesAuthM(UFR_HANDLE hndUFR, + uint8_t aes_key_nr, + uint32_t aid, + uint8_t aid_key_nr, + uint8_t file_id, + uint16_t offset, + uint16_t data_length, + uint8_t communication_settings, + OUT uint8_t *data, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_SAM_DesfireReadStdDataFile3k3desAuthM(UFR_HANDLE hndUFR, + uint8_t des3k_key_nr, + uint32_t aid, + uint8_t aid_key_nr, + uint8_t file_id, + uint16_t offset, + uint16_t data_length, + uint8_t communication_settings, + OUT uint8_t *data, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireReadStdDataFile_no_auth_M(UFR_HANDLE hndUFR, + uint32_t aid, + uint8_t aid_key_nr, + uint8_t file_id, + uint16_t offset, + uint16_t data_length, + uint8_t communication_settings, + OUT uint8_t *data, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); + +UFR_STATUS DL_API uFR_int_DesfireWriteStdDataFileM(UFR_HANDLE hndUFR, + uint8_t aes_key_nr, + uint32_t aid, + uint8_t aid_key_nr, + uint8_t file_id, + uint16_t offset, + uint16_t data_length, + uint8_t communication_settings, + IN uint8_t *data, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireWriteStdDataFile_aesM(UFR_HANDLE hndUFR, + uint8_t aes_key_nr, + uint32_t aid, + uint8_t aid_key_nr, + uint8_t file_id, + uint16_t offset, + uint16_t data_length, + uint8_t communication_settings, + IN uint8_t *data, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireWriteStdDataFile_3k3desM(UFR_HANDLE hndUFR, + uint8_t des3k_key_nr, + uint32_t aid, + uint8_t aid_key_nr, + uint8_t file_id, + uint16_t offset, + uint16_t data_length, + uint8_t communication_settings, + IN uint8_t *data, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireWriteStdDataFile_desM(UFR_HANDLE hndUFR, + uint8_t des_key_nr, + uint32_t aid, + uint8_t aid_key_nr, + uint8_t file_id, + uint16_t offset, + uint16_t data_length, + uint8_t communication_settings, + IN uint8_t *data, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireWriteStdDataFile_2k3desM(UFR_HANDLE hndUFR, + uint8_t des2k_key_nr, + uint32_t aid, + uint8_t aid_key_nr, + uint8_t file_id, + uint16_t offset, + uint16_t data_length, + uint8_t communication_settings, + IN uint8_t *data, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireWriteStdDataFile_PK_M(UFR_HANDLE hndUFR, + IN uint8_t *aes_key_ext, + uint32_t aid, + uint8_t aid_key_nr, + uint8_t file_id, + uint16_t offset, + uint16_t data_length, + uint8_t communication_settings, + IN uint8_t *data, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireWriteStdDataFile_aes_PK_M(UFR_HANDLE hndUFR, + IN uint8_t *aes_key_ext, + uint32_t aid, + uint8_t aid_key_nr, + uint8_t file_id, + uint16_t offset, + uint16_t data_length, + uint8_t communication_settings, + IN uint8_t *data, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireWriteStdDataFile_3k3des_PK_M(UFR_HANDLE hndUFR, + IN uint8_t *des3k_key_ext, + uint32_t aid, + uint8_t aid_key_nr, + uint8_t file_id, + uint16_t offset, + uint16_t data_length, + uint8_t communication_settings, + IN uint8_t *data, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireWriteStdDataFile_des_PK_M(UFR_HANDLE hndUFR, + IN uint8_t *des_key_ext, + uint32_t aid, + uint8_t aid_key_nr, + uint8_t file_id, + uint16_t offset, + uint16_t data_length, + uint8_t communication_settings, + IN uint8_t *data, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireWriteStdDataFile_2k3des_PK_M(UFR_HANDLE hndUFR, + IN uint8_t *des2k_key_ext, + uint32_t aid, + uint8_t aid_key_nr, + uint8_t file_id, + uint16_t offset, + uint16_t data_length, + uint8_t communication_settings, + IN uint8_t *data, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_SAM_DesfireWriteStdDataFileAesAuthM(UFR_HANDLE hndUFR, + uint8_t aes_key_nr, + uint32_t aid, + uint8_t aid_key_nr, + uint8_t file_id, + uint16_t offset, + uint16_t data_length, + uint8_t communication_settings, + IN uint8_t *data, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_SAM_DesfireWriteStdDataFile3k3desAuthM(UFR_HANDLE hndUFR, + uint8_t des3k_key_nr, + uint32_t aid, + uint8_t aid_key_nr, + uint8_t file_id, + uint16_t offset, + uint16_t data_length, + uint8_t communication_settings, + IN uint8_t *data, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireWriteStdDataFile_no_auth_M(UFR_HANDLE hndUFR, + uint32_t aid, + uint8_t aid_key_nr, + uint8_t file_id, + uint16_t offset, + uint16_t data_length, + uint8_t communication_settings, + IN uint8_t *data, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); + +UFR_STATUS DL_API uFR_int_DesfireCreateValueFileM(UFR_HANDLE hndUFR, + uint8_t aes_key_nr, + uint32_t aid, + uint8_t file_id, + int32_t lower_limit, + int32_t upper_limit, + int32_t value, + uint8_t limited_credit_enabled, + uint8_t read_key_no, + uint8_t write_key_no, + uint8_t read_write_key_no, + uint8_t change_key_no, + uint8_t communication_settings, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireCreateValueFile_desM(UFR_HANDLE hndUFR, + uint8_t des_key_nr, + uint32_t aid, + uint8_t file_id, + int32_t lower_limit, + int32_t upper_limit, + int32_t value, + uint8_t limited_credit_enabled, + uint8_t read_key_no, + uint8_t write_key_no, + uint8_t read_write_key_no, + uint8_t change_key_no, + uint8_t communication_settings, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireCreateValueFile_2k3desM(UFR_HANDLE hndUFR, + uint8_t des2k_key_nr, + uint32_t aid, + uint8_t file_id, + int32_t lower_limit, + int32_t upper_limit, + int32_t value, + uint8_t limited_credit_enabled, + uint8_t read_key_no, + uint8_t write_key_no, + uint8_t read_write_key_no, + uint8_t change_key_no, + uint8_t communication_settings, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireCreateValueFile_3k3desM(UFR_HANDLE hndUFR, + uint8_t des3k_key_nr, + uint32_t aid, + uint8_t file_id, + int32_t lower_limit, + int32_t upper_limit, + int32_t value, + uint8_t limited_credit_enabled, + uint8_t read_key_no, + uint8_t write_key_no, + uint8_t read_write_key_no, + uint8_t change_key_no, + uint8_t communication_settings, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireCreateValueFile_PK_M(UFR_HANDLE hndUFR, + IN uint8_t *aes_key_ext, + uint32_t aid, + uint8_t file_id, + int32_t lower_limit, + int32_t upper_limit, + int32_t value, + uint8_t limited_credit_enabled, + uint8_t read_key_no, + uint8_t write_key_no, + uint8_t read_write_key_no, + uint8_t change_key_no, + uint8_t communication_settings, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireCreateValueFile_des_PK_M(UFR_HANDLE hndUFR, + IN uint8_t *des_key_ext, + uint32_t aid, + uint8_t file_id, + int32_t lower_limit, + int32_t upper_limit, + int32_t value, + uint8_t limited_credit_enabled, + uint8_t read_key_no, + uint8_t write_key_no, + uint8_t read_write_key_no, + uint8_t change_key_no, + uint8_t communication_settings, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireCreateValueFile_2k3des_PK_M(UFR_HANDLE hndUFR, + IN uint8_t *des2k_key_ext, + uint32_t aid, + uint8_t file_id, + int32_t lower_limit, + int32_t upper_limit, + int32_t value, + uint8_t limited_credit_enabled, + uint8_t read_key_no, + uint8_t write_key_no, + uint8_t read_write_key_no, + uint8_t change_key_no, + uint8_t communication_settings, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireCreateValueFile_3k3des_PK_M(UFR_HANDLE hndUFR, + IN uint8_t *des3k_key_ext, + uint32_t aid, + uint8_t file_id, + int32_t lower_limit, + int32_t upper_limit, + int32_t value, + uint8_t limited_credit_enabled, + uint8_t read_key_no, + uint8_t write_key_no, + uint8_t read_write_key_no, + uint8_t change_key_no, + uint8_t communication_settings, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_SAM_DesfireCreateValueFileAesAuthM(UFR_HANDLE hndUFR, + uint8_t aes_key_nr, + uint32_t aid, + uint8_t file_id, + int32_t lower_limit, + int32_t upper_limit, + int32_t value, + uint8_t limited_credit_enabled, + uint8_t read_key_no, + uint8_t write_key_no, + uint8_t read_write_key_no, + uint8_t change_key_no, + uint8_t communication_settings, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_SAM_DesfireCreateValueFile3k3desAuthM(UFR_HANDLE hndUFR, + uint8_t des3k_key_nr, + uint32_t aid, + uint8_t file_id, + int32_t lower_limit, + int32_t upper_limit, + int32_t value, + uint8_t limited_credit_enabled, + uint8_t read_key_no, + uint8_t write_key_no, + uint8_t read_write_key_no, + uint8_t change_key_no, + uint8_t communication_settings, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireCreateValueFile_no_auth_M(UFR_HANDLE hndUFR, + uint32_t aid, + uint8_t file_id, + int32_t lower_limit, + int32_t upper_limit, + int32_t value, + uint8_t limited_credit_enabled, + uint8_t read_key_no, + uint8_t write_key_no, + uint8_t read_write_key_no, + uint8_t change_key_no, + uint8_t communication_settings, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); + +UFR_STATUS DL_API uFR_int_DesfireReadValueFileM(UFR_HANDLE hndUFR, + uint8_t aes_key_nr, + uint32_t aid, + uint8_t aid_key_nr, + uint8_t file_id, + uint8_t communication_settings, + VAR int32_t *value, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireReadValueFile_aesM(UFR_HANDLE hndUFR, + uint8_t aes_key_nr, + uint32_t aid, + uint8_t aid_key_nr, + uint8_t file_id, + uint8_t communication_settings, + VAR int32_t *value, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireReadValueFile_desM(UFR_HANDLE hndUFR, + uint8_t des_key_nr, + uint32_t aid, + uint8_t aid_key_nr, + uint8_t file_id, + uint8_t communication_settings, + VAR int32_t *value, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireReadValueFile_2k3desM(UFR_HANDLE hndUFR, + uint8_t des2k_key_nr, + uint32_t aid, + uint8_t aid_key_nr, + uint8_t file_id, + uint8_t communication_settings, + VAR int32_t *value, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireReadValueFile_3k3desM(UFR_HANDLE hndUFR, + uint8_t des3k_key_nr, + uint32_t aid, + uint8_t aid_key_nr, + uint8_t file_id, + uint8_t communication_settings, + VAR int32_t *value, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireReadValueFile_PK_M(UFR_HANDLE hndUFR, + IN uint8_t *aes_key_ext, + uint32_t aid, + uint8_t aid_key_nr, + uint8_t file_id, + uint8_t communication_settings, + VAR int32_t *value, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireReadValueFile_aes_PK_M(UFR_HANDLE hndUFR, + IN uint8_t *aes_key_ext, + uint32_t aid, + uint8_t aid_key_nr, + uint8_t file_id, + uint8_t communication_settings, + VAR int32_t *value, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireReadValueFile_des_PK_M(UFR_HANDLE hndUFR, + IN uint8_t *des_key_ext, + uint32_t aid, + uint8_t aid_key_nr, + uint8_t file_id, + uint8_t communication_settings, + VAR int32_t *value, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireReadValueFile_2k3des_PK_M(UFR_HANDLE hndUFR, + IN uint8_t *des2k_key_ext, + uint32_t aid, + uint8_t aid_key_nr, + uint8_t file_id, + uint8_t communication_settings, + VAR int32_t *value, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireReadValueFile_3k3des_PK_M(UFR_HANDLE hndUFR, + IN uint8_t *des3k_key_ext, + uint32_t aid, + uint8_t aid_key_nr, + uint8_t file_id, + uint8_t communication_settings, + VAR int32_t *value, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_SAM_DesfireReadValueFileAesAuthM(UFR_HANDLE hndUFR, + uint8_t aes_key_nr, + uint32_t aid, + uint8_t aid_key_nr, + uint8_t file_id, + uint8_t communication_settings, + VAR int32_t *value, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_SAM_DesfireReadValueFile3k3desAuthM(UFR_HANDLE hndUFR, + uint8_t des3k_key_nr, + uint32_t aid, + uint8_t aid_key_nr, + uint8_t file_id, + uint8_t communication_settings, + VAR int32_t *value, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireReadValueFile_no_auth_M(UFR_HANDLE hndUFR, + uint32_t aid, + uint8_t aid_key_nr, + uint8_t file_id, + uint8_t communication_settings, + VAR int32_t *value, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); + +UFR_STATUS DL_API uFR_int_DesfireIncreaseValueFileM(UFR_HANDLE hndUFR, + uint8_t aes_key_nr, + uint32_t aid, + uint8_t aid_key_nr, + uint8_t file_id, + uint8_t communication_settings, + uint32_t value, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireIncreaseValueFile_aesM(UFR_HANDLE hndUFR, + uint8_t aes_key_nr, + uint32_t aid, + uint8_t aid_key_nr, + uint8_t file_id, + uint8_t communication_settings, + uint32_t value, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireIncreaseValueFile_desM(UFR_HANDLE hndUFR, + uint8_t des_key_nr, + uint32_t aid, + uint8_t aid_key_nr, + uint8_t file_id, + uint8_t communication_settings, + uint32_t value, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireIncreaseValueFile_2k3desM(UFR_HANDLE hndUFR, + uint8_t des2k_key_nr, + uint32_t aid, + uint8_t aid_key_nr, + uint8_t file_id, + uint8_t communication_settings, + uint32_t value, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireIncreaseValueFile_3k3desM(UFR_HANDLE hndUFR, + uint8_t des3k_key_nr, + uint32_t aid, + uint8_t aid_key_nr, + uint8_t file_id, + uint8_t communication_settings, + uint32_t value, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireIncreaseValueFile_PK_M(UFR_HANDLE hndUFR, + IN uint8_t *aes_key_ext, + uint32_t aid, + uint8_t aid_key_nr, + uint8_t file_id, + uint8_t communication_settings, + uint32_t value, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireIncreaseValueFile_aes_PK_M(UFR_HANDLE hndUFR, + IN uint8_t *aes_key_ext, + uint32_t aid, + uint8_t aid_key_nr, + uint8_t file_id, + uint8_t communication_settings, + uint32_t value, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireIncreaseValueFile_des_PK_M(UFR_HANDLE hndUFR, + IN uint8_t *des_key_ext, + uint32_t aid, + uint8_t aid_key_nr, + uint8_t file_id, + uint8_t communication_settings, + uint32_t value, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireIncreaseValueFile_2k3des_PK_M(UFR_HANDLE hndUFR, + IN uint8_t *des2k_key_ext, + uint32_t aid, + uint8_t aid_key_nr, + uint8_t file_id, + uint8_t communication_settings, + uint32_t value, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireIncreaseValueFile_3k3des_PK_M(UFR_HANDLE hndUFR, + IN uint8_t *des3k_key_ext, + uint32_t aid, + uint8_t aid_key_nr, + uint8_t file_id, + uint8_t communication_settings, + uint32_t value, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_SAM_DesfireIncreaseValueFileAesAuthM(UFR_HANDLE hndUFR, + uint8_t aes_key_nr, + uint32_t aid, + uint8_t aid_key_nr, + uint8_t file_id, + uint8_t communication_settings, + uint32_t value, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_SAM_DesfireIncreaseValueFile3k3desAuthM(UFR_HANDLE hndUFR, + uint8_t des3k_key_nr, + uint32_t aid, + uint8_t aid_key_nr, + uint8_t file_id, + uint8_t communication_settings, + uint32_t value, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireIncreaseValueFile_no_auth_M(UFR_HANDLE hndUFR, + uint32_t aid, + uint8_t aid_key_nr, + uint8_t file_id, + uint8_t communication_settings, + uint32_t value, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); + +UFR_STATUS DL_API uFR_int_DesfireDecreaseValueFileM(UFR_HANDLE hndUFR, + uint8_t aes_key_nr, + uint32_t aid, + uint8_t aid_key_nr, + uint8_t file_id, + uint8_t communication_settings, + uint32_t value, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireDecreaseValueFile_aesM(UFR_HANDLE hndUFR, + uint8_t aes_key_nr, + uint32_t aid, + uint8_t aid_key_nr, + uint8_t file_id, + uint8_t communication_settings, + uint32_t value, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireDecreaseValueFile_desM(UFR_HANDLE hndUFR, + uint8_t des_key_nr, + uint32_t aid, + uint8_t aid_key_nr, + uint8_t file_id, + uint8_t communication_settings, + uint32_t value, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireDecreaseValueFile_2k3desM(UFR_HANDLE hndUFR, + uint8_t des2k_key_nr, + uint32_t aid, + uint8_t aid_key_nr, + uint8_t file_id, + uint8_t communication_settings, + uint32_t value, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireDecreaseValueFile_3k3desM(UFR_HANDLE hndUFR, + uint8_t des3k_key_nr, + uint32_t aid, + uint8_t aid_key_nr, + uint8_t file_id, + uint8_t communication_settings, + uint32_t value, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireDecreaseValueFile_PK_M(UFR_HANDLE hndUFR, + IN uint8_t *aes_key_ext, + uint32_t aid, + uint8_t aid_key_nr, + uint8_t file_id, + uint8_t communication_settings, + uint32_t value, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireDecreaseValueFile_aes_PK_M(UFR_HANDLE hndUFR, + IN uint8_t *aes_key_ext, + uint32_t aid, + uint8_t aid_key_nr, + uint8_t file_id, + uint8_t communication_settings, + uint32_t value, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireDecreaseValueFile_des_PK_M(UFR_HANDLE hndUFR, + IN uint8_t *des_key_ext, + uint32_t aid, + uint8_t aid_key_nr, + uint8_t file_id, + uint8_t communication_settings, + uint32_t value, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireDecreaseValueFile_2k3des_PK_M(UFR_HANDLE hndUFR, + IN uint8_t *des2k_key_ext, + uint32_t aid, + uint8_t aid_key_nr, + uint8_t file_id, + uint8_t communication_settings, + uint32_t value, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireDecreaseValueFile_3k3des_PK_M(UFR_HANDLE hndUFR, + IN uint8_t *des3k_key_ext, + uint32_t aid, + uint8_t aid_key_nr, + uint8_t file_id, + uint8_t communication_settings, + uint32_t value, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_SAM_DesfireDecreaseValueFileAesAuthM(UFR_HANDLE hndUFR, + uint8_t aes_key_nr, + uint32_t aid, + uint8_t aid_key_nr, + uint8_t file_id, + uint8_t communication_settings, + uint32_t value, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_SAM_DesfireDecreaseValueFile3k3desAuthM(UFR_HANDLE hndUFR, + uint8_t des3k_key_nr, + uint32_t aid, + uint8_t aid_key_nr, + uint8_t file_id, + uint8_t communication_settings, + uint32_t value, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireDecreaseValueFile_no_auth_M(UFR_HANDLE hndUFR, + uint32_t aid, + uint8_t aid_key_nr, + uint8_t file_id, + uint8_t communication_settings, + uint32_t value, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); + +UFR_STATUS DL_API uFR_int_DesfireGetApplicationIdsM(UFR_HANDLE hndUFR, + uint8_t aes_key_nr, + OUT uint32_t *application_ids, + VAR uint8_t *number_of_aplication_ids, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireGetApplicationIds_aesM(UFR_HANDLE hndUFR, + uint8_t aes_key_nr, + OUT uint32_t *application_ids, + VAR uint8_t *number_of_aplication_ids, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireGetApplicationIds_desM(UFR_HANDLE hndUFR, + uint8_t des_key_nr, + OUT uint32_t *application_ids, + VAR uint8_t *number_of_aplication_ids, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireGetApplicationIds_2k3desM(UFR_HANDLE hndUFR, + uint8_t des2k_key_nr, + OUT uint32_t *application_ids, + VAR uint8_t *number_of_aplication_ids, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireGetApplicationIds_3k3desM(UFR_HANDLE hndUFR, + uint8_t des3k_key_nr, + OUT uint32_t *application_ids, + VAR uint8_t *number_of_aplication_ids, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_SAM_DesfireGetApplicationIdsAesAuthM(UFR_HANDLE hndUFR, + uint8_t aes_key_nr, + OUT uint32_t *application_ids, + VAR uint8_t *number_of_aplication_ids, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_SAM_DesfireGetApplicationIds3k3desAuthM(UFR_HANDLE hndUFR, + uint8_t des3k_key_nr, + OUT uint32_t *application_ids, + VAR uint8_t *number_of_aplication_ids, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireGetApplicationIds_PK_M(UFR_HANDLE hndUFR, + IN uint8_t *aes_key_ext, + OUT uint32_t *application_ids, + VAR uint8_t *number_of_aplication_ids, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireGetApplicationIds_aes_PK_M(UFR_HANDLE hndUFR, + IN uint8_t *aes_key_ext, + OUT uint32_t *application_ids, + VAR uint8_t *number_of_aplication_ids, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireGetApplicationIds_des_PK_M(UFR_HANDLE hndUFR, + IN uint8_t *des_key_ext, + OUT uint32_t *application_ids, + VAR uint8_t *number_of_aplication_ids, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireGetApplicationIds_2k3aes_PK_M(UFR_HANDLE hndUFR, + IN uint8_t *des2k_key_ext, + OUT uint32_t *application_ids, + VAR uint8_t *number_of_aplication_ids, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireGetApplicationIds_3k3des_PK_M(UFR_HANDLE hndUFR, + IN uint8_t *des3k_key_ext, + OUT uint32_t *application_ids, + VAR uint8_t *number_of_aplication_ids, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireGetApplicationIds_no_auth_M(UFR_HANDLE hndUFR, + OUT uint32_t *application_ids, + VAR uint8_t *number_of_aplication_ids, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); + +UFR_STATUS DL_API uFR_int_DesfireCreateLinearRecordFile_aesM(UFR_HANDLE hndUFR, + uint8_t aes_key_nr, + uint32_t aid, + uint8_t file_id, + uint32_t record_size, + uint32_t max_rec_no, + uint8_t read_key_no, + uint8_t write_key_no, + uint8_t read_write_key_no, + uint8_t change_key_no, + uint8_t communication_settings, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireCreateLinearRecordFile_desM(UFR_HANDLE hndUFR, + uint8_t des_key_nr, + uint32_t aid, + uint8_t file_id, + uint32_t record_size, + uint32_t max_rec_no, + uint8_t read_key_no, + uint8_t write_key_no, + uint8_t read_write_key_no, + uint8_t change_key_no, + uint8_t communication_settings, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireCreateLinearRecordFile_2k3desM(UFR_HANDLE hndUFR, + uint8_t des2k_key_nr, + uint32_t aid, + uint8_t file_id, + uint32_t record_size, + uint32_t max_rec_no, + uint8_t read_key_no, + uint8_t write_key_no, + uint8_t read_write_key_no, + uint8_t change_key_no, + uint8_t communication_settings, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireCreateLinearRecordFile_3k3desM(UFR_HANDLE hndUFR, + uint8_t des3k_key_nr, + uint32_t aid, + uint8_t file_id, + uint32_t record_size, + uint32_t max_rec_no, + uint8_t read_key_no, + uint8_t write_key_no, + uint8_t read_write_key_no, + uint8_t change_key_no, + uint8_t communication_settings, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_SAM_DesfireCreateLinearRecordFileAesAuthM(UFR_HANDLE hndUFR, + uint8_t aes_key_nr, + uint32_t aid, + uint8_t file_id, + uint32_t record_size, + uint32_t max_rec_no, + uint8_t read_key_no, + uint8_t write_key_no, + uint8_t read_write_key_no, + uint8_t change_key_no, + uint8_t communication_settings, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_SAM_DesfireCreateLinearRecordFile3k3desAuthM(UFR_HANDLE hndUFR, + uint8_t des3k_key_nr, + uint32_t aid, + uint8_t file_id, + uint32_t record_size, + uint32_t max_rec_no, + uint8_t read_key_no, + uint8_t write_key_no, + uint8_t read_write_key_no, + uint8_t change_key_no, + uint8_t communication_settings, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireCreateLinearRecordFile_aes_PK_M(UFR_HANDLE hndUFR, + IN uint8_t *aes_key_ext, + uint32_t aid, + uint8_t file_id, + uint32_t record_size, + uint32_t max_rec_no, + uint8_t read_key_no, + uint8_t write_key_no, + uint8_t read_write_key_no, + uint8_t change_key_no, + uint8_t communication_settings, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireCreateLinearRecordFile_des_PK_M(UFR_HANDLE hndUFR, + IN uint8_t *des_key_ext, + uint32_t aid, + uint8_t file_id, + uint32_t record_size, + uint32_t max_rec_no, + uint8_t read_key_no, + uint8_t write_key_no, + uint8_t read_write_key_no, + uint8_t change_key_no, + uint8_t communication_settings, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireCreateLinearRecordFile_2k3des_PK_M(UFR_HANDLE hndUFR, + IN uint8_t *des2k_key_ext, + uint32_t aid, + uint8_t file_id, + uint32_t record_size, + uint32_t max_rec_no, + uint8_t read_key_no, + uint8_t write_key_no, + uint8_t read_write_key_no, + uint8_t change_key_no, + uint8_t communication_settings, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireCreateLinearRecordFile_3k3des_PK_M(UFR_HANDLE hndUFR, + IN uint8_t *des3k_key_ext, + uint32_t aid, + uint8_t file_id, + uint32_t record_size, + uint32_t max_rec_no, + uint8_t read_key_no, + uint8_t write_key_no, + uint8_t read_write_key_no, + uint8_t change_key_no, + uint8_t communication_settings, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireCreateLinearRecordFile_no_authM(UFR_HANDLE hndUFR, + uint32_t aid, + uint8_t file_id, + uint32_t record_size, + uint32_t max_rec_no, + uint8_t read_key_no, + uint8_t write_key_no, + uint8_t read_write_key_no, + uint8_t change_key_no, + uint8_t communication_settings, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); + +UFR_STATUS DL_API uFR_int_DesfireCreateCyclicRecordFile_aesM(UFR_HANDLE hndUFR, + uint8_t aes_key_nr, + uint32_t aid, + uint8_t file_id, + uint32_t record_size, + uint32_t max_rec_no, + uint8_t read_key_no, + uint8_t write_key_no, + uint8_t read_write_key_no, + uint8_t change_key_no, + uint8_t communication_settings, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireCreateCyclicRecordFile_desM(UFR_HANDLE hndUFR, + uint8_t des_key_nr, + uint32_t aid, + uint8_t file_id, + uint32_t record_size, + uint32_t max_rec_no, + uint8_t read_key_no, + uint8_t write_key_no, + uint8_t read_write_key_no, + uint8_t change_key_no, + uint8_t communication_settings, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireCreateCyclicRecordFile_2k3desM(UFR_HANDLE hndUFR, + uint8_t des2k_key_nr, + uint32_t aid, + uint8_t file_id, + uint32_t record_size, + uint32_t max_rec_no, + uint8_t read_key_no, + uint8_t write_key_no, + uint8_t read_write_key_no, + uint8_t change_key_no, + uint8_t communication_settings, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireCreateCyclicRecordFile_3k3desM(UFR_HANDLE hndUFR, + uint8_t des3k_key_nr, + uint32_t aid, + uint8_t file_id, + uint32_t record_size, + uint32_t max_rec_no, + uint8_t read_key_no, + uint8_t write_key_no, + uint8_t read_write_key_no, + uint8_t change_key_no, + uint8_t communication_settings, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_SAM_DesfireCreateCyclicRecordFileAesAuthM(UFR_HANDLE hndUFR, + uint8_t aes_key_nr, + uint32_t aid, + uint8_t file_id, + uint32_t record_size, + uint32_t max_rec_no, + uint8_t read_key_no, + uint8_t write_key_no, + uint8_t read_write_key_no, + uint8_t change_key_no, + uint8_t communication_settings, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_SAM_DesfireCreateCyclicRecordFile3k3desAuthM(UFR_HANDLE hndUFR, + uint8_t des3k_key_nr, + uint32_t aid, + uint8_t file_id, + uint32_t record_size, + uint32_t max_rec_no, + uint8_t read_key_no, + uint8_t write_key_no, + uint8_t read_write_key_no, + uint8_t change_key_no, + uint8_t communication_settings, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireCreateCyclicRecordFile_aes_PK_M(UFR_HANDLE hndUFR, + IN uint8_t *aes_key_ext, + uint32_t aid, + uint8_t file_id, + uint32_t record_size, + uint32_t max_rec_no, + uint8_t read_key_no, + uint8_t write_key_no, + uint8_t read_write_key_no, + uint8_t change_key_no, + uint8_t communication_settings, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireCreateCyclicRecordFile_des_PK_M(UFR_HANDLE hndUFR, + IN uint8_t *des_key_ext, + uint32_t aid, + uint8_t file_id, + uint32_t record_size, + uint32_t max_rec_no, + uint8_t read_key_no, + uint8_t write_key_no, + uint8_t read_write_key_no, + uint8_t change_key_no, + uint8_t communication_settings, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireCreateCyclicRecordFile_2k3des_PK_M(UFR_HANDLE hndUFR, + IN uint8_t *des2k_key_ext, + uint32_t aid, + uint8_t file_id, + uint32_t record_size, + uint32_t max_rec_no, + uint8_t read_key_no, + uint8_t write_key_no, + uint8_t read_write_key_no, + uint8_t change_key_no, + uint8_t communication_settings, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireCreateCyclicRecordFile_3k3des_PK_M(UFR_HANDLE hndUFR, + IN uint8_t *des3k_key_ext, + uint32_t aid, + uint8_t file_id, + uint32_t record_size, + uint32_t max_rec_no, + uint8_t read_key_no, + uint8_t write_key_no, + uint8_t read_write_key_no, + uint8_t change_key_no, + uint8_t communication_settings, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireCreateCyclicRecordFile_no_authM(UFR_HANDLE hndUFR, + uint32_t aid, + uint8_t file_id, + uint32_t record_size, + uint32_t max_rec_no, + uint8_t read_key_no, + uint8_t write_key_no, + uint8_t read_write_key_no, + uint8_t change_key_no, + uint8_t communication_settings, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); + +UFR_STATUS DL_API uFR_int_DesfireWriteRecord_aesM(UFR_HANDLE hndUFR, + uint8_t aes_key_nr, + uint32_t aid, + uint8_t aid_key_nr, + uint8_t file_id, + uint16_t offset, + uint16_t data_length, + uint8_t communication_settings, + uint8_t *data, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireWriteRecord_desM(UFR_HANDLE hndUFR, + uint8_t des_key_nr, + uint32_t aid, + uint8_t aid_key_nr, + uint8_t file_id, + uint16_t offset, + uint16_t data_length, + uint8_t communication_settings, + uint8_t *data, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireWriteRecord_2k3desM(UFR_HANDLE hndUFR, + uint8_t des2k_key_nr, + uint32_t aid, + uint8_t aid_key_nr, + uint8_t file_id, + uint16_t offset, + uint16_t data_length, + uint8_t communication_settings, + uint8_t *data, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireWriteRecord_3k3desM(UFR_HANDLE hndUFR, + uint8_t des3k_key_nr, + uint32_t aid, + uint8_t aid_key_nr, + uint8_t file_id, + uint16_t offset, + uint16_t data_length, + uint8_t communication_settings, + uint8_t *data, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_SAM_DesfireWriteRecordAesAuthM(UFR_HANDLE hndUFR, + uint8_t aes_key_nr, + uint32_t aid, + uint8_t aid_key_nr, + uint8_t file_id, + uint16_t offset, + uint16_t data_length, + uint8_t communication_settings, + IN uint8_t *data, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_SAM_DesfireWriteRecord3k3desAuthM(UFR_HANDLE hndUFR, + uint8_t aes_key_nr, + uint32_t aid, + uint8_t aid_key_nr, + uint8_t file_id, + uint16_t offset, + uint16_t data_length, + uint8_t communication_settings, + IN uint8_t *data, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireWriteRecord_aes_PK_M(UFR_HANDLE hndUFR, + IN uint8_t *aes_key_ext, + uint32_t aid, + uint8_t aid_key_nr, + uint8_t file_id, + uint16_t offset, + uint16_t data_length, + uint8_t communication_settings, + IN uint8_t *data, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireWriteRecord_des_PK_M(UFR_HANDLE hndUFR, + IN uint8_t *des_key_ext, + uint32_t aid, + uint8_t aid_key_nr, + uint8_t file_id, + uint16_t offset, + uint16_t data_length, + uint8_t communication_settings, + IN uint8_t *data, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireWriteRecord_2k3des_PK_M(UFR_HANDLE hndUFR, + IN uint8_t *des2k_key_ext, + uint32_t aid, + uint8_t aid_key_nr, + uint8_t file_id, + uint16_t offset, + uint16_t data_length, + uint8_t communication_settings, + IN uint8_t *data, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireWriteRecord_3k3des_PK_M(UFR_HANDLE hndUFR, + IN uint8_t *des3k_key_ext, + uint32_t aid, + uint8_t aid_key_nr, + uint8_t file_id, + uint16_t offset, + uint16_t data_length, + uint8_t communication_settings, + IN uint8_t *data, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireWriteRecord_no_authM(UFR_HANDLE hndUFR, + uint32_t aid, + uint8_t aid_key_nr, + uint8_t file_id, + uint16_t offset, + uint16_t data_length, + uint8_t communication_settings, + IN uint8_t *data, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); + +UFR_STATUS DL_API uFR_int_DesfireReadRecords_aesM(UFR_HANDLE hndUFR, + uint8_t aes_key_nr, + uint32_t aid, + uint8_t aid_key_nr, + uint8_t file_id, + uint16_t offset, + uint16_t number_of_records, + uint16_t record_size, + uint8_t communication_settings, + OUT uint8_t *data, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireReadRecords_desM(UFR_HANDLE hndUFR, + uint8_t des_key_nr, + uint32_t aid, + uint8_t aid_key_nr, + uint8_t file_id, + uint16_t offset, + uint16_t number_of_records, + uint16_t record_size, + uint8_t communication_settings, + OUT uint8_t *data, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireReadRecords_2k3desM(UFR_HANDLE hndUFR, + uint8_t des2k_key_nr, + uint32_t aid, + uint8_t aid_key_nr, + uint8_t file_id, + uint16_t offset, + uint16_t number_of_records, + uint16_t record_size, + uint8_t communication_settings, + OUT uint8_t *data, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireReadRecords_3k3desM(UFR_HANDLE hndUFR, + uint8_t des3k_key_nr, + uint32_t aid, + uint8_t aid_key_nr, + uint8_t file_id, + uint16_t offset, + uint16_t number_of_records, + uint16_t record_size, + uint8_t communication_settings, + OUT uint8_t *data, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_SAM_DesfireReadRecordsAesAuthM(UFR_HANDLE hndUFR, + uint8_t aes_key_nr, + uint32_t aid, + uint8_t aid_key_nr, + uint8_t file_id, + uint16_t offset, + uint16_t number_of_records, + uint16_t record_size, + uint8_t communication_settings, + OUT uint8_t *data, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_SAM_DesfireReadRecords3k3desAuthM(UFR_HANDLE hndUFR, + uint8_t aes_key_nr, + uint32_t aid, + uint8_t aid_key_nr, + uint8_t file_id, + uint16_t offset, + uint16_t number_of_records, + uint16_t record_size, + uint8_t communication_settings, + OUT uint8_t *data, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireReadRecords_aes_PK_M(UFR_HANDLE hndUFR, + IN uint8_t *aes_key_ext, + uint32_t aid, + uint8_t aid_key_nr, + uint8_t file_id, + uint16_t offset, + uint16_t number_of_records, + uint16_t record_size, + uint8_t communication_settings, + OUT uint8_t *data, + VAR uint16_t *card_status, VAR + uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireReadRecords_des_PK_M(UFR_HANDLE hndUFR, + IN uint8_t *des_key_ext, + uint32_t aid, + uint8_t aid_key_nr, + uint8_t file_id, + uint16_t offset, + uint16_t number_of_records, + uint16_t record_size, + uint8_t communication_settings, + OUT uint8_t *data, + VAR uint16_t *card_status, VAR + uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireReadRecords_2k3des_PK_M(UFR_HANDLE hndUFR, + IN uint8_t *des2k_key_ext, + uint32_t aid, + uint8_t aid_key_nr, + uint8_t file_id, + uint16_t offset, + uint16_t number_of_records, + uint16_t record_size, + uint8_t communication_settings, + OUT uint8_t *data, + VAR uint16_t *card_status, VAR + uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireReadRecords_3k3des_PK_M(UFR_HANDLE hndUFR, + IN uint8_t *des3k_key_ext, + uint32_t aid, + uint8_t aid_key_nr, + uint8_t file_id, + uint16_t offset, + uint16_t number_of_records, + uint16_t record_size, + uint8_t communication_settings, + OUT uint8_t *data, + VAR uint16_t *card_status, VAR + uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireReadRecords_no_authM(UFR_HANDLE hndUFR, + uint32_t aid, + uint8_t aid_key_nr, + uint8_t file_id, + uint16_t offset, + uint16_t number_of_records, + uint16_t record_size, + uint8_t communication_settings, + uint8_t *data, + uint16_t *card_status, + uint16_t *exec_time); + +UFR_STATUS DL_API uFR_int_DesfireClearRecordFile_aesM(UFR_HANDLE hndUFR, + uint8_t aes_key_nr, + uint32_t aid, + uint8_t file_id, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireClearRecordFile_desM(UFR_HANDLE hndUFR, + uint8_t des_key_nr, + uint32_t aid, + uint8_t file_id, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireClearRecordFile_2k3desM(UFR_HANDLE hndUFR, + uint8_t des2k_key_nr, + uint32_t aid, + uint8_t file_id, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireClearRecordFile_3k3desM(UFR_HANDLE hndUFR, + uint8_t des3k_key_nr, + uint32_t aid, + uint8_t file_id, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_SAM_DesfireClearRecordFileAesAuthM(UFR_HANDLE hndUFR, + uint8_t aes_key_nr, + uint32_t aid, + uint8_t file_id, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_SAM_DesfireClearRecordFile3k3desAuthM(UFR_HANDLE hndUFR, + uint8_t des3k_key_nr, + uint32_t aid, + uint8_t file_id, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireClearRecordFile_PK_M(UFR_HANDLE hndUFR, + IN uint8_t *aes_key_ext, + uint32_t aid, + uint8_t file_id, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireClearRecordFile_aes_PK_M(UFR_HANDLE hndUFR, + IN uint8_t *aes_key_ext, + uint32_t aid, + uint8_t file_id, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireClearRecordFile_des_PK_M(UFR_HANDLE hndUFR, + IN uint8_t *des_key_ext, + uint32_t aid, + uint8_t file_id, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireClearRecordFile_2k3des_PK_M(UFR_HANDLE hndUFR, + IN uint8_t *des2k_key_ext, + uint32_t aid, + uint8_t file_id, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireClearRecordFile_3k3des_PK_M(UFR_HANDLE hndUFR, + IN uint8_t *des3k_key_ext, + uint32_t aid, + uint8_t file_id, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +UFR_STATUS DL_API uFR_int_DesfireClearRecordFile_no_authM(UFR_HANDLE hndUFR, + uint32_t aid, + uint8_t file_id, + VAR uint16_t *card_status, + VAR uint16_t *exec_time); +//--------------------------------------------------------------------------------------------- + +UFR_STATUS DL_API GreenLedBlinkingTurnOnM(UFR_HANDLE hndUFR); + +UFR_STATUS DL_API GreenLedBlinkingTurnOffM(UFR_HANDLE hndUFR); + +///////////////////////////////////////////////////////////////////// + +UFR_STATUS DL_API SetRfAnalogRegistersTypeAM(UFR_HANDLE hndUFR, + uint8_t ThresholdMinLevel, + uint8_t ThresholdCollLevel, + uint8_t RFLevelAmp, + uint8_t RxGain, + uint8_t RFLevel); + +UFR_STATUS DL_API SetRfAnalogRegistersTypeBM(UFR_HANDLE hndUFR, + uint8_t ThresholdMinLevel, + uint8_t ThresholdCollLevel, + uint8_t RFLevelAmp, + uint8_t RxGain, + uint8_t RFLevel); + +UFR_STATUS DL_API SetRfAnalogRegistersISO14443_212M(UFR_HANDLE hndUFR, + uint8_t ThresholdMinLevel, + uint8_t ThresholdCollLevel, + uint8_t RFLevelAmp, + uint8_t RxGain, + uint8_t RFLevel); + +UFR_STATUS DL_API SetRfAnalogRegistersISO14443_424M(UFR_HANDLE hndUFR, + uint8_t ThresholdMinLevel, + uint8_t ThresholdCollLevel, + uint8_t RFLevelAmp, + uint8_t RxGain, + uint8_t RFLevel); + +UFR_STATUS DL_API SetRfAnalogRegistersTypeADefaultM(UFR_HANDLE hndUFR); + +UFR_STATUS DL_API SetRfAnalogRegistersTypeBDefaultM(UFR_HANDLE hndUFR); + +UFR_STATUS DL_API SetRfAnalogRegistersISO14443_212DefaultM(UFR_HANDLE hndUFR); + +UFR_STATUS DL_API SetRfAnalogRegistersISO14443_424DefaultM(UFR_HANDLE hndUFR); + +UFR_STATUS DL_API GetRfAnalogRegistersTypeAM(UFR_HANDLE hndUFR, + VAR uint8_t *ThresholdMinLevel, + VAR uint8_t *ThresholdCollLevel, + VAR uint8_t *RFLevelAmp, + VAR uint8_t *RxGain, + VAR uint8_t *RFLevel); + +UFR_STATUS DL_API GetRfAnalogRegistersTypeBM(UFR_HANDLE hndUFR, + VAR uint8_t *ThresholdMinLevel, + VAR uint8_t *ThresholdCollLevel, + VAR uint8_t *RFLevelAmp, + VAR uint8_t *RxGain, + VAR uint8_t *RFLevel); + +UFR_STATUS DL_API GetRfAnalogRegistersISO14443_212M(UFR_HANDLE hndUFR, + VAR uint8_t *ThresholdMinLevel, + VAR uint8_t *ThresholdCollLevel, + VAR uint8_t *RFLevelAmp, + VAR uint8_t *RxGain, + VAR uint8_t *RFLevel); + +UFR_STATUS DL_API GetRfAnalogRegistersISO14443_424M(UFR_HANDLE hndUFR, + VAR uint8_t *ThresholdMinLevel, + VAR uint8_t *ThresholdCollLevel, + VAR uint8_t *RFLevelAmp, + VAR uint8_t *RxGain, + VAR uint8_t *RFLevel); + +UFR_STATUS DL_API SetRfAnalogRegistersTypeATransM(UFR_HANDLE hndUFR, + uint8_t ThresholdMinLevel, + uint8_t ThresholdCollLevel, + uint8_t RFLevelAmp, + uint8_t RxGain, + uint8_t RFLevel, + uint8_t CWGsNOn, + uint8_t ModGsNOn, + uint8_t CWGsP, + uint8_t CWGsNOff, + uint8_t ModGsNOff); + +UFR_STATUS DL_API SetRfAnalogRegistersTypeBTransM(UFR_HANDLE hndUFR, + uint8_t ThresholdMinLevel, + uint8_t ThresholdCollLevel, + uint8_t RFLevelAmp, + uint8_t RxGain, + uint8_t RFLevel, + uint8_t CWGsNOn, + uint8_t ModGsNOn, + uint8_t CWGsP, + uint8_t ModGsP); + +UFR_STATUS DL_API GetRfAnalogRegistersTypeATransM(UFR_HANDLE hndUFR, + VAR uint8_t *ThresholdMinLevel, + VAR uint8_t *ThresholdCollLevel, + VAR uint8_t *RFLevelAmp, + VAR uint8_t *RxGain, + VAR uint8_t *RFLevel, + VAR uint8_t *CWGsNOn, + VAR uint8_t *ModGsNOn, + VAR uint8_t *CWGsP, + VAR uint8_t *CWGsNOff, + VAR uint8_t *ModGsNOff); + +UFR_STATUS DL_API GetRfAnalogRegistersTypeBTransM(UFR_HANDLE hndUFR, + VAR uint8_t *ThresholdMinLevel, + VAR uint8_t *ThresholdCollLevel, + VAR uint8_t *RFLevelAmp, + VAR uint8_t *RxGain, + VAR uint8_t *RFLevel, + VAR uint8_t *CWGsNOn, + VAR uint8_t *ModGsNOn, + VAR uint8_t *CWGsP, + VAR uint8_t *ModGsP); + +UFR_STATUS DL_API FastFlashCheckM(UFR_HANDLE hndUFR); +UFR_STATUS DL_API DefaultBaudrateFlashCheckM(UFR_HANDLE hndUFR); + +UFR_STATUS DL_API GetReaderParametersM(UFR_HANDLE hndUFR, uint8_t *mui, uint8_t *serial_nr, + uint8_t *hw_type, uint8_t *hw_ver, uint8_t *device_type, + uint8_t *fw_ver_major, uint8_t *fw_ver_minor, uint8_t *fw_ver_build); + +//SAM +UFR_STATUS DL_API SAM_get_version_rawM(UFR_HANDLE hndUFR, + OUT uint8_t *data, + VAR uint8_t *length); +UFR_STATUS DL_API SAM_get_versionM(UFR_HANDLE hndUFR, + VAR SAM_HW_TYPE *sam_type, + VAR uint8_t *sam_uid); +UFR_STATUS DL_API SAM_get_key_entry_rawM(UFR_HANDLE hndUFR, + uint8_t key_no, + OUT uint8_t *key_entry, + VAR uint8_t *key_length, + OUT uint8_t *apdu_sw); +UFR_STATUS DL_API SAM_authenticate_host_no_div_desM(UFR_HANDLE hndUFR, + uint8_t key_no, + uint8_t key_v, + IN uint8_t *des_key); +UFR_STATUS DL_API SAM_pre_pesonalization_master_AES128_keyM(UFR_HANDLE hndUFR, + IN uint8_t *aes_key_ver_a, + uint8_t ver_a, + IN uint8_t *aes_key_ver_b, + uint8_t ver_b, + IN uint8_t *aes_key_ver_c, + uint8_t ver_c, + OUT uint8_t *apdu_sw); +UFR_STATUS DL_API SAM_pre_personalization_switch_to_AV2_modeM(UFR_HANDLE hndUFR, + IN uint8_t *master_aes_key, + uint8_t key_version, + OUT uint8_t *apdu_sw); +UFR_STATUS DL_API SAM_authenticate_host_AV2M(UFR_HANDLE hndUFR, + IN uint8_t *master_aes_key, + uint8_t key_nr, + uint8_t key_version, + uint8_t host_mode, + OUT uint8_t *apdu_sw); +UFR_STATUS DL_API SAM_change_key_entry_mifare_AV2_plain_one_keyM(UFR_HANDLE hndUFR, + uint8_t key_entry_no, + IN uint8_t *keyA, + IN uint8_t *keyB, + uint8_t key_no_CEK, + uint8_t key_v_CEK, + uint8_t ref_no_KUC, + OUT uint8_t *apdu_sw); +UFR_STATUS DL_API SAM_change_key_entry_AES_AV2_plain_one_keyM(UFR_HANDLE hndUFR, + uint8_t key_entry_no, + IN uint8_t *key, + uint8_t key_no_CEK, + uint8_t key_v_CEK, + uint8_t ref_no_KUC, + OUT uint8_t *apdu_sw); +UFR_STATUS DL_API SAM_change_key_entry_3K3DES_AV2_plain_one_keyM(UFR_HANDLE hndUFR, + uint8_t key_entry_no, + IN uint8_t *key, + uint8_t key_no_CEK, + uint8_t key_v_CEK, + uint8_t ref_no_KUC, + OUT uint8_t *apdu_sw); +UFR_STATUS DL_API SAM_change_key_entry_2K3DES_AV2_plain_one_keyM(UFR_HANDLE hndUFR, + uint8_t key_entry_no, + IN uint8_t *key, + uint8_t key_no_CEK, + uint8_t key_v_CEK, + uint8_t ref_no_KUC, + OUT uint8_t *apdu_sw); +UFR_STATUS DL_API SAM_change_key_entry_aes_AV2_plain_host_keyM(UFR_HANDLE hndUFR, + uint8_t key_entry_no, + IN uint8_t *aes_key_ver_a, + uint8_t ver_a, + IN uint8_t *aes_key_ver_b, + uint8_t ver_b, + IN uint8_t *aes_key_ver_c, + uint8_t ver_c, + uint8_t key_no_CEK, + uint8_t key_v_CEK, + uint8_t ref_no_KUC, + uint8_t sam_lock_unlock, + OUT uint8_t *apdu_sw); +UFR_STATUS DL_API WriteSamUnlockKeyM(UFR_HANDLE hndUFR, + uint8_t key_no, + uint8_t key_ver, + IN uint8_t *aes_key); + +//MIFARE PLUS +UFR_STATUS DL_API MFP_WritePersoM(UFR_HANDLE hndUFR, + uint16_t address, + IN uint8_t *data); +UFR_STATUS DL_API MFP_CommitPersoM(UFR_HANDLE hndUFR); +UFR_STATUS DL_API MFP_PersonalizationMinimalM(UFR_HANDLE hndUFR, + IN uint8_t *card_master_key, + IN uint8_t *card_config_key, + IN uint8_t *level_2_switch_key, + IN uint8_t *level_3_switch_key, + IN uint8_t *level_1_auth_key, + IN uint8_t *select_vc_key, + IN uint8_t *prox_chk_key, + IN uint8_t *vc_poll_enc_key, + IN uint8_t *vc_poll_mac_key); + +UFR_STATUS DL_API MFP_SwitchToSecurityLevel3M(UFR_HANDLE hndUFR, + uint8_t key_index); +UFR_STATUS DL_API MFP_SwitchToSecurityLevel3_PKM(UFR_HANDLE hndUFR, + IN uint8_t *aes_key); + +UFR_STATUS DL_API MFP_AesAuthSecurityLevel1M(UFR_HANDLE hndUFR, + uint8_t key_index); +UFR_STATUS DL_API MFP_AesAuthSecurityLevel1_PKM(UFR_HANDLE hndUFR, + IN uint8_t *aes_key); + +UFR_STATUS DL_API MFP_ChangeMasterKeyM(UFR_HANDLE hndUFR, + uint8_t key_index, + IN uint8_t *new_key); +UFR_STATUS DL_API MFP_ChangeMasterKeySamKeyM(UFR_HANDLE hndUFR, + uint8_t key_index, + uint8_t new_key_index); +UFR_STATUS DL_API MFP_ChangeMasterKey_PKM(UFR_HANDLE hndUFR, + IN uint8_t *old_key, + IN uint8_t *new_key); + +UFR_STATUS DL_API MFP_ChangeConfigurationKeyM(UFR_HANDLE hndUFR, + uint8_t key_index, + IN uint8_t *new_key); +UFR_STATUS DL_API MFP_ChangeConfigurationKeySamKeyM(UFR_HANDLE hndUFR, + uint8_t key_index, + uint8_t new_key_index); +UFR_STATUS DL_API MFP_ChangeConfigurationKey_PKM(UFR_HANDLE hndUFR, + IN uint8_t *old_key, + IN uint8_t *new_key); + +UFR_STATUS DL_API MFP_FieldConfigurationSetM(UFR_HANDLE hndUFR, + uint8_t configuration_key_index, + uint8_t rid_use, + uint8_t prox_check_use); +UFR_STATUS DL_API MFP_FieldConfigurationSetSamKeyM(UFR_HANDLE hndUFR, + uint8_t configuration_key_index, + uint8_t rid_use, + uint8_t prox_check_use); +UFR_STATUS DL_API MFP_FieldConfigurationSet_PKM(UFR_HANDLE hndUFR, + IN uint8_t *configuration_key, + uint8_t rid_use, + uint8_t prox_check_use); + +UFR_STATUS DL_API MFP_ChangeSectorKeyM(UFR_HANDLE hndUFR, + uint8_t sector_nr, + uint8_t auth_mode, + uint8_t key_index, + IN uint8_t *new_key); +UFR_STATUS DL_API MFP_ChangeSectorKeySamKeyM(UFR_HANDLE hndUFR, + uint8_t sector_nr, + uint8_t auth_mode, + uint8_t key_index, + uint8_t new_key_index); +UFR_STATUS DL_API MFP_ChangeSectorKey_PKM(UFR_HANDLE hndUFR, + uint8_t sector_nr, + uint8_t auth_mode, + IN uint8_t *old_key, + IN uint8_t *new_key); + +UFR_STATUS DL_API MFP_GetUidM(UFR_HANDLE hndUFR, + uint8_t key_index_vc_poll_enc_key, + uint8_t key_index_vc_poll_mac_key, + OUT uint8_t *uid, + VAR uint8_t *uid_len); +UFR_STATUS DL_API MFP_GetUidSamKeyM(UFR_HANDLE hndUFR, + uint8_t key_index_vc_poll_enc_key, + uint8_t key_index_vc_poll_mac_key, + OUT uint8_t *uid, + VAR uint8_t *uid_len); +UFR_STATUS DL_API MFP_GetUid_PKM(UFR_HANDLE hndUFR, + IN uint8_t *vc_poll_enc_key, + IN uint8_t *vc_poll_mac_key, + OUT uint8_t *uid, + VAR uint8_t *uid_len); + +UFR_STATUS DL_API MFP_ChangeVcPollingEncKeyM(UFR_HANDLE hndUFR, + uint8_t configuration_key_index, + IN uint8_t *new_key); +UFR_STATUS DL_API MFP_ChangeVcPollingEncKeySamKeyM(UFR_HANDLE hndUFR, + uint8_t configuration_key_index, + uint8_t new_key_index); +UFR_STATUS DL_API MFP_ChangeVcPollingEncKey_PKM(UFR_HANDLE hndUFR, + IN uint8_t *configuration_key, + IN uint8_t *new_key); + +UFR_STATUS DL_API MFP_ChangeVcPollingMacKeyM(UFR_HANDLE hndUFR, + uint8_t configuration_key_index, + IN uint8_t *new_key); +UFR_STATUS DL_API MFP_ChangeVcPollingMacKeySamKeyM(UFR_HANDLE hndUFR, + uint8_t configuration_key_index, + uint8_t new_key_index); +UFR_STATUS DL_API MFP_ChangeVcPollingMacKey_PKM(UFR_HANDLE hndUFR, + IN uint8_t *configuration_key, + IN uint8_t *new_key); + + +//ULTRALIGHT C +UFR_STATUS DL_API ULC_ExternalAuth_PKM(UFR_HANDLE hndUFR, + IN uint8_t *key); + +UFR_STATUS DL_API ULC_write_3des_key_no_authM(UFR_HANDLE hndUFR, + IN uint8_t *new_3des_key); + +UFR_STATUS DL_API ULC_write_3des_key_factory_keyM(UFR_HANDLE hndUFR, + IN uint8_t *new_3des_key); + +UFR_STATUS DL_API ULC_write_3des_keyM(UFR_HANDLE hndUFR, + IN uint8_t *new_3des_key, + IN uint8_t *old_3des_key); + +//ESP32 +UFR_STATUS DL_API EspSetDisplayData(IN uint8_t *display_data, IN uint8_t data_length, uint16_t duration); +UFR_STATUS DL_API EspReaderReset(void); +UFR_STATUS DL_API EspChangeReaderPassword(IN uint8_t *old_password, IN uint8_t *new_password); +UFR_STATUS DL_API EspReaderEepromWrite(IN uint8_t *data, uint32_t address, uint32_t size, IN uint8_t *password); +UFR_STATUS DL_API EspReaderEepromRead(OUT uint8_t *data, uint32_t address, uint32_t size); +UFR_STATUS DL_API EspGetReaderTime(OUT uint8_t *time); +UFR_STATUS DL_API EspSetReaderTime(IN uint8_t *password, IN uint8_t *time); +UFR_STATUS DL_API EspSetIOState(uint8_t pin, uint8_t state); +UFR_STATUS DL_API EspGetIOState(OUT uint8_t *state); + +//NDEF MESSAGES +//---------------------------------------------------------- + +enum NDEF_STORAGE_MODE +{ + STORE_INTO_READER = 0, + STORE_INTO_CARD +}; + +enum NDEF_SKYPE_ACTION +{ + CALL = 0, + CHAT +}; + +//WiFi NDEF authentication type +enum WIFI_AUTH_TYPE +{ + OPEN = 0, + WPA_PERSONAL, + WPA_ENTERPRISE, + WPA2_ENTERPRISE, + WPA2_PERSONAL +}; + +//WiFi NDEF encryption type +enum WIFI_ENC_TYPE +{ + NONE = 0, + WEP, + TKIP, + AES, + AES_TKIP +}; + +UFR_STATUS DL_API WriteNdefRecord_WiFi(uint8_t ndef_storage, IN const char *ssid, uint8_t auth_type, uint8_t encryption_type, IN const char *password); +UFR_STATUS DL_API WriteNdefRecord_Bluetooth(uint8_t ndef_storage, IN const char *bt_mac_address); +UFR_STATUS DL_API WriteNdefRecord_SMS(uint8_t ndef_storage, IN const char *phone_number, IN const char *message); +UFR_STATUS DL_API WriteNdefRecord_Bitcoin(uint8_t ndef_storage, IN const char *bitcoin_address, IN const char *amount, IN const char *message); +UFR_STATUS DL_API WriteNdefRecord_GeoLocation(uint8_t ndef_storage, IN const char *latitude, IN const char *longitude); +UFR_STATUS DL_API WriteNdefRecord_NaviDestination(uint8_t ndef_storage, IN const char *destination); +UFR_STATUS DL_API WriteNdefRecord_Email(uint8_t ndef_storage, IN const char *email_address, IN const char *subject, IN const char *message); +UFR_STATUS DL_API WriteNdefRecord_Address(uint8_t ndef_storage, IN const char *address); +UFR_STATUS DL_API WriteNdefRecord_AndroidApp(uint8_t ndef_storage, IN const char *package_name); +UFR_STATUS DL_API WriteNdefRecord_Text(uint8_t ndef_storage, IN const char *text); +UFR_STATUS DL_API WriteNdefRecord_StreetView(uint8_t ndef_storage, IN const char *latitude, IN const char *longitude); +UFR_STATUS DL_API WriteNdefRecord_Skype(uint8_t ndef_storage, IN const char *user_name, uint8_t action); +UFR_STATUS DL_API WriteNdefRecord_Whatsapp(uint8_t ndef_storage, IN const char *message); +UFR_STATUS DL_API WriteNdefRecord_Viber(uint8_t ndef_storage, IN const char *message); +UFR_STATUS DL_API WriteNdefRecord_Contact(uint8_t ndef_storage, IN const char *name, IN const char *company, IN const char *address, IN const char *phone, IN const char *email, IN const char *website); +UFR_STATUS DL_API WriteNdefRecord_Phone(uint8_t ndef_storage, IN const char *phone_number); + +UFR_STATUS DL_API WriteNdefRecord_WiFiM(UFR_HANDLE hndUFR, uint8_t ndef_storage, IN const char *ssid, uint8_t auth_type, uint8_t encryption_type, IN const char *password); +UFR_STATUS DL_API WriteNdefRecord_BluetoothM(UFR_HANDLE hndUFR, uint8_t ndef_storage, IN const char *bt_mac_address); +UFR_STATUS DL_API WriteNdefRecord_SMSM(UFR_HANDLE hndUFR, uint8_t ndef_storage, IN const char *phone_number, IN const char *message); +UFR_STATUS DL_API WriteNdefRecord_BitcoinM(UFR_HANDLE hndUFR, uint8_t ndef_storage, IN const char *bitcoin_address, IN const char *amount, IN const char *message); +UFR_STATUS DL_API WriteNdefRecord_GeoLocationM(UFR_HANDLE hndUFR, uint8_t ndef_storage, IN const char *latitude, IN const char *longitude); +UFR_STATUS DL_API WriteNdefRecord_NaviDestinationM(UFR_HANDLE hndUFR, uint8_t ndef_storage, IN const char *destination); +UFR_STATUS DL_API WriteNdefRecord_EmailM(UFR_HANDLE hndUFR, uint8_t ndef_storage, IN const char *email_address, IN const char *subject, IN const char *message); +UFR_STATUS DL_API WriteNdefRecord_AddressM(UFR_HANDLE hndUFR, uint8_t ndef_storage, IN const char *address); +UFR_STATUS DL_API WriteNdefRecord_AndroidAppM(UFR_HANDLE hndUFR, uint8_t ndef_storage, IN const char *package_name); +UFR_STATUS DL_API WriteNdefRecord_TextM(UFR_HANDLE hndUFR, uint8_t ndef_storage, IN const char *text); +UFR_STATUS DL_API WriteNdefRecord_StreetViewM(UFR_HANDLE hndUFR, uint8_t ndef_storage, IN const char *latitude, IN const char *longitude); +UFR_STATUS DL_API WriteNdefRecord_SkypeM(UFR_HANDLE hndUFR, uint8_t ndef_storage, IN const char *user_name, uint8_t action); +UFR_STATUS DL_API WriteNdefRecord_WhatsappM(UFR_HANDLE hndUFR, uint8_t ndef_storage, IN const char *message); +UFR_STATUS DL_API WriteNdefRecord_ViberM(UFR_HANDLE hndUFR, uint8_t ndef_storage, IN const char *message); +UFR_STATUS DL_API WriteNdefRecord_ContactM(UFR_HANDLE hndUFR, uint8_t ndef_storage, IN const char *name, IN const char *company, IN const char *address, IN const char *phone, IN const char *email, IN const char *website); +UFR_STATUS DL_API WriteNdefRecord_PhoneM(UFR_HANDLE hndUFR, uint8_t ndef_storage, IN const char *phone_number); +//--------------------------------------------------------------------------------------------- +UFR_STATUS DL_API ReadNdefRecord_WiFi(OUT char *ssid, OUT char *auth_type, OUT char *encryption_type, OUT char *password); +UFR_STATUS DL_API ReadNdefRecord_Bitcoin(OUT char *bitcoin_address, OUT char *amount, OUT char *message); +UFR_STATUS DL_API ReadNdefRecord_GeoLocation(OUT char *latitude, OUT char *longitude); +UFR_STATUS DL_API ReadNdefRecord_NaviDestination(OUT char *destination); +UFR_STATUS DL_API ReadNdefRecord_Email(OUT char *email_address, OUT char *subject, OUT char *message); +UFR_STATUS DL_API ReadNdefRecord_Address(OUT char *address); +UFR_STATUS DL_API ReadNdefRecord_AndroidApp(OUT char *package_name); +UFR_STATUS DL_API ReadNdefRecord_Text(OUT char *text); +UFR_STATUS DL_API ReadNdefRecord_StreetView(OUT char *latitude, OUT char *longitude); +UFR_STATUS DL_API ReadNdefRecord_Skype(OUT char *user_name, OUT char *action); +UFR_STATUS DL_API ReadNdefRecord_Whatsapp(OUT char *message); +UFR_STATUS DL_API ReadNdefRecord_Viber(OUT char *message); +UFR_STATUS DL_API ReadNdefRecord_Contact(OUT char *vCard); +UFR_STATUS DL_API ReadNdefRecord_Phone(OUT char *phone_number); +UFR_STATUS DL_API ReadNdefRecord_SMS(OUT char *phone_number, OUT char *message); +UFR_STATUS DL_API ReadNdefRecord_Bluetooth(OUT char *bt_mac_address); + +UFR_STATUS DL_API ReadNdefRecord_WiFiM(UFR_HANDLE hndUFR, OUT char *ssid, OUT char *auth_type, OUT char *encryption_type, OUT char *password); +UFR_STATUS DL_API ReadNdefRecord_BitcoinM(UFR_HANDLE hndUFR, OUT char *bitcoin_address, OUT char *amount, OUT char *message); +UFR_STATUS DL_API ReadNdefRecord_GeoLocationM(UFR_HANDLE hndUFR, OUT char *latitude, OUT char *longitude); +UFR_STATUS DL_API ReadNdefRecord_NaviDestinationM(UFR_HANDLE hndUFR, OUT char *destination); +UFR_STATUS DL_API ReadNdefRecord_EmailM(UFR_HANDLE hndUFR, OUT char *email_address, OUT char *subject, OUT char *message); +UFR_STATUS DL_API ReadNdefRecord_AddressM(UFR_HANDLE hndUFR, OUT char *address); +UFR_STATUS DL_API ReadNdefRecord_AndroidAppM(UFR_HANDLE hndUFR, OUT char *package_name); +UFR_STATUS DL_API ReadNdefRecord_TextM(UFR_HANDLE hndUFR, OUT char *text); +UFR_STATUS DL_API ReadNdefRecord_StreetViewM(UFR_HANDLE hndUFR, OUT char *latitude, OUT char *longitude); +UFR_STATUS DL_API ReadNdefRecord_SkypeM(UFR_HANDLE hndUFR, OUT char *user_name, OUT char *action); +UFR_STATUS DL_API ReadNdefRecord_WhatsappM(UFR_HANDLE hndUFR, OUT char *message); +UFR_STATUS DL_API ReadNdefRecord_ViberM(UFR_HANDLE hndUFR, OUT char *message); +UFR_STATUS DL_API ReadNdefRecord_ContactM(UFR_HANDLE hndUFR, OUT char *vCard); +UFR_STATUS DL_API ReadNdefRecord_PhoneM(UFR_HANDLE hndUFR, OUT char *phone_number); +UFR_STATUS DL_API ReadNdefRecord_SMSM(UFR_HANDLE hndUFR, OUT char *phone_number, OUT char *message); +UFR_STATUS DL_API ReadNdefRecord_BluetoothM(UFR_HANDLE hndUFR, OUT char *bt_mac_address); + +//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ + +// DLL version ---------------------------------------------------------------- +uint32_t DL_API GetDllVersion(void); + +/* + * Get "exploded" dll version example: + * + * #include + * #include + * + * void main(int argc, char *argv[]) + * { + * uint32_t dwDllVersion = 0; + * uint32_t dwDllMajorVersion = 0; + * uint32_t dwDllMinorVersion = 0; + * uint32_t dwDllBuild = 0; + * + * dwDllVersion = GetDllVersion(); + * + * // "explode" the dll version: + * dwDllMajorVersion = (DWORD)(LOBYTE(LOWORD(dwDllVersion))); + * dwDllMinorVersion = (DWORD)(HIBYTE(LOWORD(dwDllVersion))); + * + * // Get the dll build number. + * dwDllBuild = (DWORD)(HIWORD(dwDllVersion)); + * + * printf("Dll version is %ld.%ld (%ld)\n", dwDllMajorVersion, + * dwDllMinorVersion, + * dwDllBuild); + * } + * + */ + +// Originality Check (performs the check is the chip on the card/tag NXP genuine): +UFR_STATUS DL_API OriginalityCheck(IN const uint8_t *signature, IN const uint8_t *uid, uint8_t uid_len, uint8_t DlogicCardType); +// Returns: +// UFR_OPEN_SSL_DYNAMIC_LIB_NOT_FOUND in case there is no OpenSSL library (libeay32.dll) in current folder or path +// UFR_OPEN_SSL_DYNAMIC_LIB_FAILED in case of OpenSSL library error (e.g. wrong OpenSSL version) +// UFR_NOT_NXP_GENUINE if chip on the card/tag is NOT NXP genuine +// UFR_OK is chip on the card/tag is NXP GENUINE + +//// debug functions: +c_string DL_API GetDllVersionStr(void); +c_string DL_API UFR_Status2String(const UFR_STATUS status); +c_string DL_API UFR_DLCardType2String(uint8_t dl_type_code); + +//// Helper functions: +#ifndef _WIN32 + +unsigned long GetTickCount(void); + +#endif // #ifndef _WIN32 + +//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ + +c_string DL_API GetReaderDescription(void); +c_string DL_API GetReaderDescriptionM(UFR_HANDLE hndUFR); + +//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ +//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ +#ifdef __ANDROID__ +#include + +JNIEnv *global_env; +jclass global_class; +void DL_API initVM(JNIEnv *env, jclass class1); +#endif + +#ifdef __cplusplus +} +#endif + +#endif /* uFCoder_H_ */ -- GitLab