Skip to content

0.2.0

Latest
Compare
Choose a tag to compare
@leonlynch leonlynch released this 24 Nov 13:06
0.2.0

Changes since 0.1.0:

  • New emv-viewer application providing:
    • GUI interface (using Qt) for decoding BER encoded EMV data, including lookup of ISO 639 language code, ISO 3166-1 country code, ISO 4217 currency code and ISO 18245 Merchant Category Code (MCC) fields
    • Support for --ber and --tlv command line options to specify the input data in the same manner as for the emv-decode command line tool
    • Qt bundling for MacOS and Windows release packages
    • MacOS bundle creation and signing
    • Windows NSIS installer
  • iso7816 library:
    • Improve parsing and EMV validation of Answer-To-Reset (ATR)
    • Improve decoding of various commands including SELECT, READ RECORD and PUT DATA
  • iso8859 library:
    • ISO 8859 implementation can be selected at build time using the CMake ISO8859_IMPL option. It allows these values:
      • boost (default): Uses Boost.Locale, is supported on most platforms, is forgiving of unassigned code points, but requires C++
      • iconv: Uses GNU iconv, is not supported on some platforms, is less forgiving of unassigned code points, but doesn't require C++
      • simple: Only supports ISO 8859-1, has no dependencies and doesn't require C++
  • emv library:
    • Update to EMV 4.4
    • Provide error and outcome enums that align with the standard messages in EMV 4.4 Book 4, 11.2 or EMV Contactless Book A v2.10, 9.4
    • Improve EMV Data Object List (DOL) processing with a focus on PDOL processing
    • Add high level EMV library interface:
      • EMV processing context object
      • Implement EMV candidate list discovery
      • Implement EMV application selection
      • Implement EMV initiate application processing
      • Implement EMV Read Application Data
    • Many logging improvements
  • emv_strings library:
    • Add and improve decoding of many EMV fields
    • Add decoding of Issuer Authentication Data (field 91). Publicly available information about this field is very limited and in the absence of the Application PAN (field 5A) and Issuer Application Data (field 9F10), some guessing is required to partially decode this field.
  • emv-decode command line tool:
    • Implement --ignore-padding option:
      • Invalid data is assumed to be padding if it is either less than 8 bytes when the total data length is a multiple of 8 bytes (for example DES) or if it is less than 16 bytes when the total data length is a multiple of 16 bytes (for example AES). Note that this option will also apply to nested constructed fields that contain padded cleartext data intended for encryption.
  • emv-tool command line tool:
    • Refactor to use newly implemented high level EMV interface provided by emv library
    • Implement proper cardholder application selection loop
    • Retrieve and decode PC/SC feature and property lists
    • Identify and reject contactless cards for now to avoid decoding their artificial PC/SC ATRs. Eventually this project will grow to support contactless cards and implement further PC/SC contactless functionality.
  • Misc improvements:
    • Many CMake improvements
    • Various C11 compatibility improvements for MinGW and Clang compilers
    • PC/SC compatibility improvements for non-PCSCLite builds
    • Update to latest libargp to fix build warnings on MacOS
    • Update Github Actions for Fedora 40/41 and MacOS 13
    • Update Github Actions to remove 32-bit builds from Windows workflow. MSYS2 has deprecated many 32-bit packages.

NOTE: See README for installation instructions. MacOS users that already use Homebrew should favour using that to install this project instead of using the provided .dmg installer due the the lack of notarization.