From: Andreas Beeker Date: Tue, 25 Jul 2017 22:42:22 +0000 (+0000) Subject: Bug 61182 - Invalid signature created for streamed xlsx file X-Git-Tag: REL_3_17_FINAL~36 X-Git-Url: https://source.dussan.org/?a=commitdiff_plain;h=e739205c1db54085522effce121d7bb82204bd3f;p=poi.git Bug 61182 - Invalid signature created for streamed xlsx file - add hashes for other linebreaks git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1803011 13f79535-47bb-0310-9956-ffa450edef68 --- diff --git a/src/ooxml/testcases/org/apache/poi/poifs/crypt/TestSignatureInfo.java b/src/ooxml/testcases/org/apache/poi/poifs/crypt/TestSignatureInfo.java index f8154a5029..90ffd1991e 100644 --- a/src/ooxml/testcases/org/apache/poi/poifs/crypt/TestSignatureInfo.java +++ b/src/ooxml/testcases/org/apache/poi/poifs/crypt/TestSignatureInfo.java @@ -27,6 +27,7 @@ import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertTrue; +import static org.junit.Assume.assumeTrue; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; @@ -81,6 +82,7 @@ import org.apache.poi.util.POILogFactory; import org.apache.poi.util.POILogger; import org.apache.poi.xssf.streaming.SXSSFWorkbook; import org.apache.poi.xssf.usermodel.XSSFWorkbook; +import org.apache.xmlbeans.SystemProperties; import org.apache.xmlbeans.XmlObject; import org.bouncycastle.asn1.x509.KeyUsage; import org.bouncycastle.cert.ocsp.OCSPResp; @@ -178,14 +180,40 @@ public class TestSignatureInfo { pkg1.save(bos); pkg1.close(); + FileOutputStream fos = new FileOutputStream("tmp/sigtest/poi.xlsx"); + bos.writeTo(fos); + fos.close(); + XSSFWorkbook wb2 = new XSSFWorkbook(new ByteArrayInputStream(bos.toByteArray())); assertEquals("Test", wb2.getSheetAt(0).getRow(1).getCell(1).getStringCellValue()); OPCPackage pkg2 = wb2.getPackage(); signatureConfig.setOpcPackage(pkg2); assertTrue(si.verifySignature()); - String signExp = - "HDdvgXblLMiE6gZSoRSQUof6+aedrhK9i51we1n+4Q/ioqrQCeh5UkfQ8lD63nV4ZDbM4/pIVFi6VpMpN/HMnA"+ - "UHeVdVUCVTgpn3Iz21Ymcd9/aerNov2BjHLhS8X3oUE+XTu2TbJLNmms0I9G4lfg6HWP9t7ZCXBXy6vyCMArc="; + + // xmlbeans adds line-breaks depending on the system setting, so we get different + // test results on Unix/Mac/Windows + // if the xml documents eventually change, this test needs to be run with the + // separator set to the various system configurations + String sep = SystemProperties.getProperty( "line.separator" ); + String signExp; + assumeTrue("Hashes only known for Windows/Unix/Mac", sep == null || "\n".equals(sep) || "\r\n".equals(sep) || "\r".equals(sep)); + if (sep == null || "\n".equals(sep)) { + // Unix + signExp = + "HDdvgXblLMiE6gZSoRSQUof6+aedrhK9i51we1n+4Q/ioqrQCeh5UkfQ8lD63nV4ZDbM4/pIVFi6VpMpN/HMnA"+ + "UHeVdVUCVTgpn3Iz21Ymcd9/aerNov2BjHLhS8X3oUE+XTu2TbJLNmms0I9G4lfg6HWP9t7ZCXBXy6vyCMArc="; + } else if ("\r\n".equals(sep)){ + // Windows + signExp = + "jVW6EPMywZ8jr4+I4alDosXzqrVuDG4wTdrr+la8QVbXfLm6HOh9AUFlo5yUZuWo/1gXrrkc34UTYNzuslyrOx"+ + "KqadPOIRKUssJzdCh/hKeTxs/YtyWkpGHggrUjrF/vUUIeIXRHo+1DCAh6ptoicviH/I/Dtoa5NgkEHVuOHk8="; + } else { + // Mac + signExp = + "GSaOQp2eVRkQl2GJgWxoxFdCadJJnmmKeoQtIwGrP3zzk+BnLeytGLN3bqmwCTjvtG7DyxENS+92e2xq/MiC9b"+ + "CtNUfXfCdM0M8fzAny/Ewn9HckIsxjBztmsryt/OZQaKu52VU0ohQu7bG+cGPzcM+qTEss+GUbD0sVAoC34HM="; + } + String signAct = si.getSignatureParts().iterator().next(). getSignatureDocument().getSignature().getSignatureValue().getStringValue(); assertEquals(signExp, signAct);