aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJ08nY2024-08-02 18:39:54 +0200
committerJ08nY2024-08-02 18:39:54 +0200
commit6ed466cdeab999abd4c62a824106ab1078053934 (patch)
treeb0113eeb4451cb6639c58db1cae55301a1a04a94
parent6cb0cf8a66ede1f98cfeed323c028d0a2b825aef (diff)
downloadECTester-6ed466cdeab999abd4c62a824106ab1078053934.tar.gz
ECTester-6ed466cdeab999abd4c62a824106ab1078053934.tar.zst
ECTester-6ed466cdeab999abd4c62a824106ab1078053934.zip
-rw-r--r--common/src/main/java/cz/crcs/ectester/common/ec/EC_Curve.java3
-rw-r--r--common/src/main/java/cz/crcs/ectester/common/test/TestSuite.java2
-rw-r--r--standalone/src/main/java/cz/crcs/ectester/standalone/test/base/KeyGeneratorTest.java8
-rw-r--r--standalone/src/main/java/cz/crcs/ectester/standalone/test/suites/StandaloneForeignSuite.java125
4 files changed, 98 insertions, 40 deletions
diff --git a/common/src/main/java/cz/crcs/ectester/common/ec/EC_Curve.java b/common/src/main/java/cz/crcs/ectester/common/ec/EC_Curve.java
index acb822f..7147c18 100644
--- a/common/src/main/java/cz/crcs/ectester/common/ec/EC_Curve.java
+++ b/common/src/main/java/cz/crcs/ectester/common/ec/EC_Curve.java
@@ -64,9 +64,6 @@ public class EC_Curve extends EC_Params {
e1 = powers[0];
e2 = powers[1];
e3 = powers[2];
- System.err.println(e1);
- System.err.println(e2);
- System.err.println(e3);
if (e1 == 0 && e2 == 0) {
powers = new int[]{e3};
} else {
diff --git a/common/src/main/java/cz/crcs/ectester/common/test/TestSuite.java b/common/src/main/java/cz/crcs/ectester/common/test/TestSuite.java
index 091b008..0f2b1b0 100644
--- a/common/src/main/java/cz/crcs/ectester/common/test/TestSuite.java
+++ b/common/src/main/java/cz/crcs/ectester/common/test/TestSuite.java
@@ -53,7 +53,7 @@ public abstract class TestSuite {
* @return The test that was run.
* @throws TestException
*/
- protected <T extends Test> T runTest(T t) {
+ private <T extends Test> T runTest(T t) {
running = t;
writer.beginTest(t);
t.run();
diff --git a/standalone/src/main/java/cz/crcs/ectester/standalone/test/base/KeyGeneratorTest.java b/standalone/src/main/java/cz/crcs/ectester/standalone/test/base/KeyGeneratorTest.java
index 8c49224..f35741a 100644
--- a/standalone/src/main/java/cz/crcs/ectester/standalone/test/base/KeyGeneratorTest.java
+++ b/standalone/src/main/java/cz/crcs/ectester/standalone/test/base/KeyGeneratorTest.java
@@ -43,13 +43,13 @@ public class KeyGeneratorTest extends SimpleTest<KeyGeneratorTestable> {
public String getDescription() {
String params = "";
if (testable.getKeysize() != 0) {
- params = String.format("(default %d-bit curve)", testable.getKeysize());
+ params = String.format("on (default %d-bit curve)", testable.getKeysize());
} else if (testable.getSpec() instanceof ECGenParameterSpec) {
String name = ((ECGenParameterSpec)testable.getSpec()).getName();
- params = String.format("(%s)", name);
+ params = String.format("on (%s)", name);
} else if (testable.getSpec() instanceof ECParameterSpec) {
- params = "(custom curve)";
+ params = "on (custom curve)";
}
- return "KeyPairGenerator " + testable.getKpg().getAlgorithm() + " on " + params;
+ return "KeyPairGenerator " + testable.getKpg().getAlgorithm() + " " + params;
}
}
diff --git a/standalone/src/main/java/cz/crcs/ectester/standalone/test/suites/StandaloneForeignSuite.java b/standalone/src/main/java/cz/crcs/ectester/standalone/test/suites/StandaloneForeignSuite.java
index 7aebf23..21431ae 100644
--- a/standalone/src/main/java/cz/crcs/ectester/standalone/test/suites/StandaloneForeignSuite.java
+++ b/standalone/src/main/java/cz/crcs/ectester/standalone/test/suites/StandaloneForeignSuite.java
@@ -22,6 +22,7 @@ import java.security.KeyPair;
import java.security.KeyPairGenerator;
import java.security.interfaces.ECPrivateKey;
import java.security.interfaces.ECPublicKey;
+import java.security.spec.AlgorithmParameterSpec;
import java.security.spec.ECGenParameterSpec;
import java.security.spec.ECParameterSpec;
import java.util.*;
@@ -50,43 +51,103 @@ public abstract class StandaloneForeignSuite extends StandaloneTestSuite {
for (Map.Entry<EC_Curve, List<EC_Key.Public>> e : curveList.entrySet()) {
EC_Curve curve = e.getKey();
List<EC_Key.Public> keys = e.getValue();
+ ECPublicKey singlePkey = ECUtil.toPublicKey(keys.get(0));
KeyPairGenerator kpg = kpgIdent.getInstance(cfg.selected.getProvider());
ECParameterSpec spec = curve.toSpec();
+ ECGenParameterSpec namedSpec = new ECGenParameterSpec(curve.getId());
+
KeyGeneratorTestable kgt = new KeyGeneratorTestable(kpg, spec);
+ KeyGeneratorTestable kgtOnNamedCurve = new KeyGeneratorTestable(kpg, namedSpec);
+ KeyGeneratorTestable kgtOnDefaultCurve = new KeyGeneratorTestable(kpg, curve.getBits());
+
+ // This is some nasty hacking...
+ KeyGeneratorTestable theKgt = new KeyGeneratorTestable(kpg) {
+ private KeyGeneratorTestable current = null;
- Test generateSuccess;
- Test generate = KeyGeneratorTest.expectError(kgt, Result.ExpectedValue.ANY);
- runTest(generate);
- KeyPair kp = kgt.getKeyPair();
- if (kp != null) {
- generateSuccess = CompoundTest.all(Result.ExpectedValue.SUCCESS, "Generate keypair.", generate);
- } else {
- // If KeyPair generation fails, try generating it on named curve instead.
- ECGenParameterSpec namedSpec = new ECGenParameterSpec(curve.getId());
- KeyGeneratorTestable kgtOnNamedCurve = new KeyGeneratorTestable(kpg, namedSpec);
- Test generateOnNamedCurve = KeyGeneratorTest.expectError(kgtOnNamedCurve, Result.ExpectedValue.ANY);
- runTest(generateOnNamedCurve);
- kp = kgtOnNamedCurve.getKeyPair();
- if (kp != null) {
- generateSuccess = CompoundTest.all(Result.ExpectedValue.SUCCESS, "Generate keypair (named curve).", generateOnNamedCurve);
- } else {
- // If even the named curve generation fails, try generating with the default curve instead. Use this key only if it has the same domain parameters as our public key.
- KeyGeneratorTestable kgtOnDefaultCurve = new KeyGeneratorTestable(kpg, curve.getBits());
- Test generateOnDefaultCurve = KeyGeneratorTest.expectError(kgtOnDefaultCurve, Result.ExpectedValue.ANY);
- runTest(generateOnDefaultCurve);
- kp = kgtOnDefaultCurve.getKeyPair();
- if (kp != null && ECUtil.equalKeyPairParameters((ECPrivateKey) kp.getPrivate(), ECUtil.toPublicKey(keys.get(0)))) {
- generateSuccess = CompoundTest.all(Result.ExpectedValue.SUCCESS, "Generate keypair (default curve).", generateOnDefaultCurve);
- } else {
- Test generateNotEqual = CompoundTest.function(tests -> new Result(Result.Value.FAILURE, "Default parameters do not match the curve " + curve.getId()), "Default parameters do not match the curve " + curve.getId(), generateOnDefaultCurve);
- Test generateFail = CompoundTest.any(Result.ExpectedValue.SUCCESS, "Generating KeyPair has failed on " + curve.getId() + ". " + "KeyAgreement tests will be skipped.", generate, generateOnNamedCurve, generateNotEqual);
- doTest(CompoundTest.all(Result.ExpectedValue.SUCCESS, this.capName + " curve test of " + curve.getId() + ".", generateFail));
- continue;
+ @Override
+ public Exception getException() {
+ if (current != null) {
+ return current.getException();
}
+ return super.getException();
}
- }
- ECPrivateKey ecpriv = (ECPrivateKey) kp.getPrivate();
+
+ @Override
+ public KeyGeneratorStage getStage() {
+ if (current != null) {
+ return current.getStage();
+ }
+ return super.getStage();
+ }
+
+ @Override
+ public void run() {
+ stage = KeyGeneratorStage.Init;
+ kgt.run();
+ if (kgt.ok()) {
+ ok = true;
+ error = false;
+ current = kgt;
+ hasRun = true;
+ return;
+ }
+ kgtOnNamedCurve.run();
+ if (kgtOnNamedCurve.ok()) {
+ ok = true;
+ error = false;
+ current = kgtOnNamedCurve;
+ hasRun = true;
+ return;
+ }
+ kgtOnDefaultCurve.run();
+ if (kgtOnDefaultCurve.ok() && ECUtil.equalKeyPairParameters((ECPrivateKey) kgtOnDefaultCurve.getKeyPair().getPrivate(), singlePkey)) {
+ ok = true;
+ error = false;
+ current = kgtOnDefaultCurve;
+ hasRun = true;
+ }
+ }
+
+ @Override
+ public KeyPair getKeyPair() {
+ if (current != null) {
+ return current.getKeyPair();
+ }
+ return super.getKeyPair();
+ }
+
+ @Override
+ public KeyPairGenerator getKpg() {
+ if (current != null) {
+ return current.getKpg();
+ }
+ return super.getKpg();
+ }
+
+ @Override
+ public AlgorithmParameterSpec getSpec() {
+ if (current != null) {
+ return current.getSpec();
+ }
+ return super.getSpec();
+ }
+
+ @Override
+ public int getKeysize() {
+ if (current != null) {
+ return current.getKeysize();
+ }
+ return super.getKeysize();
+ }
+ };
+
+ Test generate = KeyGeneratorTest.expectError(kgt, Result.ExpectedValue.SUCCESS);
+ Test generateOnNamedCurve = KeyGeneratorTest.expectError(kgtOnNamedCurve, Result.ExpectedValue.SUCCESS);
+ Test generateOnDefaultCurve = KeyGeneratorTest.expectError(kgtOnDefaultCurve, Result.ExpectedValue.SUCCESS);
+ Test generateFinal = KeyGeneratorTest.expectError(theKgt, Result.ExpectedValue.SUCCESS);
+ //generate, generateOnNamedCurve, generateOnDefaultCurve,
+ Test generateAny = CompoundTest.all(Result.ExpectedValue.SUCCESS, "Generate a keypair on the standard curve.", generateFinal);
List<Test> allKaTests = new LinkedList<>();
for (KeyAgreementIdent kaIdent : cfg.selected.getKAs()) {
@@ -95,7 +156,7 @@ public abstract class StandaloneForeignSuite extends StandaloneTestSuite {
for (EC_Key.Public pub : keys) {
ECPublicKey ecpub = ECUtil.toPublicKey(pub);
KeyAgreement ka = kaIdent.getInstance(cfg.selected.getProvider());
- KeyAgreementTestable testable = new KeyAgreementTestable(ka, ecpriv, ecpub);
+ KeyAgreementTestable testable = new KeyAgreementTestable(ka, ecpub, theKgt);
Test keyAgreement = KeyAgreementTest.expectError(testable, Result.ExpectedValue.FAILURE);
specificKaTests.add(CompoundTest.all(Result.ExpectedValue.SUCCESS, pub.getId() + " invalid key test.", keyAgreement));
}
@@ -106,7 +167,7 @@ public abstract class StandaloneForeignSuite extends StandaloneTestSuite {
allKaTests.add(CompoundTest.all(Result.ExpectedValue.SUCCESS, "None of the specified key agreement types is supported by the library."));
}
Test tests = CompoundTest.all(Result.ExpectedValue.SUCCESS, "Do tests.", allKaTests.toArray(new Test[0]));
- doTest(CompoundTest.greedyAllTry(Result.ExpectedValue.SUCCESS, this.capName + " curve test of " + curve.getId() + ".", generateSuccess, tests));
+ doTest(CompoundTest.greedyAllTry(Result.ExpectedValue.SUCCESS, this.capName + " curve test of " + curve.getId() + ".", generateAny, tests));
}
}
}