@e-sig/core 0.6.0 → 0.7.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +1 -1
- package/dist/index.d.ts +3 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -2
- package/dist/index.js.map +1 -1
- package/dist/pem-signer.d.ts +26 -5
- package/dist/pem-signer.d.ts.map +1 -1
- package/dist/pem-signer.js +84 -13
- package/dist/pem-signer.js.map +1 -1
- package/dist/pq-seal.d.ts +53 -3
- package/dist/pq-seal.d.ts.map +1 -1
- package/dist/pq-seal.js +92 -8
- package/dist/pq-seal.js.map +1 -1
- package/dist/pq-verify.d.ts +22 -0
- package/dist/pq-verify.d.ts.map +1 -1
- package/dist/pq-verify.js +16 -0
- package/dist/pq-verify.js.map +1 -1
- package/dist/render-pdf.d.ts +5 -5
- package/dist/render-pdf.d.ts.map +1 -1
- package/dist/render-pdf.js +51 -17
- package/dist/render-pdf.js.map +1 -1
- package/dist/sign-pdf.d.ts +45 -4
- package/dist/sign-pdf.d.ts.map +1 -1
- package/dist/sign-pdf.js +24 -1
- package/dist/sign-pdf.js.map +1 -1
- package/dist/types.d.ts +36 -0
- package/dist/types.d.ts.map +1 -1
- package/dist/vendor/placeholder-plain/LICENSE-signpdf.md +47 -0
- package/dist/vendor/placeholder-plain/createBufferPageWithAnnotation.d.ts +6 -0
- package/dist/vendor/placeholder-plain/createBufferPageWithAnnotation.d.ts.map +1 -0
- package/dist/vendor/placeholder-plain/createBufferPageWithAnnotation.js +38 -0
- package/dist/vendor/placeholder-plain/createBufferPageWithAnnotation.js.map +1 -0
- package/dist/vendor/placeholder-plain/createBufferRootWithAcroform.d.ts +6 -0
- package/dist/vendor/placeholder-plain/createBufferRootWithAcroform.d.ts.map +1 -0
- package/dist/vendor/placeholder-plain/createBufferRootWithAcroform.js +15 -0
- package/dist/vendor/placeholder-plain/createBufferRootWithAcroform.js.map +1 -0
- package/dist/vendor/placeholder-plain/createBufferTrailer.d.ts +4 -0
- package/dist/vendor/placeholder-plain/createBufferTrailer.d.ts.map +1 -0
- package/dist/vendor/placeholder-plain/createBufferTrailer.js +26 -0
- package/dist/vendor/placeholder-plain/createBufferTrailer.js.map +1 -0
- package/dist/vendor/placeholder-plain/findObject.d.ts +4 -0
- package/dist/vendor/placeholder-plain/findObject.d.ts.map +1 -0
- package/dist/vendor/placeholder-plain/findObject.js +18 -0
- package/dist/vendor/placeholder-plain/findObject.js.map +1 -0
- package/dist/vendor/placeholder-plain/getIndexFromRef.d.ts +4 -0
- package/dist/vendor/placeholder-plain/getIndexFromRef.d.ts.map +1 -0
- package/dist/vendor/placeholder-plain/getIndexFromRef.js +13 -0
- package/dist/vendor/placeholder-plain/getIndexFromRef.js.map +1 -0
- package/dist/vendor/placeholder-plain/getPageRef.d.ts +6 -0
- package/dist/vendor/placeholder-plain/getPageRef.d.ts.map +1 -0
- package/dist/vendor/placeholder-plain/getPageRef.js +18 -0
- package/dist/vendor/placeholder-plain/getPageRef.js.map +1 -0
- package/dist/vendor/placeholder-plain/getPagesDictionaryRef.d.ts +3 -0
- package/dist/vendor/placeholder-plain/getPagesDictionaryRef.d.ts.map +1 -0
- package/dist/vendor/placeholder-plain/getPagesDictionaryRef.js +12 -0
- package/dist/vendor/placeholder-plain/getPagesDictionaryRef.js.map +1 -0
- package/dist/vendor/placeholder-plain/index.d.ts +2 -0
- package/dist/vendor/placeholder-plain/index.d.ts.map +1 -0
- package/dist/vendor/placeholder-plain/index.js +4 -0
- package/dist/vendor/placeholder-plain/index.js.map +1 -0
- package/dist/vendor/placeholder-plain/pdfObject.d.ts +13 -0
- package/dist/vendor/placeholder-plain/pdfObject.d.ts.map +1 -0
- package/dist/vendor/placeholder-plain/pdfObject.js +142 -0
- package/dist/vendor/placeholder-plain/pdfObject.js.map +1 -0
- package/dist/vendor/placeholder-plain/pdfkitAddPlaceholder.d.ts +49 -0
- package/dist/vendor/placeholder-plain/pdfkitAddPlaceholder.d.ts.map +1 -0
- package/dist/vendor/placeholder-plain/pdfkitAddPlaceholder.js +115 -0
- package/dist/vendor/placeholder-plain/pdfkitAddPlaceholder.js.map +1 -0
- package/dist/vendor/placeholder-plain/plainAddPlaceholder.d.ts +41 -0
- package/dist/vendor/placeholder-plain/plainAddPlaceholder.d.ts.map +1 -0
- package/dist/vendor/placeholder-plain/plainAddPlaceholder.js +95 -0
- package/dist/vendor/placeholder-plain/plainAddPlaceholder.js.map +1 -0
- package/dist/vendor/placeholder-plain/readPdf.d.ts +20 -0
- package/dist/vendor/placeholder-plain/readPdf.d.ts.map +1 -0
- package/dist/vendor/placeholder-plain/readPdf.js +47 -0
- package/dist/vendor/placeholder-plain/readPdf.js.map +1 -0
- package/dist/vendor/placeholder-plain/readRefTable.d.ts +17 -0
- package/dist/vendor/placeholder-plain/readRefTable.d.ts.map +1 -0
- package/dist/vendor/placeholder-plain/readRefTable.js +84 -0
- package/dist/vendor/placeholder-plain/readRefTable.js.map +1 -0
- package/dist/vendor/placeholder-plain/xrefToRefMap.d.ts +3 -0
- package/dist/vendor/placeholder-plain/xrefToRefMap.d.ts.map +1 -0
- package/dist/vendor/placeholder-plain/xrefToRefMap.js +38 -0
- package/dist/vendor/placeholder-plain/xrefToRefMap.js.map +1 -0
- package/package.json +4 -5
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
// Vendored from @signpdf/placeholder-plain@3.3.0 (MIT). See LICENSE-signpdf.md.
|
|
2
|
+
// Faithful TypeScript port — logic and byte-emitting paths are unchanged.
|
|
3
|
+
import getIndexFromRef from "./getIndexFromRef.js";
|
|
4
|
+
const createBufferRootWithAcroform = (pdf, info, form) => {
|
|
5
|
+
const rootIndex = getIndexFromRef(info.xref, info.rootRef);
|
|
6
|
+
return Buffer.concat([
|
|
7
|
+
Buffer.from(`${rootIndex} 0 obj\n`),
|
|
8
|
+
Buffer.from("<<\n"),
|
|
9
|
+
Buffer.from(`${info.root}\n`),
|
|
10
|
+
Buffer.from(`/AcroForm ${form}`),
|
|
11
|
+
Buffer.from("\n>>\nendobj\n"),
|
|
12
|
+
]);
|
|
13
|
+
};
|
|
14
|
+
export default createBufferRootWithAcroform;
|
|
15
|
+
//# sourceMappingURL=createBufferRootWithAcroform.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"createBufferRootWithAcroform.js","sourceRoot":"","sources":["../../../src/vendor/placeholder-plain/createBufferRootWithAcroform.ts"],"names":[],"mappings":"AAAA,gFAAgF;AAChF,0EAA0E;AAC1E,OAAO,eAAe,MAAM,sBAAsB,CAAC;AAGnD,MAAM,4BAA4B,GAAG,CACnC,GAAW,EACX,IAAuB,EACvB,IAA4B,EACpB,EAAE;IACV,MAAM,SAAS,GAAG,eAAe,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;IAC3D,OAAO,MAAM,CAAC,MAAM,CAAC;QACnB,MAAM,CAAC,IAAI,CAAC,GAAG,SAAS,UAAU,CAAC;QACnC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC;QACnB,MAAM,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,IAAI,IAAI,CAAC;QAC7B,MAAM,CAAC,IAAI,CAAC,aAAa,IAAI,EAAE,CAAC;QAChC,MAAM,CAAC,IAAI,CAAC,gBAAgB,CAAC;KAC9B,CAAC,CAAC;AACL,CAAC,CAAC;AAEF,eAAe,4BAA4B,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"createBufferTrailer.d.ts","sourceRoot":"","sources":["../../../src/vendor/placeholder-plain/createBufferTrailer.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AAEtD,QAAA,MAAM,mBAAmB,GACvB,KAAK,MAAM,EACX,MAAM,iBAAiB,EACvB,iBAAiB,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,KACnC,MAwBF,CAAC;AAEF,eAAe,mBAAmB,CAAC"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
const createBufferTrailer = (pdf, info, addedReferences) => {
|
|
2
|
+
const sparseRows = [];
|
|
3
|
+
sparseRows[0] = "0000000000 65535 f "; // info.xref.tableRows[0];
|
|
4
|
+
addedReferences.forEach((offset, index) => {
|
|
5
|
+
const paddedOffset = `0000000000${offset}`.slice(-10);
|
|
6
|
+
sparseRows[index + 1] = `${index} 1\n${paddedOffset} 00000 n `;
|
|
7
|
+
});
|
|
8
|
+
const rows = sparseRows.filter((row) => row !== undefined);
|
|
9
|
+
return Buffer.concat([
|
|
10
|
+
Buffer.from("xref\n"),
|
|
11
|
+
Buffer.from(`${info.xref.startingIndex} 1\n`),
|
|
12
|
+
Buffer.from(rows.join("\n")),
|
|
13
|
+
Buffer.from("\ntrailer\n"),
|
|
14
|
+
Buffer.from("<<\n"),
|
|
15
|
+
Buffer.from(`/Size ${info.xref.maxIndex + 1}\n`),
|
|
16
|
+
Buffer.from(`/Root ${info.rootRef}\n`),
|
|
17
|
+
Buffer.from(info.infoRef ? `/Info ${info.infoRef}\n` : ""),
|
|
18
|
+
Buffer.from(`/Prev ${info.xRefPosition}\n`),
|
|
19
|
+
Buffer.from(">>\n"),
|
|
20
|
+
Buffer.from("startxref\n"),
|
|
21
|
+
Buffer.from(`${pdf.length}\n`),
|
|
22
|
+
Buffer.from("%%EOF"),
|
|
23
|
+
]);
|
|
24
|
+
};
|
|
25
|
+
export default createBufferTrailer;
|
|
26
|
+
//# sourceMappingURL=createBufferTrailer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"createBufferTrailer.js","sourceRoot":"","sources":["../../../src/vendor/placeholder-plain/createBufferTrailer.ts"],"names":[],"mappings":"AAMA,MAAM,mBAAmB,GAAG,CAC1B,GAAW,EACX,IAAuB,EACvB,eAAoC,EAC5B,EAAE;IACV,MAAM,UAAU,GAA8B,EAAE,CAAC;IACjD,UAAU,CAAC,CAAC,CAAC,GAAG,qBAAqB,CAAC,CAAC,0BAA0B;IAEjE,eAAe,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE;QACxC,MAAM,YAAY,GAAG,aAAa,MAAM,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC;QACtD,UAAU,CAAC,KAAK,GAAG,CAAC,CAAC,GAAG,GAAG,KAAK,OAAO,YAAY,WAAW,CAAC;IACjE,CAAC,CAAC,CAAC;IACH,MAAM,IAAI,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC,GAAG,EAAiB,EAAE,CAAC,GAAG,KAAK,SAAS,CAAC,CAAC;IAC1E,OAAO,MAAM,CAAC,MAAM,CAAC;QACnB,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC;QACrB,MAAM,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,aAAa,MAAM,CAAC;QAC7C,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC5B,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC;QAC1B,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC;QACnB,MAAM,CAAC,IAAI,CAAC,SAAS,IAAI,CAAC,IAAI,CAAC,QAAQ,GAAG,CAAC,IAAI,CAAC;QAChD,MAAM,CAAC,IAAI,CAAC,SAAS,IAAI,CAAC,OAAO,IAAI,CAAC;QACtC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,IAAI,CAAC,OAAO,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;QAC1D,MAAM,CAAC,IAAI,CAAC,SAAS,IAAI,CAAC,YAAY,IAAI,CAAC;QAC3C,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC;QACnB,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC;QAC1B,MAAM,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,MAAM,IAAI,CAAC;QAC9B,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC;KACrB,CAAC,CAAC;AACL,CAAC,CAAC;AAEF,eAAe,mBAAmB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"findObject.d.ts","sourceRoot":"","sources":["../../../src/vendor/placeholder-plain/findObject.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,mBAAmB,CAAC;AAEhE,QAAA,MAAM,UAAU,GAAI,KAAK,MAAM,EAAE,UAAU,sBAAsB,EAAE,KAAK,MAAM,KAAG,MAUhF,CAAC;AAEF,eAAe,UAAU,CAAC"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
// Vendored from @signpdf/placeholder-plain@3.3.0 (MIT). See LICENSE-signpdf.md.
|
|
2
|
+
// Faithful TypeScript port — logic and byte-emitting paths are unchanged.
|
|
3
|
+
// (Upstream passed 'utf8' as the second argument to indexOf/lastIndexOf; Node
|
|
4
|
+
// treats a string byteOffset as the encoding, i.e. identical to the defaults
|
|
5
|
+
// used here.)
|
|
6
|
+
import getIndexFromRef from "./getIndexFromRef.js";
|
|
7
|
+
const findObject = (pdf, refTable, ref) => {
|
|
8
|
+
const index = getIndexFromRef(refTable, ref);
|
|
9
|
+
const offset = refTable.offsets.get(index);
|
|
10
|
+
let slice = pdf.slice(offset);
|
|
11
|
+
slice = slice.slice(0, slice.indexOf("endobj"));
|
|
12
|
+
// FIXME: What if it is a stream?
|
|
13
|
+
slice = slice.slice(slice.indexOf("<<") + 2);
|
|
14
|
+
slice = slice.slice(0, slice.lastIndexOf(">>"));
|
|
15
|
+
return slice;
|
|
16
|
+
};
|
|
17
|
+
export default findObject;
|
|
18
|
+
//# sourceMappingURL=findObject.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"findObject.js","sourceRoot":"","sources":["../../../src/vendor/placeholder-plain/findObject.ts"],"names":[],"mappings":"AAAA,gFAAgF;AAChF,0EAA0E;AAC1E,8EAA8E;AAC9E,6EAA6E;AAC7E,cAAc;AACd,OAAO,eAAe,MAAM,sBAAsB,CAAC;AAGnD,MAAM,UAAU,GAAG,CAAC,GAAW,EAAE,QAAgC,EAAE,GAAW,EAAU,EAAE;IACxF,MAAM,KAAK,GAAG,eAAe,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;IAC7C,MAAM,MAAM,GAAG,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAW,CAAC;IACrD,IAAI,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IAC9B,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC;IAEhD,iCAAiC;IACjC,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;IAC7C,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC;IAChD,OAAO,KAAK,CAAC;AACf,CAAC,CAAC;AAEF,eAAe,UAAU,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"getIndexFromRef.d.ts","sourceRoot":"","sources":["../../../src/vendor/placeholder-plain/getIndexFromRef.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,mBAAmB,CAAC;AAEhE,QAAA,MAAM,eAAe,GAAI,UAAU,sBAAsB,EAAE,KAAK,MAAM,KAAG,MAOxE,CAAC;AAEF,eAAe,eAAe,CAAC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
// Vendored from @signpdf/placeholder-plain@3.3.0 (MIT). See LICENSE-signpdf.md.
|
|
2
|
+
// Faithful TypeScript port — logic and byte-emitting paths are unchanged.
|
|
3
|
+
import { SignPdfError } from "@signpdf/utils";
|
|
4
|
+
const getIndexFromRef = (refTable, ref) => {
|
|
5
|
+
const [indexString] = ref.split(" ");
|
|
6
|
+
const index = parseInt(indexString);
|
|
7
|
+
if (!refTable.offsets.has(index)) {
|
|
8
|
+
throw new SignPdfError(`Failed to locate object "${ref}".`, SignPdfError.TYPE_PARSE);
|
|
9
|
+
}
|
|
10
|
+
return index;
|
|
11
|
+
};
|
|
12
|
+
export default getIndexFromRef;
|
|
13
|
+
//# sourceMappingURL=getIndexFromRef.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"getIndexFromRef.js","sourceRoot":"","sources":["../../../src/vendor/placeholder-plain/getIndexFromRef.ts"],"names":[],"mappings":"AAAA,gFAAgF;AAChF,0EAA0E;AAC1E,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAG9C,MAAM,eAAe,GAAG,CAAC,QAAgC,EAAE,GAAW,EAAU,EAAE;IAChF,MAAM,CAAC,WAAW,CAAC,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IACrC,MAAM,KAAK,GAAG,QAAQ,CAAC,WAAW,CAAC,CAAC;IACpC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;QACjC,MAAM,IAAI,YAAY,CAAC,4BAA4B,GAAG,IAAI,EAAE,YAAY,CAAC,UAAU,CAAC,CAAC;IACvF,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC,CAAC;AAEF,eAAe,eAAe,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"getPageRef.d.ts","sourceRoot":"","sources":["../../../src/vendor/placeholder-plain/getPageRef.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AAEtD;;GAEG;AACH,MAAM,CAAC,OAAO,UAAU,UAAU,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,iBAAiB,GAAG,MAAM,CASrF"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
// Vendored from @signpdf/placeholder-plain@3.3.0 (MIT). See LICENSE-signpdf.md.
|
|
2
|
+
// Faithful TypeScript port — logic and byte-emitting paths are unchanged.
|
|
3
|
+
import getPagesDictionaryRef from "./getPagesDictionaryRef.js";
|
|
4
|
+
import findObject from "./findObject.js";
|
|
5
|
+
/**
|
|
6
|
+
* Finds the reference to a page.
|
|
7
|
+
*/
|
|
8
|
+
export default function getPageRef(pdfBuffer, info) {
|
|
9
|
+
const pagesRef = getPagesDictionaryRef(info);
|
|
10
|
+
const pagesDictionary = findObject(pdfBuffer, info.xref, pagesRef);
|
|
11
|
+
const kidsPosition = pagesDictionary.indexOf("/Kids");
|
|
12
|
+
const kidsStart = pagesDictionary.indexOf("[", kidsPosition) + 1;
|
|
13
|
+
const kidsEnd = pagesDictionary.indexOf("]", kidsPosition);
|
|
14
|
+
const pages = pagesDictionary.slice(kidsStart, kidsEnd).toString();
|
|
15
|
+
const split = pages.trim().split(" ", 3);
|
|
16
|
+
return `${split[0]} ${split[1]} ${split[2]}`;
|
|
17
|
+
}
|
|
18
|
+
//# sourceMappingURL=getPageRef.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"getPageRef.js","sourceRoot":"","sources":["../../../src/vendor/placeholder-plain/getPageRef.ts"],"names":[],"mappings":"AAAA,gFAAgF;AAChF,0EAA0E;AAC1E,OAAO,qBAAqB,MAAM,4BAA4B,CAAC;AAC/D,OAAO,UAAU,MAAM,iBAAiB,CAAC;AAGzC;;GAEG;AACH,MAAM,CAAC,OAAO,UAAU,UAAU,CAAC,SAAiB,EAAE,IAAuB;IAC3E,MAAM,QAAQ,GAAG,qBAAqB,CAAC,IAAI,CAAC,CAAC;IAC7C,MAAM,eAAe,GAAG,UAAU,CAAC,SAAS,EAAE,IAAI,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;IACnE,MAAM,YAAY,GAAG,eAAe,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;IACtD,MAAM,SAAS,GAAG,eAAe,CAAC,OAAO,CAAC,GAAG,EAAE,YAAY,CAAC,GAAG,CAAC,CAAC;IACjE,MAAM,OAAO,GAAG,eAAe,CAAC,OAAO,CAAC,GAAG,EAAE,YAAY,CAAC,CAAC;IAC3D,MAAM,KAAK,GAAG,eAAe,CAAC,KAAK,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC,QAAQ,EAAE,CAAC;IACnE,MAAM,KAAK,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;IACzC,OAAO,GAAG,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;AAC/C,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"getPagesDictionaryRef.d.ts","sourceRoot":"","sources":["../../../src/vendor/placeholder-plain/getPagesDictionaryRef.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AAEtD,MAAM,CAAC,OAAO,UAAU,qBAAqB,CAAC,IAAI,EAAE,iBAAiB,GAAG,MAAM,CAU7E"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
// Vendored from @signpdf/placeholder-plain@3.3.0 (MIT). See LICENSE-signpdf.md.
|
|
2
|
+
// Faithful TypeScript port — logic and byte-emitting paths are unchanged.
|
|
3
|
+
import { SignPdfError } from "@signpdf/utils";
|
|
4
|
+
export default function getPagesDictionaryRef(info) {
|
|
5
|
+
const pagesRefRegex = /\/Pages\s+(\d+\s+\d+\s+R)/g;
|
|
6
|
+
const match = pagesRefRegex.exec(info.root);
|
|
7
|
+
if (match === null) {
|
|
8
|
+
throw new SignPdfError("Failed to find the pages descriptor. This is probably a problem in node-signpdf.", SignPdfError.TYPE_PARSE);
|
|
9
|
+
}
|
|
10
|
+
return match[1];
|
|
11
|
+
}
|
|
12
|
+
//# sourceMappingURL=getPagesDictionaryRef.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"getPagesDictionaryRef.js","sourceRoot":"","sources":["../../../src/vendor/placeholder-plain/getPagesDictionaryRef.ts"],"names":[],"mappings":"AAAA,gFAAgF;AAChF,0EAA0E;AAC1E,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAG9C,MAAM,CAAC,OAAO,UAAU,qBAAqB,CAAC,IAAuB;IACnE,MAAM,aAAa,GAAG,4BAA4B,CAAC;IACnD,MAAM,KAAK,GAAG,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC5C,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;QACnB,MAAM,IAAI,YAAY,CACpB,kFAAkF,EAClF,YAAY,CAAC,UAAU,CACxB,CAAC;IACJ,CAAC;IACD,OAAO,KAAK,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/vendor/placeholder-plain/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,mBAAmB,EAAE,KAAK,wBAAwB,EAAE,MAAM,0BAA0B,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/vendor/placeholder-plain/index.ts"],"names":[],"mappings":"AAAA,gFAAgF;AAChF,2DAA2D;AAC3D,OAAO,EAAE,mBAAmB,EAAiC,MAAM,0BAA0B,CAAC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Escape a PDF name body per ISO 32000-1 §7.3.5: every byte outside the
|
|
3
|
+
* regular-character range (0x21..0x7E minus the delimiters) is written as
|
|
4
|
+
* `#` followed by two uppercase hex digits. Regular names pass through
|
|
5
|
+
* unchanged, so this is a no-op for well-formed input.
|
|
6
|
+
*/
|
|
7
|
+
export declare const escapePdfName: (name: string) => string;
|
|
8
|
+
/** Converts JavaScript types into their corresponding PDF types. */
|
|
9
|
+
export declare const convert: (object: unknown) => string;
|
|
10
|
+
export declare const PDFObject: {
|
|
11
|
+
convert: (object: unknown) => string;
|
|
12
|
+
};
|
|
13
|
+
//# sourceMappingURL=pdfObject.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pdfObject.d.ts","sourceRoot":"","sources":["../../../src/vendor/placeholder-plain/pdfObject.ts"],"names":[],"mappings":"AAsDA;;;;;GAKG;AACH,eAAO,MAAM,aAAa,GAAI,MAAM,MAAM,KAAG,MAU5C,CAAC;AAKF,oEAAoE;AACpE,eAAO,MAAM,OAAO,GAAI,QAAQ,OAAO,KAAG,MA2EzC,CAAC;AAEF,eAAO,MAAM,SAAS;sBA7EU,OAAO,KAAG,MAAM;CA6EZ,CAAC"}
|
|
@@ -0,0 +1,142 @@
|
|
|
1
|
+
// Hardened replacement for `PDFObject.convert` from @signpdf/utils@3.x
|
|
2
|
+
// (itself derived from pdfkit's PDFObject by Devon Govett, MIT — see
|
|
3
|
+
// LICENSE-signpdf.md). This is the ONE file in this directory that
|
|
4
|
+
// DELIBERATELY DIVERGES from upstream. Two changes, both security fixes:
|
|
5
|
+
//
|
|
6
|
+
// 1. Upstream's dictionary branch does:
|
|
7
|
+
// if (val.toString().indexOf('<<') !== -1) checkedValue = val;
|
|
8
|
+
// i.e. any value whose string form contains "<<" is spliced into the
|
|
9
|
+
// dictionary RAW — no conversion, no escaping, not even PDF-string
|
|
10
|
+
// parens. A caller-supplied `reason` / `name` / `location` /
|
|
11
|
+
// `contactInfo` containing "<<" therefore injects arbitrary keys into
|
|
12
|
+
// the signature dictionary. That branch exists upstream only so pdfkit
|
|
13
|
+
// can pass pre-rendered dictionary strings; nothing this package emits
|
|
14
|
+
// relies on it (Prop_Build is a real object and recurses correctly), so
|
|
15
|
+
// it is removed outright.
|
|
16
|
+
//
|
|
17
|
+
// 2. Upstream renders a JS string as a PDF name with `/${object}` and no
|
|
18
|
+
// escaping, so a name value can carry delimiters and whitespace and end
|
|
19
|
+
// the token early — the /SubFilter injection vector. Names are now
|
|
20
|
+
// escaped per ISO 32000-1 §7.3.5 (#xx for every non-regular byte).
|
|
21
|
+
//
|
|
22
|
+
// Both changes are byte-identical for every legitimate input this package
|
|
23
|
+
// produces: the names it emits (Sig, Adobe.PPKLite, ETSI.CAdES.detached,
|
|
24
|
+
// Widget, Annot, the "**********" ByteRange placeholder, and every
|
|
25
|
+
// dictionary key) consist solely of regular characters, and no legitimate
|
|
26
|
+
// value's string form contains "<<". Covered by test/sig-dict-injection.test.ts
|
|
27
|
+
// ::"is byte-identical to upstream for legitimate input".
|
|
28
|
+
//
|
|
29
|
+
// Reported by Uuaid-Lead 2026-08-11 (found while adversarially testing an
|
|
30
|
+
// independent verifier against the published @e-sig/core signPdf).
|
|
31
|
+
import { PDFAbstractReference } from "@signpdf/utils";
|
|
32
|
+
const pad = (str, length) => (Array(length + 1).join("0") + str).slice(-length);
|
|
33
|
+
const escapableRe = /[\n\r\t\b\f()\\]/g;
|
|
34
|
+
const escapable = {
|
|
35
|
+
"\n": "\\n",
|
|
36
|
+
"\r": "\\r",
|
|
37
|
+
"\t": "\\t",
|
|
38
|
+
"\b": "\\b",
|
|
39
|
+
"\f": "\\f",
|
|
40
|
+
"\\": "\\\\",
|
|
41
|
+
"(": "\\(",
|
|
42
|
+
")": "\\)",
|
|
43
|
+
};
|
|
44
|
+
/**
|
|
45
|
+
* PDF name delimiters (ISO 32000-1 §7.2.2) plus '#', which introduces an
|
|
46
|
+
* escape and so must itself be escaped.
|
|
47
|
+
*/
|
|
48
|
+
const NAME_DELIMITERS = new Set("()<>[]{}/%#".split("").map((c) => c.charCodeAt(0)));
|
|
49
|
+
/**
|
|
50
|
+
* Escape a PDF name body per ISO 32000-1 §7.3.5: every byte outside the
|
|
51
|
+
* regular-character range (0x21..0x7E minus the delimiters) is written as
|
|
52
|
+
* `#` followed by two uppercase hex digits. Regular names pass through
|
|
53
|
+
* unchanged, so this is a no-op for well-formed input.
|
|
54
|
+
*/
|
|
55
|
+
export const escapePdfName = (name) => {
|
|
56
|
+
let out = "";
|
|
57
|
+
for (const byte of Buffer.from(name, "utf8")) {
|
|
58
|
+
if (byte >= 0x21 && byte <= 0x7e && !NAME_DELIMITERS.has(byte)) {
|
|
59
|
+
out += String.fromCharCode(byte);
|
|
60
|
+
}
|
|
61
|
+
else {
|
|
62
|
+
out += `#${byte.toString(16).padStart(2, "0").toUpperCase()}`;
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
return out;
|
|
66
|
+
};
|
|
67
|
+
// Convert little endian UTF-16 to big endian
|
|
68
|
+
const swapBytes = (buff) => buff.swap16();
|
|
69
|
+
/** Converts JavaScript types into their corresponding PDF types. */
|
|
70
|
+
export const convert = (object) => {
|
|
71
|
+
// String literals are converted to the PDF name type
|
|
72
|
+
if (typeof object === "string") {
|
|
73
|
+
return `/${escapePdfName(object)}`;
|
|
74
|
+
}
|
|
75
|
+
// String objects are converted to PDF strings (UTF-16)
|
|
76
|
+
if (object instanceof String) {
|
|
77
|
+
let string = String(object);
|
|
78
|
+
// Detect if this is a unicode string
|
|
79
|
+
let isUnicode = false;
|
|
80
|
+
for (let i = 0, end = string.length; i < end; i += 1) {
|
|
81
|
+
if (string.charCodeAt(i) > 0x7f) {
|
|
82
|
+
isUnicode = true;
|
|
83
|
+
break;
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
// If so, encode it as big endian UTF-16
|
|
87
|
+
const stringBuffer = isUnicode
|
|
88
|
+
? swapBytes(Buffer.from(`\ufeff${string}`, "utf16le"))
|
|
89
|
+
: Buffer.from(string, "ascii");
|
|
90
|
+
string = stringBuffer.toString("binary");
|
|
91
|
+
// Escape characters as required by the spec
|
|
92
|
+
string = string.replace(escapableRe, (c) => escapable[c]);
|
|
93
|
+
return `(${string})`;
|
|
94
|
+
}
|
|
95
|
+
// Buffers are converted to PDF hex strings
|
|
96
|
+
if (Buffer.isBuffer(object)) {
|
|
97
|
+
return `<${object.toString("hex")}>`;
|
|
98
|
+
}
|
|
99
|
+
if (object instanceof PDFAbstractReference) {
|
|
100
|
+
// String(): @signpdf/utils types the abstract base's toString() as void
|
|
101
|
+
// (it throws); the concrete PDFKitReferenceMock returns "<index> 0 R".
|
|
102
|
+
return String(object);
|
|
103
|
+
}
|
|
104
|
+
if (object instanceof Date) {
|
|
105
|
+
const string = `D:${pad(object.getUTCFullYear(), 4)}${pad(object.getUTCMonth() + 1, 2)}` +
|
|
106
|
+
`${pad(object.getUTCDate(), 2)}${pad(object.getUTCHours(), 2)}` +
|
|
107
|
+
`${pad(object.getUTCMinutes(), 2)}${pad(object.getUTCSeconds(), 2)}Z`;
|
|
108
|
+
return `(${string})`;
|
|
109
|
+
}
|
|
110
|
+
if (Array.isArray(object)) {
|
|
111
|
+
const items = object.map((e) => convert(e)).join(" ");
|
|
112
|
+
return `[${items}]`;
|
|
113
|
+
}
|
|
114
|
+
if ({}.toString.call(object) === "[object Object]") {
|
|
115
|
+
const out = ["<<"];
|
|
116
|
+
let streamData;
|
|
117
|
+
Object.entries(object).forEach(([key, val]) => {
|
|
118
|
+
if (key === "stream") {
|
|
119
|
+
streamData = `${key}\n${val}\nendstream`;
|
|
120
|
+
}
|
|
121
|
+
else {
|
|
122
|
+
// NOTE: no raw-splice branch here — see the header. Every value is
|
|
123
|
+
// converted, and every key is escaped as a name.
|
|
124
|
+
out.push(`/${escapePdfName(key)} ${convert(val)}`);
|
|
125
|
+
}
|
|
126
|
+
});
|
|
127
|
+
out.push(">>");
|
|
128
|
+
if (streamData) {
|
|
129
|
+
out.push(streamData);
|
|
130
|
+
}
|
|
131
|
+
return out.join("\n");
|
|
132
|
+
}
|
|
133
|
+
if (typeof object === "number") {
|
|
134
|
+
if (object > -1e21 && object < 1e21) {
|
|
135
|
+
return String(Math.round(object * 1e6) / 1e6);
|
|
136
|
+
}
|
|
137
|
+
throw new Error(`unsupported number: ${object}`);
|
|
138
|
+
}
|
|
139
|
+
return `${object}`;
|
|
140
|
+
};
|
|
141
|
+
export const PDFObject = { convert };
|
|
142
|
+
//# sourceMappingURL=pdfObject.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pdfObject.js","sourceRoot":"","sources":["../../../src/vendor/placeholder-plain/pdfObject.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import { PDFKitReferenceMock } from "@signpdf/utils";
|
|
2
|
+
/**
|
|
3
|
+
* The minimal PDFDocument-shaped surface that plainAddPlaceholder feeds in.
|
|
4
|
+
* (Upstream typed this as `object PDFDocument`.)
|
|
5
|
+
*/
|
|
6
|
+
export interface PdfKitMock {
|
|
7
|
+
ref(input: Record<string, unknown>, knownIndex?: number): PDFKitReferenceMock;
|
|
8
|
+
page: {
|
|
9
|
+
dictionary: PDFKitReferenceMock & {
|
|
10
|
+
data: {
|
|
11
|
+
Annots: unknown[];
|
|
12
|
+
};
|
|
13
|
+
};
|
|
14
|
+
};
|
|
15
|
+
_root: {
|
|
16
|
+
data: {
|
|
17
|
+
AcroForm?: unknown;
|
|
18
|
+
};
|
|
19
|
+
};
|
|
20
|
+
}
|
|
21
|
+
export interface PdfkitAddPlaceholderInput {
|
|
22
|
+
pdf: PdfKitMock;
|
|
23
|
+
pdfBuffer: Buffer;
|
|
24
|
+
reason: string;
|
|
25
|
+
contactInfo: string;
|
|
26
|
+
name: string;
|
|
27
|
+
location: string;
|
|
28
|
+
signingTime?: Date;
|
|
29
|
+
signatureLength?: number;
|
|
30
|
+
byteRangePlaceholder?: string;
|
|
31
|
+
/** One of SUBFILTER_* from @signpdf/utils */
|
|
32
|
+
subFilter?: string;
|
|
33
|
+
/** [x1, y1, x2, y2] widget rectangle */
|
|
34
|
+
widgetRect?: number[];
|
|
35
|
+
/** Name of the application generating the signature */
|
|
36
|
+
appName?: string;
|
|
37
|
+
}
|
|
38
|
+
export interface PdfkitAddPlaceholderReturnType {
|
|
39
|
+
signature: PDFKitReferenceMock;
|
|
40
|
+
form: PDFKitReferenceMock;
|
|
41
|
+
widget: PDFKitReferenceMock;
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Adds the objects that are needed for Adobe.PPKLite to read the signature.
|
|
45
|
+
* Also includes a placeholder for the actual signature.
|
|
46
|
+
* Returns an Object with all the added PDFReferences.
|
|
47
|
+
*/
|
|
48
|
+
export declare const pdfkitAddPlaceholder: ({ pdf, pdfBuffer, reason, contactInfo, name, location, signingTime, signatureLength, byteRangePlaceholder, subFilter, widgetRect, appName, }: PdfkitAddPlaceholderInput) => PdfkitAddPlaceholderReturnType;
|
|
49
|
+
//# sourceMappingURL=pdfkitAddPlaceholder.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pdfkitAddPlaceholder.d.ts","sourceRoot":"","sources":["../../../src/vendor/placeholder-plain/pdfkitAddPlaceholder.ts"],"names":[],"mappings":"AAKA,OAAO,EAML,mBAAmB,EACpB,MAAM,gBAAgB,CAAC;AAExB;;;GAGG;AACH,MAAM,WAAW,UAAU;IACzB,GAAG,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG,mBAAmB,CAAC;IAC9E,IAAI,EAAE;QACJ,UAAU,EAAE,mBAAmB,GAAG;YAAE,IAAI,EAAE;gBAAE,MAAM,EAAE,OAAO,EAAE,CAAA;aAAE,CAAA;SAAE,CAAC;KACnE,CAAC;IACF,KAAK,EAAE;QACL,IAAI,EAAE;YAAE,QAAQ,CAAC,EAAE,OAAO,CAAA;SAAE,CAAC;KAC9B,CAAC;CACH;AAED,MAAM,WAAW,yBAAyB;IACxC,GAAG,EAAE,UAAU,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,IAAI,CAAC;IACnB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,6CAA6C;IAC7C,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,wCAAwC;IACxC,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;IACtB,uDAAuD;IACvD,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,8BAA8B;IAC7C,SAAS,EAAE,mBAAmB,CAAC;IAC/B,IAAI,EAAE,mBAAmB,CAAC;IAC1B,MAAM,EAAE,mBAAmB,CAAC;CAC7B;AAED;;;;GAIG;AACH,eAAO,MAAM,oBAAoB,GAAI,8IAalC,yBAAyB,KAAG,8BA4G9B,CAAC"}
|
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
// Vendored from @signpdf/placeholder-pdfkit010@3.3.0 (MIT). See LICENSE-signpdf.md.
|
|
2
|
+
// Faithful TypeScript port — logic and byte-emitting paths are unchanged.
|
|
3
|
+
// This is the only module @signpdf/placeholder-plain used from
|
|
4
|
+
// @signpdf/placeholder-pdfkit010; vendoring it severs the
|
|
5
|
+
// pdfkit@0.10.0 (peer) -> crypto-js@3.3.0 dependency chain.
|
|
6
|
+
import { DEFAULT_BYTE_RANGE_PLACEHOLDER, DEFAULT_SIGNATURE_LENGTH, SUBFILTER_ADOBE_PKCS7_DETACHED, ANNOTATION_FLAGS, SIG_FLAGS, PDFKitReferenceMock, } from "@signpdf/utils";
|
|
7
|
+
/**
|
|
8
|
+
* Adds the objects that are needed for Adobe.PPKLite to read the signature.
|
|
9
|
+
* Also includes a placeholder for the actual signature.
|
|
10
|
+
* Returns an Object with all the added PDFReferences.
|
|
11
|
+
*/
|
|
12
|
+
export const pdfkitAddPlaceholder = ({ pdf, pdfBuffer, reason, contactInfo, name, location, signingTime = undefined, signatureLength = DEFAULT_SIGNATURE_LENGTH, byteRangePlaceholder = DEFAULT_BYTE_RANGE_PLACEHOLDER, subFilter = SUBFILTER_ADOBE_PKCS7_DETACHED, widgetRect = [0, 0, 0, 0], appName = undefined, }) => {
|
|
13
|
+
/* eslint-disable no-underscore-dangle,no-param-reassign */
|
|
14
|
+
// Generate the signature placeholder
|
|
15
|
+
const signature = pdf.ref({
|
|
16
|
+
Type: "Sig",
|
|
17
|
+
Filter: "Adobe.PPKLite",
|
|
18
|
+
SubFilter: subFilter,
|
|
19
|
+
ByteRange: [0, byteRangePlaceholder, byteRangePlaceholder, byteRangePlaceholder],
|
|
20
|
+
Contents: Buffer.from(String.fromCharCode(0).repeat(signatureLength)),
|
|
21
|
+
Reason: new String(reason), // eslint-disable-line no-new-wrappers
|
|
22
|
+
M: signingTime ?? new Date(),
|
|
23
|
+
ContactInfo: new String(contactInfo), // eslint-disable-line no-new-wrappers
|
|
24
|
+
Name: new String(name), // eslint-disable-line no-new-wrappers
|
|
25
|
+
Location: new String(location), // eslint-disable-line no-new-wrappers
|
|
26
|
+
Prop_Build: {
|
|
27
|
+
Filter: {
|
|
28
|
+
Name: "Adobe.PPKLite",
|
|
29
|
+
},
|
|
30
|
+
...(appName
|
|
31
|
+
? {
|
|
32
|
+
App: {
|
|
33
|
+
Name: appName,
|
|
34
|
+
},
|
|
35
|
+
}
|
|
36
|
+
: {}),
|
|
37
|
+
},
|
|
38
|
+
});
|
|
39
|
+
// Check if pdf already contains acroform field
|
|
40
|
+
const isAcroFormExists = typeof pdf._root.data.AcroForm !== "undefined";
|
|
41
|
+
let fieldIds = [];
|
|
42
|
+
let acroFormId;
|
|
43
|
+
if (isAcroFormExists) {
|
|
44
|
+
/* FIXME: We're working with a PDFDocument.
|
|
45
|
+
* Needing to work with strings here doesn't make sense.
|
|
46
|
+
* It only exists to support plainAddPlaceholder the reference to /AcroForm
|
|
47
|
+
* would be external to PDFKit at this point.
|
|
48
|
+
*/
|
|
49
|
+
const acroFormPosition = pdfBuffer.lastIndexOf("/Type /AcroForm");
|
|
50
|
+
let acroFormStart = acroFormPosition;
|
|
51
|
+
// 10 is the distance between "/Type /AcroForm" and AcroFrom ID
|
|
52
|
+
const charsUntilIdEnd = 10;
|
|
53
|
+
const acroFormIdEnd = acroFormPosition - charsUntilIdEnd;
|
|
54
|
+
// Let's find AcroForm ID by trying to find the "\n" before the ID
|
|
55
|
+
// 12 is a enough space to find the "\n"
|
|
56
|
+
// (generally it's 2 or 3, but I'm giving a big space though)
|
|
57
|
+
const maxAcroFormIdLength = 12;
|
|
58
|
+
let index = charsUntilIdEnd + 1;
|
|
59
|
+
for (index; index < charsUntilIdEnd + maxAcroFormIdLength; index += 1) {
|
|
60
|
+
const acroFormIdString = pdfBuffer.slice(acroFormPosition - index, acroFormIdEnd).toString();
|
|
61
|
+
if (acroFormIdString[0] === "\n") {
|
|
62
|
+
break;
|
|
63
|
+
}
|
|
64
|
+
acroFormStart = acroFormPosition - index;
|
|
65
|
+
}
|
|
66
|
+
const pdfSlice = pdfBuffer.slice(acroFormStart);
|
|
67
|
+
const acroForm = pdfSlice.slice(0, pdfSlice.indexOf("endobj")).toString();
|
|
68
|
+
acroFormId = parseInt(pdf._root.data.AcroForm.toString());
|
|
69
|
+
const acroFormFields = acroForm.slice(acroForm.indexOf("/Fields [") + 9, acroForm.indexOf("]"));
|
|
70
|
+
fieldIds = acroFormFields
|
|
71
|
+
.split(" ")
|
|
72
|
+
.filter(Boolean)
|
|
73
|
+
.filter((element, i) => i % 3 === 0)
|
|
74
|
+
.map((fieldId) => new PDFKitReferenceMock(fieldId));
|
|
75
|
+
}
|
|
76
|
+
const signatureName = "Signature";
|
|
77
|
+
// Generate signature annotation widget
|
|
78
|
+
const widget = pdf.ref({
|
|
79
|
+
Type: "Annot",
|
|
80
|
+
Subtype: "Widget",
|
|
81
|
+
FT: "Sig",
|
|
82
|
+
Rect: widgetRect,
|
|
83
|
+
V: signature,
|
|
84
|
+
T: new String(signatureName + (fieldIds.length + 1)), // eslint-disable-line no-new-wrappers
|
|
85
|
+
F: ANNOTATION_FLAGS.PRINT,
|
|
86
|
+
P: pdf.page.dictionary, // eslint-disable-line no-underscore-dangle
|
|
87
|
+
});
|
|
88
|
+
pdf.page.dictionary.data.Annots = [widget];
|
|
89
|
+
// Include the widget in a page
|
|
90
|
+
let form;
|
|
91
|
+
if (!isAcroFormExists) {
|
|
92
|
+
// Create a form (with the widget) and link in the _root
|
|
93
|
+
form = pdf.ref({
|
|
94
|
+
Type: "AcroForm",
|
|
95
|
+
SigFlags: SIG_FLAGS.SIGNATURES_EXIST | SIG_FLAGS.APPEND_ONLY,
|
|
96
|
+
Fields: [...fieldIds, widget],
|
|
97
|
+
});
|
|
98
|
+
}
|
|
99
|
+
else {
|
|
100
|
+
// Use existing acroform and extend the fields with newly created widgets
|
|
101
|
+
form = pdf.ref({
|
|
102
|
+
Type: "AcroForm",
|
|
103
|
+
SigFlags: SIG_FLAGS.SIGNATURES_EXIST | SIG_FLAGS.APPEND_ONLY,
|
|
104
|
+
Fields: [...fieldIds, widget],
|
|
105
|
+
}, acroFormId);
|
|
106
|
+
}
|
|
107
|
+
pdf._root.data.AcroForm = form;
|
|
108
|
+
return {
|
|
109
|
+
signature,
|
|
110
|
+
form,
|
|
111
|
+
widget,
|
|
112
|
+
};
|
|
113
|
+
/* eslint-enable no-underscore-dangle,no-param-reassign */
|
|
114
|
+
};
|
|
115
|
+
//# sourceMappingURL=pdfkitAddPlaceholder.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pdfkitAddPlaceholder.js","sourceRoot":"","sources":["../../../src/vendor/placeholder-plain/pdfkitAddPlaceholder.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
export interface PlainAddPlaceholderInput {
|
|
2
|
+
pdfBuffer: Buffer;
|
|
3
|
+
reason: string;
|
|
4
|
+
contactInfo: string;
|
|
5
|
+
name: string;
|
|
6
|
+
location: string;
|
|
7
|
+
signingTime?: Date;
|
|
8
|
+
signatureLength?: number;
|
|
9
|
+
/** One of SUBFILTER_* from @signpdf/utils */
|
|
10
|
+
subFilter?: string;
|
|
11
|
+
/**
|
|
12
|
+
* [x1, y1, x2, y2] widget rectangle.
|
|
13
|
+
*
|
|
14
|
+
* ATTRIBUTION INTEROP: the UUAID provenance verifier's PDF attribution-scope
|
|
15
|
+
* whitelist (IAASO-0004) requires the invisible `[0 0 0 0]` /Rect and denies
|
|
16
|
+
* any other value. `signPdf` never passes this, so today every document we
|
|
17
|
+
* emit is in scope — but a visible-signature feature would drop attribution
|
|
18
|
+
* on day one. Coordinate with the UUAID lane before wiring it up.
|
|
19
|
+
*/
|
|
20
|
+
widgetRect?: number[];
|
|
21
|
+
/**
|
|
22
|
+
* Name of the application generating the signature (emitted as
|
|
23
|
+
* `/Prop_Build /App <</Name ...>>`).
|
|
24
|
+
*
|
|
25
|
+
* ATTRIBUTION INTEROP: `App` is not in that verifier's allowed nested
|
|
26
|
+
* Prop_Build key set, so setting this denies attribution. Same rule as
|
|
27
|
+
* `widgetRect` — `signPdf` never passes it; coordinate before it does.
|
|
28
|
+
*/
|
|
29
|
+
appName?: string;
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Adds a signature placeholder to a PDF Buffer.
|
|
33
|
+
*
|
|
34
|
+
* This contrasts with the default pdfkit-based implementation.
|
|
35
|
+
* Parsing is done using simple string operations.
|
|
36
|
+
* Adding is done with `Buffer.concat`.
|
|
37
|
+
* This allows node-signpdf to be used on any PDF and
|
|
38
|
+
* not only on a freshly created through PDFKit one.
|
|
39
|
+
*/
|
|
40
|
+
export declare const plainAddPlaceholder: ({ pdfBuffer, reason, contactInfo, name, location, signingTime, signatureLength, subFilter, widgetRect, appName, }: PlainAddPlaceholderInput) => Buffer;
|
|
41
|
+
//# sourceMappingURL=plainAddPlaceholder.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"plainAddPlaceholder.d.ts","sourceRoot":"","sources":["../../../src/vendor/placeholder-plain/plainAddPlaceholder.ts"],"names":[],"mappings":"AA8BA,MAAM,WAAW,wBAAwB;IACvC,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,IAAI,CAAC;IACnB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,6CAA6C;IAC7C,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;;;;;;;OAQG;IACH,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;IACtB;;;;;;;OAOG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;;;;;;;GAQG;AACH,eAAO,MAAM,mBAAmB,GAAI,mHAWjC,wBAAwB,KAAG,MA8D7B,CAAC"}
|