Author: kiwiwings
Date: Sun Sep 21 22:48:20 2014
New Revision: 1626646

URL: http://svn.apache.org/r1626646
Log:
centralized configs

Added:
    
poi/branches/xml_signature/src/ooxml/java/org/apache/poi/poifs/crypt/dsig/SignatureConfig.java
      - copied, changed from r1626491, 
poi/branches/xml_signature/src/ooxml/java/org/apache/poi/poifs/crypt/dsig/SignatureInfoConfig.java
Removed:
    
poi/branches/xml_signature/src/ooxml/java/org/apache/poi/poifs/crypt/dsig/SignatureInfoConfig.java
Modified:
    
poi/branches/xml_signature/src/ooxml/java/org/apache/poi/poifs/crypt/dsig/OOXMLURIDereferencer.java
    
poi/branches/xml_signature/src/ooxml/java/org/apache/poi/poifs/crypt/dsig/SignatureInfo.java
    
poi/branches/xml_signature/src/ooxml/java/org/apache/poi/poifs/crypt/dsig/facets/EnvelopedSignatureFacet.java
    
poi/branches/xml_signature/src/ooxml/java/org/apache/poi/poifs/crypt/dsig/facets/KeyInfoSignatureFacet.java
    
poi/branches/xml_signature/src/ooxml/java/org/apache/poi/poifs/crypt/dsig/facets/OOXMLSignatureFacet.java
    
poi/branches/xml_signature/src/ooxml/java/org/apache/poi/poifs/crypt/dsig/facets/Office2010SignatureFacet.java
    
poi/branches/xml_signature/src/ooxml/java/org/apache/poi/poifs/crypt/dsig/facets/SignatureFacet.java
    
poi/branches/xml_signature/src/ooxml/java/org/apache/poi/poifs/crypt/dsig/facets/XAdESSignatureFacet.java
    
poi/branches/xml_signature/src/ooxml/java/org/apache/poi/poifs/crypt/dsig/facets/XAdESXLSignatureFacet.java
    
poi/branches/xml_signature/src/ooxml/java/org/apache/poi/poifs/crypt/dsig/services/TSPTimeStampService.java
    
poi/branches/xml_signature/src/ooxml/java/org/apache/poi/poifs/crypt/dsig/services/TimeStampService.java
    
poi/branches/xml_signature/src/ooxml/testcases/org/apache/poi/poifs/crypt/TestSignatureInfo.java

Modified: 
poi/branches/xml_signature/src/ooxml/java/org/apache/poi/poifs/crypt/dsig/OOXMLURIDereferencer.java
URL: 
http://svn.apache.org/viewvc/poi/branches/xml_signature/src/ooxml/java/org/apache/poi/poifs/crypt/dsig/OOXMLURIDereferencer.java?rev=1626646&r1=1626645&r2=1626646&view=diff
==============================================================================
--- 
poi/branches/xml_signature/src/ooxml/java/org/apache/poi/poifs/crypt/dsig/OOXMLURIDereferencer.java
 (original)
+++ 
poi/branches/xml_signature/src/ooxml/java/org/apache/poi/poifs/crypt/dsig/OOXMLURIDereferencer.java
 Sun Sep 21 22:48:20 2014
@@ -40,17 +40,18 @@ import org.apache.poi.openxml4j.exceptio
 import org.apache.poi.openxml4j.opc.PackagePart;
 import org.apache.poi.openxml4j.opc.PackagePartName;
 import org.apache.poi.openxml4j.opc.PackagingURIHelper;
+import org.apache.poi.poifs.crypt.dsig.SignatureConfig.SignatureConfigurable;
 import org.apache.poi.util.POILogFactory;
 import org.apache.poi.util.POILogger;
 
 /**
  * JSR105 URI dereferencer for Office Open XML documents.
  */
