You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@santuario.apache.org by ra...@apache.org on 2006/08/14 14:43:27 UTC

svn commit: r431331 - in /xml/security/trunk: CHANGELOG.txt src/org/apache/xml/security/keys/keyresolver/implementations/RetrievalMethodResolver.java src/org/apache/xml/security/keys/keyresolver/implementations/X509CertificateResolver.java

Author: raul
Date: Mon Aug 14 05:43:26 2006
New Revision: 431331

URL: http://svn.apache.org/viewvc?rev=431331&view=rev
Log:
Fixed bug no resolver for X509Data with just a X509Certificate.

Modified:
    xml/security/trunk/CHANGELOG.txt
    xml/security/trunk/src/org/apache/xml/security/keys/keyresolver/implementations/RetrievalMethodResolver.java
    xml/security/trunk/src/org/apache/xml/security/keys/keyresolver/implementations/X509CertificateResolver.java

Modified: xml/security/trunk/CHANGELOG.txt
URL: http://svn.apache.org/viewvc/xml/security/trunk/CHANGELOG.txt?rev=431331&r1=431330&r2=431331&view=diff
==============================================================================
--- xml/security/trunk/CHANGELOG.txt (original)
+++ xml/security/trunk/CHANGELOG.txt Mon Aug 14 05:43:26 2006
@@ -40,7 +40,7 @@
 	acastro.dit@aeat.es for fix.
 	Big optimizations in XPath2 transformation.
 	Fixed bug 40245 in XPATH2 transformation(only in development version)
-	    
+	Fixed bug no resolver for X509Data with just a X509Certificate.	    
 		
 New in v1.3
 	Init-Don't fail if a transformation don't have all of its dependecies.

Modified: xml/security/trunk/src/org/apache/xml/security/keys/keyresolver/implementations/RetrievalMethodResolver.java
URL: http://svn.apache.org/viewvc/xml/security/trunk/src/org/apache/xml/security/keys/keyresolver/implementations/RetrievalMethodResolver.java?rev=431331&r1=431330&r2=431331&view=diff
==============================================================================
--- xml/security/trunk/src/org/apache/xml/security/keys/keyresolver/implementations/RetrievalMethodResolver.java (original)
+++ xml/security/trunk/src/org/apache/xml/security/keys/keyresolver/implementations/RetrievalMethodResolver.java Mon Aug 14 05:43:26 2006
@@ -89,17 +89,17 @@
 		   //Create a retrieval method over the given element
 		   RetrievalMethod rm = new RetrievalMethod(element, BaseURI);
 	       String type = rm.getType();		   
-		   XMLSignatureInput resource=this.resolveInput(rm,BaseURI);			
+		   XMLSignatureInput resource=resolveInput(rm,BaseURI);			
            if (RetrievalMethod.TYPE_RAWX509.equals(type)) {
                 //a raw certificate, direct parsing is done!
-            	X509Certificate cert=this.getRawCertificate(resource);
+            	X509Certificate cert=getRawCertificate(resource);
 				if (cert != null) {
 			         return cert.getPublicKey();
 			    }
 				return null;
             };
-			Element e = obtainRefrenceElement(resource);
-			return this.resolveKey(e,BaseURI,storage);
+			Element e = obtainRefrenceElement(resource); 
+			return resolveKey(e,BaseURI,storage);
 	  } catch (XMLSecurityException ex) {
          log.debug("XMLSecurityException", ex);
       } catch (CertificateException ex) {
@@ -114,7 +114,7 @@
       return null;
    }
 
