< prev index next >

src/java.base/share/classes/sun/security/util/SignatureUtil.java

Print this page

        

@@ -1,7 +1,7 @@
 /*
- * Copyright (c) 2018, 2019, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
  * under the terms of the GNU General Public License version 2 only, as
  * published by the Free Software Foundation.  Oracle designates this

@@ -27,122 +27,79 @@
 
 import java.io.IOException;
 import java.security.*;
 import java.security.spec.*;
 import sun.security.rsa.RSAUtil;
-import jdk.internal.access.SharedSecrets;
 
 /**
  * Utility class for Signature related operations. Currently used by various
  * internal PKI classes such as sun.security.x509.X509CertImpl,
  * sun.security.pkcs.SignerInfo, for setting signature parameters.
  *
  * @since   11
  */
 public class SignatureUtil {
 
-    private static String checkName(String algName) throws ProviderException {
-        if (algName.indexOf(".") == -1) {
-            return algName;
-        }
-        // convert oid to String
-        try {
-            return Signature.getInstance(algName).getAlgorithm();
-        } catch (Exception e) {
-            throw new ProviderException("Error mapping algorithm name", e);
-        }
-    }
-
     // Utility method of creating an AlgorithmParameters object with
     // the specified algorithm name and encoding
     private static AlgorithmParameters createAlgorithmParameters(String algName,
             byte[] paramBytes) throws ProviderException {
 
         try {
-            algName = checkName(algName);
             AlgorithmParameters result =
                 AlgorithmParameters.getInstance(algName);
             result.init(paramBytes);
             return result;
         } catch (NoSuchAlgorithmException | IOException e) {
             throw new ProviderException(e);
         }
     }
 
-    // Utility method for converting the specified AlgorithmParameters object
-    // into an AlgorithmParameterSpec object.
-    public static AlgorithmParameterSpec getParamSpec(String sigName,
+    private static AlgorithmParameterSpec getParamSpec(String sigName,
             AlgorithmParameters params)
-            throws ProviderException {
+            throws InvalidAlgorithmParameterException, ProviderException {
 
-        sigName = checkName(sigName);
-        AlgorithmParameterSpec paramSpec = null;
-        if (params != null) {
-            if (sigName.toUpperCase().indexOf("RSA") == -1) {
-                throw new ProviderException
-                    ("Unrecognized algorithm for signature parameters " +
-                     sigName);
-            }
-            // AlgorithmParameters.getAlgorithm() may returns oid if it's
-            // created during DER decoding. Convert to use the standard name
-            // before passing it to RSAUtil
-            if (params.getAlgorithm().indexOf(".") != -1) {
-                try {
-                    params = createAlgorithmParameters(sigName,
-                        params.getEncoded());
-                } catch (IOException e) {
-                    throw new ProviderException(e);
-                }
+        if (params == null) return null;
+
+        if (sigName.toUpperCase().indexOf("RSA") == -1) {
+            throw new ProviderException
+                 ("Unrecognized algorithm for signature parameters " +
+                  sigName);
+        }
+        // AlgorithmParameters.getAlgorithm() may returns oid if it's
+        // created during DER decoding. Convert to use the standard name
+        // before passing it to RSAUtil
+        String alg = params.getAlgorithm();
+        if (alg.equalsIgnoreCase(sigName) || alg.indexOf(".") != -1) {
+            try {
+                params = createAlgorithmParameters(sigName,
+                    params.getEncoded());
+            } catch (IOException e) {
+                throw new ProviderException(e);
             }
-            paramSpec = RSAUtil.getParamSpec(params);
         }
-        return paramSpec;
+        return RSAUtil.getParamSpec(params);
     }
 
-    // Utility method for converting the specified parameter bytes into an
-    // AlgorithmParameterSpec object.
-    public static AlgorithmParameterSpec getParamSpec(String sigName,
-            byte[] paramBytes)
-            throws ProviderException {
-        sigName = checkName(sigName);
-        AlgorithmParameterSpec paramSpec = null;
+    // Special method for setting the specified parameter bytes into the
+    // specified Signature object as signature parameters.
+    public static void specialSetParameter(Signature sig, byte[] paramBytes)
+            throws InvalidAlgorithmParameterException, ProviderException {
         if (paramBytes != null) {
-            if (sigName.toUpperCase().indexOf("RSA") == -1) {
-                throw new ProviderException
-                     ("Unrecognized algorithm for signature parameters " +
-                      sigName);
-            }
+            String sigName = sig.getAlgorithm();
             AlgorithmParameters params =
                 createAlgorithmParameters(sigName, paramBytes);
-            paramSpec = RSAUtil.getParamSpec(params);
+            specialSetParameter(sig, params);
         }
-        return paramSpec;
-    }
-
-    // Utility method for initializing the specified Signature object
-    // for verification with the specified key and params (may be null)
-    public static void initVerifyWithParam(Signature s, PublicKey key,
-            AlgorithmParameterSpec params)
-            throws ProviderException, InvalidAlgorithmParameterException,
-            InvalidKeyException {
-        SharedSecrets.getJavaSecuritySignatureAccess().initVerify(s, key, params);
-    }
-
-    // Utility method for initializing the specified Signature object
-    // for verification with the specified Certificate and params (may be null)
-    public static void initVerifyWithParam(Signature s,
-            java.security.cert.Certificate cert,
-            AlgorithmParameterSpec params)
-            throws ProviderException, InvalidAlgorithmParameterException,
-            InvalidKeyException {
-        SharedSecrets.getJavaSecuritySignatureAccess().initVerify(s, cert, params);
     }
 
-    // Utility method for initializing the specified Signature object
-    // for signing with the specified key and params (may be null)
-    public static void initSignWithParam(Signature s, PrivateKey key,
-            AlgorithmParameterSpec params, SecureRandom sr)
-            throws ProviderException, InvalidAlgorithmParameterException,
-            InvalidKeyException {
-        SharedSecrets.getJavaSecuritySignatureAccess().initSign(s, key, params, sr);
+    // Special method for setting the specified AlgorithmParameter object
+    // into the specified Signature object as signature parameters.
+    public static void specialSetParameter(Signature sig,
+            AlgorithmParameters params)
+            throws InvalidAlgorithmParameterException, ProviderException {
+        if (params != null) {
+            String sigName = sig.getAlgorithm();
+            sig.setParameter(getParamSpec(sigName, params));
+        }
     }
 }
< prev index next >