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 --- .../test/java/at/gv/egiz/smcc/acos/A04ApplDEC.java | 114 ++------------------- 1 file changed, 8 insertions(+), 106 deletions(-) (limited to 'smcc/src/test/java/at/gv/egiz/smcc/acos/A04ApplDEC.java') diff --git a/smcc/src/test/java/at/gv/egiz/smcc/acos/A04ApplDEC.java b/smcc/src/test/java/at/gv/egiz/smcc/acos/A04ApplDEC.java index e38a8e80..b264bcae 100644 --- a/smcc/src/test/java/at/gv/egiz/smcc/acos/A04ApplDEC.java +++ b/smcc/src/test/java/at/gv/egiz/smcc/acos/A04ApplDEC.java @@ -16,39 +16,20 @@ */ package at.gv.egiz.smcc.acos; -import java.io.UnsupportedEncodingException; import java.security.GeneralSecurityException; -import java.security.InvalidAlgorithmParameterException; -import java.security.InvalidKeyException; -import java.security.KeyPair; -import java.security.KeyPairGenerator; -import java.security.NoSuchAlgorithmException; import java.security.PrivateKey; -import java.security.PublicKey; import java.security.Signature; -import java.security.interfaces.RSAPrivateKey; -import java.security.interfaces.RSAPublicKey; import java.util.Arrays; -import javax.crypto.BadPaddingException; import javax.crypto.Cipher; -import javax.crypto.IllegalBlockSizeException; -import javax.crypto.KeyGenerator; -import javax.crypto.NoSuchPaddingException; -import javax.crypto.SecretKey; -import javax.crypto.SecretKeyFactory; -import javax.crypto.spec.IvParameterSpec; -import javax.crypto.spec.SecretKeySpec; import javax.smartcardio.CardException; import javax.smartcardio.CommandAPDU; import javax.smartcardio.ResponseAPDU; import at.gv.egiz.smcc.CardChannelEmul; -import at.gv.egiz.smcc.File; import at.gv.egiz.smcc.PIN; -@SuppressWarnings("restriction") public class A04ApplDEC extends ACOSApplDEC { private static final byte[] SEC_ENV_INTERNAL_AUTHENTICATE = new byte[] { (byte) 0x84, @@ -57,91 +38,10 @@ public class A04ApplDEC extends ACOSApplDEC { private static final byte[] SEC_ENV_DECIPHER = new byte[] { (byte) 0x84, (byte) 0x01, (byte) 0x88, (byte) 0x80, (byte) 0x01, (byte) 0x02 }; - private static final RSAPrivateKey SK_CH_EKEY; - - private static final RSAPublicKey PK_CH_EKEY; - - static { - try { - KeyPairGenerator gen = KeyPairGenerator.getInstance("RSA"); - gen.initialize(1536); - KeyPair keyPair = gen.generateKeyPair(); - SK_CH_EKEY = (RSAPrivateKey) keyPair.getPrivate(); - PK_CH_EKEY = (RSAPublicKey) keyPair.getPublic(); - } catch (NoSuchAlgorithmException e) { - throw new RuntimeException(e); - } - } - - public A04ApplDEC() { - this(false); - } - - public A04ApplDEC(boolean encrypt) { - - int offset = 0; - - // HEADER 'AIK' + version - byte[] header; - try { - header = "AIK".getBytes("ASCII"); - } catch (UnsupportedEncodingException e) { - throw new RuntimeException(e); - } - System.arraycopy(header, 0, EF_INFOBOX, offset, header.length); - offset += header.length; - EF_INFOBOX[offset++] = 1; - - // HEADER identity link - EF_INFOBOX[offset++] = (byte) 0x01; // Personenbindung - if (encrypt) { - EF_INFOBOX[offset++] = (byte) 0x01; // Modifier + protected PrivateKey privateKey; - 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(IDLINK); - - cipher = Cipher.getInstance("RSA"); - cipher.init(Cipher.ENCRYPT_MODE, PK_CH_EKEY); - encKey = cipher.doFinal(keyBytes); - - } catch (GeneralSecurityException e) { - throw new RuntimeException(e); - } - - int len = encKey.length + cipherText.length + 2; - - EF_INFOBOX[offset++] = (byte) (0xFF & len); - EF_INFOBOX[offset++] = (byte) (0xFF & len >> 8); - - EF_INFOBOX[offset++] = (byte) (0xFF & encKey.length); - EF_INFOBOX[offset++] = (byte) (0xFF & encKey.length >> 8); - - System.arraycopy(encKey, 0, EF_INFOBOX, offset, encKey.length); - offset += encKey.length; - - System.arraycopy(cipherText, 0, EF_INFOBOX, offset, cipherText.length); - - } else { - EF_INFOBOX[offset++] = (byte) 0x00; // Modifier - EF_INFOBOX[offset++] = (byte) (0xFF & IDLINK.length); - EF_INFOBOX[offset++] = (byte) (0xFF & IDLINK.length >> 8); - System.arraycopy(IDLINK, 0, EF_INFOBOX, offset, IDLINK.length); - offset += IDLINK.length; - } - - putFile(new File(FID_EF_INFOBOX, EF_INFOBOX, FCI_EF_INFOBOX)); + public void setPrivateKey(PrivateKey privateKey) { + this.privateKey = privateKey; } @Override @@ -197,6 +97,8 @@ public class A04ApplDEC extends ACOSApplDEC { if (command.getP1() == 0x80 && command.getP2() == 0x86) { + // DECIPHER + byte[] data = command.getData(); if (!Arrays.equals(securityEnv, SEC_ENV_DECIPHER)) { @@ -217,7 +119,7 @@ public class A04ApplDEC extends ACOSApplDEC { byte[] plainText; try { Cipher cipher = Cipher.getInstance("RSA"); - cipher.init(Cipher.DECRYPT_MODE, SK_CH_EKEY); + cipher.init(Cipher.DECRYPT_MODE, privateKey); plainText = cipher.doFinal(cipherText); } catch (GeneralSecurityException e) { throw new CardException(e); @@ -268,8 +170,8 @@ public class A04ApplDEC extends ACOSApplDEC { byte[] sig; try { - Signature signature = Signature.getInstance("RSA"); - signature.initSign(SK_CH_EKEY); + Signature signature = Signature.getInstance(privateKey.getAlgorithm()); + signature.initSign(privateKey); signature.update(digest); sig = signature.sign(); } catch (GeneralSecurityException e) { -- cgit v1.2.3