You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@santuario.apache.org by mu...@apache.org on 2006/03/07 20:02:34 UTC
svn commit: r383958 - /xml/security/trunk/src/org/jcp/xml/dsig/internal/dom/
Author: mullan
Date: Tue Mar 7 11:02:32 2006
New Revision: 383958
URL: http://svn.apache.org/viewcvs?rev=383958&view=rev
Log:
Fix following bug:
If an application uses more than one distinct class loader to load classes
which in turn create or validate XML Signatures, the first signature will be
generated/validated without any problems, but calls from Objects loaded by
subsequent class loaders throw an InvocationTargetException.
Modified:
xml/security/trunk/src/org/jcp/xml/dsig/internal/dom/DOMCanonicalizationMethod.java
xml/security/trunk/src/org/jcp/xml/dsig/internal/dom/DOMKeyInfo.java
xml/security/trunk/src/org/jcp/xml/dsig/internal/dom/DOMKeyInfoFactory.java
xml/security/trunk/src/org/jcp/xml/dsig/internal/dom/DOMManifest.java
xml/security/trunk/src/org/jcp/xml/dsig/internal/dom/DOMReference.java
xml/security/trunk/src/org/jcp/xml/dsig/internal/dom/DOMRetrievalMethod.java
xml/security/trunk/src/org/jcp/xml/dsig/internal/dom/DOMSignedInfo.java
xml/security/trunk/src/org/jcp/xml/dsig/internal/dom/DOMTransform.java
xml/security/trunk/src/org/jcp/xml/dsig/internal/dom/DOMXMLObject.java
xml/security/trunk/src/org/jcp/xml/dsig/internal/dom/DOMXMLSignature.java
xml/security/trunk/src/org/jcp/xml/dsig/internal/dom/DOMXMLSignatureFactory.java
Modified: xml/security/trunk/src/org/jcp/xml/dsig/internal/dom/DOMCanonicalizationMethod.java
URL: http://svn.apache.org/viewcvs/xml/security/trunk/src/org/jcp/xml/dsig/internal/dom/DOMCanonicalizationMethod.java?rev=383958&r1=383957&r2=383958&view=diff
==============================================================================
--- xml/security/trunk/src/org/jcp/xml/dsig/internal/dom/DOMCanonicalizationMethod.java (original)
+++ xml/security/trunk/src/org/jcp/xml/dsig/internal/dom/DOMCanonicalizationMethod.java Tue Mar 7 11:02:32 2006
@@ -24,6 +24,7 @@
import java.io.OutputStream;
import java.security.InvalidAlgorithmParameterException;
+import java.security.Provider;
import org.w3c.dom.Element;
@@ -55,9 +56,9 @@
*
* @param cmElem a CanonicalizationMethod element
*/
- public DOMCanonicalizationMethod(Element cmElem, XMLCryptoContext context)
- throws MarshalException{
- super(cmElem, context);
+ public DOMCanonicalizationMethod(Element cmElem, XMLCryptoContext context,
+ Provider provider) throws MarshalException {
+ super(cmElem, context, provider);
}
/**
@@ -70,7 +71,7 @@
* additional context (may be <code>null</code> if not applicable)
* @return the canonicalized data
* @throws NullPointerException if <code>data</code> is <code>null</code>
- * @throws XMLSignatureException if an unexpected error occurs while
+ * @throws TransformException if an unexpected error occurs while
* canonicalizing the data
*/
public Data canonicalize(Data data, XMLCryptoContext xc)
Modified: xml/security/trunk/src/org/jcp/xml/dsig/internal/dom/DOMKeyInfo.java
URL: http://svn.apache.org/viewcvs/xml/security/trunk/src/org/jcp/xml/dsig/internal/dom/DOMKeyInfo.java?rev=383958&r1=383957&r2=383958&view=diff
==============================================================================
--- xml/security/trunk/src/org/jcp/xml/dsig/internal/dom/DOMKeyInfo.java (original)
+++ xml/security/trunk/src/org/jcp/xml/dsig/internal/dom/DOMKeyInfo.java Tue Mar 7 11:02:32 2006
@@ -28,6 +28,7 @@
import javax.xml.crypto.dsig.keyinfo.KeyInfo;
import javax.xml.crypto.dom.*;
+import java.security.Provider;
import java.util.*;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
@@ -64,7 +65,7 @@
if (typesCopy.isEmpty()) {
throw new IllegalArgumentException("content cannot be empty");
}
- for (int i = 0; i < typesCopy.size(); i++) {
+ for (int i = 0, size = typesCopy.size(); i < size; i++) {
if (!(typesCopy.get(i) instanceof XMLStructure)) {
throw new ClassCastException
("content["+i+"] is not a valid KeyInfo type");
@@ -77,35 +78,38 @@
/**
* Creates a <code>DOMKeyInfo</code> from XML.
*
- * @param input XML input
+ * @param kiElem KeyInfo element
*/
- public DOMKeyInfo(Element kiElem, XMLCryptoContext context)
- throws MarshalException {
+ public DOMKeyInfo(Element kiElem, XMLCryptoContext context,
+ Provider provider) throws MarshalException {
// get Id attribute, if specified
id = DOMUtils.getAttributeValue(kiElem, "Id");
// get all children nodes
NodeList nl = kiElem.getChildNodes();
- if (nl.getLength() < 1) {
+ int length = nl.getLength();
+ if (length < 1) {
throw new MarshalException
("KeyInfo must contain at least one type");
}
- List content = new ArrayList(nl.getLength());
- for (int i = 0; i < nl.getLength(); i++) {
+ List content = new ArrayList(length);
+ for (int i = 0; i < length; i++) {
Node child = nl.item(i);
// ignore all non-Element nodes
if (child.getNodeType() != Node.ELEMENT_NODE) {
continue;
}
Element childElem = (Element) child;
- if (childElem.getLocalName().equals("KeyName")) {
+ String localName = childElem.getLocalName();
+ if (localName.equals("X509Data")) {
+ content.add(new DOMX509Data(childElem));
+ } else if (localName.equals("KeyName")) {
content.add(new DOMKeyName(childElem));
- } else if (childElem.getLocalName().equals("KeyValue")) {
+ } else if (localName.equals("KeyValue")) {
content.add(new DOMKeyValue(childElem));
- } else if (childElem.getLocalName().equals("RetrievalMethod")) {
- content.add(new DOMRetrievalMethod(childElem, context));
- } else if (childElem.getLocalName().equals("X509Data")) {
- content.add(new DOMX509Data(childElem));
+ } else if (localName.equals("RetrievalMethod")) {
+ content.add
+ (new DOMRetrievalMethod(childElem, context, provider));
} else { //may be MgmtData, SPKIData or element from other namespace
content.add(new javax.xml.crypto.dom.DOMStructure((childElem)));
}
@@ -160,9 +164,8 @@
private void marshal(Node parent, Element kiElem, Node nextSibling,
String dsPrefix, DOMCryptoContext context) throws MarshalException {
// create and append KeyInfoType elements
- Iterator i = this.keyInfoTypes.iterator();
- while (i.hasNext()) {
- XMLStructure kiType = (XMLStructure) i.next();
+ for (int i = 0, size = keyInfoTypes.size(); i < size; i++) {
+ XMLStructure kiType = (XMLStructure) keyInfoTypes.get(i);
if (kiType instanceof DOMStructure) {
((DOMStructure) kiType).marshal(kiElem, dsPrefix, context);
} else {
Modified: xml/security/trunk/src/org/jcp/xml/dsig/internal/dom/DOMKeyInfoFactory.java
URL: http://svn.apache.org/viewcvs/xml/security/trunk/src/org/jcp/xml/dsig/internal/dom/DOMKeyInfoFactory.java?rev=383958&r1=383957&r2=383958&view=diff
==============================================================================
--- xml/security/trunk/src/org/jcp/xml/dsig/internal/dom/DOMKeyInfoFactory.java (original)
+++ xml/security/trunk/src/org/jcp/xml/dsig/internal/dom/DOMKeyInfoFactory.java Tue Mar 7 11:02:32 2006
@@ -23,7 +23,8 @@
package org.jcp.xml.dsig.internal.dom;
import java.math.BigInteger;
-import java.security.*;
+import java.security.KeyException;
+import java.security.PublicKey;
import java.util.List;
import javax.xml.crypto.*;
import javax.xml.crypto.dsig.*;
@@ -40,15 +41,6 @@
*/
public final class DOMKeyInfoFactory extends KeyInfoFactory {
- static {
- AccessController.doPrivileged(new PrivilegedAction() {
- public Object run() {
- Security.addProvider(new XMLDSigRI());
- return null;
- }
- });
- }
-
public DOMKeyInfoFactory() { }
public KeyInfo newKeyInfo(List content) {
@@ -138,7 +130,7 @@
"support DOM Level 2 and be namespace aware");
}
if (tag.equals("KeyInfo")) {
- return new DOMKeyInfo(element, null);
+ return new DOMKeyInfo(element, null, getProvider());
} else {
throw new MarshalException("invalid KeyInfo tag: " + tag);
}
Modified: xml/security/trunk/src/org/jcp/xml/dsig/internal/dom/DOMManifest.java
URL: http://svn.apache.org/viewcvs/xml/security/trunk/src/org/jcp/xml/dsig/internal/dom/DOMManifest.java?rev=383958&r1=383957&r2=383958&view=diff
==============================================================================
--- xml/security/trunk/src/org/jcp/xml/dsig/internal/dom/DOMManifest.java (original)
+++ xml/security/trunk/src/org/jcp/xml/dsig/internal/dom/DOMManifest.java Tue Mar 7 11:02:32 2006
@@ -26,6 +26,7 @@
import javax.xml.crypto.dom.DOMCryptoContext;
import javax.xml.crypto.dsig.*;
+import java.security.Provider;
import java.util.*;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
@@ -78,13 +79,13 @@
*
* @param manElem a Manifest element
*/
- public DOMManifest(Element manElem, XMLCryptoContext context)
- throws MarshalException {
+ public DOMManifest(Element manElem, XMLCryptoContext context,
+ Provider provider) throws MarshalException {
this.id = DOMUtils.getAttributeValue(manElem, "Id");
Element refElem = DOMUtils.getFirstChildElement(manElem);
List refs = new ArrayList();
while (refElem != null) {
- refs.add(new DOMReference(refElem, context));
+ refs.add(new DOMReference(refElem, context, provider));
refElem = DOMUtils.getNextSiblingElement(refElem);
}
this.references = Collections.unmodifiableList(refs);
Modified: xml/security/trunk/src/org/jcp/xml/dsig/internal/dom/DOMReference.java
URL: http://svn.apache.org/viewcvs/xml/security/trunk/src/org/jcp/xml/dsig/internal/dom/DOMReference.java?rev=383958&r1=383957&r2=383958&view=diff
==============================================================================
--- xml/security/trunk/src/org/jcp/xml/dsig/internal/dom/DOMReference.java (original)
+++ xml/security/trunk/src/org/jcp/xml/dsig/internal/dom/DOMReference.java Tue Mar 7 11:02:32 2006
@@ -81,6 +81,7 @@
private Data derefData;
private InputStream dis;
private MessageDigest md;
+ private Provider provider;
/**
* Creates a <code>Reference</code> from the specified parameters.
@@ -98,18 +99,20 @@
* not of type <code>Transform</code>
*/
public DOMReference(String uri, String type, DigestMethod dm,
- List transforms, String id) {
- this(uri, type, dm, null, null, transforms, id, null);
+ List transforms, String id, Provider provider) {
+ this(uri, type, dm, null, null, transforms, id, null, provider);
}
public DOMReference(String uri, String type, DigestMethod dm,
- List appliedTransforms, Data result, List transforms, String id) {
- this(uri, type, dm, appliedTransforms, result, transforms, id, null);
+ List appliedTransforms, Data result, List transforms, String id,
+ Provider provider) {
+ this(uri, type, dm, appliedTransforms,
+ result, transforms, id, null, provider);
}
public DOMReference(String uri, String type, DigestMethod dm,
List appliedTransforms, Data result, List transforms, String id,
- byte[] digestValue){
+ byte[] digestValue, Provider provider) {
if (dm == null) {
throw new NullPointerException("DigestMethod must be non-null");
}
@@ -157,6 +160,7 @@
this.digested = true;
}
this.appliedTransformData = result;
+ this.provider = provider;
}
/**
@@ -164,15 +168,16 @@
*
* @param refElem a Reference element
*/
- public DOMReference(Element refElem, XMLCryptoContext context)
- throws MarshalException {
+ public DOMReference(Element refElem, XMLCryptoContext context,
+ Provider provider) throws MarshalException {
// unmarshal Transforms, if specified
Element nextSibling = DOMUtils.getFirstChildElement(refElem);
List transforms = new ArrayList(5);
if (nextSibling.getLocalName().equals("Transforms")) {
Element transformElem = DOMUtils.getFirstChildElement(nextSibling);
while (transformElem != null) {
- transforms.add(new DOMTransform(transformElem, context));
+ transforms.add
+ (new DOMTransform(transformElem, context, provider));
transformElem = DOMUtils.getNextSiblingElement(transformElem);
}
nextSibling = DOMUtils.getNextSiblingElement(nextSibling);
@@ -206,6 +211,7 @@
this.appliedTransforms = Collections.EMPTY_LIST;
this.allTransforms = transforms;
this.appliedTransformData = null;
+ this.provider = provider;
}
public DigestMethod getDigestMethod() {
@@ -415,8 +421,14 @@
xi = new XMLSignatureInput
(((OctetStreamData)data).getOctetStream());
} else if (data instanceof NodeSetData) {
- TransformService spi = TransformService.getInstance
- (CanonicalizationMethod.INCLUSIVE, "DOM");
+ TransformService spi = null;
+ try {
+ spi = TransformService.getInstance
+ (CanonicalizationMethod.INCLUSIVE, "DOM");
+ } catch (NoSuchAlgorithmException nsae) {
+ spi = TransformService.getInstance
+ (CanonicalizationMethod.INCLUSIVE, "DOM", provider);
+ }
data = spi.transform(data, context);
xi = new XMLSignatureInput
(((OctetStreamData)data).getOctetStream());
Modified: xml/security/trunk/src/org/jcp/xml/dsig/internal/dom/DOMRetrievalMethod.java
URL: http://svn.apache.org/viewcvs/xml/security/trunk/src/org/jcp/xml/dsig/internal/dom/DOMRetrievalMethod.java?rev=383958&r1=383957&r2=383958&view=diff
==============================================================================
--- xml/security/trunk/src/org/jcp/xml/dsig/internal/dom/DOMRetrievalMethod.java (original)
+++ xml/security/trunk/src/org/jcp/xml/dsig/internal/dom/DOMRetrievalMethod.java Tue Mar 7 11:02:32 2006
@@ -32,6 +32,7 @@
import java.io.ByteArrayInputStream;
import java.net.URI;
import java.net.URISyntaxException;
+import java.security.Provider;
import java.util.*;
import javax.xml.crypto.*;
import javax.xml.crypto.dsig.*;
@@ -110,8 +111,8 @@
*
* @param rmElem a RetrievalMethod element
*/
- public DOMRetrievalMethod(Element rmElem, XMLCryptoContext context)
- throws MarshalException {
+ public DOMRetrievalMethod(Element rmElem, XMLCryptoContext context,
+ Provider provider) throws MarshalException {
// get URI and Type attributes
uri = DOMUtils.getAttributeValue(rmElem, "URI");
type = DOMUtils.getAttributeValue(rmElem, "Type");
@@ -126,7 +127,8 @@
Element transformElem =
DOMUtils.getFirstChildElement(transformsElem);
while (transformElem != null) {
- transforms.add(new DOMTransform(transformElem, context));
+ transforms.add
+ (new DOMTransform(transformElem, context, provider));
transformElem = DOMUtils.getNextSiblingElement(transformElem);
}
}
Modified: xml/security/trunk/src/org/jcp/xml/dsig/internal/dom/DOMSignedInfo.java
URL: http://svn.apache.org/viewcvs/xml/security/trunk/src/org/jcp/xml/dsig/internal/dom/DOMSignedInfo.java?rev=383958&r1=383957&r2=383958&view=diff
==============================================================================
--- xml/security/trunk/src/org/jcp/xml/dsig/internal/dom/DOMSignedInfo.java (original)
+++ xml/security/trunk/src/org/jcp/xml/dsig/internal/dom/DOMSignedInfo.java Tue Mar 7 11:02:32 2006
@@ -32,6 +32,7 @@
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStream;
+import java.security.Provider;
import java.util.*;
import java.util.logging.Level;
import java.util.logging.Logger;
@@ -121,8 +122,8 @@
*
* @param siElem a SignedInfo element
*/
- public DOMSignedInfo(Element siElem, XMLCryptoContext context)
- throws MarshalException {
+ public DOMSignedInfo(Element siElem, XMLCryptoContext context,
+ Provider provider) throws MarshalException {
localSiElem = siElem;
ownerDoc = siElem.getOwnerDocument();
@@ -131,7 +132,8 @@
// unmarshal CanonicalizationMethod
Element cmElem = DOMUtils.getFirstChildElement(siElem);
- canonicalizationMethod = new DOMCanonicalizationMethod(cmElem, context);
+ canonicalizationMethod = new DOMCanonicalizationMethod
+ (cmElem, context, provider);
// unmarshal SignatureMethod
Element smElem = DOMUtils.getNextSiblingElement(cmElem);
@@ -141,7 +143,7 @@
ArrayList refList = new ArrayList(5);
Element refElem = DOMUtils.getNextSiblingElement(smElem);
while (refElem != null) {
- refList.add(new DOMReference(refElem, context));
+ refList.add(new DOMReference(refElem, context, provider));
refElem = DOMUtils.getNextSiblingElement(refElem);
}
references = Collections.unmodifiableList(refList);
Modified: xml/security/trunk/src/org/jcp/xml/dsig/internal/dom/DOMTransform.java
URL: http://svn.apache.org/viewcvs/xml/security/trunk/src/org/jcp/xml/dsig/internal/dom/DOMTransform.java?rev=383958&r1=383957&r2=383958&view=diff
==============================================================================
--- xml/security/trunk/src/org/jcp/xml/dsig/internal/dom/DOMTransform.java (original)
+++ xml/security/trunk/src/org/jcp/xml/dsig/internal/dom/DOMTransform.java Tue Mar 7 11:02:32 2006
@@ -25,6 +25,7 @@
import java.io.OutputStream;
import java.security.InvalidAlgorithmParameterException;
import java.security.NoSuchAlgorithmException;
+import java.security.Provider;
import java.security.spec.AlgorithmParameterSpec;
import org.w3c.dom.Document;
@@ -63,14 +64,18 @@
*
* @param transElem a Transform element
*/
- public DOMTransform(Element transElem, XMLCryptoContext context)
- throws MarshalException {
+ public DOMTransform(Element transElem, XMLCryptoContext context,
+ Provider provider) throws MarshalException {
Document ownerDoc = transElem.getOwnerDocument();
String algorithm = DOMUtils.getAttributeValue(transElem, "Algorithm");
try {
spi = TransformService.getInstance(algorithm, "DOM");
- } catch (NoSuchAlgorithmException e) {
- throw new MarshalException(e);
+ } catch (NoSuchAlgorithmException e1) {
+ try {
+ spi = TransformService.getInstance(algorithm, "DOM", provider);
+ } catch (NoSuchAlgorithmException e2) {
+ throw new MarshalException(e2);
+ }
}
try {
spi.init(new javax.xml.crypto.dom.DOMStructure(transElem), context);
Modified: xml/security/trunk/src/org/jcp/xml/dsig/internal/dom/DOMXMLObject.java
URL: http://svn.apache.org/viewcvs/xml/security/trunk/src/org/jcp/xml/dsig/internal/dom/DOMXMLObject.java?rev=383958&r1=383957&r2=383958&view=diff
==============================================================================
--- xml/security/trunk/src/org/jcp/xml/dsig/internal/dom/DOMXMLObject.java (original)
+++ xml/security/trunk/src/org/jcp/xml/dsig/internal/dom/DOMXMLObject.java Tue Mar 7 11:02:32 2006
@@ -26,6 +26,7 @@
import javax.xml.crypto.dom.DOMCryptoContext;
import javax.xml.crypto.dsig.*;
+import java.security.Provider;
import java.util.*;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
@@ -82,8 +83,8 @@
* @param objElem an Object element
* @throws MarshalException if there is an error when unmarshalling
*/
- public DOMXMLObject(Element objElem, XMLCryptoContext context)
- throws MarshalException {
+ public DOMXMLObject(Element objElem, XMLCryptoContext context,
+ Provider provider) throws MarshalException {
// unmarshal attributes
this.encoding = DOMUtils.getAttributeValue(objElem, "Encoding");
this.id = DOMUtils.getAttributeValue(objElem, "Id");
@@ -98,7 +99,7 @@
Element childElem = (Element) child;
String tag = childElem.getLocalName();
if (tag.equals("Manifest")) {
- content.add(new DOMManifest(childElem, context));
+ content.add(new DOMManifest(childElem, context, provider));
continue;
} else if (tag.equals("SignatureProperties")) {
content.add(new DOMSignatureProperties(childElem));
Modified: xml/security/trunk/src/org/jcp/xml/dsig/internal/dom/DOMXMLSignature.java
URL: http://svn.apache.org/viewcvs/xml/security/trunk/src/org/jcp/xml/dsig/internal/dom/DOMXMLSignature.java?rev=383958&r1=383957&r2=383958&view=diff
==============================================================================
--- xml/security/trunk/src/org/jcp/xml/dsig/internal/dom/DOMXMLSignature.java (original)
+++ xml/security/trunk/src/org/jcp/xml/dsig/internal/dom/DOMXMLSignature.java Tue Mar 7 11:02:32 2006
@@ -38,6 +38,7 @@
import java.io.*;
import java.security.InvalidKeyException;
import java.security.Key;
+import java.security.Provider;
import java.util.Collections;
import java.util.ArrayList;
import java.util.HashMap;
@@ -121,8 +122,8 @@
* @param sigElem Signature element
* @throws MarshalException if XMLSignature cannot be unmarshalled
*/
- public DOMXMLSignature(Element sigElem, XMLCryptoContext context)
- throws MarshalException {
+ public DOMXMLSignature(Element sigElem, XMLCryptoContext context,
+ Provider provider) throws MarshalException {
localSigElem = sigElem;
ownerDoc = localSigElem.getOwnerDocument();
@@ -131,7 +132,7 @@
// unmarshal SignedInfo
Element siElem = DOMUtils.getFirstChildElement(localSigElem);
- si = new DOMSignedInfo(siElem, context);
+ si = new DOMSignedInfo(siElem, context, provider);
// unmarshal SignatureValue
Element sigValElem = DOMUtils.getNextSiblingElement(siElem);
@@ -140,7 +141,7 @@
// unmarshal KeyInfo, if specified
Element nextSibling = DOMUtils.getNextSiblingElement(sigValElem);
if (nextSibling != null && nextSibling.getLocalName().equals("KeyInfo")) {
- ki = new DOMKeyInfo(nextSibling, context);
+ ki = new DOMKeyInfo(nextSibling, context, provider);
nextSibling = DOMUtils.getNextSiblingElement(nextSibling);
}
@@ -150,7 +151,8 @@
} else {
List tempObjects = new ArrayList();
while (nextSibling != null) {
- tempObjects.add(new DOMXMLObject(nextSibling, context));
+ tempObjects.add
+ (new DOMXMLObject(nextSibling, context, provider));
nextSibling = DOMUtils.getNextSiblingElement(nextSibling);
}
objects = Collections.unmodifiableList(tempObjects);
Modified: xml/security/trunk/src/org/jcp/xml/dsig/internal/dom/DOMXMLSignatureFactory.java
URL: http://svn.apache.org/viewcvs/xml/security/trunk/src/org/jcp/xml/dsig/internal/dom/DOMXMLSignatureFactory.java?rev=383958&r1=383957&r2=383958&view=diff
==============================================================================
--- xml/security/trunk/src/org/jcp/xml/dsig/internal/dom/DOMXMLSignatureFactory.java (original)
+++ xml/security/trunk/src/org/jcp/xml/dsig/internal/dom/DOMXMLSignatureFactory.java Tue Mar 7 11:02:32 2006
@@ -28,7 +28,8 @@
import javax.xml.crypto.dsig.keyinfo.*;
import javax.xml.crypto.dsig.spec.*;
-import java.security.*;
+import java.security.InvalidAlgorithmParameterException;
+import java.security.NoSuchAlgorithmException;
import java.security.spec.AlgorithmParameterSpec;
import java.util.List;
import org.w3c.dom.Document;
@@ -42,15 +43,6 @@
*/
public final class DOMXMLSignatureFactory extends XMLSignatureFactory {
- static {
- AccessController.doPrivileged(new PrivilegedAction() {
- public Object run() {
- Security.addProvider(new XMLDSigRI());
- return null;
- }
- });
- }
-
/**
* Initializes a new instance of this class.
*/
@@ -71,7 +63,7 @@
public Reference newReference(String uri, DigestMethod dm, List transforms,
String type, String id) {
- return new DOMReference(uri, type, dm, transforms, id);
+ return new DOMReference(uri, type, dm, transforms, id, getProvider());
}
public Reference newReference(String uri, DigestMethod dm,
@@ -87,7 +79,7 @@
throw new NullPointerException("result cannot be null");
}
return new DOMReference
- (uri, type, dm, appliedTransforms, result, transforms, id);
+ (uri, type, dm, appliedTransforms, result, transforms, id, getProvider());
}
public Reference newReference(String uri, DigestMethod dm, List transforms,
@@ -96,7 +88,7 @@
throw new NullPointerException("digestValue cannot be null");
}
return new DOMReference
- (uri, type, dm, null, null, transforms, id, digestValue);
+ (uri, type, dm, null, null, transforms, id, digestValue, getProvider());
}
public SignedInfo newSignedInfo(CanonicalizationMethod cm,
@@ -174,7 +166,7 @@
"support DOM Level 2 and be namespace aware");
}
if (tag.equals("Signature")) {
- return new DOMXMLSignature(element, context);
+ return new DOMXMLSignature(element, context, getProvider());
} else {
throw new MarshalException("invalid Signature tag: " + tag);
}
@@ -221,7 +213,12 @@
public Transform newTransform(String algorithm,
TransformParameterSpec params) throws NoSuchAlgorithmException,
InvalidAlgorithmParameterException {
- TransformService spi = TransformService.getInstance(algorithm, "DOM");
+ TransformService spi;
+ try {
+ spi = TransformService.getInstance(algorithm, "DOM");
+ } catch (NoSuchAlgorithmException nsae) {
+ spi = TransformService.getInstance(algorithm, "DOM", getProvider());
+ }
spi.init(params);
return new DOMTransform(spi);
}
@@ -229,7 +226,12 @@
public Transform newTransform(String algorithm,
XMLStructure params) throws NoSuchAlgorithmException,
InvalidAlgorithmParameterException {
- TransformService spi = TransformService.getInstance(algorithm, "DOM");
+ TransformService spi;
+ try {
+ spi = TransformService.getInstance(algorithm, "DOM");
+ } catch (NoSuchAlgorithmException nsae) {
+ spi = TransformService.getInstance(algorithm, "DOM", getProvider());
+ }
if (params == null) {
spi.init(null);
} else {
@@ -241,7 +243,12 @@
public CanonicalizationMethod newCanonicalizationMethod(String algorithm,
C14NMethodParameterSpec params) throws NoSuchAlgorithmException,
InvalidAlgorithmParameterException {
- TransformService spi = TransformService.getInstance(algorithm, "DOM");
+ TransformService spi;
+ try {
+ spi = TransformService.getInstance(algorithm, "DOM");
+ } catch (NoSuchAlgorithmException nsae) {
+ spi = TransformService.getInstance(algorithm, "DOM", getProvider());
+ }
spi.init(params);
return new DOMCanonicalizationMethod(spi);
}
@@ -249,7 +256,12 @@
public CanonicalizationMethod newCanonicalizationMethod(String algorithm,
XMLStructure params) throws NoSuchAlgorithmException,
InvalidAlgorithmParameterException {
- TransformService spi = TransformService.getInstance(algorithm, "DOM");
+ TransformService spi;
+ try {
+ spi = TransformService.getInstance(algorithm, "DOM");
+ } catch (NoSuchAlgorithmException nsae) {
+ spi = TransformService.getInstance(algorithm, "DOM", getProvider());
+ }
if (params == null) {
spi.init(null);
} else {