@cj-tech-master/excelts 9.1.0 → 9.2.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/README.md +16 -1
- package/dist/browser/modules/archive/compression/crc32.js +1 -1
- package/dist/browser/modules/archive/crypto/aes.d.ts +0 -8
- package/dist/browser/modules/archive/crypto/aes.js +1 -20
- package/dist/browser/modules/archive/crypto/index.d.ts +2 -1
- package/dist/browser/modules/archive/crypto/index.js +3 -1
- package/dist/browser/modules/csv/parse/row-processor.d.ts +1 -1
- package/dist/browser/modules/csv/worker/worker-script.generated.js +1 -1
- package/dist/browser/modules/excel/utils/cell-matrix.js +1 -0
- package/dist/browser/modules/excel/utils/encryptor.browser.d.ts +4 -5
- package/dist/browser/modules/excel/utils/encryptor.browser.js +7 -12
- package/dist/browser/modules/excel/utils/encryptor.d.ts +1 -1
- package/dist/browser/modules/excel/utils/encryptor.js +4 -7
- package/dist/browser/modules/pdf/builder/document-builder.d.ts +517 -0
- package/dist/browser/modules/pdf/builder/document-builder.js +1493 -0
- package/dist/browser/modules/pdf/builder/form-appearance.d.ts +56 -0
- package/dist/browser/modules/pdf/builder/form-appearance.js +140 -0
- package/dist/browser/modules/pdf/builder/image-utils.d.ts +39 -0
- package/dist/browser/modules/pdf/builder/image-utils.js +129 -0
- package/dist/browser/modules/pdf/builder/pdf-editor.d.ts +230 -0
- package/dist/browser/modules/pdf/builder/pdf-editor.js +1574 -0
- package/dist/browser/modules/pdf/builder/resource-merger.d.ts +41 -0
- package/dist/browser/modules/pdf/builder/resource-merger.js +258 -0
- package/dist/browser/modules/pdf/core/digital-signature.d.ts +109 -0
- package/dist/browser/modules/pdf/core/digital-signature.js +659 -0
- package/dist/browser/modules/pdf/core/encryption.js +8 -7
- package/dist/browser/modules/pdf/core/pdf-object.d.ts +11 -0
- package/dist/browser/modules/pdf/core/pdf-object.js +38 -0
- package/dist/browser/modules/pdf/core/pdf-stream.d.ts +32 -0
- package/dist/browser/modules/pdf/core/pdf-stream.js +66 -0
- package/dist/browser/modules/pdf/core/pdf-writer.d.ts +55 -1
- package/dist/browser/modules/pdf/core/pdf-writer.js +271 -6
- package/dist/browser/modules/pdf/core/pdfa.d.ts +62 -0
- package/dist/browser/modules/pdf/core/pdfa.js +261 -0
- package/dist/browser/modules/pdf/index.d.ts +11 -0
- package/dist/browser/modules/pdf/index.js +9 -0
- package/dist/browser/modules/pdf/reader/bookmark-extractor.d.ts +35 -0
- package/dist/browser/modules/pdf/reader/bookmark-extractor.js +324 -0
- package/dist/browser/modules/pdf/reader/pdf-decrypt.js +6 -5
- package/dist/browser/modules/pdf/reader/pdf-reader.d.ts +17 -0
- package/dist/browser/modules/pdf/reader/pdf-reader.js +26 -2
- package/dist/browser/modules/pdf/reader/table-extractor.d.ts +69 -0
- package/dist/browser/modules/pdf/reader/table-extractor.js +365 -0
- package/dist/browser/modules/pdf/render/layout-engine.d.ts +21 -1
- package/dist/browser/modules/pdf/render/layout-engine.js +112 -5
- package/dist/browser/modules/pdf/render/page-renderer.d.ts +2 -9
- package/dist/browser/modules/pdf/render/page-renderer.js +62 -103
- package/dist/browser/modules/pdf/render/pdf-exporter.js +2 -61
- package/dist/browser/modules/pdf/render/style-converter.d.ts +4 -0
- package/dist/browser/modules/pdf/render/style-converter.js +1 -1
- package/dist/browser/modules/pdf/types.d.ts +14 -1
- package/dist/browser/modules/stream/browser/readable.js +8 -2
- package/dist/browser/utils/crypto.browser.d.ts +64 -0
- package/dist/browser/{modules/pdf/core/crypto.js → utils/crypto.browser.js} +91 -101
- package/dist/browser/utils/crypto.d.ts +97 -0
- package/dist/browser/utils/crypto.js +209 -0
- package/dist/cjs/modules/archive/compression/crc32.js +1 -1
- package/dist/cjs/modules/archive/crypto/aes.js +2 -23
- package/dist/cjs/modules/archive/crypto/index.js +3 -1
- package/dist/cjs/modules/csv/worker/worker-script.generated.js +1 -1
- package/dist/cjs/modules/excel/utils/cell-matrix.js +1 -0
- package/dist/cjs/modules/excel/utils/encryptor.browser.js +7 -12
- package/dist/cjs/modules/excel/utils/encryptor.js +4 -10
- package/dist/cjs/modules/pdf/builder/document-builder.js +1532 -0
- package/dist/cjs/modules/pdf/builder/form-appearance.js +145 -0
- package/dist/cjs/modules/pdf/builder/image-utils.js +135 -0
- package/dist/cjs/modules/pdf/builder/pdf-editor.js +1612 -0
- package/dist/cjs/modules/pdf/builder/resource-merger.js +263 -0
- package/dist/cjs/modules/pdf/core/digital-signature.js +667 -0
- package/dist/cjs/modules/pdf/core/encryption.js +8 -7
- package/dist/cjs/modules/pdf/core/pdf-object.js +38 -0
- package/dist/cjs/modules/pdf/core/pdf-stream.js +66 -0
- package/dist/cjs/modules/pdf/core/pdf-writer.js +272 -6
- package/dist/cjs/modules/pdf/core/pdfa.js +266 -0
- package/dist/cjs/modules/pdf/index.js +19 -1
- package/dist/cjs/modules/pdf/reader/bookmark-extractor.js +327 -0
- package/dist/cjs/modules/pdf/reader/pdf-decrypt.js +6 -5
- package/dist/cjs/modules/pdf/reader/pdf-reader.js +26 -2
- package/dist/cjs/modules/pdf/reader/table-extractor.js +368 -0
- package/dist/cjs/modules/pdf/render/layout-engine.js +113 -4
- package/dist/cjs/modules/pdf/render/page-renderer.js +63 -105
- package/dist/cjs/modules/pdf/render/pdf-exporter.js +3 -62
- package/dist/cjs/modules/pdf/render/style-converter.js +1 -0
- package/dist/cjs/modules/stream/browser/readable.js +8 -2
- package/dist/cjs/{modules/pdf/core/crypto.js → utils/crypto.browser.js} +95 -102
- package/dist/cjs/utils/crypto.js +228 -0
- package/dist/esm/modules/archive/compression/crc32.js +1 -1
- package/dist/esm/modules/archive/crypto/aes.js +1 -20
- package/dist/esm/modules/archive/crypto/index.js +3 -1
- package/dist/esm/modules/csv/worker/worker-script.generated.js +1 -1
- package/dist/esm/modules/excel/utils/cell-matrix.js +1 -0
- package/dist/esm/modules/excel/utils/encryptor.browser.js +7 -12
- package/dist/esm/modules/excel/utils/encryptor.js +4 -7
- package/dist/esm/modules/pdf/builder/document-builder.js +1493 -0
- package/dist/esm/modules/pdf/builder/form-appearance.js +140 -0
- package/dist/esm/modules/pdf/builder/image-utils.js +129 -0
- package/dist/esm/modules/pdf/builder/pdf-editor.js +1574 -0
- package/dist/esm/modules/pdf/builder/resource-merger.js +258 -0
- package/dist/esm/modules/pdf/core/digital-signature.js +659 -0
- package/dist/esm/modules/pdf/core/encryption.js +8 -7
- package/dist/esm/modules/pdf/core/pdf-object.js +38 -0
- package/dist/esm/modules/pdf/core/pdf-stream.js +66 -0
- package/dist/esm/modules/pdf/core/pdf-writer.js +271 -6
- package/dist/esm/modules/pdf/core/pdfa.js +261 -0
- package/dist/esm/modules/pdf/index.js +9 -0
- package/dist/esm/modules/pdf/reader/bookmark-extractor.js +324 -0
- package/dist/esm/modules/pdf/reader/pdf-decrypt.js +6 -5
- package/dist/esm/modules/pdf/reader/pdf-reader.js +26 -2
- package/dist/esm/modules/pdf/reader/table-extractor.js +365 -0
- package/dist/esm/modules/pdf/render/layout-engine.js +112 -5
- package/dist/esm/modules/pdf/render/page-renderer.js +62 -103
- package/dist/esm/modules/pdf/render/pdf-exporter.js +2 -61
- package/dist/esm/modules/pdf/render/style-converter.js +1 -1
- package/dist/esm/modules/stream/browser/readable.js +8 -2
- package/dist/esm/{modules/pdf/core/crypto.js → utils/crypto.browser.js} +91 -101
- package/dist/esm/utils/crypto.js +209 -0
- package/dist/iife/excelts.iife.js +1248 -1074
- package/dist/iife/excelts.iife.js.map +1 -1
- package/dist/iife/excelts.iife.min.js +53 -54
- package/dist/types/modules/archive/crypto/aes.d.ts +0 -8
- package/dist/types/modules/archive/crypto/index.d.ts +2 -1
- package/dist/types/modules/csv/parse/row-processor.d.ts +1 -1
- package/dist/types/modules/excel/utils/encryptor.browser.d.ts +4 -5
- package/dist/types/modules/excel/utils/encryptor.d.ts +1 -1
- package/dist/types/modules/pdf/builder/document-builder.d.ts +517 -0
- package/dist/types/modules/pdf/builder/form-appearance.d.ts +56 -0
- package/dist/types/modules/pdf/builder/image-utils.d.ts +39 -0
- package/dist/types/modules/pdf/builder/pdf-editor.d.ts +230 -0
- package/dist/types/modules/pdf/builder/resource-merger.d.ts +41 -0
- package/dist/types/modules/pdf/core/digital-signature.d.ts +109 -0
- package/dist/types/modules/pdf/core/pdf-object.d.ts +11 -0
- package/dist/types/modules/pdf/core/pdf-stream.d.ts +32 -0
- package/dist/types/modules/pdf/core/pdf-writer.d.ts +55 -1
- package/dist/types/modules/pdf/core/pdfa.d.ts +62 -0
- package/dist/types/modules/pdf/index.d.ts +11 -0
- package/dist/types/modules/pdf/reader/bookmark-extractor.d.ts +35 -0
- package/dist/types/modules/pdf/reader/pdf-reader.d.ts +17 -0
- package/dist/types/modules/pdf/reader/table-extractor.d.ts +69 -0
- package/dist/types/modules/pdf/render/layout-engine.d.ts +21 -1
- package/dist/types/modules/pdf/render/page-renderer.d.ts +2 -9
- package/dist/types/modules/pdf/render/style-converter.d.ts +4 -0
- package/dist/types/modules/pdf/types.d.ts +14 -1
- package/dist/types/utils/crypto.browser.d.ts +64 -0
- package/dist/types/utils/crypto.d.ts +97 -0
- package/package.json +110 -111
- package/dist/browser/modules/pdf/core/crypto.d.ts +0 -65
- package/dist/types/modules/pdf/core/crypto.d.ts +0 -65
|
@@ -0,0 +1,209 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Cryptographic primitives — Node.js version.
|
|
3
|
+
*
|
|
4
|
+
* Uses `node:crypto` for maximum performance where possible.
|
|
5
|
+
* Pure JS fallbacks for operations where `node:crypto` would be inconvenient
|
|
6
|
+
* (e.g., AES-CBC with specific PDF padding semantics).
|
|
7
|
+
*
|
|
8
|
+
* The browser counterpart (`crypto.browser.ts`) provides the same API using
|
|
9
|
+
* pure JS implementations for synchronous ops and Web Crypto for async ops.
|
|
10
|
+
*
|
|
11
|
+
* Shared by: PDF (encryption/decryption), Archive (via re-export if needed),
|
|
12
|
+
* and digital signature infrastructure.
|
|
13
|
+
*
|
|
14
|
+
* @see FIPS 197 — AES
|
|
15
|
+
* @see FIPS 180-4 — SHA-256
|
|
16
|
+
* @see RFC 1321 — MD5
|
|
17
|
+
* @see RFC 2104 — HMAC
|
|
18
|
+
*/
|
|
19
|
+
import crypto from "node:crypto";
|
|
20
|
+
// =============================================================================
|
|
21
|
+
// SHA-256
|
|
22
|
+
// =============================================================================
|
|
23
|
+
/**
|
|
24
|
+
* SHA-256 hash function.
|
|
25
|
+
* @returns 32-byte digest
|
|
26
|
+
*/
|
|
27
|
+
export function sha256(input) {
|
|
28
|
+
return new Uint8Array(crypto.createHash("sha256").update(input).digest());
|
|
29
|
+
}
|
|
30
|
+
// =============================================================================
|
|
31
|
+
// Generic hash
|
|
32
|
+
// =============================================================================
|
|
33
|
+
/**
|
|
34
|
+
* HMAC-SHA256 (RFC 2104).
|
|
35
|
+
* @returns 32-byte MAC
|
|
36
|
+
*/
|
|
37
|
+
export function hmacSha256(key, message) {
|
|
38
|
+
return new Uint8Array(crypto.createHmac("sha256", key).update(message).digest());
|
|
39
|
+
}
|
|
40
|
+
// =============================================================================
|
|
41
|
+
// MD5
|
|
42
|
+
// =============================================================================
|
|
43
|
+
/**
|
|
44
|
+
* MD5 hash function (RFC 1321).
|
|
45
|
+
* @returns 16-byte digest
|
|
46
|
+
*/
|
|
47
|
+
export function md5(input) {
|
|
48
|
+
return new Uint8Array(crypto.createHash("md5").update(input).digest());
|
|
49
|
+
}
|
|
50
|
+
// =============================================================================
|
|
51
|
+
// AES-CBC
|
|
52
|
+
// =============================================================================
|
|
53
|
+
/**
|
|
54
|
+
* AES-CBC encryption with PKCS#7 padding.
|
|
55
|
+
* Supports AES-128 (16-byte key) and AES-256 (32-byte key).
|
|
56
|
+
*/
|
|
57
|
+
export function aesCbcEncrypt(plaintext, key, iv) {
|
|
58
|
+
const algo = key.length === 16 ? "aes-128-cbc" : "aes-256-cbc";
|
|
59
|
+
const cipher = crypto.createCipheriv(algo, key, iv);
|
|
60
|
+
return new Uint8Array(Buffer.concat([cipher.update(plaintext), cipher.final()]));
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* AES-CBC decryption with PKCS#7 padding removal.
|
|
64
|
+
* Supports AES-128 (16-byte key) and AES-256 (32-byte key).
|
|
65
|
+
*/
|
|
66
|
+
export function aesCbcDecrypt(ciphertext, key, iv) {
|
|
67
|
+
const algo = key.length === 16 ? "aes-128-cbc" : "aes-256-cbc";
|
|
68
|
+
const decipher = crypto.createDecipheriv(algo, key, iv);
|
|
69
|
+
try {
|
|
70
|
+
return new Uint8Array(Buffer.concat([decipher.update(ciphertext), decipher.final()]));
|
|
71
|
+
}
|
|
72
|
+
catch {
|
|
73
|
+
// Invalid padding — return raw decrypted data without padding removal
|
|
74
|
+
// (matches pure JS behavior for NIST test vectors and PDF key derivation)
|
|
75
|
+
const decipher2 = crypto.createDecipheriv(algo, key, iv);
|
|
76
|
+
decipher2.setAutoPadding(false);
|
|
77
|
+
return new Uint8Array(Buffer.concat([decipher2.update(ciphertext), decipher2.final()]));
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* AES-CBC decryption WITHOUT PKCS#7 padding removal.
|
|
82
|
+
* Used for key derivation where the output length is known.
|
|
83
|
+
*/
|
|
84
|
+
export function aesCbcDecryptRaw(ciphertext, key, iv) {
|
|
85
|
+
const algo = key.length === 16 ? "aes-128-cbc" : "aes-256-cbc";
|
|
86
|
+
const decipher = crypto.createDecipheriv(algo, key, iv);
|
|
87
|
+
decipher.setAutoPadding(false);
|
|
88
|
+
return new Uint8Array(Buffer.concat([decipher.update(ciphertext), decipher.final()]));
|
|
89
|
+
}
|
|
90
|
+
/**
|
|
91
|
+
* AES-CBC encryption WITHOUT PKCS#7 padding.
|
|
92
|
+
* Used when the plaintext is already block-aligned.
|
|
93
|
+
*
|
|
94
|
+
* @throws if plaintext length is not a multiple of 16.
|
|
95
|
+
*/
|
|
96
|
+
export function aesCbcEncryptRaw(plaintext, key, iv) {
|
|
97
|
+
if (plaintext.length % 16 !== 0) {
|
|
98
|
+
throw new Error("aesCbcEncryptRaw: plaintext length must be a multiple of 16");
|
|
99
|
+
}
|
|
100
|
+
const algo = key.length === 16 ? "aes-128-cbc" : "aes-256-cbc";
|
|
101
|
+
const cipher = crypto.createCipheriv(algo, key, iv);
|
|
102
|
+
cipher.setAutoPadding(false);
|
|
103
|
+
return new Uint8Array(Buffer.concat([cipher.update(plaintext), cipher.final()]));
|
|
104
|
+
}
|
|
105
|
+
/**
|
|
106
|
+
* AES-ECB encryption of a single 16-byte block (no padding, no IV).
|
|
107
|
+
*/
|
|
108
|
+
export function aesEcbEncrypt(block, key) {
|
|
109
|
+
const algo = key.length === 16 ? "aes-128-ecb" : "aes-256-ecb";
|
|
110
|
+
const cipher = crypto.createCipheriv(algo, key, null);
|
|
111
|
+
cipher.setAutoPadding(false);
|
|
112
|
+
return new Uint8Array(Buffer.concat([cipher.update(block), cipher.final()]));
|
|
113
|
+
}
|
|
114
|
+
// =============================================================================
|
|
115
|
+
// RC4 (legacy)
|
|
116
|
+
// =============================================================================
|
|
117
|
+
/**
|
|
118
|
+
* RC4 stream cipher.
|
|
119
|
+
* @deprecated Only used for reading legacy encrypted PDFs.
|
|
120
|
+
*/
|
|
121
|
+
export function rc4(key, data) {
|
|
122
|
+
// Node's crypto doesn't expose RC4 in modern versions, use pure JS
|
|
123
|
+
const s = new Uint8Array(256);
|
|
124
|
+
for (let i = 0; i < 256; i++) {
|
|
125
|
+
s[i] = i;
|
|
126
|
+
}
|
|
127
|
+
let j = 0;
|
|
128
|
+
for (let i = 0; i < 256; i++) {
|
|
129
|
+
j = (j + s[i] + key[i % key.length]) & 0xff;
|
|
130
|
+
[s[i], s[j]] = [s[j], s[i]];
|
|
131
|
+
}
|
|
132
|
+
const result = new Uint8Array(data.length);
|
|
133
|
+
let ii = 0;
|
|
134
|
+
let jj = 0;
|
|
135
|
+
for (let k = 0; k < data.length; k++) {
|
|
136
|
+
ii = (ii + 1) & 0xff;
|
|
137
|
+
jj = (jj + s[ii]) & 0xff;
|
|
138
|
+
[s[ii], s[jj]] = [s[jj], s[ii]];
|
|
139
|
+
result[k] = data[k] ^ s[(s[ii] + s[jj]) & 0xff];
|
|
140
|
+
}
|
|
141
|
+
return result;
|
|
142
|
+
}
|
|
143
|
+
// =============================================================================
|
|
144
|
+
// Random bytes
|
|
145
|
+
// =============================================================================
|
|
146
|
+
/**
|
|
147
|
+
* Generate cryptographically secure random bytes.
|
|
148
|
+
*/
|
|
149
|
+
export function randomBytes(length) {
|
|
150
|
+
return new Uint8Array(crypto.randomBytes(length));
|
|
151
|
+
}
|
|
152
|
+
// =============================================================================
|
|
153
|
+
// Generic hash
|
|
154
|
+
// =============================================================================
|
|
155
|
+
/**
|
|
156
|
+
* Compute a hash digest using any algorithm supported by the platform.
|
|
157
|
+
*
|
|
158
|
+
* @param algorithm - Hash algorithm name (e.g., "SHA-256", "SHA-512", "SHA-1", "MD5").
|
|
159
|
+
* Normalized internally: hyphens removed, lowercased.
|
|
160
|
+
* @param data - Data to hash
|
|
161
|
+
* @returns The digest bytes
|
|
162
|
+
*/
|
|
163
|
+
export function hash(algorithm, data) {
|
|
164
|
+
const algo = algorithm.toLowerCase().replace(/-/g, "");
|
|
165
|
+
return new Uint8Array(crypto.createHash(algo).update(data).digest());
|
|
166
|
+
}
|
|
167
|
+
/**
|
|
168
|
+
* Async version of `hash()` — same behavior, but returns a Promise for API
|
|
169
|
+
* parity with the browser version.
|
|
170
|
+
*/
|
|
171
|
+
export async function hashAsync(algorithm, data) {
|
|
172
|
+
return hash(algorithm, data);
|
|
173
|
+
}
|
|
174
|
+
// =============================================================================
|
|
175
|
+
// RSA signature operations (async — for digital signatures)
|
|
176
|
+
// =============================================================================
|
|
177
|
+
/**
|
|
178
|
+
* Verify an RSA PKCS#1 v1.5 signature.
|
|
179
|
+
*
|
|
180
|
+
* @param publicKeyDer - DER-encoded SubjectPublicKeyInfo
|
|
181
|
+
* @param signature - The signature bytes
|
|
182
|
+
* @param data - The signed data (will be hashed with SHA-256)
|
|
183
|
+
*/
|
|
184
|
+
export async function rsaVerify(publicKeyDer, signature, data) {
|
|
185
|
+
const key = crypto.createPublicKey({
|
|
186
|
+
key: Buffer.from(publicKeyDer),
|
|
187
|
+
format: "der",
|
|
188
|
+
type: "spki"
|
|
189
|
+
});
|
|
190
|
+
const verifier = crypto.createVerify("SHA256");
|
|
191
|
+
verifier.update(data);
|
|
192
|
+
return verifier.verify(key, signature);
|
|
193
|
+
}
|
|
194
|
+
/**
|
|
195
|
+
* Create an RSA PKCS#1 v1.5 signature.
|
|
196
|
+
*
|
|
197
|
+
* @param privateKeyDer - DER-encoded PKCS#8 private key
|
|
198
|
+
* @param data - The data to sign (will be hashed with SHA-256)
|
|
199
|
+
*/
|
|
200
|
+
export async function rsaSign(privateKeyDer, data) {
|
|
201
|
+
const key = crypto.createPrivateKey({
|
|
202
|
+
key: Buffer.from(privateKeyDer),
|
|
203
|
+
format: "der",
|
|
204
|
+
type: "pkcs8"
|
|
205
|
+
});
|
|
206
|
+
const signer = crypto.createSign("SHA256");
|
|
207
|
+
signer.update(data);
|
|
208
|
+
return new Uint8Array(signer.sign(key));
|
|
209
|
+
}
|
|
@@ -16,8 +16,6 @@
|
|
|
16
16
|
*/
|
|
17
17
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
18
18
|
exports.AES_PASSWORD_VERIFY_LENGTH = exports.AES_AUTH_CODE_LENGTH = exports.AES_STRENGTH_FROM_BYTE = exports.AES_STRENGTH_BYTE = exports.AES_KEY_LENGTH = exports.AES_SALT_LENGTH = exports.AES_EXTRA_FIELD_ID = exports.COMPRESSION_METHOD_AES = exports.AES_VERSION_AE1 = exports.AES_VERSION_AE2 = exports.AES_VENDOR_ID = void 0;
|
|
19
|
-
exports.getRandomValues = getRandomValues;
|
|
20
|
-
exports.randomBytes = randomBytes;
|
|
21
19
|
exports.aesDerive = aesDerive;
|
|
22
20
|
exports.aesComputeHmac = aesComputeHmac;
|
|
23
21
|
exports.aesCtr = aesCtr;
|
|
@@ -30,6 +28,7 @@ exports.aesCheckPasswordOnly = aesCheckPasswordOnly;
|
|
|
30
28
|
exports.aesVerifyPassword = aesCheckPasswordOnly;
|
|
31
29
|
exports.aesCheckSignature = aesCheckSignature;
|
|
32
30
|
const binary_1 = require("../../../utils/binary.js");
|
|
31
|
+
const crypto_1 = require("../../../utils/crypto.js");
|
|
33
32
|
const text_1 = require("../shared/text.js");
|
|
34
33
|
/**
|
|
35
34
|
* AES vendor ID for WinZip format.
|
|
@@ -100,26 +99,6 @@ function getWebCrypto() {
|
|
|
100
99
|
}
|
|
101
100
|
throw new Error("Web Crypto API not available");
|
|
102
101
|
}
|
|
103
|
-
/**
|
|
104
|
-
* Get crypto.getRandomValues (works in both Node.js and browsers).
|
|
105
|
-
*/
|
|
106
|
-
function getRandomValues(array) {
|
|
107
|
-
if (typeof globalThis.crypto?.getRandomValues !== "undefined") {
|
|
108
|
-
// Uint8Array's buffer type (ArrayBufferLike) is wider than what the TS lib
|
|
109
|
-
// definition of getRandomValues expects (ArrayBuffer). The cast is safe
|
|
110
|
-
// because getRandomValues fills the view in-place regardless of buffer type.
|
|
111
|
-
globalThis.crypto.getRandomValues(array);
|
|
112
|
-
return array;
|
|
113
|
-
}
|
|
114
|
-
throw new Error("crypto.getRandomValues not available");
|
|
115
|
-
}
|
|
116
|
-
/**
|
|
117
|
-
* Generate random bytes.
|
|
118
|
-
*/
|
|
119
|
-
function randomBytes(length) {
|
|
120
|
-
const bytes = new Uint8Array(length);
|
|
121
|
-
return getRandomValues(bytes);
|
|
122
|
-
}
|
|
123
102
|
/**
|
|
124
103
|
* Derive AES keys from password using PBKDF2.
|
|
125
104
|
*
|
|
@@ -329,7 +308,7 @@ async function aesDecrypt(encryptedData, password, keyStrength) {
|
|
|
329
308
|
async function aesEncrypt(data, password, keyStrength) {
|
|
330
309
|
const saltLen = exports.AES_SALT_LENGTH[keyStrength];
|
|
331
310
|
// Generate random salt
|
|
332
|
-
const salt = randomBytes(saltLen);
|
|
311
|
+
const salt = (0, crypto_1.randomBytes)(saltLen);
|
|
333
312
|
// Derive keys
|
|
334
313
|
const keys = await aesDerive(password, salt, keyStrength);
|
|
335
314
|
// Encrypt data
|
|
@@ -42,7 +42,9 @@ Object.defineProperty(exports, "aesEncrypt", { enumerable: true, get: function (
|
|
|
42
42
|
Object.defineProperty(exports, "aesEncryptedSize", { enumerable: true, get: function () { return aes_1.aesEncryptedSize; } });
|
|
43
43
|
Object.defineProperty(exports, "aesVerifyPassword", { enumerable: true, get: function () { return aes_1.aesVerifyPassword; } });
|
|
44
44
|
Object.defineProperty(exports, "buildAesExtraField", { enumerable: true, get: function () { return aes_1.buildAesExtraField; } });
|
|
45
|
-
|
|
45
|
+
// Random bytes — from shared @utils/crypto
|
|
46
|
+
var crypto_1 = require("../../../utils/crypto.js");
|
|
47
|
+
Object.defineProperty(exports, "randomBytes", { enumerable: true, get: function () { return crypto_1.randomBytes; } });
|
|
46
48
|
// Types
|
|
47
49
|
var types_1 = require("./types");
|
|
48
50
|
Object.defineProperty(exports, "getEncryptionMethodName", { enumerable: true, get: function () { return types_1.getEncryptionMethodName; } });
|