Skip to content
  1. Nov 15, 2018
  2. Nov 13, 2018
  3. Nov 08, 2018
    • developer4's avatar
      version 4.3.16 · bb3c6f55
      developer4 authored
      Added functions for PIN and PUK codes manipulation in a JCApp cards:
      UFR_STATUS JCAppLogin(uint8_t SO, uint8_t *pin, uint8_t pinSize);
      UFR_STATUS JCAppGetPinTriesRemaining(dl_sec_code_t secureCodeType, uint16_t *triesRemaining);
      UFR_STATUS JCAppPinChange(dl_sec_code_t secureCodeType, uint8_t *newPin, uint8_t newPinSize);
      UFR_STATUS JCAppPinUnblock(uint8_t SO, uint8_t *puk, uint8_t pukSize);
      
      Added functions for asymmetric cryptography key pairs generation and manipulation in a JCApp cards:
      UFR_STATUS JCAppGenerateKeyPair(uint8_t key_type, uint8_t key_index, uint8_t key_designator, uint16_t key_bit_len, const uint8_t *params, uint16_t params_size);
      UFR_STATUS JCAppGetRsaPublicKey(uint8_t key_index, uint8_t *modulus, uint16_t *modulus_size, uint8_t *exponent, uint16_t *exponent_size);
      UFR_STATUS JCAppGetEcPublicKey(uint8_t key_index, uint8_t *keyW, uint16_t *kexWSize, uint8_t *field, uint16_t *field_size, uint8_t *ab , uint16_t *ab_size, uint8_t *g, uint16_t *g_size, uint8_t *r, uint16_t *r_size, uint16_t *k, uint16_t *key_size_bits, uint16_t *key_designator);
      
      Added multi reader support functions:
      UFR_STATUS JCAppLoginM(UFR_HANDLE hndUFR, uint8_t SO, uint8_t *pin, uint8_t pinSize);
      UFR_STATUS JCAppGetPinTriesRemainingM(UFR_HANDLE hndUFR, dl_sec_code_t secureCodeType, uint16_t *triesRemaining);
      UFR_STATUS JCAppPinChangeM(UFR_HANDLE hndUFR, dl_sec_code_t secureCodeType, uint8_t *newPin, uint8_t newPinSize);
      UFR_STATUS JCAppPinUnblockM(UFR_HANDLE hndUFR, uint8_t SO, uint8_t *puk, uint8_t pukSize);
      UFR_STATUS JCAppGenerateKeyPairM(UFR_HANDLE hndUFR, uint8_t key_type, uint8_t key_index, uint8_t key_designator, uint16_t key_bit_len, const uint8_t *params, uint16_t params_size);
      UFR_STATUS JCAppGetRsaPublicKeyM(UFR_HANDLE hndUFR, uint8_t key_index, uint8_t *modulus, uint16_t *modulus_size, uint8_t *exponent, uint16_t *exponent_size);
      UFR_STATUS JCAppGetEcPublicKeyM(UFR_HANDLE hndUFR, uint8_t key_index, uint8_t *keyW, uint16_t *kexWSize, uint8_t *field, uint16_t *field_size, uint8_t *ab , uint16_t *ab_size, uint8_t *g, uint16_t *g_size, uint8_t *r, uint16_t *r_size, uint16_t *k, uint16_t *key_size_bits, uint16_t *key_designator);
      
      Added helper library function to get APDU error description:
      c_string JCAppGetErrorDescription(UFR_STATUS apdu_error_status);
      4.3.16
      bb3c6f55
  4. Nov 05, 2018
  5. Sep 20, 2018
  6. Sep 03, 2018
    • developer2's avatar
      Version 4.3.13. Mifare Plus card support, Ultralight C external authentication support · 421163f5
      developer2 authored
      new functions for uFR PLUS devices only
      //MIFARE PLUS
      UFR_STATUS DL_API MFP_WritePerso(uint16_t address, uint8_t *data);
      UFR_STATUS DL_API MFP_CommitPerso(void);
      UFR_STATUS DL_API MFP_PersonalizationMinimal(uint8_t *card_master_key, uint8_t *card_config_key,
      						uint8_t *level_2_switch_key, uint8_t *level_3_switch_key, uint8_t *level_1_auth_key,
      						uint8_t *select_vc_key, uint8_t *prox_chk_key, uint8_t *vc_poll_enc_key, uint8_t *vc_poll_mac_key);
      UFR_STATUS DL_API MFP_SwitchToSecurityLevel3(uint8_t key_index);
      UFR_STATUS DL_API MFP_SwitchToSecurityLevel3_PK(uint8_t *aes_key);
      UFR_STATUS DL_API MFP_AesAuthSecurityLevel1(uint8_t key_index);
      UFR_STATUS DL_API MFP_AesAuthSecurityLevel1_PK(uint8_t *aes_key);
      UFR_STATUS DL_API MFP_ChangeMasterKey(uint8_t key_index, uint8_t *new_key);
      UFR_STATUS DL_API MFP_ChangeMasterKey_PK(uint8_t *old_key, uint8_t *new_key);
      UFR_STATUS DL_API MFP_ChangeConfigurationKey(uint8_t key_index, uint8_t *new_key);
      UFR_STATUS DL_API MFP_ChangeConfigurationKey_PK(uint8_t *old_key, uint8_t *new_key);
      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(uint8_t *configuration_key, 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, uint8_t *new_key);
      UFR_STATUS DL_API MFP_ChangeSectorKey_PK(uint8_t sector_nr, uint8_t auth_mode, uint8_t *old_key, 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, uint8_t *uid, uint8_t *uid_len);
      UFR_STATUS DL_API MFP_GetUid_PK(uint8_t *vc_poll_enc_key, uint8_t *vc_poll_mac_key, uint8_t *uid, uint8_t *uid_len);
      UFR_STATUS DL_API MFP_ChangeVcPollingEncKey(uint8_t configuration_key_index, uint8_t *new_key);
      UFR_STATUS DL_API MFP_ChangeVcPollingEncKey_PK(uint8_t *configuration_key, uint8_t *new_key);
      UFR_STATUS DL_API MFP_ChangeVcPollingMacKey(uint8_t configuration_key_index, uint8_t *new_key);
      UFR_STATUS DL_API MFP_ChangeVcPollingMacKey_PK(uint8_t *configuration_key, uint8_t *new_key);
      
      //ULTRALIGHT C
      UFR_STATUS DL_API ULC_ExternalAuth_PK(uint8_t *key);
      UFR_STATUS DL_API ULC_write_3des_key_no_auth(uint8_t *new_3des_key);
      UFR_STATUS DL_API ULC_write_3des_key_factory_key(uint8_t *new_3des_key);
      UFR_STATUS DL_API ULC_write_3des_key(uint8_t *new_3des_key, uint8_t *old_3des_key);
      
      Functions for ISO7816 protokol support (SAM option only)
      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);
      421163f5
  7. Aug 15, 2018
  8. Jun 20, 2018
  9. Jun 08, 2018
  10. Apr 13, 2018
    • developer2's avatar
      Version 4.3.9 transceive mode support (uFR PLUS devices only) · 5b12e545
      developer2 authored
      new functions added
      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 uart_transceive(uint8_t *send_data, uint8_t send_len, uint8_t *rcv_data, uint32_t bytes_to_receive, uint32_t *rcv_len);
      5b12e545
  11. Mar 06, 2018
    • developer4's avatar
      version 4.3.8 · 0a6e041e
      developer4 authored
      enabled off-card hash algorithm (when sig_cipher == SIG_CIPHER_RSA && sig_digest == ALG_NULL && sig_padding == PAD_PKCS1)
      0a6e041e
  12. Feb 26, 2018
    • developer4's avatar
      Version 4.3.7 · 1a084f8b
      developer4 authored
      Finished and tested functions for qualified and CA certificates manipulation:
      UFR_STATUS JCAppPutObj(uint8_t obj_type, uint8_t obj_index, uint8_t *obj, int16_t obj_size, uint8_t *id, uint8_t id_size);
      UFR_STATUS JCAppPutObjSubject(uint8_t obj_type, uint8_t obj_index, uint8_t *subject, uint8_t size);
      UFR_STATUS JCAppInvalidateCert(uint8_t obj_type, uint8_t obj_index);
      UFR_STATUS JCAppGetObjId(uint8_t obj_type, uint8_t obj_index, uint8_t *id, uint16_t *id_size); // when id == NULL returns size
      UFR_STATUS JCAppGetObjSubject(uint8_t obj_type, uint8_t obj_index, uint8_t *subject, uint16_t *size); // when subject == NULL returns size
      UFR_STATUS JCAppGetObj(uint8_t obj_type, uint8_t obj_index, uint8_t *obj, int16_t size); // when obj == NULL returns size
      
      and multi reader support functions:
      UFR_STATUS JCAppPutObjM(UFR_HANDLE hndUFR, uint8_t obj_type, uint8_t obj_index, uint8_t *obj, int16_t obj_size, uint8_t *id, uint8_t id_size);
      UFR_STATUS JCAppPutObjSubjectM(UFR_HANDLE hndUFR, uint8_t obj_type, uint8_t obj_index, uint8_t *subject, uint8_t size);
      UFR_STATUS JCAppInvalidateCertM(UFR_HANDLE hndUFR, uint8_t obj_type, uint8_t obj_index);
      UFR_STATUS JCAppGetObjIdHnd(UFR_HANDLE hndUFR, uint8_t obj_type, uint8_t obj_index, uint8_t *id, uint16_t *id_size); // when id == NULL returns size
      UFR_STATUS JCAppGetObjSubjectM(UFR_HANDLE hndUFR, uint8_t obj_type, uint8_t obj_index, uint8_t *subject, uint16_t *size); // when subject == NULL returns size
      UFR_STATUS JCAppGetObjM(UFR_HANDLE hndUFR, uint8_t obj_type, uint8_t obj_index, uint8_t *obj, int16_t size); // when obj == NULL returns size
      4.3.7
      1a084f8b
  13. Feb 13, 2018
  14. Jan 10, 2018
  15. Dec 20, 2017
  16. Nov 30, 2017
  17. Nov 06, 2017
    • developer2's avatar
      Version 4.3.2 ISO7816 interface support and green LED on off · 1777c159
      developer2 authored
      Functions added
      UFR_STATUS DL_API open_ISO7816_interface(uint8_t *atr_data, uint8_t *atr_len);
      UFR_STATUS DL_API close_ISO7816_interface(void);
      UFR_STATUS DL_API GreenLedBlinkingTurnOn(void);
      UFR_STATUS DL_API GreenLedBlinkingTurnOff(void);
      1777c159
  18. Nov 01, 2017
  19. Oct 05, 2017
    • developer4's avatar
      version 4.3.0 · ac6a2f02
      developer4 authored
      Added DL Java Card support.
      Digital signing mechanisms using RSA and ECDSA included.
      New functions:
      JCAppSelectByAid()
      JCAppPutPrivateKey()
      JCAppGenerateSignature()
      JCAppSignatureBegin()
      JCAppSignatureUpdate()
      JCAppSignatureEnd()
      4.3.0
      ac6a2f02
  20. Aug 15, 2017
  21. Aug 14, 2017
    • developer4's avatar
      uFR library version 4.0.29 · c7c9f942
      developer4 authored
      The following functions have been improved (extended buffer support):
      UFR_STATUS DL_API APDUHexStrTransceive(const char *c_apdu, char **r_apdu);
      UFR_STATUS DL_API APDUPlainTransceive(const uint8_t *c_apdu, uint32_t c_apdu_len, uint8_t *r_apdu, uint32_t *r_apdu_len);
      UFR_STATUS DL_API APDUTransceive(uint8_t cls, uint8_t ins, uint8_t p1, uint8_t p2, const uint8_t *data_out, uint32_t Nc, uint8_t *data_in, uint32_t *Ne, uint8_t send_le, uint8_t *apdu_status);
      UFR_STATUS DL_API APDUHexStrTransceiveM(UFR_HANDLE hndUFR, const char *c_apdu, char **r_apdu);
      UFR_STATUS DL_API APDUPlainTransceiveM(UFR_HANDLE hndUFR, const uint8_t *c_apdu, uint32_t c_apdu_len, uint8_t *r_apdu, uint32_t *r_apdu_len);
      UFR_STATUS DL_API APDUTransceiveM(UFR_HANDLE hndUFR, uint8_t cls, uint8_t ins, uint8_t p0, uint8_t p1, const uint8_t *data_out, uint32_t Nc, uint8_t *data_in, uint32_t *Ne, uint8_t send_le, uint8_t *apdu_status);
      
      Improvement is valid from the firmware version 3.9.44
      4.0.29
      c7c9f942
  22. Jun 28, 2017
    • developer4's avatar
      version 4.0.26 · 487e898e
      developer4 authored
      Finished implementation of the "APDU Transceive" in the firmware (using APDU_TRANSCEIVE command).
      4.0.26
      487e898e
  23. May 29, 2017
    • developer4's avatar
      version 4.0.25 · b13ca363
      developer4 authored
      Finished NFC T4T support for NDEF messages using APDU support through "ISO14443-4 half-duplex block transmission protocol (i_block, r_block and s_block)".
      All functions in library that support NDEF messages now working with NFC T4T cards.
      4.0.25
      b13ca363
  24. Apr 28, 2017
    • developer4's avatar
      library version 4.0.24 · 4614bc21
      developer4 authored
      Added functions:
      UFR_STATUS GetAdHocEmulationParams(uint8_t *ThresholdMinLevel, uint8_t *ThresholdCollLevel,
      								   uint8_t *RFLevelAmp, uint8_t *RxGain, uint8_t *RFLevel);
      UFR_STATUS SetAdHocEmulationParams(uint8_t ThresholdMinLevel, uint8_t ThresholdCollLevel,
      								   uint8_t RFLevelAmp, uint8_t RxGain, uint8_t RFLevel);
      UFR_STATUS GetAdHocEmulationParamsM(UFR_HANDLE hndUFR,
      								    uint8_t *ThresholdMinLevel, uint8_t *ThresholdCollLevel,
      								    uint8_t *RFLevelAmp, uint8_t *RxGain, uint8_t *RFLevel);
      UFR_STATUS SetAdHocEmulationParamsM(UFR_HANDLE hndUFR,
      								    uint8_t ThresholdMinLevel, uint8_t ThresholdCollLevel,
      								    uint8_t RFLevelAmp, uint8_t RxGain, uint8_t RFLevel);
      
      Dependency for these functions: uFR firmware - min. version 3.9.35
      4.0.24
      4614bc21
  25. Apr 24, 2017
    • developer4's avatar
      library binaries version 4.0.23 · 736a1ca8
      developer4 authored
      Added functions:
      UFR_STATUS AdHocEmulationStart(void);
      UFR_STATUS AdHocEmulationStop(void);
      UFR_STATUS GetExternalFieldState(uint8_t *is_field_present);
      
      UFR_STATUS AdHocEmulationStartM(UFR_HANDLE hndUFR);
      UFR_STATUS AdHocEmulationStopM(UFR_HANDLE hndUFR);
      UFR_STATUS GetExternalFieldStateM(UFR_HANDLE hndUFR, uint8_t *is_field_present);
      4.0.23
      736a1ca8
  26. Mar 23, 2017
  27. Mar 09, 2017
  28. Mar 04, 2017
  29. Feb 14, 2017
  30. Feb 13, 2017
    • developer3's avatar
      uFR lib version 4.0.15 · 1be9915a
      developer3 authored
      The first big testing of the EEPROM partitions and FW version 4.x
      
      Libraries files:
        + include / header files
        + Binaries for multiple OS-es and platforms:
          + 32 and 64 bit Windows Intel,
          + 32 and 64 bit Windows Intel static GCC libraries,
          + 32 and 64 bit Linux Intel,
          + 64 bit OS X Intel,
          + 32 bit Linux ARM
          + 32 bit Linux ARM-HF
      1be9915a
  31. Nov 15, 2016
    • developer3's avatar
      uFR lib version 4.0.11 · 6bd8a579
      developer3 authored
      Fixed DST (summer time) in CardEncryption
      
      Libraries files:
        + include / header files
        + Binaries for multiple OS-es and platforms:
          + 32 and 64 bit Windows Intel,
          + 32 and 64 bit Windows Intel static GCC libraries,
          + 32 and 64 bit Linux Intel,
          + 64 bit OS X Intel,
          + 32 bit Linux ARM
          + 32 bit Linux ARM-HF
      6bd8a579
  32. Aug 31, 2016
    • developer4's avatar
      Added support for APDU commands for ISO 14443-4 tags through i-blocks (if tag... · 4fe6c1e4
      developer4 authored
      Added support for APDU commands for ISO 14443-4 tags through i-blocks (if tag support APDU commands).
      Added functions:
      UFR_STATUS DL_API uFR_APDU_Transceive(uint8_t cls, uint8_t ins, uint8_t p0, uint8_t p1, uint8_t *data_out, uint8_t data_out_len, uint8_t *data_in, uint8_t *response_len, uint8_t send_le);
      UFR_STATUS DL_API uFR_APDU_TransceiveM(UFR_HANDLE hndUFR, uint8_t cls, uint8_t ins, uint8_t p0, uint8_t p1, uint8_t *data_out, uint8_t data_out_len, uint8_t *data_in, uint8_t *response_len, uint8_t send_le);
      UFR_STATUS DL_API uFR_DESFIRE_StartM(UFR_HANDLE hndUFR);
      UFR_STATUS DL_API uFR_DESFIRE_StopM(UFR_HANDLE hndUFR);
      
      Added function "aliases":
      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()
      4fe6c1e4
  33. Aug 02, 2016
    • developer2's avatar
      Version 4.0.9 · 321f9f26
      developer2 authored
      Support for UID byte order and decimal represenation od card UID, in the async UID sending.
      Functions added
      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 GetAsyncCardIdSendConfigEx(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 SetAsyncCardIdSendConfigExM(UFR_HANDLE hndUFR,
      		uint8_t send_enable, uint8_t prefix_enable, uint8_t prefix,
      		uint8_t suffix, uint8_t send_removed_enable, int8_t 		reverse_byte_order,
      		uint8_t decimal_representation, uint32_t async_baud_rate);
      UFR_STATUS DL_API GetAsyncCardIdSendConfigExM(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);
      321f9f26
  34. Jul 20, 2016
    • developer4's avatar
      Version 4.0.5 · 47b1e7d1
      developer4 authored
      Support for the ASCII mirror function of the NXP NTAG21x series.
      Added functions:
      UFR_STATUS DL_API write_ndef_record_mirroring(uint8_t message_nr, uint8_t *tnf, uint8_t *type_record, uint8_t *type_length, uint8_t *id, uint8_t *id_length, uint8_t *payload, uint32_t *payload_length, uint8_t *card_formated, int use_uid_ascii_mirror, int use_counter_ascii_mirror, uint32_t payload_mirroring_pos);
      UFR_STATUS DL_API write_ndef_record_mirroringM(UFR_HANDLE hndUFR, uint8_t message_nr, uint8_t *tnf, uint8_t *type_record, uint8_t *type_length, uint8_t *id, uint8_t *id_length, uint8_t *payload, uint32_t *payload_length, uint8_t *card_formated, int use_uid_ascii_mirror, int use_counter_ascii_mirror, uint32_t payload_mirroring_pos);
      Those functions use already existing NDEF functionality of the uFRCoder library.
      47b1e7d1
  35. Jul 07, 2016
  36. Jul 05, 2016
    • developer4's avatar
      Version 4.0.4 · 3e767659
      developer4 authored
      -Added static libraries for Windows, x86 and x86_64 both. When you use uFCoder static library, you must linking FTDI d2xx library in your project to. See http://www.ftdichip.com/ for more details.
      -When you use uFCoder static library in your project, define macro:
      #define DL_USE_STATIC_LIB
      before include uFCoder.h or set -DDL_USE_STATIC_LIB as compiler directive.
      3e767659