Calculate CVV (Visa)
Java
SMAdapter<SecureKey> adapter = createAdapter();
SecureDESKey cvkA = new SecureDESKey(SMAdapter.LENGTH_DES, SMAdapter.TYPE_CVK,
"47569324523156ED", "000000");
SecureDESKey cvkB = new SecureDESKey(SMAdapter.LENGTH_DES, SMAdapter.TYPE_CVK,
"31EF061469307970", "000000");
String cvv = adapter.calculateCVD("4111111111111", cvkA, cvkB, "2512", "000");
Validate CVV (Visa)
Java
String pan = "4111111111111";
String exp = "2512";
String serviceCode = "000";
String cvv = "588";
SecureDESKey cvkA = new SecureDESKey(SMAdapter.LENGTH_DES, SMAdapter.TYPE_CVK,
"47569324523156ED", "000000");
SecureDESKey cvkB = new SecureDESKey(SMAdapter.LENGTH_DES, SMAdapter.TYPE_CVK,
"31EF061469307970", "000000");
SMAdapter<SecureKey> adapter = createAdapter();
adapter.verifyCVD(pan, cvkA, cvkB, cvv, exp, serviceCode);
Calculate CVC (Mastercard)
Java
String pan = "5555444433331111";
String exp = "2512";
String serviceCode = "000";
String cvk = "47569324523156ED31EF061469307970";
ExcryptAdapter adapter = createAdapter();
String cvv = adapter.calculateCVCMastercard(pan, exp, serviceCode, cvk);
Validate CVC (Mastercard)
Java
String pan = "5555444433331111";
String exp = "2512";
String serviceCode = "000";
String cvk = "47569324523156ED31EF061469307970";
String cvv = "267";
ExcryptAdapter adapter = createAdapter();
adapter.verifyCVCMastercard(pan, exp, serviceCode, cvv, cvk);
Generating a new working key
Java
String kek = "042FAEDF91FE6ED67F97982CE545401C"; // KEK under MFK.
ExcryptAdapter adapter = createAdapter();
String[] r = adapter.generateWorkingKey(kek, "PEK");
String keyUnderMFK = r[0]; // New key under MFK.
String keyUnderKEK = r[1]; // New key under KEK.
String kcv = r[2]; // Check digits.
Translating a PIN block
Java
SMAdapter<SecureKey> adapter = createAdapter();
String pan = "5556543210123455";
// Get the last 12 digits, excluding the check digit.
pan = pan.substring(0, pan.length() - 1);
pan = ISOUtil.takeLastN(pan, 12);
EncryptedPIN pinUnderZPK1 = new EncryptedPIN();
pinUnderZPK1.setAccountNumber(pan);
pinUnderZPK1.setPINBlock(ISOUtil.hex2byte("0E3FCCB186078F16")); // Incoming PIN block.
pinUnderZPK1.setPINBlockFormat(SMAdapter.FORMAT01);
SecureDESKey zpk1 = new SecureDESKey(SMAdapter.LENGTH_DES3_2KEY, SMAdapter.TYPE_ZPK,
"69901BDF941207303B41D17AFF85D60C", "000000");
SecureDESKey zpk2 = new SecureDESKey(SMAdapter.LENGTH_DES3_2KEY, SMAdapter.TYPE_ZPK,
"BDA3222FF277198E87D994795F9C4902", "000000");
EncryptedPIN pinUnderZPK2 = adapter.translatePIN(pinUnderZPK1, zpk1, zpk2, SMAdapter.FORMAT01);
System.out.println(ISOUtil.byte2hex(pinUnderZPK2.getPINBlock())); // PIN block under ZPK 2.
Encrypt a clear PIN under Key Encrypt Key ( KEK )
Java
String kek = "69901BDF941207303B41D17AFF85D60C";
String pan = "4111111111111111";
String pin = "1234";
ExcryptAdapter adapter = createAdapter();
String encPINBlk = adapter.encryptPIN(pan, pin, zpk1); // Returns PIN block in hex.
ARQC validation
Java
String pan = "123456789012";
String psn = "10";
SecureDESKey imkac = new SecureDESKey(SMAdapter.LENGTH_DES3_2KEY, SMAdapter.TYPE_MK_AC,
"12345678901234561234567890123456", "000000");
byte[] atc = ISOUtil.hex2byte("ABCD");
byte[] txnData = ISOUtil.hex2byte("DEADBEEFDEADBEDEAD");
byte[] arqc = ISOUtil.hex2byte("A8F6741A34F1A6B2");
byte[] upn = ISOUtil.hex2byte("1234ABCD");
SMAdapter<SecureKey> adapter = createAdapter();
boolean isValid = adapter.verifyARQC(MKDMethod.OPTION_A, SKDMethod.MCHIP, imkac, pan, psn, arqc,atc, upn, txnData);
ARQC validation and ARPC generation
Java
String pan = "123456789012"; // Last 12 bytes, excluding check digit.
String psn = "10";
SecureDESKey imkac = new SecureDESKey(SMAdapter.LENGTH_DES3_2KEY, SMAdapter.TYPE_MK_AC,"12345678901234561234567890123456", "000000");
byte[] atc = ISOUtil.hex2byte("ABCD");
byte[] txnData = ISOUtil.hex2byte("DEADBEEFDEADBEDEAD");
byte[] arqc = ISOUtil.hex2byte("A8F6741A34F1A6B2");
byte[] upn = ISOUtil.hex2byte("1234ABCD");
SMAdapter<SecureKey> adapter = createAdapter();
byte[] arpc = adapter.verifyARQCGenerateARPC(MKDMethod.OPTION_A, SKDMethod.MCHIP, imkac, pan, psn, arqc, atc, upn, txnData, ARPCMethod.METHOD_1, ISOUtil.hex2byte("0012"), null)

