aes-bridge 2.0.0

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.
@@ -0,0 +1 @@
1
+ {"version":3,"file":"aes-bridge.esm.js","sources":["../common.js","../cbc.js","../gcm.js","../md5.js","../legacy.js","../index.js"],"sourcesContent":["/**\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","import { 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","import { 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","// import { md5 } from 'js-md5';\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","import { 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":"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"}
@@ -0,0 +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)}});
2
+ //# sourceMappingURL=aes-bridge.umd.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"aes-bridge.umd.js","sources":["../common.js","../cbc.js","../gcm.js","../md5.js","../legacy.js","../index.js"],"sourcesContent":["/**\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","import { 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","import { 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","// import { md5 } from 'js-md5';\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","import { 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","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","deriveKeyAndIv","prev","KEY_LEN","computeMd5","concatUint8Arrays","keyBytes","arrays","totalLen","reduce","acc","val","offset","arr","enc","passphrase","ct","raw"],"mappings":"iPAOO,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,CC5FAlB,eAAe8B,EAAU5B,EAAUC,GACjC,MAAMC,QAAoBpB,OAAOqB,OAAOC,UACtC,MACA9B,EAAQ0B,GACR,CAAEK,KAAM,WACR,EACA,CAAC,aAAc,cAIjB,OAAOvB,OAAOqB,OAAOyB,UACnB,CACEvB,KAAM,SACNJ,KAAMA,EACNO,WAAY,IACZC,KAAM,WAERP,EACA,CAAEG,KAAM,UAAW1B,OAAQ,MAC3B,EACA,CAAC,UAAW,WAEhB,CAUOmB,eAAe+B,EAAcf,EAAWd,GAC7Cc,EAAYxC,EAAQwC,GACpBd,EAAW1B,EAAQ0B,GACnB,MAAMC,EAAOvB,EAAe,IACtBoD,EAAQpD,EAAe,IACvBqD,QAAYH,EAAU5B,EAAUC,GAEhC+B,EAAY,IAAInD,iBAAiBC,OAAOqB,OAAOc,QACnD,CACEZ,KAAM,UACNU,GAAIe,EACJG,UAAW,KAEbF,EACAjB,IAGIQ,EAAS,IAAIzC,WAAWoB,EAAKtB,OAASmD,EAAMnD,OAASqD,EAAUrD,QAIrE,OAHA2C,EAAOH,IAAIlB,GACXqB,EAAOH,IAAIW,EAAO7B,EAAKtB,QACvB2C,EAAOH,IAAIa,EAAW/B,EAAKtB,OAASmD,EAAMnD,QACnC2C,CACT,CASOxB,eAAeoC,EAAcV,EAAMxB,GACxCwB,EAAOlD,EAAQkD,GACfxB,EAAW1B,EAAQ0B,GAEnB,MAAMC,EAAOuB,EAAKb,MAAM,EAAG,IACrBmB,EAAQN,EAAKb,MAAM,GAAI,IACvBwB,EAAoBX,EAAKb,MAAM,IAE/BoB,QAAYH,EAAU5B,EAAUC,GAEhCmC,QAAkBtD,OAAOqB,OAAOwB,QACpC,CACEtB,KAAM,UACNU,GAAIe,EACJG,UAAW,KAEbF,EACAI,GAGF,OAAO,IAAItD,WAAWuD,EACxB,CASOtC,eAAeuC,EAAWb,EAAMxB,GAErC,OAAOhB,QADc6C,EAAcL,EAAMxB,GAE3C,CASOF,eAAewC,EAAWd,EAAMxB,GAErC,OAAOkC,EADK7C,EAAaf,EAAQkD,IACPxB,EAC5B,CCzFA,IAUiBuC,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,IAAI1D,WAAWyE,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,IAAIxC,MAAMc,GAElB,GAAIK,GAAgBqB,EAAQF,cAAgBlB,YAC1C,MAAO,CAAC,IAAIjE,WAAWqF,IAAU,GAEnC,IAAKV,EAAQU,KAAaH,EAAOG,GAC/B,MAAM,IAAIxC,MAAMc,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,EAFA5F,EAAS6F,QAAQ,UACjBC,EAASD,QAAQ,UAAUC,OAG7BF,EADEE,EAAOC,KACID,EAAOC,KAEP,SAAUX,GACrB,OAAO,IAAIU,EAAOV,EACpB,EAmBF,OAjBiB,SAAUA,GACzB,GAAuB,iBAAZA,EACT,OAAOpF,EAAOgG,WAAW,OAAOP,OAAOL,EAAS,QAAQa,OAAO,OAE/D,GAAIb,QACF,MAAM,IAAIxC,MAAMc,GAKpB,OAJa0B,EAAQF,cAAgBlB,cACjCoB,EAAU,IAAIrF,WAAWqF,IAGzBV,EAAQU,IAAYH,EAAOG,IAC7BA,EAAQF,cAAgBY,EACjB9F,EAAOgG,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,IAAI1D,WAAWyE,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,KAAKhG,MAAQgG,KAAKM,OAAS,EAChFN,KAAKO,UAAYP,KAAKQ,QAAS,EAC/BR,KAAKS,OAAQ,CACf,CA2bA,SAASC,EAAQ5D,EAAKiD,GACpB,IAAIpF,EAAG0B,EAAS2C,EAAclC,GAE9B,GADAA,EAAMT,EAAO,GACTA,EAAO,GAAI,CACb,IAAgDsE,EAA5C3G,EAAQ,GAAIN,EAASoD,EAAIpD,OAAQkH,EAAQ,EAC7C,IAAKjG,EAAI,EAAGA,EAAIjB,IAAUiB,GACxBgG,EAAO7D,EAAIlC,WAAWD,IACX,IACTX,EAAM4G,KAAWD,EACRA,EAAO,MAChB3G,EAAM4G,KAAY,IAAQD,IAAS,EACnC3G,EAAM4G,KAAY,IAAe,GAAPD,GACjBA,EAAO,OAAUA,GAAQ,OAClC3G,EAAM4G,KAAY,IAAQD,IAAS,GACnC3G,EAAM4G,KAAY,IAASD,IAAS,EAAK,GACzC3G,EAAM4G,KAAY,IAAe,GAAPD,IAE1BA,EAAO,QAAoB,KAAPA,IAAiB,GAA6B,KAAtB7D,EAAIlC,aAAaD,IAC7DX,EAAM4G,KAAY,IAAQD,IAAS,GACnC3G,EAAM4G,KAAY,IAASD,IAAS,GAAM,GAC1C3G,EAAM4G,KAAY,IAASD,IAAS,EAAK,GACzC3G,EAAM4G,KAAY,IAAe,GAAPD,GAG9B7D,EAAM9C,CACR,CAEI8C,EAAIpD,OAAS,KACfoD,EAAM,IAAKuC,GAAI,GAAOC,OAAOxC,GAAKnD,SAGpC,IAAIkH,EAAU,GAAIC,EAAU,GAC5B,IAAKnG,EAAI,EAAGA,EAAI,KAAMA,EAAG,CACvB,IAAIoG,EAAIjE,EAAInC,IAAM,EAClBkG,EAAQlG,GAAK,GAAOoG,EACpBD,EAAQnG,GAAK,GAAOoG,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,IAAI9D,MAzUO,2BA4UnB,IAAIJ,EAAS2C,EAAcC,GAC3BA,EAAU5C,EAAO,GAKjB,IAJA,IACIsE,EAAiBhG,EADjBsG,EAAW5E,EAAO,GACZuE,EAAQ,EAAMlH,EAASuF,EAAQvF,OAAQ0E,EAAS4B,KAAK5B,OAC3Dd,EAAU0C,KAAK1C,QAEZsD,EAAQlH,GAAQ,CAUrB,GATIsG,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,IAAKjD,EAAIqF,KAAKK,MAAOO,EAAQlH,GAAUiB,EAAI,KAAMiG,GAC/CD,EAAO1B,EAAQrE,WAAWgG,IACf,IACTtD,EAAQ3C,KAAOgG,EACNA,EAAO,MAChBrD,EAAQ3C,KAAO,IAAQgG,IAAS,EAChCrD,EAAQ3C,KAAO,IAAe,GAAPgG,GACdA,EAAO,OAAUA,GAAQ,OAClCrD,EAAQ3C,KAAO,IAAQgG,IAAS,GAChCrD,EAAQ3C,KAAO,IAASgG,IAAS,EAAK,GACtCrD,EAAQ3C,KAAO,IAAe,GAAPgG,IAEvBA,EAAO,QAAoB,KAAPA,IAAiB,GAAqC,KAA9B1B,EAAQrE,aAAagG,IACjEtD,EAAQ3C,KAAO,IAAQgG,IAAS,GAChCrD,EAAQ3C,KAAO,IAASgG,IAAS,GAAM,GACvCrD,EAAQ3C,KAAO,IAASgG,IAAS,EAAK,GACtCrD,EAAQ3C,KAAO,IAAe,GAAPgG,QAI3B,IAAKhG,EAAIqF,KAAKK,MAAOO,EAAQlH,GAAUiB,EAAI,KAAMiG,GAC/CD,EAAO1B,EAAQrE,WAAWgG,IACf,IACTxC,EAAOzD,IAAM,IAAMgG,GAAQ1C,EAAY,EAANtD,KACxBgG,EAAO,MAChBvC,EAAOzD,IAAM,KAAO,IAAQgG,IAAS,IAAO1C,EAAY,EAANtD,KAClDyD,EAAOzD,IAAM,KAAO,IAAe,GAAPgG,IAAiB1C,EAAY,EAANtD,MAC1CgG,EAAO,OAAUA,GAAQ,OAClCvC,EAAOzD,IAAM,KAAO,IAAQgG,IAAS,KAAQ1C,EAAY,EAANtD,KACnDyD,EAAOzD,IAAM,KAAO,IAASgG,IAAS,EAAK,KAAU1C,EAAY,EAANtD,KAC3DyD,EAAOzD,IAAM,KAAO,IAAe,GAAPgG,IAAiB1C,EAAY,EAANtD,OAEnDgG,EAAO,QAAoB,KAAPA,IAAiB,GAAqC,KAA9B1B,EAAQrE,aAAagG,IACjExC,EAAOzD,IAAM,KAAO,IAAQgG,IAAS,KAAQ1C,EAAY,EAANtD,KACnDyD,EAAOzD,IAAM,KAAO,IAASgG,IAAS,GAAM,KAAU1C,EAAY,EAANtD,KAC5DyD,EAAOzD,IAAM,KAAO,IAASgG,IAAS,EAAK,KAAU1C,EAAY,EAANtD,KAC3DyD,EAAOzD,IAAM,KAAO,IAAe,GAAPgG,IAAiB1C,EAAY,EAANtD,WAKzD,GAAIiD,EACF,IAAKjD,EAAIqF,KAAKK,MAAOO,EAAQlH,GAAUiB,EAAI,KAAMiG,EAC/CtD,EAAQ3C,KAAOsE,EAAQ2B,QAGzB,IAAKjG,EAAIqF,KAAKK,MAAOO,EAAQlH,GAAUiB,EAAI,KAAMiG,EAC/CxC,EAAOzD,IAAM,IAAMsE,EAAQ2B,IAAU3C,EAAY,EAANtD,KAIjDqF,KAAKkB,cAAgBvG,EACrBqF,KAAKhG,OAASW,EAAIqF,KAAKK,MACnB1F,GAAK,IACPqF,KAAKK,MAAQ1F,EAAI,GACjBqF,KAAKxE,OACLwE,KAAKQ,QAAS,GAEdR,KAAKK,MAAQ1F,CAEjB,CAKA,OAJIqF,KAAKhG,MAAQ,aACfgG,KAAKM,QAAUN,KAAKhG,MAAQ,WAAc,EAC1CgG,KAAKhG,MAAQgG,KAAKhG,MAAQ,YAErBgG,IACT,EAEAX,EAAIV,UAAUwC,SAAW,WACvB,IAAInB,KAAKO,UAAT,CAGAP,KAAKO,WAAY,EACjB,IAAInC,EAAS4B,KAAK5B,OAAQzD,EAAIqF,KAAKkB,cACnC9C,EAAOzD,IAAM,IAAMqD,EAAU,EAAJrD,GACrBA,GAAK,KACFqF,KAAKQ,QACRR,KAAKxE,OAEP4C,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,KAAKhG,OAAS,EAC3BoE,EAAO,IAAM4B,KAAKM,QAAU,EAAIN,KAAKhG,QAAU,GAC/CgG,KAAKxE,MAhBL,CAiBF,EAEA6D,EAAIV,UAAUnD,KAAO,WACnB,IAAI4F,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,UAAUhF,MAAQ0F,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,GAAI/H,EAAQgG,KAAKrG,QACpCgB,EAAI,EAAGA,EAAI,IAClBiH,EAAK5H,EAAMW,KACXkH,EAAK7H,EAAMW,KACXmH,EAAK9H,EAAMW,KACXoH,GAAa5D,EAAmByD,IAAO,GACrCzD,EAA0C,IAAtByD,GAAM,EAAIC,IAAO,IACrC1D,EAA0C,IAAtB0D,GAAM,EAAIC,IAAO,IACrC3D,EAAwB,GAAL2D,GAMvB,OAJAF,EAAK5H,EAAMW,GACXoH,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,KAAKrG,QACrB0F,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,IAAItE,EAAI,EAAGA,EAAIuD,EAAaxE,SAAUiB,EAAG,CAC5C,IAAIuE,EAAOhB,EAAavD,GACxB6E,EAAON,GAAQC,EAAmBD,EACpC,CACA,OAAOM,CACT,CA+pBY2C,GCjxBZtH,eAAeuH,EAAerH,EAAUC,GACtCD,EAAW1B,EAAQ0B,GACnB,IAAIuG,EAAI,IAAI1H,WAAW,GACnByI,EAAO,IAAIzI,WAAW,GAE1B,KAAO0H,EAAE5H,OAAS4I,IAAkB,CAElCD,EAAOE,EADMC,EAAkBH,EAAMtH,EAAUC,IAE/CsG,EAAIkB,EAAkBlB,EAAGe,EAC3B,CAEA,MAAMI,EAAWnB,EAAE5F,MAAM,EApEX,IAqERI,EAAKwF,EAAE5F,MArEC,GAqEc4G,IAG5B,MAAO,CAAExF,UAFSjD,OAAOqB,OAAOC,UAAU,MAAOsH,EAAU,WAAW,EAAO,CAAC,UAAW,YAE3E3G,KAChB,CAQA,SAASyG,EAAWhG,GAElB,MAAMjD,EAAQiD,aAAgB3C,WAAa+F,OAAOC,KAAKrD,GAAQA,EACzDf,EAAOyG,EAAI3I,GACjB,OAAO,IAAIM,WAAW+F,OAAOC,KAAKpE,EAAM,OAC1C,CAQA,SAASgH,KAAqBE,GAC5B,MAAMC,EAAWD,EAAOE,OAAO,CAACC,EAAKC,IAAQD,EAAMC,EAAIpJ,OAAQ,GACzD2C,EAAS,IAAIzC,WAAW+I,GAC9B,IAAII,EAAS,EACb,IAAK,MAAMC,KAAON,EAChBrG,EAAOH,IAAI8G,EAAKD,GAChBA,GAAUC,EAAItJ,OAEhB,OAAO2C,CACT,CCxGK,MAACL,EAAUoB,EACVV,EAAUW,2BJqHTxC,eAA0B0B,EAAMxB,GAErC,OAAOuB,EADSlC,EAAamC,GACCxB,EAChC,qEGrFOF,eAA6BoI,EAAKC,GACvC,MAAMC,EAAK/I,EAAa6I,GACxB,GAA+C,aAA3C/I,OAAOC,gBAAgBgJ,EAAGzH,MAAM,EAAG,IACrC,MAAM,IAAIe,MAAM,0BAElB,MAAMzB,EAAOmI,EAAGzH,MAAM,EAAG,KACnBoB,IAAEA,EAAGhB,GAAEA,SAAasG,EAAec,EAAYlI,GAErD,OAAO,IAAIpB,iBAAiBC,OAAOqB,OAAOwB,QACxC,CAAEtB,KAAM,UAAWU,MACnBgB,EACAqG,EAAGzH,MAAM,KAEb,2BHyDOb,eAA0B0B,EAAMxB,GAErC,OAAOhB,QADiB6B,EAAcW,EAAMxB,GAE9C,qEGjGOF,eAA6BuI,EAAKF,GACvC,MAAMlI,EAAOvB,EAAe,IACtBqD,IAAEA,EAAGhB,GAAEA,SAAasG,EAAec,EAAYlI,GAE/Ce,EAAa,IAAInC,iBAAiBC,OAAOqB,OAAOc,QACpD,CAAEZ,KAAM,UAAWU,MACnBgB,EACAzD,EAAQ+J,KAGJ/G,EAAS,IAAIzC,WAAW,GAAQmC,EAAWrC,QAIjD,OAHA2C,EAAOH,IAAI7C,EAAQ,aACnBgD,EAAOH,IAAIlB,EAAM,GACjBqB,EAAOH,IAAIH,EAAY,IAChBhC,EAAasC,EACtB"}
package/gcm.js ADDED
@@ -0,0 +1,118 @@
1
+ import { toBytes, generateRandom, base64Encode, base64Decode } from './common.js';
2
+
3
+ /**
4
+ * Derives a 256-bit key from password and salt using PBKDF2-HMAC-SHA256.
5
+ *
6
+ * @param {string|Uint8Array} password - The password
7
+ * @param {Uint8Array} salt - 16-byte salt
8
+ * @returns {Promise<CryptoKey>}
9
+ */
10
+ async function deriveKey(password, salt) {
11
+ const keyMaterial = await crypto.subtle.importKey(
12
+ 'raw',
13
+ toBytes(password),
14
+ { name: 'PBKDF2' },
15
+ false,
16
+ ['deriveBits', 'deriveKey']
17
+ // ['deriveKey']
18
+ );
19
+
20
+ return crypto.subtle.deriveKey(
21
+ {
22
+ name: 'PBKDF2',
23
+ salt: salt,
24
+ iterations: 100_000,
25
+ hash: 'SHA-256',
26
+ },
27
+ keyMaterial,
28
+ { name: 'AES-GCM', length: 256 },
29
+ false,
30
+ ['encrypt', 'decrypt']
31
+ );
32
+ }
33
+
34
+ /**
35
+ * Encrypts plaintext using AES-GCM with key derived from password.
36
+ * Output format: salt(16) + nonce(12) + ciphertext + tag(16)
37
+ *
38
+ * @param {string|Uint8Array} plaintext - Data to encrypt
39
+ * @param {string|Uint8Array} password - Password
40
+ * @returns {Promise<Uint8Array>}
41
+ */
42
+ export async function encryptGcmBin(plaintext, password) {
43
+ plaintext = toBytes(plaintext);
44
+ password = toBytes(password);
45
+ const salt = generateRandom(16);
46
+ const nonce = generateRandom(12);
47
+ const key = await deriveKey(password, salt);
48
+
49
+ const encrypted = new Uint8Array(await crypto.subtle.encrypt(
50
+ {
51
+ name: 'AES-GCM',
52
+ iv: nonce,
53
+ tagLength: 128
54
+ },
55
+ key,
56
+ plaintext
57
+ ));
58
+
59
+ const result = new Uint8Array(salt.length + nonce.length + encrypted.length);
60
+ result.set(salt);
61
+ result.set(nonce, salt.length);
62
+ result.set(encrypted, salt.length + nonce.length);
63
+ return result;
64
+ }
65
+
66
+ /**
67
+ * Decrypts binary data produced by encryptGcmBin().
68
+ *
69
+ * @param {string|Uint8Array} data - Encrypted binary data
70
+ * @param {string|Uint8Array} password - Password
71
+ * @returns {Promise<Uint8Array>}
72
+ */
73
+ export async function decryptGcmBin(data, password) {
74
+ data = toBytes(data);
75
+ password = toBytes(password);
76
+
77
+ const salt = data.slice(0, 16);
78
+ const nonce = data.slice(16, 28);
79
+ const ciphertextWithTag = data.slice(28);
80
+
81
+ const key = await deriveKey(password, salt);
82
+
83
+ const decrypted = await crypto.subtle.decrypt(
84
+ {
85
+ name: 'AES-GCM',
86
+ iv: nonce,
87
+ tagLength: 128
88
+ },
89
+ key,
90
+ ciphertextWithTag
91
+ );
92
+
93
+ return new Uint8Array(decrypted);
94
+ }
95
+
96
+ /**
97
+ * Encrypts data using AES-GCM and returns Base64 string.
98
+ *
99
+ * @param {string|Uint8Array} data - Data to encrypt
100
+ * @param {string|Uint8Array} password - Password
101
+ * @returns {Promise<string>}
102
+ */
103
+ export async function encryptGcm(data, password) {
104
+ const result = await encryptGcmBin(data, password);
105
+ return base64Encode(result);
106
+ }
107
+
108
+ /**
109
+ * Decrypts Base64 encoded AES-GCM data.
110
+ *
111
+ * @param {string} data - Base64-encoded encrypted string
112
+ * @param {string|Uint8Array} password - Password
113
+ * @returns {Promise<Uint8Array>}
114
+ */
115
+ export async function decryptGcm(data, password) {
116
+ const raw = base64Decode(toBytes(data));
117
+ return decryptGcmBin(raw, password);
118
+ }
package/index.js ADDED
@@ -0,0 +1,21 @@
1
+ import { encryptCbc, encryptCbcBin, decryptCbc, decryptCbcBin } from "./cbc";
2
+ import { encryptGcm, encryptGcmBin, decryptGcm, decryptGcmBin } from "./gcm";
3
+ import { encryptLegacy, decryptLegacy } from "./legacy";
4
+
5
+ const encrypt = encryptGcm;
6
+ const decrypt = decryptGcm;
7
+
8
+ export {
9
+ encrypt,
10
+ decrypt,
11
+ encryptCbc,
12
+ decryptCbc,
13
+ encryptCbcBin,
14
+ decryptCbcBin,
15
+ encryptGcm,
16
+ decryptGcm,
17
+ encryptGcmBin,
18
+ decryptGcmBin,
19
+ encryptLegacy,
20
+ decryptLegacy
21
+ };
package/legacy.js ADDED
@@ -0,0 +1,109 @@
1
+ // import { md5 } from 'js-md5';
2
+ import md5 from './md5.js';
3
+ import { toBytes, generateRandom, base64Encode, base64Decode } from './common.js';
4
+
5
+ const BLOCK_SIZE = 16;
6
+ const KEY_LEN = 32;
7
+ const IV_LEN = 16;
8
+
9
+ /**
10
+ * Encrypts plaintext using AES-256-CBC with OpenSSL-compatible format.
11
+ * Output: Base64 encoded "Salted__" + salt(8) + ciphertext
12
+ *
13
+ * @param {string|Uint8Array} raw - Data to encrypt
14
+ * @param {string|Uint8Array} passphrase - Password
15
+ * @returns {string} - Base64 encoded ciphertext
16
+ */
17
+ export async function encryptLegacy(raw, passphrase) {
18
+ const salt = generateRandom(8);
19
+ const { key, iv } = await deriveKeyAndIv(passphrase, salt);
20
+
21
+ const ciphertext = new Uint8Array(await crypto.subtle.encrypt(
22
+ { name: 'AES-CBC', iv },
23
+ key,
24
+ toBytes(raw)
25
+ ));
26
+
27
+ const result = new Uint8Array(8 + 8 + ciphertext.length);
28
+ result.set(toBytes('Salted__')); // 8 bytes
29
+ result.set(salt, 8);
30
+ result.set(ciphertext, 16);
31
+ return base64Encode(result);
32
+ }
33
+
34
+ /**
35
+ * Decrypts Base64-encoded AES-256-CBC data with OpenSSL-compatible format.
36
+ *
37
+ * @param {string} enc - Base64 encoded input
38
+ * @param {string|Uint8Array} passphrase - Password
39
+ * @returns {Promise<Uint8Array>} - Decrypted plaintext
40
+ */
41
+ export async function decryptLegacy(enc, passphrase) {
42
+ const ct = base64Decode(enc);
43
+ if (String.fromCharCode(...ct.slice(0, 8)) !== 'Salted__') {
44
+ throw new Error('Invalid OpenSSL header');
45
+ }
46
+ const salt = ct.slice(8, 16);
47
+ const { key, iv } = await deriveKeyAndIv(passphrase, salt);
48
+
49
+ return new Uint8Array(await crypto.subtle.decrypt(
50
+ { name: 'AES-CBC', iv },
51
+ key,
52
+ ct.slice(16)
53
+ ));
54
+ }
55
+
56
+ /**
57
+ * Derives key and IV using OpenSSL EVP_BytesToKey-style KDF (MD5).
58
+ *
59
+ * @param {string|Uint8Array} password
60
+ * @param {Uint8Array} salt
61
+ * @returns {Promise<{key: CryptoKey, iv: Uint8Array}>}
62
+ */
63
+ async function deriveKeyAndIv(password, salt) {
64
+ password = toBytes(password);
65
+ let d = new Uint8Array(0);
66
+ let prev = new Uint8Array(0);
67
+
68
+ while (d.length < KEY_LEN + IV_LEN) {
69
+ const data = concatUint8Arrays(prev, password, salt);
70
+ prev = computeMd5(data);
71
+ d = concatUint8Arrays(d, prev);
72
+ }
73
+
74
+ const keyBytes = d.slice(0, KEY_LEN);
75
+ const iv = d.slice(KEY_LEN, KEY_LEN + IV_LEN);
76
+ const key = await crypto.subtle.importKey('raw', keyBytes, 'AES-CBC', false, ['encrypt', 'decrypt']);
77
+
78
+ return { key, iv };
79
+ }
80
+
81
+ /**
82
+ * Computes MD5 hash.
83
+ *
84
+ * @param {Uint8Array} data
85
+ * @returns {Uint8Array}
86
+ */
87
+ function computeMd5(data) {
88
+ // Если data — Uint8Array, преобразуем в строку или Buffer
89
+ const input = data instanceof Uint8Array ? Buffer.from(data) : data;
90
+ const hash = md5(input); // Вычисляем MD5
91
+ return new Uint8Array(Buffer.from(hash, 'hex')); // Возвращаем Uint8Array
92
+ }
93
+
94
+ /**
95
+ * Concatenates multiple Uint8Arrays.
96
+ *
97
+ * @param {...Uint8Array} arrays
98
+ * @returns {Uint8Array}
99
+ */
100
+ function concatUint8Arrays(...arrays) {
101
+ const totalLen = arrays.reduce((acc, val) => acc + val.length, 0);
102
+ const result = new Uint8Array(totalLen);
103
+ let offset = 0;
104
+ for (const arr of arrays) {
105
+ result.set(arr, offset);
106
+ offset += arr.length;
107
+ }
108
+ return result;
109
+ }