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 theemv-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
andPUT 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++
- ISO 8859 implementation can be selected at build time using the CMake
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.
- Implement
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.
- Refactor to use newly implemented high level EMV interface provided by
- 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.