aes-bridge 2.0.4 → 2.0.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.github/workflows/tests.yml +1 -1
- package/README.md +66 -15
- package/cli.js +108 -0
- package/dist/aes-bridge.cjs.js +1 -1
- package/dist/aes-bridge.cjs.js.map +1 -1
- package/dist/aes-bridge.esm.js +1 -1
- package/dist/aes-bridge.esm.js.map +1 -1
- package/dist/aes-bridge.umd.js +1 -1
- package/dist/aes-bridge.umd.js.map +1 -1
- package/dist/cbc.d.ts +20 -0
- package/dist/common.d.ts +25 -0
- package/dist/gcm.d.ts +20 -0
- package/dist/index.d.ts +6 -0
- package/dist/legacy.d.ts +10 -0
- package/dist/md5.d.ts +40 -0
- package/package.json +16 -4
- package/src/cbc.d.ts +20 -0
- package/src/common.d.ts +25 -0
- package/src/gcm.d.ts +20 -0
- package/src/index.d.ts +6 -0
- package/src/legacy.d.ts +10 -0
- package/src/legacy.js +2 -2
- package/src/md5.d.ts +40 -0
- package/src/md5.js +5 -5
- package/test/index.test.js +4 -4
- package/test/test_data.json +24 -2
- package/tsconfig.json +17 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"aes-bridge.esm.js","sources":["../src/common.js","../src/cbc.js","../src/gcm.js","../src/md5.js","../src/legacy.js","../src/index.js"],"sourcesContent":["/**\n * This file is part of AesBridge - modern cross-language AES encryption library\n * Repository: https://github.com/mervick/aes-bridge\n *\n * Copyright Andrey Izman (c) 2018-2025 <izmanw@gmail.com>\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\n/**\n * Converts a string to Uint8Array using UTF-8 encoding.\n * If input is already Uint8Array, returns it as-is.\n * \n * @param {string|Uint8Array} input - Input string or bytes\n * @returns {Uint8Array}\n */\nexport function toBytes(input) {\n if (typeof input === 'string') {\n return new TextEncoder().encode(input);\n }\n return input;\n}\n\n/**\n * Converts an Uint8Array to string using UTF-8 encoding.\n * \n * @param {Uint8Array} input - Input string\n * @returns {string}\n */\nexport function bytesToString(bytes) {\n if (bytes instanceof Uint8Array) {\n return new TextDecoder().decode(bytes);\n }\n return bytes;\n}\n\n/**\n * Generates a random Uint8Array of given length using secure crypto.\n * \n * @param {number} length - Number of bytes to generate\n * @returns {Uint8Array}\n */\nexport function generateRandom(length) {\n const array = new Uint8Array(length);\n crypto.getRandomValues(array);\n return array;\n}\n\n/**\n * Encodes bytes to base64 string.\n * \n * @param {Uint8Array} bytes - Data to encode\n * @returns {string} - Base64 string\n */\nexport function base64Encode(bytes) {\n return btoa(String.fromCharCode(...bytes));\n}\n\n/**\n * Decodes base64 string to Uint8Array.\n * \n * @param {string} b64 - Base64 encoded string\n * @returns {Uint8Array}\n */\nexport function base64Decode(b64) {\n b64 = bytesToString(b64);\n const binary = atob(b64);\n const bytes = new Uint8Array(binary.length);\n for (let i = 0; i < binary.length; i++) bytes[i] = binary.charCodeAt(i);\n return bytes;\n}\n","/**\n * This file is part of AesBridge - modern cross-language AES encryption library\n * Repository: https://github.com/mervick/aes-bridge\n *\n * Copyright Andrey Izman (c) 2018-2025 <izmanw@gmail.com>\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\nimport { toBytes, generateRandom, base64Encode, base64Decode } from './common.js';\n\n/**\n * Derives AES and HMAC keys from password and salt using PBKDF2-HMAC-SHA256.\n * \n * @param {string|Uint8Array} password - Password used for key derivation\n * @param {Uint8Array} salt - 16-byte random salt\n * @returns {Promise<{aesKey: CryptoKey, hmacKey: CryptoKey}>}\n */\nasync function deriveKeys(password, salt) {\n const keyMaterial = await crypto.subtle.importKey(\n 'raw',\n toBytes(password),\n { name: 'PBKDF2' },\n false,\n ['deriveBits', 'deriveKey']\n );\n\n const derived = await crypto.subtle.deriveBits(\n {\n name: 'PBKDF2',\n salt: salt,\n iterations: 100_000,\n hash: 'SHA-256',\n },\n keyMaterial,\n 64 * 8\n );\n\n const bytes = new Uint8Array(derived);\n return {\n aesKey: await crypto.subtle.importKey('raw', bytes.slice(0, 32), { name: 'AES-CBC' }, false, ['encrypt', 'decrypt']),\n hmacKey: await crypto.subtle.importKey('raw', bytes.slice(32), { name: 'HMAC', hash: 'SHA-256' }, false, ['sign', 'verify']),\n };\n}\n\n/**\n * Encrypts plaintext using AES-CBC + HMAC with derived key from password.\n * Returns binary format: salt (16) + IV (16) + ciphertext + HMAC (32).\n * \n * @param {string|Uint8Array} plaintext - Data to encrypt\n * @param {string|Uint8Array} password - Password for encryption\n * @returns {Promise<Uint8Array>} - Encrypted binary\n */\nexport async function encryptCbcBin(plaintext, password) {\n plaintext = toBytes(plaintext);\n password = toBytes(password);\n const salt = generateRandom(16);\n const iv = generateRandom(16);\n const { aesKey, hmacKey } = await deriveKeys(password, salt);\n\n const ciphertext = new Uint8Array(await crypto.subtle.encrypt(\n { name: 'AES-CBC', iv: iv },\n aesKey,\n plaintext\n ));\n\n const macData = new Uint8Array(iv.length + ciphertext.length);\n macData.set(iv);\n macData.set(ciphertext, iv.length);\n\n const tag = new Uint8Array(await crypto.subtle.sign('HMAC', hmacKey, macData));\n\n const result = new Uint8Array(salt.length + iv.length + ciphertext.length + tag.length);\n result.set(salt);\n result.set(iv, salt.length);\n result.set(ciphertext, salt.length + iv.length);\n result.set(tag, salt.length + iv.length + ciphertext.length);\n\n return result;\n}\n\n/**\n * Decrypts binary data encrypted with `encryptCbcBin`.\n * \n * @param {string|Uint8Array} data - Encrypted binary data\n * @param {string|Uint8Array} password - Password used for encryption\n * @returns {Promise<Uint8Array>} - Decrypted and unpadded data\n */\nexport async function decryptCbcBin(data, password) {\n data = toBytes(data);\n password = toBytes(password);\n const salt = data.slice(0, 16);\n const iv = data.slice(16, 32);\n const tag = data.slice(-32);\n const ciphertext = data.slice(32, -32);\n\n const { aesKey, hmacKey } = await deriveKeys(password, salt);\n\n const macData = new Uint8Array(iv.length + ciphertext.length);\n macData.set(iv);\n macData.set(ciphertext, iv.length);\n\n const valid = await crypto.subtle.verify('HMAC', hmacKey, tag, macData);\n if (!valid) throw new Error('HMAC verification failed');\n\n return new Uint8Array(await crypto.subtle.decrypt(\n { name: 'AES-CBC', iv: iv },\n aesKey,\n ciphertext\n ));\n}\n\n/**\n * Encrypts data and returns result as base64 string.\n * \n * @param {string|Uint8Array} data - Data to encrypt\n * @param {string|Uint8Array} password - Password for encryption\n * @returns {Promise<string>} - Base64 encoded encrypted string\n */\nexport async function encryptCbc(data, password) {\n const encrypted = await encryptCbcBin(data, password);\n return base64Encode(encrypted);\n}\n\n/**\n * Decrypts base64-encoded AES-CBC + HMAC data.\n * \n * @param {string} data - Base64 encoded encrypted data\n * @param {string|Uint8Array} password - Password used for encryption\n * @returns {Promise<Uint8Array>} - Decrypted and unpadded data\n */\nexport async function decryptCbc(data, password) {\n const decoded = base64Decode(data);\n return decryptCbcBin(decoded, password);\n}\n","/**\n * This file is part of AesBridge - modern cross-language AES encryption library\n * Repository: https://github.com/mervick/aes-bridge\n *\n * Copyright Andrey Izman (c) 2018-2025 <izmanw@gmail.com>\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\nimport { toBytes, generateRandom, base64Encode, base64Decode } from './common.js';\n\n/**\n * Derives a 256-bit key from password and salt using PBKDF2-HMAC-SHA256.\n *\n * @param {string|Uint8Array} password - The password\n * @param {Uint8Array} salt - 16-byte salt\n * @returns {Promise<CryptoKey>}\n */\nasync function deriveKey(password, salt) {\n const keyMaterial = await crypto.subtle.importKey(\n 'raw',\n toBytes(password),\n { name: 'PBKDF2' },\n false,\n ['deriveBits', 'deriveKey']\n // ['deriveKey']\n );\n\n return crypto.subtle.deriveKey(\n {\n name: 'PBKDF2',\n salt: salt,\n iterations: 100_000,\n hash: 'SHA-256',\n },\n keyMaterial,\n { name: 'AES-GCM', length: 256 },\n false,\n ['encrypt', 'decrypt']\n );\n}\n\n/**\n * Encrypts plaintext using AES-GCM with key derived from password.\n * Output format: salt(16) + nonce(12) + ciphertext + tag(16)\n *\n * @param {string|Uint8Array} plaintext - Data to encrypt\n * @param {string|Uint8Array} password - Password\n * @returns {Promise<Uint8Array>}\n */\nexport async function encryptGcmBin(plaintext, password) {\n plaintext = toBytes(plaintext);\n password = toBytes(password);\n const salt = generateRandom(16);\n const nonce = generateRandom(12);\n const key = await deriveKey(password, salt);\n\n const encrypted = new Uint8Array(await crypto.subtle.encrypt(\n {\n name: 'AES-GCM',\n iv: nonce,\n tagLength: 128\n },\n key,\n plaintext\n ));\n\n const result = new Uint8Array(salt.length + nonce.length + encrypted.length);\n result.set(salt);\n result.set(nonce, salt.length);\n result.set(encrypted, salt.length + nonce.length);\n return result;\n}\n\n/**\n * Decrypts binary data produced by encryptGcmBin().\n *\n * @param {string|Uint8Array} data - Encrypted binary data\n * @param {string|Uint8Array} password - Password\n * @returns {Promise<Uint8Array>}\n */\nexport async function decryptGcmBin(data, password) {\n data = toBytes(data);\n password = toBytes(password);\n\n const salt = data.slice(0, 16);\n const nonce = data.slice(16, 28);\n const ciphertextWithTag = data.slice(28);\n\n const key = await deriveKey(password, salt);\n\n const decrypted = await crypto.subtle.decrypt(\n {\n name: 'AES-GCM',\n iv: nonce,\n tagLength: 128\n },\n key,\n ciphertextWithTag\n );\n\n return new Uint8Array(decrypted);\n}\n\n/**\n * Encrypts data using AES-GCM and returns Base64 string.\n *\n * @param {string|Uint8Array} data - Data to encrypt\n * @param {string|Uint8Array} password - Password\n * @returns {Promise<string>}\n */\nexport async function encryptGcm(data, password) {\n const result = await encryptGcmBin(data, password);\n return base64Encode(result);\n}\n\n/**\n * Decrypts Base64 encoded AES-GCM data.\n *\n * @param {string} data - Base64-encoded encrypted string\n * @param {string|Uint8Array} password - Password\n * @returns {Promise<Uint8Array>}\n */\nexport async function decryptGcm(data, password) {\n const raw = base64Decode(toBytes(data));\n return decryptGcmBin(raw, password);\n}\n","/**\n * [js-md5]{@link https://github.com/emn178/js-md5}\n * \n * @version 0.8.3\n * @license MIT\n * \n * Copyright 2014-2023 Chen, Yi-Cyuan\n *\n * Permission is hereby granted, free of charge, to any person obtaining\n * a copy of this software and associated documentation files (the\n * \"Software\"), to deal in the Software without restriction, including\n * without limitation the rights to use, copy, modify, merge, publish,\n * distribute, sublicense, and/or sell copies of the Software, and to\n * permit persons to whom the Software is furnished to do so, subject to\n * the following conditions:\n *\n * The above copyright notice and this permission notice shall be\n * included in all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\n * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\n * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE\n * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\n * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION\n * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n */\n\nvar INPUT_ERROR = 'input is invalid type';\nvar FINALIZE_ERROR = 'finalize already called';\nvar NODE_JS = typeof process === 'object' && process.versions && process.versions.node;\nvar ARRAY_BUFFER = typeof ArrayBuffer !== 'undefined';\nvar HEX_CHARS = '0123456789abcdef'.split('');\nvar EXTRA = [128, 32768, 8388608, -2147483648];\nvar SHIFT = [0, 8, 16, 24];\nvar OUTPUT_TYPES = ['hex', 'array', 'digest', 'buffer', 'arrayBuffer', 'base64'];\nvar BASE64_ENCODE_CHAR = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'.split('');\n\nvar blocks = [], buffer8;\nif (ARRAY_BUFFER) {\n var buffer = new ArrayBuffer(68);\n buffer8 = new Uint8Array(buffer);\n blocks = new Uint32Array(buffer);\n}\n\nvar isArray = Array.isArray;\nif (!isArray) {\n isArray = function (obj) {\n return Object.prototype.toString.call(obj) === '[object Array]';\n };\n}\n\nvar isView = ArrayBuffer.isView;\nif (ARRAY_BUFFER && !isView) {\n isView = function (obj) {\n return typeof obj === 'object' && obj.buffer && obj.buffer.constructor === ArrayBuffer;\n };\n}\n\n// [message: string, isString: bool]\nvar formatMessage = function (message) {\n var type = typeof message;\n if (type === 'string') {\n return [message, true];\n }\n if (type !== 'object' || message === null) {\n throw new Error(INPUT_ERROR);\n }\n if (ARRAY_BUFFER && message.constructor === ArrayBuffer) {\n return [new Uint8Array(message), false];\n }\n if (!isArray(message) && !isView(message)) {\n throw new Error(INPUT_ERROR);\n }\n return [message, false];\n}\n\n/**\n * @method hex\n * @memberof md5\n * @description Output hash as hex string\n * @param {String|Array|Uint8Array|ArrayBuffer} message message to hash\n * @returns {String} Hex string\n * @example\n * md5.hex('The quick brown fox jumps over the lazy dog');\n * // equal to\n * md5('The quick brown fox jumps over the lazy dog');\n */\n/**\n * @method digest\n * @memberof md5\n * @description Output hash as bytes array\n * @param {String|Array|Uint8Array|ArrayBuffer} message message to hash\n * @returns {Array} Bytes array\n * @example\n * md5.digest('The quick brown fox jumps over the lazy dog');\n */\n/**\n * @method array\n * @memberof md5\n * @description Output hash as bytes array\n * @param {String|Array|Uint8Array|ArrayBuffer} message message to hash\n * @returns {Array} Bytes array\n * @example\n * md5.array('The quick brown fox jumps over the lazy dog');\n */\n/**\n * @method arrayBuffer\n * @memberof md5\n * @description Output hash as ArrayBuffer\n * @param {String|Array|Uint8Array|ArrayBuffer} message message to hash\n * @returns {ArrayBuffer} ArrayBuffer\n * @example\n * md5.arrayBuffer('The quick brown fox jumps over the lazy dog');\n */\n/**\n * @method buffer\n * @deprecated This maybe confuse with Buffer in node.js. Please use arrayBuffer instead.\n * @memberof md5\n * @description Output hash as ArrayBuffer\n * @param {String|Array|Uint8Array|ArrayBuffer} message message to hash\n * @returns {ArrayBuffer} ArrayBuffer\n * @example\n * md5.buffer('The quick brown fox jumps over the lazy dog');\n */\n/**\n * @method base64\n * @memberof md5\n * @description Output hash as base64 string\n * @param {String|Array|Uint8Array|ArrayBuffer} message message to hash\n * @returns {String} base64 string\n * @example\n * md5.base64('The quick brown fox jumps over the lazy dog');\n */\nvar createOutputMethod = function (outputType) {\n return function (message) {\n return new Md5(true).update(message)[outputType]();\n };\n};\n\n/**\n * @method create\n * @memberof md5\n * @description Create Md5 object\n * @returns {Md5} Md5 object.\n * @example\n * var hash = md5.create();\n */\n/**\n * @method update\n * @memberof md5\n * @description Create and update Md5 object\n * @param {String|Array|Uint8Array|ArrayBuffer} message message to hash\n * @returns {Md5} Md5 object.\n * @example\n * var hash = md5.update('The quick brown fox jumps over the lazy dog');\n * // equal to\n * var hash = md5.create();\n * hash.update('The quick brown fox jumps over the lazy dog');\n */\nvar createMethod = function () {\n var method = createOutputMethod('hex');\n if (NODE_JS) {\n method = nodeWrap(method);\n }\n method.create = function () {\n return new Md5();\n };\n method.update = function (message) {\n return method.create().update(message);\n };\n for (var i = 0; i < OUTPUT_TYPES.length; ++i) {\n var type = OUTPUT_TYPES[i];\n method[type] = createOutputMethod(type);\n }\n return method;\n};\n\nvar nodeWrap = function (method) {\n var crypto = require('crypto')\n var Buffer = require('buffer').Buffer;\n var bufferFrom;\n if (Buffer.from) {\n bufferFrom = Buffer.from;\n } else {\n bufferFrom = function (message) {\n return new Buffer(message);\n };\n }\n var nodeMethod = function (message) {\n if (typeof message === 'string') {\n return crypto.createHash('md5').update(message, 'utf8').digest('hex');\n } else {\n if (message === null || message === undefined) {\n throw new Error(INPUT_ERROR);\n } else if (message.constructor === ArrayBuffer) {\n message = new Uint8Array(message);\n }\n }\n if (isArray(message) || isView(message) ||\n message.constructor === Buffer) {\n return crypto.createHash('md5').update(bufferFrom(message)).digest('hex');\n } else {\n return method(message);\n }\n };\n return nodeMethod;\n};\n\n/**\n * @namespace md5.hmac\n */\n/**\n * @method hex\n * @memberof md5.hmac\n * @description Output hash as hex string\n * @param {String|Array|Uint8Array|ArrayBuffer} key key\n * @param {String|Array|Uint8Array|ArrayBuffer} message message to hash\n * @returns {String} Hex string\n * @example\n * md5.hmac.hex('key', 'The quick brown fox jumps over the lazy dog');\n * // equal to\n * md5.hmac('key', 'The quick brown fox jumps over the lazy dog');\n */\n\n/**\n * @method digest\n * @memberof md5.hmac\n * @description Output hash as bytes array\n * @param {String|Array|Uint8Array|ArrayBuffer} key key\n * @param {String|Array|Uint8Array|ArrayBuffer} message message to hash\n * @returns {Array} Bytes array\n * @example\n * md5.hmac.digest('key', 'The quick brown fox jumps over the lazy dog');\n */\n/**\n * @method array\n * @memberof md5.hmac\n * @description Output hash as bytes array\n * @param {String|Array|Uint8Array|ArrayBuffer} key key\n * @param {String|Array|Uint8Array|ArrayBuffer} message message to hash\n * @returns {Array} Bytes array\n * @example\n * md5.hmac.array('key', 'The quick brown fox jumps over the lazy dog');\n */\n/**\n * @method arrayBuffer\n * @memberof md5.hmac\n * @description Output hash as ArrayBuffer\n * @param {String|Array|Uint8Array|ArrayBuffer} key key\n * @param {String|Array|Uint8Array|ArrayBuffer} message message to hash\n * @returns {ArrayBuffer} ArrayBuffer\n * @example\n * md5.hmac.arrayBuffer('key', 'The quick brown fox jumps over the lazy dog');\n */\n/**\n * @method buffer\n * @deprecated This maybe confuse with Buffer in node.js. Please use arrayBuffer instead.\n * @memberof md5.hmac\n * @description Output hash as ArrayBuffer\n * @param {String|Array|Uint8Array|ArrayBuffer} key key\n * @param {String|Array|Uint8Array|ArrayBuffer} message message to hash\n * @returns {ArrayBuffer} ArrayBuffer\n * @example\n * md5.hmac.buffer('key', 'The quick brown fox jumps over the lazy dog');\n */\n/**\n * @method base64\n * @memberof md5.hmac\n * @description Output hash as base64 string\n * @param {String|Array|Uint8Array|ArrayBuffer} key key\n * @param {String|Array|Uint8Array|ArrayBuffer} message message to hash\n * @returns {String} base64 string\n * @example\n * md5.hmac.base64('key', 'The quick brown fox jumps over the lazy dog');\n */\nvar createHmacOutputMethod = function (outputType) {\n return function (key, message) {\n return new HmacMd5(key, true).update(message)[outputType]();\n };\n};\n\n/**\n * @method create\n * @memberof md5.hmac\n * @description Create HmacMd5 object\n * @param {String|Array|Uint8Array|ArrayBuffer} key key\n * @returns {HmacMd5} HmacMd5 object.\n * @example\n * var hash = md5.hmac.create('key');\n */\n/**\n * @method update\n * @memberof md5.hmac\n * @description Create and update HmacMd5 object\n * @param {String|Array|Uint8Array|ArrayBuffer} key key\n * @param {String|Array|Uint8Array|ArrayBuffer} message message to hash\n * @returns {HmacMd5} HmacMd5 object.\n * @example\n * var hash = md5.hmac.update('key', 'The quick brown fox jumps over the lazy dog');\n * // equal to\n * var hash = md5.hmac.create('key');\n * hash.update('The quick brown fox jumps over the lazy dog');\n */\nvar createHmacMethod = function () {\n var method = createHmacOutputMethod('hex');\n method.create = function (key) {\n return new HmacMd5(key);\n };\n method.update = function (key, message) {\n return method.create(key).update(message);\n };\n for (var i = 0; i < OUTPUT_TYPES.length; ++i) {\n var type = OUTPUT_TYPES[i];\n method[type] = createHmacOutputMethod(type);\n }\n return method;\n};\n\n/**\n * Md5 class\n * @class Md5\n * @description This is internal class.\n * @see {@link md5.create}\n */\nfunction Md5(sharedMemory) {\n if (sharedMemory) {\n blocks[0] = blocks[16] = blocks[1] = blocks[2] = blocks[3] =\n blocks[4] = blocks[5] = blocks[6] = blocks[7] =\n blocks[8] = blocks[9] = blocks[10] = blocks[11] =\n blocks[12] = blocks[13] = blocks[14] = blocks[15] = 0;\n this.blocks = blocks;\n this.buffer8 = buffer8;\n } else {\n if (ARRAY_BUFFER) {\n var buffer = new ArrayBuffer(68);\n this.buffer8 = new Uint8Array(buffer);\n this.blocks = new Uint32Array(buffer);\n } else {\n this.blocks = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0];\n }\n }\n this.h0 = this.h1 = this.h2 = this.h3 = this.start = this.bytes = this.hBytes = 0;\n this.finalized = this.hashed = false;\n this.first = true;\n}\n\n/**\n * @method update\n * @memberof Md5\n * @instance\n * @description Update hash\n * @param {String|Array|Uint8Array|ArrayBuffer} message message to hash\n * @returns {Md5} Md5 object.\n * @see {@link md5.update}\n */\nMd5.prototype.update = function (message) {\n if (this.finalized) {\n throw new Error(FINALIZE_ERROR);\n }\n\n var result = formatMessage(message);\n message = result[0];\n var isString = result[1];\n var code, index = 0, i, length = message.length, blocks = this.blocks;\n var buffer8 = this.buffer8;\n\n while (index < length) {\n if (this.hashed) {\n this.hashed = false;\n blocks[0] = blocks[16];\n blocks[16] = blocks[1] = blocks[2] = blocks[3] =\n blocks[4] = blocks[5] = blocks[6] = blocks[7] =\n blocks[8] = blocks[9] = blocks[10] = blocks[11] =\n blocks[12] = blocks[13] = blocks[14] = blocks[15] = 0;\n }\n\n if (isString) {\n if (ARRAY_BUFFER) {\n for (i = this.start; index < length && i < 64; ++index) {\n code = message.charCodeAt(index);\n if (code < 0x80) {\n buffer8[i++] = code;\n } else if (code < 0x800) {\n buffer8[i++] = 0xc0 | (code >>> 6);\n buffer8[i++] = 0x80 | (code & 0x3f);\n } else if (code < 0xd800 || code >= 0xe000) {\n buffer8[i++] = 0xe0 | (code >>> 12);\n buffer8[i++] = 0x80 | ((code >>> 6) & 0x3f);\n buffer8[i++] = 0x80 | (code & 0x3f);\n } else {\n code = 0x10000 + (((code & 0x3ff) << 10) | (message.charCodeAt(++index) & 0x3ff));\n buffer8[i++] = 0xf0 | (code >>> 18);\n buffer8[i++] = 0x80 | ((code >>> 12) & 0x3f);\n buffer8[i++] = 0x80 | ((code >>> 6) & 0x3f);\n buffer8[i++] = 0x80 | (code & 0x3f);\n }\n }\n } else {\n for (i = this.start; index < length && i < 64; ++index) {\n code = message.charCodeAt(index);\n if (code < 0x80) {\n blocks[i >>> 2] |= code << SHIFT[i++ & 3];\n } else if (code < 0x800) {\n blocks[i >>> 2] |= (0xc0 | (code >>> 6)) << SHIFT[i++ & 3];\n blocks[i >>> 2] |= (0x80 | (code & 0x3f)) << SHIFT[i++ & 3];\n } else if (code < 0xd800 || code >= 0xe000) {\n blocks[i >>> 2] |= (0xe0 | (code >>> 12)) << SHIFT[i++ & 3];\n blocks[i >>> 2] |= (0x80 | ((code >>> 6) & 0x3f)) << SHIFT[i++ & 3];\n blocks[i >>> 2] |= (0x80 | (code & 0x3f)) << SHIFT[i++ & 3];\n } else {\n code = 0x10000 + (((code & 0x3ff) << 10) | (message.charCodeAt(++index) & 0x3ff));\n blocks[i >>> 2] |= (0xf0 | (code >>> 18)) << SHIFT[i++ & 3];\n blocks[i >>> 2] |= (0x80 | ((code >>> 12) & 0x3f)) << SHIFT[i++ & 3];\n blocks[i >>> 2] |= (0x80 | ((code >>> 6) & 0x3f)) << SHIFT[i++ & 3];\n blocks[i >>> 2] |= (0x80 | (code & 0x3f)) << SHIFT[i++ & 3];\n }\n }\n }\n } else {\n if (ARRAY_BUFFER) {\n for (i = this.start; index < length && i < 64; ++index) {\n buffer8[i++] = message[index];\n }\n } else {\n for (i = this.start; index < length && i < 64; ++index) {\n blocks[i >>> 2] |= message[index] << SHIFT[i++ & 3];\n }\n }\n }\n this.lastByteIndex = i;\n this.bytes += i - this.start;\n if (i >= 64) {\n this.start = i - 64;\n this.hash();\n this.hashed = true;\n } else {\n this.start = i;\n }\n }\n if (this.bytes > 4294967295) {\n this.hBytes += this.bytes / 4294967296 << 0;\n this.bytes = this.bytes % 4294967296;\n }\n return this;\n};\n\nMd5.prototype.finalize = function () {\n if (this.finalized) {\n return;\n }\n this.finalized = true;\n var blocks = this.blocks, i = this.lastByteIndex;\n blocks[i >>> 2] |= EXTRA[i & 3];\n if (i >= 56) {\n if (!this.hashed) {\n this.hash();\n }\n blocks[0] = blocks[16];\n blocks[16] = blocks[1] = blocks[2] = blocks[3] =\n blocks[4] = blocks[5] = blocks[6] = blocks[7] =\n blocks[8] = blocks[9] = blocks[10] = blocks[11] =\n blocks[12] = blocks[13] = blocks[14] = blocks[15] = 0;\n }\n blocks[14] = this.bytes << 3;\n blocks[15] = this.hBytes << 3 | this.bytes >>> 29;\n this.hash();\n};\n\nMd5.prototype.hash = function () {\n var a, b, c, d, bc, da, blocks = this.blocks;\n\n if (this.first) {\n a = blocks[0] - 680876937;\n a = (a << 7 | a >>> 25) - 271733879 << 0;\n d = (-1732584194 ^ a & 2004318071) + blocks[1] - 117830708;\n d = (d << 12 | d >>> 20) + a << 0;\n c = (-271733879 ^ (d & (a ^ -271733879))) + blocks[2] - 1126478375;\n c = (c << 17 | c >>> 15) + d << 0;\n b = (a ^ (c & (d ^ a))) + blocks[3] - 1316259209;\n b = (b << 22 | b >>> 10) + c << 0;\n } else {\n a = this.h0;\n b = this.h1;\n c = this.h2;\n d = this.h3;\n a += (d ^ (b & (c ^ d))) + blocks[0] - 680876936;\n a = (a << 7 | a >>> 25) + b << 0;\n d += (c ^ (a & (b ^ c))) + blocks[1] - 389564586;\n d = (d << 12 | d >>> 20) + a << 0;\n c += (b ^ (d & (a ^ b))) + blocks[2] + 606105819;\n c = (c << 17 | c >>> 15) + d << 0;\n b += (a ^ (c & (d ^ a))) + blocks[3] - 1044525330;\n b = (b << 22 | b >>> 10) + c << 0;\n }\n\n a += (d ^ (b & (c ^ d))) + blocks[4] - 176418897;\n a = (a << 7 | a >>> 25) + b << 0;\n d += (c ^ (a & (b ^ c))) + blocks[5] + 1200080426;\n d = (d << 12 | d >>> 20) + a << 0;\n c += (b ^ (d & (a ^ b))) + blocks[6] - 1473231341;\n c = (c << 17 | c >>> 15) + d << 0;\n b += (a ^ (c & (d ^ a))) + blocks[7] - 45705983;\n b = (b << 22 | b >>> 10) + c << 0;\n a += (d ^ (b & (c ^ d))) + blocks[8] + 1770035416;\n a = (a << 7 | a >>> 25) + b << 0;\n d += (c ^ (a & (b ^ c))) + blocks[9] - 1958414417;\n d = (d << 12 | d >>> 20) + a << 0;\n c += (b ^ (d & (a ^ b))) + blocks[10] - 42063;\n c = (c << 17 | c >>> 15) + d << 0;\n b += (a ^ (c & (d ^ a))) + blocks[11] - 1990404162;\n b = (b << 22 | b >>> 10) + c << 0;\n a += (d ^ (b & (c ^ d))) + blocks[12] + 1804603682;\n a = (a << 7 | a >>> 25) + b << 0;\n d += (c ^ (a & (b ^ c))) + blocks[13] - 40341101;\n d = (d << 12 | d >>> 20) + a << 0;\n c += (b ^ (d & (a ^ b))) + blocks[14] - 1502002290;\n c = (c << 17 | c >>> 15) + d << 0;\n b += (a ^ (c & (d ^ a))) + blocks[15] + 1236535329;\n b = (b << 22 | b >>> 10) + c << 0;\n a += (c ^ (d & (b ^ c))) + blocks[1] - 165796510;\n a = (a << 5 | a >>> 27) + b << 0;\n d += (b ^ (c & (a ^ b))) + blocks[6] - 1069501632;\n d = (d << 9 | d >>> 23) + a << 0;\n c += (a ^ (b & (d ^ a))) + blocks[11] + 643717713;\n c = (c << 14 | c >>> 18) + d << 0;\n b += (d ^ (a & (c ^ d))) + blocks[0] - 373897302;\n b = (b << 20 | b >>> 12) + c << 0;\n a += (c ^ (d & (b ^ c))) + blocks[5] - 701558691;\n a = (a << 5 | a >>> 27) + b << 0;\n d += (b ^ (c & (a ^ b))) + blocks[10] + 38016083;\n d = (d << 9 | d >>> 23) + a << 0;\n c += (a ^ (b & (d ^ a))) + blocks[15] - 660478335;\n c = (c << 14 | c >>> 18) + d << 0;\n b += (d ^ (a & (c ^ d))) + blocks[4] - 405537848;\n b = (b << 20 | b >>> 12) + c << 0;\n a += (c ^ (d & (b ^ c))) + blocks[9] + 568446438;\n a = (a << 5 | a >>> 27) + b << 0;\n d += (b ^ (c & (a ^ b))) + blocks[14] - 1019803690;\n d = (d << 9 | d >>> 23) + a << 0;\n c += (a ^ (b & (d ^ a))) + blocks[3] - 187363961;\n c = (c << 14 | c >>> 18) + d << 0;\n b += (d ^ (a & (c ^ d))) + blocks[8] + 1163531501;\n b = (b << 20 | b >>> 12) + c << 0;\n a += (c ^ (d & (b ^ c))) + blocks[13] - 1444681467;\n a = (a << 5 | a >>> 27) + b << 0;\n d += (b ^ (c & (a ^ b))) + blocks[2] - 51403784;\n d = (d << 9 | d >>> 23) + a << 0;\n c += (a ^ (b & (d ^ a))) + blocks[7] + 1735328473;\n c = (c << 14 | c >>> 18) + d << 0;\n b += (d ^ (a & (c ^ d))) + blocks[12] - 1926607734;\n b = (b << 20 | b >>> 12) + c << 0;\n bc = b ^ c;\n a += (bc ^ d) + blocks[5] - 378558;\n a = (a << 4 | a >>> 28) + b << 0;\n d += (bc ^ a) + blocks[8] - 2022574463;\n d = (d << 11 | d >>> 21) + a << 0;\n da = d ^ a;\n c += (da ^ b) + blocks[11] + 1839030562;\n c = (c << 16 | c >>> 16) + d << 0;\n b += (da ^ c) + blocks[14] - 35309556;\n b = (b << 23 | b >>> 9) + c << 0;\n bc = b ^ c;\n a += (bc ^ d) + blocks[1] - 1530992060;\n a = (a << 4 | a >>> 28) + b << 0;\n d += (bc ^ a) + blocks[4] + 1272893353;\n d = (d << 11 | d >>> 21) + a << 0;\n da = d ^ a;\n c += (da ^ b) + blocks[7] - 155497632;\n c = (c << 16 | c >>> 16) + d << 0;\n b += (da ^ c) + blocks[10] - 1094730640;\n b = (b << 23 | b >>> 9) + c << 0;\n bc = b ^ c;\n a += (bc ^ d) + blocks[13] + 681279174;\n a = (a << 4 | a >>> 28) + b << 0;\n d += (bc ^ a) + blocks[0] - 358537222;\n d = (d << 11 | d >>> 21) + a << 0;\n da = d ^ a;\n c += (da ^ b) + blocks[3] - 722521979;\n c = (c << 16 | c >>> 16) + d << 0;\n b += (da ^ c) + blocks[6] + 76029189;\n b = (b << 23 | b >>> 9) + c << 0;\n bc = b ^ c;\n a += (bc ^ d) + blocks[9] - 640364487;\n a = (a << 4 | a >>> 28) + b << 0;\n d += (bc ^ a) + blocks[12] - 421815835;\n d = (d << 11 | d >>> 21) + a << 0;\n da = d ^ a;\n c += (da ^ b) + blocks[15] + 530742520;\n c = (c << 16 | c >>> 16) + d << 0;\n b += (da ^ c) + blocks[2] - 995338651;\n b = (b << 23 | b >>> 9) + c << 0;\n a += (c ^ (b | ~d)) + blocks[0] - 198630844;\n a = (a << 6 | a >>> 26) + b << 0;\n d += (b ^ (a | ~c)) + blocks[7] + 1126891415;\n d = (d << 10 | d >>> 22) + a << 0;\n c += (a ^ (d | ~b)) + blocks[14] - 1416354905;\n c = (c << 15 | c >>> 17) + d << 0;\n b += (d ^ (c | ~a)) + blocks[5] - 57434055;\n b = (b << 21 | b >>> 11) + c << 0;\n a += (c ^ (b | ~d)) + blocks[12] + 1700485571;\n a = (a << 6 | a >>> 26) + b << 0;\n d += (b ^ (a | ~c)) + blocks[3] - 1894986606;\n d = (d << 10 | d >>> 22) + a << 0;\n c += (a ^ (d | ~b)) + blocks[10] - 1051523;\n c = (c << 15 | c >>> 17) + d << 0;\n b += (d ^ (c | ~a)) + blocks[1] - 2054922799;\n b = (b << 21 | b >>> 11) + c << 0;\n a += (c ^ (b | ~d)) + blocks[8] + 1873313359;\n a = (a << 6 | a >>> 26) + b << 0;\n d += (b ^ (a | ~c)) + blocks[15] - 30611744;\n d = (d << 10 | d >>> 22) + a << 0;\n c += (a ^ (d | ~b)) + blocks[6] - 1560198380;\n c = (c << 15 | c >>> 17) + d << 0;\n b += (d ^ (c | ~a)) + blocks[13] + 1309151649;\n b = (b << 21 | b >>> 11) + c << 0;\n a += (c ^ (b | ~d)) + blocks[4] - 145523070;\n a = (a << 6 | a >>> 26) + b << 0;\n d += (b ^ (a | ~c)) + blocks[11] - 1120210379;\n d = (d << 10 | d >>> 22) + a << 0;\n c += (a ^ (d | ~b)) + blocks[2] + 718787259;\n c = (c << 15 | c >>> 17) + d << 0;\n b += (d ^ (c | ~a)) + blocks[9] - 343485551;\n b = (b << 21 | b >>> 11) + c << 0;\n\n if (this.first) {\n this.h0 = a + 1732584193 << 0;\n this.h1 = b - 271733879 << 0;\n this.h2 = c - 1732584194 << 0;\n this.h3 = d + 271733878 << 0;\n this.first = false;\n } else {\n this.h0 = this.h0 + a << 0;\n this.h1 = this.h1 + b << 0;\n this.h2 = this.h2 + c << 0;\n this.h3 = this.h3 + d << 0;\n }\n};\n\n/**\n * @method hex\n * @memberof Md5\n * @instance\n * @description Output hash as hex string\n * @returns {String} Hex string\n * @see {@link md5.hex}\n * @example\n * hash.hex();\n */\nMd5.prototype.hex = function () {\n this.finalize();\n\n var h0 = this.h0, h1 = this.h1, h2 = this.h2, h3 = this.h3;\n\n return HEX_CHARS[(h0 >>> 4) & 0x0F] + HEX_CHARS[h0 & 0x0F] +\n HEX_CHARS[(h0 >>> 12) & 0x0F] + HEX_CHARS[(h0 >>> 8) & 0x0F] +\n HEX_CHARS[(h0 >>> 20) & 0x0F] + HEX_CHARS[(h0 >>> 16) & 0x0F] +\n HEX_CHARS[(h0 >>> 28) & 0x0F] + HEX_CHARS[(h0 >>> 24) & 0x0F] +\n HEX_CHARS[(h1 >>> 4) & 0x0F] + HEX_CHARS[h1 & 0x0F] +\n HEX_CHARS[(h1 >>> 12) & 0x0F] + HEX_CHARS[(h1 >>> 8) & 0x0F] +\n HEX_CHARS[(h1 >>> 20) & 0x0F] + HEX_CHARS[(h1 >>> 16) & 0x0F] +\n HEX_CHARS[(h1 >>> 28) & 0x0F] + HEX_CHARS[(h1 >>> 24) & 0x0F] +\n HEX_CHARS[(h2 >>> 4) & 0x0F] + HEX_CHARS[h2 & 0x0F] +\n HEX_CHARS[(h2 >>> 12) & 0x0F] + HEX_CHARS[(h2 >>> 8) & 0x0F] +\n HEX_CHARS[(h2 >>> 20) & 0x0F] + HEX_CHARS[(h2 >>> 16) & 0x0F] +\n HEX_CHARS[(h2 >>> 28) & 0x0F] + HEX_CHARS[(h2 >>> 24) & 0x0F] +\n HEX_CHARS[(h3 >>> 4) & 0x0F] + HEX_CHARS[h3 & 0x0F] +\n HEX_CHARS[(h3 >>> 12) & 0x0F] + HEX_CHARS[(h3 >>> 8) & 0x0F] +\n HEX_CHARS[(h3 >>> 20) & 0x0F] + HEX_CHARS[(h3 >>> 16) & 0x0F] +\n HEX_CHARS[(h3 >>> 28) & 0x0F] + HEX_CHARS[(h3 >>> 24) & 0x0F];\n};\n\n/**\n * @method toString\n * @memberof Md5\n * @instance\n * @description Output hash as hex string\n * @returns {String} Hex string\n * @see {@link md5.hex}\n * @example\n * hash.toString();\n */\nMd5.prototype.toString = Md5.prototype.hex;\n\n/**\n * @method digest\n * @memberof Md5\n * @instance\n * @description Output hash as bytes array\n * @returns {Array} Bytes array\n * @see {@link md5.digest}\n * @example\n * hash.digest();\n */\nMd5.prototype.digest = function () {\n this.finalize();\n\n var h0 = this.h0, h1 = this.h1, h2 = this.h2, h3 = this.h3;\n return [\n h0 & 0xFF, (h0 >>> 8) & 0xFF, (h0 >>> 16) & 0xFF, (h0 >>> 24) & 0xFF,\n h1 & 0xFF, (h1 >>> 8) & 0xFF, (h1 >>> 16) & 0xFF, (h1 >>> 24) & 0xFF,\n h2 & 0xFF, (h2 >>> 8) & 0xFF, (h2 >>> 16) & 0xFF, (h2 >>> 24) & 0xFF,\n h3 & 0xFF, (h3 >>> 8) & 0xFF, (h3 >>> 16) & 0xFF, (h3 >>> 24) & 0xFF\n ];\n};\n\n/**\n * @method array\n * @memberof Md5\n * @instance\n * @description Output hash as bytes array\n * @returns {Array} Bytes array\n * @see {@link md5.array}\n * @example\n * hash.array();\n */\nMd5.prototype.array = Md5.prototype.digest;\n\n/**\n * @method arrayBuffer\n * @memberof Md5\n * @instance\n * @description Output hash as ArrayBuffer\n * @returns {ArrayBuffer} ArrayBuffer\n * @see {@link md5.arrayBuffer}\n * @example\n * hash.arrayBuffer();\n */\nMd5.prototype.arrayBuffer = function () {\n this.finalize();\n\n var buffer = new ArrayBuffer(16);\n var blocks = new Uint32Array(buffer);\n blocks[0] = this.h0;\n blocks[1] = this.h1;\n blocks[2] = this.h2;\n blocks[3] = this.h3;\n return buffer;\n};\n\n/**\n * @method buffer\n * @deprecated This maybe confuse with Buffer in node.js. Please use arrayBuffer instead.\n * @memberof Md5\n * @instance\n * @description Output hash as ArrayBuffer\n * @returns {ArrayBuffer} ArrayBuffer\n * @see {@link md5.buffer}\n * @example\n * hash.buffer();\n */\nMd5.prototype.buffer = Md5.prototype.arrayBuffer;\n\n/**\n * @method base64\n * @memberof Md5\n * @instance\n * @description Output hash as base64 string\n * @returns {String} base64 string\n * @see {@link md5.base64}\n * @example\n * hash.base64();\n */\nMd5.prototype.base64 = function () {\n var v1, v2, v3, base64Str = '', bytes = this.array();\n for (var i = 0; i < 15;) {\n v1 = bytes[i++];\n v2 = bytes[i++];\n v3 = bytes[i++];\n base64Str += BASE64_ENCODE_CHAR[v1 >>> 2] +\n BASE64_ENCODE_CHAR[(v1 << 4 | v2 >>> 4) & 63] +\n BASE64_ENCODE_CHAR[(v2 << 2 | v3 >>> 6) & 63] +\n BASE64_ENCODE_CHAR[v3 & 63];\n }\n v1 = bytes[i];\n base64Str += BASE64_ENCODE_CHAR[v1 >>> 2] +\n BASE64_ENCODE_CHAR[(v1 << 4) & 63] +\n '==';\n return base64Str;\n};\n\n/**\n * HmacMd5 class\n * @class HmacMd5\n * @extends Md5\n * @description This is internal class.\n * @see {@link md5.hmac.create}\n */\nfunction HmacMd5(key, sharedMemory) {\n var i, result = formatMessage(key);\n key = result[0];\n if (result[1]) {\n var bytes = [], length = key.length, index = 0, code;\n for (i = 0; i < length; ++i) {\n code = key.charCodeAt(i);\n if (code < 0x80) {\n bytes[index++] = code;\n } else if (code < 0x800) {\n bytes[index++] = (0xc0 | (code >>> 6));\n bytes[index++] = (0x80 | (code & 0x3f));\n } else if (code < 0xd800 || code >= 0xe000) {\n bytes[index++] = (0xe0 | (code >>> 12));\n bytes[index++] = (0x80 | ((code >>> 6) & 0x3f));\n bytes[index++] = (0x80 | (code & 0x3f));\n } else {\n code = 0x10000 + (((code & 0x3ff) << 10) | (key.charCodeAt(++i) & 0x3ff));\n bytes[index++] = (0xf0 | (code >>> 18));\n bytes[index++] = (0x80 | ((code >>> 12) & 0x3f));\n bytes[index++] = (0x80 | ((code >>> 6) & 0x3f));\n bytes[index++] = (0x80 | (code & 0x3f));\n }\n }\n key = bytes;\n }\n\n if (key.length > 64) {\n key = (new Md5(true)).update(key).array();\n }\n\n var oKeyPad = [], iKeyPad = [];\n for (i = 0; i < 64; ++i) {\n var b = key[i] || 0;\n oKeyPad[i] = 0x5c ^ b;\n iKeyPad[i] = 0x36 ^ b;\n }\n\n Md5.call(this, sharedMemory);\n\n this.update(iKeyPad);\n this.oKeyPad = oKeyPad;\n this.inner = true;\n this.sharedMemory = sharedMemory;\n}\nHmacMd5.prototype = new Md5();\n\nHmacMd5.prototype.finalize = function () {\n Md5.prototype.finalize.call(this);\n if (this.inner) {\n this.inner = false;\n var innerHash = this.array();\n Md5.call(this, this.sharedMemory);\n this.update(this.oKeyPad);\n this.update(innerHash);\n Md5.prototype.finalize.call(this);\n }\n};\n\nconst md5 = createMethod();\nexport default md5;\n","/**\n * This file is part of AesBridge - modern cross-language AES encryption library\n * Repository: https://github.com/mervick/aes-bridge\n *\n * Copyright Andrey Izman (c) 2018-2025 <izmanw@gmail.com>\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\nimport md5 from './md5.js';\nimport { toBytes, generateRandom, base64Encode, base64Decode } from './common.js';\n\nconst BLOCK_SIZE = 16;\nconst KEY_LEN = 32;\nconst IV_LEN = 16;\n\n/**\n * Encrypts plaintext using AES-256-CBC with OpenSSL-compatible format.\n * Output: Base64 encoded \"Salted__\" + salt(8) + ciphertext\n *\n * @param {string|Uint8Array} raw - Data to encrypt\n * @param {string|Uint8Array} passphrase - Password\n * @returns {string} - Base64 encoded ciphertext\n */\nexport async function encryptLegacy(raw, passphrase) {\n const salt = generateRandom(8);\n const { key, iv } = await deriveKeyAndIv(passphrase, salt);\n\n const ciphertext = new Uint8Array(await crypto.subtle.encrypt(\n { name: 'AES-CBC', iv },\n key,\n toBytes(raw)\n ));\n\n const result = new Uint8Array(8 + 8 + ciphertext.length);\n result.set(toBytes('Salted__')); // 8 bytes\n result.set(salt, 8);\n result.set(ciphertext, 16);\n return base64Encode(result);\n}\n\n/**\n * Decrypts Base64-encoded AES-256-CBC data with OpenSSL-compatible format.\n *\n * @param {string} enc - Base64 encoded input\n * @param {string|Uint8Array} passphrase - Password\n * @returns {Promise<Uint8Array>} - Decrypted plaintext\n */\nexport async function decryptLegacy(enc, passphrase) {\n const ct = base64Decode(enc);\n if (String.fromCharCode(...ct.slice(0, 8)) !== 'Salted__') {\n throw new Error('Invalid OpenSSL header');\n }\n const salt = ct.slice(8, 16);\n const { key, iv } = await deriveKeyAndIv(passphrase, salt);\n\n return new Uint8Array(await crypto.subtle.decrypt(\n { name: 'AES-CBC', iv },\n key,\n ct.slice(16)\n ));\n}\n\n/**\n * Derives key and IV using OpenSSL EVP_BytesToKey-style KDF (MD5).\n *\n * @param {string|Uint8Array} password\n * @param {Uint8Array} salt\n * @returns {Promise<{key: CryptoKey, iv: Uint8Array}>}\n */\nasync function deriveKeyAndIv(password, salt) {\n password = toBytes(password);\n let d = new Uint8Array(0);\n let prev = new Uint8Array(0);\n\n while (d.length < KEY_LEN + IV_LEN) {\n const data = concatUint8Arrays(prev, password, salt);\n prev = computeMd5(data);\n d = concatUint8Arrays(d, prev);\n }\n\n const keyBytes = d.slice(0, KEY_LEN);\n const iv = d.slice(KEY_LEN, KEY_LEN + IV_LEN);\n const key = await crypto.subtle.importKey('raw', keyBytes, 'AES-CBC', false, ['encrypt', 'decrypt']);\n\n return { key, iv };\n}\n\n/**\n * Computes MD5 hash.\n *\n * @param {Uint8Array} data\n * @returns {Uint8Array}\n */\nfunction computeMd5(data) {\n // Если data — Uint8Array, преобразуем в строку или Buffer\n const input = data instanceof Uint8Array ? Buffer.from(data) : data;\n const hash = md5(input); // Вычисляем MD5\n return new Uint8Array(Buffer.from(hash, 'hex')); // Возвращаем Uint8Array\n}\n\n/**\n * Concatenates multiple Uint8Arrays.\n *\n * @param {...Uint8Array} arrays\n * @returns {Uint8Array}\n */\nfunction concatUint8Arrays(...arrays) {\n const totalLen = arrays.reduce((acc, val) => acc + val.length, 0);\n const result = new Uint8Array(totalLen);\n let offset = 0;\n for (const arr of arrays) {\n result.set(arr, offset);\n offset += arr.length;\n }\n return result;\n}\n","/**\n * This file is part of AesBridge - modern cross-language AES encryption library\n * Repository: https://github.com/mervick/aes-bridge\n *\n * Copyright Andrey Izman (c) 2018-2025 <izmanw@gmail.com>\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\nimport { encryptCbc, encryptCbcBin, decryptCbc, decryptCbcBin } from \"./cbc\";\nimport { encryptGcm, encryptGcmBin, decryptGcm, decryptGcmBin } from \"./gcm\";\nimport { encryptLegacy, decryptLegacy } from \"./legacy\";\n\nconst encrypt = encryptGcm;\nconst decrypt = decryptGcm;\n\nexport {\n encrypt,\n decrypt,\n encryptCbc,\n decryptCbc,\n encryptCbcBin,\n decryptCbcBin,\n encryptGcm,\n decryptGcm,\n encryptGcmBin,\n decryptGcmBin,\n encryptLegacy,\n decryptLegacy\n};\n"],"names":["toBytes","input","TextEncoder","encode","generateRandom","length","array","Uint8Array","crypto","getRandomValues","base64Encode","bytes","btoa","String","fromCharCode","base64Decode","b64","TextDecoder","decode","bytesToString","binary","atob","i","charCodeAt","async","deriveKeys","password","salt","keyMaterial","subtle","importKey","name","derived","deriveBits","iterations","hash","aesKey","slice","hmacKey","encryptCbcBin","plaintext","iv","ciphertext","encrypt","macData","set","tag","sign","result","decryptCbcBin","data","verify","Error","decrypt","encryptCbc","decryptCbc","deriveKey","encryptGcmBin","nonce","key","encrypted","tagLength","decryptGcmBin","ciphertextWithTag","decrypted","encryptGcm","decryptGcm","buffer8","INPUT_ERROR","NODE_JS","process","versions","node","ARRAY_BUFFER","ArrayBuffer","HEX_CHARS","split","EXTRA","SHIFT","OUTPUT_TYPES","BASE64_ENCODE_CHAR","blocks","buffer","Uint32Array","isArray","Array","obj","Object","prototype","toString","call","isView","constructor","formatMessage","message","type","createOutputMethod","outputType","Md5","update","nodeWrap","method","bufferFrom","require","Buffer","from","createHash","digest","sharedMemory","this","h0","h1","h2","h3","start","hBytes","finalized","hashed","first","HmacMd5","code","index","oKeyPad","iKeyPad","b","inner","isString","lastByteIndex","finalize","a","c","d","bc","da","hex","arrayBuffer","base64","v1","v2","v3","base64Str","innerHash","md5","create","createMethod","encryptLegacy","raw","passphrase","deriveKeyAndIv","decryptLegacy","enc","ct","prev","KEY_LEN","computeMd5","concatUint8Arrays","keyBytes","arrays","totalLen","reduce","acc","val","offset","arr"],"mappings":"AAgCO,SAASA,EAAQC,GACtB,MAAqB,iBAAVA,GACF,IAAIC,aAAcC,OAAOF,GAE3BA,CACT,CAqBO,SAASG,EAAeC,GAC7B,MAAMC,EAAQ,IAAIC,WAAWF,GAE7B,OADAG,OAAOC,gBAAgBH,GAChBA,CACT,CAQO,SAASI,EAAaC,GAC3B,OAAOC,KAAKC,OAAOC,gBAAgBH,GACrC,CAQO,SAASI,EAAaC,GAC3BA,EApCK,SAAuBL,GAC5B,OAAIA,aAAiBJ,YACZ,IAAIU,aAAcC,OAAOP,GAE3BA,CACT,CA+BQQ,CAAcH,GACpB,MAAMI,EAASC,KAAKL,GACdL,EAAQ,IAAIJ,WAAWa,EAAOf,QACpC,IAAK,IAAIiB,EAAI,EAAGA,EAAIF,EAAOf,OAAQiB,IAAKX,EAAMW,GAAKF,EAAOG,WAAWD,GACrE,OAAOX,CACT,CCpDAa,eAAeC,EAAWC,EAAUC,GAClC,MAAMC,QAAoBpB,OAAOqB,OAAOC,UACtC,MACA9B,EAAQ0B,GACR,CAAEK,KAAM,WACR,EACA,CAAC,aAAc,cAGXC,QAAgBxB,OAAOqB,OAAOI,WAClC,CACEF,KAAM,SACNJ,KAAMA,EACNO,WAAY,IACZC,KAAM,WAERP,EACA,KAGIjB,EAAQ,IAAIJ,WAAWyB,GAC7B,MAAO,CACLI,aAAc5B,OAAOqB,OAAOC,UAAU,MAAOnB,EAAM0B,MAAM,EAAG,IAAK,CAAEN,KAAM,YAAa,EAAO,CAAC,UAAW,YACzGO,cAAe9B,OAAOqB,OAAOC,UAAU,MAAOnB,EAAM0B,MAAM,IAAK,CAAEN,KAAM,OAAQI,KAAM,YAAa,EAAO,CAAC,OAAQ,WAEtH,CAUOX,eAAee,EAAcC,EAAWd,GAC7Cc,EAAYxC,EAAQwC,GACpBd,EAAW1B,EAAQ0B,GACnB,MAAMC,EAAOvB,EAAe,IACtBqC,EAAKrC,EAAe,KACpBgC,OAAEA,EAAME,QAAEA,SAAkBb,EAAWC,EAAUC,GAEjDe,EAAa,IAAInC,iBAAiBC,OAAOqB,OAAOc,QACpD,CAAEZ,KAAM,UAAWU,GAAIA,GACvBL,EACAI,IAGII,EAAU,IAAIrC,WAAWkC,EAAGpC,OAASqC,EAAWrC,QACtDuC,EAAQC,IAAIJ,GACZG,EAAQC,IAAIH,EAAYD,EAAGpC,QAE3B,MAAMyC,EAAM,IAAIvC,iBAAiBC,OAAOqB,OAAOkB,KAAK,OAAQT,EAASM,IAE/DI,EAAS,IAAIzC,WAAWoB,EAAKtB,OAASoC,EAAGpC,OAASqC,EAAWrC,OAASyC,EAAIzC,QAMhF,OALA2C,EAAOH,IAAIlB,GACXqB,EAAOH,IAAIJ,EAAId,EAAKtB,QACpB2C,EAAOH,IAAIH,EAAYf,EAAKtB,OAASoC,EAAGpC,QACxC2C,EAAOH,IAAIC,EAAKnB,EAAKtB,OAASoC,EAAGpC,OAASqC,EAAWrC,QAE9C2C,CACT,CASOxB,eAAeyB,EAAcC,EAAMxB,GACxCwB,EAAOlD,EAAQkD,GACfxB,EAAW1B,EAAQ0B,GACnB,MAAMC,EAAOuB,EAAKb,MAAM,EAAG,IACrBI,EAAKS,EAAKb,MAAM,GAAI,IACpBS,EAAMI,EAAKb,WACXK,EAAaQ,EAAKb,MAAM,IAAI,KAE5BD,OAAEA,EAAME,QAAEA,SAAkBb,EAAWC,EAAUC,GAEjDiB,EAAU,IAAIrC,WAAWkC,EAAGpC,OAASqC,EAAWrC,QACtDuC,EAAQC,IAAIJ,GACZG,EAAQC,IAAIH,EAAYD,EAAGpC,QAG3B,UADoBG,OAAOqB,OAAOsB,OAAO,OAAQb,EAASQ,EAAKF,GACnD,MAAM,IAAIQ,MAAM,4BAE5B,OAAO,IAAI7C,iBAAiBC,OAAOqB,OAAOwB,QACxC,CAAEtB,KAAM,UAAWU,GAAIA,GACvBL,EACAM,GAEJ,CASOlB,eAAe8B,EAAWJ,EAAMxB,GAErC,OAAOhB,QADiB6B,EAAcW,EAAMxB,GAE9C,CASOF,eAAe+B,EAAWL,EAAMxB,GAErC,OAAOuB,EADSlC,EAAamC,GACCxB,EAChC,CCpHAF,eAAegC,EAAU9B,EAAUC,GACjC,MAAMC,QAAoBpB,OAAOqB,OAAOC,UACtC,MACA9B,EAAQ0B,GACR,CAAEK,KAAM,WACR,EACA,CAAC,aAAc,cAIjB,OAAOvB,OAAOqB,OAAO2B,UACnB,CACEzB,KAAM,SACNJ,KAAMA,EACNO,WAAY,IACZC,KAAM,WAERP,EACA,CAAEG,KAAM,UAAW1B,OAAQ,MAC3B,EACA,CAAC,UAAW,WAEhB,CAUOmB,eAAeiC,EAAcjB,EAAWd,GAC7Cc,EAAYxC,EAAQwC,GACpBd,EAAW1B,EAAQ0B,GACnB,MAAMC,EAAOvB,EAAe,IACtBsD,EAAQtD,EAAe,IACvBuD,QAAYH,EAAU9B,EAAUC,GAEhCiC,EAAY,IAAIrD,iBAAiBC,OAAOqB,OAAOc,QACnD,CACEZ,KAAM,UACNU,GAAIiB,EACJG,UAAW,KAEbF,EACAnB,IAGIQ,EAAS,IAAIzC,WAAWoB,EAAKtB,OAASqD,EAAMrD,OAASuD,EAAUvD,QAIrE,OAHA2C,EAAOH,IAAIlB,GACXqB,EAAOH,IAAIa,EAAO/B,EAAKtB,QACvB2C,EAAOH,IAAIe,EAAWjC,EAAKtB,OAASqD,EAAMrD,QACnC2C,CACT,CASOxB,eAAesC,EAAcZ,EAAMxB,GACxCwB,EAAOlD,EAAQkD,GACfxB,EAAW1B,EAAQ0B,GAEnB,MAAMC,EAAOuB,EAAKb,MAAM,EAAG,IACrBqB,EAAQR,EAAKb,MAAM,GAAI,IACvB0B,EAAoBb,EAAKb,MAAM,IAE/BsB,QAAYH,EAAU9B,EAAUC,GAEhCqC,QAAkBxD,OAAOqB,OAAOwB,QACpC,CACEtB,KAAM,UACNU,GAAIiB,EACJG,UAAW,KAEbF,EACAI,GAGF,OAAO,IAAIxD,WAAWyD,EACxB,CASOxC,eAAeyC,EAAWf,EAAMxB,GAErC,OAAOhB,QADc+C,EAAcP,EAAMxB,GAE3C,CASOF,eAAe0C,EAAWhB,EAAMxB,GAErC,OAAOoC,EADK/C,EAAaf,EAAQkD,IACPxB,EAC5B,CClHA,IAUiByC,EAVbC,EAAc,wBAEdC,EAA6B,iBAAZC,SAAwBA,QAAQC,UAAYD,QAAQC,SAASC,KAC9EC,EAAsC,oBAAhBC,YACtBC,EAAY,mBAAmBC,MAAM,IACrCC,EAAQ,CAAC,IAAK,MAAO,SAAS,YAC9BC,EAAQ,CAAC,EAAG,EAAG,GAAI,IACnBC,EAAe,CAAC,MAAO,QAAS,SAAU,SAAU,cAAe,UACnEC,EAAqB,mEAAmEJ,MAAM,IAE9FK,EAAS,GACb,GAAIR,EAAc,CAChB,IAAIS,EAAS,IAAIR,YAAY,IAC7BP,EAAU,IAAI5D,WAAW2E,GACzBD,EAAS,IAAIE,YAAYD,EAC3B,CAEA,IAAIE,EAAUC,MAAMD,QACfA,IACHA,EAAU,SAAUE,GAClB,MAA+C,mBAAxCC,OAAOC,UAAUC,SAASC,KAAKJ,EACxC,GAGF,IAAIK,EAASjB,YAAYiB,OACrBlB,IAAiBkB,IACnBA,EAAS,SAAUL,GACjB,MAAsB,iBAARA,GAAoBA,EAAIJ,QAAUI,EAAIJ,OAAOU,cAAgBlB,WAC7E,GAIF,IAAImB,EAAgB,SAAUC,GAC5B,IAAIC,SAAcD,EAClB,GAAa,WAATC,EACF,MAAO,CAACD,GAAS,GAEnB,GAAa,WAATC,GAAiC,OAAZD,EACvB,MAAM,IAAI1C,MAAMgB,GAElB,GAAIK,GAAgBqB,EAAQF,cAAgBlB,YAC1C,MAAO,CAAC,IAAInE,WAAWuF,IAAU,GAEnC,IAAKV,EAAQU,KAAaH,EAAOG,GAC/B,MAAM,IAAI1C,MAAMgB,GAElB,MAAO,CAAC0B,GAAS,EACnB,EA2DIE,EAAqB,SAAUC,GACjC,OAAO,SAAUH,GACf,OAAO,IAAII,GAAI,GAAMC,OAAOL,GAASG,IACvC,CACF,EAwCIG,EAAW,SAAUC,GACvB,IAEIC,EAFA9F,EAAS+F,QAAQ,UACjBC,EAASD,QAAQ,UAAUC,OAG7BF,EADEE,EAAOC,KACID,EAAOC,KAEP,SAAUX,GACrB,OAAO,IAAIU,EAAOV,EACpB,EAmBF,OAjBiB,SAAUA,GACzB,GAAuB,iBAAZA,EACT,OAAOtF,EAAOkG,WAAW,OAAOP,OAAOL,EAAS,QAAQa,OAAO,OAE/D,GAAIb,QACF,MAAM,IAAI1C,MAAMgB,GAKpB,OAJa0B,EAAQF,cAAgBlB,cACjCoB,EAAU,IAAIvF,WAAWuF,IAGzBV,EAAQU,IAAYH,EAAOG,IAC7BA,EAAQF,cAAgBY,EACjBhG,EAAOkG,WAAW,OAAOP,OAAOG,EAAWR,IAAUa,OAAO,OAE5DN,EAAOP,EAElB,CAEF,EAsHA,SAASI,EAAIU,GACX,GAAIA,EACF3B,EAAO,GAAKA,EAAO,IAAMA,EAAO,GAAKA,EAAO,GAAKA,EAAO,GACxDA,EAAO,GAAKA,EAAO,GAAKA,EAAO,GAAKA,EAAO,GAC3CA,EAAO,GAAKA,EAAO,GAAKA,EAAO,IAAMA,EAAO,IAC5CA,EAAO,IAAMA,EAAO,IAAMA,EAAO,IAAMA,EAAO,IAAM,EACpD4B,KAAK5B,OAASA,EACd4B,KAAK1C,QAAUA,OAEf,GAAIM,EAAc,CAChB,IAAIS,EAAS,IAAIR,YAAY,IAC7BmC,KAAK1C,QAAU,IAAI5D,WAAW2E,GAC9B2B,KAAK5B,OAAS,IAAIE,YAAYD,EAChC,MACE2B,KAAK5B,OAAS,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAGnE4B,KAAKC,GAAKD,KAAKE,GAAKF,KAAKG,GAAKH,KAAKI,GAAKJ,KAAKK,MAAQL,KAAKlG,MAAQkG,KAAKM,OAAS,EAChFN,KAAKO,UAAYP,KAAKQ,QAAS,EAC/BR,KAAKS,OAAQ,CACf,CA2bA,SAASC,EAAQ5D,EAAKiD,GACpB,IAAItF,EAAG0B,EAAS6C,EAAclC,GAE9B,GADAA,EAAMX,EAAO,GACTA,EAAO,GAAI,CACb,IAAgDwE,EAA5C7G,EAAQ,GAAIN,EAASsD,EAAItD,OAAQoH,EAAQ,EAC7C,IAAKnG,EAAI,EAAGA,EAAIjB,IAAUiB,GACxBkG,EAAO7D,EAAIpC,WAAWD,IACX,IACTX,EAAM8G,KAAWD,EACRA,EAAO,MAChB7G,EAAM8G,KAAY,IAAQD,IAAS,EACnC7G,EAAM8G,KAAY,IAAe,GAAPD,GACjBA,EAAO,OAAUA,GAAQ,OAClC7G,EAAM8G,KAAY,IAAQD,IAAS,GACnC7G,EAAM8G,KAAY,IAASD,IAAS,EAAK,GACzC7G,EAAM8G,KAAY,IAAe,GAAPD,IAE1BA,EAAO,QAAoB,KAAPA,IAAiB,GAA6B,KAAtB7D,EAAIpC,aAAaD,IAC7DX,EAAM8G,KAAY,IAAQD,IAAS,GACnC7G,EAAM8G,KAAY,IAASD,IAAS,GAAM,GAC1C7G,EAAM8G,KAAY,IAASD,IAAS,EAAK,GACzC7G,EAAM8G,KAAY,IAAe,GAAPD,GAG9B7D,EAAMhD,CACR,CAEIgD,EAAItD,OAAS,KACfsD,EAAM,IAAKuC,GAAI,GAAOC,OAAOxC,GAAKrD,SAGpC,IAAIoH,EAAU,GAAIC,EAAU,GAC5B,IAAKrG,EAAI,EAAGA,EAAI,KAAMA,EAAG,CACvB,IAAIsG,EAAIjE,EAAIrC,IAAM,EAClBoG,EAAQpG,GAAK,GAAOsG,EACpBD,EAAQrG,GAAK,GAAOsG,CACtB,CAEA1B,EAAIR,KAAKmB,KAAMD,GAEfC,KAAKV,OAAOwB,GACZd,KAAKa,QAAUA,EACfb,KAAKgB,OAAQ,EACbhB,KAAKD,aAAeA,CACtB,CA5dAV,EAAIV,UAAUW,OAAS,SAAUL,GAC/B,GAAIe,KAAKO,UACP,MAAM,IAAIhE,MAzUO,2BA4UnB,IAAIJ,EAAS6C,EAAcC,GAC3BA,EAAU9C,EAAO,GAKjB,IAJA,IACIwE,EAAiBlG,EADjBwG,EAAW9E,EAAO,GACZyE,EAAQ,EAAMpH,EAASyF,EAAQzF,OAAQ4E,EAAS4B,KAAK5B,OAC3Dd,EAAU0C,KAAK1C,QAEZsD,EAAQpH,GAAQ,CAUrB,GATIwG,KAAKQ,SACPR,KAAKQ,QAAS,EACdpC,EAAO,GAAKA,EAAO,IACnBA,EAAO,IAAMA,EAAO,GAAKA,EAAO,GAAKA,EAAO,GAC5CA,EAAO,GAAKA,EAAO,GAAKA,EAAO,GAAKA,EAAO,GAC3CA,EAAO,GAAKA,EAAO,GAAKA,EAAO,IAAMA,EAAO,IAC5CA,EAAO,IAAMA,EAAO,IAAMA,EAAO,IAAMA,EAAO,IAAM,GAGlD6C,EACF,GAAIrD,EACF,IAAKnD,EAAIuF,KAAKK,MAAOO,EAAQpH,GAAUiB,EAAI,KAAMmG,GAC/CD,EAAO1B,EAAQvE,WAAWkG,IACf,IACTtD,EAAQ7C,KAAOkG,EACNA,EAAO,MAChBrD,EAAQ7C,KAAO,IAAQkG,IAAS,EAChCrD,EAAQ7C,KAAO,IAAe,GAAPkG,GACdA,EAAO,OAAUA,GAAQ,OAClCrD,EAAQ7C,KAAO,IAAQkG,IAAS,GAChCrD,EAAQ7C,KAAO,IAASkG,IAAS,EAAK,GACtCrD,EAAQ7C,KAAO,IAAe,GAAPkG,IAEvBA,EAAO,QAAoB,KAAPA,IAAiB,GAAqC,KAA9B1B,EAAQvE,aAAakG,IACjEtD,EAAQ7C,KAAO,IAAQkG,IAAS,GAChCrD,EAAQ7C,KAAO,IAASkG,IAAS,GAAM,GACvCrD,EAAQ7C,KAAO,IAASkG,IAAS,EAAK,GACtCrD,EAAQ7C,KAAO,IAAe,GAAPkG,QAI3B,IAAKlG,EAAIuF,KAAKK,MAAOO,EAAQpH,GAAUiB,EAAI,KAAMmG,GAC/CD,EAAO1B,EAAQvE,WAAWkG,IACf,IACTxC,EAAO3D,IAAM,IAAMkG,GAAQ1C,EAAY,EAANxD,KACxBkG,EAAO,MAChBvC,EAAO3D,IAAM,KAAO,IAAQkG,IAAS,IAAO1C,EAAY,EAANxD,KAClD2D,EAAO3D,IAAM,KAAO,IAAe,GAAPkG,IAAiB1C,EAAY,EAANxD,MAC1CkG,EAAO,OAAUA,GAAQ,OAClCvC,EAAO3D,IAAM,KAAO,IAAQkG,IAAS,KAAQ1C,EAAY,EAANxD,KACnD2D,EAAO3D,IAAM,KAAO,IAASkG,IAAS,EAAK,KAAU1C,EAAY,EAANxD,KAC3D2D,EAAO3D,IAAM,KAAO,IAAe,GAAPkG,IAAiB1C,EAAY,EAANxD,OAEnDkG,EAAO,QAAoB,KAAPA,IAAiB,GAAqC,KAA9B1B,EAAQvE,aAAakG,IACjExC,EAAO3D,IAAM,KAAO,IAAQkG,IAAS,KAAQ1C,EAAY,EAANxD,KACnD2D,EAAO3D,IAAM,KAAO,IAASkG,IAAS,GAAM,KAAU1C,EAAY,EAANxD,KAC5D2D,EAAO3D,IAAM,KAAO,IAASkG,IAAS,EAAK,KAAU1C,EAAY,EAANxD,KAC3D2D,EAAO3D,IAAM,KAAO,IAAe,GAAPkG,IAAiB1C,EAAY,EAANxD,WAKzD,GAAImD,EACF,IAAKnD,EAAIuF,KAAKK,MAAOO,EAAQpH,GAAUiB,EAAI,KAAMmG,EAC/CtD,EAAQ7C,KAAOwE,EAAQ2B,QAGzB,IAAKnG,EAAIuF,KAAKK,MAAOO,EAAQpH,GAAUiB,EAAI,KAAMmG,EAC/CxC,EAAO3D,IAAM,IAAMwE,EAAQ2B,IAAU3C,EAAY,EAANxD,KAIjDuF,KAAKkB,cAAgBzG,EACrBuF,KAAKlG,OAASW,EAAIuF,KAAKK,MACnB5F,GAAK,IACPuF,KAAKK,MAAQ5F,EAAI,GACjBuF,KAAK1E,OACL0E,KAAKQ,QAAS,GAEdR,KAAKK,MAAQ5F,CAEjB,CAKA,OAJIuF,KAAKlG,MAAQ,aACfkG,KAAKM,QAAUN,KAAKlG,MAAQ,WAAc,EAC1CkG,KAAKlG,MAAQkG,KAAKlG,MAAQ,YAErBkG,IACT,EAEAX,EAAIV,UAAUwC,SAAW,WACvB,IAAInB,KAAKO,UAAT,CAGAP,KAAKO,WAAY,EACjB,IAAInC,EAAS4B,KAAK5B,OAAQ3D,EAAIuF,KAAKkB,cACnC9C,EAAO3D,IAAM,IAAMuD,EAAU,EAAJvD,GACrBA,GAAK,KACFuF,KAAKQ,QACRR,KAAK1E,OAEP8C,EAAO,GAAKA,EAAO,IACnBA,EAAO,IAAMA,EAAO,GAAKA,EAAO,GAAKA,EAAO,GAC5CA,EAAO,GAAKA,EAAO,GAAKA,EAAO,GAAKA,EAAO,GAC3CA,EAAO,GAAKA,EAAO,GAAKA,EAAO,IAAMA,EAAO,IAC5CA,EAAO,IAAMA,EAAO,IAAMA,EAAO,IAAMA,EAAO,IAAM,GAEtDA,EAAO,IAAM4B,KAAKlG,OAAS,EAC3BsE,EAAO,IAAM4B,KAAKM,QAAU,EAAIN,KAAKlG,QAAU,GAC/CkG,KAAK1E,MAhBL,CAiBF,EAEA+D,EAAIV,UAAUrD,KAAO,WACnB,IAAI8F,EAAGL,EAAGM,EAAGC,EAAGC,EAAIC,EAAIpD,EAAS4B,KAAK5B,OAElC4B,KAAKS,MAQPM,IADAA,IALAK,IADAA,EAAIhD,EAAO,GAAK,YACN,EAAIgD,IAAM,IAAM,UAAa,IAIvCC,IADAA,eADAC,IADAA,IAAK,WAAkB,WAAJF,GAAkBhD,EAAO,GAAK,YACvC,GAAKkD,IAAM,IAAMF,EAAK,KACJ,UAAJA,IAAoBhD,EAAO,GAAK,aAC9C,GAAKiD,IAAM,IAAMC,EAAK,IACjBA,EAAIF,IAAOhD,EAAO,GAAK,aAC5B,GAAK2C,IAAM,IAAMM,EAAK,GAEhCD,EAAIpB,KAAKC,GACTc,EAAIf,KAAKE,GACTmB,EAAIrB,KAAKG,GASTY,IADAA,KALAK,IADAA,KADAE,EAAItB,KAAKI,IACEW,GAAKM,EAAIC,IAAOlD,EAAO,GAAK,YAC7B,EAAIgD,IAAM,IAAML,EAAK,IAI/BM,IADAA,IAAMN,GADNO,IADAA,IAAMD,EAAKD,GAAKL,EAAIM,IAAOjD,EAAO,GAAK,YAC7B,GAAKkD,IAAM,IAAMF,EAAK,IAChBA,EAAIL,IAAO3C,EAAO,GAAK,YAC7B,GAAKiD,IAAM,IAAMC,EAAK,IAChBA,EAAIF,IAAOhD,EAAO,GAAK,aAC7B,GAAK2C,IAAM,IAAMM,EAAK,GAUlCN,IADAA,KALAK,IADAA,IAAME,EAAKP,GAAKM,EAAIC,IAAOlD,EAAO,GAAK,YAC7B,EAAIgD,IAAM,IAAML,EAAK,IAI/BM,IADAA,IAAMN,GADNO,IADAA,IAAMD,EAAKD,GAAKL,EAAIM,IAAOjD,EAAO,GAAK,aAC7B,GAAKkD,IAAM,IAAMF,EAAK,IAChBA,EAAIL,IAAO3C,EAAO,GAAK,aAC7B,GAAKiD,IAAM,IAAMC,EAAK,IAChBA,EAAIF,IAAOhD,EAAO,GAAK,WAC7B,GAAK2C,IAAM,IAAMM,EAAK,EAQhCN,IADAA,KALAK,IADAA,IAAME,EAAKP,GAAKM,EAAIC,IAAOlD,EAAO,GAAK,aAC7B,EAAIgD,IAAM,IAAML,EAAK,IAI/BM,IADAA,IAAMN,GADNO,IADAA,IAAMD,EAAKD,GAAKL,EAAIM,IAAOjD,EAAO,GAAK,aAC7B,GAAKkD,IAAM,IAAMF,EAAK,IAChBA,EAAIL,IAAO3C,EAAO,IAAM,QAC9B,GAAKiD,IAAM,IAAMC,EAAK,IAChBA,EAAIF,IAAOhD,EAAO,IAAM,aAC9B,GAAK2C,IAAM,IAAMM,EAAK,EAQhCN,IADAA,KALAK,IADAA,IAAME,EAAKP,GAAKM,EAAIC,IAAOlD,EAAO,IAAM,aAC9B,EAAIgD,IAAM,IAAML,EAAK,IAI/BM,IADAA,IAAMN,GADNO,IADAA,IAAMD,EAAKD,GAAKL,EAAIM,IAAOjD,EAAO,IAAM,WAC9B,GAAKkD,IAAM,IAAMF,EAAK,IAChBA,EAAIL,IAAO3C,EAAO,IAAM,aAC9B,GAAKiD,IAAM,IAAMC,EAAK,IAChBA,EAAIF,IAAOhD,EAAO,IAAM,aAC9B,GAAK2C,IAAM,IAAMM,EAAK,EAQhCN,IADAA,KAHAO,IADAA,IAAMP,EAAKM,IADXD,IADAA,IAAMC,EAAKC,GAAKP,EAAIM,IAAOjD,EAAO,GAAK,YAC7B,EAAIgD,IAAM,IAAML,EAAK,GACXA,IAAO3C,EAAO,GAAK,aAC7B,EAAIkD,IAAM,IAAMF,EAAK,GAGpBA,IADXC,IADAA,IAAMD,EAAKL,GAAKO,EAAIF,IAAOhD,EAAO,IAAM,YAC9B,GAAKiD,IAAM,IAAMC,EAAK,GACZA,IAAOlD,EAAO,GAAK,YAC7B,GAAK2C,IAAM,IAAMM,EAAK,EAQhCN,IADAA,KAHAO,IADAA,IAAMP,EAAKM,IADXD,IADAA,IAAMC,EAAKC,GAAKP,EAAIM,IAAOjD,EAAO,GAAK,YAC7B,EAAIgD,IAAM,IAAML,EAAK,GACXA,IAAO3C,EAAO,IAAM,WAC9B,EAAIkD,IAAM,IAAMF,EAAK,GAGpBA,IADXC,IADAA,IAAMD,EAAKL,GAAKO,EAAIF,IAAOhD,EAAO,IAAM,YAC9B,GAAKiD,IAAM,IAAMC,EAAK,GACZA,IAAOlD,EAAO,GAAK,YAC7B,GAAK2C,IAAM,IAAMM,EAAK,EAQhCN,IADAA,KAHAO,IADAA,IAAMP,EAAKM,IADXD,IADAA,IAAMC,EAAKC,GAAKP,EAAIM,IAAOjD,EAAO,GAAK,YAC7B,EAAIgD,IAAM,IAAML,EAAK,GACXA,IAAO3C,EAAO,IAAM,aAC9B,EAAIkD,IAAM,IAAMF,EAAK,GAGpBA,IADXC,IADAA,IAAMD,EAAKL,GAAKO,EAAIF,IAAOhD,EAAO,GAAK,YAC7B,GAAKiD,IAAM,IAAMC,EAAK,GACZA,IAAOlD,EAAO,GAAK,aAC7B,GAAK2C,IAAM,IAAMM,EAAK,EAQhCN,IADAA,KAHAO,IADAA,IAAMP,EAAKM,IADXD,IADAA,IAAMC,EAAKC,GAAKP,EAAIM,IAAOjD,EAAO,IAAM,aAC9B,EAAIgD,IAAM,IAAML,EAAK,GACXA,IAAO3C,EAAO,GAAK,WAC7B,EAAIkD,IAAM,IAAMF,EAAK,GAGpBA,IADXC,IADAA,IAAMD,EAAKL,GAAKO,EAAIF,IAAOhD,EAAO,GAAK,aAC7B,GAAKiD,IAAM,IAAMC,EAAK,GACZA,IAAOlD,EAAO,IAAM,aAC9B,GAAK2C,IAAM,IAAMM,EAAK,EAUhCN,IADAA,KAHAS,GADAF,IADAA,KAHAC,EAAKR,EAAIM,IAETD,IADAA,IAAMG,EAAKD,GAAKlD,EAAO,GAAK,SAClB,EAAIgD,IAAM,IAAML,EAAK,IACf3C,EAAO,GAAK,aAClB,GAAKkD,IAAM,IAAMF,EAAK,GACvBA,IAETC,IADAA,IAAMG,EAAKT,GAAK3C,EAAO,IAAM,aACnB,GAAKiD,IAAM,IAAMC,EAAK,IAChBlD,EAAO,IAAM,WACnB,GAAK2C,IAAM,GAAKM,EAAK,EAU/BN,IADAA,KAHAS,GADAF,IADAA,KAHAC,EAAKR,EAAIM,IAETD,IADAA,IAAMG,EAAKD,GAAKlD,EAAO,GAAK,aAClB,EAAIgD,IAAM,IAAML,EAAK,IACf3C,EAAO,GAAK,aAClB,GAAKkD,IAAM,IAAMF,EAAK,GACvBA,IAETC,IADAA,IAAMG,EAAKT,GAAK3C,EAAO,GAAK,YAClB,GAAKiD,IAAM,IAAMC,EAAK,IAChBlD,EAAO,IAAM,aACnB,GAAK2C,IAAM,GAAKM,EAAK,EAU/BN,IADAA,KAHAS,GADAF,IADAA,KAHAC,EAAKR,EAAIM,IAETD,IADAA,IAAMG,EAAKD,GAAKlD,EAAO,IAAM,YACnB,EAAIgD,IAAM,IAAML,EAAK,IACf3C,EAAO,GAAK,YAClB,GAAKkD,IAAM,IAAMF,EAAK,GACvBA,IAETC,IADAA,IAAMG,EAAKT,GAAK3C,EAAO,GAAK,YAClB,GAAKiD,IAAM,IAAMC,EAAK,IAChBlD,EAAO,GAAK,WAClB,GAAK2C,IAAM,GAAKM,EAAK,EAU/BN,IADAA,KAHAS,GADAF,IADAA,KAHAC,EAAKR,EAAIM,IAETD,IADAA,IAAMG,EAAKD,GAAKlD,EAAO,GAAK,YAClB,EAAIgD,IAAM,IAAML,EAAK,IACf3C,EAAO,IAAM,YACnB,GAAKkD,IAAM,IAAMF,EAAK,GACvBA,IAETC,IADAA,IAAMG,EAAKT,GAAK3C,EAAO,IAAM,YACnB,GAAKiD,IAAM,IAAMC,EAAK,IAChBlD,EAAO,GAAK,YAClB,GAAK2C,IAAM,GAAKM,EAAK,EAQ/BN,IADAA,KAHAO,IADAA,IAAMP,IADNK,IADAA,IAAMC,GAAKN,GAAKO,IAAMlD,EAAO,GAAK,YACxB,EAAIgD,IAAM,IAAML,EAAK,IACfM,IAAMjD,EAAO,GAAK,aACxB,GAAKkD,IAAM,IAAMF,EAAK,KAEhCC,IADAA,IAAMD,GAAKE,GAAKP,IAAM3C,EAAO,IAAM,aACzB,GAAKiD,IAAM,IAAMC,EAAK,IAChBF,IAAMhD,EAAO,GAAK,WACxB,GAAK2C,IAAM,IAAMM,EAAK,EAQhCN,IADAA,KAHAO,IADAA,IAAMP,IADNK,IADAA,IAAMC,GAAKN,GAAKO,IAAMlD,EAAO,IAAM,aACzB,EAAIgD,IAAM,IAAML,EAAK,IACfM,IAAMjD,EAAO,GAAK,aACxB,GAAKkD,IAAM,IAAMF,EAAK,KAEhCC,IADAA,IAAMD,GAAKE,GAAKP,IAAM3C,EAAO,IAAM,UACzB,GAAKiD,IAAM,IAAMC,EAAK,IAChBF,IAAMhD,EAAO,GAAK,aACxB,GAAK2C,IAAM,IAAMM,EAAK,EAQhCN,IADAA,KAHAO,IADAA,IAAMP,IADNK,IADAA,IAAMC,GAAKN,GAAKO,IAAMlD,EAAO,GAAK,aACxB,EAAIgD,IAAM,IAAML,EAAK,IACfM,IAAMjD,EAAO,IAAM,WACzB,GAAKkD,IAAM,IAAMF,EAAK,KAEhCC,IADAA,IAAMD,GAAKE,GAAKP,IAAM3C,EAAO,GAAK,aACxB,GAAKiD,IAAM,IAAMC,EAAK,IAChBF,IAAMhD,EAAO,IAAM,aACzB,GAAK2C,IAAM,IAAMM,EAAK,EAQhCN,IADAA,KAHAO,IADAA,IAAMP,IADNK,IADAA,IAAMC,GAAKN,GAAKO,IAAMlD,EAAO,GAAK,YACxB,EAAIgD,IAAM,IAAML,EAAK,IACfM,IAAMjD,EAAO,IAAM,aACzB,GAAKkD,IAAM,IAAMF,EAAK,KAEhCC,IADAA,IAAMD,GAAKE,GAAKP,IAAM3C,EAAO,GAAK,YACxB,GAAKiD,IAAM,IAAMC,EAAK,IAChBF,IAAMhD,EAAO,GAAK,YACxB,GAAK2C,IAAM,IAAMM,EAAK,EAE5BrB,KAAKS,OACPT,KAAKC,GAAKmB,EAAI,WAAc,EAC5BpB,KAAKE,GAAKa,EAAI,UAAa,EAC3Bf,KAAKG,GAAKkB,EAAI,WAAc,EAC5BrB,KAAKI,GAAKkB,EAAI,UAAa,EAC3BtB,KAAKS,OAAQ,IAEbT,KAAKC,GAAKD,KAAKC,GAAKmB,EAAK,EACzBpB,KAAKE,GAAKF,KAAKE,GAAKa,EAAK,EACzBf,KAAKG,GAAKH,KAAKG,GAAKkB,EAAK,EACzBrB,KAAKI,GAAKJ,KAAKI,GAAKkB,EAAK,EAE7B,EAYAjC,EAAIV,UAAU8C,IAAM,WAClBzB,KAAKmB,WAEL,IAAIlB,EAAKD,KAAKC,GAAIC,EAAKF,KAAKE,GAAIC,EAAKH,KAAKG,GAAIC,EAAKJ,KAAKI,GAExD,OAAOtC,EAAWmC,IAAO,EAAK,IAAQnC,EAAe,GAALmC,GAC9CnC,EAAWmC,IAAO,GAAM,IAAQnC,EAAWmC,IAAO,EAAK,IACvDnC,EAAWmC,IAAO,GAAM,IAAQnC,EAAWmC,IAAO,GAAM,IACxDnC,EAAWmC,IAAO,GAAM,IAAQnC,EAAWmC,IAAO,GAAM,IACxDnC,EAAWoC,IAAO,EAAK,IAAQpC,EAAe,GAALoC,GACzCpC,EAAWoC,IAAO,GAAM,IAAQpC,EAAWoC,IAAO,EAAK,IACvDpC,EAAWoC,IAAO,GAAM,IAAQpC,EAAWoC,IAAO,GAAM,IACxDpC,EAAWoC,IAAO,GAAM,IAAQpC,EAAWoC,IAAO,GAAM,IACxDpC,EAAWqC,IAAO,EAAK,IAAQrC,EAAe,GAALqC,GACzCrC,EAAWqC,IAAO,GAAM,IAAQrC,EAAWqC,IAAO,EAAK,IACvDrC,EAAWqC,IAAO,GAAM,IAAQrC,EAAWqC,IAAO,GAAM,IACxDrC,EAAWqC,IAAO,GAAM,IAAQrC,EAAWqC,IAAO,GAAM,IACxDrC,EAAWsC,IAAO,EAAK,IAAQtC,EAAe,GAALsC,GACzCtC,EAAWsC,IAAO,GAAM,IAAQtC,EAAWsC,IAAO,EAAK,IACvDtC,EAAWsC,IAAO,GAAM,IAAQtC,EAAWsC,IAAO,GAAM,IACxDtC,EAAWsC,IAAO,GAAM,IAAQtC,EAAWsC,IAAO,GAAM,GAC5D,EAYAf,EAAIV,UAAUC,SAAWS,EAAIV,UAAU8C,IAYvCpC,EAAIV,UAAUmB,OAAS,WACrBE,KAAKmB,WAEL,IAAIlB,EAAKD,KAAKC,GAAIC,EAAKF,KAAKE,GAAIC,EAAKH,KAAKG,GAAIC,EAAKJ,KAAKI,GACxD,MAAO,CACA,IAALH,EAAYA,IAAO,EAAK,IAAOA,IAAO,GAAM,IAAOA,IAAO,GAAM,IAC3D,IAALC,EAAYA,IAAO,EAAK,IAAOA,IAAO,GAAM,IAAOA,IAAO,GAAM,IAC3D,IAALC,EAAYA,IAAO,EAAK,IAAOA,IAAO,GAAM,IAAOA,IAAO,GAAM,IAC3D,IAALC,EAAYA,IAAO,EAAK,IAAOA,IAAO,GAAM,IAAOA,IAAO,GAAM,IAEpE,EAYAf,EAAIV,UAAUlF,MAAQ4F,EAAIV,UAAUmB,OAYpCT,EAAIV,UAAU+C,YAAc,WAC1B1B,KAAKmB,WAEL,IAAI9C,EAAS,IAAIR,YAAY,IACzBO,EAAS,IAAIE,YAAYD,GAK7B,OAJAD,EAAO,GAAK4B,KAAKC,GACjB7B,EAAO,GAAK4B,KAAKE,GACjB9B,EAAO,GAAK4B,KAAKG,GACjB/B,EAAO,GAAK4B,KAAKI,GACV/B,CACT,EAaAgB,EAAIV,UAAUN,OAASgB,EAAIV,UAAU+C,YAYrCrC,EAAIV,UAAUgD,OAAS,WAErB,IADA,IAAIC,EAAIC,EAAIC,EAAIC,EAAY,GAAIjI,EAAQkG,KAAKvG,QACpCgB,EAAI,EAAGA,EAAI,IAClBmH,EAAK9H,EAAMW,KACXoH,EAAK/H,EAAMW,KACXqH,EAAKhI,EAAMW,KACXsH,GAAa5D,EAAmByD,IAAO,GACrCzD,EAA0C,IAAtByD,GAAM,EAAIC,IAAO,IACrC1D,EAA0C,IAAtB0D,GAAM,EAAIC,IAAO,IACrC3D,EAAwB,GAAL2D,GAMvB,OAJAF,EAAK9H,EAAMW,GACXsH,GAAa5D,EAAmByD,IAAO,GACrCzD,EAAoByD,GAAM,EAAK,IAC/B,IAEJ,EAsDAlB,EAAQ/B,UAAY,IAAIU,EAExBqB,EAAQ/B,UAAUwC,SAAW,WAE3B,GADA9B,EAAIV,UAAUwC,SAAStC,KAAKmB,MACxBA,KAAKgB,MAAO,CACdhB,KAAKgB,OAAQ,EACb,IAAIgB,EAAYhC,KAAKvG,QACrB4F,EAAIR,KAAKmB,KAAMA,KAAKD,cACpBC,KAAKV,OAAOU,KAAKa,SACjBb,KAAKV,OAAO0C,GACZ3C,EAAIV,UAAUwC,SAAStC,KAAKmB,KAC9B,CACF,EAEA,MAAMiC,EA/qBa,WACjB,IAAIzC,EAASL,EAAmB,OAC5B3B,IACFgC,EAASD,EAASC,IAEpBA,EAAO0C,OAAS,WACd,OAAO,IAAI7C,CACb,EACAG,EAAOF,OAAS,SAAUL,GACxB,OAAOO,EAAO0C,SAAS5C,OAAOL,EAChC,EACA,IAAK,IAAIxE,EAAI,EAAGA,EAAIyD,EAAa1E,SAAUiB,EAAG,CAC5C,IAAIyE,EAAOhB,EAAazD,GACxB+E,EAAON,GAAQC,EAAmBD,EACpC,CACA,OAAOM,CACT,CA+pBY2C,GCvyBLxH,eAAeyH,EAAcC,EAAKC,GACvC,MAAMxH,EAAOvB,EAAe,IACtBuD,IAAEA,EAAGlB,GAAEA,SAAa2G,EAAeD,EAAYxH,GAE/Ce,EAAa,IAAInC,iBAAiBC,OAAOqB,OAAOc,QACpD,CAAEZ,KAAM,UAAWU,MACnBkB,EACA3D,EAAQkJ,KAGJlG,EAAS,IAAIzC,WAAW,GAAQmC,EAAWrC,QAIjD,OAHA2C,EAAOH,IAAI7C,EAAQ,aACnBgD,EAAOH,IAAIlB,EAAM,GACjBqB,EAAOH,IAAIH,EAAY,IAChBhC,EAAasC,EACtB,CASOxB,eAAe6H,EAAcC,EAAKH,GACvC,MAAMI,EAAKxI,EAAauI,GACxB,GAA+C,aAA3CzI,OAAOC,gBAAgByI,EAAGlH,MAAM,EAAG,IACrC,MAAM,IAAIe,MAAM,0BAElB,MAAMzB,EAAO4H,EAAGlH,MAAM,EAAG,KACnBsB,IAAEA,EAAGlB,GAAEA,SAAa2G,EAAeD,EAAYxH,GAErD,OAAO,IAAIpB,iBAAiBC,OAAOqB,OAAOwB,QACxC,CAAEtB,KAAM,UAAWU,MACnBkB,EACA4F,EAAGlH,MAAM,KAEb,CASAb,eAAe4H,EAAe1H,EAAUC,GACtCD,EAAW1B,EAAQ0B,GACnB,IAAIyG,EAAI,IAAI5H,WAAW,GACnBiJ,EAAO,IAAIjJ,WAAW,GAE1B,KAAO4H,EAAE9H,OAASoJ,IAAkB,CAElCD,EAAOE,EADMC,EAAkBH,EAAM9H,EAAUC,IAE/CwG,EAAIwB,EAAkBxB,EAAGqB,EAC3B,CAEA,MAAMI,EAAWzB,EAAE9F,MAAM,EApEX,IAqERI,EAAK0F,EAAE9F,MArEC,GAqEcoH,IAG5B,MAAO,CAAE9F,UAFSnD,OAAOqB,OAAOC,UAAU,MAAO8H,EAAU,WAAW,EAAO,CAAC,UAAW,YAE3EnH,KAChB,CAQA,SAASiH,EAAWxG,GAElB,MAAMjD,EAAQiD,aAAgB3C,WAAaiG,OAAOC,KAAKvD,GAAQA,EACzDf,EAAO2G,EAAI7I,GACjB,OAAO,IAAIM,WAAWiG,OAAOC,KAAKtE,EAAM,OAC1C,CAQA,SAASwH,KAAqBE,GAC5B,MAAMC,EAAWD,EAAOE,OAAO,CAACC,EAAKC,IAAQD,EAAMC,EAAI5J,OAAQ,GACzD2C,EAAS,IAAIzC,WAAWuJ,GAC9B,IAAII,EAAS,EACb,IAAK,MAAMC,KAAON,EAChB7G,EAAOH,IAAIsH,EAAKD,GAChBA,GAAUC,EAAI9J,OAEhB,OAAO2C,CACT,CCvGK,MAACL,EAAUsB,EACVZ,EAAUa"}
|
|
1
|
+
{"version":3,"file":"aes-bridge.esm.js","sources":["../src/common.js","../src/cbc.js","../src/gcm.js","../src/md5.js","../src/legacy.js","../src/index.js"],"sourcesContent":["/**\n * This file is part of AesBridge - modern cross-language AES encryption library\n * Repository: https://github.com/mervick/aes-bridge\n *\n * Copyright Andrey Izman (c) 2018-2025 <izmanw@gmail.com>\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\n/**\n * Converts a string to Uint8Array using UTF-8 encoding.\n * If input is already Uint8Array, returns it as-is.\n * \n * @param {string|Uint8Array} input - Input string or bytes\n * @returns {Uint8Array}\n */\nexport function toBytes(input) {\n if (typeof input === 'string') {\n return new TextEncoder().encode(input);\n }\n return input;\n}\n\n/**\n * Converts an Uint8Array to string using UTF-8 encoding.\n * \n * @param {Uint8Array} input - Input string\n * @returns {string}\n */\nexport function bytesToString(bytes) {\n if (bytes instanceof Uint8Array) {\n return new TextDecoder().decode(bytes);\n }\n return bytes;\n}\n\n/**\n * Generates a random Uint8Array of given length using secure crypto.\n * \n * @param {number} length - Number of bytes to generate\n * @returns {Uint8Array}\n */\nexport function generateRandom(length) {\n const array = new Uint8Array(length);\n crypto.getRandomValues(array);\n return array;\n}\n\n/**\n * Encodes bytes to base64 string.\n * \n * @param {Uint8Array} bytes - Data to encode\n * @returns {string} - Base64 string\n */\nexport function base64Encode(bytes) {\n return btoa(String.fromCharCode(...bytes));\n}\n\n/**\n * Decodes base64 string to Uint8Array.\n * \n * @param {string} b64 - Base64 encoded string\n * @returns {Uint8Array}\n */\nexport function base64Decode(b64) {\n b64 = bytesToString(b64);\n const binary = atob(b64);\n const bytes = new Uint8Array(binary.length);\n for (let i = 0; i < binary.length; i++) bytes[i] = binary.charCodeAt(i);\n return bytes;\n}\n","/**\n * This file is part of AesBridge - modern cross-language AES encryption library\n * Repository: https://github.com/mervick/aes-bridge\n *\n * Copyright Andrey Izman (c) 2018-2025 <izmanw@gmail.com>\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\nimport { toBytes, generateRandom, base64Encode, base64Decode } from './common.js';\n\n/**\n * Derives AES and HMAC keys from password and salt using PBKDF2-HMAC-SHA256.\n * \n * @param {string|Uint8Array} password - Password used for key derivation\n * @param {Uint8Array} salt - 16-byte random salt\n * @returns {Promise<{aesKey: CryptoKey, hmacKey: CryptoKey}>}\n */\nasync function deriveKeys(password, salt) {\n const keyMaterial = await crypto.subtle.importKey(\n 'raw',\n toBytes(password),\n { name: 'PBKDF2' },\n false,\n ['deriveBits', 'deriveKey']\n );\n\n const derived = await crypto.subtle.deriveBits(\n {\n name: 'PBKDF2',\n salt: salt,\n iterations: 100_000,\n hash: 'SHA-256',\n },\n keyMaterial,\n 64 * 8\n );\n\n const bytes = new Uint8Array(derived);\n return {\n aesKey: await crypto.subtle.importKey('raw', bytes.slice(0, 32), { name: 'AES-CBC' }, false, ['encrypt', 'decrypt']),\n hmacKey: await crypto.subtle.importKey('raw', bytes.slice(32), { name: 'HMAC', hash: 'SHA-256' }, false, ['sign', 'verify']),\n };\n}\n\n/**\n * Encrypts plaintext using AES-CBC + HMAC with derived key from password.\n * Returns binary format: salt (16) + IV (16) + ciphertext + HMAC (32).\n * \n * @param {string|Uint8Array} plaintext - Data to encrypt\n * @param {string|Uint8Array} password - Password for encryption\n * @returns {Promise<Uint8Array>} - Encrypted binary\n */\nexport async function encryptCbcBin(plaintext, password) {\n plaintext = toBytes(plaintext);\n password = toBytes(password);\n const salt = generateRandom(16);\n const iv = generateRandom(16);\n const { aesKey, hmacKey } = await deriveKeys(password, salt);\n\n const ciphertext = new Uint8Array(await crypto.subtle.encrypt(\n { name: 'AES-CBC', iv: iv },\n aesKey,\n plaintext\n ));\n\n const macData = new Uint8Array(iv.length + ciphertext.length);\n macData.set(iv);\n macData.set(ciphertext, iv.length);\n\n const tag = new Uint8Array(await crypto.subtle.sign('HMAC', hmacKey, macData));\n\n const result = new Uint8Array(salt.length + iv.length + ciphertext.length + tag.length);\n result.set(salt);\n result.set(iv, salt.length);\n result.set(ciphertext, salt.length + iv.length);\n result.set(tag, salt.length + iv.length + ciphertext.length);\n\n return result;\n}\n\n/**\n * Decrypts binary data encrypted with `encryptCbcBin`.\n * \n * @param {string|Uint8Array} data - Encrypted binary data\n * @param {string|Uint8Array} password - Password used for encryption\n * @returns {Promise<Uint8Array>} - Decrypted and unpadded data\n */\nexport async function decryptCbcBin(data, password) {\n data = toBytes(data);\n password = toBytes(password);\n const salt = data.slice(0, 16);\n const iv = data.slice(16, 32);\n const tag = data.slice(-32);\n const ciphertext = data.slice(32, -32);\n\n const { aesKey, hmacKey } = await deriveKeys(password, salt);\n\n const macData = new Uint8Array(iv.length + ciphertext.length);\n macData.set(iv);\n macData.set(ciphertext, iv.length);\n\n const valid = await crypto.subtle.verify('HMAC', hmacKey, tag, macData);\n if (!valid) throw new Error('HMAC verification failed');\n\n return new Uint8Array(await crypto.subtle.decrypt(\n { name: 'AES-CBC', iv: iv },\n aesKey,\n ciphertext\n ));\n}\n\n/**\n * Encrypts data and returns result as base64 string.\n * \n * @param {string|Uint8Array} data - Data to encrypt\n * @param {string|Uint8Array} password - Password for encryption\n * @returns {Promise<string>} - Base64 encoded encrypted string\n */\nexport async function encryptCbc(data, password) {\n const encrypted = await encryptCbcBin(data, password);\n return base64Encode(encrypted);\n}\n\n/**\n * Decrypts base64-encoded AES-CBC + HMAC data.\n * \n * @param {string} data - Base64 encoded encrypted data\n * @param {string|Uint8Array} password - Password used for encryption\n * @returns {Promise<Uint8Array>} - Decrypted and unpadded data\n */\nexport async function decryptCbc(data, password) {\n const decoded = base64Decode(data);\n return decryptCbcBin(decoded, password);\n}\n","/**\n * This file is part of AesBridge - modern cross-language AES encryption library\n * Repository: https://github.com/mervick/aes-bridge\n *\n * Copyright Andrey Izman (c) 2018-2025 <izmanw@gmail.com>\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\nimport { toBytes, generateRandom, base64Encode, base64Decode } from './common.js';\n\n/**\n * Derives a 256-bit key from password and salt using PBKDF2-HMAC-SHA256.\n *\n * @param {string|Uint8Array} password - The password\n * @param {Uint8Array} salt - 16-byte salt\n * @returns {Promise<CryptoKey>}\n */\nasync function deriveKey(password, salt) {\n const keyMaterial = await crypto.subtle.importKey(\n 'raw',\n toBytes(password),\n { name: 'PBKDF2' },\n false,\n ['deriveBits', 'deriveKey']\n // ['deriveKey']\n );\n\n return crypto.subtle.deriveKey(\n {\n name: 'PBKDF2',\n salt: salt,\n iterations: 100_000,\n hash: 'SHA-256',\n },\n keyMaterial,\n { name: 'AES-GCM', length: 256 },\n false,\n ['encrypt', 'decrypt']\n );\n}\n\n/**\n * Encrypts plaintext using AES-GCM with key derived from password.\n * Output format: salt(16) + nonce(12) + ciphertext + tag(16)\n *\n * @param {string|Uint8Array} plaintext - Data to encrypt\n * @param {string|Uint8Array} password - Password\n * @returns {Promise<Uint8Array>}\n */\nexport async function encryptGcmBin(plaintext, password) {\n plaintext = toBytes(plaintext);\n password = toBytes(password);\n const salt = generateRandom(16);\n const nonce = generateRandom(12);\n const key = await deriveKey(password, salt);\n\n const encrypted = new Uint8Array(await crypto.subtle.encrypt(\n {\n name: 'AES-GCM',\n iv: nonce,\n tagLength: 128\n },\n key,\n plaintext\n ));\n\n const result = new Uint8Array(salt.length + nonce.length + encrypted.length);\n result.set(salt);\n result.set(nonce, salt.length);\n result.set(encrypted, salt.length + nonce.length);\n return result;\n}\n\n/**\n * Decrypts binary data produced by encryptGcmBin().\n *\n * @param {string|Uint8Array} data - Encrypted binary data\n * @param {string|Uint8Array} password - Password\n * @returns {Promise<Uint8Array>}\n */\nexport async function decryptGcmBin(data, password) {\n data = toBytes(data);\n password = toBytes(password);\n\n const salt = data.slice(0, 16);\n const nonce = data.slice(16, 28);\n const ciphertextWithTag = data.slice(28);\n\n const key = await deriveKey(password, salt);\n\n const decrypted = await crypto.subtle.decrypt(\n {\n name: 'AES-GCM',\n iv: nonce,\n tagLength: 128\n },\n key,\n ciphertextWithTag\n );\n\n return new Uint8Array(decrypted);\n}\n\n/**\n * Encrypts data using AES-GCM and returns Base64 string.\n *\n * @param {string|Uint8Array} data - Data to encrypt\n * @param {string|Uint8Array} password - Password\n * @returns {Promise<string>}\n */\nexport async function encryptGcm(data, password) {\n const result = await encryptGcmBin(data, password);\n return base64Encode(result);\n}\n\n/**\n * Decrypts Base64 encoded AES-GCM data.\n *\n * @param {string} data - Base64-encoded encrypted string\n * @param {string|Uint8Array} password - Password\n * @returns {Promise<Uint8Array>}\n */\nexport async function decryptGcm(data, password) {\n const raw = base64Decode(toBytes(data));\n return decryptGcmBin(raw, password);\n}\n","/**\n * [js-md5]{@link https://github.com/emn178/js-md5}\n *\n * @version 0.8.3\n * @license MIT\n *\n * Copyright 2014-2023 Chen, Yi-Cyuan\n *\n * Permission is hereby granted, free of charge, to any person obtaining\n * a copy of this software and associated documentation files (the\n * \"Software\"), to deal in the Software without restriction, including\n * without limitation the rights to use, copy, modify, merge, publish,\n * distribute, sublicense, and/or sell copies of the Software, and to\n * permit persons to whom the Software is furnished to do so, subject to\n * the following conditions:\n *\n * The above copyright notice and this permission notice shall be\n * included in all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\n * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\n * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE\n * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\n * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION\n * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n */\n\nvar INPUT_ERROR = 'input is invalid type';\nvar FINALIZE_ERROR = 'finalize already called';\nvar NODE_JS = typeof process === 'object' && process.versions && process.versions.node;\nvar ARRAY_BUFFER = typeof ArrayBuffer !== 'undefined';\nvar HEX_CHARS = '0123456789abcdef'.split('');\nvar EXTRA = [128, 32768, 8388608, -2147483648];\nvar SHIFT = [0, 8, 16, 24];\nvar OUTPUT_TYPES = ['hex', 'array', 'digest', 'buffer', 'arrayBuffer', 'base64'];\nvar BASE64_ENCODE_CHAR = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'.split('');\n\nvar blocks = [], buffer8;\nif (ARRAY_BUFFER) {\n var buffer = new ArrayBuffer(68);\n buffer8 = new Uint8Array(buffer);\n blocks = new Uint32Array(buffer);\n}\n\nvar isArray = Array.isArray;\nif (!isArray) {\n isArray = function (obj) {\n return Object.prototype.toString.call(obj) === '[object Array]';\n };\n}\n\nvar isView = ArrayBuffer.isView;\nif (ARRAY_BUFFER && !isView) {\n isView = function (obj) {\n return typeof obj === 'object' && obj.buffer && obj.buffer.constructor === ArrayBuffer;\n };\n}\n\n// [message: string, isString: bool]\nvar formatMessage = function (message) {\n var type = typeof message;\n if (type === 'string') {\n return [message, true];\n }\n if (type !== 'object' || message === null) {\n throw new Error(INPUT_ERROR);\n }\n if (ARRAY_BUFFER && message.constructor === ArrayBuffer) {\n return [new Uint8Array(message), false];\n }\n if (!isArray(message) && !isView(message)) {\n throw new Error(INPUT_ERROR);\n }\n return [message, false];\n}\n\n/**\n * @method hex\n * @memberof md5\n * @description Output hash as hex string\n * @param {String|Array|Uint8Array|ArrayBuffer} message message to hash\n * @returns {String} Hex string\n * @example\n * md5.hex('The quick brown fox jumps over the lazy dog');\n * // equal to\n * md5('The quick brown fox jumps over the lazy dog');\n */\n/**\n * @method digest\n * @memberof md5\n * @description Output hash as bytes array\n * @param {String|Array|Uint8Array|ArrayBuffer} message message to hash\n * @returns {Array} Bytes array\n * @example\n * md5.digest('The quick brown fox jumps over the lazy dog');\n */\n/**\n * @method array\n * @memberof md5\n * @description Output hash as bytes array\n * @param {String|Array|Uint8Array|ArrayBuffer} message message to hash\n * @returns {Array} Bytes array\n * @example\n * md5.array('The quick brown fox jumps over the lazy dog');\n */\n/**\n * @method arrayBuffer\n * @memberof md5\n * @description Output hash as ArrayBuffer\n * @param {String|Array|Uint8Array|ArrayBuffer} message message to hash\n * @returns {ArrayBuffer} ArrayBuffer\n * @example\n * md5.arrayBuffer('The quick brown fox jumps over the lazy dog');\n */\n/**\n * @method buffer\n * @deprecated This maybe confuse with Buffer in node.js. Please use arrayBuffer instead.\n * @memberof md5\n * @description Output hash as ArrayBuffer\n * @param {String|Array|Uint8Array|ArrayBuffer} message message to hash\n * @returns {ArrayBuffer} ArrayBuffer\n * @example\n * md5.buffer('The quick brown fox jumps over the lazy dog');\n */\n/**\n * @method base64\n * @memberof md5\n * @description Output hash as base64 string\n * @param {String|Array|Uint8Array|ArrayBuffer} message message to hash\n * @returns {String} base64 string\n * @example\n * md5.base64('The quick brown fox jumps over the lazy dog');\n */\nvar createOutputMethod = function (outputType) {\n return function (message) {\n return new Md5(true).update(message)[outputType]();\n };\n};\n\n/**\n * @method create\n * @memberof md5\n * @description Create Md5 object\n * @returns {Md5} Md5 object.\n * @example\n * var hash = md5.create();\n */\n/**\n * @method update\n * @memberof md5\n * @description Create and update Md5 object\n * @param {String|Array|Uint8Array|ArrayBuffer} message message to hash\n * @returns {Md5} Md5 object.\n * @example\n * var hash = md5.update('The quick brown fox jumps over the lazy dog');\n * // equal to\n * var hash = md5.create();\n * hash.update('The quick brown fox jumps over the lazy dog');\n */\nvar createMethod = function () {\n var method = createOutputMethod('hex');\n // if (NODE_JS) {\n // method = nodeWrap(method);\n // }\n method.create = function () {\n return new Md5();\n };\n method.update = function (message) {\n return method.create().update(message);\n };\n for (var i = 0; i < OUTPUT_TYPES.length; ++i) {\n var type = OUTPUT_TYPES[i];\n method[type] = createOutputMethod(type);\n }\n return method;\n};\n\nvar nodeWrap = function (method) {\n var crypto = require('crypto')\n var Buffer = require('buffer').Buffer;\n var bufferFrom;\n if (Buffer.from) {\n bufferFrom = Buffer.from;\n } else {\n bufferFrom = function (message) {\n return new Buffer(message);\n };\n }\n var nodeMethod = function (message) {\n if (typeof message === 'string') {\n return crypto.createHash('md5').update(message, 'utf8').digest('hex');\n } else {\n if (message === null || message === undefined) {\n throw new Error(INPUT_ERROR);\n } else if (message.constructor === ArrayBuffer) {\n message = new Uint8Array(message);\n }\n }\n if (isArray(message) || isView(message) ||\n message.constructor === Buffer) {\n return crypto.createHash('md5').update(bufferFrom(message)).digest('hex');\n } else {\n return method(message);\n }\n };\n return nodeMethod;\n};\n\n/**\n * @namespace md5.hmac\n */\n/**\n * @method hex\n * @memberof md5.hmac\n * @description Output hash as hex string\n * @param {String|Array|Uint8Array|ArrayBuffer} key key\n * @param {String|Array|Uint8Array|ArrayBuffer} message message to hash\n * @returns {String} Hex string\n * @example\n * md5.hmac.hex('key', 'The quick brown fox jumps over the lazy dog');\n * // equal to\n * md5.hmac('key', 'The quick brown fox jumps over the lazy dog');\n */\n\n/**\n * @method digest\n * @memberof md5.hmac\n * @description Output hash as bytes array\n * @param {String|Array|Uint8Array|ArrayBuffer} key key\n * @param {String|Array|Uint8Array|ArrayBuffer} message message to hash\n * @returns {Array} Bytes array\n * @example\n * md5.hmac.digest('key', 'The quick brown fox jumps over the lazy dog');\n */\n/**\n * @method array\n * @memberof md5.hmac\n * @description Output hash as bytes array\n * @param {String|Array|Uint8Array|ArrayBuffer} key key\n * @param {String|Array|Uint8Array|ArrayBuffer} message message to hash\n * @returns {Array} Bytes array\n * @example\n * md5.hmac.array('key', 'The quick brown fox jumps over the lazy dog');\n */\n/**\n * @method arrayBuffer\n * @memberof md5.hmac\n * @description Output hash as ArrayBuffer\n * @param {String|Array|Uint8Array|ArrayBuffer} key key\n * @param {String|Array|Uint8Array|ArrayBuffer} message message to hash\n * @returns {ArrayBuffer} ArrayBuffer\n * @example\n * md5.hmac.arrayBuffer('key', 'The quick brown fox jumps over the lazy dog');\n */\n/**\n * @method buffer\n * @deprecated This maybe confuse with Buffer in node.js. Please use arrayBuffer instead.\n * @memberof md5.hmac\n * @description Output hash as ArrayBuffer\n * @param {String|Array|Uint8Array|ArrayBuffer} key key\n * @param {String|Array|Uint8Array|ArrayBuffer} message message to hash\n * @returns {ArrayBuffer} ArrayBuffer\n * @example\n * md5.hmac.buffer('key', 'The quick brown fox jumps over the lazy dog');\n */\n/**\n * @method base64\n * @memberof md5.hmac\n * @description Output hash as base64 string\n * @param {String|Array|Uint8Array|ArrayBuffer} key key\n * @param {String|Array|Uint8Array|ArrayBuffer} message message to hash\n * @returns {String} base64 string\n * @example\n * md5.hmac.base64('key', 'The quick brown fox jumps over the lazy dog');\n */\nvar createHmacOutputMethod = function (outputType) {\n return function (key, message) {\n return new HmacMd5(key, true).update(message)[outputType]();\n };\n};\n\n/**\n * @method create\n * @memberof md5.hmac\n * @description Create HmacMd5 object\n * @param {String|Array|Uint8Array|ArrayBuffer} key key\n * @returns {HmacMd5} HmacMd5 object.\n * @example\n * var hash = md5.hmac.create('key');\n */\n/**\n * @method update\n * @memberof md5.hmac\n * @description Create and update HmacMd5 object\n * @param {String|Array|Uint8Array|ArrayBuffer} key key\n * @param {String|Array|Uint8Array|ArrayBuffer} message message to hash\n * @returns {HmacMd5} HmacMd5 object.\n * @example\n * var hash = md5.hmac.update('key', 'The quick brown fox jumps over the lazy dog');\n * // equal to\n * var hash = md5.hmac.create('key');\n * hash.update('The quick brown fox jumps over the lazy dog');\n */\nvar createHmacMethod = function () {\n var method = createHmacOutputMethod('hex');\n method.create = function (key) {\n return new HmacMd5(key);\n };\n method.update = function (key, message) {\n return method.create(key).update(message);\n };\n for (var i = 0; i < OUTPUT_TYPES.length; ++i) {\n var type = OUTPUT_TYPES[i];\n method[type] = createHmacOutputMethod(type);\n }\n return method;\n};\n\n/**\n * Md5 class\n * @class Md5\n * @description This is internal class.\n * @see {@link md5.create}\n */\nfunction Md5(sharedMemory) {\n if (sharedMemory) {\n blocks[0] = blocks[16] = blocks[1] = blocks[2] = blocks[3] =\n blocks[4] = blocks[5] = blocks[6] = blocks[7] =\n blocks[8] = blocks[9] = blocks[10] = blocks[11] =\n blocks[12] = blocks[13] = blocks[14] = blocks[15] = 0;\n this.blocks = blocks;\n this.buffer8 = buffer8;\n } else {\n if (ARRAY_BUFFER) {\n var buffer = new ArrayBuffer(68);\n this.buffer8 = new Uint8Array(buffer);\n this.blocks = new Uint32Array(buffer);\n } else {\n this.blocks = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0];\n }\n }\n this.h0 = this.h1 = this.h2 = this.h3 = this.start = this.bytes = this.hBytes = 0;\n this.finalized = this.hashed = false;\n this.first = true;\n}\n\n/**\n * @method update\n * @memberof Md5\n * @instance\n * @description Update hash\n * @param {String|Array|Uint8Array|ArrayBuffer} message message to hash\n * @returns {Md5} Md5 object.\n * @see {@link md5.update}\n */\nMd5.prototype.update = function (message) {\n if (this.finalized) {\n throw new Error(FINALIZE_ERROR);\n }\n\n var result = formatMessage(message);\n message = result[0];\n var isString = result[1];\n var code, index = 0, i, length = message.length, blocks = this.blocks;\n var buffer8 = this.buffer8;\n\n while (index < length) {\n if (this.hashed) {\n this.hashed = false;\n blocks[0] = blocks[16];\n blocks[16] = blocks[1] = blocks[2] = blocks[3] =\n blocks[4] = blocks[5] = blocks[6] = blocks[7] =\n blocks[8] = blocks[9] = blocks[10] = blocks[11] =\n blocks[12] = blocks[13] = blocks[14] = blocks[15] = 0;\n }\n\n if (isString) {\n if (ARRAY_BUFFER) {\n for (i = this.start; index < length && i < 64; ++index) {\n code = message.charCodeAt(index);\n if (code < 0x80) {\n buffer8[i++] = code;\n } else if (code < 0x800) {\n buffer8[i++] = 0xc0 | (code >>> 6);\n buffer8[i++] = 0x80 | (code & 0x3f);\n } else if (code < 0xd800 || code >= 0xe000) {\n buffer8[i++] = 0xe0 | (code >>> 12);\n buffer8[i++] = 0x80 | ((code >>> 6) & 0x3f);\n buffer8[i++] = 0x80 | (code & 0x3f);\n } else {\n code = 0x10000 + (((code & 0x3ff) << 10) | (message.charCodeAt(++index) & 0x3ff));\n buffer8[i++] = 0xf0 | (code >>> 18);\n buffer8[i++] = 0x80 | ((code >>> 12) & 0x3f);\n buffer8[i++] = 0x80 | ((code >>> 6) & 0x3f);\n buffer8[i++] = 0x80 | (code & 0x3f);\n }\n }\n } else {\n for (i = this.start; index < length && i < 64; ++index) {\n code = message.charCodeAt(index);\n if (code < 0x80) {\n blocks[i >>> 2] |= code << SHIFT[i++ & 3];\n } else if (code < 0x800) {\n blocks[i >>> 2] |= (0xc0 | (code >>> 6)) << SHIFT[i++ & 3];\n blocks[i >>> 2] |= (0x80 | (code & 0x3f)) << SHIFT[i++ & 3];\n } else if (code < 0xd800 || code >= 0xe000) {\n blocks[i >>> 2] |= (0xe0 | (code >>> 12)) << SHIFT[i++ & 3];\n blocks[i >>> 2] |= (0x80 | ((code >>> 6) & 0x3f)) << SHIFT[i++ & 3];\n blocks[i >>> 2] |= (0x80 | (code & 0x3f)) << SHIFT[i++ & 3];\n } else {\n code = 0x10000 + (((code & 0x3ff) << 10) | (message.charCodeAt(++index) & 0x3ff));\n blocks[i >>> 2] |= (0xf0 | (code >>> 18)) << SHIFT[i++ & 3];\n blocks[i >>> 2] |= (0x80 | ((code >>> 12) & 0x3f)) << SHIFT[i++ & 3];\n blocks[i >>> 2] |= (0x80 | ((code >>> 6) & 0x3f)) << SHIFT[i++ & 3];\n blocks[i >>> 2] |= (0x80 | (code & 0x3f)) << SHIFT[i++ & 3];\n }\n }\n }\n } else {\n if (ARRAY_BUFFER) {\n for (i = this.start; index < length && i < 64; ++index) {\n buffer8[i++] = message[index];\n }\n } else {\n for (i = this.start; index < length && i < 64; ++index) {\n blocks[i >>> 2] |= message[index] << SHIFT[i++ & 3];\n }\n }\n }\n this.lastByteIndex = i;\n this.bytes += i - this.start;\n if (i >= 64) {\n this.start = i - 64;\n this.hash();\n this.hashed = true;\n } else {\n this.start = i;\n }\n }\n if (this.bytes > 4294967295) {\n this.hBytes += this.bytes / 4294967296 << 0;\n this.bytes = this.bytes % 4294967296;\n }\n return this;\n};\n\nMd5.prototype.finalize = function () {\n if (this.finalized) {\n return;\n }\n this.finalized = true;\n var blocks = this.blocks, i = this.lastByteIndex;\n blocks[i >>> 2] |= EXTRA[i & 3];\n if (i >= 56) {\n if (!this.hashed) {\n this.hash();\n }\n blocks[0] = blocks[16];\n blocks[16] = blocks[1] = blocks[2] = blocks[3] =\n blocks[4] = blocks[5] = blocks[6] = blocks[7] =\n blocks[8] = blocks[9] = blocks[10] = blocks[11] =\n blocks[12] = blocks[13] = blocks[14] = blocks[15] = 0;\n }\n blocks[14] = this.bytes << 3;\n blocks[15] = this.hBytes << 3 | this.bytes >>> 29;\n this.hash();\n};\n\nMd5.prototype.hash = function () {\n var a, b, c, d, bc, da, blocks = this.blocks;\n\n if (this.first) {\n a = blocks[0] - 680876937;\n a = (a << 7 | a >>> 25) - 271733879 << 0;\n d = (-1732584194 ^ a & 2004318071) + blocks[1] - 117830708;\n d = (d << 12 | d >>> 20) + a << 0;\n c = (-271733879 ^ (d & (a ^ -271733879))) + blocks[2] - 1126478375;\n c = (c << 17 | c >>> 15) + d << 0;\n b = (a ^ (c & (d ^ a))) + blocks[3] - 1316259209;\n b = (b << 22 | b >>> 10) + c << 0;\n } else {\n a = this.h0;\n b = this.h1;\n c = this.h2;\n d = this.h3;\n a += (d ^ (b & (c ^ d))) + blocks[0] - 680876936;\n a = (a << 7 | a >>> 25) + b << 0;\n d += (c ^ (a & (b ^ c))) + blocks[1] - 389564586;\n d = (d << 12 | d >>> 20) + a << 0;\n c += (b ^ (d & (a ^ b))) + blocks[2] + 606105819;\n c = (c << 17 | c >>> 15) + d << 0;\n b += (a ^ (c & (d ^ a))) + blocks[3] - 1044525330;\n b = (b << 22 | b >>> 10) + c << 0;\n }\n\n a += (d ^ (b & (c ^ d))) + blocks[4] - 176418897;\n a = (a << 7 | a >>> 25) + b << 0;\n d += (c ^ (a & (b ^ c))) + blocks[5] + 1200080426;\n d = (d << 12 | d >>> 20) + a << 0;\n c += (b ^ (d & (a ^ b))) + blocks[6] - 1473231341;\n c = (c << 17 | c >>> 15) + d << 0;\n b += (a ^ (c & (d ^ a))) + blocks[7] - 45705983;\n b = (b << 22 | b >>> 10) + c << 0;\n a += (d ^ (b & (c ^ d))) + blocks[8] + 1770035416;\n a = (a << 7 | a >>> 25) + b << 0;\n d += (c ^ (a & (b ^ c))) + blocks[9] - 1958414417;\n d = (d << 12 | d >>> 20) + a << 0;\n c += (b ^ (d & (a ^ b))) + blocks[10] - 42063;\n c = (c << 17 | c >>> 15) + d << 0;\n b += (a ^ (c & (d ^ a))) + blocks[11] - 1990404162;\n b = (b << 22 | b >>> 10) + c << 0;\n a += (d ^ (b & (c ^ d))) + blocks[12] + 1804603682;\n a = (a << 7 | a >>> 25) + b << 0;\n d += (c ^ (a & (b ^ c))) + blocks[13] - 40341101;\n d = (d << 12 | d >>> 20) + a << 0;\n c += (b ^ (d & (a ^ b))) + blocks[14] - 1502002290;\n c = (c << 17 | c >>> 15) + d << 0;\n b += (a ^ (c & (d ^ a))) + blocks[15] + 1236535329;\n b = (b << 22 | b >>> 10) + c << 0;\n a += (c ^ (d & (b ^ c))) + blocks[1] - 165796510;\n a = (a << 5 | a >>> 27) + b << 0;\n d += (b ^ (c & (a ^ b))) + blocks[6] - 1069501632;\n d = (d << 9 | d >>> 23) + a << 0;\n c += (a ^ (b & (d ^ a))) + blocks[11] + 643717713;\n c = (c << 14 | c >>> 18) + d << 0;\n b += (d ^ (a & (c ^ d))) + blocks[0] - 373897302;\n b = (b << 20 | b >>> 12) + c << 0;\n a += (c ^ (d & (b ^ c))) + blocks[5] - 701558691;\n a = (a << 5 | a >>> 27) + b << 0;\n d += (b ^ (c & (a ^ b))) + blocks[10] + 38016083;\n d = (d << 9 | d >>> 23) + a << 0;\n c += (a ^ (b & (d ^ a))) + blocks[15] - 660478335;\n c = (c << 14 | c >>> 18) + d << 0;\n b += (d ^ (a & (c ^ d))) + blocks[4] - 405537848;\n b = (b << 20 | b >>> 12) + c << 0;\n a += (c ^ (d & (b ^ c))) + blocks[9] + 568446438;\n a = (a << 5 | a >>> 27) + b << 0;\n d += (b ^ (c & (a ^ b))) + blocks[14] - 1019803690;\n d = (d << 9 | d >>> 23) + a << 0;\n c += (a ^ (b & (d ^ a))) + blocks[3] - 187363961;\n c = (c << 14 | c >>> 18) + d << 0;\n b += (d ^ (a & (c ^ d))) + blocks[8] + 1163531501;\n b = (b << 20 | b >>> 12) + c << 0;\n a += (c ^ (d & (b ^ c))) + blocks[13] - 1444681467;\n a = (a << 5 | a >>> 27) + b << 0;\n d += (b ^ (c & (a ^ b))) + blocks[2] - 51403784;\n d = (d << 9 | d >>> 23) + a << 0;\n c += (a ^ (b & (d ^ a))) + blocks[7] + 1735328473;\n c = (c << 14 | c >>> 18) + d << 0;\n b += (d ^ (a & (c ^ d))) + blocks[12] - 1926607734;\n b = (b << 20 | b >>> 12) + c << 0;\n bc = b ^ c;\n a += (bc ^ d) + blocks[5] - 378558;\n a = (a << 4 | a >>> 28) + b << 0;\n d += (bc ^ a) + blocks[8] - 2022574463;\n d = (d << 11 | d >>> 21) + a << 0;\n da = d ^ a;\n c += (da ^ b) + blocks[11] + 1839030562;\n c = (c << 16 | c >>> 16) + d << 0;\n b += (da ^ c) + blocks[14] - 35309556;\n b = (b << 23 | b >>> 9) + c << 0;\n bc = b ^ c;\n a += (bc ^ d) + blocks[1] - 1530992060;\n a = (a << 4 | a >>> 28) + b << 0;\n d += (bc ^ a) + blocks[4] + 1272893353;\n d = (d << 11 | d >>> 21) + a << 0;\n da = d ^ a;\n c += (da ^ b) + blocks[7] - 155497632;\n c = (c << 16 | c >>> 16) + d << 0;\n b += (da ^ c) + blocks[10] - 1094730640;\n b = (b << 23 | b >>> 9) + c << 0;\n bc = b ^ c;\n a += (bc ^ d) + blocks[13] + 681279174;\n a = (a << 4 | a >>> 28) + b << 0;\n d += (bc ^ a) + blocks[0] - 358537222;\n d = (d << 11 | d >>> 21) + a << 0;\n da = d ^ a;\n c += (da ^ b) + blocks[3] - 722521979;\n c = (c << 16 | c >>> 16) + d << 0;\n b += (da ^ c) + blocks[6] + 76029189;\n b = (b << 23 | b >>> 9) + c << 0;\n bc = b ^ c;\n a += (bc ^ d) + blocks[9] - 640364487;\n a = (a << 4 | a >>> 28) + b << 0;\n d += (bc ^ a) + blocks[12] - 421815835;\n d = (d << 11 | d >>> 21) + a << 0;\n da = d ^ a;\n c += (da ^ b) + blocks[15] + 530742520;\n c = (c << 16 | c >>> 16) + d << 0;\n b += (da ^ c) + blocks[2] - 995338651;\n b = (b << 23 | b >>> 9) + c << 0;\n a += (c ^ (b | ~d)) + blocks[0] - 198630844;\n a = (a << 6 | a >>> 26) + b << 0;\n d += (b ^ (a | ~c)) + blocks[7] + 1126891415;\n d = (d << 10 | d >>> 22) + a << 0;\n c += (a ^ (d | ~b)) + blocks[14] - 1416354905;\n c = (c << 15 | c >>> 17) + d << 0;\n b += (d ^ (c | ~a)) + blocks[5] - 57434055;\n b = (b << 21 | b >>> 11) + c << 0;\n a += (c ^ (b | ~d)) + blocks[12] + 1700485571;\n a = (a << 6 | a >>> 26) + b << 0;\n d += (b ^ (a | ~c)) + blocks[3] - 1894986606;\n d = (d << 10 | d >>> 22) + a << 0;\n c += (a ^ (d | ~b)) + blocks[10] - 1051523;\n c = (c << 15 | c >>> 17) + d << 0;\n b += (d ^ (c | ~a)) + blocks[1] - 2054922799;\n b = (b << 21 | b >>> 11) + c << 0;\n a += (c ^ (b | ~d)) + blocks[8] + 1873313359;\n a = (a << 6 | a >>> 26) + b << 0;\n d += (b ^ (a | ~c)) + blocks[15] - 30611744;\n d = (d << 10 | d >>> 22) + a << 0;\n c += (a ^ (d | ~b)) + blocks[6] - 1560198380;\n c = (c << 15 | c >>> 17) + d << 0;\n b += (d ^ (c | ~a)) + blocks[13] + 1309151649;\n b = (b << 21 | b >>> 11) + c << 0;\n a += (c ^ (b | ~d)) + blocks[4] - 145523070;\n a = (a << 6 | a >>> 26) + b << 0;\n d += (b ^ (a | ~c)) + blocks[11] - 1120210379;\n d = (d << 10 | d >>> 22) + a << 0;\n c += (a ^ (d | ~b)) + blocks[2] + 718787259;\n c = (c << 15 | c >>> 17) + d << 0;\n b += (d ^ (c | ~a)) + blocks[9] - 343485551;\n b = (b << 21 | b >>> 11) + c << 0;\n\n if (this.first) {\n this.h0 = a + 1732584193 << 0;\n this.h1 = b - 271733879 << 0;\n this.h2 = c - 1732584194 << 0;\n this.h3 = d + 271733878 << 0;\n this.first = false;\n } else {\n this.h0 = this.h0 + a << 0;\n this.h1 = this.h1 + b << 0;\n this.h2 = this.h2 + c << 0;\n this.h3 = this.h3 + d << 0;\n }\n};\n\n/**\n * @method hex\n * @memberof Md5\n * @instance\n * @description Output hash as hex string\n * @returns {String} Hex string\n * @see {@link md5.hex}\n * @example\n * hash.hex();\n */\nMd5.prototype.hex = function () {\n this.finalize();\n\n var h0 = this.h0, h1 = this.h1, h2 = this.h2, h3 = this.h3;\n\n return HEX_CHARS[(h0 >>> 4) & 0x0F] + HEX_CHARS[h0 & 0x0F] +\n HEX_CHARS[(h0 >>> 12) & 0x0F] + HEX_CHARS[(h0 >>> 8) & 0x0F] +\n HEX_CHARS[(h0 >>> 20) & 0x0F] + HEX_CHARS[(h0 >>> 16) & 0x0F] +\n HEX_CHARS[(h0 >>> 28) & 0x0F] + HEX_CHARS[(h0 >>> 24) & 0x0F] +\n HEX_CHARS[(h1 >>> 4) & 0x0F] + HEX_CHARS[h1 & 0x0F] +\n HEX_CHARS[(h1 >>> 12) & 0x0F] + HEX_CHARS[(h1 >>> 8) & 0x0F] +\n HEX_CHARS[(h1 >>> 20) & 0x0F] + HEX_CHARS[(h1 >>> 16) & 0x0F] +\n HEX_CHARS[(h1 >>> 28) & 0x0F] + HEX_CHARS[(h1 >>> 24) & 0x0F] +\n HEX_CHARS[(h2 >>> 4) & 0x0F] + HEX_CHARS[h2 & 0x0F] +\n HEX_CHARS[(h2 >>> 12) & 0x0F] + HEX_CHARS[(h2 >>> 8) & 0x0F] +\n HEX_CHARS[(h2 >>> 20) & 0x0F] + HEX_CHARS[(h2 >>> 16) & 0x0F] +\n HEX_CHARS[(h2 >>> 28) & 0x0F] + HEX_CHARS[(h2 >>> 24) & 0x0F] +\n HEX_CHARS[(h3 >>> 4) & 0x0F] + HEX_CHARS[h3 & 0x0F] +\n HEX_CHARS[(h3 >>> 12) & 0x0F] + HEX_CHARS[(h3 >>> 8) & 0x0F] +\n HEX_CHARS[(h3 >>> 20) & 0x0F] + HEX_CHARS[(h3 >>> 16) & 0x0F] +\n HEX_CHARS[(h3 >>> 28) & 0x0F] + HEX_CHARS[(h3 >>> 24) & 0x0F];\n};\n\n/**\n * @method toString\n * @memberof Md5\n * @instance\n * @description Output hash as hex string\n * @returns {String} Hex string\n * @see {@link md5.hex}\n * @example\n * hash.toString();\n */\nMd5.prototype.toString = Md5.prototype.hex;\n\n/**\n * @method digest\n * @memberof Md5\n * @instance\n * @description Output hash as bytes array\n * @returns {Array} Bytes array\n * @see {@link md5.digest}\n * @example\n * hash.digest();\n */\nMd5.prototype.digest = function () {\n this.finalize();\n\n var h0 = this.h0, h1 = this.h1, h2 = this.h2, h3 = this.h3;\n return [\n h0 & 0xFF, (h0 >>> 8) & 0xFF, (h0 >>> 16) & 0xFF, (h0 >>> 24) & 0xFF,\n h1 & 0xFF, (h1 >>> 8) & 0xFF, (h1 >>> 16) & 0xFF, (h1 >>> 24) & 0xFF,\n h2 & 0xFF, (h2 >>> 8) & 0xFF, (h2 >>> 16) & 0xFF, (h2 >>> 24) & 0xFF,\n h3 & 0xFF, (h3 >>> 8) & 0xFF, (h3 >>> 16) & 0xFF, (h3 >>> 24) & 0xFF\n ];\n};\n\n/**\n * @method array\n * @memberof Md5\n * @instance\n * @description Output hash as bytes array\n * @returns {Array} Bytes array\n * @see {@link md5.array}\n * @example\n * hash.array();\n */\nMd5.prototype.array = Md5.prototype.digest;\n\n/**\n * @method arrayBuffer\n * @memberof Md5\n * @instance\n * @description Output hash as ArrayBuffer\n * @returns {ArrayBuffer} ArrayBuffer\n * @see {@link md5.arrayBuffer}\n * @example\n * hash.arrayBuffer();\n */\nMd5.prototype.arrayBuffer = function () {\n this.finalize();\n\n var buffer = new ArrayBuffer(16);\n var blocks = new Uint32Array(buffer);\n blocks[0] = this.h0;\n blocks[1] = this.h1;\n blocks[2] = this.h2;\n blocks[3] = this.h3;\n return buffer;\n};\n\n/**\n * @method buffer\n * @deprecated This maybe confuse with Buffer in node.js. Please use arrayBuffer instead.\n * @memberof Md5\n * @instance\n * @description Output hash as ArrayBuffer\n * @returns {ArrayBuffer} ArrayBuffer\n * @see {@link md5.buffer}\n * @example\n * hash.buffer();\n */\nMd5.prototype.buffer = Md5.prototype.arrayBuffer;\n\n/**\n * @method base64\n * @memberof Md5\n * @instance\n * @description Output hash as base64 string\n * @returns {String} base64 string\n * @see {@link md5.base64}\n * @example\n * hash.base64();\n */\nMd5.prototype.base64 = function () {\n var v1, v2, v3, base64Str = '', bytes = this.array();\n for (var i = 0; i < 15;) {\n v1 = bytes[i++];\n v2 = bytes[i++];\n v3 = bytes[i++];\n base64Str += BASE64_ENCODE_CHAR[v1 >>> 2] +\n BASE64_ENCODE_CHAR[(v1 << 4 | v2 >>> 4) & 63] +\n BASE64_ENCODE_CHAR[(v2 << 2 | v3 >>> 6) & 63] +\n BASE64_ENCODE_CHAR[v3 & 63];\n }\n v1 = bytes[i];\n base64Str += BASE64_ENCODE_CHAR[v1 >>> 2] +\n BASE64_ENCODE_CHAR[(v1 << 4) & 63] +\n '==';\n return base64Str;\n};\n\n/**\n * HmacMd5 class\n * @class HmacMd5\n * @extends Md5\n * @description This is internal class.\n * @see {@link md5.hmac.create}\n */\nfunction HmacMd5(key, sharedMemory) {\n var i, result = formatMessage(key);\n key = result[0];\n if (result[1]) {\n var bytes = [], length = key.length, index = 0, code;\n for (i = 0; i < length; ++i) {\n code = key.charCodeAt(i);\n if (code < 0x80) {\n bytes[index++] = code;\n } else if (code < 0x800) {\n bytes[index++] = (0xc0 | (code >>> 6));\n bytes[index++] = (0x80 | (code & 0x3f));\n } else if (code < 0xd800 || code >= 0xe000) {\n bytes[index++] = (0xe0 | (code >>> 12));\n bytes[index++] = (0x80 | ((code >>> 6) & 0x3f));\n bytes[index++] = (0x80 | (code & 0x3f));\n } else {\n code = 0x10000 + (((code & 0x3ff) << 10) | (key.charCodeAt(++i) & 0x3ff));\n bytes[index++] = (0xf0 | (code >>> 18));\n bytes[index++] = (0x80 | ((code >>> 12) & 0x3f));\n bytes[index++] = (0x80 | ((code >>> 6) & 0x3f));\n bytes[index++] = (0x80 | (code & 0x3f));\n }\n }\n key = bytes;\n }\n\n if (key.length > 64) {\n key = (new Md5(true)).update(key).array();\n }\n\n var oKeyPad = [], iKeyPad = [];\n for (i = 0; i < 64; ++i) {\n var b = key[i] || 0;\n oKeyPad[i] = 0x5c ^ b;\n iKeyPad[i] = 0x36 ^ b;\n }\n\n Md5.call(this, sharedMemory);\n\n this.update(iKeyPad);\n this.oKeyPad = oKeyPad;\n this.inner = true;\n this.sharedMemory = sharedMemory;\n}\nHmacMd5.prototype = new Md5();\n\nHmacMd5.prototype.finalize = function () {\n Md5.prototype.finalize.call(this);\n if (this.inner) {\n this.inner = false;\n var innerHash = this.array();\n Md5.call(this, this.sharedMemory);\n this.update(this.oKeyPad);\n this.update(innerHash);\n Md5.prototype.finalize.call(this);\n }\n};\n\nconst md5 = createMethod();\nexport default md5;\n","/**\n * This file is part of AesBridge - modern cross-language AES encryption library\n * Repository: https://github.com/mervick/aes-bridge\n *\n * Copyright Andrey Izman (c) 2018-2025 <izmanw@gmail.com>\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\nimport md5 from './md5.js';\nimport { toBytes, generateRandom, base64Encode, base64Decode } from './common.js';\n\nconst BLOCK_SIZE = 16;\nconst KEY_LEN = 32;\nconst IV_LEN = 16;\n\n/**\n * Encrypts plaintext using AES-256-CBC with OpenSSL-compatible format.\n * Output: Base64 encoded \"Salted__\" + salt(8) + ciphertext\n *\n * @param {string|Uint8Array} raw - Data to encrypt\n * @param {string|Uint8Array} passphrase - Passphrase for key derivation\n * @returns {Promise<string>} - Base64 encoded encrypted string\n */\nexport async function encryptLegacy(raw, passphrase) {\n const salt = generateRandom(8);\n const { key, iv } = await deriveKeyAndIv(passphrase, salt);\n\n const ciphertext = new Uint8Array(await crypto.subtle.encrypt(\n { name: 'AES-CBC', iv },\n key,\n toBytes(raw)\n ));\n\n const result = new Uint8Array(8 + 8 + ciphertext.length);\n result.set(toBytes('Salted__')); // 8 bytes\n result.set(salt, 8);\n result.set(ciphertext, 16);\n return base64Encode(result);\n}\n\n/**\n * Decrypts Base64-encoded AES-256-CBC data with OpenSSL-compatible format.\n *\n * @param {string} enc - Base64 encoded input\n * @param {string|Uint8Array} passphrase - Password\n * @returns {Promise<Uint8Array>} - Decrypted plaintext\n */\nexport async function decryptLegacy(enc, passphrase) {\n const ct = base64Decode(enc);\n if (String.fromCharCode(...ct.slice(0, 8)) !== 'Salted__') {\n throw new Error('Invalid OpenSSL header');\n }\n const salt = ct.slice(8, 16);\n const { key, iv } = await deriveKeyAndIv(passphrase, salt);\n\n return new Uint8Array(await crypto.subtle.decrypt(\n { name: 'AES-CBC', iv },\n key,\n ct.slice(16)\n ));\n}\n\n/**\n * Derives key and IV using OpenSSL EVP_BytesToKey-style KDF (MD5).\n *\n * @param {string|Uint8Array} password\n * @param {Uint8Array} salt\n * @returns {Promise<{key: CryptoKey, iv: Uint8Array}>}\n */\nasync function deriveKeyAndIv(password, salt) {\n password = toBytes(password);\n let d = new Uint8Array(0);\n let prev = new Uint8Array(0);\n\n while (d.length < KEY_LEN + IV_LEN) {\n const data = concatUint8Arrays(prev, password, salt);\n prev = computeMd5(data);\n d = concatUint8Arrays(d, prev);\n }\n\n const keyBytes = d.slice(0, KEY_LEN);\n const iv = d.slice(KEY_LEN, KEY_LEN + IV_LEN);\n const key = await crypto.subtle.importKey('raw', keyBytes, 'AES-CBC', false, ['encrypt', 'decrypt']);\n\n return { key, iv };\n}\n\n/**\n * Computes MD5 hash.\n *\n * @param {Uint8Array} data\n * @returns {Uint8Array}\n */\nfunction computeMd5(data) {\n // Если data — Uint8Array, преобразуем в строку или Buffer\n const input = data instanceof Uint8Array ? Buffer.from(data) : data;\n const hash = md5(input); // Вычисляем MD5\n return new Uint8Array(Buffer.from(hash, 'hex')); // Возвращаем Uint8Array\n}\n\n/**\n * Concatenates multiple Uint8Arrays.\n *\n * @param {...Uint8Array} arrays\n * @returns {Uint8Array}\n */\nfunction concatUint8Arrays(...arrays) {\n const totalLen = arrays.reduce((acc, val) => acc + val.length, 0);\n const result = new Uint8Array(totalLen);\n let offset = 0;\n for (const arr of arrays) {\n result.set(arr, offset);\n offset += arr.length;\n }\n return result;\n}\n","/**\n * This file is part of AesBridge - modern cross-language AES encryption library\n * Repository: https://github.com/mervick/aes-bridge\n *\n * Copyright Andrey Izman (c) 2018-2025 <izmanw@gmail.com>\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\nimport { encryptCbc, encryptCbcBin, decryptCbc, decryptCbcBin } from \"./cbc\";\nimport { encryptGcm, encryptGcmBin, decryptGcm, decryptGcmBin } from \"./gcm\";\nimport { encryptLegacy, decryptLegacy } from \"./legacy\";\n\nconst encrypt = encryptGcm;\nconst decrypt = decryptGcm;\n\nexport {\n encrypt,\n decrypt,\n encryptCbc,\n decryptCbc,\n encryptCbcBin,\n decryptCbcBin,\n encryptGcm,\n decryptGcm,\n encryptGcmBin,\n decryptGcmBin,\n encryptLegacy,\n decryptLegacy\n};\n"],"names":["toBytes","input","TextEncoder","encode","generateRandom","length","array","Uint8Array","crypto","getRandomValues","base64Encode","bytes","btoa","String","fromCharCode","base64Decode","b64","TextDecoder","decode","bytesToString","binary","atob","i","charCodeAt","async","deriveKeys","password","salt","keyMaterial","subtle","importKey","name","derived","deriveBits","iterations","hash","aesKey","slice","hmacKey","encryptCbcBin","plaintext","iv","ciphertext","encrypt","macData","set","tag","sign","result","decryptCbcBin","data","verify","Error","decrypt","encryptCbc","decryptCbc","deriveKey","encryptGcmBin","nonce","key","encrypted","tagLength","decryptGcmBin","ciphertextWithTag","decrypted","encryptGcm","decryptGcm","INPUT_ERROR","process","versions","node","buffer8","ARRAY_BUFFER","ArrayBuffer","HEX_CHARS","split","EXTRA","SHIFT","OUTPUT_TYPES","BASE64_ENCODE_CHAR","blocks","buffer","Uint32Array","isArray","Array","obj","Object","prototype","toString","call","isView","constructor","formatMessage","message","type","createOutputMethod","outputType","Md5","update","sharedMemory","this","h0","h1","h2","h3","start","hBytes","finalized","hashed","first","HmacMd5","code","index","oKeyPad","iKeyPad","b","inner","isString","lastByteIndex","finalize","a","c","d","bc","da","hex","digest","arrayBuffer","base64","v1","v2","v3","base64Str","innerHash","md5","method","create","createMethod","encryptLegacy","raw","passphrase","deriveKeyAndIv","decryptLegacy","enc","ct","prev","KEY_LEN","computeMd5","concatUint8Arrays","keyBytes","Buffer","from","arrays","totalLen","reduce","acc","val","offset","arr"],"mappings":"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"}
|
package/dist/aes-bridge.umd.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?e(exports):"function"==typeof define&&define.amd?define(["exports"],e):e((t="undefined"!=typeof globalThis?globalThis:t||self).aes_bridge={})}(this,function(t){"use strict";function e(t){return"string"==typeof t?(new TextEncoder).encode(t):t}function r(t){const e=new Uint8Array(t);return crypto.getRandomValues(e),e}function n(t){return btoa(String.fromCharCode(...t))}function i(t){t=function(t){return t instanceof Uint8Array?(new TextDecoder).decode(t):t}(t);const e=atob(t),r=new Uint8Array(e.length);for(let t=0;t<e.length;t++)r[t]=e.charCodeAt(t);return r}async function s(t,r){const n=await crypto.subtle.importKey("raw",e(t),{name:"PBKDF2"},!1,["deriveBits","deriveKey"]),i=await crypto.subtle.deriveBits({name:"PBKDF2",salt:r,iterations:1e5,hash:"SHA-256"},n,512),s=new Uint8Array(i);return{aesKey:await crypto.subtle.importKey("raw",s.slice(0,32),{name:"AES-CBC"},!1,["encrypt","decrypt"]),hmacKey:await crypto.subtle.importKey("raw",s.slice(32),{name:"HMAC",hash:"SHA-256"},!1,["sign","verify"])}}async function a(t,n){t=e(t),n=e(n);const i=r(16),a=r(16),{aesKey:h,hmacKey:o}=await s(n,i),c=new Uint8Array(await crypto.subtle.encrypt({name:"AES-CBC",iv:a},h,t)),y=new Uint8Array(a.length+c.length);y.set(a),y.set(c,a.length);const f=new Uint8Array(await crypto.subtle.sign("HMAC",o,y)),u=new Uint8Array(i.length+a.length+c.length+f.length);return u.set(i),u.set(a,i.length),u.set(c,i.length+a.length),u.set(f,i.length+a.length+c.length),u}async function h(t,r){t=e(t),r=e(r);const n=t.slice(0,16),i=t.slice(16,32),a=t.slice(-32),h=t.slice(32,-32),{aesKey:o,hmacKey:c}=await s(r,n),y=new Uint8Array(i.length+h.length);y.set(i),y.set(h,i.length);if(!await crypto.subtle.verify("HMAC",c,a,y))throw new Error("HMAC verification failed");return new Uint8Array(await crypto.subtle.decrypt({name:"AES-CBC",iv:i},o,h))}async function o(t,r){const n=await crypto.subtle.importKey("raw",e(t),{name:"PBKDF2"},!1,["deriveBits","deriveKey"]);return crypto.subtle.deriveKey({name:"PBKDF2",salt:r,iterations:1e5,hash:"SHA-256"},n,{name:"AES-GCM",length:256},!1,["encrypt","decrypt"])}async function c(t,n){t=e(t),n=e(n);const i=r(16),s=r(12),a=await o(n,i),h=new Uint8Array(await crypto.subtle.encrypt({name:"AES-GCM",iv:s,tagLength:128},a,t)),c=new Uint8Array(i.length+s.length+h.length);return c.set(i),c.set(s,i.length),c.set(h,i.length+s.length),c}async function y(t,r){t=e(t),r=e(r);const n=t.slice(0,16),i=t.slice(16,28),s=t.slice(28),a=await o(r,n),h=await crypto.subtle.decrypt({name:"AES-GCM",iv:i,tagLength:128},a,s);return new Uint8Array(h)}async function f(t,e){return n(await c(t,e))}async function u(t,r){return y(i(e(t)),r)}var l,p="input is invalid type",d="object"==typeof process&&process.versions&&process.versions.node,w="undefined"!=typeof ArrayBuffer,A="0123456789abcdef".split(""),g=[128,32768,8388608,-2147483648],b=[0,8,16,24],v=["hex","array","digest","buffer","arrayBuffer","base64"],m="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".split(""),B=[];if(w){var C=new ArrayBuffer(68);l=new Uint8Array(C),B=new Uint32Array(C)}var U=Array.isArray;U||(U=function(t){return"[object Array]"===Object.prototype.toString.call(t)});var K=ArrayBuffer.isView;w&&!K&&(K=function(t){return"object"==typeof t&&t.buffer&&t.buffer.constructor===ArrayBuffer});var S=function(t){var e=typeof t;if("string"===e)return[t,!0];if("object"!==e||null===t)throw new Error(p);if(w&&t.constructor===ArrayBuffer)return[new Uint8Array(t),!1];if(!U(t)&&!K(t))throw new Error(p);return[t,!1]},E=function(t){return function(e){return new z(!0).update(e)[t]()}},x=function(t){var e,r=require("crypto"),n=require("buffer").Buffer;e=n.from?n.from:function(t){return new n(t)};return function(i){if("string"==typeof i)return r.createHash("md5").update(i,"utf8").digest("hex");if(null==i)throw new Error(p);return i.constructor===ArrayBuffer&&(i=new Uint8Array(i)),U(i)||K(i)||i.constructor===n?r.createHash("md5").update(e(i)).digest("hex"):t(i)}};function z(t){if(t)B[0]=B[16]=B[1]=B[2]=B[3]=B[4]=B[5]=B[6]=B[7]=B[8]=B[9]=B[10]=B[11]=B[12]=B[13]=B[14]=B[15]=0,this.blocks=B,this.buffer8=l;else if(w){var e=new ArrayBuffer(68);this.buffer8=new Uint8Array(e),this.blocks=new Uint32Array(e)}else this.blocks=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0];this.h0=this.h1=this.h2=this.h3=this.start=this.bytes=this.hBytes=0,this.finalized=this.hashed=!1,this.first=!0}function k(t,e){var r,n=S(t);if(t=n[0],n[1]){var i,s=[],a=t.length,h=0;for(r=0;r<a;++r)(i=t.charCodeAt(r))<128?s[h++]=i:i<2048?(s[h++]=192|i>>>6,s[h++]=128|63&i):i<55296||i>=57344?(s[h++]=224|i>>>12,s[h++]=128|i>>>6&63,s[h++]=128|63&i):(i=65536+((1023&i)<<10|1023&t.charCodeAt(++r)),s[h++]=240|i>>>18,s[h++]=128|i>>>12&63,s[h++]=128|i>>>6&63,s[h++]=128|63&i);t=s}t.length>64&&(t=new z(!0).update(t).array());var o=[],c=[];for(r=0;r<64;++r){var y=t[r]||0;o[r]=92^y,c[r]=54^y}z.call(this,e),this.update(c),this.oKeyPad=o,this.inner=!0,this.sharedMemory=e}z.prototype.update=function(t){if(this.finalized)throw new Error("finalize already called");var e=S(t);t=e[0];for(var r,n,i=e[1],s=0,a=t.length,h=this.blocks,o=this.buffer8;s<a;){if(this.hashed&&(this.hashed=!1,h[0]=h[16],h[16]=h[1]=h[2]=h[3]=h[4]=h[5]=h[6]=h[7]=h[8]=h[9]=h[10]=h[11]=h[12]=h[13]=h[14]=h[15]=0),i)if(w)for(n=this.start;s<a&&n<64;++s)(r=t.charCodeAt(s))<128?o[n++]=r:r<2048?(o[n++]=192|r>>>6,o[n++]=128|63&r):r<55296||r>=57344?(o[n++]=224|r>>>12,o[n++]=128|r>>>6&63,o[n++]=128|63&r):(r=65536+((1023&r)<<10|1023&t.charCodeAt(++s)),o[n++]=240|r>>>18,o[n++]=128|r>>>12&63,o[n++]=128|r>>>6&63,o[n++]=128|63&r);else for(n=this.start;s<a&&n<64;++s)(r=t.charCodeAt(s))<128?h[n>>>2]|=r<<b[3&n++]:r<2048?(h[n>>>2]|=(192|r>>>6)<<b[3&n++],h[n>>>2]|=(128|63&r)<<b[3&n++]):r<55296||r>=57344?(h[n>>>2]|=(224|r>>>12)<<b[3&n++],h[n>>>2]|=(128|r>>>6&63)<<b[3&n++],h[n>>>2]|=(128|63&r)<<b[3&n++]):(r=65536+((1023&r)<<10|1023&t.charCodeAt(++s)),h[n>>>2]|=(240|r>>>18)<<b[3&n++],h[n>>>2]|=(128|r>>>12&63)<<b[3&n++],h[n>>>2]|=(128|r>>>6&63)<<b[3&n++],h[n>>>2]|=(128|63&r)<<b[3&n++]);else if(w)for(n=this.start;s<a&&n<64;++s)o[n++]=t[s];else for(n=this.start;s<a&&n<64;++s)h[n>>>2]|=t[s]<<b[3&n++];this.lastByteIndex=n,this.bytes+=n-this.start,n>=64?(this.start=n-64,this.hash(),this.hashed=!0):this.start=n}return this.bytes>4294967295&&(this.hBytes+=this.bytes/4294967296|0,this.bytes=this.bytes%4294967296),this},z.prototype.finalize=function(){if(!this.finalized){this.finalized=!0;var t=this.blocks,e=this.lastByteIndex;t[e>>>2]|=g[3&e],e>=56&&(this.hashed||this.hash(),t[0]=t[16],t[16]=t[1]=t[2]=t[3]=t[4]=t[5]=t[6]=t[7]=t[8]=t[9]=t[10]=t[11]=t[12]=t[13]=t[14]=t[15]=0),t[14]=this.bytes<<3,t[15]=this.hBytes<<3|this.bytes>>>29,this.hash()}},z.prototype.hash=function(){var t,e,r,n,i,s,a=this.blocks;this.first?e=((e=((t=((t=a[0]-680876937)<<7|t>>>25)-271733879|0)^(r=((r=(-271733879^(n=((n=(-1732584194^2004318071&t)+a[1]-117830708)<<12|n>>>20)+t|0)&(-271733879^t))+a[2]-1126478375)<<17|r>>>15)+n|0)&(n^t))+a[3]-1316259209)<<22|e>>>10)+r|0:(t=this.h0,e=this.h1,r=this.h2,e=((e+=((t=((t+=((n=this.h3)^e&(r^n))+a[0]-680876936)<<7|t>>>25)+e|0)^(r=((r+=(e^(n=((n+=(r^t&(e^r))+a[1]-389564586)<<12|n>>>20)+t|0)&(t^e))+a[2]+606105819)<<17|r>>>15)+n|0)&(n^t))+a[3]-1044525330)<<22|e>>>10)+r|0),e=((e+=((t=((t+=(n^e&(r^n))+a[4]-176418897)<<7|t>>>25)+e|0)^(r=((r+=(e^(n=((n+=(r^t&(e^r))+a[5]+1200080426)<<12|n>>>20)+t|0)&(t^e))+a[6]-1473231341)<<17|r>>>15)+n|0)&(n^t))+a[7]-45705983)<<22|e>>>10)+r|0,e=((e+=((t=((t+=(n^e&(r^n))+a[8]+1770035416)<<7|t>>>25)+e|0)^(r=((r+=(e^(n=((n+=(r^t&(e^r))+a[9]-1958414417)<<12|n>>>20)+t|0)&(t^e))+a[10]-42063)<<17|r>>>15)+n|0)&(n^t))+a[11]-1990404162)<<22|e>>>10)+r|0,e=((e+=((t=((t+=(n^e&(r^n))+a[12]+1804603682)<<7|t>>>25)+e|0)^(r=((r+=(e^(n=((n+=(r^t&(e^r))+a[13]-40341101)<<12|n>>>20)+t|0)&(t^e))+a[14]-1502002290)<<17|r>>>15)+n|0)&(n^t))+a[15]+1236535329)<<22|e>>>10)+r|0,e=((e+=((n=((n+=(e^r&((t=((t+=(r^n&(e^r))+a[1]-165796510)<<5|t>>>27)+e|0)^e))+a[6]-1069501632)<<9|n>>>23)+t|0)^t&((r=((r+=(t^e&(n^t))+a[11]+643717713)<<14|r>>>18)+n|0)^n))+a[0]-373897302)<<20|e>>>12)+r|0,e=((e+=((n=((n+=(e^r&((t=((t+=(r^n&(e^r))+a[5]-701558691)<<5|t>>>27)+e|0)^e))+a[10]+38016083)<<9|n>>>23)+t|0)^t&((r=((r+=(t^e&(n^t))+a[15]-660478335)<<14|r>>>18)+n|0)^n))+a[4]-405537848)<<20|e>>>12)+r|0,e=((e+=((n=((n+=(e^r&((t=((t+=(r^n&(e^r))+a[9]+568446438)<<5|t>>>27)+e|0)^e))+a[14]-1019803690)<<9|n>>>23)+t|0)^t&((r=((r+=(t^e&(n^t))+a[3]-187363961)<<14|r>>>18)+n|0)^n))+a[8]+1163531501)<<20|e>>>12)+r|0,e=((e+=((n=((n+=(e^r&((t=((t+=(r^n&(e^r))+a[13]-1444681467)<<5|t>>>27)+e|0)^e))+a[2]-51403784)<<9|n>>>23)+t|0)^t&((r=((r+=(t^e&(n^t))+a[7]+1735328473)<<14|r>>>18)+n|0)^n))+a[12]-1926607734)<<20|e>>>12)+r|0,e=((e+=((s=(n=((n+=((i=e^r)^(t=((t+=(i^n)+a[5]-378558)<<4|t>>>28)+e|0))+a[8]-2022574463)<<11|n>>>21)+t|0)^t)^(r=((r+=(s^e)+a[11]+1839030562)<<16|r>>>16)+n|0))+a[14]-35309556)<<23|e>>>9)+r|0,e=((e+=((s=(n=((n+=((i=e^r)^(t=((t+=(i^n)+a[1]-1530992060)<<4|t>>>28)+e|0))+a[4]+1272893353)<<11|n>>>21)+t|0)^t)^(r=((r+=(s^e)+a[7]-155497632)<<16|r>>>16)+n|0))+a[10]-1094730640)<<23|e>>>9)+r|0,e=((e+=((s=(n=((n+=((i=e^r)^(t=((t+=(i^n)+a[13]+681279174)<<4|t>>>28)+e|0))+a[0]-358537222)<<11|n>>>21)+t|0)^t)^(r=((r+=(s^e)+a[3]-722521979)<<16|r>>>16)+n|0))+a[6]+76029189)<<23|e>>>9)+r|0,e=((e+=((s=(n=((n+=((i=e^r)^(t=((t+=(i^n)+a[9]-640364487)<<4|t>>>28)+e|0))+a[12]-421815835)<<11|n>>>21)+t|0)^t)^(r=((r+=(s^e)+a[15]+530742520)<<16|r>>>16)+n|0))+a[2]-995338651)<<23|e>>>9)+r|0,e=((e+=((n=((n+=(e^((t=((t+=(r^(e|~n))+a[0]-198630844)<<6|t>>>26)+e|0)|~r))+a[7]+1126891415)<<10|n>>>22)+t|0)^((r=((r+=(t^(n|~e))+a[14]-1416354905)<<15|r>>>17)+n|0)|~t))+a[5]-57434055)<<21|e>>>11)+r|0,e=((e+=((n=((n+=(e^((t=((t+=(r^(e|~n))+a[12]+1700485571)<<6|t>>>26)+e|0)|~r))+a[3]-1894986606)<<10|n>>>22)+t|0)^((r=((r+=(t^(n|~e))+a[10]-1051523)<<15|r>>>17)+n|0)|~t))+a[1]-2054922799)<<21|e>>>11)+r|0,e=((e+=((n=((n+=(e^((t=((t+=(r^(e|~n))+a[8]+1873313359)<<6|t>>>26)+e|0)|~r))+a[15]-30611744)<<10|n>>>22)+t|0)^((r=((r+=(t^(n|~e))+a[6]-1560198380)<<15|r>>>17)+n|0)|~t))+a[13]+1309151649)<<21|e>>>11)+r|0,e=((e+=((n=((n+=(e^((t=((t+=(r^(e|~n))+a[4]-145523070)<<6|t>>>26)+e|0)|~r))+a[11]-1120210379)<<10|n>>>22)+t|0)^((r=((r+=(t^(n|~e))+a[2]+718787259)<<15|r>>>17)+n|0)|~t))+a[9]-343485551)<<21|e>>>11)+r|0,this.first?(this.h0=t+1732584193|0,this.h1=e-271733879|0,this.h2=r-1732584194|0,this.h3=n+271733878|0,this.first=!1):(this.h0=this.h0+t|0,this.h1=this.h1+e|0,this.h2=this.h2+r|0,this.h3=this.h3+n|0)},z.prototype.hex=function(){this.finalize();var t=this.h0,e=this.h1,r=this.h2,n=this.h3;return A[t>>>4&15]+A[15&t]+A[t>>>12&15]+A[t>>>8&15]+A[t>>>20&15]+A[t>>>16&15]+A[t>>>28&15]+A[t>>>24&15]+A[e>>>4&15]+A[15&e]+A[e>>>12&15]+A[e>>>8&15]+A[e>>>20&15]+A[e>>>16&15]+A[e>>>28&15]+A[e>>>24&15]+A[r>>>4&15]+A[15&r]+A[r>>>12&15]+A[r>>>8&15]+A[r>>>20&15]+A[r>>>16&15]+A[r>>>28&15]+A[r>>>24&15]+A[n>>>4&15]+A[15&n]+A[n>>>12&15]+A[n>>>8&15]+A[n>>>20&15]+A[n>>>16&15]+A[n>>>28&15]+A[n>>>24&15]},z.prototype.toString=z.prototype.hex,z.prototype.digest=function(){this.finalize();var t=this.h0,e=this.h1,r=this.h2,n=this.h3;return[255&t,t>>>8&255,t>>>16&255,t>>>24&255,255&e,e>>>8&255,e>>>16&255,e>>>24&255,255&r,r>>>8&255,r>>>16&255,r>>>24&255,255&n,n>>>8&255,n>>>16&255,n>>>24&255]},z.prototype.array=z.prototype.digest,z.prototype.arrayBuffer=function(){this.finalize();var t=new ArrayBuffer(16),e=new Uint32Array(t);return e[0]=this.h0,e[1]=this.h1,e[2]=this.h2,e[3]=this.h3,t},z.prototype.buffer=z.prototype.arrayBuffer,z.prototype.base64=function(){for(var t,e,r,n="",i=this.array(),s=0;s<15;)t=i[s++],e=i[s++],r=i[s++],n+=m[t>>>2]+m[63&(t<<4|e>>>4)]+m[63&(e<<2|r>>>6)]+m[63&r];return t=i[s],n+=m[t>>>2]+m[t<<4&63]+"=="},k.prototype=new z,k.prototype.finalize=function(){if(z.prototype.finalize.call(this),this.inner){this.inner=!1;var t=this.array();z.call(this,this.sharedMemory),this.update(this.oKeyPad),this.update(t),z.prototype.finalize.call(this)}};const H=function(){var t=E("hex");d&&(t=x(t)),t.create=function(){return new z},t.update=function(e){return t.create().update(e)};for(var e=0;e<v.length;++e){var r=v[e];t[r]=E(r)}return t}();async function M(t,r){t=e(t);let n=new Uint8Array(0),i=new Uint8Array(0);for(;n.length<48;){i=G(j(i,t,r)),n=j(n,i)}const s=n.slice(0,32),a=n.slice(32,48);return{key:await crypto.subtle.importKey("raw",s,"AES-CBC",!1,["encrypt","decrypt"]),iv:a}}function G(t){const e=t instanceof Uint8Array?Buffer.from(t):t,r=H(e);return new Uint8Array(Buffer.from(r,"hex"))}function j(...t){const e=t.reduce((t,e)=>t+e.length,0),r=new Uint8Array(e);let n=0;for(const e of t)r.set(e,n),n+=e.length;return r}const P=f,D=u;t.decrypt=D,t.decryptCbc=async function(t,e){return h(i(t),e)},t.decryptCbcBin=h,t.decryptGcm=u,t.decryptGcmBin=y,t.decryptLegacy=async function(t,e){const r=i(t);if("Salted__"!==String.fromCharCode(...r.slice(0,8)))throw new Error("Invalid OpenSSL header");const n=r.slice(8,16),{key:s,iv:a}=await M(e,n);return new Uint8Array(await crypto.subtle.decrypt({name:"AES-CBC",iv:a},s,r.slice(16)))},t.encrypt=P,t.encryptCbc=async function(t,e){return n(await a(t,e))},t.encryptCbcBin=a,t.encryptGcm=f,t.encryptGcmBin=c,t.encryptLegacy=async function(t,i){const s=r(8),{key:a,iv:h}=await M(i,s),o=new Uint8Array(await crypto.subtle.encrypt({name:"AES-CBC",iv:h},a,e(t))),c=new Uint8Array(16+o.length);return c.set(e("Salted__")),c.set(s,8),c.set(o,16),n(c)}});
|
|
1
|
+
!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?e(exports):"function"==typeof define&&define.amd?define(["exports"],e):e((t="undefined"!=typeof globalThis?globalThis:t||self).aes_bridge={})}(this,function(t){"use strict";function e(t){return"string"==typeof t?(new TextEncoder).encode(t):t}function r(t){const e=new Uint8Array(t);return crypto.getRandomValues(e),e}function n(t){return btoa(String.fromCharCode(...t))}function i(t){t=function(t){return t instanceof Uint8Array?(new TextDecoder).decode(t):t}(t);const e=atob(t),r=new Uint8Array(e.length);for(let t=0;t<e.length;t++)r[t]=e.charCodeAt(t);return r}async function s(t,r){const n=await crypto.subtle.importKey("raw",e(t),{name:"PBKDF2"},!1,["deriveBits","deriveKey"]),i=await crypto.subtle.deriveBits({name:"PBKDF2",salt:r,iterations:1e5,hash:"SHA-256"},n,512),s=new Uint8Array(i);return{aesKey:await crypto.subtle.importKey("raw",s.slice(0,32),{name:"AES-CBC"},!1,["encrypt","decrypt"]),hmacKey:await crypto.subtle.importKey("raw",s.slice(32),{name:"HMAC",hash:"SHA-256"},!1,["sign","verify"])}}async function a(t,n){t=e(t),n=e(n);const i=r(16),a=r(16),{aesKey:h,hmacKey:o}=await s(n,i),c=new Uint8Array(await crypto.subtle.encrypt({name:"AES-CBC",iv:a},h,t)),y=new Uint8Array(a.length+c.length);y.set(a),y.set(c,a.length);const f=new Uint8Array(await crypto.subtle.sign("HMAC",o,y)),u=new Uint8Array(i.length+a.length+c.length+f.length);return u.set(i),u.set(a,i.length),u.set(c,i.length+a.length),u.set(f,i.length+a.length+c.length),u}async function h(t,r){t=e(t),r=e(r);const n=t.slice(0,16),i=t.slice(16,32),a=t.slice(-32),h=t.slice(32,-32),{aesKey:o,hmacKey:c}=await s(r,n),y=new Uint8Array(i.length+h.length);y.set(i),y.set(h,i.length);if(!await crypto.subtle.verify("HMAC",c,a,y))throw new Error("HMAC verification failed");return new Uint8Array(await crypto.subtle.decrypt({name:"AES-CBC",iv:i},o,h))}async function o(t,r){const n=await crypto.subtle.importKey("raw",e(t),{name:"PBKDF2"},!1,["deriveBits","deriveKey"]);return crypto.subtle.deriveKey({name:"PBKDF2",salt:r,iterations:1e5,hash:"SHA-256"},n,{name:"AES-GCM",length:256},!1,["encrypt","decrypt"])}async function c(t,n){t=e(t),n=e(n);const i=r(16),s=r(12),a=await o(n,i),h=new Uint8Array(await crypto.subtle.encrypt({name:"AES-GCM",iv:s,tagLength:128},a,t)),c=new Uint8Array(i.length+s.length+h.length);return c.set(i),c.set(s,i.length),c.set(h,i.length+s.length),c}async function y(t,r){t=e(t),r=e(r);const n=t.slice(0,16),i=t.slice(16,28),s=t.slice(28),a=await o(r,n),h=await crypto.subtle.decrypt({name:"AES-GCM",iv:i,tagLength:128},a,s);return new Uint8Array(h)}async function f(t,e){return n(await c(t,e))}async function u(t,r){return y(i(e(t)),r)}var l="input is invalid type";"object"==typeof process&&process.versions&&process.versions.node;var p,d="undefined"!=typeof ArrayBuffer,w="0123456789abcdef".split(""),A=[128,32768,8388608,-2147483648],b=[0,8,16,24],g=["hex","array","digest","buffer","arrayBuffer","base64"],v="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".split(""),m=[];if(d){var B=new ArrayBuffer(68);p=new Uint8Array(B),m=new Uint32Array(B)}var C=Array.isArray;C||(C=function(t){return"[object Array]"===Object.prototype.toString.call(t)});var U=ArrayBuffer.isView;d&&!U&&(U=function(t){return"object"==typeof t&&t.buffer&&t.buffer.constructor===ArrayBuffer});var K=function(t){var e=typeof t;if("string"===e)return[t,!0];if("object"!==e||null===t)throw new Error(l);if(d&&t.constructor===ArrayBuffer)return[new Uint8Array(t),!1];if(!C(t)&&!U(t))throw new Error(l);return[t,!1]},S=function(t){return function(e){return new E(!0).update(e)[t]()}};function E(t){if(t)m[0]=m[16]=m[1]=m[2]=m[3]=m[4]=m[5]=m[6]=m[7]=m[8]=m[9]=m[10]=m[11]=m[12]=m[13]=m[14]=m[15]=0,this.blocks=m,this.buffer8=p;else if(d){var e=new ArrayBuffer(68);this.buffer8=new Uint8Array(e),this.blocks=new Uint32Array(e)}else this.blocks=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0];this.h0=this.h1=this.h2=this.h3=this.start=this.bytes=this.hBytes=0,this.finalized=this.hashed=!1,this.first=!0}function x(t,e){var r,n=K(t);if(t=n[0],n[1]){var i,s=[],a=t.length,h=0;for(r=0;r<a;++r)(i=t.charCodeAt(r))<128?s[h++]=i:i<2048?(s[h++]=192|i>>>6,s[h++]=128|63&i):i<55296||i>=57344?(s[h++]=224|i>>>12,s[h++]=128|i>>>6&63,s[h++]=128|63&i):(i=65536+((1023&i)<<10|1023&t.charCodeAt(++r)),s[h++]=240|i>>>18,s[h++]=128|i>>>12&63,s[h++]=128|i>>>6&63,s[h++]=128|63&i);t=s}t.length>64&&(t=new E(!0).update(t).array());var o=[],c=[];for(r=0;r<64;++r){var y=t[r]||0;o[r]=92^y,c[r]=54^y}E.call(this,e),this.update(c),this.oKeyPad=o,this.inner=!0,this.sharedMemory=e}E.prototype.update=function(t){if(this.finalized)throw new Error("finalize already called");var e=K(t);t=e[0];for(var r,n,i=e[1],s=0,a=t.length,h=this.blocks,o=this.buffer8;s<a;){if(this.hashed&&(this.hashed=!1,h[0]=h[16],h[16]=h[1]=h[2]=h[3]=h[4]=h[5]=h[6]=h[7]=h[8]=h[9]=h[10]=h[11]=h[12]=h[13]=h[14]=h[15]=0),i)if(d)for(n=this.start;s<a&&n<64;++s)(r=t.charCodeAt(s))<128?o[n++]=r:r<2048?(o[n++]=192|r>>>6,o[n++]=128|63&r):r<55296||r>=57344?(o[n++]=224|r>>>12,o[n++]=128|r>>>6&63,o[n++]=128|63&r):(r=65536+((1023&r)<<10|1023&t.charCodeAt(++s)),o[n++]=240|r>>>18,o[n++]=128|r>>>12&63,o[n++]=128|r>>>6&63,o[n++]=128|63&r);else for(n=this.start;s<a&&n<64;++s)(r=t.charCodeAt(s))<128?h[n>>>2]|=r<<b[3&n++]:r<2048?(h[n>>>2]|=(192|r>>>6)<<b[3&n++],h[n>>>2]|=(128|63&r)<<b[3&n++]):r<55296||r>=57344?(h[n>>>2]|=(224|r>>>12)<<b[3&n++],h[n>>>2]|=(128|r>>>6&63)<<b[3&n++],h[n>>>2]|=(128|63&r)<<b[3&n++]):(r=65536+((1023&r)<<10|1023&t.charCodeAt(++s)),h[n>>>2]|=(240|r>>>18)<<b[3&n++],h[n>>>2]|=(128|r>>>12&63)<<b[3&n++],h[n>>>2]|=(128|r>>>6&63)<<b[3&n++],h[n>>>2]|=(128|63&r)<<b[3&n++]);else if(d)for(n=this.start;s<a&&n<64;++s)o[n++]=t[s];else for(n=this.start;s<a&&n<64;++s)h[n>>>2]|=t[s]<<b[3&n++];this.lastByteIndex=n,this.bytes+=n-this.start,n>=64?(this.start=n-64,this.hash(),this.hashed=!0):this.start=n}return this.bytes>4294967295&&(this.hBytes+=this.bytes/4294967296|0,this.bytes=this.bytes%4294967296),this},E.prototype.finalize=function(){if(!this.finalized){this.finalized=!0;var t=this.blocks,e=this.lastByteIndex;t[e>>>2]|=A[3&e],e>=56&&(this.hashed||this.hash(),t[0]=t[16],t[16]=t[1]=t[2]=t[3]=t[4]=t[5]=t[6]=t[7]=t[8]=t[9]=t[10]=t[11]=t[12]=t[13]=t[14]=t[15]=0),t[14]=this.bytes<<3,t[15]=this.hBytes<<3|this.bytes>>>29,this.hash()}},E.prototype.hash=function(){var t,e,r,n,i,s,a=this.blocks;this.first?e=((e=((t=((t=a[0]-680876937)<<7|t>>>25)-271733879|0)^(r=((r=(-271733879^(n=((n=(-1732584194^2004318071&t)+a[1]-117830708)<<12|n>>>20)+t|0)&(-271733879^t))+a[2]-1126478375)<<17|r>>>15)+n|0)&(n^t))+a[3]-1316259209)<<22|e>>>10)+r|0:(t=this.h0,e=this.h1,r=this.h2,e=((e+=((t=((t+=((n=this.h3)^e&(r^n))+a[0]-680876936)<<7|t>>>25)+e|0)^(r=((r+=(e^(n=((n+=(r^t&(e^r))+a[1]-389564586)<<12|n>>>20)+t|0)&(t^e))+a[2]+606105819)<<17|r>>>15)+n|0)&(n^t))+a[3]-1044525330)<<22|e>>>10)+r|0),e=((e+=((t=((t+=(n^e&(r^n))+a[4]-176418897)<<7|t>>>25)+e|0)^(r=((r+=(e^(n=((n+=(r^t&(e^r))+a[5]+1200080426)<<12|n>>>20)+t|0)&(t^e))+a[6]-1473231341)<<17|r>>>15)+n|0)&(n^t))+a[7]-45705983)<<22|e>>>10)+r|0,e=((e+=((t=((t+=(n^e&(r^n))+a[8]+1770035416)<<7|t>>>25)+e|0)^(r=((r+=(e^(n=((n+=(r^t&(e^r))+a[9]-1958414417)<<12|n>>>20)+t|0)&(t^e))+a[10]-42063)<<17|r>>>15)+n|0)&(n^t))+a[11]-1990404162)<<22|e>>>10)+r|0,e=((e+=((t=((t+=(n^e&(r^n))+a[12]+1804603682)<<7|t>>>25)+e|0)^(r=((r+=(e^(n=((n+=(r^t&(e^r))+a[13]-40341101)<<12|n>>>20)+t|0)&(t^e))+a[14]-1502002290)<<17|r>>>15)+n|0)&(n^t))+a[15]+1236535329)<<22|e>>>10)+r|0,e=((e+=((n=((n+=(e^r&((t=((t+=(r^n&(e^r))+a[1]-165796510)<<5|t>>>27)+e|0)^e))+a[6]-1069501632)<<9|n>>>23)+t|0)^t&((r=((r+=(t^e&(n^t))+a[11]+643717713)<<14|r>>>18)+n|0)^n))+a[0]-373897302)<<20|e>>>12)+r|0,e=((e+=((n=((n+=(e^r&((t=((t+=(r^n&(e^r))+a[5]-701558691)<<5|t>>>27)+e|0)^e))+a[10]+38016083)<<9|n>>>23)+t|0)^t&((r=((r+=(t^e&(n^t))+a[15]-660478335)<<14|r>>>18)+n|0)^n))+a[4]-405537848)<<20|e>>>12)+r|0,e=((e+=((n=((n+=(e^r&((t=((t+=(r^n&(e^r))+a[9]+568446438)<<5|t>>>27)+e|0)^e))+a[14]-1019803690)<<9|n>>>23)+t|0)^t&((r=((r+=(t^e&(n^t))+a[3]-187363961)<<14|r>>>18)+n|0)^n))+a[8]+1163531501)<<20|e>>>12)+r|0,e=((e+=((n=((n+=(e^r&((t=((t+=(r^n&(e^r))+a[13]-1444681467)<<5|t>>>27)+e|0)^e))+a[2]-51403784)<<9|n>>>23)+t|0)^t&((r=((r+=(t^e&(n^t))+a[7]+1735328473)<<14|r>>>18)+n|0)^n))+a[12]-1926607734)<<20|e>>>12)+r|0,e=((e+=((s=(n=((n+=((i=e^r)^(t=((t+=(i^n)+a[5]-378558)<<4|t>>>28)+e|0))+a[8]-2022574463)<<11|n>>>21)+t|0)^t)^(r=((r+=(s^e)+a[11]+1839030562)<<16|r>>>16)+n|0))+a[14]-35309556)<<23|e>>>9)+r|0,e=((e+=((s=(n=((n+=((i=e^r)^(t=((t+=(i^n)+a[1]-1530992060)<<4|t>>>28)+e|0))+a[4]+1272893353)<<11|n>>>21)+t|0)^t)^(r=((r+=(s^e)+a[7]-155497632)<<16|r>>>16)+n|0))+a[10]-1094730640)<<23|e>>>9)+r|0,e=((e+=((s=(n=((n+=((i=e^r)^(t=((t+=(i^n)+a[13]+681279174)<<4|t>>>28)+e|0))+a[0]-358537222)<<11|n>>>21)+t|0)^t)^(r=((r+=(s^e)+a[3]-722521979)<<16|r>>>16)+n|0))+a[6]+76029189)<<23|e>>>9)+r|0,e=((e+=((s=(n=((n+=((i=e^r)^(t=((t+=(i^n)+a[9]-640364487)<<4|t>>>28)+e|0))+a[12]-421815835)<<11|n>>>21)+t|0)^t)^(r=((r+=(s^e)+a[15]+530742520)<<16|r>>>16)+n|0))+a[2]-995338651)<<23|e>>>9)+r|0,e=((e+=((n=((n+=(e^((t=((t+=(r^(e|~n))+a[0]-198630844)<<6|t>>>26)+e|0)|~r))+a[7]+1126891415)<<10|n>>>22)+t|0)^((r=((r+=(t^(n|~e))+a[14]-1416354905)<<15|r>>>17)+n|0)|~t))+a[5]-57434055)<<21|e>>>11)+r|0,e=((e+=((n=((n+=(e^((t=((t+=(r^(e|~n))+a[12]+1700485571)<<6|t>>>26)+e|0)|~r))+a[3]-1894986606)<<10|n>>>22)+t|0)^((r=((r+=(t^(n|~e))+a[10]-1051523)<<15|r>>>17)+n|0)|~t))+a[1]-2054922799)<<21|e>>>11)+r|0,e=((e+=((n=((n+=(e^((t=((t+=(r^(e|~n))+a[8]+1873313359)<<6|t>>>26)+e|0)|~r))+a[15]-30611744)<<10|n>>>22)+t|0)^((r=((r+=(t^(n|~e))+a[6]-1560198380)<<15|r>>>17)+n|0)|~t))+a[13]+1309151649)<<21|e>>>11)+r|0,e=((e+=((n=((n+=(e^((t=((t+=(r^(e|~n))+a[4]-145523070)<<6|t>>>26)+e|0)|~r))+a[11]-1120210379)<<10|n>>>22)+t|0)^((r=((r+=(t^(n|~e))+a[2]+718787259)<<15|r>>>17)+n|0)|~t))+a[9]-343485551)<<21|e>>>11)+r|0,this.first?(this.h0=t+1732584193|0,this.h1=e-271733879|0,this.h2=r-1732584194|0,this.h3=n+271733878|0,this.first=!1):(this.h0=this.h0+t|0,this.h1=this.h1+e|0,this.h2=this.h2+r|0,this.h3=this.h3+n|0)},E.prototype.hex=function(){this.finalize();var t=this.h0,e=this.h1,r=this.h2,n=this.h3;return w[t>>>4&15]+w[15&t]+w[t>>>12&15]+w[t>>>8&15]+w[t>>>20&15]+w[t>>>16&15]+w[t>>>28&15]+w[t>>>24&15]+w[e>>>4&15]+w[15&e]+w[e>>>12&15]+w[e>>>8&15]+w[e>>>20&15]+w[e>>>16&15]+w[e>>>28&15]+w[e>>>24&15]+w[r>>>4&15]+w[15&r]+w[r>>>12&15]+w[r>>>8&15]+w[r>>>20&15]+w[r>>>16&15]+w[r>>>28&15]+w[r>>>24&15]+w[n>>>4&15]+w[15&n]+w[n>>>12&15]+w[n>>>8&15]+w[n>>>20&15]+w[n>>>16&15]+w[n>>>28&15]+w[n>>>24&15]},E.prototype.toString=E.prototype.hex,E.prototype.digest=function(){this.finalize();var t=this.h0,e=this.h1,r=this.h2,n=this.h3;return[255&t,t>>>8&255,t>>>16&255,t>>>24&255,255&e,e>>>8&255,e>>>16&255,e>>>24&255,255&r,r>>>8&255,r>>>16&255,r>>>24&255,255&n,n>>>8&255,n>>>16&255,n>>>24&255]},E.prototype.array=E.prototype.digest,E.prototype.arrayBuffer=function(){this.finalize();var t=new ArrayBuffer(16),e=new Uint32Array(t);return e[0]=this.h0,e[1]=this.h1,e[2]=this.h2,e[3]=this.h3,t},E.prototype.buffer=E.prototype.arrayBuffer,E.prototype.base64=function(){for(var t,e,r,n="",i=this.array(),s=0;s<15;)t=i[s++],e=i[s++],r=i[s++],n+=v[t>>>2]+v[63&(t<<4|e>>>4)]+v[63&(e<<2|r>>>6)]+v[63&r];return t=i[s],n+=v[t>>>2]+v[t<<4&63]+"=="},x.prototype=new E,x.prototype.finalize=function(){if(E.prototype.finalize.call(this),this.inner){this.inner=!1;var t=this.array();E.call(this,this.sharedMemory),this.update(this.oKeyPad),this.update(t),E.prototype.finalize.call(this)}};const z=function(){var t=S("hex");t.create=function(){return new E},t.update=function(e){return t.create().update(e)};for(var e=0;e<g.length;++e){var r=g[e];t[r]=S(r)}return t}();async function k(t,r){t=e(t);let n=new Uint8Array(0),i=new Uint8Array(0);for(;n.length<48;){i=M(G(i,t,r)),n=G(n,i)}const s=n.slice(0,32),a=n.slice(32,48);return{key:await crypto.subtle.importKey("raw",s,"AES-CBC",!1,["encrypt","decrypt"]),iv:a}}function M(t){const e=t instanceof Uint8Array?Buffer.from(t):t,r=z(e);return new Uint8Array(Buffer.from(r,"hex"))}function G(...t){const e=t.reduce((t,e)=>t+e.length,0),r=new Uint8Array(e);let n=0;for(const e of t)r.set(e,n),n+=e.length;return r}const H=f,j=u;t.decrypt=j,t.decryptCbc=async function(t,e){return h(i(t),e)},t.decryptCbcBin=h,t.decryptGcm=u,t.decryptGcmBin=y,t.decryptLegacy=async function(t,e){const r=i(t);if("Salted__"!==String.fromCharCode(...r.slice(0,8)))throw new Error("Invalid OpenSSL header");const n=r.slice(8,16),{key:s,iv:a}=await k(e,n);return new Uint8Array(await crypto.subtle.decrypt({name:"AES-CBC",iv:a},s,r.slice(16)))},t.encrypt=H,t.encryptCbc=async function(t,e){return n(await a(t,e))},t.encryptCbcBin=a,t.encryptGcm=f,t.encryptGcmBin=c,t.encryptLegacy=async function(t,i){const s=r(8),{key:a,iv:h}=await k(i,s),o=new Uint8Array(await crypto.subtle.encrypt({name:"AES-CBC",iv:h},a,e(t))),c=new Uint8Array(16+o.length);return c.set(e("Salted__")),c.set(s,8),c.set(o,16),n(c)}});
|
|
2
2
|
//# sourceMappingURL=aes-bridge.umd.js.map
|