Fields Summary |
---|
private static final int | TYPE_BCDPIN type constant. |
private static final int | TYPE_ASCIIPIN type constant. |
private static final int | TYPE_UTFPIN type constant. |
private static final int | TYPE_HNPIN type constant. |
private static final int | TYPE_ISOPIN type constant. |
public static final int | FLAG_CASE_SENSITIVEPIN flag constant. |
public static final int | FLAG_CHANGE_DISABLEDPIN flag constant. |
public static final int | FLAG_UNBLOCK_DISABLEDPIN flag constant. |
public static final int | FLAG_NEEDS_PADDINGPIN flag constant. |
public static final int | FLAG_DISABLE_ALLOWEDPIN flag constant. |
public static final int | FLAG_UNBLOCKING_PINPIN flag constant. |
public String | labelPIN label. |
public int | idPIN identifier. |
public int | pinTypepinType PIN attribute. |
public int | minLengthminLength PIN attribute. |
public int | storedLengthstoredLength PIN attribute. |
public int | maxLengthmaxLength PIN attribute. |
public int | pinReferencepinReference PIN attribute. |
public int | padCharpadChar PIN attribute. |
public int | pinFlagspinFlags PIN attribute. |
public short[] | pathPath PIN attribute. |
Methods Summary |
---|
public boolean | check(int action)Verifies if the specified operation can be performed on this PIN.
if (action == ACLPermissions.CMD_CHANGE) {
return (pinFlags & FLAG_CHANGE_DISABLED) == 0;
}
if (action == ACLPermissions.CMD_DISABLE) {
return (pinFlags & FLAG_DISABLE_ALLOWED) != 0;
}
if (action == ACLPermissions.CMD_UNBLOCK) {
return (pinFlags & FLAG_UNBLOCK_DISABLED) == 0;
}
return true;
|
public int | getMaxLength()Returns maximum PIN length in characters.
if ((pinFlags & FLAG_NEEDS_PADDING) == 0) {
return maxLength;
}
if (pinType == TYPE_BCD) {
return storedLength * 2;
}
// UTF symbol may occupy 1 or 2 bytes, additional check is necessary
return storedLength;
|
public boolean | isNumeric()Returns true if this PIN is a number.
return (pinType != TYPE_UTF);
|
public boolean | isUnblockingPIN()Verifies if this PIN can be used to unblock other PINs.
return (pinFlags & FLAG_UNBLOCKING_PIN) != 0;
|
public byte[] | transform(java.lang.String s)Transforms string entered by user according to PIN attributes.
if (s.length() < minLength) {
return null;
}
byte[] data = null;
if (pinType == TYPE_UTF) {
if ((pinFlags & FLAG_CASE_SENSITIVE) == 0) {
s = s.toUpperCase(); // locale?
}
data = Utils.stringToBytes(s);
if (data.length > getMaxLength()) {
return null;
}
} else {
byte[] tmp = new byte[s.length()];
for (int i = 0; i < tmp.length; i++) {
tmp[i] = (byte) (s.charAt(i));
}
if (pinType == TYPE_ASCII || pinType == TYPE_ISO) {
data = tmp;
} else {
if (pinType == TYPE_HN) {
data = tmp;
for (int i = 0; i < data.length; i++) {
data[i] = (byte) (0xf0 | (data[i] - 0x30));
}
} else { // type == TYPE_BCD
data = new byte[(tmp.length + 1) / 2];
for (int i = 0; i < data.length; i++) {
int l = i * 2;
int b1 = tmp[l] - 0x30;
int b2;
if (l + 1 == tmp.length) {
b2 = padChar;
} else {
b2 = tmp[l + 1] - 0x30;
}
data[i] = (byte) ((b1 << 4) | (b2 & 0xf));
}
}
}
}
if (((pinFlags & FLAG_NEEDS_PADDING) == 0) ||
(data.length == storedLength)) {
return data;
}
byte[] r = new byte[storedLength];
System.arraycopy(data, 0, r, 0, data.length);
for (int i = data.length; i < storedLength; i++) {
r[i] = (byte) padChar;
}
return r;
|