/* DigiDoc4J library * * This software is released under either the GNU Library General Public * License (see LICENSE.LGPL). * * Note that the only valid version of the LGPL license as far as this * project is concerned is the original GNU Library General Public License * Version 2.1, February 1999 */ package org.digidoc4j.impl.bdoc; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertNull; import static org.junit.Assert.assertTrue; import java.io.File; import java.util.Arrays; import java.util.Date; import java.util.List; import org.apache.commons.io.FileUtils; import org.apache.commons.lang.StringUtils; import org.digidoc4j.Configuration; import org.digidoc4j.SignatureProfile; import org.digidoc4j.utils.Helper; import org.junit.Before; import org.junit.Rule; import org.junit.Test; import org.junit.rules.TemporaryFolder; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import eu.europa.esig.dss.DSSDocument; import eu.europa.esig.dss.FileDocument; import eu.europa.esig.dss.InMemoryDocument; import eu.europa.esig.dss.validation.SignedDocumentValidator; public class BDocSignatureOpenerTest { private final static Logger logger = LoggerFactory.getLogger(BDocSignatureOpenerTest.class); static Configuration configuration = new Configuration(Configuration.Mode.TEST); private BDocSignatureOpener signatureOpener; @Rule public TemporaryFolder testFolder = new TemporaryFolder(); @Before public void setUp() throws Exception { DSSDocument signedFile = new FileDocument("testFiles/test.txt"); List<DSSDocument> detachedContents = Arrays.asList(signedFile); signatureOpener = new BDocSignatureOpener(detachedContents, configuration); } @Test public void openBesSignature() throws Exception { DSSDocument xadesDoc = new FileDocument("testFiles/xades/test-bes-signature.xml"); List<BDocSignature> signatures = signatureOpener.parse(xadesDoc); assertEquals(1, signatures.size()); BDocSignature signature = signatures.get(0); assertEquals("id-693869a500c60f0dc262f7287f033d5d", signature.getId()); assertEquals(SignatureProfile.B_BES, signature.getProfile()); logger.debug("Getting signature id"); assertEquals("id-693869a500c60f0dc262f7287f033d5d", signature.getId()); logger.debug("Getting signature method"); assertEquals("http://www.w3.org/2001/04/xmlenc#sha256", signature.getSignatureMethod()); logger.debug("Getting signing time"); assertEquals(new Date(1454928400000L), signature.getSigningTime()); logger.debug("Getting city"); assertEquals("Tallinn", signature.getCity()); logger.debug("Getting state"); assertEquals("Harjumaa", signature.getStateOrProvince()); logger.debug("Getting postal code"); assertEquals("13456", signature.getPostalCode()); logger.debug("Getting country name"); assertEquals("Estonia", signature.getCountryName()); logger.debug("Getting signer roles"); assertEquals("Manager", signature.getSignerRoles().get(0)); assertEquals("Suspicious Fisherman", signature.getSignerRoles().get(1)); logger.debug("Getting signing certificate"); assertNotNull(signature.getSigningCertificate()); logger.debug("Getting signing cert subject name"); assertTrue(StringUtils.startsWith(signature.getSigningCertificate().issuerName(), "C=EE,O=AS Sertifitseerimiskeskus")); logger.debug("Getting signature as a byte array"); byte[] signatureInBytes = signature.getAdESSignature(); SignedDocumentValidator validator = SignedDocumentValidator.fromDocument(new InMemoryDocument(signatureInBytes)); assertEquals("id-693869a500c60f0dc262f7287f033d5d", validator.getSignatures().get(0).getId()); logger.debug("Asserting null values"); assertNull(signature.getOCSPCertificate()); assertNull(signature.getOCSPResponseCreationTime()); assertNull(signature.getTimeStampTokenCertificate()); assertNull(signature.getTimeStampCreationTime()); assertNull(signature.getTrustedSigningTime()); logger.debug("Finished testing BES signature"); } @Test public void openXadesSignature() throws Exception { DSSDocument xadesDoc = new FileDocument("testFiles/xades/test-bdoc-ts.xml"); List<BDocSignature> signatures = signatureOpener.parse(xadesDoc); BDocSignature signature = signatures.get(0); assertNotNull(signature); assertEquals("S0", signature.getId()); assertEquals(SignatureProfile.LT, signature.getProfile()); assertEquals("http://www.w3.org/2001/04/xmlenc#sha256", signature.getSignatureMethod()); assertEquals(new Date(1454090315000L), signature.getSigningTime()); assertTrue(StringUtils.startsWith(signature.getSigningCertificate().issuerName(), "C=EE,O=AS Sertifitseerimiskeskus")); assertNotNull(signature.getOCSPCertificate()); assertTrue(StringUtils.contains(signature.getOCSPCertificate().getSubjectName(), "OU=OCSP")); assertEquals(new Date(1454090317000L), signature.getOCSPResponseCreationTime()); assertEquals(new Date(1454090316000L), signature.getTimeStampCreationTime()); assertNotNull(signature.getTimeStampTokenCertificate()); assertTrue(StringUtils.contains(signature.getTimeStampTokenCertificate().getSubjectName(), "OU=TSA")); assertEquals(signature.getTimeStampCreationTime(), signature.getTrustedSigningTime()); } @Test public void serializeBDocSignature() throws Exception { DSSDocument xadesDoc = new FileDocument("testFiles/xades/test-bdoc-ts.xml"); List<BDocSignature> signatures = signatureOpener.parse(xadesDoc); BDocSignature signature = signatures.get(0); String serializedPath = testFolder.newFile().getPath(); Helper.serialize(signature, serializedPath); signature = Helper.deserializer(serializedPath); assertEquals("S0", signature.getId()); } @Test public void openXadesSignature_withoutXmlPreamble_shouldBeValid() throws Exception { byte[] signatureBytes = FileUtils.readFileToByteArray(new File("testFiles/xades/bdoc-tm-jdigidoc-mobile-id.xml")); InMemoryDocument xadesDoc = new InMemoryDocument(signatureBytes); List<BDocSignature> signatures = signatureOpener.parse(xadesDoc); assertEquals("S935237", signatures.get(0).getId()); } }