@protontech/openpgp 6.2.2 → 6.3.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 (43) hide show
  1. package/dist/lightweight/argon2id.min.mjs +1 -1
  2. package/dist/lightweight/argon2id.mjs +1 -1
  3. package/dist/lightweight/legacy_ciphers.min.mjs +1 -1
  4. package/dist/lightweight/legacy_ciphers.min.mjs.map +1 -1
  5. package/dist/lightweight/legacy_ciphers.mjs +1418 -1586
  6. package/dist/lightweight/nacl-fast.min.mjs +1 -1
  7. package/dist/lightweight/nacl-fast.mjs +1 -1
  8. package/dist/lightweight/noble_curves.min.mjs +7 -7
  9. package/dist/lightweight/noble_curves.min.mjs.map +1 -1
  10. package/dist/lightweight/noble_curves.mjs +15 -16
  11. package/dist/lightweight/noble_hashes.min.mjs +1 -1
  12. package/dist/lightweight/noble_hashes.min.mjs.map +1 -1
  13. package/dist/lightweight/noble_hashes.mjs +12 -15
  14. package/dist/lightweight/noble_post_quantum.min.mjs +1 -1
  15. package/dist/lightweight/noble_post_quantum.mjs +1 -1
  16. package/dist/lightweight/openpgp.min.mjs +3 -3
  17. package/dist/lightweight/openpgp.min.mjs.map +1 -1
  18. package/dist/lightweight/openpgp.mjs +12799 -13575
  19. package/dist/lightweight/sha512.min.mjs +1 -1
  20. package/dist/lightweight/sha512.mjs +1 -1
  21. package/dist/lightweight/unbzip2-stream.min.mjs +3 -0
  22. package/dist/lightweight/unbzip2-stream.min.mjs.map +1 -0
  23. package/dist/lightweight/unbzip2-stream.mjs +570 -0
  24. package/dist/node/openpgp.cjs +14794 -16070
  25. package/dist/node/openpgp.min.cjs +13 -13
  26. package/dist/node/openpgp.min.cjs.map +1 -1
  27. package/dist/node/openpgp.min.mjs +14 -14
  28. package/dist/node/openpgp.min.mjs.map +1 -1
  29. package/dist/node/openpgp.mjs +14794 -16070
  30. package/dist/openpgp.js +14794 -16070
  31. package/dist/openpgp.min.js +14 -14
  32. package/dist/openpgp.min.js.map +1 -1
  33. package/dist/openpgp.min.mjs +14 -14
  34. package/dist/openpgp.min.mjs.map +1 -1
  35. package/dist/openpgp.mjs +14794 -16070
  36. package/dist/types/config/config.d.ts +2 -0
  37. package/dist/types/enums.d.ts +1 -0
  38. package/dist/types/index.d.ts +21 -20
  39. package/dist/types/packet/grammar.d.ts +2 -0
  40. package/package.json +34 -33
  41. package/dist/lightweight/seek-bzip.min.mjs +0 -3
  42. package/dist/lightweight/seek-bzip.min.mjs.map +0 -1
  43. package/dist/lightweight/seek-bzip.mjs +0 -900
