diff --git a/src/utils.js b/src/utils.js index 98796e24871cff232beec70b5380f5ea78dd19c9..67f4f4efe335cf3d400fe8ff3f6d6149753d9f62 100644 --- a/src/utils.js +++ b/src/utils.js @@ -111,8 +111,8 @@ export const readBinaryFileContent = async (file) => { */ export const getPDFSignatureCount = async (file) => { const sigRegex = new RegExp( - "/Type\\s*/Sig\\s*/Filter\\s*/Adobe.PPKLite\\s*/SubFilter\\s*(/ETSI\\.CAdES\\.detached|/adbe\\.pkcs7\\.detached)", - "g"); + "/Type\\s*/Sig.*?/SubFilter\\s*(/ETSI\\.CAdES\\.detached|/adbe\\.pkcs7\\.detached)", + "gs"); const content = await readBinaryFileContent(file); let matches = 0; while (sigRegex.exec(content) !== null) { diff --git a/test/unit.js b/test/unit.js index 6038335dab5aa979d8b02214d16f7d47549e0889..89598602d2a48500b26a4f8eb7984b4024ae8e01 100644 --- a/test/unit.js +++ b/test/unit.js @@ -47,11 +47,15 @@ suite('pdf signature detection', () => { } test('getPDFSignatureCount', async () => { + // Produced via pdf-as-web let sig1 = "/Type\n/Sig\n/Filter\n/Adobe.PPKLite\n/SubFilter\n/ETSI.CAdES.detached"; let sig2 = "/Type\n/Sig\n/Filter\n/Adobe.PPKLite\n/SubFilter\n/adbe.pkcs7.detached"; + // Produced via https://www.handy-signatur.at + let sig3 = "/Type /Sig\n/Name (Max Meier)\n/Location ()\n/Reason ()\n/M (D:20210201154123+01'00')\n/Filter /asign.ECDSA\n/SubFilter /ETSI.CAdES.detached"; assert(await getPDFSignatureCount(getPDFFile(sig1)) === 1); assert(await getPDFSignatureCount(getPDFFile(sig2)) === 1); + assert(await getPDFSignatureCount(getPDFFile(sig3)) === 1); assert(await getPDFSignatureCount(getPDFFile(sig1 + sig2)) === 2); assert(await getPDFSignatureCount(getPDFFile("foo" + sig1 + "bar" + sig2 + "quux")) === 2); assert(await getPDFSignatureCount(getPDFFile("\nfoo" + sig1 + "bar\n")) === 1);