free payment systems testing software

Payment systems industry is closed and most of the documentation in regards to major payment system like VISA, MASTERCARD and AMEX is proprietary and not freely available on the internet. Lately though information in regards to various areas of payment system industry has been made available on the web.

In this post i try to categorized and reference all tools i came across in the last few years which helped me during my every day job.

I splited the software in the below categories:

  • iso8583
  • hsm & cryptography
  • point of sales
  • switching
  • emv & chip cards

HSM & Cryptography

hsm simulator : open source software that emulates a Thales HSM. The simulator also provides HSM console simulation. The list of host commands and console commands implemented are listed on project web site. Source code is available.

eft calculator : this is a pin block and encryption calculator which is based on the hsm simulator referenced above. Source code is available

lmk tool : this is a tool that helps users to migrate Thales cryptographic keys from the old LMK to the new LMK set. Source code is available

Point Of Sales

emv pos simulator: on project web site there is an interesting list of software. You will find an acquirer simulator, an emv capable terminal simulator (which talks to the acquirer simulator via iso8583 dialect) and a BER TLV parser.

gemalto opencard framework : standard Java framework for working with smart cards.

emv lab : web based emv tools for calculating cryptograms parsing emv tags and lots of other usefull tools


jpos : open source implementation of the international iso8583 standard

iso8583 testing tool : an interface to jpos to test various iso8583 chanels

Development Libraries

Smart Card API for .NET : A COM wrapper for wincard to provide access to chip readers via .NET

iso8583 C library : A C implementation of the iso8583 protocol programmed by Oscar Sanderson

using jPOS framework in C#

I am not a Java person and jPOS is an amazing iso8683 framework which I always wanted to try but it is written in Java. After some internet searching i figured out that it would be possible to use jPOS via C#. Below are some simple steps to get you started.

1. – This is an implementation of Java for .NET

2. – The jPOS framework

In order to access jPOS via C# what you need to do is to use iKVM to create a DLL file of the equivalent JAR file that jPOS produces once is compiled. Below are the steps i followed:

1. Download and compile jPOS from above link (you should end up with the jpos.jar and some other jars)

I compiled jPOS on Ubuntu instance where is easy to isntall maven and any other tools needed. After compilation (screenshots above of the shared linux directory where i compiled jpos) you have the below .jar files:

  1. bsh-2.0b5.jar
  2. commons-cli-1.2.jar
  3. javatuples-1.2.jar
  4. jdbm-1.0.jar
  5. jdom-1.1.3.jar
  6. je-4.1.10.jar
  7. jline-1.0.jar
  8. jpos-1.8.5-SNAPSHOT.jar

2. Download and install iKVM and OpenJDK from above link. ( and

I installed mine at the below location. Once i installed i moved all *.jar files from above to my bin directory of my iKVM installation where the utility “ikvmc.exe” is located:

4. Run ikvmc on jpos.jar to create jpos.dll (you should end up with the jpos.dll)

The above command “ikvmc.exe -target:library *.jar -out:jpos.dll” will combine all jar files into one single dll. This dll will be referenced in a Visual Studio C# Project so we can use jPOS library components in our Windows Forms C# Application

5. Create Visual Studio Project and add reference to jpos.dll

Create a simple Windows Forms C# project. Click on References and add reference to jpos.dll like below:

This reference is not enough you will also need to add “IKVM.OpenJDK.Core.dll” reference otherwise your code will not compile (if you reference jPOS components)

Adjust your code to look like below:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

* jPOS related

using org.jpos.iso;
using org.jpos.util;
using org.jpos.iso.packager;

namespace TestingJPOS
public partial class Form1 : Form
* jPOS related

ISOChannel channel = new ASCIIChannel(“localhost”, 9999, new ISO87APackager());

Logger logger = new Logger();

public Form1()

* After Initialization do some jpos stuff

* jPOS related

logger.addListener(new SimpleLogListener());

((LogSource)channel).setLogger(logger, “test-channel”);


private void button1_Click(object sender, EventArgs e)

* jPOS related
if (!channel.isConnected())
channel.connect ();

ISOMsg m = new ISOMsg ();

m.setMTI (“0800”);
m.set (3, “000000”);
m.set (41, “00000001”);
m.set (70, “301”);

channel.send (m);

//ISOMsg r = channel.receive ();

//channel.disconnect ();

Compile and run. You need to start some Listener to listen on port 9999 that this porgram will connect to, otherwise you will get some exception.

You will see in Visual Studio window if you run the above for debugging the below, which is the jPOS logger outputting tracing on standard output:

6. Create a simple application to demonstrate how it can be used