package org.jcp.xml.dsig.internal.dom;
import java.util.*;
import java.security.*;
import javax.xml.crypto.dsig.*;
public final class XMLDSigRI extends Provider {
static final long serialVersionUID = -5049765099299494554L;
private static final String INFO = "XMLDSig " +
"(DOM XMLSignatureFactory; DOM KeyInfoFactory; " +
"C14N 1.0, C14N 1.1, Exclusive C14N, Base64, Enveloped, XPath, " +
"XPath2, XSLT TransformServices)";
private static final String VER =
AccessController.doPrivileged(new PrivilegedAction<>() {
public String run() {
return System.getProperty("java.specification.version");
}
});
private static final class ProviderService extends Provider.Service {
ProviderService(Provider p, String type, String algo, String cn) {
super(p, type, algo, cn, null, null);
}
ProviderService(Provider p, String type, String algo, String cn,
String[] aliases) {
super(p, type, algo, cn,
(aliases == null? null : Arrays.asList(aliases)), null);
}
ProviderService(Provider p, String type, String algo, String cn,
String[] aliases, HashMap<String, String> attrs) {
super(p, type, algo, cn,
(aliases == null? null : Arrays.asList(aliases)), attrs);
}
@Override
public Object newInstance(Object ctrParamObj)
throws NoSuchAlgorithmException {
String type = getType();
if (ctrParamObj != null) {
throw new InvalidParameterException
("constructorParameter not used with " + type + " engines");
}
String algo = getAlgorithm();
try {
if (type.equals("XMLSignatureFactory")) {
if (algo.equals("DOM")) {
return new DOMXMLSignatureFactory();
}
} else if (type.equals("KeyInfoFactory")) {
if (algo.equals("DOM")) {
return new DOMKeyInfoFactory();
}
} else if (type.equals("TransformService")) {
if (algo.equals(CanonicalizationMethod.INCLUSIVE) ||
algo.equals(CanonicalizationMethod.INCLUSIVE_WITH_COMMENTS)) {
return new DOMCanonicalXMLC14NMethod();
} else if (algo.equals("http://www.w3.org/2006/12/xml-c14n11") ||
algo.equals("http://www.w3.org/2006/12/xml-c14n11#WithComments")) {
return new DOMCanonicalXMLC14N11Method();
} else if (algo.equals(CanonicalizationMethod.EXCLUSIVE) ||
algo.equals(CanonicalizationMethod.EXCLUSIVE_WITH_COMMENTS)) {
return new DOMExcC14NMethod();
} else if (algo.equals(Transform.BASE64)) {
return new DOMBase64Transform();
} else if (algo.equals(Transform.ENVELOPED)) {
return new DOMEnvelopedTransform();
} else if (algo.equals(Transform.XPATH2)) {
return new DOMXPathFilter2Transform();
} else if (algo.equals(Transform.XPATH)) {
return new DOMXPathTransform();
} else if (algo.equals(Transform.XSLT)) {
return new DOMXSLTTransform();
}
}
} catch (Exception ex) {
throw new NoSuchAlgorithmException("Error constructing " +
type + " for " + algo + " using XMLDSig", ex);
}
throw new ProviderException("No impl for " + algo +
" " + type);
}
}
public XMLDSigRI() {
super("XMLDSig", VER, INFO);
final Provider p = this;
AccessController.doPrivileged(new PrivilegedAction<Void>() {
public Void run() {
HashMap<String, String> MECH_TYPE = new HashMap<>();
MECH_TYPE.put("MechanismType", "DOM");
putService(new ProviderService(p, "XMLSignatureFactory",
"DOM", "org.jcp.xml.dsig.internal.dom.DOMXMLSignatureFactory"));
putService(new ProviderService(p, "KeyInfoFactory",
"DOM", "org.jcp.xml.dsig.internal.dom.DOMKeyInfoFactory"));
putService(new ProviderService(p, "TransformService",
CanonicalizationMethod.INCLUSIVE,
"org.jcp.xml.dsig.internal.dom.DOMCanonicalXMLC14NMethod",
new String[] {"INCLUSIVE"}, MECH_TYPE));
putService(new ProviderService(p, "TransformService",
CanonicalizationMethod.INCLUSIVE_WITH_COMMENTS,
"org.jcp.xml.dsig.internal.dom.DOMCanonicalXMLC14NMethod",
new String[] {"INCLUSIVE_WITH_COMMENTS"}, MECH_TYPE));
putService(new ProviderService(p, "TransformService",
"http://www.w3.org/2006/12/xml-c14n11",
"org.jcp.xml.dsig.internal.dom.DOMCanonicalXMLC14N11Method",
null, MECH_TYPE));
putService(new ProviderService(p, "TransformService",
"http://www.w3.org/2006/12/xml-c14n11#WithComments",
"org.jcp.xml.dsig.internal.dom.DOMCanonicalXMLC14N11Method",
null, MECH_TYPE));
putService(new ProviderService(p, "TransformService",
CanonicalizationMethod.EXCLUSIVE,
"org.jcp.xml.dsig.internal.dom.DOMExcC14NMethod",
new String[] {"EXCLUSIVE"}, MECH_TYPE));
putService(new ProviderService(p, "TransformService",
CanonicalizationMethod.EXCLUSIVE_WITH_COMMENTS,
"org.jcp.xml.dsig.internal.dom.DOMExcC14NMethod",
new String[] {"EXCLUSIVE_WITH_COMMENTS"}, MECH_TYPE));
putService(new ProviderService(p, "TransformService",
Transform.BASE64,
"org.jcp.xml.dsig.internal.dom.DOMBase64Transform",
new String[] {"BASE64"}, MECH_TYPE));
putService(new ProviderService(p, "TransformService",
Transform.ENVELOPED,
"org.jcp.xml.dsig.internal.dom.DOMEnvelopedTransform",
new String[] {"ENVELOPED"}, MECH_TYPE));
putService(new ProviderService(p, "TransformService",
Transform.XPATH2,
"org.jcp.xml.dsig.internal.dom.DOMXPathFilter2Transform",
new String[] {"XPATH2"}, MECH_TYPE));
putService(new ProviderService(p, "TransformService",
Transform.XPATH,
"org.jcp.xml.dsig.internal.dom.DOMXPathTransform",
new String[] {"XPATH"}, MECH_TYPE));
putService(new ProviderService(p, "TransformService",
Transform.XSLT,
"org.jcp.xml.dsig.internal.dom.DOMXSLTTransform",
new String[] {"XSLT"}, MECH_TYPE));
return null;
}
});
}
}