Equinox

How to use Equinox devices with the Decryptx Payload Parser.

The Equinox Luxe 8500i and 6200m devices are PCI 4.1+ SRED compliant payment card reading devices. These devices support manual, swiped and EMV contact and contactless payment types, and are capable of multiple point to point encryption (P2PE) schemas. The Luxe operating system (OS) is standardized across all Luxe products, and is engineered for maximum security, ease of use and seamless integration. It enables payment applications, third-party software, and point of sale (POS) systems to work together flawlessly. The devices are capable of interacting with their host computer via Ethernet, USB and wireless interfaces.

The on-board software provides a payment processing engine (PE), application builder, and robust software development kits. The PE web interface allows using JSON or XML data.

Serial Number

Decryptx requires a device serial number. To obtain it, send the following command to the PE:

GET /cgi-bin/variable/get?SerialNumber

The response would be:

POST /cgi-bin/payment/start?ManualEntry.Enabled=1
<?xml version="1.0"?>
<variable>
   <get id='SerialNumber'><![CDATA[A1850003005580]]></get>
</variable>

Manual Entry Payloads

Initiate payment processing transaction by sending the following command:

POST /cgi-bin/payment/start?ManualEntry.Enabled=1
<?xml version="1.0" encoding="UTF-8"?><variable>
  <set id="EMV.Tag.9F02">000000000199</set>
  <set id="EMV.Tag.9C">00</set>
  <set id="EncType">D</set> 
</variable>

In the example above, the command initiates a sales transaction of $1.99 using triple DES encryption.

Typically, the device will go through multiple prompts to enter user data. In order to retrieve data, post to device payment event command. For example:

GET /cgi-bin/payment/event?timeout=0

Device response can be as follows:

Emv.Step=ManualEntry
Emv.Status=0
WhitelistName=
encAccountNumber=c32a7d0eebf2960cbd1f5fdbd3129bbc
PanHash=23DE732336A6AAF9CC81C969682F6280EB4E4A6658B1D6FB1A601EC2FD1FCEDB
p2peStatus=Ok
p2peKeyType=8
DUKPTP2P.KSN=00022800000000400034
p2peKeyId=1
cnum=5413330000094111
maskAccountNumber=541333******4111
E2EEncType=5
E2EEncryptionStatus=00
response=0

Use DUKPTP2P.KSN value as ksn, encAccountNumber value as devicePayload in the following sample cURL request:

curl 'https://cert-parser.decryptx.com/api/decrypt/parser' \
     -X POST \
     --header 'Content-Type: application/json' \
     --header 'Accept: application/json' \
     -d '{
            "partnerId"     : "?????????",
            "partnerKey"    : "ef1ad938150fb15a1384b883a104ce70",
            "ksn"           : "00022800000000400034",
            "deviceType"    : "equinox",
            "deviceSerial"  : "A1850003005580",
            "devicePayload" : "c32a7d0eebf2960cbd1f5fdbd3129bbc"
         }'

Response body from the cURL request:

{
    "success"   : true,
    "messageId" : "1201709180947581213150291",
    "meta": {
        "device" : "equinox",
        "serial" : "A1850003005580",
        "mode"   : "keyed"
    },
    "keyed": {
        "decrypted" : "35343133333330303839363034313131",
        "encoding"  : "ascii",
        "length"    : 32,
        "ascii"     : "5413330089604111",
        "masked"    : "541333******4111"
    },
    "extracted": {
        "PAN": "5413330089604111"
    }
}

Swiped Payloads

To initiate a payment processing transaction, send the following command:

POST /cgi-bin/payment/start
<?xml version="1.0" encoding="UTF-8"?><variable>
  <set id="EMV.Tag.9F02">000000000199</set>
  <set id="EMV.Tag.9C">00</set>
  <set id="EncType">D</set> 
</variable>

In the example above, the command initiates a sales transaction of $1.99 using Triple DES Encryption.

Typically, the device will go through multiple prompts to enter user data. In order to retrieve data, post a payment event command to the device. For example:

GET /cgi-bin/payment/event?timeout=0

Device response can be as follows:

Emv.Step=MSR
Track1Data=B5415240000064444^TEST/BLUEFIN^2212101123456789
Track2Data=5415240000064444=2212101123456789
ServiceCode=101
TrackDataSource=0
WhitelistName=
encTrack1Data=e9bf8da7d02490048b6b32b3c19b1670c1d9ee86bfea746585e855f48104504eb29a3c47109de0f8d68a2c236d942191
encTrack2Data=69b5200df758839ba9b1471a3877c09d03ecebfeca99983b5ccbb6fdb05b78d749b1b899c3ef4fbb
encAccountNumber=69b5200df758839ba9b1471a3877c09d
PanHash=F538A453AA43DA6DD54779A44708EEE282568B9301BA697F9475F336E5140EBF
swipestatus=1
E2EEncType=5
E2EEncryptionStatus=00
p2peStatus=Ok
p2peKeyType=8
DUKPTP2P.KSN=00022800000000400033
p2peKeyId=1
fname=BLUEFIN
lname=TEST
cnum=5415240000064444
response=0

