UNPKG

2.85 kBJavaScriptView Raw
1"use strict";
2Object.defineProperty(exports, "__esModule", { value: true });
3exports.Sha256 = void 0;
4var tslib_1 = require("tslib");
5var constants_1 = require("./constants");
6var RawSha256_1 = require("./RawSha256");
7var util_1 = require("@aws-crypto/util");
8var Sha256 = /** @class */ (function () {
9 function Sha256(secret) {
10 this.secret = secret;
11 this.hash = new RawSha256_1.RawSha256();
12 this.reset();
13 }
14 Sha256.prototype.update = function (toHash) {
15 if ((0, util_1.isEmptyData)(toHash) || this.error) {
16 return;
17 }
18 try {
19 this.hash.update((0, util_1.convertToBuffer)(toHash));
20 }
21 catch (e) {
22 this.error = e;
23 }
24 };
25 /* This synchronous method keeps compatibility
26 * with the v2 aws-sdk.
27 */
28 Sha256.prototype.digestSync = function () {
29 if (this.error) {
30 throw this.error;
31 }
32 if (this.outer) {
33 if (!this.outer.finished) {
34 this.outer.update(this.hash.digest());
35 }
36 return this.outer.digest();
37 }
38 return this.hash.digest();
39 };
40 /* The underlying digest method here is synchronous.
41 * To keep the same interface with the other hash functions
42 * the default is to expose this as an async method.
43 * However, it can sometimes be useful to have a sync method.
44 */
45 Sha256.prototype.digest = function () {
46 return tslib_1.__awaiter(this, void 0, void 0, function () {
47 return tslib_1.__generator(this, function (_a) {
48 return [2 /*return*/, this.digestSync()];
49 });
50 });
51 };
52 Sha256.prototype.reset = function () {
53 this.hash = new RawSha256_1.RawSha256();
54 if (this.secret) {
55 this.outer = new RawSha256_1.RawSha256();
56 var inner = bufferFromSecret(this.secret);
57 var outer = new Uint8Array(constants_1.BLOCK_SIZE);
58 outer.set(inner);
59 for (var i = 0; i < constants_1.BLOCK_SIZE; i++) {
60 inner[i] ^= 0x36;
61 outer[i] ^= 0x5c;
62 }
63 this.hash.update(inner);
64 this.outer.update(outer);
65 // overwrite the copied key in memory
66 for (var i = 0; i < inner.byteLength; i++) {
67 inner[i] = 0;
68 }
69 }
70 };
71 return Sha256;
72}());
73exports.Sha256 = Sha256;
74function bufferFromSecret(secret) {
75 var input = (0, util_1.convertToBuffer)(secret);
76 if (input.byteLength > constants_1.BLOCK_SIZE) {
77 var bufferHash = new RawSha256_1.RawSha256();
78 bufferHash.update(input);
79 input = bufferHash.digest();
80 }
81 var buffer = new Uint8Array(constants_1.BLOCK_SIZE);
82 buffer.set(input);
83 return buffer;
84}
85//# sourceMappingURL=jsSha256.js.map
\No newline at end of file