diff options
| author | Jakob Heher <jakob.heher@iaik.tugraz.at> | 2026-04-15 13:49:22 +0200 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2026-04-15 13:49:22 +0200 |
| commit | 77dd3fcc4d85088b15ab859c4438521d9cd6ed10 (patch) | |
| tree | aefedc8d2ef77e6819b46a948459d6016dfe5b62 /pdf-as-lib/src/test/java/at | |
| parent | 88930540361a88ff56e07fed31004b583f2e729f (diff) | |
| download | pdf-as-4-77dd3fcc4d85088b15ab859c4438521d9cd6ed10.tar.gz pdf-as-4-77dd3fcc4d85088b15ab859c4438521d9cd6ed10.tar.bz2 pdf-as-4-77dd3fcc4d85088b15ab859c4438521d9cd6ed10.zip | |
pdf-as-5 (#82)
- JDK 17
- PDFBox 3
- PDF-AS Web moved to Spring Boot
- MOA Integration tests w/ new error code
---------
Co-authored-by: Gerald Palfinger <gerald.palfinger@a-sit.at>
Co-authored-by: kathrin.resek <kathrin.resek@a-sit.at>
Diffstat (limited to 'pdf-as-lib/src/test/java/at')
2 files changed, 95 insertions, 1 deletions
diff --git a/pdf-as-lib/src/test/java/at/gv/egiz/pdfas/lib/test/SignatureTest.java b/pdf-as-lib/src/test/java/at/gv/egiz/pdfas/lib/test/SignatureTest.java new file mode 100644 index 00000000..fac1edd0 --- /dev/null +++ b/pdf-as-lib/src/test/java/at/gv/egiz/pdfas/lib/test/SignatureTest.java @@ -0,0 +1,94 @@ +package at.gv.egiz.pdfas.lib.test; + +import at.gv.egiz.pdfas.common.exceptions.PDFASError; +import at.gv.egiz.pdfas.lib.api.ByteArrayDataSource; +import at.gv.egiz.pdfas.lib.api.PdfAs; +import at.gv.egiz.pdfas.lib.api.PdfAsFactory; +import at.gv.egiz.pdfas.sigs.pades.PAdESSignerKeystore; +import lombok.val; +import org.junit.*; +import org.junit.rules.TemporaryFolder; +import org.junit.runner.RunWith; +import org.junit.runners.BlockJUnit4ClassRunner; +import org.zeroturnaround.zip.ZipUtil; + +import java.io.ByteArrayOutputStream; +import java.io.FileOutputStream; +import java.io.IOException; +import java.security.KeyStore; +import java.util.HashMap; +import java.util.Map; +import java.util.Objects; + +@RunWith(BlockJUnit4ClassRunner.class) +public class SignatureTest { + + @ClassRule + public static TemporaryFolder tempFolder = new TemporaryFolder(); + static PdfAs pdfAs; + static KeyStore keyStore; + + @BeforeClass + public static void initialize() throws Exception { + // unzip default config to temp dir + val configDir = tempFolder.newFolder(); + ZipUtil.unpack(PdfAs.class.getResourceAsStream("/config/config.zip"), configDir); + pdfAs = PdfAsFactory.createPdfAs(configDir); + + // load keystore + keyStore = KeyStore.getInstance("PKCS12"); + keyStore.load(SignatureTest.class.getResourceAsStream("/test.p12"), "password".toCharArray()); + } + + private final static Map<String, ByteArrayDataSource> _inputPdfCache = new HashMap<>(); + public static ByteArrayDataSource getInputPdf(String filename) throws IOException { + val normalizedName = filename.endsWith(".pdf") ? filename : (filename + ".pdf"); + var existing = _inputPdfCache.get(normalizedName); + if (existing == null) { + try (val stream = SignatureTest.class.getResourceAsStream("/data/" + normalizedName)) { + existing = new ByteArrayDataSource(Objects.requireNonNull(stream).readAllBytes()); + } + _inputPdfCache.put(normalizedName, existing); + } + return existing; + } + + private final static Map<String, PAdESSignerKeystore> _keystoreSignerCache = new HashMap<>(); + public static PAdESSignerKeystore getKeystoreSigner(String keyAlias) throws PDFASError { + var existing = _keystoreSignerCache.get(keyAlias); + if (existing == null) { + existing = new PAdESSignerKeystore(keyStore, keyAlias, "password"); + _keystoreSignerCache.put(keyAlias, existing); + } + return existing; + } + + @Test + public void signatureTest() throws Exception { + val inputPdf = getInputPdf("align.pdf"); + + val param = PdfAsFactory.createSignParameter(pdfAs.getConfiguration(), inputPdf, null); + param.setPlainSigner(getKeystoreSigner("test-key")); + param.setSignatureProfileId("SIGNATURBLOCK_SMALL_EN_NOTE"); + + val outputStream1 = new ByteArrayOutputStream(); + param.setOutputStream(outputStream1); + pdfAs.sign(param); + + val outputStream2 = new ByteArrayOutputStream(); + param.setOutputStream(outputStream2); + pdfAs.sign(param); + val state1 = pdfAs.startSign(param); + val state2 = state1.setCertificate(param.getPlainSigner().getCertificate(state1.getSignParameter()).getEncoded()); + val state3 = state2.setSignature(param.getPlainSigner().sign( + state2.getSignatureData(), + state2.getSignatureDataByteRange(), + state2.getSignParameter(), + state2.getRequestedSignature())); + state3.finishSign(); + + try (FileOutputStream fos = new FileOutputStream(tempFolder.newFile())) { + fos.write(outputStream1.toByteArray()); + } + } +} diff --git a/pdf-as-lib/src/test/java/at/gv/egiz/pdfas/lib/test/stamping/CertificateAndRequestParameterResolverTest.java b/pdf-as-lib/src/test/java/at/gv/egiz/pdfas/lib/test/stamping/CertificateAndRequestParameterResolverTest.java index e94d21e8..4aa07028 100644 --- a/pdf-as-lib/src/test/java/at/gv/egiz/pdfas/lib/test/stamping/CertificateAndRequestParameterResolverTest.java +++ b/pdf-as-lib/src/test/java/at/gv/egiz/pdfas/lib/test/stamping/CertificateAndRequestParameterResolverTest.java @@ -34,7 +34,7 @@ public class CertificateAndRequestParameterResolverTest { @Before public void initialize() throws PDFASError { SignParameter signParams = new SignParameterImpl(null, null, null); - opStatus = new OperationStatus(buildDummySettings(), signParams , null); + opStatus = new OperationStatus(buildDummySettings(), signParams , null, null); sigProfileSetting = new SignatureProfileSettings("test", buildDummySettings()); |
