diff options
Diffstat (limited to 'reader/src')
9 files changed, 56 insertions, 58 deletions
diff --git a/reader/src/main/java/cz/crcs/ectester/reader/CardMngr.java b/reader/src/main/java/cz/crcs/ectester/reader/CardMngr.java index 0a01d9e..d8fa296 100644 --- a/reader/src/main/java/cz/crcs/ectester/reader/CardMngr.java +++ b/reader/src/main/java/cz/crcs/ectester/reader/CardMngr.java @@ -2,6 +2,7 @@ package cz.crcs.ectester.reader; import com.licel.jcardsim.io.JavaxSmartCardInterface; import cz.crcs.ectester.common.util.ByteUtil; +import cz.crcs.ectester.common.util.CardUtil; import javacard.framework.AID; import javacard.framework.Applet; import javacard.framework.ISO7816; @@ -206,10 +207,10 @@ public class CardMngr { // Try CPLC via GP ResponseAPDU resp = send(FETCH_GP_CPLC_APDU); // If GP CLA fails, try with ISO - if (resp.getSW() == (ISO7816.SW_CLA_NOT_SUPPORTED & 0xffff)) { + if (resp.getSW() == (CardUtil.ISO7816.SW_CLA_NOT_SUPPORTED & 0xffff)) { resp = send(FETCH_ISO_CPLC_APDU); } - if (resp.getSW() == (ISO7816.SW_NO_ERROR & 0xffff)) { + if (resp.getSW() == (CardUtil.ISO7816.SW_NO_ERROR & 0xffff)) { return resp.getData(); } return null; @@ -369,7 +370,7 @@ public class CardMngr { } else { resp = channel.transmit(cmd); } - if ((short) resp.getSW() != ISO7816.SW_NO_ERROR) { + if ((short) resp.getSW() != CardUtil.ISO7816.SW_NO_ERROR) { throw new CardException("Chunking failed!"); } } diff --git a/reader/src/main/java/cz/crcs/ectester/reader/ECTesterReader.java b/reader/src/main/java/cz/crcs/ectester/reader/ECTesterReader.java index 33111d0..9ba9890 100644 --- a/reader/src/main/java/cz/crcs/ectester/reader/ECTesterReader.java +++ b/reader/src/main/java/cz/crcs/ectester/reader/ECTesterReader.java @@ -37,8 +37,6 @@ import cz.crcs.ectester.reader.output.FileTestWriter; import cz.crcs.ectester.reader.output.ResponseWriter; import cz.crcs.ectester.reader.response.Response; import cz.crcs.ectester.reader.test.*; -import javacard.framework.ISO7816; -import javacard.security.KeyPair; import org.apache.commons.cli.*; import org.bouncycastle.jce.provider.BouncyCastleProvider; @@ -78,8 +76,9 @@ public class ECTesterReader { private static final byte[] SELECT_PREFIX = {(byte) 0x00, (byte) 0xa4, (byte) 0x04, (byte) 0x00, (byte) 0x0c}; private static final byte[] AID_PREFIX = {(byte) 0x45, (byte) 0x43, (byte) 0x54, (byte) 0x65, (byte) 0x73, (byte) 0x74, (byte) 0x65, (byte) 0x72}; private static final byte[] AID_CURRENT_VERSION = {(byte) 0x30, (byte) 0x33, (byte) 0x33}; // VERSION v0.3.3 - private static final byte[] AID_SUFFIX_221 = {(byte) 0x62}; - private static final byte[] AID_SUFFIX_222 = {(byte) 0x78}; + private static final byte[] AID_SUFFIX_221 = {(byte) 0x20, (byte) 0x32, (byte) 0x32, (byte) 0x31}; + private static final byte[] AID_SUFFIX_222 = {(byte) 0x20, (byte) 0x32, (byte) 0x32, (byte) 0x32}; + private static final byte[] AID_SUFFIX_305 = {(byte) 0x20, (byte) 0x33, (byte) 0x30, (byte) 0x35}; private static final byte[] INSTALL_DATA = new byte[10]; private static final int TRY_VERSIONS = 10; @@ -149,13 +148,23 @@ public class ECTesterReader { byte[] versionByte = AID_CURRENT_VERSION.clone(); boolean selected = false; for (int i = 0; i < TRY_VERSIONS; ++i) { - byte[] select222 = ByteUtil.concatenate(SELECT_PREFIX, AID_PREFIX, versionByte, AID_SUFFIX_222); - ResponseAPDU selectResp = cardManager.send(select222); - if ((short) selectResp.getSW() != ISO7816.SW_NO_ERROR) { - byte[] select221 = ByteUtil.concatenate(SELECT_PREFIX, AID_PREFIX, versionByte, AID_SUFFIX_221); - selectResp = cardManager.send(select221); - if ((short) selectResp.getSW() == ISO7816.SW_NO_ERROR) { - cardManager.setChunking(true); + // Try 301 CAP version + byte[] select301 = ByteUtil.concatenate(SELECT_PREFIX, AID_PREFIX, versionByte, AID_SUFFIX_305); + ResponseAPDU selectResp = cardManager.send(select301); + if ((short) selectResp.getSW() != CardUtil.ISO7816.SW_NO_ERROR) { + // Try 222 CAP version + byte[] select222 = ByteUtil.concatenate(SELECT_PREFIX, AID_PREFIX, versionByte, AID_SUFFIX_222); + selectResp = cardManager.send(select222); + if ((short) selectResp.getSW() != CardUtil.ISO7816.SW_NO_ERROR) { + // Try 221 CAP version + byte[] select221 = ByteUtil.concatenate(SELECT_PREFIX, AID_PREFIX, versionByte, AID_SUFFIX_221); + selectResp = cardManager.send(select221); + if ((short) selectResp.getSW() == CardUtil.ISO7816.SW_NO_ERROR) { + cardManager.setChunking(true); + selected = true; + break; + } + } else { selected = true; break; } @@ -387,7 +396,7 @@ public class ECTesterReader { * @throws IOException if an IO error occurs when writing to key file. */ private void export() throws CardException, IOException { - byte keyClass = cfg.primeField ? KeyPair.ALG_EC_FP : KeyPair.ALG_EC_F2M; + byte keyClass = cfg.primeField ? EC_Consts.ALG_EC_FP : EC_Consts.ALG_EC_F2M; List<Response> sent = new LinkedList<>(); sent.add(new Command.Allocate(cardManager, CardConsts.KEYPAIR_LOCAL, cfg.keyBuilder, cfg.bits, keyClass).send()); @@ -437,7 +446,7 @@ public class ECTesterReader { * @throws IOException if an IO error occurs when writing to key file. */ private void generate() throws CardException, IOException { - byte keyClass = cfg.primeField ? KeyPair.ALG_EC_FP : KeyPair.ALG_EC_F2M; + byte keyClass = cfg.primeField ? EC_Consts.ALG_EC_FP : EC_Consts.ALG_EC_F2M; Command curve = Command.prepareCurve(cardManager, cfg, CardConsts.KEYPAIR_LOCAL, cfg.bits, keyClass); Response allocate = new Command.Allocate(cardManager, CardConsts.KEYPAIR_LOCAL, cfg.keyBuilder, cfg.bits, keyClass).send(); @@ -569,7 +578,7 @@ public class ECTesterReader { * @throws IOException if an IO error occurs when writing to key file. */ private void ecdh() throws IOException, CardException { - byte keyClass = cfg.primeField ? KeyPair.ALG_EC_FP : KeyPair.ALG_EC_F2M; + byte keyClass = cfg.primeField ? EC_Consts.ALG_EC_FP : EC_Consts.ALG_EC_F2M; Command curve = Command.prepareCurve(cardManager, cfg, CardConsts.KEYPAIR_BOTH, cfg.bits, keyClass); List<Response> prepare = new LinkedList<>(); prepare.add(new Command.AllocateKeyAgreement(cardManager, cfg.ECKAType).send()); // Prepare KeyAgreement or required type @@ -696,7 +705,7 @@ public class ECTesterReader { generate = new Command.Generate(cardManager, CardConsts.KEYPAIR_LOCAL); } - byte keyClass = cfg.primeField ? KeyPair.ALG_EC_FP : KeyPair.ALG_EC_F2M; + byte keyClass = cfg.primeField ? EC_Consts.ALG_EC_FP : EC_Consts.ALG_EC_F2M; List<Response> prepare = new LinkedList<>(); prepare.add(new Command.AllocateSignature(cardManager, cfg.ECDSAType).send()); prepare.add(new Command.Allocate(cardManager, CardConsts.KEYPAIR_LOCAL, cfg.keyBuilder, cfg.bits, keyClass).send()); diff --git a/reader/src/main/java/cz/crcs/ectester/reader/command/Command.java b/reader/src/main/java/cz/crcs/ectester/reader/command/Command.java index 051d377..892a481 100644 --- a/reader/src/main/java/cz/crcs/ectester/reader/command/Command.java +++ b/reader/src/main/java/cz/crcs/ectester/reader/command/Command.java @@ -12,7 +12,6 @@ import cz.crcs.ectester.reader.CardMngr; import cz.crcs.ectester.reader.ECTesterReader; import cz.crcs.ectester.reader.output.ResponseWriter; import cz.crcs.ectester.reader.response.Response; -import javacard.security.KeyPair; import javax.smartcardio.CardException; import javax.smartcardio.CommandAPDU; @@ -98,7 +97,7 @@ public abstract class Command implements Cloneable { public static Command prepareCurve(CardMngr cardManager, ECTesterReader.Config cfg, byte keyPair, short keyLength, byte keyClass) throws IOException { if (cfg.customCurve) { // Set custom curve (one of the SECG curves embedded applet-side) - short domainParams = keyClass == KeyPair.ALG_EC_FP ? EC_Consts.PARAMETERS_DOMAIN_FP : EC_Consts.PARAMETERS_DOMAIN_F2M; + short domainParams = keyClass == EC_Consts.ALG_EC_FP ? EC_Consts.PARAMETERS_DOMAIN_FP : EC_Consts.PARAMETERS_DOMAIN_F2M; return new Command.Set(cardManager, keyPair, EC_Consts.getCurve(keyLength, keyClass), domainParams, null); } @@ -294,7 +293,7 @@ public abstract class Command implements Cloneable { @Override public String getDescription() { - String field = keyClass == KeyPair.ALG_EC_FP ? "ALG_EC_FP" : "ALG_EC_F2M"; + String field = keyClass == EC_Consts.ALG_EC_FP ? "ALG_EC_FP" : "ALG_EC_F2M"; String key; if (keyPair == CardConsts.KEYPAIR_BOTH) { key = "both keypairs"; diff --git a/reader/src/main/java/cz/crcs/ectester/reader/response/Response.java b/reader/src/main/java/cz/crcs/ectester/reader/response/Response.java index 8db255e..e253d30 100644 --- a/reader/src/main/java/cz/crcs/ectester/reader/response/Response.java +++ b/reader/src/main/java/cz/crcs/ectester/reader/response/Response.java @@ -3,7 +3,7 @@ package cz.crcs.ectester.reader.response; import cz.crcs.ectester.common.ec.EC_Consts; import cz.crcs.ectester.common.util.ByteUtil; import cz.crcs.ectester.common.util.CardConsts; -import javacard.framework.ISO7816; +import cz.crcs.ectester.common.util.CardUtil; import javax.smartcardio.ResponseAPDU; @@ -39,7 +39,7 @@ public abstract class Response { short sw = ByteUtil.getShort(data, offset); offset += 2; sws[i] = sw; - if (sw != ISO7816.SW_NO_ERROR) { + if (sw != CardUtil.ISO7816.SW_NO_ERROR) { success = false; } } else { @@ -48,7 +48,7 @@ public abstract class Response { } } - if ((short) resp.getSW() != ISO7816.SW_NO_ERROR) { + if ((short) resp.getSW() != CardUtil.ISO7816.SW_NO_ERROR) { success = false; error = true; } diff --git a/reader/src/main/java/cz/crcs/ectester/reader/test/CardCompressionSuite.java b/reader/src/main/java/cz/crcs/ectester/reader/test/CardCompressionSuite.java index ab1f46a..8390cd3 100644 --- a/reader/src/main/java/cz/crcs/ectester/reader/test/CardCompressionSuite.java +++ b/reader/src/main/java/cz/crcs/ectester/reader/test/CardCompressionSuite.java @@ -16,7 +16,6 @@ import cz.crcs.ectester.reader.CardMngr; import cz.crcs.ectester.reader.ECTesterReader; import cz.crcs.ectester.reader.command.Command; import cz.crcs.ectester.reader.response.Response; -import javacard.security.KeyPair; import java.security.spec.ECPoint; import java.util.LinkedList; @@ -45,7 +44,7 @@ public class CardCompressionSuite extends CardTestSuite { // - test local privkey, remote pubkey (hybrid with wrong y) // - test local privkey, remote pubkey (point at infinity) if (cfg.primeField) { - runCompression(KeyPair.ALG_EC_FP); + runCompression(EC_Consts.ALG_EC_FP); } // for F2m // - allocate, set custom curve, generate keypairs, -> export generated. @@ -55,7 +54,7 @@ public class CardCompressionSuite extends CardTestSuite { // - test local privkey, remote pubkey (hybrid with wrong y) // - test local privkey, remote pubkey (point at infinity) if (cfg.binaryField) { - runCompression(KeyPair.ALG_EC_F2M); + runCompression(EC_Consts.ALG_EC_F2M); } // Now, do ECDH over SECG curves and give the implementation a compressed key that is not a quadratic residue in @@ -64,8 +63,8 @@ public class CardCompressionSuite extends CardTestSuite { } private void runCompression(byte field) throws Exception { - short[] keySizes = field == KeyPair.ALG_EC_FP ? EC_Consts.FP_SIZES : EC_Consts.F2M_SIZES; - short domain = field == KeyPair.ALG_EC_FP ? EC_Consts.PARAMETERS_DOMAIN_FP : EC_Consts.PARAMETERS_DOMAIN_F2M; + short[] keySizes = field == EC_Consts.ALG_EC_FP ? EC_Consts.FP_SIZES : EC_Consts.F2M_SIZES; + short domain = field == EC_Consts.ALG_EC_FP ? EC_Consts.PARAMETERS_DOMAIN_FP : EC_Consts.PARAMETERS_DOMAIN_F2M; for (short keyLength : keySizes) { String spec = keyLength + "b " + CardUtil.getKeyTypeString(field); diff --git a/reader/src/main/java/cz/crcs/ectester/reader/test/CardDefaultSuite.java b/reader/src/main/java/cz/crcs/ectester/reader/test/CardDefaultSuite.java index df46767..ebb1d3f 100644 --- a/reader/src/main/java/cz/crcs/ectester/reader/test/CardDefaultSuite.java +++ b/reader/src/main/java/cz/crcs/ectester/reader/test/CardDefaultSuite.java @@ -10,7 +10,6 @@ import cz.crcs.ectester.common.util.CardUtil; import cz.crcs.ectester.reader.CardMngr; import cz.crcs.ectester.reader.ECTesterReader; import cz.crcs.ectester.reader.command.Command; -import javacard.security.KeyPair; import java.util.LinkedList; import java.util.List; @@ -34,16 +33,16 @@ public class CardDefaultSuite extends CardTestSuite { @Override protected void runTests() throws Exception { if (cfg.primeField) { - runDefault(KeyPair.ALG_EC_FP); + runDefault(EC_Consts.ALG_EC_FP); } if (cfg.binaryField) { - runDefault(KeyPair.ALG_EC_F2M); + runDefault(EC_Consts.ALG_EC_F2M); } } private void runDefault(byte field) throws Exception { - short[] keySizes = field == KeyPair.ALG_EC_FP ? EC_Consts.FP_SIZES : EC_Consts.F2M_SIZES; - short domain = field == KeyPair.ALG_EC_FP ? EC_Consts.PARAMETERS_DOMAIN_FP : EC_Consts.PARAMETERS_DOMAIN_F2M; + short[] keySizes = field == EC_Consts.ALG_EC_FP ? EC_Consts.FP_SIZES : EC_Consts.F2M_SIZES; + short domain = field == EC_Consts.ALG_EC_FP ? EC_Consts.PARAMETERS_DOMAIN_FP : EC_Consts.PARAMETERS_DOMAIN_F2M; for (short keyLength : keySizes) { List<Test> supportTests = new LinkedList<>(); diff --git a/reader/src/main/java/cz/crcs/ectester/reader/test/CardEdgeCasesSuite.java b/reader/src/main/java/cz/crcs/ectester/reader/test/CardEdgeCasesSuite.java index 98a59bc..0a82da3 100644 --- a/reader/src/main/java/cz/crcs/ectester/reader/test/CardEdgeCasesSuite.java +++ b/reader/src/main/java/cz/crcs/ectester/reader/test/CardEdgeCasesSuite.java @@ -8,14 +8,13 @@ import cz.crcs.ectester.common.test.Test; import cz.crcs.ectester.common.test.TestCallback; import cz.crcs.ectester.common.util.ByteUtil; import cz.crcs.ectester.common.util.CardConsts; +import cz.crcs.ectester.common.util.CardUtil; import cz.crcs.ectester.common.util.ECUtil; import cz.crcs.ectester.data.EC_Store; import cz.crcs.ectester.reader.CardMngr; import cz.crcs.ectester.reader.ECTesterReader; import cz.crcs.ectester.reader.command.Command; import cz.crcs.ectester.reader.response.Response; -import javacard.security.CryptoException; -import javacard.security.KeyPair; import java.math.BigDecimal; import java.math.BigInteger; @@ -77,7 +76,7 @@ public class CardEdgeCasesSuite extends CardTestSuite { @Override public Result apply(CommandTestable testable) { Response.ECDH dh = (Response.ECDH) testable.getResponse(); - if (dh.getSW(0) == CryptoException.NO_SUCH_ALGORITHM) { + if (dh.getSW(0) == CardUtil.CryptoException.NO_SUCH_ALGORITHM) { return new Result(Result.Value.SUCCESS, "ECDH algorithm unsupported."); } if (!dh.successful()) @@ -116,7 +115,7 @@ public class CardEdgeCasesSuite extends CardTestSuite { EC_Curve curve = EC_Store.getInstance().getObject(EC_Curve.class, openssl_bug.getCurve()); EC_Key.Private skey = EC_Store.getInstance().getObject(EC_Key.Private.class, openssl_bug.getOtherKey()); EC_Key.Public pkey = EC_Store.getInstance().getObject(EC_Key.Public.class, openssl_bug.getOneKey()); - Test key = CommandTest.expect(new Command.Allocate(this.card, CardConsts.KEYPAIR_BOTH, curve.getBits(), KeyPair.ALG_EC_FP), Result.ExpectedValue.SUCCESS); + Test key = CommandTest.expect(new Command.Allocate(this.card, CardConsts.KEYPAIR_BOTH, curve.getBits(), EC_Consts.ALG_EC_FP), Result.ExpectedValue.SUCCESS); Test set = CommandTest.expect(new Command.Set(this.card, CardConsts.KEYPAIR_BOTH, EC_Consts.CURVE_external, curve.getParams(), curve.flatten()), Result.ExpectedValue.SUCCESS); Test setPrivate = CommandTest.expect(new Command.Set(this.card, CardConsts.KEYPAIR_LOCAL, EC_Consts.CURVE_external, EC_Consts.PARAMETER_S, skey.flatten(EC_Consts.PARAMETER_S)), Result.ExpectedValue.SUCCESS); Test setPublic = CommandTest.expect(new Command.Set(this.card, CardConsts.KEYPAIR_REMOTE, EC_Consts.CURVE_external, EC_Consts.PARAMETER_W, pkey.flatten(EC_Consts.PARAMETER_W)), Result.ExpectedValue.SUCCESS); @@ -139,12 +138,12 @@ public class CardEdgeCasesSuite extends CardTestSuite { } Map<String, EC_Curve> curveMap = EC_Store.getInstance().getObjects(EC_Curve.class, "secg"); - List<EC_Curve> curves = curveMap.entrySet().stream().filter((e) -> e.getKey().endsWith("r1") && e.getValue().getField() == KeyPair.ALG_EC_FP).map(Map.Entry::getValue).collect(Collectors.toList()); + List<EC_Curve> curves = curveMap.entrySet().stream().filter((e) -> e.getKey().endsWith("r1") && e.getValue().getField() == EC_Consts.ALG_EC_FP).map(Map.Entry::getValue).collect(Collectors.toList()); curves.add(EC_Store.getInstance().getObject(EC_Curve.class, "cofactor/cofactor128p2")); curves.add(EC_Store.getInstance().getObject(EC_Curve.class, "cofactor/cofactor160p4")); Random rand = new Random(); for (EC_Curve curve : curves) { - Test key = runTest(CommandTest.expect(new Command.Allocate(this.card, CardConsts.KEYPAIR_BOTH, curve.getBits(), KeyPair.ALG_EC_FP), Result.ExpectedValue.SUCCESS)); + Test key = runTest(CommandTest.expect(new Command.Allocate(this.card, CardConsts.KEYPAIR_BOTH, curve.getBits(), EC_Consts.ALG_EC_FP), Result.ExpectedValue.SUCCESS)); if (!key.ok()) { doTest(CompoundTest.all(Result.ExpectedValue.FAILURE, "No support for " + curve.getBits() + "b " + curve.getId() + ".", key)); continue; @@ -269,7 +268,7 @@ public class CardEdgeCasesSuite extends CardTestSuite { Arrays.sort(ps); Arrays.sort(zeros); - Test key = runTest(CommandTest.expect(new Command.Allocate(this.card, CardConsts.KEYPAIR_BOTH, secp160r1.getBits(), KeyPair.ALG_EC_FP), Result.ExpectedValue.SUCCESS)); + Test key = runTest(CommandTest.expect(new Command.Allocate(this.card, CardConsts.KEYPAIR_BOTH, secp160r1.getBits(), EC_Consts.ALG_EC_FP), Result.ExpectedValue.SUCCESS)); if (!key.ok()) { doTest(CompoundTest.all(Result.ExpectedValue.FAILURE, "No support for " + secp160r1.getBits() + "b secp160r1.", key)); return; diff --git a/reader/src/main/java/cz/crcs/ectester/reader/test/CardTestVectorSuite.java b/reader/src/main/java/cz/crcs/ectester/reader/test/CardTestVectorSuite.java index 056be17..07b38d0 100644 --- a/reader/src/main/java/cz/crcs/ectester/reader/test/CardTestVectorSuite.java +++ b/reader/src/main/java/cz/crcs/ectester/reader/test/CardTestVectorSuite.java @@ -15,7 +15,6 @@ import cz.crcs.ectester.reader.CardMngr; import cz.crcs.ectester.reader.ECTesterReader; import cz.crcs.ectester.reader.command.Command; import cz.crcs.ectester.reader.response.Response; -import javacard.security.KeyPair; import javax.crypto.KeyAgreement; import java.io.IOException; @@ -109,8 +108,8 @@ public class CardTestVectorSuite extends CardTestSuite { } List<EC_Curve> testCurves = new ArrayList<>(); - testCurves.addAll(EC_Store.getInstance().getObjects(EC_Curve.class, "secg").values().stream().filter((curve) -> curve.getField() == KeyPair.ALG_EC_FP).collect(Collectors.toList())); - testCurves.addAll(EC_Store.getInstance().getObjects(EC_Curve.class, "brainpool").values().stream().filter((curve) -> curve.getField() == KeyPair.ALG_EC_FP).collect(Collectors.toList())); + testCurves.addAll(EC_Store.getInstance().getObjects(EC_Curve.class, "secg").values().stream().filter((curve) -> curve.getField() == EC_Consts.ALG_EC_FP).collect(Collectors.toList())); + testCurves.addAll(EC_Store.getInstance().getObjects(EC_Curve.class, "brainpool").values().stream().filter((curve) -> curve.getField() == EC_Consts.ALG_EC_FP).collect(Collectors.toList())); for (EC_Curve curve : testCurves) { List<Test> testVector = new LinkedList<>(); Test allocate = runTest(CommandTest.expect(new Command.Allocate(this.card, CardConsts.KEYPAIR_BOTH, curve.getBits(), curve.getField()), ExpectedValue.SUCCESS)); diff --git a/reader/src/main/java/cz/crcs/ectester/reader/test/CardWrongSuite.java b/reader/src/main/java/cz/crcs/ectester/reader/test/CardWrongSuite.java index c69396b..0b030b8 100644 --- a/reader/src/main/java/cz/crcs/ectester/reader/test/CardWrongSuite.java +++ b/reader/src/main/java/cz/crcs/ectester/reader/test/CardWrongSuite.java @@ -15,7 +15,6 @@ import cz.crcs.ectester.data.EC_Store; import cz.crcs.ectester.reader.CardMngr; import cz.crcs.ectester.reader.ECTesterReader; import cz.crcs.ectester.reader.command.Command; -import javacard.security.KeyPair; import java.math.BigInteger; import java.util.LinkedList; @@ -82,8 +81,8 @@ public class CardWrongSuite extends CardTestSuite { */ Random r = new Random(); for (short keyLength : EC_Consts.FP_SIZES) { - byte curve = EC_Consts.getCurve(keyLength, KeyPair.ALG_EC_FP); - Test key = runTest(CommandTest.expect(new Command.Allocate(this.card, CardConsts.KEYPAIR_BOTH, keyLength, KeyPair.ALG_EC_FP), ExpectedValue.SUCCESS)); + byte curve = EC_Consts.getCurve(keyLength, EC_Consts.ALG_EC_FP); + Test key = runTest(CommandTest.expect(new Command.Allocate(this.card, CardConsts.KEYPAIR_BOTH, keyLength, EC_Consts.ALG_EC_FP), ExpectedValue.SUCCESS)); if (!key.ok()) { doTest(CompoundTest.all(ExpectedValue.FAILURE, "No support for " + keyLength + "b ALG_EC_FP.", key)); continue; @@ -117,13 +116,7 @@ public class CardWrongSuite extends CardTestSuite { Test zeroG = ecdhTest(new Command.Transform(this.card, CardConsts.KEYPAIR_BOTH, EC_Consts.KEY_BOTH, EC_Consts.PARAMETER_G, EC_Consts.TRANSFORMATION_INFINITY), "Set G = inifnity.", "ECDH with G = infinity."); Test wrongG = CompoundTest.all(ExpectedValue.SUCCESS, "Tests with corrupted G parameter.", randomG, fullRandomG, zeroG); - byte[] originalR = new byte[((keyLength + 7) / 8) + 1]; - short origRlen = EC_Consts.getCurveParameter(curve, EC_Consts.PARAMETER_R, originalR, (short) 0); - if (origRlen != originalR.length) { - byte[] copyR = new byte[origRlen]; - System.arraycopy(originalR, 0, copyR, 0, origRlen); - originalR = copyR; - } + byte[] originalR = EC_Consts.getCurveParameter(curve, EC_Consts.PARAMETER_R); BigInteger originalBigR = new BigInteger(1, originalR); Test zeroR = ecdhTest(new Command.Transform(this.card, CardConsts.KEYPAIR_BOTH, EC_Consts.CURVE_external, EC_Consts.PARAMETER_R, EC_Consts.TRANSFORMATION_ZERO), "Set R = 0.", "ECDH with R = 0."); @@ -159,7 +152,7 @@ public class CardWrongSuite extends CardTestSuite { Test wrongK = CompoundTest.all(ExpectedValue.SUCCESS, "Tests with corrupted K parameter.", bigK, zeroK); - doTest(CompoundTest.all(ExpectedValue.SUCCESS, "Tests of " + keyLength + "b " + CardUtil.getKeyTypeString(KeyPair.ALG_EC_FP), setup, wrongPrime, resetSetup, wrongG, resetSetup.clone(), wrongR, resetSetup.clone(), wrongK, resetSetup.clone())); + doTest(CompoundTest.all(ExpectedValue.SUCCESS, "Tests of " + keyLength + "b " + CardUtil.getKeyTypeString(EC_Consts.ALG_EC_FP), setup, wrongPrime, resetSetup, wrongG, resetSetup.clone(), wrongR, resetSetup.clone(), wrongK, resetSetup.clone())); } /* @@ -168,8 +161,8 @@ public class CardWrongSuite extends CardTestSuite { * - e1 = e2 = e3 = 0 */ for (short keyLength : EC_Consts.F2M_SIZES) { - byte curve = EC_Consts.getCurve(keyLength, KeyPair.ALG_EC_F2M); - Test key = runTest(CommandTest.expect(new Command.Allocate(this.card, CardConsts.KEYPAIR_BOTH, keyLength, KeyPair.ALG_EC_F2M), ExpectedValue.SUCCESS)); + byte curve = EC_Consts.getCurve(keyLength, EC_Consts.ALG_EC_F2M); + Test key = runTest(CommandTest.expect(new Command.Allocate(this.card, CardConsts.KEYPAIR_BOTH, keyLength, EC_Consts.ALG_EC_F2M), ExpectedValue.SUCCESS)); if (!key.ok()) { doTest(CompoundTest.all(ExpectedValue.FAILURE, "No support for " + keyLength + "b ALG_EC_F2M.", key)); continue; @@ -191,7 +184,7 @@ public class CardWrongSuite extends CardTestSuite { Test coeffLarger = ecdhTest(new Command.Set(this.card, CardConsts.KEYPAIR_BOTH, EC_Consts.CURVE_external, coeffParams.getParams(), coeffParams.flatten()), "Set e1=" + e1 + ", e2=" + e2 + ", e3=" + e3, "ECDH with wrong field poly, powers larger than " + keyLength); Test wrong = CompoundTest.all(ExpectedValue.SUCCESS, "Tests with corrupted field polynomial parameter.", coeff0, coeffLarger); - doTest(CompoundTest.all(ExpectedValue.SUCCESS, "Tests of " + keyLength + "b " + CardUtil.getKeyTypeString(KeyPair.ALG_EC_F2M), setup, wrong)); + doTest(CompoundTest.all(ExpectedValue.SUCCESS, "Tests of " + keyLength + "b " + CardUtil.getKeyTypeString(EC_Consts.ALG_EC_F2M), setup, wrong)); } /* |
