From 2279aef8b7c00ba2bb71fdedae77ae4a47b00fc6 Mon Sep 17 00:00:00 2001 From: J08nY Date: Sun, 26 Nov 2017 19:19:40 +0100 Subject: Make sure the SPI by the intended provider is always used. - JCA implements failover in its Delegates(classes between a Service and its SPI), which catches RuntimeExceptions and changes to another SPI by possibly another provider, we do not want this to happen. There is no public API for disabling this, however calling .getProvider() on a Service fixates the provider to the returned one. --- .../crcs/ectester/common/cli/TreeCommandLine.java | 2 +- .../ectester/standalone/ECTesterStandalone.java | 77 ++++++++++++++-------- .../standalone/consts/KeyAgreementIdent.java | 4 +- .../standalone/consts/KeyPairGeneratorIdent.java | 4 +- .../ectester/standalone/consts/SignatureIdent.java | 4 +- 5 files changed, 60 insertions(+), 31 deletions(-) (limited to 'src') diff --git a/src/cz/crcs/ectester/common/cli/TreeCommandLine.java b/src/cz/crcs/ectester/common/cli/TreeCommandLine.java index 7de6ef1..6a044d2 100644 --- a/src/cz/crcs/ectester/common/cli/TreeCommandLine.java +++ b/src/cz/crcs/ectester/common/cli/TreeCommandLine.java @@ -89,7 +89,7 @@ public class TreeCommandLine extends CommandLine { @Override public Object getParsedOptionValue(String opt) throws ParseException { if (opt.contains(".")) { - String[] parts = opt.split(".", 2); + String[] parts = opt.split("\\.", 2); if (next != null && parts[0].equals(next.getName())) { return next.getParsedOptionValue(parts[1]); } diff --git a/src/cz/crcs/ectester/standalone/ECTesterStandalone.java b/src/cz/crcs/ectester/standalone/ECTesterStandalone.java index a2c52fc..741d81e 100644 --- a/src/cz/crcs/ectester/standalone/ECTesterStandalone.java +++ b/src/cz/crcs/ectester/standalone/ECTesterStandalone.java @@ -64,11 +64,6 @@ public class ECTesterStandalone { } dataStore = new EC_Store(); - if (cli.hasOption("list-named")) { - CLITools.listNamed(dataStore, cli.getOptionValue("list-named")); - return; - } - for (ECLibrary lib : libs) { lib.initialize(); } @@ -78,15 +73,15 @@ public class ECTesterStandalone { } else if (cli.isNext("list-data")) { CLITools.listNamed(dataStore, cli.getNext().getArg(0)); } else if (cli.isNext("ecdh")) { - + ecdh(); } else if (cli.isNext("ecdsa")) { - + ecdsa(); } else if (cli.isNext("generate")) { generate(); } else if (cli.isNext("test")) { - + test(); } else if (cli.isNext("export")) { - + export(); } } catch (ParseException | NoSuchAlgorithmException | IOException ex) { @@ -145,6 +140,43 @@ public class ECTesterStandalone { return optParser.parse(opts, args); } + /** + * + */ + private void listLibraries() { + for (ECLibrary lib : libs) { + if (lib.isInitialized() && (cfg.selected == null || lib == cfg.selected)) { + System.out.println("\t- " + lib.name()); + Set kpgs = lib.getKPGs(); + if (!kpgs.isEmpty()) { + System.out.println("\t\t- KeyPairGenerators: " + String.join(",", kpgs.stream().map(KeyPairGeneratorIdent::getName).collect(Collectors.toList()))); + } + Set eckas = lib.getECKAs(); + if (!eckas.isEmpty()) { + System.out.println("\t\t- KeyAgreements: " + String.join(",", eckas.stream().map(KeyAgreementIdent::getName).collect(Collectors.toList()))); + } + Set sigs = lib.getECSigs(); + if (!eckas.isEmpty()) { + System.out.println("\t\t- Signatures: " + String.join(",", sigs.stream().map(SignatureIdent::getName).collect(Collectors.toList()))); + } + } + } + } + + /** + * + */ + private void ecdh() { + + } + + /** + * + */ + private void ecdsa() { + + } + /** * */ @@ -192,24 +224,15 @@ public class ECTesterStandalone { /** * */ - private void listLibraries() { - for (ECLibrary lib : libs) { - if (lib.isInitialized() && (cfg.selected == null || lib == cfg.selected)) { - System.out.println("\t- " + lib.name()); - Set kpgs = lib.getKPGs(); - if (!kpgs.isEmpty()) { - System.out.println("\t\t- KeyPairGenerators: " + String.join(",", kpgs.stream().map(KeyPairGeneratorIdent::getName).collect(Collectors.toList()))); - } - Set eckas = lib.getECKAs(); - if (!eckas.isEmpty()) { - System.out.println("\t\t- KeyAgreements: " + String.join(",", eckas.stream().map(KeyAgreementIdent::getName).collect(Collectors.toList()))); - } - Set sigs = lib.getECSigs(); - if (!eckas.isEmpty()) { - System.out.println("\t\t- Signatures: " + String.join(",", sigs.stream().map(SignatureIdent::getName).collect(Collectors.toList()))); - } - } - } + private void test() { + + } + + /** + * + */ + private void export() { + } public static void main(String[] args) { diff --git a/src/cz/crcs/ectester/standalone/consts/KeyAgreementIdent.java b/src/cz/crcs/ectester/standalone/consts/KeyAgreementIdent.java index 22b03a4..c0d1e27 100644 --- a/src/cz/crcs/ectester/standalone/consts/KeyAgreementIdent.java +++ b/src/cz/crcs/ectester/standalone/consts/KeyAgreementIdent.java @@ -55,6 +55,8 @@ public class KeyAgreementIdent extends Ident { } public KeyAgreement getInstance(Provider provider) throws NoSuchAlgorithmException { - return KeyAgreement.getInstance(name, provider); + KeyAgreement instance = KeyAgreement.getInstance(name, provider); + instance.getProvider(); + return instance; } } diff --git a/src/cz/crcs/ectester/standalone/consts/KeyPairGeneratorIdent.java b/src/cz/crcs/ectester/standalone/consts/KeyPairGeneratorIdent.java index f806282..d0526f7 100644 --- a/src/cz/crcs/ectester/standalone/consts/KeyPairGeneratorIdent.java +++ b/src/cz/crcs/ectester/standalone/consts/KeyPairGeneratorIdent.java @@ -31,6 +31,8 @@ public class KeyPairGeneratorIdent extends Ident { } public KeyPairGenerator getInstance(Provider provider) throws NoSuchAlgorithmException { - return KeyPairGenerator.getInstance(name, provider); + KeyPairGenerator instance = KeyPairGenerator.getInstance(name, provider); + instance.getProvider(); + return instance; } } diff --git a/src/cz/crcs/ectester/standalone/consts/SignatureIdent.java b/src/cz/crcs/ectester/standalone/consts/SignatureIdent.java index dc554e2..c027bf1 100644 --- a/src/cz/crcs/ectester/standalone/consts/SignatureIdent.java +++ b/src/cz/crcs/ectester/standalone/consts/SignatureIdent.java @@ -79,6 +79,8 @@ public class SignatureIdent extends Ident { } public Signature getInstance(Provider provider) throws NoSuchAlgorithmException { - return Signature.getInstance(name, provider); + Signature instance = Signature.getInstance(name, provider); + instance.getProvider(); + return instance; } } -- cgit v1.2.3-70-g09d2