reamkit 1.6.0 → 1.9.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.
Files changed (55) hide show
  1. package/README.md +13 -1
  2. package/dist/esm/core/converter/ream.d.ts +1 -0
  3. package/dist/esm/core/converter/ream.js +1 -1
  4. package/dist/esm/core/document-model/types.d.ts +3 -1
  5. package/dist/esm/core/drawingml/chart-serializer.d.ts +2 -0
  6. package/dist/esm/core/drawingml/chart-serializer.js +53 -0
  7. package/dist/esm/core/drawingml/shape-render.d.ts +3 -1
  8. package/dist/esm/core/drawingml/shape-render.js +27 -1
  9. package/dist/esm/core/vector.d.ts +10 -0
  10. package/dist/esm/excel/print-model.js +6 -3
  11. package/dist/esm/excel/xlsx-writer.js +81 -17
  12. package/dist/esm/html/html-writer.js +4 -2
  13. package/dist/esm/layout/styled-layout.js +5 -2
  14. package/dist/esm/pdf/shading.d.ts +12 -0
  15. package/dist/esm/pdf/shading.js +152 -0
  16. package/dist/esm/pdf/styled-page-emitter.js +29 -4
  17. package/dist/esm/pdf/vector-graphics.d.ts +1 -1
  18. package/dist/esm/pdf/vector-graphics.js +5 -3
  19. package/dist/esm/pdf-reader/ccitt.d.ts +15 -0
  20. package/dist/esm/pdf-reader/ccitt.js +394 -0
  21. package/dist/esm/pdf-reader/content.d.ts +43 -1
  22. package/dist/esm/pdf-reader/content.js +173 -4
  23. package/dist/esm/pdf-reader/crypto.d.ts +7 -0
  24. package/dist/esm/pdf-reader/crypto.js +609 -0
  25. package/dist/esm/pdf-reader/decrypt.d.ts +5 -0
  26. package/dist/esm/pdf-reader/decrypt.js +211 -0
  27. package/dist/esm/pdf-reader/document.d.ts +8 -1
  28. package/dist/esm/pdf-reader/document.js +210 -27
  29. package/dist/esm/pdf-reader/flow-build.d.ts +16 -1
  30. package/dist/esm/pdf-reader/flow-build.js +113 -3
  31. package/dist/esm/pdf-reader/image-decode.d.ts +15 -0
  32. package/dist/esm/pdf-reader/image-decode.js +550 -0
  33. package/dist/esm/pdf-reader/images.d.ts +16 -0
  34. package/dist/esm/pdf-reader/images.js +90 -0
  35. package/dist/esm/pdf-reader/layout.d.ts +2 -2
  36. package/dist/esm/pdf-reader/layout.js +86 -14
  37. package/dist/esm/pdf-reader/png-encode.d.ts +2 -0
  38. package/dist/esm/pdf-reader/png-encode.js +98 -0
  39. package/dist/esm/pdf-reader/predictor.d.ts +7 -0
  40. package/dist/esm/pdf-reader/predictor.js +61 -0
  41. package/dist/esm/pdf-reader/reader.d.ts +1 -1
  42. package/dist/esm/pdf-reader/reader.js +14 -7
  43. package/dist/esm/pdf-reader/shading.d.ts +3 -0
  44. package/dist/esm/pdf-reader/shading.js +147 -0
  45. package/dist/esm/pdf-reader/tagged.d.ts +2 -2
  46. package/dist/esm/pdf-reader/tagged.js +60 -7
  47. package/dist/esm/pdf-reader/text.js +91 -10
  48. package/dist/esm/pdf-reader/vector.d.ts +16 -0
  49. package/dist/esm/pdf-reader/vector.js +63 -0
  50. package/dist/esm/svg/svg-writer.js +12 -5
  51. package/dist/esm/word/docx-writer.js +104 -8
  52. package/dist/esm/word/drawing-parser.js +28 -17
  53. package/dist/esm/word/omml-serializer.d.ts +2 -0
  54. package/dist/esm/word/omml-serializer.js +48 -0
  55. package/package.json +1 -1
