1 | "use strict";
|
2 | Object.defineProperty(exports, "__esModule", { value: true });
|
3 | exports.Sha256 = void 0;
|
4 | var tslib_1 = require("tslib");
|
5 | var constants_1 = require("./constants");
|
6 | var RawSha256_1 = require("./RawSha256");
|
7 | var util_1 = require("@aws-crypto/util");
|
8 | var Sha256 = (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 | |
26 |
|
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 | |
41 |
|
42 |
|
43 |
|
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 , 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 |
|
66 | for (var i = 0; i < inner.byteLength; i++) {
|
67 | inner[i] = 0;
|
68 | }
|
69 | }
|
70 | };
|
71 | return Sha256;
|
72 | }());
|
73 | exports.Sha256 = Sha256;
|
74 | function 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 |
|
\ | No newline at end of file |