From 4c11aa695754cc34bc4607c1943c6e470f9d92ec Mon Sep 17 00:00:00 2001 From: Valery Buchinsky Date: Wed, 21 Feb 2024 14:46:46 +0200 Subject: [PATCH 1/5] =?UTF-8?q?=F0=9F=A7=AA=20[placeholder-plain]=20Add=20?= =?UTF-8?q?a=20test=20of=20readRefTable=20that=20fails=20because=20of=20th?= =?UTF-8?q?e=20trailer=20word?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit refs #209 --- .../placeholder-plain/src/readRefTable.test.js | 1 + .../issue-209-reason-includes-trailer-word.pdf | Bin 0 -> 90288 bytes 2 files changed, 1 insertion(+) create mode 100644 resources/issue-209-reason-includes-trailer-word.pdf diff --git a/packages/placeholder-plain/src/readRefTable.test.js b/packages/placeholder-plain/src/readRefTable.test.js index a2450e20..4013a1e7 100644 --- a/packages/placeholder-plain/src/readRefTable.test.js +++ b/packages/placeholder-plain/src/readRefTable.test.js @@ -75,6 +75,7 @@ describe(readRefTable, () => { 'incrementally_signed.pdf', 'signed.pdf', 'w3dummy.pdf', + 'issue-209-reason-includes-trailer-word.pdf', ].forEach((fileName) => { const pdf = readTestResource(fileName); const r = readRefTable(pdf); diff --git a/resources/issue-209-reason-includes-trailer-word.pdf b/resources/issue-209-reason-includes-trailer-word.pdf new file mode 100644 index 0000000000000000000000000000000000000000..d0248314c837b4bf88a616e0c2c151891785bc9a GIT binary patch literal 90288 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ఄ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 O)fj<$j^rzik^cfP%5W6` literal 0 HcmV?d00001 From 7bb7c1eeb1b8d3474b3e1aae968a78e3e0a09826 Mon Sep 17 00:00:00 2001 From: Valery Buchinsky Date: Wed, 21 Feb 2024 15:07:48 +0200 Subject: [PATCH 2/5] =?UTF-8?q?=F0=9F=90=9B=20[placeholder-plain]=20Do=20n?= =?UTF-8?q?ot=20search=20for=20a=20trailer=20word=20once=20the=20xref=20po?= =?UTF-8?q?sition=20is=20known?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit fixes #209 --- .../__snapshots__/readRefTable.test.js.snap | 36 +++++++++++++++++++ .../placeholder-plain/src/readRefTable.js | 25 ++++++++----- .../placeholder-plain/src/xrefToRefMap.js | 4 +++ 3 files changed, 57 insertions(+), 8 deletions(-) diff --git a/packages/placeholder-plain/src/__snapshots__/readRefTable.test.js.snap b/packages/placeholder-plain/src/__snapshots__/readRefTable.test.js.snap index 3d1517e2..5f43daa9 100644 --- a/packages/placeholder-plain/src/__snapshots__/readRefTable.test.js.snap +++ b/packages/placeholder-plain/src/__snapshots__/readRefTable.test.js.snap @@ -242,3 +242,39 @@ Object { "startingIndex": 0, } `; + +exports[`readRefTable Expects to merge correctly the refTable of resources 8`] = ` +Object { + "maxIndex": 27, + "offsets": Map { + 1 => 15, + 2 => 89780, + 3 => 265, + 4 => 302, + 5 => 27161, + 6 => 55428, + 7 => 72070, + 8 => 378, + 9 => 592, + 10 => 764, + 11 => 4338, + 12 => 89711, + 13 => 4443, + 14 => 26241, + 15 => 26484, + 16 => 26817, + 17 => 27302, + 18 => 54210, + 19 => 54444, + 20 => 55060, + 21 => 55560, + 22 => 71288, + 23 => 71522, + 24 => 71742, + 25 => 72781, + 26 => 89525, + 27 => 89643, + }, + "startingIndex": 0, +} +`; diff --git a/packages/placeholder-plain/src/readRefTable.js b/packages/placeholder-plain/src/readRefTable.js index 5bded0d9..13e2d828 100644 --- a/packages/placeholder-plain/src/readRefTable.js +++ b/packages/placeholder-plain/src/readRefTable.js @@ -82,22 +82,22 @@ export const getXref = (pdf, position) => { }; /** - * @typedef {Map<*, *>} GetFullXrefTableReturnType + * @typedef {Map} FullXrefTable */ /** * @param {Buffer} pdf - * @returns {GetFullXrefTableReturnType} + * @param {number} xRefPosition + * @returns {FullXrefTable} */ -export const getFullXrefTable = (pdf) => { - const lastTrailerPosition = getLastTrailerPosition(pdf); - const lastXrefTable = getXref(pdf, lastTrailerPosition); +const getFullXref = (pdf, xRefPosition) => { + const lastXrefTable = getXref(pdf, xRefPosition); if (lastXrefTable.prev === undefined) { return lastXrefTable.xRefContent; } - const pdfWithoutLastTrailer = pdf.slice(0, lastTrailerPosition); - const partOfXrefTable = getFullXrefTable(pdfWithoutLastTrailer); + + const partOfXrefTable = getFullXref(pdf, lastXrefTable.prev); const mergedXrefTable = new Map([ ...partOfXrefTable, @@ -107,11 +107,20 @@ export const getFullXrefTable = (pdf) => { return mergedXrefTable; }; +/** + * @param {Buffer} pdf + * @returns {FullXrefTable} + */ +export const getFullXrefTable = (pdf) => { + const lastTrailerPosition = getLastTrailerPosition(pdf); + return getFullXref(pdf, lastTrailerPosition); +}; + /** * @typedef {object} ReadRefTableReturnType * @prop {number} startingIndex * @prop {number} maxIndex - * @prop {GetFullXrefTableReturnType} offsets + * @prop {FullXrefTable} offsets */ /** diff --git a/packages/placeholder-plain/src/xrefToRefMap.js b/packages/placeholder-plain/src/xrefToRefMap.js index cec63ee7..e48aecbf 100644 --- a/packages/placeholder-plain/src/xrefToRefMap.js +++ b/packages/placeholder-plain/src/xrefToRefMap.js @@ -1,5 +1,9 @@ import {SignPdfError} from '@signpdf/utils'; +/** + * @param {string} xrefString + * @returns {Map} + */ const xrefToRefMap = (xrefString) => { const lines = xrefString.split('\n').filter((l) => l !== ''); From 3107d29b1c3105bc2658b77d559ec9d0ae85971d Mon Sep 17 00:00:00 2001 From: Valery Buchinsky Date: Wed, 21 Feb 2024 15:08:33 +0200 Subject: [PATCH 3/5] =?UTF-8?q?=F0=9F=93=A6=20[placeholder-plain]?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../placeholder-plain/dist/readRefTable.d.ts | 10 ++++---- .../dist/readRefTable.d.ts.map | 2 +- .../placeholder-plain/dist/readRefTable.js | 24 ++++++++++++------- .../placeholder-plain/dist/xrefToRefMap.d.ts | 6 ++++- .../dist/xrefToRefMap.d.ts.map | 2 +- .../placeholder-plain/dist/xrefToRefMap.js | 4 ++++ 6 files changed, 32 insertions(+), 16 deletions(-) diff --git a/packages/placeholder-plain/dist/readRefTable.d.ts b/packages/placeholder-plain/dist/readRefTable.d.ts index ff488e36..6936f6ae 100644 --- a/packages/placeholder-plain/dist/readRefTable.d.ts +++ b/packages/placeholder-plain/dist/readRefTable.d.ts @@ -2,21 +2,21 @@ export function getLastTrailerPosition(pdf: any): number; export function getXref(pdf: any, position: any): { size: any; prev: string; - xRefContent: Map; + xRefContent: Map; }; -export function getFullXrefTable(pdf: Buffer): GetFullXrefTableReturnType; +export function getFullXrefTable(pdf: Buffer): FullXrefTable; export default readRefTable; -export type GetFullXrefTableReturnType = Map; +export type FullXrefTable = Map; export type ReadRefTableReturnType = { startingIndex: number; maxIndex: number; - offsets: GetFullXrefTableReturnType; + offsets: FullXrefTable; }; /** * @typedef {object} ReadRefTableReturnType * @prop {number} startingIndex * @prop {number} maxIndex - * @prop {GetFullXrefTableReturnType} offsets + * @prop {FullXrefTable} offsets */ /** * @param {Buffer} pdfBuffer diff --git a/packages/placeholder-plain/dist/readRefTable.d.ts.map b/packages/placeholder-plain/dist/readRefTable.d.ts.map index e1b42a58..4f3157a7 100644 --- a/packages/placeholder-plain/dist/readRefTable.d.ts.map +++ b/packages/placeholder-plain/dist/readRefTable.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"readRefTable.d.ts","sourceRoot":"","sources":["../src/readRefTable.js"],"names":[],"mappings":"AAGO,yDASN;AAEM;;;;EAmEN;AAUM,sCAHI,MAAM,8BAmBhB;;yCAvBY,aAAS;;mBA2BZ,MAAM;cACN,MAAM;;;AAHhB;;;;;GAKG;AAEH;;;GAGG;AACH,yCAFa,sBAAsB,CAYlC"} \ No newline at end of file +{"version":3,"file":"readRefTable.d.ts","sourceRoot":"","sources":["../src/readRefTable.js"],"names":[],"mappings":"AAGO,yDASN;AAEM;;;;EAmEN;AAgCM,sCAHI,MAAM,iBAMhB;;4BAhCY,IAAI,MAAM,EAAE,MAAM,CAAC;;mBAoCtB,MAAM;cACN,MAAM;;;AAHhB;;;;;GAKG;AAEH;;;GAGG;AACH,yCAFa,sBAAsB,CAYlC"} \ No newline at end of file diff --git a/packages/placeholder-plain/dist/readRefTable.js b/packages/placeholder-plain/dist/readRefTable.js index 990a41f6..45008476 100644 --- a/packages/placeholder-plain/dist/readRefTable.js +++ b/packages/placeholder-plain/dist/readRefTable.js @@ -62,31 +62,39 @@ const getXref = (pdf, position) => { }; /** - * @typedef {Map<*, *>} GetFullXrefTableReturnType + * @typedef {Map} FullXrefTable */ /** * @param {Buffer} pdf - * @returns {GetFullXrefTableReturnType} + * @param {number} xRefPosition + * @returns {FullXrefTable} */ exports.getXref = getXref; -const getFullXrefTable = pdf => { - const lastTrailerPosition = getLastTrailerPosition(pdf); - const lastXrefTable = getXref(pdf, lastTrailerPosition); +const getFullXref = (pdf, xRefPosition) => { + const lastXrefTable = getXref(pdf, xRefPosition); if (lastXrefTable.prev === undefined) { return lastXrefTable.xRefContent; } - const pdfWithoutLastTrailer = pdf.slice(0, lastTrailerPosition); - const partOfXrefTable = getFullXrefTable(pdfWithoutLastTrailer); + const partOfXrefTable = getFullXref(pdf, lastXrefTable.prev); const mergedXrefTable = new Map([...partOfXrefTable, ...lastXrefTable.xRefContent]); return mergedXrefTable; }; +/** + * @param {Buffer} pdf + * @returns {FullXrefTable} + */ +const getFullXrefTable = pdf => { + const lastTrailerPosition = getLastTrailerPosition(pdf); + return getFullXref(pdf, lastTrailerPosition); +}; + /** * @typedef {object} ReadRefTableReturnType * @prop {number} startingIndex * @prop {number} maxIndex - * @prop {GetFullXrefTableReturnType} offsets + * @prop {FullXrefTable} offsets */ /** diff --git a/packages/placeholder-plain/dist/xrefToRefMap.d.ts b/packages/placeholder-plain/dist/xrefToRefMap.d.ts index ea3a94d5..acdf854f 100644 --- a/packages/placeholder-plain/dist/xrefToRefMap.d.ts +++ b/packages/placeholder-plain/dist/xrefToRefMap.d.ts @@ -1,3 +1,7 @@ export default xrefToRefMap; -declare function xrefToRefMap(xrefString: any): Map; +/** + * @param {string} xrefString + * @returns {Map} + */ +declare function xrefToRefMap(xrefString: string): Map; //# sourceMappingURL=xrefToRefMap.d.ts.map \ No newline at end of file diff --git a/packages/placeholder-plain/dist/xrefToRefMap.d.ts.map b/packages/placeholder-plain/dist/xrefToRefMap.d.ts.map index 70ad0368..3d44e50d 100644 --- a/packages/placeholder-plain/dist/xrefToRefMap.d.ts.map +++ b/packages/placeholder-plain/dist/xrefToRefMap.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"xrefToRefMap.d.ts","sourceRoot":"","sources":["../src/xrefToRefMap.js"],"names":[],"mappings":";AAEA,8DA2CC"} \ No newline at end of file +{"version":3,"file":"xrefToRefMap.d.ts","sourceRoot":"","sources":["../src/xrefToRefMap.js"],"names":[],"mappings":";AAEA;;;GAGG;AACH,0CAHW,MAAM,GACJ,IAAI,MAAM,EAAE,MAAM,CAAC,CA6C/B"} \ No newline at end of file diff --git a/packages/placeholder-plain/dist/xrefToRefMap.js b/packages/placeholder-plain/dist/xrefToRefMap.js index 0fec1015..50f1cb3f 100644 --- a/packages/placeholder-plain/dist/xrefToRefMap.js +++ b/packages/placeholder-plain/dist/xrefToRefMap.js @@ -5,6 +5,10 @@ Object.defineProperty(exports, "__esModule", { }); exports.default = void 0; var _utils = require("@signpdf/utils"); +/** + * @param {string} xrefString + * @returns {Map} + */ const xrefToRefMap = xrefString => { const lines = xrefString.split('\n').filter(l => l !== ''); let index = 0; From 9f75d26571611ca0fa727fca6bec7c7229b77912 Mon Sep 17 00:00:00 2001 From: Valery Buchinsky Date: Wed, 21 Feb 2024 15:10:08 +0200 Subject: [PATCH 4/5] =?UTF-8?q?=F0=9F=93=9D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- CHANGELOG.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 6391fb4e..7db4e1fb 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,9 @@ # CHANGELOG +## [next] + +* [placeholder-plain] Fix ability to add a placeholder to a file that contains the "trailer" keyword in plain text. + ## [3.2.1] * [signer-p12] Fixed JSDoc on the sign() method. From 5162e96d21a4ec16d7834fc77a09aa06140b3003 Mon Sep 17 00:00:00 2001 From: Valery Buchinsky Date: Wed, 21 Feb 2024 15:12:14 +0200 Subject: [PATCH 5/5] [examples] Add one that adds consequtive signatures --- packages/examples/src/multiple-signatures.js | 91 ++++++++++++++++++++ 1 file changed, 91 insertions(+) create mode 100644 packages/examples/src/multiple-signatures.js diff --git a/packages/examples/src/multiple-signatures.js b/packages/examples/src/multiple-signatures.js new file mode 100644 index 00000000..b446eb9d --- /dev/null +++ b/packages/examples/src/multiple-signatures.js @@ -0,0 +1,91 @@ +var fs = require('fs'); +var path = require('path'); +var plainAddPlaceholder = require('@signpdf/placeholder-plain').plainAddPlaceholder; +var signpdf = require('@signpdf/signpdf').default; +var P12Signer = require('@signpdf/signer-p12').P12Signer; + +function buyerSign(pdfBuffer, targetPath) { + // Add a placeholder for John Doe - the customer + var pdfWithPlaceholder = plainAddPlaceholder({ + pdfBuffer: pdfBuffer, + reason: 'Agrees to buy the truck trailer.', + contactInfo: 'john@example.com', + name: 'John Doe', + location: 'Free Text Str., Free World', + }); + + // John signs the PDF + // certificate.p12 is the certificate that is going to be used to sign + var certificateBuffer = fs.readFileSync(path.join(__dirname, '/../../../resources/certificate.p12')); + var signer = new P12Signer(certificateBuffer); + return signpdf + .sign(pdfWithPlaceholder, signer) + .then(function (signedPdf) { + // signedPdf is a Buffer of an electronically signed PDF. Store it. + fs.writeFileSync(targetPath, signedPdf); + + return signedPdf; + }) +} + +function sellerSign(pdfBuffer, targetPath) { + // Add a placeholder for John Doe - the customer + var pdfWithPlaceholder = plainAddPlaceholder({ + pdfBuffer: pdfBuffer, + reason: 'Agrees to sell a truck trailer to John Doe.', + contactInfo: 'dealer@example.com', + name: 'Thug Dealer', + location: 'Automotive Str., Free World', + }); + + // The seller signs the PDF + // bundle.p12 is the certificate bundle that is going to be used to sign + var certificateBuffer = fs.readFileSync(path.join(__dirname, '/../../../resources/bundle.p12')); + var signer = new P12Signer(certificateBuffer); + return signpdf + .sign(pdfWithPlaceholder, signer) + .then(function (signedPdf) { + // signedPdf is a Buffer of an electronically signed PDF. Store it. + fs.writeFileSync(targetPath, signedPdf); + + return signedPdf; + }) +} + +/** + * John Doe is buying a truck trailer from Thug Dealer. + * The PDF is signed by both parties in two copies. + * The first copy is signed by John Doe and then by Thug Dealer. + * The second copy is signed by Thug Dealer and then by John Doe. + * 4 PDFs are created in the output folder. + */ +function work() { + // contributing.pdf is the "contract" they are going to sign. + var pdfBuffer = fs.readFileSync(path.join(__dirname, '/../../../resources/contributing.pdf')); + + // A copy of the PDF is signed by the buyer and then by the seller. + buyerSign( + pdfBuffer, + path.join(__dirname, '/../output/multiple-signatures-buyer-seller-1.pdf' + )) + .then(function (signedByCustomer) { + return sellerSign( + signedByCustomer, + path.join(__dirname, '/../output/multiple-signatures-buyer-seller-2.pdf') + ); + }); + + // A copy of the PDF is signed by the seller and then by the buyer. + sellerSign( + pdfBuffer, + path.join(__dirname, '/../output/multiple-signatures-seller-buyer-1.pdf' + )) + .then(function (signedBySeller) { + return buyerSign( + signedBySeller, + path.join(__dirname, '/../output/multiple-signatures-seller-buyer-2.pdf') + ); + }); +} + +work(); \ No newline at end of file