From 25201922f403b18b01962f8154263d74fbfe2651 Mon Sep 17 00:00:00 2001 From: davidhofman Date: Thu, 26 Aug 2021 00:14:16 +0200 Subject: Implement StandaloneSignatureSuite. (#10) * Add StandaloneSignatureSuite. * Implement StandaloneSignatureSuite. * Change the new constructor in SignatureTestable. * Add author information to StandaloneSignatureSuite. * Change tests to expectError. * Add guard condition to verify stages in SignatureTestable. * Change the new constructor in SignatureTestable.--- .../ectester/standalone/ECTesterStandalone.java | 4 + .../standalone/test/base/SignatureTestable.java | 107 ++++++++++++--------- .../test/suites/StandaloneSignatureSuite.java | 87 +++++++++++++++++ 3 files changed, 151 insertions(+), 47 deletions(-) create mode 100644 src/cz/crcs/ectester/standalone/test/suites/StandaloneSignatureSuite.java (limited to 'src') diff --git a/src/cz/crcs/ectester/standalone/ECTesterStandalone.java b/src/cz/crcs/ectester/standalone/ECTesterStandalone.java index 55f264b..1be0df4 100644 --- a/src/cz/crcs/ectester/standalone/ECTesterStandalone.java +++ b/src/cz/crcs/ectester/standalone/ECTesterStandalone.java @@ -316,6 +316,7 @@ public class ECTesterStandalone { new StandaloneInvalidSuite(null, null, null), new StandaloneDegenerateSuite(null, null, null), new StandaloneCofactorSuite(null, null, null), + new StandaloneSignatureSuite(null, null, null), new StandaloneCompositeSuite(null, null, null), new StandaloneTwistSuite(null, null, null), new StandaloneMiscSuite(null, null, null)}; @@ -764,6 +765,9 @@ public class ECTesterStandalone { case "invalid": suite = new StandaloneInvalidSuite(writer, cfg, cli); break; + case "signature": + suite = new StandaloneSignatureSuite(writer, cfg, cli); + break; case "twist": suite = new StandaloneTwistSuite(writer, cfg, cli); break; diff --git a/src/cz/crcs/ectester/standalone/test/base/SignatureTestable.java b/src/cz/crcs/ectester/standalone/test/base/SignatureTestable.java index b8db7b8..fe81b10 100644 --- a/src/cz/crcs/ectester/standalone/test/base/SignatureTestable.java +++ b/src/cz/crcs/ectester/standalone/test/base/SignatureTestable.java @@ -31,8 +31,15 @@ public class SignatureTestable extends StandaloneTestable sigIdentOpt = cfg.selected.getSigs().stream() + .filter((ident) -> ident.contains("ECDSA")) + .findFirst(); + if (sigIdentOpt.isPresent()) { + sigIdent = sigIdentOpt.get(); + } else { + System.err.println("The default Signature algorithm type of \"ECDSA\" was not found. Need to specify a type."); + return; + } + } else { + // try the specified, if not, fail with: wrong sig algo/not found. + Optional sigIdentOpt = cfg.selected.getSigs().stream() + .filter((ident) -> ident.contains(sigAlgo)) + .findFirst(); + if (sigIdentOpt.isPresent()) { + sigIdent = sigIdentOpt.get(); + } else { + System.err.println("The Signature algorithm type of \"" + sigAlgo + "\" was not found."); + return; + } + } + + Map results = EC_Store.getInstance().getObjects(EC_SigResult.class, "wrong"); + Map> groups = EC_Store.mapToPrefix(results.values()); + + List nok = groups.entrySet().stream().filter((e) -> e.getKey().equals("nok")).findFirst().get().getValue(); + + byte[] data = "Some stuff that is not the actual data".getBytes(); + for (EC_SigResult sig : nok) { + ecdsaTest(sig, sigIdent, Result.ExpectedValue.FAILURE, data); + } + + List ok = groups.entrySet().stream().filter((e) -> e.getKey().equals("ok")).findFirst().get().getValue(); + for (EC_SigResult sig : ok) { + ecdsaTest(sig, sigIdent, Result.ExpectedValue.SUCCESS, null); + } + } + + private void ecdsaTest(EC_SigResult sig, SignatureIdent sigIdent, Result.ExpectedValue expected, byte[] defaultData) throws NoSuchAlgorithmException { + ECPublicKey ecpub = ECUtil.toPublicKey(EC_Store.getInstance().getObject(EC_Key.Public.class, sig.getVerifyKey())); + + byte[] data = sig.getSigData(); + if (data == null) { + data = defaultData; + } + + Signature signature = sigIdent.getInstance(cfg.selected.getProvider()); + SignatureTestable testable = new SignatureTestable(signature, ecpub, data, sig.getData(0)); + doTest(CompoundTest.all(Result.ExpectedValue.SUCCESS, "ECDSA test of " + sig.getId() + ".", SignatureTest.expectError(testable, expected))); + } +} -- cgit v1.3.1