Releases: openemv/emv-utils
Releases · openemv/emv-utils
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 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.
0.1.0
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)
- String converter functions for various EMV formats (
- 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 (seeemv-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 (seeemv-tool --help
for details) providing basic EMV processing up toRead Application Data
. This tool, and theemv
library, are still very far from full EMV processing but will grow towards it in future.
NOTE: See README for installation instructions.