1 package civitas.crypto;
2
3 import java.security.KeyPairGenerator;
4 import java.util.HashMap;
5 import java.util.Map;
6
7 import org.springframework.stereotype.Service;
8
9 @Service
10 public class GetPublicKeyGeneratorService implements Constants {
11 private final Map<String, KeyPairGenerator> publicKeyGenerators = new HashMap<>();
12
13 public KeyPairGenerator apply(final int keyLength) {
14 String genKey = String.valueOf(keyLength);
15 KeyPairGenerator g = publicKeyGenerators.get(genKey);
16 if (g != null) {
17 return g;
18 }
19 try {
20 g = KeyPairGenerator.getInstance(PUBLIC_KEY_ALG, PUBLIC_KEY_PROVIDER);
21 g.initialize(keyLength);
22 publicKeyGenerators.put(genKey, g);
23 return g;
24 } catch (Exception impossible) {
25 throw new CryptoError(impossible);
26 }
27 }
28 }