/* 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.testutils; import static org.digidoc4j.ContainerBuilder.BDOC_CONTAINER_TYPE; import static org.digidoc4j.testutils.TestSigningHelper.getSigningCert; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertTrue; import java.io.File; import java.io.IOException; import org.apache.commons.io.FileUtils; import org.digidoc4j.Configuration; import org.digidoc4j.Container; import org.digidoc4j.ContainerBuilder; import org.digidoc4j.DigestAlgorithm; import org.digidoc4j.Signature; import org.digidoc4j.DataToSign; import org.digidoc4j.SignatureBuilder; import org.digidoc4j.SignatureProfile; import org.digidoc4j.signers.PKCS12SignatureToken; import org.junit.rules.TemporaryFolder; import eu.europa.esig.dss.DSSDocument; import eu.europa.esig.dss.FileDocument; import eu.europa.esig.dss.MimeType; public class TestDataBuilder { public static final PKCS12SignatureToken PKCS12_SIGNER = new PKCS12SignatureToken("testFiles/signout.p12", "test".toCharArray()); public static Container createEmptyBDocContainer() { return ContainerBuilder.aContainer(BDOC_CONTAINER_TYPE).build(); } public static Container createContainerWithFile(TemporaryFolder testFolder) throws IOException { ContainerBuilder builder = ContainerBuilder.aContainer(); Container container = populateContainerBuilderWithFile(builder, testFolder); return container; } public static Container createContainerWithFile(TemporaryFolder testFolder, String containerType) throws IOException { ContainerBuilder builder = ContainerBuilder.aContainer(containerType); Container container = populateContainerBuilderWithFile(builder, testFolder); return container; } public static Container createContainerWithFile(String dataFilePath) { return createContainerWithFile(dataFilePath, "text/plain"); } public static Container createContainerWithFile(String dataFilePath, String mimeType) { Container container = ContainerBuilder. aContainer(BDOC_CONTAINER_TYPE). withConfiguration(new Configuration(Configuration.Mode.TEST)). withDataFile(dataFilePath, mimeType) .build(); return container; } public static Signature signContainer(Container container) { DataToSign dataToSign = buildDataToSign(container); return makeSignature(container, dataToSign); } public static Signature signContainer(Container container, DigestAlgorithm digestAlgorithm) { DataToSign dataToSign = prepareDataToSign(container). withSignatureDigestAlgorithm(digestAlgorithm). buildDataToSign(); return makeSignature(container, dataToSign); } public static Signature signContainer(Container container, SignatureProfile signatureProfile) { DataToSign dataToSign = prepareDataToSign(container). withSignatureProfile(signatureProfile). buildDataToSign(); return makeSignature(container, dataToSign); } public static Signature makeSignature(Container container, DataToSign dataToSign) { byte[] signatureValue = TestSigningHelper.sign(dataToSign.getDigestToSign(), dataToSign.getDigestAlgorithm()); assertNotNull(signatureValue); assertTrue(signatureValue.length > 1); Signature signature = dataToSign.finalize(signatureValue); container.addSignature(signature); return signature; } public static DataToSign buildDataToSign(Container container) { SignatureBuilder builder = prepareDataToSign(container); return builder.buildDataToSign(); } public static DataToSign buildDataToSign(Container container, String signatureId) { SignatureBuilder builder = prepareDataToSign(container); builder.withSignatureId(signatureId); return builder.buildDataToSign(); } public static Container open(String path) { Container container = ContainerBuilder. aContainer(BDOC_CONTAINER_TYPE). fromExistingFile(path). build(); return container; } private static Container populateContainerBuilderWithFile(ContainerBuilder builder, TemporaryFolder testFolder) throws IOException { File testFile = createTestFile(testFolder); Container container = builder. withConfiguration(new Configuration(Configuration.Mode.TEST)). withDataFile(testFile.getPath(), "text/plain") .build(); return container; } private static SignatureBuilder prepareDataToSign(Container container) { return SignatureBuilder. aSignature(container). withSignatureDigestAlgorithm(DigestAlgorithm.SHA256). withSignatureProfile(SignatureProfile.LT_TM). withSigningCertificate(getSigningCert()); } public static File createTestFile(TemporaryFolder testFolder) throws IOException { File testFile = testFolder.newFile(); FileUtils.writeStringToFile(testFile, "Banana Pancakes"); return testFile; } }