blob: 83a9dc940494c411e65b8b1e46ce129af833452d (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
|
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 abstract class ProviderECLibrary implements ECLibrary {
Provider provider;
private boolean initialized = false;
public ProviderECLibrary() {
}
public ProviderECLibrary(Provider provider) {
this.provider = provider;
}
@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 <T extends Ident> Set<T> getIdents(String type, Function<String, T> getter) {
Set<T> 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;
}
public boolean supportsNativeTiming() {
return false;
}
public long getNativeTimingResolution() {
return 0;
}
public long getLastNativeTiming() {
return 0;
}
@Override
public Set<KeyAgreementIdent> getKAs() {
return getIdents("KeyAgreement", KeyAgreementIdent::get);
}
@Override
public Set<SignatureIdent> getSigs() {
return getIdents("Signature", SignatureIdent::get);
}
@Override
public Set<KeyPairGeneratorIdent> getKPGs() {
return getIdents("KeyPairGenerator", KeyPairGeneratorIdent::get);
}
@Override
public String name() {
return provider.getInfo();
}
public Provider getProvider() {
return provider;
}
@Override
public String toString() {
return name();
}
}
|