| 
 | 
 | 
 | 
 | 
 | 
 | 
 */  | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 */  | 
 | 
package com.sun.org.apache.xml.internal.security.algorithms;  | 
 | 
 | 
 | 
import java.util.Map;  | 
 | 
import java.util.concurrent.ConcurrentHashMap;  | 
 | 
 | 
 | 
import com.sun.org.apache.xml.internal.security.signature.XMLSignature;  | 
 | 
import com.sun.org.apache.xml.internal.security.utils.JavaUtils;  | 
 | 
import org.w3c.dom.Element;  | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 */  | 
 | 
public class JCEMapper { | 
 | 
 | 
 | 
    private static final com.sun.org.slf4j.internal.Logger LOG =  | 
 | 
        com.sun.org.slf4j.internal.LoggerFactory.getLogger(JCEMapper.class);  | 
 | 
 | 
 | 
    private static Map<String, Algorithm> algorithmsMap =  | 
 | 
        new ConcurrentHashMap<String, Algorithm>();  | 
 | 
 | 
 | 
    private static String providerName;  | 
 | 
 | 
 | 
      | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
     */  | 
 | 
    public static void register(String id, Algorithm algorithm) { | 
 | 
        JavaUtils.checkRegisterPermission();  | 
 | 
        algorithmsMap.put(id, algorithm);  | 
 | 
    }  | 
 | 
 | 
 | 
      | 
 | 
 | 
 | 
     */  | 
 | 
    public static void registerDefaultAlgorithms() { | 
 | 
          | 
 | 
        algorithmsMap.put(  | 
 | 
            MessageDigestAlgorithm.ALGO_ID_DIGEST_NOT_RECOMMENDED_MD5,  | 
 | 
            new Algorithm("", "MD5", "MessageDigest") | 
 | 
        );  | 
 | 
        algorithmsMap.put(  | 
 | 
            MessageDigestAlgorithm.ALGO_ID_DIGEST_RIPEMD160,  | 
 | 
            new Algorithm("", "RIPEMD160", "MessageDigest") | 
 | 
        );  | 
 | 
        algorithmsMap.put(  | 
 | 
            MessageDigestAlgorithm.ALGO_ID_DIGEST_SHA1,  | 
 | 
            new Algorithm("", "SHA-1", "MessageDigest") | 
 | 
        );  | 
 | 
        algorithmsMap.put(  | 
 | 
            MessageDigestAlgorithm.ALGO_ID_DIGEST_SHA224,  | 
 | 
            new Algorithm("", "SHA-224", "MessageDigest") | 
 | 
        );  | 
 | 
        algorithmsMap.put(  | 
 | 
            MessageDigestAlgorithm.ALGO_ID_DIGEST_SHA256,  | 
 | 
            new Algorithm("", "SHA-256", "MessageDigest") | 
 | 
        );  | 
 | 
        algorithmsMap.put(  | 
 | 
            MessageDigestAlgorithm.ALGO_ID_DIGEST_SHA384,  | 
 | 
            new Algorithm("", "SHA-384", "MessageDigest") | 
 | 
        );  | 
 | 
        algorithmsMap.put(  | 
 | 
            MessageDigestAlgorithm.ALGO_ID_DIGEST_SHA512,  | 
 | 
            new Algorithm("", "SHA-512", "MessageDigest") | 
 | 
        );  | 
 | 
          | 
 | 
        algorithmsMap.put(  | 
 | 
            XMLSignature.ALGO_ID_SIGNATURE_DSA,  | 
 | 
            new Algorithm("DSA", "SHA1withDSA", "Signature") | 
 | 
        );  | 
 | 
        algorithmsMap.put(  | 
 | 
            XMLSignature.ALGO_ID_SIGNATURE_DSA_SHA256,  | 
 | 
            new Algorithm("DSA", "SHA256withDSA", "Signature") | 
 | 
        );  | 
 | 
        algorithmsMap.put(  | 
 | 
            XMLSignature.ALGO_ID_SIGNATURE_NOT_RECOMMENDED_RSA_MD5,  | 
 | 
            new Algorithm("RSA", "MD5withRSA", "Signature") | 
 | 
        );  | 
 | 
        algorithmsMap.put(  | 
 | 
            XMLSignature.ALGO_ID_SIGNATURE_RSA_RIPEMD160,  | 
 | 
            new Algorithm("RSA", "RIPEMD160withRSA", "Signature") | 
 | 
        );  | 
 | 
        algorithmsMap.put(  | 
 | 
            XMLSignature.ALGO_ID_SIGNATURE_RSA_SHA1,  | 
 | 
            new Algorithm("RSA", "SHA1withRSA", "Signature") | 
 | 
        );  | 
 | 
        algorithmsMap.put(  | 
 | 
            XMLSignature.ALGO_ID_SIGNATURE_RSA_SHA224,  | 
 | 
            new Algorithm("RSA", "SHA224withRSA", "Signature") | 
 | 
        );  | 
 | 
        algorithmsMap.put(  | 
 | 
            XMLSignature.ALGO_ID_SIGNATURE_RSA_SHA256,  | 
 | 
            new Algorithm("RSA", "SHA256withRSA", "Signature") | 
 | 
        );  | 
 | 
        algorithmsMap.put(  | 
 | 
            XMLSignature.ALGO_ID_SIGNATURE_RSA_SHA384,  | 
 | 
            new Algorithm("RSA", "SHA384withRSA", "Signature") | 
 | 
        );  | 
 | 
        algorithmsMap.put(  | 
 | 
            XMLSignature.ALGO_ID_SIGNATURE_RSA_SHA512,  | 
 | 
            new Algorithm("RSA", "SHA512withRSA", "Signature") | 
 | 
        );  | 
 | 
        algorithmsMap.put(  | 
 | 
            XMLSignature.ALGO_ID_SIGNATURE_RSA_SHA1_MGF1,  | 
 | 
            new Algorithm("RSA", "SHA1withRSAandMGF1", "Signature") | 
 | 
        );  | 
 | 
        algorithmsMap.put(  | 
 | 
            XMLSignature.ALGO_ID_SIGNATURE_RSA_SHA224_MGF1,  | 
 | 
            new Algorithm("RSA", "SHA224withRSAandMGF1", "Signature") | 
 | 
        );  | 
 | 
        algorithmsMap.put(  | 
 | 
            XMLSignature.ALGO_ID_SIGNATURE_RSA_SHA256_MGF1,  | 
 | 
            new Algorithm("RSA", "SHA256withRSAandMGF1", "Signature") | 
 | 
        );  | 
 | 
        algorithmsMap.put(  | 
 | 
            XMLSignature.ALGO_ID_SIGNATURE_RSA_SHA384_MGF1,  | 
 | 
            new Algorithm("RSA", "SHA384withRSAandMGF1", "Signature") | 
 | 
        );  | 
 | 
        algorithmsMap.put(  | 
 | 
            XMLSignature.ALGO_ID_SIGNATURE_RSA_SHA512_MGF1,  | 
 | 
            new Algorithm("RSA", "SHA512withRSAandMGF1", "Signature") | 
 | 
        );  | 
 | 
        algorithmsMap.put(  | 
 | 
            XMLSignature.ALGO_ID_SIGNATURE_ECDSA_SHA1,  | 
 | 
            new Algorithm("EC", "SHA1withECDSA", "Signature") | 
 | 
        );  | 
 | 
        algorithmsMap.put(  | 
 | 
            XMLSignature.ALGO_ID_SIGNATURE_ECDSA_SHA224,  | 
 | 
            new Algorithm("EC", "SHA224withECDSA", "Signature") | 
 | 
        );  | 
 | 
        algorithmsMap.put(  | 
 | 
            XMLSignature.ALGO_ID_SIGNATURE_ECDSA_SHA256,  | 
 | 
            new Algorithm("EC", "SHA256withECDSA", "Signature") | 
 | 
        );  | 
 | 
        algorithmsMap.put(  | 
 | 
            XMLSignature.ALGO_ID_SIGNATURE_ECDSA_SHA384,  | 
 | 
            new Algorithm("EC", "SHA384withECDSA", "Signature") | 
 | 
        );  | 
 | 
        algorithmsMap.put(  | 
 | 
            XMLSignature.ALGO_ID_SIGNATURE_ECDSA_SHA512,  | 
 | 
            new Algorithm("EC", "SHA512withECDSA", "Signature") | 
 | 
        );  | 
 | 
        algorithmsMap.put(  | 
 | 
            XMLSignature.ALGO_ID_SIGNATURE_ECDSA_RIPEMD160,  | 
 | 
            new Algorithm("EC", "RIPEMD160withECDSA", "Signature") | 
 | 
        );  | 
 | 
        algorithmsMap.put(  | 
 | 
            XMLSignature.ALGO_ID_MAC_HMAC_NOT_RECOMMENDED_MD5,  | 
 | 
            new Algorithm("", "HmacMD5", "Mac", 0, 0) | 
 | 
        );  | 
 | 
        algorithmsMap.put(  | 
 | 
            XMLSignature.ALGO_ID_MAC_HMAC_RIPEMD160,  | 
 | 
            new Algorithm("", "HMACRIPEMD160", "Mac", 0, 0) | 
 | 
        );  | 
 | 
        algorithmsMap.put(  | 
 | 
            XMLSignature.ALGO_ID_MAC_HMAC_SHA1,  | 
 | 
            new Algorithm("", "HmacSHA1", "Mac", 0, 0) | 
 | 
        );  | 
 | 
        algorithmsMap.put(  | 
 | 
            XMLSignature.ALGO_ID_MAC_HMAC_SHA224,  | 
 | 
            new Algorithm("", "HmacSHA224", "Mac", 0, 0) | 
 | 
        );  | 
 | 
        algorithmsMap.put(  | 
 | 
            XMLSignature.ALGO_ID_MAC_HMAC_SHA256,  | 
 | 
            new Algorithm("", "HmacSHA256", "Mac", 0, 0) | 
 | 
        );  | 
 | 
        algorithmsMap.put(  | 
 | 
            XMLSignature.ALGO_ID_MAC_HMAC_SHA384,  | 
 | 
            new Algorithm("", "HmacSHA384", "Mac", 0, 0) | 
 | 
        );  | 
 | 
        algorithmsMap.put(  | 
 | 
            XMLSignature.ALGO_ID_MAC_HMAC_SHA512,  | 
 | 
            new Algorithm("", "HmacSHA512", "Mac", 0, 0) | 
 | 
        );  | 
 | 
    }  | 
 | 
 | 
 | 
      | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
     */  | 
 | 
    public static String translateURItoJCEID(String algorithmURI) { | 
 | 
        Algorithm algorithm = getAlgorithm(algorithmURI);  | 
 | 
        if (algorithm != null) { | 
 | 
            return algorithm.jceName;  | 
 | 
        }  | 
 | 
        return null;  | 
 | 
    }  | 
 | 
 | 
 | 
      | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
     */  | 
 | 
    public static String getAlgorithmClassFromURI(String algorithmURI) { | 
 | 
        Algorithm algorithm = getAlgorithm(algorithmURI);  | 
 | 
        if (algorithm != null) { | 
 | 
            return algorithm.algorithmClass;  | 
 | 
        }  | 
 | 
        return null;  | 
 | 
    }  | 
 | 
 | 
 | 
      | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
     */  | 
 | 
    public static int getKeyLengthFromURI(String algorithmURI) { | 
 | 
        Algorithm algorithm = getAlgorithm(algorithmURI);  | 
 | 
        if (algorithm != null) { | 
 | 
            return algorithm.keyLength;  | 
 | 
        }  | 
 | 
        return 0;  | 
 | 
    }  | 
 | 
 | 
 | 
    public static int getIVLengthFromURI(String algorithmURI) { | 
 | 
        Algorithm algorithm = getAlgorithm(algorithmURI);  | 
 | 
        if (algorithm != null) { | 
 | 
            return algorithm.ivLength;  | 
 | 
        }  | 
 | 
        return 0;  | 
 | 
    }  | 
 | 
 | 
 | 
      | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
     */  | 
 | 
    public static String getJCEKeyAlgorithmFromURI(String algorithmURI) { | 
 | 
        Algorithm algorithm = getAlgorithm(algorithmURI);  | 
 | 
         if (algorithm != null) { | 
 | 
             return algorithm.requiredKey;  | 
 | 
         }  | 
 | 
        return null;  | 
 | 
    }  | 
 | 
 | 
 | 
      | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
     */  | 
 | 
    public static String getJCEProviderFromURI(String algorithmURI) { | 
 | 
        Algorithm algorithm = getAlgorithm(algorithmURI);  | 
 | 
        if (algorithm != null) { | 
 | 
            return algorithm.jceProvider;  | 
 | 
        }  | 
 | 
        return null;  | 
 | 
    }  | 
 | 
 | 
 | 
      | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
     */  | 
 | 
    private static Algorithm getAlgorithm(String algorithmURI) { | 
 | 
        LOG.debug("Request for URI {}", algorithmURI); | 
 | 
 | 
 | 
        if (algorithmURI != null) { | 
 | 
            return algorithmsMap.get(algorithmURI);  | 
 | 
        }  | 
 | 
        return null;  | 
 | 
    }  | 
 | 
 | 
 | 
      | 
 | 
 | 
 | 
 | 
 | 
     */  | 
 | 
    public static String getProviderId() { | 
 | 
        return providerName;  | 
 | 
    }  | 
 | 
 | 
 | 
      | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
     */  | 
 | 
    public static void setProviderId(String provider) { | 
 | 
        JavaUtils.checkRegisterPermission();  | 
 | 
        providerName = provider;  | 
 | 
    }  | 
 | 
 | 
 | 
      | 
 | 
 | 
 | 
     */  | 
 | 
    public static class Algorithm { | 
 | 
 | 
 | 
        final String requiredKey;  | 
 | 
        final String jceName;  | 
 | 
        final String algorithmClass;  | 
 | 
        final int keyLength;  | 
 | 
        final int ivLength;  | 
 | 
        final String jceProvider;  | 
 | 
 | 
 | 
          | 
 | 
 | 
 | 
 | 
 | 
         */  | 
 | 
        public Algorithm(Element el) { | 
 | 
            requiredKey = el.getAttributeNS(null, "RequiredKey");  | 
 | 
            jceName = el.getAttributeNS(null, "JCEName");  | 
 | 
            algorithmClass = el.getAttributeNS(null, "AlgorithmClass");  | 
 | 
            jceProvider = el.getAttributeNS(null, "JCEProvider");  | 
 | 
            if (el.hasAttribute("KeyLength")) { | 
 | 
                keyLength = Integer.parseInt(el.getAttributeNS(null, "KeyLength"));  | 
 | 
            } else { | 
 | 
                keyLength = 0;  | 
 | 
            }  | 
 | 
            if (el.hasAttribute("IVLength")) { | 
 | 
                ivLength = Integer.parseInt(el.getAttributeNS(null, "IVLength"));  | 
 | 
            } else { | 
 | 
                ivLength = 0;  | 
 | 
            }  | 
 | 
        }  | 
 | 
 | 
 | 
        public Algorithm(String requiredKey, String jceName) { | 
 | 
            this(requiredKey, jceName, null, 0, 0);  | 
 | 
        }  | 
 | 
 | 
 | 
        public Algorithm(String requiredKey, String jceName, String algorithmClass) { | 
 | 
            this(requiredKey, jceName, algorithmClass, 0, 0);  | 
 | 
        }  | 
 | 
 | 
 | 
        public Algorithm(String requiredKey, String jceName, int keyLength) { | 
 | 
            this(requiredKey, jceName, null, keyLength, 0);  | 
 | 
        }  | 
 | 
 | 
 | 
        public Algorithm(String requiredKey, String jceName, String algorithmClass, int keyLength, int ivLength) { | 
 | 
            this(requiredKey, jceName, algorithmClass, keyLength, ivLength, null);  | 
 | 
        }  | 
 | 
 | 
 | 
        public Algorithm(String requiredKey, String jceName,  | 
 | 
                         String algorithmClass, int keyLength, int ivLength, String jceProvider) { | 
 | 
            this.requiredKey = requiredKey;  | 
 | 
            this.jceName = jceName;  | 
 | 
            this.algorithmClass = algorithmClass;  | 
 | 
            this.keyLength = keyLength;  | 
 | 
            this.ivLength = ivLength;  | 
 | 
            this.jceProvider = jceProvider;  | 
 | 
        }  | 
 | 
    }  | 
 | 
}  |