/*
* reserved comment block
* DO NOT REMOVE OR ALTER!
*/
/**
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
/*
* ===========================================================================
*
* (C) Copyright IBM Corp. 2003 All Rights Reserved.
*
* ===========================================================================
*/
/*
* Portions copyright (c) 2005, 2019, Oracle and/or its affiliates. All rights reserved.
*/
/*
* $Id: XMLDSigRI.java 1833618 2018-06-15 17:36:20Z mullan $
*/
package org.jcp.xml.dsig.internal.dom;
import java.util.*;
import java.security.*;
import javax.xml.crypto.dsig.*;
/**
* The XMLDSig RI Provider.
*
*/
/**
* Defines the XMLDSigRI provider.
*/
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() {
// This is the JDK XMLDSig provider, synced from
// Apache Santuario XML Security for Java, version 2.1.4
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"));
// Inclusive C14N
putService(new ProviderService(p, "TransformService",
CanonicalizationMethod.INCLUSIVE,
"org.jcp.xml.dsig.internal.dom.DOMCanonicalXMLC14NMethod",
new String[] {"INCLUSIVE"}, MECH_TYPE));
// InclusiveWithComments C14N
putService(new ProviderService(p, "TransformService",
CanonicalizationMethod.INCLUSIVE_WITH_COMMENTS,
"org.jcp.xml.dsig.internal.dom.DOMCanonicalXMLC14NMethod",
new String[] {"INCLUSIVE_WITH_COMMENTS"}, MECH_TYPE));
// Inclusive C14N 1.1
putService(new ProviderService(p, "TransformService",
"http://www.w3.org/2006/12/xml-c14n11",
"org.jcp.xml.dsig.internal.dom.DOMCanonicalXMLC14N11Method",
null, MECH_TYPE));
// InclusiveWithComments C14N 1.1
putService(new ProviderService(p, "TransformService",
"http://www.w3.org/2006/12/xml-c14n11#WithComments",
"org.jcp.xml.dsig.internal.dom.DOMCanonicalXMLC14N11Method",
null, MECH_TYPE));
// Exclusive C14N
putService(new ProviderService(p, "TransformService",
CanonicalizationMethod.EXCLUSIVE,
"org.jcp.xml.dsig.internal.dom.DOMExcC14NMethod",
new String[] {"EXCLUSIVE"}, MECH_TYPE));
// ExclusiveWithComments C14N
putService(new ProviderService(p, "TransformService",
CanonicalizationMethod.EXCLUSIVE_WITH_COMMENTS,
"org.jcp.xml.dsig.internal.dom.DOMExcC14NMethod",
new String[] {"EXCLUSIVE_WITH_COMMENTS"}, MECH_TYPE));
// Base64 Transform
putService(new ProviderService(p, "TransformService",
Transform.BASE64,
"org.jcp.xml.dsig.internal.dom.DOMBase64Transform",
new String[] {"BASE64"}, MECH_TYPE));
// Enveloped Transform
putService(new ProviderService(p, "TransformService",
Transform.ENVELOPED,
"org.jcp.xml.dsig.internal.dom.DOMEnvelopedTransform",
/**代码未完, 请加载全部代码(NowJava.com).**/