package eu.europa.esig.dss.cades.extension;
import static org.junit.Assert.assertFalse;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import org.junit.Test;
import eu.europa.esig.dss.DSSDocument;
import eu.europa.esig.dss.DSSException;
import eu.europa.esig.dss.FileDocument;
import eu.europa.esig.dss.SignatureAlgorithm;
import eu.europa.esig.dss.SignatureLevel;
import eu.europa.esig.dss.cades.CAdESSignatureParameters;
import eu.europa.esig.dss.cades.signature.CAdESService;
import eu.europa.esig.dss.test.gen.CertificateService;
import eu.europa.esig.dss.test.mock.MockTSPSource;
import eu.europa.esig.dss.validation.CommonCertificateVerifier;
import eu.europa.esig.dss.validation.SignedDocumentValidator;
import eu.europa.esig.dss.validation.reports.Reports;
import eu.europa.esig.dss.validation.reports.wrapper.DiagnosticData;
/**
* Unit test to fix issue https://esig-dss.atlassian.net/browse/DSS-646
*/
public class ExtendToCAdESLtaTest {
private static final String SIGNED_DOC_PATH = "src/test/resources/validation/dss-646/CAdES_A_DETACHED.csig";
private static final String DETACHED_DOC_PATH = "src/test/resources/validation/dss-646/document.pdf";
@Test
public void testValidation() {
SignedDocumentValidator validator = SignedDocumentValidator.fromDocument(new FileDocument(SIGNED_DOC_PATH));
validator.setCertificateVerifier(new CommonCertificateVerifier());
List<DSSDocument> detachedContents = new ArrayList<DSSDocument>();
detachedContents.add(new FileDocument(DETACHED_DOC_PATH));
validator.setDetachedContents(detachedContents);
Reports reports = validator.validateDocument();
// reports.print();
DiagnosticData diagnosticData = reports.getDiagnosticData();
// The ordering of attributes inside the SET is wrong. The attributes must be ordering by their tags and length
// Since all the attributes have the same tag, the length decide the order, and the messageDigest should be
// before the signingTime
assertFalse(diagnosticData.isBLevelTechnicallyValid(diagnosticData.getFirstSignatureId()));
}
@Test(expected = DSSException.class)
public void testExtend() throws Exception {
CertificateService certificateService = new CertificateService();
CAdESService service = new CAdESService(new CommonCertificateVerifier());
service.setTspSource(new MockTSPSource(certificateService.generateTspCertificate(SignatureAlgorithm.RSA_SHA256)));
CAdESSignatureParameters parameters = new CAdESSignatureParameters();
parameters.setSignatureLevel(SignatureLevel.CAdES_BASELINE_LTA);
DSSDocument detachedContent = new FileDocument(DETACHED_DOC_PATH);
parameters.setDetachedContents(Arrays.asList(detachedContent));
DSSDocument extendDocument = service.extendDocument(new FileDocument(SIGNED_DOC_PATH), parameters);
}
}