You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@santuario.apache.org by co...@apache.org on 2014/06/12 13:33:42 UTC
svn commit: r1602127 -
/santuario/xml-security-java/trunk/src/main/java/org/apache/jcp/xml/dsig/internal/dom/
Author: coheigea
Date: Thu Jun 12 11:33:42 2014
New Revision: 1602127
URL: http://svn.apache.org/r1602127
Log:
[SANTUARIO-350] - Unmarshalling from existing elements doesn't enforce syntax & semantic requirements
Modified:
santuario/xml-security-java/trunk/src/main/java/org/apache/jcp/xml/dsig/internal/dom/DOMKeyInfo.java
santuario/xml-security-java/trunk/src/main/java/org/apache/jcp/xml/dsig/internal/dom/DOMKeyInfoFactory.java
santuario/xml-security-java/trunk/src/main/java/org/apache/jcp/xml/dsig/internal/dom/DOMKeyValue.java
santuario/xml-security-java/trunk/src/main/java/org/apache/jcp/xml/dsig/internal/dom/DOMManifest.java
santuario/xml-security-java/trunk/src/main/java/org/apache/jcp/xml/dsig/internal/dom/DOMPGPData.java
santuario/xml-security-java/trunk/src/main/java/org/apache/jcp/xml/dsig/internal/dom/DOMReference.java
santuario/xml-security-java/trunk/src/main/java/org/apache/jcp/xml/dsig/internal/dom/DOMRetrievalMethod.java
santuario/xml-security-java/trunk/src/main/java/org/apache/jcp/xml/dsig/internal/dom/DOMSignatureProperties.java
santuario/xml-security-java/trunk/src/main/java/org/apache/jcp/xml/dsig/internal/dom/DOMSignedInfo.java
santuario/xml-security-java/trunk/src/main/java/org/apache/jcp/xml/dsig/internal/dom/DOMUtils.java
santuario/xml-security-java/trunk/src/main/java/org/apache/jcp/xml/dsig/internal/dom/DOMX509Data.java
santuario/xml-security-java/trunk/src/main/java/org/apache/jcp/xml/dsig/internal/dom/DOMX509IssuerSerial.java
santuario/xml-security-java/trunk/src/main/java/org/apache/jcp/xml/dsig/internal/dom/DOMXMLObject.java
santuario/xml-security-java/trunk/src/main/java/org/apache/jcp/xml/dsig/internal/dom/DOMXMLSignature.java
santuario/xml-security-java/trunk/src/main/java/org/apache/jcp/xml/dsig/internal/dom/DOMXMLSignatureFactory.java
Modified: santuario/xml-security-java/trunk/src/main/java/org/apache/jcp/xml/dsig/internal/dom/DOMKeyInfo.java
URL: http://svn.apache.org/viewvc/santuario/xml-security-java/trunk/src/main/java/org/apache/jcp/xml/dsig/internal/dom/DOMKeyInfo.java?rev=1602127&r1=1602126&r2=1602127&view=diff
==============================================================================
--- santuario/xml-security-java/trunk/src/main/java/org/apache/jcp/xml/dsig/internal/dom/DOMKeyInfo.java (original)
+++ santuario/xml-security-java/trunk/src/main/java/org/apache/jcp/xml/dsig/internal/dom/DOMKeyInfo.java Thu Jun 12 11:33:42 2014
@@ -112,16 +112,17 @@ public final class DOMKeyInfo extends Ba
}
Element childElem = (Element)child;
String localName = childElem.getLocalName();
- if (localName.equals("X509Data")) {
+ String namespace = childElem.getNamespaceURI();
+ if (localName.equals("X509Data") && XMLSignature.XMLNS.equals(namespace)) {
content.add(new DOMX509Data(childElem));
- } else if (localName.equals("KeyName")) {
+ } else if (localName.equals("KeyName") && XMLSignature.XMLNS.equals(namespace)) {
content.add(new DOMKeyName(childElem));
- } else if (localName.equals("KeyValue")) {
+ } else if (localName.equals("KeyValue") && XMLSignature.XMLNS.equals(namespace)) {
content.add(DOMKeyValue.unmarshal(childElem));
- } else if (localName.equals("RetrievalMethod")) {
+ } else if (localName.equals("RetrievalMethod") && XMLSignature.XMLNS.equals(namespace)) {
content.add(new DOMRetrievalMethod(childElem,
context, provider));
- } else if (localName.equals("PGPData")) {
+ } else if (localName.equals("PGPData") && XMLSignature.XMLNS.equals(namespace)) {
content.add(new DOMPGPData(childElem));
} else { //may be MgmtData, SPKIData or element from other namespace
content.add(new javax.xml.crypto.dom.DOMStructure(childElem));
Modified: santuario/xml-security-java/trunk/src/main/java/org/apache/jcp/xml/dsig/internal/dom/DOMKeyInfoFactory.java
URL: http://svn.apache.org/viewvc/santuario/xml-security-java/trunk/src/main/java/org/apache/jcp/xml/dsig/internal/dom/DOMKeyInfoFactory.java?rev=1602127&r1=1602126&r2=1602127&view=diff
==============================================================================
--- santuario/xml-security-java/trunk/src/main/java/org/apache/jcp/xml/dsig/internal/dom/DOMKeyInfoFactory.java (original)
+++ santuario/xml-security-java/trunk/src/main/java/org/apache/jcp/xml/dsig/internal/dom/DOMKeyInfoFactory.java Thu Jun 12 11:33:42 2014
@@ -31,9 +31,12 @@ import java.security.interfaces.DSAPubli
import java.security.interfaces.ECPublicKey;
import java.security.interfaces.RSAPublicKey;
import java.util.List;
+
import javax.xml.crypto.*;
import javax.xml.crypto.dom.DOMCryptoContext;
+import javax.xml.crypto.dsig.XMLSignature;
import javax.xml.crypto.dsig.keyinfo.*;
+
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
@@ -161,14 +164,15 @@ public final class DOMKeyInfoFactory ext
// check tag
String tag = element.getLocalName();
- if (tag == null) {
+ String namespace = element.getNamespaceURI();
+ if (tag == null || namespace == null) {
throw new MarshalException("Document implementation must " +
"support DOM Level 2 and be namespace aware");
}
- if (tag.equals("KeyInfo")) {
+ if (tag.equals("KeyInfo") && XMLSignature.XMLNS.equals(namespace)) {
return new DOMKeyInfo(element, new UnmarshalContext(), getProvider());
} else {
- throw new MarshalException("invalid KeyInfo tag: " + tag);
+ throw new MarshalException("invalid KeyInfo tag: " + namespace + ":" + tag);
}
}
Modified: santuario/xml-security-java/trunk/src/main/java/org/apache/jcp/xml/dsig/internal/dom/DOMKeyValue.java
URL: http://svn.apache.org/viewvc/santuario/xml-security-java/trunk/src/main/java/org/apache/jcp/xml/dsig/internal/dom/DOMKeyValue.java?rev=1602127&r1=1602126&r2=1602127&view=diff
==============================================================================
--- santuario/xml-security-java/trunk/src/main/java/org/apache/jcp/xml/dsig/internal/dom/DOMKeyValue.java (original)
+++ santuario/xml-security-java/trunk/src/main/java/org/apache/jcp/xml/dsig/internal/dom/DOMKeyValue.java Thu Jun 12 11:33:42 2014
@@ -29,6 +29,14 @@ import javax.xml.crypto.dsig.*;
import javax.xml.crypto.dsig.keyinfo.KeyValue;
+
+
+
+
+
+
+
+
// import java.io.IOException;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
@@ -87,11 +95,16 @@ public abstract class DOMKeyValue<K exte
static KeyValue unmarshal(Element kvElem) throws MarshalException {
Element kvtElem = DOMUtils.getFirstChildElement(kvElem);
- if (kvtElem.getLocalName().equals("DSAKeyValue")) {
+ if (kvtElem == null) {
+ throw new MarshalException("KeyValue must contain at least one type");
+ }
+
+ String namespace = kvtElem.getNamespaceURI();
+ if (kvtElem.getLocalName().equals("DSAKeyValue") && XMLSignature.XMLNS.equals(namespace)) {
return new DSA(kvtElem);
- } else if (kvtElem.getLocalName().equals("RSAKeyValue")) {
+ } else if (kvtElem.getLocalName().equals("RSAKeyValue") && XMLSignature.XMLNS.equals(namespace)) {
return new RSA(kvtElem);
- } else if (kvtElem.getLocalName().equals("ECKeyValue")) {
+ } else if (kvtElem.getLocalName().equals("ECKeyValue") && XMLDSIG_11_XMLNS.equals(namespace)) {
return new EC(kvtElem);
} else {
return new Unknown(kvtElem);
@@ -221,10 +234,12 @@ public abstract class DOMKeyValue<K exte
}
}
Element modulusElem = DOMUtils.getFirstChildElement(kvtElem,
- "Modulus");
+ "Modulus",
+ XMLSignature.XMLNS);
BigInteger modulus = decode(modulusElem);
Element exponentElem = DOMUtils.getNextSiblingElement(modulusElem,
- "Exponent");
+ "Exponent",
+ XMLSignature.XMLNS);
BigInteger exponent = decode(exponentElem);
RSAPublicKeySpec spec = new RSAPublicKeySpec(modulus, exponent);
return (RSAPublicKey) generatePublicKey(rsakf, spec);
@@ -274,22 +289,29 @@ public abstract class DOMKeyValue<K exte
}
}
Element curElem = DOMUtils.getFirstChildElement(kvtElem);
+ if (curElem == null) {
+ throw new MarshalException("KeyValue must contain at least one type");
+ }
// check for P and Q
BigInteger p = null;
BigInteger q = null;
- if (curElem.getLocalName().equals("P")) {
+ if (curElem.getLocalName().equals("P") && XMLSignature.XMLNS.equals(curElem.getNamespaceURI())) {
p = decode(curElem);
- curElem = DOMUtils.getNextSiblingElement(curElem, "Q");
+ curElem = DOMUtils.getNextSiblingElement(curElem, "Q", XMLSignature.XMLNS);
q = decode(curElem);
curElem = DOMUtils.getNextSiblingElement(curElem);
}
BigInteger g = null;
- if (curElem.getLocalName().equals("G")) {
+ if (curElem != null
+ && curElem.getLocalName().equals("G") && XMLSignature.XMLNS.equals(curElem.getNamespaceURI())) {
g = decode(curElem);
- curElem = DOMUtils.getNextSiblingElement(curElem, "Y");
+ curElem = DOMUtils.getNextSiblingElement(curElem, "Y", XMLSignature.XMLNS);
+ }
+ BigInteger y = null;
+ if (curElem != null) {
+ y = decode(curElem);
+ curElem = DOMUtils.getNextSiblingElement(curElem);
}
- BigInteger y = decode(curElem);
- curElem = DOMUtils.getNextSiblingElement(curElem);
//if (curElem != null && curElem.getLocalName().equals("J")) {
//j = new DOMCryptoBinary(curElem.getFirstChild());
// curElem = DOMUtils.getNextSiblingElement(curElem);
@@ -413,10 +435,16 @@ public abstract class DOMKeyValue<K exte
}
ECParameterSpec ecParams = null;
Element curElem = DOMUtils.getFirstChildElement(kvtElem);
- if (curElem.getLocalName().equals("ECParameters")) {
+ if (curElem == null) {
+ throw new MarshalException("KeyValue must contain at least one type");
+ }
+
+ if (curElem.getLocalName().equals("ECParameters")
+ && XMLDSIG_11_XMLNS.equals(curElem.getNamespaceURI())) {
throw new UnsupportedOperationException
("ECParameters not supported");
- } else if (curElem.getLocalName().equals("NamedCurve")) {
+ } else if (curElem.getLocalName().equals("NamedCurve")
+ && XMLDSIG_11_XMLNS.equals(curElem.getNamespaceURI())) {
String uri = DOMUtils.getAttributeValue(curElem, "URI");
// strip off "urn:oid"
if (uri.startsWith("urn:oid:")) {
@@ -436,7 +464,7 @@ public abstract class DOMKeyValue<K exte
} else {
throw new MarshalException("Invalid ECKeyValue");
}
- curElem = DOMUtils.getNextSiblingElement(curElem, "PublicKey");
+ curElem = DOMUtils.getNextSiblingElement(curElem, "PublicKey", XMLDSIG_11_XMLNS);
ECPoint ecPoint = null;
try {
Object[] args = new Object[] { Base64.decode(curElem),
Modified: santuario/xml-security-java/trunk/src/main/java/org/apache/jcp/xml/dsig/internal/dom/DOMManifest.java
URL: http://svn.apache.org/viewvc/santuario/xml-security-java/trunk/src/main/java/org/apache/jcp/xml/dsig/internal/dom/DOMManifest.java?rev=1602127&r1=1602126&r2=1602127&view=diff
==============================================================================
--- santuario/xml-security-java/trunk/src/main/java/org/apache/jcp/xml/dsig/internal/dom/DOMManifest.java (original)
+++ santuario/xml-security-java/trunk/src/main/java/org/apache/jcp/xml/dsig/internal/dom/DOMManifest.java Thu Jun 12 11:33:42 2014
@@ -87,16 +87,17 @@ public final class DOMManifest extends B
boolean secVal = Utils.secureValidation(context);
- Element refElem = DOMUtils.getFirstChildElement(manElem, "Reference");
+ Element refElem = DOMUtils.getFirstChildElement(manElem, "Reference", XMLSignature.XMLNS);
List<DOMReference> refs = new ArrayList<DOMReference>();
refs.add(new DOMReference(refElem, context, provider));
refElem = DOMUtils.getNextSiblingElement(refElem);
while (refElem != null) {
String localName = refElem.getLocalName();
- if (!localName.equals("Reference")) {
+ String namespace = refElem.getNamespaceURI();
+ if (!localName.equals("Reference") || !XMLSignature.XMLNS.equals(namespace)) {
throw new MarshalException("Invalid element name: " +
- localName + ", expected Reference");
+ namespace + ":" + localName + ", expected Reference");
}
refs.add(new DOMReference(refElem, context, provider));
if (secVal && refs.size() > DOMSignedInfo.MAXIMUM_REFERENCE_COUNT) {
Modified: santuario/xml-security-java/trunk/src/main/java/org/apache/jcp/xml/dsig/internal/dom/DOMPGPData.java
URL: http://svn.apache.org/viewvc/santuario/xml-security-java/trunk/src/main/java/org/apache/jcp/xml/dsig/internal/dom/DOMPGPData.java?rev=1602127&r1=1602126&r2=1602127&view=diff
==============================================================================
--- santuario/xml-security-java/trunk/src/main/java/org/apache/jcp/xml/dsig/internal/dom/DOMPGPData.java (original)
+++ santuario/xml-security-java/trunk/src/main/java/org/apache/jcp/xml/dsig/internal/dom/DOMPGPData.java Thu Jun 12 11:33:42 2014
@@ -25,12 +25,14 @@
package org.apache.jcp.xml.dsig.internal.dom;
import java.util.*;
+
import javax.xml.crypto.*;
+import javax.xml.crypto.dsig.XMLSignature;
import javax.xml.crypto.dsig.keyinfo.PGPData;
+
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
-
import org.apache.xml.security.exceptions.Base64DecodingException;
import org.apache.xml.security.utils.Base64;
@@ -150,10 +152,11 @@ public final class DOMPGPData extends Ba
if (n.getNodeType() == Node.ELEMENT_NODE) {
Element childElem = (Element)n;
String localName = childElem.getLocalName();
+ String namespace = childElem.getNamespaceURI();
try {
- if (localName.equals("PGPKeyID")) {
+ if (localName.equals("PGPKeyID") && XMLSignature.XMLNS.equals(namespace)) {
keyId = Base64.decode(childElem);
- } else if (localName.equals("PGPKeyPacket")){
+ } else if (localName.equals("PGPKeyPacket") && XMLSignature.XMLNS.equals(namespace)) {
keyPacket = Base64.decode(childElem);
} else {
other.add
Modified: santuario/xml-security-java/trunk/src/main/java/org/apache/jcp/xml/dsig/internal/dom/DOMReference.java
URL: http://svn.apache.org/viewvc/santuario/xml-security-java/trunk/src/main/java/org/apache/jcp/xml/dsig/internal/dom/DOMReference.java?rev=1602127&r1=1602126&r2=1602127&view=diff
==============================================================================
--- santuario/xml-security-java/trunk/src/main/java/org/apache/jcp/xml/dsig/internal/dom/DOMReference.java (original)
+++ santuario/xml-security-java/trunk/src/main/java/org/apache/jcp/xml/dsig/internal/dom/DOMReference.java Thu Jun 12 11:33:42 2014
@@ -40,10 +40,10 @@ import java.net.URI;
import java.net.URISyntaxException;
import java.security.*;
import java.util.*;
+
import org.w3c.dom.Attr;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
-
import org.apache.jcp.xml.dsig.internal.DigesterOutputStream;
import org.apache.xml.security.algorithms.MessageDigestAlgorithm;
import org.apache.xml.security.exceptions.Base64DecodingException;
@@ -197,14 +197,17 @@ public final class DOMReference extends
// unmarshal Transforms, if specified
Element nextSibling = DOMUtils.getFirstChildElement(refElem);
List<Transform> transforms = new ArrayList<Transform>(5);
- if (nextSibling.getLocalName().equals("Transforms")) {
+ if (nextSibling.getLocalName().equals("Transforms")
+ && XMLSignature.XMLNS.equals(nextSibling.getNamespaceURI())) {
Element transformElem = DOMUtils.getFirstChildElement(nextSibling,
- "Transform");
+ "Transform",
+ XMLSignature.XMLNS);
transforms.add(new DOMTransform(transformElem, context, provider));
transformElem = DOMUtils.getNextSiblingElement(transformElem);
while (transformElem != null) {
String localName = transformElem.getLocalName();
- if (!localName.equals("Transform")) {
+ String namespace = transformElem.getNamespaceURI();
+ if (!localName.equals("Transform") || !XMLSignature.XMLNS.equals(namespace)) {
throw new MarshalException(
"Invalid element name: " + localName +
", expected Transform");
@@ -220,7 +223,8 @@ public final class DOMReference extends
}
nextSibling = DOMUtils.getNextSiblingElement(nextSibling);
}
- if (!nextSibling.getLocalName().equals("DigestMethod")) {
+ if (!nextSibling.getLocalName().equals("DigestMethod")
+ && XMLSignature.XMLNS.equals(nextSibling.getNamespaceURI())) {
throw new MarshalException("Invalid element name: " +
nextSibling.getLocalName() +
", expected DigestMethod");
@@ -238,7 +242,7 @@ public final class DOMReference extends
}
// unmarshal DigestValue
- Element dvElem = DOMUtils.getNextSiblingElement(dmElem, "DigestValue");
+ Element dvElem = DOMUtils.getNextSiblingElement(dmElem, "DigestValue", XMLSignature.XMLNS);
try {
this.digestValue = Base64.decode(dvElem);
} catch (Base64DecodingException bde) {
Modified: santuario/xml-security-java/trunk/src/main/java/org/apache/jcp/xml/dsig/internal/dom/DOMRetrievalMethod.java
URL: http://svn.apache.org/viewvc/santuario/xml-security-java/trunk/src/main/java/org/apache/jcp/xml/dsig/internal/dom/DOMRetrievalMethod.java?rev=1602127&r1=1602126&r2=1602127&view=diff
==============================================================================
--- santuario/xml-security-java/trunk/src/main/java/org/apache/jcp/xml/dsig/internal/dom/DOMRetrievalMethod.java (original)
+++ santuario/xml-security-java/trunk/src/main/java/org/apache/jcp/xml/dsig/internal/dom/DOMRetrievalMethod.java Thu Jun 12 11:33:42 2014
@@ -132,17 +132,17 @@ public final class DOMRetrievalMethod ex
if (transformsElem != null) {
String localName = transformsElem.getLocalName();
- if (!localName.equals("Transforms")) {
+ String namespace = transformsElem.getNamespaceURI();
+ if (!localName.equals("Transforms") || !XMLSignature.XMLNS.equals(namespace)) {
throw new MarshalException("Invalid element name: " +
- localName + ", expected Transforms");
+ namespace + ":" + localName + ", expected Transforms");
}
Element transformElem =
- DOMUtils.getFirstChildElement(transformsElem, "Transform");
- transforms.add(new DOMTransform(transformElem, context, provider));
- transformElem = DOMUtils.getNextSiblingElement(transformElem);
+ DOMUtils.getFirstChildElement(transformsElem, "Transform", XMLSignature.XMLNS);
while (transformElem != null) {
String name = transformElem.getLocalName();
- if (!name.equals("Transform")) {
+ namespace = transformElem.getNamespaceURI();
+ if (!name.equals("Transform") || !XMLSignature.XMLNS.equals(namespace)) {
throw new MarshalException("Invalid element name: " +
name + ", expected Transform");
}
@@ -237,7 +237,7 @@ public final class DOMRetrievalMethod ex
// guard against RetrievalMethod loops
if (data instanceof NodeSetData && Utils.secureValidation(context)) {
NodeSetData nsd = (NodeSetData)data;
- Iterator i = nsd.iterator();
+ Iterator<?> i = nsd.iterator();
if (i.hasNext()) {
Node root = (Node)i.next();
if ("RetrievalMethod".equals(root.getLocalName())) {
@@ -262,7 +262,8 @@ public final class DOMRetrievalMethod ex
Document doc = db.parse(new ByteArrayInputStream
(data.getXMLSignatureInput().getBytes()));
Element kiElem = doc.getDocumentElement();
- if (kiElem.getLocalName().equals("X509Data")) {
+ if (kiElem.getLocalName().equals("X509Data")
+ && XMLSignature.XMLNS.equals(kiElem.getNamespaceURI())) {
return new DOMX509Data(kiElem);
} else {
return null; // unsupported
Modified: santuario/xml-security-java/trunk/src/main/java/org/apache/jcp/xml/dsig/internal/dom/DOMSignatureProperties.java
URL: http://svn.apache.org/viewvc/santuario/xml-security-java/trunk/src/main/java/org/apache/jcp/xml/dsig/internal/dom/DOMSignatureProperties.java?rev=1602127&r1=1602126&r2=1602127&view=diff
==============================================================================
--- santuario/xml-security-java/trunk/src/main/java/org/apache/jcp/xml/dsig/internal/dom/DOMSignatureProperties.java (original)
+++ santuario/xml-security-java/trunk/src/main/java/org/apache/jcp/xml/dsig/internal/dom/DOMSignatureProperties.java Thu Jun 12 11:33:42 2014
@@ -96,8 +96,9 @@ public final class DOMSignaturePropertie
Node child = nodes.item(i);
if (child.getNodeType() == Node.ELEMENT_NODE) {
String name = child.getLocalName();
- if (!name.equals("SignatureProperty")) {
- throw new MarshalException("Invalid element name: " + name +
+ String namespace = child.getNamespaceURI();
+ if (!name.equals("SignatureProperty") || !XMLSignature.XMLNS.equals(namespace)) {
+ throw new MarshalException("Invalid element name: " + namespace + ":" + name +
", expected SignatureProperty");
}
properties.add(new DOMSignatureProperty((Element)child));
Modified: santuario/xml-security-java/trunk/src/main/java/org/apache/jcp/xml/dsig/internal/dom/DOMSignedInfo.java
URL: http://svn.apache.org/viewvc/santuario/xml-security-java/trunk/src/main/java/org/apache/jcp/xml/dsig/internal/dom/DOMSignedInfo.java?rev=1602127&r1=1602126&r2=1602127&view=diff
==============================================================================
--- santuario/xml-security-java/trunk/src/main/java/org/apache/jcp/xml/dsig/internal/dom/DOMSignedInfo.java (original)
+++ santuario/xml-security-java/trunk/src/main/java/org/apache/jcp/xml/dsig/internal/dom/DOMSignedInfo.java Thu Jun 12 11:33:42 2014
@@ -36,7 +36,6 @@ import java.security.Provider;
import java.util.*;
import org.w3c.dom.Element;
-
import org.apache.xml.security.utils.Base64;
import org.apache.xml.security.utils.Constants;
import org.apache.xml.security.utils.UnsyncBufferedOutputStream;
@@ -142,13 +141,15 @@ public final class DOMSignedInfo extends
// unmarshal CanonicalizationMethod
Element cmElem = DOMUtils.getFirstChildElement(siElem,
- "CanonicalizationMethod");
+ "CanonicalizationMethod",
+ XMLSignature.XMLNS);
canonicalizationMethod = new DOMCanonicalizationMethod(cmElem, context,
provider);
// unmarshal SignatureMethod
Element smElem = DOMUtils.getNextSiblingElement(cmElem,
- "SignatureMethod");
+ "SignatureMethod",
+ XMLSignature.XMLNS);
signatureMethod = DOMSignatureMethod.unmarshal(smElem);
boolean secVal = Utils.secureValidation(context);
@@ -163,15 +164,16 @@ public final class DOMSignedInfo extends
// unmarshal References
ArrayList<Reference> refList = new ArrayList<Reference>(5);
- Element refElem = DOMUtils.getNextSiblingElement(smElem, "Reference");
+ Element refElem = DOMUtils.getNextSiblingElement(smElem, "Reference", XMLSignature.XMLNS);
refList.add(new DOMReference(refElem, context, provider));
refElem = DOMUtils.getNextSiblingElement(refElem);
while (refElem != null) {
String name = refElem.getLocalName();
- if (!name.equals("Reference")) {
+ String namespace = refElem.getNamespaceURI();
+ if (!name.equals("Reference") || !XMLSignature.XMLNS.equals(namespace)) {
throw new MarshalException("Invalid element name: " +
- name + ", expected Reference");
+ namespace + ":" + name + ", expected Reference");
}
refList.add(new DOMReference(refElem, context, provider));
if (secVal && refList.size() > MAXIMUM_REFERENCE_COUNT) {
Modified: santuario/xml-security-java/trunk/src/main/java/org/apache/jcp/xml/dsig/internal/dom/DOMUtils.java
URL: http://svn.apache.org/viewvc/santuario/xml-security-java/trunk/src/main/java/org/apache/jcp/xml/dsig/internal/dom/DOMUtils.java?rev=1602127&r1=1602126&r2=1602127&view=diff
==============================================================================
--- santuario/xml-security-java/trunk/src/main/java/org/apache/jcp/xml/dsig/internal/dom/DOMUtils.java (original)
+++ santuario/xml-security-java/trunk/src/main/java/org/apache/jcp/xml/dsig/internal/dom/DOMUtils.java Thu Jun 12 11:33:42 2014
@@ -152,11 +152,29 @@ public final class DOMUtils {
* @throws MarshalException if no such element or the local name is not
* equal to {@code localName}
*/
+ @Deprecated
public static Element getFirstChildElement(Node node, String localName)
throws MarshalException
{
return verifyElement(getFirstChildElement(node), localName);
}
+
+ /**
+ * Returns the first child element of the specified node and checks that
+ * the local name is equal to {@code localName} and the namespace is equal to
+ * {@code namespaceURI}
+ *
+ * @param node the node
+ * @return the first child element of the specified node
+ * @throws NullPointerException if {@code node == null}
+ * @throws MarshalException if no such element or the local name is not
+ * equal to {@code localName}
+ */
+ public static Element getFirstChildElement(Node node, String localName, String namespaceURI)
+ throws MarshalException
+ {
+ return verifyElement(getFirstChildElement(node), localName, namespaceURI);
+ }
private static Element verifyElement(Element elem, String localName)
throws MarshalException
@@ -171,6 +189,22 @@ public final class DOMUtils {
}
return elem;
}
+
+ private static Element verifyElement(Element elem, String localName, String namespaceURI)
+ throws MarshalException
+ {
+ if (elem == null) {
+ throw new MarshalException("Missing " + localName + " element");
+ }
+ String name = elem.getLocalName();
+ String namespace = elem.getNamespaceURI();
+ if (!name.equals(localName) || namespace == null && namespaceURI != null
+ || namespace != null && !namespace.equals(namespaceURI)) {
+ throw new MarshalException("Invalid element name: " +
+ namespace + ":" + name + ", expected " + namespaceURI + ":" + localName);
+ }
+ return elem;
+ }
/**
* Returns the last child element of the specified node, or null if there
@@ -205,7 +239,7 @@ public final class DOMUtils {
}
return (Element)sibling;
}
-
+
/**
* Returns the next sibling element of the specified node and checks that
* the local name is equal to {@code localName}.
@@ -216,10 +250,28 @@ public final class DOMUtils {
* @throws MarshalException if no such element or the local name is not
* equal to {@code localName}
*/
+ @Deprecated
public static Element getNextSiblingElement(Node node, String localName)
throws MarshalException
{
return verifyElement(getNextSiblingElement(node), localName);
+ }
+
+ /**
+ * Returns the next sibling element of the specified node and checks that
+ * the local name is equal to {@code localName} and the namespace is equal to
+ * {@code namespaceURI}
+ *
+ * @param node the node
+ * @return the next sibling element of the specified node
+ * @throws NullPointerException if {@code node == null}
+ * @throws MarshalException if no such element or the local name is not
+ * equal to {@code localName}
+ */
+ public static Element getNextSiblingElement(Node node, String localName, String namespaceURI)
+ throws MarshalException
+ {
+ return verifyElement(getNextSiblingElement(node), localName, namespaceURI);
}
/**
Modified: santuario/xml-security-java/trunk/src/main/java/org/apache/jcp/xml/dsig/internal/dom/DOMX509Data.java
URL: http://svn.apache.org/viewvc/santuario/xml-security-java/trunk/src/main/java/org/apache/jcp/xml/dsig/internal/dom/DOMX509Data.java?rev=1602127&r1=1602126&r2=1602127&view=diff
==============================================================================
--- santuario/xml-security-java/trunk/src/main/java/org/apache/jcp/xml/dsig/internal/dom/DOMX509Data.java (original)
+++ santuario/xml-security-java/trunk/src/main/java/org/apache/jcp/xml/dsig/internal/dom/DOMX509Data.java Thu Jun 12 11:33:42 2014
@@ -27,14 +27,15 @@ package org.apache.jcp.xml.dsig.internal
import java.io.ByteArrayInputStream;
import java.security.cert.*;
import java.util.*;
+
import javax.xml.crypto.*;
import javax.xml.crypto.dsig.*;
import javax.xml.crypto.dsig.keyinfo.X509Data;
import javax.security.auth.x500.X500Principal;
+
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
-
import org.apache.xml.security.exceptions.Base64DecodingException;
import org.apache.xml.security.utils.Base64;
@@ -106,19 +107,20 @@ public final class DOMX509Data extends B
Element childElem = (Element)child;
String localName = childElem.getLocalName();
- if (localName.equals("X509Certificate")) {
+ String namespace = childElem.getNamespaceURI();
+ if (localName.equals("X509Certificate") && XMLSignature.XMLNS.equals(namespace)) {
content.add(unmarshalX509Certificate(childElem));
- } else if (localName.equals("X509IssuerSerial")) {
+ } else if (localName.equals("X509IssuerSerial") && XMLSignature.XMLNS.equals(namespace)) {
content.add(new DOMX509IssuerSerial(childElem));
- } else if (localName.equals("X509SubjectName")) {
+ } else if (localName.equals("X509SubjectName") && XMLSignature.XMLNS.equals(namespace)) {
content.add(childElem.getFirstChild().getNodeValue());
- } else if (localName.equals("X509SKI")) {
+ } else if (localName.equals("X509SKI") && XMLSignature.XMLNS.equals(namespace)) {
try {
content.add(Base64.decode(childElem));
} catch (Base64DecodingException bde) {
throw new MarshalException("cannot decode X509SKI", bde);
}
- } else if (localName.equals("X509CRL")) {
+ } else if (localName.equals("X509CRL") && XMLSignature.XMLNS.equals(namespace)) {
content.add(unmarshalX509CRL(childElem));
} else {
content.add(new javax.xml.crypto.dom.DOMStructure(childElem));
Modified: santuario/xml-security-java/trunk/src/main/java/org/apache/jcp/xml/dsig/internal/dom/DOMX509IssuerSerial.java
URL: http://svn.apache.org/viewvc/santuario/xml-security-java/trunk/src/main/java/org/apache/jcp/xml/dsig/internal/dom/DOMX509IssuerSerial.java?rev=1602127&r1=1602126&r2=1602127&view=diff
==============================================================================
--- santuario/xml-security-java/trunk/src/main/java/org/apache/jcp/xml/dsig/internal/dom/DOMX509IssuerSerial.java (original)
+++ santuario/xml-security-java/trunk/src/main/java/org/apache/jcp/xml/dsig/internal/dom/DOMX509IssuerSerial.java Thu Jun 12 11:33:42 2014
@@ -25,10 +25,13 @@
package org.apache.jcp.xml.dsig.internal.dom;
import javax.xml.crypto.MarshalException;
+import javax.xml.crypto.dsig.XMLSignature;
import javax.xml.crypto.dsig.keyinfo.X509IssuerSerial;
import java.math.BigInteger;
+
import javax.security.auth.x500.X500Principal;
+
import org.w3c.dom.Element;
/**
@@ -74,9 +77,11 @@ public final class DOMX509IssuerSerial e
*/
public DOMX509IssuerSerial(Element isElem) throws MarshalException {
Element iNElem = DOMUtils.getFirstChildElement(isElem,
- "X509IssuerName");
+ "X509IssuerName",
+ XMLSignature.XMLNS);
Element sNElem = DOMUtils.getNextSiblingElement(iNElem,
- "X509SerialNumber");
+ "X509SerialNumber",
+ XMLSignature.XMLNS);
issuerName = iNElem.getFirstChild().getNodeValue();
serialNumber = new BigInteger(sNElem.getFirstChild().getNodeValue());
}
Modified: santuario/xml-security-java/trunk/src/main/java/org/apache/jcp/xml/dsig/internal/dom/DOMXMLObject.java
URL: http://svn.apache.org/viewvc/santuario/xml-security-java/trunk/src/main/java/org/apache/jcp/xml/dsig/internal/dom/DOMXMLObject.java?rev=1602127&r1=1602126&r2=1602127&view=diff
==============================================================================
--- santuario/xml-security-java/trunk/src/main/java/org/apache/jcp/xml/dsig/internal/dom/DOMXMLObject.java (original)
+++ santuario/xml-security-java/trunk/src/main/java/org/apache/jcp/xml/dsig/internal/dom/DOMXMLObject.java Thu Jun 12 11:33:42 2014
@@ -110,13 +110,14 @@ public final class DOMXMLObject extends
if (child.getNodeType() == Node.ELEMENT_NODE) {
Element childElem = (Element)child;
String tag = childElem.getLocalName();
- if (tag.equals("Manifest")) {
+ String namespace = childElem.getNamespaceURI();
+ if (tag.equals("Manifest") && XMLSignature.XMLNS.equals(namespace)) {
content.add(new DOMManifest(childElem, context, provider));
continue;
- } else if (tag.equals("SignatureProperties")) {
+ } else if (tag.equals("SignatureProperties") && XMLSignature.XMLNS.equals(namespace)) {
content.add(new DOMSignatureProperties(childElem));
continue;
- } else if (tag.equals("X509Data")) {
+ } else if (tag.equals("X509Data") && XMLSignature.XMLNS.equals(namespace)) {
content.add(new DOMX509Data(childElem));
continue;
}
Modified: santuario/xml-security-java/trunk/src/main/java/org/apache/jcp/xml/dsig/internal/dom/DOMXMLSignature.java
URL: http://svn.apache.org/viewvc/santuario/xml-security-java/trunk/src/main/java/org/apache/jcp/xml/dsig/internal/dom/DOMXMLSignature.java?rev=1602127&r1=1602126&r2=1602127&view=diff
==============================================================================
--- santuario/xml-security-java/trunk/src/main/java/org/apache/jcp/xml/dsig/internal/dom/DOMXMLSignature.java (original)
+++ santuario/xml-security-java/trunk/src/main/java/org/apache/jcp/xml/dsig/internal/dom/DOMXMLSignature.java Thu Jun 12 11:33:42 2014
@@ -128,20 +128,22 @@ public final class DOMXMLSignature exten
// get Id attribute, if specified
id = DOMUtils.getAttributeValue(localSigElem, "Id");
-
// unmarshal SignedInfo
Element siElem = DOMUtils.getFirstChildElement(localSigElem,
- "SignedInfo");
+ "SignedInfo",
+ XMLSignature.XMLNS);
si = new DOMSignedInfo(siElem, context, provider);
// unmarshal SignatureValue
Element sigValElem = DOMUtils.getNextSiblingElement(siElem,
- "SignatureValue");
+ "SignatureValue",
+ XMLSignature.XMLNS);
sv = new DOMSignatureValue(sigValElem);
// unmarshal KeyInfo, if specified
Element nextSibling = DOMUtils.getNextSiblingElement(sigValElem);
- if (nextSibling != null && nextSibling.getLocalName().equals("KeyInfo")) {
+ if (nextSibling != null && nextSibling.getLocalName().equals("KeyInfo")
+ && XMLSignature.XMLNS.equals(nextSibling.getNamespaceURI())) {
ki = new DOMKeyInfo(nextSibling, context, provider);
nextSibling = DOMUtils.getNextSiblingElement(nextSibling);
}
@@ -153,8 +155,9 @@ public final class DOMXMLSignature exten
List<XMLObject> tempObjects = new ArrayList<XMLObject>();
while (nextSibling != null) {
String name = nextSibling.getLocalName();
- if (!name.equals("Object")) {
- throw new MarshalException("Invalid element name: " + name +
+ String namespace = nextSibling.getNamespaceURI();
+ if (!name.equals("Object") || !XMLSignature.XMLNS.equals(namespace)) {
+ throw new MarshalException("Invalid element name: " + namespace + ":" + name +
", expected KeyInfo or Object");
}
tempObjects.add(new DOMXMLObject(nextSibling,
Modified: santuario/xml-security-java/trunk/src/main/java/org/apache/jcp/xml/dsig/internal/dom/DOMXMLSignatureFactory.java
URL: http://svn.apache.org/viewvc/santuario/xml-security-java/trunk/src/main/java/org/apache/jcp/xml/dsig/internal/dom/DOMXMLSignatureFactory.java?rev=1602127&r1=1602126&r2=1602127&view=diff
==============================================================================
--- santuario/xml-security-java/trunk/src/main/java/org/apache/jcp/xml/dsig/internal/dom/DOMXMLSignatureFactory.java (original)
+++ santuario/xml-security-java/trunk/src/main/java/org/apache/jcp/xml/dsig/internal/dom/DOMXMLSignatureFactory.java Thu Jun 12 11:33:42 2014
@@ -34,6 +34,7 @@ import javax.xml.crypto.dsig.spec.*;
import java.security.InvalidAlgorithmParameterException;
import java.security.NoSuchAlgorithmException;
import java.util.List;
+
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
@@ -196,14 +197,15 @@ public final class DOMXMLSignatureFactor
// check tag
String tag = element.getLocalName();
- if (tag == null) {
+ String namespace = element.getNamespaceURI();
+ if (tag == null || namespace == null) {
throw new MarshalException("Document implementation must " +
"support DOM Level 2 and be namespace aware");
}
- if (tag.equals("Signature")) {
+ if (tag.equals("Signature") && XMLSignature.XMLNS.equals(namespace)) {
return new DOMXMLSignature(element, context, getProvider());
} else {
- throw new MarshalException("invalid Signature tag: " + tag);
+ throw new MarshalException("invalid Signature tag: " + namespace + ":" + tag);
}
}