Ensure faster OpenSSLSignature is used when possible by doing proper case insensitive comparison
Bug: 5934554
Change-Id: I640cd54c227df2bf662d484cb2af95ece4d13421
diff --git a/luni/src/main/java/org/apache/harmony/xnet/provider/jsse/OpenSSLSignature.java b/luni/src/main/java/org/apache/harmony/xnet/provider/jsse/OpenSSLSignature.java
index 289d056..bcccda7 100644
--- a/luni/src/main/java/org/apache/harmony/xnet/provider/jsse/OpenSSLSignature.java
+++ b/luni/src/main/java/org/apache/harmony/xnet/provider/jsse/OpenSSLSignature.java
@@ -27,6 +27,7 @@
import java.security.interfaces.DSAPublicKey;
import java.security.interfaces.RSAPublicKey;
import java.util.HashMap;
+import java.util.Locale;
import java.util.Map;
/**
@@ -37,44 +38,50 @@
private static Map<String,Class<? extends OpenSSLSignature>> jdkToOpenSsl
= new HashMap<String,Class<? extends OpenSSLSignature>>();
+ private static void register(String algorithm, Class implementation) {
+ jdkToOpenSsl.put(algorithm.toUpperCase(Locale.US), implementation);
+ }
+ private static Class lookup(String algorithm) {
+ return jdkToOpenSsl.get(algorithm.toUpperCase(Locale.US));
+ }
static {
// TODO Finish OpenSSLSignature implementation and move
// registration information to the OpenSSLProvider
- jdkToOpenSsl.put("MD5WithRSAEncryption", MD5RSA.class);
- jdkToOpenSsl.put("MD5WithRSA", MD5RSA.class);
- jdkToOpenSsl.put("MD5/RSA", MD5RSA.class);
- jdkToOpenSsl.put("1.2.840.113549.1.1.4", MD5RSA.class);
- jdkToOpenSsl.put("1.2.840.113549.2.5with1.2.840.113549.1.1.1", MD5RSA.class);
+ register("MD5WithRSAEncryption", MD5RSA.class);
+ register("MD5WithRSA", MD5RSA.class);
+ register("MD5/RSA", MD5RSA.class);
+ register("1.2.840.113549.1.1.4", MD5RSA.class);
+ register("1.2.840.113549.2.5with1.2.840.113549.1.1.1", MD5RSA.class);
- jdkToOpenSsl.put("SHA1WithRSAEncryption", SHA1RSA.class);
- jdkToOpenSsl.put("SHA1WithRSA", SHA1RSA.class);
- jdkToOpenSsl.put("SHA1/RSA", SHA1RSA.class);
- jdkToOpenSsl.put("SHA-1/RSA", SHA1RSA.class);
- jdkToOpenSsl.put("1.2.840.113549.1.1.5", SHA1RSA.class);
- jdkToOpenSsl.put("1.3.14.3.2.26with1.2.840.113549.1.1.1", SHA1RSA.class);
- jdkToOpenSsl.put("1.3.14.3.2.26with1.2.840.113549.1.1.5", SHA1RSA.class);
- jdkToOpenSsl.put("1.3.14.3.2.29", SHA1RSA.class);
+ register("SHA1WithRSAEncryption", SHA1RSA.class);
+ register("SHA1WithRSA", SHA1RSA.class);
+ register("SHA1/RSA", SHA1RSA.class);
+ register("SHA-1/RSA", SHA1RSA.class);
+ register("1.2.840.113549.1.1.5", SHA1RSA.class);
+ register("1.3.14.3.2.26with1.2.840.113549.1.1.1", SHA1RSA.class);
+ register("1.3.14.3.2.26with1.2.840.113549.1.1.5", SHA1RSA.class);
+ register("1.3.14.3.2.29", SHA1RSA.class);
- jdkToOpenSsl.put("SHA256WithRSAEncryption", SHA256RSA.class);
- jdkToOpenSsl.put("SHA256WithRSA", SHA256RSA.class);
- jdkToOpenSsl.put("1.2.840.113549.1.1.11", SHA256RSA.class);
+ register("SHA256WithRSAEncryption", SHA256RSA.class);
+ register("SHA256WithRSA", SHA256RSA.class);
+ register("1.2.840.113549.1.1.11", SHA256RSA.class);
- jdkToOpenSsl.put("SHA384WithRSAEncryption", SHA384RSA.class);
- jdkToOpenSsl.put("SHA384WithRSA", SHA384RSA.class);
- jdkToOpenSsl.put("1.2.840.113549.1.1.12", SHA384RSA.class);
+ register("SHA384WithRSAEncryption", SHA384RSA.class);
+ register("SHA384WithRSA", SHA384RSA.class);
+ register("1.2.840.113549.1.1.12", SHA384RSA.class);
- jdkToOpenSsl.put("SHA512WithRSAEncryption", SHA512RSA.class);
- jdkToOpenSsl.put("SHA512WithRSA", SHA512RSA.class);
- jdkToOpenSsl.put("1.2.840.113549.1.1.13", SHA512RSA.class);
+ register("SHA512WithRSAEncryption", SHA512RSA.class);
+ register("SHA512WithRSA", SHA512RSA.class);
+ register("1.2.840.113549.1.1.13", SHA512RSA.class);
- jdkToOpenSsl.put("SHA1withDSA", SHA1DSA.class);
- jdkToOpenSsl.put("SHA/DSA", SHA1DSA.class);
- jdkToOpenSsl.put("DSA", SHA1DSA.class);
- jdkToOpenSsl.put("1.3.14.3.2.26with1.2.840.10040.4.1", SHA1DSA.class);
- jdkToOpenSsl.put("1.3.14.3.2.26with1.2.840.10040.4.3", SHA1DSA.class);
- jdkToOpenSsl.put("DSAWithSHA1", SHA1DSA.class);
- jdkToOpenSsl.put("1.2.840.10040.4.3", SHA1DSA.class);
+ register("SHA1withDSA", SHA1DSA.class);
+ register("SHA/DSA", SHA1DSA.class);
+ register("DSA", SHA1DSA.class);
+ register("1.3.14.3.2.26with1.2.840.10040.4.1", SHA1DSA.class);
+ register("1.3.14.3.2.26with1.2.840.10040.4.3", SHA1DSA.class);
+ register("DSAWithSHA1", SHA1DSA.class);
+ register("1.2.840.10040.4.3", SHA1DSA.class);
}
/**
@@ -114,7 +121,7 @@
public static OpenSSLSignature getInstance(String algorithm) throws NoSuchAlgorithmException {
// System.out.println("getInstance() invoked with " + algorithm);
- Class <? extends OpenSSLSignature> clazz = jdkToOpenSsl.get(algorithm);
+ Class <? extends OpenSSLSignature> clazz = lookup(algorithm);
if (clazz == null) {
throw new NoSuchAlgorithmException(algorithm);
}