1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 package io.netty.pkitesting;
17
18 import org.bouncycastle.jce.provider.BouncyCastleProvider;
19
20 import java.security.GeneralSecurityException;
21 import java.security.KeyPairGenerator;
22 import java.security.NoSuchAlgorithmException;
23 import java.security.Provider;
24 import java.security.SecureRandom;
25 import java.security.Signature;
26 import java.security.spec.AlgorithmParameterSpec;
27 import java.util.Locale;
28
29 final class Algorithms {
30 private static Provider bouncyCastle;
31
32 private Algorithms() {
33 }
34
35 static String oidForAlgorithmName(String algorithmIdentifier) {
36
37
38 switch (algorithmIdentifier.toLowerCase(Locale.ROOT)) {
39 case "sha256withecdsa":
40 return "1.2.840.10045.4.3.2";
41 case "sha384withecdsa":
42 return "1.2.840.10045.4.3.3";
43 case "sha256withrsa":
44 return "1.2.840.113549.1.1.11";
45 case "sha384withrsa":
46 return "1.2.840.113549.1.1.12";
47 case "ed25519":
48 return "1.3.101.112";
49 case "ed448":
50 return "1.3.101.113";
51 default:
52 throw new UnsupportedOperationException("Algorithm not supported: " + algorithmIdentifier);
53 }
54 }
55
56 static KeyPairGenerator keyPairGenerator(String keyType, AlgorithmParameterSpec spec, SecureRandom rng)
57 throws GeneralSecurityException {
58 try {
59 KeyPairGenerator keyGen = KeyPairGenerator.getInstance(keyType);
60 keyGen.initialize(spec, rng);
61 return keyGen;
62 } catch (GeneralSecurityException e) {
63 try {
64 KeyPairGenerator keyGen = KeyPairGenerator.getInstance(keyType, bouncyCastle());
65 keyGen.initialize(spec, rng);
66 return keyGen;
67 } catch (GeneralSecurityException ex) {
68 e.addSuppressed(ex);
69 }
70 throw e;
71 }
72 }
73
74 static Signature signature(String algorithmIdentifier) throws NoSuchAlgorithmException {
75 try {
76 return Signature.getInstance(algorithmIdentifier);
77 } catch (NoSuchAlgorithmException e) {
78 try {
79 return Signature.getInstance(algorithmIdentifier, bouncyCastle());
80 } catch (NoSuchAlgorithmException ex) {
81 e.addSuppressed(ex);
82 }
83 throw e;
84 }
85 }
86
87 private static synchronized Provider bouncyCastle() {
88 if (bouncyCastle == null) {
89 bouncyCastle = new BouncyCastleProvider();
90 }
91 return bouncyCastle;
92 }
93 }