diff options
| author | clemenso <clemenso@8a26b1a7-26f0-462f-b9ef-d0e30c41f5a4> | 2009-08-06 14:01:01 +0000 | 
|---|---|---|
| committer | clemenso <clemenso@8a26b1a7-26f0-462f-b9ef-d0e30c41f5a4> | 2009-08-06 14:01:01 +0000 | 
| commit | 974087a04d2fb9b03a72b66c090afe65e5a818dc (patch) | |
| tree | 04c20ab8a9b4c6abab720e294868d450fe9585d3 /smcc/src | |
| parent | a6575ed68434ead1b2ebdfe1563d9cd11a2d4007 (diff) | |
| download | mocca-974087a04d2fb9b03a72b66c090afe65e5a818dc.tar.gz mocca-974087a04d2fb9b03a72b66c090afe65e5a818dc.tar.bz2 mocca-974087a04d2fb9b03a72b66c090afe65e5a818dc.zip | |
FIX [462] PINMgmtSignatureCard changePIN silently ignores wrong pin entry [63cX]
git-svn-id: https://joinup.ec.europa.eu/svn/mocca/trunk@414 8a26b1a7-26f0-462f-b9ef-d0e30c41f5a4
Diffstat (limited to 'smcc/src')
| -rw-r--r-- | smcc/src/test/java/at/gv/egiz/smcc/CardTest.java | 67 | ||||
| -rw-r--r-- | smcc/src/test/java/at/gv/egiz/smcc/starcos/STARCOSCardTest.java | 57 | 
2 files changed, 123 insertions, 1 deletions
| diff --git a/smcc/src/test/java/at/gv/egiz/smcc/CardTest.java b/smcc/src/test/java/at/gv/egiz/smcc/CardTest.java index 298e26a5..f72820e1 100644 --- a/smcc/src/test/java/at/gv/egiz/smcc/CardTest.java +++ b/smcc/src/test/java/at/gv/egiz/smcc/CardTest.java @@ -76,6 +76,73 @@ public abstract class CardTest {    } +  public class TestWrongPINProvider implements PINProvider { + +    int provided = 0; +    int numWrongTries = 0; + +    char[] pin; + +    public TestWrongPINProvider(char[] pin, int numWrongTries) { +      super(); +      this.pin = pin; +      this.numWrongTries = numWrongTries; +    } + +    @Override +    public char[] providePIN(PINSpec spec, int retries) +        throws CancelledException, InterruptedException { +      if (provided >= numWrongTries) { +        throw new CancelledException("Number of wrong tries reached: " + provided); +      } else { +        provided++; +        return pin; +      } +    } + +    public int getProvided() { +      return provided; +    } +  } + +  public class TestWrongChangePINProvider implements ChangePINProvider { + +    int provided = 0; +    int numWrongTries = 0; + +    char[] pin; +    char[] oldPin; + +    /** emulate ChangePinProvider */ +    public TestWrongChangePINProvider(char[] oldPin, char[] newPin, int numWrongTries) { +      super(); +      this.pin = newPin; +      this.oldPin = oldPin; +      this.numWrongTries = numWrongTries; +    } + +    @Override +    public char[] providePIN(PINSpec spec, int retries) +        throws CancelledException, InterruptedException { +      return pin; +    } + +    public int getProvided() { +      return provided; +    } + +    @Override +    public char[] provideOldPIN(PINSpec spec, int retries) +        throws CancelledException, InterruptedException { +      if (provided >= numWrongTries) { +        throw new CancelledException("Number of wrong tries reached: " + provided); +      } else { +        provided++; +        return oldPin; +      } +    } +  } +    public CardTest() {      super();    } diff --git a/smcc/src/test/java/at/gv/egiz/smcc/starcos/STARCOSCardTest.java b/smcc/src/test/java/at/gv/egiz/smcc/starcos/STARCOSCardTest.java index 0fb4f62d..bf56ef47 100644 --- a/smcc/src/test/java/at/gv/egiz/smcc/starcos/STARCOSCardTest.java +++ b/smcc/src/test/java/at/gv/egiz/smcc/starcos/STARCOSCardTest.java @@ -45,6 +45,7 @@ import at.gv.egiz.smcc.SignatureCardException;  import at.gv.egiz.smcc.SignatureCardFactory;  import at.gv.egiz.smcc.CardTest.TestChangePINProvider;  import at.gv.egiz.smcc.CardTest.TestPINProvider; +import at.gv.egiz.smcc.PINProvider;  import at.gv.egiz.smcc.SignatureCard.KeyboxName;  import at.gv.egiz.smcc.acos.A03ApplDEC;  import at.gv.egiz.smcc.acos.A04ApplDEC; @@ -52,6 +53,7 @@ import at.gv.egiz.smcc.acos.A04ApplSIG;  import at.gv.egiz.smcc.acos.ACOSAppl;  import at.gv.egiz.smcc.acos.ACOSApplDEC;  import at.gv.egiz.smcc.acos.ACOSApplSIG; +import org.junit.Ignore;  public class STARCOSCardTest extends CardTest { @@ -288,10 +290,63 @@ public class STARCOSCardTest extends CardTest {          signatureCard.verifyPIN(pinSpec, new TestPINProvider(newPin));          pin = newPin;        } -      } +  } + +  @Test +  public void testVerifyWrongPin() throws CardNotSupportedException, +      LockedException, NotActivatedException, CancelledException, +      PINFormatException, SignatureCardException, InterruptedException { + +    char[] defaultPin = "123456".toCharArray(); + +    PINMgmtSignatureCard signatureCard = (PINMgmtSignatureCard) createSignatureCard(); +    CardEmul card = (CardEmul) signatureCard.getCard(); +    STARCOSCardChannelEmul channel = (STARCOSCardChannelEmul) card.getBasicChannel(); +    channel.setPin(STARCOSCardChannelEmul.KID_PIN_Glob, defaultPin); +    STARCOSApplSichereSignatur appl = (STARCOSApplSichereSignatur) card.getApplication(STARCOSApplSichereSignatur.AID_SichereSignatur); +    appl.setPin(STARCOSApplSichereSignatur.KID_PIN_SS, defaultPin); + +    for (PINSpec pinSpec : signatureCard.getPINSpecs()) { +      char[] wrongPin = "999999".toCharArray(); +      int numWrongTries = 2; +      TestWrongPINProvider wrongPinProvider = new TestWrongPINProvider(wrongPin, numWrongTries); +      try { +        signatureCard.verifyPIN(pinSpec, wrongPinProvider); +      } catch (CancelledException ex) { +      } finally { +        assertTrue(wrongPinProvider.getProvided() == numWrongTries); +      } +    }    } +  @Test +  public void testChangeWrongPin() throws CardNotSupportedException, +      LockedException, NotActivatedException, CancelledException, +      PINFormatException, SignatureCardException, InterruptedException { +    char[] defaultPin = "123456".toCharArray(); + +    PINMgmtSignatureCard signatureCard = (PINMgmtSignatureCard) createSignatureCard(); +    CardEmul card = (CardEmul) signatureCard.getCard(); +    STARCOSCardChannelEmul channel = (STARCOSCardChannelEmul) card.getBasicChannel(); +    channel.setPin(STARCOSCardChannelEmul.KID_PIN_Glob, defaultPin); +    STARCOSApplSichereSignatur appl = (STARCOSApplSichereSignatur) card.getApplication(STARCOSApplSichereSignatur.AID_SichereSignatur); +    appl.setPin(STARCOSApplSichereSignatur.KID_PIN_SS, defaultPin); + +    for (PINSpec pinSpec : signatureCard.getPINSpecs()) { +      char[] wrongPin = "999999".toCharArray(); +      int numWrongTries = 2; +      TestWrongChangePINProvider wrongPinProvider = +              new TestWrongChangePINProvider(wrongPin, defaultPin, numWrongTries); + +      try { +        signatureCard.changePIN(pinSpec, wrongPinProvider); +      } catch (CancelledException ex) { +      } finally { +        assertTrue(wrongPinProvider.getProvided() == numWrongTries); +      } +    } +  }  } | 
