123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778 |
- /* ====================================================================
- Licensed to the Apache Software Foundation (ASF) under one or more
- contributor license agreements. See the NOTICE file distributed with
- this work for additional information regarding copyright ownership.
- The ASF licenses this file to You under the Apache License, Version 2.0
- (the "License"); you may not use this file except in compliance with
- the License. You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
- ==================================================================== */
-
- /* ====================================================================
- 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
- Copyright (C) 2008-2014 FedICT.
- ================================================================= */
-
- package org.apache.poi.poifs.crypt.dsig.facets;
-
- import static org.apache.poi.ooxml.POIXMLTypeLoader.DEFAULT_XML_OPTIONS;
-
- import javax.xml.crypto.MarshalException;
-
- import org.apache.poi.poifs.crypt.dsig.SignatureInfo;
- import org.apache.xmlbeans.XmlException;
- import org.etsi.uri.x01903.v13.QualifyingPropertiesType;
- import org.etsi.uri.x01903.v13.UnsignedPropertiesType;
- import org.etsi.uri.x01903.v13.UnsignedSignaturePropertiesType;
- import org.w3c.dom.Document;
- import org.w3c.dom.Node;
- import org.w3c.dom.NodeList;
-
- /**
- * Work-around for Office2010 to accept the XAdES-BES/EPES signature.
- *
- * xades:UnsignedProperties/xades:UnsignedSignatureProperties needs to be present.
- *
- * @author Frank Cornelis
- */
- public class Office2010SignatureFacet implements SignatureFacet {
-
- @Override
- public void postSign(SignatureInfo signatureInfo, Document document)
- throws MarshalException {
- // check for XAdES-BES
- NodeList nl = document.getElementsByTagNameNS(XADES_132_NS, "QualifyingProperties");
- if (nl.getLength() != 1) {
- throw new MarshalException("no XAdES-BES extension present");
- }
-
- QualifyingPropertiesType qualProps;
- try {
- qualProps = QualifyingPropertiesType.Factory.parse(nl.item(0), DEFAULT_XML_OPTIONS);
- } catch (XmlException e) {
- throw new MarshalException(e);
- }
-
- // create basic XML container structure
- UnsignedPropertiesType unsignedProps = qualProps.getUnsignedProperties();
- if (unsignedProps == null) {
- unsignedProps = qualProps.addNewUnsignedProperties();
- }
- UnsignedSignaturePropertiesType unsignedSigProps = unsignedProps.getUnsignedSignatureProperties();
- if (unsignedSigProps == null) {
- /* unsignedSigProps = */ unsignedProps.addNewUnsignedSignatureProperties();
- }
-
- Node n = document.importNode(qualProps.getDomNode().getFirstChild(), true);
- nl.item(0).getParentNode().replaceChild(n, nl.item(0));
- }
- }
|