@@ -0,0 +1,609 @@
1
+ //#region src/pdf-reader/crypto.ts
2
+ function rc4(key, data) {
3
+ const s = new Uint8Array(256);
4
+ for (let i = 0; i < 256; i++) s[i] = i;
5
+ let j = 0;
6
+ for (let i = 0; i < 256; i++) {
7
+ j = j + s[i] + key[i % key.length] & 255;
8
+ [s[i], s[j]] = [s[j], s[i]];
9
+ }
10
+ const out = new Uint8Array(data.length);
11
+ let a = 0;
12
+ let b = 0;
13
+ for (let k = 0; k < data.length; k++) {
14
+ a = a + 1 & 255;
15
+ b = b + s[a] & 255;
16
+ [s[a], s[b]] = [s[b], s[a]];
17
+ out[k] = data[k] ^ s[s[a] + s[b] & 255];
18
+ }
19
+ return out;
20
+ }
21
+ var MD5_S = [
22
+ 7,
23
+ 12,
24
+ 17,
25
+ 22,
26
+ 7,
27
+ 12,
28
+ 17,
29
+ 22,
30
+ 7,
31
+ 12,
32
+ 17,
33
+ 22,
34
+ 7,
35
+ 12,
36
+ 17,
37
+ 22,
38
+ 5,
39
+ 9,
40
+ 14,
41
+ 20,
42
+ 5,
43
+ 9,
44
+ 14,
45
+ 20,
46
+ 5,
47
+ 9,
48
+ 14,
49
+ 20,
50
+ 5,
51
+ 9,
52
+ 14,
53
+ 20,
54
+ 4,
55
+ 11,
56
+ 16,
57
+ 23,
58
+ 4,
59
+ 11,
60
+ 16,
61
+ 23,
62
+ 4,
63
+ 11,
64
+ 16,
65
+ 23,
66
+ 4,
67
+ 11,
68
+ 16,
69
+ 23,
70
+ 6,
71
+ 10,
72
+ 15,
73
+ 21,
74
+ 6,
75
+ 10,
76
+ 15,
77
+ 21,
78
+ 6,
79
+ 10,
80
+ 15,
81
+ 21,
82
+ 6,
83
+ 10,
84
+ 15,
85
+ 21
86
+ ];
87
+ var MD5_K = Array.from({ length: 64 }, (_, i) => Math.floor(Math.abs(Math.sin(i + 1)) * 4294967296));
88
+ function md5(input) {
89
+ const len = input.length;
90
+ const withOne = (len + 8 >> 6) + 1;
91
+ const msg = new Uint8Array(withOne * 64);
92
+ msg.set(input);
93
+ msg[len] = 128;
94
+ const bitLen = len * 8;
95
+ for (let i = 0; i < 4; i++) msg[msg.length - 8 + i] = bitLen >>> 8 * i & 255;
96
+ let a0 = 1732584193;
97
+ let b0 = 4023233417;
98
+ let c0 = 2562383102;
99
+ let d0 = 271733878;
100
+ const rol = (x, c) => x << c | x >>> 32 - c;
101
+ for (let off = 0; off < msg.length; off += 64) {
102
+ const m = new Array(16);
103
+ for (let i = 0; i < 16; i++) m[i] = msg[off + i * 4] | msg[off + i * 4 + 1] << 8 | msg[off + i * 4 + 2] << 16 | msg[off + i * 4 + 3] << 24;
104
+ let a = a0;
105
+ let b = b0;
106
+ let c = c0;
107
+ let d = d0;
108
+ for (let i = 0; i < 64; i++) {
109
+ let f;
110
+ let g;
111
+ if (i < 16) {
112
+ f = b & c | ~b & d;
113
+ g = i;
114
+ } else if (i < 32) {
115
+ f = d & b | ~d & c;
116
+ g = (5 * i + 1) % 16;
117
+ } else if (i < 48) {
118
+ f = b ^ c ^ d;
119
+ g = (3 * i + 5) % 16;
120
+ } else {
121
+ f = c ^ (b | ~d);
122
+ g = 7 * i % 16;
123
+ }
124
+ f = f + a + MD5_K[i] + m[g] | 0;
125
+ a = d;
126
+ d = c;
127
+ c = b;
128
+ b = b + rol(f, MD5_S[i]) | 0;
129
+ }
130
+ a0 = a0 + a | 0;
131
+ b0 = b0 + b | 0;
132
+ c0 = c0 + c | 0;
133
+ d0 = d0 + d | 0;
134
+ }
135
+ const out = new Uint8Array(16);
136
+ [
137
+ a0,
138
+ b0,
139
+ c0,
140
+ d0
141
+ ].forEach((v, i) => {
142
+ out[i * 4] = v & 255;
143
+ out[i * 4 + 1] = v >>> 8 & 255;
144
+ out[i * 4 + 2] = v >>> 16 & 255;
145
+ out[i * 4 + 3] = v >>> 24 & 255;
146
+ });
147
+ return out;
148
+ }
149
+ var SHA256_K = [
150
+ 1116352408,
151
+ 1899447441,
152
+ 3049323471,
153
+ 3921009573,
154
+ 961987163,
155
+ 1508970993,
156
+ 2453635748,
157
+ 2870763221,
158
+ 3624381080,
159
+ 310598401,
160
+ 607225278,
161
+ 1426881987,
162
+ 1925078388,
163
+ 2162078206,
164
+ 2614888103,
165
+ 3248222580,
166
+ 3835390401,
167
+ 4022224774,
168
+ 264347078,
169
+ 604807628,
170
+ 770255983,
171
+ 1249150122,
172
+ 1555081692,
173
+ 1996064986,
174
+ 2554220882,
175
+ 2821834349,
176
+ 2952996808,
177
+ 3210313671,
178
+ 3336571891,
179
+ 3584528711,
180
+ 113926993,
181
+ 338241895,
182
+ 666307205,
183
+ 773529912,
184
+ 1294757372,
185
+ 1396182291,
186
+ 1695183700,
187
+ 1986661051,
188
+ 2177026350,
189
+ 2456956037,
190
+ 2730485921,
191
+ 2820302411,
192
+ 3259730800,
193
+ 3345764771,
194
+ 3516065817,
195
+ 3600352804,
196
+ 4094571909,
197
+ 275423344,
198
+ 430227734,
199
+ 506948616,
200
+ 659060556,
201
+ 883997877,
202
+ 958139571,
203
+ 1322822218,
204
+ 1537002063,
205
+ 1747873779,
206
+ 1955562222,
207
+ 2024104815,
208
+ 2227730452,
209
+ 2361852424,
210
+ 2428436474,
211
+ 2756734187,
212
+ 3204031479,
213
+ 3329325298
214
+ ];
215
+ function sha256(input) {
216
+ const h = [
217
+ 1779033703,
218
+ 3144134277,
219
+ 1013904242,
220
+ 2773480762,
221
+ 1359893119,
222
+ 2600822924,
223
+ 528734635,
224
+ 1541459225
225
+ ];
226
+ const len = input.length;
227
+ const blocks = (len + 8 >> 6) + 1;
228
+ const msg = new Uint8Array(blocks * 64);
229
+ msg.set(input);
230
+ msg[len] = 128;
231
+ const bitLen = len * 8;
232
+ const dv = new DataView(msg.buffer);
233
+ dv.setUint32(msg.length - 4, bitLen >>> 0);
234
+ dv.setUint32(msg.length - 8, Math.floor(bitLen / 4294967296));
235
+ const rotr = (x, n) => x >>> n | x << 32 - n;
236
+ const w = new Array(64);
237
+ for (let off = 0; off < msg.length; off += 64) {
238
+ for (let i = 0; i < 16; i++) w[i] = dv.getUint32(off + i * 4);
239
+ for (let i = 16; i < 64; i++) {
240
+ const s0 = rotr(w[i - 15], 7) ^ rotr(w[i - 15], 18) ^ w[i - 15] >>> 3;
241
+ const s1 = rotr(w[i - 2], 17) ^ rotr(w[i - 2], 19) ^ w[i - 2] >>> 10;
242
+ w[i] = w[i - 16] + s0 + w[i - 7] + s1 | 0;
243
+ }
244
+ let [a, b, c, d, e, f, g, hh] = h;
245
+ for (let i = 0; i < 64; i++) {
246
+ const S1 = rotr(e, 6) ^ rotr(e, 11) ^ rotr(e, 25);
247
+ const ch = e & f ^ ~e & g;
248
+ const t1 = hh + S1 + ch + SHA256_K[i] + w[i] | 0;
249
+ const t2 = (rotr(a, 2) ^ rotr(a, 13) ^ rotr(a, 22)) + (a & b ^ a & c ^ b & c) | 0;
250
+ hh = g;
251
+ g = f;
252
+ f = e;
253
+ e = d + t1 | 0;
254
+ d = c;
255
+ c = b;
256
+ b = a;
257
+ a = t1 + t2 | 0;
258
+ }
259
+ h[0] = h[0] + a | 0;
260
+ h[1] = h[1] + b | 0;
261
+ h[2] = h[2] + c | 0;
262
+ h[3] = h[3] + d | 0;
263
+ h[4] = h[4] + e | 0;
264
+ h[5] = h[5] + f | 0;
265
+ h[6] = h[6] + g | 0;
266
+ h[7] = h[7] + hh | 0;
267
+ }
268
+ const out = new Uint8Array(32);
269
+ new DataView(out.buffer).setUint32(0, h[0] >>> 0);
270
+ for (let i = 0; i < 8; i++) new DataView(out.buffer).setUint32(i * 4, h[i] >>> 0);
271
+ return out;
272
+ }
273
+ var MASK64 = (1n << 64n) - 1n;
274
+ var SHA512_K = [
275
+ 4794697086780616226n,
276
+ 8158064640168781261n,
277
+ 13096744586834688815n,
278
+ 16840607885511220156n,
279
+ 4131703408338449720n,
280
+ 6480981068601479193n,
281
+ 10538285296894168987n,
282
+ 12329834152419229976n,
283
+ 15566598209576043074n,
284
+ 1334009975649890238n,
285
+ 2608012711638119052n,
286
+ 6128411473006802146n,
287
+ 8268148722764581231n,
288
+ 9286055187155687089n,
289
+ 11230858885718282805n,
290
+ 13951009754708518548n,
291
+ 16472876342353939154n,
292
+ 17275323862435702243n,
293
+ 1135362057144423861n,
294
+ 2597628984639134821n,
295
+ 3308224258029322869n,
296
+ 5365058923640841347n,
297
+ 6679025012923562964n,
298
+ 8573033837759648693n,
299
+ 10970295158949994411n,
300
+ 12119686244451234320n,
301
+ 12683024718118986047n,
302
+ 13788192230050041572n,
303
+ 14330467153632333762n,
304
+ 15395433587784984357n,
305
+ 489312712824947311n,
306
+ 1452737877330783856n,
307
+ 2861767655752347644n,
308
+ 3322285676063803686n,
309
+ 5560940570517711597n,
310
+ 5996557281743188959n,
311
+ 7280758554555802590n,
312
+ 8532644243296465576n,
313
+ 9350256976987008742n,
314
+ 10552545826968843579n,
315
+ 11727347734174303076n,
316
+ 12113106623233404929n,
317
+ 14000437183269869457n,
318
+ 14369950271660146224n,
319
+ 15101387698204529176n,
320
+ 15463397548674623760n,
321
+ 17586052441742319658n,
322
+ 1182934255886127544n,
323
+ 1847814050463011016n,
324
+ 2177327727835720531n,
325
+ 2830643537854262169n,
326
+ 3796741975233480872n,
327
+ 4115178125766777443n,
328
+ 5681478168544905931n,
329
+ 6601373596472566643n,
330
+ 7507060721942968483n,
331
+ 8399075790359081724n,
332
+ 8693463985226723168n,
333
+ 9568029438360202098n,
334
+ 10144078919501101548n,
335
+ 10430055236837252648n,
336
+ 11840083180663258601n,
337
+ 13761210420658862357n,
338
+ 14299343276471374635n,
339
+ 14566680578165727644n,
340
+ 15097957966210449927n,
341
+ 16922976911328602910n,
342
+ 17689382322260857208n,
343
+ 500013540394364858n,
344
+ 748580250866718886n,
345
+ 1242879168328830382n,
346
+ 1977374033974150939n,
347
+ 2944078676154940804n,
348
+ 3659926193048069267n,
349
+ 4368137639120453308n,
350
+ 4836135668995329356n,
351
+ 5532061633213252278n,
352
+ 6448918945643986474n,
353
+ 6902733635092675308n,
354
+ 7801388544844847127n
355
+ ];
356
+ function sha512Core(iv, input, outLen) {
357
+ const rotr = (x, n) => (x >> n | x << 64n - n) & MASK64;
358
+ const h = [...iv];
359
+ const len = input.length;
360
+ const blocks = (len + 16 >> 7) + 1;
361
+ const msg = new Uint8Array(blocks * 128);
362
+ msg.set(input);
363
+ msg[len] = 128;
364
+ let bitLen = BigInt(len) * 8n;
365
+ for (let i = 0; i < 16; i++) {
366
+ msg[msg.length - 1 - i] = Number(bitLen & 255n);
367
+ bitLen >>= 8n;
368
+ }
369
+ const w = new Array(80);
370
+ for (let off = 0; off < msg.length; off += 128) {
371
+ for (let i = 0; i < 16; i++) {
372
+ let v = 0n;
373
+ for (let b = 0; b < 8; b++) v = v << 8n | BigInt(msg[off + i * 8 + b]);
374
+ w[i] = v;
375
+ }
376
+ for (let i = 16; i < 80; i++) {
377
+ const s0 = rotr(w[i - 15], 1n) ^ rotr(w[i - 15], 8n) ^ w[i - 15] >> 7n;
378
+ const s1 = rotr(w[i - 2], 19n) ^ rotr(w[i - 2], 61n) ^ w[i - 2] >> 6n;
379
+ w[i] = w[i - 16] + s0 + w[i - 7] + s1 & MASK64;
380
+ }
381
+ let [a, b, c, d, e, f, g, hh] = h;
382
+ for (let i = 0; i < 80; i++) {
383
+ const S1 = rotr(e, 14n) ^ rotr(e, 18n) ^ rotr(e, 41n);
384
+ const ch = e & f ^ ~e & MASK64 & g;
385
+ const t1 = hh + S1 + ch + SHA512_K[i] + w[i] & MASK64;
386
+ const t2 = (rotr(a, 28n) ^ rotr(a, 34n) ^ rotr(a, 39n)) + (a & b ^ a & c ^ b & c) & MASK64;
387
+ hh = g;
388
+ g = f;
389
+ f = e;
390
+ e = d + t1 & MASK64;
391
+ d = c;
392
+ c = b;
393
+ b = a;
394
+ a = t1 + t2 & MASK64;
395
+ }
396
+ h[0] = h[0] + a & MASK64;
397
+ h[1] = h[1] + b & MASK64;
398
+ h[2] = h[2] + c & MASK64;
399
+ h[3] = h[3] + d & MASK64;
400
+ h[4] = h[4] + e & MASK64;
401
+ h[5] = h[5] + f & MASK64;
402
+ h[6] = h[6] + g & MASK64;
403
+ h[7] = h[7] + hh & MASK64;
404
+ }
405
+ const out = new Uint8Array(h.length * 8);
406
+ h.forEach((v, i) => {
407
+ for (let b = 7; b >= 0; b--) {
408
+ out[i * 8 + b] = Number(v & 255n);
409
+ v >>= 8n;
410
+ }
411
+ });
412
+ return out.slice(0, outLen);
413
+ }
414
+ function sha512(input) {
415
+ return sha512Core([
416
+ 7640891576956012808n,
417
+ 13503953896175478587n,
418
+ 4354685564936845355n,
419
+ 11912009170470909681n,
420
+ 5840696475078001361n,
421
+ 11170449401992604703n,
422
+ 2270897969802886507n,
423
+ 6620516959819538809n
424
+ ], input, 64);
425
+ }
426
+ function sha384(input) {
427
+ return sha512Core([
428
+ 14680500436340154072n,
429
+ 7105036623409894663n,
430
+ 10473403895298186519n,
431
+ 1526699215303891257n,
432
+ 7436329637833083697n,
433
+ 10282925794625328401n,
434
+ 15784041429090275239n,
435
+ 5167115440072839076n
436
+ ], input, 48);
437
+ }
438
+ var AES = buildAesTables();
439
+ function buildAesTables() {
440
+ const exp = new Uint8Array(256);
441
+ const log = new Uint8Array(256);
442
+ let x = 1;
443
+ for (let i = 0; i < 255; i++) {
444
+ exp[i] = x;
445
+ log[x] = i;
446
+ x ^= x << 1 ^ (x & 128 ? 283 : 0);
447
+ x &= 255;
448
+ }
449
+ const sbox = new Uint8Array(256);
450
+ const inv = new Uint8Array(256);
451
+ for (let i = 0; i < 256; i++) {
452
+ const invByte = i === 0 ? 0 : exp[(255 - log[i]) % 255];
453
+ let s = invByte;
454
+ let acc = invByte;
455
+ for (let r = 0; r < 4; r++) {
456
+ acc = (acc << 1 | acc >> 7) & 255;
457
+ s ^= acc;
458
+ }
459
+ s ^= 99;
460
+ sbox[i] = s;
461
+ inv[s] = i;
462
+ }
463
+ return {
464
+ sbox,
465
+ inv
466
+ };
467
+ }
468
+ function gmul(a, b) {
469
+ let p = 0;
470
+ for (let i = 0; i < 8; i++) {
471
+ if (b & 1) p ^= a;
472
+ const hi = a & 128;
473
+ a = a << 1 & 255;
474
+ if (hi) a ^= 27;
475
+ b >>= 1;
476
+ }
477
+ return p;
478
+ }
479
+ function expandKey(key) {
480
+ const nk = key.length / 4;
481
+ const total = 4 * (nk + 6 + 1);
482
+ const w = new Uint8Array(total * 4);
483
+ w.set(key);
484
+ let rcon = 1;
485
+ for (let i = nk; i < total; i++) {
486
+ const t = [
487
+ w[(i - 1) * 4],
488
+ w[(i - 1) * 4 + 1],
489
+ w[(i - 1) * 4 + 2],
490
+ w[(i - 1) * 4 + 3]
491
+ ];
492
+ if (i % nk === 0) {
493
+ const tmp = t[0];
494
+ t[0] = AES.sbox[t[1]] ^ rcon;
495
+ t[1] = AES.sbox[t[2]];
496
+ t[2] = AES.sbox[t[3]];
497
+ t[3] = AES.sbox[tmp];
498
+ rcon = gmul(rcon, 2);
499
+ } else if (nk > 6 && i % nk === 4) for (let j = 0; j < 4; j++) t[j] = AES.sbox[t[j]];
500
+ for (let j = 0; j < 4; j++) w[i * 4 + j] = w[(i - nk) * 4 + j] ^ t[j];
501
+ }
502
+ return w;
503
+ }
504
+ function decryptBlock(input, w, nr, out, outOff) {
505
+ const s = input.slice(0, 16);
506
+ const addRoundKey = (round) => {
507
+ for (let i = 0; i < 16; i++) s[i] = s[i] ^ w[round * 16 + i];
508
+ };
509
+ addRoundKey(nr);
510
+ for (let round = nr - 1; round >= 1; round--) {
511
+ invShiftRows(s);
512
+ invSubBytes(s);
513
+ addRoundKey(round);
514
+ invMixColumns(s);
515
+ }
516
+ invShiftRows(s);
517
+ invSubBytes(s);
518
+ addRoundKey(0);
519
+ out.set(s, outOff);
520
+ }
521
+ function invSubBytes(s) {
522
+ for (let i = 0; i < 16; i++) s[i] = AES.inv[s[i]];
523
+ }
524
+ function invShiftRows(s) {
525
+ const t = s.slice();
526
+ for (let r = 1; r < 4; r++) for (let c = 0; c < 4; c++) s[c * 4 + r] = t[(c - r + 4) % 4 * 4 + r];
527
+ }
528
+ function invMixColumns(s) {
529
+ for (let c = 0; c < 4; c++) {
530
+ const o = c * 4;
531
+ const a0 = s[o];
532
+ const a1 = s[o + 1];
533
+ const a2 = s[o + 2];
534
+ const a3 = s[o + 3];
535
+ s[o] = gmul(a0, 14) ^ gmul(a1, 11) ^ gmul(a2, 13) ^ gmul(a3, 9);
536
+ s[o + 1] = gmul(a0, 9) ^ gmul(a1, 14) ^ gmul(a2, 11) ^ gmul(a3, 13);
537
+ s[o + 2] = gmul(a0, 13) ^ gmul(a1, 9) ^ gmul(a2, 14) ^ gmul(a3, 11);
538
+ s[o + 3] = gmul(a0, 11) ^ gmul(a1, 13) ^ gmul(a2, 9) ^ gmul(a3, 14);
539
+ }
540
+ }
541
+ function aesCbcDecrypt(key, iv, data, stripPad) {
542
+ const w = expandKey(key);
543
+ const nr = key.length / 4 + 6;
544
+ const blocks = Math.floor(data.length / 16);
545
+ const out = new Uint8Array(blocks * 16);
546
+ let prev = iv;
547
+ for (let i = 0; i < blocks; i++) {
548
+ const cipher = data.subarray(i * 16, i * 16 + 16);
549
+ decryptBlock(cipher, w, nr, out, i * 16);
550
+ for (let j = 0; j < 16; j++) out[i * 16 + j] = out[i * 16 + j] ^ prev[j];
551
+ prev = cipher;
552
+ }
553
+ if (!stripPad || out.length === 0) return out;
554
+ const pad = out[out.length - 1];
555
+ return pad >= 1 && pad <= 16 && pad <= out.length ? out.subarray(0, out.length - pad) : out;
556
+ }
557
+ function aesCbcEncrypt(key, iv, data) {
558
+ const w = expandKey(key);
559
+ const nr = key.length / 4 + 6;
560
+ const blocks = Math.floor(data.length / 16);
561
+ const out = new Uint8Array(blocks * 16);
562
+ let prev = iv;
563
+ for (let i = 0; i < blocks; i++) {
564
+ const block = data.slice(i * 16, i * 16 + 16);
565
+ for (let j = 0; j < 16; j++) block[j] = block[j] ^ prev[j];
566
+ encryptBlock(block, w, nr, out, i * 16);
567
+ prev = out.subarray(i * 16, i * 16 + 16);
568
+ }
569
+ return out;
570
+ }
571
+ function encryptBlock(input, w, nr, out, off) {
572
+ const s = input.slice(0, 16);
573
+ const addRoundKey = (round) => {
574
+ for (let i = 0; i < 16; i++) s[i] = s[i] ^ w[round * 16 + i];
575
+ };
576
+ addRoundKey(0);
577
+ for (let round = 1; round < nr; round++) {
578
+ subBytes(s);
579
+ shiftRows(s);
580
+ mixColumns(s);
581
+ addRoundKey(round);
582
+ }
583
+ subBytes(s);
584
+ shiftRows(s);
585
+ addRoundKey(nr);
586
+ out.set(s, off);
587
+ }
588
+ function subBytes(s) {
589
+ for (let i = 0; i < 16; i++) s[i] = AES.sbox[s[i]];
590
+ }
591
+ function shiftRows(s) {
592
+ const t = s.slice();
593
+ for (let r = 1; r < 4; r++) for (let c = 0; c < 4; c++) s[c * 4 + r] = t[(c + r) % 4 * 4 + r];
594
+ }
595
+ function mixColumns(s) {
596
+ for (let c = 0; c < 4; c++) {
597
+ const o = c * 4;
598
+ const a0 = s[o];
599
+ const a1 = s[o + 1];
600
+ const a2 = s[o + 2];
601
+ const a3 = s[o + 3];
602
+ s[o] = gmul(a0, 2) ^ gmul(a1, 3) ^ a2 ^ a3;
603
+ s[o + 1] = a0 ^ gmul(a1, 2) ^ gmul(a2, 3) ^ a3;
604
+ s[o + 2] = a0 ^ a1 ^ gmul(a2, 2) ^ gmul(a3, 3);
605
+ s[o + 3] = gmul(a0, 3) ^ a1 ^ a2 ^ gmul(a3, 2);
606
+ }
607
+ }
608
+ //#endregion
609
+ export { aesCbcDecrypt, aesCbcEncrypt, md5, rc4, sha256, sha384, sha512 };
@@ -0,0 +1,5 @@
1
+ import { PdfDict, PdfValue } from '../pdf/objects.js';
2
+ export interface Decryptor {
3
+ decrypt: (value: PdfValue, objNum: number, gen: number) => PdfValue;
4
+ }
5
+ export declare function buildDecryptor(encrypt: PdfDict, idArray: PdfValue | undefined, password?: string): Decryptor | undefined;