You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@poi.apache.org by ki...@apache.org on 2014/08/13 01:33:08 UTC

svn commit: r1617624 [2/2] - in /poi/branches/xml_signature: ./ .settings/ legal/ maven/ sonar/ooxml/ src/excelant/java/org/apache/poi/ss/excelant/ src/ooxml/java/org/apache/poi/openxml4j/opc/ src/ooxml/java/org/apache/poi/openxml4j/opc/internal/ src/o...

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=1617624&r1=1617623&r2=1617624&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 Tue Aug 12 23:33:07 2014
@@ -26,6 +26,10 @@ package org.apache.poi.poifs.crypt;
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertNotNull;
 import static org.junit.Assert.assertTrue;
+import static org.mockito.Matchers.any;
+import static org.mockito.Matchers.eq;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.when;
 
 import java.io.ByteArrayOutputStream;
 import java.io.File;
@@ -40,7 +44,9 @@ import java.security.KeyPair;
 import java.security.KeyStore;
 import java.security.PrivateKey;
 import java.security.cert.Certificate;
+import java.security.cert.X509CRL;
 import java.security.cert.X509Certificate;
+import java.util.ArrayList;
 import java.util.Calendar;
 import java.util.Collections;
 import java.util.Date;
@@ -53,8 +59,17 @@ 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.HorribleProxies.KeyUsageIf;
+import org.apache.poi.poifs.crypt.dsig.HorribleProxies.OCSPRespIf;
 import org.apache.poi.poifs.crypt.dsig.HorribleProxy;
 import org.apache.poi.poifs.crypt.dsig.SignatureInfo;
+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;
+import org.apache.poi.poifs.crypt.dsig.services.RevocationDataService;
+import org.apache.poi.poifs.crypt.dsig.services.TimeStampService;
 import org.apache.poi.poifs.crypt.dsig.services.XmlSignatureService;
 import org.apache.poi.poifs.crypt.dsig.spi.DigestInfo;
 import org.apache.poi.util.IOUtils;
@@ -62,6 +77,8 @@ import org.apache.poi.util.POILogFactory
 import org.apache.poi.util.POILogger;
 import org.junit.BeforeClass;
 import org.junit.Test;
+import org.mockito.invocation.InvocationOnMock;
+import org.mockito.stubbing.Answer;
 
 public class TestSignatureInfo {
     private static final POILogger LOG = POILogFactory.getLogger(TestSignatureInfo.class);
@@ -171,6 +188,64 @@ public class TestSignatureInfo {
         pkg.close();
     }
 
+    @Test
+    public void testSignEnvelopingDocument() throws Exception {
+        String testFile = "hello-world-unsigned.xlsx";
+        OPCPackage pkg = OPCPackage.open(copy(testdata.getFile(testFile)), PackageAccess.READ_WRITE);
+
+        // setup
+        EnvelopedSignatureFacet envelopedSignatureFacet = new EnvelopedSignatureFacet();
+        KeyInfoSignatureFacet keyInfoSignatureFacet = new KeyInfoSignatureFacet(true, false, false);
+        SignaturePolicyService signaturePolicyService = null;
+        XAdESSignatureFacet xadesSignatureFacet = new XAdESSignatureFacet(null, null, signaturePolicyService);
+
+        
+        TimeStampService mockTimeStampService = mock(TimeStampService.class);
+        RevocationDataService mockRevocationDataService = mock(RevocationDataService.class);
+
+        XAdESXLSignatureFacet xadesXLSignatureFacet = new XAdESXLSignatureFacet(
+                mockTimeStampService, mockRevocationDataService);
+        XmlSignatureService testedInstance = new XmlSignatureService(HashAlgorithm.sha1, pkg);
+        testedInstance.addSignatureFacet(envelopedSignatureFacet, keyInfoSignatureFacet,
+                xadesSignatureFacet, xadesXLSignatureFacet);
+        
+        initKeyPair("Test", "CN=Test");
+        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);
+        
+        RevocationData revocationData = new RevocationData();
+        final X509CRL crl = PkiTestUtils.generateCrl(x509, keyPair.getPrivate());
+        revocationData.addCRL(crl);
+        OCSPRespIf ocspResp = PkiTestUtils.createOcspResp(x509, false,
+                x509, x509, keyPair.getPrivate(), "SHA1withRSA");
+        revocationData.addOCSP(ocspResp.getEncoded());
+        
+        when(mockTimeStampService.timeStamp(any(byte[].class), any(RevocationData.class)))
+        .thenAnswer(new Answer<byte[]>(){
+            public byte[] answer(InvocationOnMock invocation) throws Throwable {
+                Object[] arguments = invocation.getArguments();
+                RevocationData revocationData = (RevocationData) arguments[1];
+                revocationData.addCRL(crl);
+                return "time-stamp-token".getBytes();
+            }            
+        });
+        
+        when(mockRevocationDataService.getRevocationData(eq(certificateChain)))
+        .thenReturn(revocationData);
+        
+        // operate
+        DigestInfo digestInfo = testedInstance.preSign(null, certificateChain, null, null, null);
+
+        // verify
+        assertNotNull(digestInfo);
+        assertEquals("SHA-1", digestInfo.hashAlgo);
+        assertNotNull(digestInfo.digestValue);
+    }
     
     private OPCPackage sign(OPCPackage pkgCopy, String alias, String signerDn, int signerCount) throws Exception {
         /*** TODO : set cal to now ... only set to fixed date for debugging ... */ 



---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@poi.apache.org
For additional commands, e-mail: commits-help@poi.apache.org