// ==UserScript== // @name campus_v2 // @namespace npm/vite-plugin-monkey // @version 2023-12-28_1 // @author cmsang // @description LTDX网课助手 // @icon https://vitejs.dev/logo.svg // @match *://m.campus.chinaunicom.cn/curriculum.html* // @require https://cdn.bootcdn.net/ajax/libs/react/18.2.0/umd/react.production.min.js // @require https://cdn.bootcdn.net/ajax/libs/react-dom/18.2.0/umd/react-dom.production.min.js // @downloadURL none // ==/UserScript== (function (require$$0$1, require$$0$2) { 'use strict'; var commonjsGlobal = typeof globalThis !== "undefined" ? globalThis : typeof window !== "undefined" ? window : typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : {}; function getAugmentedNamespace(n2) { if (n2.__esModule) return n2; var f2 = n2.default; if (typeof f2 == "function") { var a = function a2() { if (this instanceof a2) { return Reflect.construct(f2, arguments, this.constructor); } return f2.apply(this, arguments); }; a.prototype = f2.prototype; } else a = {}; Object.defineProperty(a, "__esModule", { value: true }); Object.keys(n2).forEach(function(k2) { var d = Object.getOwnPropertyDescriptor(n2, k2); Object.defineProperty(a, k2, d.get ? d : { enumerable: true, get: function() { return n2[k2]; } }); }); return a; } var jsxRuntime = { exports: {} }; var reactJsxRuntime_production_min = {}; /** * @license React * react-jsx-runtime.production.min.js * * Copyright (c) Facebook, Inc. and its affiliates. * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. */ var f = require$$0$1, k = Symbol.for("react.element"), l = Symbol.for("react.fragment"), m$1 = Object.prototype.hasOwnProperty, n = f.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactCurrentOwner, p = { key: true, ref: true, __self: true, __source: true }; function q(c, a, g) { var b, d = {}, e = null, h = null; void 0 !== g && (e = "" + g); void 0 !== a.key && (e = "" + a.key); void 0 !== a.ref && (h = a.ref); for (b in a) m$1.call(a, b) && !p.hasOwnProperty(b) && (d[b] = a[b]); if (c && c.defaultProps) for (b in a = c.defaultProps, a) void 0 === d[b] && (d[b] = a[b]); return { $$typeof: k, type: c, key: e, ref: h, props: d, _owner: n.current }; } reactJsxRuntime_production_min.Fragment = l; reactJsxRuntime_production_min.jsx = q; reactJsxRuntime_production_min.jsxs = q; { jsxRuntime.exports = reactJsxRuntime_production_min; } var jsxRuntimeExports = jsxRuntime.exports; var client = {}; var m = require$$0$2; { client.createRoot = m.createRoot; client.hydrateRoot = m.hydrateRoot; } function bind(fn, thisArg) { return function wrap() { return fn.apply(thisArg, arguments); }; } const { toString } = Object.prototype; const { getPrototypeOf } = Object; const kindOf = ((cache) => (thing) => { const str = toString.call(thing); return cache[str] || (cache[str] = str.slice(8, -1).toLowerCase()); })(/* @__PURE__ */ Object.create(null)); const kindOfTest = (type) => { type = type.toLowerCase(); return (thing) => kindOf(thing) === type; }; const typeOfTest = (type) => (thing) => typeof thing === type; const { isArray } = Array; const isUndefined = typeOfTest("undefined"); function isBuffer(val) { return val !== null && !isUndefined(val) && val.constructor !== null && !isUndefined(val.constructor) && isFunction(val.constructor.isBuffer) && val.constructor.isBuffer(val); } const isArrayBuffer = kindOfTest("ArrayBuffer"); function isArrayBufferView(val) { let result; if (typeof ArrayBuffer !== "undefined" && ArrayBuffer.isView) { result = ArrayBuffer.isView(val); } else { result = val && val.buffer && isArrayBuffer(val.buffer); } return result; } const isString = typeOfTest("string"); const isFunction = typeOfTest("function"); const isNumber = typeOfTest("number"); const isObject = (thing) => thing !== null && typeof thing === "object"; const isBoolean = (thing) => thing === true || thing === false; const isPlainObject = (val) => { if (kindOf(val) !== "object") { return false; } const prototype2 = getPrototypeOf(val); return (prototype2 === null || prototype2 === Object.prototype || Object.getPrototypeOf(prototype2) === null) && !(Symbol.toStringTag in val) && !(Symbol.iterator in val); }; const isDate = kindOfTest("Date"); const isFile = kindOfTest("File"); const isBlob = kindOfTest("Blob"); const isFileList = kindOfTest("FileList"); const isStream = (val) => isObject(val) && isFunction(val.pipe); const isFormData = (thing) => { let kind; return thing && (typeof FormData === "function" && thing instanceof FormData || isFunction(thing.append) && ((kind = kindOf(thing)) === "formdata" || // detect form-data instance kind === "object" && isFunction(thing.toString) && thing.toString() === "[object FormData]")); }; const isURLSearchParams = kindOfTest("URLSearchParams"); const trim = (str) => str.trim ? str.trim() : str.replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g, ""); function forEach(obj, fn, { allOwnKeys = false } = {}) { if (obj === null || typeof obj === "undefined") { return; } let i; let l2; if (typeof obj !== "object") { obj = [obj]; } if (isArray(obj)) { for (i = 0, l2 = obj.length; i < l2; i++) { fn.call(null, obj[i], i, obj); } } else { const keys = allOwnKeys ? Object.getOwnPropertyNames(obj) : Object.keys(obj); const len = keys.length; let key; for (i = 0; i < len; i++) { key = keys[i]; fn.call(null, obj[key], key, obj); } } } function findKey(obj, key) { key = key.toLowerCase(); const keys = Object.keys(obj); let i = keys.length; let _key; while (i-- > 0) { _key = keys[i]; if (key === _key.toLowerCase()) { return _key; } } return null; } const _global = (() => { if (typeof globalThis !== "undefined") return globalThis; return typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : global; })(); const isContextDefined = (context) => !isUndefined(context) && context !== _global; function merge() { const { caseless } = isContextDefined(this) && this || {}; const result = {}; const assignValue = (val, key) => { const targetKey = caseless && findKey(result, key) || key; if (isPlainObject(result[targetKey]) && isPlainObject(val)) { result[targetKey] = merge(result[targetKey], val); } else if (isPlainObject(val)) { result[targetKey] = merge({}, val); } else if (isArray(val)) { result[targetKey] = val.slice(); } else { result[targetKey] = val; } }; for (let i = 0, l2 = arguments.length; i < l2; i++) { arguments[i] && forEach(arguments[i], assignValue); } return result; } const extend = (a, b, thisArg, { allOwnKeys } = {}) => { forEach(b, (val, key) => { if (thisArg && isFunction(val)) { a[key] = bind(val, thisArg); } else { a[key] = val; } }, { allOwnKeys }); return a; }; const stripBOM = (content) => { if (content.charCodeAt(0) === 65279) { content = content.slice(1); } return content; }; const inherits = (constructor, superConstructor, props, descriptors2) => { constructor.prototype = Object.create(superConstructor.prototype, descriptors2); constructor.prototype.constructor = constructor; Object.defineProperty(constructor, "super", { value: superConstructor.prototype }); props && Object.assign(constructor.prototype, props); }; const toFlatObject = (sourceObj, destObj, filter2, propFilter) => { let props; let i; let prop; const merged = {}; destObj = destObj || {}; if (sourceObj == null) return destObj; do { props = Object.getOwnPropertyNames(sourceObj); i = props.length; while (i-- > 0) { prop = props[i]; if ((!propFilter || propFilter(prop, sourceObj, destObj)) && !merged[prop]) { destObj[prop] = sourceObj[prop]; merged[prop] = true; } } sourceObj = filter2 !== false && getPrototypeOf(sourceObj); } while (sourceObj && (!filter2 || filter2(sourceObj, destObj)) && sourceObj !== Object.prototype); return destObj; }; const endsWith = (str, searchString, position) => { str = String(str); if (position === void 0 || position > str.length) { position = str.length; } position -= searchString.length; const lastIndex = str.indexOf(searchString, position); return lastIndex !== -1 && lastIndex === position; }; const toArray = (thing) => { if (!thing) return null; if (isArray(thing)) return thing; let i = thing.length; if (!isNumber(i)) return null; const arr = new Array(i); while (i-- > 0) { arr[i] = thing[i]; } return arr; }; const isTypedArray = ((TypedArray) => { return (thing) => { return TypedArray && thing instanceof TypedArray; }; })(typeof Uint8Array !== "undefined" && getPrototypeOf(Uint8Array)); const forEachEntry = (obj, fn) => { const generator = obj && obj[Symbol.iterator]; const iterator = generator.call(obj); let result; while ((result = iterator.next()) && !result.done) { const pair = result.value; fn.call(obj, pair[0], pair[1]); } }; const matchAll = (regExp, str) => { let matches; const arr = []; while ((matches = regExp.exec(str)) !== null) { arr.push(matches); } return arr; }; const isHTMLForm = kindOfTest("HTMLFormElement"); const toCamelCase = (str) => { return str.toLowerCase().replace( /[-_\s]([a-z\d])(\w*)/g, function replacer(m2, p1, p2) { return p1.toUpperCase() + p2; } ); }; const hasOwnProperty = (({ hasOwnProperty: hasOwnProperty2 }) => (obj, prop) => hasOwnProperty2.call(obj, prop))(Object.prototype); const isRegExp = kindOfTest("RegExp"); const reduceDescriptors = (obj, reducer) => { const descriptors2 = Object.getOwnPropertyDescriptors(obj); const reducedDescriptors = {}; forEach(descriptors2, (descriptor, name) => { let ret; if ((ret = reducer(descriptor, name, obj)) !== false) { reducedDescriptors[name] = ret || descriptor; } }); Object.defineProperties(obj, reducedDescriptors); }; const freezeMethods = (obj) => { reduceDescriptors(obj, (descriptor, name) => { if (isFunction(obj) && ["arguments", "caller", "callee"].indexOf(name) !== -1) { return false; } const value = obj[name]; if (!isFunction(value)) return; descriptor.enumerable = false; if ("writable" in descriptor) { descriptor.writable = false; return; } if (!descriptor.set) { descriptor.set = () => { throw Error("Can not rewrite read-only method '" + name + "'"); }; } }); }; const toObjectSet = (arrayOrString, delimiter) => { const obj = {}; const define = (arr) => { arr.forEach((value) => { obj[value] = true; }); }; isArray(arrayOrString) ? define(arrayOrString) : define(String(arrayOrString).split(delimiter)); return obj; }; const noop = () => { }; const toFiniteNumber = (value, defaultValue) => { value = +value; return Number.isFinite(value) ? value : defaultValue; }; const ALPHA = "abcdefghijklmnopqrstuvwxyz"; const DIGIT = "0123456789"; const ALPHABET = { DIGIT, ALPHA, ALPHA_DIGIT: ALPHA + ALPHA.toUpperCase() + DIGIT }; const generateString = (size = 16, alphabet = ALPHABET.ALPHA_DIGIT) => { let str = ""; const { length } = alphabet; while (size--) { str += alphabet[Math.random() * length | 0]; } return str; }; function isSpecCompliantForm(thing) { return !!(thing && isFunction(thing.append) && thing[Symbol.toStringTag] === "FormData" && thing[Symbol.iterator]); } const toJSONObject = (obj) => { const stack = new Array(10); const visit = (source, i) => { if (isObject(source)) { if (stack.indexOf(source) >= 0) { return; } if (!("toJSON" in source)) { stack[i] = source; const target = isArray(source) ? [] : {}; forEach(source, (value, key) => { const reducedValue = visit(value, i + 1); !isUndefined(reducedValue) && (target[key] = reducedValue); }); stack[i] = void 0; return target; } } return source; }; return visit(obj, 0); }; const isAsyncFn = kindOfTest("AsyncFunction"); const isThenable = (thing) => thing && (isObject(thing) || isFunction(thing)) && isFunction(thing.then) && isFunction(thing.catch); const utils$1 = { isArray, isArrayBuffer, isBuffer, isFormData, isArrayBufferView, isString, isNumber, isBoolean, isObject, isPlainObject, isUndefined, isDate, isFile, isBlob, isRegExp, isFunction, isStream, isURLSearchParams, isTypedArray, isFileList, forEach, merge, extend, trim, stripBOM, inherits, toFlatObject, kindOf, kindOfTest, endsWith, toArray, forEachEntry, matchAll, isHTMLForm, hasOwnProperty, hasOwnProp: hasOwnProperty, // an alias to avoid ESLint no-prototype-builtins detection reduceDescriptors, freezeMethods, toObjectSet, toCamelCase, noop, toFiniteNumber, findKey, global: _global, isContextDefined, ALPHABET, generateString, isSpecCompliantForm, toJSONObject, isAsyncFn, isThenable }; function AxiosError(message, code, config, request, response) { Error.call(this); if (Error.captureStackTrace) { Error.captureStackTrace(this, this.constructor); } else { this.stack = new Error().stack; } this.message = message; this.name = "AxiosError"; code && (this.code = code); config && (this.config = config); request && (this.request = request); response && (this.response = response); } utils$1.inherits(AxiosError, Error, { toJSON: function toJSON() { return { // Standard message: this.message, name: this.name, // Microsoft description: this.description, number: this.number, // Mozilla fileName: this.fileName, lineNumber: this.lineNumber, columnNumber: this.columnNumber, stack: this.stack, // Axios config: utils$1.toJSONObject(this.config), code: this.code, status: this.response && this.response.status ? this.response.status : null }; } }); const prototype$1 = AxiosError.prototype; const descriptors = {}; [ "ERR_BAD_OPTION_VALUE", "ERR_BAD_OPTION", "ECONNABORTED", "ETIMEDOUT", "ERR_NETWORK", "ERR_FR_TOO_MANY_REDIRECTS", "ERR_DEPRECATED", "ERR_BAD_RESPONSE", "ERR_BAD_REQUEST", "ERR_CANCELED", "ERR_NOT_SUPPORT", "ERR_INVALID_URL" // eslint-disable-next-line func-names ].forEach((code) => { descriptors[code] = { value: code }; }); Object.defineProperties(AxiosError, descriptors); Object.defineProperty(prototype$1, "isAxiosError", { value: true }); AxiosError.from = (error, code, config, request, response, customProps) => { const axiosError = Object.create(prototype$1); utils$1.toFlatObject(error, axiosError, function filter2(obj) { return obj !== Error.prototype; }, (prop) => { return prop !== "isAxiosError"; }); AxiosError.call(axiosError, error.message, code, config, request, response); axiosError.cause = error; axiosError.name = error.name; customProps && Object.assign(axiosError, customProps); return axiosError; }; const httpAdapter = null; function isVisitable(thing) { return utils$1.isPlainObject(thing) || utils$1.isArray(thing); } function removeBrackets(key) { return utils$1.endsWith(key, "[]") ? key.slice(0, -2) : key; } function renderKey(path, key, dots) { if (!path) return key; return path.concat(key).map(function each(token, i) { token = removeBrackets(token); return !dots && i ? "[" + token + "]" : token; }).join(dots ? "." : ""); } function isFlatArray(arr) { return utils$1.isArray(arr) && !arr.some(isVisitable); } const predicates = utils$1.toFlatObject(utils$1, {}, null, function filter(prop) { return /^is[A-Z]/.test(prop); }); function toFormData(obj, formData, options) { if (!utils$1.isObject(obj)) { throw new TypeError("target must be an object"); } formData = formData || new FormData(); options = utils$1.toFlatObject(options, { metaTokens: true, dots: false, indexes: false }, false, function defined(option, source) { return !utils$1.isUndefined(source[option]); }); const metaTokens = options.metaTokens; const visitor = options.visitor || defaultVisitor; const dots = options.dots; const indexes = options.indexes; const _Blob = options.Blob || typeof Blob !== "undefined" && Blob; const useBlob = _Blob && utils$1.isSpecCompliantForm(formData); if (!utils$1.isFunction(visitor)) { throw new TypeError("visitor must be a function"); } function convertValue(value) { if (value === null) return ""; if (utils$1.isDate(value)) { return value.toISOString(); } if (!useBlob && utils$1.isBlob(value)) { throw new AxiosError("Blob is not supported. Use a Buffer instead."); } if (utils$1.isArrayBuffer(value) || utils$1.isTypedArray(value)) { return useBlob && typeof Blob === "function" ? new Blob([value]) : Buffer.from(value); } return value; } function defaultVisitor(value, key, path) { let arr = value; if (value && !path && typeof value === "object") { if (utils$1.endsWith(key, "{}")) { key = metaTokens ? key : key.slice(0, -2); value = JSON.stringify(value); } else if (utils$1.isArray(value) && isFlatArray(value) || (utils$1.isFileList(value) || utils$1.endsWith(key, "[]")) && (arr = utils$1.toArray(value))) { key = removeBrackets(key); arr.forEach(function each(el, index) { !(utils$1.isUndefined(el) || el === null) && formData.append( // eslint-disable-next-line no-nested-ternary indexes === true ? renderKey([key], index, dots) : indexes === null ? key : key + "[]", convertValue(el) ); }); return false; } } if (isVisitable(value)) { return true; } formData.append(renderKey(path, key, dots), convertValue(value)); return false; } const stack = []; const exposedHelpers = Object.assign(predicates, { defaultVisitor, convertValue, isVisitable }); function build(value, path) { if (utils$1.isUndefined(value)) return; if (stack.indexOf(value) !== -1) { throw Error("Circular reference detected in " + path.join(".")); } stack.push(value); utils$1.forEach(value, function each(el, key) { const result = !(utils$1.isUndefined(el) || el === null) && visitor.call( formData, el, utils$1.isString(key) ? key.trim() : key, path, exposedHelpers ); if (result === true) { build(el, path ? path.concat(key) : [key]); } }); stack.pop(); } if (!utils$1.isObject(obj)) { throw new TypeError("data must be an object"); } build(obj); return formData; } function encode$1(str) { const charMap = { "!": "%21", "'": "%27", "(": "%28", ")": "%29", "~": "%7E", "%20": "+", "%00": "\0" }; return encodeURIComponent(str).replace(/[!'()~]|%20|%00/g, function replacer(match) { return charMap[match]; }); } function AxiosURLSearchParams(params, options) { this._pairs = []; params && toFormData(params, this, options); } const prototype = AxiosURLSearchParams.prototype; prototype.append = function append(name, value) { this._pairs.push([name, value]); }; prototype.toString = function toString2(encoder) { const _encode = encoder ? function(value) { return encoder.call(this, value, encode$1); } : encode$1; return this._pairs.map(function each(pair) { return _encode(pair[0]) + "=" + _encode(pair[1]); }, "").join("&"); }; function encode(val) { return encodeURIComponent(val).replace(/%3A/gi, ":").replace(/%24/g, "$").replace(/%2C/gi, ",").replace(/%20/g, "+").replace(/%5B/gi, "[").replace(/%5D/gi, "]"); } function buildURL(url, params, options) { if (!params) { return url; } const _encode = options && options.encode || encode; const serializeFn = options && options.serialize; let serializedParams; if (serializeFn) { serializedParams = serializeFn(params, options); } else { serializedParams = utils$1.isURLSearchParams(params) ? params.toString() : new AxiosURLSearchParams(params, options).toString(_encode); } if (serializedParams) { const hashmarkIndex = url.indexOf("#"); if (hashmarkIndex !== -1) { url = url.slice(0, hashmarkIndex); } url += (url.indexOf("?") === -1 ? "?" : "&") + serializedParams; } return url; } class InterceptorManager { constructor() { this.handlers = []; } /** * Add a new interceptor to the stack * * @param {Function} fulfilled The function to handle `then` for a `Promise` * @param {Function} rejected The function to handle `reject` for a `Promise` * * @return {Number} An ID used to remove interceptor later */ use(fulfilled, rejected, options) { this.handlers.push({ fulfilled, rejected, synchronous: options ? options.synchronous : false, runWhen: options ? options.runWhen : null }); return this.handlers.length - 1; } /** * Remove an interceptor from the stack * * @param {Number} id The ID that was returned by `use` * * @returns {Boolean} `true` if the interceptor was removed, `false` otherwise */ eject(id) { if (this.handlers[id]) { this.handlers[id] = null; } } /** * Clear all interceptors from the stack * * @returns {void} */ clear() { if (this.handlers) { this.handlers = []; } } /** * Iterate over all the registered interceptors * * This method is particularly useful for skipping over any * interceptors that may have become `null` calling `eject`. * * @param {Function} fn The function to call for each interceptor * * @returns {void} */ forEach(fn) { utils$1.forEach(this.handlers, function forEachHandler(h) { if (h !== null) { fn(h); } }); } } const InterceptorManager$1 = InterceptorManager; const transitionalDefaults = { silentJSONParsing: true, forcedJSONParsing: true, clarifyTimeoutError: false }; const URLSearchParams$1 = typeof URLSearchParams !== "undefined" ? URLSearchParams : AxiosURLSearchParams; const FormData$1 = typeof FormData !== "undefined" ? FormData : null; const Blob$1 = typeof Blob !== "undefined" ? Blob : null; const platform$1 = { isBrowser: true, classes: { URLSearchParams: URLSearchParams$1, FormData: FormData$1, Blob: Blob$1 }, protocols: ["http", "https", "file", "blob", "url", "data"] }; const hasBrowserEnv = typeof window !== "undefined" && typeof document !== "undefined"; const hasStandardBrowserEnv = ((product) => { return hasBrowserEnv && ["ReactNative", "NativeScript", "NS"].indexOf(product) < 0; })(typeof navigator !== "undefined" && navigator.product); const hasStandardBrowserWebWorkerEnv = (() => { return typeof WorkerGlobalScope !== "undefined" && // eslint-disable-next-line no-undef self instanceof WorkerGlobalScope && typeof self.importScripts === "function"; })(); const utils = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ __proto__: null, hasBrowserEnv, hasStandardBrowserEnv, hasStandardBrowserWebWorkerEnv }, Symbol.toStringTag, { value: "Module" })); const platform = { ...utils, ...platform$1 }; function toURLEncodedForm(data, options) { return toFormData(data, new platform.classes.URLSearchParams(), Object.assign({ visitor: function(value, key, path, helpers) { if (platform.isNode && utils$1.isBuffer(value)) { this.append(key, value.toString("base64")); return false; } return helpers.defaultVisitor.apply(this, arguments); } }, options)); } function parsePropPath(name) { return utils$1.matchAll(/\w+|\[(\w*)]/g, name).map((match) => { return match[0] === "[]" ? "" : match[1] || match[0]; }); } function arrayToObject(arr) { const obj = {}; const keys = Object.keys(arr); let i; const len = keys.length; let key; for (i = 0; i < len; i++) { key = keys[i]; obj[key] = arr[key]; } return obj; } function formDataToJSON(formData) { function buildPath(path, value, target, index) { let name = path[index++]; const isNumericKey = Number.isFinite(+name); const isLast = index >= path.length; name = !name && utils$1.isArray(target) ? target.length : name; if (isLast) { if (utils$1.hasOwnProp(target, name)) { target[name] = [target[name], value]; } else { target[name] = value; } return !isNumericKey; } if (!target[name] || !utils$1.isObject(target[name])) { target[name] = []; } const result = buildPath(path, value, target[name], index); if (result && utils$1.isArray(target[name])) { target[name] = arrayToObject(target[name]); } return !isNumericKey; } if (utils$1.isFormData(formData) && utils$1.isFunction(formData.entries)) { const obj = {}; utils$1.forEachEntry(formData, (name, value) => { buildPath(parsePropPath(name), value, obj, 0); }); return obj; } return null; } function stringifySafely(rawValue, parser, encoder) { if (utils$1.isString(rawValue)) { try { (parser || JSON.parse)(rawValue); return utils$1.trim(rawValue); } catch (e) { if (e.name !== "SyntaxError") { throw e; } } } return (encoder || JSON.stringify)(rawValue); } const defaults = { transitional: transitionalDefaults, adapter: ["xhr", "http"], transformRequest: [function transformRequest(data, headers) { const contentType = headers.getContentType() || ""; const hasJSONContentType = contentType.indexOf("application/json") > -1; const isObjectPayload = utils$1.isObject(data); if (isObjectPayload && utils$1.isHTMLForm(data)) { data = new FormData(data); } const isFormData2 = utils$1.isFormData(data); if (isFormData2) { if (!hasJSONContentType) { return data; } return hasJSONContentType ? JSON.stringify(formDataToJSON(data)) : data; } if (utils$1.isArrayBuffer(data) || utils$1.isBuffer(data) || utils$1.isStream(data) || utils$1.isFile(data) || utils$1.isBlob(data)) { return data; } if (utils$1.isArrayBufferView(data)) { return data.buffer; } if (utils$1.isURLSearchParams(data)) { headers.setContentType("application/x-www-form-urlencoded;charset=utf-8", false); return data.toString(); } let isFileList2; if (isObjectPayload) { if (contentType.indexOf("application/x-www-form-urlencoded") > -1) { return toURLEncodedForm(data, this.formSerializer).toString(); } if ((isFileList2 = utils$1.isFileList(data)) || contentType.indexOf("multipart/form-data") > -1) { const _FormData = this.env && this.env.FormData; return toFormData( isFileList2 ? { "files[]": data } : data, _FormData && new _FormData(), this.formSerializer ); } } if (isObjectPayload || hasJSONContentType) { headers.setContentType("application/json", false); return stringifySafely(data); } return data; }], transformResponse: [function transformResponse(data) { const transitional2 = this.transitional || defaults.transitional; const forcedJSONParsing = transitional2 && transitional2.forcedJSONParsing; const JSONRequested = this.responseType === "json"; if (data && utils$1.isString(data) && (forcedJSONParsing && !this.responseType || JSONRequested)) { const silentJSONParsing = transitional2 && transitional2.silentJSONParsing; const strictJSONParsing = !silentJSONParsing && JSONRequested; try { return JSON.parse(data); } catch (e) { if (strictJSONParsing) { if (e.name === "SyntaxError") { throw AxiosError.from(e, AxiosError.ERR_BAD_RESPONSE, this, null, this.response); } throw e; } } } return data; }], /** * A timeout in milliseconds to abort a request. If set to 0 (default) a * timeout is not created. */ timeout: 0, xsrfCookieName: "XSRF-TOKEN", xsrfHeaderName: "X-XSRF-TOKEN", maxContentLength: -1, maxBodyLength: -1, env: { FormData: platform.classes.FormData, Blob: platform.classes.Blob }, validateStatus: function validateStatus(status) { return status >= 200 && status < 300; }, headers: { common: { "Accept": "application/json, text/plain, */*", "Content-Type": void 0 } } }; utils$1.forEach(["delete", "get", "head", "post", "put", "patch"], (method) => { defaults.headers[method] = {}; }); const defaults$1 = defaults; const ignoreDuplicateOf = utils$1.toObjectSet([ "age", "authorization", "content-length", "content-type", "etag", "expires", "from", "host", "if-modified-since", "if-unmodified-since", "last-modified", "location", "max-forwards", "proxy-authorization", "referer", "retry-after", "user-agent" ]); const parseHeaders = (rawHeaders) => { const parsed = {}; let key; let val; let i; rawHeaders && rawHeaders.split("\n").forEach(function parser(line) { i = line.indexOf(":"); key = line.substring(0, i).trim().toLowerCase(); val = line.substring(i + 1).trim(); if (!key || parsed[key] && ignoreDuplicateOf[key]) { return; } if (key === "set-cookie") { if (parsed[key]) { parsed[key].push(val); } else { parsed[key] = [val]; } } else { parsed[key] = parsed[key] ? parsed[key] + ", " + val : val; } }); return parsed; }; const $internals = Symbol("internals"); function normalizeHeader(header) { return header && String(header).trim().toLowerCase(); } function normalizeValue(value) { if (value === false || value == null) { return value; } return utils$1.isArray(value) ? value.map(normalizeValue) : String(value); } function parseTokens(str) { const tokens = /* @__PURE__ */ Object.create(null); const tokensRE = /([^\s,;=]+)\s*(?:=\s*([^,;]+))?/g; let match; while (match = tokensRE.exec(str)) { tokens[match[1]] = match[2]; } return tokens; } const isValidHeaderName = (str) => /^[-_a-zA-Z0-9^`|~,!#$%&'*+.]+$/.test(str.trim()); function matchHeaderValue(context, value, header, filter2, isHeaderNameFilter) { if (utils$1.isFunction(filter2)) { return filter2.call(this, value, header); } if (isHeaderNameFilter) { value = header; } if (!utils$1.isString(value)) return; if (utils$1.isString(filter2)) { return value.indexOf(filter2) !== -1; } if (utils$1.isRegExp(filter2)) { return filter2.test(value); } } function formatHeader(header) { return header.trim().toLowerCase().replace(/([a-z\d])(\w*)/g, (w, char, str) => { return char.toUpperCase() + str; }); } function buildAccessors(obj, header) { const accessorName = utils$1.toCamelCase(" " + header); ["get", "set", "has"].forEach((methodName) => { Object.defineProperty(obj, methodName + accessorName, { value: function(arg1, arg2, arg3) { return this[methodName].call(this, header, arg1, arg2, arg3); }, configurable: true }); }); } class AxiosHeaders { constructor(headers) { headers && this.set(headers); } set(header, valueOrRewrite, rewrite) { const self2 = this; function setHeader(_value, _header, _rewrite) { const lHeader = normalizeHeader(_header); if (!lHeader) { throw new Error("header name must be a non-empty string"); } const key = utils$1.findKey(self2, lHeader); if (!key || self2[key] === void 0 || _rewrite === true || _rewrite === void 0 && self2[key] !== false) { self2[key || _header] = normalizeValue(_value); } } const setHeaders = (headers, _rewrite) => utils$1.forEach(headers, (_value, _header) => setHeader(_value, _header, _rewrite)); if (utils$1.isPlainObject(header) || header instanceof this.constructor) { setHeaders(header, valueOrRewrite); } else if (utils$1.isString(header) && (header = header.trim()) && !isValidHeaderName(header)) { setHeaders(parseHeaders(header), valueOrRewrite); } else { header != null && setHeader(valueOrRewrite, header, rewrite); } return this; } get(header, parser) { header = normalizeHeader(header); if (header) { const key = utils$1.findKey(this, header); if (key) { const value = this[key]; if (!parser) { return value; } if (parser === true) { return parseTokens(value); } if (utils$1.isFunction(parser)) { return parser.call(this, value, key); } if (utils$1.isRegExp(parser)) { return parser.exec(value); } throw new TypeError("parser must be boolean|regexp|function"); } } } has(header, matcher) { header = normalizeHeader(header); if (header) { const key = utils$1.findKey(this, header); return !!(key && this[key] !== void 0 && (!matcher || matchHeaderValue(this, this[key], key, matcher))); } return false; } delete(header, matcher) { const self2 = this; let deleted = false; function deleteHeader(_header) { _header = normalizeHeader(_header); if (_header) { const key = utils$1.findKey(self2, _header); if (key && (!matcher || matchHeaderValue(self2, self2[key], key, matcher))) { delete self2[key]; deleted = true; } } } if (utils$1.isArray(header)) { header.forEach(deleteHeader); } else { deleteHeader(header); } return deleted; } clear(matcher) { const keys = Object.keys(this); let i = keys.length; let deleted = false; while (i--) { const key = keys[i]; if (!matcher || matchHeaderValue(this, this[key], key, matcher, true)) { delete this[key]; deleted = true; } } return deleted; } normalize(format) { const self2 = this; const headers = {}; utils$1.forEach(this, (value, header) => { const key = utils$1.findKey(headers, header); if (key) { self2[key] = normalizeValue(value); delete self2[header]; return; } const normalized = format ? formatHeader(header) : String(header).trim(); if (normalized !== header) { delete self2[header]; } self2[normalized] = normalizeValue(value); headers[normalized] = true; }); return this; } concat(...targets) { return this.constructor.concat(this, ...targets); } toJSON(asStrings) { const obj = /* @__PURE__ */ Object.create(null); utils$1.forEach(this, (value, header) => { value != null && value !== false && (obj[header] = asStrings && utils$1.isArray(value) ? value.join(", ") : value); }); return obj; } [Symbol.iterator]() { return Object.entries(this.toJSON())[Symbol.iterator](); } toString() { return Object.entries(this.toJSON()).map(([header, value]) => header + ": " + value).join("\n"); } get [Symbol.toStringTag]() { return "AxiosHeaders"; } static from(thing) { return thing instanceof this ? thing : new this(thing); } static concat(first, ...targets) { const computed = new this(first); targets.forEach((target) => computed.set(target)); return computed; } static accessor(header) { const internals = this[$internals] = this[$internals] = { accessors: {} }; const accessors = internals.accessors; const prototype2 = this.prototype; function defineAccessor(_header) { const lHeader = normalizeHeader(_header); if (!accessors[lHeader]) { buildAccessors(prototype2, _header); accessors[lHeader] = true; } } utils$1.isArray(header) ? header.forEach(defineAccessor) : defineAccessor(header); return this; } } AxiosHeaders.accessor(["Content-Type", "Content-Length", "Accept", "Accept-Encoding", "User-Agent", "Authorization"]); utils$1.reduceDescriptors(AxiosHeaders.prototype, ({ value }, key) => { let mapped = key[0].toUpperCase() + key.slice(1); return { get: () => value, set(headerValue) { this[mapped] = headerValue; } }; }); utils$1.freezeMethods(AxiosHeaders); const AxiosHeaders$1 = AxiosHeaders; function transformData(fns, response) { const config = this || defaults$1; const context = response || config; const headers = AxiosHeaders$1.from(context.headers); let data = context.data; utils$1.forEach(fns, function transform(fn) { data = fn.call(config, data, headers.normalize(), response ? response.status : void 0); }); headers.normalize(); return data; } function isCancel(value) { return !!(value && value.__CANCEL__); } function CanceledError(message, config, request) { AxiosError.call(this, message == null ? "canceled" : message, AxiosError.ERR_CANCELED, config, request); this.name = "CanceledError"; } utils$1.inherits(CanceledError, AxiosError, { __CANCEL__: true }); function settle(resolve, reject, response) { const validateStatus2 = response.config.validateStatus; if (!response.status || !validateStatus2 || validateStatus2(response.status)) { resolve(response); } else { reject(new AxiosError( "Request failed with status code " + response.status, [AxiosError.ERR_BAD_REQUEST, AxiosError.ERR_BAD_RESPONSE][Math.floor(response.status / 100) - 4], response.config, response.request, response )); } } const cookies = platform.hasStandardBrowserEnv ? ( // Standard browser envs support document.cookie { write(name, value, expires, path, domain, secure) { const cookie = [name + "=" + encodeURIComponent(value)]; utils$1.isNumber(expires) && cookie.push("expires=" + new Date(expires).toGMTString()); utils$1.isString(path) && cookie.push("path=" + path); utils$1.isString(domain) && cookie.push("domain=" + domain); secure === true && cookie.push("secure"); document.cookie = cookie.join("; "); }, read(name) { const match = document.cookie.match(new RegExp("(^|;\\s*)(" + name + ")=([^;]*)")); return match ? decodeURIComponent(match[3]) : null; }, remove(name) { this.write(name, "", Date.now() - 864e5); } } ) : ( // Non-standard browser env (web workers, react-native) lack needed support. { write() { }, read() { return null; }, remove() { } } ); function isAbsoluteURL(url) { return /^([a-z][a-z\d+\-.]*:)?\/\//i.test(url); } function combineURLs(baseURL, relativeURL) { return relativeURL ? baseURL.replace(/\/?\/$/, "") + "/" + relativeURL.replace(/^\/+/, "") : baseURL; } function buildFullPath(baseURL, requestedURL) { if (baseURL && !isAbsoluteURL(requestedURL)) { return combineURLs(baseURL, requestedURL); } return requestedURL; } const isURLSameOrigin = platform.hasStandardBrowserEnv ? ( // Standard browser envs have full support of the APIs needed to test // whether the request URL is of the same origin as current location. function standardBrowserEnv() { const msie = /(msie|trident)/i.test(navigator.userAgent); const urlParsingNode = document.createElement("a"); let originURL; function resolveURL(url) { let href = url; if (msie) { urlParsingNode.setAttribute("href", href); href = urlParsingNode.href; } urlParsingNode.setAttribute("href", href); return { href: urlParsingNode.href, protocol: urlParsingNode.protocol ? urlParsingNode.protocol.replace(/:$/, "") : "", host: urlParsingNode.host, search: urlParsingNode.search ? urlParsingNode.search.replace(/^\?/, "") : "", hash: urlParsingNode.hash ? urlParsingNode.hash.replace(/^#/, "") : "", hostname: urlParsingNode.hostname, port: urlParsingNode.port, pathname: urlParsingNode.pathname.charAt(0) === "/" ? urlParsingNode.pathname : "/" + urlParsingNode.pathname }; } originURL = resolveURL(window.location.href); return function isURLSameOrigin2(requestURL) { const parsed = utils$1.isString(requestURL) ? resolveURL(requestURL) : requestURL; return parsed.protocol === originURL.protocol && parsed.host === originURL.host; }; }() ) : ( // Non standard browser envs (web workers, react-native) lack needed support. function nonStandardBrowserEnv() { return function isURLSameOrigin2() { return true; }; }() ); function parseProtocol(url) { const match = /^([-+\w]{1,25})(:?\/\/|:)/.exec(url); return match && match[1] || ""; } function speedometer(samplesCount, min) { samplesCount = samplesCount || 10; const bytes = new Array(samplesCount); const timestamps = new Array(samplesCount); let head = 0; let tail = 0; let firstSampleTS; min = min !== void 0 ? min : 1e3; return function push(chunkLength) { const now = Date.now(); const startedAt = timestamps[tail]; if (!firstSampleTS) { firstSampleTS = now; } bytes[head] = chunkLength; timestamps[head] = now; let i = tail; let bytesCount = 0; while (i !== head) { bytesCount += bytes[i++]; i = i % samplesCount; } head = (head + 1) % samplesCount; if (head === tail) { tail = (tail + 1) % samplesCount; } if (now - firstSampleTS < min) { return; } const passed = startedAt && now - startedAt; return passed ? Math.round(bytesCount * 1e3 / passed) : void 0; }; } function progressEventReducer(listener, isDownloadStream) { let bytesNotified = 0; const _speedometer = speedometer(50, 250); return (e) => { const loaded = e.loaded; const total = e.lengthComputable ? e.total : void 0; const progressBytes = loaded - bytesNotified; const rate = _speedometer(progressBytes); const inRange = loaded <= total; bytesNotified = loaded; const data = { loaded, total, progress: total ? loaded / total : void 0, bytes: progressBytes, rate: rate ? rate : void 0, estimated: rate && total && inRange ? (total - loaded) / rate : void 0, event: e }; data[isDownloadStream ? "download" : "upload"] = true; listener(data); }; } const isXHRAdapterSupported = typeof XMLHttpRequest !== "undefined"; const xhrAdapter = isXHRAdapterSupported && function(config) { return new Promise(function dispatchXhrRequest(resolve, reject) { let requestData = config.data; const requestHeaders = AxiosHeaders$1.from(config.headers).normalize(); let { responseType, withXSRFToken } = config; let onCanceled; function done() { if (config.cancelToken) { config.cancelToken.unsubscribe(onCanceled); } if (config.signal) { config.signal.removeEventListener("abort", onCanceled); } } let contentType; if (utils$1.isFormData(requestData)) { if (platform.hasStandardBrowserEnv || platform.hasStandardBrowserWebWorkerEnv) { requestHeaders.setContentType(false); } else if ((contentType = requestHeaders.getContentType()) !== false) { const [type, ...tokens] = contentType ? contentType.split(";").map((token) => token.trim()).filter(Boolean) : []; requestHeaders.setContentType([type || "multipart/form-data", ...tokens].join("; ")); } } let request = new XMLHttpRequest(); if (config.auth) { const username = config.auth.username || ""; const password = config.auth.password ? unescape(encodeURIComponent(config.auth.password)) : ""; requestHeaders.set("Authorization", "Basic " + btoa(username + ":" + password)); } const fullPath = buildFullPath(config.baseURL, config.url); request.open(config.method.toUpperCase(), buildURL(fullPath, config.params, config.paramsSerializer), true); request.timeout = config.timeout; function onloadend() { if (!request) { return; } const responseHeaders = AxiosHeaders$1.from( "getAllResponseHeaders" in request && request.getAllResponseHeaders() ); const responseData = !responseType || responseType === "text" || responseType === "json" ? request.responseText : request.response; const response = { data: responseData, status: request.status, statusText: request.statusText, headers: responseHeaders, config, request }; settle(function _resolve(value) { resolve(value); done(); }, function _reject(err) { reject(err); done(); }, response); request = null; } if ("onloadend" in request) { request.onloadend = onloadend; } else { request.onreadystatechange = function handleLoad() { if (!request || request.readyState !== 4) { return; } if (request.status === 0 && !(request.responseURL && request.responseURL.indexOf("file:") === 0)) { return; } setTimeout(onloadend); }; } request.onabort = function handleAbort() { if (!request) { return; } reject(new AxiosError("Request aborted", AxiosError.ECONNABORTED, config, request)); request = null; }; request.onerror = function handleError() { reject(new AxiosError("Network Error", AxiosError.ERR_NETWORK, config, request)); request = null; }; request.ontimeout = function handleTimeout() { let timeoutErrorMessage = config.timeout ? "timeout of " + config.timeout + "ms exceeded" : "timeout exceeded"; const transitional2 = config.transitional || transitionalDefaults; if (config.timeoutErrorMessage) { timeoutErrorMessage = config.timeoutErrorMessage; } reject(new AxiosError( timeoutErrorMessage, transitional2.clarifyTimeoutError ? AxiosError.ETIMEDOUT : AxiosError.ECONNABORTED, config, request )); request = null; }; if (platform.hasStandardBrowserEnv) { withXSRFToken && utils$1.isFunction(withXSRFToken) && (withXSRFToken = withXSRFToken(config)); if (withXSRFToken || withXSRFToken !== false && isURLSameOrigin(fullPath)) { const xsrfValue = config.xsrfHeaderName && config.xsrfCookieName && cookies.read(config.xsrfCookieName); if (xsrfValue) { requestHeaders.set(config.xsrfHeaderName, xsrfValue); } } } requestData === void 0 && requestHeaders.setContentType(null); if ("setRequestHeader" in request) { utils$1.forEach(requestHeaders.toJSON(), function setRequestHeader(val, key) { request.setRequestHeader(key, val); }); } if (!utils$1.isUndefined(config.withCredentials)) { request.withCredentials = !!config.withCredentials; } if (responseType && responseType !== "json") { request.responseType = config.responseType; } if (typeof config.onDownloadProgress === "function") { request.addEventListener("progress", progressEventReducer(config.onDownloadProgress, true)); } if (typeof config.onUploadProgress === "function" && request.upload) { request.upload.addEventListener("progress", progressEventReducer(config.onUploadProgress)); } if (config.cancelToken || config.signal) { onCanceled = (cancel) => { if (!request) { return; } reject(!cancel || cancel.type ? new CanceledError(null, config, request) : cancel); request.abort(); request = null; }; config.cancelToken && config.cancelToken.subscribe(onCanceled); if (config.signal) { config.signal.aborted ? onCanceled() : config.signal.addEventListener("abort", onCanceled); } } const protocol = parseProtocol(fullPath); if (protocol && platform.protocols.indexOf(protocol) === -1) { reject(new AxiosError("Unsupported protocol " + protocol + ":", AxiosError.ERR_BAD_REQUEST, config)); return; } request.send(requestData || null); }); }; const knownAdapters = { http: httpAdapter, xhr: xhrAdapter }; utils$1.forEach(knownAdapters, (fn, value) => { if (fn) { try { Object.defineProperty(fn, "name", { value }); } catch (e) { } Object.defineProperty(fn, "adapterName", { value }); } }); const renderReason = (reason) => `- ${reason}`; const isResolvedHandle = (adapter) => utils$1.isFunction(adapter) || adapter === null || adapter === false; const adapters = { getAdapter: (adapters2) => { adapters2 = utils$1.isArray(adapters2) ? adapters2 : [adapters2]; const { length } = adapters2; let nameOrAdapter; let adapter; const rejectedReasons = {}; for (let i = 0; i < length; i++) { nameOrAdapter = adapters2[i]; let id; adapter = nameOrAdapter; if (!isResolvedHandle(nameOrAdapter)) { adapter = knownAdapters[(id = String(nameOrAdapter)).toLowerCase()]; if (adapter === void 0) { throw new AxiosError(`Unknown adapter '${id}'`); } } if (adapter) { break; } rejectedReasons[id || "#" + i] = adapter; } if (!adapter) { const reasons = Object.entries(rejectedReasons).map( ([id, state]) => `adapter ${id} ` + (state === false ? "is not supported by the environment" : "is not available in the build") ); let s = length ? reasons.length > 1 ? "since :\n" + reasons.map(renderReason).join("\n") : " " + renderReason(reasons[0]) : "as no adapter specified"; throw new AxiosError( `There is no suitable adapter to dispatch the request ` + s, "ERR_NOT_SUPPORT" ); } return adapter; }, adapters: knownAdapters }; function throwIfCancellationRequested(config) { if (config.cancelToken) { config.cancelToken.throwIfRequested(); } if (config.signal && config.signal.aborted) { throw new CanceledError(null, config); } } function dispatchRequest(config) { throwIfCancellationRequested(config); config.headers = AxiosHeaders$1.from(config.headers); config.data = transformData.call( config, config.transformRequest ); if (["post", "put", "patch"].indexOf(config.method) !== -1) { config.headers.setContentType("application/x-www-form-urlencoded", false); } const adapter = adapters.getAdapter(config.adapter || defaults$1.adapter); return adapter(config).then(function onAdapterResolution(response) { throwIfCancellationRequested(config); response.data = transformData.call( config, config.transformResponse, response ); response.headers = AxiosHeaders$1.from(response.headers); return response; }, function onAdapterRejection(reason) { if (!isCancel(reason)) { throwIfCancellationRequested(config); if (reason && reason.response) { reason.response.data = transformData.call( config, config.transformResponse, reason.response ); reason.response.headers = AxiosHeaders$1.from(reason.response.headers); } } return Promise.reject(reason); }); } const headersToObject = (thing) => thing instanceof AxiosHeaders$1 ? thing.toJSON() : thing; function mergeConfig(config1, config2) { config2 = config2 || {}; const config = {}; function getMergedValue(target, source, caseless) { if (utils$1.isPlainObject(target) && utils$1.isPlainObject(source)) { return utils$1.merge.call({ caseless }, target, source); } else if (utils$1.isPlainObject(source)) { return utils$1.merge({}, source); } else if (utils$1.isArray(source)) { return source.slice(); } return source; } function mergeDeepProperties(a, b, caseless) { if (!utils$1.isUndefined(b)) { return getMergedValue(a, b, caseless); } else if (!utils$1.isUndefined(a)) { return getMergedValue(void 0, a, caseless); } } function valueFromConfig2(a, b) { if (!utils$1.isUndefined(b)) { return getMergedValue(void 0, b); } } function defaultToConfig2(a, b) { if (!utils$1.isUndefined(b)) { return getMergedValue(void 0, b); } else if (!utils$1.isUndefined(a)) { return getMergedValue(void 0, a); } } function mergeDirectKeys(a, b, prop) { if (prop in config2) { return getMergedValue(a, b); } else if (prop in config1) { return getMergedValue(void 0, a); } } const mergeMap = { url: valueFromConfig2, method: valueFromConfig2, data: valueFromConfig2, baseURL: defaultToConfig2, transformRequest: defaultToConfig2, transformResponse: defaultToConfig2, paramsSerializer: defaultToConfig2, timeout: defaultToConfig2, timeoutMessage: defaultToConfig2, withCredentials: defaultToConfig2, withXSRFToken: defaultToConfig2, adapter: defaultToConfig2, responseType: defaultToConfig2, xsrfCookieName: defaultToConfig2, xsrfHeaderName: defaultToConfig2, onUploadProgress: defaultToConfig2, onDownloadProgress: defaultToConfig2, decompress: defaultToConfig2, maxContentLength: defaultToConfig2, maxBodyLength: defaultToConfig2, beforeRedirect: defaultToConfig2, transport: defaultToConfig2, httpAgent: defaultToConfig2, httpsAgent: defaultToConfig2, cancelToken: defaultToConfig2, socketPath: defaultToConfig2, responseEncoding: defaultToConfig2, validateStatus: mergeDirectKeys, headers: (a, b) => mergeDeepProperties(headersToObject(a), headersToObject(b), true) }; utils$1.forEach(Object.keys(Object.assign({}, config1, config2)), function computeConfigValue(prop) { const merge2 = mergeMap[prop] || mergeDeepProperties; const configValue = merge2(config1[prop], config2[prop], prop); utils$1.isUndefined(configValue) && merge2 !== mergeDirectKeys || (config[prop] = configValue); }); return config; } const VERSION = "1.6.3"; const validators$1 = {}; ["object", "boolean", "number", "function", "string", "symbol"].forEach((type, i) => { validators$1[type] = function validator2(thing) { return typeof thing === type || "a" + (i < 1 ? "n " : " ") + type; }; }); const deprecatedWarnings = {}; validators$1.transitional = function transitional(validator2, version2, message) { function formatMessage(opt, desc) { return "[Axios v" + VERSION + "] Transitional option '" + opt + "'" + desc + (message ? ". " + message : ""); } return (value, opt, opts) => { if (validator2 === false) { throw new AxiosError( formatMessage(opt, " has been removed" + (version2 ? " in " + version2 : "")), AxiosError.ERR_DEPRECATED ); } if (version2 && !deprecatedWarnings[opt]) { deprecatedWarnings[opt] = true; console.warn( formatMessage( opt, " has been deprecated since v" + version2 + " and will be removed in the near future" ) ); } return validator2 ? validator2(value, opt, opts) : true; }; }; function assertOptions(options, schema, allowUnknown) { if (typeof options !== "object") { throw new AxiosError("options must be an object", AxiosError.ERR_BAD_OPTION_VALUE); } const keys = Object.keys(options); let i = keys.length; while (i-- > 0) { const opt = keys[i]; const validator2 = schema[opt]; if (validator2) { const value = options[opt]; const result = value === void 0 || validator2(value, opt, options); if (result !== true) { throw new AxiosError("option " + opt + " must be " + result, AxiosError.ERR_BAD_OPTION_VALUE); } continue; } if (allowUnknown !== true) { throw new AxiosError("Unknown option " + opt, AxiosError.ERR_BAD_OPTION); } } } const validator = { assertOptions, validators: validators$1 }; const validators = validator.validators; class Axios { constructor(instanceConfig) { this.defaults = instanceConfig; this.interceptors = { request: new InterceptorManager$1(), response: new InterceptorManager$1() }; } /** * Dispatch a request * * @param {String|Object} configOrUrl The config specific for this request (merged with this.defaults) * @param {?Object} config * * @returns {Promise} The Promise to be fulfilled */ request(configOrUrl, config) { if (typeof configOrUrl === "string") { config = config || {}; config.url = configOrUrl; } else { config = configOrUrl || {}; } config = mergeConfig(this.defaults, config); const { transitional: transitional2, paramsSerializer, headers } = config; if (transitional2 !== void 0) { validator.assertOptions(transitional2, { silentJSONParsing: validators.transitional(validators.boolean), forcedJSONParsing: validators.transitional(validators.boolean), clarifyTimeoutError: validators.transitional(validators.boolean) }, false); } if (paramsSerializer != null) { if (utils$1.isFunction(paramsSerializer)) { config.paramsSerializer = { serialize: paramsSerializer }; } else { validator.assertOptions(paramsSerializer, { encode: validators.function, serialize: validators.function }, true); } } config.method = (config.method || this.defaults.method || "get").toLowerCase(); let contextHeaders = headers && utils$1.merge( headers.common, headers[config.method] ); headers && utils$1.forEach( ["delete", "get", "head", "post", "put", "patch", "common"], (method) => { delete headers[method]; } ); config.headers = AxiosHeaders$1.concat(contextHeaders, headers); const requestInterceptorChain = []; let synchronousRequestInterceptors = true; this.interceptors.request.forEach(function unshiftRequestInterceptors(interceptor) { if (typeof interceptor.runWhen === "function" && interceptor.runWhen(config) === false) { return; } synchronousRequestInterceptors = synchronousRequestInterceptors && interceptor.synchronous; requestInterceptorChain.unshift(interceptor.fulfilled, interceptor.rejected); }); const responseInterceptorChain = []; this.interceptors.response.forEach(function pushResponseInterceptors(interceptor) { responseInterceptorChain.push(interceptor.fulfilled, interceptor.rejected); }); let promise; let i = 0; let len; if (!synchronousRequestInterceptors) { const chain = [dispatchRequest.bind(this), void 0]; chain.unshift.apply(chain, requestInterceptorChain); chain.push.apply(chain, responseInterceptorChain); len = chain.length; promise = Promise.resolve(config); while (i < len) { promise = promise.then(chain[i++], chain[i++]); } return promise; } len = requestInterceptorChain.length; let newConfig = config; i = 0; while (i < len) { const onFulfilled = requestInterceptorChain[i++]; const onRejected = requestInterceptorChain[i++]; try { newConfig = onFulfilled(newConfig); } catch (error) { onRejected.call(this, error); break; } } try { promise = dispatchRequest.call(this, newConfig); } catch (error) { return Promise.reject(error); } i = 0; len = responseInterceptorChain.length; while (i < len) { promise = promise.then(responseInterceptorChain[i++], responseInterceptorChain[i++]); } return promise; } getUri(config) { config = mergeConfig(this.defaults, config); const fullPath = buildFullPath(config.baseURL, config.url); return buildURL(fullPath, config.params, config.paramsSerializer); } } utils$1.forEach(["delete", "get", "head", "options"], function forEachMethodNoData(method) { Axios.prototype[method] = function(url, config) { return this.request(mergeConfig(config || {}, { method, url, data: (config || {}).data })); }; }); utils$1.forEach(["post", "put", "patch"], function forEachMethodWithData(method) { function generateHTTPMethod(isForm) { return function httpMethod(url, data, config) { return this.request(mergeConfig(config || {}, { method, headers: isForm ? { "Content-Type": "multipart/form-data" } : {}, url, data })); }; } Axios.prototype[method] = generateHTTPMethod(); Axios.prototype[method + "Form"] = generateHTTPMethod(true); }); const Axios$1 = Axios; class CancelToken { constructor(executor) { if (typeof executor !== "function") { throw new TypeError("executor must be a function."); } let resolvePromise; this.promise = new Promise(function promiseExecutor(resolve) { resolvePromise = resolve; }); const token = this; this.promise.then((cancel) => { if (!token._listeners) return; let i = token._listeners.length; while (i-- > 0) { token._listeners[i](cancel); } token._listeners = null; }); this.promise.then = (onfulfilled) => { let _resolve; const promise = new Promise((resolve) => { token.subscribe(resolve); _resolve = resolve; }).then(onfulfilled); promise.cancel = function reject() { token.unsubscribe(_resolve); }; return promise; }; executor(function cancel(message, config, request) { if (token.reason) { return; } token.reason = new CanceledError(message, config, request); resolvePromise(token.reason); }); } /** * Throws a `CanceledError` if cancellation has been requested. */ throwIfRequested() { if (this.reason) { throw this.reason; } } /** * Subscribe to the cancel signal */ subscribe(listener) { if (this.reason) { listener(this.reason); return; } if (this._listeners) { this._listeners.push(listener); } else { this._listeners = [listener]; } } /** * Unsubscribe from the cancel signal */ unsubscribe(listener) { if (!this._listeners) { return; } const index = this._listeners.indexOf(listener); if (index !== -1) { this._listeners.splice(index, 1); } } /** * Returns an object that contains a new `CancelToken` and a function that, when called, * cancels the `CancelToken`. */ static source() { let cancel; const token = new CancelToken(function executor(c) { cancel = c; }); return { token, cancel }; } } const CancelToken$1 = CancelToken; function spread(callback) { return function wrap(arr) { return callback.apply(null, arr); }; } function isAxiosError(payload) { return utils$1.isObject(payload) && payload.isAxiosError === true; } const HttpStatusCode = { Continue: 100, SwitchingProtocols: 101, Processing: 102, EarlyHints: 103, Ok: 200, Created: 201, Accepted: 202, NonAuthoritativeInformation: 203, NoContent: 204, ResetContent: 205, PartialContent: 206, MultiStatus: 207, AlreadyReported: 208, ImUsed: 226, MultipleChoices: 300, MovedPermanently: 301, Found: 302, SeeOther: 303, NotModified: 304, UseProxy: 305, Unused: 306, TemporaryRedirect: 307, PermanentRedirect: 308, BadRequest: 400, Unauthorized: 401, PaymentRequired: 402, Forbidden: 403, NotFound: 404, MethodNotAllowed: 405, NotAcceptable: 406, ProxyAuthenticationRequired: 407, RequestTimeout: 408, Conflict: 409, Gone: 410, LengthRequired: 411, PreconditionFailed: 412, PayloadTooLarge: 413, UriTooLong: 414, UnsupportedMediaType: 415, RangeNotSatisfiable: 416, ExpectationFailed: 417, ImATeapot: 418, MisdirectedRequest: 421, UnprocessableEntity: 422, Locked: 423, FailedDependency: 424, TooEarly: 425, UpgradeRequired: 426, PreconditionRequired: 428, TooManyRequests: 429, RequestHeaderFieldsTooLarge: 431, UnavailableForLegalReasons: 451, InternalServerError: 500, NotImplemented: 501, BadGateway: 502, ServiceUnavailable: 503, GatewayTimeout: 504, HttpVersionNotSupported: 505, VariantAlsoNegotiates: 506, InsufficientStorage: 507, LoopDetected: 508, NotExtended: 510, NetworkAuthenticationRequired: 511 }; Object.entries(HttpStatusCode).forEach(([key, value]) => { HttpStatusCode[value] = key; }); const HttpStatusCode$1 = HttpStatusCode; function createInstance(defaultConfig) { const context = new Axios$1(defaultConfig); const instance = bind(Axios$1.prototype.request, context); utils$1.extend(instance, Axios$1.prototype, context, { allOwnKeys: true }); utils$1.extend(instance, context, null, { allOwnKeys: true }); instance.create = function create(instanceConfig) { return createInstance(mergeConfig(defaultConfig, instanceConfig)); }; return instance; } const axios = createInstance(defaults$1); axios.Axios = Axios$1; axios.CanceledError = CanceledError; axios.CancelToken = CancelToken$1; axios.isCancel = isCancel; axios.VERSION = VERSION; axios.toFormData = toFormData; axios.AxiosError = AxiosError; axios.Cancel = axios.CanceledError; axios.all = function all(promises) { return Promise.all(promises); }; axios.spread = spread; axios.isAxiosError = isAxiosError; axios.mergeConfig = mergeConfig; axios.AxiosHeaders = AxiosHeaders$1; axios.formToJSON = (thing) => formDataToJSON(utils$1.isHTMLForm(thing) ? new FormData(thing) : thing); axios.getAdapter = adapters.getAdapter; axios.HttpStatusCode = HttpStatusCode$1; axios.default = axios; const axios$1 = axios; var cryptoJs = { exports: {} }; function commonjsRequire(path) { throw new Error('Could not dynamically require "' + path + '". Please configure the dynamicRequireTargets or/and ignoreDynamicRequires option of @rollup/plugin-commonjs appropriately for this require call to work.'); } var core = { exports: {} }; const __viteBrowserExternal = {}; const __viteBrowserExternal$1 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ __proto__: null, default: __viteBrowserExternal }, Symbol.toStringTag, { value: "Module" })); const require$$0 = /* @__PURE__ */ getAugmentedNamespace(__viteBrowserExternal$1); var hasRequiredCore; function requireCore() { if (hasRequiredCore) return core.exports; hasRequiredCore = 1; (function(module, exports) { (function(root, factory) { { module.exports = factory(); } })(commonjsGlobal, function() { var CryptoJS = CryptoJS || function(Math2, undefined$1) { var crypto; if (typeof window !== "undefined" && window.crypto) { crypto = window.crypto; } if (typeof self !== "undefined" && self.crypto) { crypto = self.crypto; } if (typeof globalThis !== "undefined" && globalThis.crypto) { crypto = globalThis.crypto; } if (!crypto && typeof window !== "undefined" && window.msCrypto) { crypto = window.msCrypto; } if (!crypto && typeof commonjsGlobal !== "undefined" && commonjsGlobal.crypto) { crypto = commonjsGlobal.crypto; } if (!crypto && typeof commonjsRequire === "function") { try { crypto = require$$0; } catch (err) { } } var cryptoSecureRandomInt = function() { if (crypto) { if (typeof crypto.getRandomValues === "function") { try { return crypto.getRandomValues(new Uint32Array(1))[0]; } catch (err) { } } if (typeof crypto.randomBytes === "function") { try { return crypto.randomBytes(4).readInt32LE(); } catch (err) { } } } throw new Error("Native crypto module could not be used to get secure random number."); }; var create = Object.create || function() { function F() { } return function(obj) { var subtype; F.prototype = obj; subtype = new F(); F.prototype = null; return subtype; }; }(); var C = {}; var C_lib = C.lib = {}; var Base = C_lib.Base = function() { return { /** * Creates a new object that inherits from this object. * * @param {Object} overrides Properties to copy into the new object. * * @return {Object} The new object. * * @static * * @example * * var MyType = CryptoJS.lib.Base.extend({ * field: 'value', * * method: function () { * } * }); */ extend: function(overrides) { var subtype = create(this); if (overrides) { subtype.mixIn(overrides); } if (!subtype.hasOwnProperty("init") || this.init === subtype.init) { subtype.init = function() { subtype.$super.init.apply(this, arguments); }; } subtype.init.prototype = subtype; subtype.$super = this; return subtype; }, /** * Extends this object and runs the init method. * Arguments to create() will be passed to init(). * * @return {Object} The new object. * * @static * * @example * * var instance = MyType.create(); */ create: function() { var instance = this.extend(); instance.init.apply(instance, arguments); return instance; }, /** * Initializes a newly created object. * Override this method to add some logic when your objects are created. * * @example * * var MyType = CryptoJS.lib.Base.extend({ * init: function () { * // ... * } * }); */ init: function() { }, /** * Copies properties into this object. * * @param {Object} properties The properties to mix in. * * @example * * MyType.mixIn({ * field: 'value' * }); */ mixIn: function(properties) { for (var propertyName in properties) { if (properties.hasOwnProperty(propertyName)) { this[propertyName] = properties[propertyName]; } } if (properties.hasOwnProperty("toString")) { this.toString = properties.toString; } }, /** * Creates a copy of this object. * * @return {Object} The clone. * * @example * * var clone = instance.clone(); */ clone: function() { return this.init.prototype.extend(this); } }; }(); var WordArray = C_lib.WordArray = Base.extend({ /** * Initializes a newly created word array. * * @param {Array} words (Optional) An array of 32-bit words. * @param {number} sigBytes (Optional) The number of significant bytes in the words. * * @example * * var wordArray = CryptoJS.lib.WordArray.create(); * var wordArray = CryptoJS.lib.WordArray.create([0x00010203, 0x04050607]); * var wordArray = CryptoJS.lib.WordArray.create([0x00010203, 0x04050607], 6); */ init: function(words, sigBytes) { words = this.words = words || []; if (sigBytes != undefined$1) { this.sigBytes = sigBytes; } else { this.sigBytes = words.length * 4; } }, /** * Converts this word array to a string. * * @param {Encoder} encoder (Optional) The encoding strategy to use. Default: CryptoJS.enc.Hex * * @return {string} The stringified word array. * * @example * * var string = wordArray + ''; * var string = wordArray.toString(); * var string = wordArray.toString(CryptoJS.enc.Utf8); */ toString: function(encoder) { return (encoder || Hex2).stringify(this); }, /** * Concatenates a word array to this word array. * * @param {WordArray} wordArray The word array to append. * * @return {WordArray} This word array. * * @example * * wordArray1.concat(wordArray2); */ concat: function(wordArray) { var thisWords = this.words; var thatWords = wordArray.words; var thisSigBytes = this.sigBytes; var thatSigBytes = wordArray.sigBytes; this.clamp(); if (thisSigBytes % 4) { for (var i = 0; i < thatSigBytes; i++) { var thatByte = thatWords[i >>> 2] >>> 24 - i % 4 * 8 & 255; thisWords[thisSigBytes + i >>> 2] |= thatByte << 24 - (thisSigBytes + i) % 4 * 8; } } else { for (var j = 0; j < thatSigBytes; j += 4) { thisWords[thisSigBytes + j >>> 2] = thatWords[j >>> 2]; } } this.sigBytes += thatSigBytes; return this; }, /** * Removes insignificant bits. * * @example * * wordArray.clamp(); */ clamp: function() { var words = this.words; var sigBytes = this.sigBytes; words[sigBytes >>> 2] &= 4294967295 << 32 - sigBytes % 4 * 8; words.length = Math2.ceil(sigBytes / 4); }, /** * Creates a copy of this word array. * * @return {WordArray} The clone. * * @example * * var clone = wordArray.clone(); */ clone: function() { var clone = Base.clone.call(this); clone.words = this.words.slice(0); return clone; }, /** * Creates a word array filled with random bytes. * * @param {number} nBytes The number of random bytes to generate. * * @return {WordArray} The random word array. * * @static * * @example * * var wordArray = CryptoJS.lib.WordArray.random(16); */ random: function(nBytes) { var words = []; for (var i = 0; i < nBytes; i += 4) { words.push(cryptoSecureRandomInt()); } return new WordArray.init(words, nBytes); } }); var C_enc = C.enc = {}; var Hex2 = C_enc.Hex = { /** * Converts a word array to a hex string. * * @param {WordArray} wordArray The word array. * * @return {string} The hex string. * * @static * * @example * * var hexString = CryptoJS.enc.Hex.stringify(wordArray); */ stringify: function(wordArray) { var words = wordArray.words; var sigBytes = wordArray.sigBytes; var hexChars = []; for (var i = 0; i < sigBytes; i++) { var bite = words[i >>> 2] >>> 24 - i % 4 * 8 & 255; hexChars.push((bite >>> 4).toString(16)); hexChars.push((bite & 15).toString(16)); } return hexChars.join(""); }, /** * Converts a hex string to a word array. * * @param {string} hexStr The hex string. * * @return {WordArray} The word array. * * @static * * @example * * var wordArray = CryptoJS.enc.Hex.parse(hexString); */ parse: function(hexStr) { var hexStrLength = hexStr.length; var words = []; for (var i = 0; i < hexStrLength; i += 2) { words[i >>> 3] |= parseInt(hexStr.substr(i, 2), 16) << 24 - i % 8 * 4; } return new WordArray.init(words, hexStrLength / 2); } }; var Latin1 = C_enc.Latin1 = { /** * Converts a word array to a Latin1 string. * * @param {WordArray} wordArray The word array. * * @return {string} The Latin1 string. * * @static * * @example * * var latin1String = CryptoJS.enc.Latin1.stringify(wordArray); */ stringify: function(wordArray) { var words = wordArray.words; var sigBytes = wordArray.sigBytes; var latin1Chars = []; for (var i = 0; i < sigBytes; i++) { var bite = words[i >>> 2] >>> 24 - i % 4 * 8 & 255; latin1Chars.push(String.fromCharCode(bite)); } return latin1Chars.join(""); }, /** * Converts a Latin1 string to a word array. * * @param {string} latin1Str The Latin1 string. * * @return {WordArray} The word array. * * @static * * @example * * var wordArray = CryptoJS.enc.Latin1.parse(latin1String); */ parse: function(latin1Str) { var latin1StrLength = latin1Str.length; var words = []; for (var i = 0; i < latin1StrLength; i++) { words[i >>> 2] |= (latin1Str.charCodeAt(i) & 255) << 24 - i % 4 * 8; } return new WordArray.init(words, latin1StrLength); } }; var Utf8 = C_enc.Utf8 = { /** * Converts a word array to a UTF-8 string. * * @param {WordArray} wordArray The word array. * * @return {string} The UTF-8 string. * * @static * * @example * * var utf8String = CryptoJS.enc.Utf8.stringify(wordArray); */ stringify: function(wordArray) { try { return decodeURIComponent(escape(Latin1.stringify(wordArray))); } catch (e) { throw new Error("Malformed UTF-8 data"); } }, /** * Converts a UTF-8 string to a word array. * * @param {string} utf8Str The UTF-8 string. * * @return {WordArray} The word array. * * @static * * @example * * var wordArray = CryptoJS.enc.Utf8.parse(utf8String); */ parse: function(utf8Str) { return Latin1.parse(unescape(encodeURIComponent(utf8Str))); } }; var BufferedBlockAlgorithm = C_lib.BufferedBlockAlgorithm = Base.extend({ /** * Resets this block algorithm's data buffer to its initial state. * * @example * * bufferedBlockAlgorithm.reset(); */ reset: function() { this._data = new WordArray.init(); this._nDataBytes = 0; }, /** * Adds new data to this block algorithm's buffer. * * @param {WordArray|string} data The data to append. Strings are converted to a WordArray using UTF-8. * * @example * * bufferedBlockAlgorithm._append('data'); * bufferedBlockAlgorithm._append(wordArray); */ _append: function(data) { if (typeof data == "string") { data = Utf8.parse(data); } this._data.concat(data); this._nDataBytes += data.sigBytes; }, /** * Processes available data blocks. * * This method invokes _doProcessBlock(offset), which must be implemented by a concrete subtype. * * @param {boolean} doFlush Whether all blocks and partial blocks should be processed. * * @return {WordArray} The processed data. * * @example * * var processedData = bufferedBlockAlgorithm._process(); * var processedData = bufferedBlockAlgorithm._process(!!'flush'); */ _process: function(doFlush) { var processedWords; var data = this._data; var dataWords = data.words; var dataSigBytes = data.sigBytes; var blockSize = this.blockSize; var blockSizeBytes = blockSize * 4; var nBlocksReady = dataSigBytes / blockSizeBytes; if (doFlush) { nBlocksReady = Math2.ceil(nBlocksReady); } else { nBlocksReady = Math2.max((nBlocksReady | 0) - this._minBufferSize, 0); } var nWordsReady = nBlocksReady * blockSize; var nBytesReady = Math2.min(nWordsReady * 4, dataSigBytes); if (nWordsReady) { for (var offset = 0; offset < nWordsReady; offset += blockSize) { this._doProcessBlock(dataWords, offset); } processedWords = dataWords.splice(0, nWordsReady); data.sigBytes -= nBytesReady; } return new WordArray.init(processedWords, nBytesReady); }, /** * Creates a copy of this object. * * @return {Object} The clone. * * @example * * var clone = bufferedBlockAlgorithm.clone(); */ clone: function() { var clone = Base.clone.call(this); clone._data = this._data.clone(); return clone; }, _minBufferSize: 0 }); C_lib.Hasher = BufferedBlockAlgorithm.extend({ /** * Configuration options. */ cfg: Base.extend(), /** * Initializes a newly created hasher. * * @param {Object} cfg (Optional) The configuration options to use for this hash computation. * * @example * * var hasher = CryptoJS.algo.SHA256.create(); */ init: function(cfg) { this.cfg = this.cfg.extend(cfg); this.reset(); }, /** * Resets this hasher to its initial state. * * @example * * hasher.reset(); */ reset: function() { BufferedBlockAlgorithm.reset.call(this); this._doReset(); }, /** * Updates this hasher with a message. * * @param {WordArray|string} messageUpdate The message to append. * * @return {Hasher} This hasher. * * @example * * hasher.update('message'); * hasher.update(wordArray); */ update: function(messageUpdate) { this._append(messageUpdate); this._process(); return this; }, /** * Finalizes the hash computation. * Note that the finalize operation is effectively a destructive, read-once operation. * * @param {WordArray|string} messageUpdate (Optional) A final message update. * * @return {WordArray} The hash. * * @example * * var hash = hasher.finalize(); * var hash = hasher.finalize('message'); * var hash = hasher.finalize(wordArray); */ finalize: function(messageUpdate) { if (messageUpdate) { this._append(messageUpdate); } var hash = this._doFinalize(); return hash; }, blockSize: 512 / 32, /** * Creates a shortcut function to a hasher's object interface. * * @param {Hasher} hasher The hasher to create a helper for. * * @return {Function} The shortcut function. * * @static * * @example * * var SHA256 = CryptoJS.lib.Hasher._createHelper(CryptoJS.algo.SHA256); */ _createHelper: function(hasher) { return function(message, cfg) { return new hasher.init(cfg).finalize(message); }; }, /** * Creates a shortcut function to the HMAC's object interface. * * @param {Hasher} hasher The hasher to use in this HMAC helper. * * @return {Function} The shortcut function. * * @static * * @example * * var HmacSHA256 = CryptoJS.lib.Hasher._createHmacHelper(CryptoJS.algo.SHA256); */ _createHmacHelper: function(hasher) { return function(message, key) { return new C_algo.HMAC.init(hasher, key).finalize(message); }; } }); var C_algo = C.algo = {}; return C; }(Math); return CryptoJS; }); })(core); return core.exports; } var x64Core = { exports: {} }; var hasRequiredX64Core; function requireX64Core() { if (hasRequiredX64Core) return x64Core.exports; hasRequiredX64Core = 1; (function(module, exports) { (function(root, factory) { { module.exports = factory(requireCore()); } })(commonjsGlobal, function(CryptoJS) { (function(undefined$1) { var C = CryptoJS; var C_lib = C.lib; var Base = C_lib.Base; var X32WordArray = C_lib.WordArray; var C_x64 = C.x64 = {}; C_x64.Word = Base.extend({ /** * Initializes a newly created 64-bit word. * * @param {number} high The high 32 bits. * @param {number} low The low 32 bits. * * @example * * var x64Word = CryptoJS.x64.Word.create(0x00010203, 0x04050607); */ init: function(high, low) { this.high = high; this.low = low; } /** * Bitwise NOTs this word. * * @return {X64Word} A new x64-Word object after negating. * * @example * * var negated = x64Word.not(); */ // not: function () { // var high = ~this.high; // var low = ~this.low; // return X64Word.create(high, low); // }, /** * Bitwise ANDs this word with the passed word. * * @param {X64Word} word The x64-Word to AND with this word. * * @return {X64Word} A new x64-Word object after ANDing. * * @example * * var anded = x64Word.and(anotherX64Word); */ // and: function (word) { // var high = this.high & word.high; // var low = this.low & word.low; // return X64Word.create(high, low); // }, /** * Bitwise ORs this word with the passed word. * * @param {X64Word} word The x64-Word to OR with this word. * * @return {X64Word} A new x64-Word object after ORing. * * @example * * var ored = x64Word.or(anotherX64Word); */ // or: function (word) { // var high = this.high | word.high; // var low = this.low | word.low; // return X64Word.create(high, low); // }, /** * Bitwise XORs this word with the passed word. * * @param {X64Word} word The x64-Word to XOR with this word. * * @return {X64Word} A new x64-Word object after XORing. * * @example * * var xored = x64Word.xor(anotherX64Word); */ // xor: function (word) { // var high = this.high ^ word.high; // var low = this.low ^ word.low; // return X64Word.create(high, low); // }, /** * Shifts this word n bits to the left. * * @param {number} n The number of bits to shift. * * @return {X64Word} A new x64-Word object after shifting. * * @example * * var shifted = x64Word.shiftL(25); */ // shiftL: function (n) { // if (n < 32) { // var high = (this.high << n) | (this.low >>> (32 - n)); // var low = this.low << n; // } else { // var high = this.low << (n - 32); // var low = 0; // } // return X64Word.create(high, low); // }, /** * Shifts this word n bits to the right. * * @param {number} n The number of bits to shift. * * @return {X64Word} A new x64-Word object after shifting. * * @example * * var shifted = x64Word.shiftR(7); */ // shiftR: function (n) { // if (n < 32) { // var low = (this.low >>> n) | (this.high << (32 - n)); // var high = this.high >>> n; // } else { // var low = this.high >>> (n - 32); // var high = 0; // } // return X64Word.create(high, low); // }, /** * Rotates this word n bits to the left. * * @param {number} n The number of bits to rotate. * * @return {X64Word} A new x64-Word object after rotating. * * @example * * var rotated = x64Word.rotL(25); */ // rotL: function (n) { // return this.shiftL(n).or(this.shiftR(64 - n)); // }, /** * Rotates this word n bits to the right. * * @param {number} n The number of bits to rotate. * * @return {X64Word} A new x64-Word object after rotating. * * @example * * var rotated = x64Word.rotR(7); */ // rotR: function (n) { // return this.shiftR(n).or(this.shiftL(64 - n)); // }, /** * Adds this word with the passed word. * * @param {X64Word} word The x64-Word to add with this word. * * @return {X64Word} A new x64-Word object after adding. * * @example * * var added = x64Word.add(anotherX64Word); */ // add: function (word) { // var low = (this.low + word.low) | 0; // var carry = (low >>> 0) < (this.low >>> 0) ? 1 : 0; // var high = (this.high + word.high + carry) | 0; // return X64Word.create(high, low); // } }); C_x64.WordArray = Base.extend({ /** * Initializes a newly created word array. * * @param {Array} words (Optional) An array of CryptoJS.x64.Word objects. * @param {number} sigBytes (Optional) The number of significant bytes in the words. * * @example * * var wordArray = CryptoJS.x64.WordArray.create(); * * var wordArray = CryptoJS.x64.WordArray.create([ * CryptoJS.x64.Word.create(0x00010203, 0x04050607), * CryptoJS.x64.Word.create(0x18191a1b, 0x1c1d1e1f) * ]); * * var wordArray = CryptoJS.x64.WordArray.create([ * CryptoJS.x64.Word.create(0x00010203, 0x04050607), * CryptoJS.x64.Word.create(0x18191a1b, 0x1c1d1e1f) * ], 10); */ init: function(words, sigBytes) { words = this.words = words || []; if (sigBytes != undefined$1) { this.sigBytes = sigBytes; } else { this.sigBytes = words.length * 8; } }, /** * Converts this 64-bit word array to a 32-bit word array. * * @return {CryptoJS.lib.WordArray} This word array's data as a 32-bit word array. * * @example * * var x32WordArray = x64WordArray.toX32(); */ toX32: function() { var x64Words = this.words; var x64WordsLength = x64Words.length; var x32Words = []; for (var i = 0; i < x64WordsLength; i++) { var x64Word = x64Words[i]; x32Words.push(x64Word.high); x32Words.push(x64Word.low); } return X32WordArray.create(x32Words, this.sigBytes); }, /** * Creates a copy of this word array. * * @return {X64WordArray} The clone. * * @example * * var clone = x64WordArray.clone(); */ clone: function() { var clone = Base.clone.call(this); var words = clone.words = this.words.slice(0); var wordsLength = words.length; for (var i = 0; i < wordsLength; i++) { words[i] = words[i].clone(); } return clone; } }); })(); return CryptoJS; }); })(x64Core); return x64Core.exports; } var libTypedarrays = { exports: {} }; var hasRequiredLibTypedarrays; function requireLibTypedarrays() { if (hasRequiredLibTypedarrays) return libTypedarrays.exports; hasRequiredLibTypedarrays = 1; (function(module, exports) { (function(root, factory) { { module.exports = factory(requireCore()); } })(commonjsGlobal, function(CryptoJS) { (function() { if (typeof ArrayBuffer != "function") { return; } var C = CryptoJS; var C_lib = C.lib; var WordArray = C_lib.WordArray; var superInit = WordArray.init; var subInit = WordArray.init = function(typedArray) { if (typedArray instanceof ArrayBuffer) { typedArray = new Uint8Array(typedArray); } if (typedArray instanceof Int8Array || typeof Uint8ClampedArray !== "undefined" && typedArray instanceof Uint8ClampedArray || typedArray instanceof Int16Array || typedArray instanceof Uint16Array || typedArray instanceof Int32Array || typedArray instanceof Uint32Array || typedArray instanceof Float32Array || typedArray instanceof Float64Array) { typedArray = new Uint8Array(typedArray.buffer, typedArray.byteOffset, typedArray.byteLength); } if (typedArray instanceof Uint8Array) { var typedArrayByteLength = typedArray.byteLength; var words = []; for (var i = 0; i < typedArrayByteLength; i++) { words[i >>> 2] |= typedArray[i] << 24 - i % 4 * 8; } superInit.call(this, words, typedArrayByteLength); } else { superInit.apply(this, arguments); } }; subInit.prototype = WordArray; })(); return CryptoJS.lib.WordArray; }); })(libTypedarrays); return libTypedarrays.exports; } var encUtf16 = { exports: {} }; var hasRequiredEncUtf16; function requireEncUtf16() { if (hasRequiredEncUtf16) return encUtf16.exports; hasRequiredEncUtf16 = 1; (function(module, exports) { (function(root, factory) { { module.exports = factory(requireCore()); } })(commonjsGlobal, function(CryptoJS) { (function() { var C = CryptoJS; var C_lib = C.lib; var WordArray = C_lib.WordArray; var C_enc = C.enc; C_enc.Utf16 = C_enc.Utf16BE = { /** * Converts a word array to a UTF-16 BE string. * * @param {WordArray} wordArray The word array. * * @return {string} The UTF-16 BE string. * * @static * * @example * * var utf16String = CryptoJS.enc.Utf16.stringify(wordArray); */ stringify: function(wordArray) { var words = wordArray.words; var sigBytes = wordArray.sigBytes; var utf16Chars = []; for (var i = 0; i < sigBytes; i += 2) { var codePoint = words[i >>> 2] >>> 16 - i % 4 * 8 & 65535; utf16Chars.push(String.fromCharCode(codePoint)); } return utf16Chars.join(""); }, /** * Converts a UTF-16 BE string to a word array. * * @param {string} utf16Str The UTF-16 BE string. * * @return {WordArray} The word array. * * @static * * @example * * var wordArray = CryptoJS.enc.Utf16.parse(utf16String); */ parse: function(utf16Str) { var utf16StrLength = utf16Str.length; var words = []; for (var i = 0; i < utf16StrLength; i++) { words[i >>> 1] |= utf16Str.charCodeAt(i) << 16 - i % 2 * 16; } return WordArray.create(words, utf16StrLength * 2); } }; C_enc.Utf16LE = { /** * Converts a word array to a UTF-16 LE string. * * @param {WordArray} wordArray The word array. * * @return {string} The UTF-16 LE string. * * @static * * @example * * var utf16Str = CryptoJS.enc.Utf16LE.stringify(wordArray); */ stringify: function(wordArray) { var words = wordArray.words; var sigBytes = wordArray.sigBytes; var utf16Chars = []; for (var i = 0; i < sigBytes; i += 2) { var codePoint = swapEndian(words[i >>> 2] >>> 16 - i % 4 * 8 & 65535); utf16Chars.push(String.fromCharCode(codePoint)); } return utf16Chars.join(""); }, /** * Converts a UTF-16 LE string to a word array. * * @param {string} utf16Str The UTF-16 LE string. * * @return {WordArray} The word array. * * @static * * @example * * var wordArray = CryptoJS.enc.Utf16LE.parse(utf16Str); */ parse: function(utf16Str) { var utf16StrLength = utf16Str.length; var words = []; for (var i = 0; i < utf16StrLength; i++) { words[i >>> 1] |= swapEndian(utf16Str.charCodeAt(i) << 16 - i % 2 * 16); } return WordArray.create(words, utf16StrLength * 2); } }; function swapEndian(word) { return word << 8 & 4278255360 | word >>> 8 & 16711935; } })(); return CryptoJS.enc.Utf16; }); })(encUtf16); return encUtf16.exports; } var encBase64 = { exports: {} }; var hasRequiredEncBase64; function requireEncBase64() { if (hasRequiredEncBase64) return encBase64.exports; hasRequiredEncBase64 = 1; (function(module, exports) { (function(root, factory) { { module.exports = factory(requireCore()); } })(commonjsGlobal, function(CryptoJS) { (function() { var C = CryptoJS; var C_lib = C.lib; var WordArray = C_lib.WordArray; var C_enc = C.enc; C_enc.Base64 = { /** * Converts a word array to a Base64 string. * * @param {WordArray} wordArray The word array. * * @return {string} The Base64 string. * * @static * * @example * * var base64String = CryptoJS.enc.Base64.stringify(wordArray); */ stringify: function(wordArray) { var words = wordArray.words; var sigBytes = wordArray.sigBytes; var map = this._map; wordArray.clamp(); var base64Chars = []; for (var i = 0; i < sigBytes; i += 3) { var byte1 = words[i >>> 2] >>> 24 - i % 4 * 8 & 255; var byte2 = words[i + 1 >>> 2] >>> 24 - (i + 1) % 4 * 8 & 255; var byte3 = words[i + 2 >>> 2] >>> 24 - (i + 2) % 4 * 8 & 255; var triplet = byte1 << 16 | byte2 << 8 | byte3; for (var j = 0; j < 4 && i + j * 0.75 < sigBytes; j++) { base64Chars.push(map.charAt(triplet >>> 6 * (3 - j) & 63)); } } var paddingChar = map.charAt(64); if (paddingChar) { while (base64Chars.length % 4) { base64Chars.push(paddingChar); } } return base64Chars.join(""); }, /** * Converts a Base64 string to a word array. * * @param {string} base64Str The Base64 string. * * @return {WordArray} The word array. * * @static * * @example * * var wordArray = CryptoJS.enc.Base64.parse(base64String); */ parse: function(base64Str) { var base64StrLength = base64Str.length; var map = this._map; var reverseMap = this._reverseMap; if (!reverseMap) { reverseMap = this._reverseMap = []; for (var j = 0; j < map.length; j++) { reverseMap[map.charCodeAt(j)] = j; } } var paddingChar = map.charAt(64); if (paddingChar) { var paddingIndex = base64Str.indexOf(paddingChar); if (paddingIndex !== -1) { base64StrLength = paddingIndex; } } return parseLoop(base64Str, base64StrLength, reverseMap); }, _map: "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=" }; function parseLoop(base64Str, base64StrLength, reverseMap) { var words = []; var nBytes = 0; for (var i = 0; i < base64StrLength; i++) { if (i % 4) { var bits1 = reverseMap[base64Str.charCodeAt(i - 1)] << i % 4 * 2; var bits2 = reverseMap[base64Str.charCodeAt(i)] >>> 6 - i % 4 * 2; var bitsCombined = bits1 | bits2; words[nBytes >>> 2] |= bitsCombined << 24 - nBytes % 4 * 8; nBytes++; } } return WordArray.create(words, nBytes); } })(); return CryptoJS.enc.Base64; }); })(encBase64); return encBase64.exports; } var encBase64url = { exports: {} }; var hasRequiredEncBase64url; function requireEncBase64url() { if (hasRequiredEncBase64url) return encBase64url.exports; hasRequiredEncBase64url = 1; (function(module, exports) { (function(root, factory) { { module.exports = factory(requireCore()); } })(commonjsGlobal, function(CryptoJS) { (function() { var C = CryptoJS; var C_lib = C.lib; var WordArray = C_lib.WordArray; var C_enc = C.enc; C_enc.Base64url = { /** * Converts a word array to a Base64url string. * * @param {WordArray} wordArray The word array. * * @param {boolean} urlSafe Whether to use url safe * * @return {string} The Base64url string. * * @static * * @example * * var base64String = CryptoJS.enc.Base64url.stringify(wordArray); */ stringify: function(wordArray, urlSafe) { if (urlSafe === void 0) { urlSafe = true; } var words = wordArray.words; var sigBytes = wordArray.sigBytes; var map = urlSafe ? this._safe_map : this._map; wordArray.clamp(); var base64Chars = []; for (var i = 0; i < sigBytes; i += 3) { var byte1 = words[i >>> 2] >>> 24 - i % 4 * 8 & 255; var byte2 = words[i + 1 >>> 2] >>> 24 - (i + 1) % 4 * 8 & 255; var byte3 = words[i + 2 >>> 2] >>> 24 - (i + 2) % 4 * 8 & 255; var triplet = byte1 << 16 | byte2 << 8 | byte3; for (var j = 0; j < 4 && i + j * 0.75 < sigBytes; j++) { base64Chars.push(map.charAt(triplet >>> 6 * (3 - j) & 63)); } } var paddingChar = map.charAt(64); if (paddingChar) { while (base64Chars.length % 4) { base64Chars.push(paddingChar); } } return base64Chars.join(""); }, /** * Converts a Base64url string to a word array. * * @param {string} base64Str The Base64url string. * * @param {boolean} urlSafe Whether to use url safe * * @return {WordArray} The word array. * * @static * * @example * * var wordArray = CryptoJS.enc.Base64url.parse(base64String); */ parse: function(base64Str, urlSafe) { if (urlSafe === void 0) { urlSafe = true; } var base64StrLength = base64Str.length; var map = urlSafe ? this._safe_map : this._map; var reverseMap = this._reverseMap; if (!reverseMap) { reverseMap = this._reverseMap = []; for (var j = 0; j < map.length; j++) { reverseMap[map.charCodeAt(j)] = j; } } var paddingChar = map.charAt(64); if (paddingChar) { var paddingIndex = base64Str.indexOf(paddingChar); if (paddingIndex !== -1) { base64StrLength = paddingIndex; } } return parseLoop(base64Str, base64StrLength, reverseMap); }, _map: "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=", _safe_map: "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_" }; function parseLoop(base64Str, base64StrLength, reverseMap) { var words = []; var nBytes = 0; for (var i = 0; i < base64StrLength; i++) { if (i % 4) { var bits1 = reverseMap[base64Str.charCodeAt(i - 1)] << i % 4 * 2; var bits2 = reverseMap[base64Str.charCodeAt(i)] >>> 6 - i % 4 * 2; var bitsCombined = bits1 | bits2; words[nBytes >>> 2] |= bitsCombined << 24 - nBytes % 4 * 8; nBytes++; } } return WordArray.create(words, nBytes); } })(); return CryptoJS.enc.Base64url; }); })(encBase64url); return encBase64url.exports; } var md5 = { exports: {} }; var hasRequiredMd5; function requireMd5() { if (hasRequiredMd5) return md5.exports; hasRequiredMd5 = 1; (function(module, exports) { (function(root, factory) { { module.exports = factory(requireCore()); } })(commonjsGlobal, function(CryptoJS) { (function(Math2) { var C = CryptoJS; var C_lib = C.lib; var WordArray = C_lib.WordArray; var Hasher = C_lib.Hasher; var C_algo = C.algo; var T = []; (function() { for (var i = 0; i < 64; i++) { T[i] = Math2.abs(Math2.sin(i + 1)) * 4294967296 | 0; } })(); var MD5 = C_algo.MD5 = Hasher.extend({ _doReset: function() { this._hash = new WordArray.init([ 1732584193, 4023233417, 2562383102, 271733878 ]); }, _doProcessBlock: function(M, offset) { for (var i = 0; i < 16; i++) { var offset_i = offset + i; var M_offset_i = M[offset_i]; M[offset_i] = (M_offset_i << 8 | M_offset_i >>> 24) & 16711935 | (M_offset_i << 24 | M_offset_i >>> 8) & 4278255360; } var H = this._hash.words; var M_offset_0 = M[offset + 0]; var M_offset_1 = M[offset + 1]; var M_offset_2 = M[offset + 2]; var M_offset_3 = M[offset + 3]; var M_offset_4 = M[offset + 4]; var M_offset_5 = M[offset + 5]; var M_offset_6 = M[offset + 6]; var M_offset_7 = M[offset + 7]; var M_offset_8 = M[offset + 8]; var M_offset_9 = M[offset + 9]; var M_offset_10 = M[offset + 10]; var M_offset_11 = M[offset + 11]; var M_offset_12 = M[offset + 12]; var M_offset_13 = M[offset + 13]; var M_offset_14 = M[offset + 14]; var M_offset_15 = M[offset + 15]; var a = H[0]; var b = H[1]; var c = H[2]; var d = H[3]; a = FF(a, b, c, d, M_offset_0, 7, T[0]); d = FF(d, a, b, c, M_offset_1, 12, T[1]); c = FF(c, d, a, b, M_offset_2, 17, T[2]); b = FF(b, c, d, a, M_offset_3, 22, T[3]); a = FF(a, b, c, d, M_offset_4, 7, T[4]); d = FF(d, a, b, c, M_offset_5, 12, T[5]); c = FF(c, d, a, b, M_offset_6, 17, T[6]); b = FF(b, c, d, a, M_offset_7, 22, T[7]); a = FF(a, b, c, d, M_offset_8, 7, T[8]); d = FF(d, a, b, c, M_offset_9, 12, T[9]); c = FF(c, d, a, b, M_offset_10, 17, T[10]); b = FF(b, c, d, a, M_offset_11, 22, T[11]); a = FF(a, b, c, d, M_offset_12, 7, T[12]); d = FF(d, a, b, c, M_offset_13, 12, T[13]); c = FF(c, d, a, b, M_offset_14, 17, T[14]); b = FF(b, c, d, a, M_offset_15, 22, T[15]); a = GG(a, b, c, d, M_offset_1, 5, T[16]); d = GG(d, a, b, c, M_offset_6, 9, T[17]); c = GG(c, d, a, b, M_offset_11, 14, T[18]); b = GG(b, c, d, a, M_offset_0, 20, T[19]); a = GG(a, b, c, d, M_offset_5, 5, T[20]); d = GG(d, a, b, c, M_offset_10, 9, T[21]); c = GG(c, d, a, b, M_offset_15, 14, T[22]); b = GG(b, c, d, a, M_offset_4, 20, T[23]); a = GG(a, b, c, d, M_offset_9, 5, T[24]); d = GG(d, a, b, c, M_offset_14, 9, T[25]); c = GG(c, d, a, b, M_offset_3, 14, T[26]); b = GG(b, c, d, a, M_offset_8, 20, T[27]); a = GG(a, b, c, d, M_offset_13, 5, T[28]); d = GG(d, a, b, c, M_offset_2, 9, T[29]); c = GG(c, d, a, b, M_offset_7, 14, T[30]); b = GG(b, c, d, a, M_offset_12, 20, T[31]); a = HH(a, b, c, d, M_offset_5, 4, T[32]); d = HH(d, a, b, c, M_offset_8, 11, T[33]); c = HH(c, d, a, b, M_offset_11, 16, T[34]); b = HH(b, c, d, a, M_offset_14, 23, T[35]); a = HH(a, b, c, d, M_offset_1, 4, T[36]); d = HH(d, a, b, c, M_offset_4, 11, T[37]); c = HH(c, d, a, b, M_offset_7, 16, T[38]); b = HH(b, c, d, a, M_offset_10, 23, T[39]); a = HH(a, b, c, d, M_offset_13, 4, T[40]); d = HH(d, a, b, c, M_offset_0, 11, T[41]); c = HH(c, d, a, b, M_offset_3, 16, T[42]); b = HH(b, c, d, a, M_offset_6, 23, T[43]); a = HH(a, b, c, d, M_offset_9, 4, T[44]); d = HH(d, a, b, c, M_offset_12, 11, T[45]); c = HH(c, d, a, b, M_offset_15, 16, T[46]); b = HH(b, c, d, a, M_offset_2, 23, T[47]); a = II(a, b, c, d, M_offset_0, 6, T[48]); d = II(d, a, b, c, M_offset_7, 10, T[49]); c = II(c, d, a, b, M_offset_14, 15, T[50]); b = II(b, c, d, a, M_offset_5, 21, T[51]); a = II(a, b, c, d, M_offset_12, 6, T[52]); d = II(d, a, b, c, M_offset_3, 10, T[53]); c = II(c, d, a, b, M_offset_10, 15, T[54]); b = II(b, c, d, a, M_offset_1, 21, T[55]); a = II(a, b, c, d, M_offset_8, 6, T[56]); d = II(d, a, b, c, M_offset_15, 10, T[57]); c = II(c, d, a, b, M_offset_6, 15, T[58]); b = II(b, c, d, a, M_offset_13, 21, T[59]); a = II(a, b, c, d, M_offset_4, 6, T[60]); d = II(d, a, b, c, M_offset_11, 10, T[61]); c = II(c, d, a, b, M_offset_2, 15, T[62]); b = II(b, c, d, a, M_offset_9, 21, T[63]); H[0] = H[0] + a | 0; H[1] = H[1] + b | 0; H[2] = H[2] + c | 0; H[3] = H[3] + d | 0; }, _doFinalize: function() { var data = this._data; var dataWords = data.words; var nBitsTotal = this._nDataBytes * 8; var nBitsLeft = data.sigBytes * 8; dataWords[nBitsLeft >>> 5] |= 128 << 24 - nBitsLeft % 32; var nBitsTotalH = Math2.floor(nBitsTotal / 4294967296); var nBitsTotalL = nBitsTotal; dataWords[(nBitsLeft + 64 >>> 9 << 4) + 15] = (nBitsTotalH << 8 | nBitsTotalH >>> 24) & 16711935 | (nBitsTotalH << 24 | nBitsTotalH >>> 8) & 4278255360; dataWords[(nBitsLeft + 64 >>> 9 << 4) + 14] = (nBitsTotalL << 8 | nBitsTotalL >>> 24) & 16711935 | (nBitsTotalL << 24 | nBitsTotalL >>> 8) & 4278255360; data.sigBytes = (dataWords.length + 1) * 4; this._process(); var hash = this._hash; var H = hash.words; for (var i = 0; i < 4; i++) { var H_i = H[i]; H[i] = (H_i << 8 | H_i >>> 24) & 16711935 | (H_i << 24 | H_i >>> 8) & 4278255360; } return hash; }, clone: function() { var clone = Hasher.clone.call(this); clone._hash = this._hash.clone(); return clone; } }); function FF(a, b, c, d, x, s, t) { var n2 = a + (b & c | ~b & d) + x + t; return (n2 << s | n2 >>> 32 - s) + b; } function GG(a, b, c, d, x, s, t) { var n2 = a + (b & d | c & ~d) + x + t; return (n2 << s | n2 >>> 32 - s) + b; } function HH(a, b, c, d, x, s, t) { var n2 = a + (b ^ c ^ d) + x + t; return (n2 << s | n2 >>> 32 - s) + b; } function II(a, b, c, d, x, s, t) { var n2 = a + (c ^ (b | ~d)) + x + t; return (n2 << s | n2 >>> 32 - s) + b; } C.MD5 = Hasher._createHelper(MD5); C.HmacMD5 = Hasher._createHmacHelper(MD5); })(Math); return CryptoJS.MD5; }); })(md5); return md5.exports; } var sha1 = { exports: {} }; var hasRequiredSha1; function requireSha1() { if (hasRequiredSha1) return sha1.exports; hasRequiredSha1 = 1; (function(module, exports) { (function(root, factory) { { module.exports = factory(requireCore()); } })(commonjsGlobal, function(CryptoJS) { (function() { var C = CryptoJS; var C_lib = C.lib; var WordArray = C_lib.WordArray; var Hasher = C_lib.Hasher; var C_algo = C.algo; var W = []; var SHA1 = C_algo.SHA1 = Hasher.extend({ _doReset: function() { this._hash = new WordArray.init([ 1732584193, 4023233417, 2562383102, 271733878, 3285377520 ]); }, _doProcessBlock: function(M, offset) { var H = this._hash.words; var a = H[0]; var b = H[1]; var c = H[2]; var d = H[3]; var e = H[4]; for (var i = 0; i < 80; i++) { if (i < 16) { W[i] = M[offset + i] | 0; } else { var n2 = W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16]; W[i] = n2 << 1 | n2 >>> 31; } var t = (a << 5 | a >>> 27) + e + W[i]; if (i < 20) { t += (b & c | ~b & d) + 1518500249; } else if (i < 40) { t += (b ^ c ^ d) + 1859775393; } else if (i < 60) { t += (b & c | b & d | c & d) - 1894007588; } else { t += (b ^ c ^ d) - 899497514; } e = d; d = c; c = b << 30 | b >>> 2; b = a; a = t; } H[0] = H[0] + a | 0; H[1] = H[1] + b | 0; H[2] = H[2] + c | 0; H[3] = H[3] + d | 0; H[4] = H[4] + e | 0; }, _doFinalize: function() { var data = this._data; var dataWords = data.words; var nBitsTotal = this._nDataBytes * 8; var nBitsLeft = data.sigBytes * 8; dataWords[nBitsLeft >>> 5] |= 128 << 24 - nBitsLeft % 32; dataWords[(nBitsLeft + 64 >>> 9 << 4) + 14] = Math.floor(nBitsTotal / 4294967296); dataWords[(nBitsLeft + 64 >>> 9 << 4) + 15] = nBitsTotal; data.sigBytes = dataWords.length * 4; this._process(); return this._hash; }, clone: function() { var clone = Hasher.clone.call(this); clone._hash = this._hash.clone(); return clone; } }); C.SHA1 = Hasher._createHelper(SHA1); C.HmacSHA1 = Hasher._createHmacHelper(SHA1); })(); return CryptoJS.SHA1; }); })(sha1); return sha1.exports; } var sha256 = { exports: {} }; var hasRequiredSha256; function requireSha256() { if (hasRequiredSha256) return sha256.exports; hasRequiredSha256 = 1; (function(module, exports) { (function(root, factory) { { module.exports = factory(requireCore()); } })(commonjsGlobal, function(CryptoJS) { (function(Math2) { var C = CryptoJS; var C_lib = C.lib; var WordArray = C_lib.WordArray; var Hasher = C_lib.Hasher; var C_algo = C.algo; var H = []; var K = []; (function() { function isPrime(n3) { var sqrtN = Math2.sqrt(n3); for (var factor = 2; factor <= sqrtN; factor++) { if (!(n3 % factor)) { return false; } } return true; } function getFractionalBits(n3) { return (n3 - (n3 | 0)) * 4294967296 | 0; } var n2 = 2; var nPrime = 0; while (nPrime < 64) { if (isPrime(n2)) { if (nPrime < 8) { H[nPrime] = getFractionalBits(Math2.pow(n2, 1 / 2)); } K[nPrime] = getFractionalBits(Math2.pow(n2, 1 / 3)); nPrime++; } n2++; } })(); var W = []; var SHA256 = C_algo.SHA256 = Hasher.extend({ _doReset: function() { this._hash = new WordArray.init(H.slice(0)); }, _doProcessBlock: function(M, offset) { var H2 = this._hash.words; var a = H2[0]; var b = H2[1]; var c = H2[2]; var d = H2[3]; var e = H2[4]; var f2 = H2[5]; var g = H2[6]; var h = H2[7]; for (var i = 0; i < 64; i++) { if (i < 16) { W[i] = M[offset + i] | 0; } else { var gamma0x = W[i - 15]; var gamma0 = (gamma0x << 25 | gamma0x >>> 7) ^ (gamma0x << 14 | gamma0x >>> 18) ^ gamma0x >>> 3; var gamma1x = W[i - 2]; var gamma1 = (gamma1x << 15 | gamma1x >>> 17) ^ (gamma1x << 13 | gamma1x >>> 19) ^ gamma1x >>> 10; W[i] = gamma0 + W[i - 7] + gamma1 + W[i - 16]; } var ch = e & f2 ^ ~e & g; var maj = a & b ^ a & c ^ b & c; var sigma0 = (a << 30 | a >>> 2) ^ (a << 19 | a >>> 13) ^ (a << 10 | a >>> 22); var sigma1 = (e << 26 | e >>> 6) ^ (e << 21 | e >>> 11) ^ (e << 7 | e >>> 25); var t1 = h + sigma1 + ch + K[i] + W[i]; var t2 = sigma0 + maj; h = g; g = f2; f2 = e; e = d + t1 | 0; d = c; c = b; b = a; a = t1 + t2 | 0; } H2[0] = H2[0] + a | 0; H2[1] = H2[1] + b | 0; H2[2] = H2[2] + c | 0; H2[3] = H2[3] + d | 0; H2[4] = H2[4] + e | 0; H2[5] = H2[5] + f2 | 0; H2[6] = H2[6] + g | 0; H2[7] = H2[7] + h | 0; }, _doFinalize: function() { var data = this._data; var dataWords = data.words; var nBitsTotal = this._nDataBytes * 8; var nBitsLeft = data.sigBytes * 8; dataWords[nBitsLeft >>> 5] |= 128 << 24 - nBitsLeft % 32; dataWords[(nBitsLeft + 64 >>> 9 << 4) + 14] = Math2.floor(nBitsTotal / 4294967296); dataWords[(nBitsLeft + 64 >>> 9 << 4) + 15] = nBitsTotal; data.sigBytes = dataWords.length * 4; this._process(); return this._hash; }, clone: function() { var clone = Hasher.clone.call(this); clone._hash = this._hash.clone(); return clone; } }); C.SHA256 = Hasher._createHelper(SHA256); C.HmacSHA256 = Hasher._createHmacHelper(SHA256); })(Math); return CryptoJS.SHA256; }); })(sha256); return sha256.exports; } var sha224 = { exports: {} }; var hasRequiredSha224; function requireSha224() { if (hasRequiredSha224) return sha224.exports; hasRequiredSha224 = 1; (function(module, exports) { (function(root, factory, undef) { { module.exports = factory(requireCore(), requireSha256()); } })(commonjsGlobal, function(CryptoJS) { (function() { var C = CryptoJS; var C_lib = C.lib; var WordArray = C_lib.WordArray; var C_algo = C.algo; var SHA256 = C_algo.SHA256; var SHA224 = C_algo.SHA224 = SHA256.extend({ _doReset: function() { this._hash = new WordArray.init([ 3238371032, 914150663, 812702999, 4144912697, 4290775857, 1750603025, 1694076839, 3204075428 ]); }, _doFinalize: function() { var hash = SHA256._doFinalize.call(this); hash.sigBytes -= 4; return hash; } }); C.SHA224 = SHA256._createHelper(SHA224); C.HmacSHA224 = SHA256._createHmacHelper(SHA224); })(); return CryptoJS.SHA224; }); })(sha224); return sha224.exports; } var sha512 = { exports: {} }; var hasRequiredSha512; function requireSha512() { if (hasRequiredSha512) return sha512.exports; hasRequiredSha512 = 1; (function(module, exports) { (function(root, factory, undef) { { module.exports = factory(requireCore(), requireX64Core()); } })(commonjsGlobal, function(CryptoJS) { (function() { var C = CryptoJS; var C_lib = C.lib; var Hasher = C_lib.Hasher; var C_x64 = C.x64; var X64Word = C_x64.Word; var X64WordArray = C_x64.WordArray; var C_algo = C.algo; function X64Word_create() { return X64Word.create.apply(X64Word, arguments); } var K = [ X64Word_create(1116352408, 3609767458), X64Word_create(1899447441, 602891725), X64Word_create(3049323471, 3964484399), X64Word_create(3921009573, 2173295548), X64Word_create(961987163, 4081628472), X64Word_create(1508970993, 3053834265), X64Word_create(2453635748, 2937671579), X64Word_create(2870763221, 3664609560), X64Word_create(3624381080, 2734883394), X64Word_create(310598401, 1164996542), X64Word_create(607225278, 1323610764), X64Word_create(1426881987, 3590304994), X64Word_create(1925078388, 4068182383), X64Word_create(2162078206, 991336113), X64Word_create(2614888103, 633803317), X64Word_create(3248222580, 3479774868), X64Word_create(3835390401, 2666613458), X64Word_create(4022224774, 944711139), X64Word_create(264347078, 2341262773), X64Word_create(604807628, 2007800933), X64Word_create(770255983, 1495990901), X64Word_create(1249150122, 1856431235), X64Word_create(1555081692, 3175218132), X64Word_create(1996064986, 2198950837), X64Word_create(2554220882, 3999719339), X64Word_create(2821834349, 766784016), X64Word_create(2952996808, 2566594879), X64Word_create(3210313671, 3203337956), X64Word_create(3336571891, 1034457026), X64Word_create(3584528711, 2466948901), X64Word_create(113926993, 3758326383), X64Word_create(338241895, 168717936), X64Word_create(666307205, 1188179964), X64Word_create(773529912, 1546045734), X64Word_create(1294757372, 1522805485), X64Word_create(1396182291, 2643833823), X64Word_create(1695183700, 2343527390), X64Word_create(1986661051, 1014477480), X64Word_create(2177026350, 1206759142), X64Word_create(2456956037, 344077627), X64Word_create(2730485921, 1290863460), X64Word_create(2820302411, 3158454273), X64Word_create(3259730800, 3505952657), X64Word_create(3345764771, 106217008), X64Word_create(3516065817, 3606008344), X64Word_create(3600352804, 1432725776), X64Word_create(4094571909, 1467031594), X64Word_create(275423344, 851169720), X64Word_create(430227734, 3100823752), X64Word_create(506948616, 1363258195), X64Word_create(659060556, 3750685593), X64Word_create(883997877, 3785050280), X64Word_create(958139571, 3318307427), X64Word_create(1322822218, 3812723403), X64Word_create(1537002063, 2003034995), X64Word_create(1747873779, 3602036899), X64Word_create(1955562222, 1575990012), X64Word_create(2024104815, 1125592928), X64Word_create(2227730452, 2716904306), X64Word_create(2361852424, 442776044), X64Word_create(2428436474, 593698344), X64Word_create(2756734187, 3733110249), X64Word_create(3204031479, 2999351573), X64Word_create(3329325298, 3815920427), X64Word_create(3391569614, 3928383900), X64Word_create(3515267271, 566280711), X64Word_create(3940187606, 3454069534), X64Word_create(4118630271, 4000239992), X64Word_create(116418474, 1914138554), X64Word_create(174292421, 2731055270), X64Word_create(289380356, 3203993006), X64Word_create(460393269, 320620315), X64Word_create(685471733, 587496836), X64Word_create(852142971, 1086792851), X64Word_create(1017036298, 365543100), X64Word_create(1126000580, 2618297676), X64Word_create(1288033470, 3409855158), X64Word_create(1501505948, 4234509866), X64Word_create(1607167915, 987167468), X64Word_create(1816402316, 1246189591) ]; var W = []; (function() { for (var i = 0; i < 80; i++) { W[i] = X64Word_create(); } })(); var SHA512 = C_algo.SHA512 = Hasher.extend({ _doReset: function() { this._hash = new X64WordArray.init([ new X64Word.init(1779033703, 4089235720), new X64Word.init(3144134277, 2227873595), new X64Word.init(1013904242, 4271175723), new X64Word.init(2773480762, 1595750129), new X64Word.init(1359893119, 2917565137), new X64Word.init(2600822924, 725511199), new X64Word.init(528734635, 4215389547), new X64Word.init(1541459225, 327033209) ]); }, _doProcessBlock: function(M, offset) { var H = this._hash.words; var H0 = H[0]; var H1 = H[1]; var H2 = H[2]; var H3 = H[3]; var H4 = H[4]; var H5 = H[5]; var H6 = H[6]; var H7 = H[7]; var H0h = H0.high; var H0l = H0.low; var H1h = H1.high; var H1l = H1.low; var H2h = H2.high; var H2l = H2.low; var H3h = H3.high; var H3l = H3.low; var H4h = H4.high; var H4l = H4.low; var H5h = H5.high; var H5l = H5.low; var H6h = H6.high; var H6l = H6.low; var H7h = H7.high; var H7l = H7.low; var ah = H0h; var al = H0l; var bh = H1h; var bl = H1l; var ch = H2h; var cl = H2l; var dh = H3h; var dl = H3l; var eh = H4h; var el = H4l; var fh = H5h; var fl = H5l; var gh = H6h; var gl = H6l; var hh = H7h; var hl = H7l; for (var i = 0; i < 80; i++) { var Wil; var Wih; var Wi = W[i]; if (i < 16) { Wih = Wi.high = M[offset + i * 2] | 0; Wil = Wi.low = M[offset + i * 2 + 1] | 0; } else { var gamma0x = W[i - 15]; var gamma0xh = gamma0x.high; var gamma0xl = gamma0x.low; var gamma0h = (gamma0xh >>> 1 | gamma0xl << 31) ^ (gamma0xh >>> 8 | gamma0xl << 24) ^ gamma0xh >>> 7; var gamma0l = (gamma0xl >>> 1 | gamma0xh << 31) ^ (gamma0xl >>> 8 | gamma0xh << 24) ^ (gamma0xl >>> 7 | gamma0xh << 25); var gamma1x = W[i - 2]; var gamma1xh = gamma1x.high; var gamma1xl = gamma1x.low; var gamma1h = (gamma1xh >>> 19 | gamma1xl << 13) ^ (gamma1xh << 3 | gamma1xl >>> 29) ^ gamma1xh >>> 6; var gamma1l = (gamma1xl >>> 19 | gamma1xh << 13) ^ (gamma1xl << 3 | gamma1xh >>> 29) ^ (gamma1xl >>> 6 | gamma1xh << 26); var Wi7 = W[i - 7]; var Wi7h = Wi7.high; var Wi7l = Wi7.low; var Wi16 = W[i - 16]; var Wi16h = Wi16.high; var Wi16l = Wi16.low; Wil = gamma0l + Wi7l; Wih = gamma0h + Wi7h + (Wil >>> 0 < gamma0l >>> 0 ? 1 : 0); Wil = Wil + gamma1l; Wih = Wih + gamma1h + (Wil >>> 0 < gamma1l >>> 0 ? 1 : 0); Wil = Wil + Wi16l; Wih = Wih + Wi16h + (Wil >>> 0 < Wi16l >>> 0 ? 1 : 0); Wi.high = Wih; Wi.low = Wil; } var chh = eh & fh ^ ~eh & gh; var chl = el & fl ^ ~el & gl; var majh = ah & bh ^ ah & ch ^ bh & ch; var majl = al & bl ^ al & cl ^ bl & cl; var sigma0h = (ah >>> 28 | al << 4) ^ (ah << 30 | al >>> 2) ^ (ah << 25 | al >>> 7); var sigma0l = (al >>> 28 | ah << 4) ^ (al << 30 | ah >>> 2) ^ (al << 25 | ah >>> 7); var sigma1h = (eh >>> 14 | el << 18) ^ (eh >>> 18 | el << 14) ^ (eh << 23 | el >>> 9); var sigma1l = (el >>> 14 | eh << 18) ^ (el >>> 18 | eh << 14) ^ (el << 23 | eh >>> 9); var Ki = K[i]; var Kih = Ki.high; var Kil = Ki.low; var t1l = hl + sigma1l; var t1h = hh + sigma1h + (t1l >>> 0 < hl >>> 0 ? 1 : 0); var t1l = t1l + chl; var t1h = t1h + chh + (t1l >>> 0 < chl >>> 0 ? 1 : 0); var t1l = t1l + Kil; var t1h = t1h + Kih + (t1l >>> 0 < Kil >>> 0 ? 1 : 0); var t1l = t1l + Wil; var t1h = t1h + Wih + (t1l >>> 0 < Wil >>> 0 ? 1 : 0); var t2l = sigma0l + majl; var t2h = sigma0h + majh + (t2l >>> 0 < sigma0l >>> 0 ? 1 : 0); hh = gh; hl = gl; gh = fh; gl = fl; fh = eh; fl = el; el = dl + t1l | 0; eh = dh + t1h + (el >>> 0 < dl >>> 0 ? 1 : 0) | 0; dh = ch; dl = cl; ch = bh; cl = bl; bh = ah; bl = al; al = t1l + t2l | 0; ah = t1h + t2h + (al >>> 0 < t1l >>> 0 ? 1 : 0) | 0; } H0l = H0.low = H0l + al; H0.high = H0h + ah + (H0l >>> 0 < al >>> 0 ? 1 : 0); H1l = H1.low = H1l + bl; H1.high = H1h + bh + (H1l >>> 0 < bl >>> 0 ? 1 : 0); H2l = H2.low = H2l + cl; H2.high = H2h + ch + (H2l >>> 0 < cl >>> 0 ? 1 : 0); H3l = H3.low = H3l + dl; H3.high = H3h + dh + (H3l >>> 0 < dl >>> 0 ? 1 : 0); H4l = H4.low = H4l + el; H4.high = H4h + eh + (H4l >>> 0 < el >>> 0 ? 1 : 0); H5l = H5.low = H5l + fl; H5.high = H5h + fh + (H5l >>> 0 < fl >>> 0 ? 1 : 0); H6l = H6.low = H6l + gl; H6.high = H6h + gh + (H6l >>> 0 < gl >>> 0 ? 1 : 0); H7l = H7.low = H7l + hl; H7.high = H7h + hh + (H7l >>> 0 < hl >>> 0 ? 1 : 0); }, _doFinalize: function() { var data = this._data; var dataWords = data.words; var nBitsTotal = this._nDataBytes * 8; var nBitsLeft = data.sigBytes * 8; dataWords[nBitsLeft >>> 5] |= 128 << 24 - nBitsLeft % 32; dataWords[(nBitsLeft + 128 >>> 10 << 5) + 30] = Math.floor(nBitsTotal / 4294967296); dataWords[(nBitsLeft + 128 >>> 10 << 5) + 31] = nBitsTotal; data.sigBytes = dataWords.length * 4; this._process(); var hash = this._hash.toX32(); return hash; }, clone: function() { var clone = Hasher.clone.call(this); clone._hash = this._hash.clone(); return clone; }, blockSize: 1024 / 32 }); C.SHA512 = Hasher._createHelper(SHA512); C.HmacSHA512 = Hasher._createHmacHelper(SHA512); })(); return CryptoJS.SHA512; }); })(sha512); return sha512.exports; } var sha384 = { exports: {} }; var hasRequiredSha384; function requireSha384() { if (hasRequiredSha384) return sha384.exports; hasRequiredSha384 = 1; (function(module, exports) { (function(root, factory, undef) { { module.exports = factory(requireCore(), requireX64Core(), requireSha512()); } })(commonjsGlobal, function(CryptoJS) { (function() { var C = CryptoJS; var C_x64 = C.x64; var X64Word = C_x64.Word; var X64WordArray = C_x64.WordArray; var C_algo = C.algo; var SHA512 = C_algo.SHA512; var SHA384 = C_algo.SHA384 = SHA512.extend({ _doReset: function() { this._hash = new X64WordArray.init([ new X64Word.init(3418070365, 3238371032), new X64Word.init(1654270250, 914150663), new X64Word.init(2438529370, 812702999), new X64Word.init(355462360, 4144912697), new X64Word.init(1731405415, 4290775857), new X64Word.init(2394180231, 1750603025), new X64Word.init(3675008525, 1694076839), new X64Word.init(1203062813, 3204075428) ]); }, _doFinalize: function() { var hash = SHA512._doFinalize.call(this); hash.sigBytes -= 16; return hash; } }); C.SHA384 = SHA512._createHelper(SHA384); C.HmacSHA384 = SHA512._createHmacHelper(SHA384); })(); return CryptoJS.SHA384; }); })(sha384); return sha384.exports; } var sha3 = { exports: {} }; var hasRequiredSha3; function requireSha3() { if (hasRequiredSha3) return sha3.exports; hasRequiredSha3 = 1; (function(module, exports) { (function(root, factory, undef) { { module.exports = factory(requireCore(), requireX64Core()); } })(commonjsGlobal, function(CryptoJS) { (function(Math2) { var C = CryptoJS; var C_lib = C.lib; var WordArray = C_lib.WordArray; var Hasher = C_lib.Hasher; var C_x64 = C.x64; var X64Word = C_x64.Word; var C_algo = C.algo; var RHO_OFFSETS = []; var PI_INDEXES = []; var ROUND_CONSTANTS = []; (function() { var x = 1, y = 0; for (var t = 0; t < 24; t++) { RHO_OFFSETS[x + 5 * y] = (t + 1) * (t + 2) / 2 % 64; var newX = y % 5; var newY = (2 * x + 3 * y) % 5; x = newX; y = newY; } for (var x = 0; x < 5; x++) { for (var y = 0; y < 5; y++) { PI_INDEXES[x + 5 * y] = y + (2 * x + 3 * y) % 5 * 5; } } var LFSR = 1; for (var i = 0; i < 24; i++) { var roundConstantMsw = 0; var roundConstantLsw = 0; for (var j = 0; j < 7; j++) { if (LFSR & 1) { var bitPosition = (1 << j) - 1; if (bitPosition < 32) { roundConstantLsw ^= 1 << bitPosition; } else { roundConstantMsw ^= 1 << bitPosition - 32; } } if (LFSR & 128) { LFSR = LFSR << 1 ^ 113; } else { LFSR <<= 1; } } ROUND_CONSTANTS[i] = X64Word.create(roundConstantMsw, roundConstantLsw); } })(); var T = []; (function() { for (var i = 0; i < 25; i++) { T[i] = X64Word.create(); } })(); var SHA3 = C_algo.SHA3 = Hasher.extend({ /** * Configuration options. * * @property {number} outputLength * The desired number of bits in the output hash. * Only values permitted are: 224, 256, 384, 512. * Default: 512 */ cfg: Hasher.cfg.extend({ outputLength: 512 }), _doReset: function() { var state = this._state = []; for (var i = 0; i < 25; i++) { state[i] = new X64Word.init(); } this.blockSize = (1600 - 2 * this.cfg.outputLength) / 32; }, _doProcessBlock: function(M, offset) { var state = this._state; var nBlockSizeLanes = this.blockSize / 2; for (var i = 0; i < nBlockSizeLanes; i++) { var M2i = M[offset + 2 * i]; var M2i1 = M[offset + 2 * i + 1]; M2i = (M2i << 8 | M2i >>> 24) & 16711935 | (M2i << 24 | M2i >>> 8) & 4278255360; M2i1 = (M2i1 << 8 | M2i1 >>> 24) & 16711935 | (M2i1 << 24 | M2i1 >>> 8) & 4278255360; var lane = state[i]; lane.high ^= M2i1; lane.low ^= M2i; } for (var round = 0; round < 24; round++) { for (var x = 0; x < 5; x++) { var tMsw = 0, tLsw = 0; for (var y = 0; y < 5; y++) { var lane = state[x + 5 * y]; tMsw ^= lane.high; tLsw ^= lane.low; } var Tx = T[x]; Tx.high = tMsw; Tx.low = tLsw; } for (var x = 0; x < 5; x++) { var Tx4 = T[(x + 4) % 5]; var Tx1 = T[(x + 1) % 5]; var Tx1Msw = Tx1.high; var Tx1Lsw = Tx1.low; var tMsw = Tx4.high ^ (Tx1Msw << 1 | Tx1Lsw >>> 31); var tLsw = Tx4.low ^ (Tx1Lsw << 1 | Tx1Msw >>> 31); for (var y = 0; y < 5; y++) { var lane = state[x + 5 * y]; lane.high ^= tMsw; lane.low ^= tLsw; } } for (var laneIndex = 1; laneIndex < 25; laneIndex++) { var tMsw; var tLsw; var lane = state[laneIndex]; var laneMsw = lane.high; var laneLsw = lane.low; var rhoOffset = RHO_OFFSETS[laneIndex]; if (rhoOffset < 32) { tMsw = laneMsw << rhoOffset | laneLsw >>> 32 - rhoOffset; tLsw = laneLsw << rhoOffset | laneMsw >>> 32 - rhoOffset; } else { tMsw = laneLsw << rhoOffset - 32 | laneMsw >>> 64 - rhoOffset; tLsw = laneMsw << rhoOffset - 32 | laneLsw >>> 64 - rhoOffset; } var TPiLane = T[PI_INDEXES[laneIndex]]; TPiLane.high = tMsw; TPiLane.low = tLsw; } var T0 = T[0]; var state0 = state[0]; T0.high = state0.high; T0.low = state0.low; for (var x = 0; x < 5; x++) { for (var y = 0; y < 5; y++) { var laneIndex = x + 5 * y; var lane = state[laneIndex]; var TLane = T[laneIndex]; var Tx1Lane = T[(x + 1) % 5 + 5 * y]; var Tx2Lane = T[(x + 2) % 5 + 5 * y]; lane.high = TLane.high ^ ~Tx1Lane.high & Tx2Lane.high; lane.low = TLane.low ^ ~Tx1Lane.low & Tx2Lane.low; } } var lane = state[0]; var roundConstant = ROUND_CONSTANTS[round]; lane.high ^= roundConstant.high; lane.low ^= roundConstant.low; } }, _doFinalize: function() { var data = this._data; var dataWords = data.words; this._nDataBytes * 8; var nBitsLeft = data.sigBytes * 8; var blockSizeBits = this.blockSize * 32; dataWords[nBitsLeft >>> 5] |= 1 << 24 - nBitsLeft % 32; dataWords[(Math2.ceil((nBitsLeft + 1) / blockSizeBits) * blockSizeBits >>> 5) - 1] |= 128; data.sigBytes = dataWords.length * 4; this._process(); var state = this._state; var outputLengthBytes = this.cfg.outputLength / 8; var outputLengthLanes = outputLengthBytes / 8; var hashWords = []; for (var i = 0; i < outputLengthLanes; i++) { var lane = state[i]; var laneMsw = lane.high; var laneLsw = lane.low; laneMsw = (laneMsw << 8 | laneMsw >>> 24) & 16711935 | (laneMsw << 24 | laneMsw >>> 8) & 4278255360; laneLsw = (laneLsw << 8 | laneLsw >>> 24) & 16711935 | (laneLsw << 24 | laneLsw >>> 8) & 4278255360; hashWords.push(laneLsw); hashWords.push(laneMsw); } return new WordArray.init(hashWords, outputLengthBytes); }, clone: function() { var clone = Hasher.clone.call(this); var state = clone._state = this._state.slice(0); for (var i = 0; i < 25; i++) { state[i] = state[i].clone(); } return clone; } }); C.SHA3 = Hasher._createHelper(SHA3); C.HmacSHA3 = Hasher._createHmacHelper(SHA3); })(Math); return CryptoJS.SHA3; }); })(sha3); return sha3.exports; } var ripemd160 = { exports: {} }; var hasRequiredRipemd160; function requireRipemd160() { if (hasRequiredRipemd160) return ripemd160.exports; hasRequiredRipemd160 = 1; (function(module, exports) { (function(root, factory) { { module.exports = factory(requireCore()); } })(commonjsGlobal, function(CryptoJS) { /** @preserve (c) 2012 by Cédric Mesnil. All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: - Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. - Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ (function(Math2) { var C = CryptoJS; var C_lib = C.lib; var WordArray = C_lib.WordArray; var Hasher = C_lib.Hasher; var C_algo = C.algo; var _zl = WordArray.create([ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 7, 4, 13, 1, 10, 6, 15, 3, 12, 0, 9, 5, 2, 14, 11, 8, 3, 10, 14, 4, 9, 15, 8, 1, 2, 7, 0, 6, 13, 11, 5, 12, 1, 9, 11, 10, 0, 8, 12, 4, 13, 3, 7, 15, 14, 5, 6, 2, 4, 0, 5, 9, 7, 12, 2, 10, 14, 1, 3, 8, 11, 6, 15, 13 ]); var _zr = WordArray.create([ 5, 14, 7, 0, 9, 2, 11, 4, 13, 6, 15, 8, 1, 10, 3, 12, 6, 11, 3, 7, 0, 13, 5, 10, 14, 15, 8, 12, 4, 9, 1, 2, 15, 5, 1, 3, 7, 14, 6, 9, 11, 8, 12, 2, 10, 0, 4, 13, 8, 6, 4, 1, 3, 11, 15, 0, 5, 12, 2, 13, 9, 7, 10, 14, 12, 15, 10, 4, 1, 5, 8, 7, 6, 2, 13, 14, 0, 3, 9, 11 ]); var _sl = WordArray.create([ 11, 14, 15, 12, 5, 8, 7, 9, 11, 13, 14, 15, 6, 7, 9, 8, 7, 6, 8, 13, 11, 9, 7, 15, 7, 12, 15, 9, 11, 7, 13, 12, 11, 13, 6, 7, 14, 9, 13, 15, 14, 8, 13, 6, 5, 12, 7, 5, 11, 12, 14, 15, 14, 15, 9, 8, 9, 14, 5, 6, 8, 6, 5, 12, 9, 15, 5, 11, 6, 8, 13, 12, 5, 12, 13, 14, 11, 8, 5, 6 ]); var _sr = WordArray.create([ 8, 9, 9, 11, 13, 15, 15, 5, 7, 7, 8, 11, 14, 14, 12, 6, 9, 13, 15, 7, 12, 8, 9, 11, 7, 7, 12, 7, 6, 15, 13, 11, 9, 7, 15, 11, 8, 6, 6, 14, 12, 13, 5, 14, 13, 13, 7, 5, 15, 5, 8, 11, 14, 14, 6, 14, 6, 9, 12, 9, 12, 5, 15, 8, 8, 5, 12, 9, 12, 5, 14, 6, 8, 13, 6, 5, 15, 13, 11, 11 ]); var _hl = WordArray.create([0, 1518500249, 1859775393, 2400959708, 2840853838]); var _hr = WordArray.create([1352829926, 1548603684, 1836072691, 2053994217, 0]); var RIPEMD160 = C_algo.RIPEMD160 = Hasher.extend({ _doReset: function() { this._hash = WordArray.create([1732584193, 4023233417, 2562383102, 271733878, 3285377520]); }, _doProcessBlock: function(M, offset) { for (var i = 0; i < 16; i++) { var offset_i = offset + i; var M_offset_i = M[offset_i]; M[offset_i] = (M_offset_i << 8 | M_offset_i >>> 24) & 16711935 | (M_offset_i << 24 | M_offset_i >>> 8) & 4278255360; } var H = this._hash.words; var hl = _hl.words; var hr = _hr.words; var zl = _zl.words; var zr = _zr.words; var sl = _sl.words; var sr = _sr.words; var al, bl, cl, dl, el; var ar, br, cr, dr, er; ar = al = H[0]; br = bl = H[1]; cr = cl = H[2]; dr = dl = H[3]; er = el = H[4]; var t; for (var i = 0; i < 80; i += 1) { t = al + M[offset + zl[i]] | 0; if (i < 16) { t += f1(bl, cl, dl) + hl[0]; } else if (i < 32) { t += f2(bl, cl, dl) + hl[1]; } else if (i < 48) { t += f3(bl, cl, dl) + hl[2]; } else if (i < 64) { t += f4(bl, cl, dl) + hl[3]; } else { t += f5(bl, cl, dl) + hl[4]; } t = t | 0; t = rotl(t, sl[i]); t = t + el | 0; al = el; el = dl; dl = rotl(cl, 10); cl = bl; bl = t; t = ar + M[offset + zr[i]] | 0; if (i < 16) { t += f5(br, cr, dr) + hr[0]; } else if (i < 32) { t += f4(br, cr, dr) + hr[1]; } else if (i < 48) { t += f3(br, cr, dr) + hr[2]; } else if (i < 64) { t += f2(br, cr, dr) + hr[3]; } else { t += f1(br, cr, dr) + hr[4]; } t = t | 0; t = rotl(t, sr[i]); t = t + er | 0; ar = er; er = dr; dr = rotl(cr, 10); cr = br; br = t; } t = H[1] + cl + dr | 0; H[1] = H[2] + dl + er | 0; H[2] = H[3] + el + ar | 0; H[3] = H[4] + al + br | 0; H[4] = H[0] + bl + cr | 0; H[0] = t; }, _doFinalize: function() { var data = this._data; var dataWords = data.words; var nBitsTotal = this._nDataBytes * 8; var nBitsLeft = data.sigBytes * 8; dataWords[nBitsLeft >>> 5] |= 128 << 24 - nBitsLeft % 32; dataWords[(nBitsLeft + 64 >>> 9 << 4) + 14] = (nBitsTotal << 8 | nBitsTotal >>> 24) & 16711935 | (nBitsTotal << 24 | nBitsTotal >>> 8) & 4278255360; data.sigBytes = (dataWords.length + 1) * 4; this._process(); var hash = this._hash; var H = hash.words; for (var i = 0; i < 5; i++) { var H_i = H[i]; H[i] = (H_i << 8 | H_i >>> 24) & 16711935 | (H_i << 24 | H_i >>> 8) & 4278255360; } return hash; }, clone: function() { var clone = Hasher.clone.call(this); clone._hash = this._hash.clone(); return clone; } }); function f1(x, y, z) { return x ^ y ^ z; } function f2(x, y, z) { return x & y | ~x & z; } function f3(x, y, z) { return (x | ~y) ^ z; } function f4(x, y, z) { return x & z | y & ~z; } function f5(x, y, z) { return x ^ (y | ~z); } function rotl(x, n2) { return x << n2 | x >>> 32 - n2; } C.RIPEMD160 = Hasher._createHelper(RIPEMD160); C.HmacRIPEMD160 = Hasher._createHmacHelper(RIPEMD160); })(); return CryptoJS.RIPEMD160; }); })(ripemd160); return ripemd160.exports; } var hmac = { exports: {} }; var hasRequiredHmac; function requireHmac() { if (hasRequiredHmac) return hmac.exports; hasRequiredHmac = 1; (function(module, exports) { (function(root, factory) { { module.exports = factory(requireCore()); } })(commonjsGlobal, function(CryptoJS) { (function() { var C = CryptoJS; var C_lib = C.lib; var Base = C_lib.Base; var C_enc = C.enc; var Utf8 = C_enc.Utf8; var C_algo = C.algo; C_algo.HMAC = Base.extend({ /** * Initializes a newly created HMAC. * * @param {Hasher} hasher The hash algorithm to use. * @param {WordArray|string} key The secret key. * * @example * * var hmacHasher = CryptoJS.algo.HMAC.create(CryptoJS.algo.SHA256, key); */ init: function(hasher, key) { hasher = this._hasher = new hasher.init(); if (typeof key == "string") { key = Utf8.parse(key); } var hasherBlockSize = hasher.blockSize; var hasherBlockSizeBytes = hasherBlockSize * 4; if (key.sigBytes > hasherBlockSizeBytes) { key = hasher.finalize(key); } key.clamp(); var oKey = this._oKey = key.clone(); var iKey = this._iKey = key.clone(); var oKeyWords = oKey.words; var iKeyWords = iKey.words; for (var i = 0; i < hasherBlockSize; i++) { oKeyWords[i] ^= 1549556828; iKeyWords[i] ^= 909522486; } oKey.sigBytes = iKey.sigBytes = hasherBlockSizeBytes; this.reset(); }, /** * Resets this HMAC to its initial state. * * @example * * hmacHasher.reset(); */ reset: function() { var hasher = this._hasher; hasher.reset(); hasher.update(this._iKey); }, /** * Updates this HMAC with a message. * * @param {WordArray|string} messageUpdate The message to append. * * @return {HMAC} This HMAC instance. * * @example * * hmacHasher.update('message'); * hmacHasher.update(wordArray); */ update: function(messageUpdate) { this._hasher.update(messageUpdate); return this; }, /** * Finalizes the HMAC computation. * Note that the finalize operation is effectively a destructive, read-once operation. * * @param {WordArray|string} messageUpdate (Optional) A final message update. * * @return {WordArray} The HMAC. * * @example * * var hmac = hmacHasher.finalize(); * var hmac = hmacHasher.finalize('message'); * var hmac = hmacHasher.finalize(wordArray); */ finalize: function(messageUpdate) { var hasher = this._hasher; var innerHash = hasher.finalize(messageUpdate); hasher.reset(); var hmac2 = hasher.finalize(this._oKey.clone().concat(innerHash)); return hmac2; } }); })(); }); })(hmac); return hmac.exports; } var pbkdf2 = { exports: {} }; var hasRequiredPbkdf2; function requirePbkdf2() { if (hasRequiredPbkdf2) return pbkdf2.exports; hasRequiredPbkdf2 = 1; (function(module, exports) { (function(root, factory, undef) { { module.exports = factory(requireCore(), requireSha256(), requireHmac()); } })(commonjsGlobal, function(CryptoJS) { (function() { var C = CryptoJS; var C_lib = C.lib; var Base = C_lib.Base; var WordArray = C_lib.WordArray; var C_algo = C.algo; var SHA256 = C_algo.SHA256; var HMAC = C_algo.HMAC; var PBKDF2 = C_algo.PBKDF2 = Base.extend({ /** * Configuration options. * * @property {number} keySize The key size in words to generate. Default: 4 (128 bits) * @property {Hasher} hasher The hasher to use. Default: SHA256 * @property {number} iterations The number of iterations to perform. Default: 250000 */ cfg: Base.extend({ keySize: 128 / 32, hasher: SHA256, iterations: 25e4 }), /** * Initializes a newly created key derivation function. * * @param {Object} cfg (Optional) The configuration options to use for the derivation. * * @example * * var kdf = CryptoJS.algo.PBKDF2.create(); * var kdf = CryptoJS.algo.PBKDF2.create({ keySize: 8 }); * var kdf = CryptoJS.algo.PBKDF2.create({ keySize: 8, iterations: 1000 }); */ init: function(cfg) { this.cfg = this.cfg.extend(cfg); }, /** * Computes the Password-Based Key Derivation Function 2. * * @param {WordArray|string} password The password. * @param {WordArray|string} salt A salt. * * @return {WordArray} The derived key. * * @example * * var key = kdf.compute(password, salt); */ compute: function(password, salt) { var cfg = this.cfg; var hmac2 = HMAC.create(cfg.hasher, password); var derivedKey = WordArray.create(); var blockIndex = WordArray.create([1]); var derivedKeyWords = derivedKey.words; var blockIndexWords = blockIndex.words; var keySize = cfg.keySize; var iterations = cfg.iterations; while (derivedKeyWords.length < keySize) { var block = hmac2.update(salt).finalize(blockIndex); hmac2.reset(); var blockWords = block.words; var blockWordsLength = blockWords.length; var intermediate = block; for (var i = 1; i < iterations; i++) { intermediate = hmac2.finalize(intermediate); hmac2.reset(); var intermediateWords = intermediate.words; for (var j = 0; j < blockWordsLength; j++) { blockWords[j] ^= intermediateWords[j]; } } derivedKey.concat(block); blockIndexWords[0]++; } derivedKey.sigBytes = keySize * 4; return derivedKey; } }); C.PBKDF2 = function(password, salt, cfg) { return PBKDF2.create(cfg).compute(password, salt); }; })(); return CryptoJS.PBKDF2; }); })(pbkdf2); return pbkdf2.exports; } var evpkdf = { exports: {} }; var hasRequiredEvpkdf; function requireEvpkdf() { if (hasRequiredEvpkdf) return evpkdf.exports; hasRequiredEvpkdf = 1; (function(module, exports) { (function(root, factory, undef) { { module.exports = factory(requireCore(), requireSha1(), requireHmac()); } })(commonjsGlobal, function(CryptoJS) { (function() { var C = CryptoJS; var C_lib = C.lib; var Base = C_lib.Base; var WordArray = C_lib.WordArray; var C_algo = C.algo; var MD5 = C_algo.MD5; var EvpKDF = C_algo.EvpKDF = Base.extend({ /** * Configuration options. * * @property {number} keySize The key size in words to generate. Default: 4 (128 bits) * @property {Hasher} hasher The hash algorithm to use. Default: MD5 * @property {number} iterations The number of iterations to perform. Default: 1 */ cfg: Base.extend({ keySize: 128 / 32, hasher: MD5, iterations: 1 }), /** * Initializes a newly created key derivation function. * * @param {Object} cfg (Optional) The configuration options to use for the derivation. * * @example * * var kdf = CryptoJS.algo.EvpKDF.create(); * var kdf = CryptoJS.algo.EvpKDF.create({ keySize: 8 }); * var kdf = CryptoJS.algo.EvpKDF.create({ keySize: 8, iterations: 1000 }); */ init: function(cfg) { this.cfg = this.cfg.extend(cfg); }, /** * Derives a key from a password. * * @param {WordArray|string} password The password. * @param {WordArray|string} salt A salt. * * @return {WordArray} The derived key. * * @example * * var key = kdf.compute(password, salt); */ compute: function(password, salt) { var block; var cfg = this.cfg; var hasher = cfg.hasher.create(); var derivedKey = WordArray.create(); var derivedKeyWords = derivedKey.words; var keySize = cfg.keySize; var iterations = cfg.iterations; while (derivedKeyWords.length < keySize) { if (block) { hasher.update(block); } block = hasher.update(password).finalize(salt); hasher.reset(); for (var i = 1; i < iterations; i++) { block = hasher.finalize(block); hasher.reset(); } derivedKey.concat(block); } derivedKey.sigBytes = keySize * 4; return derivedKey; } }); C.EvpKDF = function(password, salt, cfg) { return EvpKDF.create(cfg).compute(password, salt); }; })(); return CryptoJS.EvpKDF; }); })(evpkdf); return evpkdf.exports; } var cipherCore = { exports: {} }; var hasRequiredCipherCore; function requireCipherCore() { if (hasRequiredCipherCore) return cipherCore.exports; hasRequiredCipherCore = 1; (function(module, exports) { (function(root, factory, undef) { { module.exports = factory(requireCore(), requireEvpkdf()); } })(commonjsGlobal, function(CryptoJS) { CryptoJS.lib.Cipher || function(undefined$1) { var C = CryptoJS; var C_lib = C.lib; var Base = C_lib.Base; var WordArray = C_lib.WordArray; var BufferedBlockAlgorithm = C_lib.BufferedBlockAlgorithm; var C_enc = C.enc; C_enc.Utf8; var Base642 = C_enc.Base64; var C_algo = C.algo; var EvpKDF = C_algo.EvpKDF; var Cipher = C_lib.Cipher = BufferedBlockAlgorithm.extend({ /** * Configuration options. * * @property {WordArray} iv The IV to use for this operation. */ cfg: Base.extend(), /** * Creates this cipher in encryption mode. * * @param {WordArray} key The key. * @param {Object} cfg (Optional) The configuration options to use for this operation. * * @return {Cipher} A cipher instance. * * @static * * @example * * var cipher = CryptoJS.algo.AES.createEncryptor(keyWordArray, { iv: ivWordArray }); */ createEncryptor: function(key, cfg) { return this.create(this._ENC_XFORM_MODE, key, cfg); }, /** * Creates this cipher in decryption mode. * * @param {WordArray} key The key. * @param {Object} cfg (Optional) The configuration options to use for this operation. * * @return {Cipher} A cipher instance. * * @static * * @example * * var cipher = CryptoJS.algo.AES.createDecryptor(keyWordArray, { iv: ivWordArray }); */ createDecryptor: function(key, cfg) { return this.create(this._DEC_XFORM_MODE, key, cfg); }, /** * Initializes a newly created cipher. * * @param {number} xformMode Either the encryption or decryption transormation mode constant. * @param {WordArray} key The key. * @param {Object} cfg (Optional) The configuration options to use for this operation. * * @example * * var cipher = CryptoJS.algo.AES.create(CryptoJS.algo.AES._ENC_XFORM_MODE, keyWordArray, { iv: ivWordArray }); */ init: function(xformMode, key, cfg) { this.cfg = this.cfg.extend(cfg); this._xformMode = xformMode; this._key = key; this.reset(); }, /** * Resets this cipher to its initial state. * * @example * * cipher.reset(); */ reset: function() { BufferedBlockAlgorithm.reset.call(this); this._doReset(); }, /** * Adds data to be encrypted or decrypted. * * @param {WordArray|string} dataUpdate The data to encrypt or decrypt. * * @return {WordArray} The data after processing. * * @example * * var encrypted = cipher.process('data'); * var encrypted = cipher.process(wordArray); */ process: function(dataUpdate) { this._append(dataUpdate); return this._process(); }, /** * Finalizes the encryption or decryption process. * Note that the finalize operation is effectively a destructive, read-once operation. * * @param {WordArray|string} dataUpdate The final data to encrypt or decrypt. * * @return {WordArray} The data after final processing. * * @example * * var encrypted = cipher.finalize(); * var encrypted = cipher.finalize('data'); * var encrypted = cipher.finalize(wordArray); */ finalize: function(dataUpdate) { if (dataUpdate) { this._append(dataUpdate); } var finalProcessedData = this._doFinalize(); return finalProcessedData; }, keySize: 128 / 32, ivSize: 128 / 32, _ENC_XFORM_MODE: 1, _DEC_XFORM_MODE: 2, /** * Creates shortcut functions to a cipher's object interface. * * @param {Cipher} cipher The cipher to create a helper for. * * @return {Object} An object with encrypt and decrypt shortcut functions. * * @static * * @example * * var AES = CryptoJS.lib.Cipher._createHelper(CryptoJS.algo.AES); */ _createHelper: function() { function selectCipherStrategy(key) { if (typeof key == "string") { return PasswordBasedCipher; } else { return SerializableCipher; } } return function(cipher) { return { encrypt: function(message, key, cfg) { return selectCipherStrategy(key).encrypt(cipher, message, key, cfg); }, decrypt: function(ciphertext, key, cfg) { return selectCipherStrategy(key).decrypt(cipher, ciphertext, key, cfg); } }; }; }() }); C_lib.StreamCipher = Cipher.extend({ _doFinalize: function() { var finalProcessedBlocks = this._process(true); return finalProcessedBlocks; }, blockSize: 1 }); var C_mode = C.mode = {}; var BlockCipherMode = C_lib.BlockCipherMode = Base.extend({ /** * Creates this mode for encryption. * * @param {Cipher} cipher A block cipher instance. * @param {Array} iv The IV words. * * @static * * @example * * var mode = CryptoJS.mode.CBC.createEncryptor(cipher, iv.words); */ createEncryptor: function(cipher, iv) { return this.Encryptor.create(cipher, iv); }, /** * Creates this mode for decryption. * * @param {Cipher} cipher A block cipher instance. * @param {Array} iv The IV words. * * @static * * @example * * var mode = CryptoJS.mode.CBC.createDecryptor(cipher, iv.words); */ createDecryptor: function(cipher, iv) { return this.Decryptor.create(cipher, iv); }, /** * Initializes a newly created mode. * * @param {Cipher} cipher A block cipher instance. * @param {Array} iv The IV words. * * @example * * var mode = CryptoJS.mode.CBC.Encryptor.create(cipher, iv.words); */ init: function(cipher, iv) { this._cipher = cipher; this._iv = iv; } }); var CBC = C_mode.CBC = function() { var CBC2 = BlockCipherMode.extend(); CBC2.Encryptor = CBC2.extend({ /** * Processes the data block at offset. * * @param {Array} words The data words to operate on. * @param {number} offset The offset where the block starts. * * @example * * mode.processBlock(data.words, offset); */ processBlock: function(words, offset) { var cipher = this._cipher; var blockSize = cipher.blockSize; xorBlock.call(this, words, offset, blockSize); cipher.encryptBlock(words, offset); this._prevBlock = words.slice(offset, offset + blockSize); } }); CBC2.Decryptor = CBC2.extend({ /** * Processes the data block at offset. * * @param {Array} words The data words to operate on. * @param {number} offset The offset where the block starts. * * @example * * mode.processBlock(data.words, offset); */ processBlock: function(words, offset) { var cipher = this._cipher; var blockSize = cipher.blockSize; var thisBlock = words.slice(offset, offset + blockSize); cipher.decryptBlock(words, offset); xorBlock.call(this, words, offset, blockSize); this._prevBlock = thisBlock; } }); function xorBlock(words, offset, blockSize) { var block; var iv = this._iv; if (iv) { block = iv; this._iv = undefined$1; } else { block = this._prevBlock; } for (var i = 0; i < blockSize; i++) { words[offset + i] ^= block[i]; } } return CBC2; }(); var C_pad = C.pad = {}; var Pkcs7 = C_pad.Pkcs7 = { /** * Pads data using the algorithm defined in PKCS #5/7. * * @param {WordArray} data The data to pad. * @param {number} blockSize The multiple that the data should be padded to. * * @static * * @example * * CryptoJS.pad.Pkcs7.pad(wordArray, 4); */ pad: function(data, blockSize) { var blockSizeBytes = blockSize * 4; var nPaddingBytes = blockSizeBytes - data.sigBytes % blockSizeBytes; var paddingWord = nPaddingBytes << 24 | nPaddingBytes << 16 | nPaddingBytes << 8 | nPaddingBytes; var paddingWords = []; for (var i = 0; i < nPaddingBytes; i += 4) { paddingWords.push(paddingWord); } var padding = WordArray.create(paddingWords, nPaddingBytes); data.concat(padding); }, /** * Unpads data that had been padded using the algorithm defined in PKCS #5/7. * * @param {WordArray} data The data to unpad. * * @static * * @example * * CryptoJS.pad.Pkcs7.unpad(wordArray); */ unpad: function(data) { var nPaddingBytes = data.words[data.sigBytes - 1 >>> 2] & 255; data.sigBytes -= nPaddingBytes; } }; C_lib.BlockCipher = Cipher.extend({ /** * Configuration options. * * @property {Mode} mode The block mode to use. Default: CBC * @property {Padding} padding The padding strategy to use. Default: Pkcs7 */ cfg: Cipher.cfg.extend({ mode: CBC, padding: Pkcs7 }), reset: function() { var modeCreator; Cipher.reset.call(this); var cfg = this.cfg; var iv = cfg.iv; var mode = cfg.mode; if (this._xformMode == this._ENC_XFORM_MODE) { modeCreator = mode.createEncryptor; } else { modeCreator = mode.createDecryptor; this._minBufferSize = 1; } if (this._mode && this._mode.__creator == modeCreator) { this._mode.init(this, iv && iv.words); } else { this._mode = modeCreator.call(mode, this, iv && iv.words); this._mode.__creator = modeCreator; } }, _doProcessBlock: function(words, offset) { this._mode.processBlock(words, offset); }, _doFinalize: function() { var finalProcessedBlocks; var padding = this.cfg.padding; if (this._xformMode == this._ENC_XFORM_MODE) { padding.pad(this._data, this.blockSize); finalProcessedBlocks = this._process(true); } else { finalProcessedBlocks = this._process(true); padding.unpad(finalProcessedBlocks); } return finalProcessedBlocks; }, blockSize: 128 / 32 }); var CipherParams = C_lib.CipherParams = Base.extend({ /** * Initializes a newly created cipher params object. * * @param {Object} cipherParams An object with any of the possible cipher parameters. * * @example * * var cipherParams = CryptoJS.lib.CipherParams.create({ * ciphertext: ciphertextWordArray, * key: keyWordArray, * iv: ivWordArray, * salt: saltWordArray, * algorithm: CryptoJS.algo.AES, * mode: CryptoJS.mode.CBC, * padding: CryptoJS.pad.PKCS7, * blockSize: 4, * formatter: CryptoJS.format.OpenSSL * }); */ init: function(cipherParams) { this.mixIn(cipherParams); }, /** * Converts this cipher params object to a string. * * @param {Format} formatter (Optional) The formatting strategy to use. * * @return {string} The stringified cipher params. * * @throws Error If neither the formatter nor the default formatter is set. * * @example * * var string = cipherParams + ''; * var string = cipherParams.toString(); * var string = cipherParams.toString(CryptoJS.format.OpenSSL); */ toString: function(formatter) { return (formatter || this.formatter).stringify(this); } }); var C_format = C.format = {}; var OpenSSLFormatter = C_format.OpenSSL = { /** * Converts a cipher params object to an OpenSSL-compatible string. * * @param {CipherParams} cipherParams The cipher params object. * * @return {string} The OpenSSL-compatible string. * * @static * * @example * * var openSSLString = CryptoJS.format.OpenSSL.stringify(cipherParams); */ stringify: function(cipherParams) { var wordArray; var ciphertext = cipherParams.ciphertext; var salt = cipherParams.salt; if (salt) { wordArray = WordArray.create([1398893684, 1701076831]).concat(salt).concat(ciphertext); } else { wordArray = ciphertext; } return wordArray.toString(Base642); }, /** * Converts an OpenSSL-compatible string to a cipher params object. * * @param {string} openSSLStr The OpenSSL-compatible string. * * @return {CipherParams} The cipher params object. * * @static * * @example * * var cipherParams = CryptoJS.format.OpenSSL.parse(openSSLString); */ parse: function(openSSLStr) { var salt; var ciphertext = Base642.parse(openSSLStr); var ciphertextWords = ciphertext.words; if (ciphertextWords[0] == 1398893684 && ciphertextWords[1] == 1701076831) { salt = WordArray.create(ciphertextWords.slice(2, 4)); ciphertextWords.splice(0, 4); ciphertext.sigBytes -= 16; } return CipherParams.create({ ciphertext, salt }); } }; var SerializableCipher = C_lib.SerializableCipher = Base.extend({ /** * Configuration options. * * @property {Formatter} format The formatting strategy to convert cipher param objects to and from a string. Default: OpenSSL */ cfg: Base.extend({ format: OpenSSLFormatter }), /** * Encrypts a message. * * @param {Cipher} cipher The cipher algorithm to use. * @param {WordArray|string} message The message to encrypt. * @param {WordArray} key The key. * @param {Object} cfg (Optional) The configuration options to use for this operation. * * @return {CipherParams} A cipher params object. * * @static * * @example * * var ciphertextParams = CryptoJS.lib.SerializableCipher.encrypt(CryptoJS.algo.AES, message, key); * var ciphertextParams = CryptoJS.lib.SerializableCipher.encrypt(CryptoJS.algo.AES, message, key, { iv: iv }); * var ciphertextParams = CryptoJS.lib.SerializableCipher.encrypt(CryptoJS.algo.AES, message, key, { iv: iv, format: CryptoJS.format.OpenSSL }); */ encrypt: function(cipher, message, key, cfg) { cfg = this.cfg.extend(cfg); var encryptor = cipher.createEncryptor(key, cfg); var ciphertext = encryptor.finalize(message); var cipherCfg = encryptor.cfg; return CipherParams.create({ ciphertext, key, iv: cipherCfg.iv, algorithm: cipher, mode: cipherCfg.mode, padding: cipherCfg.padding, blockSize: cipher.blockSize, formatter: cfg.format }); }, /** * Decrypts serialized ciphertext. * * @param {Cipher} cipher The cipher algorithm to use. * @param {CipherParams|string} ciphertext The ciphertext to decrypt. * @param {WordArray} key The key. * @param {Object} cfg (Optional) The configuration options to use for this operation. * * @return {WordArray} The plaintext. * * @static * * @example * * var plaintext = CryptoJS.lib.SerializableCipher.decrypt(CryptoJS.algo.AES, formattedCiphertext, key, { iv: iv, format: CryptoJS.format.OpenSSL }); * var plaintext = CryptoJS.lib.SerializableCipher.decrypt(CryptoJS.algo.AES, ciphertextParams, key, { iv: iv, format: CryptoJS.format.OpenSSL }); */ decrypt: function(cipher, ciphertext, key, cfg) { cfg = this.cfg.extend(cfg); ciphertext = this._parse(ciphertext, cfg.format); var plaintext = cipher.createDecryptor(key, cfg).finalize(ciphertext.ciphertext); return plaintext; }, /** * Converts serialized ciphertext to CipherParams, * else assumed CipherParams already and returns ciphertext unchanged. * * @param {CipherParams|string} ciphertext The ciphertext. * @param {Formatter} format The formatting strategy to use to parse serialized ciphertext. * * @return {CipherParams} The unserialized ciphertext. * * @static * * @example * * var ciphertextParams = CryptoJS.lib.SerializableCipher._parse(ciphertextStringOrParams, format); */ _parse: function(ciphertext, format) { if (typeof ciphertext == "string") { return format.parse(ciphertext, this); } else { return ciphertext; } } }); var C_kdf = C.kdf = {}; var OpenSSLKdf = C_kdf.OpenSSL = { /** * Derives a key and IV from a password. * * @param {string} password The password to derive from. * @param {number} keySize The size in words of the key to generate. * @param {number} ivSize The size in words of the IV to generate. * @param {WordArray|string} salt (Optional) A 64-bit salt to use. If omitted, a salt will be generated randomly. * * @return {CipherParams} A cipher params object with the key, IV, and salt. * * @static * * @example * * var derivedParams = CryptoJS.kdf.OpenSSL.execute('Password', 256/32, 128/32); * var derivedParams = CryptoJS.kdf.OpenSSL.execute('Password', 256/32, 128/32, 'saltsalt'); */ execute: function(password, keySize, ivSize, salt, hasher) { if (!salt) { salt = WordArray.random(64 / 8); } if (!hasher) { var key = EvpKDF.create({ keySize: keySize + ivSize }).compute(password, salt); } else { var key = EvpKDF.create({ keySize: keySize + ivSize, hasher }).compute(password, salt); } var iv = WordArray.create(key.words.slice(keySize), ivSize * 4); key.sigBytes = keySize * 4; return CipherParams.create({ key, iv, salt }); } }; var PasswordBasedCipher = C_lib.PasswordBasedCipher = SerializableCipher.extend({ /** * Configuration options. * * @property {KDF} kdf The key derivation function to use to generate a key and IV from a password. Default: OpenSSL */ cfg: SerializableCipher.cfg.extend({ kdf: OpenSSLKdf }), /** * Encrypts a message using a password. * * @param {Cipher} cipher The cipher algorithm to use. * @param {WordArray|string} message The message to encrypt. * @param {string} password The password. * @param {Object} cfg (Optional) The configuration options to use for this operation. * * @return {CipherParams} A cipher params object. * * @static * * @example * * var ciphertextParams = CryptoJS.lib.PasswordBasedCipher.encrypt(CryptoJS.algo.AES, message, 'password'); * var ciphertextParams = CryptoJS.lib.PasswordBasedCipher.encrypt(CryptoJS.algo.AES, message, 'password', { format: CryptoJS.format.OpenSSL }); */ encrypt: function(cipher, message, password, cfg) { cfg = this.cfg.extend(cfg); var derivedParams = cfg.kdf.execute(password, cipher.keySize, cipher.ivSize, cfg.salt, cfg.hasher); cfg.iv = derivedParams.iv; var ciphertext = SerializableCipher.encrypt.call(this, cipher, message, derivedParams.key, cfg); ciphertext.mixIn(derivedParams); return ciphertext; }, /** * Decrypts serialized ciphertext using a password. * * @param {Cipher} cipher The cipher algorithm to use. * @param {CipherParams|string} ciphertext The ciphertext to decrypt. * @param {string} password The password. * @param {Object} cfg (Optional) The configuration options to use for this operation. * * @return {WordArray} The plaintext. * * @static * * @example * * var plaintext = CryptoJS.lib.PasswordBasedCipher.decrypt(CryptoJS.algo.AES, formattedCiphertext, 'password', { format: CryptoJS.format.OpenSSL }); * var plaintext = CryptoJS.lib.PasswordBasedCipher.decrypt(CryptoJS.algo.AES, ciphertextParams, 'password', { format: CryptoJS.format.OpenSSL }); */ decrypt: function(cipher, ciphertext, password, cfg) { cfg = this.cfg.extend(cfg); ciphertext = this._parse(ciphertext, cfg.format); var derivedParams = cfg.kdf.execute(password, cipher.keySize, cipher.ivSize, ciphertext.salt, cfg.hasher); cfg.iv = derivedParams.iv; var plaintext = SerializableCipher.decrypt.call(this, cipher, ciphertext, derivedParams.key, cfg); return plaintext; } }); }(); }); })(cipherCore); return cipherCore.exports; } var modeCfb = { exports: {} }; var hasRequiredModeCfb; function requireModeCfb() { if (hasRequiredModeCfb) return modeCfb.exports; hasRequiredModeCfb = 1; (function(module, exports) { (function(root, factory, undef) { { module.exports = factory(requireCore(), requireCipherCore()); } })(commonjsGlobal, function(CryptoJS) { CryptoJS.mode.CFB = function() { var CFB = CryptoJS.lib.BlockCipherMode.extend(); CFB.Encryptor = CFB.extend({ processBlock: function(words, offset) { var cipher = this._cipher; var blockSize = cipher.blockSize; generateKeystreamAndEncrypt.call(this, words, offset, blockSize, cipher); this._prevBlock = words.slice(offset, offset + blockSize); } }); CFB.Decryptor = CFB.extend({ processBlock: function(words, offset) { var cipher = this._cipher; var blockSize = cipher.blockSize; var thisBlock = words.slice(offset, offset + blockSize); generateKeystreamAndEncrypt.call(this, words, offset, blockSize, cipher); this._prevBlock = thisBlock; } }); function generateKeystreamAndEncrypt(words, offset, blockSize, cipher) { var keystream; var iv = this._iv; if (iv) { keystream = iv.slice(0); this._iv = void 0; } else { keystream = this._prevBlock; } cipher.encryptBlock(keystream, 0); for (var i = 0; i < blockSize; i++) { words[offset + i] ^= keystream[i]; } } return CFB; }(); return CryptoJS.mode.CFB; }); })(modeCfb); return modeCfb.exports; } var modeCtr = { exports: {} }; var hasRequiredModeCtr; function requireModeCtr() { if (hasRequiredModeCtr) return modeCtr.exports; hasRequiredModeCtr = 1; (function(module, exports) { (function(root, factory, undef) { { module.exports = factory(requireCore(), requireCipherCore()); } })(commonjsGlobal, function(CryptoJS) { CryptoJS.mode.CTR = function() { var CTR = CryptoJS.lib.BlockCipherMode.extend(); var Encryptor = CTR.Encryptor = CTR.extend({ processBlock: function(words, offset) { var cipher = this._cipher; var blockSize = cipher.blockSize; var iv = this._iv; var counter = this._counter; if (iv) { counter = this._counter = iv.slice(0); this._iv = void 0; } var keystream = counter.slice(0); cipher.encryptBlock(keystream, 0); counter[blockSize - 1] = counter[blockSize - 1] + 1 | 0; for (var i = 0; i < blockSize; i++) { words[offset + i] ^= keystream[i]; } } }); CTR.Decryptor = Encryptor; return CTR; }(); return CryptoJS.mode.CTR; }); })(modeCtr); return modeCtr.exports; } var modeCtrGladman = { exports: {} }; var hasRequiredModeCtrGladman; function requireModeCtrGladman() { if (hasRequiredModeCtrGladman) return modeCtrGladman.exports; hasRequiredModeCtrGladman = 1; (function(module, exports) { (function(root, factory, undef) { { module.exports = factory(requireCore(), requireCipherCore()); } })(commonjsGlobal, function(CryptoJS) { /** @preserve * Counter block mode compatible with Dr Brian Gladman fileenc.c * derived from CryptoJS.mode.CTR * Jan Hruby jhruby.web@gmail.com */ CryptoJS.mode.CTRGladman = function() { var CTRGladman = CryptoJS.lib.BlockCipherMode.extend(); function incWord(word) { if ((word >> 24 & 255) === 255) { var b1 = word >> 16 & 255; var b2 = word >> 8 & 255; var b3 = word & 255; if (b1 === 255) { b1 = 0; if (b2 === 255) { b2 = 0; if (b3 === 255) { b3 = 0; } else { ++b3; } } else { ++b2; } } else { ++b1; } word = 0; word += b1 << 16; word += b2 << 8; word += b3; } else { word += 1 << 24; } return word; } function incCounter(counter) { if ((counter[0] = incWord(counter[0])) === 0) { counter[1] = incWord(counter[1]); } return counter; } var Encryptor = CTRGladman.Encryptor = CTRGladman.extend({ processBlock: function(words, offset) { var cipher = this._cipher; var blockSize = cipher.blockSize; var iv = this._iv; var counter = this._counter; if (iv) { counter = this._counter = iv.slice(0); this._iv = void 0; } incCounter(counter); var keystream = counter.slice(0); cipher.encryptBlock(keystream, 0); for (var i = 0; i < blockSize; i++) { words[offset + i] ^= keystream[i]; } } }); CTRGladman.Decryptor = Encryptor; return CTRGladman; }(); return CryptoJS.mode.CTRGladman; }); })(modeCtrGladman); return modeCtrGladman.exports; } var modeOfb = { exports: {} }; var hasRequiredModeOfb; function requireModeOfb() { if (hasRequiredModeOfb) return modeOfb.exports; hasRequiredModeOfb = 1; (function(module, exports) { (function(root, factory, undef) { { module.exports = factory(requireCore(), requireCipherCore()); } })(commonjsGlobal, function(CryptoJS) { CryptoJS.mode.OFB = function() { var OFB = CryptoJS.lib.BlockCipherMode.extend(); var Encryptor = OFB.Encryptor = OFB.extend({ processBlock: function(words, offset) { var cipher = this._cipher; var blockSize = cipher.blockSize; var iv = this._iv; var keystream = this._keystream; if (iv) { keystream = this._keystream = iv.slice(0); this._iv = void 0; } cipher.encryptBlock(keystream, 0); for (var i = 0; i < blockSize; i++) { words[offset + i] ^= keystream[i]; } } }); OFB.Decryptor = Encryptor; return OFB; }(); return CryptoJS.mode.OFB; }); })(modeOfb); return modeOfb.exports; } var modeEcb = { exports: {} }; var hasRequiredModeEcb; function requireModeEcb() { if (hasRequiredModeEcb) return modeEcb.exports; hasRequiredModeEcb = 1; (function(module, exports) { (function(root, factory, undef) { { module.exports = factory(requireCore(), requireCipherCore()); } })(commonjsGlobal, function(CryptoJS) { CryptoJS.mode.ECB = function() { var ECB = CryptoJS.lib.BlockCipherMode.extend(); ECB.Encryptor = ECB.extend({ processBlock: function(words, offset) { this._cipher.encryptBlock(words, offset); } }); ECB.Decryptor = ECB.extend({ processBlock: function(words, offset) { this._cipher.decryptBlock(words, offset); } }); return ECB; }(); return CryptoJS.mode.ECB; }); })(modeEcb); return modeEcb.exports; } var padAnsix923 = { exports: {} }; var hasRequiredPadAnsix923; function requirePadAnsix923() { if (hasRequiredPadAnsix923) return padAnsix923.exports; hasRequiredPadAnsix923 = 1; (function(module, exports) { (function(root, factory, undef) { { module.exports = factory(requireCore(), requireCipherCore()); } })(commonjsGlobal, function(CryptoJS) { CryptoJS.pad.AnsiX923 = { pad: function(data, blockSize) { var dataSigBytes = data.sigBytes; var blockSizeBytes = blockSize * 4; var nPaddingBytes = blockSizeBytes - dataSigBytes % blockSizeBytes; var lastBytePos = dataSigBytes + nPaddingBytes - 1; data.clamp(); data.words[lastBytePos >>> 2] |= nPaddingBytes << 24 - lastBytePos % 4 * 8; data.sigBytes += nPaddingBytes; }, unpad: function(data) { var nPaddingBytes = data.words[data.sigBytes - 1 >>> 2] & 255; data.sigBytes -= nPaddingBytes; } }; return CryptoJS.pad.Ansix923; }); })(padAnsix923); return padAnsix923.exports; } var padIso10126 = { exports: {} }; var hasRequiredPadIso10126; function requirePadIso10126() { if (hasRequiredPadIso10126) return padIso10126.exports; hasRequiredPadIso10126 = 1; (function(module, exports) { (function(root, factory, undef) { { module.exports = factory(requireCore(), requireCipherCore()); } })(commonjsGlobal, function(CryptoJS) { CryptoJS.pad.Iso10126 = { pad: function(data, blockSize) { var blockSizeBytes = blockSize * 4; var nPaddingBytes = blockSizeBytes - data.sigBytes % blockSizeBytes; data.concat(CryptoJS.lib.WordArray.random(nPaddingBytes - 1)).concat(CryptoJS.lib.WordArray.create([nPaddingBytes << 24], 1)); }, unpad: function(data) { var nPaddingBytes = data.words[data.sigBytes - 1 >>> 2] & 255; data.sigBytes -= nPaddingBytes; } }; return CryptoJS.pad.Iso10126; }); })(padIso10126); return padIso10126.exports; } var padIso97971 = { exports: {} }; var hasRequiredPadIso97971; function requirePadIso97971() { if (hasRequiredPadIso97971) return padIso97971.exports; hasRequiredPadIso97971 = 1; (function(module, exports) { (function(root, factory, undef) { { module.exports = factory(requireCore(), requireCipherCore()); } })(commonjsGlobal, function(CryptoJS) { CryptoJS.pad.Iso97971 = { pad: function(data, blockSize) { data.concat(CryptoJS.lib.WordArray.create([2147483648], 1)); CryptoJS.pad.ZeroPadding.pad(data, blockSize); }, unpad: function(data) { CryptoJS.pad.ZeroPadding.unpad(data); data.sigBytes--; } }; return CryptoJS.pad.Iso97971; }); })(padIso97971); return padIso97971.exports; } var padZeropadding = { exports: {} }; var hasRequiredPadZeropadding; function requirePadZeropadding() { if (hasRequiredPadZeropadding) return padZeropadding.exports; hasRequiredPadZeropadding = 1; (function(module, exports) { (function(root, factory, undef) { { module.exports = factory(requireCore(), requireCipherCore()); } })(commonjsGlobal, function(CryptoJS) { CryptoJS.pad.ZeroPadding = { pad: function(data, blockSize) { var blockSizeBytes = blockSize * 4; data.clamp(); data.sigBytes += blockSizeBytes - (data.sigBytes % blockSizeBytes || blockSizeBytes); }, unpad: function(data) { var dataWords = data.words; var i = data.sigBytes - 1; for (var i = data.sigBytes - 1; i >= 0; i--) { if (dataWords[i >>> 2] >>> 24 - i % 4 * 8 & 255) { data.sigBytes = i + 1; break; } } } }; return CryptoJS.pad.ZeroPadding; }); })(padZeropadding); return padZeropadding.exports; } var padNopadding = { exports: {} }; var hasRequiredPadNopadding; function requirePadNopadding() { if (hasRequiredPadNopadding) return padNopadding.exports; hasRequiredPadNopadding = 1; (function(module, exports) { (function(root, factory, undef) { { module.exports = factory(requireCore(), requireCipherCore()); } })(commonjsGlobal, function(CryptoJS) { CryptoJS.pad.NoPadding = { pad: function() { }, unpad: function() { } }; return CryptoJS.pad.NoPadding; }); })(padNopadding); return padNopadding.exports; } var formatHex = { exports: {} }; var hasRequiredFormatHex; function requireFormatHex() { if (hasRequiredFormatHex) return formatHex.exports; hasRequiredFormatHex = 1; (function(module, exports) { (function(root, factory, undef) { { module.exports = factory(requireCore(), requireCipherCore()); } })(commonjsGlobal, function(CryptoJS) { (function(undefined$1) { var C = CryptoJS; var C_lib = C.lib; var CipherParams = C_lib.CipherParams; var C_enc = C.enc; var Hex2 = C_enc.Hex; var C_format = C.format; C_format.Hex = { /** * Converts the ciphertext of a cipher params object to a hexadecimally encoded string. * * @param {CipherParams} cipherParams The cipher params object. * * @return {string} The hexadecimally encoded string. * * @static * * @example * * var hexString = CryptoJS.format.Hex.stringify(cipherParams); */ stringify: function(cipherParams) { return cipherParams.ciphertext.toString(Hex2); }, /** * Converts a hexadecimally encoded ciphertext string to a cipher params object. * * @param {string} input The hexadecimally encoded string. * * @return {CipherParams} The cipher params object. * * @static * * @example * * var cipherParams = CryptoJS.format.Hex.parse(hexString); */ parse: function(input) { var ciphertext = Hex2.parse(input); return CipherParams.create({ ciphertext }); } }; })(); return CryptoJS.format.Hex; }); })(formatHex); return formatHex.exports; } var aes = { exports: {} }; var hasRequiredAes; function requireAes() { if (hasRequiredAes) return aes.exports; hasRequiredAes = 1; (function(module, exports) { (function(root, factory, undef) { { module.exports = factory(requireCore(), requireEncBase64(), requireMd5(), requireEvpkdf(), requireCipherCore()); } })(commonjsGlobal, function(CryptoJS) { (function() { var C = CryptoJS; var C_lib = C.lib; var BlockCipher = C_lib.BlockCipher; var C_algo = C.algo; var SBOX = []; var INV_SBOX = []; var SUB_MIX_0 = []; var SUB_MIX_1 = []; var SUB_MIX_2 = []; var SUB_MIX_3 = []; var INV_SUB_MIX_0 = []; var INV_SUB_MIX_1 = []; var INV_SUB_MIX_2 = []; var INV_SUB_MIX_3 = []; (function() { var d = []; for (var i = 0; i < 256; i++) { if (i < 128) { d[i] = i << 1; } else { d[i] = i << 1 ^ 283; } } var x = 0; var xi = 0; for (var i = 0; i < 256; i++) { var sx = xi ^ xi << 1 ^ xi << 2 ^ xi << 3 ^ xi << 4; sx = sx >>> 8 ^ sx & 255 ^ 99; SBOX[x] = sx; INV_SBOX[sx] = x; var x2 = d[x]; var x4 = d[x2]; var x8 = d[x4]; var t = d[sx] * 257 ^ sx * 16843008; SUB_MIX_0[x] = t << 24 | t >>> 8; SUB_MIX_1[x] = t << 16 | t >>> 16; SUB_MIX_2[x] = t << 8 | t >>> 24; SUB_MIX_3[x] = t; var t = x8 * 16843009 ^ x4 * 65537 ^ x2 * 257 ^ x * 16843008; INV_SUB_MIX_0[sx] = t << 24 | t >>> 8; INV_SUB_MIX_1[sx] = t << 16 | t >>> 16; INV_SUB_MIX_2[sx] = t << 8 | t >>> 24; INV_SUB_MIX_3[sx] = t; if (!x) { x = xi = 1; } else { x = x2 ^ d[d[d[x8 ^ x2]]]; xi ^= d[d[xi]]; } } })(); var RCON = [0, 1, 2, 4, 8, 16, 32, 64, 128, 27, 54]; var AES = C_algo.AES = BlockCipher.extend({ _doReset: function() { var t; if (this._nRounds && this._keyPriorReset === this._key) { return; } var key = this._keyPriorReset = this._key; var keyWords = key.words; var keySize = key.sigBytes / 4; var nRounds = this._nRounds = keySize + 6; var ksRows = (nRounds + 1) * 4; var keySchedule = this._keySchedule = []; for (var ksRow = 0; ksRow < ksRows; ksRow++) { if (ksRow < keySize) { keySchedule[ksRow] = keyWords[ksRow]; } else { t = keySchedule[ksRow - 1]; if (!(ksRow % keySize)) { t = t << 8 | t >>> 24; t = SBOX[t >>> 24] << 24 | SBOX[t >>> 16 & 255] << 16 | SBOX[t >>> 8 & 255] << 8 | SBOX[t & 255]; t ^= RCON[ksRow / keySize | 0] << 24; } else if (keySize > 6 && ksRow % keySize == 4) { t = SBOX[t >>> 24] << 24 | SBOX[t >>> 16 & 255] << 16 | SBOX[t >>> 8 & 255] << 8 | SBOX[t & 255]; } keySchedule[ksRow] = keySchedule[ksRow - keySize] ^ t; } } var invKeySchedule = this._invKeySchedule = []; for (var invKsRow = 0; invKsRow < ksRows; invKsRow++) { var ksRow = ksRows - invKsRow; if (invKsRow % 4) { var t = keySchedule[ksRow]; } else { var t = keySchedule[ksRow - 4]; } if (invKsRow < 4 || ksRow <= 4) { invKeySchedule[invKsRow] = t; } else { invKeySchedule[invKsRow] = INV_SUB_MIX_0[SBOX[t >>> 24]] ^ INV_SUB_MIX_1[SBOX[t >>> 16 & 255]] ^ INV_SUB_MIX_2[SBOX[t >>> 8 & 255]] ^ INV_SUB_MIX_3[SBOX[t & 255]]; } } }, encryptBlock: function(M, offset) { this._doCryptBlock(M, offset, this._keySchedule, SUB_MIX_0, SUB_MIX_1, SUB_MIX_2, SUB_MIX_3, SBOX); }, decryptBlock: function(M, offset) { var t = M[offset + 1]; M[offset + 1] = M[offset + 3]; M[offset + 3] = t; this._doCryptBlock(M, offset, this._invKeySchedule, INV_SUB_MIX_0, INV_SUB_MIX_1, INV_SUB_MIX_2, INV_SUB_MIX_3, INV_SBOX); var t = M[offset + 1]; M[offset + 1] = M[offset + 3]; M[offset + 3] = t; }, _doCryptBlock: function(M, offset, keySchedule, SUB_MIX_02, SUB_MIX_12, SUB_MIX_22, SUB_MIX_32, SBOX2) { var nRounds = this._nRounds; var s0 = M[offset] ^ keySchedule[0]; var s1 = M[offset + 1] ^ keySchedule[1]; var s2 = M[offset + 2] ^ keySchedule[2]; var s3 = M[offset + 3] ^ keySchedule[3]; var ksRow = 4; for (var round = 1; round < nRounds; round++) { var t0 = SUB_MIX_02[s0 >>> 24] ^ SUB_MIX_12[s1 >>> 16 & 255] ^ SUB_MIX_22[s2 >>> 8 & 255] ^ SUB_MIX_32[s3 & 255] ^ keySchedule[ksRow++]; var t1 = SUB_MIX_02[s1 >>> 24] ^ SUB_MIX_12[s2 >>> 16 & 255] ^ SUB_MIX_22[s3 >>> 8 & 255] ^ SUB_MIX_32[s0 & 255] ^ keySchedule[ksRow++]; var t2 = SUB_MIX_02[s2 >>> 24] ^ SUB_MIX_12[s3 >>> 16 & 255] ^ SUB_MIX_22[s0 >>> 8 & 255] ^ SUB_MIX_32[s1 & 255] ^ keySchedule[ksRow++]; var t3 = SUB_MIX_02[s3 >>> 24] ^ SUB_MIX_12[s0 >>> 16 & 255] ^ SUB_MIX_22[s1 >>> 8 & 255] ^ SUB_MIX_32[s2 & 255] ^ keySchedule[ksRow++]; s0 = t0; s1 = t1; s2 = t2; s3 = t3; } var t0 = (SBOX2[s0 >>> 24] << 24 | SBOX2[s1 >>> 16 & 255] << 16 | SBOX2[s2 >>> 8 & 255] << 8 | SBOX2[s3 & 255]) ^ keySchedule[ksRow++]; var t1 = (SBOX2[s1 >>> 24] << 24 | SBOX2[s2 >>> 16 & 255] << 16 | SBOX2[s3 >>> 8 & 255] << 8 | SBOX2[s0 & 255]) ^ keySchedule[ksRow++]; var t2 = (SBOX2[s2 >>> 24] << 24 | SBOX2[s3 >>> 16 & 255] << 16 | SBOX2[s0 >>> 8 & 255] << 8 | SBOX2[s1 & 255]) ^ keySchedule[ksRow++]; var t3 = (SBOX2[s3 >>> 24] << 24 | SBOX2[s0 >>> 16 & 255] << 16 | SBOX2[s1 >>> 8 & 255] << 8 | SBOX2[s2 & 255]) ^ keySchedule[ksRow++]; M[offset] = t0; M[offset + 1] = t1; M[offset + 2] = t2; M[offset + 3] = t3; }, keySize: 256 / 32 }); C.AES = BlockCipher._createHelper(AES); })(); return CryptoJS.AES; }); })(aes); return aes.exports; } var tripledes = { exports: {} }; var hasRequiredTripledes; function requireTripledes() { if (hasRequiredTripledes) return tripledes.exports; hasRequiredTripledes = 1; (function(module, exports) { (function(root, factory, undef) { { module.exports = factory(requireCore(), requireEncBase64(), requireMd5(), requireEvpkdf(), requireCipherCore()); } })(commonjsGlobal, function(CryptoJS) { (function() { var C = CryptoJS; var C_lib = C.lib; var WordArray = C_lib.WordArray; var BlockCipher = C_lib.BlockCipher; var C_algo = C.algo; var PC1 = [ 57, 49, 41, 33, 25, 17, 9, 1, 58, 50, 42, 34, 26, 18, 10, 2, 59, 51, 43, 35, 27, 19, 11, 3, 60, 52, 44, 36, 63, 55, 47, 39, 31, 23, 15, 7, 62, 54, 46, 38, 30, 22, 14, 6, 61, 53, 45, 37, 29, 21, 13, 5, 28, 20, 12, 4 ]; var PC2 = [ 14, 17, 11, 24, 1, 5, 3, 28, 15, 6, 21, 10, 23, 19, 12, 4, 26, 8, 16, 7, 27, 20, 13, 2, 41, 52, 31, 37, 47, 55, 30, 40, 51, 45, 33, 48, 44, 49, 39, 56, 34, 53, 46, 42, 50, 36, 29, 32 ]; var BIT_SHIFTS = [1, 2, 4, 6, 8, 10, 12, 14, 15, 17, 19, 21, 23, 25, 27, 28]; var SBOX_P = [ { 0: 8421888, 268435456: 32768, 536870912: 8421378, 805306368: 2, 1073741824: 512, 1342177280: 8421890, 1610612736: 8389122, 1879048192: 8388608, 2147483648: 514, 2415919104: 8389120, 2684354560: 33280, 2952790016: 8421376, 3221225472: 32770, 3489660928: 8388610, 3758096384: 0, 4026531840: 33282, 134217728: 0, 402653184: 8421890, 671088640: 33282, 939524096: 32768, 1207959552: 8421888, 1476395008: 512, 1744830464: 8421378, 2013265920: 2, 2281701376: 8389120, 2550136832: 33280, 2818572288: 8421376, 3087007744: 8389122, 3355443200: 8388610, 3623878656: 32770, 3892314112: 514, 4160749568: 8388608, 1: 32768, 268435457: 2, 536870913: 8421888, 805306369: 8388608, 1073741825: 8421378, 1342177281: 33280, 1610612737: 512, 1879048193: 8389122, 2147483649: 8421890, 2415919105: 8421376, 2684354561: 8388610, 2952790017: 33282, 3221225473: 514, 3489660929: 8389120, 3758096385: 32770, 4026531841: 0, 134217729: 8421890, 402653185: 8421376, 671088641: 8388608, 939524097: 512, 1207959553: 32768, 1476395009: 8388610, 1744830465: 2, 2013265921: 33282, 2281701377: 32770, 2550136833: 8389122, 2818572289: 514, 3087007745: 8421888, 3355443201: 8389120, 3623878657: 0, 3892314113: 33280, 4160749569: 8421378 }, { 0: 1074282512, 16777216: 16384, 33554432: 524288, 50331648: 1074266128, 67108864: 1073741840, 83886080: 1074282496, 100663296: 1073758208, 117440512: 16, 134217728: 540672, 150994944: 1073758224, 167772160: 1073741824, 184549376: 540688, 201326592: 524304, 218103808: 0, 234881024: 16400, 251658240: 1074266112, 8388608: 1073758208, 25165824: 540688, 41943040: 16, 58720256: 1073758224, 75497472: 1074282512, 92274688: 1073741824, 109051904: 524288, 125829120: 1074266128, 142606336: 524304, 159383552: 0, 176160768: 16384, 192937984: 1074266112, 209715200: 1073741840, 226492416: 540672, 243269632: 1074282496, 260046848: 16400, 268435456: 0, 285212672: 1074266128, 301989888: 1073758224, 318767104: 1074282496, 335544320: 1074266112, 352321536: 16, 369098752: 540688, 385875968: 16384, 402653184: 16400, 419430400: 524288, 436207616: 524304, 452984832: 1073741840, 469762048: 540672, 486539264: 1073758208, 503316480: 1073741824, 520093696: 1074282512, 276824064: 540688, 293601280: 524288, 310378496: 1074266112, 327155712: 16384, 343932928: 1073758208, 360710144: 1074282512, 377487360: 16, 394264576: 1073741824, 411041792: 1074282496, 427819008: 1073741840, 444596224: 1073758224, 461373440: 524304, 478150656: 0, 494927872: 16400, 511705088: 1074266128, 528482304: 540672 }, { 0: 260, 1048576: 0, 2097152: 67109120, 3145728: 65796, 4194304: 65540, 5242880: 67108868, 6291456: 67174660, 7340032: 67174400, 8388608: 67108864, 9437184: 67174656, 10485760: 65792, 11534336: 67174404, 12582912: 67109124, 13631488: 65536, 14680064: 4, 15728640: 256, 524288: 67174656, 1572864: 67174404, 2621440: 0, 3670016: 67109120, 4718592: 67108868, 5767168: 65536, 6815744: 65540, 7864320: 260, 8912896: 4, 9961472: 256, 11010048: 67174400, 12058624: 65796, 13107200: 65792, 14155776: 67109124, 15204352: 67174660, 16252928: 67108864, 16777216: 67174656, 17825792: 65540, 18874368: 65536, 19922944: 67109120, 20971520: 256, 22020096: 67174660, 23068672: 67108868, 24117248: 0, 25165824: 67109124, 26214400: 67108864, 27262976: 4, 28311552: 65792, 29360128: 67174400, 30408704: 260, 31457280: 65796, 32505856: 67174404, 17301504: 67108864, 18350080: 260, 19398656: 67174656, 20447232: 0, 21495808: 65540, 22544384: 67109120, 23592960: 256, 24641536: 67174404, 25690112: 65536, 26738688: 67174660, 27787264: 65796, 28835840: 67108868, 29884416: 67109124, 30932992: 67174400, 31981568: 4, 33030144: 65792 }, { 0: 2151682048, 65536: 2147487808, 131072: 4198464, 196608: 2151677952, 262144: 0, 327680: 4198400, 393216: 2147483712, 458752: 4194368, 524288: 2147483648, 589824: 4194304, 655360: 64, 720896: 2147487744, 786432: 2151678016, 851968: 4160, 917504: 4096, 983040: 2151682112, 32768: 2147487808, 98304: 64, 163840: 2151678016, 229376: 2147487744, 294912: 4198400, 360448: 2151682112, 425984: 0, 491520: 2151677952, 557056: 4096, 622592: 2151682048, 688128: 4194304, 753664: 4160, 819200: 2147483648, 884736: 4194368, 950272: 4198464, 1015808: 2147483712, 1048576: 4194368, 1114112: 4198400, 1179648: 2147483712, 1245184: 0, 1310720: 4160, 1376256: 2151678016, 1441792: 2151682048, 1507328: 2147487808, 1572864: 2151682112, 1638400: 2147483648, 1703936: 2151677952, 1769472: 4198464, 1835008: 2147487744, 1900544: 4194304, 1966080: 64, 2031616: 4096, 1081344: 2151677952, 1146880: 2151682112, 1212416: 0, 1277952: 4198400, 1343488: 4194368, 1409024: 2147483648, 1474560: 2147487808, 1540096: 64, 1605632: 2147483712, 1671168: 4096, 1736704: 2147487744, 1802240: 2151678016, 1867776: 4160, 1933312: 2151682048, 1998848: 4194304, 2064384: 4198464 }, { 0: 128, 4096: 17039360, 8192: 262144, 12288: 536870912, 16384: 537133184, 20480: 16777344, 24576: 553648256, 28672: 262272, 32768: 16777216, 36864: 537133056, 40960: 536871040, 45056: 553910400, 49152: 553910272, 53248: 0, 57344: 17039488, 61440: 553648128, 2048: 17039488, 6144: 553648256, 10240: 128, 14336: 17039360, 18432: 262144, 22528: 537133184, 26624: 553910272, 30720: 536870912, 34816: 537133056, 38912: 0, 43008: 553910400, 47104: 16777344, 51200: 536871040, 55296: 553648128, 59392: 16777216, 63488: 262272, 65536: 262144, 69632: 128, 73728: 536870912, 77824: 553648256, 81920: 16777344, 86016: 553910272, 90112: 537133184, 94208: 16777216, 98304: 553910400, 102400: 553648128, 106496: 17039360, 110592: 537133056, 114688: 262272, 118784: 536871040, 122880: 0, 126976: 17039488, 67584: 553648256, 71680: 16777216, 75776: 17039360, 79872: 537133184, 83968: 536870912, 88064: 17039488, 92160: 128, 96256: 553910272, 100352: 262272, 104448: 553910400, 108544: 0, 112640: 553648128, 116736: 16777344, 120832: 262144, 124928: 537133056, 129024: 536871040 }, { 0: 268435464, 256: 8192, 512: 270532608, 768: 270540808, 1024: 268443648, 1280: 2097152, 1536: 2097160, 1792: 268435456, 2048: 0, 2304: 268443656, 2560: 2105344, 2816: 8, 3072: 270532616, 3328: 2105352, 3584: 8200, 3840: 270540800, 128: 270532608, 384: 270540808, 640: 8, 896: 2097152, 1152: 2105352, 1408: 268435464, 1664: 268443648, 1920: 8200, 2176: 2097160, 2432: 8192, 2688: 268443656, 2944: 270532616, 3200: 0, 3456: 270540800, 3712: 2105344, 3968: 268435456, 4096: 268443648, 4352: 270532616, 4608: 270540808, 4864: 8200, 5120: 2097152, 5376: 268435456, 5632: 268435464, 5888: 2105344, 6144: 2105352, 6400: 0, 6656: 8, 6912: 270532608, 7168: 8192, 7424: 268443656, 7680: 270540800, 7936: 2097160, 4224: 8, 4480: 2105344, 4736: 2097152, 4992: 268435464, 5248: 268443648, 5504: 8200, 5760: 270540808, 6016: 270532608, 6272: 270540800, 6528: 270532616, 6784: 8192, 7040: 2105352, 7296: 2097160, 7552: 0, 7808: 268435456, 8064: 268443656 }, { 0: 1048576, 16: 33555457, 32: 1024, 48: 1049601, 64: 34604033, 80: 0, 96: 1, 112: 34603009, 128: 33555456, 144: 1048577, 160: 33554433, 176: 34604032, 192: 34603008, 208: 1025, 224: 1049600, 240: 33554432, 8: 34603009, 24: 0, 40: 33555457, 56: 34604032, 72: 1048576, 88: 33554433, 104: 33554432, 120: 1025, 136: 1049601, 152: 33555456, 168: 34603008, 184: 1048577, 200: 1024, 216: 34604033, 232: 1, 248: 1049600, 256: 33554432, 272: 1048576, 288: 33555457, 304: 34603009, 320: 1048577, 336: 33555456, 352: 34604032, 368: 1049601, 384: 1025, 400: 34604033, 416: 1049600, 432: 1, 448: 0, 464: 34603008, 480: 33554433, 496: 1024, 264: 1049600, 280: 33555457, 296: 34603009, 312: 1, 328: 33554432, 344: 1048576, 360: 1025, 376: 34604032, 392: 33554433, 408: 34603008, 424: 0, 440: 34604033, 456: 1049601, 472: 1024, 488: 33555456, 504: 1048577 }, { 0: 134219808, 1: 131072, 2: 134217728, 3: 32, 4: 131104, 5: 134350880, 6: 134350848, 7: 2048, 8: 134348800, 9: 134219776, 10: 133120, 11: 134348832, 12: 2080, 13: 0, 14: 134217760, 15: 133152, 2147483648: 2048, 2147483649: 134350880, 2147483650: 134219808, 2147483651: 134217728, 2147483652: 134348800, 2147483653: 133120, 2147483654: 133152, 2147483655: 32, 2147483656: 134217760, 2147483657: 2080, 2147483658: 131104, 2147483659: 134350848, 2147483660: 0, 2147483661: 134348832, 2147483662: 134219776, 2147483663: 131072, 16: 133152, 17: 134350848, 18: 32, 19: 2048, 20: 134219776, 21: 134217760, 22: 134348832, 23: 131072, 24: 0, 25: 131104, 26: 134348800, 27: 134219808, 28: 134350880, 29: 133120, 30: 2080, 31: 134217728, 2147483664: 131072, 2147483665: 2048, 2147483666: 134348832, 2147483667: 133152, 2147483668: 32, 2147483669: 134348800, 2147483670: 134217728, 2147483671: 134219808, 2147483672: 134350880, 2147483673: 134217760, 2147483674: 134219776, 2147483675: 0, 2147483676: 133120, 2147483677: 2080, 2147483678: 131104, 2147483679: 134350848 } ]; var SBOX_MASK = [ 4160749569, 528482304, 33030144, 2064384, 129024, 8064, 504, 2147483679 ]; var DES = C_algo.DES = BlockCipher.extend({ _doReset: function() { var key = this._key; var keyWords = key.words; var keyBits = []; for (var i = 0; i < 56; i++) { var keyBitPos = PC1[i] - 1; keyBits[i] = keyWords[keyBitPos >>> 5] >>> 31 - keyBitPos % 32 & 1; } var subKeys = this._subKeys = []; for (var nSubKey = 0; nSubKey < 16; nSubKey++) { var subKey = subKeys[nSubKey] = []; var bitShift = BIT_SHIFTS[nSubKey]; for (var i = 0; i < 24; i++) { subKey[i / 6 | 0] |= keyBits[(PC2[i] - 1 + bitShift) % 28] << 31 - i % 6; subKey[4 + (i / 6 | 0)] |= keyBits[28 + (PC2[i + 24] - 1 + bitShift) % 28] << 31 - i % 6; } subKey[0] = subKey[0] << 1 | subKey[0] >>> 31; for (var i = 1; i < 7; i++) { subKey[i] = subKey[i] >>> (i - 1) * 4 + 3; } subKey[7] = subKey[7] << 5 | subKey[7] >>> 27; } var invSubKeys = this._invSubKeys = []; for (var i = 0; i < 16; i++) { invSubKeys[i] = subKeys[15 - i]; } }, encryptBlock: function(M, offset) { this._doCryptBlock(M, offset, this._subKeys); }, decryptBlock: function(M, offset) { this._doCryptBlock(M, offset, this._invSubKeys); }, _doCryptBlock: function(M, offset, subKeys) { this._lBlock = M[offset]; this._rBlock = M[offset + 1]; exchangeLR.call(this, 4, 252645135); exchangeLR.call(this, 16, 65535); exchangeRL.call(this, 2, 858993459); exchangeRL.call(this, 8, 16711935); exchangeLR.call(this, 1, 1431655765); for (var round = 0; round < 16; round++) { var subKey = subKeys[round]; var lBlock = this._lBlock; var rBlock = this._rBlock; var f2 = 0; for (var i = 0; i < 8; i++) { f2 |= SBOX_P[i][((rBlock ^ subKey[i]) & SBOX_MASK[i]) >>> 0]; } this._lBlock = rBlock; this._rBlock = lBlock ^ f2; } var t = this._lBlock; this._lBlock = this._rBlock; this._rBlock = t; exchangeLR.call(this, 1, 1431655765); exchangeRL.call(this, 8, 16711935); exchangeRL.call(this, 2, 858993459); exchangeLR.call(this, 16, 65535); exchangeLR.call(this, 4, 252645135); M[offset] = this._lBlock; M[offset + 1] = this._rBlock; }, keySize: 64 / 32, ivSize: 64 / 32, blockSize: 64 / 32 }); function exchangeLR(offset, mask) { var t = (this._lBlock >>> offset ^ this._rBlock) & mask; this._rBlock ^= t; this._lBlock ^= t << offset; } function exchangeRL(offset, mask) { var t = (this._rBlock >>> offset ^ this._lBlock) & mask; this._lBlock ^= t; this._rBlock ^= t << offset; } C.DES = BlockCipher._createHelper(DES); var TripleDES = C_algo.TripleDES = BlockCipher.extend({ _doReset: function() { var key = this._key; var keyWords = key.words; if (keyWords.length !== 2 && keyWords.length !== 4 && keyWords.length < 6) { throw new Error("Invalid key length - 3DES requires the key length to be 64, 128, 192 or >192."); } var key1 = keyWords.slice(0, 2); var key2 = keyWords.length < 4 ? keyWords.slice(0, 2) : keyWords.slice(2, 4); var key3 = keyWords.length < 6 ? keyWords.slice(0, 2) : keyWords.slice(4, 6); this._des1 = DES.createEncryptor(WordArray.create(key1)); this._des2 = DES.createEncryptor(WordArray.create(key2)); this._des3 = DES.createEncryptor(WordArray.create(key3)); }, encryptBlock: function(M, offset) { this._des1.encryptBlock(M, offset); this._des2.decryptBlock(M, offset); this._des3.encryptBlock(M, offset); }, decryptBlock: function(M, offset) { this._des3.decryptBlock(M, offset); this._des2.encryptBlock(M, offset); this._des1.decryptBlock(M, offset); }, keySize: 192 / 32, ivSize: 64 / 32, blockSize: 64 / 32 }); C.TripleDES = BlockCipher._createHelper(TripleDES); })(); return CryptoJS.TripleDES; }); })(tripledes); return tripledes.exports; } var rc4 = { exports: {} }; var hasRequiredRc4; function requireRc4() { if (hasRequiredRc4) return rc4.exports; hasRequiredRc4 = 1; (function(module, exports) { (function(root, factory, undef) { { module.exports = factory(requireCore(), requireEncBase64(), requireMd5(), requireEvpkdf(), requireCipherCore()); } })(commonjsGlobal, function(CryptoJS) { (function() { var C = CryptoJS; var C_lib = C.lib; var StreamCipher = C_lib.StreamCipher; var C_algo = C.algo; var RC4 = C_algo.RC4 = StreamCipher.extend({ _doReset: function() { var key = this._key; var keyWords = key.words; var keySigBytes = key.sigBytes; var S = this._S = []; for (var i = 0; i < 256; i++) { S[i] = i; } for (var i = 0, j = 0; i < 256; i++) { var keyByteIndex = i % keySigBytes; var keyByte = keyWords[keyByteIndex >>> 2] >>> 24 - keyByteIndex % 4 * 8 & 255; j = (j + S[i] + keyByte) % 256; var t = S[i]; S[i] = S[j]; S[j] = t; } this._i = this._j = 0; }, _doProcessBlock: function(M, offset) { M[offset] ^= generateKeystreamWord.call(this); }, keySize: 256 / 32, ivSize: 0 }); function generateKeystreamWord() { var S = this._S; var i = this._i; var j = this._j; var keystreamWord = 0; for (var n2 = 0; n2 < 4; n2++) { i = (i + 1) % 256; j = (j + S[i]) % 256; var t = S[i]; S[i] = S[j]; S[j] = t; keystreamWord |= S[(S[i] + S[j]) % 256] << 24 - n2 * 8; } this._i = i; this._j = j; return keystreamWord; } C.RC4 = StreamCipher._createHelper(RC4); var RC4Drop = C_algo.RC4Drop = RC4.extend({ /** * Configuration options. * * @property {number} drop The number of keystream words to drop. Default 192 */ cfg: RC4.cfg.extend({ drop: 192 }), _doReset: function() { RC4._doReset.call(this); for (var i = this.cfg.drop; i > 0; i--) { generateKeystreamWord.call(this); } } }); C.RC4Drop = StreamCipher._createHelper(RC4Drop); })(); return CryptoJS.RC4; }); })(rc4); return rc4.exports; } var rabbit = { exports: {} }; var hasRequiredRabbit; function requireRabbit() { if (hasRequiredRabbit) return rabbit.exports; hasRequiredRabbit = 1; (function(module, exports) { (function(root, factory, undef) { { module.exports = factory(requireCore(), requireEncBase64(), requireMd5(), requireEvpkdf(), requireCipherCore()); } })(commonjsGlobal, function(CryptoJS) { (function() { var C = CryptoJS; var C_lib = C.lib; var StreamCipher = C_lib.StreamCipher; var C_algo = C.algo; var S = []; var C_ = []; var G = []; var Rabbit = C_algo.Rabbit = StreamCipher.extend({ _doReset: function() { var K = this._key.words; var iv = this.cfg.iv; for (var i = 0; i < 4; i++) { K[i] = (K[i] << 8 | K[i] >>> 24) & 16711935 | (K[i] << 24 | K[i] >>> 8) & 4278255360; } var X = this._X = [ K[0], K[3] << 16 | K[2] >>> 16, K[1], K[0] << 16 | K[3] >>> 16, K[2], K[1] << 16 | K[0] >>> 16, K[3], K[2] << 16 | K[1] >>> 16 ]; var C2 = this._C = [ K[2] << 16 | K[2] >>> 16, K[0] & 4294901760 | K[1] & 65535, K[3] << 16 | K[3] >>> 16, K[1] & 4294901760 | K[2] & 65535, K[0] << 16 | K[0] >>> 16, K[2] & 4294901760 | K[3] & 65535, K[1] << 16 | K[1] >>> 16, K[3] & 4294901760 | K[0] & 65535 ]; this._b = 0; for (var i = 0; i < 4; i++) { nextState.call(this); } for (var i = 0; i < 8; i++) { C2[i] ^= X[i + 4 & 7]; } if (iv) { var IV = iv.words; var IV_0 = IV[0]; var IV_1 = IV[1]; var i0 = (IV_0 << 8 | IV_0 >>> 24) & 16711935 | (IV_0 << 24 | IV_0 >>> 8) & 4278255360; var i2 = (IV_1 << 8 | IV_1 >>> 24) & 16711935 | (IV_1 << 24 | IV_1 >>> 8) & 4278255360; var i1 = i0 >>> 16 | i2 & 4294901760; var i3 = i2 << 16 | i0 & 65535; C2[0] ^= i0; C2[1] ^= i1; C2[2] ^= i2; C2[3] ^= i3; C2[4] ^= i0; C2[5] ^= i1; C2[6] ^= i2; C2[7] ^= i3; for (var i = 0; i < 4; i++) { nextState.call(this); } } }, _doProcessBlock: function(M, offset) { var X = this._X; nextState.call(this); S[0] = X[0] ^ X[5] >>> 16 ^ X[3] << 16; S[1] = X[2] ^ X[7] >>> 16 ^ X[5] << 16; S[2] = X[4] ^ X[1] >>> 16 ^ X[7] << 16; S[3] = X[6] ^ X[3] >>> 16 ^ X[1] << 16; for (var i = 0; i < 4; i++) { S[i] = (S[i] << 8 | S[i] >>> 24) & 16711935 | (S[i] << 24 | S[i] >>> 8) & 4278255360; M[offset + i] ^= S[i]; } }, blockSize: 128 / 32, ivSize: 64 / 32 }); function nextState() { var X = this._X; var C2 = this._C; for (var i = 0; i < 8; i++) { C_[i] = C2[i]; } C2[0] = C2[0] + 1295307597 + this._b | 0; C2[1] = C2[1] + 3545052371 + (C2[0] >>> 0 < C_[0] >>> 0 ? 1 : 0) | 0; C2[2] = C2[2] + 886263092 + (C2[1] >>> 0 < C_[1] >>> 0 ? 1 : 0) | 0; C2[3] = C2[3] + 1295307597 + (C2[2] >>> 0 < C_[2] >>> 0 ? 1 : 0) | 0; C2[4] = C2[4] + 3545052371 + (C2[3] >>> 0 < C_[3] >>> 0 ? 1 : 0) | 0; C2[5] = C2[5] + 886263092 + (C2[4] >>> 0 < C_[4] >>> 0 ? 1 : 0) | 0; C2[6] = C2[6] + 1295307597 + (C2[5] >>> 0 < C_[5] >>> 0 ? 1 : 0) | 0; C2[7] = C2[7] + 3545052371 + (C2[6] >>> 0 < C_[6] >>> 0 ? 1 : 0) | 0; this._b = C2[7] >>> 0 < C_[7] >>> 0 ? 1 : 0; for (var i = 0; i < 8; i++) { var gx = X[i] + C2[i]; var ga = gx & 65535; var gb = gx >>> 16; var gh = ((ga * ga >>> 17) + ga * gb >>> 15) + gb * gb; var gl = ((gx & 4294901760) * gx | 0) + ((gx & 65535) * gx | 0); G[i] = gh ^ gl; } X[0] = G[0] + (G[7] << 16 | G[7] >>> 16) + (G[6] << 16 | G[6] >>> 16) | 0; X[1] = G[1] + (G[0] << 8 | G[0] >>> 24) + G[7] | 0; X[2] = G[2] + (G[1] << 16 | G[1] >>> 16) + (G[0] << 16 | G[0] >>> 16) | 0; X[3] = G[3] + (G[2] << 8 | G[2] >>> 24) + G[1] | 0; X[4] = G[4] + (G[3] << 16 | G[3] >>> 16) + (G[2] << 16 | G[2] >>> 16) | 0; X[5] = G[5] + (G[4] << 8 | G[4] >>> 24) + G[3] | 0; X[6] = G[6] + (G[5] << 16 | G[5] >>> 16) + (G[4] << 16 | G[4] >>> 16) | 0; X[7] = G[7] + (G[6] << 8 | G[6] >>> 24) + G[5] | 0; } C.Rabbit = StreamCipher._createHelper(Rabbit); })(); return CryptoJS.Rabbit; }); })(rabbit); return rabbit.exports; } var rabbitLegacy = { exports: {} }; var hasRequiredRabbitLegacy; function requireRabbitLegacy() { if (hasRequiredRabbitLegacy) return rabbitLegacy.exports; hasRequiredRabbitLegacy = 1; (function(module, exports) { (function(root, factory, undef) { { module.exports = factory(requireCore(), requireEncBase64(), requireMd5(), requireEvpkdf(), requireCipherCore()); } })(commonjsGlobal, function(CryptoJS) { (function() { var C = CryptoJS; var C_lib = C.lib; var StreamCipher = C_lib.StreamCipher; var C_algo = C.algo; var S = []; var C_ = []; var G = []; var RabbitLegacy = C_algo.RabbitLegacy = StreamCipher.extend({ _doReset: function() { var K = this._key.words; var iv = this.cfg.iv; var X = this._X = [ K[0], K[3] << 16 | K[2] >>> 16, K[1], K[0] << 16 | K[3] >>> 16, K[2], K[1] << 16 | K[0] >>> 16, K[3], K[2] << 16 | K[1] >>> 16 ]; var C2 = this._C = [ K[2] << 16 | K[2] >>> 16, K[0] & 4294901760 | K[1] & 65535, K[3] << 16 | K[3] >>> 16, K[1] & 4294901760 | K[2] & 65535, K[0] << 16 | K[0] >>> 16, K[2] & 4294901760 | K[3] & 65535, K[1] << 16 | K[1] >>> 16, K[3] & 4294901760 | K[0] & 65535 ]; this._b = 0; for (var i = 0; i < 4; i++) { nextState.call(this); } for (var i = 0; i < 8; i++) { C2[i] ^= X[i + 4 & 7]; } if (iv) { var IV = iv.words; var IV_0 = IV[0]; var IV_1 = IV[1]; var i0 = (IV_0 << 8 | IV_0 >>> 24) & 16711935 | (IV_0 << 24 | IV_0 >>> 8) & 4278255360; var i2 = (IV_1 << 8 | IV_1 >>> 24) & 16711935 | (IV_1 << 24 | IV_1 >>> 8) & 4278255360; var i1 = i0 >>> 16 | i2 & 4294901760; var i3 = i2 << 16 | i0 & 65535; C2[0] ^= i0; C2[1] ^= i1; C2[2] ^= i2; C2[3] ^= i3; C2[4] ^= i0; C2[5] ^= i1; C2[6] ^= i2; C2[7] ^= i3; for (var i = 0; i < 4; i++) { nextState.call(this); } } }, _doProcessBlock: function(M, offset) { var X = this._X; nextState.call(this); S[0] = X[0] ^ X[5] >>> 16 ^ X[3] << 16; S[1] = X[2] ^ X[7] >>> 16 ^ X[5] << 16; S[2] = X[4] ^ X[1] >>> 16 ^ X[7] << 16; S[3] = X[6] ^ X[3] >>> 16 ^ X[1] << 16; for (var i = 0; i < 4; i++) { S[i] = (S[i] << 8 | S[i] >>> 24) & 16711935 | (S[i] << 24 | S[i] >>> 8) & 4278255360; M[offset + i] ^= S[i]; } }, blockSize: 128 / 32, ivSize: 64 / 32 }); function nextState() { var X = this._X; var C2 = this._C; for (var i = 0; i < 8; i++) { C_[i] = C2[i]; } C2[0] = C2[0] + 1295307597 + this._b | 0; C2[1] = C2[1] + 3545052371 + (C2[0] >>> 0 < C_[0] >>> 0 ? 1 : 0) | 0; C2[2] = C2[2] + 886263092 + (C2[1] >>> 0 < C_[1] >>> 0 ? 1 : 0) | 0; C2[3] = C2[3] + 1295307597 + (C2[2] >>> 0 < C_[2] >>> 0 ? 1 : 0) | 0; C2[4] = C2[4] + 3545052371 + (C2[3] >>> 0 < C_[3] >>> 0 ? 1 : 0) | 0; C2[5] = C2[5] + 886263092 + (C2[4] >>> 0 < C_[4] >>> 0 ? 1 : 0) | 0; C2[6] = C2[6] + 1295307597 + (C2[5] >>> 0 < C_[5] >>> 0 ? 1 : 0) | 0; C2[7] = C2[7] + 3545052371 + (C2[6] >>> 0 < C_[6] >>> 0 ? 1 : 0) | 0; this._b = C2[7] >>> 0 < C_[7] >>> 0 ? 1 : 0; for (var i = 0; i < 8; i++) { var gx = X[i] + C2[i]; var ga = gx & 65535; var gb = gx >>> 16; var gh = ((ga * ga >>> 17) + ga * gb >>> 15) + gb * gb; var gl = ((gx & 4294901760) * gx | 0) + ((gx & 65535) * gx | 0); G[i] = gh ^ gl; } X[0] = G[0] + (G[7] << 16 | G[7] >>> 16) + (G[6] << 16 | G[6] >>> 16) | 0; X[1] = G[1] + (G[0] << 8 | G[0] >>> 24) + G[7] | 0; X[2] = G[2] + (G[1] << 16 | G[1] >>> 16) + (G[0] << 16 | G[0] >>> 16) | 0; X[3] = G[3] + (G[2] << 8 | G[2] >>> 24) + G[1] | 0; X[4] = G[4] + (G[3] << 16 | G[3] >>> 16) + (G[2] << 16 | G[2] >>> 16) | 0; X[5] = G[5] + (G[4] << 8 | G[4] >>> 24) + G[3] | 0; X[6] = G[6] + (G[5] << 16 | G[5] >>> 16) + (G[4] << 16 | G[4] >>> 16) | 0; X[7] = G[7] + (G[6] << 8 | G[6] >>> 24) + G[5] | 0; } C.RabbitLegacy = StreamCipher._createHelper(RabbitLegacy); })(); return CryptoJS.RabbitLegacy; }); })(rabbitLegacy); return rabbitLegacy.exports; } var blowfish = { exports: {} }; var hasRequiredBlowfish; function requireBlowfish() { if (hasRequiredBlowfish) return blowfish.exports; hasRequiredBlowfish = 1; (function(module, exports) { (function(root, factory, undef) { { module.exports = factory(requireCore(), requireEncBase64(), requireMd5(), requireEvpkdf(), requireCipherCore()); } })(commonjsGlobal, function(CryptoJS) { (function() { var C = CryptoJS; var C_lib = C.lib; var BlockCipher = C_lib.BlockCipher; var C_algo = C.algo; const N = 16; const ORIG_P = [ 608135816, 2242054355, 320440878, 57701188, 2752067618, 698298832, 137296536, 3964562569, 1160258022, 953160567, 3193202383, 887688300, 3232508343, 3380367581, 1065670069, 3041331479, 2450970073, 2306472731 ]; const ORIG_S = [ [ 3509652390, 2564797868, 805139163, 3491422135, 3101798381, 1780907670, 3128725573, 4046225305, 614570311, 3012652279, 134345442, 2240740374, 1667834072, 1901547113, 2757295779, 4103290238, 227898511, 1921955416, 1904987480, 2182433518, 2069144605, 3260701109, 2620446009, 720527379, 3318853667, 677414384, 3393288472, 3101374703, 2390351024, 1614419982, 1822297739, 2954791486, 3608508353, 3174124327, 2024746970, 1432378464, 3864339955, 2857741204, 1464375394, 1676153920, 1439316330, 715854006, 3033291828, 289532110, 2706671279, 2087905683, 3018724369, 1668267050, 732546397, 1947742710, 3462151702, 2609353502, 2950085171, 1814351708, 2050118529, 680887927, 999245976, 1800124847, 3300911131, 1713906067, 1641548236, 4213287313, 1216130144, 1575780402, 4018429277, 3917837745, 3693486850, 3949271944, 596196993, 3549867205, 258830323, 2213823033, 772490370, 2760122372, 1774776394, 2652871518, 566650946, 4142492826, 1728879713, 2882767088, 1783734482, 3629395816, 2517608232, 2874225571, 1861159788, 326777828, 3124490320, 2130389656, 2716951837, 967770486, 1724537150, 2185432712, 2364442137, 1164943284, 2105845187, 998989502, 3765401048, 2244026483, 1075463327, 1455516326, 1322494562, 910128902, 469688178, 1117454909, 936433444, 3490320968, 3675253459, 1240580251, 122909385, 2157517691, 634681816, 4142456567, 3825094682, 3061402683, 2540495037, 79693498, 3249098678, 1084186820, 1583128258, 426386531, 1761308591, 1047286709, 322548459, 995290223, 1845252383, 2603652396, 3431023940, 2942221577, 3202600964, 3727903485, 1712269319, 422464435, 3234572375, 1170764815, 3523960633, 3117677531, 1434042557, 442511882, 3600875718, 1076654713, 1738483198, 4213154764, 2393238008, 3677496056, 1014306527, 4251020053, 793779912, 2902807211, 842905082, 4246964064, 1395751752, 1040244610, 2656851899, 3396308128, 445077038, 3742853595, 3577915638, 679411651, 2892444358, 2354009459, 1767581616, 3150600392, 3791627101, 3102740896, 284835224, 4246832056, 1258075500, 768725851, 2589189241, 3069724005, 3532540348, 1274779536, 3789419226, 2764799539, 1660621633, 3471099624, 4011903706, 913787905, 3497959166, 737222580, 2514213453, 2928710040, 3937242737, 1804850592, 3499020752, 2949064160, 2386320175, 2390070455, 2415321851, 4061277028, 2290661394, 2416832540, 1336762016, 1754252060, 3520065937, 3014181293, 791618072, 3188594551, 3933548030, 2332172193, 3852520463, 3043980520, 413987798, 3465142937, 3030929376, 4245938359, 2093235073, 3534596313, 375366246, 2157278981, 2479649556, 555357303, 3870105701, 2008414854, 3344188149, 4221384143, 3956125452, 2067696032, 3594591187, 2921233993, 2428461, 544322398, 577241275, 1471733935, 610547355, 4027169054, 1432588573, 1507829418, 2025931657, 3646575487, 545086370, 48609733, 2200306550, 1653985193, 298326376, 1316178497, 3007786442, 2064951626, 458293330, 2589141269, 3591329599, 3164325604, 727753846, 2179363840, 146436021, 1461446943, 4069977195, 705550613, 3059967265, 3887724982, 4281599278, 3313849956, 1404054877, 2845806497, 146425753, 1854211946 ], [ 1266315497, 3048417604, 3681880366, 3289982499, 290971e4, 1235738493, 2632868024, 2414719590, 3970600049, 1771706367, 1449415276, 3266420449, 422970021, 1963543593, 2690192192, 3826793022, 1062508698, 1531092325, 1804592342, 2583117782, 2714934279, 4024971509, 1294809318, 4028980673, 1289560198, 2221992742, 1669523910, 35572830, 157838143, 1052438473, 1016535060, 1802137761, 1753167236, 1386275462, 3080475397, 2857371447, 1040679964, 2145300060, 2390574316, 1461121720, 2956646967, 4031777805, 4028374788, 33600511, 2920084762, 1018524850, 629373528, 3691585981, 3515945977, 2091462646, 2486323059, 586499841, 988145025, 935516892, 3367335476, 2599673255, 2839830854, 265290510, 3972581182, 2759138881, 3795373465, 1005194799, 847297441, 406762289, 1314163512, 1332590856, 1866599683, 4127851711, 750260880, 613907577, 1450815602, 3165620655, 3734664991, 3650291728, 3012275730, 3704569646, 1427272223, 778793252, 1343938022, 2676280711, 2052605720, 1946737175, 3164576444, 3914038668, 3967478842, 3682934266, 1661551462, 3294938066, 4011595847, 840292616, 3712170807, 616741398, 312560963, 711312465, 1351876610, 322626781, 1910503582, 271666773, 2175563734, 1594956187, 70604529, 3617834859, 1007753275, 1495573769, 4069517037, 2549218298, 2663038764, 504708206, 2263041392, 3941167025, 2249088522, 1514023603, 1998579484, 1312622330, 694541497, 2582060303, 2151582166, 1382467621, 776784248, 2618340202, 3323268794, 2497899128, 2784771155, 503983604, 4076293799, 907881277, 423175695, 432175456, 1378068232, 4145222326, 3954048622, 3938656102, 3820766613, 2793130115, 2977904593, 26017576, 3274890735, 3194772133, 1700274565, 1756076034, 4006520079, 3677328699, 720338349, 1533947780, 354530856, 688349552, 3973924725, 1637815568, 332179504, 3949051286, 53804574, 2852348879, 3044236432, 1282449977, 3583942155, 3416972820, 4006381244, 1617046695, 2628476075, 3002303598, 1686838959, 431878346, 2686675385, 1700445008, 1080580658, 1009431731, 832498133, 3223435511, 2605976345, 2271191193, 2516031870, 1648197032, 4164389018, 2548247927, 300782431, 375919233, 238389289, 3353747414, 2531188641, 2019080857, 1475708069, 455242339, 2609103871, 448939670, 3451063019, 1395535956, 2413381860, 1841049896, 1491858159, 885456874, 4264095073, 4001119347, 1565136089, 3898914787, 1108368660, 540939232, 1173283510, 2745871338, 3681308437, 4207628240, 3343053890, 4016749493, 1699691293, 1103962373, 3625875870, 2256883143, 3830138730, 1031889488, 3479347698, 1535977030, 4236805024, 3251091107, 2132092099, 1774941330, 1199868427, 1452454533, 157007616, 2904115357, 342012276, 595725824, 1480756522, 206960106, 497939518, 591360097, 863170706, 2375253569, 3596610801, 1814182875, 2094937945, 3421402208, 1082520231, 3463918190, 2785509508, 435703966, 3908032597, 1641649973, 2842273706, 3305899714, 1510255612, 2148256476, 2655287854, 3276092548, 4258621189, 236887753, 3681803219, 274041037, 1734335097, 3815195456, 3317970021, 1899903192, 1026095262, 4050517792, 356393447, 2410691914, 3873677099, 3682840055 ], [ 3913112168, 2491498743, 4132185628, 2489919796, 1091903735, 1979897079, 3170134830, 3567386728, 3557303409, 857797738, 1136121015, 1342202287, 507115054, 2535736646, 337727348, 3213592640, 1301675037, 2528481711, 1895095763, 1721773893, 3216771564, 62756741, 2142006736, 835421444, 2531993523, 1442658625, 3659876326, 2882144922, 676362277, 1392781812, 170690266, 3921047035, 1759253602, 3611846912, 1745797284, 664899054, 1329594018, 3901205900, 3045908486, 2062866102, 2865634940, 3543621612, 3464012697, 1080764994, 553557557, 3656615353, 3996768171, 991055499, 499776247, 1265440854, 648242737, 3940784050, 980351604, 3713745714, 1749149687, 3396870395, 4211799374, 3640570775, 1161844396, 3125318951, 1431517754, 545492359, 4268468663, 3499529547, 1437099964, 2702547544, 3433638243, 2581715763, 2787789398, 1060185593, 1593081372, 2418618748, 4260947970, 69676912, 2159744348, 86519011, 2512459080, 3838209314, 1220612927, 3339683548, 133810670, 1090789135, 1078426020, 1569222167, 845107691, 3583754449, 4072456591, 1091646820, 628848692, 1613405280, 3757631651, 526609435, 236106946, 48312990, 2942717905, 3402727701, 1797494240, 859738849, 992217954, 4005476642, 2243076622, 3870952857, 3732016268, 765654824, 3490871365, 2511836413, 1685915746, 3888969200, 1414112111, 2273134842, 3281911079, 4080962846, 172450625, 2569994100, 980381355, 4109958455, 2819808352, 2716589560, 2568741196, 3681446669, 3329971472, 1835478071, 660984891, 3704678404, 4045999559, 3422617507, 3040415634, 1762651403, 1719377915, 3470491036, 2693910283, 3642056355, 3138596744, 1364962596, 2073328063, 1983633131, 926494387, 3423689081, 2150032023, 4096667949, 1749200295, 3328846651, 309677260, 2016342300, 1779581495, 3079819751, 111262694, 1274766160, 443224088, 298511866, 1025883608, 3806446537, 1145181785, 168956806, 3641502830, 3584813610, 1689216846, 3666258015, 3200248200, 1692713982, 2646376535, 4042768518, 1618508792, 1610833997, 3523052358, 4130873264, 2001055236, 3610705100, 2202168115, 4028541809, 2961195399, 1006657119, 2006996926, 3186142756, 1430667929, 3210227297, 1314452623, 4074634658, 4101304120, 2273951170, 1399257539, 3367210612, 3027628629, 1190975929, 2062231137, 2333990788, 2221543033, 2438960610, 1181637006, 548689776, 2362791313, 3372408396, 3104550113, 3145860560, 296247880, 1970579870, 3078560182, 3769228297, 1714227617, 3291629107, 3898220290, 166772364, 1251581989, 493813264, 448347421, 195405023, 2709975567, 677966185, 3703036547, 1463355134, 2715995803, 1338867538, 1343315457, 2802222074, 2684532164, 233230375, 2599980071, 2000651841, 3277868038, 1638401717, 4028070440, 3237316320, 6314154, 819756386, 300326615, 590932579, 1405279636, 3267499572, 3150704214, 2428286686, 3959192993, 3461946742, 1862657033, 1266418056, 963775037, 2089974820, 2263052895, 1917689273, 448879540, 3550394620, 3981727096, 150775221, 3627908307, 1303187396, 508620638, 2975983352, 2726630617, 1817252668, 1876281319, 1457606340, 908771278, 3720792119, 3617206836, 2455994898, 1729034894, 1080033504 ], [ 976866871, 3556439503, 2881648439, 1522871579, 1555064734, 1336096578, 3548522304, 2579274686, 3574697629, 3205460757, 3593280638, 3338716283, 3079412587, 564236357, 2993598910, 1781952180, 1464380207, 3163844217, 3332601554, 1699332808, 1393555694, 1183702653, 3581086237, 1288719814, 691649499, 2847557200, 2895455976, 3193889540, 2717570544, 1781354906, 1676643554, 2592534050, 3230253752, 1126444790, 2770207658, 2633158820, 2210423226, 2615765581, 2414155088, 3127139286, 673620729, 2805611233, 1269405062, 4015350505, 3341807571, 4149409754, 1057255273, 2012875353, 2162469141, 2276492801, 2601117357, 993977747, 3918593370, 2654263191, 753973209, 36408145, 2530585658, 25011837, 3520020182, 2088578344, 530523599, 2918365339, 1524020338, 1518925132, 3760827505, 3759777254, 1202760957, 3985898139, 3906192525, 674977740, 4174734889, 2031300136, 2019492241, 3983892565, 4153806404, 3822280332, 352677332, 2297720250, 60907813, 90501309, 3286998549, 1016092578, 2535922412, 2839152426, 457141659, 509813237, 4120667899, 652014361, 1966332200, 2975202805, 55981186, 2327461051, 676427537, 3255491064, 2882294119, 3433927263, 1307055953, 942726286, 933058658, 2468411793, 3933900994, 4215176142, 1361170020, 2001714738, 2830558078, 3274259782, 1222529897, 1679025792, 2729314320, 3714953764, 1770335741, 151462246, 3013232138, 1682292957, 1483529935, 471910574, 1539241949, 458788160, 3436315007, 1807016891, 3718408830, 978976581, 1043663428, 3165965781, 1927990952, 4200891579, 2372276910, 3208408903, 3533431907, 1412390302, 2931980059, 4132332400, 1947078029, 3881505623, 4168226417, 2941484381, 1077988104, 1320477388, 886195818, 18198404, 3786409e3, 2509781533, 112762804, 3463356488, 1866414978, 891333506, 18488651, 661792760, 1628790961, 3885187036, 3141171499, 876946877, 2693282273, 1372485963, 791857591, 2686433993, 3759982718, 3167212022, 3472953795, 2716379847, 445679433, 3561995674, 3504004811, 3574258232, 54117162, 3331405415, 2381918588, 3769707343, 4154350007, 1140177722, 4074052095, 668550556, 3214352940, 367459370, 261225585, 2610173221, 4209349473, 3468074219, 3265815641, 314222801, 3066103646, 3808782860, 282218597, 3406013506, 3773591054, 379116347, 1285071038, 846784868, 2669647154, 3771962079, 3550491691, 2305946142, 453669953, 1268987020, 3317592352, 3279303384, 3744833421, 2610507566, 3859509063, 266596637, 3847019092, 517658769, 3462560207, 3443424879, 370717030, 4247526661, 2224018117, 4143653529, 4112773975, 2788324899, 2477274417, 1456262402, 2901442914, 1517677493, 1846949527, 2295493580, 3734397586, 2176403920, 1280348187, 1908823572, 3871786941, 846861322, 1172426758, 3287448474, 3383383037, 1655181056, 3139813346, 901632758, 1897031941, 2986607138, 3066810236, 3447102507, 1393639104, 373351379, 950779232, 625454576, 3124240540, 4148612726, 2007998917, 544563296, 2244738638, 2330496472, 2058025392, 1291430526, 424198748, 50039436, 29584100, 3605783033, 2429876329, 2791104160, 1057563949, 3255363231, 3075367218, 3463963227, 1469046755, 985887462 ] ]; var BLOWFISH_CTX = { pbox: [], sbox: [] }; function F(ctx, x) { let a = x >> 24 & 255; let b = x >> 16 & 255; let c = x >> 8 & 255; let d = x & 255; let y = ctx.sbox[0][a] + ctx.sbox[1][b]; y = y ^ ctx.sbox[2][c]; y = y + ctx.sbox[3][d]; return y; } function BlowFish_Encrypt(ctx, left, right) { let Xl = left; let Xr = right; let temp; for (let i = 0; i < N; ++i) { Xl = Xl ^ ctx.pbox[i]; Xr = F(ctx, Xl) ^ Xr; temp = Xl; Xl = Xr; Xr = temp; } temp = Xl; Xl = Xr; Xr = temp; Xr = Xr ^ ctx.pbox[N]; Xl = Xl ^ ctx.pbox[N + 1]; return { left: Xl, right: Xr }; } function BlowFish_Decrypt(ctx, left, right) { let Xl = left; let Xr = right; let temp; for (let i = N + 1; i > 1; --i) { Xl = Xl ^ ctx.pbox[i]; Xr = F(ctx, Xl) ^ Xr; temp = Xl; Xl = Xr; Xr = temp; } temp = Xl; Xl = Xr; Xr = temp; Xr = Xr ^ ctx.pbox[1]; Xl = Xl ^ ctx.pbox[0]; return { left: Xl, right: Xr }; } function BlowFishInit(ctx, key, keysize) { for (let Row = 0; Row < 4; Row++) { ctx.sbox[Row] = []; for (let Col = 0; Col < 256; Col++) { ctx.sbox[Row][Col] = ORIG_S[Row][Col]; } } let keyIndex = 0; for (let index = 0; index < N + 2; index++) { ctx.pbox[index] = ORIG_P[index] ^ key[keyIndex]; keyIndex++; if (keyIndex >= keysize) { keyIndex = 0; } } let Data1 = 0; let Data2 = 0; let res = 0; for (let i = 0; i < N + 2; i += 2) { res = BlowFish_Encrypt(ctx, Data1, Data2); Data1 = res.left; Data2 = res.right; ctx.pbox[i] = Data1; ctx.pbox[i + 1] = Data2; } for (let i = 0; i < 4; i++) { for (let j = 0; j < 256; j += 2) { res = BlowFish_Encrypt(ctx, Data1, Data2); Data1 = res.left; Data2 = res.right; ctx.sbox[i][j] = Data1; ctx.sbox[i][j + 1] = Data2; } } return true; } var Blowfish = C_algo.Blowfish = BlockCipher.extend({ _doReset: function() { if (this._keyPriorReset === this._key) { return; } var key = this._keyPriorReset = this._key; var keyWords = key.words; var keySize = key.sigBytes / 4; BlowFishInit(BLOWFISH_CTX, keyWords, keySize); }, encryptBlock: function(M, offset) { var res = BlowFish_Encrypt(BLOWFISH_CTX, M[offset], M[offset + 1]); M[offset] = res.left; M[offset + 1] = res.right; }, decryptBlock: function(M, offset) { var res = BlowFish_Decrypt(BLOWFISH_CTX, M[offset], M[offset + 1]); M[offset] = res.left; M[offset + 1] = res.right; }, blockSize: 64 / 32, keySize: 128 / 32, ivSize: 64 / 32 }); C.Blowfish = BlockCipher._createHelper(Blowfish); })(); return CryptoJS.Blowfish; }); })(blowfish); return blowfish.exports; } (function(module, exports) { (function(root, factory, undef) { { module.exports = factory(requireCore(), requireX64Core(), requireLibTypedarrays(), requireEncUtf16(), requireEncBase64(), requireEncBase64url(), requireMd5(), requireSha1(), requireSha256(), requireSha224(), requireSha512(), requireSha384(), requireSha3(), requireRipemd160(), requireHmac(), requirePbkdf2(), requireEvpkdf(), requireCipherCore(), requireModeCfb(), requireModeCtr(), requireModeCtrGladman(), requireModeOfb(), requireModeEcb(), requirePadAnsix923(), requirePadIso10126(), requirePadIso97971(), requirePadZeropadding(), requirePadNopadding(), requireFormatHex(), requireAes(), requireTripledes(), requireRc4(), requireRabbit(), requireRabbitLegacy(), requireBlowfish()); } })(commonjsGlobal, function(CryptoJS) { return CryptoJS; }); })(cryptoJs); var cryptoJsExports = cryptoJs.exports; var BI_RM = "0123456789abcdefghijklmnopqrstuvwxyz"; function int2char(n2) { return BI_RM.charAt(n2); } function op_and(x, y) { return x & y; } function op_or(x, y) { return x | y; } function op_xor(x, y) { return x ^ y; } function op_andnot(x, y) { return x & ~y; } function lbit(x) { if (x == 0) { return -1; } var r = 0; if ((x & 65535) == 0) { x >>= 16; r += 16; } if ((x & 255) == 0) { x >>= 8; r += 8; } if ((x & 15) == 0) { x >>= 4; r += 4; } if ((x & 3) == 0) { x >>= 2; r += 2; } if ((x & 1) == 0) { ++r; } return r; } function cbit(x) { var r = 0; while (x != 0) { x &= x - 1; ++r; } return r; } var b64map = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; var b64pad = "="; function hex2b64(h) { var i; var c; var ret = ""; for (i = 0; i + 3 <= h.length; i += 3) { c = parseInt(h.substring(i, i + 3), 16); ret += b64map.charAt(c >> 6) + b64map.charAt(c & 63); } if (i + 1 == h.length) { c = parseInt(h.substring(i, i + 1), 16); ret += b64map.charAt(c << 2); } else if (i + 2 == h.length) { c = parseInt(h.substring(i, i + 2), 16); ret += b64map.charAt(c >> 2) + b64map.charAt((c & 3) << 4); } while ((ret.length & 3) > 0) { ret += b64pad; } return ret; } function b64tohex(s) { var ret = ""; var i; var k2 = 0; var slop = 0; for (i = 0; i < s.length; ++i) { if (s.charAt(i) == b64pad) { break; } var v = b64map.indexOf(s.charAt(i)); if (v < 0) { continue; } if (k2 == 0) { ret += int2char(v >> 2); slop = v & 3; k2 = 1; } else if (k2 == 1) { ret += int2char(slop << 2 | v >> 4); slop = v & 15; k2 = 2; } else if (k2 == 2) { ret += int2char(slop); ret += int2char(v >> 2); slop = v & 3; k2 = 3; } else { ret += int2char(slop << 2 | v >> 4); ret += int2char(v & 15); k2 = 0; } } if (k2 == 1) { ret += int2char(slop << 2); } return ret; } var decoder$1; var Hex = { decode: function(a) { var i; if (decoder$1 === void 0) { var hex = "0123456789ABCDEF"; var ignore = " \f\n\r  \u2028\u2029"; decoder$1 = {}; for (i = 0; i < 16; ++i) { decoder$1[hex.charAt(i)] = i; } hex = hex.toLowerCase(); for (i = 10; i < 16; ++i) { decoder$1[hex.charAt(i)] = i; } for (i = 0; i < ignore.length; ++i) { decoder$1[ignore.charAt(i)] = -1; } } var out = []; var bits = 0; var char_count = 0; for (i = 0; i < a.length; ++i) { var c = a.charAt(i); if (c == "=") { break; } c = decoder$1[c]; if (c == -1) { continue; } if (c === void 0) { throw new Error("Illegal character at offset " + i); } bits |= c; if (++char_count >= 2) { out[out.length] = bits; bits = 0; char_count = 0; } else { bits <<= 4; } } if (char_count) { throw new Error("Hex encoding incomplete: 4 bits missing"); } return out; } }; var decoder; var Base64 = { decode: function(a) { var i; if (decoder === void 0) { var b64 = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; var ignore = "= \f\n\r  \u2028\u2029"; decoder = /* @__PURE__ */ Object.create(null); for (i = 0; i < 64; ++i) { decoder[b64.charAt(i)] = i; } decoder["-"] = 62; decoder["_"] = 63; for (i = 0; i < ignore.length; ++i) { decoder[ignore.charAt(i)] = -1; } } var out = []; var bits = 0; var char_count = 0; for (i = 0; i < a.length; ++i) { var c = a.charAt(i); if (c == "=") { break; } c = decoder[c]; if (c == -1) { continue; } if (c === void 0) { throw new Error("Illegal character at offset " + i); } bits |= c; if (++char_count >= 4) { out[out.length] = bits >> 16; out[out.length] = bits >> 8 & 255; out[out.length] = bits & 255; bits = 0; char_count = 0; } else { bits <<= 6; } } switch (char_count) { case 1: throw new Error("Base64 encoding incomplete: at least 2 bits missing"); case 2: out[out.length] = bits >> 10; break; case 3: out[out.length] = bits >> 16; out[out.length] = bits >> 8 & 255; break; } return out; }, re: /-----BEGIN [^-]+-----([A-Za-z0-9+\/=\s]+)-----END [^-]+-----|begin-base64[^\n]+\n([A-Za-z0-9+\/=\s]+)====/, unarmor: function(a) { var m2 = Base64.re.exec(a); if (m2) { if (m2[1]) { a = m2[1]; } else if (m2[2]) { a = m2[2]; } else { throw new Error("RegExp out of sync"); } } return Base64.decode(a); } }; var max = 1e13; var Int10 = ( /** @class */ function() { function Int102(value) { this.buf = [+value || 0]; } Int102.prototype.mulAdd = function(m2, c) { var b = this.buf; var l2 = b.length; var i; var t; for (i = 0; i < l2; ++i) { t = b[i] * m2 + c; if (t < max) { c = 0; } else { c = 0 | t / max; t -= c * max; } b[i] = t; } if (c > 0) { b[i] = c; } }; Int102.prototype.sub = function(c) { var b = this.buf; var l2 = b.length; var i; var t; for (i = 0; i < l2; ++i) { t = b[i] - c; if (t < 0) { t += max; c = 1; } else { c = 0; } b[i] = t; } while (b[b.length - 1] === 0) { b.pop(); } }; Int102.prototype.toString = function(base) { if ((base || 10) != 10) { throw new Error("only base 10 is supported"); } var b = this.buf; var s = b[b.length - 1].toString(); for (var i = b.length - 2; i >= 0; --i) { s += (max + b[i]).toString().substring(1); } return s; }; Int102.prototype.valueOf = function() { var b = this.buf; var v = 0; for (var i = b.length - 1; i >= 0; --i) { v = v * max + b[i]; } return v; }; Int102.prototype.simplify = function() { var b = this.buf; return b.length == 1 ? b[0] : this; }; return Int102; }() ); var ellipsis = "…"; var reTimeS = /^(\d\d)(0[1-9]|1[0-2])(0[1-9]|[12]\d|3[01])([01]\d|2[0-3])(?:([0-5]\d)(?:([0-5]\d)(?:[.,](\d{1,3}))?)?)?(Z|[-+](?:[0]\d|1[0-2])([0-5]\d)?)?$/; var reTimeL = /^(\d\d\d\d)(0[1-9]|1[0-2])(0[1-9]|[12]\d|3[01])([01]\d|2[0-3])(?:([0-5]\d)(?:([0-5]\d)(?:[.,](\d{1,3}))?)?)?(Z|[-+](?:[0]\d|1[0-2])([0-5]\d)?)?$/; function stringCut(str, len) { if (str.length > len) { str = str.substring(0, len) + ellipsis; } return str; } var Stream = ( /** @class */ function() { function Stream2(enc, pos) { this.hexDigits = "0123456789ABCDEF"; if (enc instanceof Stream2) { this.enc = enc.enc; this.pos = enc.pos; } else { this.enc = enc; this.pos = pos; } } Stream2.prototype.get = function(pos) { if (pos === void 0) { pos = this.pos++; } if (pos >= this.enc.length) { throw new Error("Requesting byte offset ".concat(pos, " on a stream of length ").concat(this.enc.length)); } return "string" === typeof this.enc ? this.enc.charCodeAt(pos) : this.enc[pos]; }; Stream2.prototype.hexByte = function(b) { return this.hexDigits.charAt(b >> 4 & 15) + this.hexDigits.charAt(b & 15); }; Stream2.prototype.hexDump = function(start, end, raw) { var s = ""; for (var i = start; i < end; ++i) { s += this.hexByte(this.get(i)); if (raw !== true) { switch (i & 15) { case 7: s += " "; break; case 15: s += "\n"; break; default: s += " "; } } } return s; }; Stream2.prototype.isASCII = function(start, end) { for (var i = start; i < end; ++i) { var c = this.get(i); if (c < 32 || c > 176) { return false; } } return true; }; Stream2.prototype.parseStringISO = function(start, end) { var s = ""; for (var i = start; i < end; ++i) { s += String.fromCharCode(this.get(i)); } return s; }; Stream2.prototype.parseStringUTF = function(start, end) { var s = ""; for (var i = start; i < end; ) { var c = this.get(i++); if (c < 128) { s += String.fromCharCode(c); } else if (c > 191 && c < 224) { s += String.fromCharCode((c & 31) << 6 | this.get(i++) & 63); } else { s += String.fromCharCode((c & 15) << 12 | (this.get(i++) & 63) << 6 | this.get(i++) & 63); } } return s; }; Stream2.prototype.parseStringBMP = function(start, end) { var str = ""; var hi; var lo; for (var i = start; i < end; ) { hi = this.get(i++); lo = this.get(i++); str += String.fromCharCode(hi << 8 | lo); } return str; }; Stream2.prototype.parseTime = function(start, end, shortYear) { var s = this.parseStringISO(start, end); var m2 = (shortYear ? reTimeS : reTimeL).exec(s); if (!m2) { return "Unrecognized time: " + s; } if (shortYear) { m2[1] = +m2[1]; m2[1] += +m2[1] < 70 ? 2e3 : 1900; } s = m2[1] + "-" + m2[2] + "-" + m2[3] + " " + m2[4]; if (m2[5]) { s += ":" + m2[5]; if (m2[6]) { s += ":" + m2[6]; if (m2[7]) { s += "." + m2[7]; } } } if (m2[8]) { s += " UTC"; if (m2[8] != "Z") { s += m2[8]; if (m2[9]) { s += ":" + m2[9]; } } } return s; }; Stream2.prototype.parseInteger = function(start, end) { var v = this.get(start); var neg = v > 127; var pad = neg ? 255 : 0; var len; var s = ""; while (v == pad && ++start < end) { v = this.get(start); } len = end - start; if (len === 0) { return neg ? -1 : 0; } if (len > 4) { s = v; len <<= 3; while (((+s ^ pad) & 128) == 0) { s = +s << 1; --len; } s = "(" + len + " bit)\n"; } if (neg) { v = v - 256; } var n2 = new Int10(v); for (var i = start + 1; i < end; ++i) { n2.mulAdd(256, this.get(i)); } return s + n2.toString(); }; Stream2.prototype.parseBitString = function(start, end, maxLength) { var unusedBit = this.get(start); var lenBit = (end - start - 1 << 3) - unusedBit; var intro = "(" + lenBit + " bit)\n"; var s = ""; for (var i = start + 1; i < end; ++i) { var b = this.get(i); var skip = i == end - 1 ? unusedBit : 0; for (var j = 7; j >= skip; --j) { s += b >> j & 1 ? "1" : "0"; } if (s.length > maxLength) { return intro + stringCut(s, maxLength); } } return intro + s; }; Stream2.prototype.parseOctetString = function(start, end, maxLength) { if (this.isASCII(start, end)) { return stringCut(this.parseStringISO(start, end), maxLength); } var len = end - start; var s = "(" + len + " byte)\n"; maxLength /= 2; if (len > maxLength) { end = start + maxLength; } for (var i = start; i < end; ++i) { s += this.hexByte(this.get(i)); } if (len > maxLength) { s += ellipsis; } return s; }; Stream2.prototype.parseOID = function(start, end, maxLength) { var s = ""; var n2 = new Int10(); var bits = 0; for (var i = start; i < end; ++i) { var v = this.get(i); n2.mulAdd(128, v & 127); bits += 7; if (!(v & 128)) { if (s === "") { n2 = n2.simplify(); if (n2 instanceof Int10) { n2.sub(80); s = "2." + n2.toString(); } else { var m2 = n2 < 80 ? n2 < 40 ? 0 : 1 : 2; s = m2 + "." + (n2 - m2 * 40); } } else { s += "." + n2.toString(); } if (s.length > maxLength) { return stringCut(s, maxLength); } n2 = new Int10(); bits = 0; } } if (bits > 0) { s += ".incomplete"; } return s; }; return Stream2; }() ); var ASN1 = ( /** @class */ function() { function ASN12(stream, header, length, tag, sub) { if (!(tag instanceof ASN1Tag)) { throw new Error("Invalid tag value."); } this.stream = stream; this.header = header; this.length = length; this.tag = tag; this.sub = sub; } ASN12.prototype.typeName = function() { switch (this.tag.tagClass) { case 0: switch (this.tag.tagNumber) { case 0: return "EOC"; case 1: return "BOOLEAN"; case 2: return "INTEGER"; case 3: return "BIT_STRING"; case 4: return "OCTET_STRING"; case 5: return "NULL"; case 6: return "OBJECT_IDENTIFIER"; case 7: return "ObjectDescriptor"; case 8: return "EXTERNAL"; case 9: return "REAL"; case 10: return "ENUMERATED"; case 11: return "EMBEDDED_PDV"; case 12: return "UTF8String"; case 16: return "SEQUENCE"; case 17: return "SET"; case 18: return "NumericString"; case 19: return "PrintableString"; case 20: return "TeletexString"; case 21: return "VideotexString"; case 22: return "IA5String"; case 23: return "UTCTime"; case 24: return "GeneralizedTime"; case 25: return "GraphicString"; case 26: return "VisibleString"; case 27: return "GeneralString"; case 28: return "UniversalString"; case 30: return "BMPString"; } return "Universal_" + this.tag.tagNumber.toString(); case 1: return "Application_" + this.tag.tagNumber.toString(); case 2: return "[" + this.tag.tagNumber.toString() + "]"; case 3: return "Private_" + this.tag.tagNumber.toString(); } }; ASN12.prototype.content = function(maxLength) { if (this.tag === void 0) { return null; } if (maxLength === void 0) { maxLength = Infinity; } var content = this.posContent(); var len = Math.abs(this.length); if (!this.tag.isUniversal()) { if (this.sub !== null) { return "(" + this.sub.length + " elem)"; } return this.stream.parseOctetString(content, content + len, maxLength); } switch (this.tag.tagNumber) { case 1: return this.stream.get(content) === 0 ? "false" : "true"; case 2: return this.stream.parseInteger(content, content + len); case 3: return this.sub ? "(" + this.sub.length + " elem)" : this.stream.parseBitString(content, content + len, maxLength); case 4: return this.sub ? "(" + this.sub.length + " elem)" : this.stream.parseOctetString(content, content + len, maxLength); case 6: return this.stream.parseOID(content, content + len, maxLength); case 16: case 17: if (this.sub !== null) { return "(" + this.sub.length + " elem)"; } else { return "(no elem)"; } case 12: return stringCut(this.stream.parseStringUTF(content, content + len), maxLength); case 18: case 19: case 20: case 21: case 22: case 26: return stringCut(this.stream.parseStringISO(content, content + len), maxLength); case 30: return stringCut(this.stream.parseStringBMP(content, content + len), maxLength); case 23: case 24: return this.stream.parseTime(content, content + len, this.tag.tagNumber == 23); } return null; }; ASN12.prototype.toString = function() { return this.typeName() + "@" + this.stream.pos + "[header:" + this.header + ",length:" + this.length + ",sub:" + (this.sub === null ? "null" : this.sub.length) + "]"; }; ASN12.prototype.toPrettyString = function(indent) { if (indent === void 0) { indent = ""; } var s = indent + this.typeName() + " @" + this.stream.pos; if (this.length >= 0) { s += "+"; } s += this.length; if (this.tag.tagConstructed) { s += " (constructed)"; } else if (this.tag.isUniversal() && (this.tag.tagNumber == 3 || this.tag.tagNumber == 4) && this.sub !== null) { s += " (encapsulates)"; } s += "\n"; if (this.sub !== null) { indent += " "; for (var i = 0, max2 = this.sub.length; i < max2; ++i) { s += this.sub[i].toPrettyString(indent); } } return s; }; ASN12.prototype.posStart = function() { return this.stream.pos; }; ASN12.prototype.posContent = function() { return this.stream.pos + this.header; }; ASN12.prototype.posEnd = function() { return this.stream.pos + this.header + Math.abs(this.length); }; ASN12.prototype.toHexString = function() { return this.stream.hexDump(this.posStart(), this.posEnd(), true); }; ASN12.decodeLength = function(stream) { var buf = stream.get(); var len = buf & 127; if (len == buf) { return len; } if (len > 6) { throw new Error("Length over 48 bits not supported at position " + (stream.pos - 1)); } if (len === 0) { return null; } buf = 0; for (var i = 0; i < len; ++i) { buf = buf * 256 + stream.get(); } return buf; }; ASN12.prototype.getHexStringValue = function() { var hexString = this.toHexString(); var offset = this.header * 2; var length = this.length * 2; return hexString.substr(offset, length); }; ASN12.decode = function(str) { var stream; if (!(str instanceof Stream)) { stream = new Stream(str, 0); } else { stream = str; } var streamStart = new Stream(stream); var tag = new ASN1Tag(stream); var len = ASN12.decodeLength(stream); var start = stream.pos; var header = start - streamStart.pos; var sub = null; var getSub = function() { var ret = []; if (len !== null) { var end = start + len; while (stream.pos < end) { ret[ret.length] = ASN12.decode(stream); } if (stream.pos != end) { throw new Error("Content size is not correct for container starting at offset " + start); } } else { try { for (; ; ) { var s = ASN12.decode(stream); if (s.tag.isEOC()) { break; } ret[ret.length] = s; } len = start - stream.pos; } catch (e) { throw new Error("Exception while decoding undefined length content: " + e); } } return ret; }; if (tag.tagConstructed) { sub = getSub(); } else if (tag.isUniversal() && (tag.tagNumber == 3 || tag.tagNumber == 4)) { try { if (tag.tagNumber == 3) { if (stream.get() != 0) { throw new Error("BIT STRINGs with unused bits cannot encapsulate."); } } sub = getSub(); for (var i = 0; i < sub.length; ++i) { if (sub[i].tag.isEOC()) { throw new Error("EOC is not supposed to be actual content."); } } } catch (e) { sub = null; } } if (sub === null) { if (len === null) { throw new Error("We can't skip over an invalid tag with undefined length at offset " + start); } stream.pos = start + Math.abs(len); } return new ASN12(streamStart, header, len, tag, sub); }; return ASN12; }() ); var ASN1Tag = ( /** @class */ function() { function ASN1Tag2(stream) { var buf = stream.get(); this.tagClass = buf >> 6; this.tagConstructed = (buf & 32) !== 0; this.tagNumber = buf & 31; if (this.tagNumber == 31) { var n2 = new Int10(); do { buf = stream.get(); n2.mulAdd(128, buf & 127); } while (buf & 128); this.tagNumber = n2.simplify(); } } ASN1Tag2.prototype.isUniversal = function() { return this.tagClass === 0; }; ASN1Tag2.prototype.isEOC = function() { return this.tagClass === 0 && this.tagNumber === 0; }; return ASN1Tag2; }() ); var dbits; var canary = 244837814094590; var j_lm = (canary & 16777215) == 15715070; var lowprimes = [2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97, 101, 103, 107, 109, 113, 127, 131, 137, 139, 149, 151, 157, 163, 167, 173, 179, 181, 191, 193, 197, 199, 211, 223, 227, 229, 233, 239, 241, 251, 257, 263, 269, 271, 277, 281, 283, 293, 307, 311, 313, 317, 331, 337, 347, 349, 353, 359, 367, 373, 379, 383, 389, 397, 401, 409, 419, 421, 431, 433, 439, 443, 449, 457, 461, 463, 467, 479, 487, 491, 499, 503, 509, 521, 523, 541, 547, 557, 563, 569, 571, 577, 587, 593, 599, 601, 607, 613, 617, 619, 631, 641, 643, 647, 653, 659, 661, 673, 677, 683, 691, 701, 709, 719, 727, 733, 739, 743, 751, 757, 761, 769, 773, 787, 797, 809, 811, 821, 823, 827, 829, 839, 853, 857, 859, 863, 877, 881, 883, 887, 907, 911, 919, 929, 937, 941, 947, 953, 967, 971, 977, 983, 991, 997]; var lplim = (1 << 26) / lowprimes[lowprimes.length - 1]; var BigInteger = ( /** @class */ function() { function BigInteger2(a, b, c) { if (a != null) { if ("number" == typeof a) { this.fromNumber(a, b, c); } else if (b == null && "string" != typeof a) { this.fromString(a, 256); } else { this.fromString(a, b); } } } BigInteger2.prototype.toString = function(b) { if (this.s < 0) { return "-" + this.negate().toString(b); } var k2; if (b == 16) { k2 = 4; } else if (b == 8) { k2 = 3; } else if (b == 2) { k2 = 1; } else if (b == 32) { k2 = 5; } else if (b == 4) { k2 = 2; } else { return this.toRadix(b); } var km = (1 << k2) - 1; var d; var m2 = false; var r = ""; var i = this.t; var p2 = this.DB - i * this.DB % k2; if (i-- > 0) { if (p2 < this.DB && (d = this[i] >> p2) > 0) { m2 = true; r = int2char(d); } while (i >= 0) { if (p2 < k2) { d = (this[i] & (1 << p2) - 1) << k2 - p2; d |= this[--i] >> (p2 += this.DB - k2); } else { d = this[i] >> (p2 -= k2) & km; if (p2 <= 0) { p2 += this.DB; --i; } } if (d > 0) { m2 = true; } if (m2) { r += int2char(d); } } } return m2 ? r : "0"; }; BigInteger2.prototype.negate = function() { var r = nbi(); BigInteger2.ZERO.subTo(this, r); return r; }; BigInteger2.prototype.abs = function() { return this.s < 0 ? this.negate() : this; }; BigInteger2.prototype.compareTo = function(a) { var r = this.s - a.s; if (r != 0) { return r; } var i = this.t; r = i - a.t; if (r != 0) { return this.s < 0 ? -r : r; } while (--i >= 0) { if ((r = this[i] - a[i]) != 0) { return r; } } return 0; }; BigInteger2.prototype.bitLength = function() { if (this.t <= 0) { return 0; } return this.DB * (this.t - 1) + nbits(this[this.t - 1] ^ this.s & this.DM); }; BigInteger2.prototype.mod = function(a) { var r = nbi(); this.abs().divRemTo(a, null, r); if (this.s < 0 && r.compareTo(BigInteger2.ZERO) > 0) { a.subTo(r, r); } return r; }; BigInteger2.prototype.modPowInt = function(e, m2) { var z; if (e < 256 || m2.isEven()) { z = new Classic(m2); } else { z = new Montgomery(m2); } return this.exp(e, z); }; BigInteger2.prototype.clone = function() { var r = nbi(); this.copyTo(r); return r; }; BigInteger2.prototype.intValue = function() { if (this.s < 0) { if (this.t == 1) { return this[0] - this.DV; } else if (this.t == 0) { return -1; } } else if (this.t == 1) { return this[0]; } else if (this.t == 0) { return 0; } return (this[1] & (1 << 32 - this.DB) - 1) << this.DB | this[0]; }; BigInteger2.prototype.byteValue = function() { return this.t == 0 ? this.s : this[0] << 24 >> 24; }; BigInteger2.prototype.shortValue = function() { return this.t == 0 ? this.s : this[0] << 16 >> 16; }; BigInteger2.prototype.signum = function() { if (this.s < 0) { return -1; } else if (this.t <= 0 || this.t == 1 && this[0] <= 0) { return 0; } else { return 1; } }; BigInteger2.prototype.toByteArray = function() { var i = this.t; var r = []; r[0] = this.s; var p2 = this.DB - i * this.DB % 8; var d; var k2 = 0; if (i-- > 0) { if (p2 < this.DB && (d = this[i] >> p2) != (this.s & this.DM) >> p2) { r[k2++] = d | this.s << this.DB - p2; } while (i >= 0) { if (p2 < 8) { d = (this[i] & (1 << p2) - 1) << 8 - p2; d |= this[--i] >> (p2 += this.DB - 8); } else { d = this[i] >> (p2 -= 8) & 255; if (p2 <= 0) { p2 += this.DB; --i; } } if ((d & 128) != 0) { d |= -256; } if (k2 == 0 && (this.s & 128) != (d & 128)) { ++k2; } if (k2 > 0 || d != this.s) { r[k2++] = d; } } } return r; }; BigInteger2.prototype.equals = function(a) { return this.compareTo(a) == 0; }; BigInteger2.prototype.min = function(a) { return this.compareTo(a) < 0 ? this : a; }; BigInteger2.prototype.max = function(a) { return this.compareTo(a) > 0 ? this : a; }; BigInteger2.prototype.and = function(a) { var r = nbi(); this.bitwiseTo(a, op_and, r); return r; }; BigInteger2.prototype.or = function(a) { var r = nbi(); this.bitwiseTo(a, op_or, r); return r; }; BigInteger2.prototype.xor = function(a) { var r = nbi(); this.bitwiseTo(a, op_xor, r); return r; }; BigInteger2.prototype.andNot = function(a) { var r = nbi(); this.bitwiseTo(a, op_andnot, r); return r; }; BigInteger2.prototype.not = function() { var r = nbi(); for (var i = 0; i < this.t; ++i) { r[i] = this.DM & ~this[i]; } r.t = this.t; r.s = ~this.s; return r; }; BigInteger2.prototype.shiftLeft = function(n2) { var r = nbi(); if (n2 < 0) { this.rShiftTo(-n2, r); } else { this.lShiftTo(n2, r); } return r; }; BigInteger2.prototype.shiftRight = function(n2) { var r = nbi(); if (n2 < 0) { this.lShiftTo(-n2, r); } else { this.rShiftTo(n2, r); } return r; }; BigInteger2.prototype.getLowestSetBit = function() { for (var i = 0; i < this.t; ++i) { if (this[i] != 0) { return i * this.DB + lbit(this[i]); } } if (this.s < 0) { return this.t * this.DB; } return -1; }; BigInteger2.prototype.bitCount = function() { var r = 0; var x = this.s & this.DM; for (var i = 0; i < this.t; ++i) { r += cbit(this[i] ^ x); } return r; }; BigInteger2.prototype.testBit = function(n2) { var j = Math.floor(n2 / this.DB); if (j >= this.t) { return this.s != 0; } return (this[j] & 1 << n2 % this.DB) != 0; }; BigInteger2.prototype.setBit = function(n2) { return this.changeBit(n2, op_or); }; BigInteger2.prototype.clearBit = function(n2) { return this.changeBit(n2, op_andnot); }; BigInteger2.prototype.flipBit = function(n2) { return this.changeBit(n2, op_xor); }; BigInteger2.prototype.add = function(a) { var r = nbi(); this.addTo(a, r); return r; }; BigInteger2.prototype.subtract = function(a) { var r = nbi(); this.subTo(a, r); return r; }; BigInteger2.prototype.multiply = function(a) { var r = nbi(); this.multiplyTo(a, r); return r; }; BigInteger2.prototype.divide = function(a) { var r = nbi(); this.divRemTo(a, r, null); return r; }; BigInteger2.prototype.remainder = function(a) { var r = nbi(); this.divRemTo(a, null, r); return r; }; BigInteger2.prototype.divideAndRemainder = function(a) { var q2 = nbi(); var r = nbi(); this.divRemTo(a, q2, r); return [q2, r]; }; BigInteger2.prototype.modPow = function(e, m2) { var i = e.bitLength(); var k2; var r = nbv(1); var z; if (i <= 0) { return r; } else if (i < 18) { k2 = 1; } else if (i < 48) { k2 = 3; } else if (i < 144) { k2 = 4; } else if (i < 768) { k2 = 5; } else { k2 = 6; } if (i < 8) { z = new Classic(m2); } else if (m2.isEven()) { z = new Barrett(m2); } else { z = new Montgomery(m2); } var g = []; var n2 = 3; var k1 = k2 - 1; var km = (1 << k2) - 1; g[1] = z.convert(this); if (k2 > 1) { var g2 = nbi(); z.sqrTo(g[1], g2); while (n2 <= km) { g[n2] = nbi(); z.mulTo(g2, g[n2 - 2], g[n2]); n2 += 2; } } var j = e.t - 1; var w; var is1 = true; var r2 = nbi(); var t; i = nbits(e[j]) - 1; while (j >= 0) { if (i >= k1) { w = e[j] >> i - k1 & km; } else { w = (e[j] & (1 << i + 1) - 1) << k1 - i; if (j > 0) { w |= e[j - 1] >> this.DB + i - k1; } } n2 = k2; while ((w & 1) == 0) { w >>= 1; --n2; } if ((i -= n2) < 0) { i += this.DB; --j; } if (is1) { g[w].copyTo(r); is1 = false; } else { while (n2 > 1) { z.sqrTo(r, r2); z.sqrTo(r2, r); n2 -= 2; } if (n2 > 0) { z.sqrTo(r, r2); } else { t = r; r = r2; r2 = t; } z.mulTo(r2, g[w], r); } while (j >= 0 && (e[j] & 1 << i) == 0) { z.sqrTo(r, r2); t = r; r = r2; r2 = t; if (--i < 0) { i = this.DB - 1; --j; } } } return z.revert(r); }; BigInteger2.prototype.modInverse = function(m2) { var ac = m2.isEven(); if (this.isEven() && ac || m2.signum() == 0) { return BigInteger2.ZERO; } var u = m2.clone(); var v = this.clone(); var a = nbv(1); var b = nbv(0); var c = nbv(0); var d = nbv(1); while (u.signum() != 0) { while (u.isEven()) { u.rShiftTo(1, u); if (ac) { if (!a.isEven() || !b.isEven()) { a.addTo(this, a); b.subTo(m2, b); } a.rShiftTo(1, a); } else if (!b.isEven()) { b.subTo(m2, b); } b.rShiftTo(1, b); } while (v.isEven()) { v.rShiftTo(1, v); if (ac) { if (!c.isEven() || !d.isEven()) { c.addTo(this, c); d.subTo(m2, d); } c.rShiftTo(1, c); } else if (!d.isEven()) { d.subTo(m2, d); } d.rShiftTo(1, d); } if (u.compareTo(v) >= 0) { u.subTo(v, u); if (ac) { a.subTo(c, a); } b.subTo(d, b); } else { v.subTo(u, v); if (ac) { c.subTo(a, c); } d.subTo(b, d); } } if (v.compareTo(BigInteger2.ONE) != 0) { return BigInteger2.ZERO; } if (d.compareTo(m2) >= 0) { return d.subtract(m2); } if (d.signum() < 0) { d.addTo(m2, d); } else { return d; } if (d.signum() < 0) { return d.add(m2); } else { return d; } }; BigInteger2.prototype.pow = function(e) { return this.exp(e, new NullExp()); }; BigInteger2.prototype.gcd = function(a) { var x = this.s < 0 ? this.negate() : this.clone(); var y = a.s < 0 ? a.negate() : a.clone(); if (x.compareTo(y) < 0) { var t = x; x = y; y = t; } var i = x.getLowestSetBit(); var g = y.getLowestSetBit(); if (g < 0) { return x; } if (i < g) { g = i; } if (g > 0) { x.rShiftTo(g, x); y.rShiftTo(g, y); } while (x.signum() > 0) { if ((i = x.getLowestSetBit()) > 0) { x.rShiftTo(i, x); } if ((i = y.getLowestSetBit()) > 0) { y.rShiftTo(i, y); } if (x.compareTo(y) >= 0) { x.subTo(y, x); x.rShiftTo(1, x); } else { y.subTo(x, y); y.rShiftTo(1, y); } } if (g > 0) { y.lShiftTo(g, y); } return y; }; BigInteger2.prototype.isProbablePrime = function(t) { var i; var x = this.abs(); if (x.t == 1 && x[0] <= lowprimes[lowprimes.length - 1]) { for (i = 0; i < lowprimes.length; ++i) { if (x[0] == lowprimes[i]) { return true; } } return false; } if (x.isEven()) { return false; } i = 1; while (i < lowprimes.length) { var m2 = lowprimes[i]; var j = i + 1; while (j < lowprimes.length && m2 < lplim) { m2 *= lowprimes[j++]; } m2 = x.modInt(m2); while (i < j) { if (m2 % lowprimes[i++] == 0) { return false; } } } return x.millerRabin(t); }; BigInteger2.prototype.copyTo = function(r) { for (var i = this.t - 1; i >= 0; --i) { r[i] = this[i]; } r.t = this.t; r.s = this.s; }; BigInteger2.prototype.fromInt = function(x) { this.t = 1; this.s = x < 0 ? -1 : 0; if (x > 0) { this[0] = x; } else if (x < -1) { this[0] = x + this.DV; } else { this.t = 0; } }; BigInteger2.prototype.fromString = function(s, b) { var k2; if (b == 16) { k2 = 4; } else if (b == 8) { k2 = 3; } else if (b == 256) { k2 = 8; } else if (b == 2) { k2 = 1; } else if (b == 32) { k2 = 5; } else if (b == 4) { k2 = 2; } else { this.fromRadix(s, b); return; } this.t = 0; this.s = 0; var i = s.length; var mi = false; var sh = 0; while (--i >= 0) { var x = k2 == 8 ? +s[i] & 255 : intAt(s, i); if (x < 0) { if (s.charAt(i) == "-") { mi = true; } continue; } mi = false; if (sh == 0) { this[this.t++] = x; } else if (sh + k2 > this.DB) { this[this.t - 1] |= (x & (1 << this.DB - sh) - 1) << sh; this[this.t++] = x >> this.DB - sh; } else { this[this.t - 1] |= x << sh; } sh += k2; if (sh >= this.DB) { sh -= this.DB; } } if (k2 == 8 && (+s[0] & 128) != 0) { this.s = -1; if (sh > 0) { this[this.t - 1] |= (1 << this.DB - sh) - 1 << sh; } } this.clamp(); if (mi) { BigInteger2.ZERO.subTo(this, this); } }; BigInteger2.prototype.clamp = function() { var c = this.s & this.DM; while (this.t > 0 && this[this.t - 1] == c) { --this.t; } }; BigInteger2.prototype.dlShiftTo = function(n2, r) { var i; for (i = this.t - 1; i >= 0; --i) { r[i + n2] = this[i]; } for (i = n2 - 1; i >= 0; --i) { r[i] = 0; } r.t = this.t + n2; r.s = this.s; }; BigInteger2.prototype.drShiftTo = function(n2, r) { for (var i = n2; i < this.t; ++i) { r[i - n2] = this[i]; } r.t = Math.max(this.t - n2, 0); r.s = this.s; }; BigInteger2.prototype.lShiftTo = function(n2, r) { var bs = n2 % this.DB; var cbs = this.DB - bs; var bm = (1 << cbs) - 1; var ds = Math.floor(n2 / this.DB); var c = this.s << bs & this.DM; for (var i = this.t - 1; i >= 0; --i) { r[i + ds + 1] = this[i] >> cbs | c; c = (this[i] & bm) << bs; } for (var i = ds - 1; i >= 0; --i) { r[i] = 0; } r[ds] = c; r.t = this.t + ds + 1; r.s = this.s; r.clamp(); }; BigInteger2.prototype.rShiftTo = function(n2, r) { r.s = this.s; var ds = Math.floor(n2 / this.DB); if (ds >= this.t) { r.t = 0; return; } var bs = n2 % this.DB; var cbs = this.DB - bs; var bm = (1 << bs) - 1; r[0] = this[ds] >> bs; for (var i = ds + 1; i < this.t; ++i) { r[i - ds - 1] |= (this[i] & bm) << cbs; r[i - ds] = this[i] >> bs; } if (bs > 0) { r[this.t - ds - 1] |= (this.s & bm) << cbs; } r.t = this.t - ds; r.clamp(); }; BigInteger2.prototype.subTo = function(a, r) { var i = 0; var c = 0; var m2 = Math.min(a.t, this.t); while (i < m2) { c += this[i] - a[i]; r[i++] = c & this.DM; c >>= this.DB; } if (a.t < this.t) { c -= a.s; while (i < this.t) { c += this[i]; r[i++] = c & this.DM; c >>= this.DB; } c += this.s; } else { c += this.s; while (i < a.t) { c -= a[i]; r[i++] = c & this.DM; c >>= this.DB; } c -= a.s; } r.s = c < 0 ? -1 : 0; if (c < -1) { r[i++] = this.DV + c; } else if (c > 0) { r[i++] = c; } r.t = i; r.clamp(); }; BigInteger2.prototype.multiplyTo = function(a, r) { var x = this.abs(); var y = a.abs(); var i = x.t; r.t = i + y.t; while (--i >= 0) { r[i] = 0; } for (i = 0; i < y.t; ++i) { r[i + x.t] = x.am(0, y[i], r, i, 0, x.t); } r.s = 0; r.clamp(); if (this.s != a.s) { BigInteger2.ZERO.subTo(r, r); } }; BigInteger2.prototype.squareTo = function(r) { var x = this.abs(); var i = r.t = 2 * x.t; while (--i >= 0) { r[i] = 0; } for (i = 0; i < x.t - 1; ++i) { var c = x.am(i, x[i], r, 2 * i, 0, 1); if ((r[i + x.t] += x.am(i + 1, 2 * x[i], r, 2 * i + 1, c, x.t - i - 1)) >= x.DV) { r[i + x.t] -= x.DV; r[i + x.t + 1] = 1; } } if (r.t > 0) { r[r.t - 1] += x.am(i, x[i], r, 2 * i, 0, 1); } r.s = 0; r.clamp(); }; BigInteger2.prototype.divRemTo = function(m2, q2, r) { var pm = m2.abs(); if (pm.t <= 0) { return; } var pt = this.abs(); if (pt.t < pm.t) { if (q2 != null) { q2.fromInt(0); } if (r != null) { this.copyTo(r); } return; } if (r == null) { r = nbi(); } var y = nbi(); var ts = this.s; var ms = m2.s; var nsh = this.DB - nbits(pm[pm.t - 1]); if (nsh > 0) { pm.lShiftTo(nsh, y); pt.lShiftTo(nsh, r); } else { pm.copyTo(y); pt.copyTo(r); } var ys = y.t; var y0 = y[ys - 1]; if (y0 == 0) { return; } var yt = y0 * (1 << this.F1) + (ys > 1 ? y[ys - 2] >> this.F2 : 0); var d1 = this.FV / yt; var d2 = (1 << this.F1) / yt; var e = 1 << this.F2; var i = r.t; var j = i - ys; var t = q2 == null ? nbi() : q2; y.dlShiftTo(j, t); if (r.compareTo(t) >= 0) { r[r.t++] = 1; r.subTo(t, r); } BigInteger2.ONE.dlShiftTo(ys, t); t.subTo(y, y); while (y.t < ys) { y[y.t++] = 0; } while (--j >= 0) { var qd = r[--i] == y0 ? this.DM : Math.floor(r[i] * d1 + (r[i - 1] + e) * d2); if ((r[i] += y.am(0, qd, r, j, 0, ys)) < qd) { y.dlShiftTo(j, t); r.subTo(t, r); while (r[i] < --qd) { r.subTo(t, r); } } } if (q2 != null) { r.drShiftTo(ys, q2); if (ts != ms) { BigInteger2.ZERO.subTo(q2, q2); } } r.t = ys; r.clamp(); if (nsh > 0) { r.rShiftTo(nsh, r); } if (ts < 0) { BigInteger2.ZERO.subTo(r, r); } }; BigInteger2.prototype.invDigit = function() { if (this.t < 1) { return 0; } var x = this[0]; if ((x & 1) == 0) { return 0; } var y = x & 3; y = y * (2 - (x & 15) * y) & 15; y = y * (2 - (x & 255) * y) & 255; y = y * (2 - ((x & 65535) * y & 65535)) & 65535; y = y * (2 - x * y % this.DV) % this.DV; return y > 0 ? this.DV - y : -y; }; BigInteger2.prototype.isEven = function() { return (this.t > 0 ? this[0] & 1 : this.s) == 0; }; BigInteger2.prototype.exp = function(e, z) { if (e > 4294967295 || e < 1) { return BigInteger2.ONE; } var r = nbi(); var r2 = nbi(); var g = z.convert(this); var i = nbits(e) - 1; g.copyTo(r); while (--i >= 0) { z.sqrTo(r, r2); if ((e & 1 << i) > 0) { z.mulTo(r2, g, r); } else { var t = r; r = r2; r2 = t; } } return z.revert(r); }; BigInteger2.prototype.chunkSize = function(r) { return Math.floor(Math.LN2 * this.DB / Math.log(r)); }; BigInteger2.prototype.toRadix = function(b) { if (b == null) { b = 10; } if (this.signum() == 0 || b < 2 || b > 36) { return "0"; } var cs = this.chunkSize(b); var a = Math.pow(b, cs); var d = nbv(a); var y = nbi(); var z = nbi(); var r = ""; this.divRemTo(d, y, z); while (y.signum() > 0) { r = (a + z.intValue()).toString(b).substr(1) + r; y.divRemTo(d, y, z); } return z.intValue().toString(b) + r; }; BigInteger2.prototype.fromRadix = function(s, b) { this.fromInt(0); if (b == null) { b = 10; } var cs = this.chunkSize(b); var d = Math.pow(b, cs); var mi = false; var j = 0; var w = 0; for (var i = 0; i < s.length; ++i) { var x = intAt(s, i); if (x < 0) { if (s.charAt(i) == "-" && this.signum() == 0) { mi = true; } continue; } w = b * w + x; if (++j >= cs) { this.dMultiply(d); this.dAddOffset(w, 0); j = 0; w = 0; } } if (j > 0) { this.dMultiply(Math.pow(b, j)); this.dAddOffset(w, 0); } if (mi) { BigInteger2.ZERO.subTo(this, this); } }; BigInteger2.prototype.fromNumber = function(a, b, c) { if ("number" == typeof b) { if (a < 2) { this.fromInt(1); } else { this.fromNumber(a, c); if (!this.testBit(a - 1)) { this.bitwiseTo(BigInteger2.ONE.shiftLeft(a - 1), op_or, this); } if (this.isEven()) { this.dAddOffset(1, 0); } while (!this.isProbablePrime(b)) { this.dAddOffset(2, 0); if (this.bitLength() > a) { this.subTo(BigInteger2.ONE.shiftLeft(a - 1), this); } } } } else { var x = []; var t = a & 7; x.length = (a >> 3) + 1; b.nextBytes(x); if (t > 0) { x[0] &= (1 << t) - 1; } else { x[0] = 0; } this.fromString(x, 256); } }; BigInteger2.prototype.bitwiseTo = function(a, op, r) { var i; var f2; var m2 = Math.min(a.t, this.t); for (i = 0; i < m2; ++i) { r[i] = op(this[i], a[i]); } if (a.t < this.t) { f2 = a.s & this.DM; for (i = m2; i < this.t; ++i) { r[i] = op(this[i], f2); } r.t = this.t; } else { f2 = this.s & this.DM; for (i = m2; i < a.t; ++i) { r[i] = op(f2, a[i]); } r.t = a.t; } r.s = op(this.s, a.s); r.clamp(); }; BigInteger2.prototype.changeBit = function(n2, op) { var r = BigInteger2.ONE.shiftLeft(n2); this.bitwiseTo(r, op, r); return r; }; BigInteger2.prototype.addTo = function(a, r) { var i = 0; var c = 0; var m2 = Math.min(a.t, this.t); while (i < m2) { c += this[i] + a[i]; r[i++] = c & this.DM; c >>= this.DB; } if (a.t < this.t) { c += a.s; while (i < this.t) { c += this[i]; r[i++] = c & this.DM; c >>= this.DB; } c += this.s; } else { c += this.s; while (i < a.t) { c += a[i]; r[i++] = c & this.DM; c >>= this.DB; } c += a.s; } r.s = c < 0 ? -1 : 0; if (c > 0) { r[i++] = c; } else if (c < -1) { r[i++] = this.DV + c; } r.t = i; r.clamp(); }; BigInteger2.prototype.dMultiply = function(n2) { this[this.t] = this.am(0, n2 - 1, this, 0, 0, this.t); ++this.t; this.clamp(); }; BigInteger2.prototype.dAddOffset = function(n2, w) { if (n2 == 0) { return; } while (this.t <= w) { this[this.t++] = 0; } this[w] += n2; while (this[w] >= this.DV) { this[w] -= this.DV; if (++w >= this.t) { this[this.t++] = 0; } ++this[w]; } }; BigInteger2.prototype.multiplyLowerTo = function(a, n2, r) { var i = Math.min(this.t + a.t, n2); r.s = 0; r.t = i; while (i > 0) { r[--i] = 0; } for (var j = r.t - this.t; i < j; ++i) { r[i + this.t] = this.am(0, a[i], r, i, 0, this.t); } for (var j = Math.min(a.t, n2); i < j; ++i) { this.am(0, a[i], r, i, 0, n2 - i); } r.clamp(); }; BigInteger2.prototype.multiplyUpperTo = function(a, n2, r) { --n2; var i = r.t = this.t + a.t - n2; r.s = 0; while (--i >= 0) { r[i] = 0; } for (i = Math.max(n2 - this.t, 0); i < a.t; ++i) { r[this.t + i - n2] = this.am(n2 - i, a[i], r, 0, 0, this.t + i - n2); } r.clamp(); r.drShiftTo(1, r); }; BigInteger2.prototype.modInt = function(n2) { if (n2 <= 0) { return 0; } var d = this.DV % n2; var r = this.s < 0 ? n2 - 1 : 0; if (this.t > 0) { if (d == 0) { r = this[0] % n2; } else { for (var i = this.t - 1; i >= 0; --i) { r = (d * r + this[i]) % n2; } } } return r; }; BigInteger2.prototype.millerRabin = function(t) { var n1 = this.subtract(BigInteger2.ONE); var k2 = n1.getLowestSetBit(); if (k2 <= 0) { return false; } var r = n1.shiftRight(k2); t = t + 1 >> 1; if (t > lowprimes.length) { t = lowprimes.length; } var a = nbi(); for (var i = 0; i < t; ++i) { a.fromInt(lowprimes[Math.floor(Math.random() * lowprimes.length)]); var y = a.modPow(r, this); if (y.compareTo(BigInteger2.ONE) != 0 && y.compareTo(n1) != 0) { var j = 1; while (j++ < k2 && y.compareTo(n1) != 0) { y = y.modPowInt(2, this); if (y.compareTo(BigInteger2.ONE) == 0) { return false; } } if (y.compareTo(n1) != 0) { return false; } } } return true; }; BigInteger2.prototype.square = function() { var r = nbi(); this.squareTo(r); return r; }; BigInteger2.prototype.gcda = function(a, callback) { var x = this.s < 0 ? this.negate() : this.clone(); var y = a.s < 0 ? a.negate() : a.clone(); if (x.compareTo(y) < 0) { var t = x; x = y; y = t; } var i = x.getLowestSetBit(); var g = y.getLowestSetBit(); if (g < 0) { callback(x); return; } if (i < g) { g = i; } if (g > 0) { x.rShiftTo(g, x); y.rShiftTo(g, y); } var gcda1 = function() { if ((i = x.getLowestSetBit()) > 0) { x.rShiftTo(i, x); } if ((i = y.getLowestSetBit()) > 0) { y.rShiftTo(i, y); } if (x.compareTo(y) >= 0) { x.subTo(y, x); x.rShiftTo(1, x); } else { y.subTo(x, y); y.rShiftTo(1, y); } if (!(x.signum() > 0)) { if (g > 0) { y.lShiftTo(g, y); } setTimeout(function() { callback(y); }, 0); } else { setTimeout(gcda1, 0); } }; setTimeout(gcda1, 10); }; BigInteger2.prototype.fromNumberAsync = function(a, b, c, callback) { if ("number" == typeof b) { if (a < 2) { this.fromInt(1); } else { this.fromNumber(a, c); if (!this.testBit(a - 1)) { this.bitwiseTo(BigInteger2.ONE.shiftLeft(a - 1), op_or, this); } if (this.isEven()) { this.dAddOffset(1, 0); } var bnp_1 = this; var bnpfn1_1 = function() { bnp_1.dAddOffset(2, 0); if (bnp_1.bitLength() > a) { bnp_1.subTo(BigInteger2.ONE.shiftLeft(a - 1), bnp_1); } if (bnp_1.isProbablePrime(b)) { setTimeout(function() { callback(); }, 0); } else { setTimeout(bnpfn1_1, 0); } }; setTimeout(bnpfn1_1, 0); } } else { var x = []; var t = a & 7; x.length = (a >> 3) + 1; b.nextBytes(x); if (t > 0) { x[0] &= (1 << t) - 1; } else { x[0] = 0; } this.fromString(x, 256); } }; return BigInteger2; }() ); var NullExp = ( /** @class */ function() { function NullExp2() { } NullExp2.prototype.convert = function(x) { return x; }; NullExp2.prototype.revert = function(x) { return x; }; NullExp2.prototype.mulTo = function(x, y, r) { x.multiplyTo(y, r); }; NullExp2.prototype.sqrTo = function(x, r) { x.squareTo(r); }; return NullExp2; }() ); var Classic = ( /** @class */ function() { function Classic2(m2) { this.m = m2; } Classic2.prototype.convert = function(x) { if (x.s < 0 || x.compareTo(this.m) >= 0) { return x.mod(this.m); } else { return x; } }; Classic2.prototype.revert = function(x) { return x; }; Classic2.prototype.reduce = function(x) { x.divRemTo(this.m, null, x); }; Classic2.prototype.mulTo = function(x, y, r) { x.multiplyTo(y, r); this.reduce(r); }; Classic2.prototype.sqrTo = function(x, r) { x.squareTo(r); this.reduce(r); }; return Classic2; }() ); var Montgomery = ( /** @class */ function() { function Montgomery2(m2) { this.m = m2; this.mp = m2.invDigit(); this.mpl = this.mp & 32767; this.mph = this.mp >> 15; this.um = (1 << m2.DB - 15) - 1; this.mt2 = 2 * m2.t; } Montgomery2.prototype.convert = function(x) { var r = nbi(); x.abs().dlShiftTo(this.m.t, r); r.divRemTo(this.m, null, r); if (x.s < 0 && r.compareTo(BigInteger.ZERO) > 0) { this.m.subTo(r, r); } return r; }; Montgomery2.prototype.revert = function(x) { var r = nbi(); x.copyTo(r); this.reduce(r); return r; }; Montgomery2.prototype.reduce = function(x) { while (x.t <= this.mt2) { x[x.t++] = 0; } for (var i = 0; i < this.m.t; ++i) { var j = x[i] & 32767; var u0 = j * this.mpl + ((j * this.mph + (x[i] >> 15) * this.mpl & this.um) << 15) & x.DM; j = i + this.m.t; x[j] += this.m.am(0, u0, x, i, 0, this.m.t); while (x[j] >= x.DV) { x[j] -= x.DV; x[++j]++; } } x.clamp(); x.drShiftTo(this.m.t, x); if (x.compareTo(this.m) >= 0) { x.subTo(this.m, x); } }; Montgomery2.prototype.mulTo = function(x, y, r) { x.multiplyTo(y, r); this.reduce(r); }; Montgomery2.prototype.sqrTo = function(x, r) { x.squareTo(r); this.reduce(r); }; return Montgomery2; }() ); var Barrett = ( /** @class */ function() { function Barrett2(m2) { this.m = m2; this.r2 = nbi(); this.q3 = nbi(); BigInteger.ONE.dlShiftTo(2 * m2.t, this.r2); this.mu = this.r2.divide(m2); } Barrett2.prototype.convert = function(x) { if (x.s < 0 || x.t > 2 * this.m.t) { return x.mod(this.m); } else if (x.compareTo(this.m) < 0) { return x; } else { var r = nbi(); x.copyTo(r); this.reduce(r); return r; } }; Barrett2.prototype.revert = function(x) { return x; }; Barrett2.prototype.reduce = function(x) { x.drShiftTo(this.m.t - 1, this.r2); if (x.t > this.m.t + 1) { x.t = this.m.t + 1; x.clamp(); } this.mu.multiplyUpperTo(this.r2, this.m.t + 1, this.q3); this.m.multiplyLowerTo(this.q3, this.m.t + 1, this.r2); while (x.compareTo(this.r2) < 0) { x.dAddOffset(1, this.m.t + 1); } x.subTo(this.r2, x); while (x.compareTo(this.m) >= 0) { x.subTo(this.m, x); } }; Barrett2.prototype.mulTo = function(x, y, r) { x.multiplyTo(y, r); this.reduce(r); }; Barrett2.prototype.sqrTo = function(x, r) { x.squareTo(r); this.reduce(r); }; return Barrett2; }() ); function nbi() { return new BigInteger(null); } function parseBigInt(str, r) { return new BigInteger(str, r); } var inBrowser = typeof navigator !== "undefined"; if (inBrowser && j_lm && navigator.appName == "Microsoft Internet Explorer") { BigInteger.prototype.am = function am2(i, x, w, j, c, n2) { var xl = x & 32767; var xh = x >> 15; while (--n2 >= 0) { var l2 = this[i] & 32767; var h = this[i++] >> 15; var m2 = xh * l2 + h * xl; l2 = xl * l2 + ((m2 & 32767) << 15) + w[j] + (c & 1073741823); c = (l2 >>> 30) + (m2 >>> 15) + xh * h + (c >>> 30); w[j++] = l2 & 1073741823; } return c; }; dbits = 30; } else if (inBrowser && j_lm && navigator.appName != "Netscape") { BigInteger.prototype.am = function am1(i, x, w, j, c, n2) { while (--n2 >= 0) { var v = x * this[i++] + w[j] + c; c = Math.floor(v / 67108864); w[j++] = v & 67108863; } return c; }; dbits = 26; } else { BigInteger.prototype.am = function am3(i, x, w, j, c, n2) { var xl = x & 16383; var xh = x >> 14; while (--n2 >= 0) { var l2 = this[i] & 16383; var h = this[i++] >> 14; var m2 = xh * l2 + h * xl; l2 = xl * l2 + ((m2 & 16383) << 14) + w[j] + c; c = (l2 >> 28) + (m2 >> 14) + xh * h; w[j++] = l2 & 268435455; } return c; }; dbits = 28; } BigInteger.prototype.DB = dbits; BigInteger.prototype.DM = (1 << dbits) - 1; BigInteger.prototype.DV = 1 << dbits; var BI_FP = 52; BigInteger.prototype.FV = Math.pow(2, BI_FP); BigInteger.prototype.F1 = BI_FP - dbits; BigInteger.prototype.F2 = 2 * dbits - BI_FP; var BI_RC = []; var rr; var vv; rr = "0".charCodeAt(0); for (vv = 0; vv <= 9; ++vv) { BI_RC[rr++] = vv; } rr = "a".charCodeAt(0); for (vv = 10; vv < 36; ++vv) { BI_RC[rr++] = vv; } rr = "A".charCodeAt(0); for (vv = 10; vv < 36; ++vv) { BI_RC[rr++] = vv; } function intAt(s, i) { var c = BI_RC[s.charCodeAt(i)]; return c == null ? -1 : c; } function nbv(i) { var r = nbi(); r.fromInt(i); return r; } function nbits(x) { var r = 1; var t; if ((t = x >>> 16) != 0) { x = t; r += 16; } if ((t = x >> 8) != 0) { x = t; r += 8; } if ((t = x >> 4) != 0) { x = t; r += 4; } if ((t = x >> 2) != 0) { x = t; r += 2; } if ((t = x >> 1) != 0) { x = t; r += 1; } return r; } BigInteger.ZERO = nbv(0); BigInteger.ONE = nbv(1); var Arcfour = ( /** @class */ function() { function Arcfour2() { this.i = 0; this.j = 0; this.S = []; } Arcfour2.prototype.init = function(key) { var i; var j; var t; for (i = 0; i < 256; ++i) { this.S[i] = i; } j = 0; for (i = 0; i < 256; ++i) { j = j + this.S[i] + key[i % key.length] & 255; t = this.S[i]; this.S[i] = this.S[j]; this.S[j] = t; } this.i = 0; this.j = 0; }; Arcfour2.prototype.next = function() { var t; this.i = this.i + 1 & 255; this.j = this.j + this.S[this.i] & 255; t = this.S[this.i]; this.S[this.i] = this.S[this.j]; this.S[this.j] = t; return this.S[t + this.S[this.i] & 255]; }; return Arcfour2; }() ); function prng_newstate() { return new Arcfour(); } var rng_psize = 256; var rng_state; var rng_pool = null; var rng_pptr; if (rng_pool == null) { rng_pool = []; rng_pptr = 0; var t = void 0; if (typeof window !== "undefined" && window.crypto && window.crypto.getRandomValues) { var z = new Uint32Array(256); window.crypto.getRandomValues(z); for (t = 0; t < z.length; ++t) { rng_pool[rng_pptr++] = z[t] & 255; } } var count = 0; var onMouseMoveListener_1 = function(ev) { count = count || 0; if (count >= 256 || rng_pptr >= rng_psize) { if (window.removeEventListener) { window.removeEventListener("mousemove", onMouseMoveListener_1, false); } else if (window.detachEvent) { window.detachEvent("onmousemove", onMouseMoveListener_1); } return; } try { var mouseCoordinates = ev.x + ev.y; rng_pool[rng_pptr++] = mouseCoordinates & 255; count += 1; } catch (e) { } }; if (typeof window !== "undefined") { if (window.addEventListener) { window.addEventListener("mousemove", onMouseMoveListener_1, false); } else if (window.attachEvent) { window.attachEvent("onmousemove", onMouseMoveListener_1); } } } function rng_get_byte() { if (rng_state == null) { rng_state = prng_newstate(); while (rng_pptr < rng_psize) { var random = Math.floor(65536 * Math.random()); rng_pool[rng_pptr++] = random & 255; } rng_state.init(rng_pool); for (rng_pptr = 0; rng_pptr < rng_pool.length; ++rng_pptr) { rng_pool[rng_pptr] = 0; } rng_pptr = 0; } return rng_state.next(); } var SecureRandom = ( /** @class */ function() { function SecureRandom2() { } SecureRandom2.prototype.nextBytes = function(ba) { for (var i = 0; i < ba.length; ++i) { ba[i] = rng_get_byte(); } }; return SecureRandom2; }() ); function pkcs1pad1(s, n2) { if (n2 < s.length + 22) { console.error("Message too long for RSA"); return null; } var len = n2 - s.length - 6; var filler = ""; for (var f2 = 0; f2 < len; f2 += 2) { filler += "ff"; } var m2 = "0001" + filler + "00" + s; return parseBigInt(m2, 16); } function pkcs1pad2(s, n2) { if (n2 < s.length + 11) { console.error("Message too long for RSA"); return null; } var ba = []; var i = s.length - 1; while (i >= 0 && n2 > 0) { var c = s.charCodeAt(i--); if (c < 128) { ba[--n2] = c; } else if (c > 127 && c < 2048) { ba[--n2] = c & 63 | 128; ba[--n2] = c >> 6 | 192; } else { ba[--n2] = c & 63 | 128; ba[--n2] = c >> 6 & 63 | 128; ba[--n2] = c >> 12 | 224; } } ba[--n2] = 0; var rng = new SecureRandom(); var x = []; while (n2 > 2) { x[0] = 0; while (x[0] == 0) { rng.nextBytes(x); } ba[--n2] = x[0]; } ba[--n2] = 2; ba[--n2] = 0; return new BigInteger(ba); } var RSAKey = ( /** @class */ function() { function RSAKey2() { this.n = null; this.e = 0; this.d = null; this.p = null; this.q = null; this.dmp1 = null; this.dmq1 = null; this.coeff = null; } RSAKey2.prototype.doPublic = function(x) { return x.modPowInt(this.e, this.n); }; RSAKey2.prototype.doPrivate = function(x) { if (this.p == null || this.q == null) { return x.modPow(this.d, this.n); } var xp = x.mod(this.p).modPow(this.dmp1, this.p); var xq = x.mod(this.q).modPow(this.dmq1, this.q); while (xp.compareTo(xq) < 0) { xp = xp.add(this.p); } return xp.subtract(xq).multiply(this.coeff).mod(this.p).multiply(this.q).add(xq); }; RSAKey2.prototype.setPublic = function(N, E) { if (N != null && E != null && N.length > 0 && E.length > 0) { this.n = parseBigInt(N, 16); this.e = parseInt(E, 16); } else { console.error("Invalid RSA public key"); } }; RSAKey2.prototype.encrypt = function(text) { var maxLength = this.n.bitLength() + 7 >> 3; var m2 = pkcs1pad2(text, maxLength); if (m2 == null) { return null; } var c = this.doPublic(m2); if (c == null) { return null; } var h = c.toString(16); var length = h.length; for (var i = 0; i < maxLength * 2 - length; i++) { h = "0" + h; } return h; }; RSAKey2.prototype.setPrivate = function(N, E, D) { if (N != null && E != null && N.length > 0 && E.length > 0) { this.n = parseBigInt(N, 16); this.e = parseInt(E, 16); this.d = parseBigInt(D, 16); } else { console.error("Invalid RSA private key"); } }; RSAKey2.prototype.setPrivateEx = function(N, E, D, P, Q, DP, DQ, C) { if (N != null && E != null && N.length > 0 && E.length > 0) { this.n = parseBigInt(N, 16); this.e = parseInt(E, 16); this.d = parseBigInt(D, 16); this.p = parseBigInt(P, 16); this.q = parseBigInt(Q, 16); this.dmp1 = parseBigInt(DP, 16); this.dmq1 = parseBigInt(DQ, 16); this.coeff = parseBigInt(C, 16); } else { console.error("Invalid RSA private key"); } }; RSAKey2.prototype.generate = function(B, E) { var rng = new SecureRandom(); var qs = B >> 1; this.e = parseInt(E, 16); var ee = new BigInteger(E, 16); for (; ; ) { for (; ; ) { this.p = new BigInteger(B - qs, 1, rng); if (this.p.subtract(BigInteger.ONE).gcd(ee).compareTo(BigInteger.ONE) == 0 && this.p.isProbablePrime(10)) { break; } } for (; ; ) { this.q = new BigInteger(qs, 1, rng); if (this.q.subtract(BigInteger.ONE).gcd(ee).compareTo(BigInteger.ONE) == 0 && this.q.isProbablePrime(10)) { break; } } if (this.p.compareTo(this.q) <= 0) { var t = this.p; this.p = this.q; this.q = t; } var p1 = this.p.subtract(BigInteger.ONE); var q1 = this.q.subtract(BigInteger.ONE); var phi = p1.multiply(q1); if (phi.gcd(ee).compareTo(BigInteger.ONE) == 0) { this.n = this.p.multiply(this.q); this.d = ee.modInverse(phi); this.dmp1 = this.d.mod(p1); this.dmq1 = this.d.mod(q1); this.coeff = this.q.modInverse(this.p); break; } } }; RSAKey2.prototype.decrypt = function(ctext) { var c = parseBigInt(ctext, 16); var m2 = this.doPrivate(c); if (m2 == null) { return null; } return pkcs1unpad2(m2, this.n.bitLength() + 7 >> 3); }; RSAKey2.prototype.generateAsync = function(B, E, callback) { var rng = new SecureRandom(); var qs = B >> 1; this.e = parseInt(E, 16); var ee = new BigInteger(E, 16); var rsa = this; var loop1 = function() { var loop4 = function() { if (rsa.p.compareTo(rsa.q) <= 0) { var t = rsa.p; rsa.p = rsa.q; rsa.q = t; } var p1 = rsa.p.subtract(BigInteger.ONE); var q1 = rsa.q.subtract(BigInteger.ONE); var phi = p1.multiply(q1); if (phi.gcd(ee).compareTo(BigInteger.ONE) == 0) { rsa.n = rsa.p.multiply(rsa.q); rsa.d = ee.modInverse(phi); rsa.dmp1 = rsa.d.mod(p1); rsa.dmq1 = rsa.d.mod(q1); rsa.coeff = rsa.q.modInverse(rsa.p); setTimeout(function() { callback(); }, 0); } else { setTimeout(loop1, 0); } }; var loop3 = function() { rsa.q = nbi(); rsa.q.fromNumberAsync(qs, 1, rng, function() { rsa.q.subtract(BigInteger.ONE).gcda(ee, function(r) { if (r.compareTo(BigInteger.ONE) == 0 && rsa.q.isProbablePrime(10)) { setTimeout(loop4, 0); } else { setTimeout(loop3, 0); } }); }); }; var loop2 = function() { rsa.p = nbi(); rsa.p.fromNumberAsync(B - qs, 1, rng, function() { rsa.p.subtract(BigInteger.ONE).gcda(ee, function(r) { if (r.compareTo(BigInteger.ONE) == 0 && rsa.p.isProbablePrime(10)) { setTimeout(loop3, 0); } else { setTimeout(loop2, 0); } }); }); }; setTimeout(loop2, 0); }; setTimeout(loop1, 0); }; RSAKey2.prototype.sign = function(text, digestMethod, digestName) { var header = getDigestHeader(digestName); var digest = header + digestMethod(text).toString(); var m2 = pkcs1pad1(digest, this.n.bitLength() / 4); if (m2 == null) { return null; } var c = this.doPrivate(m2); if (c == null) { return null; } var h = c.toString(16); if ((h.length & 1) == 0) { return h; } else { return "0" + h; } }; RSAKey2.prototype.verify = function(text, signature, digestMethod) { var c = parseBigInt(signature, 16); var m2 = this.doPublic(c); if (m2 == null) { return null; } var unpadded = m2.toString(16).replace(/^1f+00/, ""); var digest = removeDigestHeader(unpadded); return digest == digestMethod(text).toString(); }; return RSAKey2; }() ); function pkcs1unpad2(d, n2) { var b = d.toByteArray(); var i = 0; while (i < b.length && b[i] == 0) { ++i; } if (b.length - i != n2 - 1 || b[i] != 2) { return null; } ++i; while (b[i] != 0) { if (++i >= b.length) { return null; } } var ret = ""; while (++i < b.length) { var c = b[i] & 255; if (c < 128) { ret += String.fromCharCode(c); } else if (c > 191 && c < 224) { ret += String.fromCharCode((c & 31) << 6 | b[i + 1] & 63); ++i; } else { ret += String.fromCharCode((c & 15) << 12 | (b[i + 1] & 63) << 6 | b[i + 2] & 63); i += 2; } } return ret; } var DIGEST_HEADERS = { md2: "3020300c06082a864886f70d020205000410", md5: "3020300c06082a864886f70d020505000410", sha1: "3021300906052b0e03021a05000414", sha224: "302d300d06096086480165030402040500041c", sha256: "3031300d060960864801650304020105000420", sha384: "3041300d060960864801650304020205000430", sha512: "3051300d060960864801650304020305000440", ripemd160: "3021300906052b2403020105000414" }; function getDigestHeader(name) { return DIGEST_HEADERS[name] || ""; } function removeDigestHeader(str) { for (var name_1 in DIGEST_HEADERS) { if (DIGEST_HEADERS.hasOwnProperty(name_1)) { var header = DIGEST_HEADERS[name_1]; var len = header.length; if (str.substr(0, len) == header) { return str.substr(len); } } } return str; } /*! Copyright (c) 2011, Yahoo! Inc. All rights reserved. Code licensed under the BSD License: http://developer.yahoo.com/yui/license.html version: 2.9.0 */ var YAHOO = {}; YAHOO.lang = { /** * Utility to set up the prototype, constructor and superclass properties to * support an inheritance strategy that can chain constructors and methods. * Static members will not be inherited. * * @method extend * @static * @param {Function} subc the object to modify * @param {Function} superc the object to inherit * @param {Object} overrides additional properties/methods to add to the * subclass prototype. These will override the * matching items obtained from the superclass * if present. */ extend: function(subc, superc, overrides) { if (!superc || !subc) { throw new Error("YAHOO.lang.extend failed, please check that all dependencies are included."); } var F = function() { }; F.prototype = superc.prototype; subc.prototype = new F(); subc.prototype.constructor = subc; subc.superclass = superc.prototype; if (superc.prototype.constructor == Object.prototype.constructor) { superc.prototype.constructor = superc; } if (overrides) { var i; for (i in overrides) { subc.prototype[i] = overrides[i]; } var _IEEnumFix = function() { }, ADD = ["toString", "valueOf"]; try { if (/MSIE/.test(navigator.userAgent)) { _IEEnumFix = function(r, s) { for (i = 0; i < ADD.length; i = i + 1) { var fname = ADD[i], f2 = s[fname]; if (typeof f2 === "function" && f2 != Object.prototype[fname]) { r[fname] = f2; } } }; } } catch (ex) { } _IEEnumFix(subc.prototype, overrides); } } }; /** * @fileOverview * @name asn1-1.0.js * @author Kenji Urushima kenji.urushima@gmail.com * @version asn1 1.0.13 (2017-Jun-02) * @since jsrsasign 2.1 * @license MIT License */ var KJUR = {}; if (typeof KJUR.asn1 == "undefined" || !KJUR.asn1) KJUR.asn1 = {}; KJUR.asn1.ASN1Util = new function() { this.integerToByteHex = function(i) { var h = i.toString(16); if (h.length % 2 == 1) h = "0" + h; return h; }; this.bigIntToMinTwosComplementsHex = function(bigIntegerValue) { var h = bigIntegerValue.toString(16); if (h.substr(0, 1) != "-") { if (h.length % 2 == 1) { h = "0" + h; } else { if (!h.match(/^[0-7]/)) { h = "00" + h; } } } else { var hPos = h.substr(1); var xorLen = hPos.length; if (xorLen % 2 == 1) { xorLen += 1; } else { if (!h.match(/^[0-7]/)) { xorLen += 2; } } var hMask = ""; for (var i = 0; i < xorLen; i++) { hMask += "f"; } var biMask = new BigInteger(hMask, 16); var biNeg = biMask.xor(bigIntegerValue).add(BigInteger.ONE); h = biNeg.toString(16).replace(/^-/, ""); } return h; }; this.getPEMStringFromHex = function(dataHex, pemHeader) { return hextopem(dataHex, pemHeader); }; this.newObject = function(param) { var _KJUR = KJUR, _KJUR_asn1 = _KJUR.asn1, _DERBoolean = _KJUR_asn1.DERBoolean, _DERInteger = _KJUR_asn1.DERInteger, _DERBitString = _KJUR_asn1.DERBitString, _DEROctetString = _KJUR_asn1.DEROctetString, _DERNull = _KJUR_asn1.DERNull, _DERObjectIdentifier = _KJUR_asn1.DERObjectIdentifier, _DEREnumerated = _KJUR_asn1.DEREnumerated, _DERUTF8String = _KJUR_asn1.DERUTF8String, _DERNumericString = _KJUR_asn1.DERNumericString, _DERPrintableString = _KJUR_asn1.DERPrintableString, _DERTeletexString = _KJUR_asn1.DERTeletexString, _DERIA5String = _KJUR_asn1.DERIA5String, _DERUTCTime = _KJUR_asn1.DERUTCTime, _DERGeneralizedTime = _KJUR_asn1.DERGeneralizedTime, _DERSequence = _KJUR_asn1.DERSequence, _DERSet = _KJUR_asn1.DERSet, _DERTaggedObject = _KJUR_asn1.DERTaggedObject, _newObject = _KJUR_asn1.ASN1Util.newObject; var keys = Object.keys(param); if (keys.length != 1) throw "key of param shall be only one."; var key = keys[0]; if (":bool:int:bitstr:octstr:null:oid:enum:utf8str:numstr:prnstr:telstr:ia5str:utctime:gentime:seq:set:tag:".indexOf(":" + key + ":") == -1) throw "undefined key: " + key; if (key == "bool") return new _DERBoolean(param[key]); if (key == "int") return new _DERInteger(param[key]); if (key == "bitstr") return new _DERBitString(param[key]); if (key == "octstr") return new _DEROctetString(param[key]); if (key == "null") return new _DERNull(param[key]); if (key == "oid") return new _DERObjectIdentifier(param[key]); if (key == "enum") return new _DEREnumerated(param[key]); if (key == "utf8str") return new _DERUTF8String(param[key]); if (key == "numstr") return new _DERNumericString(param[key]); if (key == "prnstr") return new _DERPrintableString(param[key]); if (key == "telstr") return new _DERTeletexString(param[key]); if (key == "ia5str") return new _DERIA5String(param[key]); if (key == "utctime") return new _DERUTCTime(param[key]); if (key == "gentime") return new _DERGeneralizedTime(param[key]); if (key == "seq") { var paramList = param[key]; var a = []; for (var i = 0; i < paramList.length; i++) { var asn1Obj = _newObject(paramList[i]); a.push(asn1Obj); } return new _DERSequence({ "array": a }); } if (key == "set") { var paramList = param[key]; var a = []; for (var i = 0; i < paramList.length; i++) { var asn1Obj = _newObject(paramList[i]); a.push(asn1Obj); } return new _DERSet({ "array": a }); } if (key == "tag") { var tagParam = param[key]; if (Object.prototype.toString.call(tagParam) === "[object Array]" && tagParam.length == 3) { var obj = _newObject(tagParam[2]); return new _DERTaggedObject({ tag: tagParam[0], explicit: tagParam[1], obj }); } else { var newParam = {}; if (tagParam.explicit !== void 0) newParam.explicit = tagParam.explicit; if (tagParam.tag !== void 0) newParam.tag = tagParam.tag; if (tagParam.obj === void 0) throw "obj shall be specified for 'tag'."; newParam.obj = _newObject(tagParam.obj); return new _DERTaggedObject(newParam); } } }; this.jsonToASN1HEX = function(param) { var asn1Obj = this.newObject(param); return asn1Obj.getEncodedHex(); }; }(); KJUR.asn1.ASN1Util.oidHexToInt = function(hex) { var s = ""; var i01 = parseInt(hex.substr(0, 2), 16); var i0 = Math.floor(i01 / 40); var i1 = i01 % 40; var s = i0 + "." + i1; var binbuf = ""; for (var i = 2; i < hex.length; i += 2) { var value = parseInt(hex.substr(i, 2), 16); var bin = ("00000000" + value.toString(2)).slice(-8); binbuf = binbuf + bin.substr(1, 7); if (bin.substr(0, 1) == "0") { var bi = new BigInteger(binbuf, 2); s = s + "." + bi.toString(10); binbuf = ""; } } return s; }; KJUR.asn1.ASN1Util.oidIntToHex = function(oidString) { var itox = function(i2) { var h2 = i2.toString(16); if (h2.length == 1) h2 = "0" + h2; return h2; }; var roidtox = function(roid) { var h2 = ""; var bi = new BigInteger(roid, 10); var b = bi.toString(2); var padLen = 7 - b.length % 7; if (padLen == 7) padLen = 0; var bPad = ""; for (var i2 = 0; i2 < padLen; i2++) bPad += "0"; b = bPad + b; for (var i2 = 0; i2 < b.length - 1; i2 += 7) { var b8 = b.substr(i2, 7); if (i2 != b.length - 7) b8 = "1" + b8; h2 += itox(parseInt(b8, 2)); } return h2; }; if (!oidString.match(/^[0-9.]+$/)) { throw "malformed oid string: " + oidString; } var h = ""; var a = oidString.split("."); var i0 = parseInt(a[0]) * 40 + parseInt(a[1]); h += itox(i0); a.splice(0, 2); for (var i = 0; i < a.length; i++) { h += roidtox(a[i]); } return h; }; KJUR.asn1.ASN1Object = function() { var hV = ""; this.getLengthHexFromValue = function() { if (typeof this.hV == "undefined" || this.hV == null) { throw "this.hV is null or undefined."; } if (this.hV.length % 2 == 1) { throw "value hex must be even length: n=" + hV.length + ",v=" + this.hV; } var n2 = this.hV.length / 2; var hN = n2.toString(16); if (hN.length % 2 == 1) { hN = "0" + hN; } if (n2 < 128) { return hN; } else { var hNlen = hN.length / 2; if (hNlen > 15) { throw "ASN.1 length too long to represent by 8x: n = " + n2.toString(16); } var head = 128 + hNlen; return head.toString(16) + hN; } }; this.getEncodedHex = function() { if (this.hTLV == null || this.isModified) { this.hV = this.getFreshValueHex(); this.hL = this.getLengthHexFromValue(); this.hTLV = this.hT + this.hL + this.hV; this.isModified = false; } return this.hTLV; }; this.getValueHex = function() { this.getEncodedHex(); return this.hV; }; this.getFreshValueHex = function() { return ""; }; }; KJUR.asn1.DERAbstractString = function(params) { KJUR.asn1.DERAbstractString.superclass.constructor.call(this); this.getString = function() { return this.s; }; this.setString = function(newS) { this.hTLV = null; this.isModified = true; this.s = newS; this.hV = stohex(this.s); }; this.setStringHex = function(newHexString) { this.hTLV = null; this.isModified = true; this.s = null; this.hV = newHexString; }; this.getFreshValueHex = function() { return this.hV; }; if (typeof params != "undefined") { if (typeof params == "string") { this.setString(params); } else if (typeof params["str"] != "undefined") { this.setString(params["str"]); } else if (typeof params["hex"] != "undefined") { this.setStringHex(params["hex"]); } } }; YAHOO.lang.extend(KJUR.asn1.DERAbstractString, KJUR.asn1.ASN1Object); KJUR.asn1.DERAbstractTime = function(params) { KJUR.asn1.DERAbstractTime.superclass.constructor.call(this); this.localDateToUTC = function(d) { utc = d.getTime() + d.getTimezoneOffset() * 6e4; var utcDate = new Date(utc); return utcDate; }; this.formatDate = function(dateObject, type, withMillis) { var pad = this.zeroPadding; var d = this.localDateToUTC(dateObject); var year = String(d.getFullYear()); if (type == "utc") year = year.substr(2, 2); var month = pad(String(d.getMonth() + 1), 2); var day = pad(String(d.getDate()), 2); var hour = pad(String(d.getHours()), 2); var min = pad(String(d.getMinutes()), 2); var sec = pad(String(d.getSeconds()), 2); var s = year + month + day + hour + min + sec; if (withMillis === true) { var millis = d.getMilliseconds(); if (millis != 0) { var sMillis = pad(String(millis), 3); sMillis = sMillis.replace(/[0]+$/, ""); s = s + "." + sMillis; } } return s + "Z"; }; this.zeroPadding = function(s, len) { if (s.length >= len) return s; return new Array(len - s.length + 1).join("0") + s; }; this.getString = function() { return this.s; }; this.setString = function(newS) { this.hTLV = null; this.isModified = true; this.s = newS; this.hV = stohex(newS); }; this.setByDateValue = function(year, month, day, hour, min, sec) { var dateObject = new Date(Date.UTC(year, month - 1, day, hour, min, sec, 0)); this.setByDate(dateObject); }; this.getFreshValueHex = function() { return this.hV; }; }; YAHOO.lang.extend(KJUR.asn1.DERAbstractTime, KJUR.asn1.ASN1Object); KJUR.asn1.DERAbstractStructured = function(params) { KJUR.asn1.DERAbstractString.superclass.constructor.call(this); this.setByASN1ObjectArray = function(asn1ObjectArray) { this.hTLV = null; this.isModified = true; this.asn1Array = asn1ObjectArray; }; this.appendASN1Object = function(asn1Object) { this.hTLV = null; this.isModified = true; this.asn1Array.push(asn1Object); }; this.asn1Array = new Array(); if (typeof params != "undefined") { if (typeof params["array"] != "undefined") { this.asn1Array = params["array"]; } } }; YAHOO.lang.extend(KJUR.asn1.DERAbstractStructured, KJUR.asn1.ASN1Object); KJUR.asn1.DERBoolean = function() { KJUR.asn1.DERBoolean.superclass.constructor.call(this); this.hT = "01"; this.hTLV = "0101ff"; }; YAHOO.lang.extend(KJUR.asn1.DERBoolean, KJUR.asn1.ASN1Object); KJUR.asn1.DERInteger = function(params) { KJUR.asn1.DERInteger.superclass.constructor.call(this); this.hT = "02"; this.setByBigInteger = function(bigIntegerValue) { this.hTLV = null; this.isModified = true; this.hV = KJUR.asn1.ASN1Util.bigIntToMinTwosComplementsHex(bigIntegerValue); }; this.setByInteger = function(intValue) { var bi = new BigInteger(String(intValue), 10); this.setByBigInteger(bi); }; this.setValueHex = function(newHexString) { this.hV = newHexString; }; this.getFreshValueHex = function() { return this.hV; }; if (typeof params != "undefined") { if (typeof params["bigint"] != "undefined") { this.setByBigInteger(params["bigint"]); } else if (typeof params["int"] != "undefined") { this.setByInteger(params["int"]); } else if (typeof params == "number") { this.setByInteger(params); } else if (typeof params["hex"] != "undefined") { this.setValueHex(params["hex"]); } } }; YAHOO.lang.extend(KJUR.asn1.DERInteger, KJUR.asn1.ASN1Object); KJUR.asn1.DERBitString = function(params) { if (params !== void 0 && typeof params.obj !== "undefined") { var o = KJUR.asn1.ASN1Util.newObject(params.obj); params.hex = "00" + o.getEncodedHex(); } KJUR.asn1.DERBitString.superclass.constructor.call(this); this.hT = "03"; this.setHexValueIncludingUnusedBits = function(newHexStringIncludingUnusedBits) { this.hTLV = null; this.isModified = true; this.hV = newHexStringIncludingUnusedBits; }; this.setUnusedBitsAndHexValue = function(unusedBits, hValue) { if (unusedBits < 0 || 7 < unusedBits) { throw "unused bits shall be from 0 to 7: u = " + unusedBits; } var hUnusedBits = "0" + unusedBits; this.hTLV = null; this.isModified = true; this.hV = hUnusedBits + hValue; }; this.setByBinaryString = function(binaryString) { binaryString = binaryString.replace(/0+$/, ""); var unusedBits = 8 - binaryString.length % 8; if (unusedBits == 8) unusedBits = 0; for (var i = 0; i <= unusedBits; i++) { binaryString += "0"; } var h = ""; for (var i = 0; i < binaryString.length - 1; i += 8) { var b = binaryString.substr(i, 8); var x = parseInt(b, 2).toString(16); if (x.length == 1) x = "0" + x; h += x; } this.hTLV = null; this.isModified = true; this.hV = "0" + unusedBits + h; }; this.setByBooleanArray = function(booleanArray) { var s = ""; for (var i = 0; i < booleanArray.length; i++) { if (booleanArray[i] == true) { s += "1"; } else { s += "0"; } } this.setByBinaryString(s); }; this.newFalseArray = function(nLength) { var a = new Array(nLength); for (var i = 0; i < nLength; i++) { a[i] = false; } return a; }; this.getFreshValueHex = function() { return this.hV; }; if (typeof params != "undefined") { if (typeof params == "string" && params.toLowerCase().match(/^[0-9a-f]+$/)) { this.setHexValueIncludingUnusedBits(params); } else if (typeof params["hex"] != "undefined") { this.setHexValueIncludingUnusedBits(params["hex"]); } else if (typeof params["bin"] != "undefined") { this.setByBinaryString(params["bin"]); } else if (typeof params["array"] != "undefined") { this.setByBooleanArray(params["array"]); } } }; YAHOO.lang.extend(KJUR.asn1.DERBitString, KJUR.asn1.ASN1Object); KJUR.asn1.DEROctetString = function(params) { if (params !== void 0 && typeof params.obj !== "undefined") { var o = KJUR.asn1.ASN1Util.newObject(params.obj); params.hex = o.getEncodedHex(); } KJUR.asn1.DEROctetString.superclass.constructor.call(this, params); this.hT = "04"; }; YAHOO.lang.extend(KJUR.asn1.DEROctetString, KJUR.asn1.DERAbstractString); KJUR.asn1.DERNull = function() { KJUR.asn1.DERNull.superclass.constructor.call(this); this.hT = "05"; this.hTLV = "0500"; }; YAHOO.lang.extend(KJUR.asn1.DERNull, KJUR.asn1.ASN1Object); KJUR.asn1.DERObjectIdentifier = function(params) { var itox = function(i) { var h = i.toString(16); if (h.length == 1) h = "0" + h; return h; }; var roidtox = function(roid) { var h = ""; var bi = new BigInteger(roid, 10); var b = bi.toString(2); var padLen = 7 - b.length % 7; if (padLen == 7) padLen = 0; var bPad = ""; for (var i = 0; i < padLen; i++) bPad += "0"; b = bPad + b; for (var i = 0; i < b.length - 1; i += 7) { var b8 = b.substr(i, 7); if (i != b.length - 7) b8 = "1" + b8; h += itox(parseInt(b8, 2)); } return h; }; KJUR.asn1.DERObjectIdentifier.superclass.constructor.call(this); this.hT = "06"; this.setValueHex = function(newHexString) { this.hTLV = null; this.isModified = true; this.s = null; this.hV = newHexString; }; this.setValueOidString = function(oidString) { if (!oidString.match(/^[0-9.]+$/)) { throw "malformed oid string: " + oidString; } var h = ""; var a = oidString.split("."); var i0 = parseInt(a[0]) * 40 + parseInt(a[1]); h += itox(i0); a.splice(0, 2); for (var i = 0; i < a.length; i++) { h += roidtox(a[i]); } this.hTLV = null; this.isModified = true; this.s = null; this.hV = h; }; this.setValueName = function(oidName) { var oid = KJUR.asn1.x509.OID.name2oid(oidName); if (oid !== "") { this.setValueOidString(oid); } else { throw "DERObjectIdentifier oidName undefined: " + oidName; } }; this.getFreshValueHex = function() { return this.hV; }; if (params !== void 0) { if (typeof params === "string") { if (params.match(/^[0-2].[0-9.]+$/)) { this.setValueOidString(params); } else { this.setValueName(params); } } else if (params.oid !== void 0) { this.setValueOidString(params.oid); } else if (params.hex !== void 0) { this.setValueHex(params.hex); } else if (params.name !== void 0) { this.setValueName(params.name); } } }; YAHOO.lang.extend(KJUR.asn1.DERObjectIdentifier, KJUR.asn1.ASN1Object); KJUR.asn1.DEREnumerated = function(params) { KJUR.asn1.DEREnumerated.superclass.constructor.call(this); this.hT = "0a"; this.setByBigInteger = function(bigIntegerValue) { this.hTLV = null; this.isModified = true; this.hV = KJUR.asn1.ASN1Util.bigIntToMinTwosComplementsHex(bigIntegerValue); }; this.setByInteger = function(intValue) { var bi = new BigInteger(String(intValue), 10); this.setByBigInteger(bi); }; this.setValueHex = function(newHexString) { this.hV = newHexString; }; this.getFreshValueHex = function() { return this.hV; }; if (typeof params != "undefined") { if (typeof params["int"] != "undefined") { this.setByInteger(params["int"]); } else if (typeof params == "number") { this.setByInteger(params); } else if (typeof params["hex"] != "undefined") { this.setValueHex(params["hex"]); } } }; YAHOO.lang.extend(KJUR.asn1.DEREnumerated, KJUR.asn1.ASN1Object); KJUR.asn1.DERUTF8String = function(params) { KJUR.asn1.DERUTF8String.superclass.constructor.call(this, params); this.hT = "0c"; }; YAHOO.lang.extend(KJUR.asn1.DERUTF8String, KJUR.asn1.DERAbstractString); KJUR.asn1.DERNumericString = function(params) { KJUR.asn1.DERNumericString.superclass.constructor.call(this, params); this.hT = "12"; }; YAHOO.lang.extend(KJUR.asn1.DERNumericString, KJUR.asn1.DERAbstractString); KJUR.asn1.DERPrintableString = function(params) { KJUR.asn1.DERPrintableString.superclass.constructor.call(this, params); this.hT = "13"; }; YAHOO.lang.extend(KJUR.asn1.DERPrintableString, KJUR.asn1.DERAbstractString); KJUR.asn1.DERTeletexString = function(params) { KJUR.asn1.DERTeletexString.superclass.constructor.call(this, params); this.hT = "14"; }; YAHOO.lang.extend(KJUR.asn1.DERTeletexString, KJUR.asn1.DERAbstractString); KJUR.asn1.DERIA5String = function(params) { KJUR.asn1.DERIA5String.superclass.constructor.call(this, params); this.hT = "16"; }; YAHOO.lang.extend(KJUR.asn1.DERIA5String, KJUR.asn1.DERAbstractString); KJUR.asn1.DERUTCTime = function(params) { KJUR.asn1.DERUTCTime.superclass.constructor.call(this, params); this.hT = "17"; this.setByDate = function(dateObject) { this.hTLV = null; this.isModified = true; this.date = dateObject; this.s = this.formatDate(this.date, "utc"); this.hV = stohex(this.s); }; this.getFreshValueHex = function() { if (typeof this.date == "undefined" && typeof this.s == "undefined") { this.date = /* @__PURE__ */ new Date(); this.s = this.formatDate(this.date, "utc"); this.hV = stohex(this.s); } return this.hV; }; if (params !== void 0) { if (params.str !== void 0) { this.setString(params.str); } else if (typeof params == "string" && params.match(/^[0-9]{12}Z$/)) { this.setString(params); } else if (params.hex !== void 0) { this.setStringHex(params.hex); } else if (params.date !== void 0) { this.setByDate(params.date); } } }; YAHOO.lang.extend(KJUR.asn1.DERUTCTime, KJUR.asn1.DERAbstractTime); KJUR.asn1.DERGeneralizedTime = function(params) { KJUR.asn1.DERGeneralizedTime.superclass.constructor.call(this, params); this.hT = "18"; this.withMillis = false; this.setByDate = function(dateObject) { this.hTLV = null; this.isModified = true; this.date = dateObject; this.s = this.formatDate(this.date, "gen", this.withMillis); this.hV = stohex(this.s); }; this.getFreshValueHex = function() { if (this.date === void 0 && this.s === void 0) { this.date = /* @__PURE__ */ new Date(); this.s = this.formatDate(this.date, "gen", this.withMillis); this.hV = stohex(this.s); } return this.hV; }; if (params !== void 0) { if (params.str !== void 0) { this.setString(params.str); } else if (typeof params == "string" && params.match(/^[0-9]{14}Z$/)) { this.setString(params); } else if (params.hex !== void 0) { this.setStringHex(params.hex); } else if (params.date !== void 0) { this.setByDate(params.date); } if (params.millis === true) { this.withMillis = true; } } }; YAHOO.lang.extend(KJUR.asn1.DERGeneralizedTime, KJUR.asn1.DERAbstractTime); KJUR.asn1.DERSequence = function(params) { KJUR.asn1.DERSequence.superclass.constructor.call(this, params); this.hT = "30"; this.getFreshValueHex = function() { var h = ""; for (var i = 0; i < this.asn1Array.length; i++) { var asn1Obj = this.asn1Array[i]; h += asn1Obj.getEncodedHex(); } this.hV = h; return this.hV; }; }; YAHOO.lang.extend(KJUR.asn1.DERSequence, KJUR.asn1.DERAbstractStructured); KJUR.asn1.DERSet = function(params) { KJUR.asn1.DERSet.superclass.constructor.call(this, params); this.hT = "31"; this.sortFlag = true; this.getFreshValueHex = function() { var a = new Array(); for (var i = 0; i < this.asn1Array.length; i++) { var asn1Obj = this.asn1Array[i]; a.push(asn1Obj.getEncodedHex()); } if (this.sortFlag == true) a.sort(); this.hV = a.join(""); return this.hV; }; if (typeof params != "undefined") { if (typeof params.sortflag != "undefined" && params.sortflag == false) this.sortFlag = false; } }; YAHOO.lang.extend(KJUR.asn1.DERSet, KJUR.asn1.DERAbstractStructured); KJUR.asn1.DERTaggedObject = function(params) { KJUR.asn1.DERTaggedObject.superclass.constructor.call(this); this.hT = "a0"; this.hV = ""; this.isExplicit = true; this.asn1Object = null; this.setASN1Object = function(isExplicitFlag, tagNoHex, asn1Object) { this.hT = tagNoHex; this.isExplicit = isExplicitFlag; this.asn1Object = asn1Object; if (this.isExplicit) { this.hV = this.asn1Object.getEncodedHex(); this.hTLV = null; this.isModified = true; } else { this.hV = null; this.hTLV = asn1Object.getEncodedHex(); this.hTLV = this.hTLV.replace(/^../, tagNoHex); this.isModified = false; } }; this.getFreshValueHex = function() { return this.hV; }; if (typeof params != "undefined") { if (typeof params["tag"] != "undefined") { this.hT = params["tag"]; } if (typeof params["explicit"] != "undefined") { this.isExplicit = params["explicit"]; } if (typeof params["obj"] != "undefined") { this.asn1Object = params["obj"]; this.setASN1Object(this.isExplicit, this.hT, this.asn1Object); } } }; YAHOO.lang.extend(KJUR.asn1.DERTaggedObject, KJUR.asn1.ASN1Object); var __extends = globalThis && globalThis.__extends || function() { var extendStatics = function(d, b) { extendStatics = Object.setPrototypeOf || { __proto__: [] } instanceof Array && function(d2, b2) { d2.__proto__ = b2; } || function(d2, b2) { for (var p2 in b2) if (Object.prototype.hasOwnProperty.call(b2, p2)) d2[p2] = b2[p2]; }; return extendStatics(d, b); }; return function(d, b) { if (typeof b !== "function" && b !== null) throw new TypeError("Class extends value " + String(b) + " is not a constructor or null"); extendStatics(d, b); function __() { this.constructor = d; } d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); }; }(); var JSEncryptRSAKey = ( /** @class */ function(_super) { __extends(JSEncryptRSAKey2, _super); function JSEncryptRSAKey2(key) { var _this = _super.call(this) || this; if (key) { if (typeof key === "string") { _this.parseKey(key); } else if (JSEncryptRSAKey2.hasPrivateKeyProperty(key) || JSEncryptRSAKey2.hasPublicKeyProperty(key)) { _this.parsePropertiesFrom(key); } } return _this; } JSEncryptRSAKey2.prototype.parseKey = function(pem) { try { var modulus = 0; var public_exponent = 0; var reHex = /^\s*(?:[0-9A-Fa-f][0-9A-Fa-f]\s*)+$/; var der = reHex.test(pem) ? Hex.decode(pem) : Base64.unarmor(pem); var asn1 = ASN1.decode(der); if (asn1.sub.length === 3) { asn1 = asn1.sub[2].sub[0]; } if (asn1.sub.length === 9) { modulus = asn1.sub[1].getHexStringValue(); this.n = parseBigInt(modulus, 16); public_exponent = asn1.sub[2].getHexStringValue(); this.e = parseInt(public_exponent, 16); var private_exponent = asn1.sub[3].getHexStringValue(); this.d = parseBigInt(private_exponent, 16); var prime1 = asn1.sub[4].getHexStringValue(); this.p = parseBigInt(prime1, 16); var prime2 = asn1.sub[5].getHexStringValue(); this.q = parseBigInt(prime2, 16); var exponent1 = asn1.sub[6].getHexStringValue(); this.dmp1 = parseBigInt(exponent1, 16); var exponent2 = asn1.sub[7].getHexStringValue(); this.dmq1 = parseBigInt(exponent2, 16); var coefficient = asn1.sub[8].getHexStringValue(); this.coeff = parseBigInt(coefficient, 16); } else if (asn1.sub.length === 2) { if (asn1.sub[0].sub) { var bit_string = asn1.sub[1]; var sequence = bit_string.sub[0]; modulus = sequence.sub[0].getHexStringValue(); this.n = parseBigInt(modulus, 16); public_exponent = sequence.sub[1].getHexStringValue(); this.e = parseInt(public_exponent, 16); } else { modulus = asn1.sub[0].getHexStringValue(); this.n = parseBigInt(modulus, 16); public_exponent = asn1.sub[1].getHexStringValue(); this.e = parseInt(public_exponent, 16); } } else { return false; } return true; } catch (ex) { return false; } }; JSEncryptRSAKey2.prototype.getPrivateBaseKey = function() { var options = { array: [ new KJUR.asn1.DERInteger({ int: 0 }), new KJUR.asn1.DERInteger({ bigint: this.n }), new KJUR.asn1.DERInteger({ int: this.e }), new KJUR.asn1.DERInteger({ bigint: this.d }), new KJUR.asn1.DERInteger({ bigint: this.p }), new KJUR.asn1.DERInteger({ bigint: this.q }), new KJUR.asn1.DERInteger({ bigint: this.dmp1 }), new KJUR.asn1.DERInteger({ bigint: this.dmq1 }), new KJUR.asn1.DERInteger({ bigint: this.coeff }) ] }; var seq = new KJUR.asn1.DERSequence(options); return seq.getEncodedHex(); }; JSEncryptRSAKey2.prototype.getPrivateBaseKeyB64 = function() { return hex2b64(this.getPrivateBaseKey()); }; JSEncryptRSAKey2.prototype.getPublicBaseKey = function() { var first_sequence = new KJUR.asn1.DERSequence({ array: [ new KJUR.asn1.DERObjectIdentifier({ oid: "1.2.840.113549.1.1.1" }), new KJUR.asn1.DERNull() ] }); var second_sequence = new KJUR.asn1.DERSequence({ array: [ new KJUR.asn1.DERInteger({ bigint: this.n }), new KJUR.asn1.DERInteger({ int: this.e }) ] }); var bit_string = new KJUR.asn1.DERBitString({ hex: "00" + second_sequence.getEncodedHex() }); var seq = new KJUR.asn1.DERSequence({ array: [first_sequence, bit_string] }); return seq.getEncodedHex(); }; JSEncryptRSAKey2.prototype.getPublicBaseKeyB64 = function() { return hex2b64(this.getPublicBaseKey()); }; JSEncryptRSAKey2.wordwrap = function(str, width) { width = width || 64; if (!str) { return str; } var regex = "(.{1," + width + "})( +|$\n?)|(.{1," + width + "})"; return str.match(RegExp(regex, "g")).join("\n"); }; JSEncryptRSAKey2.prototype.getPrivateKey = function() { var key = "-----BEGIN RSA PRIVATE KEY-----\n"; key += JSEncryptRSAKey2.wordwrap(this.getPrivateBaseKeyB64()) + "\n"; key += "-----END RSA PRIVATE KEY-----"; return key; }; JSEncryptRSAKey2.prototype.getPublicKey = function() { var key = "-----BEGIN PUBLIC KEY-----\n"; key += JSEncryptRSAKey2.wordwrap(this.getPublicBaseKeyB64()) + "\n"; key += "-----END PUBLIC KEY-----"; return key; }; JSEncryptRSAKey2.hasPublicKeyProperty = function(obj) { obj = obj || {}; return obj.hasOwnProperty("n") && obj.hasOwnProperty("e"); }; JSEncryptRSAKey2.hasPrivateKeyProperty = function(obj) { obj = obj || {}; return obj.hasOwnProperty("n") && obj.hasOwnProperty("e") && obj.hasOwnProperty("d") && obj.hasOwnProperty("p") && obj.hasOwnProperty("q") && obj.hasOwnProperty("dmp1") && obj.hasOwnProperty("dmq1") && obj.hasOwnProperty("coeff"); }; JSEncryptRSAKey2.prototype.parsePropertiesFrom = function(obj) { this.n = obj.n; this.e = obj.e; if (obj.hasOwnProperty("d")) { this.d = obj.d; this.p = obj.p; this.q = obj.q; this.dmp1 = obj.dmp1; this.dmq1 = obj.dmq1; this.coeff = obj.coeff; } }; return JSEncryptRSAKey2; }(RSAKey) ); var _a; var version = typeof process !== "undefined" ? (_a = process.env) === null || _a === void 0 ? void 0 : _a.npm_package_version : void 0; var JSEncrypt = ( /** @class */ function() { function JSEncrypt2(options) { if (options === void 0) { options = {}; } options = options || {}; this.default_key_size = options.default_key_size ? parseInt(options.default_key_size, 10) : 1024; this.default_public_exponent = options.default_public_exponent || "010001"; this.log = options.log || false; this.key = null; } JSEncrypt2.prototype.setKey = function(key) { if (this.log && this.key) { console.warn("A key was already set, overriding existing."); } this.key = new JSEncryptRSAKey(key); }; JSEncrypt2.prototype.setPrivateKey = function(privkey) { this.setKey(privkey); }; JSEncrypt2.prototype.setPublicKey = function(pubkey) { this.setKey(pubkey); }; JSEncrypt2.prototype.decrypt = function(str) { try { return this.getKey().decrypt(b64tohex(str)); } catch (ex) { return false; } }; JSEncrypt2.prototype.encrypt = function(str) { try { return hex2b64(this.getKey().encrypt(str)); } catch (ex) { return false; } }; JSEncrypt2.prototype.sign = function(str, digestMethod, digestName) { try { return hex2b64(this.getKey().sign(str, digestMethod, digestName)); } catch (ex) { return false; } }; JSEncrypt2.prototype.verify = function(str, signature, digestMethod) { try { return this.getKey().verify(str, b64tohex(signature), digestMethod); } catch (ex) { return false; } }; JSEncrypt2.prototype.getKey = function(cb) { if (!this.key) { this.key = new JSEncryptRSAKey(); if (cb && {}.toString.call(cb) === "[object Function]") { this.key.generateAsync(this.default_key_size, this.default_public_exponent, cb); return; } this.key.generate(this.default_key_size, this.default_public_exponent); } return this.key; }; JSEncrypt2.prototype.getPrivateKey = function() { return this.getKey().getPrivateKey(); }; JSEncrypt2.prototype.getPrivateKeyB64 = function() { return this.getKey().getPrivateBaseKeyB64(); }; JSEncrypt2.prototype.getPublicKey = function() { return this.getKey().getPublicKey(); }; JSEncrypt2.prototype.getPublicKeyB64 = function() { return this.getKey().getPublicBaseKeyB64(); }; JSEncrypt2.version = version; return JSEncrypt2; }() ); const generateTimestamp = () => { return (/* @__PURE__ */ new Date()).getTime().toString().slice(0, 10); }; function generateRandomString(length) { const characters = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"; let result = ""; for (let i = 0; i < length; i++) { const randomIndex = Math.floor(Math.random() * characters.length); result += characters[randomIndex]; } return result; } function info() { const url = "https://app.campus.chinaunicom.cn/app/course/info"; const param = { token: localStorage.getItem("t"), companyId: localStorage.getItem("companyId") || 0, from: "WEB", organizationId: localStorage.getItem("organizationId") || 0, courseId: JSON.parse(localStorage.getItem("playtimeData")).courseId, timestamp: generateTimestamp(), randomStr: "PWysCbnKGZOd7kiHSvAj6RpihjvW4DWV", sign: "ZX0QBw1qejwKoICOCkHgKE7beTE/71M/ycK5D4JkNu1nP0BlFibhFZRuoRLp0FRUzK077UgpqnM+zDavbFBREfaStFx+KxJsQmyUOTbYtza7bM5EWMCDQx7MWKVctXdkTdCxErN7LmtWxA+ToygwguFudKEdaddIg6SJDp003gkDxdVqljJUxitpUcWx78nD+JGIBNXCEAjY6xh7uvgf6HZCKWlPl8Ky1P8ElDqFb/JXoTa477eWLrLYGsjuuOH736wbifIw1mZcNX0JgMTIJuSC4a4cG/mX0eywxXoK5SSEiemOukdutjOow33xzaf7ASfa/qJzoqr8T5cmqY1iKw==" }; return axios$1({ url, method: "POST", params: param }); } const pKey = `-----BEGIN PUBLIC KEY----- MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAooxomrujIP9vcxxNmS+Q1xxnaoxAfluwFvDR3+G+p84QMsePXDD67cLjJ+7n+79u2xoG7fVvDnzHDW+X5D/0/Dv9ajUaBpFQl3jqKwRiP3Lrx08seYzWIWDGHEjurbZrWGHRJNdoM7tEQPdPZftZC6iOm7kSjDIDiuqaIh9g3hqFSVQ5r15Dvae6qtREo1nDWKsf3tH6nkvVD2pIh3TBJUoGdfbPqnw/tNvzhwOX9tg7NjhZ8Yet1ctVt297G5HCwPSIBjhUKEtLYLk/8scPrzXnQpAU05m5WnHfDhfvvG2xoVXckveNvZhv6lvxTZqRkUBOI1pU16U9Tz4aDpCU7QIDAQAB -----END PUBLIC KEY-----`; function encryptByRSA(message, publicKey = pKey) { var encrypt = new JSEncrypt(); encrypt.setPublicKey(publicKey); var dd = encrypt.encrypt(message); return dd; } function playtimeV2(k_data) { const url = "https://app.campus.chinaunicom.cn/app/course/playtimeV2"; const param = { token: localStorage.getItem("t"), companyId: localStorage.getItem("companyId") || 0, from: "WEB", organizationId: localStorage.getItem("organizationId") || 0, timestamp: generateTimestamp(), randomStr: generateRandomString(32), ...k_data }; console.log(param); const sorted_keys = Object.keys(param).sort(); const queryStr = sorted_keys.map((key) => key + "=" + param[key]).join("&") + "&"; console.log(queryStr); const md5_data = cryptoJsExports.MD5(queryStr).toString(); console.log(md5_data); const sign = encryptByRSA(md5_data); param.sign = sign; console.log(param); return axios$1({ url, method: "POST", params: param }); } const icon = "data:image/png;base64,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"; function App() { const [showPanel, setShowPanel] = require$$0$1.useState(false); const [entityData, setEntityData] = require$$0$1.useState({ courseNode: [], kpointList: [], course: { id: "" } }); const handleShowPanel = () => { setShowPanel(!showPanel); fetchVideoList(); }; const handleSubmit = (kpointId) => { const node = entityData.courseNode.filter((i) => i.kpointId == kpointId)[0]; const courseTime = node.courseSeconds + node.courseMinutes * 60; const gapTime = courseTime * 1.1; const n2 = { courseId: entityData.course.id, type: "playback", kpointId, studyTime: gapTime.toFixed(), breakpoint: 1 }; return playtimeV2(n2).then(() => { return fetchVideoList(); }); }; const fetchVideoList = () => { return info().then((res) => { console.log(res.data); setEntityData(res.data.entity); }); }; return /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { children: [ /* @__PURE__ */ jsxRuntimeExports.jsx( "img", { src: icon, style: { width: 64, position: "fixed", bottom: 0, right: 0, opacity: 0.6 }, onClick: handleShowPanel } ), /* @__PURE__ */ jsxRuntimeExports.jsx(VideoPanel, { show: showPanel, data: entityData.kpointList, handleSubmit }) ] }); } function VideoPanel({ show, data, handleSubmit }) { return /* @__PURE__ */ jsxRuntimeExports.jsx( "div", { className: "el-popover cbg_feedbackPoppver", style: { width: 400, maxHeight: 500, overflow: "auto", position: "fixed", bottom: 80, right: 20, transformOrigin: "right center", zIndex: 2016, display: show ? "" : "none" }, children: data.map((item) => { let kps = [item]; if (item.childKpointList && item.childKpointList.length > 0) { kps = item.childKpointList; } return kps.map((i) => /* @__PURE__ */ jsxRuntimeExports.jsx(VideoItem, { item: i, onSubmit: handleSubmit }, i.id)); }) } ); } function VideoItem({ item, onSubmit }) { const [loading, setLoading] = require$$0$1.useState(false); const handleClick = (kid) => { setLoading(true); onSubmit(kid).then(() => { setLoading(false); }); }; const buttonRender = (item2) => { const { progress, id } = item2; if (progress < 100) { return /* @__PURE__ */ jsxRuntimeExports.jsx( "button", { className: `el-button el-button--primary el-button--small ${loading ? "is-loading" : ""}`, onClick: () => handleClick(id), disabled: loading, children: loading ? "修改中" : "修改" } ); } else { return /* @__PURE__ */ jsxRuntimeExports.jsx("button", { className: "el-button el-button--success el-button--small is-disabled", children: "已完成" }); } }; return /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "el-row", style: { marginBottom: 10 }, children: [ /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "el-col-20", children: [ /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "el-col-24", children: /* @__PURE__ */ jsxRuntimeExports.jsx("span", { children: item.name }) }), /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "el-col-12", children: [ "kpoint:", /* @__PURE__ */ jsxRuntimeExports.jsx("span", { children: item.id }) ] }), /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "el-col-12", children: [ "进度:", /* @__PURE__ */ jsxRuntimeExports.jsxs("span", { children: [ item.progress, "%" ] }) ] }) ] }), /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "el-col-4", children: buttonRender(item) }) ] }); } client.createRoot( (() => { const app = document.createElement("div"); document.body.append(app); return app; })() ).render( /* @__PURE__ */ jsxRuntimeExports.jsx(require$$0$1.StrictMode, { children: /* @__PURE__ */ jsxRuntimeExports.jsx(App, {}) }) ); })(React, ReactDOM);