From 9bce1e13ec136c06650868acf3438e789e366d5f Mon Sep 17 00:00:00 2001 From: J08nY Date: Mon, 27 Nov 2017 23:19:48 +0100 Subject: Add a basic NativeECLibrary interface. --- .../standalone/libs/ProviderECLibrary.java | 90 ++++++++++++++++++++++ 1 file changed, 90 insertions(+) create mode 100644 src/cz/crcs/ectester/standalone/libs/ProviderECLibrary.java (limited to 'src/cz/crcs/ectester/standalone/libs/ProviderECLibrary.java') diff --git a/src/cz/crcs/ectester/standalone/libs/ProviderECLibrary.java b/src/cz/crcs/ectester/standalone/libs/ProviderECLibrary.java new file mode 100644 index 0000000..879cc16 --- /dev/null +++ b/src/cz/crcs/ectester/standalone/libs/ProviderECLibrary.java @@ -0,0 +1,90 @@ +package cz.crcs.ectester.standalone.libs; + +import cz.crcs.ectester.standalone.consts.Ident; +import cz.crcs.ectester.standalone.consts.KeyAgreementIdent; +import cz.crcs.ectester.standalone.consts.KeyPairGeneratorIdent; +import cz.crcs.ectester.standalone.consts.SignatureIdent; + +import java.security.Provider; +import java.security.Security; +import java.util.HashSet; +import java.util.Set; +import java.util.function.Function; + +/** + * @author Jan Jancar johny@neuromancer.sk + */ +public class ProviderECLibrary implements ECLibrary { + private Provider provider; + private boolean initialized; + + public ProviderECLibrary(Provider provider) { + this.provider = provider; + this.initialized = false; + } + + @Override + public boolean initialize() { + try { + int result = Security.addProvider(provider); + if (result == -1) { + provider = Security.getProvider(provider.getName()); + } + initialized = true; + } catch (NullPointerException | SecurityException ignored) { + initialized = false; + } + return initialized; + } + + @Override + public boolean isInitialized() { + return initialized; + } + + private Set getIdents(String type, Function getter) { + Set results = new HashSet<>(); + if (!initialized) { + return results; + } + + for (Provider.Service service : provider.getServices()) { + if (service.getType().equals(type)) { + T id = getter.apply(service.getAlgorithm()); + if (id != null) { + results.add(id); + } + } + } + return results; + } + + @Override + public Set getECKAs() { + return getIdents("KeyAgreement", KeyAgreementIdent::get); + } + + @Override + public Set getECSigs() { + return getIdents("Signature", SignatureIdent::get); + } + + @Override + public Set getKPGs() { + return getIdents("KeyPairGenerator", KeyPairGeneratorIdent::get); + } + + @Override + public String name() { + return provider.getInfo(); + } + + public Provider getProvider() { + return provider; + } + + @Override + public String toString() { + return name(); + } +} -- cgit v1.2.3-70-g09d2