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 case "ml-dsa-44":
52 return "2.16.840.1.101.3.4.3.17";
53 case "ml-dsa-65":
54 return "2.16.840.1.101.3.4.3.18";
55 case "ml-dsa-87":
56 return "2.16.840.1.101.3.4.3.19";
57 default:
58 throw new UnsupportedOperationException("Algorithm not supported: " + algorithmIdentifier);
59 }
60 }
61
62 static KeyPairGenerator keyPairGenerator(String keyType, AlgorithmParameterSpec spec, SecureRandom rng)
63 throws GeneralSecurityException {
64 try {
65 KeyPairGenerator keyGen = KeyPairGenerator.getInstance(keyType);
66 keyGen.initialize(spec, rng);
67 return keyGen;
68 } catch (GeneralSecurityException e) {
69 try {
70 KeyPairGenerator keyGen = KeyPairGenerator.getInstance(keyType, bouncyCastle());
71 keyGen.initialize(spec, rng);
72 return keyGen;
73 } catch (GeneralSecurityException ex) {
74 e.addSuppressed(ex);
75 }
76 throw e;
77 }
78 }
79
80 static Signature signature(String algorithmIdentifier) throws NoSuchAlgorithmException {
81 try {
82 return Signature.getInstance(algorithmIdentifier);
83 } catch (NoSuchAlgorithmException e) {
84 try {
85 return Signature.getInstance(algorithmIdentifier, bouncyCastle());
86 } catch (NoSuchAlgorithmException ex) {
87 e.addSuppressed(ex);
88 }
89 throw e;
90 }
91 }
92
93 private static synchronized Provider bouncyCastle() {
94 if (bouncyCastle == null) {
95 bouncyCastle = new BouncyCastleProvider();
96 }
97 return bouncyCastle;
98 }
99 }