diff options
Diffstat (limited to 'eaaf_modules/eaaf_module_moa-sig/src/test/java')
5 files changed, 388 insertions, 1 deletions
diff --git a/eaaf_modules/eaaf_module_moa-sig/src/test/java/at/gv/egiz/eaaf/modules/sigverify/moasig/test/MoaSigSpringResourceProviderTest.java b/eaaf_modules/eaaf_module_moa-sig/src/test/java/at/gv/egiz/eaaf/modules/sigverify/moasig/test/MoaSigSpringResourceProviderTest.java new file mode 100644 index 00000000..341c5a8c --- /dev/null +++ b/eaaf_modules/eaaf_module_moa-sig/src/test/java/at/gv/egiz/eaaf/modules/sigverify/moasig/test/MoaSigSpringResourceProviderTest.java @@ -0,0 +1,52 @@ +package at.gv.egiz.eaaf.modules.sigverify.moasig.test; + +import java.io.IOException; +import java.io.InputStream; + +import org.apache.commons.io.IOUtils; +import org.junit.Assert; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.junit.runners.BlockJUnit4ClassRunner; +import org.springframework.core.io.Resource; + +import at.gv.egiz.eaaf.modules.sigverify.moasig.impl.MoaSigSpringResourceProvider; + + + +@RunWith(BlockJUnit4ClassRunner.class) +public class MoaSigSpringResourceProviderTest { + + static final String TEST_SPI_LOADER_PATH = + "/META-INF/services/at.gv.egiz.components.spring.api.SpringResourceProvider"; + + @Test + public void testSpringConfig() { + final MoaSigSpringResourceProvider test = new MoaSigSpringResourceProvider(); + for (final Resource el : test.getResourcesToLoad()) { + try { + IOUtils.toByteArray(el.getInputStream()); + + } catch (final IOException e) { + Assert.fail("Ressouce: " + el.getFilename() + " not found"); + } + + } + } + + @Test + public void testSpiLoaderConfig() { + final InputStream el = this.getClass().getResourceAsStream(TEST_SPI_LOADER_PATH); + try { + final String spiFile = IOUtils.toString(el, "UTF-8"); + + Assert.assertEquals("Wrong classpath in SPI file", MoaSigSpringResourceProvider.class.getName(), + spiFile); + + + } catch (final IOException e) { + Assert.fail("Ressouce: " + TEST_SPI_LOADER_PATH + " not found"); + } + + } +} diff --git a/eaaf_modules/eaaf_module_moa-sig/src/test/java/at/gv/egiz/eaaf/modules/sigverify/moasig/test/verify/SignatureVerificationServiceTest.java b/eaaf_modules/eaaf_module_moa-sig/src/test/java/at/gv/egiz/eaaf/modules/sigverify/moasig/test/verify/SignatureVerificationServiceTest.java new file mode 100644 index 00000000..71c4b1af --- /dev/null +++ b/eaaf_modules/eaaf_module_moa-sig/src/test/java/at/gv/egiz/eaaf/modules/sigverify/moasig/test/verify/SignatureVerificationServiceTest.java @@ -0,0 +1,202 @@ +package at.gv.egiz.eaaf.modules.sigverify.moasig.test.verify; + +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.assertThrows; +import static org.junit.Assert.assertTrue; + +import java.io.IOException; +import java.util.List; + +import org.apache.commons.io.IOUtils; +import org.junit.AfterClass; +import org.junit.Assert; +import org.junit.BeforeClass; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.test.annotation.DirtiesContext; +import org.springframework.test.annotation.DirtiesContext.ClassMode; +import org.springframework.test.context.ContextConfiguration; +import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; + +import at.gv.egiz.eaaf.modules.sigverify.moasig.api.ISignatureVerificationService; +import at.gv.egiz.eaaf.modules.sigverify.moasig.api.data.IPdfSignatureVerificationResponse; +import at.gv.egiz.eaaf.modules.sigverify.moasig.api.data.IXmlSignatureVerificationResponse; +import at.gv.egiz.eaaf.modules.sigverify.moasig.exceptions.MoaSigServiceException; +import at.gv.egiz.eaaf.modules.sigverify.moasig.impl.data.VerifyPdfSignatureResponse.CoversFullDocument; +import at.gv.egovernment.moa.spss.server.config.ConfigurationException; +import ch.qos.logback.classic.Level; +import ch.qos.logback.classic.Logger; +import lombok.extern.slf4j.Slf4j; + +@Slf4j +@RunWith(SpringJUnit4ClassRunner.class) +@ContextConfiguration("/moa-sig-service.beans.xml") +@DirtiesContext(classMode = ClassMode.BEFORE_CLASS) +public class SignatureVerificationServiceTest { + + @Autowired ISignatureVerificationService service; + + /** + * jUnit class initializer. + * + * @throws IOException In case of an error + * @throws ConfigurationException In case of an error + */ + @BeforeClass + public static void moaSpssInitialize() throws IOException, ConfigurationException { + log.info("Loading Java security providers."); + final String current = new java.io.File(".").getCanonicalPath(); + System.setProperty("moa.spss.server.configuration", + current + "/src/test/resources/config/moaspss_config/MOASPSSConfiguration.xml"); + + ((Logger) LoggerFactory.getLogger("at.gv.egovernment.moa")).setLevel(Level.DEBUG); + ((Logger) LoggerFactory.getLogger("iaik.server")).setLevel(Level.INFO); + ((Logger) LoggerFactory.getLogger("iaik.pki")).setLevel(Level.INFO); + + } + + /** + * Reset MOA-SPSS configuration. + */ + @AfterClass + public static void removeMoaSpssConfig() { + System.setProperty("moa.spss.server.configuration", ""); + + } + + @Test + public void unknownTrustProfile() throws IOException { + // load signature + byte[] signature = IOUtils.resourceToByteArray("/data/xml/zuse_sig_1.xml"); + + // start verification + MoaSigServiceException exception = assertThrows(MoaSigServiceException.class, + () -> service.verifyXmlSignature(signature, "notexist")); + + // verify state + Assert.assertEquals("wrong exception", "service.moasig.03", exception.getErrorId()); + + } + + @Test + public void simpleSignaturVerificationTest() throws MoaSigServiceException, IOException { + // load signature + byte[] signature = IOUtils.resourceToByteArray("/data/xml/zuse_sig_1.xml"); + + //start verification + IXmlSignatureVerificationResponse result = + service.verifyXmlSignature(signature, "MOAIDBuergerkarteAuthentisierungsDaten"); + + //verify result + Assert.assertEquals("sig. checkCode", 0, result.getSignatureCheckCode()); + Assert.assertEquals("cert. checkCode", 1, result.getCertificateCheckCode()); + Assert.assertEquals("XML manifest. checkCode", 0, result.getXmlDsigManifestCheckCode()); + Assert.assertEquals("manifest. checkCode", 0, result.getSignatureManifestCheckCode()); + + Assert.assertNotNull("X509Cert", result.getX509Certificate()); + Assert.assertNotNull("X509Cert encoded", result.getX509CertificateEncoded()); + + Assert.assertFalse("PubAuthority flag", result.isPublicAuthority()); + Assert.assertNull("PubAuthorityIdentifer", result.getPublicAuthorityCode()); + + Assert.assertFalse("qcCert flag", result.isQualifiedCertificate()); + + } + + @Test + public void noCertPathByMissingX509Extensions() throws MoaSigServiceException, IOException { + // load signature + byte[] signature = IOUtils.resourceToByteArray("/data/zuse/signed-notification-with-pdf.xml"); + + //start verification + IXmlSignatureVerificationResponse result = + service.verifyXmlSignature(signature, "default-trustprofile"); + + //verify result + Assert.assertEquals("cert. checkCode", 1, result.getCertificateCheckCode()); + + } + + @Test + public void simplePdfSignatureTest() throws IOException, MoaSigServiceException { + // load signature + byte[] signature = IOUtils.resourceToByteArray( + "/data/pades/Plugtest2019_ESIG-P_AT_SIT_Signature-P-AT_SIT-4.pdf"); + + List<IPdfSignatureVerificationResponse> result = + service.verifyPdfSignature(signature, "MOAIDBuergerkarteAuthentisierungsDaten"); + + assertNotNull("result", result); + assertFalse("result is empty", result.isEmpty()); + assertEquals("missing signature", 2, result.size()); + + assertNull("sigAlg 1", result.get(0).getSignatureAlgorithmIdentifier()); + assertNull("formCheck 1", result.get(0).getExtendedCertificateValidation()); + assertTrue("ext. certCheck 1", result.get(0).getFormValidationResults().isEmpty()); + assertEquals("coversFullDoc 1", CoversFullDocument.UNKNOWN, result.get(0).getSignatureCoversFullDocument()); + + assertNull("SigAlg 2", result.get(1).getSignatureAlgorithmIdentifier()); + assertNull("formCheck 2", result.get(1).getExtendedCertificateValidation()); + assertTrue("ext. certCheck 2", result.get(1).getFormValidationResults().isEmpty()); + assertEquals("coversFullDoc 2", CoversFullDocument.UNKNOWN, result.get(1).getSignatureCoversFullDocument()); + + } + + @Test + public void extendedPdfSignatureTest() throws IOException, MoaSigServiceException { + // load signature + byte[] signature = IOUtils.resourceToByteArray( + "/data/pades/Plugtest2019_ESIG-P_AT_SIT_Signature-P-AT_SIT-4.pdf"); + + List<IPdfSignatureVerificationResponse> result = + service.verifyPdfSignature(signature, "MOAIDBuergerkarteAuthentisierungsDaten", true); + + assertNotNull("result", result); + assertFalse("result is empty", result.isEmpty()); + assertEquals("missing signature", 2, result.size()); + + assertEquals("sigCheckCode", 0, result.get(0).getSignatureCheckCode()); + assertEquals("certCheckCode", 0, result.get(0).getCertificateCheckCode()); + + assertNotNull("sigAlg 1", result.get(0).getSignatureAlgorithmIdentifier()); + assertNotNull("formCheck 1", result.get(0).getExtendedCertificateValidation()); + assertFalse("ext. certCheck 1", result.get(0).getFormValidationResults().isEmpty()); + assertEquals("coversFullDoc 1", CoversFullDocument.NO, result.get(0).getSignatureCoversFullDocument()); + + //valid ext. cert result + assertEquals("ext. cert. check code", 2, + result.get(0).getExtendedCertificateValidation().getMajorResult().getCode()); + assertEquals("ext. cert. check info", "INDETERMINATE", + result.get(0).getExtendedCertificateValidation().getMajorResult().getInfo()); + assertEquals("ext. cert. check code", 24, + result.get(0).getExtendedCertificateValidation().getMinorResult().getCode()); + assertEquals("ext. cert. check info", "ERROR", + result.get(0).getExtendedCertificateValidation().getMinorResult().getInfo()); + + + //validate form-check result + assertEquals("ext. formcheck size", 4, result.get(0).getFormValidationResults().size()); + assertEquals("wrong PAdES-B Code", 0, result.get(0).getFormValidationResults().stream() + .filter(el -> el.getInfo().equals("B-B")) + .findFirst() + .get().getCode()); + + result.get(0).getFormValidationResults().stream() + .filter(el -> !el.getInfo().equals("B-B")) + .forEach(el -> assertEquals("wrong form check-code", 2, el.getCode())); + + + assertNotNull("SigAlg 2", result.get(1).getSignatureAlgorithmIdentifier()); + assertNotNull("formCheck 2", result.get(1).getExtendedCertificateValidation()); + assertFalse("ext. certCheck 2", result.get(1).getFormValidationResults().isEmpty()); + assertEquals("coversFullDoc 2", CoversFullDocument.YES, result.get(1).getSignatureCoversFullDocument()); + + } + +} + diff --git a/eaaf_modules/eaaf_module_moa-sig/src/test/java/at/gv/egiz/eaaf/modules/sigverify/moasig/test/verify/SignatureVerificationServiceZuseConfigTest.java b/eaaf_modules/eaaf_module_moa-sig/src/test/java/at/gv/egiz/eaaf/modules/sigverify/moasig/test/verify/SignatureVerificationServiceZuseConfigTest.java new file mode 100644 index 00000000..909c37dc --- /dev/null +++ b/eaaf_modules/eaaf_module_moa-sig/src/test/java/at/gv/egiz/eaaf/modules/sigverify/moasig/test/verify/SignatureVerificationServiceZuseConfigTest.java @@ -0,0 +1,82 @@ +package at.gv.egiz.eaaf.modules.sigverify.moasig.test.verify; + +import java.io.IOException; + +import org.apache.commons.io.IOUtils; +import org.junit.AfterClass; +import org.junit.Assert; +import org.junit.BeforeClass; +import org.junit.Ignore; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.test.annotation.DirtiesContext; +import org.springframework.test.annotation.DirtiesContext.ClassMode; +import org.springframework.test.context.ContextConfiguration; +import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; + +import at.gv.egiz.eaaf.modules.sigverify.moasig.api.ISignatureVerificationService; +import at.gv.egiz.eaaf.modules.sigverify.moasig.api.data.IXmlSignatureVerificationResponse; +import at.gv.egiz.eaaf.modules.sigverify.moasig.exceptions.MoaSigServiceException; +import at.gv.egovernment.moa.spss.server.config.ConfigurationException; +import lombok.extern.slf4j.Slf4j; + +@Ignore +@Slf4j +@RunWith(SpringJUnit4ClassRunner.class) +@ContextConfiguration("/moa-sig-service.beans.xml") +@DirtiesContext(classMode = ClassMode.BEFORE_CLASS) +public class SignatureVerificationServiceZuseConfigTest { + + @Autowired ISignatureVerificationService service; + + /** + * jUnit class initializer. + * + * @throws IOException In case of an error + * @throws ConfigurationException In case of an error + */ + @BeforeClass + public static void moaSpssInitialize() throws IOException, ConfigurationException { + log.info("Loading Java security providers."); + final String current = new java.io.File(".").getCanonicalPath(); + System.setProperty("moa.spss.server.configuration", + current + "/src/test/resources/config/moaspss_config/MOASPSSConfiguration_zuse.xml"); + + } + + /** + * Reset MOA-SPSS configuration. + */ + @AfterClass + public static void removeMoaSpssConfig() { + System.setProperty("moa.spss.server.configuration", ""); + + } + + @Test + public void simpleSignaturVerificationTest() throws IOException, MoaSigServiceException { + // load signature + byte[] signature = IOUtils.resourceToByteArray("/data/xml/zuse_sig_1.xml"); + + //start verification + IXmlSignatureVerificationResponse result = + service.verifyXmlSignature(signature, "default-trustprofile"); + + //verify result + Assert.assertEquals("sig. checkCode", 0, result.getSignatureCheckCode()); + Assert.assertEquals("cert. checkCode", 1, result.getCertificateCheckCode()); + Assert.assertEquals("XML manifest. checkCode", 0, result.getXmlDsigManifestCheckCode()); + Assert.assertEquals("manifest. checkCode", 0, result.getSignatureManifestCheckCode()); + + Assert.assertNotNull("X509Cert", result.getX509Certificate()); + Assert.assertNotNull("X509Cert encoded", result.getX509CertificateEncoded()); + + Assert.assertFalse("PubAuthority flag", result.isPublicAuthority()); + Assert.assertNull("PubAuthorityIdentifer", result.getPublicAuthorityCode()); + + Assert.assertFalse("qcCert flag", result.isQualifiedCertificate()); + + } + +} diff --git a/eaaf_modules/eaaf_module_moa-sig/src/test/java/console/PdfSigDecoder.java b/eaaf_modules/eaaf_module_moa-sig/src/test/java/console/PdfSigDecoder.java index 28338746..b9e9e517 100644 --- a/eaaf_modules/eaaf_module_moa-sig/src/test/java/console/PdfSigDecoder.java +++ b/eaaf_modules/eaaf_module_moa-sig/src/test/java/console/PdfSigDecoder.java @@ -21,7 +21,7 @@ public class PdfSigDecoder { * @throws UnsupportedEncodingException In case of a general error */ public static void main(String[] args) throws CodingException, UnsupportedEncodingException, IOException { - InputStream is = PdfSigDecoder.class.getResourceAsStream("/pdf_cades_3.hex"); + InputStream is = PdfSigDecoder.class.getResourceAsStream("/pdf_cades_4.hex"); String test = new String(StreamUtils.copyToByteArray(is), "UTF-8"); test = test.replaceAll("\\n", ""); final byte[] bytes = new byte[test.length() / 2]; diff --git a/eaaf_modules/eaaf_module_moa-sig/src/test/java/console/SchemaValidationTest.java b/eaaf_modules/eaaf_module_moa-sig/src/test/java/console/SchemaValidationTest.java new file mode 100644 index 00000000..4680fa3e --- /dev/null +++ b/eaaf_modules/eaaf_module_moa-sig/src/test/java/console/SchemaValidationTest.java @@ -0,0 +1,51 @@ +package console; + +import java.io.InputStream; + +import org.w3c.dom.Document; + +import at.gv.egovernment.moaspss.util.DOMUtils; + +public class SchemaValidationTest { + + public static final String SCHEMA_ROOT = "/config/zuseSchema/"; + + public static final String XML_NS_URI = "http://www.w3.org/XML/1998/namespace"; + public static final String XML_SCHEMA_LOCATION = SCHEMA_ROOT + "xml.xsd"; + + public static final String XSI_NS_URI = "http://www.w3.org/2001/XMLSchema-instance"; + public static final String XSI_SCHEMA_LOCATION = SCHEMA_ROOT + "XMLSchema-instance.xsd"; + + public static final String eDELIVERY20 = "http://reference.e-government.gv.at/namespace/zustellung/msg/phase2/20181206#"; + public static final String eDELIVERY20_SCHEMA_LOCATION = SCHEMA_ROOT + "zuse_p2.xsd"; + + public static final String eDELIVERY_PERSON_20 = "http://reference.e-government.gv.at/namespace/persondata/phase2/20181206#"; + public static final String eDELIVERY_PERSON_20_SCHEMA_LOCATION = SCHEMA_ROOT + "zuse_mypersondata_en_p2.xsd"; + + private static final String ZUSE_SCHEMAS = +// (XML_NS_URI + " " + XML_SCHEMA_LOCATION + " ") +// + (XSI_NS_URI + " " + XSI_SCHEMA_LOCATION + " ") + (eDELIVERY20 + " " + eDELIVERY20_SCHEMA_LOCATION + " ") + + (eDELIVERY_PERSON_20 + " " + eDELIVERY_PERSON_20_SCHEMA_LOCATION); + + /** + * Simple test. + * + * @param args not used yet + * @throws Exception in case of an error + */ + public static void main(String[] args) throws Exception { + + InputStream is = SchemaValidationTest.class.getResourceAsStream("/data/zuse/msg.xml"); + + +// Element result = DOMUtils.parseXmlValidating(is); + + Document result = DOMUtils.parseDocument(is, true, ZUSE_SCHEMAS, null); + + + System.out.print(DOMUtils.serializeNode(result)); + + } + +} |