From 5848a64d506231bfa8de73b433a76b1017b4d33e Mon Sep 17 00:00:00 2001
From: J08nY
Date: Mon, 10 Dec 2018 15:34:09 +0100
Subject: Add degenerate tests for curves with cofactor = 4.
---
src/cz/crcs/ectester/data/degenerate/cofactor.xml | 122 +++++++++++++++++++++
src/cz/crcs/ectester/data/degenerate/keys.xml | 2 +
src/cz/crcs/ectester/reader/ECTesterReader.java | 14 +--
.../ectester/reader/test/CardDegenerateSuite.java | 9 +-
4 files changed, 134 insertions(+), 13 deletions(-)
create mode 100644 src/cz/crcs/ectester/data/degenerate/cofactor.xml
diff --git a/src/cz/crcs/ectester/data/degenerate/cofactor.xml b/src/cz/crcs/ectester/data/degenerate/cofactor.xml
new file mode 100644
index 0000000..2ceaeb5
--- /dev/null
+++ b/src/cz/crcs/ectester/data/degenerate/cofactor.xml
@@ -0,0 +1,122 @@
+
+ cofactor128p4/0
+ 0x00000000000000000000000000000000,0x94d9020b666fbb599609485472a9246e
+ cofactor/cofactor128p4
+ degenerate order = 2
+
+
+ cofactor128p4/1
+ 0x00000000000000000000000000000000,0x2d3a81f8b8d96e6db96a04fb6cf432de
+ cofactor/cofactor128p4
+ degenerate order = 3
+
+
+ cofactor128p4/2
+ 0x00000000000000000000000000000000,0x639272497e0865cea0e17677b6bc5575
+ cofactor/cofactor128p4
+ degenerate order = 7
+
+
+ cofactor128p4/3
+ 0x00000000000000000000000000000000,0x072aba3ae7aeb770332600a630e503d1
+ cofactor/cofactor128p4
+ degenerate order = 5297
+
+
+ cofactor128p4/4
+ 0x00000000000000000000000000000000,0x17b45a35afdff5c5150a7c0a7ee34825
+ cofactor/cofactor128p4
+ degenerate order = 31134053800693
+
+
+ cofactor128p4/5
+ 0x00000000000000000000000000000000,0x6fd5d6e491bf5a15eb1d38554caad86c
+ cofactor/cofactor128p4
+ degenerate order = 28564500657606656383
+
+
+ cofactor128p4/gen
+ 0x00000000000000000000000000000000,0x00000000000000000000000000000005
+ cofactor/cofactor128p4
+ generator of Fp^*
+
+
+
+ cofactor160p4/0
+ 0x0000000000000000000000000000000000000000,0x93ab454ad26dae3b521d5b61a48c94cab3c4aa9c
+ cofactor/cofactor160p4
+ degenerate order = 2
+
+
+ cofactor160p4/1
+ 0x0000000000000000000000000000000000000000,0xbad87d0931716ec918e43e76b57971cc613e153
+ cofactor/cofactor160p4
+ degenerate order = 4
+
+
+ cofactor160p4/2
+ 0x0000000000000000000000000000000000000000,0x4428069aa7ac1865eb52c5b4c885ec832d89b36d
+ cofactor/cofactor160p4
+ degenerate order = 3
+
+
+ cofactor160p4/3
+ 0x0000000000000000000000000000000000000000,0x6eb71aefce923ebf8b07c6f1f59b1c30d43b74ae
+ cofactor/cofactor160p4
+ degenerate order = 23
+
+
+ cofactor160p4/4
+ 0x0000000000000000000000000000000000000000,0x3c5ff8c94b31b46f92575e0b77b0366afe24dfc1
+ cofactor/cofactor160p4
+ degenerate order = 11443
+
+
+ cofactor160p4/5
+ 0x0000000000000000000000000000000000000000,0xd8e2287382e057de70e1f45f70d8dad85d27025
+ cofactor/cofactor160p4
+ degenerate order = 352281613501590816479
+
+
+ cofactor160p4/5
+ 0x0000000000000000000000000000000000000000,0x36911d265f6d795a2efd10c20aae0f3ec5f815f4
+ cofactor/cofactor160p4
+ degenerate order = 757721821606925858951
+
+
+ cofactor160p4/gen
+ 0x0000000000000000000000000000000000000000,0x0000000000000000000000000000000000000002
+ cofactor/cofactor160p4
+ generator of Fp^*
+
+
+
+ cofactor192p4/0
+ 0x000000000000000000000000000000000000000000000000,0x8cceb84c81521937bef0925a3aaf09195a59c3f99ae06134
+ cofactor/cofactor192p4
+ degenerate order = 2
+
+
+ cofactor192p4/1
+ 0x000000000000000000000000000000000000000000000000,0x63ca4f21e0e4f6a833f914468e00e4d817f472d54aca5a64
+ cofactor/cofactor192p4
+ degenerate order = 4
+
+
+ cofactor192p4/2
+ 0x000000000000000000000000000000000000000000000000,0x7ce088c401bfc705e70da9928c04ed6e1bf100c26b253028
+ cofactor/cofactor192p4
+ degenerate order = 5
+
+
+ cofactor192p4/3
+ 0x000000000000000000000000000000000000000000000000,0x000000000000000000000000000000000000000000100000
+ cofactor/cofactor192p4
+ degenerate order = 172629492300688965054638881592440218548130640356589228457
+
+
+ cofactor192p4/gen
+ 0x000000000000000000000000000000000000000000000000,0x000000000000000000000000000000000000000000000002
+ cofactor/cofactor192p4
+ generator of Fp^*
+
diff --git a/src/cz/crcs/ectester/data/degenerate/keys.xml b/src/cz/crcs/ectester/data/degenerate/keys.xml
index b999ca0..498cf26 100644
--- a/src/cz/crcs/ectester/data/degenerate/keys.xml
+++ b/src/cz/crcs/ectester/data/degenerate/keys.xml
@@ -2,6 +2,7 @@
+
]>
@@ -11,4 +12,5 @@
-->
&secg;
&brainpool;
+ &cofactor;
\ No newline at end of file
diff --git a/src/cz/crcs/ectester/reader/ECTesterReader.java b/src/cz/crcs/ectester/reader/ECTesterReader.java
index fe44709..9f0d8cc 100644
--- a/src/cz/crcs/ectester/reader/ECTesterReader.java
+++ b/src/cz/crcs/ectester/reader/ECTesterReader.java
@@ -42,10 +42,6 @@ import cz.crcs.ectester.reader.test.*;
import javacard.framework.ISO7816;
import javacard.security.KeyPair;
import org.apache.commons.cli.*;
-import org.bouncycastle.asn1.ASN1Integer;
-import org.bouncycastle.asn1.ASN1StreamParser;
-import org.bouncycastle.asn1.DERSequence;
-import org.bouncycastle.asn1.DERSequenceParser;
import org.bouncycastle.jce.provider.BouncyCastleProvider;
import javax.smartcardio.CardException;
@@ -603,8 +599,8 @@ public class ECTesterReader {
Response.Export export = new Command.Export(cardManager, ECTesterApplet.KEYPAIR_BOTH, EC_Consts.KEY_BOTH, EC_Consts.PARAMETERS_KEYPAIR).send();
respWriter.outputResponse(export);
- byte pubkey_bytes[] = export.getParameter(pubkey, EC_Consts.PARAMETER_W);
- byte privkey_bytes[] = export.getParameter(privkey, EC_Consts.PARAMETER_S);
+ byte[] pubkey_bytes = export.getParameter(pubkey, EC_Consts.PARAMETER_W);
+ byte[] privkey_bytes = export.getParameter(privkey, EC_Consts.PARAMETER_S);
Response.ECDH perform = new Command.ECDH(cardManager, pubkey, privkey, ECTesterApplet.EXPORT_TRUE, EC_Consts.TRANSFORMATION_NONE, cfg.ECKAType).send();
respWriter.outputResponse(perform);
@@ -643,7 +639,7 @@ public class ECTesterReader {
*/
private void ecdsa() throws CardException, IOException {
//read file, if asked to sign
- byte[] data = null;
+ byte[] data;
if (cfg.input != null) {
File in = new File(cfg.input);
long len = in.length();
@@ -700,7 +696,7 @@ public class ECTesterReader {
Response.ECDSA sign = new Command.ECDSA_sign(cardManager, ECTesterApplet.KEYPAIR_LOCAL, cfg.ECDSAType, ECTesterApplet.EXPORT_TRUE, data).send();
respWriter.outputResponse(sign);
- if (!sign.successful() || ! sign.hasSignature()) {
+ if (!sign.successful() || !sign.hasSignature()) {
if (retry < 10) {
++retry;
continue;
@@ -737,7 +733,7 @@ public class ECTesterReader {
k = ByteUtil.bytesToHex(kValue.toByteArray(), false);
}
}
- out.write(String.format("%d;%d;%d;%s;%s;%s;%s;%s;%d\n", done, sign.getDuration() / 1000000, verify.getDuration() / 1000000, dataString, pub, priv, ByteUtil.bytesToHex(signature, false), k,verify.successful() ? 1 : 0));
+ out.write(String.format("%d;%d;%d;%s;%s;%s;%s;%s;%d\n", done, sign.getDuration() / 1000000, verify.getDuration() / 1000000, dataString, pub, priv, ByteUtil.bytesToHex(signature, false), k, verify.successful() ? 1 : 0));
}
++done;
diff --git a/src/cz/crcs/ectester/reader/test/CardDegenerateSuite.java b/src/cz/crcs/ectester/reader/test/CardDegenerateSuite.java
index f434d4d..87613fe 100644
--- a/src/cz/crcs/ectester/reader/test/CardDegenerateSuite.java
+++ b/src/cz/crcs/ectester/reader/test/CardDegenerateSuite.java
@@ -40,7 +40,7 @@ public class CardDegenerateSuite extends CardTestSuite {
Test set = CommandTest.expect(new Command.Set(this.card, ECTesterApplet.KEYPAIR_BOTH, EC_Consts.CURVE_external, curve.getParams(), curve.flatten()), Result.ExpectedValue.SUCCESS);
Test generate = CommandTest.expect(new Command.Generate(this.card, ECTesterApplet.KEYPAIR_LOCAL), Result.ExpectedValue.SUCCESS);
- Test prepare = CompoundTest.all(Result.ExpectedValue.SUCCESS, "Prepare and generate keypair on " + curve.getId(), allocate, set, generate);
+ Test prepare = CompoundTest.all(Result.ExpectedValue.SUCCESS, "Prepare and generate keypair on " + curve.getId() + ".", allocate, set, generate);
List ecdhTests = new LinkedList<>();
for (EC_Key.Public pub : keys) {
@@ -50,13 +50,14 @@ public class CardDegenerateSuite extends CardTestSuite {
Command ecdhCommand = new Command.ECDH_direct(this.card, ECTesterApplet.KEYPAIR_LOCAL, ECTesterApplet.EXPORT_FALSE, EC_Consts.TRANSFORMATION_NONE, EC_Consts.KeyAgreement_ALG_EC_SVDP_DH, pub.flatten());
Test rawEcdh = CommandTest.expect(ecdhCommand, Result.ExpectedValue.FAILURE, "Card correctly rejected point on degenerate curve.", "Card incorrectly accepted point on degenerate curve.");
ecdhTests.add(CompoundTest.all(Result.ExpectedValue.SUCCESS, pub.getId() + " degenerate key test.", objectEcdh, rawEcdh));
+ //TODO: actually get the result of ECDH here, as well as export privkey and compare to exponentiation in Fp^*.
}
- Test ecdh = CompoundTest.all(Result.ExpectedValue.SUCCESS, "Perform ECDH with degenerate public points", ecdhTests.toArray(new Test[0]));
+ Test ecdh = CompoundTest.all(Result.ExpectedValue.SUCCESS, "Perform ECDH with degenerate public points.", ecdhTests.toArray(new Test[0]));
if (cfg.cleanup) {
Test cleanup = CommandTest.expect(new Command.Cleanup(this.card), Result.ExpectedValue.ANY);
- doTest(CompoundTest.greedyAllTry(Result.ExpectedValue.SUCCESS, "Degenerate curve test of " + curve.getId(), prepare, ecdh, cleanup));
+ doTest(CompoundTest.greedyAllTry(Result.ExpectedValue.SUCCESS, "Degenerate curve test of " + curve.getId() + ".", prepare, ecdh, cleanup));
} else {
- doTest(CompoundTest.greedyAllTry(Result.ExpectedValue.SUCCESS, "Degenerate curve test of " + curve.getId(), prepare, ecdh));
+ doTest(CompoundTest.greedyAllTry(Result.ExpectedValue.SUCCESS, "Degenerate curve test of " + curve.getId() + ".", prepare, ecdh));
}
}
--
cgit v1.2.3-70-g09d2