chore: localfied react, react-dom and crypto-es
This commit is contained in:
134
client/static/crypto-es@3.1.0/aes.mjs
Normal file
134
client/static/crypto-es@3.1.0/aes.mjs
Normal file
@@ -0,0 +1,134 @@
|
||||
import { BlockCipher } from "./cipher-core.mjs";
|
||||
|
||||
//#region src/aes.ts
|
||||
const _SBOX = [];
|
||||
const INV_SBOX = [];
|
||||
const _SUB_MIX_0 = [];
|
||||
const _SUB_MIX_1 = [];
|
||||
const _SUB_MIX_2 = [];
|
||||
const _SUB_MIX_3 = [];
|
||||
const INV_SUB_MIX_0 = [];
|
||||
const INV_SUB_MIX_1 = [];
|
||||
const INV_SUB_MIX_2 = [];
|
||||
const INV_SUB_MIX_3 = [];
|
||||
const RCON = [
|
||||
0,
|
||||
1,
|
||||
2,
|
||||
4,
|
||||
8,
|
||||
16,
|
||||
32,
|
||||
64,
|
||||
128,
|
||||
27,
|
||||
54
|
||||
];
|
||||
/**
|
||||
* AES block cipher algorithm.
|
||||
*/
|
||||
var AESAlgo = class extends BlockCipher {
|
||||
/** Number of rounds for this key size */
|
||||
_nRounds;
|
||||
/** Previous key for optimization */
|
||||
_keyPriorReset;
|
||||
/** Key schedule for encryption */
|
||||
_keySchedule;
|
||||
/** Inverse key schedule for decryption */
|
||||
_invKeySchedule;
|
||||
/** Key size in 32-bit words */
|
||||
static keySize = 256 / 32;
|
||||
_doReset() {
|
||||
let t;
|
||||
if (this._nRounds && this._keyPriorReset === this._key) return;
|
||||
this._keyPriorReset = this._key;
|
||||
const key = this._keyPriorReset;
|
||||
const keyWords = key.words;
|
||||
const keySize = key.sigBytes / 4;
|
||||
this._nRounds = keySize + 6;
|
||||
const nRounds = this._nRounds;
|
||||
const ksRows = (nRounds + 1) * 4;
|
||||
this._keySchedule = [];
|
||||
const keySchedule = this._keySchedule;
|
||||
for (let ksRow = 0; ksRow < ksRows; ksRow += 1) if (ksRow < keySize) keySchedule[ksRow] = keyWords[ksRow];
|
||||
else {
|
||||
t = keySchedule[ksRow - 1];
|
||||
if (!(ksRow % keySize)) {
|
||||
t = t << 8 | t >>> 24;
|
||||
t = _SBOX[t >>> 24] << 24 | _SBOX[t >>> 16 & 255] << 16 | _SBOX[t >>> 8 & 255] << 8 | _SBOX[t & 255];
|
||||
t ^= RCON[ksRow / keySize | 0] << 24;
|
||||
} else if (keySize > 6 && ksRow % keySize === 4) t = _SBOX[t >>> 24] << 24 | _SBOX[t >>> 16 & 255] << 16 | _SBOX[t >>> 8 & 255] << 8 | _SBOX[t & 255];
|
||||
keySchedule[ksRow] = keySchedule[ksRow - keySize] ^ t;
|
||||
}
|
||||
this._invKeySchedule = [];
|
||||
const invKeySchedule = this._invKeySchedule;
|
||||
for (let invKsRow = 0; invKsRow < ksRows; invKsRow += 1) {
|
||||
const ksRow = ksRows - invKsRow;
|
||||
if (invKsRow % 4) t = keySchedule[ksRow];
|
||||
else t = keySchedule[ksRow - 4];
|
||||
if (invKsRow < 4 || ksRow <= 4) invKeySchedule[invKsRow] = t;
|
||||
else invKeySchedule[invKsRow] = INV_SUB_MIX_0[_SBOX[t >>> 24]] ^ INV_SUB_MIX_1[_SBOX[t >>> 16 & 255]] ^ INV_SUB_MIX_2[_SBOX[t >>> 8 & 255]] ^ INV_SUB_MIX_3[_SBOX[t & 255]];
|
||||
}
|
||||
}
|
||||
encryptBlock(M, offset) {
|
||||
this._doCryptBlock(M, offset, this._keySchedule, _SUB_MIX_0, _SUB_MIX_1, _SUB_MIX_2, _SUB_MIX_3, _SBOX);
|
||||
}
|
||||
decryptBlock(M, offset) {
|
||||
const _M = M;
|
||||
let t = _M[offset + 1];
|
||||
_M[offset + 1] = _M[offset + 3];
|
||||
_M[offset + 3] = t;
|
||||
this._doCryptBlock(_M, offset, this._invKeySchedule, INV_SUB_MIX_0, INV_SUB_MIX_1, INV_SUB_MIX_2, INV_SUB_MIX_3, INV_SBOX);
|
||||
t = _M[offset + 1];
|
||||
_M[offset + 1] = _M[offset + 3];
|
||||
_M[offset + 3] = t;
|
||||
}
|
||||
_doCryptBlock(M, offset, keySchedule, SUB_MIX_0, SUB_MIX_1, SUB_MIX_2, SUB_MIX_3, SBOX) {
|
||||
const _M = M;
|
||||
const nRounds = this._nRounds;
|
||||
let s0 = _M[offset] ^ keySchedule[0];
|
||||
let s1 = _M[offset + 1] ^ keySchedule[1];
|
||||
let s2 = _M[offset + 2] ^ keySchedule[2];
|
||||
let s3 = _M[offset + 3] ^ keySchedule[3];
|
||||
let ksRow = 4;
|
||||
for (let round = 1; round < nRounds; round += 1) {
|
||||
const t0$1 = SUB_MIX_0[s0 >>> 24] ^ SUB_MIX_1[s1 >>> 16 & 255] ^ SUB_MIX_2[s2 >>> 8 & 255] ^ SUB_MIX_3[s3 & 255] ^ keySchedule[ksRow];
|
||||
ksRow += 1;
|
||||
const t1$1 = SUB_MIX_0[s1 >>> 24] ^ SUB_MIX_1[s2 >>> 16 & 255] ^ SUB_MIX_2[s3 >>> 8 & 255] ^ SUB_MIX_3[s0 & 255] ^ keySchedule[ksRow];
|
||||
ksRow += 1;
|
||||
const t2$1 = SUB_MIX_0[s2 >>> 24] ^ SUB_MIX_1[s3 >>> 16 & 255] ^ SUB_MIX_2[s0 >>> 8 & 255] ^ SUB_MIX_3[s1 & 255] ^ keySchedule[ksRow];
|
||||
ksRow += 1;
|
||||
const t3$1 = SUB_MIX_0[s3 >>> 24] ^ SUB_MIX_1[s0 >>> 16 & 255] ^ SUB_MIX_2[s1 >>> 8 & 255] ^ SUB_MIX_3[s2 & 255] ^ keySchedule[ksRow];
|
||||
ksRow += 1;
|
||||
s0 = t0$1;
|
||||
s1 = t1$1;
|
||||
s2 = t2$1;
|
||||
s3 = t3$1;
|
||||
}
|
||||
const t0 = (SBOX[s0 >>> 24] << 24 | SBOX[s1 >>> 16 & 255] << 16 | SBOX[s2 >>> 8 & 255] << 8 | SBOX[s3 & 255]) ^ keySchedule[ksRow];
|
||||
ksRow += 1;
|
||||
const t1 = (SBOX[s1 >>> 24] << 24 | SBOX[s2 >>> 16 & 255] << 16 | SBOX[s3 >>> 8 & 255] << 8 | SBOX[s0 & 255]) ^ keySchedule[ksRow];
|
||||
ksRow += 1;
|
||||
const t2 = (SBOX[s2 >>> 24] << 24 | SBOX[s3 >>> 16 & 255] << 16 | SBOX[s0 >>> 8 & 255] << 8 | SBOX[s1 & 255]) ^ keySchedule[ksRow];
|
||||
ksRow += 1;
|
||||
const t3 = (SBOX[s3 >>> 24] << 24 | SBOX[s0 >>> 16 & 255] << 16 | SBOX[s1 >>> 8 & 255] << 8 | SBOX[s2 & 255]) ^ keySchedule[ksRow];
|
||||
ksRow += 1;
|
||||
_M[offset] = t0;
|
||||
_M[offset + 1] = t1;
|
||||
_M[offset + 2] = t2;
|
||||
_M[offset + 3] = t3;
|
||||
}
|
||||
};
|
||||
/**
|
||||
* Shortcut functions to the cipher's object interface.
|
||||
*
|
||||
* @example
|
||||
*
|
||||
* var ciphertext = AES.encrypt(message, key, cfg);
|
||||
* var plaintext = AES.decrypt(ciphertext, key, cfg);
|
||||
*/
|
||||
const AES = BlockCipher._createHelper(AESAlgo);
|
||||
|
||||
//#endregion
|
||||
export { AES, AESAlgo };
|
||||
//# sourceMappingURL=aes.mjs.map
|
||||
Reference in New Issue
Block a user