-   private Element obtainRefrenceElement(XMLSignatureInput resource) throws CanonicalizationException, ParserConfigurationException, IOException, SAXException, KeyResolverException {
+   static private Element obtainRefrenceElement(XMLSignatureInput resource) throws CanonicalizationException, ParserConfigurationException, IOException, SAXException, KeyResolverException {
 	   Element e;
 	   if (resource.isElement()){
 		   e=(Element) resource.getSubNode();
@@ -124,7 +124,7 @@
 	   } else {
 		   //Retrieved resource is an inputStream
 		   byte inputBytes[] = resource.getBytes();
-		   e = this.getDocFromBytes(inputBytes);						
+		   e = getDocFromBytes(inputBytes);						
 		   //otherwise, we parse the resource, create an Element and delegate
 		   if (log.isDebugEnabled()) 
 			   log.debug("we have to parse " + inputBytes.length + " bytes");
@@ -151,13 +151,13 @@
 	   try {
          RetrievalMethod rm = new RetrievalMethod(element, BaseURI);
 		 String type = rm.getType();		   
-		 XMLSignatureInput resource=this.resolveInput(rm,BaseURI);			         
+		 XMLSignatureInput resource=resolveInput(rm,BaseURI);			         
 		 if (RetrievalMethod.TYPE_RAWX509.equals(type)) {
-        	X509Certificate cert=this.getRawCertificate(resource);
+        	X509Certificate cert=getRawCertificate(resource);
             return cert;
 		 } 
 		 Element e = obtainRefrenceElement(resource);
-		 return this.resolveCertificate(e,BaseURI,storage);
+		 return resolveCertificate(e,BaseURI,storage);
       } catch (XMLSecurityException ex) {
          log.debug("XMLSecurityException", ex);
       } catch (CertificateException ex) {
@@ -180,7 +180,7 @@
     * @return
     * @throws KeyResolverException 
     */
-   private X509Certificate resolveCertificate(Element e,String BaseURI,StorageResolver storage) throws KeyResolverException{
+   static private X509Certificate resolveCertificate(Element e,String BaseURI,StorageResolver storage) throws KeyResolverException{
 		  if (log.isDebugEnabled()) 
 			  log.debug("Now we have a {" + e.getNamespaceURI() + "}"+ e.getLocalName() + " Element");
 		  //An element has been provided
@@ -198,7 +198,7 @@
     * @return
     * @throws KeyResolverException 
     */
-   private PublicKey resolveKey(Element e,String BaseURI,StorageResolver storage) throws KeyResolverException{
+   static private PublicKey resolveKey(Element e,String BaseURI,StorageResolver storage) throws KeyResolverException{
 		  if (log.isDebugEnabled()) 
 			  log.debug("Now we have a {" + e.getNamespaceURI() + "}"+ e.getLocalName() + " Element");
 		  //An element has been provided
@@ -208,7 +208,7 @@
 		  return null;
    }
 
-   private X509Certificate getRawCertificate(XMLSignatureInput resource) throws CanonicalizationException, IOException, CertificateException{
+   static private X509Certificate getRawCertificate(XMLSignatureInput resource) throws CanonicalizationException, IOException, CertificateException{
 	   byte inputBytes[] = resource.getBytes();	   
        // if the resource stores a raw certificate, we have to handle it
        CertificateFactory certFact =CertificateFactory.getInstance(XMLX509Certificate.JCA_CERT_ID);
@@ -220,7 +220,7 @@
     * @return
     * @throws XMLSecurityException 
     */
-   private XMLSignatureInput resolveInput(RetrievalMethod rm,String BaseURI) throws XMLSecurityException{
+   static private XMLSignatureInput resolveInput(RetrievalMethod rm,String BaseURI) throws XMLSecurityException{
        Attr uri = rm.getURIAttr();
 	   //Apply the trnasforms
        Transforms transforms = rm.getTransforms();
@@ -243,7 +243,7 @@
     * @return the Document Element after parsing bytes 
     * @throws KeyResolverException if something goes wrong
     */
-   Element getDocFromBytes(byte[] bytes) throws KeyResolverException {
+   static Element getDocFromBytes(byte[] bytes) throws KeyResolverException {
       try {
          javax.xml.parsers.DocumentBuilderFactory dbf =javax.xml.parsers.DocumentBuilderFactory.newInstance();
          dbf.setNamespaceAware(true);
@@ -288,24 +288,21 @@
 	   List parents=new ArrayList(10);
   		
   		//Obtain all the parents of the elemnt
-  		Element parent=e;
-  		while (parent!=null) {
-  			parents.add(parent);
-  			Node n=parent.getParentNode();
+  		do {
+  			parents.add(e);
+  			Node n=e.getParentNode();
   			if (!(n instanceof Element )) {
   				break;
   			}
-  			parent=(Element)n;
-  		}
+  			e=(Element)n;
+  		} while (e!=null);
   		//Visit them in reverse order.
-  		boolean firstFound=false;
-  		ListIterator it2=parents.listIterator(parents.size());
+  		ListIterator it2=parents.listIterator(parents.size()-1);
+  		Element ele=null;
   		while (it2.hasPrevious()) {
-  			Element ele=(Element)it2.previous();
+  			ele=(Element)it2.previous();
   			if (set.contains(ele)) {
-  				if (firstFound)
-  					return ele;
-  				firstFound=true;
+  				return ele;
   			}
      	}
 		return null;

Modified: xml/security/trunk/src/org/apache/xml/security/keys/keyresolver/implementations/X509CertificateResolver.java
URL: http://svn.apache.org/viewvc/xml/security/trunk/src/org/apache/xml/security/keys/keyresolver/implementations/X509CertificateResolver.java?rev=431331&r1=431330&r2=431331&view=diff
==============================================================================
--- xml/security/trunk/src/org/apache/xml/security/keys/keyresolver/implementations/X509CertificateResolver.java (original)
+++ xml/security/trunk/src/org/apache/xml/security/keys/keyresolver/implementations/X509CertificateResolver.java Mon Aug 14 05:43:26 2006
@@ -86,16 +86,22 @@
       try {
     	  Element[] els=XMLUtils.selectDsNodes(element.getFirstChild(),
                   Constants._TAG_X509CERTIFICATE);
-         if ((els == null) || (els.length == 0)) {           
-               return null;            
+         if ((els == null) || (els.length == 0)) {  
+        	 Element el=XMLUtils.selectDsNode(element.getFirstChild(),
+                     Constants._TAG_X509DATA,0);
+             if (el!=null) {
+            	 return engineResolveX509Certificate(el, BaseURI, storage);
+             }        	 
+        	 return null;            
          }
 
          // populate Object array
          for (int i = 0; i < els.length; i++) {
         	 XMLX509Certificate xmlCert=new XMLX509Certificate(els[i], BaseURI);
         	 X509Certificate cert = xmlCert.getX509Certificate();
-            if (cert!=null)
+            if (cert!=null) {
             	return cert;
+            }
          }
          return null;
       } catch (XMLSecurityException ex) {