Use DUKPTP2P.KSN value as ksn. Use encTrack1Data or encTrack2Data value as devicePayload in the following sample cURL request:

curl 'https://cert-parser.decryptx.com/api/decrypt/parser' \
     -X POST \
     --header 'Content-Type: application/json' \
     --header 'Accept: application/json' \
     -d '{
            "partnerId"     : "?????????",
            "partnerKey"    : "ef1ad938150fb15a1384b883a104ce70",
            "ksn"           : "00022800000000400033",
            "deviceType"    : "equinox",
            "deviceSerial"  : "A1850003005580",
            "devicePayload" : "e9bf8da7d02490048b6b32b3c19b1670c1d9ee86bfea746585e855f48104504eb29a3c47109de0f8d68a2c236d942191"
         }'

Response body from the cURL request:

{
    "success"  : true,
    "messageId": "1201709151448251211602128",
    "meta" : {
        "device" : "equinox",
        "serial" : "A1850003005580",
        "mode"   : "swiped"
    },
    "track1" : {
        "decrypted" : "42353431353234343434343434343434345e544553542f424c554546494e5e3232313231303131323334353637383900",
        "encoding"  : "hex",
        "length"    : 50,
        "ascii"     : "B5415244444444444^TEST/BLUEFIN^2212101123456789",
        "masked"    : "B541524******4444^TEST/BLUEFIN^2212101123456789"
    },
    "extracted" : {
        "PAN"       : "5415244444444444",
        "EXPY"      : "1222",
        "Surname"   : "TEST",
        "FirstName" : "BLUEFIN",
        "ServiceCode"   : "101",
        "Discretionary" : "123456789"
    }
}

EMV Payloads

Initiate a payment processing transaction by sending the following command:

POST /cgi-bin/payment/start
<?xml version="1.0" encoding="UTF-8"?><variable>
  <set id="EMV.Tag.9F02">000000000199</set>
  <set id="EMV.Tag.9C">00</set>
  <set id="EncType">D</set> 
</variable>

In the example above, the command initiates a sales transaction of $1.99 using Triple DES Encryption.

Typically, the device will go through multiple prompts to enter user data. In order to retrieve data, post a payment event command to the device. For example:

GET /cgi-bin/payment/event?timeout=0

Device response can be as follows:

Emv.Step=ContinueEmv
Emv.Status=85
Emv.Tag.Encrypted.5A=50749992b86e3006f3f7e715f532be86
Emv.Tag.5A=2223000000011723
Emv.Tag.95=0000208000
Emv.Tag.9F34=420300
Emv.Tag.9F37=4F4E328A
Emv.Tag.EQ22=900000003CAAB800FFFFFFFF005190700000000401000000
Emv.Tag.9B=C800
encAccountNumber=50749992b86e3006f3f7e715f532be86
E2EEncType=5
p2peKeyId=1
E2EEncryptionStatus=00
p2peStatus=Ok
p2peKeyType=8
WhitelistName=
Emv.Tag.Encrypted.57=50749992b86e3006f3f7e715f532be86511ea144c6e1c7d564474b971b9efff7e57d6474855cceb8
Emv.Tag.57=2223000000011723D19122010000000002100
Emv.Tag.5F20=TEST CARD/EMV BIN-2
Emv.Tag.5F24=191231
Emv.Tag.5F30=0201
DUKPTP2P.KSN=0002280000000040002E
pinstatus=0
Emv.AccountType=00
CB_Total=000000000000
Emv.Tag.9F02=000000000199
Emv.Tag.9F39=05
Emv.Tag.9F33=E0F8C8
Emv.Tag.9F1A=0840
Emv.Tag.9A=190618
Emv.Tag.9C=00
Emv.Tag.5F2A=0840
response=0

Use DUKPTP2P.KSN value as ksn. Use Emv.Tag.Encrypted.57 or Emv.Tag.Encrypted.5A value as devicePayload in the following sample cURL request:

curl 'https://cert-parser.decryptx.com/api/decrypt/parser' \
     -X POST \
     --header 'Content-Type: application/json' \
     --header 'Accept: application/json' \
     -d '{
            "partnerId"     : "?????????",
            "partnerKey"    : "ef1ad938150fb15a1384b883a104ce70",
            "ksn"           : "0002280000000040002E",
            "deviceType"    : "equinox",
            "deviceSerial"  : "A1850003005580",
            "devicePayload" : "50749992b86e3006f3f7e715f532be86511ea144c6e1c7d564474b971b9efff7e57d6474855cceb8"
         }'

Response body from the cURL request:

{
    "success"   : true,
    "messageId" : "1201804181330091001344015",
    "meta": {
        "device" : "equinox",
        "serial" : "A1850003005580",
        "mode"   : "swiped"
    },
    "track2": {
        "decrypted" : "323232333030303031303235313732333d3139313232303130303030303030303032313030000000",
        "encoding"  : "hex",
        "length"    : 80,
        "ascii"     : "2223000010251723=19122010000000002100",
        "masked"    : "222300******1723=19122010000000002100"
    },
    "extracted": {
        "PAN"  : "2223000010251723",
        "EXPY" : "1219",
        "ServiceCode"   : "201",
        "Discretionary" : "0000000002100"
    }
}