From 265b0aca555d9880361b754b6a18ce70b5be28cd Mon Sep 17 00:00:00 2001 From: mcentner Date: Wed, 16 Jun 2010 11:19:41 +0000 Subject: Refactored smart card unit tests to use Spring to configure smart card emulators. git-svn-id: https://joinup.ec.europa.eu/svn/mocca/trunk@754 8a26b1a7-26f0-462f-b9ef-d0e30c41f5a4 --- .../at/gv/egiz/smcc/test/AbstractCardTest.java | 228 ++++++++++++++++++++ .../at/gv/egiz/smcc/test/AbstractCardTestBase.java | 62 ++++++ .../gv/egiz/smcc/test/AbstractInvalidCardTest.java | 66 ++++++ .../smcc/test/AbstractNotActivatedCardTest.java | 69 ++++++ .../at/gv/egiz/smcc/test/acos/ACOSA03Test.java | 87 ++++++++ .../acos/ACOSA04InfoboxContainerEncryptedTest.java | 44 ++++ .../gv/egiz/smcc/test/acos/ACOSA04InvalidTest.java | 24 +++ .../smcc/test/acos/ACOSA04NotActivatedTest.java | 24 +++ .../at/gv/egiz/smcc/test/acos/ACOSA04Test.java | 85 ++++++++ .../java/at/gv/egiz/smcc/test/acos/ACOSTest.java | 30 +++ .../at/gv/egiz/smcc/test/ecard/ECardG2Test.java | 85 ++++++++ .../egiz/smcc/test/ecard/ECardG3ActivateTest.java | 64 ++++++ .../ECardG3InfoboxContainerEncryptedTest.java | 44 ++++ .../test/ecard/ECardG3InfoboxContainerTest.java | 55 +++++ .../egiz/smcc/test/ecard/ECardG3InvalidTest.java | 24 +++ .../smcc/test/ecard/ECardG3NotActivatedTest.java | 38 ++++ .../at/gv/egiz/smcc/test/ecard/ECardG3Test.java | 132 ++++++++++++ .../java/at/gv/egiz/smcc/test/ecard/ECardTest.java | 54 +++++ .../smcc/test/spring/ByteArrayFactoryBean.java | 48 +++++ .../test/spring/ByteArrayPropertyDependable.java | 38 ++++ .../smcc/test/spring/ByteArrayPropertyEditor.java | 49 +++++ .../spring/ByteArrayPropertyEditorRegistrar.java | 32 +++ .../test/spring/ByteArrayPropertyEditorTest.java | 53 +++++ .../test/spring/CertificateFileFactoryBean.java | 118 +++++++++++ .../spring/InfoboxContainerFileFactoryBean.java | 236 +++++++++++++++++++++ .../smcc/test/spring/PrivateKeyFactoryBean.java | 62 ++++++ .../smcc/test/spring/PublicKeyFactoryBean.java | 62 ++++++ 27 files changed, 1913 insertions(+) create mode 100644 smcc/src/test/java/at/gv/egiz/smcc/test/AbstractCardTest.java create mode 100644 smcc/src/test/java/at/gv/egiz/smcc/test/AbstractCardTestBase.java create mode 100644 smcc/src/test/java/at/gv/egiz/smcc/test/AbstractInvalidCardTest.java create mode 100644 smcc/src/test/java/at/gv/egiz/smcc/test/AbstractNotActivatedCardTest.java create mode 100644 smcc/src/test/java/at/gv/egiz/smcc/test/acos/ACOSA03Test.java create mode 100644 smcc/src/test/java/at/gv/egiz/smcc/test/acos/ACOSA04InfoboxContainerEncryptedTest.java create mode 100644 smcc/src/test/java/at/gv/egiz/smcc/test/acos/ACOSA04InvalidTest.java create mode 100644 smcc/src/test/java/at/gv/egiz/smcc/test/acos/ACOSA04NotActivatedTest.java create mode 100644 smcc/src/test/java/at/gv/egiz/smcc/test/acos/ACOSA04Test.java create mode 100644 smcc/src/test/java/at/gv/egiz/smcc/test/acos/ACOSTest.java create mode 100644 smcc/src/test/java/at/gv/egiz/smcc/test/ecard/ECardG2Test.java create mode 100644 smcc/src/test/java/at/gv/egiz/smcc/test/ecard/ECardG3ActivateTest.java create mode 100644 smcc/src/test/java/at/gv/egiz/smcc/test/ecard/ECardG3InfoboxContainerEncryptedTest.java create mode 100644 smcc/src/test/java/at/gv/egiz/smcc/test/ecard/ECardG3InfoboxContainerTest.java create mode 100644 smcc/src/test/java/at/gv/egiz/smcc/test/ecard/ECardG3InvalidTest.java create mode 100644 smcc/src/test/java/at/gv/egiz/smcc/test/ecard/ECardG3NotActivatedTest.java create mode 100644 smcc/src/test/java/at/gv/egiz/smcc/test/ecard/ECardG3Test.java create mode 100644 smcc/src/test/java/at/gv/egiz/smcc/test/ecard/ECardTest.java create mode 100644 smcc/src/test/java/at/gv/egiz/smcc/test/spring/ByteArrayFactoryBean.java create mode 100644 smcc/src/test/java/at/gv/egiz/smcc/test/spring/ByteArrayPropertyDependable.java create mode 100644 smcc/src/test/java/at/gv/egiz/smcc/test/spring/ByteArrayPropertyEditor.java create mode 100644 smcc/src/test/java/at/gv/egiz/smcc/test/spring/ByteArrayPropertyEditorRegistrar.java create mode 100644 smcc/src/test/java/at/gv/egiz/smcc/test/spring/ByteArrayPropertyEditorTest.java create mode 100644 smcc/src/test/java/at/gv/egiz/smcc/test/spring/CertificateFileFactoryBean.java create mode 100644 smcc/src/test/java/at/gv/egiz/smcc/test/spring/InfoboxContainerFileFactoryBean.java create mode 100644 smcc/src/test/java/at/gv/egiz/smcc/test/spring/PrivateKeyFactoryBean.java create mode 100644 smcc/src/test/java/at/gv/egiz/smcc/test/spring/PublicKeyFactoryBean.java (limited to 'smcc/src/test/java/at/gv/egiz/smcc/test') diff --git a/smcc/src/test/java/at/gv/egiz/smcc/test/AbstractCardTest.java b/smcc/src/test/java/at/gv/egiz/smcc/test/AbstractCardTest.java new file mode 100644 index 00000000..ca3efa38 --- /dev/null +++ b/smcc/src/test/java/at/gv/egiz/smcc/test/AbstractCardTest.java @@ -0,0 +1,228 @@ +/* +* Copyright 2009 Federal Chancellery Austria and +* Graz University of Technology +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +*/ + +package at.gv.egiz.smcc.test; + +import static org.junit.Assert.assertArrayEquals; +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertTrue; + +import java.io.ByteArrayInputStream; +import java.io.IOException; +import java.io.UnsupportedEncodingException; +import java.security.NoSuchAlgorithmException; + +import org.junit.Test; + +import at.gv.egiz.smcc.CancelledException; +import at.gv.egiz.smcc.CardNotSupportedException; +import at.gv.egiz.smcc.LockedException; +import at.gv.egiz.smcc.PINMgmtSignatureCard; +import at.gv.egiz.smcc.PinInfo; +import at.gv.egiz.smcc.SignatureCardException; +import at.gv.egiz.smcc.SignatureCard.KeyboxName; +import at.gv.egiz.smcc.pin.gui.CancelPINProvider; +import at.gv.egiz.smcc.pin.gui.DummyPINGUI; +import at.gv.egiz.smcc.pin.gui.InterruptPINProvider; +import at.gv.egiz.smcc.pin.gui.PINGUI; +import at.gv.egiz.smcc.pin.gui.SMCCTestPINProvider; + +public abstract class AbstractCardTest extends AbstractCardTestBase { + + @Test + public void testGetCertificates() throws SignatureCardException, InterruptedException { + + byte[] certificateSSRef = (byte[]) applicationContext.getBean("certificateSS", byte[].class); + + byte[] certificateSS = signatureCard.getCertificate(KeyboxName.SECURE_SIGNATURE_KEYPAIR); + + assertArrayEquals(certificateSSRef, certificateSS); + + byte[] certificateGSRef = (byte[]) applicationContext.getBean("certificateGS", byte[].class); + + byte[] certificateGS = signatureCard.getCertificate(KeyboxName.CERITIFIED_KEYPAIR); + + assertArrayEquals(certificateGSRef, certificateGS); + + } + + @Test + public void testSignSIG() throws UnsupportedEncodingException, SignatureCardException, InterruptedException, IOException { + + char[] pin = "123456".toCharArray(); + + byte[] signature = signatureCard.createSignature(new ByteArrayInputStream("MOCCA" + .getBytes("ASCII")), + KeyboxName.SECURE_SIGNATURE_KEYPAIR, new SMCCTestPINProvider(pin), null); + + assertNotNull(signature); + + } + + @Test(expected = LockedException.class) + public void testSignSIGWrongPIN() throws UnsupportedEncodingException, SignatureCardException, InterruptedException, IOException { + + char[] pin = "00000".toCharArray(); + + byte[] signature = signatureCard.createSignature(new ByteArrayInputStream("MOCCA" + .getBytes("ASCII")), + KeyboxName.SECURE_SIGNATURE_KEYPAIR, new SMCCTestPINProvider(pin), null); + + assertNotNull(signature); + + } + + @Test(expected = CancelledException.class) + public void testSignSIGCancel() throws SignatureCardException, + InterruptedException, CardNotSupportedException, + NoSuchAlgorithmException, IOException { + + PINGUI pinProvider = new CancelPINProvider(); + + signatureCard.createSignature(new ByteArrayInputStream(MOCCA), + KeyboxName.SECURE_SIGNATURE_KEYPAIR, pinProvider, null); + + } + + @Test + public void testSignDEC() throws UnsupportedEncodingException, SignatureCardException, InterruptedException, IOException { + + char[] pin = "1234".toCharArray(); + + byte[] signature = signatureCard.createSignature(new ByteArrayInputStream("MOCCA" + .getBytes("ASCII")), + KeyboxName.CERITIFIED_KEYPAIR, new SMCCTestPINProvider(pin), null); + + assertNotNull(signature); + + } + + @Test(expected = LockedException.class) + public void testSignDECWrongPIN() throws UnsupportedEncodingException, SignatureCardException, InterruptedException, IOException { + + char[] pin = "00000".toCharArray(); + + byte[] signature = signatureCard.createSignature(new ByteArrayInputStream("MOCCA" + .getBytes("ASCII")), + KeyboxName.CERITIFIED_KEYPAIR, new SMCCTestPINProvider(pin), null); + + assertNotNull(signature); + + } + + @Test(expected = CancelledException.class) + public void testSignDECCancel() throws SignatureCardException, + InterruptedException, CardNotSupportedException, + NoSuchAlgorithmException, IOException { + + PINGUI pinProvider = new CancelPINProvider(); + + signatureCard.createSignature(new ByteArrayInputStream(MOCCA), + KeyboxName.CERITIFIED_KEYPAIR, pinProvider, null); + + } + + @Test(expected = InterruptedException.class) + public void testSignSIGInterrrupted() throws SignatureCardException, + InterruptedException, CardNotSupportedException, + NoSuchAlgorithmException, IOException { + + PINGUI pinProvider = new InterruptPINProvider(); + + signatureCard.createSignature(new ByteArrayInputStream(MOCCA), + KeyboxName.SECURE_SIGNATURE_KEYPAIR, pinProvider, null); + + } + + @Test(expected = InterruptedException.class) + public void testSignDECInterrrupted() throws SignatureCardException, + InterruptedException, CardNotSupportedException, + NoSuchAlgorithmException, IOException { + + PINGUI pinProvider = new InterruptPINProvider(); + + signatureCard.createSignature(new ByteArrayInputStream(MOCCA), + KeyboxName.CERITIFIED_KEYPAIR, pinProvider, null); + + } + + @Test(expected = CancelledException.class) + public void testSignSIGConcurrent() throws SignatureCardException, + InterruptedException, CardNotSupportedException, + NoSuchAlgorithmException, IOException { + + PINGUI pinProvider = new DummyPINGUI() { + @Override + public char[] providePIN(PinInfo spec, int retries) + throws CancelledException, InterruptedException { + + try { + signatureCard.getCertificate(KeyboxName.SECURE_SIGNATURE_KEYPAIR); + assertTrue(false); + return null; + } catch (SignatureCardException e) { + // expected + throw new CancelledException(); + } + + } + }; + + signatureCard.createSignature(new ByteArrayInputStream(MOCCA), + KeyboxName.SECURE_SIGNATURE_KEYPAIR, pinProvider, null); + + } + + @Test(expected = CancelledException.class) + public void testSignDECConcurrent() throws SignatureCardException, + InterruptedException, CardNotSupportedException, + NoSuchAlgorithmException, IOException { + + PINGUI pinProvider = new DummyPINGUI() { + @Override + public char[] providePIN(PinInfo spec, int retries) + throws CancelledException, InterruptedException { + + try { + signatureCard.getCertificate(KeyboxName.CERITIFIED_KEYPAIR); + assertTrue(false); + return null; + } catch (SignatureCardException e) { + // expected + throw new CancelledException(); + } + } + }; + + signatureCard.createSignature(new ByteArrayInputStream(MOCCA), + KeyboxName.CERITIFIED_KEYPAIR, pinProvider, null); + + } + + @Test + public void testGetPinSpecs() throws CardNotSupportedException, + SignatureCardException { + + assertTrue(signatureCard instanceof PINMgmtSignatureCard); + + PinInfo[] specs = ((PINMgmtSignatureCard) signatureCard).getPinInfos(); + assertNotNull(specs); + assertTrue(specs.length > 0); + + } + +} diff --git a/smcc/src/test/java/at/gv/egiz/smcc/test/AbstractCardTestBase.java b/smcc/src/test/java/at/gv/egiz/smcc/test/AbstractCardTestBase.java new file mode 100644 index 00000000..f809ca71 --- /dev/null +++ b/smcc/src/test/java/at/gv/egiz/smcc/test/AbstractCardTestBase.java @@ -0,0 +1,62 @@ +/* +* Copyright 2009 Federal Chancellery Austria and +* Graz University of Technology +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +*/ + +package at.gv.egiz.smcc.test; + +import static org.junit.Assert.assertNotNull; +import iaik.security.provider.IAIK; + +import javax.smartcardio.Card; + +import org.junit.Before; +import org.junit.BeforeClass; +import org.springframework.context.ApplicationContext; +import org.springframework.context.support.ClassPathXmlApplicationContext; + +import at.gv.egiz.smcc.CardNotSupportedException; +import at.gv.egiz.smcc.CardTerminalEmul; +import at.gv.egiz.smcc.SignatureCard; +import at.gv.egiz.smcc.SignatureCardFactory; + +public abstract class AbstractCardTestBase { + + public static byte[] MOCCA = { 'M', 'O', 'C', 'C', 'A' }; + + protected ApplicationContext applicationContext; + + protected Card card; + + protected SignatureCard signatureCard; + + @BeforeClass + public static void setupClass() { + IAIK.addAsJDK14Provider(); + } + + @Before + public void setup() throws CardNotSupportedException { + applicationContext = new ClassPathXmlApplicationContext(getClass().getSimpleName() + ".xml", getClass()); + + card = (Card) applicationContext.getBean("card", Card.class); + assertNotNull(card); + + SignatureCardFactory factory = SignatureCardFactory.getInstance(); + signatureCard = factory.createSignatureCard(card, new CardTerminalEmul(card)); + assertNotNull(signatureCard); + } + +} diff --git a/smcc/src/test/java/at/gv/egiz/smcc/test/AbstractInvalidCardTest.java b/smcc/src/test/java/at/gv/egiz/smcc/test/AbstractInvalidCardTest.java new file mode 100644 index 00000000..7b9f9f83 --- /dev/null +++ b/smcc/src/test/java/at/gv/egiz/smcc/test/AbstractInvalidCardTest.java @@ -0,0 +1,66 @@ +/* +* Copyright 2009 Federal Chancellery Austria and +* Graz University of Technology +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +*/ + +package at.gv.egiz.smcc.test; + +import static org.junit.Assert.assertNull; +import static org.junit.Assert.fail; + +import org.junit.Test; + +import at.gv.egiz.smcc.SignatureCardException; +import at.gv.egiz.smcc.SignatureCard.KeyboxName; +import at.gv.egiz.smcc.pin.gui.PINGUI; +import at.gv.egiz.smcc.pin.gui.SMCCTestPINProvider; + +public abstract class AbstractInvalidCardTest extends AbstractCardTestBase { + + @Test + public void testGetCertificates() throws SignatureCardException, InterruptedException { + + try { + signatureCard.getCertificate(KeyboxName.SECURE_SIGNATURE_KEYPAIR); + fail(); + } catch (SignatureCardException e) { + // expected + } catch (Exception e) { + fail(); + } + + try { + signatureCard.getCertificate(KeyboxName.CERITIFIED_KEYPAIR); + fail(); + } catch (SignatureCardException e) { + // expected + } catch (Exception e) { + fail(); + } + + } + + @Test(expected = SignatureCardException.class) + public void testGetInfoboxIdentityLink() throws SignatureCardException, InterruptedException { + + PINGUI pinProvider = new SMCCTestPINProvider("0000".toCharArray()); + + byte[] idlink = signatureCard.getInfobox("IdentityLink", pinProvider, null); + + assertNull(idlink); + + } + +} diff --git a/smcc/src/test/java/at/gv/egiz/smcc/test/AbstractNotActivatedCardTest.java b/smcc/src/test/java/at/gv/egiz/smcc/test/AbstractNotActivatedCardTest.java new file mode 100644 index 00000000..9736531f --- /dev/null +++ b/smcc/src/test/java/at/gv/egiz/smcc/test/AbstractNotActivatedCardTest.java @@ -0,0 +1,69 @@ +/* +* Copyright 2009 Federal Chancellery Austria and +* Graz University of Technology +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +*/ + +package at.gv.egiz.smcc.test; + +import static org.junit.Assert.fail; + +import org.junit.Test; + +import at.gv.egiz.smcc.NotActivatedException; +import at.gv.egiz.smcc.PINMgmtSignatureCard; +import at.gv.egiz.smcc.SignatureCardException; +import at.gv.egiz.smcc.SignatureCard.KeyboxName; + +public abstract class AbstractNotActivatedCardTest extends AbstractCardTestBase { + + @Test(expected = NotActivatedException.class) + public void testGetInfoboxIdentityLink() throws SignatureCardException, InterruptedException { + + signatureCard.getInfobox("IdentityLink", null, null); + + } + + @Test + public void testGetCertificates() throws SignatureCardException, InterruptedException { + + try { + signatureCard.getCertificate(KeyboxName.SECURE_SIGNATURE_KEYPAIR); + fail(); + } catch (NotActivatedException e) { + // expected + } catch (Exception e) { + fail(); + } + + try { + signatureCard.getCertificate(KeyboxName.CERITIFIED_KEYPAIR); + fail(); + } catch (NotActivatedException e) { + // expected + } catch (Exception e) { + fail(); + } + + } + + @Test (expected = NotActivatedException.class) + public void getPINInfos() throws SignatureCardException { + + PINMgmtSignatureCard signatureCard = (PINMgmtSignatureCard) this.signatureCard; + signatureCard.getPinInfos(); + + } + +} diff --git a/smcc/src/test/java/at/gv/egiz/smcc/test/acos/ACOSA03Test.java b/smcc/src/test/java/at/gv/egiz/smcc/test/acos/ACOSA03Test.java new file mode 100644 index 00000000..ccb46b4b --- /dev/null +++ b/smcc/src/test/java/at/gv/egiz/smcc/test/acos/ACOSA03Test.java @@ -0,0 +1,87 @@ +/* + * Copyright 2009 Federal Chancellery Austria and + * Graz University of Technology + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package at.gv.egiz.smcc.test.acos; + +import static org.junit.Assert.assertArrayEquals; + +import java.util.Arrays; + +import org.junit.Test; + +import at.gv.egiz.smcc.CancelledException; +import at.gv.egiz.smcc.CardNotSupportedException; +import at.gv.egiz.smcc.LockedException; +import at.gv.egiz.smcc.NotActivatedException; +import at.gv.egiz.smcc.PIN; +import at.gv.egiz.smcc.PINFormatException; +import at.gv.egiz.smcc.PINMgmtSignatureCard; +import at.gv.egiz.smcc.PinInfo; +import at.gv.egiz.smcc.SignatureCardException; +import at.gv.egiz.smcc.pin.gui.ChangePINProvider; +import at.gv.egiz.smcc.pin.gui.PINGUI; +import at.gv.egiz.smcc.pin.gui.SMCCTestPINProvider; + + +public class ACOSA03Test extends ACOSTest { + + @Test + public void testChangePins() throws CardNotSupportedException, + LockedException, NotActivatedException, CancelledException, + PINFormatException, SignatureCardException, InterruptedException { + + byte[] referenceData = { (byte) 0x31, (byte) 0x32, (byte) 0x33, + (byte) 0x34, (byte) 0x35, (byte) 0x36, (byte) 0x00, (byte) 0x00 }; + + PINMgmtSignatureCard signatureCard = (PINMgmtSignatureCard) this.signatureCard; + PIN signaturPIN = (PIN) applicationContext.getBean("signaturPIN"); + signaturPIN.setPin(referenceData); + PIN infoboxPIN = (PIN) applicationContext.getBean("infoboxPIN"); + infoboxPIN.setPin(referenceData); + PIN geheimhaltungsPIN = (PIN) applicationContext.getBean("geheimhaltungsPIN"); + geheimhaltungsPIN.setPin(referenceData); + + for (PinInfo pinInfo : signatureCard.getPinInfos()) { + + char[] pin = "123456".toCharArray(); + + for (int i = pinInfo.getMinLength(); i <= pinInfo.getMaxLength(); i++) { + signatureCard.verifyPIN(pinInfo, new SMCCTestPINProvider(pin)); + char[] newPin = new char[i]; + Arrays.fill(newPin, '0'); + signatureCard + .changePIN(pinInfo, new ChangePINProvider(pin, newPin)); + signatureCard.verifyPIN(pinInfo, new SMCCTestPINProvider(newPin)); + pin = newPin; + } + } + } + + @Test + public void testGetInfoboxIdentityLink() throws SignatureCardException, InterruptedException { + + PINGUI pinProvider = new SMCCTestPINProvider("0000".toCharArray()); + + byte[] idlinkRef = (byte[]) applicationContext.getBean("identityLink", byte[].class); + + byte[] idlink = signatureCard.getInfobox("IdentityLink", pinProvider, null); + + assertArrayEquals(idlinkRef, idlink); + + } + +} diff --git a/smcc/src/test/java/at/gv/egiz/smcc/test/acos/ACOSA04InfoboxContainerEncryptedTest.java b/smcc/src/test/java/at/gv/egiz/smcc/test/acos/ACOSA04InfoboxContainerEncryptedTest.java new file mode 100644 index 00000000..d22c45a0 --- /dev/null +++ b/smcc/src/test/java/at/gv/egiz/smcc/test/acos/ACOSA04InfoboxContainerEncryptedTest.java @@ -0,0 +1,44 @@ +/* +* Copyright 2009 Federal Chancellery Austria and +* Graz University of Technology +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +*/ + +package at.gv.egiz.smcc.test.acos; + +import static org.junit.Assert.assertArrayEquals; + +import org.junit.Test; + +import at.gv.egiz.smcc.SignatureCardException; +import at.gv.egiz.smcc.pin.gui.PINGUI; +import at.gv.egiz.smcc.pin.gui.SMCCTestPINProvider; +import at.gv.egiz.smcc.test.AbstractCardTestBase; + +public class ACOSA04InfoboxContainerEncryptedTest extends AbstractCardTestBase { + + @Test + public void testGetInfoboxIdentityLink() throws SignatureCardException, InterruptedException { + + PINGUI pinProvider = new SMCCTestPINProvider("1234".toCharArray()); + + byte[] idlinkRef = (byte[]) applicationContext.getBean("identityLink", byte[].class); + + byte[] idlink = signatureCard.getInfobox("IdentityLink", pinProvider, null); + + assertArrayEquals(idlinkRef, idlink); + + } + +} diff --git a/smcc/src/test/java/at/gv/egiz/smcc/test/acos/ACOSA04InvalidTest.java b/smcc/src/test/java/at/gv/egiz/smcc/test/acos/ACOSA04InvalidTest.java new file mode 100644 index 00000000..9696cb7d --- /dev/null +++ b/smcc/src/test/java/at/gv/egiz/smcc/test/acos/ACOSA04InvalidTest.java @@ -0,0 +1,24 @@ +/* +* Copyright 2009 Federal Chancellery Austria and +* Graz University of Technology +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +*/ + +package at.gv.egiz.smcc.test.acos; + +import at.gv.egiz.smcc.test.AbstractInvalidCardTest; + +public class ACOSA04InvalidTest extends AbstractInvalidCardTest { + +} diff --git a/smcc/src/test/java/at/gv/egiz/smcc/test/acos/ACOSA04NotActivatedTest.java b/smcc/src/test/java/at/gv/egiz/smcc/test/acos/ACOSA04NotActivatedTest.java new file mode 100644 index 00000000..56ce476c --- /dev/null +++ b/smcc/src/test/java/at/gv/egiz/smcc/test/acos/ACOSA04NotActivatedTest.java @@ -0,0 +1,24 @@ +/* + * Copyright 2009 Federal Chancellery Austria and + * Graz University of Technology + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package at.gv.egiz.smcc.test.acos; + +import at.gv.egiz.smcc.test.AbstractNotActivatedCardTest; + +public class ACOSA04NotActivatedTest extends AbstractNotActivatedCardTest { + +} diff --git a/smcc/src/test/java/at/gv/egiz/smcc/test/acos/ACOSA04Test.java b/smcc/src/test/java/at/gv/egiz/smcc/test/acos/ACOSA04Test.java new file mode 100644 index 00000000..a5645da6 --- /dev/null +++ b/smcc/src/test/java/at/gv/egiz/smcc/test/acos/ACOSA04Test.java @@ -0,0 +1,85 @@ +/* + * Copyright 2009 Federal Chancellery Austria and + * Graz University of Technology + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package at.gv.egiz.smcc.test.acos; + +import static org.junit.Assert.assertArrayEquals; + +import java.util.Arrays; + +import org.junit.Test; + +import at.gv.egiz.smcc.CancelledException; +import at.gv.egiz.smcc.CardNotSupportedException; +import at.gv.egiz.smcc.LockedException; +import at.gv.egiz.smcc.NotActivatedException; +import at.gv.egiz.smcc.PIN; +import at.gv.egiz.smcc.PINFormatException; +import at.gv.egiz.smcc.PINMgmtSignatureCard; +import at.gv.egiz.smcc.PinInfo; +import at.gv.egiz.smcc.SignatureCardException; +import at.gv.egiz.smcc.pin.gui.ChangePINProvider; +import at.gv.egiz.smcc.pin.gui.PINGUI; +import at.gv.egiz.smcc.pin.gui.SMCCTestPINProvider; + + +public class ACOSA04Test extends ACOSTest { + + @Test + public void testChangePins() throws CardNotSupportedException, + LockedException, NotActivatedException, CancelledException, + PINFormatException, SignatureCardException, InterruptedException { + + byte[] referenceData = { (byte) 0x31, (byte) 0x32, (byte) 0x33, + (byte) 0x34, (byte) 0x35, (byte) 0x36, (byte) 0x00, (byte) 0x00 }; + + PINMgmtSignatureCard signatureCard = (PINMgmtSignatureCard) this.signatureCard; + PIN signaturPIN = (PIN) applicationContext.getBean("signaturPIN"); + signaturPIN.setPin(referenceData); + PIN infoboxPIN = (PIN) applicationContext.getBean("geheimhaltungsPIN"); + infoboxPIN.setPin(referenceData); + + for (PinInfo pinInfo : signatureCard.getPinInfos()) { + + char[] pin = "123456".toCharArray(); + + for (int i = pinInfo.getMinLength(); i <= pinInfo.getMaxLength(); i++) { + signatureCard.verifyPIN(pinInfo, new SMCCTestPINProvider(pin)); + char[] newPin = new char[i]; + Arrays.fill(newPin, '0'); + signatureCard + .changePIN(pinInfo, new ChangePINProvider(pin, newPin)); + signatureCard.verifyPIN(pinInfo, new SMCCTestPINProvider(newPin)); + pin = newPin; + } + } + } + + @Test + public void testGetInfoboxIdentityLink() throws SignatureCardException, InterruptedException { + + PINGUI pinProvider = new SMCCTestPINProvider("0000".toCharArray()); + + byte[] idlinkRef = (byte[]) applicationContext.getBean("identityLink", byte[].class); + + byte[] idlink = signatureCard.getInfobox("IdentityLink", pinProvider, null); + + assertArrayEquals(idlinkRef, idlink); + + } + +} diff --git a/smcc/src/test/java/at/gv/egiz/smcc/test/acos/ACOSTest.java b/smcc/src/test/java/at/gv/egiz/smcc/test/acos/ACOSTest.java new file mode 100644 index 00000000..d8d07393 --- /dev/null +++ b/smcc/src/test/java/at/gv/egiz/smcc/test/acos/ACOSTest.java @@ -0,0 +1,30 @@ +/* +* Copyright 2009 Federal Chancellery Austria and +* Graz University of Technology +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +*/ + +package at.gv.egiz.smcc.test.acos; + +import org.junit.Test; + +import at.gv.egiz.smcc.SignatureCardException; +import at.gv.egiz.smcc.test.AbstractCardTest; + +public abstract class ACOSTest extends AbstractCardTest { + + @Test + public abstract void testGetInfoboxIdentityLink() throws SignatureCardException, InterruptedException; + +} diff --git a/smcc/src/test/java/at/gv/egiz/smcc/test/ecard/ECardG2Test.java b/smcc/src/test/java/at/gv/egiz/smcc/test/ecard/ECardG2Test.java new file mode 100644 index 00000000..904c8c06 --- /dev/null +++ b/smcc/src/test/java/at/gv/egiz/smcc/test/ecard/ECardG2Test.java @@ -0,0 +1,85 @@ +/* + * Copyright 2009 Federal Chancellery Austria and + * Graz University of Technology + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package at.gv.egiz.smcc.test.ecard; + +import static org.junit.Assert.assertArrayEquals; + +import java.util.Arrays; + +import org.junit.Test; + +import at.gv.egiz.smcc.CancelledException; +import at.gv.egiz.smcc.CardNotSupportedException; +import at.gv.egiz.smcc.LockedException; +import at.gv.egiz.smcc.NotActivatedException; +import at.gv.egiz.smcc.PIN; +import at.gv.egiz.smcc.PINFormatException; +import at.gv.egiz.smcc.PINMgmtSignatureCard; +import at.gv.egiz.smcc.PinInfo; +import at.gv.egiz.smcc.SignatureCardException; +import at.gv.egiz.smcc.pin.gui.ChangePINProvider; +import at.gv.egiz.smcc.pin.gui.PINGUI; +import at.gv.egiz.smcc.pin.gui.SMCCTestPINProvider; + + +public class ECardG2Test extends ECardTest { + + @Test + public void testChangeCardPin() throws CardNotSupportedException, + LockedException, NotActivatedException, CancelledException, + PINFormatException, SignatureCardException, InterruptedException { + + byte[] referenceData = { (byte) 0x26, (byte) 0x12, (byte) 0x34, + (byte) 0x56, (byte) 0xff, (byte) 0xff, (byte) 0xff, (byte) 0xff }; + + PINMgmtSignatureCard signatureCard = (PINMgmtSignatureCard) this.signatureCard; + PIN signaturPIN = (PIN) applicationContext.getBean("signaturPIN"); + signaturPIN.setPin(referenceData); + PIN kartenPIN = (PIN) applicationContext.getBean("kartenPIN"); + kartenPIN.setPin(referenceData); + + for (PinInfo pinInfo : signatureCard.getPinInfos()) { + + char[] pin = "123456".toCharArray(); + + for (int i = pinInfo.getMinLength(); i <= pinInfo.getMaxLength(); i++) { + signatureCard.verifyPIN(pinInfo, new SMCCTestPINProvider(pin)); + char[] newPin = new char[i]; + Arrays.fill(newPin, '0'); + signatureCard + .changePIN(pinInfo, new ChangePINProvider(pin, newPin)); + signatureCard.verifyPIN(pinInfo, new SMCCTestPINProvider(newPin)); + pin = newPin; + } + } + } + + @Test + public void testGetInfoboxIdentityLink() throws SignatureCardException, InterruptedException { + + PINGUI pinProvider = new SMCCTestPINProvider("1234".toCharArray()); + + byte[] idlinkRef = (byte[]) applicationContext.getBean("identityLink", byte[].class); + + byte[] idlink = signatureCard.getInfobox("IdentityLink", pinProvider, null); + + assertArrayEquals(idlinkRef, idlink); + + } + +} diff --git a/smcc/src/test/java/at/gv/egiz/smcc/test/ecard/ECardG3ActivateTest.java b/smcc/src/test/java/at/gv/egiz/smcc/test/ecard/ECardG3ActivateTest.java new file mode 100644 index 00000000..6270e3b8 --- /dev/null +++ b/smcc/src/test/java/at/gv/egiz/smcc/test/ecard/ECardG3ActivateTest.java @@ -0,0 +1,64 @@ +/* +* Copyright 2009 Federal Chancellery Austria and +* Graz University of Technology +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +*/ + +package at.gv.egiz.smcc.test.ecard; + +import static org.junit.Assert.assertTrue; + +import org.junit.Test; + +import at.gv.egiz.smcc.CancelledException; +import at.gv.egiz.smcc.CardNotSupportedException; +import at.gv.egiz.smcc.LockedException; +import at.gv.egiz.smcc.NotActivatedException; +import at.gv.egiz.smcc.PINFormatException; +import at.gv.egiz.smcc.PINMgmtSignatureCard; +import at.gv.egiz.smcc.PinInfo; +import at.gv.egiz.smcc.SignatureCardException; +import at.gv.egiz.smcc.pin.gui.ChangePINProvider; +import at.gv.egiz.smcc.pin.gui.SMCCTestPINProvider; +import at.gv.egiz.smcc.test.AbstractCardTestBase; + +public class ECardG3ActivateTest extends AbstractCardTestBase { + + @Test + public void testActivatePin() throws CardNotSupportedException, + LockedException, NotActivatedException, CancelledException, + PINFormatException, SignatureCardException, InterruptedException { + + PINMgmtSignatureCard signatureCard = (PINMgmtSignatureCard) this.signatureCard; + + for (PinInfo pinInfo : signatureCard.getPinInfos()) { + + char[] pin = "123456789".substring(0, pinInfo.getMinLength()).toCharArray(); + char[] transportPIN = "123456".toCharArray(); + + boolean notActive = false; + try { + signatureCard.verifyPIN(pinInfo, new SMCCTestPINProvider(pin)); + } catch (NotActivatedException ex) { + notActive = true; + } + assertTrue(notActive); + + signatureCard.activatePIN(pinInfo, new ChangePINProvider(transportPIN, pin)); + signatureCard.verifyPIN(pinInfo, new SMCCTestPINProvider(pin)); + } + } + + +} diff --git a/smcc/src/test/java/at/gv/egiz/smcc/test/ecard/ECardG3InfoboxContainerEncryptedTest.java b/smcc/src/test/java/at/gv/egiz/smcc/test/ecard/ECardG3InfoboxContainerEncryptedTest.java new file mode 100644 index 00000000..2f240729 --- /dev/null +++ b/smcc/src/test/java/at/gv/egiz/smcc/test/ecard/ECardG3InfoboxContainerEncryptedTest.java @@ -0,0 +1,44 @@ +/* +* Copyright 2009 Federal Chancellery Austria and +* Graz University of Technology +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +*/ + +package at.gv.egiz.smcc.test.ecard; + +import static org.junit.Assert.assertArrayEquals; + +import org.junit.Test; + +import at.gv.egiz.smcc.SignatureCardException; +import at.gv.egiz.smcc.pin.gui.PINGUI; +import at.gv.egiz.smcc.pin.gui.SMCCTestPINProvider; +import at.gv.egiz.smcc.test.AbstractCardTestBase; + +public class ECardG3InfoboxContainerEncryptedTest extends AbstractCardTestBase { + + @Test + public void testGetInfoboxIdentityLink() throws SignatureCardException, InterruptedException { + + PINGUI pinProvider = new SMCCTestPINProvider("1234".toCharArray()); + + byte[] idlinkRef = (byte[]) applicationContext.getBean("identityLink", byte[].class); + + byte[] idlink = signatureCard.getInfobox("IdentityLink", pinProvider, null); + + assertArrayEquals(idlinkRef, idlink); + + } + +} diff --git a/smcc/src/test/java/at/gv/egiz/smcc/test/ecard/ECardG3InfoboxContainerTest.java b/smcc/src/test/java/at/gv/egiz/smcc/test/ecard/ECardG3InfoboxContainerTest.java new file mode 100644 index 00000000..112556a6 --- /dev/null +++ b/smcc/src/test/java/at/gv/egiz/smcc/test/ecard/ECardG3InfoboxContainerTest.java @@ -0,0 +1,55 @@ +/* +* Copyright 2009 Federal Chancellery Austria and +* Graz University of Technology +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +*/ + +package at.gv.egiz.smcc.test.ecard; + +import static org.junit.Assert.*; + +import org.junit.Test; + +import at.gv.egiz.smcc.CancelledException; +import at.gv.egiz.smcc.PinInfo; +import at.gv.egiz.smcc.SignatureCardException; +import at.gv.egiz.smcc.pin.gui.DummyPINGUI; +import at.gv.egiz.smcc.pin.gui.PINGUI; +import at.gv.egiz.smcc.test.AbstractCardTestBase; + +public class ECardG3InfoboxContainerTest extends AbstractCardTestBase { + + @Test + public void testGetInfoboxIdentityLink() throws SignatureCardException, InterruptedException { + + PINGUI pinProvider = new DummyPINGUI() { + @Override + public char[] providePIN(PinInfo pinSpec, int retries) + throws CancelledException, InterruptedException { + // must not require a PIN! + fail(); + return null; + } + }; + + byte[] idlinkRef = (byte[]) applicationContext.getBean("identityLink", byte[].class); + + byte[] idlink = signatureCard.getInfobox("IdentityLink", pinProvider, null); + + assertArrayEquals(idlinkRef, idlink); + + } + + +} diff --git a/smcc/src/test/java/at/gv/egiz/smcc/test/ecard/ECardG3InvalidTest.java b/smcc/src/test/java/at/gv/egiz/smcc/test/ecard/ECardG3InvalidTest.java new file mode 100644 index 00000000..f5a78448 --- /dev/null +++ b/smcc/src/test/java/at/gv/egiz/smcc/test/ecard/ECardG3InvalidTest.java @@ -0,0 +1,24 @@ +/* +* Copyright 2009 Federal Chancellery Austria and +* Graz University of Technology +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +*/ + +package at.gv.egiz.smcc.test.ecard; + +import at.gv.egiz.smcc.test.AbstractInvalidCardTest; + +public class ECardG3InvalidTest extends AbstractInvalidCardTest { + +} diff --git a/smcc/src/test/java/at/gv/egiz/smcc/test/ecard/ECardG3NotActivatedTest.java b/smcc/src/test/java/at/gv/egiz/smcc/test/ecard/ECardG3NotActivatedTest.java new file mode 100644 index 00000000..5dfcfb21 --- /dev/null +++ b/smcc/src/test/java/at/gv/egiz/smcc/test/ecard/ECardG3NotActivatedTest.java @@ -0,0 +1,38 @@ +/* + * Copyright 2009 Federal Chancellery Austria and + * Graz University of Technology + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package at.gv.egiz.smcc.test.ecard; + +import org.junit.Test; + +import at.gv.egiz.smcc.NotActivatedException; +import at.gv.egiz.smcc.PINMgmtSignatureCard; +import at.gv.egiz.smcc.SignatureCardException; +import at.gv.egiz.smcc.test.AbstractNotActivatedCardTest; + +public class ECardG3NotActivatedTest extends AbstractNotActivatedCardTest { + + @Test(expected = NotActivatedException.class) + public void getPINInfos() throws SignatureCardException { + + PINMgmtSignatureCard signatureCard = (PINMgmtSignatureCard) this.signatureCard; + signatureCard.getPinInfos(); + + } + + +} diff --git a/smcc/src/test/java/at/gv/egiz/smcc/test/ecard/ECardG3Test.java b/smcc/src/test/java/at/gv/egiz/smcc/test/ecard/ECardG3Test.java new file mode 100644 index 00000000..d8528b62 --- /dev/null +++ b/smcc/src/test/java/at/gv/egiz/smcc/test/ecard/ECardG3Test.java @@ -0,0 +1,132 @@ +/* + * Copyright 2009 Federal Chancellery Austria and + * Graz University of Technology + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package at.gv.egiz.smcc.test.ecard; + +import static org.junit.Assert.assertArrayEquals; +import static org.junit.Assert.assertTrue; + +import java.util.Arrays; + +import org.junit.Test; + +import at.gv.egiz.smcc.CancelledException; +import at.gv.egiz.smcc.CardNotSupportedException; +import at.gv.egiz.smcc.LockedException; +import at.gv.egiz.smcc.NotActivatedException; +import at.gv.egiz.smcc.PIN; +import at.gv.egiz.smcc.PINFormatException; +import at.gv.egiz.smcc.PINMgmtSignatureCard; +import at.gv.egiz.smcc.PinInfo; +import at.gv.egiz.smcc.SignatureCardException; +import at.gv.egiz.smcc.pin.gui.ChangePINProvider; +import at.gv.egiz.smcc.pin.gui.InvalidChangePINProvider; +import at.gv.egiz.smcc.pin.gui.InvalidPINProvider; +import at.gv.egiz.smcc.pin.gui.PINGUI; +import at.gv.egiz.smcc.pin.gui.SMCCTestPINProvider; + + +public class ECardG3Test extends ECardTest { + + @Test + public void testGetInfoboxIdentityLink() throws SignatureCardException, InterruptedException { + + PINGUI pinProvider = new SMCCTestPINProvider("1234".toCharArray()); + + byte[] idlinkRef = (byte[]) applicationContext.getBean("identityLink", byte[].class); + + byte[] idlink = signatureCard.getInfobox("IdentityLink", pinProvider, null); + + assertArrayEquals(idlinkRef, idlink); + + } + + @Test + public void testChangePin() throws CardNotSupportedException, + LockedException, NotActivatedException, CancelledException, + PINFormatException, SignatureCardException, InterruptedException { + + byte[] referenceData = { (byte) 0x26, (byte) 0x12, (byte) 0x34, + (byte) 0x56, (byte) 0xff, (byte) 0xff, (byte) 0xff, (byte) 0xff }; + PINMgmtSignatureCard signatureCard = (PINMgmtSignatureCard) this.signatureCard; + PIN signaturPIN = (PIN) applicationContext.getBean("signaturPIN"); + signaturPIN.setPin(referenceData); + PIN kartenPIN = (PIN) applicationContext.getBean("kartenPIN"); + kartenPIN.setPin(referenceData); + + for (PinInfo pinInfo : signatureCard.getPinInfos()) { + + char[] pin = "123456".toCharArray(); + + for (int i = pinInfo.getMinLength(); i <= pinInfo.getMaxLength(); i++) { + signatureCard.verifyPIN(pinInfo, new SMCCTestPINProvider(pin)); + char[] newPin = new char[i]; + Arrays.fill(newPin, '0'); + signatureCard + .changePIN(pinInfo, new ChangePINProvider(pin, newPin)); + signatureCard.verifyPIN(pinInfo, new SMCCTestPINProvider(newPin)); + pin = newPin; + } + } + } + + @Test + public void testVerifyInvalidPin() throws CardNotSupportedException, + LockedException, NotActivatedException, CancelledException, + PINFormatException, SignatureCardException, InterruptedException { + + PINMgmtSignatureCard signatureCard = (PINMgmtSignatureCard) this.signatureCard; + + for (PinInfo pinInfo : signatureCard.getPinInfos()) { + + char[] invalidPin = "999999".toCharArray(); + int numInvalidTries = 2; + InvalidPINProvider invalidPinProvider = new InvalidPINProvider(invalidPin, numInvalidTries); + try { + signatureCard.verifyPIN(pinInfo, invalidPinProvider); + } catch (CancelledException ex) { + } finally { + assertTrue(invalidPinProvider.getProvided() == numInvalidTries); + } + } + } + + @Test + public void testChangeInvalidPin() throws CardNotSupportedException, + LockedException, NotActivatedException, CancelledException, + PINFormatException, SignatureCardException, InterruptedException { + + PINMgmtSignatureCard signatureCard = (PINMgmtSignatureCard) this.signatureCard; + + for (PinInfo pinInfo : signatureCard.getPinInfos()) { + + char[] invalidPin = "999999".toCharArray(); + int numInvalidTries = 2; + InvalidChangePINProvider invalidPinProvider = + new InvalidChangePINProvider(invalidPin, invalidPin, numInvalidTries); + + try { + signatureCard.changePIN(pinInfo, invalidPinProvider); + } catch (CancelledException ex) { + } finally { + assertTrue(invalidPinProvider.getProvided() == numInvalidTries); + } + } + } + + +} diff --git a/smcc/src/test/java/at/gv/egiz/smcc/test/ecard/ECardTest.java b/smcc/src/test/java/at/gv/egiz/smcc/test/ecard/ECardTest.java new file mode 100644 index 00000000..e95a1615 --- /dev/null +++ b/smcc/src/test/java/at/gv/egiz/smcc/test/ecard/ECardTest.java @@ -0,0 +1,54 @@ +/* +* Copyright 2009 Federal Chancellery Austria and +* Graz University of Technology +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +*/ + +package at.gv.egiz.smcc.test.ecard; + +import static org.junit.Assert.assertTrue; + +import java.io.UnsupportedEncodingException; +import java.security.NoSuchAlgorithmException; + +import org.junit.Test; + +import at.gv.egiz.smcc.CardNotSupportedException; +import at.gv.egiz.smcc.PINMgmtSignatureCard; +import at.gv.egiz.smcc.PinInfo; +import at.gv.egiz.smcc.SignatureCardException; +import at.gv.egiz.smcc.pin.gui.CancelChangePINProvider; +import at.gv.egiz.smcc.pin.gui.ModifyPINGUI; +import at.gv.egiz.smcc.test.AbstractCardTest; + +public abstract class ECardTest extends AbstractCardTest { + + @Test + public abstract void testGetInfoboxIdentityLink() throws SignatureCardException, InterruptedException; + + @Test(expected = SignatureCardException.class) + public void testActivatePin() throws SignatureCardException, + InterruptedException, CardNotSupportedException, + NoSuchAlgorithmException, UnsupportedEncodingException { + + assertTrue(signatureCard instanceof PINMgmtSignatureCard); + + ModifyPINGUI pinProvider = new CancelChangePINProvider(); + + PinInfo[] specs = ((PINMgmtSignatureCard) signatureCard).getPinInfos(); + + ((PINMgmtSignatureCard) signatureCard).activatePIN(specs[0], pinProvider); + } + +} diff --git a/smcc/src/test/java/at/gv/egiz/smcc/test/spring/ByteArrayFactoryBean.java b/smcc/src/test/java/at/gv/egiz/smcc/test/spring/ByteArrayFactoryBean.java new file mode 100644 index 00000000..91cb7cfb --- /dev/null +++ b/smcc/src/test/java/at/gv/egiz/smcc/test/spring/ByteArrayFactoryBean.java @@ -0,0 +1,48 @@ +/* +* Copyright 2009 Federal Chancellery Austria and +* Graz University of Technology +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +*/ + +package at.gv.egiz.smcc.test.spring; + +import org.springframework.beans.factory.FactoryBean; + +public class ByteArrayFactoryBean implements FactoryBean { + + private byte[] bytes; + + /** + * @param bytes the bytes to set + */ + public void setBytes(byte[] bytes) { + this.bytes = bytes; + } + + @Override + public Object getObject() throws Exception { + return bytes; + } + + @Override + public Class getObjectType() { + return byte[].class; + } + + @Override + public boolean isSingleton() { + return false; + } + +} diff --git a/smcc/src/test/java/at/gv/egiz/smcc/test/spring/ByteArrayPropertyDependable.java b/smcc/src/test/java/at/gv/egiz/smcc/test/spring/ByteArrayPropertyDependable.java new file mode 100644 index 00000000..dcae3391 --- /dev/null +++ b/smcc/src/test/java/at/gv/egiz/smcc/test/spring/ByteArrayPropertyDependable.java @@ -0,0 +1,38 @@ +/* +* Copyright 2009 Federal Chancellery Austria and +* Graz University of Technology +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +*/ + +package at.gv.egiz.smcc.test.spring; + +public class ByteArrayPropertyDependable { + + private byte[] bytes; + + /** + * @return the bytes + */ + public byte[] getBytes() { + return bytes; + } + + /** + * @param bytes the bytes to set + */ + public void setBytes(byte[] bytes) { + this.bytes = bytes; + } + +} diff --git a/smcc/src/test/java/at/gv/egiz/smcc/test/spring/ByteArrayPropertyEditor.java b/smcc/src/test/java/at/gv/egiz/smcc/test/spring/ByteArrayPropertyEditor.java new file mode 100644 index 00000000..78dd3f88 --- /dev/null +++ b/smcc/src/test/java/at/gv/egiz/smcc/test/spring/ByteArrayPropertyEditor.java @@ -0,0 +1,49 @@ +/* +* Copyright 2009 Federal Chancellery Austria and +* Graz University of Technology +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +*/ + +package at.gv.egiz.smcc.test.spring; + +import java.beans.PropertyEditorSupport; +import java.io.ByteArrayOutputStream; + +public class ByteArrayPropertyEditor extends PropertyEditorSupport { + + @Override + public void setAsText(String text) throws IllegalArgumentException { + + ByteArrayOutputStream os = new ByteArrayOutputStream(); + + int hi = 0, n = 0; + for (int i = 0; i < text.length(); i++) { + int digit = Character.digit(text.charAt(i), 16); + if (digit != -1) { + if (n++ % 2 == 0) { + hi = digit << 4; + } else { + os.write(hi + digit); + } + } + } + + if (n % 2 != 0) { + throw new IllegalArgumentException(); + } + + setValue(os.toByteArray()); + } + +} diff --git a/smcc/src/test/java/at/gv/egiz/smcc/test/spring/ByteArrayPropertyEditorRegistrar.java b/smcc/src/test/java/at/gv/egiz/smcc/test/spring/ByteArrayPropertyEditorRegistrar.java new file mode 100644 index 00000000..7a2bb30c --- /dev/null +++ b/smcc/src/test/java/at/gv/egiz/smcc/test/spring/ByteArrayPropertyEditorRegistrar.java @@ -0,0 +1,32 @@ +/* +* Copyright 2009 Federal Chancellery Austria and +* Graz University of Technology +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +*/ + +package at.gv.egiz.smcc.test.spring; + +import org.springframework.beans.PropertyEditorRegistrar; +import org.springframework.beans.PropertyEditorRegistry; + + +public class ByteArrayPropertyEditorRegistrar implements + PropertyEditorRegistrar { + + @Override + public void registerCustomEditors(PropertyEditorRegistry registry) { + registry.registerCustomEditor(byte[].class, new ByteArrayPropertyEditor()); + } + +} diff --git a/smcc/src/test/java/at/gv/egiz/smcc/test/spring/ByteArrayPropertyEditorTest.java b/smcc/src/test/java/at/gv/egiz/smcc/test/spring/ByteArrayPropertyEditorTest.java new file mode 100644 index 00000000..6c10c705 --- /dev/null +++ b/smcc/src/test/java/at/gv/egiz/smcc/test/spring/ByteArrayPropertyEditorTest.java @@ -0,0 +1,53 @@ +/* +* Copyright 2009 Federal Chancellery Austria and +* Graz University of Technology +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +*/ + +package at.gv.egiz.smcc.test.spring; + +import static org.junit.Assert.*; + +import org.junit.Test; +import org.springframework.context.support.ClassPathXmlApplicationContext; + + +public class ByteArrayPropertyEditorTest { + + public byte[] bytes = { (byte) 0x00, (byte) 0x01, (byte) 0x02, (byte) 0x03, + (byte) 0x04, (byte) 0x05, (byte) 0x06, (byte) 0x07, (byte) 0x08, + (byte) 0x09, (byte) 0x0a, (byte) 0x0b, (byte) 0x0c, (byte) 0x0d, + (byte) 0x0e, (byte) 0x0f, (byte) 0xf0, (byte) 0xe0, (byte) 0xd0, + (byte) 0xc0, (byte) 0xb0, (byte) 0xa0, (byte) 0x90, (byte) 0x80, + (byte) 0x70, (byte) 0x60, (byte) 0x50, (byte) 0x40, (byte) 0x30, + (byte) 0x20, (byte) 0x10, (byte) 0x00 }; + + @Test + public void testByteArrayPropertyEditor() { + + ClassPathXmlApplicationContext applicationContext = new ClassPathXmlApplicationContext( + "at/gv/egiz/smcc/spring/PropertyEditorTest.xml"); + + ByteArrayPropertyDependable testBean = (ByteArrayPropertyDependable) applicationContext + .getBean("testBean", ByteArrayPropertyDependable.class); + assertNotNull(testBean); + + assertArrayEquals(bytes, testBean.getBytes()); + + System.out.println("" + byte[].class); + + } + + +} diff --git a/smcc/src/test/java/at/gv/egiz/smcc/test/spring/CertificateFileFactoryBean.java b/smcc/src/test/java/at/gv/egiz/smcc/test/spring/CertificateFileFactoryBean.java new file mode 100644 index 00000000..8bfd5bd4 --- /dev/null +++ b/smcc/src/test/java/at/gv/egiz/smcc/test/spring/CertificateFileFactoryBean.java @@ -0,0 +1,118 @@ +/* +* Copyright 2009 Federal Chancellery Austria and +* Graz University of Technology +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +*/ + +package at.gv.egiz.smcc.test.spring; + +import org.springframework.beans.factory.FactoryBean; + +import at.gv.egiz.smcc.File; + +public class CertificateFileFactoryBean implements FactoryBean { + + private byte[] fid; + + private byte[] fcx; + + private byte[] certificate; + + private int fileSize; + + /** + * @return the certificate + */ + public byte[] getCertificate() { + return certificate; + } + + /** + * @param certificate the certificate to set + */ + public void setCertificate(byte[] certificate) { + this.certificate = certificate; + } + + /** + * @return the fid + */ + public byte[] getFid() { + return fid; + } + + /** + * @param fid the fid to set + */ + public void setFid(byte[] fid) { + this.fid = fid; + } + + /** + * @return the fcx + */ + public byte[] getFcx() { + return fcx; + } + + /** + * @param fcx the fcx to set + */ + public void setFcx(byte[] fcx) { + this.fcx = fcx; + } + + /** + * @return the fileSize + */ + public int getFileSize() { + return fileSize; + } + + /** + * @param fileSize the fileSize to set + */ + public void setFileSize(int fileSize) { + this.fileSize = fileSize; + } + + @Override + public Object getObject() throws Exception { + + byte[] file = new byte[fileSize]; + + if (certificate != null) { + System.arraycopy(certificate, 0, file, 0, Math.min(certificate.length, file.length)); + } + + File f = new File(); + f.setFile(file); + f.setFid(fid); + f.setFcx(fcx); + + return f; + + } + + @Override + public Class getObjectType() { + return File.class; + } + + @Override + public boolean isSingleton() { + return false; + } + +} diff --git a/smcc/src/test/java/at/gv/egiz/smcc/test/spring/InfoboxContainerFileFactoryBean.java b/smcc/src/test/java/at/gv/egiz/smcc/test/spring/InfoboxContainerFileFactoryBean.java new file mode 100644 index 00000000..6dbccc2a --- /dev/null +++ b/smcc/src/test/java/at/gv/egiz/smcc/test/spring/InfoboxContainerFileFactoryBean.java @@ -0,0 +1,236 @@ +/* +* Copyright 2009 Federal Chancellery Austria and +* Graz University of Technology +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +*/ + +package at.gv.egiz.smcc.test.spring; + +import java.nio.charset.Charset; +import java.security.GeneralSecurityException; +import java.security.PublicKey; +import java.util.Arrays; + +import javax.crypto.Cipher; +import javax.crypto.KeyGenerator; +import javax.crypto.SecretKey; +import javax.crypto.spec.IvParameterSpec; + +import org.springframework.beans.factory.FactoryBean; + +import at.gv.egiz.smcc.File; + +public class InfoboxContainerFileFactoryBean implements FactoryBean { + + private byte[] fid; + + private byte[] fcx; + + private int kid = -1; + + private PublicKey publicKey; + + private boolean container; + + private byte[] identityLink; + + private int fileSize; + + /** + * @return the container + */ + public boolean isContainer() { + return container; + } + + /** + * @param container the container to set + */ + public void setContainer(boolean container) { + this.container = container; + } + + /** + * @return the identityLink + */ + public byte[] getIdentityLink() { + return identityLink; + } + + /** + * @param identityLink the identityLink to set + */ + public void setIdentityLink(byte[] identityLink) { + this.identityLink = identityLink; + } + + /** + * @return the fid + */ + public byte[] getFid() { + return fid; + } + + /** + * @param fid the fid to set + */ + public void setFid(byte[] fid) { + this.fid = fid; + } + + /** + * @return the fcx + */ + public byte[] getFcx() { + return fcx; + } + + /** + * @param fcx the fcx to set + */ + public void setFcx(byte[] fcx) { + this.fcx = fcx; + } + + /** + * @return the kid + */ + public int getKid() { + return kid; + } + + /** + * @param kid the kid to set + */ + public void setKid(int kid) { + this.kid = kid; + } + + /** + * @return the publicKey + */ + public PublicKey getPublicKey() { + return publicKey; + } + + /** + * @param publicKey the publicKey to set + */ + public void setPublicKey(PublicKey publicKey) { + this.publicKey = publicKey; + } + + /** + * @return the fileSize + */ + public int getFileSize() { + return fileSize; + } + + /** + * @param fileSize the fileSize to set + */ + public void setFileSize(int fileSize) { + this.fileSize = fileSize; + } + + @Override + public Object getObject() throws Exception { + + byte[] file = new byte[fileSize]; + + if (container) { + + int offset = 0; + + // HEADER 'AIK' + version + byte[] header = "AIK".getBytes(Charset.forName("ASCII")); + System.arraycopy(header, 0, file, offset, header.length); + offset += header.length; + file[offset++] = 1; + + // HEADER identity link + file[offset++] = (byte) 0x01; // Personenbindung + if (publicKey != null) { + file[offset++] = (byte) 0x01; // Modifier + + byte[] cipherText; + byte[] encKey; + try { + KeyGenerator keyGenerator = KeyGenerator.getInstance("DESede"); + SecretKey secretKey = keyGenerator.generateKey(); + + byte[] keyBytes = secretKey.getEncoded(); + + Cipher cipher = Cipher.getInstance("DESede/CBC/PKCS5Padding"); + byte[] iv = new byte[8]; + Arrays.fill(iv, (byte) 0x00); + IvParameterSpec ivParameterSpec = new IvParameterSpec(iv); + cipher.init(Cipher.ENCRYPT_MODE, secretKey, ivParameterSpec); + cipherText = cipher.doFinal(identityLink); + + cipher = Cipher.getInstance(publicKey.getAlgorithm()); + cipher.init(Cipher.ENCRYPT_MODE, publicKey); + encKey = cipher.doFinal(keyBytes); + + } catch (GeneralSecurityException e) { + throw new RuntimeException(e); + } + + int len = encKey.length + cipherText.length + 2; + + file[offset++] = (byte) (0xFF & len); + file[offset++] = (byte) (0xFF & len >> 8); + + file[offset++] = (byte) (0xFF & encKey.length); + file[offset++] = (byte) (0xFF & encKey.length >> 8); + + System.arraycopy(encKey, 0, file, offset, encKey.length); + offset += encKey.length; + + System.arraycopy(cipherText, 0, file, offset, cipherText.length); + + } else { + file[offset++] = (byte) 0x00; // Modifier + file[offset++] = (byte) (0xFF & identityLink.length); + file[offset++] = (byte) (0xFF & identityLink.length >> 8); + System.arraycopy(identityLink, 0, file, offset, identityLink.length); + offset += identityLink.length; + } + + } else if (identityLink != null) { + System.arraycopy(identityLink, 0, file, 0, Math.min(identityLink.length, file.length)); + } + + File f = new File(); + f.setFile(file); + f.setFid(fid); + f.setFcx(fcx); + f.setKid(kid); + + return f; + + } + + @Override + public Class getObjectType() { + return File.class; + } + + @Override + public boolean isSingleton() { + return false; + } + +} diff --git a/smcc/src/test/java/at/gv/egiz/smcc/test/spring/PrivateKeyFactoryBean.java b/smcc/src/test/java/at/gv/egiz/smcc/test/spring/PrivateKeyFactoryBean.java new file mode 100644 index 00000000..6470b5ca --- /dev/null +++ b/smcc/src/test/java/at/gv/egiz/smcc/test/spring/PrivateKeyFactoryBean.java @@ -0,0 +1,62 @@ +/* +* Copyright 2009 Federal Chancellery Austria and +* Graz University of Technology +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +*/ + +package at.gv.egiz.smcc.test.spring; + +import java.security.KeyFactory; +import java.security.PrivateKey; +import java.security.spec.PKCS8EncodedKeySpec; + +import org.springframework.beans.factory.FactoryBean; + +public class PrivateKeyFactoryBean implements FactoryBean { + + private byte[] encodedKey; + + private String algorithm; + + /** + * @param encodedKey the encodedKey to set + */ + public void setEncodedKey(byte[] encodedKey) { + this.encodedKey = encodedKey; + } + + /** + * @param algorithm the algorithm to set + */ + public void setAlgorithm(String algorithm) { + this.algorithm = algorithm; + } + + @Override + public Object getObject() throws Exception { + KeyFactory keyFactory = KeyFactory.getInstance(algorithm); + return keyFactory.generatePrivate(new PKCS8EncodedKeySpec(encodedKey)); + } + + @Override + public Class getObjectType() { + return PrivateKey.class; + } + + @Override + public boolean isSingleton() { + return false; + } + +} diff --git a/smcc/src/test/java/at/gv/egiz/smcc/test/spring/PublicKeyFactoryBean.java b/smcc/src/test/java/at/gv/egiz/smcc/test/spring/PublicKeyFactoryBean.java new file mode 100644 index 00000000..83b552cf --- /dev/null +++ b/smcc/src/test/java/at/gv/egiz/smcc/test/spring/PublicKeyFactoryBean.java @@ -0,0 +1,62 @@ +/* +* Copyright 2009 Federal Chancellery Austria and +* Graz University of Technology +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +*/ + +package at.gv.egiz.smcc.test.spring; + +import java.security.KeyFactory; +import java.security.PublicKey; +import java.security.spec.X509EncodedKeySpec; + +import org.springframework.beans.factory.FactoryBean; + +public class PublicKeyFactoryBean implements FactoryBean { + + private byte[] encodedKey; + + private String algorithm; + + /** + * @param encodedKey the encodedKey to set + */ + public void setEncodedKey(byte[] encodedKey) { + this.encodedKey = encodedKey; + } + + /** + * @param algorithm the algorithm to set + */ + public void setAlgorithm(String algorithm) { + this.algorithm = algorithm; + } + + @Override + public Object getObject() throws Exception { + KeyFactory keyFactory = KeyFactory.getInstance(algorithm); + return keyFactory.generatePublic(new X509EncodedKeySpec(encodedKey)); + } + + @Override + public Class getObjectType() { + return PublicKey.class; + } + + @Override + public boolean isSingleton() { + return false; + } + +} -- cgit v1.2.3