pdf-lite 1.0.1-alpha.2 → 1.0.1
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/dist/core/decoder.d.ts +39 -0
- package/dist/core/decoder.js +367 -0
- package/dist/core/generators.d.ts +37 -0
- package/{packages/pdf-lite/src/core/generators.ts → dist/core/generators.js} +36 -67
- package/dist/core/incremental-parser.d.ts +103 -0
- package/{packages/pdf-lite/src/core/incremental-parser.ts → dist/core/incremental-parser.js} +63 -100
- package/dist/core/index.d.ts +2 -0
- package/dist/core/index.js +2 -0
- package/dist/core/objects/pdf-array.d.ts +12 -0
- package/dist/core/objects/pdf-array.js +42 -0
- package/dist/core/objects/pdf-boolean.d.ts +8 -0
- package/dist/core/objects/pdf-boolean.js +15 -0
- package/dist/core/objects/pdf-comment.d.ts +18 -0
- package/dist/core/objects/pdf-comment.js +39 -0
- package/dist/core/objects/pdf-date.d.ts +5 -0
- package/dist/core/objects/pdf-date.js +40 -0
- package/dist/core/objects/pdf-dictionary.d.ts +22 -0
- package/dist/core/objects/pdf-dictionary.js +136 -0
- package/dist/core/objects/pdf-hexadecimal.d.ts +17 -0
- package/dist/core/objects/pdf-hexadecimal.js +42 -0
- package/dist/core/objects/pdf-indirect-object.d.ts +27 -0
- package/dist/core/objects/pdf-indirect-object.js +100 -0
- package/dist/core/objects/pdf-name.d.ts +8 -0
- package/dist/core/objects/pdf-name.js +15 -0
- package/dist/core/objects/pdf-null.d.ts +7 -0
- package/dist/core/objects/pdf-null.js +11 -0
- package/dist/core/objects/pdf-number.d.ts +25 -0
- package/dist/core/objects/pdf-number.js +77 -0
- package/dist/core/objects/pdf-object-reference.d.ts +9 -0
- package/dist/core/objects/pdf-object-reference.js +19 -0
- package/dist/core/objects/pdf-object.d.ts +30 -0
- package/dist/core/objects/pdf-object.js +77 -0
- package/dist/core/objects/pdf-start-xref.d.ts +10 -0
- package/dist/core/objects/pdf-start-xref.js +32 -0
- package/dist/core/objects/pdf-stream.d.ts +100 -0
- package/dist/core/objects/pdf-stream.js +521 -0
- package/dist/core/objects/pdf-string.d.ts +15 -0
- package/dist/core/objects/pdf-string.js +30 -0
- package/dist/core/objects/pdf-trailer.d.ts +26 -0
- package/dist/core/objects/pdf-trailer.js +33 -0
- package/dist/core/objects/pdf-xref-table.d.ts +48 -0
- package/dist/core/objects/pdf-xref-table.js +183 -0
- package/{packages/pdf-lite/src/core/parser.ts → dist/core/parser.d.ts} +3 -4
- package/dist/core/parser.js +9 -0
- package/dist/core/ref.d.ts +59 -0
- package/{packages/pdf-lite/src/core/ref.ts → dist/core/ref.js} +23 -41
- package/dist/core/serializer.d.ts +36 -0
- package/{packages/pdf-lite/src/core/serializer.ts → dist/core/serializer.js} +20 -30
- package/dist/core/streams/object-stream.d.ts +6 -0
- package/dist/core/streams/object-stream.js +15 -0
- package/dist/core/tokeniser.d.ts +98 -0
- package/dist/core/tokeniser.js +552 -0
- package/dist/core/tokens/boolean-token.d.ts +8 -0
- package/dist/core/tokens/boolean-token.js +15 -0
- package/dist/core/tokens/byte-offset-token.d.ts +8 -0
- package/dist/core/tokens/byte-offset-token.js +15 -0
- package/dist/core/tokens/comment-token.d.ts +10 -0
- package/dist/core/tokens/comment-token.js +26 -0
- package/dist/core/tokens/end-array-token.d.ts +4 -0
- package/dist/core/tokens/end-array-token.js +8 -0
- package/dist/core/tokens/end-dictionary-token.d.ts +4 -0
- package/dist/core/tokens/end-dictionary-token.js +8 -0
- package/dist/core/tokens/end-object-token.d.ts +4 -0
- package/dist/core/tokens/end-object-token.js +8 -0
- package/dist/core/tokens/end-stream-token.d.ts +5 -0
- package/dist/core/tokens/end-stream-token.js +8 -0
- package/dist/core/tokens/hexadecimal-token.d.ts +7 -0
- package/dist/core/tokens/hexadecimal-token.js +16 -0
- package/dist/core/tokens/name-token.d.ts +6 -0
- package/dist/core/tokens/name-token.js +15 -0
- package/dist/core/tokens/null-token.d.ts +4 -0
- package/dist/core/tokens/null-token.js +8 -0
- package/dist/core/tokens/number-token.d.ts +24 -0
- package/dist/core/tokens/number-token.js +104 -0
- package/dist/core/tokens/object-reference-token.d.ts +7 -0
- package/dist/core/tokens/object-reference-token.js +17 -0
- package/dist/core/tokens/start-array-token.d.ts +4 -0
- package/dist/core/tokens/start-array-token.js +8 -0
- package/dist/core/tokens/start-dictionary-token.d.ts +4 -0
- package/dist/core/tokens/start-dictionary-token.js +8 -0
- package/dist/core/tokens/start-object-token.d.ts +8 -0
- package/dist/core/tokens/start-object-token.js +17 -0
- package/dist/core/tokens/start-stream-token.d.ts +8 -0
- package/dist/core/tokens/start-stream-token.js +38 -0
- package/dist/core/tokens/start-xref-token.d.ts +4 -0
- package/dist/core/tokens/start-xref-token.js +8 -0
- package/dist/core/tokens/stream-chunk-token.d.ts +5 -0
- package/dist/core/tokens/stream-chunk-token.js +6 -0
- package/dist/core/tokens/string-token.d.ts +7 -0
- package/dist/core/tokens/string-token.js +13 -0
- package/dist/core/tokens/token.d.ts +10 -0
- package/dist/core/tokens/token.js +32 -0
- package/dist/core/tokens/trailer-token.d.ts +5 -0
- package/dist/core/tokens/trailer-token.js +10 -0
- package/dist/core/tokens/whitespace-token.d.ts +11 -0
- package/dist/core/tokens/whitespace-token.js +36 -0
- package/dist/core/tokens/xref-table-entry-token.d.ts +13 -0
- package/dist/core/tokens/xref-table-entry-token.js +40 -0
- package/dist/core/tokens/xref-table-section-start-token.d.ts +8 -0
- package/dist/core/tokens/xref-table-section-start-token.js +21 -0
- package/dist/core/tokens/xref-table-start-token.d.ts +5 -0
- package/dist/core/tokens/xref-table-start-token.js +10 -0
- package/dist/crypto/ciphers/aes128.d.ts +19 -0
- package/{packages/pdf-lite/src/crypto/ciphers/aes128.ts → dist/crypto/ciphers/aes128.js} +17 -27
- package/dist/crypto/ciphers/aes256.d.ts +18 -0
- package/{packages/pdf-lite/src/crypto/ciphers/aes256.ts → dist/crypto/ciphers/aes256.js} +14 -17
- package/dist/crypto/ciphers/rc4.d.ts +18 -0
- package/{packages/pdf-lite/src/crypto/ciphers/rc4.ts → dist/crypto/ciphers/rc4.js} +25 -30
- package/dist/crypto/constants.d.ts +6 -0
- package/{packages/pdf-lite/src/crypto/constants.ts → dist/crypto/constants.js} +1 -1
- package/dist/crypto/key-derivation/key-derivation-aes256.d.ts +56 -0
- package/dist/crypto/key-derivation/key-derivation-aes256.js +156 -0
- package/dist/crypto/key-derivation/key-derivation.d.ts +42 -0
- package/{packages/pdf-lite/src/crypto/key-derivation/key-derivation.ts → dist/crypto/key-derivation/key-derivation.js} +35 -66
- package/dist/crypto/key-gen/key-gen-aes256.d.ts +36 -0
- package/{packages/pdf-lite/src/crypto/key-gen/key-gen-aes256.ts → dist/crypto/key-gen/key-gen-aes256.js} +25 -50
- package/dist/crypto/key-gen/key-gen-rc4-128.d.ts +47 -0
- package/{packages/pdf-lite/src/crypto/key-gen/key-gen-rc4-128.ts → dist/crypto/key-gen/key-gen-rc4-128.js} +45 -106
- package/dist/crypto/key-gen/key-gen-rc4-40.d.ts +60 -0
- package/{packages/pdf-lite/src/crypto/key-gen/key-gen-rc4-40.ts → dist/crypto/key-gen/key-gen-rc4-40.js} +26 -62
- package/dist/crypto/types.d.ts +5 -0
- package/dist/crypto/types.js +1 -0
- package/dist/crypto/utils.d.ts +40 -0
- package/{packages/pdf-lite/src/crypto/utils.ts → dist/crypto/utils.js} +27 -36
- package/dist/filters/ascii85.d.ts +16 -0
- package/{packages/pdf-lite/src/filters/ascii85.ts → dist/filters/ascii85.js} +41 -65
- package/dist/filters/asciihex.d.ts +16 -0
- package/{packages/pdf-lite/src/filters/asciihex.ts → dist/filters/asciihex.js} +18 -19
- package/dist/filters/flate.d.ts +15 -0
- package/{packages/pdf-lite/src/filters/flate.ts → dist/filters/flate.js} +7 -10
- package/dist/filters/lzw.d.ts +16 -0
- package/dist/filters/lzw.js +150 -0
- package/dist/filters/pass-through.d.ts +14 -0
- package/{packages/pdf-lite/src/filters/pass-through.ts → dist/filters/pass-through.js} +6 -9
- package/dist/filters/runlength.d.ts +16 -0
- package/{packages/pdf-lite/src/filters/runlength.ts → dist/filters/runlength.js} +36 -40
- package/dist/filters/types.d.ts +18 -0
- package/{packages/pdf-lite/src/filters/types.ts → dist/filters/types.js} +1 -10
- package/dist/index.d.ts +4 -0
- package/dist/index.js +4 -0
- package/dist/pdf/errors.d.ts +6 -0
- package/{packages/pdf-lite/src/pdf/errors.ts → dist/pdf/errors.js} +2 -1
- package/dist/pdf/index.d.ts +4 -0
- package/dist/pdf/index.js +4 -0
- package/dist/pdf/pdf-document.d.ts +277 -0
- package/{packages/pdf-lite/src/pdf/pdf-document.ts → dist/pdf/pdf-document.js} +305 -541
- package/dist/pdf/pdf-reader.d.ts +37 -0
- package/{packages/pdf-lite/src/pdf/pdf-reader.ts → dist/pdf/pdf-reader.js} +12 -22
- package/dist/pdf/pdf-revision.d.ts +101 -0
- package/{packages/pdf-lite/src/pdf/pdf-revision.ts → dist/pdf/pdf-revision.js} +70 -105
- package/dist/pdf/pdf-xref-lookup.d.ts +149 -0
- package/dist/pdf/pdf-xref-lookup.js +402 -0
- package/dist/security/crypt-filters/aesv2.d.ts +35 -0
- package/{packages/pdf-lite/src/security/crypt-filters/aesv2.ts → dist/security/crypt-filters/aesv2.js} +9 -26
- package/dist/security/crypt-filters/aesv3.d.ts +36 -0
- package/{packages/pdf-lite/src/security/crypt-filters/aesv3.ts → dist/security/crypt-filters/aesv3.js} +9 -23
- package/{packages/pdf-lite/src/security/crypt-filters/base.ts → dist/security/crypt-filters/base.d.ts} +21 -73
- package/dist/security/crypt-filters/base.js +93 -0
- package/dist/security/crypt-filters/identity.d.ts +28 -0
- package/{packages/pdf-lite/src/security/crypt-filters/identity.ts → dist/security/crypt-filters/identity.js} +9 -13
- package/dist/security/crypt-filters/v2.d.ts +37 -0
- package/{packages/pdf-lite/src/security/crypt-filters/v2.ts → dist/security/crypt-filters/v2.js} +9 -26
- package/dist/security/handlers/base.d.ts +304 -0
- package/dist/security/handlers/base.js +359 -0
- package/dist/security/handlers/pubSec.d.ts +164 -0
- package/dist/security/handlers/pubSec.js +299 -0
- package/dist/security/handlers/utils.d.ts +77 -0
- package/dist/security/handlers/utils.js +244 -0
- package/dist/security/handlers/v1.d.ts +81 -0
- package/dist/security/handlers/v1.js +135 -0
- package/dist/security/handlers/v2.d.ts +63 -0
- package/{packages/pdf-lite/src/security/handlers/v2.ts → dist/security/handlers/v2.js} +25 -62
- package/dist/security/handlers/v4.d.ts +121 -0
- package/dist/security/handlers/v4.js +257 -0
- package/dist/security/handlers/v5.d.ts +112 -0
- package/dist/security/handlers/v5.js +210 -0
- package/{packages/pdf-lite/src/security/types.ts → dist/security/types.d.ts} +72 -94
- package/dist/security/types.js +1 -0
- package/dist/signing/document-security-store.d.ts +108 -0
- package/dist/signing/document-security-store.js +156 -0
- package/dist/signing/index.d.ts +3 -0
- package/dist/signing/index.js +3 -0
- package/dist/signing/signatures/adbe-pkcs7-detached.d.ts +57 -0
- package/dist/signing/signatures/adbe-pkcs7-detached.js +117 -0
- package/dist/signing/signatures/adbe-pkcs7-sha1.d.ts +55 -0
- package/dist/signing/signatures/adbe-pkcs7-sha1.js +121 -0
- package/dist/signing/signatures/adbe-x509-rsa-sha1.d.ts +49 -0
- package/dist/signing/signatures/adbe-x509-rsa-sha1.js +81 -0
- package/dist/signing/signatures/base.d.ts +107 -0
- package/dist/signing/signatures/base.js +145 -0
- package/dist/signing/signatures/etsi-cades-detached.d.ts +64 -0
- package/dist/signing/signatures/etsi-cades-detached.js +159 -0
- package/dist/signing/signatures/etsi-rfc3161.d.ts +37 -0
- package/{packages/pdf-lite/src/signing/signatures/etsi-rfc3161.ts → dist/signing/signatures/etsi-rfc3161.js} +21 -43
- package/dist/signing/signatures/index.d.ts +6 -0
- package/dist/signing/signatures/index.js +6 -0
- package/dist/signing/signer.d.ts +23 -0
- package/dist/signing/signer.js +92 -0
- package/{packages/pdf-lite/src/signing/types.ts → dist/signing/types.d.ts} +40 -48
- package/dist/signing/types.js +1 -0
- package/dist/signing/utils.d.ts +32 -0
- package/{packages/pdf-lite/src/signing/utils.ts → dist/signing/utils.js} +12 -31
- package/dist/types.d.ts +23 -0
- package/dist/types.js +11 -0
- package/dist/utils/IterableReadableStream.d.ts +24 -0
- package/{packages/pdf-lite/src/utils/IterableReadableStream.ts → dist/utils/IterableReadableStream.js} +6 -6
- package/dist/utils/algos.d.ts +242 -0
- package/{packages/pdf-lite/src/utils/algos.ts → dist/utils/algos.js} +63 -136
- package/dist/utils/assert.d.ts +28 -0
- package/{packages/pdf-lite/src/utils/assert.ts → dist/utils/assert.js} +5 -10
- package/dist/utils/bytesToHex.d.ts +13 -0
- package/{packages/pdf-lite/src/utils/bytesToHex.ts → dist/utils/bytesToHex.js} +4 -6
- package/dist/utils/bytesToHexBytes.d.ts +14 -0
- package/{packages/pdf-lite/src/utils/bytesToHexBytes.ts → dist/utils/bytesToHexBytes.js} +7 -12
- package/dist/utils/bytesToString.d.ts +13 -0
- package/{packages/pdf-lite/src/utils/bytesToString.ts → dist/utils/bytesToString.js} +3 -5
- package/dist/utils/concatUint8Arrays.d.ts +16 -0
- package/{packages/pdf-lite/src/utils/concatUint8Arrays.ts → dist/utils/concatUint8Arrays.js} +7 -9
- package/dist/utils/escapeString.d.ts +14 -0
- package/dist/utils/escapeString.js +43 -0
- package/dist/utils/hexBytesToBytes.d.ts +15 -0
- package/{packages/pdf-lite/src/utils/hexBytesToBytes.ts → dist/utils/hexBytesToBytes.js} +4 -6
- package/dist/utils/hexBytesToString.d.ts +13 -0
- package/{packages/pdf-lite/src/utils/hexBytesToString.ts → dist/utils/hexBytesToString.js} +5 -7
- package/dist/utils/hexToBytes.d.ts +13 -0
- package/{packages/pdf-lite/src/utils/hexToBytes.ts → dist/utils/hexToBytes.js} +4 -6
- package/dist/utils/padBytes.d.ts +15 -0
- package/{packages/pdf-lite/src/utils/padBytes.ts → dist/utils/padBytes.js} +5 -9
- package/dist/utils/predictors.d.ts +113 -0
- package/{packages/pdf-lite/src/utils/predictors.ts → dist/utils/predictors.js} +103 -156
- package/dist/utils/replaceInBuffer.d.ts +22 -0
- package/{packages/pdf-lite/src/utils/replaceInBuffer.ts → dist/utils/replaceInBuffer.js} +18 -27
- package/dist/utils/stringToBytes.d.ts +14 -0
- package/{packages/pdf-lite/src/utils/stringToBytes.ts → dist/utils/stringToBytes.js} +6 -7
- package/dist/utils/stringToHexBytes.d.ts +15 -0
- package/{packages/pdf-lite/src/utils/stringToHexBytes.ts → dist/utils/stringToHexBytes.js} +5 -7
- package/dist/utils/unescapeString.d.ts +16 -0
- package/dist/utils/unescapeString.js +114 -0
- package/package.json +37 -34
- package/.commitlintrc.cjs +0 -25
- package/.github/ISSUE_TEMPLATE/bug_report.md +0 -40
- package/.github/ISSUE_TEMPLATE/feature_request.md +0 -19
- package/.github/workflows/docs.yaml +0 -95
- package/.github/workflows/prepare-release.yaml +0 -79
- package/.github/workflows/release.yaml +0 -80
- package/.github/workflows/test.yaml +0 -35
- package/.husky/commit-msg +0 -1
- package/.husky/pre-commit +0 -1
- package/.prettierignore +0 -4
- package/.prettierrc +0 -4
- package/CONTRIBUTING.md +0 -109
- package/EXAMPLES.md +0 -1512
- package/docs/README.md +0 -127
- package/docs/core/README.md +0 -43
- package/docs/core/decoder/README.md +0 -11
- package/docs/core/decoder/classes/PdfDecoder.md +0 -362
- package/docs/core/generators/README.md +0 -14
- package/docs/core/generators/functions/bytesToPdfObjects.md +0 -26
- package/docs/core/generators/functions/pdfDecoder.md +0 -36
- package/docs/core/generators/functions/pdfDecoderAsync.md +0 -26
- package/docs/core/generators/functions/stringToPdfObjects.md +0 -25
- package/docs/core/incremental-parser/README.md +0 -13
- package/docs/core/incremental-parser/classes/EofReachedError.md +0 -55
- package/docs/core/incremental-parser/classes/IncrementalParser.md +0 -299
- package/docs/core/incremental-parser/classes/NoMoreTokensError.md +0 -55
- package/docs/core/objects/pdf-array/README.md +0 -11
- package/docs/core/objects/pdf-array/classes/PdfArray.md +0 -305
- package/docs/core/objects/pdf-boolean/README.md +0 -11
- package/docs/core/objects/pdf-boolean/classes/PdfBoolean.md +0 -265
- package/docs/core/objects/pdf-comment/README.md +0 -11
- package/docs/core/objects/pdf-comment/classes/PdfComment.md +0 -329
- package/docs/core/objects/pdf-date/README.md +0 -11
- package/docs/core/objects/pdf-date/classes/PdfDate.md +0 -317
- package/docs/core/objects/pdf-dictionary/README.md +0 -17
- package/docs/core/objects/pdf-dictionary/classes/PdfDictionary.md +0 -396
- package/docs/core/objects/pdf-dictionary/type-aliases/PdfDictionaryEntries.md +0 -9
- package/docs/core/objects/pdf-dictionary/type-aliases/PdfDictionaryEntry.md +0 -9
- package/docs/core/objects/pdf-dictionary/type-aliases/PdfDictionaryMap.md +0 -9
- package/docs/core/objects/pdf-hexadecimal/README.md +0 -11
- package/docs/core/objects/pdf-hexadecimal/classes/PdfHexadecimal.md +0 -320
- package/docs/core/objects/pdf-indirect-object/README.md +0 -11
- package/docs/core/objects/pdf-indirect-object/classes/PdfIndirectObject.md +0 -411
- package/docs/core/objects/pdf-name/README.md +0 -11
- package/docs/core/objects/pdf-name/classes/PdfName.md +0 -271
- package/docs/core/objects/pdf-null/README.md +0 -11
- package/docs/core/objects/pdf-null/classes/PdfNull.md +0 -259
- package/docs/core/objects/pdf-number/README.md +0 -12
- package/docs/core/objects/pdf-number/classes/PdfByteOffsetNumber.md +0 -369
- package/docs/core/objects/pdf-number/classes/PdfNumber.md +0 -345
- package/docs/core/objects/pdf-object/README.md +0 -11
- package/docs/core/objects/pdf-object/classes/PdfObject.md +0 -214
- package/docs/core/objects/pdf-object-reference/README.md +0 -11
- package/docs/core/objects/pdf-object-reference/classes/PdfObjectReference.md +0 -279
- package/docs/core/objects/pdf-start-xref/README.md +0 -11
- package/docs/core/objects/pdf-start-xref/classes/PdfStartXRef.md +0 -265
- package/docs/core/objects/pdf-stream/README.md +0 -23
- package/docs/core/objects/pdf-stream/classes/PdfObjStream.md +0 -699
- package/docs/core/objects/pdf-stream/classes/PdfStream.md +0 -570
- package/docs/core/objects/pdf-stream/classes/PdfXRefStream.md +0 -723
- package/docs/core/objects/pdf-stream/classes/PdfXRefStreamCompressedEntry.md +0 -51
- package/docs/core/objects/pdf-stream/type-aliases/PdfXRefStreamEntry.md +0 -9
- package/docs/core/objects/pdf-stream/type-aliases/PdfXRefStreamStandardEntry.md +0 -9
- package/docs/core/objects/pdf-stream/variables/PdfXRefStreamStandardEntry.md +0 -9
- package/docs/core/objects/pdf-string/README.md +0 -11
- package/docs/core/objects/pdf-string/classes/PdfString.md +0 -301
- package/docs/core/objects/pdf-trailer/README.md +0 -16
- package/docs/core/objects/pdf-trailer/classes/PdfTrailer.md +0 -271
- package/docs/core/objects/pdf-trailer/type-aliases/PdfTrailerDictionary.md +0 -9
- package/docs/core/objects/pdf-trailer/type-aliases/PdfTrailerEntries.md +0 -51
- package/docs/core/objects/pdf-xref-table/README.md +0 -13
- package/docs/core/objects/pdf-xref-table/classes/PdfXRefTable.md +0 -331
- package/docs/core/objects/pdf-xref-table/classes/PdfXRefTableEntry.md +0 -297
- package/docs/core/objects/pdf-xref-table/classes/PdfXRefTableSectionHeader.md +0 -277
- package/docs/core/parser/README.md +0 -11
- package/docs/core/parser/classes/Parser.md +0 -74
- package/docs/core/ref/README.md +0 -15
- package/docs/core/ref/classes/Ref.md +0 -149
- package/docs/core/ref/type-aliases/RefUpdateCallback.md +0 -33
- package/docs/core/serializer/README.md +0 -11
- package/docs/core/serializer/classes/PdfTokenSerializer.md +0 -106
- package/docs/core/streams/object-stream/README.md +0 -11
- package/docs/core/streams/object-stream/classes/PdfObjectStream.md +0 -69
- package/docs/core/tokeniser/README.md +0 -21
- package/docs/core/tokeniser/classes/PdfByteStreamTokeniser.md +0 -366
- package/docs/core/tokeniser/classes/PdfObjectTokeniser.md +0 -69
- package/docs/core/tokeniser/functions/objectToTokens.md +0 -25
- package/docs/core/tokeniser/functions/pdfObjectStreamTokeniser.md +0 -27
- package/docs/core/tokeniser/type-aliases/PdfTokeniser.md +0 -11
- package/docs/core/tokens/boolean-token/README.md +0 -11
- package/docs/core/tokens/boolean-token/classes/PdfBooleanToken.md +0 -139
- package/docs/core/tokens/byte-offset-token/README.md +0 -11
- package/docs/core/tokens/byte-offset-token/classes/PdfByteOffsetToken.md +0 -153
- package/docs/core/tokens/comment-token/README.md +0 -11
- package/docs/core/tokens/comment-token/classes/PdfCommentToken.md +0 -161
- package/docs/core/tokens/end-array-token/README.md +0 -11
- package/docs/core/tokens/end-array-token/classes/PdfEndArrayToken.md +0 -115
- package/docs/core/tokens/end-dictionary-token/README.md +0 -11
- package/docs/core/tokens/end-dictionary-token/classes/PdfEndDictionaryToken.md +0 -115
- package/docs/core/tokens/end-object-token/README.md +0 -11
- package/docs/core/tokens/end-object-token/classes/PdfEndObjectToken.md +0 -115
- package/docs/core/tokens/end-stream-token/README.md +0 -11
- package/docs/core/tokens/end-stream-token/classes/PdfEndStreamToken.md +0 -121
- package/docs/core/tokens/hexadecimal-token/README.md +0 -11
- package/docs/core/tokens/hexadecimal-token/classes/PdfHexadecimalToken.md +0 -127
- package/docs/core/tokens/name-token/README.md +0 -11
- package/docs/core/tokens/name-token/classes/PdfNameToken.md +0 -127
- package/docs/core/tokens/null-token/README.md +0 -11
- package/docs/core/tokens/null-token/classes/PdfNullToken.md +0 -115
- package/docs/core/tokens/number-token/README.md +0 -11
- package/docs/core/tokens/number-token/classes/PdfNumberToken.md +0 -271
- package/docs/core/tokens/object-reference-token/README.md +0 -11
- package/docs/core/tokens/object-reference-token/classes/PdfObjectReferenceToken.md +0 -137
- package/docs/core/tokens/start-array-token/README.md +0 -11
- package/docs/core/tokens/start-array-token/classes/PdfStartArrayToken.md +0 -115
- package/docs/core/tokens/start-dictionary-token/README.md +0 -11
- package/docs/core/tokens/start-dictionary-token/classes/PdfStartDictionaryToken.md +0 -115
- package/docs/core/tokens/start-object-token/README.md +0 -11
- package/docs/core/tokens/start-object-token/classes/PdfStartObjectToken.md +0 -147
- package/docs/core/tokens/start-stream-token/README.md +0 -11
- package/docs/core/tokens/start-stream-token/classes/PdfStartStreamToken.md +0 -147
- package/docs/core/tokens/start-xref-token/README.md +0 -11
- package/docs/core/tokens/start-xref-token/classes/PdfStartXRefToken.md +0 -115
- package/docs/core/tokens/stream-chunk-token/README.md +0 -11
- package/docs/core/tokens/stream-chunk-token/classes/PdfStreamChunkToken.md +0 -121
- package/docs/core/tokens/string-token/README.md +0 -11
- package/docs/core/tokens/string-token/classes/PdfStringToken.md +0 -127
- package/docs/core/tokens/token/README.md +0 -11
- package/docs/core/tokens/token/classes/PdfToken.md +0 -116
- package/docs/core/tokens/trailer-token/README.md +0 -11
- package/docs/core/tokens/trailer-token/classes/PdfTrailerToken.md +0 -127
- package/docs/core/tokens/whitespace-token/README.md +0 -11
- package/docs/core/tokens/whitespace-token/classes/PdfWhitespaceToken.md +0 -161
- package/docs/core/tokens/xref-table-entry-token/README.md +0 -11
- package/docs/core/tokens/xref-table-entry-token/classes/PdfXRefTableEntryToken.md +0 -157
- package/docs/core/tokens/xref-table-section-start-token/README.md +0 -11
- package/docs/core/tokens/xref-table-section-start-token/classes/PdfXRefTableSectionStartToken.md +0 -137
- package/docs/core/tokens/xref-table-start-token/README.md +0 -11
- package/docs/core/tokens/xref-table-start-token/classes/PdfXRefTableStartToken.md +0 -127
- package/docs/crypto/ciphers/aes128/README.md +0 -11
- package/docs/crypto/ciphers/aes128/functions/aes128.md +0 -39
- package/docs/crypto/ciphers/aes256/README.md +0 -11
- package/docs/crypto/ciphers/aes256/functions/aes256.md +0 -35
- package/docs/crypto/ciphers/rc4/README.md +0 -11
- package/docs/crypto/ciphers/rc4/functions/rc4.md +0 -35
- package/docs/crypto/constants/README.md +0 -11
- package/docs/crypto/constants/variables/DEFAULT_PADDING.md +0 -13
- package/docs/crypto/key-derivation/key-derivation/README.md +0 -13
- package/docs/crypto/key-derivation/key-derivation/functions/computeMasterKey.md +0 -57
- package/docs/crypto/key-derivation/key-derivation/functions/deriveObjectKey.md +0 -50
- package/docs/crypto/key-derivation/key-derivation/functions/padPassword.md +0 -33
- package/docs/crypto/key-derivation/key-derivation-aes256/README.md +0 -13
- package/docs/crypto/key-derivation/key-derivation-aes256/functions/computeAlgorithm2bHash.md +0 -45
- package/docs/crypto/key-derivation/key-derivation-aes256/functions/getFileKey.md +0 -66
- package/docs/crypto/key-derivation/key-derivation-aes256/functions/validatePasswordHash.md +0 -52
- package/docs/crypto/key-gen/key-gen-aes256/README.md +0 -12
- package/docs/crypto/key-gen/key-gen-aes256/functions/generateOandOe.md +0 -44
- package/docs/crypto/key-gen/key-gen-aes256/functions/generateUandUe.md +0 -38
- package/docs/crypto/key-gen/key-gen-rc4-128/README.md +0 -13
- package/docs/crypto/key-gen/key-gen-rc4-128/functions/computeOValueRc4_128.md +0 -38
- package/docs/crypto/key-gen/key-gen-rc4-128/functions/computeUValueRc4_128.md +0 -62
- package/docs/crypto/key-gen/key-gen-rc4-128/functions/decryptUserPasswordRc4_128.md +0 -38
- package/docs/crypto/key-gen/key-gen-rc4-40/README.md +0 -14
- package/docs/crypto/key-gen/key-gen-rc4-40/functions/computeEncryptionKeyRc4_40.md +0 -49
- package/docs/crypto/key-gen/key-gen-rc4-40/functions/computeORc4_40.md +0 -38
- package/docs/crypto/key-gen/key-gen-rc4-40/functions/computeURc4_40.md +0 -50
- package/docs/crypto/key-gen/key-gen-rc4-40/functions/decryptUserPasswordRc4_40.md +0 -38
- package/docs/crypto/types/README.md +0 -11
- package/docs/crypto/types/interfaces/Cipher.md +0 -39
- package/docs/crypto/utils/README.md +0 -13
- package/docs/crypto/utils/functions/int32ToLittleEndianBytes.md +0 -31
- package/docs/crypto/utils/functions/padPassword.md +0 -33
- package/docs/crypto/utils/functions/removePdfPasswordPadding.md +0 -32
- package/docs/filters/ascii85/README.md +0 -11
- package/docs/filters/ascii85/functions/ascii85.md +0 -27
- package/docs/filters/asciihex/README.md +0 -11
- package/docs/filters/asciihex/functions/asciiHex.md +0 -27
- package/docs/filters/flate/README.md +0 -11
- package/docs/filters/flate/functions/flate.md +0 -26
- package/docs/filters/lzw/README.md +0 -11
- package/docs/filters/lzw/functions/lzw.md +0 -27
- package/docs/filters/pass-through/README.md +0 -11
- package/docs/filters/pass-through/functions/passthroughFilter.md +0 -25
- package/docs/filters/runlength/README.md +0 -11
- package/docs/filters/runlength/functions/runLength.md +0 -27
- package/docs/filters/types/README.md +0 -19
- package/docs/filters/types/interfaces/PdfFilter.md +0 -39
- package/docs/filters/types/type-aliases/PdfStreamFilterType.md +0 -9
- package/docs/filters/types/variables/PDF_FILTER_TYPES.md +0 -51
- package/docs/index/README.md +0 -235
- package/docs/pdf/README.md +0 -31
- package/docs/pdf/errors/README.md +0 -11
- package/docs/pdf/errors/classes/FoundCompressedObjectError.md +0 -56
- package/docs/pdf/pdf-document/README.md +0 -11
- package/docs/pdf/pdf-document/classes/PdfDocument.md +0 -876
- package/docs/pdf/pdf-reader/README.md +0 -11
- package/docs/pdf/pdf-reader/classes/PdfReader.md +0 -82
- package/docs/pdf/pdf-revision/README.md +0 -11
- package/docs/pdf/pdf-revision/classes/PdfRevision.md +0 -508
- package/docs/pdf/pdf-xref-lookup/README.md +0 -11
- package/docs/pdf/pdf-xref-lookup/classes/PdfXrefLookup.md +0 -421
- package/docs/security/crypt-filters/aesv2/README.md +0 -11
- package/docs/security/crypt-filters/aesv2/classes/AesV2CryptFilter.md +0 -274
- package/docs/security/crypt-filters/aesv3/README.md +0 -11
- package/docs/security/crypt-filters/aesv3/classes/AesV3CryptFilter.md +0 -275
- package/docs/security/crypt-filters/base/README.md +0 -15
- package/docs/security/crypt-filters/base/classes/PdfCryptFilter.md +0 -221
- package/docs/security/crypt-filters/base/type-aliases/CryptFilterOptions.md +0 -43
- package/docs/security/crypt-filters/identity/README.md +0 -11
- package/docs/security/crypt-filters/identity/classes/IdentityCryptFilter.md +0 -249
- package/docs/security/crypt-filters/v2/README.md +0 -11
- package/docs/security/crypt-filters/v2/classes/V2CryptFilter.md +0 -279
- package/docs/security/handlers/base/README.md +0 -17
- package/docs/security/handlers/base/classes/PdfSecurityHandler.md +0 -384
- package/docs/security/handlers/base/classes/PdfStandardSecurityHandler.md +0 -694
- package/docs/security/handlers/base/type-aliases/PdfSecurityHandlerOptions.md +0 -27
- package/docs/security/handlers/base/type-aliases/PdfStandardSecurityHandlerOptions.md +0 -43
- package/docs/security/handlers/pubSec/README.md +0 -11
- package/docs/security/handlers/pubSec/classes/PdfPublicKeySecurityHandler.md +0 -503
- package/docs/security/handlers/utils/README.md +0 -14
- package/docs/security/handlers/utils/functions/createFromDictionary.md +0 -56
- package/docs/security/handlers/utils/functions/createFromEncryptionOptions.md +0 -40
- package/docs/security/handlers/utils/functions/createStandardSecurityHandlerFromDictionary.md +0 -55
- package/docs/security/handlers/utils/functions/getCryptFilter.md +0 -35
- package/docs/security/handlers/v1/README.md +0 -11
- package/docs/security/handlers/v1/classes/PdfV1SecurityHandler.md +0 -779
- package/docs/security/handlers/v2/README.md +0 -11
- package/docs/security/handlers/v2/classes/PdfV2SecurityHandler.md +0 -783
- package/docs/security/handlers/v4/README.md +0 -11
- package/docs/security/handlers/v4/classes/PdfV4SecurityHandler.md +0 -907
- package/docs/security/handlers/v5/README.md +0 -11
- package/docs/security/handlers/v5/classes/PdfV5SecurityHandler.md +0 -926
- package/docs/security/types/README.md +0 -19
- package/docs/security/types/type-aliases/CryptFilterType.md +0 -15
- package/docs/security/types/type-aliases/PdfCryptFilterDictionary.md +0 -12
- package/docs/security/types/type-aliases/PdfEncryptionAlgorithmOptions.md +0 -11
- package/docs/security/types/type-aliases/PdfEncryptionAlgorithmType.md +0 -17
- package/docs/security/types/type-aliases/PdfEncryptionDictionary.md +0 -13
- package/docs/security/types/type-aliases/PdfEncryptionDictionaryObject.md +0 -11
- package/docs/security/types/type-aliases/PdfEncryptionOptions.md +0 -90
- package/docs/security/types/type-aliases/PdfEncryptionRecipient.md +0 -24
- package/docs/security/types/type-aliases/PdfId.md +0 -13
- package/docs/signing/README.md +0 -127
- package/docs/signing/document-security-store/README.md +0 -19
- package/docs/signing/document-security-store/classes/PdfCertObject.md +0 -443
- package/docs/signing/document-security-store/classes/PdfCrlObject.md +0 -443
- package/docs/signing/document-security-store/classes/PdfDocumentSecurityStoreDictionary.md +0 -416
- package/docs/signing/document-security-store/classes/PdfDocumentSecurityStoreObject.md +0 -563
- package/docs/signing/document-security-store/classes/PdfOcspObject.md +0 -443
- package/docs/signing/document-security-store/type-aliases/PdfVriObject.md +0 -12
- package/docs/signing/signatures/README.md +0 -55
- package/docs/signing/signatures/adbe-pkcs7-detached/README.md +0 -11
- package/docs/signing/signatures/adbe-pkcs7-detached/classes/PdfAdbePkcs7DetachedSignatureObject.md +0 -669
- package/docs/signing/signatures/adbe-pkcs7-sha1/README.md +0 -11
- package/docs/signing/signatures/adbe-pkcs7-sha1/classes/PdfAdbePkcs7Sha1SignatureObject.md +0 -667
- package/docs/signing/signatures/adbe-x509-rsa-sha1/README.md +0 -11
- package/docs/signing/signatures/adbe-x509-rsa-sha1/classes/PdfAdbePkcsX509RsaSha1SignatureObject.md +0 -651
- package/docs/signing/signatures/base/README.md +0 -16
- package/docs/signing/signatures/base/classes/PdfSignatureDictionary.md +0 -420
- package/docs/signing/signatures/base/classes/PdfSignatureObject.md +0 -584
- package/docs/signing/signatures/base/type-aliases/PdfSignatureSignOptions.md +0 -51
- package/docs/signing/signatures/etsi-cades-detached/README.md +0 -11
- package/docs/signing/signatures/etsi-cades-detached/classes/PdfEtsiCadesDetachedSignatureObject.md +0 -693
- package/docs/signing/signatures/etsi-rfc3161/README.md +0 -11
- package/docs/signing/signatures/etsi-rfc3161/classes/PdfEtsiRfc3161SignatureObject.md +0 -614
- package/docs/signing/signer/README.md +0 -11
- package/docs/signing/signer/classes/PdfSigner.md +0 -58
- package/docs/signing/types/README.md +0 -16
- package/docs/signing/types/type-aliases/PdfSignatureDictionaryEntries.md +0 -95
- package/docs/signing/types/type-aliases/PdfSignatureSubType.md +0 -17
- package/docs/signing/types/type-aliases/PdfSignatureType.md +0 -14
- package/docs/signing/types/type-aliases/RevocationInfo.md +0 -43
- package/docs/signing/types/type-aliases/SignaturePolicyDocument.md +0 -35
- package/docs/signing/types/type-aliases/TimeStampAuthority.md +0 -35
- package/docs/signing/utils/README.md +0 -11
- package/docs/signing/utils/functions/fetchRevocationInfo.md +0 -70
- package/docs/types/README.md +0 -21
- package/docs/types/type-aliases/ByteArray.md +0 -9
- package/docs/types/type-aliases/ChangeType.md +0 -9
- package/docs/types/type-aliases/DecodeParms.md +0 -33
- package/docs/types/type-aliases/HashAlgorithm.md +0 -9
- package/docs/types/type-aliases/PdfEncryptionAlgorithm.md +0 -9
- package/docs/types/type-aliases/PdfPermissions.md +0 -63
- package/docs/types/type-aliases/PdfVersion.md +0 -9
- package/docs/types/variables/PERMISSION_FLAGS.md +0 -9
- package/docs/utils/IterableReadableStream/README.md +0 -11
- package/docs/utils/IterableReadableStream/classes/IterableReadableStream.md +0 -103
- package/docs/utils/algos/README.md +0 -28
- package/docs/utils/algos/functions/aes128CbcNoPaddingEncrypt.md +0 -43
- package/docs/utils/algos/functions/aes128cbcDecrypt.md +0 -47
- package/docs/utils/algos/functions/aes128cbcEncrypt.md +0 -47
- package/docs/utils/algos/functions/aes256CbcNoPaddingDecrypt.md +0 -43
- package/docs/utils/algos/functions/aes256CbcNoPaddingEncrypt.md +0 -43
- package/docs/utils/algos/functions/aes256cbcDecrypt.md +0 -43
- package/docs/utils/algos/functions/aes256cbcEncrypt.md +0 -43
- package/docs/utils/algos/functions/aes256ecbDecrypt.md +0 -41
- package/docs/utils/algos/functions/aes256ecbEncrypt.md +0 -41
- package/docs/utils/algos/functions/deflateData.md +0 -31
- package/docs/utils/algos/functions/getRandomBytes.md +0 -35
- package/docs/utils/algos/functions/hash.md +0 -41
- package/docs/utils/algos/functions/inflateData.md +0 -35
- package/docs/utils/algos/functions/md5.md +0 -31
- package/docs/utils/algos/functions/sha1.md +0 -31
- package/docs/utils/algos/functions/sha256.md +0 -31
- package/docs/utils/algos/functions/sha384.md +0 -31
- package/docs/utils/algos/functions/sha512.md +0 -31
- package/docs/utils/assert/README.md +0 -12
- package/docs/utils/assert/functions/assert.md +0 -39
- package/docs/utils/assert/functions/assertIfDefined.md +0 -46
- package/docs/utils/bytesToHex/README.md +0 -11
- package/docs/utils/bytesToHex/functions/bytesToHex.md +0 -31
- package/docs/utils/bytesToHexBytes/README.md +0 -11
- package/docs/utils/bytesToHexBytes/functions/bytesToHexBytes.md +0 -32
- package/docs/utils/bytesToString/README.md +0 -11
- package/docs/utils/bytesToString/functions/bytesToString.md +0 -31
- package/docs/utils/concatUint8Arrays/README.md +0 -11
- package/docs/utils/concatUint8Arrays/functions/concatUint8Arrays.md +0 -31
- package/docs/utils/escapeString/README.md +0 -11
- package/docs/utils/escapeString/functions/escapeString.md +0 -32
- package/docs/utils/hexBytesToBytes/README.md +0 -11
- package/docs/utils/hexBytesToBytes/functions/hexBytesToBytes.md +0 -33
- package/docs/utils/hexBytesToString/README.md +0 -11
- package/docs/utils/hexBytesToString/functions/hexBytesToString.md +0 -31
- package/docs/utils/hexToBytes/README.md +0 -11
- package/docs/utils/hexToBytes/functions/hexToBytes.md +0 -31
- package/docs/utils/padBytes/README.md +0 -11
- package/docs/utils/padBytes/functions/padBytes.md +0 -41
- package/docs/utils/predictors/README.md +0 -11
- package/docs/utils/predictors/classes/Predictor.md +0 -306
- package/docs/utils/replaceInBuffer/README.md +0 -11
- package/docs/utils/replaceInBuffer/functions/replaceInBuffer.md +0 -65
- package/docs/utils/stringToBytes/README.md +0 -11
- package/docs/utils/stringToBytes/functions/stringToBytes.md +0 -32
- package/docs/utils/stringToHexBytes/README.md +0 -11
- package/docs/utils/stringToHexBytes/functions/stringToHexBytes.md +0 -33
- package/docs/utils/unescapeString/README.md +0 -11
- package/docs/utils/unescapeString/functions/unescapeString.md +0 -34
- package/examples/001-create-pdf.ts +0 -112
- package/examples/002-create-encrypted-pdf.ts +0 -121
- package/examples/003-sign-pdf.ts +0 -347
- package/examples/004-incremental-update.ts +0 -206
- package/examples/005-modify-acroform.ts +0 -374
- package/examples/006-tokeniser-example.ts +0 -131
- package/examples/007-decoder-example.ts +0 -197
- package/packages/pdf-lite/README.md +0 -3
- package/packages/pdf-lite/node_modules/.bin/playwright +0 -16
- package/packages/pdf-lite/node_modules/.bin/tsc +0 -16
- package/packages/pdf-lite/node_modules/.bin/tsserver +0 -16
- package/packages/pdf-lite/node_modules/.bin/vitest +0 -16
- package/packages/pdf-lite/package.json +0 -68
- package/packages/pdf-lite/scripts/create-encryption-tests.sh +0 -41
- package/packages/pdf-lite/scripts/gen-signing-keys.sh +0 -290
- package/packages/pdf-lite/scripts/generate-all-signing-keys.sh +0 -70
- package/packages/pdf-lite/src/core/decoder.ts +0 -454
- package/packages/pdf-lite/src/core/index.ts +0 -2
- package/packages/pdf-lite/src/core/objects/pdf-array.ts +0 -54
- package/packages/pdf-lite/src/core/objects/pdf-boolean.ts +0 -19
- package/packages/pdf-lite/src/core/objects/pdf-comment.ts +0 -50
- package/packages/pdf-lite/src/core/objects/pdf-date.ts +0 -74
- package/packages/pdf-lite/src/core/objects/pdf-dictionary.ts +0 -171
- package/packages/pdf-lite/src/core/objects/pdf-hexadecimal.ts +0 -54
- package/packages/pdf-lite/src/core/objects/pdf-indirect-object.ts +0 -137
- package/packages/pdf-lite/src/core/objects/pdf-name.ts +0 -19
- package/packages/pdf-lite/src/core/objects/pdf-null.ts +0 -15
- package/packages/pdf-lite/src/core/objects/pdf-number.ts +0 -98
- package/packages/pdf-lite/src/core/objects/pdf-object-reference.ts +0 -30
- package/packages/pdf-lite/src/core/objects/pdf-object.ts +0 -107
- package/packages/pdf-lite/src/core/objects/pdf-start-xref.ts +0 -39
- package/packages/pdf-lite/src/core/objects/pdf-stream.ts +0 -687
- package/packages/pdf-lite/src/core/objects/pdf-string.ts +0 -38
- package/packages/pdf-lite/src/core/objects/pdf-trailer.ts +0 -57
- package/packages/pdf-lite/src/core/objects/pdf-xref-table.ts +0 -264
- package/packages/pdf-lite/src/core/streams/object-stream.ts +0 -20
- package/packages/pdf-lite/src/core/tokeniser.ts +0 -687
- package/packages/pdf-lite/src/core/tokens/boolean-token.ts +0 -20
- package/packages/pdf-lite/src/core/tokens/byte-offset-token.ts +0 -20
- package/packages/pdf-lite/src/core/tokens/comment-token.ts +0 -32
- package/packages/pdf-lite/src/core/tokens/end-array-token.ts +0 -10
- package/packages/pdf-lite/src/core/tokens/end-dictionary-token.ts +0 -10
- package/packages/pdf-lite/src/core/tokens/end-object-token.ts +0 -10
- package/packages/pdf-lite/src/core/tokens/end-stream-token.ts +0 -11
- package/packages/pdf-lite/src/core/tokens/hexadecimal-token.ts +0 -22
- package/packages/pdf-lite/src/core/tokens/name-token.ts +0 -19
- package/packages/pdf-lite/src/core/tokens/null-token.ts +0 -9
- package/packages/pdf-lite/src/core/tokens/number-token.ts +0 -164
- package/packages/pdf-lite/src/core/tokens/object-reference-token.ts +0 -24
- package/packages/pdf-lite/src/core/tokens/start-array-token.ts +0 -10
- package/packages/pdf-lite/src/core/tokens/start-dictionary-token.ts +0 -10
- package/packages/pdf-lite/src/core/tokens/start-object-token.ts +0 -28
- package/packages/pdf-lite/src/core/tokens/start-stream-token.ts +0 -52
- package/packages/pdf-lite/src/core/tokens/start-xref-token.ts +0 -10
- package/packages/pdf-lite/src/core/tokens/stream-chunk-token.ts +0 -8
- package/packages/pdf-lite/src/core/tokens/string-token.ts +0 -17
- package/packages/pdf-lite/src/core/tokens/token.ts +0 -43
- package/packages/pdf-lite/src/core/tokens/trailer-token.ts +0 -12
- package/packages/pdf-lite/src/core/tokens/whitespace-token.ts +0 -43
- package/packages/pdf-lite/src/core/tokens/xref-table-entry-token.ts +0 -65
- package/packages/pdf-lite/src/core/tokens/xref-table-section-start-token.ts +0 -31
- package/packages/pdf-lite/src/core/tokens/xref-table-start-token.ts +0 -13
- package/packages/pdf-lite/src/crypto/key-derivation/key-derivation-aes256.ts +0 -213
- package/packages/pdf-lite/src/crypto/types.ts +0 -6
- package/packages/pdf-lite/src/filters/lzw.ts +0 -144
- package/packages/pdf-lite/src/index.ts +0 -4
- package/packages/pdf-lite/src/pdf/index.ts +0 -4
- package/packages/pdf-lite/src/pdf/pdf-xref-lookup.ts +0 -527
- package/packages/pdf-lite/src/security/handlers/base.ts +0 -625
- package/packages/pdf-lite/src/security/handlers/pubSec.ts +0 -413
- package/packages/pdf-lite/src/security/handlers/utils.ts +0 -304
- package/packages/pdf-lite/src/security/handlers/v1.ts +0 -225
- package/packages/pdf-lite/src/security/handlers/v4.ts +0 -379
- package/packages/pdf-lite/src/security/handlers/v5.ts +0 -298
- package/packages/pdf-lite/src/signing/document-security-store.ts +0 -224
- package/packages/pdf-lite/src/signing/index.ts +0 -3
- package/packages/pdf-lite/src/signing/signatures/adbe-pkcs7-detached.ts +0 -154
- package/packages/pdf-lite/src/signing/signatures/adbe-pkcs7-sha1.ts +0 -161
- package/packages/pdf-lite/src/signing/signatures/adbe-x509-rsa-sha1.ts +0 -106
- package/packages/pdf-lite/src/signing/signatures/base.ts +0 -229
- package/packages/pdf-lite/src/signing/signatures/etsi-cades-detached.ts +0 -229
- package/packages/pdf-lite/src/signing/signatures/index.ts +0 -6
- package/packages/pdf-lite/src/signing/signer.ts +0 -120
- package/packages/pdf-lite/src/types.ts +0 -44
- package/packages/pdf-lite/src/utils/escapeString.ts +0 -49
- package/packages/pdf-lite/src/utils/unescapeString.ts +0 -123
- package/packages/pdf-lite/test/acceptance/__snapshots__/versions.node.test.ts.snap +0 -60766
- package/packages/pdf-lite/test/acceptance/fixtures/1.3/basic.pdf +0 -0
- package/packages/pdf-lite/test/acceptance/fixtures/1.4/basic-aes-128.pdf +0 -0
- package/packages/pdf-lite/test/acceptance/fixtures/1.4/basic-aes-256.pdf +0 -0
- package/packages/pdf-lite/test/acceptance/fixtures/1.4/basic-rc4-128.pdf +0 -0
- package/packages/pdf-lite/test/acceptance/fixtures/1.4/basic-rc4-40.pdf +0 -0
- package/packages/pdf-lite/test/acceptance/fixtures/1.4/basic.pdf +0 -0
- package/packages/pdf-lite/test/acceptance/fixtures/1.5/basic.pdf +0 -0
- package/packages/pdf-lite/test/acceptance/fixtures/1.6/basic.pdf +0 -0
- package/packages/pdf-lite/test/acceptance/fixtures/1.7/basic.pdf +0 -0
- package/packages/pdf-lite/test/acceptance/fixtures/2.0/basic-aes-128.pdf +0 -43
- package/packages/pdf-lite/test/acceptance/fixtures/2.0/basic-aes-256.pdf +0 -43
- package/packages/pdf-lite/test/acceptance/fixtures/2.0/basic-rc4-128.pdf +0 -43
- package/packages/pdf-lite/test/acceptance/fixtures/2.0/basic-rc4-40.pdf +0 -44
- package/packages/pdf-lite/test/acceptance/fixtures/2.0/basic.pdf +0 -79
- package/packages/pdf-lite/test/acceptance/versions.node.test.ts +0 -41
- package/packages/pdf-lite/test/unit/__snapshots__/decoder.node.test.ts.snap +0 -86947
- package/packages/pdf-lite/test/unit/__snapshots__/tokeniser.node.test.ts.snap +0 -131829
- package/packages/pdf-lite/test/unit/ciphers.test.ts +0 -61
- package/packages/pdf-lite/test/unit/decoder.node.test.ts +0 -21
- package/packages/pdf-lite/test/unit/decoder.test.ts +0 -567
- package/packages/pdf-lite/test/unit/filters.test.ts +0 -67
- package/packages/pdf-lite/test/unit/fixtures/basic.pdf +0 -0
- package/packages/pdf-lite/test/unit/fixtures/encrypted_v1/basic-aes-128.pdf +0 -0
- package/packages/pdf-lite/test/unit/fixtures/encrypted_v1/basic-aes-256.pdf +0 -0
- package/packages/pdf-lite/test/unit/fixtures/encrypted_v1/basic-rc4-128.pdf +0 -0
- package/packages/pdf-lite/test/unit/fixtures/encrypted_v1/basic-rc4-40.pdf +0 -43
- package/packages/pdf-lite/test/unit/fixtures/protectedAdobeLivecycle.pdf +0 -0
- package/packages/pdf-lite/test/unit/fixtures/rsa-2048/index.ts +0 -187
- package/packages/pdf-lite/test/unit/fixtures/template.pdf +0 -0
- package/packages/pdf-lite/test/unit/incremental-update.test.ts +0 -0
- package/packages/pdf-lite/test/unit/objects.test.ts +0 -0
- package/packages/pdf-lite/test/unit/pdf-document-signing.test.ts +0 -0
- package/packages/pdf-lite/test/unit/pdf-revision.test.ts +0 -195
- package/packages/pdf-lite/test/unit/pdf.browser.test.ts +0 -0
- package/packages/pdf-lite/test/unit/predictors.test.ts +0 -226
- package/packages/pdf-lite/test/unit/ref.test.ts +0 -158
- package/packages/pdf-lite/test/unit/security-handlers.test.ts +0 -645
- package/packages/pdf-lite/test/unit/serializer.test.ts +0 -81
- package/packages/pdf-lite/test/unit/signature-objects.test.ts +0 -814
- package/packages/pdf-lite/test/unit/string-escaping.test.ts +0 -84
- package/packages/pdf-lite/test/unit/tokeniser.node.test.ts +0 -38
- package/packages/pdf-lite/test/unit/tokeniser.test.ts +0 -1213
- package/packages/pdf-lite/test/unit/utils.test.ts +0 -248
- package/packages/pdf-lite/test/unit/xref-lookup.test.ts +0 -72
- package/packages/pdf-lite/tsconfig.json +0 -4
- package/packages/pdf-lite/tsconfig.prod.json +0 -8
- package/packages/pdf-lite/typedoc.json +0 -14
- package/packages/pdf-lite/vitest.config.ts +0 -43
- package/pnpm-workspace.yaml +0 -2
- package/renovate.json +0 -34
- package/scripts/build-examples.ts +0 -30
- package/scripts/bump-version.sh +0 -56
- package/scripts/gen-html-docs.sh +0 -21
- package/scripts/gen-md-docs.sh +0 -15
- package/scripts/prepare-release.sh +0 -33
- package/tsconfig.json +0 -22
- package/tsconfig.prod.json +0 -12
- package/typedoc.json +0 -34
|
@@ -0,0 +1,304 @@
|
|
|
1
|
+
import { PdfIndirectObject } from '../../core/objects/pdf-indirect-object';
|
|
2
|
+
import { Cipher } from '../../crypto/types';
|
|
3
|
+
import { ByteArray, PdfPermissions } from '../../types';
|
|
4
|
+
import { PdfEncryptionAlgorithmType, PdfEncryptionDictionary, PdfId } from '../types';
|
|
5
|
+
/**
|
|
6
|
+
* Base options for creating a security handler.
|
|
7
|
+
*/
|
|
8
|
+
export type PdfSecurityHandlerOptions = {
|
|
9
|
+
/** Document permissions configuration. */
|
|
10
|
+
permissions?: number | PdfPermissions;
|
|
11
|
+
/** Whether to encrypt document metadata. */
|
|
12
|
+
encryptMetadata?: boolean;
|
|
13
|
+
};
|
|
14
|
+
/**
|
|
15
|
+
* Abstract base class for PDF security handlers.
|
|
16
|
+
* Security handlers manage encryption, decryption, and access permissions for PDF documents.
|
|
17
|
+
*
|
|
18
|
+
* @example
|
|
19
|
+
* ```typescript
|
|
20
|
+
* const handler = new PdfV5SecurityHandler({ password: 'secret' })
|
|
21
|
+
* await handler.write()
|
|
22
|
+
* const encryptedData = await handler.encrypt('stream', data, objectNumber, generationNumber)
|
|
23
|
+
* ```
|
|
24
|
+
*/
|
|
25
|
+
export declare abstract class PdfSecurityHandler {
|
|
26
|
+
/** The encryption dictionary containing all encryption parameters. */
|
|
27
|
+
dict: PdfEncryptionDictionary;
|
|
28
|
+
/** Numeric permission flags. */
|
|
29
|
+
permissions: number;
|
|
30
|
+
/** Whether to encrypt document metadata. */
|
|
31
|
+
encryptMetadata: boolean;
|
|
32
|
+
/**
|
|
33
|
+
* Creates a new security handler.
|
|
34
|
+
*
|
|
35
|
+
* @param options - Configuration options for the security handler.
|
|
36
|
+
*/
|
|
37
|
+
constructor(options?: PdfSecurityHandlerOptions);
|
|
38
|
+
/**
|
|
39
|
+
* Decodes the numeric permission flags into a PdfPermissions object.
|
|
40
|
+
*
|
|
41
|
+
* @returns An object with boolean flags for each permission.
|
|
42
|
+
*/
|
|
43
|
+
decodePermissions(): PdfPermissions;
|
|
44
|
+
/**
|
|
45
|
+
* Checks if the security handler is ready for encryption/decryption.
|
|
46
|
+
*
|
|
47
|
+
* @returns True if ready, false otherwise.
|
|
48
|
+
*/
|
|
49
|
+
abstract isReady(): boolean;
|
|
50
|
+
/**
|
|
51
|
+
* Gets the security handler filter name.
|
|
52
|
+
*
|
|
53
|
+
* @returns The filter name (e.g., 'Standard').
|
|
54
|
+
*/
|
|
55
|
+
abstract getName(): string;
|
|
56
|
+
/**
|
|
57
|
+
* Gets the encryption version number.
|
|
58
|
+
*
|
|
59
|
+
* @returns The version number (1-5).
|
|
60
|
+
*/
|
|
61
|
+
abstract getVersion(): number;
|
|
62
|
+
/**
|
|
63
|
+
* Gets the encryption revision number.
|
|
64
|
+
*
|
|
65
|
+
* @returns The revision number.
|
|
66
|
+
*/
|
|
67
|
+
abstract getRevision(): number;
|
|
68
|
+
/**
|
|
69
|
+
* Reads and applies encryption parameters from a dictionary.
|
|
70
|
+
*
|
|
71
|
+
* @param dictionary - The encryption dictionary from the PDF trailer.
|
|
72
|
+
*/
|
|
73
|
+
abstract readEncryptionDictionary(dictionary: PdfEncryptionDictionary): void;
|
|
74
|
+
/**
|
|
75
|
+
* Decrypts data of a specific type.
|
|
76
|
+
*
|
|
77
|
+
* @param type - The type of content being decrypted.
|
|
78
|
+
* @param data - The encrypted data.
|
|
79
|
+
* @param objectNumber - The PDF object number.
|
|
80
|
+
* @param generationNumber - The PDF generation number.
|
|
81
|
+
* @returns The decrypted data.
|
|
82
|
+
*/
|
|
83
|
+
abstract decrypt(type: 'string' | 'stream' | 'file', data: ByteArray, objectNumber?: number, generationNumber?: number): Promise<ByteArray>;
|
|
84
|
+
/**
|
|
85
|
+
* Encrypts data of a specific type.
|
|
86
|
+
*
|
|
87
|
+
* @param type - The type of content being encrypted.
|
|
88
|
+
* @param data - The data to encrypt.
|
|
89
|
+
* @param objectNumber - The PDF object number.
|
|
90
|
+
* @param generationNumber - The PDF generation number.
|
|
91
|
+
* @returns The encrypted data.
|
|
92
|
+
*/
|
|
93
|
+
abstract encrypt(type: 'string' | 'stream' | 'file', data: ByteArray, objectNumber?: number, generationNumber?: number): Promise<ByteArray>;
|
|
94
|
+
/**
|
|
95
|
+
* Computes the object-specific encryption key.
|
|
96
|
+
*
|
|
97
|
+
* @param objectNumber - The PDF object number.
|
|
98
|
+
* @param generationNumber - The PDF generation number.
|
|
99
|
+
* @param algorithm - Optional algorithm type for key derivation.
|
|
100
|
+
* @returns The computed object key.
|
|
101
|
+
*/
|
|
102
|
+
abstract computeObjectKey(objectNumber?: number, generationNumber?: number, algorithm?: PdfEncryptionAlgorithmType): Promise<ByteArray>;
|
|
103
|
+
/**
|
|
104
|
+
* Gets the document ID array.
|
|
105
|
+
*
|
|
106
|
+
* @returns The document ID, or undefined if not set.
|
|
107
|
+
*/
|
|
108
|
+
abstract getDocumentId(): PdfId | undefined;
|
|
109
|
+
/**
|
|
110
|
+
* Sets the document ID array.
|
|
111
|
+
*
|
|
112
|
+
* @param id - The document ID to set.
|
|
113
|
+
*/
|
|
114
|
+
abstract setDocumentId(id: PdfId): void;
|
|
115
|
+
/**
|
|
116
|
+
* Writes the encryption dictionary with computed keys.
|
|
117
|
+
*/
|
|
118
|
+
abstract write(): Promise<void>;
|
|
119
|
+
/**
|
|
120
|
+
* Builds the numeric permission flags from a PdfPermissions object.
|
|
121
|
+
*
|
|
122
|
+
* @param perm - The permissions to encode.
|
|
123
|
+
* @returns The numeric permission flags.
|
|
124
|
+
*/
|
|
125
|
+
protected buildPermissions(perm: PdfPermissions): number;
|
|
126
|
+
/**
|
|
127
|
+
* Recursively decrypts all strings and streams within an indirect object.
|
|
128
|
+
*
|
|
129
|
+
* @param object - The indirect object to decrypt.
|
|
130
|
+
*/
|
|
131
|
+
decryptObject(object: PdfIndirectObject): Promise<void>;
|
|
132
|
+
/**
|
|
133
|
+
* Recursively encrypts all strings and streams within an indirect object.
|
|
134
|
+
*
|
|
135
|
+
* @param object - The indirect object to encrypt.
|
|
136
|
+
*/
|
|
137
|
+
encryptObject(object: PdfIndirectObject): Promise<void>;
|
|
138
|
+
}
|
|
139
|
+
/**
|
|
140
|
+
* Options for creating a standard security handler with password-based encryption.
|
|
141
|
+
*/
|
|
142
|
+
export type PdfStandardSecurityHandlerOptions = PdfSecurityHandlerOptions & {
|
|
143
|
+
/** User password for opening the document. */
|
|
144
|
+
password?: string | ByteArray;
|
|
145
|
+
/** Owner password for full document access. */
|
|
146
|
+
ownerPassword?: string | ByteArray;
|
|
147
|
+
/** Document identifier for key derivation. */
|
|
148
|
+
documentId?: PdfId | string | ByteArray;
|
|
149
|
+
/** Pre-computed user key. */
|
|
150
|
+
userKey?: ByteArray;
|
|
151
|
+
/** Pre-computed owner key. */
|
|
152
|
+
ownerKey?: ByteArray;
|
|
153
|
+
};
|
|
154
|
+
/**
|
|
155
|
+
* Abstract base class for standard PDF security handlers.
|
|
156
|
+
* Implements password-based encryption as defined in the PDF specification.
|
|
157
|
+
*
|
|
158
|
+
* @example
|
|
159
|
+
* ```typescript
|
|
160
|
+
* const handler = new PdfV5SecurityHandler({
|
|
161
|
+
* password: 'user123',
|
|
162
|
+
* ownerPassword: 'admin456',
|
|
163
|
+
* permissions: { print: true, copy: false }
|
|
164
|
+
* })
|
|
165
|
+
* ```
|
|
166
|
+
*/
|
|
167
|
+
export declare abstract class PdfStandardSecurityHandler extends PdfSecurityHandler {
|
|
168
|
+
/** Document identifier for key derivation. */
|
|
169
|
+
protected documentId?: PdfId;
|
|
170
|
+
/** Computed owner key (O value). */
|
|
171
|
+
protected ownerKey?: ByteArray;
|
|
172
|
+
/** Computed user key (U value). */
|
|
173
|
+
protected userKey?: ByteArray;
|
|
174
|
+
/** User password for authentication. */
|
|
175
|
+
protected password: ByteArray;
|
|
176
|
+
/** Owner password for full access. */
|
|
177
|
+
protected ownerPassword?: ByteArray;
|
|
178
|
+
/** Derived master encryption key. */
|
|
179
|
+
protected masterKey?: ByteArray;
|
|
180
|
+
/**
|
|
181
|
+
* Creates a new standard security handler.
|
|
182
|
+
*
|
|
183
|
+
* @param options - Configuration options including passwords and document ID.
|
|
184
|
+
*/
|
|
185
|
+
constructor(options: PdfStandardSecurityHandlerOptions);
|
|
186
|
+
/**
|
|
187
|
+
* Gets the encryption key length in bits.
|
|
188
|
+
*
|
|
189
|
+
* @returns The key length in bits.
|
|
190
|
+
*/
|
|
191
|
+
abstract getKeyBits(): number;
|
|
192
|
+
/**
|
|
193
|
+
* Gets the security handler filter name.
|
|
194
|
+
*
|
|
195
|
+
* @returns 'Standard' for password-based encryption.
|
|
196
|
+
*/
|
|
197
|
+
getName(): string;
|
|
198
|
+
/**
|
|
199
|
+
* Checks if the handler is ready (has document ID).
|
|
200
|
+
*
|
|
201
|
+
* @returns True if document ID is set.
|
|
202
|
+
*/
|
|
203
|
+
isReady(): boolean;
|
|
204
|
+
/**
|
|
205
|
+
* Sets the document ID for key derivation.
|
|
206
|
+
*
|
|
207
|
+
* @param id - The document ID array.
|
|
208
|
+
*/
|
|
209
|
+
setDocumentId(id: PdfId): void;
|
|
210
|
+
/**
|
|
211
|
+
* Gets the document ID.
|
|
212
|
+
*
|
|
213
|
+
* @returns The document ID, or undefined if not set.
|
|
214
|
+
*/
|
|
215
|
+
getDocumentId(): PdfId | undefined;
|
|
216
|
+
/**
|
|
217
|
+
* Sets the user password.
|
|
218
|
+
*
|
|
219
|
+
* @param password - The user password string or bytes.
|
|
220
|
+
*/
|
|
221
|
+
setPassword(password: string | ByteArray): void;
|
|
222
|
+
/**
|
|
223
|
+
* Sets the owner password.
|
|
224
|
+
*
|
|
225
|
+
* @param ownerPassword - The owner password string or bytes.
|
|
226
|
+
*/
|
|
227
|
+
setOwnerPassword(ownerPassword: string | ByteArray): void;
|
|
228
|
+
/**
|
|
229
|
+
* Checks if metadata encryption is enabled.
|
|
230
|
+
*
|
|
231
|
+
* @returns True if metadata should be encrypted.
|
|
232
|
+
*/
|
|
233
|
+
canEncryptMetadata(): boolean;
|
|
234
|
+
/**
|
|
235
|
+
* Reads encryption parameters from the encryption dictionary.
|
|
236
|
+
*
|
|
237
|
+
* @param encryptionDictionary - The encryption dictionary from the PDF.
|
|
238
|
+
*/
|
|
239
|
+
readEncryptionDictionary(encryptionDictionary: PdfEncryptionDictionary): void;
|
|
240
|
+
/**
|
|
241
|
+
* Computes the user key (U value) for the encryption dictionary.
|
|
242
|
+
*
|
|
243
|
+
* @returns The computed user key.
|
|
244
|
+
*/
|
|
245
|
+
protected abstract computeUserKey(): Promise<ByteArray>;
|
|
246
|
+
/**
|
|
247
|
+
* Computes the owner key (O value) for the encryption dictionary.
|
|
248
|
+
*
|
|
249
|
+
* @returns The computed owner key.
|
|
250
|
+
*/
|
|
251
|
+
protected abstract computeOwnerKey(): Promise<ByteArray>;
|
|
252
|
+
/**
|
|
253
|
+
* Initializes the user and owner keys if not already set.
|
|
254
|
+
*/
|
|
255
|
+
protected initKeys(): Promise<void>;
|
|
256
|
+
/**
|
|
257
|
+
* Writes the encryption dictionary with all computed keys and parameters.
|
|
258
|
+
*
|
|
259
|
+
* @throws Error if required keys are not computed.
|
|
260
|
+
*/
|
|
261
|
+
write(): Promise<void>;
|
|
262
|
+
/**
|
|
263
|
+
* Gets a cipher for the specified object.
|
|
264
|
+
*
|
|
265
|
+
* @param objectNumber - The PDF object number.
|
|
266
|
+
* @param generationNumber - The PDF generation number.
|
|
267
|
+
* @returns A cipher instance, or null if no encryption needed.
|
|
268
|
+
*/
|
|
269
|
+
protected abstract getCipher(objectNumber?: number, generationNumber?: number): Promise<Cipher | null>;
|
|
270
|
+
/**
|
|
271
|
+
* Encrypts data using the appropriate cipher.
|
|
272
|
+
*
|
|
273
|
+
* @param type - The type of content being encrypted.
|
|
274
|
+
* @param data - The data to encrypt.
|
|
275
|
+
* @param objectNumber - The PDF object number.
|
|
276
|
+
* @param generationNumber - The PDF generation number.
|
|
277
|
+
* @returns The encrypted data.
|
|
278
|
+
*/
|
|
279
|
+
encrypt(type: 'string' | 'stream' | 'file', data: ByteArray, objectNumber?: number, generationNumber?: number): Promise<ByteArray>;
|
|
280
|
+
/**
|
|
281
|
+
* Decrypts data using the appropriate cipher.
|
|
282
|
+
*
|
|
283
|
+
* @param type - The type of content being decrypted.
|
|
284
|
+
* @param data - The encrypted data.
|
|
285
|
+
* @param objectNumber - The PDF object number.
|
|
286
|
+
* @param generationNumber - The PDF generation number.
|
|
287
|
+
* @returns The decrypted data.
|
|
288
|
+
*/
|
|
289
|
+
decrypt(type: 'string' | 'stream' | 'file', data: ByteArray, objectNumber?: number, generationNumber?: number): Promise<ByteArray>;
|
|
290
|
+
/**
|
|
291
|
+
* Sets the master encryption key directly.
|
|
292
|
+
*
|
|
293
|
+
* @param masterKey - The master key to use.
|
|
294
|
+
*/
|
|
295
|
+
setMasterKey(masterKey: ByteArray): void;
|
|
296
|
+
/**
|
|
297
|
+
* Recovers the user password from the owner password.
|
|
298
|
+
*
|
|
299
|
+
* @param ownerPassword - The owner password.
|
|
300
|
+
* @returns The recovered user password.
|
|
301
|
+
* @throws Error if recovery is not supported.
|
|
302
|
+
*/
|
|
303
|
+
abstract recoverUserPassword(ownerPassword?: ByteArray | string): Promise<string>;
|
|
304
|
+
}
|
|
@@ -0,0 +1,359 @@
|
|
|
1
|
+
import { PdfArray } from '../../core/objects/pdf-array';
|
|
2
|
+
import { PdfBoolean } from '../../core/objects/pdf-boolean';
|
|
3
|
+
import { PdfDictionary } from '../../core/objects/pdf-dictionary';
|
|
4
|
+
import { PdfHexadecimal } from '../../core/objects/pdf-hexadecimal';
|
|
5
|
+
import { PdfIndirectObject } from '../../core/objects/pdf-indirect-object';
|
|
6
|
+
import { PdfName } from '../../core/objects/pdf-name';
|
|
7
|
+
import { PdfNumber } from '../../core/objects/pdf-number';
|
|
8
|
+
import { PdfStream } from '../../core/objects/pdf-stream';
|
|
9
|
+
import { PdfString } from '../../core/objects/pdf-string';
|
|
10
|
+
import { PERMISSION_FLAGS } from '../../types';
|
|
11
|
+
import { assert, assertIfDefined } from '../../utils/assert';
|
|
12
|
+
import { stringToBytes } from '../../utils/stringToBytes';
|
|
13
|
+
/**
|
|
14
|
+
* Abstract base class for PDF security handlers.
|
|
15
|
+
* Security handlers manage encryption, decryption, and access permissions for PDF documents.
|
|
16
|
+
*
|
|
17
|
+
* @example
|
|
18
|
+
* ```typescript
|
|
19
|
+
* const handler = new PdfV5SecurityHandler({ password: 'secret' })
|
|
20
|
+
* await handler.write()
|
|
21
|
+
* const encryptedData = await handler.encrypt('stream', data, objectNumber, generationNumber)
|
|
22
|
+
* ```
|
|
23
|
+
*/
|
|
24
|
+
export class PdfSecurityHandler {
|
|
25
|
+
/** The encryption dictionary containing all encryption parameters. */
|
|
26
|
+
dict;
|
|
27
|
+
/** Numeric permission flags. */
|
|
28
|
+
permissions;
|
|
29
|
+
/** Whether to encrypt document metadata. */
|
|
30
|
+
encryptMetadata;
|
|
31
|
+
/**
|
|
32
|
+
* Creates a new security handler.
|
|
33
|
+
*
|
|
34
|
+
* @param options - Configuration options for the security handler.
|
|
35
|
+
*/
|
|
36
|
+
constructor(options) {
|
|
37
|
+
this.dict = new PdfDictionary();
|
|
38
|
+
this.encryptMetadata = options?.encryptMetadata ?? true;
|
|
39
|
+
this.permissions =
|
|
40
|
+
typeof options?.permissions === 'number'
|
|
41
|
+
? options.permissions
|
|
42
|
+
: this.buildPermissions(options?.permissions ?? DEFAULT_PERMISSIONS);
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Decodes the numeric permission flags into a PdfPermissions object.
|
|
46
|
+
*
|
|
47
|
+
* @returns An object with boolean flags for each permission.
|
|
48
|
+
*/
|
|
49
|
+
decodePermissions() {
|
|
50
|
+
const perm = {};
|
|
51
|
+
for (const [key, bit] of Object.entries(PERMISSION_FLAGS)) {
|
|
52
|
+
perm[key] = (this.permissions & bit) !== 0;
|
|
53
|
+
}
|
|
54
|
+
return perm;
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* Builds the numeric permission flags from a PdfPermissions object.
|
|
58
|
+
*
|
|
59
|
+
* @param perm - The permissions to encode.
|
|
60
|
+
* @returns The numeric permission flags.
|
|
61
|
+
*/
|
|
62
|
+
buildPermissions(perm) {
|
|
63
|
+
let flags = 0xfffffffc; // All bits set to 1 except bits 0–1, which must be 0
|
|
64
|
+
for (const [key, bit] of Object.entries(PERMISSION_FLAGS)) {
|
|
65
|
+
if (perm[key] === false) {
|
|
66
|
+
// Remove this permission
|
|
67
|
+
flags &= ~bit;
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
return flags | 0xfffff000; // ensure unused high bits are set
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* Recursively decrypts all strings and streams within an indirect object.
|
|
74
|
+
*
|
|
75
|
+
* @param object - The indirect object to decrypt.
|
|
76
|
+
*/
|
|
77
|
+
async decryptObject(object) {
|
|
78
|
+
const objectNumber = object.objectNumber;
|
|
79
|
+
const generationNumber = object.generationNumber;
|
|
80
|
+
const decryptObject = async (obj) => {
|
|
81
|
+
if (obj instanceof PdfIndirectObject) {
|
|
82
|
+
return decryptObject(obj.content);
|
|
83
|
+
}
|
|
84
|
+
else if (obj instanceof PdfString) {
|
|
85
|
+
const decryptedData = await this.decrypt('string', obj.raw, objectNumber, generationNumber);
|
|
86
|
+
obj.raw = decryptedData;
|
|
87
|
+
}
|
|
88
|
+
else if (obj instanceof PdfStream) {
|
|
89
|
+
const decryptedData = await this.decrypt('stream', obj.raw, objectNumber, generationNumber);
|
|
90
|
+
obj.raw = decryptedData;
|
|
91
|
+
await decryptObject(obj.header);
|
|
92
|
+
}
|
|
93
|
+
else if (obj instanceof PdfDictionary) {
|
|
94
|
+
for (const [key, value] of Object.entries(obj)) {
|
|
95
|
+
await decryptObject(value);
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
else if (obj instanceof PdfArray) {
|
|
99
|
+
for (const item of obj.items) {
|
|
100
|
+
await decryptObject(item);
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
};
|
|
104
|
+
await decryptObject(object.content);
|
|
105
|
+
}
|
|
106
|
+
/**
|
|
107
|
+
* Recursively encrypts all strings and streams within an indirect object.
|
|
108
|
+
*
|
|
109
|
+
* @param object - The indirect object to encrypt.
|
|
110
|
+
*/
|
|
111
|
+
async encryptObject(object) {
|
|
112
|
+
const objectNumber = object.objectNumber;
|
|
113
|
+
const generationNumber = object.generationNumber;
|
|
114
|
+
const encryptObject = async (obj) => {
|
|
115
|
+
if (obj instanceof PdfIndirectObject) {
|
|
116
|
+
return encryptObject(obj.content);
|
|
117
|
+
}
|
|
118
|
+
else if (obj instanceof PdfString) {
|
|
119
|
+
const encryptedData = await this.encrypt('string', obj.raw, objectNumber, generationNumber);
|
|
120
|
+
obj.raw = encryptedData;
|
|
121
|
+
}
|
|
122
|
+
else if (obj instanceof PdfStream) {
|
|
123
|
+
const encryptedData = await this.encrypt('stream', obj.raw, objectNumber, generationNumber);
|
|
124
|
+
obj.raw = encryptedData;
|
|
125
|
+
await encryptObject(obj.header);
|
|
126
|
+
}
|
|
127
|
+
else if (obj instanceof PdfDictionary) {
|
|
128
|
+
const values = obj.values;
|
|
129
|
+
for (const key in values) {
|
|
130
|
+
await encryptObject(values[key]);
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
else if (obj instanceof PdfArray) {
|
|
134
|
+
for (const item of obj.items) {
|
|
135
|
+
await encryptObject(item);
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
};
|
|
139
|
+
return await encryptObject(object.content);
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
const DEFAULT_PERMISSIONS = {
|
|
143
|
+
print: true,
|
|
144
|
+
modify: true,
|
|
145
|
+
copy: true,
|
|
146
|
+
annotate: true,
|
|
147
|
+
fill: true,
|
|
148
|
+
extract: true,
|
|
149
|
+
assemble: true,
|
|
150
|
+
printHighQuality: true,
|
|
151
|
+
};
|
|
152
|
+
/**
|
|
153
|
+
* Abstract base class for standard PDF security handlers.
|
|
154
|
+
* Implements password-based encryption as defined in the PDF specification.
|
|
155
|
+
*
|
|
156
|
+
* @example
|
|
157
|
+
* ```typescript
|
|
158
|
+
* const handler = new PdfV5SecurityHandler({
|
|
159
|
+
* password: 'user123',
|
|
160
|
+
* ownerPassword: 'admin456',
|
|
161
|
+
* permissions: { print: true, copy: false }
|
|
162
|
+
* })
|
|
163
|
+
* ```
|
|
164
|
+
*/
|
|
165
|
+
export class PdfStandardSecurityHandler extends PdfSecurityHandler {
|
|
166
|
+
/** Document identifier for key derivation. */
|
|
167
|
+
documentId;
|
|
168
|
+
/** Computed owner key (O value). */
|
|
169
|
+
ownerKey;
|
|
170
|
+
/** Computed user key (U value). */
|
|
171
|
+
userKey;
|
|
172
|
+
/** User password for authentication. */
|
|
173
|
+
password;
|
|
174
|
+
/** Owner password for full access. */
|
|
175
|
+
ownerPassword;
|
|
176
|
+
/** Derived master encryption key. */
|
|
177
|
+
masterKey;
|
|
178
|
+
/**
|
|
179
|
+
* Creates a new standard security handler.
|
|
180
|
+
*
|
|
181
|
+
* @param options - Configuration options including passwords and document ID.
|
|
182
|
+
*/
|
|
183
|
+
constructor(options) {
|
|
184
|
+
super(options);
|
|
185
|
+
this.dict.set('Filter', new PdfName('Standard'));
|
|
186
|
+
this.password =
|
|
187
|
+
typeof options.password === 'string'
|
|
188
|
+
? stringToBytes(options.password)
|
|
189
|
+
: (options.password ?? new Uint8Array());
|
|
190
|
+
this.ownerPassword =
|
|
191
|
+
typeof options.ownerPassword === 'string'
|
|
192
|
+
? stringToBytes(options.ownerPassword)
|
|
193
|
+
: options.ownerPassword;
|
|
194
|
+
this.documentId =
|
|
195
|
+
typeof options.documentId === 'string' ||
|
|
196
|
+
options.documentId instanceof Uint8Array
|
|
197
|
+
? new PdfArray([
|
|
198
|
+
PdfHexadecimal.toHexadecimal(options.documentId),
|
|
199
|
+
PdfHexadecimal.toHexadecimal(options.documentId),
|
|
200
|
+
])
|
|
201
|
+
: options.documentId;
|
|
202
|
+
}
|
|
203
|
+
/**
|
|
204
|
+
* Gets the security handler filter name.
|
|
205
|
+
*
|
|
206
|
+
* @returns 'Standard' for password-based encryption.
|
|
207
|
+
*/
|
|
208
|
+
getName() {
|
|
209
|
+
return 'Standard';
|
|
210
|
+
}
|
|
211
|
+
/**
|
|
212
|
+
* Checks if the handler is ready (has document ID).
|
|
213
|
+
*
|
|
214
|
+
* @returns True if document ID is set.
|
|
215
|
+
*/
|
|
216
|
+
isReady() {
|
|
217
|
+
return !!this.documentId;
|
|
218
|
+
}
|
|
219
|
+
/**
|
|
220
|
+
* Sets the document ID for key derivation.
|
|
221
|
+
*
|
|
222
|
+
* @param id - The document ID array.
|
|
223
|
+
*/
|
|
224
|
+
setDocumentId(id) {
|
|
225
|
+
this.documentId = id;
|
|
226
|
+
}
|
|
227
|
+
/**
|
|
228
|
+
* Gets the document ID.
|
|
229
|
+
*
|
|
230
|
+
* @returns The document ID, or undefined if not set.
|
|
231
|
+
*/
|
|
232
|
+
getDocumentId() {
|
|
233
|
+
return this.documentId;
|
|
234
|
+
}
|
|
235
|
+
/**
|
|
236
|
+
* Sets the user password.
|
|
237
|
+
*
|
|
238
|
+
* @param password - The user password string or bytes.
|
|
239
|
+
*/
|
|
240
|
+
setPassword(password) {
|
|
241
|
+
this.password =
|
|
242
|
+
typeof password === 'string' ? stringToBytes(password) : password;
|
|
243
|
+
}
|
|
244
|
+
/**
|
|
245
|
+
* Sets the owner password.
|
|
246
|
+
*
|
|
247
|
+
* @param ownerPassword - The owner password string or bytes.
|
|
248
|
+
*/
|
|
249
|
+
setOwnerPassword(ownerPassword) {
|
|
250
|
+
this.ownerPassword =
|
|
251
|
+
typeof ownerPassword === 'string'
|
|
252
|
+
? stringToBytes(ownerPassword)
|
|
253
|
+
: ownerPassword;
|
|
254
|
+
}
|
|
255
|
+
/**
|
|
256
|
+
* Checks if metadata encryption is enabled.
|
|
257
|
+
*
|
|
258
|
+
* @returns True if metadata should be encrypted.
|
|
259
|
+
*/
|
|
260
|
+
canEncryptMetadata() {
|
|
261
|
+
return this.encryptMetadata;
|
|
262
|
+
}
|
|
263
|
+
/**
|
|
264
|
+
* Reads encryption parameters from the encryption dictionary.
|
|
265
|
+
*
|
|
266
|
+
* @param encryptionDictionary - The encryption dictionary from the PDF.
|
|
267
|
+
*/
|
|
268
|
+
readEncryptionDictionary(encryptionDictionary) {
|
|
269
|
+
this.dict.copyFrom(encryptionDictionary);
|
|
270
|
+
const o = encryptionDictionary.get('O');
|
|
271
|
+
const u = encryptionDictionary.get('U');
|
|
272
|
+
const p = encryptionDictionary.get('P');
|
|
273
|
+
const ID = encryptionDictionary.get('ID');
|
|
274
|
+
const encryptMetadata = encryptionDictionary.get('EncryptMetadata');
|
|
275
|
+
assertIfDefined(u, u instanceof PdfHexadecimal || u instanceof PdfString, 'U must be a hexadecimal or a string');
|
|
276
|
+
assertIfDefined(o, o instanceof PdfHexadecimal || o instanceof PdfString, 'O must be a hexadecimal or a string');
|
|
277
|
+
assert(p instanceof PdfNumber, 'P must be a number');
|
|
278
|
+
assertIfDefined(ID, ID instanceof PdfArray, 'ID must be an array');
|
|
279
|
+
assertIfDefined(encryptMetadata, encryptMetadata instanceof PdfBoolean, 'EncryptMetadata must be a boolean');
|
|
280
|
+
this.ownerKey = o instanceof PdfHexadecimal ? o.bytes : o.raw;
|
|
281
|
+
this.userKey = u instanceof PdfHexadecimal ? u.bytes : u.raw;
|
|
282
|
+
this.permissions = p.value;
|
|
283
|
+
this.encryptMetadata = encryptMetadata?.value ?? true;
|
|
284
|
+
if (ID)
|
|
285
|
+
this.documentId = ID;
|
|
286
|
+
}
|
|
287
|
+
/**
|
|
288
|
+
* Initializes the user and owner keys if not already set.
|
|
289
|
+
*/
|
|
290
|
+
async initKeys() {
|
|
291
|
+
this.ownerKey ||= await this.computeOwnerKey();
|
|
292
|
+
this.userKey ||= await this.computeUserKey();
|
|
293
|
+
}
|
|
294
|
+
/**
|
|
295
|
+
* Writes the encryption dictionary with all computed keys and parameters.
|
|
296
|
+
*
|
|
297
|
+
* @throws Error if required keys are not computed.
|
|
298
|
+
*/
|
|
299
|
+
async write() {
|
|
300
|
+
// Initialise the keys
|
|
301
|
+
await this.initKeys();
|
|
302
|
+
if (!this.ownerKey) {
|
|
303
|
+
throw new Error('Missing ownerKey');
|
|
304
|
+
}
|
|
305
|
+
if (!this.userKey) {
|
|
306
|
+
throw new Error('Missing userKey');
|
|
307
|
+
}
|
|
308
|
+
this.dict.set('O', new PdfString(this.ownerKey));
|
|
309
|
+
this.dict.set('U', new PdfString(this.userKey));
|
|
310
|
+
this.dict.set('P', new PdfNumber(this.permissions));
|
|
311
|
+
this.dict.set('V', new PdfNumber(this.getVersion()));
|
|
312
|
+
this.dict.set('R', new PdfNumber(this.getRevision()));
|
|
313
|
+
this.dict.set('Length', new PdfNumber(this.getKeyBits()));
|
|
314
|
+
if (this.documentId) {
|
|
315
|
+
this.dict.set('ID', this.documentId);
|
|
316
|
+
}
|
|
317
|
+
this.dict.set('EncryptMetadata', new PdfBoolean(this.encryptMetadata));
|
|
318
|
+
}
|
|
319
|
+
/**
|
|
320
|
+
* Encrypts data using the appropriate cipher.
|
|
321
|
+
*
|
|
322
|
+
* @param type - The type of content being encrypted.
|
|
323
|
+
* @param data - The data to encrypt.
|
|
324
|
+
* @param objectNumber - The PDF object number.
|
|
325
|
+
* @param generationNumber - The PDF generation number.
|
|
326
|
+
* @returns The encrypted data.
|
|
327
|
+
*/
|
|
328
|
+
async encrypt(type, data, objectNumber, generationNumber) {
|
|
329
|
+
const cipher = await this.getCipher(objectNumber, generationNumber);
|
|
330
|
+
if (!cipher) {
|
|
331
|
+
return data;
|
|
332
|
+
}
|
|
333
|
+
return await cipher.encrypt(data);
|
|
334
|
+
}
|
|
335
|
+
/**
|
|
336
|
+
* Decrypts data using the appropriate cipher.
|
|
337
|
+
*
|
|
338
|
+
* @param type - The type of content being decrypted.
|
|
339
|
+
* @param data - The encrypted data.
|
|
340
|
+
* @param objectNumber - The PDF object number.
|
|
341
|
+
* @param generationNumber - The PDF generation number.
|
|
342
|
+
* @returns The decrypted data.
|
|
343
|
+
*/
|
|
344
|
+
async decrypt(type, data, objectNumber, generationNumber) {
|
|
345
|
+
const cipher = await this.getCipher(objectNumber, generationNumber);
|
|
346
|
+
if (!cipher) {
|
|
347
|
+
return data;
|
|
348
|
+
}
|
|
349
|
+
return await cipher.decrypt(data);
|
|
350
|
+
}
|
|
351
|
+
/**
|
|
352
|
+
* Sets the master encryption key directly.
|
|
353
|
+
*
|
|
354
|
+
* @param masterKey - The master key to use.
|
|
355
|
+
*/
|
|
356
|
+
setMasterKey(masterKey) {
|
|
357
|
+
this.masterKey = masterKey;
|
|
358
|
+
}
|
|
359
|
+
}
|