@aws-sdk/sha256-tree-hash 3.29.0 → 3.36.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/CHANGELOG.md CHANGED
@@ -3,6 +3,44 @@
3
3
  All notable changes to this project will be documented in this file.
4
4
  See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
5
5
 
6
+ # [3.36.0](https://github.com/aws/aws-sdk-js-v3/compare/v3.35.0...v3.36.0) (2021-10-08)
7
+
8
+
9
+ ### Features
10
+
11
+ * publish files in dist-* only ([#2873](https://github.com/aws/aws-sdk-js-v3/issues/2873)) ([53b4243](https://github.com/aws/aws-sdk-js-v3/commit/53b4243b066f25ff2412d5f0dea1036054b2df32))
12
+
13
+
14
+
15
+
16
+
17
+ # [3.35.0](https://github.com/aws/aws-sdk-js-v3/compare/v3.34.0...v3.35.0) (2021-10-04)
18
+
19
+ **Note:** Version bump only for package @aws-sdk/sha256-tree-hash
20
+
21
+
22
+
23
+
24
+
25
+ # [3.34.0](https://github.com/aws/aws-sdk-js-v3/compare/v3.33.0...v3.34.0) (2021-09-24)
26
+
27
+
28
+ ### Features
29
+
30
+ * **non-clients:** remove comments from transpiled JS files ([#2813](https://github.com/aws/aws-sdk-js-v3/issues/2813)) ([e6fc7f3](https://github.com/aws/aws-sdk-js-v3/commit/e6fc7f3e0fa74785590ac19e7ed143c916bb9b6e))
31
+
32
+
33
+
34
+
35
+
36
+ # [3.32.0](https://github.com/aws/aws-sdk-js-v3/compare/v3.31.0...v3.32.0) (2021-09-17)
37
+
38
+ **Note:** Version bump only for package @aws-sdk/sha256-tree-hash
39
+
40
+
41
+
42
+
43
+
6
44
  # [3.29.0](https://github.com/aws/aws-sdk-js-v3/compare/v3.28.0...v3.29.0) (2021-09-02)
7
45
 
8
46
  **Note:** Version bump only for package @aws-sdk/sha256-tree-hash
@@ -0,0 +1,77 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.TreeHash = void 0;
4
+ const MiB = 1048576;
5
+ class TreeHash {
6
+ constructor(Sha256, fromUtf8) {
7
+ this.Sha256 = Sha256;
8
+ this.fromUtf8 = fromUtf8;
9
+ this.collectedHashDigests = [];
10
+ }
11
+ hashBuffer() {
12
+ if (!this.buffer) {
13
+ return;
14
+ }
15
+ let remainingSize = this.buffer.byteLength;
16
+ while (remainingSize >= MiB) {
17
+ const hash = new this.Sha256();
18
+ hash.update(this.buffer.subarray(0, MiB));
19
+ this.collectedHashDigests.push(hash.digest());
20
+ this.buffer = this.buffer.subarray(MiB);
21
+ remainingSize = this.buffer.byteLength;
22
+ }
23
+ }
24
+ update(data) {
25
+ const chunk = this.convertToBuffer(data);
26
+ if (!this.buffer) {
27
+ this.buffer = chunk;
28
+ }
29
+ else {
30
+ const totalSize = this.buffer.byteLength + chunk.byteLength;
31
+ const tempBuffer = new Uint8Array(totalSize);
32
+ tempBuffer.set(this.buffer);
33
+ tempBuffer.set(chunk, this.buffer.byteLength);
34
+ this.buffer = tempBuffer;
35
+ }
36
+ this.hashBuffer();
37
+ }
38
+ async digest() {
39
+ let collectedHashDigests = this.collectedHashDigests;
40
+ this.collectedHashDigests = [];
41
+ if (this.buffer && this.buffer.byteLength > 0) {
42
+ const smallHash = new this.Sha256();
43
+ smallHash.update(this.buffer);
44
+ collectedHashDigests.push(smallHash.digest());
45
+ this.buffer = void 0;
46
+ }
47
+ while (collectedHashDigests.length > 1) {
48
+ const higherLevelHashDigests = [];
49
+ for (let i = 0; i < collectedHashDigests.length; i += 2) {
50
+ if (i + 1 < collectedHashDigests.length) {
51
+ const [digest1, digest2] = await Promise.all([collectedHashDigests[i], collectedHashDigests[i + 1]]);
52
+ const chunk = new Uint8Array(digest1.byteLength + digest2.byteLength);
53
+ chunk.set(digest1);
54
+ chunk.set(digest2, digest1.byteLength);
55
+ const hash = new this.Sha256();
56
+ hash.update(chunk);
57
+ higherLevelHashDigests.push(hash.digest());
58
+ }
59
+ else {
60
+ higherLevelHashDigests.push(collectedHashDigests[i]);
61
+ }
62
+ }
63
+ collectedHashDigests = higherLevelHashDigests;
64
+ }
65
+ return collectedHashDigests[0];
66
+ }
67
+ convertToBuffer(data) {
68
+ if (typeof data === "string") {
69
+ return this.fromUtf8(data);
70
+ }
71
+ if (ArrayBuffer.isView(data)) {
72
+ return new Uint8Array(data.buffer, data.byteOffset, data.byteLength / Uint8Array.BYTES_PER_ELEMENT);
73
+ }
74
+ return new Uint8Array(data);
75
+ }
76
+ }
77
+ exports.TreeHash = TreeHash;
@@ -0,0 +1,94 @@
1
+ import { __awaiter, __generator, __read } from "tslib";
2
+ var MiB = 1048576;
3
+ var TreeHash = (function () {
4
+ function TreeHash(Sha256, fromUtf8) {
5
+ this.Sha256 = Sha256;
6
+ this.fromUtf8 = fromUtf8;
7
+ this.collectedHashDigests = [];
8
+ }
9
+ TreeHash.prototype.hashBuffer = function () {
10
+ if (!this.buffer) {
11
+ return;
12
+ }
13
+ var remainingSize = this.buffer.byteLength;
14
+ while (remainingSize >= MiB) {
15
+ var hash = new this.Sha256();
16
+ hash.update(this.buffer.subarray(0, MiB));
17
+ this.collectedHashDigests.push(hash.digest());
18
+ this.buffer = this.buffer.subarray(MiB);
19
+ remainingSize = this.buffer.byteLength;
20
+ }
21
+ };
22
+ TreeHash.prototype.update = function (data) {
23
+ var chunk = this.convertToBuffer(data);
24
+ if (!this.buffer) {
25
+ this.buffer = chunk;
26
+ }
27
+ else {
28
+ var totalSize = this.buffer.byteLength + chunk.byteLength;
29
+ var tempBuffer = new Uint8Array(totalSize);
30
+ tempBuffer.set(this.buffer);
31
+ tempBuffer.set(chunk, this.buffer.byteLength);
32
+ this.buffer = tempBuffer;
33
+ }
34
+ this.hashBuffer();
35
+ };
36
+ TreeHash.prototype.digest = function () {
37
+ return __awaiter(this, void 0, void 0, function () {
38
+ var collectedHashDigests, smallHash, higherLevelHashDigests, i, _a, digest1, digest2, chunk, hash;
39
+ return __generator(this, function (_b) {
40
+ switch (_b.label) {
41
+ case 0:
42
+ collectedHashDigests = this.collectedHashDigests;
43
+ this.collectedHashDigests = [];
44
+ if (this.buffer && this.buffer.byteLength > 0) {
45
+ smallHash = new this.Sha256();
46
+ smallHash.update(this.buffer);
47
+ collectedHashDigests.push(smallHash.digest());
48
+ this.buffer = void 0;
49
+ }
50
+ _b.label = 1;
51
+ case 1:
52
+ if (!(collectedHashDigests.length > 1)) return [3, 7];
53
+ higherLevelHashDigests = [];
54
+ i = 0;
55
+ _b.label = 2;
56
+ case 2:
57
+ if (!(i < collectedHashDigests.length)) return [3, 6];
58
+ if (!(i + 1 < collectedHashDigests.length)) return [3, 4];
59
+ return [4, Promise.all([collectedHashDigests[i], collectedHashDigests[i + 1]])];
60
+ case 3:
61
+ _a = __read.apply(void 0, [_b.sent(), 2]), digest1 = _a[0], digest2 = _a[1];
62
+ chunk = new Uint8Array(digest1.byteLength + digest2.byteLength);
63
+ chunk.set(digest1);
64
+ chunk.set(digest2, digest1.byteLength);
65
+ hash = new this.Sha256();
66
+ hash.update(chunk);
67
+ higherLevelHashDigests.push(hash.digest());
68
+ return [3, 5];
69
+ case 4:
70
+ higherLevelHashDigests.push(collectedHashDigests[i]);
71
+ _b.label = 5;
72
+ case 5:
73
+ i += 2;
74
+ return [3, 2];
75
+ case 6:
76
+ collectedHashDigests = higherLevelHashDigests;
77
+ return [3, 1];
78
+ case 7: return [2, collectedHashDigests[0]];
79
+ }
80
+ });
81
+ });
82
+ };
83
+ TreeHash.prototype.convertToBuffer = function (data) {
84
+ if (typeof data === "string") {
85
+ return this.fromUtf8(data);
86
+ }
87
+ if (ArrayBuffer.isView(data)) {
88
+ return new Uint8Array(data.buffer, data.byteOffset, data.byteLength / Uint8Array.BYTES_PER_ELEMENT);
89
+ }
90
+ return new Uint8Array(data);
91
+ };
92
+ return TreeHash;
93
+ }());
94
+ export { TreeHash };
File without changes
File without changes
package/package.json CHANGED
@@ -1,43 +1,47 @@
1
1
  {
2
2
  "name": "@aws-sdk/sha256-tree-hash",
3
- "version": "3.29.0",
3
+ "version": "3.36.0",
4
4
  "scripts": {
5
+ "build": "yarn build:cjs && yarn build:es && yarn build:types",
5
6
  "build:cjs": "tsc -p tsconfig.cjs.json",
6
7
  "build:es": "tsc -p tsconfig.es.json",
7
- "build": "yarn build:es && yarn build:cjs",
8
- "downlevel-dts": "downlevel-dts dist/types dist/types/ts3.4",
8
+ "build:types": "tsc -p tsconfig.types.json",
9
+ "downlevel-dts": "downlevel-dts dist-types dist-types/ts3.4",
9
10
  "test": "jest"
10
11
  },
11
- "main": "./dist/cjs/index.js",
12
- "module": "./dist/es/index.js",
13
- "types": "./dist/types/index.d.ts",
12
+ "main": "./dist-cjs/index.js",
13
+ "module": "./dist-es/index.js",
14
+ "types": "./dist-types/index.d.ts",
14
15
  "author": {
15
16
  "name": "AWS SDK for JavaScript Team",
16
17
  "url": "https://aws.amazon.com/javascript/"
17
18
  },
18
19
  "license": "Apache-2.0",
19
20
  "dependencies": {
20
- "@aws-sdk/types": "3.29.0",
21
+ "@aws-sdk/types": "3.36.0",
21
22
  "tslib": "^2.3.0"
22
23
  },
23
24
  "devDependencies": {
24
25
  "@aws-crypto/sha256-js": "^1.0.0",
25
- "@aws-sdk/util-hex-encoding": "3.29.0",
26
- "@aws-sdk/util-utf8-node": "3.29.0",
26
+ "@aws-sdk/util-hex-encoding": "3.36.0",
27
+ "@aws-sdk/util-utf8-node": "3.36.0",
27
28
  "@types/jest": "^26.0.4",
28
29
  "jest": "^26.1.0",
29
- "typescript": "~4.4.2"
30
+ "typescript": "~4.3.5"
30
31
  },
31
32
  "engines": {
32
33
  "node": ">= 10.0.0"
33
34
  },
34
35
  "typesVersions": {
35
36
  "<4.0": {
36
- "dist/types/*": [
37
- "dist/types/ts3.4/*"
37
+ "dist-types/*": [
38
+ "dist-types/ts3.4/*"
38
39
  ]
39
40
  }
40
41
  },
42
+ "files": [
43
+ "dist-*"
44
+ ],
41
45
  "homepage": "https://github.com/aws/aws-sdk-js-v3/tree/main/packages/sha256-tree-hash",
42
46
  "repository": {
43
47
  "type": "git",
package/dist/cjs/index.js DELETED
@@ -1,109 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.TreeHash = void 0;
4
- const MiB = 1048576;
5
- /**
6
- * A Hash that will calculate a Sha256 tree hash.
7
- */
8
- class TreeHash {
9
- /**
10
- * Initializes a TreeHash.
11
- * @param Sha256 A Sha256 hash constructor.
12
- */
13
- constructor(Sha256, fromUtf8) {
14
- this.Sha256 = Sha256;
15
- this.fromUtf8 = fromUtf8;
16
- this.collectedHashDigests = [];
17
- }
18
- /**
19
- * Generates Sha256 hashes from 1 MiB chunks of the
20
- * internal buffer.
21
- * Will set the internal buffer to any bytes remaining
22
- * that is less than 1 MiB.
23
- */
24
- hashBuffer() {
25
- if (!this.buffer) {
26
- return;
27
- }
28
- let remainingSize = this.buffer.byteLength;
29
- while (remainingSize >= MiB) {
30
- const hash = new this.Sha256();
31
- hash.update(this.buffer.subarray(0, MiB));
32
- this.collectedHashDigests.push(hash.digest());
33
- this.buffer = this.buffer.subarray(MiB);
34
- remainingSize = this.buffer.byteLength;
35
- }
36
- }
37
- /**
38
- * Updates the tree hash with byte data.
39
- * @param chunk Byte data to apply to the tree hash.
40
- */
41
- update(data) {
42
- const chunk = this.convertToBuffer(data);
43
- if (!this.buffer) {
44
- this.buffer = chunk;
45
- }
46
- else {
47
- // determine size of both pieces
48
- const totalSize = this.buffer.byteLength + chunk.byteLength;
49
- const tempBuffer = new Uint8Array(totalSize);
50
- tempBuffer.set(this.buffer);
51
- tempBuffer.set(chunk, this.buffer.byteLength);
52
- this.buffer = tempBuffer;
53
- }
54
- // hasBuffer will set this.buffer with remaining data
55
- this.hashBuffer();
56
- }
57
- /**
58
- * Calculates the digest for the tree hash.
59
- */
60
- async digest() {
61
- let collectedHashDigests = this.collectedHashDigests;
62
- // remove the reference to collected hashes to free up space
63
- this.collectedHashDigests = [];
64
- // loop through collected hashes
65
- if (this.buffer && this.buffer.byteLength > 0) {
66
- const smallHash = new this.Sha256();
67
- smallHash.update(this.buffer);
68
- collectedHashDigests.push(smallHash.digest());
69
- // remove the remaining buffer
70
- this.buffer = void 0;
71
- }
72
- while (collectedHashDigests.length > 1) {
73
- const higherLevelHashDigests = [];
74
- for (let i = 0; i < collectedHashDigests.length; i += 2) {
75
- if (i + 1 < collectedHashDigests.length) {
76
- // concatenate the pair of hashes
77
- const [digest1, digest2] = await Promise.all([collectedHashDigests[i], collectedHashDigests[i + 1]]);
78
- const chunk = new Uint8Array(digest1.byteLength + digest2.byteLength);
79
- chunk.set(digest1);
80
- chunk.set(digest2, digest1.byteLength);
81
- const hash = new this.Sha256();
82
- hash.update(chunk);
83
- higherLevelHashDigests.push(hash.digest());
84
- }
85
- else {
86
- // move a lone hash up a level
87
- higherLevelHashDigests.push(collectedHashDigests[i]);
88
- }
89
- }
90
- collectedHashDigests = higherLevelHashDigests;
91
- }
92
- return collectedHashDigests[0];
93
- }
94
- /**
95
- * Converts source data into a Uint8Array.
96
- * @param data Data to convert to a Uint8Array.
97
- */
98
- convertToBuffer(data) {
99
- if (typeof data === "string") {
100
- return this.fromUtf8(data);
101
- }
102
- if (ArrayBuffer.isView(data)) {
103
- return new Uint8Array(data.buffer, data.byteOffset, data.byteLength / Uint8Array.BYTES_PER_ELEMENT);
104
- }
105
- return new Uint8Array(data);
106
- }
107
- }
108
- exports.TreeHash = TreeHash;
109
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBRUEsTUFBTSxHQUFHLEdBQUcsT0FBTyxDQUFDO0FBRXBCOztHQUVHO0FBQ0gsTUFBYSxRQUFRO0lBSW5COzs7T0FHRztJQUNILFlBQTZCLE1BQXVCLEVBQW1CLFFBQWlCO1FBQTNELFdBQU0sR0FBTixNQUFNLENBQWlCO1FBQW1CLGFBQVEsR0FBUixRQUFRLENBQVM7UUFOaEYseUJBQW9CLEdBQTBCLEVBQUUsQ0FBQztJQU1rQyxDQUFDO0lBRTVGOzs7OztPQUtHO0lBQ0ssVUFBVTtRQUNoQixJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRTtZQUNoQixPQUFPO1NBQ1I7UUFFRCxJQUFJLGFBQWEsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQztRQUMzQyxPQUFPLGFBQWEsSUFBSSxHQUFHLEVBQUU7WUFDM0IsTUFBTSxJQUFJLEdBQUcsSUFBSSxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDL0IsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQztZQUMxQyxJQUFJLENBQUMsb0JBQW9CLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDO1lBRTlDLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDeEMsYUFBYSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDO1NBQ3hDO0lBQ0gsQ0FBQztJQUVEOzs7T0FHRztJQUNJLE1BQU0sQ0FBQyxJQUFnQjtRQUM1QixNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3pDLElBQUksQ0FBQyxJ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SSxLQUFLLFFBQVEsRUFBRTtZQUM1QixPQUFPLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7U0FDNUI7UUFFRCxJQUFJLFdBQVcsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUU7WUFDNUIsT0FBTyxJQUFJLFVBQVUsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxVQUFVLEVBQUUsSUFBSSxDQUFDLFVBQVUsR0FBRyxVQUFVLENBQUMsaUJBQWlCLENBQUMsQ0FBQztTQUNyRztRQUVELE9BQU8sSUFBSSxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDOUIsQ0FBQztDQUNGO0FBL0dELDRCQStHQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERlY29kZXIsIEhhc2gsIEhhc2hDb25zdHJ1Y3RvciwgU291cmNlRGF0YSB9IGZyb20gXCJAYXdzLXNkay90eXBlc1wiO1xuXG5jb25zdCBNaUIgPSAxMDQ4NTc2O1xuXG4vKipcbiAqIEEgSGFzaCB0aGF0IHdpbGwgY2FsY3VsYXRlIGEgU2hhMjU2IHRyZWUgaGFzaC5cbiAqL1xuZXhwb3J0IGNsYXNzIFRyZWVIYXNoIGltcGxlbWVudHMgSGFzaCB7XG4gIHByaXZhdGUgYnVmZmVyPzogVWludDhBcnJheTtcbiAgcHJpdmF0ZSBjb2xsZWN0ZWRIYXNoRGlnZXN0czogUHJvbWlzZTxVaW50OEFycmF5PltdID0gW107XG5cbiAgLyoqXG4gICAqIEluaXRpYWxpemVzIGEgVHJlZUhhc2guXG4gICAqIEBwYXJhbSBTaGEyNTYgQSBTaGEyNTYgaGFzaCBjb25zdHJ1Y3Rvci5cbiAgICovXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVhZG9ubHkgU2hhMjU2OiBIYXNoQ29uc3RydWN0b3IsIHByaXZhdGUgcmVhZG9ubHkgZnJvbVV0Zjg6IERlY29kZXIpIHt9XG5cbiAgLyoqXG4gICAqIEdlbmVyYXRlcyBTaGEyNTYgaGFzaGVzIGZyb20gMSBNaUIgY2h1bmtzIG9mIHRoZVxuICAgKiBpbnRlcm5hbCBidWZmZXIuXG4gICAqIFdpbGwgc2V0IHRoZSBpbnRlcm5hbCBidWZmZXIgdG8gYW55IGJ5dGVzIHJlbWFpbmluZ1xuICAgKiB0aGF0IGlzIGxlc3MgdGhhbiAxIE1pQi5cbiAgICovXG4gIHByaXZhdGUgaGFzaEJ1ZmZlcigpIHtcbiAgICBpZiAoIXRoaXMuYnVmZmVyKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgbGV0IHJlbWFpbmluZ1NpemUgPSB0aGlzLmJ1ZmZlci5ieXRlTGVuZ3RoO1xuICAgIHdoaWxlIChyZW1haW5pbmdTaXplID49IE1pQikge1xuICAgICAgY29uc3QgaGFzaCA9IG5ldyB0aGlzLlNoYTI1NigpO1xuICAgICAgaGFzaC51cGRhdGUodGhpcy5idWZmZXIuc3ViYXJyYXkoMCwgTWlCKSk7XG4gICAgICB0aGlzLmNvbGxlY3RlZEhhc2hEaWdlc3RzLnB1c2goaGFzaC5kaWdlc3QoKSk7XG5cbiAgICAgIHRoaXMuYnVmZmVyID0gdGhpcy5idWZmZXIuc3ViYXJyYXkoTWlCKTtcbiAgICAgIHJlbWFpbmluZ1NpemUgPSB0aGlzLmJ1ZmZlci5ieXRlTGVuZ3RoO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBVcGRhdGVzIHRoZSB0cmVlIGhhc2ggd2l0aCBieXRlIGRhdGEuXG4gICAqIEBwYXJhbSBjaHVuayBCeXRlIGRhdGEgdG8gYXBwbHkgdG8gdGhlIHRyZWUgaGFzaC5cbiAgICovXG4gIHB1YmxpYyB1cGRhdGUoZGF0YTogU291cmNlRGF0YSkge1xuICAgIGNvbnN0IGNodW5rID0gdGhpcy5jb252ZXJ0VG9CdWZmZXIoZGF0YSk7XG4gICAgaWYgKCF0aGlzLmJ1ZmZlcikge1xuICAgICAgdGhpcy5idWZmZXIgPSBjaHVuaztcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gZGV0ZXJtaW5lIHNpemUgb2YgYm90aCBwaWVjZXNcbiAgICAgIGNvbnN0IHRvdGFsU2l6ZSA9IHRoaXMuYnVmZmVyLmJ5dGVMZW5ndGggKyBjaHVuay5ieXRlTGVuZ3RoO1xuICAgICAgY29uc3QgdGVtcEJ1ZmZlciA9IG5ldyBVaW50OEFycmF5KHRvdGFsU2l6ZSk7XG5cbiAgICAgIHRlbXBCdWZmZXIuc2V0KHRoaXMuYnVmZmVyKTtcbiAgICAgIHRlbXBCdWZmZXIuc2V0KGNodW5rLCB0aGlzLmJ1ZmZlci5ieXRlTGVuZ3RoKTtcbiAgICAgIHRoaXMuYnVmZmVyID0gdGVtcEJ1ZmZlcjtcbiAgICB9XG5cbiAgICAvLyBoYXNCdWZmZXIgd2lsbCBzZXQgdGhpcy5idWZmZXIgd2l0aCByZW1haW5pbmcgZGF0YVxuICAgIHRoaXMuaGFzaEJ1ZmZlcigpO1xuICB9XG5cbiAgLyoqXG4gICAqIENhbGN1bGF0ZXMgdGhlIGRpZ2VzdCBmb3IgdGhlIHRyZWUgaGFzaC5cbiAgICovXG4gIHB1YmxpYyBhc3luYyBkaWdlc3QoKTogUHJvbWlzZTxVaW50OEFycmF5PiB7XG4gICAgbGV0IGNvbGxlY3RlZEhhc2hEaWdlc3RzID0gdGhpcy5jb2xsZWN0ZWRIYXNoRGlnZXN0cztcbiAgICAvLyByZW1vdmUgdGhlIHJlZmVyZW5jZSB0byBjb2xsZWN0ZWQgaGFzaGVzIHRvIGZyZWUgdXAgc3BhY2VcbiAgICB0aGlzLmNvbGxlY3RlZEhhc2hEaWdlc3RzID0gW107XG5cbiAgICAvLyBsb29wIHRocm91Z2ggY29sbGVjdGVkIGhhc2hlc1xuICAgIGlmICh0aGlzLmJ1ZmZlciAmJiB0aGlzLmJ1ZmZlci5ieXRlTGVuZ3RoID4gMCkge1xuICAgICAgY29uc3Qgc21hbGxIYXNoID0gbmV3IHRoaXMuU2hhMjU2KCk7XG4gICAgICBzbWFsbEhhc2gudXBkYXRlKHRoaXMuYnVmZmVyKTtcbiAgICAgIGNvbGxlY3RlZEhhc2hEaWdlc3RzLnB1c2goc21hbGxIYXNoLmRpZ2VzdCgpKTtcbiAgICAgIC8vIHJlbW92ZSB0aGUgcmVtYWluaW5nIGJ1ZmZlclxuICAgICAgdGhpcy5idWZmZXIgPSB2b2lkIDA7XG4gICAgfVxuXG4gICAgd2hpbGUgKGNvbGxlY3RlZEhhc2hEaWdlc3RzLmxlbmd0aCA+IDEpIHtcbiAgICAgIGNvbnN0IGhpZ2hlckxldmVsSGFzaERpZ2VzdHM6IFByb21pc2U8VWludDhBcnJheT5bXSA9IFtdO1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjb2xsZWN0ZWRIYXNoRGlnZXN0cy5sZW5ndGg7IGkgKz0gMikge1xuICAgICAgICBpZiAoaSArIDEgPCBjb2xsZWN0ZWRIYXNoRGlnZXN0cy5sZW5ndGgpIHtcbiAgICAgICAgICAvLyBjb25jYXRlbmF0ZSB0aGUgcGFpciBvZiBoYXNoZXNcbiAgICAgICAgICBjb25zdCBbZGlnZXN0MSwgZGlnZXN0Ml0gPSBhd2FpdCBQcm9taXNlLmFsbChbY29sbGVjdGVkSGFzaERpZ2VzdHNbaV0sIGNvbGxlY3RlZEhhc2hEaWdlc3RzW2kgKyAxXV0pO1xuXG4gICAgICAgICAgY29uc3QgY2h1bmsgPSBuZXcgVWludDhBcnJheShkaWdlc3QxLmJ5dGVMZW5ndGggKyBkaWdlc3QyLmJ5dGVMZW5ndGgpO1xuICAgICAgICAgIGNodW5rLnNldChkaWdlc3QxKTtcbiAgICAgICAgICBjaHVuay5zZXQoZGlnZXN0MiwgZGlnZXN0MS5ieXRlTGVuZ3RoKTtcblxuICAgICAgICAgIGNvbnN0IGhhc2ggPSBuZXcgdGhpcy5TaGEyNTYoKTtcbiAgICAgICAgICBoYXNoLnVwZGF0ZShjaHVuayk7XG4gICAgICAgICAgaGlnaGVyTGV2ZWxIYXNoRGlnZXN0cy5wdXNoKGhhc2guZGlnZXN0KCkpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIG1vdmUgYSBsb25lIGhhc2ggdXAgYSBsZXZlbFxuICAgICAgICAgIGhpZ2hlckxldmVsSGFzaERpZ2VzdHMucHVzaChjb2xsZWN0ZWRIYXNoRGlnZXN0c1tpXSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGNvbGxlY3RlZEhhc2hEaWdlc3RzID0gaGlnaGVyTGV2ZWxIYXNoRGlnZXN0cztcbiAgICB9XG5cbiAgICByZXR1cm4gY29sbGVjdGVkSGFzaERpZ2VzdHNbMF07XG4gIH1cblxuICAvKipcbiAgICogQ29udmVydHMgc291cmNlIGRhdGEgaW50byBhIFVpbnQ4QXJyYXkuXG4gICAqIEBwYXJhbSBkYXRhIERhdGEgdG8gY29udmVydCB0byBhIFVpbnQ4QXJyYXkuXG4gICAqL1xuICBwcml2YXRlIGNvbnZlcnRUb0J1ZmZlcihkYXRhOiBTb3VyY2VEYXRhKTogVWludDhBcnJheSB7XG4gICAgaWYgKHR5cGVvZiBkYXRhID09PSBcInN0cmluZ1wiKSB7XG4gICAgICByZXR1cm4gdGhpcy5mcm9tVXRmOChkYXRhKTtcbiAgICB9XG5cbiAgICBpZiAoQXJyYXlCdWZmZXIuaXNWaWV3KGRhdGEpKSB7XG4gICAgICByZXR1cm4gbmV3IFVpbnQ4QXJyYXkoZGF0YS5idWZmZXIsIGRhdGEuYnl0ZU9mZnNldCwgZGF0YS5ieXRlTGVuZ3RoIC8gVWludDhBcnJheS5CWVRFU19QRVJfRUxFTUVOVCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBVaW50OEFycmF5KGRhdGEpO1xuICB9XG59XG4iXX0=
package/dist/es/index.js DELETED
@@ -1,125 +0,0 @@
1
- import { __awaiter, __generator, __read } from "tslib";
2
- var MiB = 1048576;
3
- /**
4
- * A Hash that will calculate a Sha256 tree hash.
5
- */
6
- var TreeHash = /** @class */ (function () {
7
- /**
8
- * Initializes a TreeHash.
9
- * @param Sha256 A Sha256 hash constructor.
10
- */
11
- function TreeHash(Sha256, fromUtf8) {
12
- this.Sha256 = Sha256;
13
- this.fromUtf8 = fromUtf8;
14
- this.collectedHashDigests = [];
15
- }
16
- /**
17
- * Generates Sha256 hashes from 1 MiB chunks of the
18
- * internal buffer.
19
- * Will set the internal buffer to any bytes remaining
20
- * that is less than 1 MiB.
21
- */
22
- TreeHash.prototype.hashBuffer = function () {
23
- if (!this.buffer) {
24
- return;
25
- }
26
- var remainingSize = this.buffer.byteLength;
27
- while (remainingSize >= MiB) {
28
- var hash = new this.Sha256();
29
- hash.update(this.buffer.subarray(0, MiB));
30
- this.collectedHashDigests.push(hash.digest());
31
- this.buffer = this.buffer.subarray(MiB);
32
- remainingSize = this.buffer.byteLength;
33
- }
34
- };
35
- /**
36
- * Updates the tree hash with byte data.
37
- * @param chunk Byte data to apply to the tree hash.
38
- */
39
- TreeHash.prototype.update = function (data) {
40
- var chunk = this.convertToBuffer(data);
41
- if (!this.buffer) {
42
- this.buffer = chunk;
43
- }
44
- else {
45
- // determine size of both pieces
46
- var totalSize = this.buffer.byteLength + chunk.byteLength;
47
- var tempBuffer = new Uint8Array(totalSize);
48
- tempBuffer.set(this.buffer);
49
- tempBuffer.set(chunk, this.buffer.byteLength);
50
- this.buffer = tempBuffer;
51
- }
52
- // hasBuffer will set this.buffer with remaining data
53
- this.hashBuffer();
54
- };
55
- /**
56
- * Calculates the digest for the tree hash.
57
- */
58
- TreeHash.prototype.digest = function () {
59
- return __awaiter(this, void 0, void 0, function () {
60
- var collectedHashDigests, smallHash, higherLevelHashDigests, i, _a, digest1, digest2, chunk, hash;
61
- return __generator(this, function (_b) {
62
- switch (_b.label) {
63
- case 0:
64
- collectedHashDigests = this.collectedHashDigests;
65
- // remove the reference to collected hashes to free up space
66
- this.collectedHashDigests = [];
67
- // loop through collected hashes
68
- if (this.buffer && this.buffer.byteLength > 0) {
69
- smallHash = new this.Sha256();
70
- smallHash.update(this.buffer);
71
- collectedHashDigests.push(smallHash.digest());
72
- // remove the remaining buffer
73
- this.buffer = void 0;
74
- }
75
- _b.label = 1;
76
- case 1:
77
- if (!(collectedHashDigests.length > 1)) return [3 /*break*/, 7];
78
- higherLevelHashDigests = [];
79
- i = 0;
80
- _b.label = 2;
81
- case 2:
82
- if (!(i < collectedHashDigests.length)) return [3 /*break*/, 6];
83
- if (!(i + 1 < collectedHashDigests.length)) return [3 /*break*/, 4];
84
- return [4 /*yield*/, Promise.all([collectedHashDigests[i], collectedHashDigests[i + 1]])];
85
- case 3:
86
- _a = __read.apply(void 0, [_b.sent(), 2]), digest1 = _a[0], digest2 = _a[1];
87
- chunk = new Uint8Array(digest1.byteLength + digest2.byteLength);
88
- chunk.set(digest1);
89
- chunk.set(digest2, digest1.byteLength);
90
- hash = new this.Sha256();
91
- hash.update(chunk);
92
- higherLevelHashDigests.push(hash.digest());
93
- return [3 /*break*/, 5];
94
- case 4:
95
- // move a lone hash up a level
96
- higherLevelHashDigests.push(collectedHashDigests[i]);
97
- _b.label = 5;
98
- case 5:
99
- i += 2;
100
- return [3 /*break*/, 2];
101
- case 6:
102
- collectedHashDigests = higherLevelHashDigests;
103
- return [3 /*break*/, 1];
104
- case 7: return [2 /*return*/, collectedHashDigests[0]];
105
- }
106
- });
107
- });
108
- };
109
- /**
110
- * Converts source data into a Uint8Array.
111
- * @param data Data to convert to a Uint8Array.
112
- */
113
- TreeHash.prototype.convertToBuffer = function (data) {
114
- if (typeof data === "string") {
115
- return this.fromUtf8(data);
116
- }
117
- if (ArrayBuffer.isView(data)) {
118
- return new Uint8Array(data.buffer, data.byteOffset, data.byteLength / Uint8Array.BYTES_PER_ELEMENT);
119
- }
120
- return new Uint8Array(data);
121
- };
122
- return TreeHash;
123
- }());
124
- export { TreeHash };
125
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUVBLElBQU0sR0FBRyxHQUFHLE9BQU8sQ0FBQztBQUVwQjs7R0FFRztBQUNIO0lBSUU7OztPQUdHO0lBQ0gsa0JBQTZCLE1BQXVCLEVBQW1CLFFBQWlCO1FBQTNELFdBQU0sR0FBTixNQUFNLENBQWlCO1FBQW1CLGFBQVEsR0FBUixRQUFRLENBQVM7UUFOaEYseUJBQW9CLEdBQTBCLEVBQUUsQ0FBQztJQU1rQyxDQUFDO0lBRTVGOzs7OztPQUtHO0lBQ0ssNkJBQVUsR0FBbEI7UUFDRSxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRTtZQUNoQixPQUFPO1NBQ1I7UUFFRCxJQUFJLGFBQWEsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQztRQUMzQyxPQUFPLGFBQWEsSUFBSSxHQUFHLEVBQUU7WUFDM0IsSUFBTSxJQUFJLEdBQUcsSUFBSSxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDL0IsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQztZQUMxQyxJQUFJLENBQUMsb0JBQW9CLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDO1lBRTlDLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDeEMsYUFBYSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDO1NBQ3hDO0lBQ0gsQ0FBQztJQUVEOzs7T0FHRztJQUNJLHlCQUFNLEdBQWIsVUFBYyxJQUFnQjtRQUM1QixJQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3pDLElBQUksQ0FBQyxJ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QUksT0FBTyxJQUFJLEtBQUssUUFBUSxFQUFFO1lBQzVCLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztTQUM1QjtRQUVELElBQUksV0FBVyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRTtZQUM1QixPQUFPLElBQUksVUFBVSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLFVBQVUsRUFBRSxJQUFJLENBQUMsVUFBVSxHQUFHLFVBQVUsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO1NBQ3JHO1FBRUQsT0FBTyxJQUFJLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUM5QixDQUFDO0lBQ0gsZUFBQztBQUFELENBQUMsQUEvR0QsSUErR0MiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEZWNvZGVyLCBIYXNoLCBIYXNoQ29uc3RydWN0b3IsIFNvdXJjZURhdGEgfSBmcm9tIFwiQGF3cy1zZGsvdHlwZXNcIjtcblxuY29uc3QgTWlCID0gMTA0ODU3NjtcblxuLyoqXG4gKiBBIEhhc2ggdGhhdCB3aWxsIGNhbGN1bGF0ZSBhIFNoYTI1NiB0cmVlIGhhc2guXG4gKi9cbmV4cG9ydCBjbGFzcyBUcmVlSGFzaCBpbXBsZW1lbnRzIEhhc2gge1xuICBwcml2YXRlIGJ1ZmZlcj86IFVpbnQ4QXJyYXk7XG4gIHByaXZhdGUgY29sbGVjdGVkSGFzaERpZ2VzdHM6IFByb21pc2U8VWludDhBcnJheT5bXSA9IFtdO1xuXG4gIC8qKlxuICAgKiBJbml0aWFsaXplcyBhIFRyZWVIYXNoLlxuICAgKiBAcGFyYW0gU2hhMjU2IEEgU2hhMjU2IGhhc2ggY29uc3RydWN0b3IuXG4gICAqL1xuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHJlYWRvbmx5IFNoYTI1NjogSGFzaENvbnN0cnVjdG9yLCBwcml2YXRlIHJlYWRvbmx5IGZyb21VdGY4OiBEZWNvZGVyKSB7fVxuXG4gIC8qKlxuICAgKiBHZW5lcmF0ZXMgU2hhMjU2IGhhc2hlcyBmcm9tIDEgTWlCIGNodW5rcyBvZiB0aGVcbiAgICogaW50ZXJuYWwgYnVmZmVyLlxuICAgKiBXaWxsIHNldCB0aGUgaW50ZXJuYWwgYnVmZmVyIHRvIGFueSBieXRlcyByZW1haW5pbmdcbiAgICogdGhhdCBpcyBsZXNzIHRoYW4gMSBNaUIuXG4gICAqL1xuICBwcml2YXRlIGhhc2hCdWZmZXIoKSB7XG4gICAgaWYgKCF0aGlzLmJ1ZmZlcikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGxldCByZW1haW5pbmdTaXplID0gdGhpcy5idWZmZXIuYnl0ZUxlbmd0aDtcbiAgICB3aGlsZSAocmVtYWluaW5nU2l6ZSA+PSBNaUIpIHtcbiAgICAgIGNvbnN0IGhhc2ggPSBuZXcgdGhpcy5TaGEyNTYoKTtcbiAgICAgIGhhc2gudXBkYXRlKHRoaXMuYnVmZmVyLnN1YmFycmF5KDAsIE1pQikpO1xuICAgICAgdGhpcy5jb2xsZWN0ZWRIYXNoRGlnZXN0cy5wdXNoKGhhc2guZGlnZXN0KCkpO1xuXG4gICAgICB0aGlzLmJ1ZmZlciA9IHRoaXMuYnVmZmVyLnN1YmFycmF5KE1pQik7XG4gICAgICByZW1haW5pbmdTaXplID0gdGhpcy5idWZmZXIuYnl0ZUxlbmd0aDtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlcyB0aGUgdHJlZSBoYXNoIHdpdGggYnl0ZSBkYXRhLlxuICAgKiBAcGFyYW0gY2h1bmsgQnl0ZSBkYXRhIHRvIGFwcGx5IHRvIHRoZSB0cmVlIGhhc2guXG4gICAqL1xuICBwdWJsaWMgdXBkYXRlKGRhdGE6IFNvdXJjZURhdGEpIHtcbiAgICBjb25zdCBjaHVuayA9IHRoaXMuY29udmVydFRvQnVmZmVyKGRhdGEpO1xuICAgIGlmICghdGhpcy5idWZmZXIpIHtcbiAgICAgIHRoaXMuYnVmZmVyID0gY2h1bms7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIGRldGVybWluZSBzaXplIG9mIGJvdGggcGllY2VzXG4gICAgICBjb25zdCB0b3RhbFNpemUgPSB0aGlzLmJ1ZmZlci5ieXRlTGVuZ3RoICsgY2h1bmsuYnl0ZUxlbmd0aDtcbiAgICAgIGNvbnN0IHRlbXBCdWZmZXIgPSBuZXcgVWludDhBcnJheSh0b3RhbFNpemUpO1xuXG4gICAgICB0ZW1wQnVmZmVyLnNldCh0aGlzLmJ1ZmZlcik7XG4gICAgICB0ZW1wQnVmZmVyLnNldChjaHVuaywgdGhpcy5idWZmZXIuYnl0ZUxlbmd0aCk7XG4gICAgICB0aGlzLmJ1ZmZlciA9IHRlbXBCdWZmZXI7XG4gICAgfVxuXG4gICAgLy8gaGFzQnVmZmVyIHdpbGwgc2V0IHRoaXMuYnVmZmVyIHdpdGggcmVtYWluaW5nIGRhdGFcbiAgICB0aGlzLmhhc2hCdWZmZXIoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDYWxjdWxhdGVzIHRoZSBkaWdlc3QgZm9yIHRoZSB0cmVlIGhhc2guXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgZGlnZXN0KCk6IFByb21pc2U8VWludDhBcnJheT4ge1xuICAgIGxldCBjb2xsZWN0ZWRIYXNoRGlnZXN0cyA9IHRoaXMuY29sbGVjdGVkSGFzaERpZ2VzdHM7XG4gICAgLy8gcmVtb3ZlIHRoZSByZWZlcmVuY2UgdG8gY29sbGVjdGVkIGhhc2hlcyB0byBmcmVlIHVwIHNwYWNlXG4gICAgdGhpcy5jb2xsZWN0ZWRIYXNoRGlnZXN0cyA9IFtdO1xuXG4gICAgLy8gbG9vcCB0aHJvdWdoIGNvbGxlY3RlZCBoYXNoZXNcbiAgICBpZiAodGhpcy5idWZmZXIgJiYgdGhpcy5idWZmZXIuYnl0ZUxlbmd0aCA+IDApIHtcbiAgICAgIGNvbnN0IHNtYWxsSGFzaCA9IG5ldyB0aGlzLlNoYTI1NigpO1xuICAgICAgc21hbGxIYXNoLnVwZGF0ZSh0aGlzLmJ1ZmZlcik7XG4gICAgICBjb2xsZWN0ZWRIYXNoRGlnZXN0cy5wdXNoKHNtYWxsSGFzaC5kaWdlc3QoKSk7XG4gICAgICAvLyByZW1vdmUgdGhlIHJlbWFpbmluZyBidWZmZXJcbiAgICAgIHRoaXMuYnVmZmVyID0gdm9pZCAwO1xuICAgIH1cblxuICAgIHdoaWxlIChjb2xsZWN0ZWRIYXNoRGlnZXN0cy5sZW5ndGggPiAxKSB7XG4gICAgICBjb25zdCBoaWdoZXJMZXZlbEhhc2hEaWdlc3RzOiBQcm9taXNlPFVpbnQ4QXJyYXk+W10gPSBbXTtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY29sbGVjdGVkSGFzaERpZ2VzdHMubGVuZ3RoOyBpICs9IDIpIHtcbiAgICAgICAgaWYgKGkgKyAxIDwgY29sbGVjdGVkSGFzaERpZ2VzdHMubGVuZ3RoKSB7XG4gICAgICAgICAgLy8gY29uY2F0ZW5hdGUgdGhlIHBhaXIgb2YgaGFzaGVzXG4gICAgICAgICAgY29uc3QgW2RpZ2VzdDEsIGRpZ2VzdDJdID0gYXdhaXQgUHJvbWlzZS5hbGwoW2NvbGxlY3RlZEhhc2hEaWdlc3RzW2ldLCBjb2xsZWN0ZWRIYXNoRGlnZXN0c1tpICsgMV1dKTtcblxuICAgICAgICAgIGNvbnN0IGNodW5rID0gbmV3IFVpbnQ4QXJyYXkoZGlnZXN0MS5ieXRlTGVuZ3RoICsgZGlnZXN0Mi5ieXRlTGVuZ3RoKTtcbiAgICAgICAgICBjaHVuay5zZXQoZGlnZXN0MSk7XG4gICAgICAgICAgY2h1bmsuc2V0KGRpZ2VzdDIsIGRpZ2VzdDEuYnl0ZUxlbmd0aCk7XG5cbiAgICAgICAgICBjb25zdCBoYXNoID0gbmV3IHRoaXMuU2hhMjU2KCk7XG4gICAgICAgICAgaGFzaC51cGRhdGUoY2h1bmspO1xuICAgICAgICAgIGhpZ2hlckxldmVsSGFzaERpZ2VzdHMucHVzaChoYXNoLmRpZ2VzdCgpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBtb3ZlIGEgbG9uZSBoYXNoIHVwIGEgbGV2ZWxcbiAgICAgICAgICBoaWdoZXJMZXZlbEhhc2hEaWdlc3RzLnB1c2goY29sbGVjdGVkSGFzaERpZ2VzdHNbaV0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBjb2xsZWN0ZWRIYXNoRGlnZXN0cyA9IGhpZ2hlckxldmVsSGFzaERpZ2VzdHM7XG4gICAgfVxuXG4gICAgcmV0dXJuIGNvbGxlY3RlZEhhc2hEaWdlc3RzWzBdO1xuICB9XG5cbiAgLyoqXG4gICAqIENvbnZlcnRzIHNvdXJjZSBkYXRhIGludG8gYSBVaW50OEFycmF5LlxuICAgKiBAcGFyYW0gZGF0YSBEYXRhIHRvIGNvbnZlcnQgdG8gYSBVaW50OEFycmF5LlxuICAgKi9cbiAgcHJpdmF0ZSBjb252ZXJ0VG9CdWZmZXIoZGF0YTogU291cmNlRGF0YSk6IFVpbnQ4QXJyYXkge1xuICAgIGlmICh0eXBlb2YgZGF0YSA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgcmV0dXJuIHRoaXMuZnJvbVV0ZjgoZGF0YSk7XG4gICAgfVxuXG4gICAgaWYgKEFycmF5QnVmZmVyLmlzVmlldyhkYXRhKSkge1xuICAgICAgcmV0dXJuIG5ldyBVaW50OEFycmF5KGRhdGEuYnVmZmVyLCBkYXRhLmJ5dGVPZmZzZXQsIGRhdGEuYnl0ZUxlbmd0aCAvIFVpbnQ4QXJyYXkuQllURVNfUEVSX0VMRU1FTlQpO1xuICAgIH1cblxuICAgIHJldHVybiBuZXcgVWludDhBcnJheShkYXRhKTtcbiAgfVxufVxuIl19
package/src/index.ts DELETED
@@ -1,119 +0,0 @@
1
- import { Decoder, Hash, HashConstructor, SourceData } from "@aws-sdk/types";
2
-
3
- const MiB = 1048576;
4
-
5
- /**
6
- * A Hash that will calculate a Sha256 tree hash.
7
- */
8
- export class TreeHash implements Hash {
9
- private buffer?: Uint8Array;
10
- private collectedHashDigests: Promise<Uint8Array>[] = [];
11
-
12
- /**
13
- * Initializes a TreeHash.
14
- * @param Sha256 A Sha256 hash constructor.
15
- */
16
- constructor(private readonly Sha256: HashConstructor, private readonly fromUtf8: Decoder) {}
17
-
18
- /**
19
- * Generates Sha256 hashes from 1 MiB chunks of the
20
- * internal buffer.
21
- * Will set the internal buffer to any bytes remaining
22
- * that is less than 1 MiB.
23
- */
24
- private hashBuffer() {
25
- if (!this.buffer) {
26
- return;
27
- }
28
-
29
- let remainingSize = this.buffer.byteLength;
30
- while (remainingSize >= MiB) {
31
- const hash = new this.Sha256();
32
- hash.update(this.buffer.subarray(0, MiB));
33
- this.collectedHashDigests.push(hash.digest());
34
-
35
- this.buffer = this.buffer.subarray(MiB);
36
- remainingSize = this.buffer.byteLength;
37
- }
38
- }
39
-
40
- /**
41
- * Updates the tree hash with byte data.
42
- * @param chunk Byte data to apply to the tree hash.
43
- */
44
- public update(data: SourceData) {
45
- const chunk = this.convertToBuffer(data);
46
- if (!this.buffer) {
47
- this.buffer = chunk;
48
- } else {
49
- // determine size of both pieces
50
- const totalSize = this.buffer.byteLength + chunk.byteLength;
51
- const tempBuffer = new Uint8Array(totalSize);
52
-
53
- tempBuffer.set(this.buffer);
54
- tempBuffer.set(chunk, this.buffer.byteLength);
55
- this.buffer = tempBuffer;
56
- }
57
-
58
- // hasBuffer will set this.buffer with remaining data
59
- this.hashBuffer();
60
- }
61
-
62
- /**
63
- * Calculates the digest for the tree hash.
64
- */
65
- public async digest(): Promise<Uint8Array> {
66
- let collectedHashDigests = this.collectedHashDigests;
67
- // remove the reference to collected hashes to free up space
68
- this.collectedHashDigests = [];
69
-
70
- // loop through collected hashes
71
- if (this.buffer && this.buffer.byteLength > 0) {
72
- const smallHash = new this.Sha256();
73
- smallHash.update(this.buffer);
74
- collectedHashDigests.push(smallHash.digest());
75
- // remove the remaining buffer
76
- this.buffer = void 0;
77
- }
78
-
79
- while (collectedHashDigests.length > 1) {
80
- const higherLevelHashDigests: Promise<Uint8Array>[] = [];
81
- for (let i = 0; i < collectedHashDigests.length; i += 2) {
82
- if (i + 1 < collectedHashDigests.length) {
83
- // concatenate the pair of hashes
84
- const [digest1, digest2] = await Promise.all([collectedHashDigests[i], collectedHashDigests[i + 1]]);
85
-
86
- const chunk = new Uint8Array(digest1.byteLength + digest2.byteLength);
87
- chunk.set(digest1);
88
- chunk.set(digest2, digest1.byteLength);
89
-
90
- const hash = new this.Sha256();
91
- hash.update(chunk);
92
- higherLevelHashDigests.push(hash.digest());
93
- } else {
94
- // move a lone hash up a level
95
- higherLevelHashDigests.push(collectedHashDigests[i]);
96
- }
97
- }
98
- collectedHashDigests = higherLevelHashDigests;
99
- }
100
-
101
- return collectedHashDigests[0];
102
- }
103
-
104
- /**
105
- * Converts source data into a Uint8Array.
106
- * @param data Data to convert to a Uint8Array.
107
- */
108
- private convertToBuffer(data: SourceData): Uint8Array {
109
- if (typeof data === "string") {
110
- return this.fromUtf8(data);
111
- }
112
-
113
- if (ArrayBuffer.isView(data)) {
114
- return new Uint8Array(data.buffer, data.byteOffset, data.byteLength / Uint8Array.BYTES_PER_ELEMENT);
115
- }
116
-
117
- return new Uint8Array(data);
118
- }
119
- }
package/tsconfig.cjs.json DELETED
@@ -1,10 +0,0 @@
1
- {
2
- "compilerOptions": {
3
- "declarationDir": "./dist/types",
4
- "rootDir": "./src",
5
- "outDir": "./dist/cjs",
6
- "baseUrl": "."
7
- },
8
- "extends": "../../tsconfig.cjs.json",
9
- "include": ["src/"]
10
- }
package/tsconfig.es.json DELETED
@@ -1,11 +0,0 @@
1
- {
2
- "compilerOptions": {
3
- "lib": ["dom", "es5", "es2015.promise", "es2015.collection", "es2015.iterable", "es2015.symbol.wellknown"],
4
- "declarationDir": "./dist/types",
5
- "rootDir": "./src",
6
- "outDir": "./dist/es",
7
- "baseUrl": "."
8
- },
9
- "extends": "../../tsconfig.es.json",
10
- "include": ["src/"]
11
- }