Class BaseSMAdapter<T>

    • Method Summary

      All Methods Static Methods Instance Methods Concrete Methods Deprecated Methods 
      Modifier and Type Method 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.
      protected java.lang.String calculateCAVVImpl​(java.lang.String accountNo, T cvk, java.lang.String upn, java.lang.String authrc, java.lang.String sfarc)
      Your SMAdapter should override this method if it has this functionality
      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).
      protected java.lang.String calculateCVDImpl​(java.lang.String accountNo, T cvkA, T cvkB, java.lang.String expDate, java.lang.String serviceCode)
      Your SMAdapter should override this method if it has this functionality
      java.lang.String calculateCVV​(java.lang.String accountNo, T cvkA, T cvkB, java.util.Date expDate, java.lang.String serviceCode)
      Calaculate a Card Verification Code/Value.
      protected java.lang.String calculateCVVImpl​(java.lang.String accountNo, T cvkA, T cvkB, java.util.Date expDate, java.lang.String serviceCode)
      Your SMAdapter should override this method if it has this functionality
      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
      protected java.lang.String calculateIBMPINOffsetImpl​(EncryptedPIN pinUnderLmk, T pvk, java.lang.String decTab, java.lang.String pinValData, int minPinLen, java.util.List<java.lang.String> excludes)
      Your SMAdapter should override this method if it has this functionality
      protected java.lang.String calculateIBMPINOffsetImpl​(EncryptedPIN pinUnderKd1, T kd1, T pvk, java.lang.String decTab, java.lang.String pinValData, int minPinLen, java.util.List<java.lang.String> excludes)
      Your SMAdapter should override this method if it has this functionality
      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)
      protected java.lang.String calculatePVVImpl​(EncryptedPIN pinUnderLMK, T pvkA, T pvkB, int pvkIdx, java.util.List<java.lang.String> excludes)
      Your SMAdapter should override this method if it has this functionality
      protected java.lang.String calculatePVVImpl​(EncryptedPIN pinUnderKd1, T kd1, T pvkA, T pvkB, int pvkIdx, java.util.List<java.lang.String> excludes)
      Your SMAdapter should override this method if it has this functionality
      byte[] calculateSignature​(java.security.MessageDigest hash, SecureKey privateKey, byte[] data)
      Calculate signature of Data Block.
      protected byte[] calculateSignatureImpl​(java.security.MessageDigest hash, SecureKey privateKey, byte[] data)
      Your SMAdapter should override this method if it has this functionality
      byte[] dataDecrypt​(T bdk, byte[] clearText)
      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 privKey, byte[] data, java.security.spec.AlgorithmParameterSpec algspec, byte[] iv)
      Decrypts encrypted Data Block with specified cipher.
      protected byte[] decryptDataImpl​(CipherMode cipherMode, SecureDESKey kd, byte[] data, byte[] iv)
      Your SMAdapter should override this method if it has this functionality
      protected byte[] decryptDataImpl​(SecureKey decKey, byte[] data, java.security.spec.AlgorithmParameterSpec algspec, byte[] iv)
      Decrypts Data Block encrypted with assymetric cipher.
      java.lang.String decryptPIN​(EncryptedPIN pinUnderLmk)
      Decrypts an Encrypted PIN (under LMK).
      protected java.lang.String decryptPINImpl​(EncryptedPIN pinUnderLmk)
      Your SMAdapter should override this method if it has this functionality
      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
      protected EncryptedPIN deriveIBMPINImpl​(java.lang.String accountNo, T pvk, java.lang.String decTab, java.lang.String pinValData, int minPinLen, java.lang.String offset)
      Your SMAdapter should override this method if it has this functionality
      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.
      protected byte[] encryptDataImpl​(CipherMode cipherMode, SecureDESKey kd, byte[] data, byte[] iv)
      Your SMAdapter should override this method if it has this functionality
      protected byte[] encryptDataImpl​(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.
      protected EncryptedPIN encryptPINImpl​(java.lang.String pin, java.lang.String accountNumber)
      Your SMAdapter should override this method if it has this functionality
      protected EncryptedPIN encryptPINImpl​(java.lang.String pin, java.lang.String accountNumber, T pek)
      Your SMAdapter should override this method if it has this functionality.
      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.
      protected void eraseOldLMKImpl()
      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).
      protected byte[] exportKeyImpl​(SecureDESKey key, SecureDESKey kek)
      Your SMAdapter should override this method if it has this functionality
      protected SecureKey exportKeyImpl​(SecureKey kek, SecureKey key, SecureKeySpec keySpec)
      Your SMAdapter should override this method if it has this functionality.
      EncryptedPIN exportPIN​(EncryptedPIN pinUnderLmk, T kd2, byte destinationPINBlockFormat)
      Exports a PIN from encryption under LMK to encryption under a KD (Data Key).
      protected EncryptedPIN exportPINImpl​(EncryptedPIN pinUnderLmk, T kd2, byte destinationPINBlockFormat)
      Your SMAdapter should override this method if it has this functionality
      SecureDESKey formKEYfromClearComponents​(short keyLength, java.lang.String keyType, java.lang.String... clearComponents)
      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)
      protected byte[] generateARPCImpl​(MKDMethod mkdm, SKDMethod skdm, T imkac, java.lang.String accountNo, java.lang.String acctSeqNo, byte[] arqc, byte[] atc, byte[] upn, ARPCMethod arpcMethod, byte[] arc, byte[] propAuthData)
      Your SMAdapter should override this method if it has this functionality
      byte[] generateCBC_MAC​(byte[] data, T kd)
      Generates CBC-MAC (Cipher Block Chaining Message Authentication Code) for some data.
      protected byte[] generateCBC_MACImpl​(byte[] data, T kd)
      Your SMAdapter should override this method if it has this functionality
      byte[] generateEDE_MAC​(byte[] data, T kd)
      Generates EDE-MAC (Encrypt Decrypt Encrypt Message Message Authentication Code) for some data.
      protected byte[] generateEDE_MACImpl​(byte[] data, T kd)
      Your SMAdapter should override this method if it has this functionality
      SecureDESKey generateKey​(short keyLength, java.lang.String keyType)
      Generates a random DES Key.
      SecureKey generateKey​(SecureKeySpec keySpec)
      Generates a random Key.
      byte[] generateKeyCheckValue​(T kd)
      Generates key check value.
      protected byte[] generateKeyCheckValueImpl​(T kd)
      Your SMAdapter should override this method if it has this functionality
      protected SecureDESKey generateKeyImpl​(short keyLength, java.lang.String keyType)
      Your SMAdapter should override this method if it has this functionality
      protected SecureKey generateKeyImpl​(SecureKeySpec keySpec)
      Your SMAdapter should override this method if it has this functionality.
      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.
      protected org.javatuples.Pair<java.security.PublicKey,​SecurePrivateKey> generateKeyPairImpl​(java.security.spec.AlgorithmParameterSpec spec)
      Your SMAdapter should override this method if it has this functionality
      protected org.javatuples.Pair<java.security.PublicKey,​SecureKey> generateKeyPairImpl​(SecureKeySpec keySpec)
      Your SMAdapter should override this method if it has this functionality.
      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
      protected EncryptedPIN generatePINImpl​(java.lang.String accountNumber, int pinLen, java.util.List<java.lang.String> excludes)
      Your SMAdapter should override this method if it has this functionality
      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
      protected byte[] generateSM_MACImpl​(MKDMethod mkdm, SKDMethod skdm, T imksmi, java.lang.String accountNo, java.lang.String acctSeqNo, byte[] atc, byte[] arqc, byte[] data)
      Your SMAdapter should override this method if it has this functionality
      Logger getLogger()  
      java.lang.String getName()  
      java.lang.String getRealm()  
      static SMAdapter getSMAdapter​(java.lang.String name)  
      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.
      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.
      protected SecureDESKey importKeyImpl​(short keyLength, java.lang.String keyType, byte[] encryptedKey, SecureDESKey kek, boolean checkParity)
      Your SMAdapter should override this method if it has this functionality
      protected SecureKey importKeyImpl​(SecureKey kek, SecureKey key, SecureKeySpec keySpec, boolean checkParity)
      Your SMAdapter should override this method if it has this functionality.
      EncryptedPIN importPIN​(EncryptedPIN pinUnderDuk, KeySerialNumber ksn, T bdk)
      Imports a PIN from encryption under a transaction key to encryption under LMK.
      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.
      protected EncryptedPIN importPINImpl​(EncryptedPIN pinUnderDuk, KeySerialNumber ksn, T bdk)
      Deprecated. 
      protected EncryptedPIN importPINImpl​(EncryptedPIN pinUnderDuk, KeySerialNumber ksn, T bdk, boolean tdes)
      Your SMAdapter should override this method if it has this functionality
      protected EncryptedPIN importPINImpl​(EncryptedPIN pinUnderKd1, T kd1)
      Your SMAdapter should override this method if it has this functionality
      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.
      protected void printPINImpl​(java.lang.String accountNo, EncryptedPIN pinUnderKd1, T kd1, java.lang.String template, java.util.Map<java.lang.String,​java.lang.String> fields)
      Your SMAdapter should override this method if it has this functionality
      void setConfiguration​(Configuration cfg)  
      void setLogger​(Logger logger, java.lang.String realm)  
      void setName​(java.lang.String name)
      associates this SMAdapter with a name using NameRegistrar
      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.
      protected SecureDESKey translateKeyFromOldLMKImpl​(SecureDESKey kd)
      Translate key from encryption under the LMK held in key change storage to encryption under a new LMK.
      protected SecureKey translateKeyFromOldLMKImpl​(SecureKey key, SecureKeySpec keySpec)
      Your SMAdapter should override this method if it has this functionality.
      SecureDESKey translateKeyScheme​(SecureDESKey key, KeyScheme destKeyScheme)
      Translate Key Scheme to more secure encription.
      protected SecureDESKey translateKeySchemeImpl​(SecureDESKey key, KeyScheme destKeyScheme)
      Your SMAdapter should override this method if it has this functionality
      EncryptedPIN translatePIN​(EncryptedPIN pinUnderDuk, KeySerialNumber ksn, T bdk, T kd2, byte destinationPINBlockFormat)
      Translates a PIN from encryption under a transaction key to encryption under a KD (Data Key).
      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
      protected org.javatuples.Pair<EncryptedPIN,​byte[]> translatePINGenerateSM_MACImpl​(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)
      Your SMAdapter should override this method if it has this functionality
      protected EncryptedPIN translatePINImpl​(EncryptedPIN pinUnderDuk, KeySerialNumber ksn, T bdk, T kd2, byte destinationPINBlockFormat)
      Deprecated. 
      protected EncryptedPIN translatePINImpl​(EncryptedPIN pinUnderDuk, KeySerialNumber ksn, T bdk, T kd2, byte destinationPINBlockFormat, boolean tdes)
      Your SMAdapter should override this method if it has this functionality
      protected EncryptedPIN translatePINImpl​(EncryptedPIN pinUnderKd1, T kd1, T kd2, byte destinationPINBlockFormat)
      Your SMAdapter should override this method if it has this functionality
      boolean verifyARQC​(MKDMethod mkdm, SKDMethod skdm, T imkac, java.lang.String accoutNo, 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 accoutNo, 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
      protected byte[] verifyARQCGenerateARPCImpl​(MKDMethod mkdm, SKDMethod skdm, T imkac, java.lang.String accountNo, java.lang.String acctSeqNo, byte[] arqc, byte[] atc, byte[] upn, byte[] transData, ARPCMethod arpcMethod, byte[] arc, byte[] propAuthData)
      Your SMAdapter should override this method if it has this functionality
      protected boolean verifyARQCImpl​(MKDMethod mkdm, SKDMethod skdm, T imkac, java.lang.String accountNo, java.lang.String acctSeqNo, byte[] arqc, byte[] atc, byte[] upn, byte[] txnData)
      Your SMAdapter should override this method if it has this functionality
      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.
      protected boolean verifyCAVVImpl​(java.lang.String accountNo, T cvk, java.lang.String cavv, java.lang.String upn, java.lang.String authrc, java.lang.String sfarc)
      Your SMAdapter should override this method if it has this functionality
      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)
      protected boolean verifyCVC3Impl​(T imkcvc3, java.lang.String accountNo, java.lang.String acctSeqNo, byte[] atc, byte[] upn, byte[] data, MKDMethod mkdm, java.lang.String cvc3)
      Your SMAdapter should override this method if it has this functionality
      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)
      Verify a Card Verification Code/Value.
      protected boolean verifyCVVImpl​(java.lang.String accountNo, T cvkA, T cvkB, java.lang.String cvv, java.lang.String expDate, java.lang.String serviceCode)
      Your SMAdapter should override this method if it has this functionality
      protected boolean verifyCVVImpl​(java.lang.String accountNo, T cvkA, T cvkB, java.lang.String cvv, java.util.Date expDate, java.lang.String serviceCode)
      Your SMAdapter should override this method if it has this functionality
      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 verifydCVV​(java.lang.String accountNo, T imkac, java.lang.String dcvv, java.util.Date expDate, java.lang.String serviceCode, byte[] atc, MKDMethod mkdm)
      Verify a Dynamic Card Verification Value (dCVV).
      protected boolean verifydCVVImpl​(java.lang.String accountNo, T imkac, java.lang.String dcvv, java.lang.String expDate, java.lang.String serviceCode, byte[] atc, MKDMethod mkdm)
      Your SMAdapter should override this method if it has this functionality
      protected boolean verifydCVVImpl​(java.lang.String accountNo, T imkac, java.lang.String dcvv, java.util.Date expDate, java.lang.String serviceCode, byte[] atc, MKDMethod mkdm)
      Your SMAdapter should override this method if it has this functionality
      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
      protected boolean verifyIBMPINOffsetImpl​(EncryptedPIN pinUnderKd, T kd, T pvk, java.lang.String offset, java.lang.String decTab, java.lang.String pinValData, int minPinLen)
      Your SMAdapter should override this method if it has this functionality
      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)
      protected boolean verifyPVVImpl​(EncryptedPIN pinUnderKd, T kd, T pvkA, T pvkB, int pvki, java.lang.String pvv)
      Your SMAdapter should override this method if it has this functionality
      • Methods inherited from class java.lang.Object

        clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    • Method Detail

      • setName

        public void setName​(java.lang.String name)
        associates this SMAdapter with a name using NameRegistrar
        Parameters:
        name - name to register
        See Also:
        NameRegistrar
      • getName

        public java.lang.String getName()
        Returns:
        this SMAdapter's name ("" if no name was set)
      • generateKey

        public SecureDESKey generateKey​(short keyLength,
                                        java.lang.String keyType)
                                 throws SMException
        Description copied from interface: SMAdapter
        Generates a random DES Key.
        Specified by:
        generateKey in interface SMAdapter<T>
        Parameters:
        keyLength - bit length of the key to be generated (LENGTH_DES, LENGTH_DES3_2KEY...)
        keyType - type of the key to be generated (TYPE_ZMK, TYPE_TMK...etc)
        Returns:
        the random key secured by the security module
        Throws:
        SMException
      • translateKeyScheme

        public SecureDESKey translateKeyScheme​(SecureDESKey key,
                                               KeyScheme destKeyScheme)
                                        throws SMException
        Description copied from interface: SMAdapter
        Translate Key Scheme to more secure encription.

        Converts an DES key encrypted using X9.17 methods to a more secure key using the variant method.

        Specified by:
        translateKeyScheme in interface SMAdapter<T>
        Parameters:
        key - key to be translated to destKeyScheme scheme
        destKeyScheme - destination key scheme
        Returns:
        translated key with destKeyScheme scheme
        Throws:
        SMException
      • importKey

        public SecureDESKey importKey​(short keyLength,
                                      java.lang.String keyType,
                                      byte[] encryptedKey,
                                      SecureDESKey kek,
                                      boolean checkParity)
                               throws SMException
        Description copied from interface: SMAdapter
        Imports a key from encryption under a KEK (Key-Encrypting Key) to protection under the security module.
        Specified by:
        importKey in interface SMAdapter<T>
        Parameters:
        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 KEK
        kek - the key-encrypting key
        checkParity - if true, the key is not imported unless it has adjusted parity
        Returns:
        imported key secured by the security module
        Throws:
        SMException - if the parity of the imported key is not adjusted AND checkParity = true
      • importKey

        public SecureKey importKey​(SecureKey kek,
                                   SecureKey key,
                                   SecureKeySpec keySpec,
                                   boolean checkParity)
                            throws SMException
        Description copied from interface: SMAdapter
        Imports a key from encryption under a KEK (Key-Encrypting Key) to protection under the security module.
        Specified by:
        importKey in interface SMAdapter<T>
        Parameters:
        kek - the key-encrypting key
        key - key to be imported and encrypted under KEK
        keySpec - 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 parity
        Returns:
        imported key secured by the security module
        Throws:
        SMException - e.g: if the parity of the imported key is not adjusted and checkParity is true
      • exportKey

        public SecureKey exportKey​(SecureKey kek,
                                   SecureKey key,
                                   SecureKeySpec keySpec)
                            throws SMException
        Description copied from interface: SMAdapter
        Exports secure key to encryption under a KEK (Key-Encrypting Key).
        Specified by:
        exportKey in interface SMAdapter<T>
        Parameters:
        kek - the key-encrypting key
        key - the secure key to be exported
        keySpec - the specification of the key to be exported. It allows passing or change key block attributes.
        Returns:
        the exported key (key encrypted under kek)
        Throws:
        SMException
      • encryptPIN

        public EncryptedPIN encryptPIN​(java.lang.String pin,
                                       java.lang.String accountNumber,
                                       boolean extract)
                                throws SMException
        Description copied from interface: SMAdapter
        Encrypts a clear pin under LMK.

        CAUTION: The use of clear pin presents a significant security risk

        Specified by:
        encryptPIN in interface SMAdapter<T>
        Parameters:
        pin - clear pin as entered by cardholder
        accountNumber - 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 digit
        extract - true to extract 12 right-most digits off the account number
        Returns:
        PIN under LMK
        Throws:
        SMException
      • encryptPIN

        public EncryptedPIN encryptPIN​(java.lang.String pin,
                                       java.lang.String accountNumber)
                                throws SMException
        Description copied from interface: SMAdapter
        Encrypts a clear pin under LMK.

        CAUTION: The use of clear pin presents a significant security risk

        Specified by:
        encryptPIN in interface SMAdapter<T>
        Parameters:
        pin - clear pin as entered by card holder
        accountNumber - account number, including BIN and the check digit
        Returns:
        PIN under LMK
        Throws:
        SMException
      • encryptPIN

        public EncryptedPIN encryptPIN​(java.lang.String pin,
                                       java.lang.String accountNumber,
                                       T pek)
                                throws SMException
        Description copied from interface: SMAdapter
        Encrypts a clear PIN under PEK.

        CAUTION: The use of clear PIN presents a significant security risk.

        Specified by:
        encryptPIN in interface SMAdapter<T>
        Parameters:
        pin - Clear PIN as entered by cardholder.
        accountNumber - account number, including BIN and the check digit.
        pek - PIN encryption key.
        Returns:
        Return PIN under PEK.
        Throws:
        SMException
      • decryptPIN

        public java.lang.String decryptPIN​(EncryptedPIN pinUnderLmk)
                                    throws SMException
        Description copied from interface: SMAdapter
        Decrypts an Encrypted PIN (under LMK).

        CAUTION: The use of clear pin presents a significant security risk

        Specified by:
        decryptPIN in interface SMAdapter<T>
        Returns:
        clear pin as entered by card holder
        Throws:
        SMException
      • translatePIN

        public EncryptedPIN translatePIN​(EncryptedPIN pinUnderKd1,
                                         T kd1,
                                         T kd2,
                                         byte destinationPINBlockFormat)
                                  throws SMException
        Description copied from interface: SMAdapter
        Translates a PIN from encrytion under KD1 to encryption under KD2.
        Specified by:
        translatePIN in interface SMAdapter<T>
        Parameters:
        pinUnderKd1 - pin encrypted under KD1
        kd1 - Data Key (also called session key) under which the pin is encrypted
        kd2 - the destination Data Key 2 under which the pin will be encrypted
        destinationPINBlockFormat - the PIN Block Format of the exported encrypted PIN
        Returns:
        pin encrypted under KD2
        Throws:
        SMException
      • importPIN

        public EncryptedPIN importPIN​(EncryptedPIN pinUnderDuk,
                                      KeySerialNumber ksn,
                                      T bdk)
                               throws SMException
        Description copied from interface: SMAdapter
        Imports a PIN from encryption under a transaction key to encryption under LMK.

        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.

        Specified by:
        importPIN in interface SMAdapter<T>
        Parameters:
        pinUnderDuk - pin encrypted under a transaction key
        ksn - Key Serial Number (also called Key Name, in ANSI X9.24) needed to derive the transaction key
        bdk - Base Derivation Key, used to derive the transaction key underwhich the pin is encrypted
        Returns:
        pin encrypted under LMK
        Throws:
        SMException
      • importPIN

        public EncryptedPIN importPIN​(EncryptedPIN pinUnderDuk,
                                      KeySerialNumber ksn,
                                      T bdk,
                                      boolean tdes)
                               throws SMException
        Description copied from interface: SMAdapter
        Imports a PIN from encryption under a transaction key to encryption under LMK.

        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.

        Specified by:
        importPIN in interface SMAdapter<T>
        Parameters:
        pinUnderDuk - pin encrypted under a transaction key
        ksn - Key Serial Number (also called Key Name, in ANSI X9.24) needed to derive the transaction key
        bdk - Base Derivation Key, used to derive the transaction key underwhich the pin is encrypted
        tdes - Use Triple DES to calculate derived transaction key.
        Returns:
        pin encrypted under LMK
        Throws:
        SMException
      • translatePIN

        public EncryptedPIN translatePIN​(EncryptedPIN pinUnderDuk,
                                         KeySerialNumber ksn,
                                         T bdk,
                                         T kd2,
                                         byte destinationPINBlockFormat)
                                  throws SMException
        Description copied from interface: SMAdapter
        Translates a PIN from encryption under a transaction key to encryption under a KD (Data Key).

        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.

        Specified by:
        translatePIN in interface SMAdapter<T>
        Parameters:
        pinUnderDuk - pin encrypted under a DUKPT transaction key
        ksn - Key Serial Number (also called Key Name, in ANSI X9.24) needed to derive the transaction key
        bdk - Base Derivation Key, used to derive the transaction key underwhich the pin is encrypted
        kd2 - the destination Data Key (also called session key) under which the pin will be encrypted
        destinationPINBlockFormat - the PIN Block Format of the translated encrypted PIN
        Returns:
        pin encrypted under kd2
        Throws:
        SMException
      • translatePIN

        public EncryptedPIN translatePIN​(EncryptedPIN pinUnderDuk,
                                         KeySerialNumber ksn,
                                         T bdk,
                                         T kd2,
                                         byte destinationPINBlockFormat,
                                         boolean tdes)
                                  throws SMException
        Description copied from interface: SMAdapter
        Translates a PIN from encryption under a transaction key to encryption under a KD (Data Key).

        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.

        Specified by:
        translatePIN in interface SMAdapter<T>
        Parameters:
        pinUnderDuk - pin encrypted under a DUKPT transaction key
        ksn - Key Serial Number (also called Key Name, in ANSI X9.24) needed to derive the transaction key
        bdk - Base Derivation Key, used to derive the transaction key underwhich the pin is encrypted
        kd2 - the destination Data Key (also called session key) under which the pin will be encrypted
        destinationPINBlockFormat - the PIN Block Format of the translated encrypted PIN
        tdes - Use Triple DES to calculate derived transaction key.
        Returns:
        pin encrypted under kd2
        Throws:
        SMException
      • exportPIN

        public EncryptedPIN exportPIN​(EncryptedPIN pinUnderLmk,
                                      T kd2,
                                      byte destinationPINBlockFormat)
                               throws SMException
        Description copied from interface: SMAdapter
        Exports a PIN from encryption under LMK to encryption under a KD (Data Key).
        Specified by:
        exportPIN in interface SMAdapter<T>
        Parameters:
        pinUnderLmk - pin encrypted under LMK
        kd2 - the destination data key (also called session key) under which the pin will be encrypted
        destinationPINBlockFormat - the PIN Block Format of the exported encrypted PIN
        Returns:
        pin encrypted under kd2
        Throws:
        SMException
      • generatePIN

        public EncryptedPIN generatePIN​(java.lang.String accountNumber,
                                        int pinLen)
                                 throws SMException
        Description copied from interface: SMAdapter
        Generate random pin under LMK
        Specified by:
        generatePIN in interface SMAdapter<T>
        Parameters:
        accountNumber - The 12 right-most digits of the account number excluding the check digit
        pinLen - length of the pin, usually in range 4-12. Value 0 means that default length is assumed by HSM (usually 4)
        Returns:
        generated PIN under LMK
        Throws:
        SMException
      • generatePIN

        public EncryptedPIN generatePIN​(java.lang.String accountNumber,
                                        int pinLen,
                                        java.util.List<java.lang.String> excludes)
                                 throws SMException
        Description copied from interface: SMAdapter
        Generate random pin under LMK with exclude list
        Specified by:
        generatePIN in interface SMAdapter<T>
        Parameters:
        accountNumber - The 12 right-most digits of the account number excluding the check digit
        pinLen - 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 length
        Returns:
        generated PIN under LMK
        Throws:
        SMException
      • printPIN

        public 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
        Description copied from interface: SMAdapter
        Print PIN or PIN and solicitation data to the HSM configured printer.

        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.

        Specified by:
        printPIN in interface SMAdapter<T>
        Parameters:
        accountNo - The 12 right-most digits of the account number excluding the check digit.
        pinUnderKd1 - pin block under Key Data 1
        kd1 - Data Key 1 ZPK, TPK may be null if pinUnderKd1 contains PIN under LMK
        template - 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 passed
        Throws:
        SMException
      • calculatePVV

        public java.lang.String calculatePVV​(EncryptedPIN pinUnderLMK,
                                             T pvkA,
                                             T pvkB,
                                             int pvkIdx)
                                      throws SMException
        Description copied from interface: SMAdapter
        Calculate PVV (VISA PIN Verification Value of PIN under LMK) with exclude list

        NOTE: pvkA and pvkB should be single length keys but at least one of them may be double length key

        Specified by:
        calculatePVV in interface SMAdapter<T>
        Parameters:
        pinUnderLMK - PIN under LMK
        pvkA - first key PVK in PVK pair
        pvkB - second key PVK in PVK pair
        pvkIdx - index of the PVK, in range 0-6, if not present 0 is assumed
        Returns:
        PVV (VISA PIN Verification Value)
        Throws:
        SMException - if PIN is on exclude list WeakPINException is thrown
      • calculatePVV

        public java.lang.String calculatePVV​(EncryptedPIN pinUnderLMK,
                                             T pvkA,
                                             T pvkB,
                                             int pvkIdx,
                                             java.util.List<java.lang.String> excludes)
                                      throws SMException
        Description copied from interface: SMAdapter
        Calculate PVV (VISA PIN Verification Value of PIN under LMK)

        NOTE: pvkA and pvkB should be single length keys but at least one of them may be double length key

        Specified by:
        calculatePVV in interface SMAdapter<T>
        Parameters:
        pinUnderLMK - PIN under LMK
        pvkA - first key PVK in PVK pair
        pvkB - second key PVK in PVK pair
        pvkIdx - index of the PVK, in range 0-6, if not present 0 is assumed
        excludes - list of pins which won't be generated. Each pin has to be pinLen length
        Returns:
        PVV (VISA PIN Verification Value)
        Throws:
        SMException
      • calculatePVV

        public java.lang.String calculatePVV​(EncryptedPIN pinUnderKd1,
                                             T kd1,
                                             T pvkA,
                                             T pvkB,
                                             int pvkIdx)
                                      throws SMException
        Description copied from interface: SMAdapter
        Calculate PVV (VISA PIN Verification Value of customer selected PIN)

        NOTE: pvkA and pvkB should be single length keys but at least one of them may be double length key

        Specified by:
        calculatePVV in interface SMAdapter<T>
        Parameters:
        pinUnderKd1 - the encrypted PIN
        kd1 - Data Key under which the pin is encrypted
        pvkA - first key PVK in PVK pair
        pvkB - second key PVK in PVK pair
        pvkIdx - index of the PVK, in range 0-6, if not present 0 is assumed
        Returns:
        PVV (VISA PIN Verification Value)
        Throws:
        SMException
      • calculatePVV

        public java.lang.String calculatePVV​(EncryptedPIN pinUnderKd1,
                                             T kd1,
                                             T pvkA,
                                             T pvkB,
                                             int pvkIdx,
                                             java.util.List<java.lang.String> excludes)
                                      throws SMException
        Description copied from interface: SMAdapter
        Calculate PVV (VISA PIN Verification Value of customer selected PIN)

        NOTE: pvkA and pvkB should be single length keys but at least one of them may be double length key

        Specified by:
        calculatePVV in interface SMAdapter<T>
        Parameters:
        pinUnderKd1 - the encrypted PIN
        kd1 - Data Key under which the pin is encrypted
        pvkA - first key PVK in PVK pair
        pvkB - second key PVK in PVK pair
        pvkIdx - index of the PVK, in range 0-6, if not present 0 is assumed
        excludes - list of pins which won't be generated. Each pin has to be pinLen length
        Returns:
        PVV (VISA PIN Verification Value)
        Throws:
        WeakPINException - if passed PIN is on excludes list
        SMException
      • verifyPVV

        public boolean verifyPVV​(EncryptedPIN pinUnderKd1,
                                 T kd1,
                                 T pvkA,
                                 T pvkB,
                                 int pvki,
                                 java.lang.String pvv)
                          throws SMException
        Description copied from interface: SMAdapter
        Verify PVV (VISA PIN Verification Value of an LMK encrypted PIN)

        NOTE: pvkA and pvkB should be single length keys but at least one of them may be double length key

        Specified by:
        verifyPVV in interface SMAdapter<T>
        Parameters:
        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 pair
        pvkB - second PVK in PVK pair
        pvki - index of the PVK, in range 0-6, if not present 0 is assumed
        pvv - (VISA PIN Verification Value)
        Returns:
        true if pin is valid false if not
        Throws:
        SMException
      • calculateIBMPINOffset

        public java.lang.String calculateIBMPINOffset​(EncryptedPIN pinUnderLmk,
                                                      T pvk,
                                                      java.lang.String decTab,
                                                      java.lang.String pinValData,
                                                      int minPinLen)
                                               throws SMException
        Description copied from interface: SMAdapter
        Calculate an PIN Offset using the IBM 3624 method

        Using that method is not recomendated. PVV method is prefrred, but it may be need in some legacy systms

        Specified by:
        calculateIBMPINOffset in interface SMAdapter<T>
        Parameters:
        pinUnderLmk - PIN under LMK
        pvk - accepts single, double, triple size key length. Single key length is recomendated
        decTab - decimalisation table. Accepts plain text and encrypted decimalisation table depending to HSM configuration
        pinValData - 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 number
        minPinLen - pin minimal length
        Returns:
        IBM PIN Offset
        Throws:
        SMException
      • calculateIBMPINOffset

        public 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
        Description copied from interface: SMAdapter
        Calculate an PIN Offset using the IBM 3624 method

        Using that method is not recomendated. PVV method is prefrred, but it may be need in some legacy systms

        Specified by:
        calculateIBMPINOffset in interface SMAdapter<T>
        Parameters:
        pinUnderLmk - PIN under LMK
        pvk - accepts single, double, triple size key length. Single key length is recomendated
        decTab - decimalisation table. Accepts plain text and encrypted decimalisation table depending to HSM configuration
        pinValData - 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 number
        minPinLen - pin minimal length
        excludes - list of pins which won't be generated. Each pin has to be pinLen length
        Returns:
        IBM PIN Offset
        Throws:
        WeakPINException - if passed PIN is on excludes list
        SMException
      • calculateIBMPINOffset

        public java.lang.String calculateIBMPINOffset​(EncryptedPIN pinUnderKd1,
                                                      T kd1,
                                                      T pvk,
                                                      java.lang.String decTab,
                                                      java.lang.String pinValData,
                                                      int minPinLen)
                                               throws SMException
        Description copied from interface: SMAdapter
        Calculate an PIN Offset using the IBM 3624 method of customer selected PIN

        Using that method is not recomendated. PVV method is prefrred, but it may be need in some legacy systms

        Specified by:
        calculateIBMPINOffset in interface SMAdapter<T>
        Parameters:
        pinUnderKd1 - the encrypted PIN
        kd1 - Data Key under which the pin is encrypted
        pvk - accepts single, double, triple size key length. Single key length is recomendated
        decTab - decimalisation table. Accepts plain text and encrypted decimalisation table depending to HSM configuration
        pinValData - 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 number
        minPinLen - pin minimal length
        Returns:
        IBM PIN Offset
        Throws:
        SMException
      • calculateIBMPINOffset

        public 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
        Description copied from interface: SMAdapter
        Calculate an PIN Offset using the IBM 3624 method of customer selected PIN

        Using that method is not recomendated. PVV method is prefrred, but it may be need in some legacy systms

        Specified by:
        calculateIBMPINOffset in interface SMAdapter<T>
        Parameters:
        pinUnderKd1 - the encrypted PIN
        kd1 - Data Key under which the pin is encrypted
        pvk - accepts single, double, triple size key length. Single key length is recomendated
        decTab - decimalisation table. Accepts plain text and encrypted decimalisation table depending to HSM configuration
        pinValData - 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 number
        minPinLen - pin minimal length
        excludes - list of pins which won't be generated. Each pin has to be pinLen length
        Returns:
        IBM PIN Offset
        Throws:
        WeakPINException - if passed PIN is on excludes list
        SMException
      • verifyIBMPINOffset

        public boolean verifyIBMPINOffset​(EncryptedPIN pinUnderKd1,
                                          T kd1,
                                          T pvk,
                                          java.lang.String offset,
                                          java.lang.String decTab,
                                          java.lang.String pinValData,
                                          int minPinLen)
                                   throws SMException
        Description copied from interface: SMAdapter
        Verify an PIN Offset using the IBM 3624 method
        Specified by:
        verifyIBMPINOffset in interface SMAdapter<T>
        Parameters:
        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 recomendated
        offset - IBM PIN Offset
        decTab - decimalisation table. Accepts plain text and encrypted decimalisation table depending to HSM configuration
        pinValData - 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 number
        minPinLen - min pin length
        Returns:
        true if pin offset is valid false if not
        Throws:
        SMException
      • deriveIBMPIN

        public EncryptedPIN deriveIBMPIN​(java.lang.String accountNo,
                                         T pvk,
                                         java.lang.String decTab,
                                         java.lang.String pinValData,
                                         int minPinLen,
                                         java.lang.String offset)
                                  throws SMException
        Description copied from interface: SMAdapter
        Derive a PIN Using the IBM 3624 method

        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

        Specified by:
        deriveIBMPIN in interface SMAdapter<T>
        Parameters:
        accountNo - the 12 right-most digits of the account number excluding the check digit
        pvk - accepts single, double, triple size key length. Single key length is recomendated
        decTab - decimalisation table. Accepts plain text and encrypted decimalisation table depending to HSM configuration
        pinValData - 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 number
        minPinLen - min pin length
        offset - IBM PIN Offset
        Returns:
        PIN under LMK
        Throws:
        SMException
      • calculateCVV

        public java.lang.String calculateCVV​(java.lang.String accountNo,
                                             T cvkA,
                                             T cvkB,
                                             java.util.Date expDate,
                                             java.lang.String serviceCode)
                                      throws SMException
        Description copied from interface: SMAdapter
        Calaculate a Card Verification Code/Value.

        NOTE: cvkA and cvkB should be single length keys but at least one of them may be double length key

        Specified by:
        calculateCVV in interface SMAdapter<T>
        Parameters:
        accountNo - The account number including BIN and the check digit
        cvkA - the first CVK in CVK pair
        cvkB - the second CVK in CVK pair
        expDate - the card expiration date
        serviceCode - the card service code Service code should be:
        • the value which will be placed onto card's magnetic stripe for encoding CVV1/CVC1
        • "000" for printing CVV2/CVC2 on card's signature stripe
        • "999" for inclusion iCVV/Chip CVC on EMV chip card
        Returns:
        Card Verification Code/Value
        Throws:
        SMException
      • calculateCVD

        public java.lang.String calculateCVD​(java.lang.String accountNo,
                                             T cvkA,
                                             T cvkB,
                                             java.lang.String expDate,
                                             java.lang.String serviceCode)
                                      throws SMException
        Description copied from interface: SMAdapter
        Calaculate a Card Verification Digit (Code/Value).

        NOTE: cvkA and cvkB should be single length keys but at least one of them may be double length key

        Specified by:
        calculateCVD in interface SMAdapter<T>
        Parameters:
        accountNo - The account number including BIN and the check digit
        cvkA - the first CVK in CVK pair
        cvkB - the second CVK in CVK pair
        expDate - the card expiration date
        serviceCode - the card service code Service code should be:
        • the value which will be placed onto card's magnetic stripe for encoding CVV1/CVC1
        • "000" for printing CVV2/CVC2 on card's signature stripe
        • "999" for inclusion iCVV/Chip CVC on EMV chip card
        Returns:
        Card Verification Digit (Code/Value)
        Throws:
        SMException
      • calculateCAVV

        public java.lang.String calculateCAVV​(java.lang.String accountNo,
                                              T cvk,
                                              java.lang.String upn,
                                              java.lang.String authrc,
                                              java.lang.String sfarc)
                                       throws SMException
        Description copied from interface: SMAdapter
        Calaculate a 3-D Secure CAVV/AAV.
        • Visa uses CAVV (Cardholder Authentication Verification Value)
        • MasterCard uses AAV (Accountholder Authentication Value)

        NOTE: Algorithm used to calculation CAVV/AAV is same as for CVV/CVC calculation. Only has been changed meaning of parameters expDate and serviceCode.

        Specified by:
        calculateCAVV in interface SMAdapter<T>
        Parameters:
        accountNo - the account number including BIN and the check digit.
        cvk - the key used to CVV/CVC generation
        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.
        Returns:
        Cardholder Authentication Verification Value/Accountholder Authentication Value
        Throws:
        SMException
      • verifyCVV

        public boolean verifyCVV​(java.lang.String accountNo,
                                 T cvkA,
                                 T cvkB,
                                 java.lang.String cvv,
                                 java.util.Date expDate,
                                 java.lang.String serviceCode)
                          throws SMException
        Description copied from interface: SMAdapter
        Verify a Card Verification Code/Value.

        NOTE: cvkA and cvkB should be single length keys but at least one of them may be double length key

        Specified by:
        verifyCVV in interface SMAdapter<T>
        Parameters:
        accountNo - The account number including BIN and the check digit
        cvkA - the first CVK in CVK pair
        cvkB - the second CVK in CVK pair
        cvv - Card Verification Code/Value
        expDate - the card expiration date
        serviceCode - the card service code Service code should be:
        • taken from card's magnetic stripe for verifing CVV1/CVC1
        • "000" for verifing CVV2/CVC2 printed on card's signature stripe
        • "999" for verifing iCVV/Chip CVC included on EMV chip card
        Returns:
        true if CVV/CVC is valid or false if not
        Throws:
        SMException
      • verifyCVD

        public boolean verifyCVD​(java.lang.String accountNo,
                                 T cvkA,
                                 T cvkB,
                                 java.lang.String cvv,
                                 java.lang.String expDate,
                                 java.lang.String serviceCode)
                          throws SMException
        Description copied from interface: SMAdapter
        Verify a Card Verification Digit (Code/Value).

        NOTE: cvkA and cvkB should be single length keys but at least one of them may be double length key

        Specified by:
        verifyCVD in interface SMAdapter<T>
        Parameters:
        accountNo - The account number including BIN and the check digit
        cvkA - the first CVK in CVK pair
        cvkB - the second CVK in CVK pair
        cvv - Card Verification Code/Value
        expDate - the card expiration date
        serviceCode - the card service code Service code should be:
        • taken from card's magnetic stripe for verifing CVV1/CVC1
        • "000" for verifing CVV2/CVC2 printed on card's signature stripe
        • "999" for verifing iCVV/Chip CVC included on EMV chip card
        Returns:
        true if CVV/CVC is valid or false otherwise
        Throws:
        SMException
      • verifyCAVV

        public 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
        Description copied from interface: SMAdapter
        Verify a 3-D Secure CAVV/AAV.
        • Visa uses CAVV (Cardholder Authentication Verification Value)
        • MasterCard uses AAV (Accountholder Authentication Value)

        NOTE: Algorithm used to verification CAVV/AAV is same as for CVV/CVC verification. Only has been changed meaning of parameters expDate and serviceCode.

        Specified by:
        verifyCAVV in interface SMAdapter<T>
        Parameters:
        accountNo - the account number including BIN and the check digit.
        cvk - the key used to CVV/CVC generation
        cavv - 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.
        Returns:
        true if CAVV/AAV is valid or false if not
        Throws:
        SMException
      • verifydCVV

        public 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
        Description copied from interface: SMAdapter
        Verify a Dynamic Card Verification Value (dCVV).

        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
Specified by:
verifydCVV in interface SMAdapter<T>
Parameters:
accountNo - The account number including BIN and the check digit
imkac - the issuer master key for generating and verifying Application Cryptograms
dcvv - dynamic Card Verification Value
expDate - the card expiration date
serviceCode - the card service code
atc - 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.
Returns:
true if dcvv is valid, or false if not
Throws:
SMException