package eu.europa.esig.dss.cades.validation;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;
import java.io.File;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.junit.Test;
import eu.europa.esig.dss.DSSDocument;
import eu.europa.esig.dss.FileDocument;
import eu.europa.esig.dss.validation.CommonCertificateVerifier;
import eu.europa.esig.dss.validation.SignaturePolicyProvider;
import eu.europa.esig.dss.validation.SignedDocumentValidator;
import eu.europa.esig.dss.validation.reports.Reports;
import eu.europa.esig.dss.validation.reports.wrapper.DiagnosticData;
import eu.europa.esig.dss.validation.reports.wrapper.SignatureWrapper;
public class PolicySPURITest {
@Test
public void test() {
DSSDocument dssDocument = new FileDocument("src/test/resources/validation/dss-728/CADES-B-DETACHED-withpolicy1586434883385020407.cades");
SignedDocumentValidator validator = SignedDocumentValidator.fromDocument(dssDocument);
CommonCertificateVerifier certificateVerifier = new CommonCertificateVerifier();
certificateVerifier.setDataLoader(new MockDataLoader());
validator.setCertificateVerifier(certificateVerifier);
List<DSSDocument> detachedContents = new ArrayList<DSSDocument>();
detachedContents.add(new FileDocument("src/test/resources/validation/dss-728/InfoSelladoTiempo.pdf"));
validator.setDetachedContents(detachedContents);
Reports reports = validator.validateDocument();
validatePolicy(reports);
}
@Test
public void testWithFilePolicy() {
DSSDocument dssDocument = new FileDocument("src/test/resources/validation/dss-728/CADES-B-DETACHED-withpolicy1586434883385020407.cades");
SignedDocumentValidator validator = SignedDocumentValidator.fromDocument(dssDocument);
SignaturePolicyProvider signaturePolicyProvider = new SignaturePolicyProvider();
Map<String, DSSDocument> signaturePoliciesByUrl = new HashMap<String, DSSDocument>();
signaturePoliciesByUrl.put("https://sede.060.gob.es/politica_de_firma_anexo_1.pdf",
new FileDocument(new File("src/test/resources/validation/dss-728/politica_de_firma_anexo_1.pdf")));
signaturePolicyProvider.setSignaturePoliciesByUrl(signaturePoliciesByUrl);
validator.setSignaturePolicyProvider(signaturePolicyProvider);
validator.setCertificateVerifier(new CommonCertificateVerifier());
List<DSSDocument> detachedContents = new ArrayList<DSSDocument>();
detachedContents.add(new FileDocument("src/test/resources/validation/dss-728/InfoSelladoTiempo.pdf"));
validator.setDetachedContents(detachedContents);
Reports reports = validator.validateDocument();
validatePolicy(reports);
}
private void validatePolicy(Reports reports) {
DiagnosticData diagnosticData = reports.getDiagnosticData();
List<SignatureWrapper> signatures = diagnosticData.getSignatures();
SignatureWrapper signatureWrapper = signatures.get(0);
String policyId = diagnosticData.getPolicyId();
assertEquals("2.16.724.1.3.1.1.2.1.9", policyId);
assertEquals("https://sede.060.gob.es/politica_de_firma_anexo_1.pdf", signatureWrapper.getPolicyUrl());
assertFalse(signatureWrapper.isPolicyAsn1Processable());
assertTrue(signatureWrapper.isPolicyIdentified());
assertTrue(signatureWrapper.isPolicyStatus());
}
}