Add extracted source directory and README navigation

This commit is contained in:
Shawn Bot
2026-03-31 14:56:06 +00:00
parent 6252bb6eb5
commit 91e01d755b
4757 changed files with 984951 additions and 0 deletions

View File

@@ -0,0 +1,124 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.RawSha256 = void 0;
var constants_1 = require("./constants");
/**
* @internal
*/
var RawSha256 = /** @class */ (function () {
function RawSha256() {
this.state = Int32Array.from(constants_1.INIT);
this.temp = new Int32Array(64);
this.buffer = new Uint8Array(64);
this.bufferLength = 0;
this.bytesHashed = 0;
/**
* @internal
*/
this.finished = false;
}
RawSha256.prototype.update = function (data) {
if (this.finished) {
throw new Error("Attempted to update an already finished hash.");
}
var position = 0;
var byteLength = data.byteLength;
this.bytesHashed += byteLength;
if (this.bytesHashed * 8 > constants_1.MAX_HASHABLE_LENGTH) {
throw new Error("Cannot hash more than 2^53 - 1 bits");
}
while (byteLength > 0) {
this.buffer[this.bufferLength++] = data[position++];
byteLength--;
if (this.bufferLength === constants_1.BLOCK_SIZE) {
this.hashBuffer();
this.bufferLength = 0;
}
}
};
RawSha256.prototype.digest = function () {
if (!this.finished) {
var bitsHashed = this.bytesHashed * 8;
var bufferView = new DataView(this.buffer.buffer, this.buffer.byteOffset, this.buffer.byteLength);
var undecoratedLength = this.bufferLength;
bufferView.setUint8(this.bufferLength++, 0x80);
// Ensure the final block has enough room for the hashed length
if (undecoratedLength % constants_1.BLOCK_SIZE >= constants_1.BLOCK_SIZE - 8) {
for (var i = this.bufferLength; i < constants_1.BLOCK_SIZE; i++) {
bufferView.setUint8(i, 0);
}
this.hashBuffer();
this.bufferLength = 0;
}
for (var i = this.bufferLength; i < constants_1.BLOCK_SIZE - 8; i++) {
bufferView.setUint8(i, 0);
}
bufferView.setUint32(constants_1.BLOCK_SIZE - 8, Math.floor(bitsHashed / 0x100000000), true);
bufferView.setUint32(constants_1.BLOCK_SIZE - 4, bitsHashed);
this.hashBuffer();
this.finished = true;
}
// The value in state is little-endian rather than big-endian, so flip
// each word into a new Uint8Array
var out = new Uint8Array(constants_1.DIGEST_LENGTH);
for (var i = 0; i < 8; i++) {
out[i * 4] = (this.state[i] >>> 24) & 0xff;
out[i * 4 + 1] = (this.state[i] >>> 16) & 0xff;
out[i * 4 + 2] = (this.state[i] >>> 8) & 0xff;
out[i * 4 + 3] = (this.state[i] >>> 0) & 0xff;
}
return out;
};
RawSha256.prototype.hashBuffer = function () {
var _a = this, buffer = _a.buffer, state = _a.state;
var state0 = state[0], state1 = state[1], state2 = state[2], state3 = state[3], state4 = state[4], state5 = state[5], state6 = state[6], state7 = state[7];
for (var i = 0; i < constants_1.BLOCK_SIZE; i++) {
if (i < 16) {
this.temp[i] =
((buffer[i * 4] & 0xff) << 24) |
((buffer[i * 4 + 1] & 0xff) << 16) |
((buffer[i * 4 + 2] & 0xff) << 8) |
(buffer[i * 4 + 3] & 0xff);
}
else {
var u = this.temp[i - 2];
var t1_1 = ((u >>> 17) | (u << 15)) ^ ((u >>> 19) | (u << 13)) ^ (u >>> 10);
u = this.temp[i - 15];
var t2_1 = ((u >>> 7) | (u << 25)) ^ ((u >>> 18) | (u << 14)) ^ (u >>> 3);
this.temp[i] =
((t1_1 + this.temp[i - 7]) | 0) + ((t2_1 + this.temp[i - 16]) | 0);
}
var t1 = ((((((state4 >>> 6) | (state4 << 26)) ^
((state4 >>> 11) | (state4 << 21)) ^
((state4 >>> 25) | (state4 << 7))) +
((state4 & state5) ^ (~state4 & state6))) |
0) +
((state7 + ((constants_1.KEY[i] + this.temp[i]) | 0)) | 0)) |
0;
var t2 = ((((state0 >>> 2) | (state0 << 30)) ^
((state0 >>> 13) | (state0 << 19)) ^
((state0 >>> 22) | (state0 << 10))) +
((state0 & state1) ^ (state0 & state2) ^ (state1 & state2))) |
0;
state7 = state6;
state6 = state5;
state5 = state4;
state4 = (state3 + t1) | 0;
state3 = state2;
state2 = state1;
state1 = state0;
state0 = (t1 + t2) | 0;
}
state[0] += state0;
state[1] += state1;
state[2] += state2;
state[3] += state3;
state[4] += state4;
state[5] += state5;
state[6] += state6;
state[7] += state7;
};
return RawSha256;
}());
exports.RawSha256 = RawSha256;
//# sourceMappingURL=RawSha256.js.map

