Author: kiwiwings
Date: Wed Sep 17 23:12:16 2014
New Revision: 1625850
URL: http://svn.apache.org/r1625850
Log:
Switched to config object
Added:
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/OOXMLSignatureFacet.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/services/SignatureService.java
poi/branches/xml_signature/src/ooxml/java/org/apache/poi/poifs/crypt/dsig/services/XmlSignatureService.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=1625850&r1=1625849&r2=1625850&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
Wed Sep 17 23:12:16 2014
@@ -37,7 +37,6 @@ import javax.xml.crypto.XMLCryptoContext
import javax.xml.crypto.dsig.XMLSignatureFactory;
import org.apache.poi.openxml4j.exceptions.InvalidFormatException;
-import org.apache.poi.openxml4j.opc.OPCPackage;
import org.apache.poi.openxml4j.opc.PackagePart;
import org.apache.poi.openxml4j.opc.PackagePartName;
import org.apache.poi.openxml4j.opc.PackagingURIHelper;
@@ -51,18 +50,17 @@ public class OOXMLURIDereferencer implem
private static final POILogger LOG =
POILogFactory.getLogger(OOXMLURIDereferencer.class);
- private final OPCPackage pkg;
+ private SignatureInfoConfig signatureConfig;
+ private URIDereferencer baseUriDereferencer;
- private final URIDereferencer baseUriDereferencer;
-
- public OOXMLURIDereferencer(OPCPackage pkg) {
- if (null == pkg) {
- throw new IllegalArgumentException("OPCPackage is null");
- }
- this.pkg = pkg;
+ public OOXMLURIDereferencer() {
XMLSignatureFactory xmlSignatureFactory =
SignatureInfo.getSignatureFactory();
this.baseUriDereferencer = xmlSignatureFactory.getURIDereferencer();
}
+
+ public void setSignatureConfig(SignatureInfoConfig signatureConfig) {
+ this.signatureConfig = signatureConfig;
+ }
public Data dereference(URIReference uriReference, XMLCryptoContext
context) throws URIReferenceException {
if (null == uriReference) {
@@ -109,6 +107,6 @@ public class OOXMLURIDereferencer implem
return null;
}
- return pkg.getPart(ppn);
+ return signatureConfig.getOpcPackage().getPart(ppn);
}
}
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=1625850&r1=1625849&r2=1625850&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
Wed Sep 17 23:12:16 2014
@@ -32,7 +32,6 @@ import java.security.Provider;
import java.security.cert.X509Certificate;
import java.util.ArrayList;
import java.util.Collections;
-import java.util.Date;
import java.util.List;
import javax.crypto.Cipher;
@@ -125,19 +124,24 @@ public class SignatureInfo {
public void confirmSignature(PrivateKey key, X509Certificate x509,
HashAlgorithm hashAlgo)
throws NoSuchAlgorithmException, IOException, MarshalException,
ParserConfigurationException, XmlException {
- XmlSignatureService signatureService =
createSignatureService(hashAlgo, pkg);
+ SignatureInfoConfig signatureConfig = new SignatureInfoConfig();
+ signatureConfig.setOpcPackage(pkg);
+ signatureConfig.setDigestAlgo(hashAlgo);
+
signatureConfig.setSigningCertificateChain(Collections.singletonList(x509));
+ signatureConfig.setKey(key);
+ signatureConfig.addDefaultFacets();
+ XmlSignatureService signatureService = new
XmlSignatureService(signatureConfig);
Document document = DocumentHelper.createDocument();
// operate
- List<X509Certificate> x509Chain = Collections.singletonList(x509);
- DigestInfo digestInfo = signatureService.preSign(document, null, key,
x509Chain, null, null, null);
+ DigestInfo digestInfo = signatureService.preSign(document, null);
// setup: key material, signature value
byte[] signatureValue = signDigest(key, hashAlgo,
digestInfo.digestValue);
// operate: postSign
- signatureService.postSign(document, signatureValue,
Collections.singletonList(x509));
+ signatureService.postSign(document, signatureValue);
}
public static byte[] signDigest(PrivateKey key, HashAlgorithm hashAlgo,
byte digest[]) {
@@ -156,12 +160,6 @@ public class SignatureInfo {
}
}
- public XmlSignatureService createSignatureService(HashAlgorithm hashAlgo,
OPCPackage pkg) {
- XmlSignatureService signatureService = new
XmlSignatureService(hashAlgo, pkg);
- signatureService.initFacets(new Date());
- return signatureService;
- }
-
public List<X509Certificate> getSigners() {
initXmlProvider();
List<X509Certificate> signers = new ArrayList<X509Certificate>();
@@ -176,19 +174,20 @@ public class SignatureInfo {
LOG.log(POILogger.DEBUG, "no signature resources");
allValid = false;
}
+
+ SignatureInfoConfig signatureConfig = new SignatureInfoConfig();
+ signatureConfig.setOpcPackage(pkg);
for (PackagePart signaturePart : signatureParts) {
KeyInfoKeySelector keySelector = new KeyInfoKeySelector();
try {
Document doc =
DocumentHelper.readDocument(signaturePart.getInputStream());
- // dummy call to createSignatureService to tweak document
afterwards
- createSignatureService(HashAlgorithm.sha1,
pkg).registerIds(doc);
+ XmlSignatureService.registerIds(doc);
DOMValidateContext domValidateContext = new
DOMValidateContext(keySelector, doc);
domValidateContext.setProperty("org.jcp.xml.dsig.validateManifests",
Boolean.TRUE);
- OOXMLURIDereferencer dereferencer = new
OOXMLURIDereferencer(pkg);
- domValidateContext.setURIDereferencer(dereferencer);
+
domValidateContext.setURIDereferencer(signatureConfig.getUriDereferencer());
XMLSignatureFactory xmlSignatureFactory =
getSignatureFactory();
XMLSignature xmlSignature =
xmlSignatureFactory.unmarshalXMLSignature(domValidateContext);
Added:
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/SignatureInfoConfig.java?rev=1625850&view=auto
==============================================================================
---
poi/branches/xml_signature/src/ooxml/java/org/apache/poi/poifs/crypt/dsig/SignatureInfoConfig.java
(added)
+++
poi/branches/xml_signature/src/ooxml/java/org/apache/poi/poifs/crypt/dsig/SignatureInfoConfig.java
Wed Sep 17 23:12:16 2014
@@ -0,0 +1,163 @@
+/* ====================================================================
+ 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.
+==================================================================== */
+
+package org.apache.poi.poifs.crypt.dsig;
+
+import java.security.PrivateKey;
+import java.security.cert.X509Certificate;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+
+import javax.xml.crypto.URIDereferencer;
+
+import org.apache.poi.openxml4j.opc.OPCPackage;
+import org.apache.poi.poifs.crypt.HashAlgorithm;
+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.SignaturePolicyService;
+import org.apache.poi.poifs.crypt.dsig.facets.XAdESSignatureFacet;
+import org.apache.poi.poifs.crypt.dsig.spi.AddressDTO;
+import org.apache.poi.poifs.crypt.dsig.spi.IdentityDTO;
+
+public class SignatureInfoConfig {
+
+ 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;
+ private SignaturePolicyService signaturePolicyService;
+ private URIDereferencer uriDereferencer;
+
+ public SignatureInfoConfig() {
+ OOXMLURIDereferencer uriDereferencer = new OOXMLURIDereferencer();
+ uriDereferencer.setSignatureConfig(this);
+ this.uriDereferencer = uriDereferencer;
+ }
+
+ 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.
+ *
+ * @return
+ */
+ public XAdESSignatureFacet getXAdESSignatureFacet() {
+ for (SignatureFacet sf : getSignatureFacets()) {
+ if (sf instanceof XAdESSignatureFacet) {
+ return (XAdESSignatureFacet)sf;
+ }
+ }
+ return null;
+ }
+
+
+ public List<SignatureFacet> getSignatureFacets() {
+ return signatureFacets;
+ }
+ public void setSignatureFacets(List<SignatureFacet> signatureFacets) {
+ this.signatureFacets = signatureFacets;
+ }
+ public HashAlgorithm getDigestAlgo() {
+ return digestAlgo;
+ }
+ public void setDigestAlgo(HashAlgorithm digestAlgo) {
+ this.digestAlgo = digestAlgo;
+ }
+ public OPCPackage getOpcPackage() {
+ return opcPackage;
+ }
+ public void setOpcPackage(OPCPackage opcPackage) {
+ this.opcPackage = opcPackage;
+ }
+ public PrivateKey getKey() {
+ return key;
+ }
+ public void setKey(PrivateKey key) {
+ this.key = key;
+ }
+ public List<X509Certificate> getSigningCertificateChain() {
+ return signingCertificateChain;
+ }
+ public void setSigningCertificateChain(
+ List<X509Certificate> signingCertificateChain) {
+ this.signingCertificateChain = signingCertificateChain;
+ }
+ public IdentityDTO getIdentity() {
+ return identity;
+ }
+ public void setIdentity(IdentityDTO identity) {
+ this.identity = identity;
+ }
+ public AddressDTO getAddress() {
+ return address;
+ }
+ public void setAddress(AddressDTO address) {
+ this.address = address;
+ }
+ public byte[] getPhoto() {
+ return photo;
+ }
+ public void setPhoto(byte[] photo) {
+ this.photo = photo;
+ }
+ public Date getExecutionTime() {
+ return executionTime;
+ }
+ public void setExecutionTime(Date executionTime) {
+ this.executionTime = executionTime;
+ }
+ public SignaturePolicyService getSignaturePolicyService() {
+ return signaturePolicyService;
+ }
+ public void setSignaturePolicyService(
+ SignaturePolicyService signaturePolicyService) {
+ this.signaturePolicyService = signaturePolicyService;
+ }
+ public URIDereferencer getUriDereferencer() {
+ return uriDereferencer;
+ }
+ public void setUriDereferencer(URIDereferencer uriDereferencer) {
+ this.uriDereferencer = uriDereferencer;
+ }
+
+
+}
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=1625850&r1=1625849&r2=1625850&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
Wed Sep 17 23:12:16 2014
@@ -37,7 +37,6 @@ import java.security.cert.X509Certificat
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
-import java.util.Date;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
@@ -68,10 +67,9 @@ 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.HashAlgorithm;
+import org.apache.poi.poifs.crypt.dsig.SignatureInfoConfig;
import org.apache.poi.poifs.crypt.dsig.services.RelationshipTransformService;
import
org.apache.poi.poifs.crypt.dsig.services.RelationshipTransformService.RelationshipTransformParameterSpec;
-import org.apache.poi.poifs.crypt.dsig.services.XmlSignatureService;
import org.apache.poi.util.POILogFactory;
import org.apache.poi.util.POILogger;
import org.apache.xmlbeans.XmlException;
@@ -96,19 +94,13 @@ 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 XmlSignatureService signatureService;
-
- private final Date clock;
-
- private final HashAlgorithm hashAlgo;
+ private final SignatureInfoConfig signatureConfig;
/**
* Main constructor.
*/
- public OOXMLSignatureFacet(XmlSignatureService signatureService, Date
clock, HashAlgorithm hashAlgo) {
- this.signatureService = signatureService;
- this.clock = (clock == null ? new Date() : clock);
- this.hashAlgo = (hashAlgo == null ? HashAlgorithm.sha1 : hashAlgo);
+ public OOXMLSignatureFacet(SignatureInfoConfig signatureConfig) {
+ this.signatureConfig = signatureConfig;
}
@Override
@@ -142,7 +134,7 @@ public class OOXMLSignatureFacet impleme
XMLObject xo = signatureFactory.newXMLObject(objectContent, objectId,
null, null);
objects.add(xo);
- DigestMethod digestMethod =
signatureFactory.newDigestMethod(this.hashAlgo.xmlSignUri, null);
+ DigestMethod digestMethod =
signatureFactory.newDigestMethod(signatureConfig.getDigestAlgo().xmlSignUri,
null);
Reference reference = signatureFactory.newReference
("#" + objectId, digestMethod, null, XmlDSigNS+"Object", null);
references.add(reference);
@@ -152,11 +144,11 @@ public class OOXMLSignatureFacet impleme
throws IOException, NoSuchAlgorithmException,
InvalidAlgorithmParameterException, URISyntaxException,
XmlException {
- OPCPackage ooxml = this.signatureService.getOfficeOpenXMLDocument();
+ OPCPackage ooxml = this.signatureConfig.getOpcPackage();
List<PackagePart> relsEntryNames =
ooxml.getPartsByContentType(ContentTypes.RELATIONSHIPS_PART);
- DigestMethod digestMethod =
signatureFactory.newDigestMethod(this.hashAlgo.xmlSignUri, null);
+ DigestMethod digestMethod =
signatureFactory.newDigestMethod(signatureConfig.getDigestAlgo().xmlSignUri,
null);
Set<String> digestedPartNames = new HashSet<String>();
for (PackagePart pp : relsEntryNames) {
String baseUri =
pp.getPartName().getName().replaceFirst("(.*)/_rels/.*", "$1");
@@ -240,7 +232,7 @@ public class OOXMLSignatureFacet impleme
*/
DateFormat fmt = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'");
fmt.setTimeZone(TimeZone.getTimeZone("UTC"));
- String nowStr = fmt.format(this.clock);
+ String nowStr = fmt.format(this.signatureConfig.getExecutionTime());
LOG.log(POILogger.DEBUG, "now: " + nowStr);
SignatureTimeDocument sigTime =
SignatureTimeDocument.Factory.newInstance();
@@ -261,7 +253,7 @@ public class OOXMLSignatureFacet impleme
signaturePropertyContent.add(signatureTimeSignatureProperty);
SignatureProperties signatureProperties = signatureFactory
.newSignatureProperties(signaturePropertyContent,
- "id-signature-time-" + this.clock.getTime());
+ "id-signature-time-" +
signatureConfig.getExecutionTime());
objectContent.add(signatureProperties);
}
@@ -274,7 +266,7 @@ public class OOXMLSignatureFacet impleme
SignatureInfoV1Document sigV1 =
SignatureInfoV1Document.Factory.newInstance();
CTSignatureInfoV1 ctSigV1 = sigV1.addNewSignatureInfoV1();
- ctSigV1.setManifestHashAlgorithm(hashAlgo.xmlSignUri);
+
ctSigV1.setManifestHashAlgorithm(signatureConfig.getDigestAlgo().xmlSignUri);
Element n = (Element)document.importNode(ctSigV1.getDomNode(), true);
n.setAttributeNS(XmlNS, "xmlns",
"http://schemas.microsoft.com/office/2006/digsig");
@@ -293,7 +285,7 @@ public class OOXMLSignatureFacet impleme
String objectId = "idOfficeObject";
objects.add(signatureFactory.newXMLObject(objectContent, objectId,
null, null));
- DigestMethod digestMethod =
signatureFactory.newDigestMethod(this.hashAlgo.xmlSignUri, null);
+ DigestMethod digestMethod =
signatureFactory.newDigestMethod(signatureConfig.getDigestAlgo().xmlSignUri,
null);
Reference reference = signatureFactory.newReference
("#" + objectId, digestMethod, null, XmlDSigNS+"Object", null);
references.add(reference);
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=1625850&r1=1625849&r2=1625850&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
Wed Sep 17 23:12:16 2014
@@ -34,7 +34,6 @@ import java.security.cert.CertificateEnc
import java.security.cert.X509Certificate;
import java.util.ArrayList;
import java.util.Calendar;
-import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@@ -53,6 +52,7 @@ 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.SignatureInfo;
+import org.apache.poi.poifs.crypt.dsig.SignatureInfoConfig;
import org.apache.poi.poifs.crypt.dsig.services.XmlSignatureService;
import org.apache.poi.util.POILogFactory;
import org.apache.poi.util.POILogger;
@@ -97,12 +97,8 @@ public class XAdESSignatureFacet impleme
private static final String XADES_TYPE =
"http://uri.etsi.org/01903#SignedProperties";
- private final Date clock;
-
- private final HashAlgorithm hashAlgo;
-
- private final SignaturePolicyService signaturePolicyService;
-
+ private SignatureInfoConfig signatureConfig;
+
private String idSignedProperties;
private boolean signaturePolicyImplied;
@@ -111,7 +107,7 @@ public class XAdESSignatureFacet impleme
private boolean issuerNameNoReverseOrder = false;
- private Map<String, String> dataObjectFormatMimeTypes;
+ private Map<String, String> dataObjectFormatMimeTypes = new
HashMap<String, String>();
/**
* Main constructor.
@@ -126,12 +122,8 @@ public class XAdESSignatureFacet impleme
* @param signaturePolicyService
* the optional signature policy service used for XAdES-EPES.
*/
- public XAdESSignatureFacet(Date clock, HashAlgorithm hashAlgo,
- SignaturePolicyService signaturePolicyService) {
- this.clock = (clock == null ? new Date() : clock);
- this.hashAlgo = (hashAlgo == null ? HashAlgorithm.sha1 : hashAlgo);
- this.signaturePolicyService = signaturePolicyService;
- this.dataObjectFormatMimeTypes = new HashMap<String, String>();
+ public XAdESSignatureFacet(SignatureInfoConfig signatureConfig) {
+ this.signatureConfig = signatureConfig;
}
@Override
@@ -167,7 +159,7 @@ public class XAdESSignatureFacet impleme
// SigningTime
Calendar xmlGregorianCalendar = Calendar.getInstance();
xmlGregorianCalendar.setTimeZone(TimeZone.getTimeZone("Z"));
- xmlGregorianCalendar.setTime(this.clock);
+ xmlGregorianCalendar.setTime(this.signatureConfig.getExecutionTime());
xmlGregorianCalendar.clear(Calendar.MILLISECOND);
signedSignatureProperties.setSigningTime(xmlGregorianCalendar);
@@ -179,7 +171,7 @@ public class XAdESSignatureFacet impleme
CertIDListType signingCertificates =
signedSignatureProperties.addNewSigningCertificate();
CertIDType certId = signingCertificates.addNewCert();
X509Certificate signingCertificate = signingCertificateChain.get(0);
- setCertID(certId, signingCertificate, this.hashAlgo,
this.issuerNameNoReverseOrder);
+ setCertID(certId, signingCertificate,
this.signatureConfig.getDigestAlgo(), this.issuerNameNoReverseOrder);
// ClaimedRole
if (null != this.role && false == this.role.isEmpty()) {
@@ -193,24 +185,24 @@ public class XAdESSignatureFacet impleme
}
// XAdES-EPES
- if (null != this.signaturePolicyService) {
+ SignaturePolicyService policyService =
this.signatureConfig.getSignaturePolicyService();
+ if (policyService != null) {
SignaturePolicyIdentifierType signaturePolicyIdentifier =
signedSignatureProperties.addNewSignaturePolicyIdentifier();
SignaturePolicyIdType signaturePolicyId =
signaturePolicyIdentifier.addNewSignaturePolicyId();
ObjectIdentifierType objectIdentifier =
signaturePolicyId.addNewSigPolicyId();
-
objectIdentifier.setDescription(this.signaturePolicyService.getSignaturePolicyDescription());
+
objectIdentifier.setDescription(policyService.getSignaturePolicyDescription());
IdentifierType identifier = objectIdentifier.addNewIdentifier();
-
identifier.setStringValue(this.signaturePolicyService.getSignaturePolicyIdentifier());
+
identifier.setStringValue(policyService.getSignaturePolicyIdentifier());
- byte[] signaturePolicyDocumentData =
this.signaturePolicyService.getSignaturePolicyDocument();
+ byte[] signaturePolicyDocumentData =
policyService.getSignaturePolicyDocument();
DigestAlgAndValueType sigPolicyHash =
signaturePolicyId.addNewSigPolicyHash();
- setDigestAlgAndValue(sigPolicyHash, signaturePolicyDocumentData,
this.hashAlgo);
+ setDigestAlgAndValue(sigPolicyHash, signaturePolicyDocumentData,
this.signatureConfig.getDigestAlgo());
- String signaturePolicyDownloadUrl = this.signaturePolicyService
- .getSignaturePolicyDownloadUrl();
+ String signaturePolicyDownloadUrl =
policyService.getSignaturePolicyDownloadUrl();
if (null != signaturePolicyDownloadUrl) {
SigPolicyQualifiersListType sigPolicyQualifiers =
signaturePolicyId.addNewSigPolicyQualifiers();
AnyType sigPolicyQualifier =
sigPolicyQualifiers.addNewSigPolicyQualifier();
@@ -254,7 +246,7 @@ public class XAdESSignatureFacet impleme
objects.add(xadesObject);
// add XAdES ds:Reference
- DigestMethod digestMethod =
signatureFactory.newDigestMethod(hashAlgo.xmlSignUri, null);
+ DigestMethod digestMethod =
signatureFactory.newDigestMethod(this.signatureConfig.getDigestAlgo().xmlSignUri,
null);
List<Transform> transforms = new ArrayList<Transform>();
Transform exclusiveTransform = signatureFactory
.newTransform(CanonicalizationMethod.INCLUSIVE,
Modified:
poi/branches/xml_signature/src/ooxml/java/org/apache/poi/poifs/crypt/dsig/services/SignatureService.java
URL:
http://svn.apache.org/viewvc/poi/branches/xml_signature/src/ooxml/java/org/apache/poi/poifs/crypt/dsig/services/SignatureService.java?rev=1625850&r1=1625849&r2=1625850&view=diff
==============================================================================
---
poi/branches/xml_signature/src/ooxml/java/org/apache/poi/poifs/crypt/dsig/services/SignatureService.java
(original)
+++
poi/branches/xml_signature/src/ooxml/java/org/apache/poi/poifs/crypt/dsig/services/SignatureService.java
Wed Sep 17 23:12:16 2014
@@ -26,16 +26,12 @@ package org.apache.poi.poifs.crypt.dsig.
import java.io.IOException;
import java.security.NoSuchAlgorithmException;
-import java.security.PrivateKey;
-import java.security.cert.X509Certificate;
import java.util.List;
import javax.xml.crypto.MarshalException;
import javax.xml.parsers.ParserConfigurationException;
-import org.apache.poi.poifs.crypt.dsig.spi.AddressDTO;
import org.apache.poi.poifs.crypt.dsig.spi.DigestInfo;
-import org.apache.poi.poifs.crypt.dsig.spi.IdentityDTO;
import org.apache.xmlbeans.XmlException;
import org.w3c.dom.Document;
@@ -48,44 +44,16 @@ import org.w3c.dom.Document;
public interface SignatureService {
/**
- * Gives back the digest algorithm to be used for construction of the
digest
- * infos of the preSign method. Return a digest algorithm here if you want
- * to let the client sign some locally stored files. Return
- * <code>null</code> if no pre-sign digest infos are required.
- *
- * @return the digest algorithm to be used when digesting local files.
- * @see #preSign(List, List)
- */
- String getFilesDigestAlgorithm();
-
- /**
* Pre-sign callback method. Depending on the configuration some parameters
* are passed. The returned value will be signed by the eID Applet.
*
- * <p>
- * TODO: service must be able to throw some exception on failure.
- * </p>
- *
* @param digestInfos
* the optional list of digest infos.
- * @param signingCertificateChain
- * the optional list of certificates.
- * @param identity
- * the optional identity.
- * @param address
- * the optional identity address.
- * @param photo
- * the optional identity photo.
- * @param timestamp
- * the optional timestamp, defaults to now
* @return the digest to be signed.
* @throws NoSuchAlgorithmException
*/
- DigestInfo preSign(Document document, List<DigestInfo> digestInfos,
- PrivateKey privateKey,
- List<X509Certificate> signingCertificateChain,
- IdentityDTO identity, AddressDTO address, byte[] photo)
- throws NoSuchAlgorithmException;
+ DigestInfo preSign(Document document, List<DigestInfo> digestInfos)
+ throws NoSuchAlgorithmException;
/**
* Post-sign callback method. Received the signature value. Depending on
the
@@ -95,7 +63,6 @@ public interface SignatureService {
* @param signingCertificateChain
* the optional chain of signing certificates.
*/
- void postSign(Document document, byte[] signatureValue,
- List<X509Certificate> signingCertificateChain)
- throws IOException, MarshalException,
ParserConfigurationException, XmlException;
+ void postSign(Document document, byte[] signatureValue)
+ throws IOException, MarshalException, ParserConfigurationException,
XmlException;
}
Modified:
poi/branches/xml_signature/src/ooxml/java/org/apache/poi/poifs/crypt/dsig/services/XmlSignatureService.java
URL:
http://svn.apache.org/viewvc/poi/branches/xml_signature/src/ooxml/java/org/apache/poi/poifs/crypt/dsig/services/XmlSignatureService.java?rev=1625850&r1=1625849&r2=1625850&view=diff
==============================================================================
---
poi/branches/xml_signature/src/ooxml/java/org/apache/poi/poifs/crypt/dsig/services/XmlSignatureService.java
(original)
+++
poi/branches/xml_signature/src/ooxml/java/org/apache/poi/poifs/crypt/dsig/services/XmlSignatureService.java
Wed Sep 17 23:12:16 2014
@@ -37,11 +37,8 @@ import java.security.InvalidAlgorithmPar
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.security.NoSuchProviderException;
-import java.security.PrivateKey;
-import java.security.cert.X509Certificate;
import java.util.ArrayList;
import java.util.Collections;
-import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@@ -79,16 +76,10 @@ import org.apache.poi.openxml4j.opc.Pack
import org.apache.poi.openxml4j.opc.TargetMode;
import org.apache.poi.poifs.crypt.CryptoFunctions;
import org.apache.poi.poifs.crypt.HashAlgorithm;
-import org.apache.poi.poifs.crypt.dsig.OOXMLURIDereferencer;
import org.apache.poi.poifs.crypt.dsig.SignatureInfo;
-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.SignatureInfoConfig;
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.spi.AddressDTO;
import org.apache.poi.poifs.crypt.dsig.spi.DigestInfo;
-import org.apache.poi.poifs.crypt.dsig.spi.IdentityDTO;
import org.apache.poi.util.POILogFactory;
import org.apache.poi.util.POILogger;
import org.apache.xml.security.signature.XMLSignature;
@@ -112,43 +103,23 @@ import org.xml.sax.SAXException;
public class XmlSignatureService implements SignatureService {
private static final POILogger LOG =
POILogFactory.getLogger(XmlSignatureService.class);
- protected final List<SignatureFacet> signatureFacets;
-
+ protected SignatureInfoConfig signatureConfig;
+
private String signatureNamespacePrefix;
private String signatureId = "idPackageSignature";
- private final HashAlgorithm hashAlgo;
- private final OPCPackage opcPackage;
- // private SignatureDocument sigDoc;
- private XAdESSignatureFacet xadesSignatureFacet;
/**
* Main constructor.
*/
- public XmlSignatureService(HashAlgorithm digestAlgo, OPCPackage
opcPackage) {
- this.signatureFacets = new ArrayList<SignatureFacet>();
+ public XmlSignatureService(SignatureInfoConfig signatureConfig) {
this.signatureNamespacePrefix = null;
- this.hashAlgo = digestAlgo;
- this.opcPackage = opcPackage;
- // this.sigDoc = null;
+ this.signatureConfig = signatureConfig;
}
-
- public void initFacets(Date clock) {
- if (clock == null) clock = new Date();
- addSignatureFacet(new OOXMLSignatureFacet(this, clock, hashAlgo));
- addSignatureFacet(new KeyInfoSignatureFacet(true, false, false));
-
- this.xadesSignatureFacet = new XAdESSignatureFacet(clock, hashAlgo,
null);
- this.xadesSignatureFacet.setIdSignedProperties("idSignedProperties");
- this.xadesSignatureFacet.setSignaturePolicyImplied(true);
- /*
- * Work-around for Office 2010.
- */
- this.xadesSignatureFacet.setIssuerNameNoReverseOrder(true);
- addSignatureFacet(this.xadesSignatureFacet);
- addSignatureFacet(new Office2010SignatureFacet());
- }
-
+ public SignatureInfoConfig getSignatureConfig() {
+ return signatureConfig;
+ }
+
/**
* Sets the signature Id attribute value used to create the XML signature.
A
* <code>null</code> value will trigger an automatically generated
signature
@@ -171,39 +142,6 @@ public class XmlSignatureService impleme
}
/**
- * Adds a signature facet to this XML signature service.
- *
- * @param signatureFacet
- */
- public void addSignatureFacet(SignatureFacet... signatureFacets) {
- for (SignatureFacet sf : signatureFacets) {
- this.signatureFacets.add(sf);
- }
- }
-
- /**
- * Gives back the signature digest algorithm. Allowed values are SHA-1,
- * SHA-256, SHA-384, SHA-512, RIPEND160. The default algorithm is SHA-1.
- * Override this method to select another signature digest algorithm.
- *
- * @return
- */
- protected HashAlgorithm getSignatureDigestAlgorithm() {
- return null != this.hashAlgo ? this.hashAlgo : HashAlgorithm.sha1;
- }
-
- /**
- * Override this method to change the URI dereferener used by the signing
- * engine.
- *
- * @return
- */
- protected URIDereferencer getURIDereferencer() {
- OPCPackage ooxmlDocument = getOfficeOpenXMLDocument();
- return new OOXMLURIDereferencer(ooxmlDocument);
- }
-
- /**
* Gives back the human-readable description of what the citizen will be
* signing. The default value is "XML Document". Override this method to
* provide the citizen with another description.
@@ -215,36 +153,22 @@ public class XmlSignatureService impleme
}
/**
- * Gives back the URL of the OOXML to be signed.
- *
- * @return
- */
- public OPCPackage getOfficeOpenXMLDocument() {
- return opcPackage;
- }
-
-
-
- /**
* Gives back the output stream to which to write the signed XML document.
*
* @return
*/
// protected abstract OutputStream getSignedDocumentOutputStream();
@Override
- public DigestInfo preSign(Document document, List<DigestInfo> digestInfos,
- PrivateKey key,
- List<X509Certificate> signingCertificateChain,
- IdentityDTO identity, AddressDTO address, byte[] photo)
+ public DigestInfo preSign(Document document, List<DigestInfo> digestInfos)
throws NoSuchAlgorithmException {
SignatureInfo.initXmlProvider();
LOG.log(POILogger.DEBUG, "preSign");
- HashAlgorithm hashAlgo = getSignatureDigestAlgorithm();
+ HashAlgorithm hashAlgo = this.signatureConfig.getDigestAlgo();
byte[] digestValue;
try {
- digestValue = getXmlSignatureDigestValue(document, hashAlgo,
digestInfos, key, signingCertificateChain);
+ digestValue = getXmlSignatureDigestValue(document, digestInfos);
} catch (Exception e) {
throw new RuntimeException("XML signature error: " +
e.getMessage(), e);
}
@@ -254,7 +178,7 @@ public class XmlSignatureService impleme
}
@Override
- public void postSign(Document document, byte[] signatureValue,
List<X509Certificate> signingCertificateChain)
+ public void postSign(Document document, byte[] signatureValue)
throws IOException, MarshalException, ParserConfigurationException,
XmlException {
LOG.log(POILogger.DEBUG, "postSign");
SignatureInfo.initXmlProvider();
@@ -278,8 +202,8 @@ public class XmlSignatureService impleme
/*
* Allow signature facets to inject their own stuff.
*/
- for (SignatureFacet signatureFacet : this.signatureFacets) {
- signatureFacet.postSign(document, signingCertificateChain);
+ for (SignatureFacet signatureFacet :
this.signatureConfig.getSignatureFacets()) {
+ signatureFacet.postSign(document,
this.signatureConfig.getSigningCertificateChain());
}
registerIds(document);
@@ -287,10 +211,7 @@ public class XmlSignatureService impleme
}
@SuppressWarnings("unchecked")
- private byte[] getXmlSignatureDigestValue(Document document, HashAlgorithm
hashAlgo,
- List<DigestInfo> digestInfos,
- PrivateKey privateKey,
- List<X509Certificate> signingCertificateChain)
+ private byte[] getXmlSignatureDigestValue(Document document,
List<DigestInfo> digestInfos)
throws ParserConfigurationException, NoSuchAlgorithmException,
InvalidAlgorithmParameterException, MarshalException,
javax.xml.crypto.dsig.XMLSignatureException,
@@ -321,8 +242,8 @@ public class XmlSignatureService impleme
/*
* Signature context construction.
*/
- XMLSignContext xmlSignContext = new DOMSignContext(privateKey,
document);
- URIDereferencer uriDereferencer = getURIDereferencer();
+ XMLSignContext xmlSignContext = new
DOMSignContext(this.signatureConfig.getKey(), document);
+ URIDereferencer uriDereferencer =
this.signatureConfig.getUriDereferencer();
if (null != uriDereferencer) {
xmlSignContext.setURIDereferencer(uriDereferencer);
}
@@ -354,15 +275,15 @@ public class XmlSignatureService impleme
localSignatureId = "xmldsig-" + UUID.randomUUID().toString();
}
List<XMLObject> objects = new ArrayList<XMLObject>();
- for (SignatureFacet signatureFacet : this.signatureFacets) {
+ for (SignatureFacet signatureFacet :
this.signatureConfig.getSignatureFacets()) {
LOG.log(POILogger.DEBUG, "invoking signature facet: " +
signatureFacet.getClass().getSimpleName());
- signatureFacet.preSign(document, signatureFactory,
localSignatureId, signingCertificateChain, references, objects);
+ signatureFacet.preSign(document, signatureFactory,
localSignatureId, this.signatureConfig.getSigningCertificateChain(),
references, objects);
}
/*
* ds:SignedInfo
*/
- SignatureMethod signatureMethod =
signatureFactory.newSignatureMethod(getSignatureMethod(hashAlgo), null);
+ SignatureMethod signatureMethod =
signatureFactory.newSignatureMethod(getSignatureMethod(this.signatureConfig.getDigestAlgo()),
null);
CanonicalizationMethod canonicalizationMethod = signatureFactory
.newCanonicalizationMethod(getCanonicalizationMethod(),
(C14NMethodParameterSpec) null);
@@ -432,7 +353,7 @@ public class XmlSignatureService impleme
* usage.
*/
- MessageDigest jcaMessageDigest =
CryptoFunctions.getMessageDigest(hashAlgo);
+ MessageDigest jcaMessageDigest =
CryptoFunctions.getMessageDigest(this.signatureConfig.getDigestAlgo());
byte[] digestValue = jcaMessageDigest.digest(octets);
return digestValue;
}
@@ -443,7 +364,7 @@ public class XmlSignatureService impleme
*
* @param doc
*/
- public void registerIds(Document doc) {
+ public static void registerIds(Document doc) {
NodeList nl = doc.getElementsByTagNameNS(XmlDSigNS, "Object");
registerIdAttribute(nl);
nl = doc.getElementsByTagNameNS("http://uri.etsi.org/01903/v1.3.2#",
"SignedProperties");
@@ -492,19 +413,6 @@ public class XmlSignatureService impleme
throw new RuntimeException("unsupported sign algo: " + hashAlgo);
}
- /**
- * Gives back the used XAdES signature facet.
- *
- * @return
- */
- protected XAdESSignatureFacet getXAdESSignatureFacet() {
- return this.xadesSignatureFacet;
- }
-
- public String getFilesDigestAlgorithm() {
- return null;
- }
-
protected String getCanonicalizationMethod() {
return CanonicalizationMethod.INCLUSIVE;
}
@@ -512,7 +420,7 @@ public class XmlSignatureService impleme
protected void writeDocument(Document document) throws IOException,
XmlException {
XmlOptions xo = new XmlOptions();
Map<String,String> namespaceMap = new HashMap<String,String>();
- for (SignatureFacet sf : this.signatureFacets) {
+ for (SignatureFacet sf : this.signatureConfig.getSignatureFacets()) {
Map<String,String> sfm = sf.getNamespacePrefixMapping();
if (sfm != null) {
namespaceMap.putAll(sfm);
@@ -527,7 +435,7 @@ public class XmlSignatureService impleme
* Copy the original OOXML content to the signed OOXML package. During
* copying some files need to changed.
*/
- OPCPackage pkg = this.getOfficeOpenXMLDocument();
+ OPCPackage pkg = this.signatureConfig.getOpcPackage();
PackagePartName sigPartName, sigsPartName;
try {
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=1625850&r1=1625849&r2=1625850&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
Wed Sep 17 23:12:16 2014
@@ -52,15 +52,14 @@ import javax.xml.crypto.KeySelector;
import javax.xml.crypto.dsig.XMLSignature;
import javax.xml.crypto.dsig.XMLSignatureFactory;
import javax.xml.crypto.dsig.dom.DOMValidateContext;
-import javax.xml.parsers.DocumentBuilderFactory;
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.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.SignaturePolicyService;
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;
@@ -208,13 +207,26 @@ public class TestSignatureInfo {
OPCPackage pkg = OPCPackage.open(copy(testdata.getFile(testFile)),
PackageAccess.READ_WRITE);
initKeyPair("Test", "CN=Test");
+ final X509CRL crl = PkiTestUtils.generateCrl(x509,
keyPair.getPrivate());
// setup
- EnvelopedSignatureFacet envelopedSignatureFacet = new
EnvelopedSignatureFacet();
- KeyInfoSignatureFacet keyInfoSignatureFacet = new
KeyInfoSignatureFacet(true, false, false);
- SignaturePolicyService signaturePolicyService = null;
- XAdESSignatureFacet xadesSignatureFacet = new
XAdESSignatureFacet(null, null, signaturePolicyService);
- final X509CRL crl = PkiTestUtils.generateCrl(x509,
keyPair.getPrivate());
+ SignatureInfoConfig signatureConfig = new SignatureInfoConfig();
+ signatureConfig.setOpcPackage(pkg);
+ signatureConfig.setKey(keyPair.getPrivate());
+
+ /*
+ * We need at least 2 certificates for the XAdES-C complete certificate
+ * refs construction.
+ */
+ List<X509Certificate> certificateChain = new
ArrayList<X509Certificate>();
+ certificateChain.add(x509);
+ certificateChain.add(x509);
+ signatureConfig.setSigningCertificateChain(certificateChain);
+
+ signatureConfig.addSignatureFacet(new EnvelopedSignatureFacet());
+ signatureConfig.addSignatureFacet(new KeyInfoSignatureFacet(true,
false, false));
+ signatureConfig.addSignatureFacet(new
XAdESSignatureFacet(signatureConfig));
+
// http://timestamping.edelweb.fr/service/tsp
// http://tsa.belgium.be/connect
@@ -248,14 +260,6 @@ public class TestSignatureInfo {
timeStampService = tspService;
}
- List<X509Certificate> certificateChain = new
ArrayList<X509Certificate>();
- /*
- * We need at least 2 certificates for the XAdES-C complete certificate
- * refs construction.
- */
- certificateChain.add(x509);
- certificateChain.add(x509);
-
final RevocationData revocationData = new RevocationData();
revocationData.addCRL(crl);
OCSPResp ocspResp = PkiTestUtils.createOcspResp(x509, false,
@@ -270,17 +274,12 @@ public class TestSignatureInfo {
XAdESXLSignatureFacet xadesXLSignatureFacet = new
XAdESXLSignatureFacet(
timeStampService, revocationDataService);
- XmlSignatureService testedInstance = new
XmlSignatureService(HashAlgorithm.sha1, pkg);
- testedInstance.addSignatureFacet(envelopedSignatureFacet,
keyInfoSignatureFacet,
- xadesSignatureFacet, xadesXLSignatureFacet);
-
+ XmlSignatureService testedInstance = new
XmlSignatureService(signatureConfig);
- DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
- dbf.setNamespaceAware(true);
- Document document = dbf.newDocumentBuilder().newDocument();
+ Document document = DocumentHelper.createDocument();
// operate
- DigestInfo digestInfo = testedInstance.preSign(document, null,
keyPair.getPrivate(), certificateChain, null, null, null);
+ DigestInfo digestInfo = testedInstance.preSign(document, null);
// verify
assertNotNull(digestInfo);
@@ -301,7 +300,7 @@ public class TestSignatureInfo {
byte[] signatureValue = SignatureInfo.signDigest(keyPair.getPrivate(),
HashAlgorithm.sha1, digestInfo.digestValue);
// Operate: postSign
- testedInstance.postSign(document, signatureValue, certificateChain);
+ testedInstance.postSign(document, signatureValue);
DOMValidateContext domValidateContext = new DOMValidateContext(
KeySelector.singletonKeySelector(keyPair.getPublic()),
@@ -332,15 +331,22 @@ public class TestSignatureInfo {
}
private OPCPackage sign(OPCPackage pkgCopy, String alias, String signerDn,
int signerCount) throws Exception {
- XmlSignatureService signatureService = new
XmlSignatureService(HashAlgorithm.sha1, pkgCopy);
- signatureService.initFacets(cal.getTime());
initKeyPair(alias, signerDn);
+ SignatureInfoConfig signatureConfig = new SignatureInfoConfig();
+ signatureConfig.setKey(keyPair.getPrivate());
+
signatureConfig.setSigningCertificateChain(Collections.singletonList(x509));
+ signatureConfig.setExecutionTime(cal.getTime());
+ signatureConfig.setDigestAlgo(HashAlgorithm.sha1);
+ signatureConfig.setOpcPackage(pkgCopy);
+ signatureConfig.addDefaultFacets();
+
+ XmlSignatureService signatureService = new
XmlSignatureService(signatureConfig);
+
Document document = DocumentHelper.createDocument();
// operate
- List<X509Certificate> x509Chain = Collections.singletonList(x509);
- DigestInfo digestInfo = signatureService.preSign(document, null,
keyPair.getPrivate(), x509Chain, null, null, null);
+ DigestInfo digestInfo = signatureService.preSign(document, null);
// verify
assertNotNull(digestInfo);
@@ -354,7 +360,7 @@ public class TestSignatureInfo {
byte[] signatureValue = SignatureInfo.signDigest(keyPair.getPrivate(),
HashAlgorithm.sha1, digestInfo.digestValue);
// operate: postSign
- signatureService.postSign(document, signatureValue,
Collections.singletonList(x509));
+ signatureService.postSign(document, signatureValue);
// verify: signature
SignatureInfo si = new SignatureInfo(pkgCopy);
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]