first commit
This commit is contained in:
+9
@@ -0,0 +1,9 @@
|
||||
/**
|
||||
* Hashes a string using the SHA-256 algorithm and encodes it in Base64URL format.
|
||||
*
|
||||
* @param {string} message - The message to hash.
|
||||
*
|
||||
* @returns {string} The hash of the message.
|
||||
*/
|
||||
declare function digest(message: string): string;
|
||||
export { digest };
|
||||
+197
@@ -0,0 +1,197 @@
|
||||
const H = [
|
||||
1779033703,
|
||||
-1150833019,
|
||||
1013904242,
|
||||
-1521486534,
|
||||
1359893119,
|
||||
-1694144372,
|
||||
528734635,
|
||||
1541459225
|
||||
];
|
||||
const K = [
|
||||
1116352408,
|
||||
1899447441,
|
||||
-1245643825,
|
||||
-373957723,
|
||||
961987163,
|
||||
1508970993,
|
||||
-1841331548,
|
||||
-1424204075,
|
||||
-670586216,
|
||||
310598401,
|
||||
607225278,
|
||||
1426881987,
|
||||
1925078388,
|
||||
-2132889090,
|
||||
-1680079193,
|
||||
-1046744716,
|
||||
-459576895,
|
||||
-272742522,
|
||||
264347078,
|
||||
604807628,
|
||||
770255983,
|
||||
1249150122,
|
||||
1555081692,
|
||||
1996064986,
|
||||
-1740746414,
|
||||
-1473132947,
|
||||
-1341970488,
|
||||
-1084653625,
|
||||
-958395405,
|
||||
-710438585,
|
||||
113926993,
|
||||
338241895,
|
||||
666307205,
|
||||
773529912,
|
||||
1294757372,
|
||||
1396182291,
|
||||
1695183700,
|
||||
1986661051,
|
||||
-2117940946,
|
||||
-1838011259,
|
||||
-1564481375,
|
||||
-1474664885,
|
||||
-1035236496,
|
||||
-949202525,
|
||||
-778901479,
|
||||
-694614492,
|
||||
-200395387,
|
||||
275423344,
|
||||
430227734,
|
||||
506948616,
|
||||
659060556,
|
||||
883997877,
|
||||
958139571,
|
||||
1322822218,
|
||||
1537002063,
|
||||
1747873779,
|
||||
1955562222,
|
||||
2024104815,
|
||||
-2067236844,
|
||||
-1933114872,
|
||||
-1866530822,
|
||||
-1538233109,
|
||||
-1090935817,
|
||||
-965641998
|
||||
];
|
||||
const base64KeyStr = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_";
|
||||
const W = [];
|
||||
var SHA256 = class {
|
||||
_data = new WordArray();
|
||||
_hash = new WordArray([...H]);
|
||||
_nDataBytes = 0;
|
||||
_minBufferSize = 0;
|
||||
finalize(messageUpdate) {
|
||||
if (messageUpdate) this._append(messageUpdate);
|
||||
const nBitsTotal = this._nDataBytes * 8;
|
||||
const nBitsLeft = this._data.sigBytes * 8;
|
||||
this._data.words[nBitsLeft >>> 5] |= 128 << 24 - nBitsLeft % 32;
|
||||
this._data.words[(nBitsLeft + 64 >>> 9 << 4) + 14] = Math.floor(nBitsTotal / 4294967296);
|
||||
this._data.words[(nBitsLeft + 64 >>> 9 << 4) + 15] = nBitsTotal;
|
||||
this._data.sigBytes = this._data.words.length * 4;
|
||||
this._process();
|
||||
return this._hash;
|
||||
}
|
||||
_doProcessBlock(M, offset) {
|
||||
const H = this._hash.words;
|
||||
let a = H[0];
|
||||
let b = H[1];
|
||||
let c = H[2];
|
||||
let d = H[3];
|
||||
let e = H[4];
|
||||
let f = H[5];
|
||||
let g = H[6];
|
||||
let h = H[7];
|
||||
for (let i = 0; i < 64; i++) {
|
||||
if (i < 16) W[i] = M[offset + i] | 0;
|
||||
else {
|
||||
const gamma0x = W[i - 15];
|
||||
const gamma0 = (gamma0x << 25 | gamma0x >>> 7) ^ (gamma0x << 14 | gamma0x >>> 18) ^ gamma0x >>> 3;
|
||||
const gamma1x = W[i - 2];
|
||||
const gamma1 = (gamma1x << 15 | gamma1x >>> 17) ^ (gamma1x << 13 | gamma1x >>> 19) ^ gamma1x >>> 10;
|
||||
W[i] = gamma0 + W[i - 7] + gamma1 + W[i - 16];
|
||||
}
|
||||
const ch = e & f ^ ~e & g;
|
||||
const maj = a & b ^ a & c ^ b & c;
|
||||
const sigma0 = (a << 30 | a >>> 2) ^ (a << 19 | a >>> 13) ^ (a << 10 | a >>> 22);
|
||||
const sigma1 = (e << 26 | e >>> 6) ^ (e << 21 | e >>> 11) ^ (e << 7 | e >>> 25);
|
||||
const t1 = h + sigma1 + ch + K[i] + W[i];
|
||||
const t2 = sigma0 + maj;
|
||||
h = g;
|
||||
g = f;
|
||||
f = e;
|
||||
e = d + t1 | 0;
|
||||
d = c;
|
||||
c = b;
|
||||
b = a;
|
||||
a = t1 + t2 | 0;
|
||||
}
|
||||
H[0] = H[0] + a | 0;
|
||||
H[1] = H[1] + b | 0;
|
||||
H[2] = H[2] + c | 0;
|
||||
H[3] = H[3] + d | 0;
|
||||
H[4] = H[4] + e | 0;
|
||||
H[5] = H[5] + f | 0;
|
||||
H[6] = H[6] + g | 0;
|
||||
H[7] = H[7] + h | 0;
|
||||
}
|
||||
_append(data) {
|
||||
if (typeof data === "string") data = WordArray.fromUtf8(data);
|
||||
this._data.concat(data);
|
||||
this._nDataBytes += data.sigBytes;
|
||||
}
|
||||
_process(doFlush) {
|
||||
let processedWords;
|
||||
let nBlocksReady = this._data.sigBytes / 64;
|
||||
if (doFlush) nBlocksReady = Math.ceil(nBlocksReady);
|
||||
else nBlocksReady = Math.max((nBlocksReady | 0) - this._minBufferSize, 0);
|
||||
const nWordsReady = nBlocksReady * 16;
|
||||
const nBytesReady = Math.min(nWordsReady * 4, this._data.sigBytes);
|
||||
if (nWordsReady) {
|
||||
for (let offset = 0; offset < nWordsReady; offset += 16) this._doProcessBlock(this._data.words, offset);
|
||||
processedWords = this._data.words.splice(0, nWordsReady);
|
||||
this._data.sigBytes -= nBytesReady;
|
||||
}
|
||||
return new WordArray(processedWords, nBytesReady);
|
||||
}
|
||||
};
|
||||
var WordArray = class WordArray {
|
||||
words;
|
||||
sigBytes;
|
||||
constructor(words, sigBytes) {
|
||||
words = this.words = words || [];
|
||||
this.sigBytes = sigBytes === void 0 ? words.length * 4 : sigBytes;
|
||||
}
|
||||
static fromUtf8(input) {
|
||||
const str = unescape(encodeURIComponent(input));
|
||||
const strlen = str.length;
|
||||
const words = [];
|
||||
for (let i = 0; i < strlen; i++) words[i >>> 2] |= (str.charCodeAt(i) & 255) << 24 - i % 4 * 8;
|
||||
return new WordArray(words, strlen);
|
||||
}
|
||||
toBase64() {
|
||||
const base64Chars = [];
|
||||
for (let i = 0; i < this.sigBytes; i += 3) {
|
||||
const byte1 = this.words[i >>> 2] >>> 24 - i % 4 * 8 & 255;
|
||||
const byte2 = this.words[i + 1 >>> 2] >>> 24 - (i + 1) % 4 * 8 & 255;
|
||||
const byte3 = this.words[i + 2 >>> 2] >>> 24 - (i + 2) % 4 * 8 & 255;
|
||||
const triplet = byte1 << 16 | byte2 << 8 | byte3;
|
||||
for (let j = 0; j < 4 && i * 8 + j * 6 < this.sigBytes * 8; j++) base64Chars.push(base64KeyStr.charAt(triplet >>> 6 * (3 - j) & 63));
|
||||
}
|
||||
return base64Chars.join("");
|
||||
}
|
||||
concat(wordArray) {
|
||||
this.words[this.sigBytes >>> 2] &= 4294967295 << 32 - this.sigBytes % 4 * 8;
|
||||
this.words.length = Math.ceil(this.sigBytes / 4);
|
||||
if (this.sigBytes % 4) for (let i = 0; i < wordArray.sigBytes; i++) {
|
||||
const thatByte = wordArray.words[i >>> 2] >>> 24 - i % 4 * 8 & 255;
|
||||
this.words[this.sigBytes + i >>> 2] |= thatByte << 24 - (this.sigBytes + i) % 4 * 8;
|
||||
}
|
||||
else for (let j = 0; j < wordArray.sigBytes; j += 4) this.words[this.sigBytes + j >>> 2] = wordArray.words[j >>> 2];
|
||||
this.sigBytes += wordArray.sigBytes;
|
||||
}
|
||||
};
|
||||
function digest(message) {
|
||||
return new SHA256().finalize(message).toBase64();
|
||||
}
|
||||
export { digest };
|
||||
+9
@@ -0,0 +1,9 @@
|
||||
/**
|
||||
* Hashes a string using the SHA-256 algorithm and encodes it in Base64URL format.
|
||||
*
|
||||
* @param {string} data - data message to hash.
|
||||
*
|
||||
* @returns {string} The hash of the data.
|
||||
*/
|
||||
declare function digest(data: string): string;
|
||||
export { digest };
|
||||
+10
@@ -0,0 +1,10 @@
|
||||
import { createHash } from "node:crypto";
|
||||
const fastHash = /*@__PURE__*/ (() => globalThis.process?.getBuiltinModule?.("crypto")?.hash)();
|
||||
const algorithm = "sha256";
|
||||
const encoding = "base64url";
|
||||
function digest(data) {
|
||||
if (fastHash) return fastHash(algorithm, data, encoding);
|
||||
const h = createHash(algorithm).update(data);
|
||||
return globalThis.process?.versions?.webcontainer ? h.digest().toString(encoding) : h.digest(encoding);
|
||||
}
|
||||
export { digest };
|
||||
Reference in New Issue
Block a user