View File

@@ -0,0 +1,98 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.MAX_HASHABLE_LENGTH = exports.INIT = exports.KEY = exports.DIGEST_LENGTH = exports.BLOCK_SIZE = void 0;
/**
* @internal
*/
exports.BLOCK_SIZE = 64;
/**
* @internal
*/
exports.DIGEST_LENGTH = 32;
/**
* @internal
*/
exports.KEY = new Uint32Array([
0x428a2f98,
0x71374491,
0xb5c0fbcf,
0xe9b5dba5,
0x3956c25b,
0x59f111f1,
0x923f82a4,
0xab1c5ed5,
0xd807aa98,
0x12835b01,
0x243185be,
0x550c7dc3,
0x72be5d74,
0x80deb1fe,
0x9bdc06a7,
0xc19bf174,
0xe49b69c1,
0xefbe4786,
0x0fc19dc6,
0x240ca1cc,
0x2de92c6f,
0x4a7484aa,
0x5cb0a9dc,
0x76f988da,
0x983e5152,
0xa831c66d,
0xb00327c8,
0xbf597fc7,
0xc6e00bf3,
0xd5a79147,
0x06ca6351,
0x14292967,
0x27b70a85,
0x2e1b2138,
0x4d2c6dfc,
0x53380d13,
0x650a7354,
0x766a0abb,
0x81c2c92e,
0x92722c85,
0xa2bfe8a1,
0xa81a664b,
0xc24b8b70,
0xc76c51a3,
0xd192e819,
0xd6990624,
0xf40e3585,
0x106aa070,
0x19a4c116,
0x1e376c08,
0x2748774c,
0x34b0bcb5,
0x391c0cb3,
0x4ed8aa4a,
0x5b9cca4f,
0x682e6ff3,
0x748f82ee,
0x78a5636f,
0x84c87814,
0x8cc70208,
0x90befffa,
0xa4506ceb,
0xbef9a3f7,
0xc67178f2
]);
/**
* @internal
*/
exports.INIT = [
0x6a09e667,
0xbb67ae85,
0x3c6ef372,
0xa54ff53a,
0x510e527f,
0x9b05688c,
0x1f83d9ab,
0x5be0cd19
];
/**
* @internal
*/
exports.MAX_HASHABLE_LENGTH = Math.pow(2, 53) - 1;
//# sourceMappingURL=constants.js.map

View File

@@ -0,0 +1,5 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
var tslib_1 = require("tslib");
tslib_1.__exportStar(require("./jsSha256"), exports);
//# sourceMappingURL=index.js.map

View File

@@ -0,0 +1,85 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.Sha256 = void 0;
var tslib_1 = require("tslib");
var constants_1 = require("./constants");
var RawSha256_1 = require("./RawSha256");
var util_1 = require("@aws-crypto/util");
var Sha256 = /** @class */ (function () {
function Sha256(secret) {
this.secret = secret;
this.hash = new RawSha256_1.RawSha256();
this.reset();
}
Sha256.prototype.update = function (toHash) {
if ((0, util_1.isEmptyData)(toHash) || this.error) {
return;
}
try {
this.hash.update((0, util_1.convertToBuffer)(toHash));
}
catch (e) {
this.error = e;
}
};
/* This synchronous method keeps compatibility
* with the v2 aws-sdk.
*/
Sha256.prototype.digestSync = function () {
if (this.error) {
throw this.error;
}
if (this.outer) {
if (!this.outer.finished) {
this.outer.update(this.hash.digest());
}
return this.outer.digest();
}
return this.hash.digest();
};
/* The underlying digest method here is synchronous.
* To keep the same interface with the other hash functions
* the default is to expose this as an async method.
* However, it can sometimes be useful to have a sync method.
*/
Sha256.prototype.digest = function () {
return tslib_1.__awaiter(this, void 0, void 0, function () {
return tslib_1.__generator(this, function (_a) {
return [2 /*return*/, this.digestSync()];
});
});
};
Sha256.prototype.reset = function () {
this.hash = new RawSha256_1.RawSha256();
if (this.secret) {
this.outer = new RawSha256_1.RawSha256();
var inner = bufferFromSecret(this.secret);
var outer = new Uint8Array(constants_1.BLOCK_SIZE);
outer.set(inner);
for (var i = 0; i < constants_1.BLOCK_SIZE; i++) {
inner[i] ^= 0x36;
outer[i] ^= 0x5c;
}
this.hash.update(inner);
this.outer.update(outer);
// overwrite the copied key in memory
for (var i = 0; i < inner.byteLength; i++) {
inner[i] = 0;
}
}
};
return Sha256;
}());
exports.Sha256 = Sha256;
function bufferFromSecret(secret) {
var input = (0, util_1.convertToBuffer)(secret);
if (input.byteLength > constants_1.BLOCK_SIZE) {
var bufferHash = new RawSha256_1.RawSha256();
bufferHash.update(input);
input = bufferHash.digest();
}
var buffer = new Uint8Array(constants_1.BLOCK_SIZE);
buffer.set(input);
return buffer;
}
//# sourceMappingURL=jsSha256.js.map