]> source.dussan.org Git - poi.git/commitdiff
replace xmlbeans.factory.parse with selectPath calls
authorAndreas Beeker <kiwiwings@apache.org>
Fri, 15 Aug 2014 23:10:07 +0000 (23:10 +0000)
committerAndreas Beeker <kiwiwings@apache.org>
Fri, 15 Aug 2014 23:10:07 +0000 (23:10 +0000)
git-svn-id: https://svn.apache.org/repos/asf/poi/branches/xml_signature@1618292 13f79535-47bb-0310-9956-ffa450edef68

src/ooxml/java/org/apache/poi/poifs/crypt/dsig/facets/Office2010SignatureFacet.java
src/ooxml/java/org/apache/poi/poifs/crypt/dsig/facets/XAdESXLSignatureFacet.java
src/ooxml/java/org/apache/poi/poifs/crypt/dsig/services/RelationshipTransformService.java
src/ooxml/testcases/org/apache/poi/poifs/crypt/TestSignatureInfo.java

index ead9d2f2cedacc4f060b2e8ea05ecb9afdaea297..a5527eeb18f492d0ab3e14f74893d40cab53301c 100644 (file)
@@ -24,8 +24,6 @@
 \r
 package org.apache.poi.poifs.crypt.dsig.facets;\r
 \r
-import static org.apache.poi.poifs.crypt.dsig.facets.XAdESXLSignatureFacet.XADES_NAMESPACE;\r
-\r
 import java.security.InvalidAlgorithmParameterException;\r
 import java.security.NoSuchAlgorithmException;\r
 import java.security.cert.X509Certificate;\r
@@ -35,14 +33,11 @@ import java.util.Map;
 import javax.xml.crypto.dsig.Reference;\r
 import javax.xml.crypto.dsig.XMLObject;\r
 import javax.xml.crypto.dsig.XMLSignatureFactory;\r
-import javax.xml.namespace.QName;\r
 \r
-import org.apache.xmlbeans.XmlException;\r
 import org.apache.xmlbeans.XmlObject;\r
 import org.etsi.uri.x01903.v13.QualifyingPropertiesType;\r
 import org.etsi.uri.x01903.v13.UnsignedPropertiesType;\r
 import org.etsi.uri.x01903.v13.UnsignedSignaturePropertiesType;\r
