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/01/13 23:02:12 UTC
svn commit: r368871 [5/6] - in /xml/security/branches/jsr105_0_16/src/org:
apache/xml/security/ apache/xml/security/algorithms/
apache/xml/security/algorithms/implementations/ apache/xml/security/c14n/
apache/xml/security/c14n/helper/ apache/xml/securi...
Modified: xml/security/branches/jsr105_0_16/src/org/apache/xml/security/utils/XMLUtils.java
URL: http://svn.apache.org/viewcvs/xml/security/branches/jsr105_0_16/src/org/apache/xml/security/utils/XMLUtils.java?rev=368871&r1=368870&r2=368871&view=diff
==============================================================================
--- xml/security/branches/jsr105_0_16/src/org/apache/xml/security/utils/XMLUtils.java (original)
+++ xml/security/branches/jsr105_0_16/src/org/apache/xml/security/utils/XMLUtils.java Fri Jan 13 14:00:23 2006
@@ -21,8 +21,6 @@
import java.io.IOException;
import java.io.OutputStream;
-import java.lang.reflect.Field;
-import java.lang.reflect.Method;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;
@@ -47,10 +45,6 @@
*/
public class XMLUtils {
- /** {@link org.apache.commons.logging} logging facility */
- static org.apache.commons.logging.Log log =
- org.apache.commons.logging.LogFactory.getLog(XMLUtils.class.getName());
-
/**
* Constructor XMLUtils
*
@@ -59,7 +53,13 @@
// we don't allow instantiation
}
-
+ public static Element getNextElement(Node el) {
+ while ((el!=null) && (el.getNodeType()!=Node.ELEMENT_NODE)) {
+ el=el.getNextSibling();
+ }
+ return (Element)el;
+
+ }
/**
* @param rootNode
@@ -115,276 +115,6 @@
}
return;
}
- /**
- * Method getXalanVersion
- *
- * @return
- */
- public static String getXalanVersion() {
-
- String version = XMLUtils.getXalan1Version();
-
- if (version != null) {
- return version;
- }
-
- version = XMLUtils.getXalan20Version();
-
- if (version != null) {
- return version;
- }
-
- version = XMLUtils.getXalan2Version();
-
- if (version != null) {
- return version;
- }
-
- return "Apache Xalan not installed";
-
- // return "Apache " + org.apache.xalan.processor.XSLProcessorVersion.S_VERSION;
- // return "Apache " + org.apache.xalan.Version.getVersion();
- }
-
- /**
- * Method getXercesVersion
- *
- * @return
- */
- public static String getXercesVersion() {
-
- String version = XMLUtils.getXerces1Version();
-
- if (version != null) {
- return version;
- }
-
- version = XMLUtils.getXerces2Version();
-
- if (version != null) {
- return version;
- }
-
- return "Apache Xerces not installed";
-
- // return "Apache " + org.apache.xerces.impl.Version.fVersion;
- // return "Apache " + org.apache.xerces.framework.Version.fVersion;
- }
-
- /**
- * Method getXalan1Version
- *
- * @return
- */
- private static String getXalan1Version() {
-
- try {
- final String XALAN1_VERSION_CLASS =
- "org.apache.xalan.xslt.XSLProcessorVersion";
- Class clazz = classForName(XALAN1_VERSION_CLASS);
-
- // Found Xalan-J 1.x, grab it's version fields
- StringBuffer buf = new StringBuffer();
- Field f = clazz.getField("PRODUCT");
-
- buf.append(f.get(null));
- buf.append(';');
-
- f = clazz.getField("LANGUAGE");
-
- buf.append(f.get(null));
- buf.append(';');
-
- f = clazz.getField("S_VERSION");
-
- buf.append(f.get(null));
- buf.append(';');
-
- return buf.toString();
- } catch (Exception e1) {
- return null;
- }
- }
-
- /**
- * Method getXalan20Version
- *
- * @return
- */
- private static String getXalan20Version() {
-
- try {
-
- // NOTE: This is the new Xalan 2.2+ version class
- final String XALAN2_2_VERSION_CLASS = "org.apache.xalan.Version";
- final String XALAN2_2_VERSION_METHOD = "getVersion";
- final Class noArgs[] = new Class[0];
- Class clazz = classForName(XALAN2_2_VERSION_CLASS);
- Method method = clazz.getMethod(XALAN2_2_VERSION_METHOD, noArgs);
- Object returnValue = method.invoke(null, new Object[0]);
-
- return (String) returnValue;
- } catch (Exception e2) {
- return null;
- }
- }
-
- /**
- * Method getXalan2Version
- *
- * @return
- */
- private static String getXalan2Version() {
-
- try {
-
- // NOTE: This is the old Xalan 2.0, 2.1, 2.2 version class,
- // is being replaced by class below
- final String XALAN2_VERSION_CLASS =
- "org.apache.xalan.processor.XSLProcessorVersion";
- Class clazz = classForName(XALAN2_VERSION_CLASS);
-
- // Found Xalan-J 2.x, grab it's version fields
- StringBuffer buf = new StringBuffer();
- Field f = clazz.getField("S_VERSION");
-
- buf.append(f.get(null));
-
- return buf.toString();
- } catch (Exception e2) {
- return null;
- }
- }
-
- /**
- * Method getXerces1Version
- *
- * @return
- */
- private static String getXerces1Version() {
-
- try {
- final String XERCES1_VERSION_CLASS =
- "org.apache.xerces.framework.Version";
- Class clazz = classForName(XERCES1_VERSION_CLASS);
-
- // Found Xerces-J 1.x, grab it's version fields
- Field f = clazz.getField("fVersion");
- String parserVersion = (String) f.get(null);
-
- return parserVersion;
- } catch (Exception e) {
- return null;
- }
- }
-
- /**
- * Method getXerces2Version
- *
- * @return
- */
- private static String getXerces2Version() {
-
- try {
- final String XERCES2_VERSION_CLASS = "org.apache.xerces.impl.Version";
- Class clazz = classForName(XERCES2_VERSION_CLASS);
-
- // Found Xerces-J 2.x, grab it's version fields
- Field f = clazz.getField("fVersion");
- String parserVersion = (String) f.get(null);
-
- return parserVersion;
- } catch (Exception e) {
- return null;
- }
- }
-
- /**
- * Worker method to load a class.
- * Factor out loading classes for future use and JDK differences.
- * Copied from javax.xml.*.FactoryFinder
- * @param className name of class to load from
- * an appropriate classLoader
- * @return the class asked for
- * @throws ClassNotFoundException
- */
- public static Class classForName(String className)
- throws ClassNotFoundException {
-
- ClassLoader classLoader = findClassLoader();
-
- if (classLoader == null) {
- return Class.forName(className);
- }
- return classLoader.loadClass(className);
- }
-
- /**
- * Worker method to figure out which ClassLoader to use.
- * For JDK 1.2 and later use the context ClassLoader.
- * Copied from javax.xml.*.FactoryFinder
- * @return the appropriate ClassLoader
- */
- protected static ClassLoader findClassLoader() {
-
- Method m = null;
-
- try {
- m = Thread.class.getMethod("getContextClassLoader", new Class[]{});
- } catch (NoSuchMethodException e) {
-
- // Assume that we are running JDK 1.1, use the current ClassLoader
- return XMLUtils.class.getClassLoader();
- }
-
- try {
- return (ClassLoader) m.invoke(Thread.currentThread(), new Object[]{});
- } catch (Exception e) {
- throw new RuntimeException(e.toString());
- }
- }
-
-
- /**
- * Method spitOutVersions
- *
- * @param log
- */
- public static void spitOutVersions(org.apache.commons.logging.Log log) {
- if (log.isDebugEnabled()) {
- log.debug(XMLUtils.getXercesVersion());
- log.debug(XMLUtils.getXalanVersion());
- }
- }
-
- /** Field nodeTypeString */
- private static String[] nodeTypeString = new String[]{ "", "ELEMENT",
- "ATTRIBUTE",
- "TEXT_NODE",
- "CDATA_SECTION",
- "ENTITY_REFERENCE",
- "ENTITY",
- "PROCESSING_INSTRUCTION",
- "COMMENT", "DOCUMENT",
- "DOCUMENT_TYPE",
- "DOCUMENT_FRAGMENT",
- "NOTATION" };
-
- /**
- * Transforms <code>org.w3c.dom.Node.XXX_NODE</code> NodeType values into
- * Strings.
- *
- * @param nodeType as taken from the {@link org.w3c.dom.Node#getNodeType} function
- * @return the String value.
- * @see org.w3c.dom.Node#getNodeType
- */
- public static String getNodeTypeString(short nodeType) {
-
- if ((nodeType > 0) && (nodeType < 13)) {
- return nodeTypeString[nodeType];
- }
- return "";
- }
/**
@@ -464,7 +194,7 @@
* Method getFullTextChildrenFromElement
*
* @param element
- * @return
+ * @return the string of chi;ds
*/
public static String getFullTextChildrenFromElement(Element element) {
@@ -510,9 +240,8 @@
return element;
}
Element element = doc.createElementNS(Constants.SignatureSpecNS,
- ds + ":" + elementName);
-
- element.setAttributeNS(Constants.NamespaceSpecNS, "xmlns:" + ds,
+ ds + ":" + elementName);
+ element.setAttributeNS(Constants.NamespaceSpecNS, ElementProxy.getDefaultPrefixBindings(Constants.SignatureSpecNS),
Constants.SignatureSpecNS);
return element;
@@ -532,7 +261,7 @@
String localName) {
if ((element == null) ||
- !Constants.SignatureSpecNS.equals(element.getNamespaceURI()) ){
+ Constants.SignatureSpecNS!=element.getNamespaceURI() ){
return false;
}
@@ -555,7 +284,7 @@
String localName) {
if ((element == null) ||
- !EncryptionConstants.EncryptionSpecNS.equals(element.getNamespaceURI())
+ EncryptionConstants.EncryptionSpecNS!=element.getNamespaceURI()
){
return false;
}
@@ -632,7 +361,7 @@
* @param doc
* @param prefix
* @param namespace
- * @return
+ * @return the element.
*/
public static Element createDSctx(Document doc, String prefix,
String namespace) {
@@ -667,7 +396,7 @@
* Method convertNodelistToSet
*
* @param xpathNodeSet
- * @return
+ * @return the set with the nodelist
*/
public static Set convertNodelistToSet(NodeList xpathNodeSet) {
@@ -709,7 +438,7 @@
documentElement.setAttributeNS(Constants.NamespaceSpecNS, "xmlns", "");
}
- XMLUtils.circumventBug2650recurse(doc);
+ XMLUtils.circumventBug2650internal(doc);
}
/**
@@ -718,61 +447,73 @@
* @param node
* @see <A HREF="http://nagoya.apache.org/bugzilla/show_bug.cgi?id=2650">Namespace axis resolution is not XPath compliant </A>
*/
- private static void circumventBug2650recurse(Node node) {
-
- if (node.getNodeType() == Node.ELEMENT_NODE) {
- Element element = (Element) node;
- if (element.hasChildNodes() && element.hasAttributes()) {
- NamedNodeMap attributes = element.getAttributes();
- int attributesLength = attributes.getLength();
-
- for (Node child = element.getFirstChild(); child!=null;
- child=child.getNextSibling()) {
-
- if (child.getNodeType() == Node.ELEMENT_NODE) {
- Element childElement = (Element) child;
-
- for (int i = 0; i < attributesLength; i++) {
- Attr currentAttr = (Attr) attributes.item(i);
- if (Constants.NamespaceSpecNS.equals(
- currentAttr.getNamespaceURI())) {
-
- if (!childElement.hasAttributeNS(
- Constants.NamespaceSpecNS,
- currentAttr.getLocalName())) {
- childElement.setAttributeNS(Constants.NamespaceSpecNS,
- currentAttr.getName(),
- currentAttr.getNodeValue());
- }
- }
- }
- }
- }
- }
- }
-
- for (Node child = node.getFirstChild(); child != null;
- child = child.getNextSibling()) {
- switch (child.getNodeType()) {
-
+ private static void circumventBug2650internal(Node node) {
+ Node parent=null;
+ Node sibling=null;
+ final String namespaceNs=Constants.NamespaceSpecNS;
+ do {
+ switch (node.getNodeType()) {
case Node.ELEMENT_NODE :
+ Element element = (Element) node;
+ if (!element.hasChildNodes())
+ break;
+ if (element.hasAttributes()) {
+ NamedNodeMap attributes = element.getAttributes();
+ int attributesLength = attributes.getLength();
+
+ for (Node child = element.getFirstChild(); child!=null;
+ child=child.getNextSibling()) {
+
+ if (child.getNodeType() != Node.ELEMENT_NODE) {
+ continue;
+ }
+ Element childElement = (Element) child;
+
+ for (int i = 0; i < attributesLength; i++) {
+ Attr currentAttr = (Attr) attributes.item(i);
+ if (namespaceNs!=currentAttr.getNamespaceURI())
+ continue;
+ if (childElement.hasAttributeNS(namespaceNs,
+ currentAttr.getLocalName())) {
+ continue;
+ }
+ childElement.setAttributeNS(namespaceNs,
+ currentAttr.getName(),
+ currentAttr.getNodeValue());
+
+
+ }
+ }
+ }
case Node.ENTITY_REFERENCE_NODE :
case Node.DOCUMENT_NODE :
- circumventBug2650recurse(child);
+ parent=node;
+ sibling=node.getFirstChild();
+ break;
}
- }
+ while ((sibling==null) && (parent!=null)) {
+ sibling=parent.getNextSibling();
+ parent=parent.getParentNode();
+ };
+ if (sibling==null) {
+ return;
+ }
+
+ node=sibling;
+ sibling=node.getNextSibling();
+ } while (true);
}
/**
* @param sibling
* @param nodeName
* @param number
- * @return
+ * @return nodes with the constrain
*/
public static Element selectDsNode(Node sibling, String nodeName, int number) {
while (sibling!=null) {
if (nodeName.equals(sibling.getLocalName())
- && Constants.SignatureSpecNS.equals(sibling.getNamespaceURI())) {
+ && Constants.SignatureSpecNS==sibling.getNamespaceURI()) {
if (number==0){
return (Element)sibling;
}
@@ -787,13 +528,13 @@
* @param sibling
* @param nodeName
* @param number
- * @return
+ * @return nodes with the constrain
*/
public static Element selectXencNode(Node sibling, String nodeName, int number) {
while (sibling!=null) {
if (nodeName.equals(sibling.getLocalName())
- && EncryptionConstants.EncryptionSpecNS.equals(sibling.getNamespaceURI())) {
+ && EncryptionConstants.EncryptionSpecNS==sibling.getNamespaceURI()) {
if (number==0){
return (Element)sibling;
}
@@ -809,7 +550,7 @@
* @param sibling
* @param nodeName
* @param number
- * @return
+ * @return nodes with the constrain
*/
public static Text selectDsNodeText(Node sibling, String nodeName, int number) {
Node n=selectDsNode(sibling,nodeName,number);
@@ -828,7 +569,7 @@
* @param uri
* @param nodeName
* @param number
- * @return
+ * @return nodes with the constrain
*/
public static Text selectNodeText(Node sibling, String uri, String nodeName, int number) {
Node n=selectNode(sibling,uri,nodeName,number);
@@ -847,12 +588,12 @@
* @param uri
* @param nodeName
* @param number
- * @return
+ * @return nodes with the constrain
*/
public static Element selectNode(Node sibling, String uri,String nodeName, int number) {
while (sibling!=null) {
if (nodeName.equals(sibling.getLocalName())
- && uri.equals(sibling.getNamespaceURI())) {
+ && uri==sibling.getNamespaceURI()) {
if (number==0){
return (Element)sibling;
}
@@ -866,17 +607,50 @@
/**
* @param sibling
* @param nodeName
- * @return
+ * @return nodes with the constrain
*/
public static Element[] selectDsNodes(Node sibling,String nodeName) {
- return selectNodes(sibling,Constants.SignatureSpecNS,nodeName);
+ return selectConsecutiveNodes(sibling,Constants.SignatureSpecNS,nodeName);
+ }
+ /**
+ * @param sibling
+ * @param uri
+ * @param nodeName
+ * @return nodes with the constrain
+ */
+ public static Element[] selectConsecutiveNodes(Node sibling,String uri,String nodeName) {
+ int size=20;
+ Element[] a= new Element[size];
+ int curr=0;
+ //List list=new ArrayList();
+ while (sibling!=null) {
+ if (nodeName.equals(sibling.getLocalName())
+ && uri==sibling.getNamespaceURI()) {
+ do {
+ a[curr++]=(Element)sibling;
+ if (size<=curr) {
+ int cursize= size<<2;
+ Element []cp=new Element[cursize];
+ System.arraycopy(a,0,cp,0,size);
+ a=cp;
+ size=cursize;
+ }
+ sibling=sibling.getNextSibling();
+ } while ((sibling!=null) && nodeName.equals(sibling.getLocalName())
+ && uri==sibling.getNamespaceURI());
+ break;
+ }
+ sibling=sibling.getNextSibling();
+ }
+ Element []af=new Element[curr];
+ System.arraycopy(a,0,af,0,curr);
+ return af;
}
-
/**
* @param sibling
* @param uri
* @param nodeName
- * @return
+ * @return nodes with the constrain
*/
public static Element[] selectNodes(Node sibling,String uri,String nodeName) {
int size=20;
@@ -885,7 +659,7 @@
//List list=new ArrayList();
while (sibling!=null) {
if (nodeName.equals(sibling.getLocalName())
- && uri.equals(sibling.getNamespaceURI())) {
+ && uri==sibling.getNamespaceURI()) {
a[curr++]=(Element)sibling;
if (size<=curr) {
int cursize= size<<2;
@@ -905,7 +679,7 @@
/**
* @param signatureElement
* @param inputSet
- * @return
+ * @return nodes with the constrain
*/
public static Set excludeNodeFromSet(Node signatureElement, Set inputSet) {
Set resultSet = new HashSet();
@@ -928,9 +702,9 @@
*
* @param ctx
* @param descendantOrSelf
- * @return
+ * @return true if the node is descendant
*/
- static boolean isDescendantOrSelf(Node ctx, Node descendantOrSelf) {
+ static public boolean isDescendantOrSelf(Node ctx, Node descendantOrSelf) {
if (ctx == descendantOrSelf) {
return true;
Modified: xml/security/branches/jsr105_0_16/src/org/apache/xml/security/utils/XPathFuncHereAPI.java
URL: http://svn.apache.org/viewcvs/xml/security/branches/jsr105_0_16/src/org/apache/xml/security/utils/XPathFuncHereAPI.java?rev=368871&r1=368870&r2=368871&view=diff
==============================================================================
--- xml/security/branches/jsr105_0_16/src/org/apache/xml/security/utils/XPathFuncHereAPI.java (original)
+++ xml/security/branches/jsr105_0_16/src/org/apache/xml/security/utils/XPathFuncHereAPI.java Fri Jan 13 14:00:23 2006
@@ -286,7 +286,7 @@
* Method getStrFromNode
*
* @param xpathnode
- * @return
+ * @return the string from the node
*/
private static String getStrFromNode(Node xpathnode) {
Modified: xml/security/branches/jsr105_0_16/src/org/apache/xml/security/utils/resolver/ResourceResolver.java
URL: http://svn.apache.org/viewcvs/xml/security/branches/jsr105_0_16/src/org/apache/xml/security/utils/resolver/ResourceResolver.java?rev=368871&r1=368870&r2=368871&view=diff
==============================================================================
--- xml/security/branches/jsr105_0_16/src/org/apache/xml/security/utils/resolver/ResourceResolver.java (original)
+++ xml/security/branches/jsr105_0_16/src/org/apache/xml/security/utils/resolver/ResourceResolver.java Fri Jan 13 14:00:23 2006
@@ -1,4 +1,3 @@
-
/*
* Copyright 1999-2004 The Apache Software Foundation.
*
@@ -17,21 +16,18 @@
*/
package org.apache.xml.security.utils.resolver;
-
-
+import java.util.ArrayList;
+import java.util.List;
import java.util.Map;
-import java.util.Vector;
import org.apache.xml.security.signature.XMLSignatureInput;
import org.w3c.dom.Attr;
-
/**
* During reference validation, we have to retrieve resources from somewhere.
* This is done by retrieving a Resolver. The resolver needs two arguments: The
* URI in which the link to the new resource is defined and the BaseURI of the
- * file/entity in which the URI occurs (the BaseURI is the same as the SystemId
- * for {@link javax.xml.transform.stream.StreamSource#getSystemId}.
+ * file/entity in which the URI occurs (the BaseURI is the same as the SystemId.
*
* <UL xml:lang="DE" LANG="DE">
* <LI> Verschiedene Implementierungen k??nnen sich als Resolver registrieren.
@@ -56,10 +52,10 @@
static boolean _alreadyInitialized = false;
/** these are the system-wide resolvers */
- static Vector _resolverVector = null;
+ static List _resolverVector = null;
/** Field _individualResolverVector */
- Vector _individualResolverVector = null;
+ List _individualResolverVector = null;
/** Field transformSpi */
protected ResourceResolverSpi _resolverSpi = null;
@@ -93,31 +89,20 @@
*
* @param uri
* @param BaseURI
- * @return
+ * @return the instnace
*
* @throws ResourceResolverException
*/
public static final ResourceResolver getInstance(Attr uri, String BaseURI)
throws ResourceResolverException {
-
- for (int i = 0; i < ResourceResolver._resolverVector.size(); i++) {
- String currentClass =
- (String) ResourceResolver._resolverVector.elementAt(i);
- ResourceResolver resolver = null;
-
- try {
- resolver = new ResourceResolver(currentClass);
- } catch (Exception e) {
- Object exArgs[] = { ((uri != null)
- ? uri.getNodeValue()
- : "null"), BaseURI };
-
- throw new ResourceResolverException("utils.resolver.noClass",
- exArgs, e, uri, BaseURI);
- }
+ int length=ResourceResolver._resolverVector.size();
+ for (int i = 0; i < length; i++) {
+ ResourceResolver resolver =
+ (ResourceResolver) ResourceResolver._resolverVector.get(i);
+
if (log.isDebugEnabled())
- log.debug("check resolvability by class " + currentClass);
+ log.debug("check resolvability by class " + resolver._resolverSpi.getClass().getName());
if ((resolver != null) && resolver.canResolve(uri, BaseURI)) {
return resolver;
@@ -131,19 +116,18 @@
throw new ResourceResolverException("utils.resolver.noClass", exArgs,
uri, BaseURI);
}
-
/**
* Method getInstance
*
* @param uri
* @param BaseURI
* @param individualResolvers
- * @return
+ * @return the instance
*
* @throws ResourceResolverException
*/
public static final ResourceResolver getInstance(
- Attr uri, String BaseURI, Vector individualResolvers)
+ Attr uri, String BaseURI, List individualResolvers)
throws ResourceResolverException {
if (log.isDebugEnabled()) {
log.debug("I was asked to create a ResourceResolver and got " + individualResolvers.size());
@@ -151,10 +135,11 @@
}
// first check the individual Resolvers
- if ((individualResolvers != null) && (individualResolvers.size() > 0)) {
- for (int i = 0; i < individualResolvers.size(); i++) {
+ int size=0;
+ if ((individualResolvers != null) && ((size=individualResolvers.size()) > 0)) {
+ for (int i = 0; i < size; i++) {
ResourceResolver resolver =
- (ResourceResolver) individualResolvers.elementAt(i);
+ (ResourceResolver) individualResolvers.get(i);
if (resolver != null) {
String currentClass = resolver._resolverSpi.getClass().getName();
@@ -168,35 +153,7 @@
}
}
- for (int i = 0; i < ResourceResolver._resolverVector.size(); i++) {
- String currentClass =
- (String) ResourceResolver._resolverVector.elementAt(i);
- ResourceResolver resolver = null;
-
- try {
- resolver = new ResourceResolver(currentClass);
- } catch (Exception e) {
- Object exArgs[] = { ((uri != null)
- ? uri.getNodeValue()
- : "null"), BaseURI };
-
- throw new ResourceResolverException("utils.resolver.noClass",
- exArgs, e, uri, BaseURI);
- }
- if (log.isDebugEnabled())
- log.debug("check resolvability by class " + currentClass);
-
- if ((resolver != null) && resolver.canResolve(uri, BaseURI)) {
- return resolver;
- }
- }
-
- Object exArgs[] = { ((uri != null)
- ? uri.getNodeValue()
- : "null"), BaseURI };
-
- throw new ResourceResolverException("utils.resolver.noClass", exArgs,
- uri, BaseURI);
+ return getInstance(uri,BaseURI);
}
/**
@@ -205,35 +162,55 @@
public static void init() {
if (!ResourceResolver._alreadyInitialized) {
- ResourceResolver._resolverVector = new Vector(10);
+ ResourceResolver._resolverVector = new ArrayList(10);
_alreadyInitialized = true;
}
}
- /**
- * Method register
- *
- * @param className
- */
- public static void register(String className) {
- ResourceResolver._resolverVector.add(className);
- }
-
- /**
- * Method registerAtStart
- *
- * @param className
- */
- public static void registerAtStart(String className) {
- ResourceResolver._resolverVector.add(0, className);
- }
+ /**
+ * Registers a ResourceResolverSpi class. This method logs a warning if
+ * the class cannot be registered.
+ *
+ * @param className the name of the ResourceResolverSpi class to be
+ * registered
+ */
+ public static void register(String className) {
+ register(className, false);
+ }
+
+ /**
+ * Registers a ResourceResolverSpi class at the beginning of the provider
+ * list. This method logs a warning if the class cannot be registered.
+ *
+ * @param className the name of the ResourceResolverSpi class to be
+ * registered
+ */
+ public static void registerAtStart(String className) {
+ register(className, true);
+ }
+
+ private static void register(String className, boolean start) {
+ try {
+ ResourceResolver resolver = new ResourceResolver(className);
+ if (start) {
+ ResourceResolver._resolverVector.add(0, resolver);
+ log.debug("registered resolver");
+ } else {
+ ResourceResolver._resolverVector.add(resolver);
+ }
+ } catch (Exception e) {
+ log.warn("Error loading resolver " + className +" disabling it");
+ } catch (NoClassDefFoundError e) {
+ log.warn("Error loading resolver " + className +" disabling it");
+ }
+ }
/**
* Method resolve
*
* @param uri
* @param BaseURI
- * @return
+ * @return the resource
*
* @throws ResourceResolverException
*/
@@ -250,7 +227,7 @@
*
* @param uri
* @param BaseURI
- * @return
+ * @return the resource
*
* @throws ResourceResolverException
*/
@@ -273,7 +250,7 @@
* Method getProperty
*
* @param key
- * @return
+ * @return the value of the property
*/
public String getProperty(String key) {
return this._resolverSpi.engineGetProperty(key);
@@ -291,7 +268,7 @@
/**
* Method getPropertyKeys
*
- * @return
+ * @return all property keys.
*/
public String[] getPropertyKeys() {
return this._resolverSpi.engineGetPropertyKeys();
@@ -301,7 +278,7 @@
* Method understandsProperty
*
* @param propertyToTest
- * @return
+ * @return true if the resolver understands the property
*/
public boolean understandsProperty(String propertyToTest) {
return this._resolverSpi.understandsProperty(propertyToTest);
@@ -312,7 +289,7 @@
*
* @param uri
* @param BaseURI
- * @return
+ * @return true if it can resolve the uri
*/
private boolean canResolve(Attr uri, String BaseURI) {
return this._resolverSpi.engineCanResolve(uri, BaseURI);
Modified: xml/security/branches/jsr105_0_16/src/org/apache/xml/security/utils/resolver/ResourceResolverException.java
URL: http://svn.apache.org/viewcvs/xml/security/branches/jsr105_0_16/src/org/apache/xml/security/utils/resolver/ResourceResolverException.java?rev=368871&r1=368870&r2=368871&view=diff
==============================================================================
--- xml/security/branches/jsr105_0_16/src/org/apache/xml/security/utils/resolver/ResourceResolverException.java (original)
+++ xml/security/branches/jsr105_0_16/src/org/apache/xml/security/utils/resolver/ResourceResolverException.java Fri Jan 13 14:00:23 2006
@@ -32,6 +32,10 @@
public class ResourceResolverException extends XMLSecurityException {
/**
+ *
+ */
+ private static final long serialVersionUID = 1L;
+ /**
* Constructor ResourceResolverException
*
* @param _msgID
@@ -111,7 +115,7 @@
/**
*
- * @return
+ * @return the uri
*/
public Attr getURI() {
return this._uri;
@@ -129,7 +133,7 @@
/**
*
- * @return
+ * @return the basUri
*/
public String getBaseURI() {
return this._BaseURI;
Modified: xml/security/branches/jsr105_0_16/src/org/apache/xml/security/utils/resolver/ResourceResolverSpi.java
URL: http://svn.apache.org/viewcvs/xml/security/branches/jsr105_0_16/src/org/apache/xml/security/utils/resolver/ResourceResolverSpi.java?rev=368871&r1=368870&r2=368871&view=diff
==============================================================================
--- xml/security/branches/jsr105_0_16/src/org/apache/xml/security/utils/resolver/ResourceResolverSpi.java (original)
+++ xml/security/branches/jsr105_0_16/src/org/apache/xml/security/utils/resolver/ResourceResolverSpi.java Fri Jan 13 14:00:23 2006
@@ -21,7 +21,6 @@
import java.util.Map;
import org.apache.xml.security.signature.XMLSignatureInput;
-import org.apache.xml.utils.URI;
import org.w3c.dom.Attr;
@@ -45,7 +44,7 @@
*
* @param uri
* @param BaseURI
- * @return
+ * @return the resource wrapped arround a XMLSignatureInput
*
* @throws ResourceResolverException
*/
@@ -79,7 +78,7 @@
* Method engineGetProperty
*
* @param key
- * @return
+ * @return the value of the property
*/
public String engineGetProperty(String key) {
@@ -112,14 +111,14 @@
*
* @param uri
* @param BaseURI
- * @return
+ * @return true if the engine can resolve the uri
*/
public abstract boolean engineCanResolve(Attr uri, String BaseURI);
/**
* Method engineGetPropertyKeys
*
- * @return
+ * @return the property keys
*/
public String[] engineGetPropertyKeys() {
return new String[0];
@@ -129,7 +128,7 @@
* Method understandsProperty
*
* @param propertyToTest
- * @return
+ * @return true if understands the property
*/
public boolean understandsProperty(String propertyToTest) {
@@ -146,88 +145,6 @@
return false;
}
- /**
- * Expands a system id and returns the system id as a URL, if
- * it can be expanded. A return value of null means that the
- * identifier is already expanded. An exception thrown
- * indicates a failure to expand the id.
- *
- * @param systemId The systemId to be expanded.
- * @param currentSystemId
- *
- * @return Returns the URL object representing the expanded system
- * identifier. A null value indicates that the given
- * system identifier is already expanded.
- *
- * @throws Exception
- */
- public static String expandSystemId(String systemId, String currentSystemId)
- throws Exception {
-
- String id = systemId;
-
- // check for bad parameters id
- if ((id == null) || (id.length() == 0)) {
- return systemId;
- }
-
- // if id already expanded, return
- try {
- URI url = new URI(id);
-
- if (url != null) {
- return systemId;
- }
- } catch (Exception e) {
-
- // continue on...
- }
-
- // normalize id
- id = ResourceResolverSpi.fixURI(id);
-
- // normalize base
- URI base = null;
- URI url = null;
-
- try {
- if (currentSystemId == null) {
- String dir;
-
- try {
- dir = ResourceResolverSpi.fixURI(System.getProperty("user.dir"));
- } catch (SecurityException se) {
- dir = "";
- }
-
- if (!dir.endsWith("/")) {
- dir = dir + "/";
- }
-
- final String protocol = "file";
- final String host = "";
-
- base = new URI(protocol, host, dir, null, null);
- } else {
-
- // should we fix currentSystemId?
- currentSystemId = ResourceResolverSpi.fixURI(currentSystemId);
- base = new URI(currentSystemId);
- }
-
- // expand id
- url = new URI(base, id);
- } catch (Exception e) {
-
- // let it go through
- }
-
- if (url == null) {
- return systemId;
- }
-
- return url.toString();
- }
/**
* Fixes a platform dependent filename to standard URI form.
Modified: xml/security/branches/jsr105_0_16/src/org/apache/xml/security/utils/resolver/implementations/ResolverAnonymous.java
URL: http://svn.apache.org/viewcvs/xml/security/branches/jsr105_0_16/src/org/apache/xml/security/utils/resolver/implementations/ResolverAnonymous.java?rev=368871&r1=368870&r2=368871&view=diff
==============================================================================
--- xml/security/branches/jsr105_0_16/src/org/apache/xml/security/utils/resolver/implementations/ResolverAnonymous.java (original)
+++ xml/security/branches/jsr105_0_16/src/org/apache/xml/security/utils/resolver/implementations/ResolverAnonymous.java Fri Jan 13 14:00:23 2006
@@ -60,13 +60,8 @@
return this._input;
}
- /**
- * We resolve anonymous (unspecified) URIs
- *
- * @param uri
- * @param BaseURI
- * @return
- *
+ /**
+ * @inheritDoc
*/
public boolean engineCanResolve(Attr uri, String BaseURI) {
if (uri == null) {
Modified: xml/security/branches/jsr105_0_16/src/org/apache/xml/security/utils/resolver/implementations/ResolverDirectHTTP.java
URL: http://svn.apache.org/viewcvs/xml/security/branches/jsr105_0_16/src/org/apache/xml/security/utils/resolver/implementations/ResolverDirectHTTP.java?rev=368871&r1=368870&r2=368871&view=diff
==============================================================================
--- xml/security/branches/jsr105_0_16/src/org/apache/xml/security/utils/resolver/implementations/ResolverDirectHTTP.java (original)
+++ xml/security/branches/jsr105_0_16/src/org/apache/xml/security/utils/resolver/implementations/ResolverDirectHTTP.java Fri Jan 13 14:00:23 2006
@@ -26,11 +26,11 @@
import java.net.URL;
import java.net.URLConnection;
+import org.apache.xml.utils.URI;
import org.apache.xml.security.signature.XMLSignatureInput;
import org.apache.xml.security.utils.Base64;
import org.apache.xml.security.utils.resolver.ResourceResolverException;
import org.apache.xml.security.utils.resolver.ResourceResolverSpi;
-import org.apache.xml.utils.URI;
import org.w3c.dom.Attr;
@@ -242,10 +242,9 @@
*
* @param uri
* @param BaseURI
- * @return
+ * @return true if can be resolved
*/
public boolean engineCanResolve(Attr uri, String BaseURI) {
-
if (uri == null) {
log.debug("quick fail, uri == null");
@@ -254,37 +253,31 @@
String uriNodeValue = uri.getNodeValue();
- if (uriNodeValue.equals("") || uriNodeValue.startsWith("#")) {
+ if (uriNodeValue.equals("") || (uriNodeValue.charAt(0)=='#')) {
log.debug("quick fail for empty URIs and local ones");
return false;
}
- URI uriNew = null;
-
- try {
- uriNew = getNewURI(uri.getNodeValue(), BaseURI);
- } catch (URI.MalformedURIException ex) {
- log.debug("", ex);
- }
+ if (log.isDebugEnabled())
+ log.debug("I was asked whether I can resolve " + uriNodeValue);
- if ((uriNew != null) && uriNew.getScheme().equals("http")) {
+ if ( uriNodeValue.startsWith("http:") ||
+ BaseURI.startsWith("http:")) {
if (log.isDebugEnabled())
- log.debug("I state that I can resolve " + uriNew.toString());
+ log.debug("I state that I can resolve " + uriNodeValue);
return true;
}
if (log.isDebugEnabled())
- log.debug("I state that I can't resolve " + uriNew.toString());
+ log.debug("I state that I can't resolve " + uriNodeValue);
return false;
}
/**
- * Method engineGetPropertyKeys
- *
- * @return
+ * @inheritDoc
*/
public String[] engineGetPropertyKeys() {
return ResolverDirectHTTP.properties;
Modified: xml/security/branches/jsr105_0_16/src/org/apache/xml/security/utils/resolver/implementations/ResolverFragment.java
URL: http://svn.apache.org/viewcvs/xml/security/branches/jsr105_0_16/src/org/apache/xml/security/utils/resolver/implementations/ResolverFragment.java?rev=368871&r1=368870&r2=368871&view=diff
==============================================================================
--- xml/security/branches/jsr105_0_16/src/org/apache/xml/security/utils/resolver/implementations/ResolverFragment.java (original)
+++ xml/security/branches/jsr105_0_16/src/org/apache/xml/security/utils/resolver/implementations/ResolverFragment.java Fri Jan 13 14:00:23 2006
@@ -19,11 +19,9 @@
import org.apache.xml.security.signature.XMLSignatureInput;
-import org.apache.xml.security.utils.CachedXPathAPIHolder;
import org.apache.xml.security.utils.IdResolver;
import org.apache.xml.security.utils.resolver.ResourceResolverException;
import org.apache.xml.security.utils.resolver.ResourceResolverSpi;
-import org.apache.xml.utils.URI;
import org.w3c.dom.Attr;
import org.w3c.dom.Document;
import org.w3c.dom.Node;
@@ -95,22 +93,13 @@
log.debug("Try to catch an Element with ID " + id + " and Element was " + selectedElem);
}
- //Set resultSet = dereferenceSameDocumentURI(selectedElem);
- CachedXPathAPIHolder.setDoc(doc);
XMLSignatureInput result = new XMLSignatureInput(selectedElem);
result.setExcludeComments(true);
//log.debug("We return a nodeset with " + resultSet.size() + " nodes");
- result.setMIMEType("text/xml");
-
- try {
- URI uriNew = new URI(new URI(BaseURI), uri.getNodeValue());
-
- result.setSourceURI(uriNew.toString());
- } catch (URI.MalformedURIException ex) {
- result.setSourceURI(BaseURI);
- }
-
+ result.setMIMEType("text/xml");
+ result.setSourceURI((BaseURI != null) ? BaseURI.concat(uri.getNodeValue()) :
+ uri.getNodeValue());
return result;
}
@@ -131,7 +120,7 @@
String uriNodeValue = uri.getNodeValue();
if (uriNodeValue.equals("")
- || (uriNodeValue.startsWith("#")
+ || ((uriNodeValue.charAt(0)=='#')
&&!uriNodeValue.startsWith("#xpointer("))) {
if (log.isDebugEnabled())
log.debug("State I can resolve reference: \"" + uriNodeValue + "\"");
Modified: xml/security/branches/jsr105_0_16/src/org/apache/xml/security/utils/resolver/implementations/ResolverLocalFilesystem.java
URL: http://svn.apache.org/viewcvs/xml/security/branches/jsr105_0_16/src/org/apache/xml/security/utils/resolver/implementations/ResolverLocalFilesystem.java?rev=368871&r1=368870&r2=368871&view=diff
==============================================================================
--- xml/security/branches/jsr105_0_16/src/org/apache/xml/security/utils/resolver/implementations/ResolverLocalFilesystem.java (original)
+++ xml/security/branches/jsr105_0_16/src/org/apache/xml/security/utils/resolver/implementations/ResolverLocalFilesystem.java Fri Jan 13 14:00:23 2006
@@ -20,10 +20,10 @@
import java.io.FileInputStream;
+import org.apache.xml.utils.URI;
import org.apache.xml.security.signature.XMLSignatureInput;
import org.apache.xml.security.utils.resolver.ResourceResolverException;
import org.apache.xml.security.utils.resolver.ResourceResolverSpi;
-import org.apache.xml.utils.URI;
import org.w3c.dom.Attr;
@@ -40,13 +40,7 @@
ResolverLocalFilesystem.class.getName());
/**
- * Method resolve
- *
- * @param uri
- * @param BaseURI
- * @return
- * @throws ResourceResolverException
- * @todo calculate the correct URI from the attribute and the BaseURI
+ * @inheritDoc
*/
public XMLSignatureInput engineResolve(Attr uri, String BaseURI)
throws ResourceResolverException {
@@ -78,7 +72,7 @@
* Method translateUriToFilename
*
* @param uri
- * @return
+ * @return the string of the filename
*/
private static String translateUriToFilename(String uri) {
@@ -113,11 +107,7 @@
}
/**
- * Method engineCanResolve
- *
- * @param uri
- * @param BaseURI
- * @return
+ * @inheritDoc
*/
public boolean engineCanResolve(Attr uri, String BaseURI) {
@@ -127,21 +117,22 @@
String uriNodeValue = uri.getNodeValue();
- if (uriNodeValue.equals("") || uriNodeValue.startsWith("#")) {
+ if (uriNodeValue.equals("") || (uriNodeValue.charAt(0)=='#')) {
return false;
}
try {
- URI uriNew = new URI(new URI(BaseURI), uri.getNodeValue());
- if (log.isDebugEnabled())
- log.debug("I was asked whether I can resolve " + uriNew.toString());
-
- if (uriNew.getScheme().equals("file")) {
- if (log.isDebugEnabled())
- log.debug("I state that I can resolve " + uriNew.toString());
+ //URI uriNew = new URI(new URI(BaseURI), uri.getNodeValue());
+ if (log.isDebugEnabled())
+ log.debug("I was asked whether I can resolve " + uriNodeValue/*uriNew.toString()*/);
+
+ if ( uriNodeValue.startsWith("file:") ||
+ BaseURI.startsWith("file:")/*uriNew.getScheme().equals("file")*/) {
+ if (log.isDebugEnabled())
+ log.debug("I state that I can resolve " + uriNodeValue/*uriNew.toString()*/);
- return true;
- }
+ return true;
+ }
} catch (Exception e) {}
log.debug("But I can't");
Modified: xml/security/branches/jsr105_0_16/src/org/apache/xml/security/utils/resolver/implementations/ResolverXPointer.java
URL: http://svn.apache.org/viewcvs/xml/security/branches/jsr105_0_16/src/org/apache/xml/security/utils/resolver/implementations/ResolverXPointer.java?rev=368871&r1=368870&r2=368871&view=diff
==============================================================================
--- xml/security/branches/jsr105_0_16/src/org/apache/xml/security/utils/resolver/implementations/ResolverXPointer.java (original)
+++ xml/security/branches/jsr105_0_16/src/org/apache/xml/security/utils/resolver/implementations/ResolverXPointer.java Fri Jan 13 14:00:23 2006
@@ -19,11 +19,9 @@
import org.apache.xml.security.signature.XMLSignatureInput;
-import org.apache.xml.security.utils.CachedXPathAPIHolder;
import org.apache.xml.security.utils.IdResolver;
import org.apache.xml.security.utils.resolver.ResourceResolverException;
import org.apache.xml.security.utils.resolver.ResourceResolverSpi;
-import org.apache.xml.utils.URI;
import org.w3c.dom.Attr;
import org.w3c.dom.Document;
import org.w3c.dom.Node;
@@ -60,17 +58,12 @@
Node resultNode = null;
Document doc = uri.getOwnerElement().getOwnerDocument();
- // this must be done so that Xalan can catch ALL namespaces
- //XMLUtils.circumventBug2650(doc);
-
- //CachedXPathAPI cXPathAPI = new CachedXPathAPI();
-
-
- if (isXPointerSlash(uri)) {
+ String uriStr=uri.getNodeValue();
+ if (isXPointerSlash(uriStr)) {
resultNode = doc;
- } else if (isXPointerId(uri)) {
- String id = getXPointerId(uri);
+ } else if (isXPointerId(uriStr)) {
+ String id = getXPointerId(uriStr);
resultNode =IdResolver.getElementById(doc, id);
// log.debug("Use #xpointer(id('" + id + "')) on element " + selectedElem);
@@ -89,18 +82,13 @@
}
- //Set resultSet = XMLUtils.convertNodelistToSet(resultNode);
- CachedXPathAPIHolder.setDoc(doc);
XMLSignatureInput result = new XMLSignatureInput(resultNode);
result.setMIMEType("text/xml");
-
- try {
- URI uriNew = new URI(new URI(BaseURI), uri.getNodeValue());
-
- result.setSourceURI(uriNew.toString());
- } catch (URI.MalformedURIException ex) {
- result.setSourceURI(BaseURI);
+ if (BaseURI != null && BaseURI.length() > 0) {
+ result.setSourceURI(BaseURI.concat(uri.getNodeValue()));
+ } else {
+ result.setSourceURI(uri.getNodeValue());
}
return result;
@@ -114,8 +102,8 @@
if (uri == null) {
return false;
}
-
- if (isXPointerSlash(uri) || isXPointerId(uri)) {
+ String uriStr =uri.getNodeValue();
+ if (isXPointerSlash(uriStr) || isXPointerId(uriStr)) {
return true;
}
@@ -128,15 +116,18 @@
* @param uri
* @return true if begins with xpointer
*/
- private static boolean isXPointerSlash(Attr uri) {
+ private static boolean isXPointerSlash(String uri) {
- if (uri.getNodeValue().equals("#xpointer(/)")) {
+ if (uri.equals("#xpointer(/)")) {
return true;
}
return false;
}
+
+ private static final String XP="#xpointer(id(";
+ private static final int XP_LENGTH=XP.length();
/**
* Method isXPointerId
*
@@ -144,25 +135,24 @@
* @return it it has an xpointer id
*
*/
- private static boolean isXPointerId(Attr uri) {
-
- String uriNodeValue = uri.getNodeValue();
+ private static boolean isXPointerId(String uri) {
+
- if (uriNodeValue.startsWith("#xpointer(id(")
- && uriNodeValue.endsWith("))")) {
- String idPlusDelim = uriNodeValue.substring("#xpointer(id(".length(),
- uriNodeValue.length()
- - "))".length());
+ if (uri.startsWith(XP)
+ && uri.endsWith("))")) {
+ String idPlusDelim = uri.substring(XP_LENGTH,
+ uri.length()
+ - 2);
// log.debug("idPlusDelim=" + idPlusDelim);
-
+ int idLen=idPlusDelim.length() -1;
if (((idPlusDelim.charAt(0) == '"') && (idPlusDelim
- .charAt(idPlusDelim.length() - 1) == '"')) || ((idPlusDelim
+ .charAt(idLen) == '"')) || ((idPlusDelim
.charAt(0) == '\'') && (idPlusDelim
- .charAt(idPlusDelim.length() - 1) == '\''))) {
+ .charAt(idLen) == '\''))) {
if (log.isDebugEnabled())
log.debug("Id="
- + idPlusDelim.substring(1, idPlusDelim.length() - 1));
+ + idPlusDelim.substring(1, idLen));
return true;
}
@@ -175,23 +165,21 @@
* Method getXPointerId
*
* @param uri
- * @return
+ * @return xpointerId to search.
*/
- private static String getXPointerId(Attr uri) {
-
- String uriNodeValue = uri.getNodeValue();
+ private static String getXPointerId(String uri) {
- if (uriNodeValue.startsWith("#xpointer(id(")
- && uriNodeValue.endsWith("))")) {
- String idPlusDelim = uriNodeValue.substring("#xpointer(id(".length(),
- uriNodeValue.length()
- - "))".length());
+ if (uri.startsWith(XP)
+ && uri.endsWith("))")) {
+ String idPlusDelim = uri.substring(XP_LENGTH,uri.length()
+ - 2);
+ int idLen=idPlusDelim.length() -1;
if (((idPlusDelim.charAt(0) == '"') && (idPlusDelim
- .charAt(idPlusDelim.length() - 1) == '"')) || ((idPlusDelim
+ .charAt(idLen) == '"')) || ((idPlusDelim
.charAt(0) == '\'') && (idPlusDelim
- .charAt(idPlusDelim.length() - 1) == '\''))) {
- return idPlusDelim.substring(1, idPlusDelim.length() - 1);
+ .charAt(idLen) == '\''))) {
+ return idPlusDelim.substring(1, idLen);
}
}
Modified: xml/security/branches/jsr105_0_16/src/org/jcp/xml/dsig/internal/HmacSHA1.java
URL: http://svn.apache.org/viewcvs/xml/security/branches/jsr105_0_16/src/org/jcp/xml/dsig/internal/HmacSHA1.java?rev=368871&r1=368870&r2=368871&view=diff
==============================================================================
--- xml/security/branches/jsr105_0_16/src/org/jcp/xml/dsig/internal/HmacSHA1.java (original)
+++ xml/security/branches/jsr105_0_16/src/org/jcp/xml/dsig/internal/HmacSHA1.java Fri Jan 13 14:00:23 2006
@@ -42,8 +42,7 @@
public class HmacSHA1 {
- static Logger log = Logger.getLogger(HmacSHA1.class.getName());
-
+ private static Logger log = Logger.getLogger("org.jcp.xml.dsig.internal");
private static final int SHA1_BLOCK = 64; // 512 bit block in SHA-1
private byte[] key_opad;
@@ -79,26 +78,35 @@
else {
byte_length = -1;
}
- log.log(Level.FINE, "byte_length: " + byte_length);
+ if (log.isLoggable(Level.FINE)) {
+ log.log(Level.FINE, "byte_length: " + byte_length);
+ }
initialized = true;
}
/**
* update the engine with data
*
- * *@param data information to be signed or verified
+ * @param data information to be signed or verified
*/
public void update(byte[] data) {
this.digest.update(data);
}
-
+ public void update(byte data) {
+ this.digest.update(data);
+ }
+ public void update(byte[] data, int offset, int len) {
+ this.digest.update(data, offset, len);
+ }
+
/**
* Signs the data
*/
public byte[] sign() throws SignatureException {
if (byte_length == 0) {
- throw new SignatureException("length should be -1 or greater than zero, but is " + byte_length);
+ throw new SignatureException
+ ("length should be -1 or greater than zero, but is " + byte_length);
}
byte[] value = this.digest.digest();
@@ -146,5 +154,4 @@
this.digest.reset();
this.digest.update(key_ipad);
}
-
}
Modified: xml/security/branches/jsr105_0_16/src/org/jcp/xml/dsig/internal/dom/ApacheCanonicalizer.java
URL: http://svn.apache.org/viewcvs/xml/security/branches/jsr105_0_16/src/org/jcp/xml/dsig/internal/dom/ApacheCanonicalizer.java?rev=368871&r1=368870&r2=368871&view=diff
==============================================================================
--- xml/security/branches/jsr105_0_16/src/org/jcp/xml/dsig/internal/dom/ApacheCanonicalizer.java (original)
+++ xml/security/branches/jsr105_0_16/src/org/jcp/xml/dsig/internal/dom/ApacheCanonicalizer.java Fri Jan 13 14:00:23 2006
@@ -48,7 +48,7 @@
public abstract class ApacheCanonicalizer extends TransformService {
- static Logger log = Logger.getLogger(ApacheCanonicalizer.class.getName());
+ private static Logger log = Logger.getLogger("org.jcp.xml.dsig.internal.dom");
protected Canonicalizer apacheCanonicalizer;
private Transform apacheTransform;
protected String inclusiveNamespaces;
@@ -93,8 +93,10 @@
if (apacheCanonicalizer == null) {
try {
apacheCanonicalizer = Canonicalizer.getInstance(getAlgorithm());
- log.log(Level.FINE, "Created canonicalizer for algorithm: "
- + getAlgorithm());
+ if (log.isLoggable(Level.FINE)) {
+ log.log(Level.FINE, "Created canonicalizer for algorithm: "
+ + getAlgorithm());
+ }
} catch (InvalidCanonicalizerException ice) {
throw new TransformException
("Couldn't find Canonicalizer for: " + getAlgorithm() +
@@ -113,30 +115,42 @@
if (data instanceof ApacheData) {
XMLSignatureInput in =
((ApacheData) data).getXMLSignatureInput();
- if (in.isElement() || in.isNodeSet()) {
+ if (in.isElement()) {
+ if (inclusiveNamespaces != null) {
+ return new OctetStreamData(new ByteArrayInputStream
+ (apacheCanonicalizer.canonicalizeSubtree
+ (in.getSubNode(), inclusiveNamespaces)));
+ } else {
+ return new OctetStreamData(new ByteArrayInputStream
+ (apacheCanonicalizer.canonicalizeSubtree
+ (in.getSubNode())));
+ }
+ } else if (in.isNodeSet()) {
nodeSet = in.getNodeSet();
} else {
return new OctetStreamData(new ByteArrayInputStream(
apacheCanonicalizer.canonicalize(
Utils.readBytesFromStream(in.getOctetStream()))));
}
- } else if (data instanceof SubDocumentData) {
- SubDocumentData sdd = (SubDocumentData) data;
+ } else if (data instanceof DOMSubTreeData) {
+ DOMSubTreeData subTree = (DOMSubTreeData) data;
if (inclusiveNamespaces != null) {
return new OctetStreamData(new ByteArrayInputStream
(apacheCanonicalizer.canonicalizeSubtree
- (sdd.nodeIterator().getRoot(), inclusiveNamespaces)));
+ (subTree.getRoot(), inclusiveNamespaces)));
} else {
return new OctetStreamData(new ByteArrayInputStream
(apacheCanonicalizer.canonicalizeSubtree
- (sdd.nodeIterator().getRoot())));
+ (subTree.getRoot())));
}
} else if (data instanceof NodeSetData) {
NodeSetData nsd = (NodeSetData) data;
// convert Iterator to Set
nodeSet = Utils.toNodeSet(nsd.iterator());
- log.log(Level.FINE, "Canonicalizing " + nodeSet.size()
- + " nodes");
+ if (log.isLoggable(Level.FINE)) {
+ log.log(Level.FINE, "Canonicalizing " + nodeSet.size()
+ + " nodes");
+ }
} else {
return new OctetStreamData(new ByteArrayInputStream(
apacheCanonicalizer.canonicalize(
@@ -174,8 +188,10 @@
apacheTransform = Transform.getInstance
(ownerDoc, getAlgorithm(), transformElem.getChildNodes());
apacheTransform.setElement(transformElem, xc.getBaseURI());
- log.log(Level.FINE, "Created transform for algorithm: "
- + getAlgorithm());
+ if (log.isLoggable(Level.FINE)) {
+ log.log(Level.FINE, "Created transform for algorithm: "
+ + getAlgorithm());
+ }
} catch (Exception ex) {
throw new TransformException
("Couldn't find Transform for: " + getAlgorithm(), ex);
@@ -184,20 +200,27 @@
XMLSignatureInput in;
if (data instanceof ApacheData) {
- log.log(Level.FINE, "ApacheData = true");
+ if (log.isLoggable(Level.FINE)) {
+ log.log(Level.FINE, "ApacheData = true");
+ }
in = ((ApacheData) data).getXMLSignatureInput();
} else if (data instanceof NodeSetData) {
- log.log(Level.FINE, "isNodeSet() = true");
- if (data instanceof SubDocumentData) {
- SubDocumentData sdd = (SubDocumentData) data;
- in = new XMLSignatureInput(sdd.nodeIterator().getRoot());
+ if (log.isLoggable(Level.FINE)) {
+ log.log(Level.FINE, "isNodeSet() = true");
+ }
+ if (data instanceof DOMSubTreeData) {
+ DOMSubTreeData subTree = (DOMSubTreeData) data;
+ in = new XMLSignatureInput(subTree.getRoot());
+ in.setExcludeComments(subTree.excludeComments());
} else {
Set nodeSet =
Utils.toNodeSet(((NodeSetData) data).iterator());
in = new XMLSignatureInput(nodeSet);
}
} else {
- log.log(Level.FINE, "isNodeSet() = false");
+ if (log.isLoggable(Level.FINE)) {
+ log.log(Level.FINE, "isNodeSet() = false");
+ }
try {
in = new XMLSignatureInput
(((OctetStreamData)data).getOctetStream());
Modified: xml/security/branches/jsr105_0_16/src/org/jcp/xml/dsig/internal/dom/ApacheNodeSetData.java
URL: http://svn.apache.org/viewcvs/xml/security/branches/jsr105_0_16/src/org/jcp/xml/dsig/internal/dom/ApacheNodeSetData.java?rev=368871&r1=368870&r2=368871&view=diff
==============================================================================
--- xml/security/branches/jsr105_0_16/src/org/jcp/xml/dsig/internal/dom/ApacheNodeSetData.java (original)
+++ xml/security/branches/jsr105_0_16/src/org/jcp/xml/dsig/internal/dom/ApacheNodeSetData.java Fri Jan 13 14:00:23 2006
@@ -23,9 +23,16 @@
package org.jcp.xml.dsig.internal.dom;
import java.util.Collections;
+import java.util.HashSet;
import java.util.Iterator;
+import java.util.LinkedHashSet;
+import java.util.List;
+import java.util.Set;
import javax.xml.crypto.NodeSetData;
+import org.w3c.dom.Node;
+import org.apache.xml.security.signature.NodeFilter;
import org.apache.xml.security.signature.XMLSignatureInput;
+import org.apache.xml.security.utils.XMLUtils;
public class ApacheNodeSetData implements ApacheData, NodeSetData {
@@ -36,6 +43,11 @@
}
public Iterator iterator() {
+ // If nodefilters are set, must execute them first to create node-set
+ if (xi.getNodeFilters() != null) {
+ return Collections.unmodifiableSet
+ (getNodeSet(xi.getNodeFilters())).iterator();
+ }
try {
return Collections.unmodifiableSet(xi.getNodeSet()).iterator();
} catch (Exception e) {
@@ -47,5 +59,33 @@
public XMLSignatureInput getXMLSignatureInput() {
return xi;
+ }
+
+ private Set getNodeSet(List nodeFilters) {
+ if (xi.isNeedsToBeExpanded()) {
+ XMLUtils.circumventBug2650
+ (XMLUtils.getOwnerDocument(xi.getSubNode()));
+ }
+
+ Set inputSet = new LinkedHashSet();
+ XMLUtils.getSet
+ (xi.getSubNode(), inputSet, null, !xi.isExcludeComments());
+ Set nodeSet = new LinkedHashSet();
+ Iterator i = inputSet.iterator();
+ while (i.hasNext()) {
+ Node currentNode = (Node) i.next();
+ Iterator it = nodeFilters.iterator();
+ boolean skipNode = false;
+ while (it.hasNext() && !skipNode) {
+ NodeFilter nf = (NodeFilter) it.next();
+ if (!nf.isNodeInclude(currentNode)) {
+ skipNode = true;
+ }
+ }
+ if (!skipNode) {
+ nodeSet.add(currentNode);
+ }
+ }
+ return nodeSet;
}
}
Modified: xml/security/branches/jsr105_0_16/src/org/jcp/xml/dsig/internal/dom/ApacheTransform.java
URL: http://svn.apache.org/viewcvs/xml/security/branches/jsr105_0_16/src/org/jcp/xml/dsig/internal/dom/ApacheTransform.java?rev=368871&r1=368870&r2=368871&view=diff
==============================================================================
--- xml/security/branches/jsr105_0_16/src/org/jcp/xml/dsig/internal/dom/ApacheTransform.java (original)
+++ xml/security/branches/jsr105_0_16/src/org/jcp/xml/dsig/internal/dom/ApacheTransform.java Fri Jan 13 14:00:23 2006
@@ -49,7 +49,7 @@
*/
public abstract class ApacheTransform extends TransformService {
- static Logger log = Logger.getLogger(ApacheTransform.class.getName());
+ private static Logger log = Logger.getLogger("org.jcp.xml.dsig.internal.dom");
private Transform apacheTransform;
protected Document ownerDoc;
protected Element transformElem;
@@ -112,8 +112,10 @@
apacheTransform = Transform.getInstance
(ownerDoc, getAlgorithm(), transformElem.getChildNodes());
apacheTransform.setElement(transformElem, xc.getBaseURI());
- log.log(Level.FINE, "Created transform for algorithm: "
- + getAlgorithm());
+ if (log.isLoggable(Level.FINE)) {
+ log.log(Level.FINE, "Created transform for algorithm: "
+ + getAlgorithm());
+ }
} catch (Exception ex) {
throw new TransformException
("Couldn't find Transform for: " + getAlgorithm(), ex);
@@ -122,20 +124,30 @@
XMLSignatureInput in;
if (data instanceof ApacheData) {
- log.log(Level.FINE, "ApacheData = true");
+ if (log.isLoggable(Level.FINE)) {
+ log.log(Level.FINE, "ApacheData = true");
+ }
in = ((ApacheData) data).getXMLSignatureInput();
} else if (data instanceof NodeSetData) {
- log.log(Level.FINE, "isNodeSet() = true");
- if (data instanceof SubDocumentData) {
- SubDocumentData sdd = (SubDocumentData) data;
- in = new XMLSignatureInput(sdd.nodeIterator().getRoot());
+ if (log.isLoggable(Level.FINE)) {
+ log.log(Level.FINE, "isNodeSet() = true");
+ }
+ if (data instanceof DOMSubTreeData) {
+ if (log.isLoggable(Level.FINE)) {
+ log.log(Level.FINE, "DOMSubTreeData = true");
+ }
+ DOMSubTreeData subTree = (DOMSubTreeData) data;
+ in = new XMLSignatureInput(subTree.getRoot());
+ in.setExcludeComments(subTree.excludeComments());
} else {
Set nodeSet =
Utils.toNodeSet(((NodeSetData) data).iterator());
in = new XMLSignatureInput(nodeSet);
}
} else {
- log.log(Level.FINE, "isNodeSet() = false");
+ if (log.isLoggable(Level.FINE)) {
+ log.log(Level.FINE, "isNodeSet() = false");
+ }
try {
in = new XMLSignatureInput
(((OctetStreamData)data).getOctetStream());
Modified: xml/security/branches/jsr105_0_16/src/org/jcp/xml/dsig/internal/dom/DOMCanonicalXMLC14NMethod.java
URL: http://svn.apache.org/viewcvs/xml/security/branches/jsr105_0_16/src/org/jcp/xml/dsig/internal/dom/DOMCanonicalXMLC14NMethod.java?rev=368871&r1=368870&r2=368871&view=diff
==============================================================================
--- xml/security/branches/jsr105_0_16/src/org/jcp/xml/dsig/internal/dom/DOMCanonicalXMLC14NMethod.java (original)
+++ xml/security/branches/jsr105_0_16/src/org/jcp/xml/dsig/internal/dom/DOMCanonicalXMLC14NMethod.java Fri Jan 13 14:00:23 2006
@@ -53,9 +53,9 @@
// ignore comments if dereferencing same-document URI that requires
// you to omit comments, even if the Transform says otherwise -
// this is to be compliant with section 4.3.3.3 of W3C Rec.
- if (data instanceof SubDocumentData) {
- SubDocumentData sdd = (SubDocumentData) data;
- if (!sdd.withComments()) {
+ if (data instanceof DOMSubTreeData) {
+ DOMSubTreeData subTree = (DOMSubTreeData) data;
+ if (subTree.excludeComments()) {
try {
apacheCanonicalizer = Canonicalizer.getInstance
(CanonicalizationMethod.INCLUSIVE);
Modified: xml/security/branches/jsr105_0_16/src/org/jcp/xml/dsig/internal/dom/DOMCryptoBinary.java
URL: http://svn.apache.org/viewcvs/xml/security/branches/jsr105_0_16/src/org/jcp/xml/dsig/internal/dom/DOMCryptoBinary.java?rev=368871&r1=368870&r2=368871&view=diff
==============================================================================
--- xml/security/branches/jsr105_0_16/src/org/jcp/xml/dsig/internal/dom/DOMCryptoBinary.java (original)
+++ xml/security/branches/jsr105_0_16/src/org/jcp/xml/dsig/internal/dom/DOMCryptoBinary.java Fri Jan 13 14:00:23 2006
@@ -62,7 +62,6 @@
throw new NullPointerException("bigNum is null");
}
this.bigNum = bigNum;
- byte[] bigNumAsBytes = bigNum.toByteArray();
// convert to bitstring
value = Base64.encode(bigNum);
}
Modified: xml/security/branches/jsr105_0_16/src/org/jcp/xml/dsig/internal/dom/DOMDSASignatureMethod.java
URL: http://svn.apache.org/viewcvs/xml/security/branches/jsr105_0_16/src/org/jcp/xml/dsig/internal/dom/DOMDSASignatureMethod.java?rev=368871&r1=368870&r2=368871&view=diff
==============================================================================
--- xml/security/branches/jsr105_0_16/src/org/jcp/xml/dsig/internal/dom/DOMDSASignatureMethod.java (original)
+++ xml/security/branches/jsr105_0_16/src/org/jcp/xml/dsig/internal/dom/DOMDSASignatureMethod.java Fri Jan 13 14:00:23 2006
@@ -40,7 +40,7 @@
import java.util.logging.Logger;
import org.w3c.dom.Element;
-import org.apache.xml.security.utils.Base64;
+import org.jcp.xml.dsig.internal.SignerOutputStream;
/**
* DOM-based implementation of SignatureMethod for DSA algorithm.
@@ -50,8 +50,7 @@
*/
public final class DOMDSASignatureMethod extends DOMSignatureMethod {
- static Logger log = Logger.getLogger(DOMDSASignatureMethod.class.getName());
-
+ private static Logger log = Logger.getLogger("org.jcp.xml.dsig.internal.dom");
private Signature signature;
/**
@@ -102,12 +101,15 @@
return (getParameterSpec() == spec);
}
- public boolean verify(Key key, byte[] data, byte[] sig)
- throws InvalidKeyException, SignatureException {
+ public boolean verify(Key key, DOMSignedInfo si, byte[] sig,
+ XMLValidateContext context)
+ throws InvalidKeyException, SignatureException, XMLSignatureException {
if (key == null) {
throw new NullPointerException("key cannot be null");
} else if (sig == null) {
throw new NullPointerException("signature cannot be null");
+ } else if (si == null) {
+ throw new NullPointerException("signedInfo cannot be null");
}
if (signature == null) {
try {
@@ -121,18 +123,22 @@
throw new InvalidKeyException("key must be PublicKey");
}
signature.initVerify((PublicKey) key);
- signature.update(data);
- log.log(Level.FINE, "verifying data: " + Base64.encode(data));
- log.log(Level.FINE, "verifying with key: " + key);
- return signature.verify(convertXMLDSIGtoASN1(sig) );
+ si.canonicalize(context, new SignerOutputStream(signature));
+
+ // avoid overhead of converting key to String unless necessary
+ if (log.isLoggable(Level.FINE)) {
+ log.log(Level.FINE, "verifying with key: " + key);
+ }
+ return signature.verify(convertXMLDSIGtoASN1(sig));
} catch (IOException ioex) {
// should never occur!
throw new RuntimeException(ioex.getMessage());
}
}
- public byte[] sign(Key key, byte[] data) throws InvalidKeyException {
- if (key == null || data == null) {
+ public byte[] sign(Key key, DOMSignedInfo si, XMLSignContext context)
+ throws InvalidKeyException, XMLSignatureException {
+ if (key == null || si == null) {
throw new NullPointerException();
}
@@ -146,12 +152,16 @@
throw new InvalidKeyException("SHA1withDSA Signature not found");
}
}
- log.log(Level.FINE, "Signing data: " + Base64.encode(data));
- log.log(Level.FINE, "Signing with key: " + key);
+
+ // avoid overhead of converting key to String unless necessary
+ if (log.isLoggable(Level.FINE)) {
+ log.log(Level.FINE, "Signing with key: " + key);
+ }
signature.initSign((PrivateKey) key);
+ si.canonicalize(context, new SignerOutputStream(signature));
+
try {
- signature.update(data);
- return convertASN1toXMLDSIG(signature.sign() );
+ return convertASN1toXMLDSIG(signature.sign());
} catch (SignatureException se) {
// should never occur!
throw new RuntimeException(se.getMessage());
Modified: xml/security/branches/jsr105_0_16/src/org/jcp/xml/dsig/internal/dom/DOMExcC14NMethod.java
URL: http://svn.apache.org/viewcvs/xml/security/branches/jsr105_0_16/src/org/jcp/xml/dsig/internal/dom/DOMExcC14NMethod.java?rev=368871&r1=368870&r2=368871&view=diff
==============================================================================
--- xml/security/branches/jsr105_0_16/src/org/jcp/xml/dsig/internal/dom/DOMExcC14NMethod.java (original)
+++ xml/security/branches/jsr105_0_16/src/org/jcp/xml/dsig/internal/dom/DOMExcC14NMethod.java Fri Jan 13 14:00:23 2006
@@ -71,11 +71,17 @@
private void unmarshalParams(Element paramsElem) {
String prefixListAttr = paramsElem.getAttributeNS(null, "PrefixList");
this.inclusiveNamespaces = prefixListAttr;
- StringTokenizer tokenizer = new StringTokenizer(prefixListAttr, " ");
- List prefixList = new ArrayList(tokenizer.countTokens());
- for (int i = 0; tokenizer.hasMoreTokens(); i++) {
- prefixList.add(tokenizer.nextToken());
+ int begin = 0;
+ int end = prefixListAttr.indexOf(' ');
+ List prefixList = new ArrayList();
+ while (end != -1) {
+ prefixList.add(prefixListAttr.substring(begin, end));
+ begin = end + 1;
+ end = prefixListAttr.indexOf(' ', begin);
}
+ if (begin <= prefixListAttr.length()) {
+ prefixList.add(prefixListAttr.substring(begin));
+ }
this.params = new ExcC14NParameterSpec(prefixList);
}
@@ -103,10 +109,10 @@
ExcC14NParameterSpec params = (ExcC14NParameterSpec) spec;
StringBuffer prefixListAttr = new StringBuffer("");
- Iterator i = params.getPrefixList().iterator();
- while (i.hasNext()) {
- prefixListAttr.append((String) i.next());
- if (i.hasNext()) {
+ List prefixList = params.getPrefixList();
+ for (int i = 0, size = prefixList.size(); i < size; i++) {
+ prefixListAttr.append((String) prefixList.get(i));
+ if (i < size - 1) {
prefixListAttr.append(" ");
}
}
@@ -125,9 +131,9 @@
// ignore comments if dereferencing same-document URI that require
// you to omit comments, even if the Transform says otherwise -
// this is to be compliant with section 4.3.3.3 of W3C Rec.
- if (data instanceof SubDocumentData) {
- SubDocumentData sdd = (SubDocumentData) data;
- if (!sdd.withComments()) {
+ if (data instanceof DOMSubTreeData) {
+ DOMSubTreeData subTree = (DOMSubTreeData) data;
+ if (subTree.excludeComments()) {
try {
apacheCanonicalizer = Canonicalizer.getInstance
(CanonicalizationMethod.EXCLUSIVE);
Modified: xml/security/branches/jsr105_0_16/src/org/jcp/xml/dsig/internal/dom/DOMHMACSignatureMethod.java
URL: http://svn.apache.org/viewcvs/xml/security/branches/jsr105_0_16/src/org/jcp/xml/dsig/internal/dom/DOMHMACSignatureMethod.java?rev=368871&r1=368870&r2=368871&view=diff
==============================================================================
--- xml/security/branches/jsr105_0_16/src/org/jcp/xml/dsig/internal/dom/DOMHMACSignatureMethod.java (original)
+++ xml/security/branches/jsr105_0_16/src/org/jcp/xml/dsig/internal/dom/DOMHMACSignatureMethod.java Fri Jan 13 14:00:23 2006
@@ -38,6 +38,8 @@
import org.w3c.dom.Document;
import org.w3c.dom.Element;
+import org.jcp.xml.dsig.internal.MacOutputStream;
+
/**
* DOM-based implementation of HMAC SignatureMethod.
*
@@ -45,7 +47,7 @@
*/
public final class DOMHMACSignatureMethod extends DOMSignatureMethod {
- static Logger log = Logger.getLogger(DOMHMACSignatureMethod.class.getName());
+ private static Logger log = Logger.getLogger("org.jcp.xml.dsig.internal.dom");
private HmacSHA1 hmac = new HmacSHA1();
private int outputLength;
@@ -77,8 +79,11 @@
("params must be of type HMACParameterSpec");
}
outputLength = ((HMACParameterSpec) params).getOutputLength();
- log.log(Level.FINE, "Setting outputLength from HMACParameterSpec to: "
- + outputLength);
+ if (log.isLoggable(Level.FINE)) {
+ log.log(Level.FINE,
+ "Setting outputLength from HMACParameterSpec to: "
+ + outputLength);
+ }
} else {
outputLength = -1;
}
@@ -88,7 +93,9 @@
throws MarshalException {
outputLength = new Integer
(paramsElem.getFirstChild().getNodeValue()).intValue();
- log.log(Level.FINE, "unmarshalled outputLength: " + outputLength);
+ if (log.isLoggable(Level.FINE)) {
+ log.log(Level.FINE, "unmarshalled outputLength: " + outputLength);
+ }
return new HMACParameterSpec(outputLength);
}
@@ -104,23 +111,29 @@
parent.appendChild(hmacElem);
}
- public boolean verify(Key key, byte[] data, byte[] sig)
- throws InvalidKeyException, SignatureException {
- if (key == null || sig == null) {
- throw new NullPointerException("key or signature data can't be null");
+ public boolean verify(Key key, DOMSignedInfo si, byte[] sig,
+ XMLValidateContext context)
+ throws InvalidKeyException, SignatureException, XMLSignatureException {
+ if (key == null || si == null || sig == null) {
+ throw new NullPointerException
+ ("key, signedinfo or signature data can't be null");
}
- log.log(Level.FINE, "outputLength = " + outputLength);
+ if (log.isLoggable(Level.FINE)) {
+ log.log(Level.FINE, "outputLength = " + outputLength);
+ }
hmac.init(key, outputLength);
- hmac.update(data);
+ si.canonicalize(context, new MacOutputStream(hmac));
return hmac.verify(sig);
}
- public byte[] sign(Key key, byte[] data) throws InvalidKeyException {
- if (key == null || data == null) {
+ public byte[] sign(Key key, DOMSignedInfo si, XMLSignContext context)
+ throws InvalidKeyException, XMLSignatureException {
+ if (key == null || si == null) {
throw new NullPointerException();
}
hmac.init(key, outputLength);
- hmac.update(data);
+ si.canonicalize(context, new MacOutputStream(hmac));
+
try {
return hmac.sign();
} catch (SignatureException se) {
Modified: xml/security/branches/jsr105_0_16/src/org/jcp/xml/dsig/internal/dom/DOMKeyInfo.java
URL: http://svn.apache.org/viewcvs/xml/security/branches/jsr105_0_16/src/org/jcp/xml/dsig/internal/dom/DOMKeyInfo.java?rev=368871&r1=368870&r2=368871&view=diff
==============================================================================
--- xml/security/branches/jsr105_0_16/src/org/jcp/xml/dsig/internal/dom/DOMKeyInfo.java (original)
+++ xml/security/branches/jsr105_0_16/src/org/jcp/xml/dsig/internal/dom/DOMKeyInfo.java Fri Jan 13 14:00:23 2006
@@ -127,7 +127,6 @@
throw new NullPointerException("parent is null");
}
- DOMStructure dp = (DOMStructure) parent;
marshal(((javax.xml.crypto.dom.DOMStructure) parent).getNode(),
DOMUtils.getSignaturePrefix(context), (DOMCryptoContext) context);
}
Modified: xml/security/branches/jsr105_0_16/src/org/jcp/xml/dsig/internal/dom/DOMKeyInfoFactory.java
URL: http://svn.apache.org/viewcvs/xml/security/branches/jsr105_0_16/src/org/jcp/xml/dsig/internal/dom/DOMKeyInfoFactory.java?rev=368871&r1=368870&r2=368871&view=diff
==============================================================================
--- xml/security/branches/jsr105_0_16/src/org/jcp/xml/dsig/internal/dom/DOMKeyInfoFactory.java (original)
+++ xml/security/branches/jsr105_0_16/src/org/jcp/xml/dsig/internal/dom/DOMKeyInfoFactory.java Fri Jan 13 14:00:23 2006
@@ -25,8 +25,6 @@
import java.math.BigInteger;
import java.security.*;
import java.util.List;
-import java.util.logging.Level;
-import java.util.logging.Logger;
import javax.xml.crypto.*;
import javax.xml.crypto.dsig.*;
import javax.xml.crypto.dom.*;
@@ -42,8 +40,6 @@
*/
public final class DOMKeyInfoFactory extends KeyInfoFactory {
- static Logger log = Logger.getLogger(DOMKeyInfoFactory.class.getName());
-
static {
AccessController.doPrivileged(new PrivilegedAction() {
public Object run() {
@@ -141,7 +137,6 @@
throw new MarshalException("Document implementation must " +
"support DOM Level 2 and be namespace aware");
}
- log.log(Level.FINE, "unmarshalling element: " + tag );
if (tag.equals("KeyInfo")) {
return new DOMKeyInfo(element, null);
} else {
Modified: xml/security/branches/jsr105_0_16/src/org/jcp/xml/dsig/internal/dom/DOMManifest.java
URL: http://svn.apache.org/viewcvs/xml/security/branches/jsr105_0_16/src/org/jcp/xml/dsig/internal/dom/DOMManifest.java?rev=368871&r1=368870&r2=368871&view=diff
==============================================================================
--- xml/security/branches/jsr105_0_16/src/org/jcp/xml/dsig/internal/dom/DOMManifest.java (original)
+++ xml/security/branches/jsr105_0_16/src/org/jcp/xml/dsig/internal/dom/DOMManifest.java Fri Jan 13 14:00:23 2006
@@ -63,7 +63,7 @@
throw new IllegalArgumentException("list of references must " +
"contain at least one entry");
}
- for (int i = 0; i < refCopy.size(); i++) {
+ for (int i = 0, size = refCopy.size(); i < size; i++) {
if (!(refCopy.get(i) instanceof Reference)) {
throw new ClassCastException
("references["+i+"] is not a valid type");
@@ -108,9 +108,8 @@
DOMUtils.setAttributeID(manElem, "Id", id);
// add references
- Iterator i = references.iterator();
- while (i.hasNext()) {
- DOMReference ref = (DOMReference) i.next();
+ for (int i = 0, size = references.size(); i < size; i++) {
+ DOMReference ref = (DOMReference) references.get(i);
ref.marshal(manElem, dsPrefix, context);
}
parent.appendChild(manElem);
Modified: xml/security/branches/jsr105_0_16/src/org/jcp/xml/dsig/internal/dom/DOMPGPData.java
URL: http://svn.apache.org/viewcvs/xml/security/branches/jsr105_0_16/src/org/jcp/xml/dsig/internal/dom/DOMPGPData.java?rev=368871&r1=368870&r2=368871&view=diff
==============================================================================
--- xml/security/branches/jsr105_0_16/src/org/jcp/xml/dsig/internal/dom/DOMPGPData.java (original)
+++ xml/security/branches/jsr105_0_16/src/org/jcp/xml/dsig/internal/dom/DOMPGPData.java Fri Jan 13 14:00:23 2006
@@ -71,7 +71,7 @@
this.externalElements = Collections.EMPTY_LIST;
} else {
List otherCopy = new ArrayList(other);
- for (int i = 0; i < otherCopy.size(); i++) {
+ for (int i = 0, size = otherCopy.size(); i < size; i++) {
if (!(otherCopy.get(i) instanceof XMLStructure)) {
throw new ClassCastException
("other["+i+"] is not a valid PGPData type");
@@ -116,7 +116,7 @@
this.externalElements = Collections.EMPTY_LIST;
} else {
List otherCopy = new ArrayList(other);
- for (int i = 0; i < otherCopy.size(); i++) {
+ for (int i = 0, size = otherCopy.size(); i < size; i++) {
if (!(otherCopy.get(i) instanceof XMLStructure)) {
throw new ClassCastException
("other["+i+"] is not a valid PGPData type");
@@ -141,15 +141,17 @@
byte[] keyId = null;
byte[] keyPacket = null;
NodeList nl = pdElem.getChildNodes();
- List other = new ArrayList(nl.getLength());
- for (int x = 0; x < nl.getLength(); x++) {
+ int length = nl.getLength();
+ List other = new ArrayList(length);
+ for (int x = 0; x < length; x++) {
Node n = nl.item(x);
if (n.getNodeType() == Node.ELEMENT_NODE) {
Element childElem = (Element) n;
+ String localName = childElem.getLocalName();
try {
- if (childElem.getLocalName().equals("PGPKeyID")) {
+ if (localName.equals("PGPKeyID")) {
keyId = Base64.decode(childElem);
- } else if (childElem.getLocalName().equals("PGPKeyPacket")){
+ } else if (localName.equals("PGPKeyPacket")){
keyPacket = Base64.decode(childElem);
} else {
other.add
@@ -203,10 +205,9 @@
}
// create and append any elements
- Iterator i = externalElements.iterator();
- while (i.hasNext()) {
- DOMUtils.appendChild(pdElem,
- ((javax.xml.crypto.dom.DOMStructure) i.next()).getNode());
+ for (int i = 0, size = externalElements.size(); i < size; i++) {
+ DOMUtils.appendChild(pdElem, ((javax.xml.crypto.dom.DOMStructure)
+ externalElements.get(i)).getNode());
}
parent.appendChild(pdElem);
Modified: xml/security/branches/jsr105_0_16/src/org/jcp/xml/dsig/internal/dom/DOMRSASignatureMethod.java
URL: http://svn.apache.org/viewcvs/xml/security/branches/jsr105_0_16/src/org/jcp/xml/dsig/internal/dom/DOMRSASignatureMethod.java?rev=368871&r1=368870&r2=368871&view=diff
==============================================================================
--- xml/security/branches/jsr105_0_16/src/org/jcp/xml/dsig/internal/dom/DOMRSASignatureMethod.java (original)
+++ xml/security/branches/jsr105_0_16/src/org/jcp/xml/dsig/internal/dom/DOMRSASignatureMethod.java Fri Jan 13 14:00:23 2006
@@ -26,6 +26,7 @@
import javax.xml.crypto.dsig.*;
import javax.xml.crypto.dsig.spec.SignatureMethodParameterSpec;
+import java.io.IOException;
import java.security.InvalidKeyException;
import java.security.Key;
import java.security.PrivateKey;
@@ -39,7 +40,7 @@
import java.util.logging.Logger;
import org.w3c.dom.Element;
-import org.apache.xml.security.utils.Base64;
+import org.jcp.xml.dsig.internal.SignerOutputStream;
/**
* DOM-based implementation of SignatureMethod for RSA algorithm.
@@ -49,7 +50,7 @@
*/
public final class DOMRSASignatureMethod extends DOMSignatureMethod {
- static Logger log = Logger.getLogger(DOMRSASignatureMethod.class.getName());
+ private static Logger log = Logger.getLogger("org.jcp.xml.dsig.internal.dom");
private Signature signature;
/**
@@ -100,10 +101,12 @@
return (getParameterSpec() == spec);
}
- public boolean verify(Key key, byte[] data, byte[] sig)
- throws InvalidKeyException, SignatureException {
- if (key == null || sig == null) {
- throw new NullPointerException("key or signature cannot be null");
+ public boolean verify(Key key, DOMSignedInfo si, byte[] sig,
+ XMLValidateContext context)
+ throws InvalidKeyException, SignatureException, XMLSignatureException {
+ if (key == null || si == null || sig == null) {
+ throw new NullPointerException
+ ("key, signed info or signature cannot be null");
}
if (!(key instanceof PublicKey)) {
@@ -118,22 +121,24 @@
}
}
signature.initVerify((PublicKey) key);
- signature.update(data);
- log.log(Level.FINE, "verifying data: " + Base64.encode(data));
- log.log(Level.FINE, "verifying with key: " + key);
- return signature.verify(sig );
+ if (log.isLoggable(Level.FINE)) {
+ log.log(Level.FINE, "Signature provider:"+ signature.getProvider());
+ log.log(Level.FINE, "verifying with key: " + key);
+ }
+ si.canonicalize(context, new SignerOutputStream(signature));
+
+ return signature.verify(sig);
}
- public byte[] sign(Key key, byte[] data) throws InvalidKeyException {
- if (key == null || data == null) {
+ public byte[] sign(Key key, DOMSignedInfo si, XMLSignContext context)
+ throws InvalidKeyException, XMLSignatureException {
+ if (key == null || si == null) {
throw new NullPointerException();
}
if (!(key instanceof PrivateKey)) {
throw new InvalidKeyException("key must be PrivateKey");
}
- log.log(Level.FINE, "Signing data: " + Base64.encode(data));
- log.log(Level.FINE, "Signing with key: " + key);
if (signature == null) {
try {
// FIXME: do other hashes besides sha-1
@@ -143,8 +148,14 @@
}
}
signature.initSign((PrivateKey) key);
+ if (log.isLoggable(Level.FINE)) {
+ log.log(Level.FINE, "Signature provider:" +signature.getProvider());
+ log.log(Level.FINE, "Signing with key: " + key);
+ }
+
+ si.canonicalize(context, new SignerOutputStream(signature));
+
try {
- signature.update(data);
return signature.sign();
} catch (SignatureException se) {
// should never occur!