aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/cz/crcs/ectester/common/util/ECUtil.java10
-rw-r--r--src/cz/crcs/ectester/standalone/test/suites/StandaloneDegenerateSuite.java20
-rw-r--r--src/cz/crcs/ectester/standalone/test/suites/StandaloneEdgeCasesSuite.java2
-rw-r--r--src/cz/crcs/ectester/standalone/test/suites/StandaloneInvalidSuite.java20
-rw-r--r--src/cz/crcs/ectester/standalone/test/suites/StandaloneTestVectorSuite.java5
-rw-r--r--src/cz/crcs/ectester/standalone/test/suites/StandaloneTwistSuite.java20
6 files changed, 58 insertions, 19 deletions
diff --git a/src/cz/crcs/ectester/common/util/ECUtil.java b/src/cz/crcs/ectester/common/util/ECUtil.java
index ccc6c48..e047439 100644
--- a/src/cz/crcs/ectester/common/util/ECUtil.java
+++ b/src/cz/crcs/ectester/common/util/ECUtil.java
@@ -461,5 +461,13 @@ public class ECUtil {
return null;
}
-
+ public static boolean equalKeyPairParameters(ECPrivateKey priv, ECPublicKey pub) {
+ if(priv == null || pub == null) {
+ return false;
+ }
+ return priv.getParams().getCurve().equals(pub.getParams().getCurve()) &&
+ priv.getParams().getCofactor() == pub.getParams().getCofactor() &&
+ priv.getParams().getGenerator().equals(pub.getParams().getGenerator()) &&
+ priv.getParams().getOrder().equals(pub.getParams().getOrder());
+ }
}
diff --git a/src/cz/crcs/ectester/standalone/test/suites/StandaloneDegenerateSuite.java b/src/cz/crcs/ectester/standalone/test/suites/StandaloneDegenerateSuite.java
index b7e6f33..9ab8a39 100644
--- a/src/cz/crcs/ectester/standalone/test/suites/StandaloneDegenerateSuite.java
+++ b/src/cz/crcs/ectester/standalone/test/suites/StandaloneDegenerateSuite.java
@@ -76,15 +76,25 @@ public class StandaloneDegenerateSuite extends StandaloneTestSuite {
ECParameterSpec spec = curve.toSpec();
KeyGeneratorTestable kgt = new KeyGeneratorTestable(kpg, spec);
+ Test generateSuccess;
Test generate = KeyGeneratorTest.expectError(kgt, Result.ExpectedValue.ANY);
runTest(generate);
KeyPair kp = kgt.getKeyPair();
- if(kp == null) {
- Test generateFail = CompoundTest.all(Result.ExpectedValue.SUCCESS, "Generating KeyPair has failed on " + curve.getId() + ". " + "KeyAgreement tests will be skipped.", generate);
- doTest(CompoundTest.all(Result.ExpectedValue.SUCCESS, "Degenerate curve test of " + curve.getId() + ".", generateFail));
- continue;
+ if(kp != null) {
+ generateSuccess = CompoundTest.all(Result.ExpectedValue.SUCCESS, "Generate keypair.", generate);
+ } else { //If KeyPair generation fails, try generating it on a 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.", generateOnDefaultCurve);
+ } else {
+ Test generateFail = CompoundTest.all(Result.ExpectedValue.SUCCESS, "Generating KeyPair has failed on " + curve.getId() + ". " + "KeyAgreement tests will be skipped.", generate);
+ doTest(CompoundTest.all(Result.ExpectedValue.SUCCESS, "Degenerate curve test of " + curve.getId() + ".", generateFail));
+ continue;
+ }
}
- Test generateSuccess = CompoundTest.all(Result.ExpectedValue.SUCCESS, "Generate keypair.", generate);
ECPrivateKey ecpriv = (ECPrivateKey) kp.getPrivate();
List<Test> allKaTests = new LinkedList<>();
diff --git a/src/cz/crcs/ectester/standalone/test/suites/StandaloneEdgeCasesSuite.java b/src/cz/crcs/ectester/standalone/test/suites/StandaloneEdgeCasesSuite.java
index f84bedc..3624aaa 100644
--- a/src/cz/crcs/ectester/standalone/test/suites/StandaloneEdgeCasesSuite.java
+++ b/src/cz/crcs/ectester/standalone/test/suites/StandaloneEdgeCasesSuite.java
@@ -271,7 +271,7 @@ public class StandaloneEdgeCasesSuite extends StandaloneTestSuite {
if(kp == null) {
Test generateFail = CompoundTest.all(Result.ExpectedValue.SUCCESS, "Generating KeyPair has failed on "
+ secp160r1.getBits() + "b secp160r1." + " Other tests will be skipped.", generate);
- doTest(CompoundTest.all(Result.ExpectedValue.SUCCESS, "Test private key values near zero, near p and near/larger than the order." + secp160r1.getId() + ".", generateFail));
+ doTest(CompoundTest.all(Result.ExpectedValue.SUCCESS, "Test private key values near zero, near p and near/larger than the order on" + secp160r1.getId() + ".", generateFail));
return;
}
Test generateSuccess = CompoundTest.all(Result.ExpectedValue.SUCCESS, "Generate KeyPair.", generate);
diff --git a/src/cz/crcs/ectester/standalone/test/suites/StandaloneInvalidSuite.java b/src/cz/crcs/ectester/standalone/test/suites/StandaloneInvalidSuite.java
index 84c3085..ace8945 100644
--- a/src/cz/crcs/ectester/standalone/test/suites/StandaloneInvalidSuite.java
+++ b/src/cz/crcs/ectester/standalone/test/suites/StandaloneInvalidSuite.java
@@ -75,15 +75,25 @@ public class StandaloneInvalidSuite extends StandaloneTestSuite {
ECParameterSpec spec = curve.toSpec();
KeyGeneratorTestable kgt = new KeyGeneratorTestable(kpg, spec);
+ Test generateSuccess;
Test generate = KeyGeneratorTest.expectError(kgt, Result.ExpectedValue.ANY);
runTest(generate);
KeyPair kp = kgt.getKeyPair();
- if(kp == null) {
- Test generateFail = CompoundTest.all(Result.ExpectedValue.SUCCESS, "Generating KeyPair has failed on " + curve.getId() + ". " + "KeyAgreement tests will be skipped.", generate);
- doTest(CompoundTest.all(Result.ExpectedValue.SUCCESS, "Invalid curve test of " + curve.getId() + ".", generateFail));
- continue;
+ if(kp != null) {
+ generateSuccess = CompoundTest.all(Result.ExpectedValue.SUCCESS, "Generate keypair.", generate);
+ } else { //If KeyPair generation fails, try generating it on a 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.", generateOnDefaultCurve);
+ } else {
+ Test generateFail = CompoundTest.all(Result.ExpectedValue.SUCCESS, "Generating KeyPair has failed on " + curve.getId() + ". " + "KeyAgreement tests will be skipped.", generate);
+ doTest(CompoundTest.all(Result.ExpectedValue.SUCCESS, "Invalid curve test of " + curve.getId() + ".", generateFail));
+ continue;
+ }
}
- Test generateSuccess = CompoundTest.all(Result.ExpectedValue.SUCCESS, "Generate keypair.", generate);
ECPrivateKey ecpriv = (ECPrivateKey) kp.getPrivate();
List<Test> allKaTests = new LinkedList<>();
diff --git a/src/cz/crcs/ectester/standalone/test/suites/StandaloneTestVectorSuite.java b/src/cz/crcs/ectester/standalone/test/suites/StandaloneTestVectorSuite.java
index 2b43464..1e1889c 100644
--- a/src/cz/crcs/ectester/standalone/test/suites/StandaloneTestVectorSuite.java
+++ b/src/cz/crcs/ectester/standalone/test/suites/StandaloneTestVectorSuite.java
@@ -3,6 +3,8 @@ package cz.crcs.ectester.standalone.test.suites;
import cz.crcs.ectester.common.cli.TreeCommandLine;
import cz.crcs.ectester.common.ec.*;
import cz.crcs.ectester.common.output.TestWriter;
+import cz.crcs.ectester.common.test.CompoundTest;
+import cz.crcs.ectester.common.test.Result;
import cz.crcs.ectester.common.util.ECUtil;
import cz.crcs.ectester.data.EC_Store;
import cz.crcs.ectester.standalone.ECTesterStandalone;
@@ -29,7 +31,6 @@ public class StandaloneTestVectorSuite extends StandaloneTestSuite {
protected void runTests() throws Exception {
Map<String, EC_KAResult> results = EC_Store.getInstance().getObjects(EC_KAResult.class, "test");
for (EC_KAResult result : results.values()) {
-
if(!"DH_PLAIN".equals(result.getKA())) {
continue;
}
@@ -56,7 +57,7 @@ public class StandaloneTestVectorSuite extends StandaloneTestSuite {
KeyAgreementIdent kaIdent = KeyAgreementIdent.get("ECDH");
KeyAgreement ka = kaIdent.getInstance(cfg.selected.getProvider());
KeyAgreementTestable testable = new KeyAgreementTestable(ka, privkey, pubkey);
- doTest(KeyAgreementTest.match(testable, result.getData(0)));
+ doTest(CompoundTest.all(Result.ExpectedValue.SUCCESS, "Test vector " + result.getId(), KeyAgreementTest.match(testable, result.getData(0))));
}
}
}
diff --git a/src/cz/crcs/ectester/standalone/test/suites/StandaloneTwistSuite.java b/src/cz/crcs/ectester/standalone/test/suites/StandaloneTwistSuite.java
index 2b72ce6..f182952 100644
--- a/src/cz/crcs/ectester/standalone/test/suites/StandaloneTwistSuite.java
+++ b/src/cz/crcs/ectester/standalone/test/suites/StandaloneTwistSuite.java
@@ -75,15 +75,25 @@ public class StandaloneTwistSuite extends StandaloneTestSuite {
ECParameterSpec spec = curve.toSpec();
KeyGeneratorTestable kgt = new KeyGeneratorTestable(kpg, spec);
+ Test generateSuccess;
Test generate = KeyGeneratorTest.expectError(kgt, Result.ExpectedValue.ANY);
runTest(generate);
KeyPair kp = kgt.getKeyPair();
- if(kp == null) {
- Test generateFail = CompoundTest.all(Result.ExpectedValue.SUCCESS, "Generating KeyPair has failed on " + curve.getId() + ". " + "KeyAgreement tests will be skipped.", generate);
- doTest(CompoundTest.all(Result.ExpectedValue.SUCCESS, "Twist test of " + curve.getId() + ".", generateFail));
- continue;
+ if(kp != null) {
+ generateSuccess = CompoundTest.all(Result.ExpectedValue.SUCCESS, "Generate keypair.", generate);
+ } else { //If KeyPair generation fails, try generating it on a 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.", generateOnDefaultCurve);
+ } else {
+ Test generateFail = CompoundTest.all(Result.ExpectedValue.SUCCESS, "Generating KeyPair has failed on " + curve.getId() + ". " + "KeyAgreement tests will be skipped.", generate);
+ doTest(CompoundTest.all(Result.ExpectedValue.SUCCESS, "Twist test of " + curve.getId() + ".", generateFail));
+ continue;
+ }
}
- Test generateSuccess = CompoundTest.all(Result.ExpectedValue.SUCCESS, "Generate keypair.", generate);
ECPrivateKey ecpriv = (ECPrivateKey) kp.getPrivate();
List<Test> allKaTests = new LinkedList<>();