-import org.w3.x2000.x09.xmldsig.ObjectType;\r
 import org.w3.x2000.x09.xmldsig.SignatureType;\r
 \r
 /**\r
@@ -67,18 +62,15 @@ public class Office2010SignatureFacet implements SignatureFacet {
     public void postSign(SignatureType signatureElement, List<X509Certificate> signingCertificateChain) {\r
         QualifyingPropertiesType qualProps = null;\r
         \r
-        try {\r
-            // check for XAdES-BES\r
-            for (ObjectType ot : signatureElement.getObjectList()) {\r
-                XmlObject xo[] = ot.selectChildren(new QName(XADES_NAMESPACE, "QualifyingProperties"));\r
-                if (xo != null && xo.length > 0) {\r
-                    qualProps = QualifyingPropertiesType.Factory.parse(xo[0].getDomNode());\r
-                    break;\r
-                }\r
-            }\r
-        } catch (XmlException e) {\r
-            throw new RuntimeException("signature decoding error", e);\r
-        }        \r
+        // check for XAdES-BES\r
+        String qualPropXQuery =\r
+                "declare namespace xades='http://uri.etsi.org/01903/v1.3.2#'; "\r
+              + "declare namespace ds='http://www.w3.org/2000/09/xmldsig#'; "\r
+              + "$this/ds:Object/xades:QualifyingProperties";\r
+        XmlObject xoList[] = signatureElement.selectPath(qualPropXQuery);\r
+        if (xoList.length == 1) {\r
+            qualProps = (QualifyingPropertiesType)xoList[0];\r
+        }\r
         \r
         if (qualProps == null) {\r
             throw new IllegalArgumentException("no XAdES-BES extension present");\r
index 2b590fdd23701293cb965287b5998d4fc4adfad9..44a0e24532b8285d70aeaf8db31dffc8386f3dd0 100644 (file)
@@ -46,7 +46,6 @@ import javax.xml.crypto.dsig.CanonicalizationMethod;
 import javax.xml.crypto.dsig.Reference;\r
 import javax.xml.crypto.dsig.XMLObject;\r
 import javax.xml.crypto.dsig.XMLSignatureFactory;\r
-import javax.xml.namespace.QName;\r
 \r
 import org.apache.poi.poifs.crypt.HashAlgorithm;\r
 import org.apache.poi.poifs.crypt.dsig.HorribleProxies.ASN1InputStreamIf;\r
@@ -67,7 +66,6 @@ import org.apache.poi.poifs.crypt.dsig.services.RevocationDataService;
 import org.apache.poi.poifs.crypt.dsig.services.TimeStampService;\r
 import org.apache.poi.util.POILogFactory;\r
 import org.apache.poi.util.POILogger;\r
-import org.apache.xmlbeans.XmlException;\r
 import org.apache.xmlbeans.XmlObject;\r
 import org.etsi.uri.x01903.v13.CRLIdentifierType;\r
 import org.etsi.uri.x01903.v13.CRLRefType;\r
@@ -92,7 +90,6 @@ import org.etsi.uri.x01903.v13.UnsignedSignaturePropertiesType;
 import org.etsi.uri.x01903.v13.XAdESTimeStampType;\r
 import org.etsi.uri.x01903.v14.ValidationDataType;\r
 import org.w3.x2000.x09.xmldsig.CanonicalizationMethodType;\r
-import org.w3.x2000.x09.xmldsig.ObjectType;\r
 import org.w3.x2000.x09.xmldsig.SignatureType;\r
 import org.w3.x2000.x09.xmldsig.SignatureValueType;\r
 import org.w3c.dom.Node;\r
@@ -189,18 +186,13 @@ public class XAdESXLSignatureFacet implements SignatureFacet {
         LOG.log(POILogger.DEBUG, "XAdES-X-L post sign phase");\r
 \r
         QualifyingPropertiesType qualProps = null;\r
-        \r
-        try {\r
-            // check for XAdES-BES\r
-            for (ObjectType ot : signatureElement.getObjectList()) {\r
-                XmlObject xo[] = ot.selectChildren(new QName(XADES_NAMESPACE, "QualifyingProperties"));\r
-                if (xo != null && xo.length > 0) {\r
-                    qualProps = QualifyingPropertiesType.Factory.parse(xo[0].getDomNode());\r
-                    break;\r
-                }\r
-            }\r
-        } catch (XmlException e) {\r
-            throw new RuntimeException("signature decoding error", e);\r
+        String qualPropXQuery =\r
+                "declare namespace xades='http://uri.etsi.org/01903/v1.3.2#'; "\r
+              + "declare namespace ds='http://www.w3.org/2000/09/xmldsig#'; "\r
+              + "$this/ds:Object/xades:QualifyingProperties";\r
+        XmlObject xoList[] = signatureElement.selectPath(qualPropXQuery);\r
+        if (xoList.length == 1) {\r
+            qualProps = (QualifyingPropertiesType)xoList[0];\r
         }\r
         \r
         if (qualProps == null) {\r
index 7769bb7910d81e202e9ed6e29bcf9ac26d861fe2..e67356224ea99611cc7d429f0166dbb12a56e89b 100644 (file)
@@ -55,6 +55,7 @@ import org.apache.xmlbeans.XmlCursor;
 import org.apache.xmlbeans.XmlException;\r
 import org.apache.xmlbeans.XmlObject;\r
 import org.apache.xmlbeans.XmlOptions;\r
+import org.openxmlformats.schemas.xpackage.x2006.digitalSignature.CTRelationshipReference;\r
 import org.openxmlformats.schemas.xpackage.x2006.digitalSignature.RelationshipReferenceDocument;\r
 import org.openxmlformats.schemas.xpackage.x2006.relationships.CTRelationship;\r
 import org.openxmlformats.schemas.xpackage.x2006.relationships.CTRelationships;\r
@@ -146,9 +147,7 @@ public class RelationshipTransformService extends TransformService {
                 LOG.log(POILogger.WARN, "no RelationshipReference/@SourceId parameters present");\r
             }\r
             for (XmlObject xo : xoList) {\r
-                RelationshipReferenceDocument refDoc =\r
-                    RelationshipReferenceDocument.Factory.parse(xo.getDomNode());\r
-                String sourceId = refDoc.getRelationshipReference().getSourceId();\r
+                String sourceId = ((CTRelationshipReference)xo).getSourceId();\r
                 LOG.log(POILogger.DEBUG, "sourceId: ", sourceId);\r
                 this.sourceIds.add(sourceId);\r
             }\r
index 73f6b2381996d644446b579ba90351f0fb9bea36..6ce0e4fae4794305174372b22b26951caa1f642b 100644 (file)
@@ -33,7 +33,6 @@ import static org.mockito.Mockito.times;
 import static org.mockito.Mockito.verify;\r
 import static org.mockito.Mockito.when;\r
 \r
-import java.io.ByteArrayOutputStream;\r
 import java.io.File;\r
 import java.io.FileInputStream;\r
 import java.io.FileOutputStream;\r
@@ -55,7 +54,6 @@ import java.util.Date;
 import java.util.List;\r
 import java.util.TimeZone;\r
 \r
-import javax.crypto.Cipher;\r
 import javax.xml.crypto.KeySelector;\r
 import javax.xml.crypto.dsig.XMLSignature;\r
 import javax.xml.crypto.dsig.XMLSignatureFactory;\r
@@ -300,6 +298,8 @@ public class TestSignatureInfo {
         QualifyingPropertiesType qualProp = (QualifyingPropertiesType)xoList[0];\r
         boolean qualPropXsdOk = qualProp.validate();\r
         assertTrue(qualPropXsdOk);\r
+        \r
+        pkg.close();\r
     }\r
     \r
     private OPCPackage sign(OPCPackage pkgCopy, String alias, String signerDn, int signerCount) throws Exception {\r
@@ -326,15 +326,8 @@ public class TestSignatureInfo {
         assertNotNull(digestInfo.digestValue);\r
 \r
         // setup: key material, signature value\r
-\r
-        Cipher cipher = Cipher.getInstance("RSA/ECB/PKCS1Padding");\r
-        cipher.init(Cipher.ENCRYPT_MODE, keyPair.getPrivate());\r
-        ByteArrayOutputStream digestInfoValueBuf = new ByteArrayOutputStream();\r
-        digestInfoValueBuf.write(SignatureInfo.SHA1_DIGEST_INFO_PREFIX);\r
-        digestInfoValueBuf.write(digestInfo.digestValue);\r
-        byte[] digestInfoValue = digestInfoValueBuf.toByteArray();\r
-        byte[] signatureValue = cipher.doFinal(digestInfoValue);\r
-\r
+        byte[] signatureValue = SignatureInfo.signDigest(keyPair.getPrivate(), HashAlgorithm.sha1, digestInfo.digestValue);\r
+        \r
         // operate: postSign\r
         signatureService.postSign(signatureValue, Collections.singletonList(x509));\r
 \r