-public class OOXMLURIDereferencer implements URIDereferencer {
+public class OOXMLURIDereferencer implements URIDereferencer, 
SignatureConfigurable {
 
     private static final POILogger LOG = 
POILogFactory.getLogger(OOXMLURIDereferencer.class);
 
-    private SignatureInfoConfig signatureConfig;
+    private SignatureConfig signatureConfig;
     private URIDereferencer baseUriDereferencer;
 
     public OOXMLURIDereferencer() {
@@ -58,7 +59,7 @@ public class OOXMLURIDereferencer implem
         this.baseUriDereferencer = xmlSignatureFactory.getURIDereferencer();
     }
     
-    public void setSignatureConfig(SignatureInfoConfig signatureConfig) {
+    public void setSignatureConfig(SignatureConfig signatureConfig) {
         this.signatureConfig = signatureConfig;
     }
 

Copied: 
poi/branches/xml_signature/src/ooxml/java/org/apache/poi/poifs/crypt/dsig/SignatureConfig.java
 (from r1626491, 
poi/branches/xml_signature/src/ooxml/java/org/apache/poi/poifs/crypt/dsig/SignatureInfoConfig.java)
URL: 
http://svn.apache.org/viewvc/poi/branches/xml_signature/src/ooxml/java/org/apache/poi/poifs/crypt/dsig/SignatureConfig.java?p2=poi/branches/xml_signature/src/ooxml/java/org/apache/poi/poifs/crypt/dsig/SignatureConfig.java&p1=poi/branches/xml_signature/src/ooxml/java/org/apache/poi/poifs/crypt/dsig/SignatureInfoConfig.java&r1=1626491&r2=1626646&rev=1626646&view=diff
==============================================================================
--- 
poi/branches/xml_signature/src/ooxml/java/org/apache/poi/poifs/crypt/dsig/SignatureInfoConfig.java
 (original)
+++ 
poi/branches/xml_signature/src/ooxml/java/org/apache/poi/poifs/crypt/dsig/SignatureConfig.java
 Sun Sep 21 22:48:20 2014
@@ -27,32 +27,88 @@ import java.util.UUID;
 import javax.xml.crypto.URIDereferencer;
 import javax.xml.crypto.dsig.CanonicalizationMethod;
 
+import org.apache.poi.EncryptedDocumentException;
 import org.apache.poi.openxml4j.opc.OPCPackage;
 import org.apache.poi.poifs.crypt.HashAlgorithm;
+import org.apache.poi.poifs.crypt.dsig.SignatureInfo.SignCreationListener;
 import org.apache.poi.poifs.crypt.dsig.facets.KeyInfoSignatureFacet;
 import org.apache.poi.poifs.crypt.dsig.facets.OOXMLSignatureFacet;
 import org.apache.poi.poifs.crypt.dsig.facets.Office2010SignatureFacet;
 import org.apache.poi.poifs.crypt.dsig.facets.SignatureFacet;
 import org.apache.poi.poifs.crypt.dsig.facets.XAdESSignatureFacet;
+import org.apache.poi.poifs.crypt.dsig.services.RevocationDataService;
 import org.apache.poi.poifs.crypt.dsig.services.SignaturePolicyService;
+import org.apache.poi.poifs.crypt.dsig.services.TSPTimeStampService;
+import org.apache.poi.poifs.crypt.dsig.services.TimeStampService;
+import org.apache.poi.poifs.crypt.dsig.services.TimeStampServiceValidator;
 import org.apache.poi.poifs.crypt.dsig.spi.AddressDTO;
 import org.apache.poi.poifs.crypt.dsig.spi.IdentityDTO;
+import org.w3c.dom.events.EventListener;
 
-public class SignatureInfoConfig {
+/**
+ * This class bundles the configuration options used for the existing
+ * signature facets.
+ * Apart of the opc-package (thread local) most values will probably be 
constant, so
+ * it might be configured centrally (e.g. by spring) 
+ */
+public class SignatureConfig {
+    
+    public static interface SignatureConfigurable {
+        void setSignatureConfig(SignatureConfig signatureConfig);        
+    }
+
+    private ThreadLocal<OPCPackage> opcPackage = new ThreadLocal<OPCPackage>();
     
     private List<SignatureFacet> signatureFacets = new 
ArrayList<SignatureFacet>();
     private HashAlgorithm digestAlgo = HashAlgorithm.sha1;
     private Date executionTime = new Date();
-    private OPCPackage opcPackage;
     private PrivateKey key;
     private List<X509Certificate> signingCertificateChain;
     private IdentityDTO identity;
     private AddressDTO address;
     private byte[] photo;
+
+    /**
+     * the optional signature policy service used for XAdES-EPES.
+     */
     private SignaturePolicyService signaturePolicyService;
-    private URIDereferencer uriDereferencer;
+    private URIDereferencer uriDereferencer = new OOXMLURIDereferencer();
     private String signatureNamespacePrefix;
     private String canonicalizationMethod = CanonicalizationMethod.INCLUSIVE;
+    
+    private boolean includeEntireCertificateChain = true;
+    private boolean includeIssuerSerial = false;
+    private boolean includeKeyValue = false;
+    
+    private TimeStampService tspService = new TSPTimeStampService();
+    // timestamp service provider URL
+    private String tspUrl;
+    private boolean tspOldProtocol = false;
+    private HashAlgorithm tspDigestAlgo = HashAlgorithm.sha1;
+    private String tspUser;
+    private String tspPass;
+    private TimeStampServiceValidator tspValidator;
+    /**
+     * the optional TSP request policy OID.
+     */
+    private String tspRequestPolicy = "1.3.6.1.4.1.13762.3";
+    private String userAgent = "POI XmlSign Service TSP Client";
+    private String proxyUrl;
+    
+    /**
+     * the optional revocation data service used for XAdES-C and XAdES-X-L.
+     * When <code>null</code> the signature will be limited to XAdES-T only.
+     */
+    private RevocationDataService revocationDataService;
+    private HashAlgorithm xadesDigestAlgo = HashAlgorithm.sha1;
+    private String xadesRole = null;
+    private String xadesSignatureId = null;
+    private boolean xadesSignaturePolicyImplied = true;
+
+    /**
+     * Work-around for Office 2010 IssuerName encoding.
+     */
+    private boolean xadesIssuerNameNoReverseOrder = true;
 
     /**
      * The signature Id attribute value used to create the XML signature. A
@@ -65,32 +121,60 @@ public class SignatureInfoConfig {
      * signing. The default value is "Office OpenXML Document".
      */
     private String signatureDescription = "Office OpenXML Document";
+    
+    /**
+     * The process of signing includes the marshalling of xml structures.
+     * This also includes the canonicalization. Currently this leads to 
problems 
+     * with certain namespaces, so this EventListener is used to interfere
+     * with the marshalling process.
+     */
+    EventListener signCreationListener = null;
 
-    public SignatureInfoConfig() {
-        OOXMLURIDereferencer uriDereferencer = new OOXMLURIDereferencer();
-        uriDereferencer.setSignatureConfig(this);
-        this.uriDereferencer = uriDereferencer;
+    protected void init(boolean onlyValidation) {
+        if (uriDereferencer == null) {
+            throw new EncryptedDocumentException("uriDereferencer is null");
+        }
+        if (opcPackage == null) {
+            throw new EncryptedDocumentException("opcPackage is null");
+        }
+        if (uriDereferencer instanceof SignatureConfigurable) {
+            ((SignatureConfigurable)uriDereferencer).setSignatureConfig(this);
+        }
+        if (onlyValidation) return;
+
+        if (signCreationListener == null) {
+            signCreationListener = new SignCreationListener();
+        }
+        
+        if (signCreationListener instanceof SignatureConfigurable) {
+            
((SignatureConfigurable)signCreationListener).setSignatureConfig(this);
+        }
+
+        
+        if (tspService != null) {
+            tspService.setSignatureConfig(this);
+        }
+        
+        if (xadesSignatureId == null || xadesSignatureId.isEmpty()) {
+            xadesSignatureId = "idSignedProperties";
+        }
+
+        if (signatureFacets.isEmpty()) {
+            addSignatureFacet(new OOXMLSignatureFacet());
+            addSignatureFacet(new KeyInfoSignatureFacet());
+            addSignatureFacet(new XAdESSignatureFacet());
+            addSignatureFacet(new Office2010SignatureFacet());
+        }
+
+        for (SignatureFacet sf : signatureFacets) {
+            sf.setSignatureConfig(this);
+        }
     }
     
     public void addSignatureFacet(SignatureFacet sf) {
         signatureFacets.add(sf);
     }
     
-    public void addDefaultFacets() {
-        addSignatureFacet(new OOXMLSignatureFacet(this));
-        addSignatureFacet(new KeyInfoSignatureFacet(true, false, false));
-
-        XAdESSignatureFacet xadesSignatureFacet = new 
XAdESSignatureFacet(this);
-        xadesSignatureFacet.setIdSignedProperties("idSignedProperties");
-        xadesSignatureFacet.setSignaturePolicyImplied(true);
-        /*
-         * Work-around for Office 2010.
-         */
-        xadesSignatureFacet.setIssuerNameNoReverseOrder(true);
-        addSignatureFacet(xadesSignatureFacet);
-        addSignatureFacet(new Office2010SignatureFacet());
-    }
-    
     /**
      * Gives back the used XAdES signature facet.
      * 
@@ -119,10 +203,10 @@ public class SignatureInfoConfig {
         this.digestAlgo = digestAlgo;
     }
     public OPCPackage getOpcPackage() {
-        return opcPackage;
+        return opcPackage.get();
     }
     public void setOpcPackage(OPCPackage opcPackage) {
-        this.opcPackage = opcPackage;
+        this.opcPackage.set(opcPackage);
     }
     public PrivateKey getKey() {
         return key;
@@ -199,4 +283,124 @@ public class SignatureInfoConfig {
             ? packageSignatureId
             : "xmldsig-" + UUID.randomUUID();
     }
+    public String getTspUrl() {
+        return tspUrl;
+    }
+    public void setTspUrl(String tspUrl) {
+        this.tspUrl = tspUrl;
+    }
+    public boolean isTspOldProtocol() {
+        return tspOldProtocol;
+    }
+    public void setTspOldProtocol(boolean tspOldProtocol) {
+        this.tspOldProtocol = tspOldProtocol;
+    }
+    public HashAlgorithm getTspDigestAlgo() {
+        return tspDigestAlgo;
+    }
+    public void setTspDigestAlgo(HashAlgorithm tspDigestAlgo) {
+        this.tspDigestAlgo = tspDigestAlgo;
+    }
+    public String getProxyUrl() {
+        return proxyUrl;
+    }
+    public void setProxyUrl(String proxyUrl) {
+        this.proxyUrl = proxyUrl;
+    }
+    public TimeStampService getTspService() {
+        return tspService;
+    }
+    public void setTspService(TimeStampService tspService) {
+        this.tspService = tspService;
+    }
+    public String getTspUser() {
+        return tspUser;
+    }
+    public void setTspUser(String tspUser) {
+        this.tspUser = tspUser;
+    }
+    public String getTspPass() {
+        return tspPass;
+    }
+    public void setTspPass(String tspPass) {
+        this.tspPass = tspPass;
+    }
+    public TimeStampServiceValidator getTspValidator() {
+        return tspValidator;
+    }
+    public void setTspValidator(TimeStampServiceValidator tspValidator) {
+        this.tspValidator = tspValidator;
+    }
+    public RevocationDataService getRevocationDataService() {
+        return revocationDataService;
+    }
+    public void setRevocationDataService(RevocationDataService 
revocationDataService) {
+        this.revocationDataService = revocationDataService;
+    }
+    public HashAlgorithm getXadesDigestAlgo() {
+        return xadesDigestAlgo;
+    }
+    public void setXadesDigestAlgo(HashAlgorithm xadesDigestAlgo) {
+        this.xadesDigestAlgo = xadesDigestAlgo;
+    }
+    public String getUserAgent() {
+        return userAgent;
+    }
+    public void setUserAgent(String userAgent) {
+        this.userAgent = userAgent;
+    }
+    public String getTspRequestPolicy() {
+        return tspRequestPolicy;
+    }
+    public void setTspRequestPolicy(String tspRequestPolicy) {
+        this.tspRequestPolicy = tspRequestPolicy;
+    }
+    public boolean isIncludeEntireCertificateChain() {
+        return includeEntireCertificateChain;
+    }
+    public void setIncludeEntireCertificateChain(boolean 
includeEntireCertificateChain) {
+        this.includeEntireCertificateChain = includeEntireCertificateChain;
+    }
+    public boolean isIncludeIssuerSerial() {
+        return includeIssuerSerial;
+    }
+    public void setIncludeIssuerSerial(boolean includeIssuerSerial) {
+        this.includeIssuerSerial = includeIssuerSerial;
+    }
+    public boolean isIncludeKeyValue() {
+        return includeKeyValue;
+    }
+    public void setIncludeKeyValue(boolean includeKeyValue) {
+        this.includeKeyValue = includeKeyValue;
+    }
+    public String getXadesRole() {
+        return xadesRole;
+    }
+    public void setXadesRole(String xadesRole) {
+        this.xadesRole = xadesRole;
+    }
+    public String getXadesSignatureId() {
+        return xadesSignatureId;
+    }
+    public void setXadesSignatureId(String xadesSignatureId) {
+        this.xadesSignatureId = xadesSignatureId;
+    }
+    public boolean isXadesSignaturePolicyImplied() {
+        return xadesSignaturePolicyImplied;
+    }
+    public void setXadesSignaturePolicyImplied(boolean 
xadesSignaturePolicyImplied) {
+        this.xadesSignaturePolicyImplied = xadesSignaturePolicyImplied;
+    }
+    public boolean isXadesIssuerNameNoReverseOrder() {
+        return xadesIssuerNameNoReverseOrder;
+    }
+    public void setXadesIssuerNameNoReverseOrder(boolean 
xadesIssuerNameNoReverseOrder) {
+        this.xadesIssuerNameNoReverseOrder = xadesIssuerNameNoReverseOrder;
+    }
+    public EventListener getSignCreationListener() {
+        return signCreationListener;
+    }
+    public void setSignCreationListener(EventListener signCreationListener) {
+        this.signCreationListener = signCreationListener;
+    }
 }

Modified: 
poi/branches/xml_signature/src/ooxml/java/org/apache/poi/poifs/crypt/dsig/SignatureInfo.java
URL: 
http://svn.apache.org/viewvc/poi/branches/xml_signature/src/ooxml/java/org/apache/poi/poifs/crypt/dsig/SignatureInfo.java?rev=1626646&r1=1626645&r2=1626646&view=diff
==============================================================================
--- 
poi/branches/xml_signature/src/ooxml/java/org/apache/poi/poifs/crypt/dsig/SignatureInfo.java
 (original)
+++ 
poi/branches/xml_signature/src/ooxml/java/org/apache/poi/poifs/crypt/dsig/SignatureInfo.java
 Sun Sep 21 22:48:20 2014
@@ -86,6 +86,7 @@ import org.apache.poi.openxml4j.opc.Targ
 import org.apache.poi.poifs.crypt.ChainingMode;
 import org.apache.poi.poifs.crypt.CipherAlgorithm;
 import org.apache.poi.poifs.crypt.CryptoFunctions;
+import org.apache.poi.poifs.crypt.dsig.SignatureConfig.SignatureConfigurable;
 import org.apache.poi.poifs.crypt.dsig.facets.SignatureFacet;
 import org.apache.poi.poifs.crypt.dsig.services.RelationshipTransformService;
 import org.apache.poi.poifs.crypt.dsig.spi.DigestInfo;
@@ -107,11 +108,13 @@ import org.w3c.dom.events.EventTarget;
 import org.w3c.dom.events.MutationEvent;
 import org.xml.sax.SAXException;
 
-public class SignatureInfo {
+public class SignatureInfo implements SignatureConfigurable {
 
     public static final String XmlNS = "http://www.w3.org/2000/xmlns/";;
     public static final String XmlDSigNS = XMLSignature.XMLNS;
     
+    // see https://www.ietf.org/rfc/rfc3110.txt
+    // RSA/SHA1 SIG Resource Records
     public static final byte[] SHA1_DIGEST_INFO_PREFIX = new byte[]
         { 0x30, 0x1f, 0x30, 0x07, 0x06, 0x05, 0x2b, 0x0e, 0x03, 0x02, 0x1a, 
0x04, 0x14 };
 
@@ -140,17 +143,41 @@ public class SignatureInfo {
     public static final byte[] RIPEMD256_DIGEST_INFO_PREFIX = new byte[]
         { 0x30, 0x2b, 0x30, 0x07, 0x06, 0x05, 0x2b, 0x24, 0x03, 0x02, 0x03, 
0x04, 0x20 };
     
+    protected static class SignCreationListener implements EventListener, 
SignatureConfigurable {
+        ThreadLocal<EventTarget> target = new ThreadLocal<EventTarget>();
+        SignatureConfig signatureConfig;
+        public void setEventTarget(EventTarget target) {
+            this.target.set(target);
+        }
+        public void handleEvent(Event e) {
+            if (e instanceof MutationEvent) {
+                MutationEvent mutEvt = (MutationEvent)e;
+                if (mutEvt.getTarget() instanceof Element) {
+                    Element el = (Element)mutEvt.getTarget();
+                    String packageId = signatureConfig.getPackageSignatureId();
+                    if (packageId.equals(el.getAttribute("Id"))) {
+                        target.get().removeEventListener("DOMSubtreeModified", 
this, false);
+                        el.setAttributeNS(XmlNS, "xmlns:mdssi", 
PackageNamespaces.DIGITAL_SIGNATURE);
+                    }
+                }
+            }
+        }
+        public void setSignatureConfig(SignatureConfig signatureConfig) {
+            this.signatureConfig = signatureConfig;
+        }
+    }
+    
     
     private static final POILogger LOG = 
POILogFactory.getLogger(SignatureInfo.class);
     private static boolean isInitialized = false;
     
-    private SignatureInfoConfig signatureConfig;
+    private SignatureConfig signatureConfig;
 
-    public SignatureInfoConfig getSignatureConfig() {
+    public SignatureConfig getSignatureConfig() {
         return signatureConfig;
     }
 
-    public void setSignatureConfig(SignatureInfoConfig signatureConfig) {
+    public void setSignatureConfig(SignatureConfig signatureConfig) {
         this.signatureConfig = signatureConfig;
     }
 
@@ -199,6 +226,8 @@ public class SignatureInfo {
     }
     
     protected boolean getSignersAndValidate(List<X509Certificate> signers, 
boolean onlyFirst) {
+        signatureConfig.init(true);
+        
         boolean allValid = true;
         List<PackagePart> signatureParts = getSignatureParts(onlyFirst);
         if (signatureParts.isEmpty()) {
@@ -345,27 +374,18 @@ public class SignatureInfo {
         TransformerFactoryConfigurationError, TransformerException,
         IOException, SAXException, NoSuchProviderException, XmlException, 
URISyntaxException {
         SignatureInfo.initXmlProvider();
+        signatureConfig.init(false);
         
         // it's necessary to explicitly set the mdssi namespace, but the 
sign() method has no
         // normal way to interfere with, so we need to add the namespace under 
the hand ...
-        final EventTarget et = (EventTarget)document;
-        EventListener myModificationListener = new EventListener() {
-            @Override
-            public void handleEvent(Event e) {
-                if (e instanceof MutationEvent) {
-                    MutationEvent mutEvt = (MutationEvent)e;
-                    if (mutEvt.getTarget() instanceof Element) {
-                        Element el = (Element)mutEvt.getTarget();
-                        if ("idPackageObject".equals(el.getAttribute("Id"))) {
-                            et.removeEventListener("DOMSubtreeModified", this, 
false);
-                            el.setAttributeNS(XmlNS, "xmlns:mdssi", 
PackageNamespaces.DIGITAL_SIGNATURE);
-                        }
-                    }
-                }
+        EventTarget target = (EventTarget)document;
+        EventListener creationListener = 
signatureConfig.getSignCreationListener();
+        if (creationListener != null) {
+            if (creationListener instanceof SignCreationListener) {
+                
((SignCreationListener)creationListener).setEventTarget(target);
             }
-        };
-        
-        et.addEventListener("DOMSubtreeModified", myModificationListener, 
false);
+            target.addEventListener("DOMSubtreeModified", creationListener, 
false);
+        }
         
         /*
          * Signature context construction.

Modified: 
poi/branches/xml_signature/src/ooxml/java/org/apache/poi/poifs/crypt/dsig/facets/EnvelopedSignatureFacet.java
URL: 
http://svn.apache.org/viewvc/poi/branches/xml_signature/src/ooxml/java/org/apache/poi/poifs/crypt/dsig/facets/EnvelopedSignatureFacet.java?rev=1626646&r1=1626645&r2=1626646&view=diff
==============================================================================
--- 
poi/branches/xml_signature/src/ooxml/java/org/apache/poi/poifs/crypt/dsig/facets/EnvelopedSignatureFacet.java
 (original)
+++ 
poi/branches/xml_signature/src/ooxml/java/org/apache/poi/poifs/crypt/dsig/facets/EnvelopedSignatureFacet.java
 Sun Sep 21 22:48:20 2014
@@ -15,7 +15,7 @@ import javax.xml.crypto.dsig.XMLObject;
 import javax.xml.crypto.dsig.XMLSignatureFactory;
 import javax.xml.crypto.dsig.spec.TransformParameterSpec;
 
-import org.apache.poi.poifs.crypt.dsig.SignatureInfoConfig;
+import org.apache.poi.poifs.crypt.dsig.SignatureConfig;
 import org.w3c.dom.Document;
 
 /**
@@ -26,12 +26,12 @@ import org.w3c.dom.Document;
  */
 public class EnvelopedSignatureFacet implements SignatureFacet {
 
-    private SignatureInfoConfig signatureConfig;
+    private SignatureConfig signatureConfig;
 
-    public EnvelopedSignatureFacet(SignatureInfoConfig signatureConfig) {
+    public void setSignatureConfig(SignatureConfig signatureConfig) {
         this.signatureConfig = signatureConfig;
     }
-
+    
     @Override
     public void postSign(Document document, List<X509Certificate> 
signingCertificateChain) {
         // empty

Modified: 
poi/branches/xml_signature/src/ooxml/java/org/apache/poi/poifs/crypt/dsig/facets/KeyInfoSignatureFacet.java
URL: 
http://svn.apache.org/viewvc/poi/branches/xml_signature/src/ooxml/java/org/apache/poi/poifs/crypt/dsig/facets/KeyInfoSignatureFacet.java?rev=1626646&r1=1626645&r2=1626646&view=diff
==============================================================================
--- 
poi/branches/xml_signature/src/ooxml/java/org/apache/poi/poifs/crypt/dsig/facets/KeyInfoSignatureFacet.java
 (original)
+++ 
poi/branches/xml_signature/src/ooxml/java/org/apache/poi/poifs/crypt/dsig/facets/KeyInfoSignatureFacet.java
 Sun Sep 21 22:48:20 2014
@@ -49,6 +49,7 @@ import javax.xml.crypto.dsig.keyinfo.Key
 import javax.xml.crypto.dsig.keyinfo.X509Data;
 
 import org.apache.jcp.xml.dsig.internal.dom.DOMKeyInfo;
+import org.apache.poi.poifs.crypt.dsig.SignatureConfig;
 import org.apache.poi.poifs.crypt.dsig.SignatureInfo;
 import org.apache.poi.util.POILogFactory;
 import org.apache.poi.util.POILogger;
@@ -66,25 +67,11 @@ import org.w3c.dom.NodeList;
 public class KeyInfoSignatureFacet implements SignatureFacet {
 
     private static final POILogger LOG = 
POILogFactory.getLogger(KeyInfoSignatureFacet.class);
+    
+    SignatureConfig signatureConfig;
 
-    private final boolean includeEntireCertificateChain;
-
-    private final boolean includeIssuerSerial;
-
-    private final boolean includeKeyValue;
-
-    /**
-     * Main constructor.
-     * 
-     * @param includeEntireCertificateChain
-     * @param includeIssuerSerial
-     * @param includeKeyValue
-     */
-    public KeyInfoSignatureFacet(boolean includeEntireCertificateChain,
-            boolean includeIssuerSerial, boolean includeKeyValue) {
-        this.includeEntireCertificateChain = includeEntireCertificateChain;
-        this.includeIssuerSerial = includeIssuerSerial;
-        this.includeKeyValue = includeKeyValue;
+    public void setSignatureConfig(SignatureConfig signatureConfig) {
+         this.signatureConfig = signatureConfig;
     }
 
     @Override
@@ -109,7 +96,7 @@ public class KeyInfoSignatureFacet imple
 
         List<Object> keyInfoContent = new ArrayList<Object>();
 
-        if (this.includeKeyValue) {
+        if (signatureConfig.isIncludeKeyValue()) {
             KeyValue keyValue;
             try {
                 keyValue = 
keyInfoFactory.newKeyValue(signingCertificate.getPublicKey());
@@ -119,13 +106,13 @@ public class KeyInfoSignatureFacet imple
             keyInfoContent.add(keyValue);
         }
 
-        if (this.includeIssuerSerial) {
+        if (signatureConfig.isIncludeIssuerSerial()) {
             x509DataObjects.add(keyInfoFactory.newX509IssuerSerial(
                     signingCertificate.getIssuerX500Principal().toString(),
                     signingCertificate.getSerialNumber()));
         }
 
-        if (this.includeEntireCertificateChain) {
+        if (signatureConfig.isIncludeEntireCertificateChain()) {
             x509DataObjects.addAll(signingCertificateChain);
         } else {
             x509DataObjects.add(signingCertificate);

Modified: 
poi/branches/xml_signature/src/ooxml/java/org/apache/poi/poifs/crypt/dsig/facets/OOXMLSignatureFacet.java
URL: 
http://svn.apache.org/viewvc/poi/branches/xml_signature/src/ooxml/java/org/apache/poi/poifs/crypt/dsig/facets/OOXMLSignatureFacet.java?rev=1626646&r1=1626645&r2=1626646&view=diff
==============================================================================
--- 
poi/branches/xml_signature/src/ooxml/java/org/apache/poi/poifs/crypt/dsig/facets/OOXMLSignatureFacet.java
 (original)
+++ 
poi/branches/xml_signature/src/ooxml/java/org/apache/poi/poifs/crypt/dsig/facets/OOXMLSignatureFacet.java
 Sun Sep 21 22:48:20 2014
@@ -67,7 +67,7 @@ import org.apache.poi.openxml4j.opc.Pack
 import org.apache.poi.openxml4j.opc.PackageRelationshipCollection;
 import org.apache.poi.openxml4j.opc.PackagingURIHelper;
 import org.apache.poi.openxml4j.opc.TargetMode;
-import org.apache.poi.poifs.crypt.dsig.SignatureInfoConfig;
+import org.apache.poi.poifs.crypt.dsig.SignatureConfig;
 import org.apache.poi.poifs.crypt.dsig.services.RelationshipTransformService;
 import 
org.apache.poi.poifs.crypt.dsig.services.RelationshipTransformService.RelationshipTransformParameterSpec;
 import org.apache.poi.util.POILogFactory;
@@ -94,15 +94,12 @@ public class OOXMLSignatureFacet impleme
     public static final String OOXML_DIGSIG_NS = 
"http://schemas.openxmlformats.org/package/2006/digital-signature";;
     public static final String OFFICE_DIGSIG_NS = 
"http://schemas.microsoft.com/office/2006/digsig";;
 
-    private final SignatureInfoConfig signatureConfig;
+    private SignatureConfig signatureConfig;
 
-    /**
-     * Main constructor.
-     */
-    public OOXMLSignatureFacet(SignatureInfoConfig signatureConfig) {
+    public void setSignatureConfig(SignatureConfig signatureConfig) {
         this.signatureConfig = signatureConfig;
     }
-
+    
     @Override
     public void preSign(
         Document document

Modified: 
poi/branches/xml_signature/src/ooxml/java/org/apache/poi/poifs/crypt/dsig/facets/Office2010SignatureFacet.java
URL: 
http://svn.apache.org/viewvc/poi/branches/xml_signature/src/ooxml/java/org/apache/poi/poifs/crypt/dsig/facets/Office2010SignatureFacet.java?rev=1626646&r1=1626645&r2=1626646&view=diff
==============================================================================
--- 
poi/branches/xml_signature/src/ooxml/java/org/apache/poi/poifs/crypt/dsig/facets/Office2010SignatureFacet.java
 (original)
+++ 
poi/branches/xml_signature/src/ooxml/java/org/apache/poi/poifs/crypt/dsig/facets/Office2010SignatureFacet.java
 Sun Sep 21 22:48:20 2014
@@ -34,6 +34,7 @@ import javax.xml.crypto.dsig.Reference;
 import javax.xml.crypto.dsig.XMLObject;
 import javax.xml.crypto.dsig.XMLSignatureFactory;
 
+import org.apache.poi.poifs.crypt.dsig.SignatureConfig;
 import org.apache.xmlbeans.XmlException;
 import org.etsi.uri.x01903.v13.QualifyingPropertiesType;
 import org.etsi.uri.x01903.v13.UnsignedPropertiesType;
@@ -53,6 +54,10 @@ import org.w3c.dom.NodeList;
  */
 public class Office2010SignatureFacet implements SignatureFacet {
 
+    public void setSignatureConfig(SignatureConfig signatureConfig) {
+        // this.signatureConfig = signatureConfig;
+    }
+    
     @Override
     public void preSign(
           Document document

Modified: 
poi/branches/xml_signature/src/ooxml/java/org/apache/poi/poifs/crypt/dsig/facets/SignatureFacet.java
URL: 
http://svn.apache.org/viewvc/poi/branches/xml_signature/src/ooxml/java/org/apache/poi/poifs/crypt/dsig/facets/SignatureFacet.java?rev=1626646&r1=1626645&r2=1626646&view=diff
==============================================================================
--- 
poi/branches/xml_signature/src/ooxml/java/org/apache/poi/poifs/crypt/dsig/facets/SignatureFacet.java
 (original)
+++ 
poi/branches/xml_signature/src/ooxml/java/org/apache/poi/poifs/crypt/dsig/facets/SignatureFacet.java
 Sun Sep 21 22:48:20 2014
@@ -37,6 +37,7 @@ import javax.xml.crypto.dsig.Reference;
 import javax.xml.crypto.dsig.XMLObject;
 import javax.xml.crypto.dsig.XMLSignatureFactory;
 
+import org.apache.poi.poifs.crypt.dsig.SignatureConfig.SignatureConfigurable;
 import org.apache.xmlbeans.XmlException;
 import org.w3c.dom.Document;
 
@@ -46,7 +47,7 @@ import org.w3c.dom.Document;
  * @author Frank Cornelis
  * 
  */
-public interface SignatureFacet {
+public interface SignatureFacet extends SignatureConfigurable {
 
     /**
      * This method is being invoked by the XML signature service engine during

Modified: 
poi/branches/xml_signature/src/ooxml/java/org/apache/poi/poifs/crypt/dsig/facets/XAdESSignatureFacet.java
URL: 
http://svn.apache.org/viewvc/poi/branches/xml_signature/src/ooxml/java/org/apache/poi/poifs/crypt/dsig/facets/XAdESSignatureFacet.java?rev=1626646&r1=1626645&r2=1626646&view=diff
==============================================================================
--- 
poi/branches/xml_signature/src/ooxml/java/org/apache/poi/poifs/crypt/dsig/facets/XAdESSignatureFacet.java
 (original)
+++ 
poi/branches/xml_signature/src/ooxml/java/org/apache/poi/poifs/crypt/dsig/facets/XAdESSignatureFacet.java
 Sun Sep 21 22:48:20 2014
@@ -51,8 +51,8 @@ import javax.xml.crypto.dsig.spec.Transf
 
 import org.apache.poi.poifs.crypt.CryptoFunctions;
 import org.apache.poi.poifs.crypt.HashAlgorithm;
+import org.apache.poi.poifs.crypt.dsig.SignatureConfig;
 import org.apache.poi.poifs.crypt.dsig.SignatureInfo;
-import org.apache.poi.poifs.crypt.dsig.SignatureInfoConfig;
 import org.apache.poi.poifs.crypt.dsig.services.SignaturePolicyService;
 import org.apache.poi.util.POILogFactory;
 import org.apache.poi.util.POILogger;
@@ -99,32 +99,11 @@ public class XAdESSignatureFacet impleme
 
     private static final String XADES_TYPE = 
"http://uri.etsi.org/01903#SignedProperties";;
     
-    private SignatureInfoConfig signatureConfig;
+    private SignatureConfig signatureConfig;
     
-    private String idSignedProperties;
-
-    private boolean signaturePolicyImplied;
-
-    private String role;
-
-    private boolean issuerNameNoReverseOrder = false;
-
     private Map<String, String> dataObjectFormatMimeTypes = new 
HashMap<String, String>();
 
-    /**
-     * Main constructor.
-     * 
-     * @param clock
-     *            the clock to be used for determining the xades:SigningTime,
-     *            defaults to now when null
-     * @param hashAlgo
-     *            the digest algorithm to be used for all required XAdES digest
-     *            operations. Possible values: "SHA-1", "SHA-256", or 
"SHA-512",
-     *            defaults to SHA-1 when null
-     * @param signaturePolicyService
-     *            the optional signature policy service used for XAdES-EPES.
-     */
-    public XAdESSignatureFacet(SignatureInfoConfig signatureConfig) {
+    public void setSignatureConfig(SignatureConfig signatureConfig) {
         this.signatureConfig = signatureConfig;
     }
 
@@ -147,11 +126,7 @@ public class XAdESSignatureFacet impleme
         
         // SignedProperties
         SignedPropertiesType signedProperties = 
qualifyingProperties.addNewSignedProperties();
-        String signedPropertiesId = this.idSignedProperties;
-        if (this.idSignedProperties == null) {
-            signedPropertiesId = signatureConfig.getPackageSignatureId() + 
"-xades";
-        }
-        signedProperties.setId(signedPropertiesId);
+        signedProperties.setId(signatureConfig.getXadesSignatureId());
 
         // SignedSignatureProperties
         SignedSignaturePropertiesType signedSignatureProperties = 
signedProperties.addNewSignedSignatureProperties();
@@ -159,7 +134,7 @@ public class XAdESSignatureFacet impleme
         // SigningTime
         Calendar xmlGregorianCalendar = Calendar.getInstance();
         xmlGregorianCalendar.setTimeZone(TimeZone.getTimeZone("Z"));
-        xmlGregorianCalendar.setTime(this.signatureConfig.getExecutionTime());
+        xmlGregorianCalendar.setTime(signatureConfig.getExecutionTime());
         xmlGregorianCalendar.clear(Calendar.MILLISECOND);
         signedSignatureProperties.setSigningTime(xmlGregorianCalendar);
 
@@ -170,22 +145,23 @@ public class XAdESSignatureFacet impleme
         }
         CertIDListType signingCertificates = 
signedSignatureProperties.addNewSigningCertificate();
         CertIDType certId = signingCertificates.addNewCert();
-        X509Certificate signingCertificate = 
signatureConfig.getSigningCertificateChain().get(0);
-        setCertID(certId, signingCertificate, 
this.signatureConfig.getDigestAlgo(), this.issuerNameNoReverseOrder);
+        X509Certificate certificate = 
signatureConfig.getSigningCertificateChain().get(0);
+        setCertID(certId, signatureConfig, 
signatureConfig.isXadesIssuerNameNoReverseOrder(), certificate);
 
         // ClaimedRole
-        if (null != this.role && false == this.role.isEmpty()) {
+        String role = signatureConfig.getXadesRole();
+        if (role != null && !role.isEmpty()) {
             SignerRoleType signerRole = 
signedSignatureProperties.addNewSignerRole();
             signedSignatureProperties.setSignerRole(signerRole);
             ClaimedRolesListType claimedRolesList = 
signerRole.addNewClaimedRoles();
             AnyType claimedRole = claimedRolesList.addNewClaimedRole();
             XmlString roleString = XmlString.Factory.newInstance();
-            roleString.setStringValue(this.role);
+            roleString.setStringValue(role);
             insertXChild(claimedRole, roleString);
         }
 
         // XAdES-EPES
-        SignaturePolicyService policyService = 
this.signatureConfig.getSignaturePolicyService();
+        SignaturePolicyService policyService = 
signatureConfig.getSignaturePolicyService();
         if (policyService != null) {
             SignaturePolicyIdentifierType signaturePolicyIdentifier =
                 signedSignatureProperties.addNewSignaturePolicyIdentifier();
@@ -200,7 +176,7 @@ public class XAdESSignatureFacet impleme
 
             byte[] signaturePolicyDocumentData = 
policyService.getSignaturePolicyDocument();
             DigestAlgAndValueType sigPolicyHash = 
signaturePolicyId.addNewSigPolicyHash();
-            setDigestAlgAndValue(sigPolicyHash, signaturePolicyDocumentData, 
this.signatureConfig.getDigestAlgo());
+            setDigestAlgAndValue(sigPolicyHash, signaturePolicyDocumentData, 
signatureConfig.getDigestAlgo());
 
             String signaturePolicyDownloadUrl = 
policyService.getSignaturePolicyDownloadUrl();
             if (null != signaturePolicyDownloadUrl) {
@@ -210,14 +186,14 @@ public class XAdESSignatureFacet impleme
                 spUriElement.setStringValue(signaturePolicyDownloadUrl);
                 insertXChild(sigPolicyQualifier, spUriElement);
             }
-        } else if (this.signaturePolicyImplied) {
+        } else if (signatureConfig.isXadesSignaturePolicyImplied()) {
             SignaturePolicyIdentifierType signaturePolicyIdentifier = 
                     
signedSignatureProperties.addNewSignaturePolicyIdentifier();
             signaturePolicyIdentifier.addNewSignaturePolicyImplied();
         }
 
         // DataObjectFormat
-        if (false == this.dataObjectFormatMimeTypes.isEmpty()) {
+        if (!dataObjectFormatMimeTypes.isEmpty()) {
             SignedDataObjectPropertiesType signedDataObjectProperties =
                 signedProperties.addNewSignedDataObjectProperties();
 
@@ -246,15 +222,14 @@ public class XAdESSignatureFacet impleme
         objects.add(xadesObject);
 
         // add XAdES ds:Reference
-        DigestMethod digestMethod = 
signatureFactory.newDigestMethod(this.signatureConfig.getDigestAlgo().xmlSignUri,
 null);
+        DigestMethod digestMethod = 
signatureFactory.newDigestMethod(signatureConfig.getDigestAlgo().xmlSignUri, 
null);
         List<Transform> transforms = new ArrayList<Transform>();
         Transform exclusiveTransform = signatureFactory
                 .newTransform(CanonicalizationMethod.INCLUSIVE,
                         (TransformParameterSpec) null);
         transforms.add(exclusiveTransform);
-        Reference reference = signatureFactory.newReference("#"
-                + signedPropertiesId, digestMethod, transforms, XADES_TYPE,
-                null);
+        Reference reference = signatureFactory.newReference
+            ("#"+signatureConfig.getXadesSignatureId(), digestMethod, 
transforms, XADES_TYPE, null);
         references.add(reference);
     }
 
@@ -281,17 +256,9 @@ public class XAdESSignatureFacet impleme
 
     /**
      * Gives back the JAXB CertID data structure.
-     * 
-     * @param certificate
-     * @param xadesObjectFactory
-     * @param xmldsigObjectFactory
-     * @param digestAlgorithm
-     * @return
      */
-    protected static void setCertID(
-            CertIDType certId,
-            X509Certificate certificate,
-            HashAlgorithm digestAlgorithm, boolean issuerNameNoReverseOrder) {
+    protected static void setCertID
+        (CertIDType certId, SignatureConfig signatureConfig, boolean 
issuerNameNoReverseOrder, X509Certificate certificate) {
         X509IssuerSerialType issuerSerial = certId.addNewIssuerSerial();
         String issuerName;
         if (issuerNameNoReverseOrder) {
@@ -319,7 +286,7 @@ public class XAdESSignatureFacet impleme
                     + e.getMessage(), e);
         }
         DigestAlgAndValueType certDigest = certId.addNewCertDigest(); 
-        setDigestAlgAndValue(certDigest, encodedCertificate, digestAlgorithm);
+        setDigestAlgAndValue(certDigest, encodedCertificate, 
signatureConfig.getXadesDigestAlgo());
     }
 
     /**
@@ -333,43 +300,6 @@ public class XAdESSignatureFacet impleme
         this.dataObjectFormatMimeTypes.put(dsReferenceUri, mimetype);
     }
 
-    /**
-     * Sets the Id that will be used on the SignedProperties element;
-     * 
-     * @param idSignedProperties
-     */
-    public void setIdSignedProperties(String idSignedProperties) {
-        this.idSignedProperties = idSignedProperties;
-    }
-
-    /**
-     * Sets the signature policy to implied.
-     * 
-     * @param signaturePolicyImplied
-     */
-    public void setSignaturePolicyImplied(boolean signaturePolicyImplied) {
-        this.signaturePolicyImplied = signaturePolicyImplied;
-    }
-
-    /**
-     * Sets the XAdES claimed role.
-     * 
-     * @param role
-     */
-    public void setRole(String role) {
-        this.role = role;
-    }
-
-    /**
-     * Work-around for Office 2010 IssuerName encoding.
-     * 
-     * @param reverseOrder
-     */
-    public void setIssuerNameNoReverseOrder(boolean reverseOrder) {
-        this.issuerNameNoReverseOrder = reverseOrder;
-    }
-
-
     public Map<String,String> getNamespacePrefixMapping() {
         Map<String,String> map = new HashMap<String,String>();
         map.put("xd", "http://uri.etsi.org/01903/v1.3.2#";);

Modified: 
poi/branches/xml_signature/src/ooxml/java/org/apache/poi/poifs/crypt/dsig/facets/XAdESXLSignatureFacet.java
URL: 
http://svn.apache.org/viewvc/poi/branches/xml_signature/src/ooxml/java/org/apache/poi/poifs/crypt/dsig/facets/XAdESXLSignatureFacet.java?rev=1626646&r1=1626645&r2=1626646&view=diff
==============================================================================
--- 
poi/branches/xml_signature/src/ooxml/java/org/apache/poi/poifs/crypt/dsig/facets/XAdESXLSignatureFacet.java
 (original)
+++ 
poi/branches/xml_signature/src/ooxml/java/org/apache/poi/poifs/crypt/dsig/facets/XAdESXLSignatureFacet.java
 Sun Sep 21 22:48:20 2014
@@ -50,10 +50,8 @@ import javax.xml.crypto.dsig.Reference;
 import javax.xml.crypto.dsig.XMLObject;
 import javax.xml.crypto.dsig.XMLSignatureFactory;
 
-import org.apache.poi.poifs.crypt.HashAlgorithm;
+import org.apache.poi.poifs.crypt.dsig.SignatureConfig;
 import org.apache.poi.poifs.crypt.dsig.services.RevocationData;
-import org.apache.poi.poifs.crypt.dsig.services.RevocationDataService;
-import org.apache.poi.poifs.crypt.dsig.services.TimeStampService;
 import org.apache.poi.util.POILogFactory;
 import org.apache.poi.util.POILogger;
 import org.apache.xml.security.c14n.Canonicalizer;
@@ -117,53 +115,27 @@ public class XAdESXLSignatureFacet imple
     public static final String XADES_NAMESPACE = 
"http://uri.etsi.org/01903/v1.3.2#";;
 
     public static final String XADES141_NAMESPACE = 
"http://uri.etsi.org/01903/v1.4.1#";;
+    
+    private SignatureConfig signatureConfig;
 
-    private final TimeStampService timeStampService;
-
-    private String c14nAlgoId;
-
-    private final RevocationDataService revocationDataService;
+    private String c14nAlgoId = CanonicalizationMethod.EXCLUSIVE;
 
     private final CertificateFactory certificateFactory;
 
-    private final HashAlgorithm hashAlgo;
-
-    /**
-     * Convenience constructor.
-     * 
-     * @param timeStampService
-     *            the time-stamp service used for XAdES-T and XAdES-X.
-     * @param revocationDataService
-     *            the optional revocation data service used for XAdES-C and
-     *            XAdES-X-L. When <code>null</code> the signature will be
-     *            limited to XAdES-T only.
-     */
-    public XAdESXLSignatureFacet(TimeStampService timeStampService,
-            RevocationDataService revocationDataService) {
-        this(timeStampService, revocationDataService, HashAlgorithm.sha1);
+    public void setSignatureConfig(SignatureConfig signatureConfig) {
+         this.signatureConfig = signatureConfig;
     }
+    
 
+    
     /**
-     * Main constructor.
+     * Convenience constructor.
      * 
      * @param timeStampService
      *            the time-stamp service used for XAdES-T and XAdES-X.
      * @param revocationDataService
-     *            the optional revocation data service used for XAdES-C and
-     *            XAdES-X-L. When <code>null</code> the signature will be
-     *            limited to XAdES-T only.
-     * @param digestAlgorithm
-     *            the digest algorithm to be used for construction of the
-     *            XAdES-X-L elements.
      */
-    public XAdESXLSignatureFacet(TimeStampService timeStampService,
-            RevocationDataService revocationDataService,
-            HashAlgorithm digestAlgorithm) {
-        this.c14nAlgoId = CanonicalizationMethod.EXCLUSIVE;
-        this.hashAlgo = digestAlgorithm;
-        this.timeStampService = timeStampService;
-        this.revocationDataService = revocationDataService;
-
+    public XAdESXLSignatureFacet() {
         try {
             this.certificateFactory = CertificateFactory.getInstance("X.509");
         } catch (CertificateException e) {
@@ -212,8 +184,8 @@ public class XAdESXLSignatureFacet imple
         
         RevocationData tsaRevocationDataXadesT = new RevocationData();
         LOG.log(POILogger.DEBUG, "creating XAdES-T time-stamp");
-        XAdESTimeStampType signatureTimeStamp = createXAdESTimeStamp(
-            Collections.singletonList(nlSigVal.item(0)), 
tsaRevocationDataXadesT, this.c14nAlgoId, this.timeStampService);
+        XAdESTimeStampType signatureTimeStamp = createXAdESTimeStamp
+            (Collections.singletonList(nlSigVal.item(0)), 
tsaRevocationDataXadesT);
 
         // marshal the XAdES-T extension
         unsignedSigProps.addNewSignatureTimeStamp().set(signatureTimeStamp);
@@ -224,7 +196,7 @@ public class XAdESXLSignatureFacet imple
             insertXChild(unsignedSigProps, validationData);
         }
 
-        if (null == this.revocationDataService) {
+        if (signatureConfig.getRevocationDataService() == null) {
             /*
              * Without revocation data service we cannot construct the XAdES-C
              * extension.
@@ -237,21 +209,23 @@ public class XAdESXLSignatureFacet imple
             unsignedSigProps.addNewCompleteCertificateRefs();
 
         CertIDListType certIdList = completeCertificateRefs.addNewCertRefs();
-        for (int certIdx = 1; certIdx < signingCertificateChain.size(); 
certIdx++) {
-            /*
-             * We skip the signing certificate itself according to section
-             * 4.4.3.2 of the XAdES 1.4.1 specification.
-             */
-            X509Certificate certificate = signingCertificateChain.get(certIdx);
-            CertIDType certId = certIdList.addNewCert();
-            XAdESSignatureFacet.setCertID(certId, certificate, this.hashAlgo, 
false);
+        /*
+         * We skip the signing certificate itself according to section
+         * 4.4.3.2 of the XAdES 1.4.1 specification.
+         */
+        int chainSize = signingCertificateChain.size();
+        if (chainSize > 1) {
+            for (X509Certificate cert : signingCertificateChain.subList(1, 
chainSize)) {
+                CertIDType certId = certIdList.addNewCert();
+                XAdESSignatureFacet.setCertID(certId, signatureConfig, false, 
cert);
+            }
         }
 
         // XAdES-C: complete revocation refs
         CompleteRevocationRefsType completeRevocationRefs = 
             unsignedSigProps.addNewCompleteRevocationRefs();
-        RevocationData revocationData = this.revocationDataService
-                .getRevocationData(signingCertificateChain);
+        RevocationData revocationData = 
signatureConfig.getRevocationDataService()
+            .getRevocationData(signingCertificateChain);
         if (revocationData.hasCRLs()) {
             CRLRefsType crlRefs = completeRevocationRefs.addNewCRLRefs();
             completeRevocationRefs.setCRLRefs(crlRefs);
@@ -276,7 +250,7 @@ public class XAdESXLSignatureFacet imple
                 crlIdentifier.setNumber(getCrlNumber(crl));
 
                 DigestAlgAndValueType digestAlgAndValue = 
crlRef.addNewDigestAlgAndValue();
-                XAdESSignatureFacet.setDigestAlgAndValue(digestAlgAndValue, 
encodedCrl, this.hashAlgo);
+                XAdESSignatureFacet.setDigestAlgAndValue(digestAlgAndValue, 
encodedCrl, signatureConfig.getDigestAlgo());
             }
         }
         if (revocationData.hasOCSPs()) {
@@ -286,7 +260,7 @@ public class XAdESXLSignatureFacet imple
                     OCSPRefType ocspRef = ocspRefs.addNewOCSPRef();
     
                     DigestAlgAndValueType digestAlgAndValue = 
ocspRef.addNewDigestAlgAndValue();
-                    
XAdESSignatureFacet.setDigestAlgAndValue(digestAlgAndValue, ocsp, 
this.hashAlgo);
+                    
XAdESSignatureFacet.setDigestAlgAndValue(digestAlgAndValue, ocsp, 
signatureConfig.getDigestAlgo());
     
                     OCSPIdentifierType ocspIdentifier = 
ocspRef.addNewOCSPIdentifier();
                     
@@ -329,9 +303,8 @@ public class XAdESXLSignatureFacet imple
 
         RevocationData tsaRevocationDataXadesX1 = new RevocationData();
         LOG.log(POILogger.DEBUG, "creating XAdES-X time-stamp");
-        XAdESTimeStampType timeStampXadesX1 = createXAdESTimeStamp(
-                timeStampNodesXadesX1, tsaRevocationDataXadesX1,
-                this.c14nAlgoId, this.timeStampService);
+        XAdESTimeStampType timeStampXadesX1 = createXAdESTimeStamp
+            (timeStampNodesXadesX1, tsaRevocationDataXadesX1);
         if (tsaRevocationDataXadesX1.hasRevocationDataEntries()) {
             ValidationDataType timeStampXadesX1ValidationData = 
createValidationData(tsaRevocationDataXadesX1);
             insertXChild(unsignedSigProps, timeStampXadesX1ValidationData);
@@ -406,26 +379,19 @@ public class XAdESXLSignatureFacet imple
         }
     }
 
-    public static XAdESTimeStampType createXAdESTimeStamp(
+    private XAdESTimeStampType createXAdESTimeStamp(
             List<Node> nodeList,
-            RevocationData revocationData,
-            String c14nAlgoId,
-            TimeStampService timeStampService) {
+            RevocationData revocationData) {
         byte[] c14nSignatureValueElement = getC14nValue(nodeList, c14nAlgoId);
 
-        return createXAdESTimeStamp(c14nSignatureValueElement, revocationData,
-                c14nAlgoId, timeStampService);
+        return createXAdESTimeStamp(c14nSignatureValueElement, revocationData);
     }
 
-    public static XAdESTimeStampType createXAdESTimeStamp(
-            byte[] data,
-            RevocationData revocationData,
-            String c14nAlgoId,
-            TimeStampService timeStampService) {
+    private XAdESTimeStampType createXAdESTimeStamp(byte[] data, 
RevocationData revocationData) {
         // create the time-stamp
         byte[] timeStampToken;
         try {
-            timeStampToken = timeStampService.timeStamp(data, revocationData);
+            timeStampToken = signatureConfig.getTspService().timeStamp(data, 
revocationData);
         } catch (Exception e) {
             throw new RuntimeException("error while creating a time-stamp: "
                     + e.getMessage(), e);

Modified: 
poi/branches/xml_signature/src/ooxml/java/org/apache/poi/poifs/crypt/dsig/services/TSPTimeStampService.java
URL: 
http://svn.apache.org/viewvc/poi/branches/xml_signature/src/ooxml/java/org/apache/poi/poifs/crypt/dsig/services/TSPTimeStampService.java?rev=1626646&r1=1626645&r2=1626646&view=diff
==============================================================================
--- 
poi/branches/xml_signature/src/ooxml/java/org/apache/poi/poifs/crypt/dsig/services/TSPTimeStampService.java
 (original)
+++ 
poi/branches/xml_signature/src/ooxml/java/org/apache/poi/poifs/crypt/dsig/services/TSPTimeStampService.java
 Sun Sep 21 22:48:20 2014
@@ -25,6 +25,7 @@
 package org.apache.poi.poifs.crypt.dsig.services;
 
 import java.io.ByteArrayOutputStream;
+import java.io.IOException;
 import java.io.OutputStream;
 import java.math.BigInteger;
 import java.net.HttpURLConnection;
@@ -45,14 +46,17 @@ import javax.xml.bind.DatatypeConverter;
 
 import org.apache.poi.poifs.crypt.CryptoFunctions;
 import org.apache.poi.poifs.crypt.HashAlgorithm;
+import org.apache.poi.poifs.crypt.dsig.SignatureConfig;
 import org.apache.poi.util.IOUtils;
 import org.apache.poi.util.POILogFactory;
 import org.apache.poi.util.POILogger;
+import org.bouncycastle.asn1.ASN1ObjectIdentifier;
 import org.bouncycastle.asn1.cmp.PKIFailureInfo;
+import org.bouncycastle.asn1.nist.NISTObjectIdentifiers;
 import org.bouncycastle.asn1.x500.X500Name;
+import org.bouncycastle.asn1.x509.X509ObjectIdentifiers;
 import org.bouncycastle.cert.X509CertificateHolder;
 import org.bouncycastle.cert.jcajce.JcaX509CertificateConverter;
-import org.bouncycastle.cert.jcajce.JcaX509ExtensionUtils;
 import org.bouncycastle.cms.DefaultCMSSignatureAlgorithmNameGenerator;
 import org.bouncycastle.cms.SignerId;
 import org.bouncycastle.cms.SignerInformationVerifier;
@@ -75,185 +79,63 @@ public class TSPTimeStampService impleme
 
     private static final POILogger LOG = 
POILogFactory.getLogger(TSPTimeStampService.class);
 
-    static {
-        CryptoFunctions.registerBouncyCastle();
-    }
-
-    public static final String DEFAULT_USER_AGENT = "POI XmlSign Service TSP 
Client";
-
-    private final String tspServiceUrl;
-
-    private String requestPolicy;
-
-    private final String userAgent;
-
-    private final TimeStampServiceValidator validator;
-
-    private String username;
-
-    private String password;
-
-    private String proxyHost;
-
-    private int proxyPort;
-
-    private HashAlgorithm digestAlgo;
-
-    private String digestAlgoOid;
-
-    private String requestContentType = 
"application/timestamp-query;charset=ISO-8859-1";
-
-    private String responseContentType = "application/timestamp-reply";
-    
-    public TSPTimeStampService(String tspServiceUrl,
-            TimeStampServiceValidator validator) {
-        this(tspServiceUrl, validator, null, null);
-    }
-
-    /**
-     * Main constructor.
-     * 
-     * @param tspServiceUrl
-     *            the URL of the TSP service.
-     * @param validator
-     *            the trust validator used to validate incoming TSP response
-     *            signatures.
-     * @param requestPolicy
-     *            the optional TSP request policy.
-     * @param userAgent
-     *            the optional User-Agent TSP request header value.
-     */
-    public TSPTimeStampService(String tspServiceUrl,
-            TimeStampServiceValidator validator, String requestPolicy,
-            String userAgent) {
-        if (null == tspServiceUrl) {
-            throw new IllegalArgumentException("TSP service URL required");
-        }
-        this.tspServiceUrl = tspServiceUrl;
-
-        if (null == validator) {
-            throw new IllegalArgumentException("TSP validator required");
-        }
-        this.validator = validator;
-
-        this.requestPolicy = requestPolicy;
-
-        if (null != userAgent) {
-            this.userAgent = userAgent;
-        } else {
-            this.userAgent = DEFAULT_USER_AGENT;
-        }
-        
-        setDigestAlgo(HashAlgorithm.sha1);
-    }
-
-    /**
-     * Sets the request policy OID.
-     * 
-     * @param policyOid
-     */
-    public void setRequestPolicy(String policyOid) {
-        this.requestPolicy = policyOid;
-    }
-
-    /**
-     * Sets the credentials used in case the TSP service requires
-     * authentication.
-     * 
-     * @param username
-     * @param password
-     */
-    public void setAuthenticationCredentials(String username, String password) 
{
-        this.username = username;
-        this.password = password;
-    }
-
-    /**
-     * Resets the authentication credentials.
-     */
-    public void resetAuthenticationCredentials() {
-        this.username = null;
-        this.password = null;
-    }
+    private SignatureConfig signatureConfig;
 
     /**
-     * Sets the digest algorithm used for time-stamping data. Example value:
-     * "SHA-1".
-     * 
-     * @param digestAlgo
+     * Maps the digest algorithm to corresponding OID value.
      */
-    public void setDigestAlgo(HashAlgorithm digestAlgo) {
+    public ASN1ObjectIdentifier mapDigestAlgoToOID(HashAlgorithm digestAlgo) {
         switch (digestAlgo) {
-        case sha1:
-            digestAlgoOid = "1.3.14.3.2.26";
-            break;
-        case sha256:
-            digestAlgoOid = "2.16.840.1.101.3.4.2.1";
-            break;
-        case sha384:
-            digestAlgoOid = "2.16.840.1.101.3.4.2.2";
-            break;
-        case sha512:
-            digestAlgoOid = "2.16.840.1.101.3.4.2.3";
-            break;
+        case sha1:   return X509ObjectIdentifiers.id_SHA1;
+        case sha256: return NISTObjectIdentifiers.id_sha256;
+        case sha384: return NISTObjectIdentifiers.id_sha384;
+        case sha512: return NISTObjectIdentifiers.id_sha512;
         default:
             throw new IllegalArgumentException("unsupported digest algo: " + 
digestAlgo);
         }
-
-        this.digestAlgo = digestAlgo;
-    }
-
-    /**
-     * Configures the HTTP proxy settings to be used to connect to the TSP
-     * service.
-     * 
-     * @param proxyHost
-     * @param proxyPort
-     */
-    public void setProxy(String proxyHost, int proxyPort) {
-        this.proxyHost = proxyHost;
-        this.proxyPort = proxyPort;
-    }
-
-    /**
-     * Resets the HTTP proxy settings.
-     */
-    public void resetProxy() {
-        this.proxyHost = null;
-        this.proxyPort = 0;
     }
 
+    @SuppressWarnings("unchecked")
     public byte[] timeStamp(byte[] data, RevocationData revocationData)
             throws Exception {
         // digest the message
-        MessageDigest messageDigest = 
CryptoFunctions.getMessageDigest(this.digestAlgo);
+        MessageDigest messageDigest = 
CryptoFunctions.getMessageDigest(signatureConfig.getTspDigestAlgo());
         byte[] digest = messageDigest.digest(data);
 
         // generate the TSP request
         BigInteger nonce = new BigInteger(128, new SecureRandom());
         TimeStampRequestGenerator requestGenerator = new 
TimeStampRequestGenerator();
         requestGenerator.setCertReq(true);
-        if (null != this.requestPolicy) {
-            requestGenerator.setReqPolicy(this.requestPolicy);
+        String requestPolicy = signatureConfig.getTspRequestPolicy();
+        if (requestPolicy != null) {
+            requestGenerator.setReqPolicy(new 
ASN1ObjectIdentifier(requestPolicy));
         }
-        TimeStampRequest request = 
requestGenerator.generate(this.digestAlgoOid, digest, nonce);
+        ASN1ObjectIdentifier digestAlgoOid = 
mapDigestAlgoToOID(signatureConfig.getTspDigestAlgo());
+        TimeStampRequest request = requestGenerator.generate(digestAlgoOid, 
digest, nonce);
         byte[] encodedRequest = request.getEncoded();
 
         // create the HTTP POST request
-        Proxy proxy = (this.proxyHost != null)
-            ? new Proxy(Proxy.Type.HTTP, new InetSocketAddress(this.proxyHost, 
this.proxyPort))
-            : Proxy.NO_PROXY;
-        HttpURLConnection huc = (HttpURLConnection)new 
URL(this.tspServiceUrl).openConnection(proxy);
+        Proxy proxy = Proxy.NO_PROXY;
+        if (signatureConfig.getProxyUrl() != null) {
+            URL proxyUrl = new URL(signatureConfig.getProxyUrl());
+            String host = proxyUrl.getHost();
+            int port = proxyUrl.getPort();
+            proxy = new Proxy(Proxy.Type.HTTP, new InetSocketAddress(host, 
(port == -1 ? 80 : port)));
+        }
+        
+        HttpURLConnection huc = (HttpURLConnection)new 
URL(signatureConfig.getTspUrl()).openConnection(proxy);
         
-        if (null != this.username) {
-            String userPassword = this.username + ":" + this.password;
+        if (signatureConfig.getTspUser() != null) {
+            String userPassword = signatureConfig.getTspUser() + ":" + 
signatureConfig.getTspPass();
             String encoding = 
DatatypeConverter.printBase64Binary(userPassword.getBytes(Charset.forName("iso-8859-1")));
             huc.setRequestProperty("Authorization", "Basic " + encoding);
         }
 
         huc.setDoOutput(true); // also sets method to POST.
-        huc.setRequestProperty("User-Agent", this.userAgent);
-        huc.setRequestProperty("Content-Type", requestContentType);
+        huc.setRequestProperty("User-Agent", signatureConfig.getUserAgent());
+        huc.setRequestProperty("Content-Type", 
signatureConfig.isTspOldProtocol()
+            ? "application/timestamp-request"
+            : "application/timestamp-query;charset=ISO-8859-1");
         
         OutputStream hucOut = huc.getOutputStream();
         hucOut.write(encodedRequest);
@@ -263,8 +145,8 @@ public class TSPTimeStampService impleme
         
         int statusCode = huc.getResponseCode();
         if (statusCode != 200) {
-            LOG.log(POILogger.ERROR, "Error contacting TSP server ", 
this.tspServiceUrl);
-            throw new Exception("Error contacting TSP server " + 
this.tspServiceUrl);
+            LOG.log(POILogger.ERROR, "Error contacting TSP server ", 
signatureConfig.getTspUrl());
+            throw new IOException("Error contacting TSP server " + 
signatureConfig.getTspUrl());
         }
 
         // HTTP input validation
@@ -277,7 +159,10 @@ public class TSPTimeStampService impleme
         IOUtils.copy(huc.getInputStream(), bos);
         LOG.log(POILogger.DEBUG, "response content: ", bos.toString());
         
-        if (!contentType.startsWith(responseContentType)) {
+        if (!contentType.startsWith(signatureConfig.isTspOldProtocol() 
+            ? "application/timestamp-response"
+            : "application/timestamp-reply"
+        )) {
             throw new RuntimeException("invalid Content-Type: " + contentType);
         }
         
@@ -311,7 +196,6 @@ public class TSPTimeStampService impleme
 
         // TSP signer certificates retrieval
         Collection<X509CertificateHolder> certificates = 
timeStampToken.getCertificates().getMatches(null);
-        JcaX509ExtensionUtils utils = new JcaX509ExtensionUtils();
         
         X509CertificateHolder signerCert = null;
         Map<X500Name, X509CertificateHolder> certificateMap = new 
HashMap<X500Name, X509CertificateHolder>();
@@ -324,9 +208,8 @@ public class TSPTimeStampService impleme
         }
 
         // TSP signer cert path building
-        if (null == signerCert) {
-            throw new RuntimeException(
-                    "TSP response token has no signer certificate");
+        if (signerCert == null) {
+            throw new RuntimeException("TSP response token has no signer 
certificate");
         }
         List<X509Certificate> tspCertificateChain = new 
ArrayList<X509Certificate>();
         JcaX509CertificateConverter x509converter = new 
JcaX509CertificateConverter();
@@ -353,7 +236,9 @@ public class TSPTimeStampService impleme
         timeStampToken.validate(verifier);
 
         // verify TSP signer certificate
-        this.validator.validate(tspCertificateChain, revocationData);
+        if (signatureConfig.getTspValidator() != null) {
+            signatureConfig.getTspValidator().validate(tspCertificateChain, 
revocationData);
+        }
 
         LOG.log(POILogger.DEBUG, "time-stamp token time: "
                 + timeStampToken.getTimeStampInfo().getGenTime());
@@ -362,19 +247,7 @@ public class TSPTimeStampService impleme
         return timestamp;
     }
 
-    /**
-     * usually the request content type is 
"application/timestamp-query;charset=ISO-8859-1",
-     * but some timestamp server use a different content type
-     */
-    public void setRequestContentType(String requestContentType) {
-        this.requestContentType = requestContentType;
-    }
-
-    /**
-     * usually the response content type is "application/timestamp-reply",
-     * but some timestamp server use a different content type
-     */
-    public void setResponseContentType(String responseContentType) {
-        this.responseContentType = responseContentType;
+    public void setSignatureConfig(SignatureConfig signatureConfig) {
+        this.signatureConfig = signatureConfig;
     }
 }
\ No newline at end of file

Modified: 
poi/branches/xml_signature/src/ooxml/java/org/apache/poi/poifs/crypt/dsig/services/TimeStampService.java
URL: 
http://svn.apache.org/viewvc/poi/branches/xml_signature/src/ooxml/java/org/apache/poi/poifs/crypt/dsig/services/TimeStampService.java?rev=1626646&r1=1626645&r2=1626646&view=diff
==============================================================================
--- 
poi/branches/xml_signature/src/ooxml/java/org/apache/poi/poifs/crypt/dsig/services/TimeStampService.java
 (original)
+++ 
poi/branches/xml_signature/src/ooxml/java/org/apache/poi/poifs/crypt/dsig/services/TimeStampService.java
 Sun Sep 21 22:48:20 2014
@@ -24,6 +24,8 @@
 
 package org.apache.poi.poifs.crypt.dsig.services;
 
+import org.apache.poi.poifs.crypt.dsig.SignatureConfig.SignatureConfigurable;
+
 
 /**
  * Interface for a time-stamp service.
@@ -31,7 +33,7 @@ package org.apache.poi.poifs.crypt.dsig.
  * @author Frank Cornelis
  * 
  */
-public interface TimeStampService {
+public interface TimeStampService extends SignatureConfigurable {
 
     /**
      * Gives back the encoded time-stamp token for the given array of data

Modified: 
poi/branches/xml_signature/src/ooxml/testcases/org/apache/poi/poifs/crypt/TestSignatureInfo.java
URL: 
http://svn.apache.org/viewvc/poi/branches/xml_signature/src/ooxml/testcases/org/apache/poi/poifs/crypt/TestSignatureInfo.java?rev=1626646&r1=1626645&r2=1626646&view=diff
==============================================================================
--- 
poi/branches/xml_signature/src/ooxml/testcases/org/apache/poi/poifs/crypt/TestSignatureInfo.java
 (original)
+++ 
poi/branches/xml_signature/src/ooxml/testcases/org/apache/poi/poifs/crypt/TestSignatureInfo.java
 Sun Sep 21 22:48:20 2014
@@ -56,15 +56,14 @@ import javax.xml.crypto.dsig.dom.DOMVali
 import org.apache.poi.POIDataSamples;
 import org.apache.poi.openxml4j.opc.OPCPackage;
 import org.apache.poi.openxml4j.opc.PackageAccess;
+import org.apache.poi.poifs.crypt.dsig.SignatureConfig;
 import org.apache.poi.poifs.crypt.dsig.SignatureInfo;
-import org.apache.poi.poifs.crypt.dsig.SignatureInfoConfig;
 import org.apache.poi.poifs.crypt.dsig.facets.EnvelopedSignatureFacet;
 import org.apache.poi.poifs.crypt.dsig.facets.KeyInfoSignatureFacet;
 import org.apache.poi.poifs.crypt.dsig.facets.XAdESSignatureFacet;
 import org.apache.poi.poifs.crypt.dsig.facets.XAdESXLSignatureFacet;
 import org.apache.poi.poifs.crypt.dsig.services.RevocationData;
 import org.apache.poi.poifs.crypt.dsig.services.RevocationDataService;
-import org.apache.poi.poifs.crypt.dsig.services.TSPTimeStampService;
 import org.apache.poi.poifs.crypt.dsig.services.TimeStampService;
 import org.apache.poi.poifs.crypt.dsig.services.TimeStampServiceValidator;
 import org.apache.poi.poifs.crypt.dsig.spi.DigestInfo;
@@ -107,7 +106,7 @@ public class TestSignatureInfo {
         cal.setTimeZone(TimeZone.getTimeZone("UTC"));
         cal.set(2014, 7, 6, 21, 42, 12);
     }
-    
+
     @Test
     public void getSignerUnsigned() throws Exception {
         String testFiles[] = { 
@@ -119,7 +118,7 @@ public class TestSignatureInfo {
         
         for (String testFile : testFiles) {
             OPCPackage pkg = OPCPackage.open(testdata.getFile(testFile), 
PackageAccess.READ);
-            SignatureInfoConfig sic = new SignatureInfoConfig();
+            SignatureConfig sic = new SignatureConfig();
             sic.setOpcPackage(pkg);
             SignatureInfo si = new SignatureInfo();
             si.setSignatureConfig(sic);
@@ -148,7 +147,7 @@ public class TestSignatureInfo {
         
         for (String testFile : testFiles) {
             OPCPackage pkg = OPCPackage.open(testdata.getFile(testFile), 
PackageAccess.READ);
-            SignatureInfoConfig sic = new SignatureInfoConfig();
+            SignatureConfig sic = new SignatureConfig();
             sic.setOpcPackage(pkg);
             SignatureInfo si = new SignatureInfo();
             si.setSignatureConfig(sic);
@@ -169,7 +168,7 @@ public class TestSignatureInfo {
     public void getMultiSigners() throws Exception {
         String testFile = "hello-world-signed-twice.docx";
         OPCPackage pkg = OPCPackage.open(testdata.getFile(testFile), 
PackageAccess.READ);
-        SignatureInfoConfig sic = new SignatureInfoConfig();
+        SignatureConfig sic = new SignatureConfig();
         sic.setOpcPackage(pkg);
         SignatureInfo si = new SignatureInfo();
         si.setSignatureConfig(sic);
@@ -200,11 +199,10 @@ public class TestSignatureInfo {
         initKeyPair("Test", "CN=Test");
         String testFile = "hello-world-unsigned.xlsx";
         OPCPackage pkg = OPCPackage.open(copy(testdata.getFile(testFile)), 
PackageAccess.READ_WRITE);
-        SignatureInfoConfig sic = new SignatureInfoConfig();
+        SignatureConfig sic = new SignatureConfig();
         sic.setOpcPackage(pkg);
         sic.setKey(keyPair.getPrivate());
         sic.setSigningCertificateChain(Collections.singletonList(x509));
-        sic.addDefaultFacets();
         SignatureInfo si = new SignatureInfo();
         si.setSignatureConfig(sic);
         // hash > sha1 doesn't work in excel viewer ...
@@ -224,7 +222,7 @@ public class TestSignatureInfo {
         final X509CRL crl = PkiTestUtils.generateCrl(x509, 
keyPair.getPrivate());
         
         // setup
-        SignatureInfoConfig signatureConfig = new SignatureInfoConfig();
+        SignatureConfig signatureConfig = new SignatureConfig();
         signatureConfig.setOpcPackage(pkg);
         signatureConfig.setKey(keyPair.getPrivate());
 
@@ -237,23 +235,26 @@ public class TestSignatureInfo {
         certificateChain.add(x509);
         signatureConfig.setSigningCertificateChain(certificateChain);
         
-        signatureConfig.addSignatureFacet(new 
EnvelopedSignatureFacet(signatureConfig));
-        signatureConfig.addSignatureFacet(new KeyInfoSignatureFacet(true, 
false, false));
-        signatureConfig.addSignatureFacet(new 
XAdESSignatureFacet(signatureConfig));
+        signatureConfig.addSignatureFacet(new EnvelopedSignatureFacet());
+        signatureConfig.addSignatureFacet(new KeyInfoSignatureFacet());
+        signatureConfig.addSignatureFacet(new XAdESSignatureFacet());
+        signatureConfig.addSignatureFacet(new XAdESXLSignatureFacet());
         
-
+        boolean mockTsp = false;
         // http://timestamping.edelweb.fr/service/tsp
         // http://tsa.belgium.be/connect
-        String tspServiceUrl = "http://timestamping.edelweb.fr/service/tsp";;
+        
signatureConfig.setTspUrl("http://timestamping.edelweb.fr/service/tsp";);
+        signatureConfig.setTspOldProtocol(true);
 
-        TimeStampService timeStampService;
-        if (tspServiceUrl == null) {
-            timeStampService = new TimeStampService(){
+        if (mockTsp) {
+            TimeStampService tspService = new TimeStampService(){
                 public byte[] timeStamp(byte[] data, RevocationData 
revocationData) throws Exception {
                     revocationData.addCRL(crl);
                     return "time-stamp-token".getBytes();                
                 }
+                public void setSignatureConfig(SignatureConfig config) {}
             };
+            signatureConfig.setTspService(tspService);
         } else {
             TimeStampServiceValidator tspValidator = new 
TimeStampServiceValidator() {
                 @Override
@@ -265,13 +266,8 @@ public class TestSignatureInfo {
                     }
                 }
             };
-            
-            TSPTimeStampService tspService = new 
TSPTimeStampService(tspServiceUrl, tspValidator);
-            if (tspServiceUrl.contains("edelweb")) {
-                
tspService.setRequestContentType("application/timestamp-request");
-                
tspService.setResponseContentType("application/timestamp-response");
-            }
-            timeStampService = tspService;
+            signatureConfig.setTspValidator(tspValidator);
+            
signatureConfig.setTspOldProtocol(signatureConfig.getTspUrl().contains("edelweb"));
         }
         
         final RevocationData revocationData = new RevocationData();
@@ -285,9 +281,8 @@ public class TestSignatureInfo {
                 return revocationData;
             }
         };
+        signatureConfig.setRevocationDataService(revocationDataService);
 
-        XAdESXLSignatureFacet xadesXLSignatureFacet = new 
XAdESXLSignatureFacet(
-                timeStampService, revocationDataService);
         SignatureInfo si = new SignatureInfo();
         si.setSignatureConfig(signatureConfig);
         
@@ -348,13 +343,12 @@ public class TestSignatureInfo {
     private OPCPackage sign(OPCPackage pkgCopy, String alias, String signerDn, 
int signerCount) throws Exception {
         initKeyPair(alias, signerDn);
 
-        SignatureInfoConfig signatureConfig = new SignatureInfoConfig();
+        SignatureConfig signatureConfig = new SignatureConfig();
         signatureConfig.setKey(keyPair.getPrivate());
         
signatureConfig.setSigningCertificateChain(Collections.singletonList(x509));
         signatureConfig.setExecutionTime(cal.getTime());
         signatureConfig.setDigestAlgo(HashAlgorithm.sha1);
         signatureConfig.setOpcPackage(pkgCopy);
-        signatureConfig.addDefaultFacets();
         
         SignatureInfo si = new SignatureInfo();
         si.setSignatureConfig(signatureConfig);



---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to