|
|
|
|
|
|
|
*/ |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
*/ |
|
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( |
|
MessageDigestAlgorithm.ALGO_ID_DIGEST_WHIRLPOOL, |
|
new Algorithm("", "WHIRLPOOL", "MessageDigest") |
|
); |
|
algorithmsMap.put( |
|
MessageDigestAlgorithm.ALGO_ID_DIGEST_SHA3_224, |
|
new Algorithm("", "SHA3-224", "MessageDigest") |
|
); |
|
algorithmsMap.put( |
|
MessageDigestAlgorithm.ALGO_ID_DIGEST_SHA3_256, |
|
new Algorithm("", "SHA3-256", "MessageDigest") |
|
); |
|
algorithmsMap.put( |
|
MessageDigestAlgorithm.ALGO_ID_DIGEST_SHA3_384, |
|
new Algorithm("", "SHA3-384", "MessageDigest") |
|
); |
|
algorithmsMap.put( |
|
MessageDigestAlgorithm.ALGO_ID_DIGEST_SHA3_512, |
|
new Algorithm("", "SHA3-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_RSA_SHA3_224_MGF1, |
|
new Algorithm("RSA", "SHA3-224withRSAandMGF1", "Signature") |
|
); |
|
algorithmsMap.put( |
|
XMLSignature.ALGO_ID_SIGNATURE_RSA_SHA3_256_MGF1, |
|
new Algorithm("RSA", "SHA3-256withRSAandMGF1", "Signature") |
|
); |
|
algorithmsMap.put( |
|
XMLSignature.ALGO_ID_SIGNATURE_RSA_SHA3_384_MGF1, |
|
new Algorithm("RSA", "SHA3-384withRSAandMGF1", "Signature") |
|
); |
|
algorithmsMap.put( |
|
XMLSignature.ALGO_ID_SIGNATURE_RSA_SHA3_512_MGF1, |
|
new Algorithm("RSA", "SHA3-512withRSAandMGF1", "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; |
|
} |
|
} |
|
} |