public class EncryptedPIN extends java.lang.Object implements java.io.Serializable, Loggeable
The PIN (Personal Identification Number), is used to authenticate card
holders. A user enters his/her PIN on the pin-pad (also called pin entry device)
of a terminal (whether ATM or POS). The terminal forms the PIN Block, which
is a mix of the PIN and the account number.
In a typical environment, the PIN Block (not the PIN) gets encrypted and sent
to the acquirer. This Encrypted PIN Block is the typical content of the
PIN Data ISO Field (Field 52).
This class represents an encrypted PIN, no matter by whom it is encrypted.
Typically a PIN is encrypted under one of these three:
1- Under a terminal PIN key (like TPK or DUKPT)
2- Under an Interchange PIN key (like ZPK)
3- Under the the security module itself (i.e. under LMK)
This class knows nothing about, who encrypted it.
This class represents an encrypted PIN using:
1- The PIN Block (encrypted)
2- The account number (the 12 right-most digits of the account number excluding the check digit)
3- The PIN Block Format
The PIN Block Format specifies how the clear pin (as entered by the card holder)
and the account number get mixed to form the PIN Block.
SMAdapter
,
Serialized FormConstructor and Description |
---|
EncryptedPIN() |
EncryptedPIN(byte[] pinBlock,
byte pinBlockFormat,
java.lang.String accountNumber) |
EncryptedPIN(byte[] pinBlock,
byte pinBlockFormat,
java.lang.String accountNumber,
boolean extract) |
EncryptedPIN(java.lang.String pinBlockHexString,
byte pinBlockFormat,
java.lang.String accountNumber) |
EncryptedPIN(java.lang.String pinBlockHexString,
byte pinBlockFormat,
java.lang.String accountNumber,
boolean extract) |
Modifier and Type | Method and Description |
---|---|
void |
dump(java.io.PrintStream p,
java.lang.String indent)
dumps PIN basic information
|
static java.lang.String |
extractAccountNumberPart(java.lang.String accountNumber)
This method extracts the 12 right-most digits of the account number,
execluding the check digit.
|
java.lang.String |
getAccountNumber() |
byte[] |
getPINBlock() |
byte |
getPINBlockFormat() |
void |
setAccountNumber(java.lang.String extractedAccountNumber)
Sets the 12 right-most digits of the account number excluding the check digit
|
void |
setPINBlock(byte[] pinBlock) |
void |
setPINBlockFormat(byte pinBlockFormat) |
public EncryptedPIN()
public EncryptedPIN(byte[] pinBlock, byte pinBlockFormat, java.lang.String accountNumber)
pinBlock
- pinBlockFormat
- accountNumber
- account number, including BIN and the check digitpublic EncryptedPIN(byte[] pinBlock, byte pinBlockFormat, java.lang.String accountNumber, boolean extract)
pinBlock
- pinBlockFormat
- 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 digitextract
- true to extract 12 right-most digits off the account numberpublic EncryptedPIN(java.lang.String pinBlockHexString, byte pinBlockFormat, java.lang.String accountNumber)
pinBlockHexString
- the PIN Block represented as a HexString instead of a byte[]pinBlockFormat
- accountNumber
- account number, including BIN and the check digitpublic EncryptedPIN(java.lang.String pinBlockHexString, byte pinBlockFormat, java.lang.String accountNumber, boolean extract)
pinBlockHexString
- the PIN Block represented as a HexString instead of a byte[]pinBlockFormat
- 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 digitextract
- true to extract 12 right-most digits off the account numberpublic void dump(java.io.PrintStream p, java.lang.String indent)
public void setPINBlock(byte[] pinBlock)
pinBlock
- public byte[] getPINBlock()
public void setPINBlockFormat(byte pinBlockFormat)
pinBlockFormat
- public byte getPINBlockFormat()
public void setAccountNumber(java.lang.String extractedAccountNumber)
extractedAccountNumber
- 12 right-most digits of the account number, excluding the check digit.public java.lang.String getAccountNumber()
public static java.lang.String extractAccountNumberPart(java.lang.String accountNumber)
accountNumber
- (PAN) consists of the BIN (Bank Identification Number), accountNumber
and a check digit.