You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@poi.apache.org by ki...@apache.org on 2017/06/24 09:03:00 UTC
svn commit: r1799740 - in /poi/trunk/src/ooxml:
java/org/apache/poi/openxml4j/opc/ java/org/apache/poi/poifs/crypt/dsig/
java/org/apache/poi/poifs/crypt/dsig/facets/
java/org/apache/poi/poifs/crypt/dsig/services/
java/org/apache/poi/xssf/usermodel/ tes...
Author: kiwiwings
Date: Sat Jun 24 09:03:00 2017
New Revision: 1799740
URL: http://svn.apache.org/viewvc?rev=1799740&view=rev
Log:
release prepare for 3.17-beta1 - pin documentation
Modified:
poi/trunk/src/ooxml/java/org/apache/poi/openxml4j/opc/PackageRelationshipCollection.java
poi/trunk/src/ooxml/java/org/apache/poi/poifs/crypt/dsig/SignatureInfo.java
poi/trunk/src/ooxml/java/org/apache/poi/poifs/crypt/dsig/SignatureMarshalListener.java
poi/trunk/src/ooxml/java/org/apache/poi/poifs/crypt/dsig/facets/OOXMLSignatureFacet.java
poi/trunk/src/ooxml/java/org/apache/poi/poifs/crypt/dsig/services/RelationshipTransformService.java
poi/trunk/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFDrawing.java
poi/trunk/src/ooxml/testcases/org/apache/poi/poifs/crypt/TestSignatureInfo.java
Modified: poi/trunk/src/ooxml/java/org/apache/poi/openxml4j/opc/PackageRelationshipCollection.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/ooxml/java/org/apache/poi/openxml4j/opc/PackageRelationshipCollection.java?rev=1799740&r1=1799739&r2=1799740&view=diff
==============================================================================
--- poi/trunk/src/ooxml/java/org/apache/poi/openxml4j/opc/PackageRelationshipCollection.java (original)
+++ poi/trunk/src/ooxml/java/org/apache/poi/openxml4j/opc/PackageRelationshipCollection.java Sat Jun 24 09:03:00 2017
@@ -18,7 +18,13 @@ package org.apache.poi.openxml4j.opc;
import java.net.URI;
import java.net.URISyntaxException;
-import java.util.*;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.LinkedHashMap;
+import java.util.Locale;
+import java.util.Map;
+import java.util.TreeMap;
import org.apache.poi.openxml4j.exceptions.InvalidFormatException;
import org.apache.poi.openxml4j.exceptions.InvalidOperationException;
@@ -43,14 +49,14 @@ public final class PackageRelationshipCo
private final static POILogger logger = POILogFactory.getLogger(PackageRelationshipCollection.class);
/**
- * Package relationships ordered by ID.
+ * Package relationships by ID.
*/
- private TreeMap<String, PackageRelationship> relationshipsByID;
+ private final Map<String, PackageRelationship> relationshipsByID = new LinkedHashMap<String, PackageRelationship>();
/**
- * Package relationships ordered by type.
+ * Package relationships by type.
*/
- private TreeMap<String, PackageRelationship> relationshipsByType;
+ private final Map<String, PackageRelationship> relationshipsByType = new LinkedHashMap<String, PackageRelationship>();
/**
* A lookup of internal relationships to avoid
@@ -88,8 +94,6 @@ public final class PackageRelationshipCo
* Constructor.
*/
PackageRelationshipCollection() {
- relationshipsByID = new TreeMap<String, PackageRelationship>();
- relationshipsByType = new TreeMap<String, PackageRelationship>();
}
/**
@@ -104,20 +108,18 @@ public final class PackageRelationshipCo
* @param filter
* Relationship type filter.
*/
- public PackageRelationshipCollection(PackageRelationshipCollection coll,
- String filter) {
- this();
+ public PackageRelationshipCollection(PackageRelationshipCollection coll, String filter) {
for (PackageRelationship rel : coll.relationshipsByID.values()) {
- if (filter == null || rel.getRelationshipType().equals(filter))
+ if (filter == null || rel.getRelationshipType().equals(filter)) {
addRelationship(rel);
+ }
}
}
/**
* Constructor.
*/
- public PackageRelationshipCollection(OPCPackage container)
- throws InvalidFormatException {
+ public PackageRelationshipCollection(OPCPackage container) throws InvalidFormatException {
this(container, null);
}
@@ -130,8 +132,7 @@ public final class PackageRelationshipCo
* @throws InvalidOperationException
* Throws if the specified part is a relationship part.
*/
- public PackageRelationshipCollection(PackagePart part)
- throws InvalidFormatException {
+ public PackageRelationshipCollection(PackagePart part) throws InvalidFormatException {
this(part._container, part);
}
@@ -147,16 +148,15 @@ public final class PackageRelationshipCo
* If an error occurs during the parsing of the relatinships
* part fo the specified part.
*/
- public PackageRelationshipCollection(OPCPackage container, PackagePart part)
- throws InvalidFormatException {
- this();
-
- if (container == null)
+ public PackageRelationshipCollection(OPCPackage container, PackagePart part) throws InvalidFormatException {
+ if (container == null) {
throw new IllegalArgumentException("container needs to be specified");
+ }
// Check if the specified part is not a relationship part
- if (part != null && part.isRelationshipPart())
+ if (part != null && part.isRelationshipPart()) {
throw new IllegalArgumentException("part");
+ }
this.container = container;
this.sourcePart = part;
@@ -179,8 +179,7 @@ public final class PackageRelationshipCo
* @throws InvalidOperationException
* Throws if the specified part is a relationship part.
*/
- private static PackagePartName getRelationshipPartName(PackagePart part)
- throws InvalidOperationException {
+ private static PackagePartName getRelationshipPartName(PackagePart part) throws InvalidOperationException {
PackagePartName partName;
if (part == null) {
partName = PackagingURIHelper.PACKAGE_ROOT_PART_NAME;
@@ -263,13 +262,15 @@ public final class PackageRelationshipCo
* Must be a value between [0-relationships_count-1]
*/
public PackageRelationship getRelationship(int index) {
- if (index < 0 || index > relationshipsByID.values().size())
+ if (index < 0 || index > relationshipsByID.values().size()) {
throw new IllegalArgumentException("index");
+ }
int i = 0;
for (PackageRelationship rel : relationshipsByID.values()) {
- if (index == i++)
+ if (index == i++) {
return rel;
+ }
}
return null;
@@ -287,10 +288,10 @@ public final class PackageRelationshipCo
}
/**
- * Get the numbe rof relationships in the collection.
+ * Get the number of relationships in the collection.
*/
public int size() {
- return relationshipsByID.values().size();
+ return relationshipsByID.size();
}
/**
@@ -324,12 +325,14 @@ public final class PackageRelationshipCo
/* Check OPC Compliance */
// Check Rule M4.1
- if (type.equals(PackageRelationshipTypes.CORE_PROPERTIES))
- if (!fCorePropertiesRelationship)
+ if (type.equals(PackageRelationshipTypes.CORE_PROPERTIES)) {
+ if (!fCorePropertiesRelationship) {
fCorePropertiesRelationship = true;
- else
+ } else {
throw new InvalidFormatException(
"OPC Compliance error [M4.1]: there is more than one core properties relationship in the package !");
+ }
+ }
/* End OPC Compliance */
@@ -378,6 +381,7 @@ public final class PackageRelationshipCo
/**
* Get this collection's iterator.
*/
+ @Override
public Iterator<PackageRelationship> iterator() {
return relationshipsByID.values().iterator();
}
@@ -394,8 +398,9 @@ public final class PackageRelationshipCo
public Iterator<PackageRelationship> iterator(String typeFilter) {
ArrayList<PackageRelationship> retArr = new ArrayList<PackageRelationship>();
for (PackageRelationship rel : relationshipsByID.values()) {
- if (rel.getRelationshipType().equals(typeFilter))
+ if (rel.getRelationshipType().equals(typeFilter)) {
retArr.add(rel);
+ }
}
return retArr.iterator();
}
Modified: poi/trunk/src/ooxml/java/org/apache/poi/poifs/crypt/dsig/SignatureInfo.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/ooxml/java/org/apache/poi/poifs/crypt/dsig/SignatureInfo.java?rev=1799740&r1=1799739&r2=1799740&view=diff
==============================================================================
--- poi/trunk/src/ooxml/java/org/apache/poi/poifs/crypt/dsig/SignatureInfo.java (original)
+++ poi/trunk/src/ooxml/java/org/apache/poi/poifs/crypt/dsig/SignatureInfo.java Sat Jun 24 09:03:00 2017
@@ -511,7 +511,7 @@ public class SignatureInfo implements Si
/*
* JSR105 ds:Signature creation
*/
- String signatureValueId = signatureConfig.getPackageSignatureId() + "-signature-value";
+ String signatureValueId = null; // signatureConfig.getPackageSignatureId() + "-signature-value";
javax.xml.crypto.dsig.XMLSignature xmlSignature = signatureFactory
.newXMLSignature(signedInfo, null, objects, signatureConfig.getPackageSignatureId(),
signatureValueId);
Modified: poi/trunk/src/ooxml/java/org/apache/poi/poifs/crypt/dsig/SignatureMarshalListener.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/ooxml/java/org/apache/poi/poifs/crypt/dsig/SignatureMarshalListener.java?rev=1799740&r1=1799739&r2=1799740&view=diff
==============================================================================
--- poi/trunk/src/ooxml/java/org/apache/poi/poifs/crypt/dsig/SignatureMarshalListener.java (original)
+++ poi/trunk/src/ooxml/java/org/apache/poi/poifs/crypt/dsig/SignatureMarshalListener.java Sat Jun 24 09:03:00 2017
@@ -40,27 +40,46 @@ public class SignatureMarshalListener im
this.target.set(target);
}
+ @Override
public void handleEvent(Event e) {
- if (!(e instanceof MutationEvent)) return;
+ if (!(e instanceof MutationEvent)) {
+ return;
+ }
MutationEvent mutEvt = (MutationEvent)e;
EventTarget et = mutEvt.getTarget();
- if (!(et instanceof Element)) return;
+ if (!(et instanceof Element)) {
+ return;
+ }
handleElement((Element)et);
}
public void handleElement(Element el) {
EventTarget target = this.target.get();
String packageId = signatureConfig.getPackageSignatureId();
- if (el.hasAttribute("Id")) {
- el.setIdAttribute("Id", true);
- }
setListener(target, this, false);
- if (packageId.equals(el.getAttribute("Id"))) {
- el.setAttributeNS(XML_NS, "xmlns:mdssi", OO_DIGSIG_NS);
+// if (packageId.equals(el.getAttribute("Id"))) {
+// el.setAttributeNS(XML_NS, "xmlns:mdssi", OO_DIGSIG_NS);
+// }
+ if (OO_DIGSIG_NS.equals(el.getNamespaceURI()) && !OO_DIGSIG_NS.equals(el.getParentNode().getNamespaceURI())) {
+ if (!el.hasAttributeNS(XML_NS, "mdssi")) {
+ el.setAttributeNS(XML_NS, "xmlns:mdssi", OO_DIGSIG_NS);
+ }
}
setPrefix(el);
+ if ("X509Certificate".equals(el.getLocalName())) {
+ String x509 = el.getTextContent();
+ x509 = x509.replaceAll("\\s", "");
+ el.setTextContent(x509);
+ }
+// if ("SignatureValue".equals(el.getLocalName())) {
+// el.removeAttribute("Id");
+// }
setListener(target, this, true);
+
+ if (el.hasAttribute("Id")) {
+ el.setIdAttribute("Id", true);
+ }
}
// helper method to keep it in one place
@@ -86,6 +105,7 @@ public class SignatureMarshalListener im
}
}
+ @Override
public void setSignatureConfig(SignatureConfig signatureConfig) {
this.signatureConfig = signatureConfig;
}
Modified: poi/trunk/src/ooxml/java/org/apache/poi/poifs/crypt/dsig/facets/OOXMLSignatureFacet.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/ooxml/java/org/apache/poi/poifs/crypt/dsig/facets/OOXMLSignatureFacet.java?rev=1799740&r1=1799739&r2=1799740&view=diff
==============================================================================
--- poi/trunk/src/ooxml/java/org/apache/poi/poifs/crypt/dsig/facets/OOXMLSignatureFacet.java (original)
+++ poi/trunk/src/ooxml/java/org/apache/poi/poifs/crypt/dsig/facets/OOXMLSignatureFacet.java Sat Jun 24 09:03:00 2017
@@ -18,9 +18,9 @@
/* ====================================================================
This product contains an ASLv2 licensed version of the OOXML signer
package from the eID Applet project
- http://code.google.com/p/eid-applet/source/browse/trunk/README.txt
+ http://code.google.com/p/eid-applet/source/browse/trunk/README.txt
Copyright (C) 2008-2014 FedICT.
- ================================================================= */
+ ================================================================= */
package org.apache.poi.poifs.crypt.dsig.facets;
@@ -29,6 +29,9 @@ import java.net.URISyntaxException;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.Comparator;
import java.util.HashSet;
import java.util.List;
import java.util.Locale;
@@ -46,6 +49,7 @@ import javax.xml.crypto.dsig.Transform;
import javax.xml.crypto.dsig.XMLObject;
import javax.xml.crypto.dsig.XMLSignatureException;
+import org.apache.poi.hpsf.ClassID;
import org.apache.poi.openxml4j.exceptions.InvalidFormatException;
import org.apache.poi.openxml4j.opc.ContentTypes;
import org.apache.poi.openxml4j.opc.OPCPackage;
@@ -60,6 +64,7 @@ import org.apache.poi.poifs.crypt.dsig.s
import org.apache.poi.util.LocaleUtil;
import org.apache.poi.util.POILogFactory;
import org.apache.poi.util.POILogger;
+import org.apache.xmlbeans.XmlCursor;
import org.openxmlformats.schemas.xpackage.x2006.digitalSignature.CTSignatureTime;
import org.openxmlformats.schemas.xpackage.x2006.digitalSignature.SignatureTimeDocument;
import org.w3c.dom.Document;
@@ -70,13 +75,13 @@ import com.microsoft.schemas.office.x200
/**
* Office OpenXML Signature Facet implementation.
- *
- * @author fcorneli
+ *
* @see <a href="http://msdn.microsoft.com/en-us/library/cc313071.aspx">[MS-OFFCRYPTO]: Office Document Cryptography Structure</a>
*/
public class OOXMLSignatureFacet extends SignatureFacet {
private static final POILogger LOG = POILogFactory.getLogger(OOXMLSignatureFacet.class);
+ private static final String ID_PACKAGE_OBJECT = "idPackageObject";
@Override
public void preSign(
@@ -98,17 +103,16 @@ public class OOXMLSignatureFacet extends
List<Reference> manifestReferences = new ArrayList<Reference>();
addManifestReferences(manifestReferences);
Manifest manifest = getSignatureFactory().newManifest(manifestReferences);
-
- String objectId = "idPackageObject"; // really has to be this value.
+
List<XMLStructure> objectContent = new ArrayList<XMLStructure>();
objectContent.add(manifest);
addSignatureTime(document, objectContent);
- XMLObject xo = getSignatureFactory().newXMLObject(objectContent, objectId, null, null);
+ XMLObject xo = getSignatureFactory().newXMLObject(objectContent, ID_PACKAGE_OBJECT, null, null);
objects.add(xo);
- Reference reference = newReference("#" + objectId, null, XML_DIGSIG_NS+"Object", null, null);
+ Reference reference = newReference("#"+ID_PACKAGE_OBJECT, null, XML_DIGSIG_NS+"Object", null, null);
references.add(reference);
}
@@ -121,7 +125,7 @@ public class OOXMLSignatureFacet extends
Set<String> digestedPartNames = new HashSet<String>();
for (PackagePart pp : relsEntryNames) {
- String baseUri = pp.getPartName().getName().replaceFirst("(.*)/_rels/.*", "$1");
+ final String baseUri = pp.getPartName().getName().replaceFirst("(.*)/_rels/.*", "$1");
PackageRelationshipCollection prc;
try {
@@ -130,11 +134,11 @@ public class OOXMLSignatureFacet extends
} catch (InvalidFormatException e) {
throw new XMLSignatureException("Invalid relationship descriptor: "+pp.getPartName().getName(), e);
}
-
+
RelationshipTransformParameterSpec parameterSpec = new RelationshipTransformParameterSpec();
for (PackageRelationship relationship : prc) {
String relationshipType = relationship.getRelationshipType();
-
+
/*
* ECMA-376 Part 2 - 3rd edition
* 13.2.4.16 Manifest Element
@@ -144,22 +148,20 @@ public class OOXMLSignatureFacet extends
continue;
}
- if (!isSignedRelationship(relationshipType)) continue;
+ if (!isSignedRelationship(relationshipType)) {
+ continue;
+ }
parameterSpec.addRelationshipReference(relationship.getId());
- // TODO: find a better way ...
- String partName = relationship.getTargetURI().toString();
- if (!partName.startsWith(baseUri)) {
- partName = baseUri + partName;
- }
- try {
- partName = new URI(partName).normalize().getPath().replace('\\', '/');
- LOG.log(POILogger.DEBUG, "part name: " + partName);
- } catch (URISyntaxException e) {
- throw new XMLSignatureException(e);
+ String partName = normalizePartName(relationship.getTargetURI(), baseUri);
+
+ // We only digest a part once.
+ if (digestedPartNames.contains(partName)) {
+ continue;
}
-
+ digestedPartNames.add(partName);
+
String contentType;
try {
PackagePartName relName = PackagingURIHelper.createPartName(partName);
@@ -168,32 +170,52 @@ public class OOXMLSignatureFacet extends
} catch (InvalidFormatException e) {
throw new XMLSignatureException(e);
}
-
+
if (relationshipType.endsWith("customXml")
&& !(contentType.equals("inkml+xml") || contentType.equals("text/xml"))) {
LOG.log(POILogger.DEBUG, "skipping customXml with content type: " + contentType);
continue;
}
-
- if (!digestedPartNames.contains(partName)) {
- // We only digest a part once.
- String uri = partName + "?ContentType=" + contentType;
- Reference reference = newReference(uri, null, null, null, null);
- manifestReferences.add(reference);
- digestedPartNames.add(partName);
- }
+
+ String uri = partName + "?ContentType=" + contentType;
+ Reference reference = newReference(uri, null, null, null, null);
+ manifestReferences.add(reference);
}
-
+
if (parameterSpec.hasSourceIds()) {
List<Transform> transforms = new ArrayList<Transform>();
transforms.add(newTransform(RelationshipTransformService.TRANSFORM_URI, parameterSpec));
transforms.add(newTransform(CanonicalizationMethod.INCLUSIVE));
- String uri = pp.getPartName().getName()
+ String uri = normalizePartName(pp.getPartName().getURI(), baseUri)
+ "?ContentType=application/vnd.openxmlformats-package.relationships+xml";
Reference reference = newReference(uri, transforms, null, null, null);
manifestReferences.add(reference);
}
}
+
+ Collections.sort(manifestReferences, new Comparator<Reference>() {
+ public int compare(Reference o1, Reference o2) {
+ return o1.getURI().compareTo(o2.getURI());
+ }
+ });
+ }
+
+ /**
+ * Normalize a URI/part name
+ * TODO: find a better way ...
+ */
+ private static String normalizePartName(URI partName, String baseUri) throws XMLSignatureException {
+ String pn = partName.toASCIIString();
+ if (!pn.startsWith(baseUri)) {
+ pn = baseUri + pn;
+ }
+ try {
+ pn = new URI(pn).normalize().getPath().replace('\\', '/');
+ LOG.log(POILogger.DEBUG, "part name: " + pn);
+ } catch (URISyntaxException e) {
+ throw new XMLSignatureException(e);
+ }
+ return pn;
}
@@ -220,8 +242,8 @@ public class OOXMLSignatureFacet extends
List<SignatureProperty> signaturePropertyContent = new ArrayList<SignatureProperty>();
signaturePropertyContent.add(signatureTimeSignatureProperty);
SignatureProperties signatureProperties = getSignatureFactory()
- .newSignatureProperties(signaturePropertyContent,
- "id-signature-time-" + signatureConfig.getExecutionTime());
+ .newSignatureProperties(signaturePropertyContent, null);
+// "id-signature-time-" + signatureConfig.getExecutionTime());
objectContent.add(signatureProperties);
}
@@ -233,10 +255,28 @@ public class OOXMLSignatureFacet extends
SignatureInfoV1Document sigV1 = SignatureInfoV1Document.Factory.newInstance();
CTSignatureInfoV1 ctSigV1 = sigV1.addNewSignatureInfoV1();
- ctSigV1.setManifestHashAlgorithm(signatureConfig.getDigestMethodUri());
+// ctSigV1.setManifestHashAlgorithm(signatureConfig.getDigestMethodUri());
+ XmlCursor cur = ctSigV1.newCursor();
+ cur.toEndToken(); cur.beginElement("SetupID", MS_DIGSIG_NS);
+ cur.toNextToken(); cur.beginElement("SignatureText", MS_DIGSIG_NS);
+ cur.toNextToken(); cur.beginElement("SignatureImage", MS_DIGSIG_NS);
+ cur.toNextToken(); cur.beginElement("SignatureProviderUrl", MS_DIGSIG_NS);
+ cur.dispose();
+ ctSigV1.setSignatureComments("Test");
+ ctSigV1.setWindowsVersion("6.1");
+ ctSigV1.setOfficeVersion("16.0");
+ ctSigV1.setApplicationVersion("16.0");
+ ctSigV1.setMonitors(1);
+ ctSigV1.setHorizontalResolution(3840);
+ ctSigV1.setVerticalResolution(2160);
+ ctSigV1.setColorDepth(32);
+ ctSigV1.setSignatureProviderId(new ClassID().toString());
+ ctSigV1.setSignatureProviderDetails(9);
+ ctSigV1.setSignatureType(1);
+
Element n = (Element)document.importNode(ctSigV1.getDomNode(), true);
n.setAttributeNS(XML_NS, XMLConstants.XMLNS_ATTRIBUTE, MS_DIGSIG_NS);
-
+
List<XMLStructure> signatureInfoContent = new ArrayList<XMLStructure>();
signatureInfoContent.add(new DOMStructure(n));
SignatureProperty signatureInfoSignatureProperty = getSignatureFactory()
@@ -268,208 +308,33 @@ public class OOXMLSignatureFacet extends
protected static boolean isSignedRelationship(String relationshipType) {
LOG.log(POILogger.DEBUG, "relationship type: " + relationshipType);
- for (String signedTypeExtension : signed) {
- if (relationshipType.endsWith(signedTypeExtension)) {
- return true;
- }
- }
- if (relationshipType.endsWith("customXml")) {
- LOG.log(POILogger.DEBUG, "customXml relationship type");
- return true;
- }
- return false;
+ String rt = relationshipType.replaceFirst(".*/relationships/", "");
+ return (signed.contains(rt) || rt.endsWith("customXml"));
}
-
- public static final String[] contentTypes = {
- /*
- * Word
- */
- "application/vnd.openxmlformats-officedocument.wordprocessingml.document.main+xml",
- "application/vnd.openxmlformats-officedocument.wordprocessingml.fontTable+xml",
- "application/vnd.openxmlformats-officedocument.wordprocessingml.settings+xml",
- "application/vnd.openxmlformats-officedocument.wordprocessingml.styles+xml",
- "application/vnd.openxmlformats-officedocument.theme+xml",
- "application/vnd.openxmlformats-officedocument.wordprocessingml.webSettings+xml",
- "application/vnd.openxmlformats-officedocument.wordprocessingml.numbering+xml",
-
- /*
- * Word 2010
- */
- "application/vnd.ms-word.stylesWithEffects+xml",
-
- /*
- * Excel
- */
- "application/vnd.openxmlformats-officedocument.spreadsheetml.sharedStrings+xml",
- "application/vnd.openxmlformats-officedocument.spreadsheetml.worksheet+xml",
- "application/vnd.openxmlformats-officedocument.spreadsheetml.styles+xml",
- "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet.main+xml",
-
- /*
- * Powerpoint
- */
- "application/vnd.openxmlformats-officedocument.presentationml.presentation.main+xml",
- "application/vnd.openxmlformats-officedocument.presentationml.slideLayout+xml",
- "application/vnd.openxmlformats-officedocument.presentationml.slideMaster+xml",
- "application/vnd.openxmlformats-officedocument.presentationml.slide+xml",
- "application/vnd.openxmlformats-officedocument.presentationml.tableStyles+xml",
-
- /*
- * Powerpoint 2010
- */
- "application/vnd.openxmlformats-officedocument.presentationml.viewProps+xml",
- "application/vnd.openxmlformats-officedocument.presentationml.presProps+xml"
- };
/**
* Office 2010 list of signed types (extensions).
*/
- public static final String[] signed = {
- "powerPivotData", //
- "activeXControlBinary", //
- "attachedToolbars", //
- "connectorXml", //
- "downRev", //
- "functionPrototypes", //
- "graphicFrameDoc", //
- "groupShapeXml", //
- "ink", //
- "keyMapCustomizations", //
- "legacyDiagramText", //
- "legacyDocTextInfo", //
- "officeDocument", //
- "pictureXml", //
- "shapeXml", //
- "smartTags", //
- "ui/altText", //
- "ui/buttonSize", //
- "ui/controlID", //
- "ui/description", //
- "ui/enabled", //
- "ui/extensibility", //
- "ui/helperText", //
- "ui/imageID", //
- "ui/imageMso", //
- "ui/keyTip", //
- "ui/label", //
- "ui/lcid", //
- "ui/loud", //
- "ui/pressed", //
- "ui/progID", //
- "ui/ribbonID", //
- "ui/showImage", //
- "ui/showLabel", //
- "ui/supertip", //
- "ui/target", //
- "ui/text", //
- "ui/title", //
- "ui/tooltip", //
- "ui/userCustomization", //
- "ui/visible", //
- "userXmlData", //
- "vbaProject", //
- "wordVbaData", //
- "wsSortMap", //
- "xlBinaryIndex", //
- "xlExternalLinkPath/xlAlternateStartup", //
- "xlExternalLinkPath/xlLibrary", //
- "xlExternalLinkPath/xlPathMissing", //
- "xlExternalLinkPath/xlStartup", //
- "xlIntlMacrosheet", //
- "xlMacrosheet", //
- "customData", //
- "diagramDrawing", //
- "hdphoto", //
- "inkXml", //
- "media", //
- "slicer", //
- "slicerCache", //
- "stylesWithEffects", //
- "ui/extensibility", //
- "chartColorStyle", //
- "chartLayout", //
- "chartStyle", //
- "dictionary", //
- "timeline", //
- "timelineCache", //
- "aFChunk", //
- "attachedTemplate", //
- "audio", //
- "calcChain", //
- "chart", //
- "chartsheet", //
- "chartUserShapes", //
- "commentAuthors", //
- "comments", //
- "connections", //
- "control", //
- "customProperty", //
- "customXml", //
- "diagramColors", //
- "diagramData", //
- "diagramLayout", //
- "diagramQuickStyle", //
- "dialogsheet", //
- "drawing", //
- "endnotes", //
- "externalLink", //
- "externalLinkPath", //
- "font", //
- "fontTable", //
- "footer", //
- "footnotes", //
- "glossaryDocument", //
- "handoutMaster", //
- "header", //
- "hyperlink", //
- "image", //
- "mailMergeHeaderSource", //
- "mailMergeRecipientData", //
- "mailMergeSource", //
- "notesMaster", //
- "notesSlide", //
- "numbering", //
- "officeDocument", //
- "oleObject", //
- "package", //
- "pivotCacheDefinition", //
- "pivotCacheRecords", //
- "pivotTable", //
- "presProps", //
- "printerSettings", //
- "queryTable", //
- "recipientData", //
- "settings", //
- "sharedStrings", //
- "sheetMetadata", //
- "slide", //
- "slideLayout", //
- "slideMaster", //
- "slideUpdateInfo", //
- "slideUpdateUrl", //
- "styles", //
- "table", //
- "tableSingleCells", //
- "tableStyles", //
- "tags", //
- "theme", //
- "themeOverride", //
- "transform", //
- "video", //
- "viewProps", //
- "volatileDependencies", //
- "webSettings", //
- "worksheet", //
- "xmlMaps", //
- "ctrlProp", //
- "customData", //
- "diagram", //
- "diagramColorsHeader", //
- "diagramLayoutHeader", //
- "diagramQuickStyleHeader", //
- "documentParts", //
- "slicer", //
- "slicerCache", //
- "vmlDrawing" //
- };
+ private static final Set<String> signed = Collections.unmodifiableSet(new HashSet<String>(Arrays.asList(
+ "activeXControlBinary","aFChunk","attachedTemplate","attachedToolbars","audio","calcChain","chart","chartColorStyle",
+ "chartLayout","chartsheet","chartStyle","chartUserShapes","commentAuthors","comments","connections","connectorXml",
+ "control","ctrlProp","customData","customData","customProperty","customXml","diagram","diagramColors",
+ "diagramColorsHeader","diagramData","diagramDrawing","diagramLayout","diagramLayoutHeader","diagramQuickStyle",
+ "diagramQuickStyleHeader","dialogsheet","dictionary","documentParts","downRev","drawing","endnotes","externalLink",
+ "externalLinkPath","font","fontTable","footer","footnotes","functionPrototypes","glossaryDocument","graphicFrameDoc",
+ "groupShapeXml","handoutMaster","hdphoto","header","hyperlink","image","ink","inkXml","keyMapCustomizations",
+ "legacyDiagramText","legacyDocTextInfo","mailMergeHeaderSource","mailMergeRecipientData","mailMergeSource","media",
+ "notesMaster","notesSlide","numbering","officeDocument","officeDocument","oleObject","package","pictureXml",
+ "pivotCacheDefinition","pivotCacheRecords","pivotTable","powerPivotData","presProps","printerSettings","queryTable",
+ "recipientData","settings","shapeXml","sharedStrings","sheetMetadata","slicer","slicer","slicerCache","slicerCache",
+ "slide","slideLayout","slideMaster","slideUpdateInfo","slideUpdateUrl","smartTags","styles","stylesWithEffects",
+ "table","tableSingleCells","tableStyles","tags","theme","themeOverride","timeline","timelineCache","transform",
+ "ui/altText","ui/buttonSize","ui/controlID","ui/description","ui/enabled","ui/extensibility","ui/extensibility",
+ "ui/helperText","ui/imageID","ui/imageMso","ui/keyTip","ui/label","ui/lcid","ui/loud","ui/pressed","ui/progID",
+ "ui/ribbonID","ui/showImage","ui/showLabel","ui/supertip","ui/target","ui/text","ui/title","ui/tooltip",
+ "ui/userCustomization","ui/visible","userXmlData","vbaProject","video","viewProps","vmlDrawing",
+ "volatileDependencies","webSettings","wordVbaData","worksheet","wsSortMap","xlBinaryIndex",
+ "xlExternalLinkPath/xlAlternateStartup","xlExternalLinkPath/xlLibrary","xlExternalLinkPath/xlPathMissing",
+ "xlExternalLinkPath/xlStartup","xlIntlMacrosheet","xlMacrosheet","xmlMaps"
+ )));
}
\ No newline at end of file
Modified: poi/trunk/src/ooxml/java/org/apache/poi/poifs/crypt/dsig/services/RelationshipTransformService.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/ooxml/java/org/apache/poi/poifs/crypt/dsig/services/RelationshipTransformService.java?rev=1799740&r1=1799739&r2=1799740&view=diff
==============================================================================
--- poi/trunk/src/ooxml/java/org/apache/poi/poifs/crypt/dsig/services/RelationshipTransformService.java (original)
+++ poi/trunk/src/ooxml/java/org/apache/poi/poifs/crypt/dsig/services/RelationshipTransformService.java Sat Jun 24 09:03:00 2017
@@ -25,6 +25,8 @@
package org.apache.poi.poifs.crypt.dsig.services;
import static org.apache.poi.POIXMLTypeLoader.DEFAULT_XML_OPTIONS;
+import static org.apache.poi.poifs.crypt.dsig.facets.SignatureFacet.OO_DIGSIG_NS;
+import static org.apache.poi.poifs.crypt.dsig.facets.SignatureFacet.XML_NS;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
@@ -89,7 +91,16 @@ public class RelationshipTransformServic
public static class RelationshipTransformParameterSpec implements TransformParameterSpec {
List<String> sourceIds = new ArrayList<String>();
public void addRelationshipReference(String relationshipId) {
- sourceIds.add(relationshipId);
+ /*********************************
+ * TEST CODE - REMOVE ME !!!!!!!!!!!!!!
+ */
+ if ("rId2".equals(relationshipId)) {
+ sourceIds.add(0, relationshipId);
+ } else if ("rId4".equals(relationshipId)) {
+ sourceIds.add(2, relationshipId);
+ } else {
+ sourceIds.add(relationshipId);
+ }
}
public boolean hasSourceIds() {
return !sourceIds.isEmpty();
@@ -163,15 +174,13 @@ public class RelationshipTransformServic
LOG.log(POILogger.DEBUG, "marshallParams(parent,context)");
DOMStructure domParent = (DOMStructure) parent;
Element parentNode = (Element)domParent.getNode();
- // parentNode.setAttributeNS(XML_NS, "xmlns:mdssi", XML_DIGSIG_NS);
Document doc = parentNode.getOwnerDocument();
for (String sourceId : this.sourceIds) {
- RelationshipReferenceDocument relRef = RelationshipReferenceDocument.Factory.newInstance();
- relRef.addNewRelationshipReference().setSourceId(sourceId);
- Node n = relRef.getRelationshipReference().getDomNode();
- n = doc.importNode(n, true);
- parentNode.appendChild(n);
+ Element el = doc.createElementNS(OO_DIGSIG_NS, "mdssi:RelationshipReference");
+ el.setAttributeNS(XML_NS, "xmlns:mdssi", OO_DIGSIG_NS);
+ el.setAttribute("SourceId", sourceId);
+ parentNode.appendChild(el);
}
}
Modified: poi/trunk/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFDrawing.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFDrawing.java?rev=1799740&r1=1799739&r2=1799740&view=diff
==============================================================================
--- poi/trunk/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFDrawing.java (original)
+++ poi/trunk/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFDrawing.java Sat Jun 24 09:03:00 2017
@@ -72,6 +72,7 @@ import org.openxmlformats.schemas.drawin
import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTOleObject;
import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTOleObjects;
import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTWorksheet;
+import org.openxmlformats.schemas.spreadsheetml.x2006.main.STDvAspect;
/**
* Represents a SpreadsheetML drawing
@@ -426,7 +427,8 @@ public final class XSSFDrawing extends P
CTOleObjects oo = cwb.isSetOleObjects() ? cwb.getOleObjects() : cwb.addNewOleObjects();
CTOleObject ole1 = oo.addNewOleObject();
- ole1.setProgId("Package");
+ ole1.setProgId("Packager Shell Object");
+ ole1.setDvAspect(STDvAspect.DVASPECT_ICON);
ole1.setShapeId(shapeId);
ole1.setId(olePR.getId());
Modified: poi/trunk/src/ooxml/testcases/org/apache/poi/poifs/crypt/TestSignatureInfo.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/ooxml/testcases/org/apache/poi/poifs/crypt/TestSignatureInfo.java?rev=1799740&r1=1799739&r2=1799740&view=diff
==============================================================================
--- poi/trunk/src/ooxml/testcases/org/apache/poi/poifs/crypt/TestSignatureInfo.java (original)
+++ poi/trunk/src/ooxml/testcases/org/apache/poi/poifs/crypt/TestSignatureInfo.java Sat Jun 24 09:03:00 2017
@@ -44,6 +44,7 @@ import java.net.URL;
import java.security.Key;
import java.security.KeyPair;
import java.security.KeyStore;
+import java.security.MessageDigest;
import java.security.PrivateKey;
import java.security.cert.Certificate;
import java.security.cert.X509CRL;
@@ -54,6 +55,9 @@ import java.util.Collections;
import java.util.Date;
import java.util.Iterator;
import java.util.List;
+import java.util.Locale;
+
+import javax.xml.bind.DatatypeConverter;
import org.apache.poi.POIDataSamples;
import org.apache.poi.POITestCase;
@@ -119,6 +123,67 @@ public class TestSignatureInfo {
}
@Test
+ public void bug61182() throws Exception {
+// MessageDigest md = MessageDigest.getInstance("SHA-1");
+// InputStream fis2 = new FileInputStream("tmp/sigtest/idPackageObject.xml");
+// byte dig[] = md.digest(IOUtils.toByteArray(fis2));
+// fis2.close();
+//
+// String digStr = DatatypeConverter.printBase64Binary(dig);
+// System.out.println(digStr);
+
+
+ KeyStore keystore = KeyStore.getInstance("PKCS12");
+ String password = "test", alias = "test";
+ InputStream is = new FileInputStream("tmp/sigtest/test.pfx");
+ keystore.load(is, password.toCharArray());
+ is.close();
+
+ Key key = keystore.getKey(alias, password.toCharArray());
+ x509 = (X509Certificate)keystore.getCertificate(alias);
+ keyPair = new KeyPair(x509.getPublicKey(), (PrivateKey)key);
+
+ SignatureConfig signatureConfig = new SignatureConfig();
+ signatureConfig.setKey(keyPair.getPrivate());
+ signatureConfig.setSigningCertificateChain(Collections.singletonList(x509));
+ // 2017-06-21T14:03:54Z
+ Calendar oldCal = Calendar.getInstance(LocaleUtil.TIMEZONE_UTC, Locale.ROOT);
+ oldCal.set(2017, 5, 21, 14, 03, 54);
+ signatureConfig.setExecutionTime(oldCal.getTime());
+ signatureConfig.setDigestAlgo(HashAlgorithm.sha1);
+
+ SignatureInfo si = new SignatureInfo();
+ si.setSignatureConfig(signatureConfig);
+
+ File origFile = new File("tmp/sigtest/excel-unsigned.xlsx");
+ File testFile = new File("tmp/sigtest/excel-poi.xlsx");
+ InputStream fis = new FileInputStream(origFile);
+ OutputStream fos = new FileOutputStream(testFile);
+ IOUtils.copy(fis, fos);
+ fos.close();
+ fis.close();
+
+ OPCPackage pkg = OPCPackage.open(testFile, PackageAccess.READ_WRITE);
+
+ signatureConfig.setOpcPackage(pkg);
+ si.confirmSignature();
+ assertTrue(si.verifySignature());
+
+ pkg.close();
+
+// OPCPackage pkgPoi = OPCPackage.open(new File("tmp/sigtest/excel-poi.xlsx"), PackageAccess.READ);
+// signatureConfig.setOpcPackage(pkgPoi);
+// assertTrue(si.verifySignature());
+// pkgPoi.revert();
+
+
+// OPCPackage pkg2016 = OPCPackage.open(new File("tmp/sigtest/excel-signed.xlsx"), PackageAccess.READ);
+// signatureConfig.setOpcPackage(pkg2016);
+// assertTrue(si.verifySignature());
+// pkg2016.revert();
+ }
+
+ @Test
public void office2007prettyPrintedRels() throws Exception {
OPCPackage pkg = OPCPackage.open(testdata.getFile("office2007prettyPrintedRels.docx"), PackageAccess.READ);
try {
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@poi.apache.org
For additional commands, e-mail: commits-help@poi.apache.org