Skip to content

Releases: openemv/emv-utils

0.2.0

24 Nov 13:06
0.2.0
Compare
Choose a tag to compare

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.

0.1.0

12 Mar 12:02
0.1.0
Compare
Choose a tag to compare

Initial release:

  • emv library providing:
    • Many EMV tag identifiers
    • Processing functions for various EMV field formats (ans, n, etc)
    • Various bitmasks to interpret EMV binary fields
    • Iterators for various EMV binary fields such as Application File Locator (AFL), Cardholder Verification Method (CVM) List and Data Object List (DOL)
    • EMV TLV abstraction
    • Terminal Transport Layer (TTL) abstraction
    • Terminal Application Layer (TAL) abstraction
    • EMV application abstraction
    • Debug logging mechanism
  • emv_strings library providing:
    • String converter functions for various EMV formats (cn, n, amount, etc)
    • Stringify functions for many EMV binary fields
    • Lookup functions for ISO 639 language codes
    • Lookup functions for ISO 3166-1 country codes
    • Lookup functions for ISO 4217 currency codes
    • Lookup functions for ISO 18245 Merchant Category Code (MCC)
  • Ancillary abstractions to facilitate embedded use of the emv library:
    • ISO 7816 Answer-To-Reset (ATR), SW1-SW2 and COMPACT-TLV parser
    • ISO 8825 Basic Encoding Rules (BER) parser
    • ISO 8859 to UTF-8 converter
  • emv-decode command line tool (see emv-decode --help for details) providing:
    • ISO 7816 Answer-To-Reset (ATR) decoding
    • ISO 7816 Status bytes (SW1-SW2) decoding
    • EMV TLV decoding
    • EMV Data Object List (DOL) decoding
    • Decoding of individual EMV fields
    • ISO 639 language lookup
    • ISO 3166-1 country lookup
    • ISO 4217 currency lookup
    • ISO 18245 Merchant Category Code (MCC) lookup
  • emv-tool command line tool (see emv-tool --help for details) providing basic EMV processing up to Read Application Data. This tool, and the emv library, are still very far from full EMV processing but will grow towards it in future.

NOTE: See README for installation instructions.