@@ -35,7 +35,9 @@ export interface Config {
35
35
  s2kType: enums.s2k.iterated | enums.s2k.argon2;
36
36
  s2kIterationCountByte: number;
37
37
  s2kArgon2Params: { passes: number, parallelism: number; memoryExponent: number; };
38
+ maxArgon2MemoryExponent: number;
38
39
  maxUserIDLength: number;
40
+ maxDecompressedMessageSize: number;
39
41
  knownNotations: string[];
40
42
  useEllipticFallback: boolean;
41
43
  rejectHashAlgorithms: Set<enums.hash>;
@@ -1,3 +1,4 @@
1
+ /* eslint-disable @typescript-eslint/no-duplicate-enum-values */
1
2
  declare namespace enums {
2
3
  export function read(type: typeof armor, e: armor): armorNames;
3
4
  export function read(type: typeof compression, e: compression): compressionNames;
@@ -1,4 +1,4 @@
1
- /* eslint-disable max-lines, @typescript-eslint/indent */
1
+ /* eslint-disable @stylistic/indent */
2
2
 
3
3
  /**
4
4
  * Type definitions for OpenPGP.js http://openpgpjs.org/
@@ -26,6 +26,8 @@ export type NodeWebStream<T extends Data> = GenericNodeWebStream<T>;
26
26
  export type Stream<T extends Data> = WebStream<T> | NodeWebStream<T>;
27
27
  export type MaybeStream<T extends Data> = T | Stream<T>;
28
28
  type MaybeArray<T> = T | Array<T>;
29
+ /** @dev this type is needed since jsdoc/better-doc fail to parse it when inlined as return type */
30
+ type StreamedIfStream<T extends MaybeStream<Data>, DataType extends Data> = T extends Stream<Data> ? WebStream<DataType> : DataType;
29
31
 
30
32
  /* ############## KEY #################### */
31
33
  // The Key and PublicKey types can be used interchangably since TS cannot detect the difference, as they have the same class properties.
@@ -305,7 +307,7 @@ export class Message<T extends MaybeStream<Data>> {
305
307
 
306
308
  /** Get literal data that is the body of the message
307
309
  */
308
- public getLiteralData(): (T extends Stream<Data> ? WebStream<Uint8Array<ArrayBuffer>> : Uint8Array<ArrayBuffer>) | null;
310
+ public getLiteralData(): StreamedIfStream<T, Uint8Array<ArrayBuffer>> | null;
309
311
 
310
312
  /** Returns the key IDs of the keys that signed the message
311
313
  */
@@ -313,7 +315,7 @@ export class Message<T extends MaybeStream<Data>> {
313
315
 
314
316
  /** Get literal data as text
315
317
  */
316
- public getText(): (T extends Stream<Data> ? WebStream<string> : string) | null;
318
+ public getText(): StreamedIfStream<T, string> | null;
317
319
 
318
320
  public getFilename(): string | null;
319
321
 
@@ -339,10 +341,9 @@ export class Message<T extends MaybeStream<Data>> {
339
341
  }
340
342
 
341
343
  /* ############## PACKET #################### */
342
-
343
- export declare abstract class BasePacket {
344
+ export declare abstract class BasePacket<AsyncRead extends boolean = false> {
344
345
  static readonly tag: enums.packet;
345
- public read(bytes: Uint8Array<ArrayBuffer>): void;
346
+ public read(bytes: Uint8Array<ArrayBuffer>): AsyncRead extends true ? Promise<void> : void;
346
347
  public write(): Uint8Array<ArrayBuffer>;
347
348
  }
348
349
 
@@ -351,7 +352,7 @@ export declare abstract class BasePacket {
351
352
  * - A Secret (Sub)Key Packet can always be used when a Public one is expected.
352
353
  * - A Subkey Packet cannot always be used when a Primary Key Packet is expected (and vice versa).
353
354
  */
354
- declare abstract class BasePublicKeyPacket extends BasePacket {
355
+ declare abstract class BasePublicKeyPacket extends BasePacket<true> {
355
356
  public algorithm: enums.publicKey;
356
357
  public created: Date;
357
358
  public version: number;
@@ -399,27 +400,27 @@ export class SecretSubkeyPacket extends BaseSecretKeyPacket {
399
400
  protected isSubkey(): true;
400
401
  }
401
402
 
402
- export class CompressedDataPacket extends BasePacket {
403
+ export class CompressedDataPacket extends BasePacket<true> {
403
404
  static readonly tag: enums.packet.compressedData;
404
405
  private compress(): void;
405
406
  private decompress(config?: Config): void;
406
407
  }
407
408
 
408
- export class SymEncryptedIntegrityProtectedDataPacket extends BasePacket {
409
+ export class SymEncryptedIntegrityProtectedDataPacket extends BasePacket<true> {
409
410
  static readonly tag: enums.packet.symEncryptedIntegrityProtectedData;
410
411
  }
411
412
 
412
- export class AEADEncryptedDataPacket extends BasePacket {
413
+ export class AEADEncryptedDataPacket extends BasePacket<true> {
413
414
  static readonly tag: enums.packet.aeadEncryptedData;
414
- private decrypt(sessionKeyAlgorithm: enums.symmetric, sessionKey: Uint8Array<ArrayBuffer>, config?: Config): void;
415
- private encrypt(sessionKeyAlgorithm: enums.symmetric, sessionKey: Uint8Array<ArrayBuffer>, config?: Config): void;
416
- private crypt(fn: Function, sessionKey: Uint8Array<ArrayBuffer>, data: MaybeStream<Uint8Array<ArrayBuffer>>): MaybeStream<Uint8Array<ArrayBuffer>>;
415
+ private decrypt(sessionKeyAlgorithm: enums.symmetric, sessionKey: Uint8Array<ArrayBuffer>, config?: Config): Promise<void>;
416
+ private encrypt(sessionKeyAlgorithm: enums.symmetric, sessionKey: Uint8Array<ArrayBuffer>, config?: Config): Promise<void>;
417
+ private crypt(fn: (block: Uint8Array<ArrayBuffer>) => Uint8Array<ArrayBuffer>, sessionKey: Uint8Array<ArrayBuffer>, data: MaybeStream<Uint8Array<ArrayBuffer>>): MaybeStream<Uint8Array<ArrayBuffer>>;
417
418
  }
418
419
 
419
420
  export class PublicKeyEncryptedSessionKeyPacket extends BasePacket {
420
421
  static readonly tag: enums.packet.publicKeyEncryptedSessionKey;
421
- private decrypt(keyPacket: SecretKeyPacket): void; // throws on error
422
- private encrypt(keyPacket: PublicKeyPacket): void; // throws on error
422
+ private decrypt(keyPacket: SecretKeyPacket): Promise<void>; // throws on error
423
+ private encrypt(keyPacket: PublicKeyPacket): Promise<void>; // throws on error
423
424
  }
424
425
 
425
426
  export class SymEncryptedSessionKeyPacket extends BasePacket {
@@ -428,7 +429,7 @@ export class SymEncryptedSessionKeyPacket extends BasePacket {
428
429
  private encrypt(passphrase: string, config?: Config): Promise<void>;
429
430
  }
430
431
 
431
- export class LiteralDataPacket extends BasePacket {
432
+ export class LiteralDataPacket extends BasePacket<true> {
432
433
  static readonly tag: enums.packet.literalData;
433
434
  private getText(clone?: boolean): MaybeStream<string>;
434
435
  private getBytes(clone?: boolean): MaybeStream<Uint8Array<ArrayBuffer>>;
@@ -441,8 +442,8 @@ export class LiteralDataPacket extends BasePacket {
441
442
 
442
443
  export class SymmetricallyEncryptedDataPacket extends BasePacket {
443
444
  static readonly tag: enums.packet.symmetricallyEncryptedData;
444
- private decrypt(sessionKeyAlgorithm: enums.symmetric, sessionKey: Uint8Array<ArrayBuffer>, config?: Config): void;
445
- private encrypt(sessionKeyAlgorithm: enums.symmetric, sessionKey: Uint8Array<ArrayBuffer>, config?: Config): void;
445
+ private decrypt(sessionKeyAlgorithm: enums.symmetric, sessionKey: Uint8Array<ArrayBuffer>, config?: Config): Promise<void>;
446
+ private encrypt(sessionKeyAlgorithm: enums.symmetric, sessionKey: Uint8Array<ArrayBuffer>, config?: Config): Promise<void>;
446
447
  }
447
448
 
448
449
  export class MarkerPacket extends BasePacket {
@@ -549,8 +550,8 @@ export type AnyKeyPacket = BasePublicKeyPacket;
549
550
 
550
551
  type AllowedPackets = Map<enums.packet, object>; // mapping to Packet classes (i.e. typeof LiteralDataPacket etc.)
551
552
  export class PacketList<T extends AnyPacket> extends Array<T> {
552
- static fromBinary(bytes: MaybeStream<Uint8Array<ArrayBuffer>>, allowedPackets: AllowedPackets, config?: Config): PacketList<AnyPacket>; // the packet types depend on`allowedPackets`
553
- public read(bytes: MaybeStream<Uint8Array<ArrayBuffer>>, allowedPackets: AllowedPackets, config?: Config): void;
553
+ static fromBinary(bytes: MaybeStream<Uint8Array<ArrayBuffer>>, allowedPackets: AllowedPackets, config?: Config): Promise<PacketList<AnyPacket>>; // the packet types depend on`allowedPackets`
554
+ public read(bytes: MaybeStream<Uint8Array<ArrayBuffer>>, allowedPackets: AllowedPackets, config?: Config): Promise<void>;
554
555
  public write(): Uint8Array<ArrayBuffer>;
555
556
  public filterByTag(...args: enums.packet[]): PacketList<T>;
556
557
  public indexOfTag(...tags: enums.packet[]): number[];
@@ -1,3 +1,4 @@
1
+ /** @access private */
1
2
  import enums from '../enums';
2
3
  export declare class GrammarError extends Error {
3
4
  constructor(...params: any[]);
@@ -10,6 +11,7 @@ export declare class GrammarError extends Error {
10
11
  * - `recordPacket` must be called for each packet in the sequence; the function will throw as soon as
11
12
  * an invalid packet is detected.
12
13
  * - `recordEnd` must be called at the end of the packet sequence to confirm its validity.
14
+ * @access private
13
15
  */
14
16
  export declare class MessageGrammarValidator {
15
17
  private state;
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@protontech/openpgp",
3
3
  "description": "OpenPGP.js is a Javascript implementation of the OpenPGP protocol. This is defined in RFC 4880.",
4
- "version": "6.2.2",
4
+ "version": "6.3.0",
5
5
  "license": "LGPL-3.0+",
6
6
  "homepage": "https://openpgpjs.org/",
7
7
  "engines": {
@@ -56,66 +56,67 @@
56
56
  "test-browserstack": "web-test-runner --config test/web-test-runner.browserstack.config.js",
57
57
  "coverage": "c8 npm test",
58
58
  "lint": "eslint .",
59
- "docs": "jsdoc --configure .jsdocrc.cjs --destination docs --recurse README.md src && printf '%s' 'docs.openpgpjs.org' > docs/CNAME",
59
+ "docs": "jsdoc --configure .jsdocrc.cjs --destination docs && printf '%s' 'docs.openpgpjs.org' > docs/CNAME",
60
60
  "preversion": "rm -rf dist docs node_modules && npm ci && npm test",
61
61
  "version": "npm run docs && git add -A docs",
62
62
  "postversion": "git push --follow-tags && npm publish"
63
63
  },
64
64
  "devDependencies": {
65
+ "@eslint/js": "^9.38.0",
65
66
  "@noble/ciphers": "^1.3.0",
66
- "@noble/curves": "^1.9.6",
67
+ "@noble/curves": "^1.9.7",
67
68
  "@noble/hashes": "^1.8.0",
68
69
  "@noble/post-quantum": "^0.2.1",
69
- "@openpgp/jsdoc": "^3.6.11",
70
+ "@openpgp/jsdoc": "^4.0.4",
70
71
  "@openpgp/seek-bzip": "^1.0.5-git",
71
72
  "@openpgp/tweetnacl": "^1.0.4-2",
72
- "@openpgp/web-stream-tools": "~0.1.3",
73
- "@protontech/eslint-plugin-enforce-uint8array-arraybuffer": "^1.0.0",
73
+ "@openpgp/unbzip2-stream": "^2.0.0",
74
+ "@openpgp/web-stream-tools": "~0.3.0",
75
+ "@protontech/eslint-plugin-enforce-uint8array-arraybuffer": "^2.0.0",
74
76
  "@rollup/plugin-alias": "^5.1.1",
75
- "@rollup/plugin-commonjs": "^28.0.6",
76
- "@rollup/plugin-node-resolve": "^16.0.1",
77
- "@rollup/plugin-replace": "^6.0.2",
77
+ "@rollup/plugin-commonjs": "^28.0.9",
78
+ "@rollup/plugin-node-resolve": "^16.0.3",
79
+ "@rollup/plugin-replace": "^6.0.3",
78
80
  "@rollup/plugin-terser": "^0.4.4",
79
- "@rollup/plugin-typescript": "^12.1.4",
81
+ "@rollup/plugin-typescript": "^12.3.0",
80
82
  "@rollup/plugin-wasm": "^6.2.2",
83
+ "@stylistic/eslint-plugin": "^5.5.0",
81
84
  "@types/chai": "^4.3.20",
82
- "@types/node": "^22.18.0",
85
+ "@types/node": "^24.9.2",
83
86
  "@types/sinon": "^17.0.4",
84
- "@typescript-eslint/parser": "^7.18.0",
85
- "@web/test-runner": "^0.19.0",
86
- "@web/test-runner-browserstack": "^0.8.0",
87
+ "@web/test-runner": "^0.20.2",
88
+ "@web/test-runner-browserstack": "npm:@openpgp/wtr-test-runner-browserstack@0.8.1-patch.0",
87
89
  "@web/test-runner-mocha": "^0.9.0",
88
90
  "@web/test-runner-playwright": "^0.11.1",
89
91
  "argon2id": "^1.0.1",
90
92
  "benchmark": "^2.1.4",
93
+ "better-docs": "^2.7.3",
91
94
  "bn.js": "^5.2.2",
92
95
  "c8": "^10.1.3",
93
- "chai": "^4.5.0",
94
- "chai-as-promised": "^7.1.2",
96
+ "chai": "^6.2.1",
97
+ "chai-as-promised": "^8.0.2",
95
98
  "cpy-cli": "^6.0.0",
96
99
  "eckey-utils": "^0.7.14",
97
- "eslint": "^8.57.1",
98
- "eslint-config-airbnb": "^19.0.4",
99
- "eslint-config-airbnb-base": "^15.0.0",
100
- "eslint-config-airbnb-typescript": "^18.0.0",
101
- "eslint-import-resolver-typescript": "^3.10.1",
102
- "eslint-plugin-chai-friendly": "^0.7.4",
100
+ "eslint": "^9.38.0",
101
+ "eslint-import-resolver-typescript": "^4.4.4",
102
+ "eslint-plugin-chai-friendly": "^1.1.0",
103
103
  "eslint-plugin-import": "^2.32.0",
104
- "eslint-plugin-unicorn": "^48.0.1",
104
+ "eslint-plugin-jsdoc": "^60.7.0",
105
+ "eslint-plugin-unicorn": "^61.0.2",
105
106
  "fflate": "^0.8.2",
106
- "mocha": "^11.7.1",
107
- "playwright": "^1.55.0",
108
- "rollup": "^4.48.1",
109
- "sinon": "^20.0.0",
110
- "ts-node": "^10.9.2",
111
- "tslib": "^2.8.1",
112
- "tsx": "^4.20.5",
113
- "typescript": "^5.9.2",
114
- "web-streams-polyfill": "^4.1.0"
107
+ "globals": "^16.4.0",
108
+ "mocha": "^11.7.4",
109
+ "playwright": "^1.57.0",
110
+ "rollup": "^4.52.5",
111
+ "sinon": "^21.0.0",
112
+ "tsx": "^4.20.6",
113
+ "typescript": "^5.9.3",
114
+ "typescript-eslint": "^8.46.2",
115
+ "web-streams-polyfill": "^4.2.0"
115
116
  },
116
117
  "overrides": {
117
118
  "@web/dev-server-core": "npm:@openpgp/wtr-dev-server-core@0.7.3-patch.1",
118
- "@web/test-runner-core": "npm:@openpgp/wtr-test-runner-core@0.13.4-patch.2"
119
+ "@web/test-runner-core": "npm:@openpgp/wtr-test-runner-core@0.13.4-patch.3"
119
120
  },
120
121
  "repository": {
121
122
  "type": "git",
@@ -1,3 +0,0 @@
1
- /*! OpenPGP.js v6.2.2 - 2025-09-02 - this is LGPL licensed code, see LICENSE/our website https://openpgpjs.org/ for more information. */
2
- "undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self&&self;function t(t,e){return e.forEach((function(e){e&&"string"!=typeof e&&!Array.isArray(e)&&Object.keys(e).forEach((function(r){if("default"!==r&&!(r in t)){var i=Object.getOwnPropertyDescriptor(e,r);Object.defineProperty(t,r,i.get?i:{enumerable:!0,get:function(){return e[r]}})}}))})),Object.freeze(t)}var e,r,i,n,o,a,f,s;function u(){if(r)return e;r=1;var t=[0,1,3,7,15,31,63,127,255],i=function(t){this.stream=t,this.bitOffset=0,this.curByte=0,this.hasByte=!1};return i.prototype._ensureByte=function(){this.hasByte||(this.curByte=this.stream.readByte(),this.hasByte=!0)},i.prototype.read=function(e){for(var r=0;e>0;){this._ensureByte();var i=8-this.bitOffset;if(e>=i)r<<=i,r|=t[i]&this.curByte,this.hasByte=!1,this.bitOffset=0,e-=i;else{r<<=e;var n=i-e;r|=(this.curByte&t[e]<<n)>>n,this.bitOffset+=e,e=0}}return r},i.prototype.seek=function(t){var e=t%8,r=(t-e)/8;this.bitOffset=e,this.stream.seek(r),this.hasByte=!1},i.prototype.pi=function(){var t,e=new Uint8Array(6);for(t=0;t<e.length;t++)e[t]=this.read(8);return function(t){return Array.prototype.map.call(t,(t=>("00"+t.toString(16)).slice(-2))).join("")}(e)},e=i}var h=function(){if(s)return f;s=1;var t,e=u(),r=function(){if(n)return i;n=1;var t=function(){};return t.prototype.readByte=function(){throw Error("abstract method readByte() not implemented")},t.prototype.read=function(t,e,r){for(var i=0;i<r;){var n=this.readByte();if(n<0)return 0===i?-1:i;t[e++]=n,i++}return i},t.prototype.seek=function(t){throw Error("abstract method seek() not implemented")},t.prototype.writeByte=function(t){throw Error("abstract method readByte() not implemented")},t.prototype.write=function(t,e,r){var i;for(i=0;i<r;i++)this.writeByte(t[e++]);return r},t.prototype.flush=function(){},i=t}(),h=a?o:(a=1,t=new Uint32Array([0,79764919,159529838,222504665,319059676,398814059,445009330,507990021,638119352,583659535,797628118,726387553,890018660,835552979,1015980042,944750013,1276238704,1221641927,1167319070,1095957929,1595256236,1540665371,1452775106,1381403509,1780037320,1859660671,1671105958,1733955601,2031960084,2111593891,1889500026,1952343757,2552477408,2632100695,2443283854,2506133561,2334638140,2414271883,2191915858,2254759653,3190512472,3135915759,3081330742,3009969537,2905550212,2850959411,2762807018,2691435357,3560074640,3505614887,3719321342,3648080713,3342211916,3287746299,3467911202,3396681109,4063920168,4143685023,4223187782,4286162673,3779000052,3858754371,3904687514,3967668269,881225847,809987520,1023691545,969234094,662832811,591600412,771767749,717299826,311336399,374308984,453813921,533576470,25881363,88864420,134795389,214552010,2023205639,2086057648,1897238633,1976864222,1804852699,1867694188,1645340341,1724971778,1587496639,1516133128,1461550545,1406951526,1302016099,1230646740,1142491917,1087903418,2896545431,2825181984,2770861561,2716262478,3215044683,3143675388,3055782693,3001194130,2326604591,2389456536,2200899649,2280525302,2578013683,2640855108,2418763421,2498394922,3769900519,3832873040,3912640137,3992402750,4088425275,4151408268,4197601365,4277358050,3334271071,3263032808,3476998961,3422541446,3585640067,3514407732,3694837229,3640369242,1762451694,1842216281,1619975040,1682949687,2047383090,2127137669,1938468188,2001449195,1325665622,1271206113,1183200824,1111960463,1543535498,1489069629,1434599652,1363369299,622672798,568075817,748617968,677256519,907627842,853037301,1067152940,995781531,51762726,131386257,177728840,240578815,269590778,349224269,429104020,491947555,4046411278,4126034873,4172115296,4234965207,3794477266,3874110821,3953728444,4016571915,3609705398,3555108353,3735388376,3664026991,3290680682,3236090077,3449943556,3378572211,3174993278,3120533705,3032266256,2961025959,2923101090,2868635157,2813903052,2742672763,2604032198,2683796849,2461293480,2524268063,2284983834,2364738477,2175806836,2238787779,1569362073,1498123566,1409854455,1355396672,1317987909,1246755826,1192025387,1137557660,2072149281,2135122070,1912620623,1992383480,1753615357,1816598090,1627664531,1707420964,295390185,358241886,404320391,483945776,43990325,106832002,186451547,266083308,932423249,861060070,1041341759,986742920,613929101,542559546,756411363,701822548,3316196985,3244833742,3425377559,3370778784,3601682597,3530312978,3744426955,3689838204,3819031489,3881883254,3928223919,4007849240,4037393693,4100235434,4180117107,4259748804,2310601993,2373574846,2151335527,2231098320,2596047829,2659030626,2470359227,2550115596,2947551409,2876312838,2788305887,2733848168,3165939309,3094707162,3040238851,2985771188]),o=function(){var e=4294967295;this.getCRC=function(){return~e>>>0},this.updateCRC=function(r){e=e<<8^t[255&(e>>>24^r)]},this.updateCRCRun=function(r,i){for(;i-- >0;)e=e<<8^t[255&(e>>>24^r)]}}),p=function(t,e){var r,i=t[e];for(r=e;r>0;r--)t[r]=t[r-1];return t[0]=i,i},d={OK:0,LAST_BLOCK:-1,NOT_BZIP_DATA:-2,UNEXPECTED_INPUT_EOF:-3,UNEXPECTED_OUTPUT_EOF:-4,DATA_ERROR:-5,OUT_OF_MEMORY:-6,OBSOLETE_INPUT:-7,END_OF_BLOCK:-8},c={};c[d.LAST_BLOCK]="Bad file checksum",c[d.NOT_BZIP_DATA]="Not bzip data",c[d.UNEXPECTED_INPUT_EOF]="Unexpected input EOF",c[d.UNEXPECTED_OUTPUT_EOF]="Unexpected output EOF",c[d.DATA_ERROR]="Data error",c[d.OUT_OF_MEMORY]="Out of memory",c[d.OBSOLETE_INPUT]="Obsolete (pre 0.9.5) bzip format not supported.";var _=function(t,e){var r=c[t]||"unknown error";e&&(r+=": "+e);var i=new TypeError(r);throw i.errorCode=t,i},b=function(t,e){this.writePos=this.writeCurrent=this.writeCount=0,this._start_bunzip(t,e)};b.prototype._init_block=function(){return this._get_next_block()?(this.blockCRC=new h,!0):(this.writeCount=-1,!1)},b.prototype._start_bunzip=function(t,r){var i=new Uint8Array(4);4===t.read(i,0,4)&&"BZh"===String.fromCharCode(i[0],i[1],i[2])||_(d.NOT_BZIP_DATA,"bad magic");var n=i[3]-48;(n<1||n>9)&&_(d.NOT_BZIP_DATA,"level out of range"),this.reader=new e(t),this.dbufSize=1e5*n,this.nextoutput=0,this.outputStream=r,this.streamCRC=0},b.prototype._get_next_block=function(){var t,e,r,i=this.reader,n=i.pi();if("177245385090"===n)return!1;"314159265359"!==n&&_(d.NOT_BZIP_DATA),this.targetBlockCRC=i.read(32)>>>0,this.streamCRC=(this.targetBlockCRC^(this.streamCRC<<1|this.streamCRC>>>31))>>>0,i.read(1)&&_(d.OBSOLETE_INPUT);var o=i.read(24);o>this.dbufSize&&_(d.DATA_ERROR,"initial position out of bounds");var a=i.read(16),f=new Uint8Array(256),s=0;for(t=0;t<16;t++)if(a&1<<15-t){var u=16*t;for(r=i.read(16),e=0;e<16;e++)r&1<<15-e&&(f[s++]=u+e)}var h=i.read(3);(h<2||h>6)&&_(d.DATA_ERROR);var c=i.read(15);0===c&&_(d.DATA_ERROR);var b=new Uint8Array(256);for(t=0;t<h;t++)b[t]=t;var y=new Uint8Array(c);for(t=0;t<c;t++){for(e=0;i.read(1);e++)e>=h&&_(d.DATA_ERROR);y[t]=p(b,e)}var R,l=s+2,C=[];for(e=0;e<h;e++){var A,w,O=new Uint8Array(l),v=new Uint16Array(21);for(a=i.read(5),t=0;t<l;t++){for(;(a<1||a>20)&&_(d.DATA_ERROR),i.read(1);)i.read(1)?a--:a++;O[t]=a}for(A=w=O[0],t=1;t<l;t++)O[t]>w?w=O[t]:O[t]<A&&(A=O[t]);R={},C.push(R),R.permute=new Uint16Array(258),R.limit=new Uint32Array(22),R.base=new Uint32Array(21),R.minLen=A,R.maxLen=w;var B=0;for(t=A;t<=w;t++)for(v[t]=R.limit[t]=0,a=0;a<l;a++)O[a]===t&&(R.permute[B++]=a);for(t=0;t<l;t++)v[O[t]]++;for(B=a=0,t=A;t<w;t++)B+=v[t],R.limit[t]=B-1,B<<=1,a+=v[t],R.base[t+1]=B-a;R.limit[w+1]=Number.MAX_VALUE,R.limit[w]=B+v[w]-1,R.base[A]=0}var E=new Uint32Array(256);for(t=0;t<256;t++)b[t]=t;var m,T=0,g=0,U=0,k=this.dbuf=new Uint32Array(this.dbufSize);for(l=0;;){for(l--||(l=49,U>=c&&_(d.DATA_ERROR),R=C[y[U++]]),t=R.minLen,e=i.read(t);t>R.maxLen&&_(d.DATA_ERROR),!(e<=R.limit[t]);t++)e=e<<1|i.read(1);((e-=R.base[t])<0||e>=258)&&_(d.DATA_ERROR);var D=R.permute[e];if(0!==D&&1!==D){if(T)for(T=0,g+a>this.dbufSize&&_(d.DATA_ERROR),E[m=f[b[0]]]+=a;a--;)k[g++]=m;if(D>s)break;g>=this.dbufSize&&_(d.DATA_ERROR),E[m=f[m=p(b,t=D-1)]]++,k[g++]=m}else T||(T=1,a=0),a+=0===D?T:2*T,T<<=1}for((o<0||o>=g)&&_(d.DATA_ERROR),e=0,t=0;t<256;t++)r=e+E[t],E[t]=e,e=r;for(t=0;t<g;t++)k[E[m=255&k[t]]]|=t<<8,E[m]++;var z=0,P=0,S=0;return g&&(P=255&(z=k[o]),z>>=8,S=-1),this.writePos=z,this.writeCurrent=P,this.writeCount=g,this.writeRun=S,!0},b.prototype._read_bunzip=function(t,e){var r,i,n;if(this.writeCount<0)return 0;var o=this.dbuf,a=this.writePos,f=this.writeCurrent,s=this.writeCount;this.outputsize;for(var u=this.writeRun;s;){for(s--,i=f,f=255&(a=o[a]),a>>=8,3==u++?(r=f,n=i,f=-1):(r=1,n=f),this.blockCRC.updateCRCRun(n,r);r--;)this.outputStream.writeByte(n),this.nextoutput++;f!=i&&(u=0)}return this.writeCount=s,this.blockCRC.getCRC()!==this.targetBlockCRC&&_(d.DATA_ERROR,"Bad block CRC (got "+this.blockCRC.getCRC().toString(16)+" expected "+this.targetBlockCRC.toString(16)+")"),this.nextoutput};var y=function(t){if("readByte"in t)return t;var e=new r;return e.pos=0,e.readByte=function(){return t[this.pos++]},e.seek=function(t){this.pos=t},e.eof=function(){return this.pos>=t.length},e},R=function(t){var e=new r,i=!0;if(t)if("number"==typeof t)e.buffer=new Uint8Array(t),i=!1;else{if("writeByte"in t)return t;e.buffer=t,i=!1}else e.buffer=new Uint8Array(16384);return e.pos=0,e.writeByte=function(t){if(i&&this.pos>=this.buffer.length){var e=new Uint8Array(2*this.buffer.length);e.set(this.buffer),this.buffer=e}this.buffer[this.pos++]=t},e.getBuffer=function(){if(this.pos!==this.buffer.length){if(!i)throw new TypeError("outputsize does not match decoded input");var t=new Uint8Array(this.pos);t.set(this.buffer.subarray(0,this.pos)),this.buffer=t}return this.buffer},e._coerced=!0,e};return f={Bunzip:b,Stream:r,Err:d,decode:function(t,e,r){for(var i=y(t),n=R(e),o=new b(i,n);!("eof"in i)||!i.eof();)if(o._init_block())o._read_bunzip();else{var a=o.reader.read(32)>>>0;if(a!==o.streamCRC&&_(d.DATA_ERROR,"Bad stream CRC (got "+o.streamCRC.toString(16)+" expected "+a.toString(16)+")"),!r||!("eof"in i)||i.eof())break;o._start_bunzip(i,n)}if("getBuffer"in n)return n.getBuffer()},decodeBlock:function(t,e,r){var i=y(t),n=R(r),o=new b(i,n);if(o.reader.seek(e),o._get_next_block()&&(o.blockCRC=new h,o.writeCopies=0,o._read_bunzip()),"getBuffer"in n)return n.getBuffer()},table:function(t,e,i){var n=new r;n.delegate=y(t),n.pos=0,n.readByte=function(){return this.pos++,this.delegate.readByte()},n.delegate.eof&&(n.eof=n.delegate.eof.bind(n.delegate));var o=new r;o.pos=0,o.writeByte=function(){this.pos++};for(var a=new b(n,o),f=a.dbufSize;!("eof"in n)||!n.eof();){var s=8*n.pos+a.reader.bitOffset;if(a.reader.hasByte&&(s-=8),a._init_block()){var u=o.pos;a._read_bunzip(),e(s,o.pos-u)}else{if(a.reader.read(32),!i||!("eof"in n)||n.eof())break;a._start_bunzip(n,o),console.assert(a.dbufSize===f,"shouldn't change block size within multistream file")}}}}}(),p=/*#__PURE__*/t({__proto__:null},[h]);export{p as i};
3
- //# sourceMappingURL=seek-bzip.min.mjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"seek-bzip.min.mjs","sources":["../../node_modules/@openpgp/seek-bzip/lib/bitreader.js","../../node_modules/@openpgp/seek-bzip/lib/index.js","../../node_modules/@openpgp/seek-bzip/lib/crc32.js","../../node_modules/@openpgp/seek-bzip/lib/stream.js"],"sourcesContent":["/*\nnode-bzip - a pure-javascript Node.JS module for decoding bzip2 data\n\nCopyright (C) 2012 Eli Skeggs\n\nThis library is free software; you can redistribute it and/or\nmodify it under the terms of the GNU Lesser General Public\nLicense as published by the Free Software Foundation; either\nversion 2.1 of the License, or (at your option) any later version.\n\nThis library is distributed in the hope that it will be useful,\nbut WITHOUT ANY WARRANTY; without even the implied warranty of\nMERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU\nLesser General Public License for more details.\n\nYou should have received a copy of the GNU Lesser General Public\nLicense along with this library; if not, see\nhttp://www.gnu.org/licenses/lgpl-2.1.html\n\nAdapted from bzip2.js, copyright 2011 antimatter15 (antimatter15@gmail.com).\n\nBased on micro-bunzip by Rob Landley (rob@landley.net).\n\nBased on bzip2 decompression code by Julian R Seward (jseward@acm.org),\nwhich also acknowledges contributions by Mike Burrows, David Wheeler,\nPeter Fenwick, Alistair Moffat, Radford Neal, Ian H. Witten,\nRobert Sedgewick, and Jon L. Bentley.\n*/\n\nvar BITMASK = [0x00, 0x01, 0x03, 0x07, 0x0F, 0x1F, 0x3F, 0x7F, 0xFF];\n\n// offset in bytes\nvar BitReader = function(stream) {\n this.stream = stream;\n this.bitOffset = 0;\n this.curByte = 0;\n this.hasByte = false;\n};\n\nBitReader.prototype._ensureByte = function() {\n if (!this.hasByte) {\n this.curByte = this.stream.readByte();\n this.hasByte = true;\n }\n};\n\n// reads bits from the buffer\nBitReader.prototype.read = function(bits) {\n var result = 0;\n while (bits > 0) {\n this._ensureByte();\n var remaining = 8 - this.bitOffset;\n // if we're in a byte\n if (bits >= remaining) {\n result <<= remaining;\n result |= BITMASK[remaining] & this.curByte;\n this.hasByte = false;\n this.bitOffset = 0;\n bits -= remaining;\n } else {\n result <<= bits;\n var shift = remaining - bits;\n result |= (this.curByte & (BITMASK[bits] << shift)) >> shift;\n this.bitOffset += bits;\n bits = 0;\n }\n }\n return result;\n};\n\n// seek to an arbitrary point in the buffer (expressed in bits)\nBitReader.prototype.seek = function(pos) {\n var n_bit = pos % 8;\n var n_byte = (pos - n_bit) / 8;\n this.bitOffset = n_bit;\n this.stream.seek(n_byte);\n this.hasByte = false;\n};\n\n// reads 6 bytes worth of data using the read method\nBitReader.prototype.pi = function() {\n var buf = new Uint8Array(6), i;\n for (i = 0; i < buf.length; i++) {\n buf[i] = this.read(8);\n }\n return bufToHex(buf);\n};\n\nfunction bufToHex(buf) {\n return Array.prototype.map.call(buf, x => ('00' + x.toString(16)).slice(-2)).join('');\n}\n\nmodule.exports = BitReader;\n","/*\nseek-bzip - a pure-javascript module for seeking within bzip2 data\n\nCopyright (C) 2013 C. Scott Ananian\nCopyright (C) 2012 Eli Skeggs\nCopyright (C) 2011 Kevin Kwok\n\nThis library is free software; you can redistribute it and/or\nmodify it under the terms of the GNU Lesser General Public\nLicense as published by the Free Software Foundation; either\nversion 2.1 of the License, or (at your option) any later version.\n\nThis library is distributed in the hope that it will be useful,\nbut WITHOUT ANY WARRANTY; without even the implied warranty of\nMERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU\nLesser General Public License for more details.\n\nYou should have received a copy of the GNU Lesser General Public\nLicense along with this library; if not, see\nhttp://www.gnu.org/licenses/lgpl-2.1.html\n\nAdapted from node-bzip, copyright 2012 Eli Skeggs.\nAdapted from bzip2.js, copyright 2011 Kevin Kwok (antimatter15@gmail.com).\n\nBased on micro-bunzip by Rob Landley (rob@landley.net).\n\nBased on bzip2 decompression code by Julian R Seward (jseward@acm.org),\nwhich also acknowledges contributions by Mike Burrows, David Wheeler,\nPeter Fenwick, Alistair Moffat, Radford Neal, Ian H. Witten,\nRobert Sedgewick, and Jon L. Bentley.\n*/\n\nvar BitReader = require('./bitreader');\nvar Stream = require('./stream');\nvar CRC32 = require('./crc32');\n\nvar MAX_HUFCODE_BITS = 20;\nvar MAX_SYMBOLS = 258;\nvar SYMBOL_RUNA = 0;\nvar SYMBOL_RUNB = 1;\nvar MIN_GROUPS = 2;\nvar MAX_GROUPS = 6;\nvar GROUP_SIZE = 50;\n\nvar WHOLEPI = \"314159265359\";\nvar SQRTPI = \"177245385090\";\n\nvar mtf = function(array, index) {\n var src = array[index], i;\n for (i = index; i > 0; i--) {\n array[i] = array[i-1];\n }\n array[0] = src;\n return src;\n};\n\nvar Err = {\n OK: 0,\n LAST_BLOCK: -1,\n NOT_BZIP_DATA: -2,\n UNEXPECTED_INPUT_EOF: -3,\n UNEXPECTED_OUTPUT_EOF: -4,\n DATA_ERROR: -5,\n OUT_OF_MEMORY: -6,\n OBSOLETE_INPUT: -7,\n END_OF_BLOCK: -8\n};\nvar ErrorMessages = {};\nErrorMessages[Err.LAST_BLOCK] = \"Bad file checksum\";\nErrorMessages[Err.NOT_BZIP_DATA] = \"Not bzip data\";\nErrorMessages[Err.UNEXPECTED_INPUT_EOF] = \"Unexpected input EOF\";\nErrorMessages[Err.UNEXPECTED_OUTPUT_EOF] = \"Unexpected output EOF\";\nErrorMessages[Err.DATA_ERROR] = \"Data error\";\nErrorMessages[Err.OUT_OF_MEMORY] = \"Out of memory\";\nErrorMessages[Err.OBSOLETE_INPUT] = \"Obsolete (pre 0.9.5) bzip format not supported.\";\n\nvar _throw = function(status, optDetail) {\n var msg = ErrorMessages[status] || 'unknown error';\n if (optDetail) { msg += ': '+optDetail; }\n var e = new TypeError(msg);\n e.errorCode = status;\n throw e;\n};\n\nvar Bunzip = function(inputStream, outputStream) {\n this.writePos = this.writeCurrent = this.writeCount = 0;\n\n this._start_bunzip(inputStream, outputStream);\n};\nBunzip.prototype._init_block = function() {\n var moreBlocks = this._get_next_block();\n if ( !moreBlocks ) {\n this.writeCount = -1;\n return false; /* no more blocks */\n }\n this.blockCRC = new CRC32();\n return true;\n};\n/* XXX micro-bunzip uses (inputStream, inputBuffer, len) as arguments */\nBunzip.prototype._start_bunzip = function(inputStream, outputStream) {\n /* Ensure that file starts with \"BZh['1'-'9'].\" */\n var buf = new Uint8Array(4);\n if (inputStream.read(buf, 0, 4) !== 4 ||\n String.fromCharCode(buf[0], buf[1], buf[2]) !== 'BZh')\n _throw(Err.NOT_BZIP_DATA, 'bad magic');\n\n var level = buf[3] - 0x30;\n if (level < 1 || level > 9)\n _throw(Err.NOT_BZIP_DATA, 'level out of range');\n\n this.reader = new BitReader(inputStream);\n\n /* Fourth byte (ascii '1'-'9'), indicates block size in units of 100k of\n uncompressed data. Allocate intermediate buffer for block. */\n this.dbufSize = 100000 * level;\n this.nextoutput = 0;\n this.outputStream = outputStream;\n this.streamCRC = 0;\n};\nBunzip.prototype._get_next_block = function() {\n var i, j, k;\n var reader = this.reader;\n // this is get_next_block() function from micro-bunzip:\n /* Read in header signature and CRC, then validate signature.\n (last block signature means CRC is for whole file, return now) */\n var h = reader.pi();\n if (h === SQRTPI) { // last block\n return false; /* no more blocks */\n }\n if (h !== WHOLEPI)\n _throw(Err.NOT_BZIP_DATA);\n this.targetBlockCRC = reader.read(32) >>> 0; // (convert to unsigned)\n this.streamCRC = (this.targetBlockCRC ^\n ((this.streamCRC << 1) | (this.streamCRC>>>31))) >>> 0;\n /* We can add support for blockRandomised if anybody complains. There was\n some code for this in busybox 1.0.0-pre3, but nobody ever noticed that\n it didn't actually work. */\n if (reader.read(1))\n _throw(Err.OBSOLETE_INPUT);\n var origPointer = reader.read(24);\n if (origPointer > this.dbufSize)\n _throw(Err.DATA_ERROR, 'initial position out of bounds');\n /* mapping table: if some byte values are never used (encoding things\n like ascii text), the compression code removes the gaps to have fewer\n symbols to deal with, and writes a sparse bitfield indicating which\n values were present. We make a translation table to convert the symbols\n back to the corresponding bytes. */\n var t = reader.read(16);\n var symToByte = new Uint8Array(256), symTotal = 0;\n for (i = 0; i < 16; i++) {\n if (t & (1 << (0xF - i))) {\n var o = i * 16;\n k = reader.read(16);\n for (j = 0; j < 16; j++)\n if (k & (1 << (0xF - j)))\n symToByte[symTotal++] = o + j;\n }\n }\n\n /* How many different huffman coding groups does this block use? */\n var groupCount = reader.read(3);\n if (groupCount < MIN_GROUPS || groupCount > MAX_GROUPS)\n _throw(Err.DATA_ERROR);\n /* nSelectors: Every GROUP_SIZE many symbols we select a new huffman coding\n group. Read in the group selector list, which is stored as MTF encoded\n bit runs. (MTF=Move To Front, as each value is used it's moved to the\n start of the list.) */\n var nSelectors = reader.read(15);\n if (nSelectors === 0)\n _throw(Err.DATA_ERROR);\n\n var mtfSymbol = new Uint8Array(256);\n for (i = 0; i < groupCount; i++)\n mtfSymbol[i] = i;\n\n var selectors = new Uint8Array(nSelectors); // was 32768...\n\n for (i = 0; i < nSelectors; i++) {\n /* Get next value */\n for (j = 0; reader.read(1); j++)\n if (j >= groupCount) _throw(Err.DATA_ERROR);\n /* Decode MTF to get the next selector */\n selectors[i] = mtf(mtfSymbol, j);\n }\n\n /* Read the huffman coding tables for each group, which code for symTotal\n literal symbols, plus two run symbols (RUNA, RUNB) */\n var symCount = symTotal + 2;\n var groups = [], hufGroup;\n for (j = 0; j < groupCount; j++) {\n var length = new Uint8Array(symCount), temp = new Uint16Array(MAX_HUFCODE_BITS + 1);\n /* Read huffman code lengths for each symbol. They're stored in\n a way similar to mtf; record a starting value for the first symbol,\n and an offset from the previous value for everys symbol after that. */\n t = reader.read(5); // lengths\n for (i = 0; i < symCount; i++) {\n for (;;) {\n if (t < 1 || t > MAX_HUFCODE_BITS) _throw(Err.DATA_ERROR);\n /* If first bit is 0, stop. Else second bit indicates whether\n to increment or decrement the value. */\n if(!reader.read(1))\n break;\n if(!reader.read(1))\n t++;\n else\n t--;\n }\n length[i] = t;\n }\n\n /* Find largest and smallest lengths in this group */\n var minLen, maxLen;\n minLen = maxLen = length[0];\n for (i = 1; i < symCount; i++) {\n if (length[i] > maxLen)\n maxLen = length[i];\n else if (length[i] < minLen)\n minLen = length[i];\n }\n\n /* Calculate permute[], base[], and limit[] tables from length[].\n *\n * permute[] is the lookup table for converting huffman coded symbols\n * into decoded symbols. base[] is the amount to subtract from the\n * value of a huffman symbol of a given length when using permute[].\n *\n * limit[] indicates the largest numerical value a symbol with a given\n * number of bits can have. This is how the huffman codes can vary in\n * length: each code with a value>limit[length] needs another bit.\n */\n hufGroup = {};\n groups.push(hufGroup);\n hufGroup.permute = new Uint16Array(MAX_SYMBOLS);\n hufGroup.limit = new Uint32Array(MAX_HUFCODE_BITS + 2);\n hufGroup.base = new Uint32Array(MAX_HUFCODE_BITS + 1);\n hufGroup.minLen = minLen;\n hufGroup.maxLen = maxLen;\n /* Calculate permute[]. Concurently, initialize temp[] and limit[]. */\n var pp = 0;\n for (i = minLen; i <= maxLen; i++) {\n temp[i] = hufGroup.limit[i] = 0;\n for (t = 0; t < symCount; t++)\n if (length[t] === i)\n hufGroup.permute[pp++] = t;\n }\n /* Count symbols coded for at each bit length */\n for (i = 0; i < symCount; i++)\n temp[length[i]]++;\n /* Calculate limit[] (the largest symbol-coding value at each bit\n * length, which is (previous limit<<1)+symbols at this level), and\n * base[] (number of symbols to ignore at each bit length, which is\n * limit minus the cumulative count of symbols coded for already). */\n pp = t = 0;\n for (i = minLen; i < maxLen; i++) {\n pp += temp[i];\n /* We read the largest possible symbol size and then unget bits\n after determining how many we need, and those extra bits could\n be set to anything. (They're noise from future symbols.) At\n each level we're really only interested in the first few bits,\n so here we set all the trailing to-be-ignored bits to 1 so they\n don't affect the value>limit[length] comparison. */\n hufGroup.limit[i] = pp - 1;\n pp <<= 1;\n t += temp[i];\n hufGroup.base[i + 1] = pp - t;\n }\n hufGroup.limit[maxLen + 1] = Number.MAX_VALUE; /* Sentinal value for reading next sym. */\n hufGroup.limit[maxLen] = pp + temp[maxLen] - 1;\n hufGroup.base[minLen] = 0;\n }\n /* We've finished reading and digesting the block header. Now read this\n block's huffman coded symbols from the file and undo the huffman coding\n and run length encoding, saving the result into dbuf[dbufCount++]=uc */\n\n /* Initialize symbol occurrence counters and symbol Move To Front table */\n var byteCount = new Uint32Array(256);\n for (i = 0; i < 256; i++)\n mtfSymbol[i] = i;\n /* Loop through compressed symbols. */\n var runPos = 0, dbufCount = 0, selector = 0, uc;\n var dbuf = this.dbuf = new Uint32Array(this.dbufSize);\n symCount = 0;\n for (;;) {\n /* Determine which huffman coding group to use. */\n if (!(symCount--)) {\n symCount = GROUP_SIZE - 1;\n if (selector >= nSelectors) { _throw(Err.DATA_ERROR); }\n hufGroup = groups[selectors[selector++]];\n }\n /* Read next huffman-coded symbol. */\n i = hufGroup.minLen;\n j = reader.read(i);\n for (;;i++) {\n if (i > hufGroup.maxLen) { _throw(Err.DATA_ERROR); }\n if (j <= hufGroup.limit[i])\n break;\n j = (j << 1) | reader.read(1);\n }\n /* Huffman decode value to get nextSym (with bounds checking) */\n j -= hufGroup.base[i];\n if (j < 0 || j >= MAX_SYMBOLS) { _throw(Err.DATA_ERROR); }\n var nextSym = hufGroup.permute[j];\n /* We have now decoded the symbol, which indicates either a new literal\n byte, or a repeated run of the most recent literal byte. First,\n check if nextSym indicates a repeated run, and if so loop collecting\n how many times to repeat the last literal. */\n if (nextSym === SYMBOL_RUNA || nextSym === SYMBOL_RUNB) {\n /* If this is the start of a new run, zero out counter */\n if (!runPos){\n runPos = 1;\n t = 0;\n }\n /* Neat trick that saves 1 symbol: instead of or-ing 0 or 1 at\n each bit position, add 1 or 2 instead. For example,\n 1011 is 1<<0 + 1<<1 + 2<<2. 1010 is 2<<0 + 2<<1 + 1<<2.\n You can make any bit pattern that way using 1 less symbol than\n the basic or 0/1 method (except all bits 0, which would use no\n symbols, but a run of length 0 doesn't mean anything in this\n context). Thus space is saved. */\n if (nextSym === SYMBOL_RUNA)\n t += runPos;\n else\n t += 2 * runPos;\n runPos <<= 1;\n continue;\n }\n /* When we hit the first non-run symbol after a run, we now know\n how many times to repeat the last literal, so append that many\n copies to our buffer of decoded symbols (dbuf) now. (The last\n literal used is the one at the head of the mtfSymbol array.) */\n if (runPos){\n runPos = 0;\n if (dbufCount + t > this.dbufSize) { _throw(Err.DATA_ERROR); }\n uc = symToByte[mtfSymbol[0]];\n byteCount[uc] += t;\n while (t--)\n dbuf[dbufCount++] = uc;\n }\n /* Is this the terminating symbol? */\n if (nextSym > symTotal)\n break;\n /* At this point, nextSym indicates a new literal character. Subtract\n one to get the position in the MTF array at which this literal is\n currently to be found. (Note that the result can't be -1 or 0,\n because 0 and 1 are RUNA and RUNB. But another instance of the\n first symbol in the mtf array, position 0, would have been handled\n as part of a run above. Therefore 1 unused mtf position minus\n 2 non-literal nextSym values equals -1.) */\n if (dbufCount >= this.dbufSize) { _throw(Err.DATA_ERROR); }\n i = nextSym - 1;\n uc = mtf(mtfSymbol, i);\n uc = symToByte[uc];\n /* We have our literal byte. Save it into dbuf. */\n byteCount[uc]++;\n dbuf[dbufCount++] = uc;\n }\n /* At this point, we've read all the huffman-coded symbols (and repeated\n runs) for this block from the input stream, and decoded them into the\n intermediate buffer. There are dbufCount many decoded bytes in dbuf[].\n Now undo the Burrows-Wheeler transform on dbuf.\n See http://dogma.net/markn/articles/bwt/bwt.htm\n */\n if (origPointer < 0 || origPointer >= dbufCount) { _throw(Err.DATA_ERROR); }\n /* Turn byteCount into cumulative occurrence counts of 0 to n-1. */\n j = 0;\n for (i = 0; i < 256; i++) {\n k = j + byteCount[i];\n byteCount[i] = j;\n j = k;\n }\n /* Figure out what order dbuf would be in if we sorted it. */\n for (i = 0; i < dbufCount; i++) {\n uc = dbuf[i] & 0xff;\n dbuf[byteCount[uc]] |= (i << 8);\n byteCount[uc]++;\n }\n /* Decode first byte by hand to initialize \"previous\" byte. Note that it\n doesn't get output, and if the first three characters are identical\n it doesn't qualify as a run (hence writeRunCountdown=5). */\n var pos = 0, current = 0, run = 0;\n if (dbufCount) {\n pos = dbuf[origPointer];\n current = (pos & 0xff);\n pos >>= 8;\n run = -1;\n }\n this.writePos = pos;\n this.writeCurrent = current;\n this.writeCount = dbufCount;\n this.writeRun = run;\n\n return true; /* more blocks to come */\n};\n/* Undo burrows-wheeler transform on intermediate buffer to produce output.\n If start_bunzip was initialized with out_fd=-1, then up to len bytes of\n data are written to outbuf. Return value is number of bytes written or\n error (all errors are negative numbers). If out_fd!=-1, outbuf and len\n are ignored, data is written to out_fd and return is RETVAL_OK or error.\n*/\nBunzip.prototype._read_bunzip = function(outputBuffer, len) {\n var copies, previous, outbyte;\n /* james@jamestaylor.org: writeCount goes to -1 when the buffer is fully\n decoded, which results in this returning RETVAL_LAST_BLOCK, also\n equal to -1... Confusing, I'm returning 0 here to indicate no\n bytes written into the buffer */\n if (this.writeCount < 0) { return 0; }\n\n var gotcount = 0;\n var dbuf = this.dbuf, pos = this.writePos, current = this.writeCurrent;\n var dbufCount = this.writeCount, outputsize = this.outputsize;\n var run = this.writeRun;\n\n while (dbufCount) {\n dbufCount--;\n previous = current;\n pos = dbuf[pos];\n current = pos & 0xff;\n pos >>= 8;\n if (run++ === 3){\n copies = current;\n outbyte = previous;\n current = -1;\n } else {\n copies = 1;\n outbyte = current;\n }\n this.blockCRC.updateCRCRun(outbyte, copies);\n while (copies--) {\n this.outputStream.writeByte(outbyte);\n this.nextoutput++;\n }\n if (current != previous)\n run = 0;\n }\n this.writeCount = dbufCount;\n // check CRC\n if (this.blockCRC.getCRC() !== this.targetBlockCRC) {\n _throw(Err.DATA_ERROR, \"Bad block CRC \"+\n \"(got \"+this.blockCRC.getCRC().toString(16)+\n \" expected \"+this.targetBlockCRC.toString(16)+\")\");\n }\n return this.nextoutput;\n};\n\nvar coerceInputStream = function(input) {\n if ('readByte' in input) { return input; }\n var inputStream = new Stream();\n inputStream.pos = 0;\n inputStream.readByte = function() { return input[this.pos++]; };\n inputStream.seek = function(pos) { this.pos = pos; };\n inputStream.eof = function() { return this.pos >= input.length; };\n return inputStream;\n};\nvar coerceOutputStream = function(output) {\n var outputStream = new Stream();\n var resizeOk = true;\n if (output) {\n if (typeof(output)==='number') {\n outputStream.buffer = new Uint8Array(output);\n resizeOk = false;\n } else if ('writeByte' in output) {\n return output;\n } else {\n outputStream.buffer = output;\n resizeOk = false;\n }\n } else {\n outputStream.buffer = new Uint8Array(16384);\n }\n outputStream.pos = 0;\n outputStream.writeByte = function(_byte) {\n if (resizeOk && this.pos >= this.buffer.length) {\n var newBuffer = new Uint8Array(this.buffer.length*2);\n newBuffer.set(this.buffer);\n this.buffer = newBuffer;\n }\n this.buffer[this.pos++] = _byte;\n };\n outputStream.getBuffer = function() {\n // trim buffer\n if (this.pos !== this.buffer.length) {\n if (!resizeOk)\n throw new TypeError('outputsize does not match decoded input');\n var newBuffer = new Uint8Array(this.pos);\n newBuffer.set(this.buffer.subarray(0, this.pos));\n this.buffer = newBuffer;\n }\n return this.buffer;\n };\n outputStream._coerced = true;\n return outputStream;\n};\n\n/* Static helper functions */\n// 'input' can be a stream or a buffer\n// 'output' can be a stream or a buffer or a number (buffer size)\nconst decode = function(input, output, multistream) {\n // make a stream from a buffer, if necessary\n var inputStream = coerceInputStream(input);\n var outputStream = coerceOutputStream(output);\n\n var bz = new Bunzip(inputStream, outputStream);\n while (true) {\n if ('eof' in inputStream && inputStream.eof()) break;\n if (bz._init_block()) {\n bz._read_bunzip();\n } else {\n var targetStreamCRC = bz.reader.read(32) >>> 0; // (convert to unsigned)\n if (targetStreamCRC !== bz.streamCRC) {\n _throw(Err.DATA_ERROR, \"Bad stream CRC \"+\n \"(got \"+bz.streamCRC.toString(16)+\n \" expected \"+targetStreamCRC.toString(16)+\")\");\n }\n if (multistream &&\n 'eof' in inputStream &&\n !inputStream.eof()) {\n // note that start_bunzip will also resync the bit reader to next byte\n bz._start_bunzip(inputStream, outputStream);\n } else break;\n }\n }\n if ('getBuffer' in outputStream)\n return outputStream.getBuffer();\n};\nconst decodeBlock = function(input, pos, output) {\n // make a stream from a buffer, if necessary\n var inputStream = coerceInputStream(input);\n var outputStream = coerceOutputStream(output);\n var bz = new Bunzip(inputStream, outputStream);\n bz.reader.seek(pos);\n /* Fill the decode buffer for the block */\n var moreBlocks = bz._get_next_block();\n if (moreBlocks) {\n /* Init the CRC for writing */\n bz.blockCRC = new CRC32();\n\n /* Zero this so the current byte from before the seek is not written */\n bz.writeCopies = 0;\n\n /* Decompress the block and write to stdout */\n bz._read_bunzip();\n // XXX keep writing?\n }\n if ('getBuffer' in outputStream)\n return outputStream.getBuffer();\n};\n/* Reads bzip2 file from stream or buffer `input`, and invoke\n * `callback(position, size)` once for each bzip2 block,\n * where position gives the starting position (in *bits*)\n * and size gives uncompressed size of the block (in *bytes*). */\nconst table = function(input, callback, multistream) {\n // make a stream from a buffer, if necessary\n var inputStream = new Stream();\n inputStream.delegate = coerceInputStream(input);\n inputStream.pos = 0;\n inputStream.readByte = function() {\n this.pos++;\n return this.delegate.readByte();\n };\n if (inputStream.delegate.eof) {\n inputStream.eof = inputStream.delegate.eof.bind(inputStream.delegate);\n }\n var outputStream = new Stream();\n outputStream.pos = 0;\n outputStream.writeByte = function() { this.pos++; };\n\n var bz = new Bunzip(inputStream, outputStream);\n var blockSize = bz.dbufSize;\n while (true) {\n if ('eof' in inputStream && inputStream.eof()) break;\n\n var position = inputStream.pos*8 + bz.reader.bitOffset;\n if (bz.reader.hasByte) { position -= 8; }\n\n if (bz._init_block()) {\n var start = outputStream.pos;\n bz._read_bunzip();\n callback(position, outputStream.pos - start);\n } else {\n var crc = bz.reader.read(32); // (but we ignore the crc)\n if (multistream &&\n 'eof' in inputStream &&\n !inputStream.eof()) {\n // note that start_bunzip will also resync the bit reader to next byte\n bz._start_bunzip(inputStream, outputStream);\n console.assert(bz.dbufSize === blockSize,\n \"shouldn't change block size within multistream file\");\n } else break;\n }\n }\n};\n\nmodule.exports = {\n Bunzip,\n Stream,\n Err,\n decode,\n decodeBlock,\n table\n};\n","/* CRC32, used in Bzip2 implementation.\n * This is a port of CRC32.java from the jbzip2 implementation at\n * https://code.google.com/p/jbzip2\n * which is:\n * Copyright (c) 2011 Matthew Francis\n *\n * Permission is hereby granted, free of charge, to any person\n * obtaining a copy of this software and associated documentation\n * files (the \"Software\"), to deal in the Software without\n * restriction, including without limitation the rights to use,\n * copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the\n * Software is furnished to do so, subject to the following\n * conditions:\n *\n * The above copyright notice and this permission notice shall be\n * included in all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\n * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES\n * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\n * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT\n * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,\n * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR\n * OTHER DEALINGS IN THE SOFTWARE.\n * This JavaScript implementation is:\n * Copyright (c) 2013 C. Scott Ananian\n * with the same licensing terms as Matthew Francis' original implementation.\n */\nmodule.exports = (function() {\n\n /**\n * A static CRC lookup table\n */\n var crc32Lookup = new Uint32Array([\n 0x00000000, 0x04c11db7, 0x09823b6e, 0x0d4326d9, 0x130476dc, 0x17c56b6b, 0x1a864db2, 0x1e475005,\n 0x2608edb8, 0x22c9f00f, 0x2f8ad6d6, 0x2b4bcb61, 0x350c9b64, 0x31cd86d3, 0x3c8ea00a, 0x384fbdbd,\n 0x4c11db70, 0x48d0c6c7, 0x4593e01e, 0x4152fda9, 0x5f15adac, 0x5bd4b01b, 0x569796c2, 0x52568b75,\n 0x6a1936c8, 0x6ed82b7f, 0x639b0da6, 0x675a1011, 0x791d4014, 0x7ddc5da3, 0x709f7b7a, 0x745e66cd,\n 0x9823b6e0, 0x9ce2ab57, 0x91a18d8e, 0x95609039, 0x8b27c03c, 0x8fe6dd8b, 0x82a5fb52, 0x8664e6e5,\n 0xbe2b5b58, 0xbaea46ef, 0xb7a96036, 0xb3687d81, 0xad2f2d84, 0xa9ee3033, 0xa4ad16ea, 0xa06c0b5d,\n 0xd4326d90, 0xd0f37027, 0xddb056fe, 0xd9714b49, 0xc7361b4c, 0xc3f706fb, 0xceb42022, 0xca753d95,\n 0xf23a8028, 0xf6fb9d9f, 0xfbb8bb46, 0xff79a6f1, 0xe13ef6f4, 0xe5ffeb43, 0xe8bccd9a, 0xec7dd02d,\n 0x34867077, 0x30476dc0, 0x3d044b19, 0x39c556ae, 0x278206ab, 0x23431b1c, 0x2e003dc5, 0x2ac12072,\n 0x128e9dcf, 0x164f8078, 0x1b0ca6a1, 0x1fcdbb16, 0x018aeb13, 0x054bf6a4, 0x0808d07d, 0x0cc9cdca,\n 0x7897ab07, 0x7c56b6b0, 0x71159069, 0x75d48dde, 0x6b93dddb, 0x6f52c06c, 0x6211e6b5, 0x66d0fb02,\n 0x5e9f46bf, 0x5a5e5b08, 0x571d7dd1, 0x53dc6066, 0x4d9b3063, 0x495a2dd4, 0x44190b0d, 0x40d816ba,\n 0xaca5c697, 0xa864db20, 0xa527fdf9, 0xa1e6e04e, 0xbfa1b04b, 0xbb60adfc, 0xb6238b25, 0xb2e29692,\n 0x8aad2b2f, 0x8e6c3698, 0x832f1041, 0x87ee0df6, 0x99a95df3, 0x9d684044, 0x902b669d, 0x94ea7b2a,\n 0xe0b41de7, 0xe4750050, 0xe9362689, 0xedf73b3e, 0xf3b06b3b, 0xf771768c, 0xfa325055, 0xfef34de2,\n 0xc6bcf05f, 0xc27dede8, 0xcf3ecb31, 0xcbffd686, 0xd5b88683, 0xd1799b34, 0xdc3abded, 0xd8fba05a,\n 0x690ce0ee, 0x6dcdfd59, 0x608edb80, 0x644fc637, 0x7a089632, 0x7ec98b85, 0x738aad5c, 0x774bb0eb,\n 0x4f040d56, 0x4bc510e1, 0x46863638, 0x42472b8f, 0x5c007b8a, 0x58c1663d, 0x558240e4, 0x51435d53,\n 0x251d3b9e, 0x21dc2629, 0x2c9f00f0, 0x285e1d47, 0x36194d42, 0x32d850f5, 0x3f9b762c, 0x3b5a6b9b,\n 0x0315d626, 0x07d4cb91, 0x0a97ed48, 0x0e56f0ff, 0x1011a0fa, 0x14d0bd4d, 0x19939b94, 0x1d528623,\n 0xf12f560e, 0xf5ee4bb9, 0xf8ad6d60, 0xfc6c70d7, 0xe22b20d2, 0xe6ea3d65, 0xeba91bbc, 0xef68060b,\n 0xd727bbb6, 0xd3e6a601, 0xdea580d8, 0xda649d6f, 0xc423cd6a, 0xc0e2d0dd, 0xcda1f604, 0xc960ebb3,\n 0xbd3e8d7e, 0xb9ff90c9, 0xb4bcb610, 0xb07daba7, 0xae3afba2, 0xaafbe615, 0xa7b8c0cc, 0xa379dd7b,\n 0x9b3660c6, 0x9ff77d71, 0x92b45ba8, 0x9675461f, 0x8832161a, 0x8cf30bad, 0x81b02d74, 0x857130c3,\n 0x5d8a9099, 0x594b8d2e, 0x5408abf7, 0x50c9b640, 0x4e8ee645, 0x4a4ffbf2, 0x470cdd2b, 0x43cdc09c,\n 0x7b827d21, 0x7f436096, 0x7200464f, 0x76c15bf8, 0x68860bfd, 0x6c47164a, 0x61043093, 0x65c52d24,\n 0x119b4be9, 0x155a565e, 0x18197087, 0x1cd86d30, 0x029f3d35, 0x065e2082, 0x0b1d065b, 0x0fdc1bec,\n 0x3793a651, 0x3352bbe6, 0x3e119d3f, 0x3ad08088, 0x2497d08d, 0x2056cd3a, 0x2d15ebe3, 0x29d4f654,\n 0xc5a92679, 0xc1683bce, 0xcc2b1d17, 0xc8ea00a0, 0xd6ad50a5, 0xd26c4d12, 0xdf2f6bcb, 0xdbee767c,\n 0xe3a1cbc1, 0xe760d676, 0xea23f0af, 0xeee2ed18, 0xf0a5bd1d, 0xf464a0aa, 0xf9278673, 0xfde69bc4,\n 0x89b8fd09, 0x8d79e0be, 0x803ac667, 0x84fbdbd0, 0x9abc8bd5, 0x9e7d9662, 0x933eb0bb, 0x97ffad0c,\n 0xafb010b1, 0xab710d06, 0xa6322bdf, 0xa2f33668, 0xbcb4666d, 0xb8757bda, 0xb5365d03, 0xb1f740b4\n ]);\n\n var CRC32 = function() {\n /**\n * The current CRC\n */\n var crc = 0xffffffff;\n\n /**\n * @return The current CRC\n */\n this.getCRC = function() {\n return (~crc) >>> 0; // return an unsigned value\n };\n\n /**\n * Update the CRC with a single byte\n * @param value The value to update the CRC with\n */\n this.updateCRC = function(value) {\n crc = (crc << 8) ^ crc32Lookup[((crc >>> 24) ^ value) & 0xff];\n };\n\n /**\n * Update the CRC with a sequence of identical bytes\n * @param value The value to update the CRC with\n * @param count The number of bytes\n */\n this.updateCRCRun = function(value, count) {\n while (count-- > 0) {\n crc = (crc << 8) ^ crc32Lookup[((crc >>> 24) ^ value) & 0xff];\n }\n };\n };\n return CRC32;\n})();\n","/* very simple input/output stream interface */\nvar Stream = function() {\n};\n\n// input streams //////////////\n/** Returns the next byte, or -1 for EOF. */\nStream.prototype.readByte = function() {\n throw new Error(\"abstract method readByte() not implemented\");\n};\n/** Attempts to fill the buffer; returns number of bytes read, or\n * -1 for EOF. */\nStream.prototype.read = function(buffer, bufOffset, length) {\n var bytesRead = 0;\n while (bytesRead < length) {\n var c = this.readByte();\n if (c < 0) { // EOF\n return (bytesRead===0) ? -1 : bytesRead;\n }\n buffer[bufOffset++] = c;\n bytesRead++;\n }\n return bytesRead;\n};\nStream.prototype.seek = function(new_pos) {\n throw new Error(\"abstract method seek() not implemented\");\n};\n\n// output streams ///////////\nStream.prototype.writeByte = function(_byte) {\n throw new Error(\"abstract method readByte() not implemented\");\n};\nStream.prototype.write = function(buffer, bufOffset, length) {\n var i;\n for (i=0; i<length; i++) {\n this.writeByte(buffer[bufOffset++]);\n }\n return length;\n};\nStream.prototype.flush = function() {\n};\n\nmodule.exports = Stream;\n"],"names":["BITMASK","BitReader","stream","this","bitOffset","curByte","hasByte","prototype","_ensureByte","readByte","read","bits","result","remaining","shift","seek","pos","n_bit","n_byte","pi","i","buf","Uint8Array","length","Array","map","call","x","toString","slice","join","bufToHex","bitreader","crc32Lookup","require$$0","Stream","Error","buffer","bufOffset","bytesRead","c","new_pos","writeByte","_byte","write","flush","require$$1","CRC32","Uint32Array","crc32","crc","getCRC","updateCRC","value","updateCRCRun","count","mtf","array","index","src","Err","OK","LAST_BLOCK","NOT_BZIP_DATA","UNEXPECTED_INPUT_EOF","UNEXPECTED_OUTPUT_EOF","DATA_ERROR","OUT_OF_MEMORY","OBSOLETE_INPUT","END_OF_BLOCK","ErrorMessages","_throw","status","optDetail","msg","e","TypeError","errorCode","Bunzip","inputStream","outputStream","writePos","writeCurrent","writeCount","_start_bunzip","_init_block","_get_next_block","blockCRC","String","fromCharCode","level","reader","dbufSize","nextoutput","streamCRC","j","k","h","targetBlockCRC","origPointer","t","symToByte","symTotal","o","groupCount","nSelectors","mtfSymbol","selectors","hufGroup","symCount","groups","minLen","maxLen","temp","Uint16Array","MAX_HUFCODE_BITS","push","permute","limit","base","pp","Number","MAX_VALUE","byteCount","uc","runPos","dbufCount","selector","dbuf","GROUP_SIZE","nextSym","current","run","writeRun","_read_bunzip","outputBuffer","len","copies","previous","outbyte","outputsize","coerceInputStream","input","eof","coerceOutputStream","output","resizeOk","newBuffer","set","getBuffer","subarray","_coerced","lib","decode","multistream","bz","targetStreamCRC","decodeBlock","writeCopies","table","callback","delegate","bind","blockSize","position","start","console","assert"],"mappings":"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","x_google_ignoreList":[0,1,2,3]}