summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--BKUCommonGUI/src/main/java/at/gv/egiz/bku/gui/BKUGUIImpl.java35
-rw-r--r--smcc/src/main/java/at/gv/egiz/smcc/reader/DefaultCardReader.java19
2 files changed, 38 insertions, 16 deletions
diff --git a/BKUCommonGUI/src/main/java/at/gv/egiz/bku/gui/BKUGUIImpl.java b/BKUCommonGUI/src/main/java/at/gv/egiz/bku/gui/BKUGUIImpl.java
index 3fc631c3..e005836c 100644
--- a/BKUCommonGUI/src/main/java/at/gv/egiz/bku/gui/BKUGUIImpl.java
+++ b/BKUCommonGUI/src/main/java/at/gv/egiz/bku/gui/BKUGUIImpl.java
@@ -41,6 +41,8 @@ import java.text.MessageFormat;
import java.util.List;
import java.util.Locale;
import java.util.ResourceBundle;
+import java.util.logging.Level;
+import java.util.logging.Logger;
import javax.swing.GroupLayout;
import javax.swing.ImageIcon;
import javax.swing.JButton;
@@ -55,6 +57,8 @@ import javax.swing.SwingUtilities;
import javax.swing.UIManager;
import javax.swing.event.ListSelectionEvent;
import javax.swing.event.ListSelectionListener;
+import javax.swing.text.BadLocationException;
+import javax.swing.text.Document;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
@@ -93,7 +97,7 @@ public class BKUGUIImpl implements BKUGUIFacade {
protected JLabel switchFocusDummyLabel;
/** remember the pinfield to return to worker */
protected JPasswordField pinField;
- protected JPasswordField pinpadPINField;
+ protected Document pinpadPIN;
protected int buttonSize;
@@ -600,9 +604,10 @@ public class BKUGUIImpl implements BKUGUIFacade {
String pinName = getMessage(LABEL_PIN);
pinLabel.setText(MessageFormat.format(pinName, new Object[]{pinSpec.getLocalizedName()}));
- pinpadPINField = new JPasswordField();
+ JPasswordField pinpadPINField = new JPasswordField();
pinpadPINField.setText("");
pinpadPINField.setEnabled(false);
+ pinpadPIN = pinpadPINField.getDocument();
JLabel pinsizeLabel = new JLabel();
pinsizeLabel.setFont(pinsizeLabel.getFont().deriveFont(pinsizeLabel.getFont().getStyle() & ~java.awt.Font.BOLD, pinsizeLabel.getFont().getSize()-2));
@@ -850,9 +855,11 @@ public class BKUGUIImpl implements BKUGUIFacade {
public void correctionButtonPressed() {
log.debug("[" + Thread.currentThread().getName() + "] correction button pressed");
- if (pinpadPINField != null) {
- String maskedPIN = pinpadPINField.getText();
- pinpadPINField.setText(maskedPIN.substring(0, maskedPIN.length() - 1));
+ if (pinpadPIN != null) {
+ try {
+ pinpadPIN.remove(0, 1);
+ } catch (BadLocationException ex) {
+ }
}
}
@@ -860,8 +867,11 @@ public class BKUGUIImpl implements BKUGUIFacade {
public void allKeysCleared() {
log.debug("[" + Thread.currentThread().getName() + "] all keys cleared");
- if (pinpadPINField != null) {
- pinpadPINField.setText("");
+ if (pinpadPIN != null) {
+ try {
+ pinpadPIN.remove(0, pinpadPIN.getLength());
+ } catch (BadLocationException ex) {
+ }
}
}
@@ -869,8 +879,11 @@ public class BKUGUIImpl implements BKUGUIFacade {
public void validKeyPressed() {
log.debug("[" + Thread.currentThread().getName() + "] valid key pressed");
- if (pinpadPINField != null) {
- pinpadPINField.setText(pinpadPINField.getText() + '*');
+ if (pinpadPIN != null) {
+ try {
+ pinpadPIN.insertString(0, "*", null);
+ } catch (BadLocationException ex) {
+ }
}
}
@@ -1265,8 +1278,8 @@ public class BKUGUIImpl implements BKUGUIFacade {
@Override
public char[] getPin() {
if (pinField != null) {
- char[] pin = pinField.getPassword();
- pinField = null;
+ char[] pin = pinField.getPassword(); //returns a copy
+ pinField = null; //garbage collect original pin (make sure to clear char[] after use)
return pin;
}
return null;
diff --git a/smcc/src/main/java/at/gv/egiz/smcc/reader/DefaultCardReader.java b/smcc/src/main/java/at/gv/egiz/smcc/reader/DefaultCardReader.java
index 45ea7a5a..6bf4a7de 100644
--- a/smcc/src/main/java/at/gv/egiz/smcc/reader/DefaultCardReader.java
+++ b/smcc/src/main/java/at/gv/egiz/smcc/reader/DefaultCardReader.java
@@ -35,6 +35,7 @@ import at.gv.egiz.smcc.VerifyAPDUSpec;
import at.gv.egiz.smcc.pin.gui.ModifyPINGUI;
import at.gv.egiz.smcc.pin.gui.PINGUI;
import at.gv.egiz.smcc.util.ISO7816Utils;
+import java.util.Arrays;
/**
*
@@ -61,7 +62,10 @@ public class DefaultCardReader implements CardReader {
throws SignatureCardException, CardException, InterruptedException {
log.debug("VERIFY");
- return channel.transmit(ISO7816Utils.createVerifyAPDU(apduSpec, pinGUI.providePIN(pinSpec, retries)));
+ char[] pin = pinGUI.providePIN(pinSpec, retries);
+ ResponseAPDU response = channel.transmit(ISO7816Utils.createVerifyAPDU(apduSpec, pin));
+ Arrays.fill(pin, '0');
+ return response;
}
@Override
@@ -69,9 +73,12 @@ public class DefaultCardReader implements CardReader {
ModifyPINGUI pinGUI, PINSpec pinSpec, int retries)
throws SignatureCardException, CardException, InterruptedException {
log.debug("MODIFY (CHANGE_REFERENCE_DATA)");
- char[] oldPin = pinGUI.provideCurrentPIN(pinSpec, retries);
- char[] newPin = pinGUI.provideNewPIN(pinSpec);
- return channel.transmit(ISO7816Utils.createChangeReferenceDataAPDU(apduSpec, oldPin, newPin));
+ char[] oldPIN = pinGUI.provideCurrentPIN(pinSpec, retries);
+ char[] newPIN = pinGUI.provideNewPIN(pinSpec);
+ ResponseAPDU response = channel.transmit(ISO7816Utils.createChangeReferenceDataAPDU(apduSpec, oldPIN, newPIN));
+ Arrays.fill(oldPIN, '0');
+ Arrays.fill(newPIN, '0');
+ return response;
}
@Override
@@ -80,7 +87,9 @@ public class DefaultCardReader implements CardReader {
throws SignatureCardException, CardException, InterruptedException {
log.debug("MODIFY (NEW_REFERENCE_DATA)");
char[] newPIN = pinGUI.provideNewPIN(pinSpec);
- return channel.transmit(ISO7816Utils.createNewReferenceDataAPDU(apduSpec, newPIN));
+ ResponseAPDU response = channel.transmit(ISO7816Utils.createNewReferenceDataAPDU(apduSpec, newPIN));
+ Arrays.fill(newPIN, '0');
+ return response;
}
@Override