public interface SMAdapter<T>
Modifier and Type | Field and Description |
---|---|
static byte |
FORMAT00
Proprietary PIN Block format.
|
static byte |
FORMAT01
PIN Block Format adopted by ANSI (ANSI X9.8) and is one of
two formats supported by the ISO (ISO 95641 - format 0).
|
static byte |
FORMAT02
PIN Block Format 02 supports Douctel ATMs.
|
static byte |
FORMAT03
PIN Block Format 03 is the Diabold Pin Block format.
|
static byte |
FORMAT04
PIN Block Format 04 is the PIN block format adopted
by the PLUS network.
|
static byte |
FORMAT05
PIN Block Format 05 is the ISO 9564-1 Format 1 PIN Block.
|
static byte |
FORMAT34
PIN Block Format 34 is the standard EMV PIN block format.
|
static byte |
FORMAT35
PIN Block Format 35 is the required by Europay/MasterCard
for their Pay Now & Pay Later products.
|
static byte |
FORMAT41
PIN Block Format 41 is the Visa format for PIN change
without using the current PIN.
|
static byte |
FORMAT42
PIN Block Format 42 is the Visa format for PIN change
using the current (old) PIN.
|
static short |
LENGTH_DES
DES Key Length
LENGTH_DES = 64. |
static short |
LENGTH_DES3_2KEY
Triple DES (2 keys)
LENGTH_DES3_2KEY = 128. |
static short |
LENGTH_DES3_3KEY
Triple DES (3 keys)
LENGTH_DES3_3KEY = 192. |
static java.lang.String |
TYPE_BDK
BDK: Base Derivation Key.
|
static java.lang.String |
TYPE_CVK
CVK: Card Verification Key.
|
static java.lang.String |
TYPE_DEK
DEK: Data Encryption Key.
|
static java.lang.String |
TYPE_HMAC
HMAC: Hash Message Authentication Code (with key usage).
|
static java.lang.String |
TYPE_MK_AC
MK-AC: Issuer Master Key for generating and verifying
Application Cryptograms.
|
static java.lang.String |
TYPE_MK_CVC3
MK-CVC3: Issuer Master Key for generating and verifying
Card Verification Code 3 (CVC3).
|
static java.lang.String |
TYPE_MK_DAC
MK-DAC Issuer Master Key for generating and verifying
Data Authentication Codes.
|
static java.lang.String |
TYPE_MK_DN
MK-DN: Issuer Master Key for generating and verifying
Dynamic Numbers.
|
static java.lang.String |
TYPE_MK_SMC
MK-SMC: Issuer Master Key for Secure Messaging Confidentiality.
|
static java.lang.String |
TYPE_MK_SMI
MK-SMI: Issuer Master Key for Secure Messaging Integrity.
|
static java.lang.String |
TYPE_PVK
PVK: PIN Verification Key.
|
static java.lang.String |
TYPE_RSA_PK
RSA: Public Key.
|
static java.lang.String |
TYPE_RSA_SK
RSA: Private Key.
|
static java.lang.String |
TYPE_TAK
TAK: Terminal Authentication Key.
|
static java.lang.String |
TYPE_TMK
TMK: Terminal Master Key.
|
static java.lang.String |
TYPE_TPK
TPK: Terminal PIN Key.
|
static java.lang.String |
TYPE_ZAK
ZAK: Zone Authentication Key.
|
static java.lang.String |
TYPE_ZEK
ZEK: Zone Encryption Key.
|
static java.lang.String |
TYPE_ZMK
ZMK: Zone Master Key is a DES (or Triple-DES) key-encryption key which is distributed
manually in order that further keys can be exchanged automatically.
|
static java.lang.String |
TYPE_ZPK
ZPK: Zone PIN Key.
|
Modifier and Type | Method and Description |
---|---|
java.lang.String |
calculateCAVV(java.lang.String accountNo,
T cvk,
java.lang.String upn,
java.lang.String authrc,
java.lang.String sfarc)
Calaculate a 3-D Secure CAVV/AAV.
|
java.lang.String |
calculateCVD(java.lang.String accountNo,
T cvkA,
T cvkB,
java.lang.String expDate,
java.lang.String serviceCode)
Calaculate a Card Verification Digit (Code/Value).
|
java.lang.String |
calculateCVV(java.lang.String accountNo,
T cvkA,
T cvkB,
java.util.Date expDate,
java.lang.String serviceCode)
Deprecated.
Issuers do not always follow the recommended 'yyMM' format.
Using the
java.util.Date prevents from format manipulating to
solve problem. Use calculateCVD(java.lang.String, T, T, java.lang.String, java.lang.String) with string version of expDate |
java.lang.String |
calculateIBMPINOffset(EncryptedPIN pinUnderLmk,
T pvk,
java.lang.String decTab,
java.lang.String pinValData,
int minPinLen)
Calculate an PIN Offset using the IBM 3624 method
|
java.lang.String |
calculateIBMPINOffset(EncryptedPIN pinUnderLmk,
T pvk,
java.lang.String decTab,
java.lang.String pinValData,
int minPinLen,
java.util.List<java.lang.String> excludes)
Calculate an PIN Offset using the IBM 3624 method
|
java.lang.String |
calculateIBMPINOffset(EncryptedPIN pinUnderKd1,
T kd1,
T pvk,
java.lang.String decTab,
java.lang.String pinValData,
int minPinLen)
Calculate an PIN Offset using the IBM 3624 method of customer selected PIN
|
java.lang.String |
calculateIBMPINOffset(EncryptedPIN pinUnderKd1,
T kd1,
T pvk,
java.lang.String decTab,
java.lang.String pinValData,
int minPinLen,
java.util.List<java.lang.String> excludes)
Calculate an PIN Offset using the IBM 3624 method of customer selected PIN
|
java.lang.String |
calculatePVV(EncryptedPIN pinUnderLmk,
T pvkA,
T pvkB,
int pvkIdx)
Calculate PVV (VISA PIN Verification Value of PIN under LMK)
with exclude list
|
java.lang.String |
calculatePVV(EncryptedPIN pinUnderLmk,
T pvkA,
T pvkB,
int pvkIdx,
java.util.List<java.lang.String> excludes)
Calculate PVV (VISA PIN Verification Value of PIN under LMK)
|
java.lang.String |
calculatePVV(EncryptedPIN pinUnderKd1,
T kd1,
T pvkA,
T pvkB,
int pvkIdx)
Calculate PVV (VISA PIN Verification Value of customer selected PIN)
|
java.lang.String |
calculatePVV(EncryptedPIN pinUnderKd1,
T kd1,
T pvkA,
T pvkB,
int pvkIdx,
java.util.List<java.lang.String> excludes)
Calculate PVV (VISA PIN Verification Value of customer selected PIN)
|
byte[] |
calculateSignature(java.security.MessageDigest hash,
SecureKey privateKey,
byte[] data)
Calculate signature of Data Block.
|
byte[] |
dataDecrypt(T bdk,
byte[] cypherText)
Decrypt Data
|
byte[] |
dataEncrypt(T bdk,
byte[] clearText)
Encrypt Data
|
byte[] |
decryptData(CipherMode cipherMode,
SecureDESKey kd,
byte[] data,
byte[] iv)
Decrypt Data Block.
|
byte[] |
decryptData(SecureKey decKey,
byte[] data,
java.security.spec.AlgorithmParameterSpec algspec,
byte[] iv)
Decrypts encrypted Data Block with specified cipher.
|
java.lang.String |
decryptPIN(EncryptedPIN pinUnderLmk)
Decrypts an Encrypted PIN (under LMK).
|
EncryptedPIN |
deriveIBMPIN(java.lang.String accountNo,
T pvk,
java.lang.String decTab,
java.lang.String pinValData,
int minPinLen,
java.lang.String offset)
Derive a PIN Using the IBM 3624 method
|
byte[] |
encryptData(CipherMode cipherMode,
SecureDESKey kd,
byte[] data,
byte[] iv)
Encrypt Data Block.
|
byte[] |
encryptData(SecureKey encKey,
byte[] data,
java.security.spec.AlgorithmParameterSpec algspec,
byte[] iv)
Encrypts clear Data Block with specified cipher.
|
EncryptedPIN |
encryptPIN(java.lang.String pin,
java.lang.String accountNumber)
Encrypts a clear pin under LMK.
|
EncryptedPIN |
encryptPIN(java.lang.String pin,
java.lang.String accountNumber,
boolean extract)
Encrypts a clear pin under LMK.
|
EncryptedPIN |
encryptPIN(java.lang.String pin,
java.lang.String accountNumber,
T pek)
Encrypts a clear PIN under PEK.
|
void |
eraseOldLMK()
Erase the key change storage area of memory
It is recommended that this command is used after keys stored
by the Host have been translated from old to new LMKs.
|
byte[] |
exportKey(SecureDESKey key,
SecureDESKey kek)
Exports secure key to encryption under a KEK (Key-Encrypting Key).
|
SecureKey |
exportKey(SecureKey kek,
SecureKey key,
SecureKeySpec keySpec)
Exports secure key to encryption under a KEK (Key-Encrypting Key).
|
EncryptedPIN |
exportPIN(EncryptedPIN pinUnderLmk,
T kd2,
byte destinationPINBlockFormat)
Exports a PIN from encryption under LMK to encryption under a KD
(Data Key).
|
SecureDESKey |
formKEYfromClearComponents(short keyLength,
java.lang.String keyType,
java.lang.String... clearComponent)
Forms a key from 3 clear components and returns it encrypted under its corresponding LMK
The corresponding LMK is determined from the keyType
|
byte[] |
generateARPC(MKDMethod mkdm,
SKDMethod skdm,
T imkac,
java.lang.String accoutNo,
java.lang.String acctSeqNo,
byte[] arqc,
byte[] atc,
byte[] upn,
ARPCMethod arpcMethod,
byte[] arc,
byte[] propAuthData)
Genarate Authorisation Response Cryptogram (ARPC)
|
byte[] |
generateCBC_MAC(byte[] data,
T kd)
Generates CBC-MAC (Cipher Block Chaining Message Authentication Code)
for some data.
|
default java.lang.String |
generateClearKeyComponent(short keyLength)
Generates a random clear key component.
|
byte[] |
generateEDE_MAC(byte[] data,
T kd)
Generates EDE-MAC (Encrypt Decrypt Encrypt Message Message Authentication Code)
for some data.
|
SecureKey |
generateKey(SecureKeySpec keySpec)
Generates a random Key.
|
SecureDESKey |
generateKey(short keyLength,
java.lang.String keyType)
Generates a random DES Key.
|
byte[] |
generateKeyCheckValue(T kd)
Generates key check value.
|
org.javatuples.Pair<java.security.PublicKey,SecurePrivateKey> |
generateKeyPair(java.security.spec.AlgorithmParameterSpec spec)
Generate a public/private key pair.
|
org.javatuples.Pair<java.security.PublicKey,SecureKey> |
generateKeyPair(SecureKeySpec keySpec)
Generate a public/private key pair.
|
EncryptedPIN |
generatePIN(java.lang.String accountNumber,
int pinLen)
Generate random pin under LMK
|
EncryptedPIN |
generatePIN(java.lang.String accountNumber,
int pinLen,
java.util.List<java.lang.String> excludes)
Generate random pin under LMK with exclude list
|
byte[] |
generateSM_MAC(MKDMethod mkdm,
SKDMethod skdm,
T imksmi,
java.lang.String accountNo,
java.lang.String acctSeqNo,
byte[] atc,
byte[] arqc,
byte[] data)
Generate Secure Message MAC over suppiled message data
|
SecureKey |
importKey(SecureKey kek,
SecureKey key,
SecureKeySpec keySpec,
boolean checkParity)
Imports a key from encryption under a KEK (Key-Encrypting Key)
to protection under the security module.
|
SecureDESKey |
importKey(short keyLength,
java.lang.String keyType,
byte[] encryptedKey,
SecureDESKey kek,
boolean checkParity)
Imports a key from encryption under a KEK (Key-Encrypting Key)
to protection under the security module.
|
EncryptedPIN |
importPIN(EncryptedPIN pinUnderDuk,
KeySerialNumber ksn,
T bdk)
Deprecated.
Use signature that specifies tdes flag.
|
EncryptedPIN |
importPIN(EncryptedPIN pinUnderDuk,
KeySerialNumber ksn,
T bdk,
boolean tdes)
Imports a PIN from encryption under a transaction key to encryption
under LMK.
|
EncryptedPIN |
importPIN(EncryptedPIN pinUnderKd1,
T kd1)
Imports a PIN from encryption under KD (Data Key)
to encryption under LMK.
|
void |
printPIN(java.lang.String accountNo,
EncryptedPIN pinUnderKd1,
T kd1,
java.lang.String template,
java.util.Map<java.lang.String,java.lang.String> fields)
Print PIN or PIN and solicitation data to the HSM configured printer.
|
SecureDESKey |
translateKeyFromOldLMK(SecureDESKey kd)
Translate key from encryption under the LMK held in key change storage
to encryption under a new LMK.
|
SecureKey |
translateKeyFromOldLMK(SecureKey key,
SecureKeySpec keySpec)
Translate key from encryption under the LMK held in key change storage
to encryption under a new LMK.
|
SecureDESKey |
translateKeyScheme(SecureDESKey key,
KeyScheme keyScheme)
Translate Key Scheme to more secure encription.
|
EncryptedPIN |
translatePIN(EncryptedPIN pinUnderDuk,
KeySerialNumber ksn,
T bdk,
T kd2,
byte destinationPINBlockFormat)
Deprecated.
Use signature that specifies tdes flag.
|
EncryptedPIN |
translatePIN(EncryptedPIN pinUnderDuk,
KeySerialNumber ksn,
T bdk,
T kd2,
byte destinationPINBlockFormat,
boolean tdes)
Translates a PIN from encryption under a transaction key to
encryption under a KD (Data Key).
|
EncryptedPIN |
translatePIN(EncryptedPIN pinUnderKd1,
T kd1,
T kd2,
byte destinationPINBlockFormat)
Translates a PIN from encrytion under KD1 to encryption under KD2.
|
org.javatuples.Pair<EncryptedPIN,byte[]> |
translatePINGenerateSM_MAC(MKDMethod mkdm,
SKDMethod skdm,
PaddingMethod padm,
T imksmi,
java.lang.String accountNo,
java.lang.String acctSeqNo,
byte[] atc,
byte[] arqc,
byte[] data,
EncryptedPIN currentPIN,
EncryptedPIN newPIN,
T kd1,
T imksmc,
T imkac,
byte destinationPINBlockFormat)
Translate PIN and generate MAC over suppiled message data
|
boolean |
verifyARQC(MKDMethod mkdm,
SKDMethod skdm,
T imkac,
java.lang.String accountNo,
java.lang.String acctSeqNo,
byte[] arqc,
byte[] atc,
byte[] upn,
byte[] txnData)
Verify Application Cryptogram (ARQC or TC/AAC)
Authorization Request Cryptogram (ARQC) - Online authorization
Transaction certificate (TC) - Offline approval
Application Authentication Cryptogram (AAC) - Offline decline
|
byte[] |
verifyARQCGenerateARPC(MKDMethod mkdm,
SKDMethod skdm,
T imkac,
java.lang.String accountNo,
java.lang.String acctSeqNo,
byte[] arqc,
byte[] atc,
byte[] upn,
byte[] txnData,
ARPCMethod arpcMethod,
byte[] arc,
byte[] propAuthData)
Verify Application Cryptogram (ARQC or TC/AAC) and Genarate
Authorisation Response Cryptogram (ARPC)
Authorization Request Cryptogram (ARQC) - Online authorization
Transaction certificate (TC) - Offline approval
Application Authentication Cryptogram (AAC) - Offline decline
|
boolean |
verifyCAVV(java.lang.String accountNo,
T cvk,
java.lang.String cavv,
java.lang.String upn,
java.lang.String authrc,
java.lang.String sfarc)
Verify a 3-D Secure CAVV/AAV.
|
boolean |
verifyCVC3(T imkcvc3,
java.lang.String accountNo,
java.lang.String acctSeqNo,
byte[] atc,
byte[] upn,
byte[] data,
MKDMethod mkdm,
java.lang.String cvc3)
Verify a Dynamic Card Verification Code 3 (CVC3)
|
boolean |
verifyCVD(java.lang.String accountNo,
T cvkA,
T cvkB,
java.lang.String cvv,
java.lang.String expDate,
java.lang.String serviceCode)
Verify a Card Verification Digit (Code/Value).
|
boolean |
verifyCVV(java.lang.String accountNo,
T cvkA,
T cvkB,
java.lang.String cvv,
java.util.Date expDate,
java.lang.String serviceCode)
Deprecated.
Issuers do not always follow the recommended 'yyMM' format.
Using the
java.util.Date prevents from format manipulating to
solve problem. Use verifyCVD(java.lang.String, T, T, java.lang.String, java.lang.String, java.lang.String) with string version of expDate |
boolean |
verifydCVV(java.lang.String accountNo,
T imkac,
java.lang.String dcvv,
java.util.Date expDate,
java.lang.String serviceCode,
byte[] atc,
MKDMethod mkdm)
Deprecated.
Issuers do not always follow the recommended 'yyMM' format.
Using the
java.util.Date prevents from format manipulating to
solve problem. Use verifydCVV(java.lang.String, T, java.lang.String, java.util.Date, java.lang.String, byte[], org.jpos.security.MKDMethod) with string version of expDate |
boolean |
verifydCVV(java.lang.String accountNo,
T imkac,
java.lang.String dcvv,
java.lang.String expDate,
java.lang.String serviceCode,
byte[] atc,
MKDMethod mkdm)
Verify a Dynamic Card Verification Value (dCVV).
|
boolean |
verifyIBMPINOffset(EncryptedPIN pinUnderKd1,
T kd1,
T pvk,
java.lang.String offset,
java.lang.String decTab,
java.lang.String pinValData,
int minPinLen)
Verify an PIN Offset using the IBM 3624 method
|
boolean |
verifyPVV(EncryptedPIN pinUnderKd1,
T kd1,
T pvkA,
T pvkB,
int pvki,
java.lang.String pvv)
Verify PVV (VISA PIN Verification Value of an LMK encrypted PIN)
|
static final short LENGTH_DES
LENGTH_DES
= 64.static final short LENGTH_DES3_2KEY
LENGTH_DES3_2KEY
= 128.static final short LENGTH_DES3_3KEY
LENGTH_DES3_3KEY
= 192.static final java.lang.String TYPE_ZMK
static final java.lang.String TYPE_ZPK
static final java.lang.String TYPE_TMK
static final java.lang.String TYPE_TPK
static final java.lang.String TYPE_TAK
static final java.lang.String TYPE_PVK
static final java.lang.String TYPE_CVK
static final java.lang.String TYPE_BDK
static final java.lang.String TYPE_ZAK
static final java.lang.String TYPE_MK_AC
static final java.lang.String TYPE_MK_SMI
static final java.lang.String TYPE_MK_SMC
static final java.lang.String TYPE_MK_CVC3
static final java.lang.String TYPE_MK_DAC
static final java.lang.String TYPE_MK_DN
static final java.lang.String TYPE_ZEK
static final java.lang.String TYPE_DEK
static final java.lang.String TYPE_RSA_SK
static final java.lang.String TYPE_HMAC
static final java.lang.String TYPE_RSA_PK
static final byte FORMAT01
static final byte FORMAT02
static final byte FORMAT03
static final byte FORMAT04
static final byte FORMAT05
static final byte FORMAT34
static final byte FORMAT35
static final byte FORMAT41
static final byte FORMAT42
static final byte FORMAT00
Most Security Modules use a proprietary PIN Block format when encrypting the PIN under the LMK of the Security Module hence this format (FORMAT00).
This is not a standard format, every Security Module would interpret FORMAT00 differently. So, no interchange would accept PIN Blocks from other interchanges using this format. It is useful only when working with PIN's inside your own interchange.
SecureDESKey generateKey(short keyLength, java.lang.String keyType) throws SMException
keyType
- type of the key to be generated (TYPE_ZMK, TYPE_TMK...etc)keyLength
- bit length of the key to be generated (LENGTH_DES, LENGTH_DES3_2KEY...)SMException
SecureKey generateKey(SecureKeySpec keySpec) throws SMException
keySpec
- the specification of the key to be generated
(length, type, usage, algorithm, etc)SMException
SecureKeySpec
byte[] generateKeyCheckValue(T kd) throws SMException
kd
- the key with untrusted or fake Key Check ValueSMException
SecureDESKey translateKeyScheme(SecureDESKey key, KeyScheme keyScheme) throws SMException
Converts an DES key encrypted using X9.17 methods to a more secure key using the variant method.
key
- key to be translated to destKeyScheme
schemekeyScheme
- destination key schemedestKeyScheme
schemeSMException
SecureDESKey importKey(short keyLength, java.lang.String keyType, byte[] encryptedKey, SecureDESKey kek, boolean checkParity) throws SMException
keyLength
- bit length of the key to be imported (LENGTH_DES, LENGTH_DES3_2KEY...etc)keyType
- type of the key to be imported (TYPE_ZMK, TYPE_TMK...etc)encryptedKey
- key to be imported encrypted under KEKkek
- the key-encrypting keycheckParity
- if true, the key is not imported unless it has adjusted paritySMException
- if the parity of the imported key is not adjusted AND checkParity = trueSecureKey importKey(SecureKey kek, SecureKey key, SecureKeySpec keySpec, boolean checkParity) throws SMException
kek
- the key-encrypting keykey
- key to be imported and encrypted under KEKkeySpec
- the specification of the key to be imported. It allows
passing or change key block attributes.checkParity
- if true
, the key is not imported unless it has
adjusted paritySMException
- e.g: if the parity of the imported key is not adjusted
and checkParity
is true
byte[] exportKey(SecureDESKey key, SecureDESKey kek) throws SMException
key
- the secure key to be exportedkek
- the key-encrypting keySMException
SecureKey exportKey(SecureKey kek, SecureKey key, SecureKeySpec keySpec) throws SMException
kek
- the key-encrypting keykey
- the secure key to be exportedkeySpec
- the specification of the key to be exported. It allows
passing or change key block attributes.SMException
EncryptedPIN encryptPIN(java.lang.String pin, java.lang.String accountNumber) throws SMException
CAUTION: The use of clear pin presents a significant security risk
pin
- clear pin as entered by card holderaccountNumber
- account number, including BIN and the check digitSMException
EncryptedPIN encryptPIN(java.lang.String pin, java.lang.String accountNumber, boolean extract) throws SMException
CAUTION: The use of clear pin presents a significant security risk
pin
- clear pin as entered by cardholderaccountNumber
- if extract
is false then account number, including BIN and the check digit
or if parameter extract
is true then 12 right-most digits of the account number, excluding the check digitextract
- true to extract 12 right-most digits off the account numberSMException
EncryptedPIN encryptPIN(java.lang.String pin, java.lang.String accountNumber, T pek) throws SMException
CAUTION: The use of clear PIN presents a significant security risk.
pin
- Clear PIN as entered by cardholder.accountNumber
- account number, including BIN and the check digit.pek
- PIN encryption key.SMException
java.lang.String decryptPIN(EncryptedPIN pinUnderLmk) throws SMException
CAUTION: The use of clear pin presents a significant security risk
pinUnderLmk
- SMException
EncryptedPIN importPIN(EncryptedPIN pinUnderKd1, T kd1) throws SMException
pinUnderKd1
- the encrypted PINkd1
- Data Key under which the pin is encryptedSMException
EncryptedPIN translatePIN(EncryptedPIN pinUnderKd1, T kd1, T kd2, byte destinationPINBlockFormat) throws SMException
pinUnderKd1
- pin encrypted under KD1kd1
- Data Key (also called session key) under which the pin is encryptedkd2
- the destination Data Key 2 under which the pin will be encrypteddestinationPINBlockFormat
- the PIN Block Format of the exported encrypted PINSMException
EncryptedPIN importPIN(EncryptedPIN pinUnderDuk, KeySerialNumber ksn, T bdk) throws SMException
The transaction key is derived from the Key Serial Number and the Base Derivation Key using DUKPT (Derived Unique Key per Transaction). See ANSI X9.24 for more information.
pinUnderDuk
- pin encrypted under a transaction keyksn
- Key Serial Number (also called Key Name, in ANSI X9.24) needed to derive the transaction keybdk
- Base Derivation Key, used to derive the transaction key underwhich the pin is encryptedSMException
EncryptedPIN importPIN(EncryptedPIN pinUnderDuk, KeySerialNumber ksn, T bdk, boolean tdes) throws SMException
The transaction key is derived from the Key Serial Number and the Base Derivation Key using DUKPT (Derived Unique Key per Transaction). See ANSI X9.24 for more information.
pinUnderDuk
- pin encrypted under a transaction keyksn
- Key Serial Number (also called Key Name, in ANSI X9.24) needed to derive the transaction keybdk
- Base Derivation Key, used to derive the transaction key underwhich the pin is encryptedtdes
- Use Triple DES to calculate derived transaction key.SMException
EncryptedPIN translatePIN(EncryptedPIN pinUnderDuk, KeySerialNumber ksn, T bdk, T kd2, byte destinationPINBlockFormat) throws SMException
The transaction key is derived from the Key Serial Number and the Base Derivation Key using DUKPT (Derived Unique Key per Transaction). See ANSI X9.24 for more information.
pinUnderDuk
- pin encrypted under a DUKPT transaction keyksn
- Key Serial Number (also called Key Name, in ANSI X9.24) needed to derive the transaction keybdk
- Base Derivation Key, used to derive the transaction key underwhich the pin is encryptedkd2
- the destination Data Key (also called session key) under which the pin will be encrypteddestinationPINBlockFormat
- the PIN Block Format of the translated encrypted PINSMException
EncryptedPIN translatePIN(EncryptedPIN pinUnderDuk, KeySerialNumber ksn, T bdk, T kd2, byte destinationPINBlockFormat, boolean tdes) throws SMException
The transaction key is derived from the Key Serial Number and the Base Derivation Key using DUKPT (Derived Unique Key per Transaction). See ANSI X9.24 for more information.
pinUnderDuk
- pin encrypted under a DUKPT transaction keyksn
- Key Serial Number (also called Key Name, in ANSI X9.24) needed to derive the transaction keybdk
- Base Derivation Key, used to derive the transaction key underwhich the pin is encryptedkd2
- the destination Data Key (also called session key) under which the pin will be encrypteddestinationPINBlockFormat
- the PIN Block Format of the translated encrypted PINtdes
- Use Triple DES to calculate derived transaction key.SMException
EncryptedPIN exportPIN(EncryptedPIN pinUnderLmk, T kd2, byte destinationPINBlockFormat) throws SMException
pinUnderLmk
- pin encrypted under LMKkd2
- the destination data key (also called session key) under which the pin will be encrypteddestinationPINBlockFormat
- the PIN Block Format of the exported encrypted PINSMException
EncryptedPIN generatePIN(java.lang.String accountNumber, int pinLen) throws SMException
accountNumber
- The 12 right-most digits of the account number excluding the check digitpinLen
- length of the pin, usually in range 4-12.
Value 0 means that default length is assumed by HSM (usually 4)SMException
EncryptedPIN generatePIN(java.lang.String accountNumber, int pinLen, java.util.List<java.lang.String> excludes) throws SMException
accountNumber
- The 12 right-most digits of the account number excluding the check digitpinLen
- length of the pin, usually in range 4-12.
Value 0 means that default length is assumed by HSM (usually 4)excludes
- list of pins which won't be generated.
Each pin has to be pinLen
lengthSMException
void printPIN(java.lang.String accountNo, EncryptedPIN pinUnderKd1, T kd1, java.lang.String template, java.util.Map<java.lang.String,java.lang.String> fields) throws SMException
If kd1
includes an encrypted PIN block then is first imported,
Also template is updated if needed in HSM storage. Then the PIN and
solicitation data are included into the template and result are
printed to the HSM attached printer.
accountNo
- The 12 right-most digits of the account number excluding the check digit.pinUnderKd1
- pin block under Key Data 1kd1
- Data Key 1 ZPK, TPK may be null if pinUnderKd1
contains PIN under LMKtemplate
- template text (PCL, PostScript or other) for PIN Mailer printer.
Its format depends on used HSM. This template should
includes placeholders tags (e.g. in format ${tag})
indicationg place where coresponding value or PIN should
be inserted. Tags values are passed in fields
map argument except PIN which is passed in argument pinUnderKd1
.fields
- map of tags values representing solicitation data to include
in template. null if no solicitation data are passedSMException
java.lang.String calculatePVV(EncryptedPIN pinUnderLmk, T pvkA, T pvkB, int pvkIdx) throws SMException
NOTE: pvkA
and pvkB
should be single length keys
but at least one of them may be double length key
pinUnderLmk
- PIN under LMKpvkA
- first key PVK in PVK pairpvkB
- second key PVK in PVK pairpvkIdx
- index of the PVK, in range 0-6, if not present 0 is assumedSMException
- if PIN is on exclude list WeakPINException
is thrownjava.lang.String calculatePVV(EncryptedPIN pinUnderLmk, T pvkA, T pvkB, int pvkIdx, java.util.List<java.lang.String> excludes) throws SMException
NOTE: pvkA
and pvkB
should be single length keys
but at least one of them may be double length key
pinUnderLmk
- PIN under LMKpvkA
- first key PVK in PVK pairpvkB
- second key PVK in PVK pairpvkIdx
- index of the PVK, in range 0-6, if not present 0 is assumedexcludes
- list of pins which won't be generated.
Each pin has to be pinLen
lengthSMException
java.lang.String calculatePVV(EncryptedPIN pinUnderKd1, T kd1, T pvkA, T pvkB, int pvkIdx) throws SMException
NOTE: pvkA
and pvkB
should be single length keys
but at least one of them may be double length key
pinUnderKd1
- the encrypted PINkd1
- Data Key under which the pin is encryptedpvkA
- first key PVK in PVK pairpvkB
- second key PVK in PVK pairpvkIdx
- index of the PVK, in range 0-6, if not present 0 is assumedSMException
java.lang.String calculatePVV(EncryptedPIN pinUnderKd1, T kd1, T pvkA, T pvkB, int pvkIdx, java.util.List<java.lang.String> excludes) throws SMException
NOTE: pvkA
and pvkB
should be single length keys
but at least one of them may be double length key
pinUnderKd1
- the encrypted PINkd1
- Data Key under which the pin is encryptedpvkA
- first key PVK in PVK pairpvkB
- second key PVK in PVK pairpvkIdx
- index of the PVK, in range 0-6, if not present 0 is assumedexcludes
- list of pins which won't be generated.
Each pin has to be pinLen
lengthWeakPINException
- if passed PIN is on excludes
listSMException
boolean verifyPVV(EncryptedPIN pinUnderKd1, T kd1, T pvkA, T pvkB, int pvki, java.lang.String pvv) throws SMException
NOTE: pvkA
and pvkB
should be single
length keys but at least one of them may be double length key
pinUnderKd1
- pin block under kd1
kd1
- Data Key (also called session key) under which the pin is encrypted (ZPK or TPK)pvkA
- first PVK in PVK pairpvkB
- second PVK in PVK pairpvki
- index of the PVK, in range 0-6, if not present 0 is assumedpvv
- (VISA PIN Verification Value)SMException
java.lang.String calculateIBMPINOffset(EncryptedPIN pinUnderLmk, T pvk, java.lang.String decTab, java.lang.String pinValData, int minPinLen) throws SMException
Using that method is not recomendated. PVV method is prefrred, but it may be need in some legacy systms
pinUnderLmk
- PIN under LMKpvk
- accepts single, double, triple size key length.
Single key length is recomendateddecTab
- decimalisation table. Accepts plain text and encrypted
decimalisation table depending to HSM configurationpinValData
- pin validation data. User-defined data consisting of hexadecimal
characters and the character N, which indicates to the HSM where
to insert the last 5 digits of the account number. Usualy it consists
the first digits of the card numberminPinLen
- pin minimal lengthSMException
java.lang.String calculateIBMPINOffset(EncryptedPIN pinUnderLmk, T pvk, java.lang.String decTab, java.lang.String pinValData, int minPinLen, java.util.List<java.lang.String> excludes) throws SMException
Using that method is not recomendated. PVV method is prefrred, but it may be need in some legacy systms
pinUnderLmk
- PIN under LMKpvk
- accepts single, double, triple size key length.
Single key length is recomendateddecTab
- decimalisation table. Accepts plain text and encrypted
decimalisation table depending to HSM configurationpinValData
- pin validation data. User-defined data consisting of hexadecimal
characters and the character N, which indicates to the HSM where
to insert the last 5 digits of the account number. Usualy it consists
the first digits of the card numberminPinLen
- pin minimal lengthexcludes
- list of pins which won't be generated.
Each pin has to be pinLen
lengthWeakPINException
- if passed PIN is on excludes
listSMException
java.lang.String calculateIBMPINOffset(EncryptedPIN pinUnderKd1, T kd1, T pvk, java.lang.String decTab, java.lang.String pinValData, int minPinLen) throws SMException
Using that method is not recomendated. PVV method is prefrred, but it may be need in some legacy systms
pinUnderKd1
- the encrypted PINkd1
- Data Key under which the pin is encryptedpvk
- accepts single, double, triple size key length.
Single key length is recomendateddecTab
- decimalisation table. Accepts plain text and encrypted
decimalisation table depending to HSM configurationpinValData
- pin validation data. User-defined data consisting of hexadecimal
characters and the character N, which indicates to the HSM where
to insert the last 5 digits of the account number. Usualy it consists
the first digits of the card numberminPinLen
- pin minimal lengthSMException
java.lang.String calculateIBMPINOffset(EncryptedPIN pinUnderKd1, T kd1, T pvk, java.lang.String decTab, java.lang.String pinValData, int minPinLen, java.util.List<java.lang.String> excludes) throws SMException
Using that method is not recomendated. PVV method is prefrred, but it may be need in some legacy systms
pinUnderKd1
- the encrypted PINkd1
- Data Key under which the pin is encryptedpvk
- accepts single, double, triple size key length.
Single key length is recomendateddecTab
- decimalisation table. Accepts plain text and encrypted
decimalisation table depending to HSM configurationpinValData
- pin validation data. User-defined data consisting of hexadecimal
characters and the character N, which indicates to the HSM where
to insert the last 5 digits of the account number. Usualy it consists
the first digits of the card numberminPinLen
- pin minimal lengthexcludes
- list of pins which won't be generated.
Each pin has to be pinLen
lengthWeakPINException
- if passed PIN is on excludes
listSMException
boolean verifyIBMPINOffset(EncryptedPIN pinUnderKd1, T kd1, T pvk, java.lang.String offset, java.lang.String decTab, java.lang.String pinValData, int minPinLen) throws SMException
pinUnderKd1
- pin block under kd1
kd1
- Data Key (also called session key) under which the pin is encrypted (ZPK or TPK)pvk
- accepts single, double, triple size key length.
Single key length is recomendatedoffset
- IBM PIN OffsetdecTab
- decimalisation table. Accepts plain text and encrypted
decimalisation table depending to HSM configurationpinValData
- pin validation data. User-defined data consisting of hexadecimal
characters and the character N, which indicates to the HSM where
to insert the last 5 digits of the account number. Usualy it consists
the first digits of the card numberminPinLen
- min pin lengthSMException
EncryptedPIN deriveIBMPIN(java.lang.String accountNo, T pvk, java.lang.String decTab, java.lang.String pinValData, int minPinLen, java.lang.String offset) throws SMException
That method derive pin from pin offset (not exacly that same but working). Therefore that metod is not recomendated. It is similar to obtain pin from encrypted pinblock, but require (encrypted) decimalisation table handling is more complicated and returned pin may differ from pin what user has selected It may be uable e.g. in migration from pin offset method to PVV method
accountNo
- the 12 right-most digits of the account number excluding the check digitpvk
- accepts single, double, triple size key length.
Single key length is recomendateddecTab
- decimalisation table. Accepts plain text and encrypted
decimalisation table depending to HSM configurationpinValData
- pin validation data. User-defined data consisting of hexadecimal
characters and the character N, which indicates to the HSM where
to insert the last 5 digits of the account number. Usualy it consists
the first digits of the card numberminPinLen
- min pin lengthoffset
- IBM PIN OffsetSMException
@Deprecated java.lang.String calculateCVV(java.lang.String accountNo, T cvkA, T cvkB, java.util.Date expDate, java.lang.String serviceCode) throws SMException
java.util.Date
prevents from format manipulating to
solve problem. Use calculateCVD(java.lang.String, T, T, java.lang.String, java.lang.String)
with string version of expDate
NOTE: cvkA
and cvkB
should be single
length keys but at least one of them may be double length key
accountNo
- The account number including BIN and the check digitcvkA
- the first CVK in CVK paircvkB
- the second CVK in CVK pairexpDate
- the card expiration dateserviceCode
- the card service code
Service code should be:
SMException
java.lang.String calculateCVD(java.lang.String accountNo, T cvkA, T cvkB, java.lang.String expDate, java.lang.String serviceCode) throws SMException
NOTE: cvkA
and cvkB
should be single
length keys but at least one of them may be double length key
accountNo
- The account number including BIN and the check digitcvkA
- the first CVK in CVK paircvkB
- the second CVK in CVK pairexpDate
- the card expiration dateserviceCode
- the card service code
Service code should be:
SMException
java.lang.String calculateCAVV(java.lang.String accountNo, T cvk, java.lang.String upn, java.lang.String authrc, java.lang.String sfarc) throws SMException
NOTE: Algorithm used to calculation CAVV/AAV is same as for CVV/CVC
calculation. Only has been changed meaning of parameters
expDate
and serviceCode
.
accountNo
- the account number including BIN and the check digit.cvk
- the key used to CVV/CVC generationupn
- the unpredictable number. Calculated value based
on Transaction Identifier (xid) from PAReq.
A 4 decimal digits value must be supplied.authrc
- the Authentication Results Code. A value based on
the Transaction Status (status) that will be used in
PARes. A 1 decimal digit value must be supplied.sfarc
- the Second Factor Authentication Results Code.
A value based on the result of second factor authentication.
A 2 decimal digits value must be suppiled.SMException
@Deprecated boolean verifyCVV(java.lang.String accountNo, T cvkA, T cvkB, java.lang.String cvv, java.util.Date expDate, java.lang.String serviceCode) throws SMException
java.util.Date
prevents from format manipulating to
solve problem. Use verifyCVD(java.lang.String, T, T, java.lang.String, java.lang.String, java.lang.String)
with string version of expDate
NOTE: cvkA
and cvkB
should be single
length keys but at least one of them may be double length key
accountNo
- The account number including BIN and the check digitcvkA
- the first CVK in CVK paircvkB
- the second CVK in CVK paircvv
- Card Verification Code/ValueexpDate
- the card expiration dateserviceCode
- the card service code
Service code should be:
SMException
boolean verifyCVD(java.lang.String accountNo, T cvkA, T cvkB, java.lang.String cvv, java.lang.String expDate, java.lang.String serviceCode) throws SMException
NOTE: cvkA
and cvkB
should be single
length keys but at least one of them may be double length key
accountNo
- The account number including BIN and the check digitcvkA
- the first CVK in CVK paircvkB
- the second CVK in CVK paircvv
- Card Verification Code/ValueexpDate
- the card expiration dateserviceCode
- the card service code
Service code should be:
true
if CVV/CVC is valid or false
otherwiseSMException
boolean verifyCAVV(java.lang.String accountNo, T cvk, java.lang.String cavv, java.lang.String upn, java.lang.String authrc, java.lang.String sfarc) throws SMException
NOTE: Algorithm used to verification CAVV/AAV is same as for CVV/CVC
verification. Only has been changed meaning of parameters
expDate
and serviceCode
.
accountNo
- the account number including BIN and the check digit.cvk
- the key used to CVV/CVC generationcavv
- the Cardholder Authentication Verification Value
or Accountholder Authentication Value.upn
- the unpredictable number. Calculated value based
on Transaction Identifier (xid) from PAReq.
A 4 decimal digits value must be supplied.authrc
- the Authentication Results Code. A value based on
the Transaction Status (status) that will be used in
PARes. A 1 decimal digit value must be supplied.sfarc
- the Second Factor Authentication Results Code.
A value based on the result of second factor authentication.
A 2 decimal digits value must be suppiled.SMException
@Deprecated boolean verifydCVV(java.lang.String accountNo, T imkac, java.lang.String dcvv, java.util.Date expDate, java.lang.String serviceCode, byte[] atc, MKDMethod mkdm) throws SMException
java.util.Date
prevents from format manipulating to
solve problem. Use verifydCVV(java.lang.String, T, java.lang.String, java.util.Date, java.lang.String, byte[], org.jpos.security.MKDMethod)
with string version of expDate
The EMV "Track 2 Equivalent Data", provided in the authorisation message and originating from the contactless smart card, is the source for the following data elements used in this function:
accountNo
expDate
serviceCode
atc
dCVV
accountNo
- The account number including BIN and the check digitimkac
- the issuer master key for generating and verifying Application Cryptogramsdcvv
- dynamic Card Verification ValueexpDate
- the card expiration dateserviceCode
- the card service codeatc
- application transactin counter. This is used for ICC Master
Key derivation. A 2 byte value must be supplied.mkdm
- ICC Master Key Derivation Method. If null
specified
is assumed.true
if dcvv
is valid, or false
if notSMException
boolean verifydCVV(java.lang.String accountNo, T imkac, java.lang.String dcvv, java.lang.String expDate, java.lang.String serviceCode, byte[] atc, MKDMethod mkdm) throws SMException
The EMV "Track 2 Equivalent Data", provided in the authorisation message and originating from the contactless smart card, is the source for the following data elements used in this function:
accountNo
expDate
serviceCode
atc
dCVV
accountNo
- The account number including BIN and the check digitimkac
- the issuer master key for generating and verifying Application Cryptogramsdcvv
- dynamic Card Verification ValueexpDate
- the card expiration dateserviceCode
- the card service codeatc
- application transactin counter. This is used for ICC Master
Key derivation. A 2 byte value must be supplied.mkdm
- ICC Master Key Derivation Method. If null
specified
is assumed.true
if dcvv
is valid, or false
if notSMException
boolean verifyCVC3(T imkcvc3, java.lang.String accountNo, java.lang.String acctSeqNo, byte[] atc, byte[] upn, byte[] data, MKDMethod mkdm, java.lang.String cvc3) throws SMException
The EMV "Track 2 Equivalent Data", provided in the authorisation message and originating from the contactless smart card, is the source for the following data elements used in this function:
accountNo
expDate
serviceCode
atc
unpredictable number
cvc3
imkcvc3
- the issuer master key for generating and verifying CVC3accountNo
- The account number including BIN and the check digitacctSeqNo
- account sequence number, 2 decimal digitsatc
- application transactin counter. This is used for CVC3
calculation. A 2 byte value must be supplied.upn
- unpredictable number. This is used for CVC3 calculation
A 4 byte value must be supplied.data
- Static Track Data or when this data length is less or equal 2 IVCVC3
mkdm
- ICC Master Key Derivation Method. If null
specified
is assumed.cvc3
- dynamic Card Verification Code 3. Should contain 5 decimal
digits. Max value is "65535"
(decimal representation
of 2 byte value). Is possible to pass shorter cvc3 value e.g.
"789"
matches with calcuated CVC3 "04789"
SMException
boolean verifyARQC(MKDMethod mkdm, SKDMethod skdm, T imkac, java.lang.String accountNo, java.lang.String acctSeqNo, byte[] arqc, byte[] atc, byte[] upn, byte[] txnData) throws SMException
mkdm
- ICC Master Key Derivation Method. For skdm
equals
SKDMethod.VSDC
and SKDMethod.MCHIP
this parameter
is ignored and MKDMethod.OPTION_A
is always used.skdm
- Session Key Derivation Methodimkac
- the issuer master key for generating and verifying Application CryptogramsaccountNo
- account number including BIN and check digitacctSeqNo
- account sequence number, 2 decimal digitsarqc
- ARQC/TC/AAC. A 8 byte value must be supplied.atc
- application transactin counter. This is used for Session
Key Generation. A 2 byte value must be supplied.
For skdm
equals SKDMethod.VSDC
is not used.upn
- unpredictable number. This is used for Session Key Generation
A 4 byte value must be supplied. For skdm
equals
SKDMethod.VSDC
is not used.txnData
- transaction data. Transaction data elements and them
order is dependend to proper cryptogram version. If the data
supplied is a multiple of 8 bytes, no extra padding is added.
If it is not a multiple of 8 bytes, additional zero padding is added.
If alternative padding methods are required, it have to be
applied before.SMException
byte[] generateARPC(MKDMethod mkdm, SKDMethod skdm, T imkac, java.lang.String accoutNo, java.lang.String acctSeqNo, byte[] arqc, byte[] atc, byte[] upn, ARPCMethod arpcMethod, byte[] arc, byte[] propAuthData) throws SMException
mkdm
- ICC Master Key Derivation Method. For skdm
equals
SKDMethod.VSDC
and SKDMethod.MCHIP
this parameter
is ignored and MKDMethod.OPTION_A
is always used.skdm
- Session Key Derivation Methodimkac
- the issuer master key for generating and verifying Application CryptogramsaccoutNo
- account number including BIN and check digitacctSeqNo
- account sequence number, 2 decimal digitsarqc
- ARQC/TC/AAC. A 8 byte value must be supplied.atc
- application transactin counter. This is used for Session
Key Generation. A 2 byte value must be supplied.
For skdm
equals SKDMethod.VSDC
is not used.upn
- unpredictable number. This is used for Session Key Generation
A 4 byte value must be supplied. For skdm
equals
SKDMethod.VSDC
is not used.arpcMethod
- ARPC calculating method. For skdm
equals
SKDMethod.VSDC
, SKDMethod.MCHIP
,
SKDMethod.AEPIS_V40
only ARPCMethod.METHOD_1
is validarc
- the Authorisation Response Code. A 2 byte value must be supplied.
For arpcMethod
equals ARPCMethod.METHOD_2
it is
csu - Card Status Update. Then a 4 byte value must be supplied.propAuthData
- Proprietary Authentication Data. Up to 8 bytes.
Contains optional issuer data for transmission to the card in
the Issuer Authentication Data of an online transaction.
It may by used only for arpcMethod
equals
ARPCMethod.METHOD_2
in other case is ignored.arpcMethod
equals
ARPCMethod.METHOD_2
4 bytes ARPCSMException
byte[] verifyARQCGenerateARPC(MKDMethod mkdm, SKDMethod skdm, T imkac, java.lang.String accountNo, java.lang.String acctSeqNo, byte[] arqc, byte[] atc, byte[] upn, byte[] txnData, ARPCMethod arpcMethod, byte[] arc, byte[] propAuthData) throws SMException
mkdm
- ICC Master Key Derivation Method. For skdm
equals
SKDMethod.VSDC
and SKDMethod.MCHIP
this parameter
is ignored and MKDMethod.OPTION_A
is always used.skdm
- Session Key Derivation Methodimkac
- the issuer master key for generating and verifying Application CryptogramsaccountNo
- account number including BIN and check digitacctSeqNo
- account sequence number, 2 decimal digitsarqc
- ARQC/TC/AAC. A 8 byte value must be supplied.atc
- application transactin counter. This is used for Session
Key Generation. A 2 byte value must be supplied.
For skdm
equals SKDMethod.VSDC
is not used.upn
- unpredictable number. This is used for Session Key Generation
A 4 byte value must be supplied. For skdm
equals
SKDMethod.VSDC
is not used.txnData
- transaction data. Transaction data elements and them
order is dependend to proper cryptogram version. If the data
supplied is a multiple of 8 bytes, no extra padding is added.
If it is not a multiple of 8 bytes, additional zero padding is added.
If alternative padding methods are required, it have to be
applied before.arpcMethod
- ARPC calculating method. For skdm
equals
SKDMethod.VSDC
, SKDMethod.MCHIP
,
SKDMethod.AEPIS_V40
only ARPCMethod.METHOD_1
is validarc
- the Authorisation Response Code. A 2 byte value must be supplied.
For arpcMethod
equals ARPCMethod.METHOD_2
it is
csu - Card Status Update. Then a 4 byte value must be supplied.propAuthData
- Proprietary Authentication Data. Up to 8 bytes.
Contains optional issuer data for transmission to the card in
the Issuer Authentication Data of an online transaction.
It may by used only for arpcMethod
equals
ARPCMethod.METHOD_2
in other case is ignored.arpcMethod
equals ARPCMethod.METHOD_2
4 bytes ARPC, null in other caseSMException
byte[] generateSM_MAC(MKDMethod mkdm, SKDMethod skdm, T imksmi, java.lang.String accountNo, java.lang.String acctSeqNo, byte[] atc, byte[] arqc, byte[] data) throws SMException
This method is used by issuer to generate MAC over message data send from the issuer back to the card
mkdm
- ICC Master Key Derivation Method. For skdm
equals
SKDMethod.VSDC
and SKDMethod.MCHIP
this parameter
is ignored and MKDMethod.OPTION_A
is always used.skdm
- Session Key Derivation Methodimksmi
- the issuer master key for Secure Messaging IntegrityaccountNo
- account number including BIN and check digitacctSeqNo
- account sequence number, 2 decimal digitsatc
- application transactin counter. This is used for Session
Key Generation. A 2 byte value must be supplied.
For skdm
equals SKDMethod.VSDC
is not used.
Second usage is as part of data which will be mackedarqc
- ARQC/TC/AAC. A 8 byte value must be supplied.
For skdm
equals SKDMethod.MCHIP
RAND should
be suppiled. RAND is ARQC incremeted by 1 (with overflow) after
each script command for that same ATC valuedata
- for which MAC will be generated. Should contain
APDU command e.g. PIN Unblock, Application block/unblock
with some additional application dependent dataSMException
org.javatuples.Pair<EncryptedPIN,byte[]> translatePINGenerateSM_MAC(MKDMethod mkdm, SKDMethod skdm, PaddingMethod padm, T imksmi, java.lang.String accountNo, java.lang.String acctSeqNo, byte[] atc, byte[] arqc, byte[] data, EncryptedPIN currentPIN, EncryptedPIN newPIN, T kd1, T imksmc, T imkac, byte destinationPINBlockFormat) throws SMException
This method is used by issuer to:
kd1
to an application specific PIN block
format, encrypted under a confidentiality session key, derived from
imksmc
data
and translated
PIN block
mkdm
- ICC Master Key Derivation Method. For skdm
equals
SKDMethod.VSDC
and SKDMethod.MCHIP
this parameter
is ignored and MKDMethod.OPTION_A
is always used.skdm
- Session Key Derivation Methodpadm
- padding method. If null padm
is derived as follow:
Other variations require to explicite pass
skdm
valuederived padm
valueSKDMethod.VSDC
PaddingMethod.VSDC
SKDMethod.MCHIP
PaddingMethod.MCHIP
SKDMethod.EMV_CSKD
PaddingMethod.CCD
padm
value
imksmi
- the issuer master key for Secure Messaging IntegrityaccountNo
- account number including BIN and check digitacctSeqNo
- account sequence number, 2 decimal digitsatc
- application transactin counter. This is used for Session
Key Generation. A 2 byte value must be supplied.
For skdm
equals SKDMethod.VSDC
is not used.
Second usage is as part of data which will be mackedarqc
- ARQC/TC/AAC. A 8 byte value must be supplied.
For skdm
equals SKDMethod.MCHIP
RAND should
be suppiled. RAND is ARQC incremeted by 1 (with overflow) after
each script command for that same ATC valuedata
- for which MAC will be generated. Should contain APDU
command PIN Change with some additional application dependent datacurrentPIN
- encrypted under kd1
current PIN. Used when
destinationPINBlockFormat
equals FORMAT42
newPIN
- encrypted under kd1
new PIN.kd1
- Data Key (also called transport key) under which the source pin is encryptedimksmc
- the issuer master key for Secure Messaging Confidentialityimkac
- the issuer master key for generating and verifying
Application Cryptograms. Used when destinationPINBlockFormat
equals
FORMAT41
or FORMAT42
in other cases is ignoreddestinationPINBlockFormat
- the PIN Block Format of the translated encrypted PIN
SMException
byte[] encryptData(CipherMode cipherMode, SecureDESKey kd, byte[] data, byte[] iv) throws SMException
cipherMode
- block cipher mode.kd
- DEK or ZEK key used to encrypt data.data
- data to be encrypted. If the data is not a multiple of
8 bytes, padding have to be applied before.iv
- initial vector. Its length must be equal to the length
of cipher block (8 bytes for DES, 3DES ciphers). After operation
will contain new iv value. Not used for CipherMode.ECB
.iv
array refference new value of
initial vector value will be placed.SMException
byte[] decryptData(CipherMode cipherMode, SecureDESKey kd, byte[] data, byte[] iv) throws SMException
cipherMode
- block cipher mode.kd
- DEK or ZEK key used to decrypt data.data
- data to be decrypted.iv
- initial vector. Its length must be equal to the length
of cipher block (8 bytes for DES, 3DES ciphers). After operation
will contain new iv value. Not used for CipherMode.ECB
.iv
array refference new value of
initial vector value will be placed.SMException
byte[] generateCBC_MAC(byte[] data, T kd) throws SMException
data
- the data to be MACedkd
- the key used for MACingSMException
byte[] generateEDE_MAC(byte[] data, T kd) throws SMException
data
- the data to be MACedkd
- the key used for MACingSMException
SecureDESKey translateKeyFromOldLMK(SecureDESKey kd) throws SMException
kd
- the key encrypted under old LMKSMException
SecureKey translateKeyFromOldLMK(SecureKey key, SecureKeySpec keySpec) throws SMException
key
- the key encrypted under old LMKkeySpec
- the specification of the key to be translated. It allows
passing new key block attributes.SMException
org.javatuples.Pair<java.security.PublicKey,SecurePrivateKey> generateKeyPair(java.security.spec.AlgorithmParameterSpec spec) throws SMException
spec
- algorithm specific parameters, e.g. algorithm, key size,
public key exponent.SMException
org.javatuples.Pair<java.security.PublicKey,SecureKey> generateKeyPair(SecureKeySpec keySpec) throws SMException
keySpec
- the specification of the key to be generated. It allows
passing key algorithm type, size and key block attributes.
NOTE: For pass an extra key usage of the RSA key, possible is use
e.g. keySpec.setVariant()
or keySpec.setReserved()
SMException
byte[] calculateSignature(java.security.MessageDigest hash, SecureKey privateKey, byte[] data) throws SMException
hash
- identifier of the hash algorithm used to hash passed data.privateKey
- private key used to compute data signature.data
- data to be signed.SMException
byte[] encryptData(SecureKey encKey, byte[] data, java.security.spec.AlgorithmParameterSpec algspec, byte[] iv) throws SMException
NOTE: This is a more general version of the
encryptData(CipherMode, SecureDESKey, byte[], byte[])
encKey
- the data encryption key e.g:
SecurePrivateKey
SecureDESKey
data
- clear data block to encryptalgspec
- algorithm specification or null
if not required.
Used to pass additional algorithm parameters e.g:
OAEPParameterSpec
or custom extension of
AlgorithmParameterSpec
to pass symetric cipher mode ECB, CBCiv
- the inital vector or null
if not used (e.g: RSA
cipher or ECB mode). If used, after operation will contain new
iv
value.SMException
byte[] decryptData(SecureKey decKey, byte[] data, java.security.spec.AlgorithmParameterSpec algspec, byte[] iv) throws SMException
NOTE: This is a more general version of the
decryptData(CipherMode, SecureDESKey, byte[], byte[])
decKey
- the data decryption key e.g:
SecurePrivateKey
SecureDESKey
data
- encrypted data block to decryptalgspec
- algorithm specification or null
if not required.
Used to pass additional algorithm parameters e.g:
OAEPParameterSpec
or custom extension of
AlgorithmParameterSpec
to pass symetric cipher mode ECB, CBCiv
- the inital vector or null
if not used (e.g: RSA
cipher or ECB mode). If used, after operation will contain new
iv
value.SMException
void eraseOldLMK() throws SMException
SMException
byte[] dataEncrypt(T bdk, byte[] clearText) throws SMException
bdk
- base derivation keyclearText
- clear TextSMException
byte[] dataDecrypt(T bdk, byte[] cypherText) throws SMException
bdk
- base derivation keycypherText
- clear TextSMException
SecureDESKey formKEYfromClearComponents(short keyLength, java.lang.String keyType, java.lang.String... clearComponent) throws SMException
keyLength
- e.g. LENGTH_DES, LENGTH_DES3_2, LENGTH_DES3_3, ..keyType
- possible values are those defined in the SecurityModule inteface. e.g., ZMK, TMK,...clearComponent
- up to three HexStrings containing key componentsSMException
default java.lang.String generateClearKeyComponent(short keyLength) throws SMException
keyLength
- SMException