org.digidoc4j.impl.bdoc.BDocSignatureOpenerTest.java Source code

Java tutorial

Introduction

Here is the source code for org.digidoc4j.impl.bdoc.BDocSignatureOpenerTest.java

Source

/* 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());
    }
}