package at.gv.egovernment.moa.spss.test.integration.tsl; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertNull; import static org.junit.Assert.assertTrue; import java.io.FileInputStream; import java.io.IOException; import java.util.Arrays; import java.util.Collections; import java.util.HashMap; import java.util.List; import java.util.Map; import javax.xml.parsers.ParserConfigurationException; import org.apache.commons.io.IOUtils; import org.apache.commons.lang3.RandomStringUtils; import org.junit.Before; import org.junit.BeforeClass; import org.junit.Ignore; import org.junit.Test; import org.junit.runner.RunWith; import org.junit.runners.BlockJUnit4ClassRunner; import at.gv.egovernment.moa.sig.tsl.engine.data.TSLProcessingResultElement; import at.gv.egovernment.moa.spss.MOAException; import at.gv.egovernment.moa.spss.api.cmsverify.VerifyCMSSignatureRequest; import at.gv.egovernment.moa.spss.api.cmsverify.VerifyCMSSignatureResponse; import at.gv.egovernment.moa.spss.api.cmsverify.VerifyCMSSignatureResponseElement; import at.gv.egovernment.moa.spss.api.xmlverify.AdESFormResults; import at.gv.egovernment.moa.spss.api.xmlverify.VerifyXMLSignatureRequest; import at.gv.egovernment.moa.spss.api.xmlverify.VerifyXMLSignatureResponse; import at.gv.egovernment.moa.spss.server.config.ConfigurationException; import at.gv.egovernment.moa.spss.server.init.SystemInitializer; import at.gv.egovernment.moa.spss.server.invoke.CMSSignatureVerificationInvoker; import at.gv.egovernment.moa.spss.server.invoke.XMLSignatureVerificationInvoker; import at.gv.egovernment.moa.spss.server.monitoring.ServiceStatusContainer; import at.gv.egovernment.moa.spss.test.integration.AbstractIntegrationTest; @RunWith(BlockJUnit4ClassRunner.class) public class OfficialEuTslTest extends AbstractIntegrationTest { CMSSignatureVerificationInvoker cadesInvoker; @BeforeClass public static void classInitializer() throws IOException, ConfigurationException, NoSuchFieldException, SecurityException, IllegalArgumentException, IllegalAccessException { jvmStateReset(); final String current = new java.io.File(".").getCanonicalPath(); System.setProperty("moa.spss.server.configuration", current + "/src/test/resources/moaspss_config/MOASPSSConfiguration_tsl_eu_official.xml"); System.setProperty("iaik.esi.sva.configuration.location", current + "/src/test/resources/moaspss_config/svaconfig.example"); moaSpssCore = SystemInitializer.init(); } @Before public void initializer() throws ConfigurationException { cadesInvoker = CMSSignatureVerificationInvoker.getInstance(); setUpContexts(RandomStringUtils.randomAlphabetic(10)); } @Test public void checkTslState() { assertTrue("TSL not active", ServiceStatusContainer.getStatus()); final List loadedTsl = ServiceStatusContainer.getTslDetailStatus(); assertFalse("no TSL loaded", loadedTsl.isEmpty()); assertTrue("wrong TSL size", loadedTsl.size() > 10); } @Test public void basicValidationCadesSignature() throws MOAException, IOException { final VerifyCMSSignatureRequest request = buildVerfifyCmsRequest( org.apache.commons.codec.binary.Base64.decodeBase64(IOUtils.resourceToByteArray( "/testdata/pades/testpdf.b64")), "OnlyTSL", true, false); // perform test final VerifyCMSSignatureResponse result = cadesInvoker.verifyCMSSignature(request); // verify result assertNotNull("verification result", result); assertEquals("wrong result size", 1, result.getResponseElements().size()); final VerifyCMSSignatureResponseElement cmsResult = (VerifyCMSSignatureResponseElement) result .getResponseElements().get(0); assertEquals("sigCode", 1, cmsResult.getSignatureCheck().getCode()); assertEquals("certCode", 0, cmsResult.getCertificateCheck().getCode()); assertNotNull("signerInfo", cmsResult.getSignerInfo()); assertEquals("issuerCC", "EE", cmsResult.getSignerInfo().getIssuerCountryCode()); assertFalse("publicAuthority", cmsResult.getSignerInfo().isPublicAuthority()); assertTrue("QC", cmsResult.getSignerInfo().isQualifiedCertificate()); assertTrue("SSCD", cmsResult.getSignerInfo().isSSCD()); assertNotNull("TSL infos", cmsResult.getSignerInfo().getTslInfos()); assertNull("form val. result", cmsResult.getAdESFormResults()); assertNull("extended val. result", cmsResult.getExtendedCertificateCheck()); assertNull("byteRange", cmsResult.getByteRangeOfSignature()); assertNull("used sig alg", cmsResult.getSignatureAlgorithm()); } @Test public void extendedValidationCadesSignature() throws MOAException, IOException { final VerifyCMSSignatureRequest request = buildVerfifyCmsRequest( org.apache.commons.codec.binary.Base64.decodeBase64(IOUtils.resourceToByteArray( "/testdata/pades/testpdf.b64")), "OnlyTSL", true, true); // perform test final VerifyCMSSignatureResponse result = cadesInvoker.verifyCMSSignature(request); // verify result assertNotNull("verification result", result); assertEquals("wrong result size", 1, result.getResponseElements().size()); final VerifyCMSSignatureResponseElement cmsResult = (VerifyCMSSignatureResponseElement) result .getResponseElements().get(0); assertEquals("sigCode", 1, cmsResult.getSignatureCheck().getCode()); assertEquals("certCode", 0, cmsResult.getCertificateCheck().getCode()); assertNotNull("signerInfo", cmsResult.getSignerInfo()); assertEquals("issuerCC", "EE", cmsResult.getSignerInfo().getIssuerCountryCode()); assertFalse("publicAuthority", cmsResult.getSignerInfo().isPublicAuthority()); assertTrue("QC", cmsResult.getSignerInfo().isQualifiedCertificate()); assertTrue("SSCD", cmsResult.getSignerInfo().isSSCD()); assertNotNull("TSL infos", cmsResult.getSignerInfo().getTslInfos()); assertNotNull("form val. result", cmsResult.getAdESFormResults()); assertEquals("form val. result size", 4, cmsResult.getAdESFormResults().size()); for (final Object el : cmsResult.getAdESFormResults()) { final AdESFormResults test = (AdESFormResults) el; if (Arrays.asList("B-B","B-T").contains(test.getName())) { assertEquals("Find wrong form val status", 0, test.getCode().longValue()); } else { assertEquals("Find wrong form val status", 0, test.getCode().longValue()); } } assertNotNull("extended val. result", cmsResult.getExtendedCertificateCheck()); assertEquals("ext. val major", 1, cmsResult.getExtendedCertificateCheck().getMajorCode()); assertEquals("ext. val major", 2, cmsResult.getExtendedCertificateCheck().getMinorCode()); assertNotNull("byteRange", cmsResult.getByteRangeOfSignature()); assertEquals("used sig alg", "SHA1withRSA", cmsResult.getSignatureAlgorithm()); } @Ignore @Test public void padesLteTest() throws MOAException, IOException { final VerifyCMSSignatureRequest request = buildVerfifyCmsRequest( IOUtils.toByteArray(new FileInputStream("/home/tlenz/Projekte/signaturprueftool/test_docs/20220623_rtr/Amtsiegel.pdf")), "OnlyTSL", true, true); // perform test final VerifyCMSSignatureResponse result = cadesInvoker.verifyCMSSignature(request); // verify result assertNotNull("verification result", result); } }