{"version":3,"file":"js/chunk-vendors-08242c08.57f90702.js","mappings":"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","sources":["webpack://com.crmtogether.mobilexcrm/./node_modules/node-polyfill-webpack-plugin/node_modules/buffer/index.js","webpack://com.crmtogether.mobilexcrm/./node_modules/node-rsa/src/NodeRSA.js","webpack://com.crmtogether.mobilexcrm/./node_modules/node-rsa/src/encryptEngines/encryptEngines.js","webpack://com.crmtogether.mobilexcrm/./node_modules/node-rsa/src/encryptEngines/io.js","webpack://com.crmtogether.mobilexcrm/./node_modules/node-rsa/src/encryptEngines/js.js","webpack://com.crmtogether.mobilexcrm/./node_modules/node-rsa/src/encryptEngines/node12.js","webpack://com.crmtogether.mobilexcrm/./node_modules/node-rsa/src/formats/components.js","webpack://com.crmtogether.mobilexcrm/./node_modules/node-rsa/src/formats/formats.js","webpack://com.crmtogether.mobilexcrm/./node_modules/node-rsa/src/formats/openssh.js","webpack://com.crmtogether.mobilexcrm/./node_modules/node-rsa/src/formats/pkcs1.js","webpack://com.crmtogether.mobilexcrm/./node_modules/node-rsa/src/formats/pkcs8.js","webpack://com.crmtogether.mobilexcrm/./node_modules/node-rsa/src/libs/jsbn.js","webpack://com.crmtogether.mobilexcrm/./node_modules/node-rsa/src/libs/rsa.js","webpack://com.crmtogether.mobilexcrm/./node_modules/node-rsa/src/schemes/oaep.js","webpack://com.crmtogether.mobilexcrm/./node_modules/node-rsa/src/schemes/pkcs1.js","webpack://com.crmtogether.mobilexcrm/./node_modules/node-rsa/src/schemes/pss.js","webpack://com.crmtogether.mobilexcrm/./node_modules/node-rsa/src/schemes/schemes.js","webpack://com.crmtogether.mobilexcrm/./node_modules/node-rsa/src/utils.js"],"sourcesContent":["/*!\n * The buffer module from node.js, for the browser.\n *\n * @author Feross Aboukhadijeh \n * @license MIT\n */\n/* eslint-disable no-proto */\n\n'use strict'\n\nconst base64 = require('base64-js')\nconst ieee754 = require('ieee754')\nconst customInspectSymbol =\n (typeof Symbol === 'function' && typeof Symbol['for'] === 'function') // eslint-disable-line dot-notation\n ? Symbol['for']('nodejs.util.inspect.custom') // eslint-disable-line dot-notation\n : null\n\nexports.Buffer = Buffer\nexports.SlowBuffer = SlowBuffer\nexports.INSPECT_MAX_BYTES = 50\n\nconst K_MAX_LENGTH = 0x7fffffff\nexports.kMaxLength = K_MAX_LENGTH\n\n/**\n * If `Buffer.TYPED_ARRAY_SUPPORT`:\n * === true Use Uint8Array implementation (fastest)\n * === false Print warning and recommend using `buffer` v4.x which has an Object\n * implementation (most compatible, even IE6)\n *\n * Browsers that support typed arrays are IE 10+, Firefox 4+, Chrome 7+, Safari 5.1+,\n * Opera 11.6+, iOS 4.2+.\n *\n * We report that the browser does not support typed arrays if the are not subclassable\n * using __proto__. Firefox 4-29 lacks support for adding new properties to `Uint8Array`\n * (See: https://bugzilla.mozilla.org/show_bug.cgi?id=695438). IE 10 lacks support\n * for __proto__ and has a buggy typed array implementation.\n */\nBuffer.TYPED_ARRAY_SUPPORT = typedArraySupport()\n\nif (!Buffer.TYPED_ARRAY_SUPPORT && typeof console !== 'undefined' &&\n typeof console.error === 'function') {\n console.error(\n 'This browser lacks typed array (Uint8Array) support which is required by ' +\n '`buffer` v5.x. Use `buffer` v4.x if you require old browser support.'\n )\n}\n\nfunction typedArraySupport () {\n // Can typed array instances can be augmented?\n try {\n const arr = new Uint8Array(1)\n const proto = { foo: function () { return 42 } }\n Object.setPrototypeOf(proto, Uint8Array.prototype)\n Object.setPrototypeOf(arr, proto)\n return arr.foo() === 42\n } catch (e) {\n return false\n }\n}\n\nObject.defineProperty(Buffer.prototype, 'parent', {\n enumerable: true,\n get: function () {\n if (!Buffer.isBuffer(this)) return undefined\n return this.buffer\n }\n})\n\nObject.defineProperty(Buffer.prototype, 'offset', {\n enumerable: true,\n get: function () {\n if (!Buffer.isBuffer(this)) return undefined\n return this.byteOffset\n }\n})\n\nfunction createBuffer (length) {\n if (length > K_MAX_LENGTH) {\n throw new RangeError('The value \"' + length + '\" is invalid for option \"size\"')\n }\n // Return an augmented `Uint8Array` instance\n const buf = new Uint8Array(length)\n Object.setPrototypeOf(buf, Buffer.prototype)\n return buf\n}\n\n/**\n * The Buffer constructor returns instances of `Uint8Array` that have their\n * prototype changed to `Buffer.prototype`. Furthermore, `Buffer` is a subclass of\n * `Uint8Array`, so the returned instances will have all the node `Buffer` methods\n * and the `Uint8Array` methods. Square bracket notation works as expected -- it\n * returns a single octet.\n *\n * The `Uint8Array` prototype remains unmodified.\n */\n\nfunction Buffer (arg, encodingOrOffset, length) {\n // Common case.\n if (typeof arg === 'number') {\n if (typeof encodingOrOffset === 'string') {\n throw new TypeError(\n 'The \"string\" argument must be of type string. Received type number'\n )\n }\n return allocUnsafe(arg)\n }\n return from(arg, encodingOrOffset, length)\n}\n\nBuffer.poolSize = 8192 // not used by this implementation\n\nfunction from (value, encodingOrOffset, length) {\n if (typeof value === 'string') {\n return fromString(value, encodingOrOffset)\n }\n\n if (ArrayBuffer.isView(value)) {\n return fromArrayView(value)\n }\n\n if (value == null) {\n throw new TypeError(\n 'The first argument must be one of type string, Buffer, ArrayBuffer, Array, ' +\n 'or Array-like Object. Received type ' + (typeof value)\n )\n }\n\n if (isInstance(value, ArrayBuffer) ||\n (value && isInstance(value.buffer, ArrayBuffer))) {\n return fromArrayBuffer(value, encodingOrOffset, length)\n }\n\n if (typeof SharedArrayBuffer !== 'undefined' &&\n (isInstance(value, SharedArrayBuffer) ||\n (value && isInstance(value.buffer, SharedArrayBuffer)))) {\n return fromArrayBuffer(value, encodingOrOffset, length)\n }\n\n if (typeof value === 'number') {\n throw new TypeError(\n 'The \"value\" argument must not be of type number. Received type number'\n )\n }\n\n const valueOf = value.valueOf && value.valueOf()\n if (valueOf != null && valueOf !== value) {\n return Buffer.from(valueOf, encodingOrOffset, length)\n }\n\n const b = fromObject(value)\n if (b) return b\n\n if (typeof Symbol !== 'undefined' && Symbol.toPrimitive != null &&\n typeof value[Symbol.toPrimitive] === 'function') {\n return Buffer.from(value[Symbol.toPrimitive]('string'), encodingOrOffset, length)\n }\n\n throw new TypeError(\n 'The first argument must be one of type string, Buffer, ArrayBuffer, Array, ' +\n 'or Array-like Object. Received type ' + (typeof value)\n )\n}\n\n/**\n * Functionally equivalent to Buffer(arg, encoding) but throws a TypeError\n * if value is a number.\n * Buffer.from(str[, encoding])\n * Buffer.from(array)\n * Buffer.from(buffer)\n * Buffer.from(arrayBuffer[, byteOffset[, length]])\n **/\nBuffer.from = function (value, encodingOrOffset, length) {\n return from(value, encodingOrOffset, length)\n}\n\n// Note: Change prototype *after* Buffer.from is defined to workaround Chrome bug:\n// https://github.com/feross/buffer/pull/148\nObject.setPrototypeOf(Buffer.prototype, Uint8Array.prototype)\nObject.setPrototypeOf(Buffer, Uint8Array)\n\nfunction assertSize (size) {\n if (typeof size !== 'number') {\n throw new TypeError('\"size\" argument must be of type number')\n } else if (size < 0) {\n throw new RangeError('The value \"' + size + '\" is invalid for option \"size\"')\n }\n}\n\nfunction alloc (size, fill, encoding) {\n assertSize(size)\n if (size <= 0) {\n return createBuffer(size)\n }\n if (fill !== undefined) {\n // Only pay attention to encoding if it's a string. This\n // prevents accidentally sending in a number that would\n // be interpreted as a start offset.\n return typeof encoding === 'string'\n ? createBuffer(size).fill(fill, encoding)\n : createBuffer(size).fill(fill)\n }\n return createBuffer(size)\n}\n\n/**\n * Creates a new filled Buffer instance.\n * alloc(size[, fill[, encoding]])\n **/\nBuffer.alloc = function (size, fill, encoding) {\n return alloc(size, fill, encoding)\n}\n\nfunction allocUnsafe (size) {\n assertSize(size)\n return createBuffer(size < 0 ? 0 : checked(size) | 0)\n}\n\n/**\n * Equivalent to Buffer(num), by default creates a non-zero-filled Buffer instance.\n * */\nBuffer.allocUnsafe = function (size) {\n return allocUnsafe(size)\n}\n/**\n * Equivalent to SlowBuffer(num), by default creates a non-zero-filled Buffer instance.\n */\nBuffer.allocUnsafeSlow = function (size) {\n return allocUnsafe(size)\n}\n\nfunction fromString (string, encoding) {\n if (typeof encoding !== 'string' || encoding === '') {\n encoding = 'utf8'\n }\n\n if (!Buffer.isEncoding(encoding)) {\n throw new TypeError('Unknown encoding: ' + encoding)\n }\n\n const length = byteLength(string, encoding) | 0\n let buf = createBuffer(length)\n\n const actual = buf.write(string, encoding)\n\n if (actual !== length) {\n // Writing a hex string, for example, that contains invalid characters will\n // cause everything after the first invalid character to be ignored. (e.g.\n // 'abxxcd' will be treated as 'ab')\n buf = buf.slice(0, actual)\n }\n\n return buf\n}\n\nfunction fromArrayLike (array) {\n const length = array.length < 0 ? 0 : checked(array.length) | 0\n const buf = createBuffer(length)\n for (let i = 0; i < length; i += 1) {\n buf[i] = array[i] & 255\n }\n return buf\n}\n\nfunction fromArrayView (arrayView) {\n if (isInstance(arrayView, Uint8Array)) {\n const copy = new Uint8Array(arrayView)\n return fromArrayBuffer(copy.buffer, copy.byteOffset, copy.byteLength)\n }\n return fromArrayLike(arrayView)\n}\n\nfunction fromArrayBuffer (array, byteOffset, length) {\n if (byteOffset < 0 || array.byteLength < byteOffset) {\n throw new RangeError('\"offset\" is outside of buffer bounds')\n }\n\n if (array.byteLength < byteOffset + (length || 0)) {\n throw new RangeError('\"length\" is outside of buffer bounds')\n }\n\n let buf\n if (byteOffset === undefined && length === undefined) {\n buf = new Uint8Array(array)\n } else if (length === undefined) {\n buf = new Uint8Array(array, byteOffset)\n } else {\n buf = new Uint8Array(array, byteOffset, length)\n }\n\n // Return an augmented `Uint8Array` instance\n Object.setPrototypeOf(buf, Buffer.prototype)\n\n return buf\n}\n\nfunction fromObject (obj) {\n if (Buffer.isBuffer(obj)) {\n const len = checked(obj.length) | 0\n const buf = createBuffer(len)\n\n if (buf.length === 0) {\n return buf\n }\n\n obj.copy(buf, 0, 0, len)\n return buf\n }\n\n if (obj.length !== undefined) {\n if (typeof obj.length !== 'number' || numberIsNaN(obj.length)) {\n return createBuffer(0)\n }\n return fromArrayLike(obj)\n }\n\n if (obj.type === 'Buffer' && Array.isArray(obj.data)) {\n return fromArrayLike(obj.data)\n }\n}\n\nfunction checked (length) {\n // Note: cannot use `length < K_MAX_LENGTH` here because that fails when\n // length is NaN (which is otherwise coerced to zero.)\n if (length >= K_MAX_LENGTH) {\n throw new RangeError('Attempt to allocate Buffer larger than maximum ' +\n 'size: 0x' + K_MAX_LENGTH.toString(16) + ' bytes')\n }\n return length | 0\n}\n\nfunction SlowBuffer (length) {\n if (+length != length) { // eslint-disable-line eqeqeq\n length = 0\n }\n return Buffer.alloc(+length)\n}\n\nBuffer.isBuffer = function isBuffer (b) {\n return b != null && b._isBuffer === true &&\n b !== Buffer.prototype // so Buffer.isBuffer(Buffer.prototype) will be false\n}\n\nBuffer.compare = function compare (a, b) {\n if (isInstance(a, Uint8Array)) a = Buffer.from(a, a.offset, a.byteLength)\n if (isInstance(b, Uint8Array)) b = Buffer.from(b, b.offset, b.byteLength)\n if (!Buffer.isBuffer(a) || !Buffer.isBuffer(b)) {\n throw new TypeError(\n 'The \"buf1\", \"buf2\" arguments must be one of type Buffer or Uint8Array'\n )\n }\n\n if (a === b) return 0\n\n let x = a.length\n let y = b.length\n\n for (let i = 0, len = Math.min(x, y); i < len; ++i) {\n if (a[i] !== b[i]) {\n x = a[i]\n y = b[i]\n break\n }\n }\n\n if (x < y) return -1\n if (y < x) return 1\n return 0\n}\n\nBuffer.isEncoding = function isEncoding (encoding) {\n switch (String(encoding).toLowerCase()) {\n case 'hex':\n case 'utf8':\n case 'utf-8':\n case 'ascii':\n case 'latin1':\n case 'binary':\n case 'base64':\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return true\n default:\n return false\n }\n}\n\nBuffer.concat = function concat (list, length) {\n if (!Array.isArray(list)) {\n throw new TypeError('\"list\" argument must be an Array of Buffers')\n }\n\n if (list.length === 0) {\n return Buffer.alloc(0)\n }\n\n let i\n if (length === undefined) {\n length = 0\n for (i = 0; i < list.length; ++i) {\n length += list[i].length\n }\n }\n\n const buffer = Buffer.allocUnsafe(length)\n let pos = 0\n for (i = 0; i < list.length; ++i) {\n let buf = list[i]\n if (isInstance(buf, Uint8Array)) {\n if (pos + buf.length > buffer.length) {\n if (!Buffer.isBuffer(buf)) buf = Buffer.from(buf)\n buf.copy(buffer, pos)\n } else {\n Uint8Array.prototype.set.call(\n buffer,\n buf,\n pos\n )\n }\n } else if (!Buffer.isBuffer(buf)) {\n throw new TypeError('\"list\" argument must be an Array of Buffers')\n } else {\n buf.copy(buffer, pos)\n }\n pos += buf.length\n }\n return buffer\n}\n\nfunction byteLength (string, encoding) {\n if (Buffer.isBuffer(string)) {\n return string.length\n }\n if (ArrayBuffer.isView(string) || isInstance(string, ArrayBuffer)) {\n return string.byteLength\n }\n if (typeof string !== 'string') {\n throw new TypeError(\n 'The \"string\" argument must be one of type string, Buffer, or ArrayBuffer. ' +\n 'Received type ' + typeof string\n )\n }\n\n const len = string.length\n const mustMatch = (arguments.length > 2 && arguments[2] === true)\n if (!mustMatch && len === 0) return 0\n\n // Use a for loop to avoid recursion\n let loweredCase = false\n for (;;) {\n switch (encoding) {\n case 'ascii':\n case 'latin1':\n case 'binary':\n return len\n case 'utf8':\n case 'utf-8':\n return utf8ToBytes(string).length\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return len * 2\n case 'hex':\n return len >>> 1\n case 'base64':\n return base64ToBytes(string).length\n default:\n if (loweredCase) {\n return mustMatch ? -1 : utf8ToBytes(string).length // assume utf8\n }\n encoding = ('' + encoding).toLowerCase()\n loweredCase = true\n }\n }\n}\nBuffer.byteLength = byteLength\n\nfunction slowToString (encoding, start, end) {\n let loweredCase = false\n\n // No need to verify that \"this.length <= MAX_UINT32\" since it's a read-only\n // property of a typed array.\n\n // This behaves neither like String nor Uint8Array in that we set start/end\n // to their upper/lower bounds if the value passed is out of range.\n // undefined is handled specially as per ECMA-262 6th Edition,\n // Section 13.3.3.7 Runtime Semantics: KeyedBindingInitialization.\n if (start === undefined || start < 0) {\n start = 0\n }\n // Return early if start > this.length. Done here to prevent potential uint32\n // coercion fail below.\n if (start > this.length) {\n return ''\n }\n\n if (end === undefined || end > this.length) {\n end = this.length\n }\n\n if (end <= 0) {\n return ''\n }\n\n // Force coercion to uint32. This will also coerce falsey/NaN values to 0.\n end >>>= 0\n start >>>= 0\n\n if (end <= start) {\n return ''\n }\n\n if (!encoding) encoding = 'utf8'\n\n while (true) {\n switch (encoding) {\n case 'hex':\n return hexSlice(this, start, end)\n\n case 'utf8':\n case 'utf-8':\n return utf8Slice(this, start, end)\n\n case 'ascii':\n return asciiSlice(this, start, end)\n\n case 'latin1':\n case 'binary':\n return latin1Slice(this, start, end)\n\n case 'base64':\n return base64Slice(this, start, end)\n\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return utf16leSlice(this, start, end)\n\n default:\n if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)\n encoding = (encoding + '').toLowerCase()\n loweredCase = true\n }\n }\n}\n\n// This property is used by `Buffer.isBuffer` (and the `is-buffer` npm package)\n// to detect a Buffer instance. It's not possible to use `instanceof Buffer`\n// reliably in a browserify context because there could be multiple different\n// copies of the 'buffer' package in use. This method works even for Buffer\n// instances that were created from another copy of the `buffer` package.\n// See: https://github.com/feross/buffer/issues/154\nBuffer.prototype._isBuffer = true\n\nfunction swap (b, n, m) {\n const i = b[n]\n b[n] = b[m]\n b[m] = i\n}\n\nBuffer.prototype.swap16 = function swap16 () {\n const len = this.length\n if (len % 2 !== 0) {\n throw new RangeError('Buffer size must be a multiple of 16-bits')\n }\n for (let i = 0; i < len; i += 2) {\n swap(this, i, i + 1)\n }\n return this\n}\n\nBuffer.prototype.swap32 = function swap32 () {\n const len = this.length\n if (len % 4 !== 0) {\n throw new RangeError('Buffer size must be a multiple of 32-bits')\n }\n for (let i = 0; i < len; i += 4) {\n swap(this, i, i + 3)\n swap(this, i + 1, i + 2)\n }\n return this\n}\n\nBuffer.prototype.swap64 = function swap64 () {\n const len = this.length\n if (len % 8 !== 0) {\n throw new RangeError('Buffer size must be a multiple of 64-bits')\n }\n for (let i = 0; i < len; i += 8) {\n swap(this, i, i + 7)\n swap(this, i + 1, i + 6)\n swap(this, i + 2, i + 5)\n swap(this, i + 3, i + 4)\n }\n return this\n}\n\nBuffer.prototype.toString = function toString () {\n const length = this.length\n if (length === 0) return ''\n if (arguments.length === 0) return utf8Slice(this, 0, length)\n return slowToString.apply(this, arguments)\n}\n\nBuffer.prototype.toLocaleString = Buffer.prototype.toString\n\nBuffer.prototype.equals = function equals (b) {\n if (!Buffer.isBuffer(b)) throw new TypeError('Argument must be a Buffer')\n if (this === b) return true\n return Buffer.compare(this, b) === 0\n}\n\nBuffer.prototype.inspect = function inspect () {\n let str = ''\n const max = exports.INSPECT_MAX_BYTES\n str = this.toString('hex', 0, max).replace(/(.{2})/g, '$1 ').trim()\n if (this.length > max) str += ' ... '\n return ''\n}\nif (customInspectSymbol) {\n Buffer.prototype[customInspectSymbol] = Buffer.prototype.inspect\n}\n\nBuffer.prototype.compare = function compare (target, start, end, thisStart, thisEnd) {\n if (isInstance(target, Uint8Array)) {\n target = Buffer.from(target, target.offset, target.byteLength)\n }\n if (!Buffer.isBuffer(target)) {\n throw new TypeError(\n 'The \"target\" argument must be one of type Buffer or Uint8Array. ' +\n 'Received type ' + (typeof target)\n )\n }\n\n if (start === undefined) {\n start = 0\n }\n if (end === undefined) {\n end = target ? target.length : 0\n }\n if (thisStart === undefined) {\n thisStart = 0\n }\n if (thisEnd === undefined) {\n thisEnd = this.length\n }\n\n if (start < 0 || end > target.length || thisStart < 0 || thisEnd > this.length) {\n throw new RangeError('out of range index')\n }\n\n if (thisStart >= thisEnd && start >= end) {\n return 0\n }\n if (thisStart >= thisEnd) {\n return -1\n }\n if (start >= end) {\n return 1\n }\n\n start >>>= 0\n end >>>= 0\n thisStart >>>= 0\n thisEnd >>>= 0\n\n if (this === target) return 0\n\n let x = thisEnd - thisStart\n let y = end - start\n const len = Math.min(x, y)\n\n const thisCopy = this.slice(thisStart, thisEnd)\n const targetCopy = target.slice(start, end)\n\n for (let i = 0; i < len; ++i) {\n if (thisCopy[i] !== targetCopy[i]) {\n x = thisCopy[i]\n y = targetCopy[i]\n break\n }\n }\n\n if (x < y) return -1\n if (y < x) return 1\n return 0\n}\n\n// Finds either the first index of `val` in `buffer` at offset >= `byteOffset`,\n// OR the last index of `val` in `buffer` at offset <= `byteOffset`.\n//\n// Arguments:\n// - buffer - a Buffer to search\n// - val - a string, Buffer, or number\n// - byteOffset - an index into `buffer`; will be clamped to an int32\n// - encoding - an optional encoding, relevant is val is a string\n// - dir - true for indexOf, false for lastIndexOf\nfunction bidirectionalIndexOf (buffer, val, byteOffset, encoding, dir) {\n // Empty buffer means no match\n if (buffer.length === 0) return -1\n\n // Normalize byteOffset\n if (typeof byteOffset === 'string') {\n encoding = byteOffset\n byteOffset = 0\n } else if (byteOffset > 0x7fffffff) {\n byteOffset = 0x7fffffff\n } else if (byteOffset < -0x80000000) {\n byteOffset = -0x80000000\n }\n byteOffset = +byteOffset // Coerce to Number.\n if (numberIsNaN(byteOffset)) {\n // byteOffset: it it's undefined, null, NaN, \"foo\", etc, search whole buffer\n byteOffset = dir ? 0 : (buffer.length - 1)\n }\n\n // Normalize byteOffset: negative offsets start from the end of the buffer\n if (byteOffset < 0) byteOffset = buffer.length + byteOffset\n if (byteOffset >= buffer.length) {\n if (dir) return -1\n else byteOffset = buffer.length - 1\n } else if (byteOffset < 0) {\n if (dir) byteOffset = 0\n else return -1\n }\n\n // Normalize val\n if (typeof val === 'string') {\n val = Buffer.from(val, encoding)\n }\n\n // Finally, search either indexOf (if dir is true) or lastIndexOf\n if (Buffer.isBuffer(val)) {\n // Special case: looking for empty string/buffer always fails\n if (val.length === 0) {\n return -1\n }\n return arrayIndexOf(buffer, val, byteOffset, encoding, dir)\n } else if (typeof val === 'number') {\n val = val & 0xFF // Search for a byte value [0-255]\n if (typeof Uint8Array.prototype.indexOf === 'function') {\n if (dir) {\n return Uint8Array.prototype.indexOf.call(buffer, val, byteOffset)\n } else {\n return Uint8Array.prototype.lastIndexOf.call(buffer, val, byteOffset)\n }\n }\n return arrayIndexOf(buffer, [val], byteOffset, encoding, dir)\n }\n\n throw new TypeError('val must be string, number or Buffer')\n}\n\nfunction arrayIndexOf (arr, val, byteOffset, encoding, dir) {\n let indexSize = 1\n let arrLength = arr.length\n let valLength = val.length\n\n if (encoding !== undefined) {\n encoding = String(encoding).toLowerCase()\n if (encoding === 'ucs2' || encoding === 'ucs-2' ||\n encoding === 'utf16le' || encoding === 'utf-16le') {\n if (arr.length < 2 || val.length < 2) {\n return -1\n }\n indexSize = 2\n arrLength /= 2\n valLength /= 2\n byteOffset /= 2\n }\n }\n\n function read (buf, i) {\n if (indexSize === 1) {\n return buf[i]\n } else {\n return buf.readUInt16BE(i * indexSize)\n }\n }\n\n let i\n if (dir) {\n let foundIndex = -1\n for (i = byteOffset; i < arrLength; i++) {\n if (read(arr, i) === read(val, foundIndex === -1 ? 0 : i - foundIndex)) {\n if (foundIndex === -1) foundIndex = i\n if (i - foundIndex + 1 === valLength) return foundIndex * indexSize\n } else {\n if (foundIndex !== -1) i -= i - foundIndex\n foundIndex = -1\n }\n }\n } else {\n if (byteOffset + valLength > arrLength) byteOffset = arrLength - valLength\n for (i = byteOffset; i >= 0; i--) {\n let found = true\n for (let j = 0; j < valLength; j++) {\n if (read(arr, i + j) !== read(val, j)) {\n found = false\n break\n }\n }\n if (found) return i\n }\n }\n\n return -1\n}\n\nBuffer.prototype.includes = function includes (val, byteOffset, encoding) {\n return this.indexOf(val, byteOffset, encoding) !== -1\n}\n\nBuffer.prototype.indexOf = function indexOf (val, byteOffset, encoding) {\n return bidirectionalIndexOf(this, val, byteOffset, encoding, true)\n}\n\nBuffer.prototype.lastIndexOf = function lastIndexOf (val, byteOffset, encoding) {\n return bidirectionalIndexOf(this, val, byteOffset, encoding, false)\n}\n\nfunction hexWrite (buf, string, offset, length) {\n offset = Number(offset) || 0\n const remaining = buf.length - offset\n if (!length) {\n length = remaining\n } else {\n length = Number(length)\n if (length > remaining) {\n length = remaining\n }\n }\n\n const strLen = string.length\n\n if (length > strLen / 2) {\n length = strLen / 2\n }\n let i\n for (i = 0; i < length; ++i) {\n const parsed = parseInt(string.substr(i * 2, 2), 16)\n if (numberIsNaN(parsed)) return i\n buf[offset + i] = parsed\n }\n return i\n}\n\nfunction utf8Write (buf, string, offset, length) {\n return blitBuffer(utf8ToBytes(string, buf.length - offset), buf, offset, length)\n}\n\nfunction asciiWrite (buf, string, offset, length) {\n return blitBuffer(asciiToBytes(string), buf, offset, length)\n}\n\nfunction base64Write (buf, string, offset, length) {\n return blitBuffer(base64ToBytes(string), buf, offset, length)\n}\n\nfunction ucs2Write (buf, string, offset, length) {\n return blitBuffer(utf16leToBytes(string, buf.length - offset), buf, offset, length)\n}\n\nBuffer.prototype.write = function write (string, offset, length, encoding) {\n // Buffer#write(string)\n if (offset === undefined) {\n encoding = 'utf8'\n length = this.length\n offset = 0\n // Buffer#write(string, encoding)\n } else if (length === undefined && typeof offset === 'string') {\n encoding = offset\n length = this.length\n offset = 0\n // Buffer#write(string, offset[, length][, encoding])\n } else if (isFinite(offset)) {\n offset = offset >>> 0\n if (isFinite(length)) {\n length = length >>> 0\n if (encoding === undefined) encoding = 'utf8'\n } else {\n encoding = length\n length = undefined\n }\n } else {\n throw new Error(\n 'Buffer.write(string, encoding, offset[, length]) is no longer supported'\n )\n }\n\n const remaining = this.length - offset\n if (length === undefined || length > remaining) length = remaining\n\n if ((string.length > 0 && (length < 0 || offset < 0)) || offset > this.length) {\n throw new RangeError('Attempt to write outside buffer bounds')\n }\n\n if (!encoding) encoding = 'utf8'\n\n let loweredCase = false\n for (;;) {\n switch (encoding) {\n case 'hex':\n return hexWrite(this, string, offset, length)\n\n case 'utf8':\n case 'utf-8':\n return utf8Write(this, string, offset, length)\n\n case 'ascii':\n case 'latin1':\n case 'binary':\n return asciiWrite(this, string, offset, length)\n\n case 'base64':\n // Warning: maxLength not taken into account in base64Write\n return base64Write(this, string, offset, length)\n\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return ucs2Write(this, string, offset, length)\n\n default:\n if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)\n encoding = ('' + encoding).toLowerCase()\n loweredCase = true\n }\n }\n}\n\nBuffer.prototype.toJSON = function toJSON () {\n return {\n type: 'Buffer',\n data: Array.prototype.slice.call(this._arr || this, 0)\n }\n}\n\nfunction base64Slice (buf, start, end) {\n if (start === 0 && end === buf.length) {\n return base64.fromByteArray(buf)\n } else {\n return base64.fromByteArray(buf.slice(start, end))\n }\n}\n\nfunction utf8Slice (buf, start, end) {\n end = Math.min(buf.length, end)\n const res = []\n\n let i = start\n while (i < end) {\n const firstByte = buf[i]\n let codePoint = null\n let bytesPerSequence = (firstByte > 0xEF)\n ? 4\n : (firstByte > 0xDF)\n ? 3\n : (firstByte > 0xBF)\n ? 2\n : 1\n\n if (i + bytesPerSequence <= end) {\n let secondByte, thirdByte, fourthByte, tempCodePoint\n\n switch (bytesPerSequence) {\n case 1:\n if (firstByte < 0x80) {\n codePoint = firstByte\n }\n break\n case 2:\n secondByte = buf[i + 1]\n if ((secondByte & 0xC0) === 0x80) {\n tempCodePoint = (firstByte & 0x1F) << 0x6 | (secondByte & 0x3F)\n if (tempCodePoint > 0x7F) {\n codePoint = tempCodePoint\n }\n }\n break\n case 3:\n secondByte = buf[i + 1]\n thirdByte = buf[i + 2]\n if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80) {\n tempCodePoint = (firstByte & 0xF) << 0xC | (secondByte & 0x3F) << 0x6 | (thirdByte & 0x3F)\n if (tempCodePoint > 0x7FF && (tempCodePoint < 0xD800 || tempCodePoint > 0xDFFF)) {\n codePoint = tempCodePoint\n }\n }\n break\n case 4:\n secondByte = buf[i + 1]\n thirdByte = buf[i + 2]\n fourthByte = buf[i + 3]\n if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80 && (fourthByte & 0xC0) === 0x80) {\n tempCodePoint = (firstByte & 0xF) << 0x12 | (secondByte & 0x3F) << 0xC | (thirdByte & 0x3F) << 0x6 | (fourthByte & 0x3F)\n if (tempCodePoint > 0xFFFF && tempCodePoint < 0x110000) {\n codePoint = tempCodePoint\n }\n }\n }\n }\n\n if (codePoint === null) {\n // we did not generate a valid codePoint so insert a\n // replacement char (U+FFFD) and advance only 1 byte\n codePoint = 0xFFFD\n bytesPerSequence = 1\n } else if (codePoint > 0xFFFF) {\n // encode to utf16 (surrogate pair dance)\n codePoint -= 0x10000\n res.push(codePoint >>> 10 & 0x3FF | 0xD800)\n codePoint = 0xDC00 | codePoint & 0x3FF\n }\n\n res.push(codePoint)\n i += bytesPerSequence\n }\n\n return decodeCodePointsArray(res)\n}\n\n// Based on http://stackoverflow.com/a/22747272/680742, the browser with\n// the lowest limit is Chrome, with 0x10000 args.\n// We go 1 magnitude less, for safety\nconst MAX_ARGUMENTS_LENGTH = 0x1000\n\nfunction decodeCodePointsArray (codePoints) {\n const len = codePoints.length\n if (len <= MAX_ARGUMENTS_LENGTH) {\n return String.fromCharCode.apply(String, codePoints) // avoid extra slice()\n }\n\n // Decode in chunks to avoid \"call stack size exceeded\".\n let res = ''\n let i = 0\n while (i < len) {\n res += String.fromCharCode.apply(\n String,\n codePoints.slice(i, i += MAX_ARGUMENTS_LENGTH)\n )\n }\n return res\n}\n\nfunction asciiSlice (buf, start, end) {\n let ret = ''\n end = Math.min(buf.length, end)\n\n for (let i = start; i < end; ++i) {\n ret += String.fromCharCode(buf[i] & 0x7F)\n }\n return ret\n}\n\nfunction latin1Slice (buf, start, end) {\n let ret = ''\n end = Math.min(buf.length, end)\n\n for (let i = start; i < end; ++i) {\n ret += String.fromCharCode(buf[i])\n }\n return ret\n}\n\nfunction hexSlice (buf, start, end) {\n const len = buf.length\n\n if (!start || start < 0) start = 0\n if (!end || end < 0 || end > len) end = len\n\n let out = ''\n for (let i = start; i < end; ++i) {\n out += hexSliceLookupTable[buf[i]]\n }\n return out\n}\n\nfunction utf16leSlice (buf, start, end) {\n const bytes = buf.slice(start, end)\n let res = ''\n // If bytes.length is odd, the last 8 bits must be ignored (same as node.js)\n for (let i = 0; i < bytes.length - 1; i += 2) {\n res += String.fromCharCode(bytes[i] + (bytes[i + 1] * 256))\n }\n return res\n}\n\nBuffer.prototype.slice = function slice (start, end) {\n const len = this.length\n start = ~~start\n end = end === undefined ? len : ~~end\n\n if (start < 0) {\n start += len\n if (start < 0) start = 0\n } else if (start > len) {\n start = len\n }\n\n if (end < 0) {\n end += len\n if (end < 0) end = 0\n } else if (end > len) {\n end = len\n }\n\n if (end < start) end = start\n\n const newBuf = this.subarray(start, end)\n // Return an augmented `Uint8Array` instance\n Object.setPrototypeOf(newBuf, Buffer.prototype)\n\n return newBuf\n}\n\n/*\n * Need to make sure that buffer isn't trying to write out of bounds.\n */\nfunction checkOffset (offset, ext, length) {\n if ((offset % 1) !== 0 || offset < 0) throw new RangeError('offset is not uint')\n if (offset + ext > length) throw new RangeError('Trying to access beyond buffer length')\n}\n\nBuffer.prototype.readUintLE =\nBuffer.prototype.readUIntLE = function readUIntLE (offset, byteLength, noAssert) {\n offset = offset >>> 0\n byteLength = byteLength >>> 0\n if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n let val = this[offset]\n let mul = 1\n let i = 0\n while (++i < byteLength && (mul *= 0x100)) {\n val += this[offset + i] * mul\n }\n\n return val\n}\n\nBuffer.prototype.readUintBE =\nBuffer.prototype.readUIntBE = function readUIntBE (offset, byteLength, noAssert) {\n offset = offset >>> 0\n byteLength = byteLength >>> 0\n if (!noAssert) {\n checkOffset(offset, byteLength, this.length)\n }\n\n let val = this[offset + --byteLength]\n let mul = 1\n while (byteLength > 0 && (mul *= 0x100)) {\n val += this[offset + --byteLength] * mul\n }\n\n return val\n}\n\nBuffer.prototype.readUint8 =\nBuffer.prototype.readUInt8 = function readUInt8 (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 1, this.length)\n return this[offset]\n}\n\nBuffer.prototype.readUint16LE =\nBuffer.prototype.readUInt16LE = function readUInt16LE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 2, this.length)\n return this[offset] | (this[offset + 1] << 8)\n}\n\nBuffer.prototype.readUint16BE =\nBuffer.prototype.readUInt16BE = function readUInt16BE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 2, this.length)\n return (this[offset] << 8) | this[offset + 1]\n}\n\nBuffer.prototype.readUint32LE =\nBuffer.prototype.readUInt32LE = function readUInt32LE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return ((this[offset]) |\n (this[offset + 1] << 8) |\n (this[offset + 2] << 16)) +\n (this[offset + 3] * 0x1000000)\n}\n\nBuffer.prototype.readUint32BE =\nBuffer.prototype.readUInt32BE = function readUInt32BE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return (this[offset] * 0x1000000) +\n ((this[offset + 1] << 16) |\n (this[offset + 2] << 8) |\n this[offset + 3])\n}\n\nBuffer.prototype.readBigUInt64LE = defineBigIntMethod(function readBigUInt64LE (offset) {\n offset = offset >>> 0\n validateNumber(offset, 'offset')\n const first = this[offset]\n const last = this[offset + 7]\n if (first === undefined || last === undefined) {\n boundsError(offset, this.length - 8)\n }\n\n const lo = first +\n this[++offset] * 2 ** 8 +\n this[++offset] * 2 ** 16 +\n this[++offset] * 2 ** 24\n\n const hi = this[++offset] +\n this[++offset] * 2 ** 8 +\n this[++offset] * 2 ** 16 +\n last * 2 ** 24\n\n return BigInt(lo) + (BigInt(hi) << BigInt(32))\n})\n\nBuffer.prototype.readBigUInt64BE = defineBigIntMethod(function readBigUInt64BE (offset) {\n offset = offset >>> 0\n validateNumber(offset, 'offset')\n const first = this[offset]\n const last = this[offset + 7]\n if (first === undefined || last === undefined) {\n boundsError(offset, this.length - 8)\n }\n\n const hi = first * 2 ** 24 +\n this[++offset] * 2 ** 16 +\n this[++offset] * 2 ** 8 +\n this[++offset]\n\n const lo = this[++offset] * 2 ** 24 +\n this[++offset] * 2 ** 16 +\n this[++offset] * 2 ** 8 +\n last\n\n return (BigInt(hi) << BigInt(32)) + BigInt(lo)\n})\n\nBuffer.prototype.readIntLE = function readIntLE (offset, byteLength, noAssert) {\n offset = offset >>> 0\n byteLength = byteLength >>> 0\n if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n let val = this[offset]\n let mul = 1\n let i = 0\n while (++i < byteLength && (mul *= 0x100)) {\n val += this[offset + i] * mul\n }\n mul *= 0x80\n\n if (val >= mul) val -= Math.pow(2, 8 * byteLength)\n\n return val\n}\n\nBuffer.prototype.readIntBE = function readIntBE (offset, byteLength, noAssert) {\n offset = offset >>> 0\n byteLength = byteLength >>> 0\n if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n let i = byteLength\n let mul = 1\n let val = this[offset + --i]\n while (i > 0 && (mul *= 0x100)) {\n val += this[offset + --i] * mul\n }\n mul *= 0x80\n\n if (val >= mul) val -= Math.pow(2, 8 * byteLength)\n\n return val\n}\n\nBuffer.prototype.readInt8 = function readInt8 (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 1, this.length)\n if (!(this[offset] & 0x80)) return (this[offset])\n return ((0xff - this[offset] + 1) * -1)\n}\n\nBuffer.prototype.readInt16LE = function readInt16LE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 2, this.length)\n const val = this[offset] | (this[offset + 1] << 8)\n return (val & 0x8000) ? val | 0xFFFF0000 : val\n}\n\nBuffer.prototype.readInt16BE = function readInt16BE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 2, this.length)\n const val = this[offset + 1] | (this[offset] << 8)\n return (val & 0x8000) ? val | 0xFFFF0000 : val\n}\n\nBuffer.prototype.readInt32LE = function readInt32LE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return (this[offset]) |\n (this[offset + 1] << 8) |\n (this[offset + 2] << 16) |\n (this[offset + 3] << 24)\n}\n\nBuffer.prototype.readInt32BE = function readInt32BE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return (this[offset] << 24) |\n (this[offset + 1] << 16) |\n (this[offset + 2] << 8) |\n (this[offset + 3])\n}\n\nBuffer.prototype.readBigInt64LE = defineBigIntMethod(function readBigInt64LE (offset) {\n offset = offset >>> 0\n validateNumber(offset, 'offset')\n const first = this[offset]\n const last = this[offset + 7]\n if (first === undefined || last === undefined) {\n boundsError(offset, this.length - 8)\n }\n\n const val = this[offset + 4] +\n this[offset + 5] * 2 ** 8 +\n this[offset + 6] * 2 ** 16 +\n (last << 24) // Overflow\n\n return (BigInt(val) << BigInt(32)) +\n BigInt(first +\n this[++offset] * 2 ** 8 +\n this[++offset] * 2 ** 16 +\n this[++offset] * 2 ** 24)\n})\n\nBuffer.prototype.readBigInt64BE = defineBigIntMethod(function readBigInt64BE (offset) {\n offset = offset >>> 0\n validateNumber(offset, 'offset')\n const first = this[offset]\n const last = this[offset + 7]\n if (first === undefined || last === undefined) {\n boundsError(offset, this.length - 8)\n }\n\n const val = (first << 24) + // Overflow\n this[++offset] * 2 ** 16 +\n this[++offset] * 2 ** 8 +\n this[++offset]\n\n return (BigInt(val) << BigInt(32)) +\n BigInt(this[++offset] * 2 ** 24 +\n this[++offset] * 2 ** 16 +\n this[++offset] * 2 ** 8 +\n last)\n})\n\nBuffer.prototype.readFloatLE = function readFloatLE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 4, this.length)\n return ieee754.read(this, offset, true, 23, 4)\n}\n\nBuffer.prototype.readFloatBE = function readFloatBE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 4, this.length)\n return ieee754.read(this, offset, false, 23, 4)\n}\n\nBuffer.prototype.readDoubleLE = function readDoubleLE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 8, this.length)\n return ieee754.read(this, offset, true, 52, 8)\n}\n\nBuffer.prototype.readDoubleBE = function readDoubleBE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 8, this.length)\n return ieee754.read(this, offset, false, 52, 8)\n}\n\nfunction checkInt (buf, value, offset, ext, max, min) {\n if (!Buffer.isBuffer(buf)) throw new TypeError('\"buffer\" argument must be a Buffer instance')\n if (value > max || value < min) throw new RangeError('\"value\" argument is out of bounds')\n if (offset + ext > buf.length) throw new RangeError('Index out of range')\n}\n\nBuffer.prototype.writeUintLE =\nBuffer.prototype.writeUIntLE = function writeUIntLE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset >>> 0\n byteLength = byteLength >>> 0\n if (!noAssert) {\n const maxBytes = Math.pow(2, 8 * byteLength) - 1\n checkInt(this, value, offset, byteLength, maxBytes, 0)\n }\n\n let mul = 1\n let i = 0\n this[offset] = value & 0xFF\n while (++i < byteLength && (mul *= 0x100)) {\n this[offset + i] = (value / mul) & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeUintBE =\nBuffer.prototype.writeUIntBE = function writeUIntBE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset >>> 0\n byteLength = byteLength >>> 0\n if (!noAssert) {\n const maxBytes = Math.pow(2, 8 * byteLength) - 1\n checkInt(this, value, offset, byteLength, maxBytes, 0)\n }\n\n let i = byteLength - 1\n let mul = 1\n this[offset + i] = value & 0xFF\n while (--i >= 0 && (mul *= 0x100)) {\n this[offset + i] = (value / mul) & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeUint8 =\nBuffer.prototype.writeUInt8 = function writeUInt8 (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 1, 0xff, 0)\n this[offset] = (value & 0xff)\n return offset + 1\n}\n\nBuffer.prototype.writeUint16LE =\nBuffer.prototype.writeUInt16LE = function writeUInt16LE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)\n this[offset] = (value & 0xff)\n this[offset + 1] = (value >>> 8)\n return offset + 2\n}\n\nBuffer.prototype.writeUint16BE =\nBuffer.prototype.writeUInt16BE = function writeUInt16BE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)\n this[offset] = (value >>> 8)\n this[offset + 1] = (value & 0xff)\n return offset + 2\n}\n\nBuffer.prototype.writeUint32LE =\nBuffer.prototype.writeUInt32LE = function writeUInt32LE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)\n this[offset + 3] = (value >>> 24)\n this[offset + 2] = (value >>> 16)\n this[offset + 1] = (value >>> 8)\n this[offset] = (value & 0xff)\n return offset + 4\n}\n\nBuffer.prototype.writeUint32BE =\nBuffer.prototype.writeUInt32BE = function writeUInt32BE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)\n this[offset] = (value >>> 24)\n this[offset + 1] = (value >>> 16)\n this[offset + 2] = (value >>> 8)\n this[offset + 3] = (value & 0xff)\n return offset + 4\n}\n\nfunction wrtBigUInt64LE (buf, value, offset, min, max) {\n checkIntBI(value, min, max, buf, offset, 7)\n\n let lo = Number(value & BigInt(0xffffffff))\n buf[offset++] = lo\n lo = lo >> 8\n buf[offset++] = lo\n lo = lo >> 8\n buf[offset++] = lo\n lo = lo >> 8\n buf[offset++] = lo\n let hi = Number(value >> BigInt(32) & BigInt(0xffffffff))\n buf[offset++] = hi\n hi = hi >> 8\n buf[offset++] = hi\n hi = hi >> 8\n buf[offset++] = hi\n hi = hi >> 8\n buf[offset++] = hi\n return offset\n}\n\nfunction wrtBigUInt64BE (buf, value, offset, min, max) {\n checkIntBI(value, min, max, buf, offset, 7)\n\n let lo = Number(value & BigInt(0xffffffff))\n buf[offset + 7] = lo\n lo = lo >> 8\n buf[offset + 6] = lo\n lo = lo >> 8\n buf[offset + 5] = lo\n lo = lo >> 8\n buf[offset + 4] = lo\n let hi = Number(value >> BigInt(32) & BigInt(0xffffffff))\n buf[offset + 3] = hi\n hi = hi >> 8\n buf[offset + 2] = hi\n hi = hi >> 8\n buf[offset + 1] = hi\n hi = hi >> 8\n buf[offset] = hi\n return offset + 8\n}\n\nBuffer.prototype.writeBigUInt64LE = defineBigIntMethod(function writeBigUInt64LE (value, offset = 0) {\n return wrtBigUInt64LE(this, value, offset, BigInt(0), BigInt('0xffffffffffffffff'))\n})\n\nBuffer.prototype.writeBigUInt64BE = defineBigIntMethod(function writeBigUInt64BE (value, offset = 0) {\n return wrtBigUInt64BE(this, value, offset, BigInt(0), BigInt('0xffffffffffffffff'))\n})\n\nBuffer.prototype.writeIntLE = function writeIntLE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) {\n const limit = Math.pow(2, (8 * byteLength) - 1)\n\n checkInt(this, value, offset, byteLength, limit - 1, -limit)\n }\n\n let i = 0\n let mul = 1\n let sub = 0\n this[offset] = value & 0xFF\n while (++i < byteLength && (mul *= 0x100)) {\n if (value < 0 && sub === 0 && this[offset + i - 1] !== 0) {\n sub = 1\n }\n this[offset + i] = ((value / mul) >> 0) - sub & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeIntBE = function writeIntBE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) {\n const limit = Math.pow(2, (8 * byteLength) - 1)\n\n checkInt(this, value, offset, byteLength, limit - 1, -limit)\n }\n\n let i = byteLength - 1\n let mul = 1\n let sub = 0\n this[offset + i] = value & 0xFF\n while (--i >= 0 && (mul *= 0x100)) {\n if (value < 0 && sub === 0 && this[offset + i + 1] !== 0) {\n sub = 1\n }\n this[offset + i] = ((value / mul) >> 0) - sub & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeInt8 = function writeInt8 (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 1, 0x7f, -0x80)\n if (value < 0) value = 0xff + value + 1\n this[offset] = (value & 0xff)\n return offset + 1\n}\n\nBuffer.prototype.writeInt16LE = function writeInt16LE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)\n this[offset] = (value & 0xff)\n this[offset + 1] = (value >>> 8)\n return offset + 2\n}\n\nBuffer.prototype.writeInt16BE = function writeInt16BE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)\n this[offset] = (value >>> 8)\n this[offset + 1] = (value & 0xff)\n return offset + 2\n}\n\nBuffer.prototype.writeInt32LE = function writeInt32LE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)\n this[offset] = (value & 0xff)\n this[offset + 1] = (value >>> 8)\n this[offset + 2] = (value >>> 16)\n this[offset + 3] = (value >>> 24)\n return offset + 4\n}\n\nBuffer.prototype.writeInt32BE = function writeInt32BE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)\n if (value < 0) value = 0xffffffff + value + 1\n this[offset] = (value >>> 24)\n this[offset + 1] = (value >>> 16)\n this[offset + 2] = (value >>> 8)\n this[offset + 3] = (value & 0xff)\n return offset + 4\n}\n\nBuffer.prototype.writeBigInt64LE = defineBigIntMethod(function writeBigInt64LE (value, offset = 0) {\n return wrtBigUInt64LE(this, value, offset, -BigInt('0x8000000000000000'), BigInt('0x7fffffffffffffff'))\n})\n\nBuffer.prototype.writeBigInt64BE = defineBigIntMethod(function writeBigInt64BE (value, offset = 0) {\n return wrtBigUInt64BE(this, value, offset, -BigInt('0x8000000000000000'), BigInt('0x7fffffffffffffff'))\n})\n\nfunction checkIEEE754 (buf, value, offset, ext, max, min) {\n if (offset + ext > buf.length) throw new RangeError('Index out of range')\n if (offset < 0) throw new RangeError('Index out of range')\n}\n\nfunction writeFloat (buf, value, offset, littleEndian, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) {\n checkIEEE754(buf, value, offset, 4, 3.4028234663852886e+38, -3.4028234663852886e+38)\n }\n ieee754.write(buf, value, offset, littleEndian, 23, 4)\n return offset + 4\n}\n\nBuffer.prototype.writeFloatLE = function writeFloatLE (value, offset, noAssert) {\n return writeFloat(this, value, offset, true, noAssert)\n}\n\nBuffer.prototype.writeFloatBE = function writeFloatBE (value, offset, noAssert) {\n return writeFloat(this, value, offset, false, noAssert)\n}\n\nfunction writeDouble (buf, value, offset, littleEndian, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) {\n checkIEEE754(buf, value, offset, 8, 1.7976931348623157E+308, -1.7976931348623157E+308)\n }\n ieee754.write(buf, value, offset, littleEndian, 52, 8)\n return offset + 8\n}\n\nBuffer.prototype.writeDoubleLE = function writeDoubleLE (value, offset, noAssert) {\n return writeDouble(this, value, offset, true, noAssert)\n}\n\nBuffer.prototype.writeDoubleBE = function writeDoubleBE (value, offset, noAssert) {\n return writeDouble(this, value, offset, false, noAssert)\n}\n\n// copy(targetBuffer, targetStart=0, sourceStart=0, sourceEnd=buffer.length)\nBuffer.prototype.copy = function copy (target, targetStart, start, end) {\n if (!Buffer.isBuffer(target)) throw new TypeError('argument should be a Buffer')\n if (!start) start = 0\n if (!end && end !== 0) end = this.length\n if (targetStart >= target.length) targetStart = target.length\n if (!targetStart) targetStart = 0\n if (end > 0 && end < start) end = start\n\n // Copy 0 bytes; we're done\n if (end === start) return 0\n if (target.length === 0 || this.length === 0) return 0\n\n // Fatal error conditions\n if (targetStart < 0) {\n throw new RangeError('targetStart out of bounds')\n }\n if (start < 0 || start >= this.length) throw new RangeError('Index out of range')\n if (end < 0) throw new RangeError('sourceEnd out of bounds')\n\n // Are we oob?\n if (end > this.length) end = this.length\n if (target.length - targetStart < end - start) {\n end = target.length - targetStart + start\n }\n\n const len = end - start\n\n if (this === target && typeof Uint8Array.prototype.copyWithin === 'function') {\n // Use built-in when available, missing from IE11\n this.copyWithin(targetStart, start, end)\n } else {\n Uint8Array.prototype.set.call(\n target,\n this.subarray(start, end),\n targetStart\n )\n }\n\n return len\n}\n\n// Usage:\n// buffer.fill(number[, offset[, end]])\n// buffer.fill(buffer[, offset[, end]])\n// buffer.fill(string[, offset[, end]][, encoding])\nBuffer.prototype.fill = function fill (val, start, end, encoding) {\n // Handle string cases:\n if (typeof val === 'string') {\n if (typeof start === 'string') {\n encoding = start\n start = 0\n end = this.length\n } else if (typeof end === 'string') {\n encoding = end\n end = this.length\n }\n if (encoding !== undefined && typeof encoding !== 'string') {\n throw new TypeError('encoding must be a string')\n }\n if (typeof encoding === 'string' && !Buffer.isEncoding(encoding)) {\n throw new TypeError('Unknown encoding: ' + encoding)\n }\n if (val.length === 1) {\n const code = val.charCodeAt(0)\n if ((encoding === 'utf8' && code < 128) ||\n encoding === 'latin1') {\n // Fast path: If `val` fits into a single byte, use that numeric value.\n val = code\n }\n }\n } else if (typeof val === 'number') {\n val = val & 255\n } else if (typeof val === 'boolean') {\n val = Number(val)\n }\n\n // Invalid ranges are not set to a default, so can range check early.\n if (start < 0 || this.length < start || this.length < end) {\n throw new RangeError('Out of range index')\n }\n\n if (end <= start) {\n return this\n }\n\n start = start >>> 0\n end = end === undefined ? this.length : end >>> 0\n\n if (!val) val = 0\n\n let i\n if (typeof val === 'number') {\n for (i = start; i < end; ++i) {\n this[i] = val\n }\n } else {\n const bytes = Buffer.isBuffer(val)\n ? val\n : Buffer.from(val, encoding)\n const len = bytes.length\n if (len === 0) {\n throw new TypeError('The value \"' + val +\n '\" is invalid for argument \"value\"')\n }\n for (i = 0; i < end - start; ++i) {\n this[i + start] = bytes[i % len]\n }\n }\n\n return this\n}\n\n// CUSTOM ERRORS\n// =============\n\n// Simplified versions from Node, changed for Buffer-only usage\nconst errors = {}\nfunction E (sym, getMessage, Base) {\n errors[sym] = class NodeError extends Base {\n constructor () {\n super()\n\n Object.defineProperty(this, 'message', {\n value: getMessage.apply(this, arguments),\n writable: true,\n configurable: true\n })\n\n // Add the error code to the name to include it in the stack trace.\n this.name = `${this.name} [${sym}]`\n // Access the stack to generate the error message including the error code\n // from the name.\n this.stack // eslint-disable-line no-unused-expressions\n // Reset the name to the actual name.\n delete this.name\n }\n\n get code () {\n return sym\n }\n\n set code (value) {\n Object.defineProperty(this, 'code', {\n configurable: true,\n enumerable: true,\n value,\n writable: true\n })\n }\n\n toString () {\n return `${this.name} [${sym}]: ${this.message}`\n }\n }\n}\n\nE('ERR_BUFFER_OUT_OF_BOUNDS',\n function (name) {\n if (name) {\n return `${name} is outside of buffer bounds`\n }\n\n return 'Attempt to access memory outside buffer bounds'\n }, RangeError)\nE('ERR_INVALID_ARG_TYPE',\n function (name, actual) {\n return `The \"${name}\" argument must be of type number. Received type ${typeof actual}`\n }, TypeError)\nE('ERR_OUT_OF_RANGE',\n function (str, range, input) {\n let msg = `The value of \"${str}\" is out of range.`\n let received = input\n if (Number.isInteger(input) && Math.abs(input) > 2 ** 32) {\n received = addNumericalSeparator(String(input))\n } else if (typeof input === 'bigint') {\n received = String(input)\n if (input > BigInt(2) ** BigInt(32) || input < -(BigInt(2) ** BigInt(32))) {\n received = addNumericalSeparator(received)\n }\n received += 'n'\n }\n msg += ` It must be ${range}. Received ${received}`\n return msg\n }, RangeError)\n\nfunction addNumericalSeparator (val) {\n let res = ''\n let i = val.length\n const start = val[0] === '-' ? 1 : 0\n for (; i >= start + 4; i -= 3) {\n res = `_${val.slice(i - 3, i)}${res}`\n }\n return `${val.slice(0, i)}${res}`\n}\n\n// CHECK FUNCTIONS\n// ===============\n\nfunction checkBounds (buf, offset, byteLength) {\n validateNumber(offset, 'offset')\n if (buf[offset] === undefined || buf[offset + byteLength] === undefined) {\n boundsError(offset, buf.length - (byteLength + 1))\n }\n}\n\nfunction checkIntBI (value, min, max, buf, offset, byteLength) {\n if (value > max || value < min) {\n const n = typeof min === 'bigint' ? 'n' : ''\n let range\n if (byteLength > 3) {\n if (min === 0 || min === BigInt(0)) {\n range = `>= 0${n} and < 2${n} ** ${(byteLength + 1) * 8}${n}`\n } else {\n range = `>= -(2${n} ** ${(byteLength + 1) * 8 - 1}${n}) and < 2 ** ` +\n `${(byteLength + 1) * 8 - 1}${n}`\n }\n } else {\n range = `>= ${min}${n} and <= ${max}${n}`\n }\n throw new errors.ERR_OUT_OF_RANGE('value', range, value)\n }\n checkBounds(buf, offset, byteLength)\n}\n\nfunction validateNumber (value, name) {\n if (typeof value !== 'number') {\n throw new errors.ERR_INVALID_ARG_TYPE(name, 'number', value)\n }\n}\n\nfunction boundsError (value, length, type) {\n if (Math.floor(value) !== value) {\n validateNumber(value, type)\n throw new errors.ERR_OUT_OF_RANGE(type || 'offset', 'an integer', value)\n }\n\n if (length < 0) {\n throw new errors.ERR_BUFFER_OUT_OF_BOUNDS()\n }\n\n throw new errors.ERR_OUT_OF_RANGE(type || 'offset',\n `>= ${type ? 1 : 0} and <= ${length}`,\n value)\n}\n\n// HELPER FUNCTIONS\n// ================\n\nconst INVALID_BASE64_RE = /[^+/0-9A-Za-z-_]/g\n\nfunction base64clean (str) {\n // Node takes equal signs as end of the Base64 encoding\n str = str.split('=')[0]\n // Node strips out invalid characters like \\n and \\t from the string, base64-js does not\n str = str.trim().replace(INVALID_BASE64_RE, '')\n // Node converts strings with length < 2 to ''\n if (str.length < 2) return ''\n // Node allows for non-padded base64 strings (missing trailing ===), base64-js does not\n while (str.length % 4 !== 0) {\n str = str + '='\n }\n return str\n}\n\nfunction utf8ToBytes (string, units) {\n units = units || Infinity\n let codePoint\n const length = string.length\n let leadSurrogate = null\n const bytes = []\n\n for (let i = 0; i < length; ++i) {\n codePoint = string.charCodeAt(i)\n\n // is surrogate component\n if (codePoint > 0xD7FF && codePoint < 0xE000) {\n // last char was a lead\n if (!leadSurrogate) {\n // no lead yet\n if (codePoint > 0xDBFF) {\n // unexpected trail\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n continue\n } else if (i + 1 === length) {\n // unpaired lead\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n continue\n }\n\n // valid lead\n leadSurrogate = codePoint\n\n continue\n }\n\n // 2 leads in a row\n if (codePoint < 0xDC00) {\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n leadSurrogate = codePoint\n continue\n }\n\n // valid surrogate pair\n codePoint = (leadSurrogate - 0xD800 << 10 | codePoint - 0xDC00) + 0x10000\n } else if (leadSurrogate) {\n // valid bmp char, but last char was a lead\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n }\n\n leadSurrogate = null\n\n // encode utf8\n if (codePoint < 0x80) {\n if ((units -= 1) < 0) break\n bytes.push(codePoint)\n } else if (codePoint < 0x800) {\n if ((units -= 2) < 0) break\n bytes.push(\n codePoint >> 0x6 | 0xC0,\n codePoint & 0x3F | 0x80\n )\n } else if (codePoint < 0x10000) {\n if ((units -= 3) < 0) break\n bytes.push(\n codePoint >> 0xC | 0xE0,\n codePoint >> 0x6 & 0x3F | 0x80,\n codePoint & 0x3F | 0x80\n )\n } else if (codePoint < 0x110000) {\n if ((units -= 4) < 0) break\n bytes.push(\n codePoint >> 0x12 | 0xF0,\n codePoint >> 0xC & 0x3F | 0x80,\n codePoint >> 0x6 & 0x3F | 0x80,\n codePoint & 0x3F | 0x80\n )\n } else {\n throw new Error('Invalid code point')\n }\n }\n\n return bytes\n}\n\nfunction asciiToBytes (str) {\n const byteArray = []\n for (let i = 0; i < str.length; ++i) {\n // Node's code seems to be doing this and not & 0x7F..\n byteArray.push(str.charCodeAt(i) & 0xFF)\n }\n return byteArray\n}\n\nfunction utf16leToBytes (str, units) {\n let c, hi, lo\n const byteArray = []\n for (let i = 0; i < str.length; ++i) {\n if ((units -= 2) < 0) break\n\n c = str.charCodeAt(i)\n hi = c >> 8\n lo = c % 256\n byteArray.push(lo)\n byteArray.push(hi)\n }\n\n return byteArray\n}\n\nfunction base64ToBytes (str) {\n return base64.toByteArray(base64clean(str))\n}\n\nfunction blitBuffer (src, dst, offset, length) {\n let i\n for (i = 0; i < length; ++i) {\n if ((i + offset >= dst.length) || (i >= src.length)) break\n dst[i + offset] = src[i]\n }\n return i\n}\n\n// ArrayBuffer or Uint8Array objects from other contexts (i.e. iframes) do not pass\n// the `instanceof` check but they should be treated as of that type.\n// See: https://github.com/feross/buffer/issues/166\nfunction isInstance (obj, type) {\n return obj instanceof type ||\n (obj != null && obj.constructor != null && obj.constructor.name != null &&\n obj.constructor.name === type.name)\n}\nfunction numberIsNaN (obj) {\n // For IE11 support\n return obj !== obj // eslint-disable-line no-self-compare\n}\n\n// Create lookup table for `toString('hex')`\n// See: https://github.com/feross/buffer/issues/219\nconst hexSliceLookupTable = (function () {\n const alphabet = '0123456789abcdef'\n const table = new Array(256)\n for (let i = 0; i < 16; ++i) {\n const i16 = i * 16\n for (let j = 0; j < 16; ++j) {\n table[i16 + j] = alphabet[i] + alphabet[j]\n }\n }\n return table\n})()\n\n// Return not function with Error if BigInt not supported\nfunction defineBigIntMethod (fn) {\n return typeof BigInt === 'undefined' ? BufferBigIntNotDefined : fn\n}\n\nfunction BufferBigIntNotDefined () {\n throw new Error('BigInt not supported')\n}\n","/*!\n * RSA library for Node.js\n *\n * Author: rzcoder\n * License MIT\n */\n\nvar constants = require('constants');\nvar rsa = require('./libs/rsa.js');\nvar crypt = require('crypto');\nvar ber = require('asn1').Ber;\nvar _ = require('./utils')._;\nvar utils = require('./utils');\nvar schemes = require('./schemes/schemes.js');\nvar formats = require('./formats/formats.js');\n\nif (typeof constants.RSA_NO_PADDING === \"undefined\") {\n //patch for node v0.10.x, constants do not defined\n constants.RSA_NO_PADDING = 3;\n}\n\nmodule.exports = (function () {\n var SUPPORTED_HASH_ALGORITHMS = {\n node10: ['md4', 'md5', 'ripemd160', 'sha1', 'sha224', 'sha256', 'sha384', 'sha512'],\n node: ['md4', 'md5', 'ripemd160', 'sha1', 'sha224', 'sha256', 'sha384', 'sha512'],\n iojs: ['md4', 'md5', 'ripemd160', 'sha1', 'sha224', 'sha256', 'sha384', 'sha512'],\n browser: ['md5', 'ripemd160', 'sha1', 'sha256', 'sha512']\n };\n\n var DEFAULT_ENCRYPTION_SCHEME = 'pkcs1_oaep';\n var DEFAULT_SIGNING_SCHEME = 'pkcs1';\n\n var DEFAULT_EXPORT_FORMAT = 'private';\n var EXPORT_FORMAT_ALIASES = {\n 'private': 'pkcs1-private-pem',\n 'private-der': 'pkcs1-private-der',\n 'public': 'pkcs8-public-pem',\n 'public-der': 'pkcs8-public-der',\n };\n\n /**\n * @param key {string|buffer|object} Key in PEM format, or data for generate key {b: bits, e: exponent}\n * @constructor\n */\n function NodeRSA(key, format, options) {\n if (!(this instanceof NodeRSA)) {\n return new NodeRSA(key, format, options);\n }\n\n if (_.isObject(format)) {\n options = format;\n format = undefined;\n }\n\n this.$options = {\n signingScheme: DEFAULT_SIGNING_SCHEME,\n signingSchemeOptions: {\n hash: 'sha256',\n saltLength: null\n },\n encryptionScheme: DEFAULT_ENCRYPTION_SCHEME,\n encryptionSchemeOptions: {\n hash: 'sha1',\n label: null\n },\n environment: utils.detectEnvironment(),\n rsaUtils: this\n };\n this.keyPair = new rsa.Key();\n this.$cache = {};\n\n if (Buffer.isBuffer(key) || _.isString(key)) {\n this.importKey(key, format);\n } else if (_.isObject(key)) {\n this.generateKeyPair(key.b, key.e);\n }\n\n this.setOptions(options);\n }\n\n /**\n * Set and validate options for key instance\n * @param options\n */\n NodeRSA.prototype.setOptions = function (options) {\n options = options || {};\n if (options.environment) {\n this.$options.environment = options.environment;\n }\n\n if (options.signingScheme) {\n if (_.isString(options.signingScheme)) {\n var signingScheme = options.signingScheme.toLowerCase().split('-');\n if (signingScheme.length == 1) {\n if (SUPPORTED_HASH_ALGORITHMS.node.indexOf(signingScheme[0]) > -1) {\n this.$options.signingSchemeOptions = {\n hash: signingScheme[0]\n };\n this.$options.signingScheme = DEFAULT_SIGNING_SCHEME;\n } else {\n this.$options.signingScheme = signingScheme[0];\n this.$options.signingSchemeOptions = {\n hash: null\n };\n }\n } else {\n this.$options.signingSchemeOptions = {\n hash: signingScheme[1]\n };\n this.$options.signingScheme = signingScheme[0];\n }\n } else if (_.isObject(options.signingScheme)) {\n this.$options.signingScheme = options.signingScheme.scheme || DEFAULT_SIGNING_SCHEME;\n this.$options.signingSchemeOptions = _.omit(options.signingScheme, 'scheme');\n }\n\n if (!schemes.isSignature(this.$options.signingScheme)) {\n throw Error('Unsupported signing scheme');\n }\n\n if (this.$options.signingSchemeOptions.hash &&\n SUPPORTED_HASH_ALGORITHMS[this.$options.environment].indexOf(this.$options.signingSchemeOptions.hash) === -1) {\n throw Error('Unsupported hashing algorithm for ' + this.$options.environment + ' environment');\n }\n }\n\n if (options.encryptionScheme) {\n if (_.isString(options.encryptionScheme)) {\n this.$options.encryptionScheme = options.encryptionScheme.toLowerCase();\n this.$options.encryptionSchemeOptions = {};\n } else if (_.isObject(options.encryptionScheme)) {\n this.$options.encryptionScheme = options.encryptionScheme.scheme || DEFAULT_ENCRYPTION_SCHEME;\n this.$options.encryptionSchemeOptions = _.omit(options.encryptionScheme, 'scheme');\n }\n\n if (!schemes.isEncryption(this.$options.encryptionScheme)) {\n throw Error('Unsupported encryption scheme');\n }\n\n if (this.$options.encryptionSchemeOptions.hash &&\n SUPPORTED_HASH_ALGORITHMS[this.$options.environment].indexOf(this.$options.encryptionSchemeOptions.hash) === -1) {\n throw Error('Unsupported hashing algorithm for ' + this.$options.environment + ' environment');\n }\n }\n\n this.keyPair.setOptions(this.$options);\n };\n\n /**\n * Generate private/public keys pair\n *\n * @param bits {int} length key in bits. Default 2048.\n * @param exp {int} public exponent. Default 65537.\n * @returns {NodeRSA}\n */\n NodeRSA.prototype.generateKeyPair = function (bits, exp) {\n bits = bits || 2048;\n exp = exp || 65537;\n\n if (bits % 8 !== 0) {\n throw Error('Key size must be a multiple of 8.');\n }\n\n this.keyPair.generate(bits, exp.toString(16));\n this.$cache = {};\n return this;\n };\n\n /**\n * Importing key\n * @param keyData {string|buffer|Object}\n * @param format {string}\n */\n NodeRSA.prototype.importKey = function (keyData, format) {\n if (!keyData) {\n throw Error(\"Empty key given\");\n }\n\n if (format) {\n format = EXPORT_FORMAT_ALIASES[format] || format;\n }\n\n if (!formats.detectAndImport(this.keyPair, keyData, format) && format === undefined) {\n throw Error(\"Key format must be specified\");\n }\n \n this.$cache = {};\n \n return this;\n };\n\n /**\n * Exporting key\n * @param [format] {string}\n */\n NodeRSA.prototype.exportKey = function (format) {\n format = format || DEFAULT_EXPORT_FORMAT;\n format = EXPORT_FORMAT_ALIASES[format] || format;\n\n if (!this.$cache[format]) {\n this.$cache[format] = formats.detectAndExport(this.keyPair, format);\n }\n\n return this.$cache[format];\n };\n\n /**\n * Check if key pair contains private key\n */\n NodeRSA.prototype.isPrivate = function () {\n return this.keyPair.isPrivate();\n };\n\n /**\n * Check if key pair contains public key\n * @param [strict] {boolean} - public key only, return false if have private exponent\n */\n NodeRSA.prototype.isPublic = function (strict) {\n return this.keyPair.isPublic(strict);\n };\n\n /**\n * Check if key pair doesn't contains any data\n */\n NodeRSA.prototype.isEmpty = function (strict) {\n return !(this.keyPair.n || this.keyPair.e || this.keyPair.d);\n };\n\n /**\n * Encrypting data method with public key\n *\n * @param buffer {string|number|object|array|Buffer} - data for encrypting. Object and array will convert to JSON string.\n * @param encoding {string} - optional. Encoding for output result, may be 'buffer', 'binary', 'hex' or 'base64'. Default 'buffer'.\n * @param source_encoding {string} - optional. Encoding for given string. Default utf8.\n * @returns {string|Buffer}\n */\n NodeRSA.prototype.encrypt = function (buffer, encoding, source_encoding) {\n return this.$$encryptKey(false, buffer, encoding, source_encoding);\n };\n\n /**\n * Decrypting data method with private key\n *\n * @param buffer {Buffer} - buffer for decrypting\n * @param encoding - encoding for result string, can also take 'json' or 'buffer' for the automatic conversion of this type\n * @returns {Buffer|object|string}\n */\n NodeRSA.prototype.decrypt = function (buffer, encoding) {\n return this.$$decryptKey(false, buffer, encoding);\n };\n\n /**\n * Encrypting data method with private key\n *\n * Parameters same as `encrypt` method\n */\n NodeRSA.prototype.encryptPrivate = function (buffer, encoding, source_encoding) {\n return this.$$encryptKey(true, buffer, encoding, source_encoding);\n };\n\n /**\n * Decrypting data method with public key\n *\n * Parameters same as `decrypt` method\n */\n NodeRSA.prototype.decryptPublic = function (buffer, encoding) {\n return this.$$decryptKey(true, buffer, encoding);\n };\n\n /**\n * Encrypting data method with custom key\n */\n NodeRSA.prototype.$$encryptKey = function (usePrivate, buffer, encoding, source_encoding) {\n try {\n var res = this.keyPair.encrypt(this.$getDataForEncrypt(buffer, source_encoding), usePrivate);\n\n if (encoding == 'buffer' || !encoding) {\n return res;\n } else {\n return res.toString(encoding);\n }\n } catch (e) {\n throw Error('Error during encryption. Original error: ' + e);\n }\n };\n\n /**\n * Decrypting data method with custom key\n */\n NodeRSA.prototype.$$decryptKey = function (usePublic, buffer, encoding) {\n try {\n buffer = _.isString(buffer) ? Buffer.from(buffer, 'base64') : buffer;\n var res = this.keyPair.decrypt(buffer, usePublic);\n\n if (res === null) {\n throw Error('Key decrypt method returns null.');\n }\n\n return this.$getDecryptedData(res, encoding);\n } catch (e) {\n throw Error('Error during decryption (probably incorrect key). Original error: ' + e);\n }\n };\n\n /**\n * Signing data\n *\n * @param buffer {string|number|object|array|Buffer} - data for signing. Object and array will convert to JSON string.\n * @param encoding {string} - optional. Encoding for output result, may be 'buffer', 'binary', 'hex' or 'base64'. Default 'buffer'.\n * @param source_encoding {string} - optional. Encoding for given string. Default utf8.\n * @returns {string|Buffer}\n */\n NodeRSA.prototype.sign = function (buffer, encoding, source_encoding) {\n if (!this.isPrivate()) {\n throw Error(\"This is not private key\");\n }\n\n var res = this.keyPair.sign(this.$getDataForEncrypt(buffer, source_encoding));\n\n if (encoding && encoding != 'buffer') {\n res = res.toString(encoding);\n }\n\n return res;\n };\n\n /**\n * Verifying signed data\n *\n * @param buffer - signed data\n * @param signature\n * @param source_encoding {string} - optional. Encoding for given string. Default utf8.\n * @param signature_encoding - optional. Encoding of given signature. May be 'buffer', 'binary', 'hex' or 'base64'. Default 'buffer'.\n * @returns {*}\n */\n NodeRSA.prototype.verify = function (buffer, signature, source_encoding, signature_encoding) {\n if (!this.isPublic()) {\n throw Error(\"This is not public key\");\n }\n signature_encoding = (!signature_encoding || signature_encoding == 'buffer' ? null : signature_encoding);\n return this.keyPair.verify(this.$getDataForEncrypt(buffer, source_encoding), signature, signature_encoding);\n };\n\n /**\n * Returns key size in bits\n * @returns {int}\n */\n NodeRSA.prototype.getKeySize = function () {\n return this.keyPair.keySize;\n };\n\n /**\n * Returns max message length in bytes (for 1 chunk) depending on current encryption scheme\n * @returns {int}\n */\n NodeRSA.prototype.getMaxMessageSize = function () {\n return this.keyPair.maxMessageLength;\n };\n\n /**\n * Preparing given data for encrypting/signing. Just make new/return Buffer object.\n *\n * @param buffer {string|number|object|array|Buffer} - data for encrypting. Object and array will convert to JSON string.\n * @param encoding {string} - optional. Encoding for given string. Default utf8.\n * @returns {Buffer}\n */\n NodeRSA.prototype.$getDataForEncrypt = function (buffer, encoding) {\n if (_.isString(buffer) || _.isNumber(buffer)) {\n return Buffer.from('' + buffer, encoding || 'utf8');\n } else if (Buffer.isBuffer(buffer)) {\n return buffer;\n } else if (_.isObject(buffer)) {\n return Buffer.from(JSON.stringify(buffer));\n } else {\n throw Error(\"Unexpected data type\");\n }\n };\n\n /**\n *\n * @param buffer {Buffer} - decrypted data.\n * @param encoding - optional. Encoding for result output. May be 'buffer', 'json' or any of Node.js Buffer supported encoding.\n * @returns {*}\n */\n NodeRSA.prototype.$getDecryptedData = function (buffer, encoding) {\n encoding = encoding || 'buffer';\n\n if (encoding == 'buffer') {\n return buffer;\n } else if (encoding == 'json') {\n return JSON.parse(buffer.toString());\n } else {\n return buffer.toString(encoding);\n }\n };\n\n return NodeRSA;\n})();\n","var crypt = require('crypto');\r\n\r\nmodule.exports = {\r\n getEngine: function (keyPair, options) {\r\n var engine = require('./js.js');\r\n if (options.environment === 'node') {\r\n if (typeof crypt.publicEncrypt === 'function' && typeof crypt.privateDecrypt === 'function') {\r\n if (typeof crypt.privateEncrypt === 'function' && typeof crypt.publicDecrypt === 'function') {\r\n engine = require('./io.js');\r\n } else {\r\n engine = require('./node12.js');\r\n }\r\n }\r\n }\r\n return engine(keyPair, options);\r\n }\r\n};","var crypto = require('crypto');\nvar constants = require('constants');\nvar schemes = require('../schemes/schemes.js');\n\nmodule.exports = function (keyPair, options) {\n var pkcs1Scheme = schemes.pkcs1.makeScheme(keyPair, options);\n\n return {\n encrypt: function (buffer, usePrivate) {\n var padding;\n if (usePrivate) {\n padding = constants.RSA_PKCS1_PADDING;\n if (options.encryptionSchemeOptions && options.encryptionSchemeOptions.padding) {\n padding = options.encryptionSchemeOptions.padding;\n }\n return crypto.privateEncrypt({\n key: options.rsaUtils.exportKey('private'),\n padding: padding\n }, buffer);\n } else {\n padding = constants.RSA_PKCS1_OAEP_PADDING;\n if (options.encryptionScheme === 'pkcs1') {\n padding = constants.RSA_PKCS1_PADDING;\n }\n if (options.encryptionSchemeOptions && options.encryptionSchemeOptions.padding) {\n padding = options.encryptionSchemeOptions.padding;\n }\n\n var data = buffer;\n if (padding === constants.RSA_NO_PADDING) {\n data = pkcs1Scheme.pkcs0pad(buffer);\n }\n\n return crypto.publicEncrypt({\n key: options.rsaUtils.exportKey('public'),\n padding: padding\n }, data);\n }\n },\n\n decrypt: function (buffer, usePublic) {\n var padding;\n if (usePublic) {\n padding = constants.RSA_PKCS1_PADDING;\n if (options.encryptionSchemeOptions && options.encryptionSchemeOptions.padding) {\n padding = options.encryptionSchemeOptions.padding;\n }\n return crypto.publicDecrypt({\n key: options.rsaUtils.exportKey('public'),\n padding: padding\n }, buffer);\n } else {\n padding = constants.RSA_PKCS1_OAEP_PADDING;\n if (options.encryptionScheme === 'pkcs1') {\n padding = constants.RSA_PKCS1_PADDING;\n }\n if (options.encryptionSchemeOptions && options.encryptionSchemeOptions.padding) {\n padding = options.encryptionSchemeOptions.padding;\n }\n var res = crypto.privateDecrypt({\n key: options.rsaUtils.exportKey('private'),\n padding: padding\n }, buffer);\n\n if (padding === constants.RSA_NO_PADDING) {\n return pkcs1Scheme.pkcs0unpad(res);\n }\n return res;\n }\n }\n };\n};","var BigInteger = require('../libs/jsbn.js');\r\nvar schemes = require('../schemes/schemes.js');\r\n\r\nmodule.exports = function (keyPair, options) {\r\n var pkcs1Scheme = schemes.pkcs1.makeScheme(keyPair, options);\r\n\r\n return {\r\n encrypt: function (buffer, usePrivate) {\r\n var m, c;\r\n if (usePrivate) {\r\n /* Type 1: zeros padding for private key encrypt */\r\n m = new BigInteger(pkcs1Scheme.encPad(buffer, {type: 1}));\r\n c = keyPair.$doPrivate(m);\r\n } else {\r\n m = new BigInteger(keyPair.encryptionScheme.encPad(buffer));\r\n c = keyPair.$doPublic(m);\r\n }\r\n return c.toBuffer(keyPair.encryptedDataLength);\r\n },\r\n\r\n decrypt: function (buffer, usePublic) {\r\n var m, c = new BigInteger(buffer);\r\n\r\n if (usePublic) {\r\n m = keyPair.$doPublic(c);\r\n /* Type 1: zeros padding for private key decrypt */\r\n return pkcs1Scheme.encUnPad(m.toBuffer(keyPair.encryptedDataLength), {type: 1});\r\n } else {\r\n m = keyPair.$doPrivate(c);\r\n return keyPair.encryptionScheme.encUnPad(m.toBuffer(keyPair.encryptedDataLength));\r\n }\r\n }\r\n };\r\n};","var crypto = require('crypto');\nvar constants = require('constants');\nvar schemes = require('../schemes/schemes.js');\n\nmodule.exports = function (keyPair, options) {\n var jsEngine = require('./js.js')(keyPair, options);\n var pkcs1Scheme = schemes.pkcs1.makeScheme(keyPair, options);\n\n return {\n encrypt: function (buffer, usePrivate) {\n if (usePrivate) {\n return jsEngine.encrypt(buffer, usePrivate);\n }\n var padding = constants.RSA_PKCS1_OAEP_PADDING;\n if (options.encryptionScheme === 'pkcs1') {\n padding = constants.RSA_PKCS1_PADDING;\n }\n if (options.encryptionSchemeOptions && options.encryptionSchemeOptions.padding) {\n padding = options.encryptionSchemeOptions.padding;\n }\n\n var data = buffer;\n if (padding === constants.RSA_NO_PADDING) {\n data = pkcs1Scheme.pkcs0pad(buffer);\n }\n\n return crypto.publicEncrypt({\n key: options.rsaUtils.exportKey('public'),\n padding: padding\n }, data);\n },\n\n decrypt: function (buffer, usePublic) {\n if (usePublic) {\n return jsEngine.decrypt(buffer, usePublic);\n }\n var padding = constants.RSA_PKCS1_OAEP_PADDING;\n if (options.encryptionScheme === 'pkcs1') {\n padding = constants.RSA_PKCS1_PADDING;\n }\n if (options.encryptionSchemeOptions && options.encryptionSchemeOptions.padding) {\n padding = options.encryptionSchemeOptions.padding;\n }\n\n var res = crypto.privateDecrypt({\n key: options.rsaUtils.exportKey('private'),\n padding: padding\n }, buffer);\n\n if (padding === constants.RSA_NO_PADDING) {\n return pkcs1Scheme.pkcs0unpad(res);\n }\n return res;\n }\n };\n};","var _ = require('../utils')._;\r\nvar utils = require('../utils');\r\n\r\nmodule.exports = {\r\n privateExport: function (key, options) {\r\n return {\r\n n: key.n.toBuffer(),\r\n e: key.e,\r\n d: key.d.toBuffer(),\r\n p: key.p.toBuffer(),\r\n q: key.q.toBuffer(),\r\n dmp1: key.dmp1.toBuffer(),\r\n dmq1: key.dmq1.toBuffer(),\r\n coeff: key.coeff.toBuffer()\r\n };\r\n },\r\n\r\n privateImport: function (key, data, options) {\r\n if (data.n && data.e && data.d && data.p && data.q && data.dmp1 && data.dmq1 && data.coeff) {\r\n key.setPrivate(\r\n data.n,\r\n data.e,\r\n data.d,\r\n data.p,\r\n data.q,\r\n data.dmp1,\r\n data.dmq1,\r\n data.coeff\r\n );\r\n } else {\r\n throw Error(\"Invalid key data\");\r\n }\r\n },\r\n\r\n publicExport: function (key, options) {\r\n return {\r\n n: key.n.toBuffer(),\r\n e: key.e\r\n };\r\n },\r\n\r\n publicImport: function (key, data, options) {\r\n if (data.n && data.e) {\r\n key.setPublic(\r\n data.n,\r\n data.e\r\n );\r\n } else {\r\n throw Error(\"Invalid key data\");\r\n }\r\n },\r\n\r\n /**\r\n * Trying autodetect and import key\r\n * @param key\r\n * @param data\r\n */\r\n autoImport: function (key, data) {\r\n if (data.n && data.e) {\r\n if (data.d && data.p && data.q && data.dmp1 && data.dmq1 && data.coeff) {\r\n module.exports.privateImport(key, data);\r\n return true;\r\n } else {\r\n module.exports.publicImport(key, data);\r\n return true;\r\n }\r\n }\r\n\r\n return false;\r\n }\r\n};\r\n","var _ = require('../utils')._;\n\nfunction formatParse(format) {\n format = format.split('-');\n var keyType = 'private';\n var keyOpt = {type: 'default'};\n\n for (var i = 1; i < format.length; i++) {\n if (format[i]) {\n switch (format[i]) {\n case 'public':\n keyType = format[i];\n break;\n case 'private':\n keyType = format[i];\n break;\n case 'pem':\n keyOpt.type = format[i];\n break;\n case 'der':\n keyOpt.type = format[i];\n break;\n }\n }\n }\n\n return {scheme: format[0], keyType: keyType, keyOpt: keyOpt};\n}\n\nmodule.exports = {\n pkcs1: require('./pkcs1'),\n pkcs8: require('./pkcs8'),\n components: require('./components'),\n openssh: require('./openssh'),\n\n isPrivateExport: function (format) {\n return module.exports[format] && typeof module.exports[format].privateExport === 'function';\n },\n\n isPrivateImport: function (format) {\n return module.exports[format] && typeof module.exports[format].privateImport === 'function';\n },\n\n isPublicExport: function (format) {\n return module.exports[format] && typeof module.exports[format].publicExport === 'function';\n },\n\n isPublicImport: function (format) {\n return module.exports[format] && typeof module.exports[format].publicImport === 'function';\n },\n\n detectAndImport: function (key, data, format) {\n if (format === undefined) {\n for (var scheme in module.exports) {\n if (typeof module.exports[scheme].autoImport === 'function' && module.exports[scheme].autoImport(key, data)) {\n return true;\n }\n }\n } else if (format) {\n var fmt = formatParse(format);\n\n if (module.exports[fmt.scheme]) {\n if (fmt.keyType === 'private') {\n module.exports[fmt.scheme].privateImport(key, data, fmt.keyOpt);\n } else {\n module.exports[fmt.scheme].publicImport(key, data, fmt.keyOpt);\n }\n } else {\n throw Error('Unsupported key format');\n }\n }\n\n return false;\n },\n\n detectAndExport: function (key, format) {\n if (format) {\n var fmt = formatParse(format);\n\n if (module.exports[fmt.scheme]) {\n if (fmt.keyType === 'private') {\n if (!key.isPrivate()) {\n throw Error(\"This is not private key\");\n }\n return module.exports[fmt.scheme].privateExport(key, fmt.keyOpt);\n } else {\n if (!key.isPublic()) {\n throw Error(\"This is not public key\");\n }\n return module.exports[fmt.scheme].publicExport(key, fmt.keyOpt);\n }\n } else {\n throw Error('Unsupported key format');\n }\n }\n }\n};","var _ = require(\"../utils\")._;\nvar utils = require(\"../utils\");\nvar BigInteger = require(\"../libs/jsbn\");\n\nconst PRIVATE_OPENING_BOUNDARY = \"-----BEGIN OPENSSH PRIVATE KEY-----\";\nconst PRIVATE_CLOSING_BOUNDARY = \"-----END OPENSSH PRIVATE KEY-----\";\n\nmodule.exports = {\n privateExport: function (key, options) {\n const nbuf = key.n.toBuffer();\n\n let ebuf = Buffer.alloc(4)\n ebuf.writeUInt32BE(key.e, 0);\n //Slice leading zeroes\n while (ebuf[0] === 0) ebuf = ebuf.slice(1);\n\n const dbuf = key.d.toBuffer();\n const coeffbuf = key.coeff.toBuffer();\n const pbuf = key.p.toBuffer();\n const qbuf = key.q.toBuffer();\n let commentbuf;\n if (typeof key.sshcomment !== \"undefined\") {\n commentbuf = Buffer.from(key.sshcomment);\n } else {\n commentbuf = Buffer.from([]);\n }\n\n const pubkeyLength =\n 11 + // 32bit length, 'ssh-rsa'\n 4 + ebuf.byteLength +\n 4 + nbuf.byteLength;\n\n const privateKeyLength =\n 8 + //64bit unused checksum\n 11 + // 32bit length, 'ssh-rsa'\n 4 + nbuf.byteLength +\n 4 + ebuf.byteLength +\n 4 + dbuf.byteLength +\n 4 + coeffbuf.byteLength +\n 4 + pbuf.byteLength +\n 4 + qbuf.byteLength +\n 4 + commentbuf.byteLength;\n\n let length =\n 15 + //openssh-key-v1,0x00,\n 16 + // 2*(32bit length, 'none')\n 4 + // 32bit length, empty string\n 4 + // 32bit number of keys\n 4 + // 32bit pubkey length\n pubkeyLength +\n 4 + //32bit private+checksum+comment+padding length\n privateKeyLength;\n\n const paddingLength = Math.ceil(privateKeyLength / 8) * 8 - privateKeyLength;\n length += paddingLength;\n\n const buf = Buffer.alloc(length);\n const writer = {buf: buf, off: 0};\n buf.write(\"openssh-key-v1\", \"utf8\");\n buf.writeUInt8(0, 14);\n writer.off += 15;\n\n writeOpenSSHKeyString(writer, Buffer.from(\"none\"));\n writeOpenSSHKeyString(writer, Buffer.from(\"none\"));\n writeOpenSSHKeyString(writer, Buffer.from(\"\"));\n\n writer.off = writer.buf.writeUInt32BE(1, writer.off);\n writer.off = writer.buf.writeUInt32BE(pubkeyLength, writer.off);\n\n writeOpenSSHKeyString(writer, Buffer.from(\"ssh-rsa\"));\n writeOpenSSHKeyString(writer, ebuf);\n writeOpenSSHKeyString(writer, nbuf);\n\n writer.off = writer.buf.writeUInt32BE(\n length - 47 - pubkeyLength,\n writer.off\n );\n writer.off += 8;\n\n writeOpenSSHKeyString(writer, Buffer.from(\"ssh-rsa\"));\n writeOpenSSHKeyString(writer, nbuf);\n writeOpenSSHKeyString(writer, ebuf);\n writeOpenSSHKeyString(writer, dbuf);\n writeOpenSSHKeyString(writer, coeffbuf);\n writeOpenSSHKeyString(writer, pbuf);\n writeOpenSSHKeyString(writer, qbuf);\n writeOpenSSHKeyString(writer, commentbuf);\n\n let pad = 0x01;\n while (writer.off < length) {\n writer.off = writer.buf.writeUInt8(pad++, writer.off);\n }\n\n if (options.type === \"der\") {\n return writer.buf\n } else {\n return PRIVATE_OPENING_BOUNDARY + \"\\n\" + utils.linebrk(buf.toString(\"base64\"), 70) + \"\\n\" + PRIVATE_CLOSING_BOUNDARY + \"\\n\";\n }\n },\n\n privateImport: function (key, data, options) {\n options = options || {};\n var buffer;\n\n if (options.type !== \"der\") {\n if (Buffer.isBuffer(data)) {\n data = data.toString(\"utf8\");\n }\n\n if (_.isString(data)) {\n var pem = utils.trimSurroundingText(data, PRIVATE_OPENING_BOUNDARY, PRIVATE_CLOSING_BOUNDARY)\n .replace(/\\s+|\\n\\r|\\n|\\r$/gm, \"\");\n buffer = Buffer.from(pem, \"base64\");\n } else {\n throw Error(\"Unsupported key format\");\n }\n } else if (Buffer.isBuffer(data)) {\n buffer = data;\n } else {\n throw Error(\"Unsupported key format\");\n }\n\n const reader = {buf: buffer, off: 0};\n\n if (buffer.slice(0, 14).toString(\"ascii\") !== \"openssh-key-v1\")\n throw \"Invalid file format.\";\n\n reader.off += 15;\n\n //ciphername\n if (readOpenSSHKeyString(reader).toString(\"ascii\") !== \"none\")\n throw Error(\"Unsupported key type\");\n //kdfname\n if (readOpenSSHKeyString(reader).toString(\"ascii\") !== \"none\")\n throw Error(\"Unsupported key type\");\n //kdf\n if (readOpenSSHKeyString(reader).toString(\"ascii\") !== \"\")\n throw Error(\"Unsupported key type\");\n //keynum\n reader.off += 4;\n\n //sshpublength\n reader.off += 4;\n\n //keytype\n if (readOpenSSHKeyString(reader).toString(\"ascii\") !== \"ssh-rsa\")\n throw Error(\"Unsupported key type\");\n readOpenSSHKeyString(reader);\n readOpenSSHKeyString(reader);\n\n reader.off += 12;\n if (readOpenSSHKeyString(reader).toString(\"ascii\") !== \"ssh-rsa\")\n throw Error(\"Unsupported key type\");\n\n const n = readOpenSSHKeyString(reader);\n const e = readOpenSSHKeyString(reader);\n const d = readOpenSSHKeyString(reader);\n const coeff = readOpenSSHKeyString(reader);\n const p = readOpenSSHKeyString(reader);\n const q = readOpenSSHKeyString(reader);\n\n //Calculate missing values\n const dint = new BigInteger(d);\n const qint = new BigInteger(q);\n const pint = new BigInteger(p);\n const dp = dint.mod(pint.subtract(BigInteger.ONE));\n const dq = dint.mod(qint.subtract(BigInteger.ONE));\n\n key.setPrivate(\n n, // modulus\n e, // publicExponent\n d, // privateExponent\n p, // prime1\n q, // prime2\n dp.toBuffer(), // exponent1 -- d mod (p1)\n dq.toBuffer(), // exponent2 -- d mod (q-1)\n coeff // coefficient -- (inverse of q) mod p\n );\n\n key.sshcomment = readOpenSSHKeyString(reader).toString(\"ascii\");\n },\n\n publicExport: function (key, options) {\n let ebuf = Buffer.alloc(4)\n ebuf.writeUInt32BE(key.e, 0);\n //Slice leading zeroes\n while (ebuf[0] === 0) ebuf = ebuf.slice(1);\n const nbuf = key.n.toBuffer();\n const buf = Buffer.alloc(\n ebuf.byteLength + 4 +\n nbuf.byteLength + 4 +\n \"ssh-rsa\".length + 4\n );\n\n const writer = {buf: buf, off: 0};\n writeOpenSSHKeyString(writer, Buffer.from(\"ssh-rsa\"));\n writeOpenSSHKeyString(writer, ebuf);\n writeOpenSSHKeyString(writer, nbuf);\n\n let comment = key.sshcomment || \"\";\n\n if (options.type === \"der\") {\n return writer.buf\n } else {\n return \"ssh-rsa \" + buf.toString(\"base64\") + \" \" + comment + \"\\n\";\n }\n },\n\n publicImport: function (key, data, options) {\n options = options || {};\n var buffer;\n\n if (options.type !== \"der\") {\n if (Buffer.isBuffer(data)) {\n data = data.toString(\"utf8\");\n }\n\n if (_.isString(data)) {\n if (data.substring(0, 8) !== \"ssh-rsa \")\n throw Error(\"Unsupported key format\");\n let pemEnd = data.indexOf(\" \", 8);\n\n //Handle keys with no comment\n if (pemEnd === -1) {\n pemEnd = data.length;\n } else {\n key.sshcomment = data.substring(pemEnd + 1)\n .replace(/\\s+|\\n\\r|\\n|\\r$/gm, \"\");\n }\n\n const pem = data.substring(8, pemEnd)\n .replace(/\\s+|\\n\\r|\\n|\\r$/gm, \"\");\n buffer = Buffer.from(pem, \"base64\");\n } else {\n throw Error(\"Unsupported key format\");\n }\n } else if (Buffer.isBuffer(data)) {\n buffer = data;\n } else {\n throw Error(\"Unsupported key format\");\n }\n\n const reader = {buf: buffer, off: 0};\n\n const type = readOpenSSHKeyString(reader).toString(\"ascii\");\n\n if (type !== \"ssh-rsa\")\n throw Error(\"Invalid key type: \" + type);\n\n const e = readOpenSSHKeyString(reader);\n const n = readOpenSSHKeyString(reader);\n\n key.setPublic(\n n,\n e\n );\n },\n\n /**\n * Trying autodetect and import key\n * @param key\n * @param data\n */\n autoImport: function (key, data) {\n // [\\S\\s]* matches zero or more of any character\n if (/^[\\S\\s]*-----BEGIN OPENSSH PRIVATE KEY-----\\s*(?=(([A-Za-z0-9+/=]+\\s*)+))\\1-----END OPENSSH PRIVATE KEY-----[\\S\\s]*$/g.test(data)) {\n module.exports.privateImport(key, data);\n return true;\n }\n\n if (/^[\\S\\s]*ssh-rsa \\s*(?=(([A-Za-z0-9+/=]+\\s*)+))\\1[\\S\\s]*$/g.test(data)) {\n module.exports.publicImport(key, data);\n return true;\n }\n\n return false;\n }\n};\n\nfunction readOpenSSHKeyString(reader) {\n const len = reader.buf.readInt32BE(reader.off);\n reader.off += 4;\n const res = reader.buf.slice(reader.off, reader.off + len);\n reader.off += len;\n return res;\n}\n\nfunction writeOpenSSHKeyString(writer, data) {\n writer.buf.writeInt32BE(data.byteLength, writer.off);\n writer.off += 4;\n writer.off += data.copy(writer.buf, writer.off);\n}","var ber = require('asn1').Ber;\nvar _ = require('../utils')._;\nvar utils = require('../utils');\n\nconst PRIVATE_OPENING_BOUNDARY = '-----BEGIN RSA PRIVATE KEY-----';\nconst PRIVATE_CLOSING_BOUNDARY = '-----END RSA PRIVATE KEY-----';\n\nconst PUBLIC_OPENING_BOUNDARY = '-----BEGIN RSA PUBLIC KEY-----';\nconst PUBLIC_CLOSING_BOUNDARY = '-----END RSA PUBLIC KEY-----';\n\nmodule.exports = {\n privateExport: function (key, options) {\n options = options || {};\n\n var n = key.n.toBuffer();\n var d = key.d.toBuffer();\n var p = key.p.toBuffer();\n var q = key.q.toBuffer();\n var dmp1 = key.dmp1.toBuffer();\n var dmq1 = key.dmq1.toBuffer();\n var coeff = key.coeff.toBuffer();\n\n var length = n.length + d.length + p.length + q.length + dmp1.length + dmq1.length + coeff.length + 512; // magic\n var writer = new ber.Writer({size: length});\n\n writer.startSequence();\n writer.writeInt(0);\n writer.writeBuffer(n, 2);\n writer.writeInt(key.e);\n writer.writeBuffer(d, 2);\n writer.writeBuffer(p, 2);\n writer.writeBuffer(q, 2);\n writer.writeBuffer(dmp1, 2);\n writer.writeBuffer(dmq1, 2);\n writer.writeBuffer(coeff, 2);\n writer.endSequence();\n\n if (options.type === 'der') {\n return writer.buffer;\n } else {\n return PRIVATE_OPENING_BOUNDARY + '\\n' + utils.linebrk(writer.buffer.toString('base64'), 64) + '\\n' + PRIVATE_CLOSING_BOUNDARY;\n }\n },\n\n privateImport: function (key, data, options) {\n options = options || {};\n var buffer;\n\n if (options.type !== 'der') {\n if (Buffer.isBuffer(data)) {\n data = data.toString('utf8');\n }\n\n if (_.isString(data)) {\n var pem = utils.trimSurroundingText(data, PRIVATE_OPENING_BOUNDARY, PRIVATE_CLOSING_BOUNDARY)\n .replace(/\\s+|\\n\\r|\\n|\\r$/gm, '');\n buffer = Buffer.from(pem, 'base64');\n } else {\n throw Error('Unsupported key format');\n }\n } else if (Buffer.isBuffer(data)) {\n buffer = data;\n } else {\n throw Error('Unsupported key format');\n }\n\n var reader = new ber.Reader(buffer);\n reader.readSequence();\n reader.readString(2, true); // just zero\n key.setPrivate(\n reader.readString(2, true), // modulus\n reader.readString(2, true), // publicExponent\n reader.readString(2, true), // privateExponent\n reader.readString(2, true), // prime1\n reader.readString(2, true), // prime2\n reader.readString(2, true), // exponent1 -- d mod (p1)\n reader.readString(2, true), // exponent2 -- d mod (q-1)\n reader.readString(2, true) // coefficient -- (inverse of q) mod p\n );\n },\n\n publicExport: function (key, options) {\n options = options || {};\n\n var n = key.n.toBuffer();\n var length = n.length + 512; // magic\n\n var bodyWriter = new ber.Writer({size: length});\n bodyWriter.startSequence();\n bodyWriter.writeBuffer(n, 2);\n bodyWriter.writeInt(key.e);\n bodyWriter.endSequence();\n\n if (options.type === 'der') {\n return bodyWriter.buffer;\n } else {\n return PUBLIC_OPENING_BOUNDARY + '\\n' + utils.linebrk(bodyWriter.buffer.toString('base64'), 64) + '\\n' + PUBLIC_CLOSING_BOUNDARY;\n }\n },\n\n publicImport: function (key, data, options) {\n options = options || {};\n var buffer;\n\n if (options.type !== 'der') {\n if (Buffer.isBuffer(data)) {\n data = data.toString('utf8');\n }\n\n if (_.isString(data)) {\n var pem = utils.trimSurroundingText(data, PUBLIC_OPENING_BOUNDARY, PUBLIC_CLOSING_BOUNDARY)\n .replace(/\\s+|\\n\\r|\\n|\\r$/gm, '');\n buffer = Buffer.from(pem, 'base64');\n }\n } else if (Buffer.isBuffer(data)) {\n buffer = data;\n } else {\n throw Error('Unsupported key format');\n }\n\n var body = new ber.Reader(buffer);\n body.readSequence();\n key.setPublic(\n body.readString(0x02, true), // modulus\n body.readString(0x02, true) // publicExponent\n );\n },\n\n /**\n * Trying autodetect and import key\n * @param key\n * @param data\n */\n autoImport: function (key, data) {\n // [\\S\\s]* matches zero or more of any character\n if (/^[\\S\\s]*-----BEGIN RSA PRIVATE KEY-----\\s*(?=(([A-Za-z0-9+/=]+\\s*)+))\\1-----END RSA PRIVATE KEY-----[\\S\\s]*$/g.test(data)) {\n module.exports.privateImport(key, data);\n return true;\n }\n\n if (/^[\\S\\s]*-----BEGIN RSA PUBLIC KEY-----\\s*(?=(([A-Za-z0-9+/=]+\\s*)+))\\1-----END RSA PUBLIC KEY-----[\\S\\s]*$/g.test(data)) {\n module.exports.publicImport(key, data);\n return true;\n }\n\n return false;\n }\n};","var ber = require('asn1').Ber;\nvar _ = require('../utils')._;\nvar PUBLIC_RSA_OID = '1.2.840.113549.1.1.1';\nvar utils = require('../utils');\n\nconst PRIVATE_OPENING_BOUNDARY = '-----BEGIN PRIVATE KEY-----';\nconst PRIVATE_CLOSING_BOUNDARY = '-----END PRIVATE KEY-----';\n\nconst PUBLIC_OPENING_BOUNDARY = '-----BEGIN PUBLIC KEY-----';\nconst PUBLIC_CLOSING_BOUNDARY = '-----END PUBLIC KEY-----';\n\nmodule.exports = {\n privateExport: function (key, options) {\n options = options || {};\n\n var n = key.n.toBuffer();\n var d = key.d.toBuffer();\n var p = key.p.toBuffer();\n var q = key.q.toBuffer();\n var dmp1 = key.dmp1.toBuffer();\n var dmq1 = key.dmq1.toBuffer();\n var coeff = key.coeff.toBuffer();\n\n var length = n.length + d.length + p.length + q.length + dmp1.length + dmq1.length + coeff.length + 512; // magic\n var bodyWriter = new ber.Writer({size: length});\n\n bodyWriter.startSequence();\n bodyWriter.writeInt(0);\n bodyWriter.writeBuffer(n, 2);\n bodyWriter.writeInt(key.e);\n bodyWriter.writeBuffer(d, 2);\n bodyWriter.writeBuffer(p, 2);\n bodyWriter.writeBuffer(q, 2);\n bodyWriter.writeBuffer(dmp1, 2);\n bodyWriter.writeBuffer(dmq1, 2);\n bodyWriter.writeBuffer(coeff, 2);\n bodyWriter.endSequence();\n\n var writer = new ber.Writer({size: length});\n writer.startSequence();\n writer.writeInt(0);\n writer.startSequence();\n writer.writeOID(PUBLIC_RSA_OID);\n writer.writeNull();\n writer.endSequence();\n writer.writeBuffer(bodyWriter.buffer, 4);\n writer.endSequence();\n\n if (options.type === 'der') {\n return writer.buffer;\n } else {\n return PRIVATE_OPENING_BOUNDARY + '\\n' + utils.linebrk(writer.buffer.toString('base64'), 64) + '\\n' + PRIVATE_CLOSING_BOUNDARY;\n }\n },\n\n privateImport: function (key, data, options) {\n options = options || {};\n var buffer;\n\n if (options.type !== 'der') {\n if (Buffer.isBuffer(data)) {\n data = data.toString('utf8');\n }\n\n if (_.isString(data)) {\n var pem = utils.trimSurroundingText(data, PRIVATE_OPENING_BOUNDARY, PRIVATE_CLOSING_BOUNDARY)\n .replace('-----END PRIVATE KEY-----', '')\n .replace(/\\s+|\\n\\r|\\n|\\r$/gm, '');\n buffer = Buffer.from(pem, 'base64');\n } else {\n throw Error('Unsupported key format');\n }\n } else if (Buffer.isBuffer(data)) {\n buffer = data;\n } else {\n throw Error('Unsupported key format');\n }\n\n var reader = new ber.Reader(buffer);\n reader.readSequence();\n reader.readInt(0);\n var header = new ber.Reader(reader.readString(0x30, true));\n\n if (header.readOID(0x06, true) !== PUBLIC_RSA_OID) {\n throw Error('Invalid Public key format');\n }\n\n var body = new ber.Reader(reader.readString(0x04, true));\n body.readSequence();\n body.readString(2, true); // just zero\n key.setPrivate(\n body.readString(2, true), // modulus\n body.readString(2, true), // publicExponent\n body.readString(2, true), // privateExponent\n body.readString(2, true), // prime1\n body.readString(2, true), // prime2\n body.readString(2, true), // exponent1 -- d mod (p1)\n body.readString(2, true), // exponent2 -- d mod (q-1)\n body.readString(2, true) // coefficient -- (inverse of q) mod p\n );\n },\n\n publicExport: function (key, options) {\n options = options || {};\n\n var n = key.n.toBuffer();\n var length = n.length + 512; // magic\n\n var bodyWriter = new ber.Writer({size: length});\n bodyWriter.writeByte(0);\n bodyWriter.startSequence();\n bodyWriter.writeBuffer(n, 2);\n bodyWriter.writeInt(key.e);\n bodyWriter.endSequence();\n\n var writer = new ber.Writer({size: length});\n writer.startSequence();\n writer.startSequence();\n writer.writeOID(PUBLIC_RSA_OID);\n writer.writeNull();\n writer.endSequence();\n writer.writeBuffer(bodyWriter.buffer, 3);\n writer.endSequence();\n\n if (options.type === 'der') {\n return writer.buffer;\n } else {\n return PUBLIC_OPENING_BOUNDARY + '\\n' + utils.linebrk(writer.buffer.toString('base64'), 64) + '\\n' + PUBLIC_CLOSING_BOUNDARY;\n }\n },\n\n publicImport: function (key, data, options) {\n options = options || {};\n var buffer;\n\n if (options.type !== 'der') {\n if (Buffer.isBuffer(data)) {\n data = data.toString('utf8');\n }\n\n if (_.isString(data)) {\n var pem = utils.trimSurroundingText(data, PUBLIC_OPENING_BOUNDARY, PUBLIC_CLOSING_BOUNDARY)\n .replace(/\\s+|\\n\\r|\\n|\\r$/gm, '');\n buffer = Buffer.from(pem, 'base64');\n }\n } else if (Buffer.isBuffer(data)) {\n buffer = data;\n } else {\n throw Error('Unsupported key format');\n }\n\n var reader = new ber.Reader(buffer);\n reader.readSequence();\n var header = new ber.Reader(reader.readString(0x30, true));\n\n if (header.readOID(0x06, true) !== PUBLIC_RSA_OID) {\n throw Error('Invalid Public key format');\n }\n\n var body = new ber.Reader(reader.readString(0x03, true));\n body.readByte();\n body.readSequence();\n key.setPublic(\n body.readString(0x02, true), // modulus\n body.readString(0x02, true) // publicExponent\n );\n },\n\n /**\n * Trying autodetect and import key\n * @param key\n * @param data\n */\n autoImport: function (key, data) {\n if (/^[\\S\\s]*-----BEGIN PRIVATE KEY-----\\s*(?=(([A-Za-z0-9+/=]+\\s*)+))\\1-----END PRIVATE KEY-----[\\S\\s]*$/g.test(data)) {\n module.exports.privateImport(key, data);\n return true;\n }\n\n if (/^[\\S\\s]*-----BEGIN PUBLIC KEY-----\\s*(?=(([A-Za-z0-9+/=]+\\s*)+))\\1-----END PUBLIC KEY-----[\\S\\s]*$/g.test(data)) {\n module.exports.publicImport(key, data);\n return true;\n }\n\n return false;\n }\n};\n","/*\r\n * Basic JavaScript BN library - subset useful for RSA encryption.\r\n * \r\n * Copyright (c) 2003-2005 Tom Wu\r\n * All Rights Reserved.\r\n *\r\n * Permission is hereby granted, free of charge, to any person obtaining\r\n * a copy of this software and associated documentation files (the\r\n * \"Software\"), to deal in the Software without restriction, including\r\n * without limitation the rights to use, copy, modify, merge, publish,\r\n * distribute, sublicense, and/or sell copies of the Software, and to\r\n * permit persons to whom the Software is furnished to do so, subject to\r\n * the following conditions:\r\n *\r\n * The above copyright notice and this permission notice shall be\r\n * included in all copies or substantial portions of the Software.\r\n *\r\n * THE SOFTWARE IS PROVIDED \"AS-IS\" AND WITHOUT WARRANTY OF ANY KIND, \r\n * EXPRESS, IMPLIED OR OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY \r\n * WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. \r\n *\r\n * IN NO EVENT SHALL TOM WU BE LIABLE FOR ANY SPECIAL, INCIDENTAL,\r\n * INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY KIND, OR ANY DAMAGES WHATSOEVER\r\n * RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER OR NOT ADVISED OF\r\n * THE POSSIBILITY OF DAMAGE, AND ON ANY THEORY OF LIABILITY, ARISING OUT\r\n * OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.\r\n *\r\n * In addition, the following condition applies:\r\n *\r\n * All redistributions must retain an intact copy of this copyright notice\r\n * and disclaimer.\r\n */\r\n\r\n/*\r\n * Added Node.js Buffers support\r\n * 2014 rzcoder\r\n */\r\n\r\nvar crypt = require('crypto');\r\nvar _ = require('../utils')._;\r\n\r\n// Bits per digit\r\nvar dbits;\r\n\r\n// JavaScript engine analysis\r\nvar canary = 0xdeadbeefcafe;\r\nvar j_lm = ((canary & 0xffffff) == 0xefcafe);\r\n\r\n// (public) Constructor\r\nfunction BigInteger(a, b) {\r\n if (a != null) {\r\n if (\"number\" == typeof a) {\r\n this.fromNumber(a, b);\r\n } else if (Buffer.isBuffer(a)) {\r\n this.fromBuffer(a);\r\n } else if (b == null && \"string\" != typeof a) {\r\n this.fromByteArray(a);\r\n } else {\r\n this.fromString(a, b);\r\n }\r\n }\r\n}\r\n\r\n// return new, unset BigInteger\r\nfunction nbi() {\r\n return new BigInteger(null);\r\n}\r\n\r\n// am: Compute w_j += (x*this_i), propagate carries,\r\n// c is initial carry, returns final carry.\r\n// c < 3*dvalue, x < 2*dvalue, this_i < dvalue\r\n// We need to select the fastest one that works in this environment.\r\n\r\n// am1: use a single mult and divide to get the high bits,\r\n// max digit bits should be 26 because\r\n// max internal value = 2*dvalue^2-2*dvalue (< 2^53)\r\nfunction am1(i, x, w, j, c, n) {\r\n while (--n >= 0) {\r\n var v = x * this[i++] + w[j] + c;\r\n c = Math.floor(v / 0x4000000);\r\n w[j++] = v & 0x3ffffff;\r\n }\r\n return c;\r\n}\r\n// am2 avoids a big mult-and-extract completely.\r\n// Max digit bits should be <= 30 because we do bitwise ops\r\n// on values up to 2*hdvalue^2-hdvalue-1 (< 2^31)\r\nfunction am2(i, x, w, j, c, n) {\r\n var xl = x & 0x7fff, xh = x >> 15;\r\n while (--n >= 0) {\r\n var l = this[i] & 0x7fff;\r\n var h = this[i++] >> 15;\r\n var m = xh * l + h * xl;\r\n l = xl * l + ((m & 0x7fff) << 15) + w[j] + (c & 0x3fffffff);\r\n c = (l >>> 30) + (m >>> 15) + xh * h + (c >>> 30);\r\n w[j++] = l & 0x3fffffff;\r\n }\r\n return c;\r\n}\r\n// Alternately, set max digit bits to 28 since some\r\n// browsers slow down when dealing with 32-bit numbers.\r\nfunction am3(i, x, w, j, c, n) {\r\n var xl = x & 0x3fff, xh = x >> 14;\r\n while (--n >= 0) {\r\n var l = this[i] & 0x3fff;\r\n var h = this[i++] >> 14;\r\n var m = xh * l + h * xl;\r\n l = xl * l + ((m & 0x3fff) << 14) + w[j] + c;\r\n c = (l >> 28) + (m >> 14) + xh * h;\r\n w[j++] = l & 0xfffffff;\r\n }\r\n return c;\r\n}\r\n\r\n// We need to select the fastest one that works in this environment. \r\n//if (j_lm && (navigator.appName == \"Microsoft Internet Explorer\")) {\r\n//\tBigInteger.prototype.am = am2;\r\n//\tdbits = 30;\r\n//} else if (j_lm && (navigator.appName != \"Netscape\")) {\r\n//\tBigInteger.prototype.am = am1;\r\n//\tdbits = 26;\r\n//} else { // Mozilla/Netscape seems to prefer am3\r\n//\tBigInteger.prototype.am = am3;\r\n//\tdbits = 28;\r\n//}\r\n\r\n// For node.js, we pick am3 with max dbits to 28.\r\nBigInteger.prototype.am = am3;\r\ndbits = 28;\r\n\r\nBigInteger.prototype.DB = dbits;\r\nBigInteger.prototype.DM = ((1 << dbits) - 1);\r\nBigInteger.prototype.DV = (1 << dbits);\r\n\r\nvar BI_FP = 52;\r\nBigInteger.prototype.FV = Math.pow(2, BI_FP);\r\nBigInteger.prototype.F1 = BI_FP - dbits;\r\nBigInteger.prototype.F2 = 2 * dbits - BI_FP;\r\n\r\n// Digit conversions\r\nvar BI_RM = \"0123456789abcdefghijklmnopqrstuvwxyz\";\r\nvar BI_RC = new Array();\r\nvar rr, vv;\r\nrr = \"0\".charCodeAt(0);\r\nfor (vv = 0; vv <= 9; ++vv) BI_RC[rr++] = vv;\r\nrr = \"a\".charCodeAt(0);\r\nfor (vv = 10; vv < 36; ++vv) BI_RC[rr++] = vv;\r\nrr = \"A\".charCodeAt(0);\r\nfor (vv = 10; vv < 36; ++vv) BI_RC[rr++] = vv;\r\n\r\nfunction int2char(n) {\r\n return BI_RM.charAt(n);\r\n}\r\nfunction intAt(s, i) {\r\n var c = BI_RC[s.charCodeAt(i)];\r\n return (c == null) ? -1 : c;\r\n}\r\n\r\n// (protected) copy this to r\r\nfunction bnpCopyTo(r) {\r\n for (var i = this.t - 1; i >= 0; --i) r[i] = this[i];\r\n r.t = this.t;\r\n r.s = this.s;\r\n}\r\n\r\n// (protected) set from integer value x, -DV <= x < DV\r\nfunction bnpFromInt(x) {\r\n this.t = 1;\r\n this.s = (x < 0) ? -1 : 0;\r\n if (x > 0) this[0] = x;\r\n else if (x < -1) this[0] = x + DV;\r\n else this.t = 0;\r\n}\r\n\r\n// return bigint initialized to value\r\nfunction nbv(i) {\r\n var r = nbi();\r\n r.fromInt(i);\r\n return r;\r\n}\r\n\r\n// (protected) set from string and radix\r\nfunction bnpFromString(data, radix, unsigned) {\r\n var k;\r\n switch (radix) {\r\n case 2:\r\n k = 1;\r\n break;\r\n case 4:\r\n k = 2;\r\n break;\r\n case 8:\r\n k = 3;\r\n break;\r\n case 16:\r\n k = 4;\r\n break;\r\n case 32:\r\n k = 5;\r\n break;\r\n case 256:\r\n k = 8;\r\n break;\r\n default:\r\n this.fromRadix(data, radix);\r\n return;\r\n }\r\n\r\n this.t = 0;\r\n this.s = 0;\r\n\r\n var i = data.length;\r\n var mi = false;\r\n var sh = 0;\r\n\r\n while (--i >= 0) {\r\n var x = (k == 8) ? data[i] & 0xff : intAt(data, i);\r\n if (x < 0) {\r\n if (data.charAt(i) == \"-\") mi = true;\r\n continue;\r\n }\r\n mi = false;\r\n if (sh === 0)\r\n this[this.t++] = x;\r\n else if (sh + k > this.DB) {\r\n this[this.t - 1] |= (x & ((1 << (this.DB - sh)) - 1)) << sh;\r\n this[this.t++] = (x >> (this.DB - sh));\r\n }\r\n else\r\n this[this.t - 1] |= x << sh;\r\n sh += k;\r\n if (sh >= this.DB) sh -= this.DB;\r\n }\r\n if ((!unsigned) && k == 8 && (data[0] & 0x80) != 0) {\r\n this.s = -1;\r\n if (sh > 0) this[this.t - 1] |= ((1 << (this.DB - sh)) - 1) << sh;\r\n }\r\n this.clamp();\r\n if (mi) BigInteger.ZERO.subTo(this, this);\r\n}\r\n\r\nfunction bnpFromByteArray(a, unsigned) {\r\n this.fromString(a, 256, unsigned)\r\n}\r\n\r\nfunction bnpFromBuffer(a) {\r\n this.fromString(a, 256, true)\r\n}\r\n\r\n// (protected) clamp off excess high words\r\nfunction bnpClamp() {\r\n var c = this.s & this.DM;\r\n while (this.t > 0 && this[this.t - 1] == c) --this.t;\r\n}\r\n\r\n// (public) return string representation in given radix\r\nfunction bnToString(b) {\r\n if (this.s < 0) return \"-\" + this.negate().toString(b);\r\n var k;\r\n if (b == 16) k = 4;\r\n else if (b == 8) k = 3;\r\n else if (b == 2) k = 1;\r\n else if (b == 32) k = 5;\r\n else if (b == 4) k = 2;\r\n else return this.toRadix(b);\r\n var km = (1 << k) - 1, d, m = false, r = \"\", i = this.t;\r\n var p = this.DB - (i * this.DB) % k;\r\n if (i-- > 0) {\r\n if (p < this.DB && (d = this[i] >> p) > 0) {\r\n m = true;\r\n r = int2char(d);\r\n }\r\n while (i >= 0) {\r\n if (p < k) {\r\n d = (this[i] & ((1 << p) - 1)) << (k - p);\r\n d |= this[--i] >> (p += this.DB - k);\r\n }\r\n else {\r\n d = (this[i] >> (p -= k)) & km;\r\n if (p <= 0) {\r\n p += this.DB;\r\n --i;\r\n }\r\n }\r\n if (d > 0) m = true;\r\n if (m) r += int2char(d);\r\n }\r\n }\r\n return m ? r : \"0\";\r\n}\r\n\r\n// (public) -this\r\nfunction bnNegate() {\r\n var r = nbi();\r\n BigInteger.ZERO.subTo(this, r);\r\n return r;\r\n}\r\n\r\n// (public) |this|\r\nfunction bnAbs() {\r\n return (this.s < 0) ? this.negate() : this;\r\n}\r\n\r\n// (public) return + if this > a, - if this < a, 0 if equal\r\nfunction bnCompareTo(a) {\r\n var r = this.s - a.s;\r\n if (r != 0) return r;\r\n var i = this.t;\r\n r = i - a.t;\r\n if (r != 0) return (this.s < 0) ? -r : r;\r\n while (--i >= 0) if ((r = this[i] - a[i]) != 0) return r;\r\n return 0;\r\n}\r\n\r\n// returns bit length of the integer x\r\nfunction nbits(x) {\r\n var r = 1, t;\r\n if ((t = x >>> 16) != 0) {\r\n x = t;\r\n r += 16;\r\n }\r\n if ((t = x >> 8) != 0) {\r\n x = t;\r\n r += 8;\r\n }\r\n if ((t = x >> 4) != 0) {\r\n x = t;\r\n r += 4;\r\n }\r\n if ((t = x >> 2) != 0) {\r\n x = t;\r\n r += 2;\r\n }\r\n if ((t = x >> 1) != 0) {\r\n x = t;\r\n r += 1;\r\n }\r\n return r;\r\n}\r\n\r\n// (public) return the number of bits in \"this\"\r\nfunction bnBitLength() {\r\n if (this.t <= 0) return 0;\r\n return this.DB * (this.t - 1) + nbits(this[this.t - 1] ^ (this.s & this.DM));\r\n}\r\n\r\n// (protected) r = this << n*DB\r\nfunction bnpDLShiftTo(n, r) {\r\n var i;\r\n for (i = this.t - 1; i >= 0; --i) r[i + n] = this[i];\r\n for (i = n - 1; i >= 0; --i) r[i] = 0;\r\n r.t = this.t + n;\r\n r.s = this.s;\r\n}\r\n\r\n// (protected) r = this >> n*DB\r\nfunction bnpDRShiftTo(n, r) {\r\n for (var i = n; i < this.t; ++i) r[i - n] = this[i];\r\n r.t = Math.max(this.t - n, 0);\r\n r.s = this.s;\r\n}\r\n\r\n// (protected) r = this << n\r\nfunction bnpLShiftTo(n, r) {\r\n var bs = n % this.DB;\r\n var cbs = this.DB - bs;\r\n var bm = (1 << cbs) - 1;\r\n var ds = Math.floor(n / this.DB), c = (this.s << bs) & this.DM, i;\r\n for (i = this.t - 1; i >= 0; --i) {\r\n r[i + ds + 1] = (this[i] >> cbs) | c;\r\n c = (this[i] & bm) << bs;\r\n }\r\n for (i = ds - 1; i >= 0; --i) r[i] = 0;\r\n r[ds] = c;\r\n r.t = this.t + ds + 1;\r\n r.s = this.s;\r\n r.clamp();\r\n}\r\n\r\n// (protected) r = this >> n\r\nfunction bnpRShiftTo(n, r) {\r\n r.s = this.s;\r\n var ds = Math.floor(n / this.DB);\r\n if (ds >= this.t) {\r\n r.t = 0;\r\n return;\r\n }\r\n var bs = n % this.DB;\r\n var cbs = this.DB - bs;\r\n var bm = (1 << bs) - 1;\r\n r[0] = this[ds] >> bs;\r\n for (var i = ds + 1; i < this.t; ++i) {\r\n r[i - ds - 1] |= (this[i] & bm) << cbs;\r\n r[i - ds] = this[i] >> bs;\r\n }\r\n if (bs > 0) r[this.t - ds - 1] |= (this.s & bm) << cbs;\r\n r.t = this.t - ds;\r\n r.clamp();\r\n}\r\n\r\n// (protected) r = this - a\r\nfunction bnpSubTo(a, r) {\r\n var i = 0, c = 0, m = Math.min(a.t, this.t);\r\n while (i < m) {\r\n c += this[i] - a[i];\r\n r[i++] = c & this.DM;\r\n c >>= this.DB;\r\n }\r\n if (a.t < this.t) {\r\n c -= a.s;\r\n while (i < this.t) {\r\n c += this[i];\r\n r[i++] = c & this.DM;\r\n c >>= this.DB;\r\n }\r\n c += this.s;\r\n }\r\n else {\r\n c += this.s;\r\n while (i < a.t) {\r\n c -= a[i];\r\n r[i++] = c & this.DM;\r\n c >>= this.DB;\r\n }\r\n c -= a.s;\r\n }\r\n r.s = (c < 0) ? -1 : 0;\r\n if (c < -1) r[i++] = this.DV + c;\r\n else if (c > 0) r[i++] = c;\r\n r.t = i;\r\n r.clamp();\r\n}\r\n\r\n// (protected) r = this * a, r != this,a (HAC 14.12)\r\n// \"this\" should be the larger one if appropriate.\r\nfunction bnpMultiplyTo(a, r) {\r\n var x = this.abs(), y = a.abs();\r\n var i = x.t;\r\n r.t = i + y.t;\r\n while (--i >= 0) r[i] = 0;\r\n for (i = 0; i < y.t; ++i) r[i + x.t] = x.am(0, y[i], r, i, 0, x.t);\r\n r.s = 0;\r\n r.clamp();\r\n if (this.s != a.s) BigInteger.ZERO.subTo(r, r);\r\n}\r\n\r\n// (protected) r = this^2, r != this (HAC 14.16)\r\nfunction bnpSquareTo(r) {\r\n var x = this.abs();\r\n var i = r.t = 2 * x.t;\r\n while (--i >= 0) r[i] = 0;\r\n for (i = 0; i < x.t - 1; ++i) {\r\n var c = x.am(i, x[i], r, 2 * i, 0, 1);\r\n if ((r[i + x.t] += x.am(i + 1, 2 * x[i], r, 2 * i + 1, c, x.t - i - 1)) >= x.DV) {\r\n r[i + x.t] -= x.DV;\r\n r[i + x.t + 1] = 1;\r\n }\r\n }\r\n if (r.t > 0) r[r.t - 1] += x.am(i, x[i], r, 2 * i, 0, 1);\r\n r.s = 0;\r\n r.clamp();\r\n}\r\n\r\n// (protected) divide this by m, quotient and remainder to q, r (HAC 14.20)\r\n// r != q, this != m. q or r may be null.\r\nfunction bnpDivRemTo(m, q, r) {\r\n var pm = m.abs();\r\n if (pm.t <= 0) return;\r\n var pt = this.abs();\r\n if (pt.t < pm.t) {\r\n if (q != null) q.fromInt(0);\r\n if (r != null) this.copyTo(r);\r\n return;\r\n }\r\n if (r == null) r = nbi();\r\n var y = nbi(), ts = this.s, ms = m.s;\r\n var nsh = this.DB - nbits(pm[pm.t - 1]);\t// normalize modulus\r\n if (nsh > 0) {\r\n pm.lShiftTo(nsh, y);\r\n pt.lShiftTo(nsh, r);\r\n }\r\n else {\r\n pm.copyTo(y);\r\n pt.copyTo(r);\r\n }\r\n var ys = y.t;\r\n var y0 = y[ys - 1];\r\n if (y0 === 0) return;\r\n var yt = y0 * (1 << this.F1) + ((ys > 1) ? y[ys - 2] >> this.F2 : 0);\r\n var d1 = this.FV / yt, d2 = (1 << this.F1) / yt, e = 1 << this.F2;\r\n var i = r.t, j = i - ys, t = (q == null) ? nbi() : q;\r\n y.dlShiftTo(j, t);\r\n if (r.compareTo(t) >= 0) {\r\n r[r.t++] = 1;\r\n r.subTo(t, r);\r\n }\r\n BigInteger.ONE.dlShiftTo(ys, t);\r\n t.subTo(y, y);\t// \"negative\" y so we can replace sub with am later\r\n while (y.t < ys) y[y.t++] = 0;\r\n while (--j >= 0) {\r\n // Estimate quotient digit\r\n var qd = (r[--i] == y0) ? this.DM : Math.floor(r[i] * d1 + (r[i - 1] + e) * d2);\r\n if ((r[i] += y.am(0, qd, r, j, 0, ys)) < qd) {\t// Try it out\r\n y.dlShiftTo(j, t);\r\n r.subTo(t, r);\r\n while (r[i] < --qd) r.subTo(t, r);\r\n }\r\n }\r\n if (q != null) {\r\n r.drShiftTo(ys, q);\r\n if (ts != ms) BigInteger.ZERO.subTo(q, q);\r\n }\r\n r.t = ys;\r\n r.clamp();\r\n if (nsh > 0) r.rShiftTo(nsh, r);\t// Denormalize remainder\r\n if (ts < 0) BigInteger.ZERO.subTo(r, r);\r\n}\r\n\r\n// (public) this mod a\r\nfunction bnMod(a) {\r\n var r = nbi();\r\n this.abs().divRemTo(a, null, r);\r\n if (this.s < 0 && r.compareTo(BigInteger.ZERO) > 0) a.subTo(r, r);\r\n return r;\r\n}\r\n\r\n// Modular reduction using \"classic\" algorithm\r\nfunction Classic(m) {\r\n this.m = m;\r\n}\r\nfunction cConvert(x) {\r\n if (x.s < 0 || x.compareTo(this.m) >= 0) return x.mod(this.m);\r\n else return x;\r\n}\r\nfunction cRevert(x) {\r\n return x;\r\n}\r\nfunction cReduce(x) {\r\n x.divRemTo(this.m, null, x);\r\n}\r\nfunction cMulTo(x, y, r) {\r\n x.multiplyTo(y, r);\r\n this.reduce(r);\r\n}\r\nfunction cSqrTo(x, r) {\r\n x.squareTo(r);\r\n this.reduce(r);\r\n}\r\n\r\nClassic.prototype.convert = cConvert;\r\nClassic.prototype.revert = cRevert;\r\nClassic.prototype.reduce = cReduce;\r\nClassic.prototype.mulTo = cMulTo;\r\nClassic.prototype.sqrTo = cSqrTo;\r\n\r\n// (protected) return \"-1/this % 2^DB\"; useful for Mont. reduction\r\n// justification:\r\n// xy == 1 (mod m)\r\n// xy = 1+km\r\n// xy(2-xy) = (1+km)(1-km)\r\n// x[y(2-xy)] = 1-k^2m^2\r\n// x[y(2-xy)] == 1 (mod m^2)\r\n// if y is 1/x mod m, then y(2-xy) is 1/x mod m^2\r\n// should reduce x and y(2-xy) by m^2 at each step to keep size bounded.\r\n// JS multiply \"overflows\" differently from C/C++, so care is needed here.\r\nfunction bnpInvDigit() {\r\n if (this.t < 1) return 0;\r\n var x = this[0];\r\n if ((x & 1) === 0) return 0;\r\n var y = x & 3;\t\t// y == 1/x mod 2^2\r\n y = (y * (2 - (x & 0xf) * y)) & 0xf;\t// y == 1/x mod 2^4\r\n y = (y * (2 - (x & 0xff) * y)) & 0xff;\t// y == 1/x mod 2^8\r\n y = (y * (2 - (((x & 0xffff) * y) & 0xffff))) & 0xffff;\t// y == 1/x mod 2^16\r\n // last step - calculate inverse mod DV directly;\r\n // assumes 16 < DB <= 32 and assumes ability to handle 48-bit ints\r\n y = (y * (2 - x * y % this.DV)) % this.DV;\t\t// y == 1/x mod 2^dbits\r\n // we really want the negative inverse, and -DV < y < DV\r\n return (y > 0) ? this.DV - y : -y;\r\n}\r\n\r\n// Montgomery reduction\r\nfunction Montgomery(m) {\r\n this.m = m;\r\n this.mp = m.invDigit();\r\n this.mpl = this.mp & 0x7fff;\r\n this.mph = this.mp >> 15;\r\n this.um = (1 << (m.DB - 15)) - 1;\r\n this.mt2 = 2 * m.t;\r\n}\r\n\r\n// xR mod m\r\nfunction montConvert(x) {\r\n var r = nbi();\r\n x.abs().dlShiftTo(this.m.t, r);\r\n r.divRemTo(this.m, null, r);\r\n if (x.s < 0 && r.compareTo(BigInteger.ZERO) > 0) this.m.subTo(r, r);\r\n return r;\r\n}\r\n\r\n// x/R mod m\r\nfunction montRevert(x) {\r\n var r = nbi();\r\n x.copyTo(r);\r\n this.reduce(r);\r\n return r;\r\n}\r\n\r\n// x = x/R mod m (HAC 14.32)\r\nfunction montReduce(x) {\r\n while (x.t <= this.mt2)\t// pad x so am has enough room later\r\n x[x.t++] = 0;\r\n for (var i = 0; i < this.m.t; ++i) {\r\n // faster way of calculating u0 = x[i]*mp mod DV\r\n var j = x[i] & 0x7fff;\r\n var u0 = (j * this.mpl + (((j * this.mph + (x[i] >> 15) * this.mpl) & this.um) << 15)) & x.DM;\r\n // use am to combine the multiply-shift-add into one call\r\n j = i + this.m.t;\r\n x[j] += this.m.am(0, u0, x, i, 0, this.m.t);\r\n // propagate carry\r\n while (x[j] >= x.DV) {\r\n x[j] -= x.DV;\r\n x[++j]++;\r\n }\r\n }\r\n x.clamp();\r\n x.drShiftTo(this.m.t, x);\r\n if (x.compareTo(this.m) >= 0) x.subTo(this.m, x);\r\n}\r\n\r\n// r = \"x^2/R mod m\"; x != r\r\nfunction montSqrTo(x, r) {\r\n x.squareTo(r);\r\n this.reduce(r);\r\n}\r\n\r\n// r = \"xy/R mod m\"; x,y != r\r\nfunction montMulTo(x, y, r) {\r\n x.multiplyTo(y, r);\r\n this.reduce(r);\r\n}\r\n\r\nMontgomery.prototype.convert = montConvert;\r\nMontgomery.prototype.revert = montRevert;\r\nMontgomery.prototype.reduce = montReduce;\r\nMontgomery.prototype.mulTo = montMulTo;\r\nMontgomery.prototype.sqrTo = montSqrTo;\r\n\r\n// (protected) true iff this is even\r\nfunction bnpIsEven() {\r\n return ((this.t > 0) ? (this[0] & 1) : this.s) === 0;\r\n}\r\n\r\n// (protected) this^e, e < 2^32, doing sqr and mul with \"r\" (HAC 14.79)\r\nfunction bnpExp(e, z) {\r\n if (e > 0xffffffff || e < 1) return BigInteger.ONE;\r\n var r = nbi(), r2 = nbi(), g = z.convert(this), i = nbits(e) - 1;\r\n g.copyTo(r);\r\n while (--i >= 0) {\r\n z.sqrTo(r, r2);\r\n if ((e & (1 << i)) > 0) z.mulTo(r2, g, r);\r\n else {\r\n var t = r;\r\n r = r2;\r\n r2 = t;\r\n }\r\n }\r\n return z.revert(r);\r\n}\r\n\r\n// (public) this^e % m, 0 <= e < 2^32\r\nfunction bnModPowInt(e, m) {\r\n var z;\r\n if (e < 256 || m.isEven()) z = new Classic(m); else z = new Montgomery(m);\r\n return this.exp(e, z);\r\n}\r\n\r\n// Copyright (c) 2005-2009 Tom Wu\r\n// All Rights Reserved.\r\n// See \"LICENSE\" for details.\r\n\r\n// Extended JavaScript BN functions, required for RSA private ops.\r\n\r\n// Version 1.1: new BigInteger(\"0\", 10) returns \"proper\" zero\r\n// Version 1.2: square() API, isProbablePrime fix\r\n\r\n//(public)\r\nfunction bnClone() {\r\n var r = nbi();\r\n this.copyTo(r);\r\n return r;\r\n}\r\n\r\n//(public) return value as integer\r\nfunction bnIntValue() {\r\n if (this.s < 0) {\r\n if (this.t == 1) return this[0] - this.DV;\r\n else if (this.t === 0) return -1;\r\n }\r\n else if (this.t == 1) return this[0];\r\n else if (this.t === 0) return 0;\r\n// assumes 16 < DB < 32\r\n return ((this[1] & ((1 << (32 - this.DB)) - 1)) << this.DB) | this[0];\r\n}\r\n\r\n//(public) return value as byte\r\nfunction bnByteValue() {\r\n return (this.t == 0) ? this.s : (this[0] << 24) >> 24;\r\n}\r\n\r\n//(public) return value as short (assumes DB>=16)\r\nfunction bnShortValue() {\r\n return (this.t == 0) ? this.s : (this[0] << 16) >> 16;\r\n}\r\n\r\n//(protected) return x s.t. r^x < DV\r\nfunction bnpChunkSize(r) {\r\n return Math.floor(Math.LN2 * this.DB / Math.log(r));\r\n}\r\n\r\n//(public) 0 if this === 0, 1 if this > 0\r\nfunction bnSigNum() {\r\n if (this.s < 0) return -1;\r\n else if (this.t <= 0 || (this.t == 1 && this[0] <= 0)) return 0;\r\n else return 1;\r\n}\r\n\r\n//(protected) convert to radix string\r\nfunction bnpToRadix(b) {\r\n if (b == null) b = 10;\r\n if (this.signum() === 0 || b < 2 || b > 36) return \"0\";\r\n var cs = this.chunkSize(b);\r\n var a = Math.pow(b, cs);\r\n var d = nbv(a), y = nbi(), z = nbi(), r = \"\";\r\n this.divRemTo(d, y, z);\r\n while (y.signum() > 0) {\r\n r = (a + z.intValue()).toString(b).substr(1) + r;\r\n y.divRemTo(d, y, z);\r\n }\r\n return z.intValue().toString(b) + r;\r\n}\r\n\r\n//(protected) convert from radix string\r\nfunction bnpFromRadix(s, b) {\r\n this.fromInt(0);\r\n if (b == null) b = 10;\r\n var cs = this.chunkSize(b);\r\n var d = Math.pow(b, cs), mi = false, j = 0, w = 0;\r\n for (var i = 0; i < s.length; ++i) {\r\n var x = intAt(s, i);\r\n if (x < 0) {\r\n if (s.charAt(i) == \"-\" && this.signum() === 0) mi = true;\r\n continue;\r\n }\r\n w = b * w + x;\r\n if (++j >= cs) {\r\n this.dMultiply(d);\r\n this.dAddOffset(w, 0);\r\n j = 0;\r\n w = 0;\r\n }\r\n }\r\n if (j > 0) {\r\n this.dMultiply(Math.pow(b, j));\r\n this.dAddOffset(w, 0);\r\n }\r\n if (mi) BigInteger.ZERO.subTo(this, this);\r\n}\r\n\r\n//(protected) alternate constructor\r\nfunction bnpFromNumber(a, b) {\r\n if (\"number\" == typeof b) {\r\n // new BigInteger(int,int,RNG)\r\n if (a < 2) this.fromInt(1);\r\n else {\r\n this.fromNumber(a);\r\n if (!this.testBit(a - 1))\t// force MSB set\r\n this.bitwiseTo(BigInteger.ONE.shiftLeft(a - 1), op_or, this);\r\n if (this.isEven()) this.dAddOffset(1, 0); // force odd\r\n while (!this.isProbablePrime(b)) {\r\n this.dAddOffset(2, 0);\r\n if (this.bitLength() > a) this.subTo(BigInteger.ONE.shiftLeft(a - 1), this);\r\n }\r\n }\r\n } else {\r\n // new BigInteger(int,RNG)\r\n var x = crypt.randomBytes((a >> 3) + 1)\r\n var t = a & 7;\r\n\r\n if (t > 0)\r\n x[0] &= ((1 << t) - 1);\r\n else\r\n x[0] = 0;\r\n\r\n this.fromByteArray(x);\r\n }\r\n}\r\n\r\n//(public) convert to bigendian byte array\r\nfunction bnToByteArray() {\r\n var i = this.t, r = new Array();\r\n r[0] = this.s;\r\n var p = this.DB - (i * this.DB) % 8, d, k = 0;\r\n if (i-- > 0) {\r\n if (p < this.DB && (d = this[i] >> p) != (this.s & this.DM) >> p)\r\n r[k++] = d | (this.s << (this.DB - p));\r\n while (i >= 0) {\r\n if (p < 8) {\r\n d = (this[i] & ((1 << p) - 1)) << (8 - p);\r\n d |= this[--i] >> (p += this.DB - 8);\r\n }\r\n else {\r\n d = (this[i] >> (p -= 8)) & 0xff;\r\n if (p <= 0) {\r\n p += this.DB;\r\n --i;\r\n }\r\n }\r\n if ((d & 0x80) != 0) d |= -256;\r\n if (k === 0 && (this.s & 0x80) != (d & 0x80)) ++k;\r\n if (k > 0 || d != this.s) r[k++] = d;\r\n }\r\n }\r\n return r;\r\n}\r\n\r\n/**\r\n * return Buffer object\r\n * @param trim {boolean} slice buffer if first element == 0\r\n * @returns {Buffer}\r\n */\r\nfunction bnToBuffer(trimOrSize) {\r\n var res = Buffer.from(this.toByteArray());\r\n if (trimOrSize === true && res[0] === 0) {\r\n res = res.slice(1);\r\n } else if (_.isNumber(trimOrSize)) {\r\n if (res.length > trimOrSize) {\r\n for (var i = 0; i < res.length - trimOrSize; i++) {\r\n if (res[i] !== 0) {\r\n return null;\r\n }\r\n }\r\n return res.slice(res.length - trimOrSize);\r\n } else if (res.length < trimOrSize) {\r\n var padded = Buffer.alloc(trimOrSize);\r\n padded.fill(0, 0, trimOrSize - res.length);\r\n res.copy(padded, trimOrSize - res.length);\r\n return padded;\r\n }\r\n }\r\n return res;\r\n}\r\n\r\nfunction bnEquals(a) {\r\n return (this.compareTo(a) == 0);\r\n}\r\nfunction bnMin(a) {\r\n return (this.compareTo(a) < 0) ? this : a;\r\n}\r\nfunction bnMax(a) {\r\n return (this.compareTo(a) > 0) ? this : a;\r\n}\r\n\r\n//(protected) r = this op a (bitwise)\r\nfunction bnpBitwiseTo(a, op, r) {\r\n var i, f, m = Math.min(a.t, this.t);\r\n for (i = 0; i < m; ++i) r[i] = op(this[i], a[i]);\r\n if (a.t < this.t) {\r\n f = a.s & this.DM;\r\n for (i = m; i < this.t; ++i) r[i] = op(this[i], f);\r\n r.t = this.t;\r\n }\r\n else {\r\n f = this.s & this.DM;\r\n for (i = m; i < a.t; ++i) r[i] = op(f, a[i]);\r\n r.t = a.t;\r\n }\r\n r.s = op(this.s, a.s);\r\n r.clamp();\r\n}\r\n\r\n//(public) this & a\r\nfunction op_and(x, y) {\r\n return x & y;\r\n}\r\nfunction bnAnd(a) {\r\n var r = nbi();\r\n this.bitwiseTo(a, op_and, r);\r\n return r;\r\n}\r\n\r\n//(public) this | a\r\nfunction op_or(x, y) {\r\n return x | y;\r\n}\r\nfunction bnOr(a) {\r\n var r = nbi();\r\n this.bitwiseTo(a, op_or, r);\r\n return r;\r\n}\r\n\r\n//(public) this ^ a\r\nfunction op_xor(x, y) {\r\n return x ^ y;\r\n}\r\nfunction bnXor(a) {\r\n var r = nbi();\r\n this.bitwiseTo(a, op_xor, r);\r\n return r;\r\n}\r\n\r\n//(public) this & ~a\r\nfunction op_andnot(x, y) {\r\n return x & ~y;\r\n}\r\nfunction bnAndNot(a) {\r\n var r = nbi();\r\n this.bitwiseTo(a, op_andnot, r);\r\n return r;\r\n}\r\n\r\n//(public) ~this\r\nfunction bnNot() {\r\n var r = nbi();\r\n for (var i = 0; i < this.t; ++i) r[i] = this.DM & ~this[i];\r\n r.t = this.t;\r\n r.s = ~this.s;\r\n return r;\r\n}\r\n\r\n//(public) this << n\r\nfunction bnShiftLeft(n) {\r\n var r = nbi();\r\n if (n < 0) this.rShiftTo(-n, r); else this.lShiftTo(n, r);\r\n return r;\r\n}\r\n\r\n//(public) this >> n\r\nfunction bnShiftRight(n) {\r\n var r = nbi();\r\n if (n < 0) this.lShiftTo(-n, r); else this.rShiftTo(n, r);\r\n return r;\r\n}\r\n\r\n//return index of lowest 1-bit in x, x < 2^31\r\nfunction lbit(x) {\r\n if (x === 0) return -1;\r\n var r = 0;\r\n if ((x & 0xffff) === 0) {\r\n x >>= 16;\r\n r += 16;\r\n }\r\n if ((x & 0xff) === 0) {\r\n x >>= 8;\r\n r += 8;\r\n }\r\n if ((x & 0xf) === 0) {\r\n x >>= 4;\r\n r += 4;\r\n }\r\n if ((x & 3) === 0) {\r\n x >>= 2;\r\n r += 2;\r\n }\r\n if ((x & 1) === 0) ++r;\r\n return r;\r\n}\r\n\r\n//(public) returns index of lowest 1-bit (or -1 if none)\r\nfunction bnGetLowestSetBit() {\r\n for (var i = 0; i < this.t; ++i)\r\n if (this[i] != 0) return i * this.DB + lbit(this[i]);\r\n if (this.s < 0) return this.t * this.DB;\r\n return -1;\r\n}\r\n\r\n//return number of 1 bits in x\r\nfunction cbit(x) {\r\n var r = 0;\r\n while (x != 0) {\r\n x &= x - 1;\r\n ++r;\r\n }\r\n return r;\r\n}\r\n\r\n//(public) return number of set bits\r\nfunction bnBitCount() {\r\n var r = 0, x = this.s & this.DM;\r\n for (var i = 0; i < this.t; ++i) r += cbit(this[i] ^ x);\r\n return r;\r\n}\r\n\r\n//(public) true iff nth bit is set\r\nfunction bnTestBit(n) {\r\n var j = Math.floor(n / this.DB);\r\n if (j >= this.t) return (this.s != 0);\r\n return ((this[j] & (1 << (n % this.DB))) != 0);\r\n}\r\n\r\n//(protected) this op (1<>= this.DB;\r\n }\r\n if (a.t < this.t) {\r\n c += a.s;\r\n while (i < this.t) {\r\n c += this[i];\r\n r[i++] = c & this.DM;\r\n c >>= this.DB;\r\n }\r\n c += this.s;\r\n }\r\n else {\r\n c += this.s;\r\n while (i < a.t) {\r\n c += a[i];\r\n r[i++] = c & this.DM;\r\n c >>= this.DB;\r\n }\r\n c += a.s;\r\n }\r\n r.s = (c < 0) ? -1 : 0;\r\n if (c > 0) r[i++] = c;\r\n else if (c < -1) r[i++] = this.DV + c;\r\n r.t = i;\r\n r.clamp();\r\n}\r\n\r\n//(public) this + a\r\nfunction bnAdd(a) {\r\n var r = nbi();\r\n this.addTo(a, r);\r\n return r;\r\n}\r\n\r\n//(public) this - a\r\nfunction bnSubtract(a) {\r\n var r = nbi();\r\n this.subTo(a, r);\r\n return r;\r\n}\r\n\r\n//(public) this * a\r\nfunction bnMultiply(a) {\r\n var r = nbi();\r\n this.multiplyTo(a, r);\r\n return r;\r\n}\r\n\r\n// (public) this^2\r\nfunction bnSquare() {\r\n var r = nbi();\r\n this.squareTo(r);\r\n return r;\r\n}\r\n\r\n//(public) this / a\r\nfunction bnDivide(a) {\r\n var r = nbi();\r\n this.divRemTo(a, r, null);\r\n return r;\r\n}\r\n\r\n//(public) this % a\r\nfunction bnRemainder(a) {\r\n var r = nbi();\r\n this.divRemTo(a, null, r);\r\n return r;\r\n}\r\n\r\n//(public) [this/a,this%a]\r\nfunction bnDivideAndRemainder(a) {\r\n var q = nbi(), r = nbi();\r\n this.divRemTo(a, q, r);\r\n return new Array(q, r);\r\n}\r\n\r\n//(protected) this *= n, this >= 0, 1 < n < DV\r\nfunction bnpDMultiply(n) {\r\n this[this.t] = this.am(0, n - 1, this, 0, 0, this.t);\r\n ++this.t;\r\n this.clamp();\r\n}\r\n\r\n//(protected) this += n << w words, this >= 0\r\nfunction bnpDAddOffset(n, w) {\r\n if (n === 0) return;\r\n while (this.t <= w) this[this.t++] = 0;\r\n this[w] += n;\r\n while (this[w] >= this.DV) {\r\n this[w] -= this.DV;\r\n if (++w >= this.t) this[this.t++] = 0;\r\n ++this[w];\r\n }\r\n}\r\n\r\n//A \"null\" reducer\r\nfunction NullExp() {\r\n}\r\nfunction nNop(x) {\r\n return x;\r\n}\r\nfunction nMulTo(x, y, r) {\r\n x.multiplyTo(y, r);\r\n}\r\nfunction nSqrTo(x, r) {\r\n x.squareTo(r);\r\n}\r\n\r\nNullExp.prototype.convert = nNop;\r\nNullExp.prototype.revert = nNop;\r\nNullExp.prototype.mulTo = nMulTo;\r\nNullExp.prototype.sqrTo = nSqrTo;\r\n\r\n//(public) this^e\r\nfunction bnPow(e) {\r\n return this.exp(e, new NullExp());\r\n}\r\n\r\n//(protected) r = lower n words of \"this * a\", a.t <= n\r\n//\"this\" should be the larger one if appropriate.\r\nfunction bnpMultiplyLowerTo(a, n, r) {\r\n var i = Math.min(this.t + a.t, n);\r\n r.s = 0; // assumes a,this >= 0\r\n r.t = i;\r\n while (i > 0) r[--i] = 0;\r\n var j;\r\n for (j = r.t - this.t; i < j; ++i) r[i + this.t] = this.am(0, a[i], r, i, 0, this.t);\r\n for (j = Math.min(a.t, n); i < j; ++i) this.am(0, a[i], r, i, 0, n - i);\r\n r.clamp();\r\n}\r\n\r\n//(protected) r = \"this * a\" without lower n words, n > 0\r\n//\"this\" should be the larger one if appropriate.\r\nfunction bnpMultiplyUpperTo(a, n, r) {\r\n --n;\r\n var i = r.t = this.t + a.t - n;\r\n r.s = 0; // assumes a,this >= 0\r\n while (--i >= 0) r[i] = 0;\r\n for (i = Math.max(n - this.t, 0); i < a.t; ++i)\r\n r[this.t + i - n] = this.am(n - i, a[i], r, 0, 0, this.t + i - n);\r\n r.clamp();\r\n r.drShiftTo(1, r);\r\n}\r\n\r\n//Barrett modular reduction\r\nfunction Barrett(m) {\r\n// setup Barrett\r\n this.r2 = nbi();\r\n this.q3 = nbi();\r\n BigInteger.ONE.dlShiftTo(2 * m.t, this.r2);\r\n this.mu = this.r2.divide(m);\r\n this.m = m;\r\n}\r\n\r\nfunction barrettConvert(x) {\r\n if (x.s < 0 || x.t > 2 * this.m.t) return x.mod(this.m);\r\n else if (x.compareTo(this.m) < 0) return x;\r\n else {\r\n var r = nbi();\r\n x.copyTo(r);\r\n this.reduce(r);\r\n return r;\r\n }\r\n}\r\n\r\nfunction barrettRevert(x) {\r\n return x;\r\n}\r\n\r\n//x = x mod m (HAC 14.42)\r\nfunction barrettReduce(x) {\r\n x.drShiftTo(this.m.t - 1, this.r2);\r\n if (x.t > this.m.t + 1) {\r\n x.t = this.m.t + 1;\r\n x.clamp();\r\n }\r\n this.mu.multiplyUpperTo(this.r2, this.m.t + 1, this.q3);\r\n this.m.multiplyLowerTo(this.q3, this.m.t + 1, this.r2);\r\n while (x.compareTo(this.r2) < 0) x.dAddOffset(1, this.m.t + 1);\r\n x.subTo(this.r2, x);\r\n while (x.compareTo(this.m) >= 0) x.subTo(this.m, x);\r\n}\r\n\r\n//r = x^2 mod m; x != r\r\nfunction barrettSqrTo(x, r) {\r\n x.squareTo(r);\r\n this.reduce(r);\r\n}\r\n\r\n//r = x*y mod m; x,y != r\r\nfunction barrettMulTo(x, y, r) {\r\n x.multiplyTo(y, r);\r\n this.reduce(r);\r\n}\r\n\r\nBarrett.prototype.convert = barrettConvert;\r\nBarrett.prototype.revert = barrettRevert;\r\nBarrett.prototype.reduce = barrettReduce;\r\nBarrett.prototype.mulTo = barrettMulTo;\r\nBarrett.prototype.sqrTo = barrettSqrTo;\r\n\r\n//(public) this^e % m (HAC 14.85)\r\nfunction bnModPow(e, m) {\r\n var i = e.bitLength(), k, r = nbv(1), z;\r\n if (i <= 0) return r;\r\n else if (i < 18) k = 1;\r\n else if (i < 48) k = 3;\r\n else if (i < 144) k = 4;\r\n else if (i < 768) k = 5;\r\n else k = 6;\r\n if (i < 8)\r\n z = new Classic(m);\r\n else if (m.isEven())\r\n z = new Barrett(m);\r\n else\r\n z = new Montgomery(m);\r\n\r\n// precomputation\r\n var g = new Array(), n = 3, k1 = k - 1, km = (1 << k) - 1;\r\n g[1] = z.convert(this);\r\n if (k > 1) {\r\n var g2 = nbi();\r\n z.sqrTo(g[1], g2);\r\n while (n <= km) {\r\n g[n] = nbi();\r\n z.mulTo(g2, g[n - 2], g[n]);\r\n n += 2;\r\n }\r\n }\r\n\r\n var j = e.t - 1, w, is1 = true, r2 = nbi(), t;\r\n i = nbits(e[j]) - 1;\r\n while (j >= 0) {\r\n if (i >= k1) w = (e[j] >> (i - k1)) & km;\r\n else {\r\n w = (e[j] & ((1 << (i + 1)) - 1)) << (k1 - i);\r\n if (j > 0) w |= e[j - 1] >> (this.DB + i - k1);\r\n }\r\n\r\n n = k;\r\n while ((w & 1) === 0) {\r\n w >>= 1;\r\n --n;\r\n }\r\n if ((i -= n) < 0) {\r\n i += this.DB;\r\n --j;\r\n }\r\n if (is1) {\t// ret == 1, don't bother squaring or multiplying it\r\n g[w].copyTo(r);\r\n is1 = false;\r\n }\r\n else {\r\n while (n > 1) {\r\n z.sqrTo(r, r2);\r\n z.sqrTo(r2, r);\r\n n -= 2;\r\n }\r\n if (n > 0) z.sqrTo(r, r2); else {\r\n t = r;\r\n r = r2;\r\n r2 = t;\r\n }\r\n z.mulTo(r2, g[w], r);\r\n }\r\n\r\n while (j >= 0 && (e[j] & (1 << i)) === 0) {\r\n z.sqrTo(r, r2);\r\n t = r;\r\n r = r2;\r\n r2 = t;\r\n if (--i < 0) {\r\n i = this.DB - 1;\r\n --j;\r\n }\r\n }\r\n }\r\n return z.revert(r);\r\n}\r\n\r\n//(public) gcd(this,a) (HAC 14.54)\r\nfunction bnGCD(a) {\r\n var x = (this.s < 0) ? this.negate() : this.clone();\r\n var y = (a.s < 0) ? a.negate() : a.clone();\r\n if (x.compareTo(y) < 0) {\r\n var t = x;\r\n x = y;\r\n y = t;\r\n }\r\n var i = x.getLowestSetBit(), g = y.getLowestSetBit();\r\n if (g < 0) return x;\r\n if (i < g) g = i;\r\n if (g > 0) {\r\n x.rShiftTo(g, x);\r\n y.rShiftTo(g, y);\r\n }\r\n while (x.signum() > 0) {\r\n if ((i = x.getLowestSetBit()) > 0) x.rShiftTo(i, x);\r\n if ((i = y.getLowestSetBit()) > 0) y.rShiftTo(i, y);\r\n if (x.compareTo(y) >= 0) {\r\n x.subTo(y, x);\r\n x.rShiftTo(1, x);\r\n }\r\n else {\r\n y.subTo(x, y);\r\n y.rShiftTo(1, y);\r\n }\r\n }\r\n if (g > 0) y.lShiftTo(g, y);\r\n return y;\r\n}\r\n\r\n//(protected) this % n, n < 2^26\r\nfunction bnpModInt(n) {\r\n if (n <= 0) return 0;\r\n var d = this.DV % n, r = (this.s < 0) ? n - 1 : 0;\r\n if (this.t > 0)\r\n if (d === 0) r = this[0] % n;\r\n else for (var i = this.t - 1; i >= 0; --i) r = (d * r + this[i]) % n;\r\n return r;\r\n}\r\n\r\n//(public) 1/this % m (HAC 14.61)\r\nfunction bnModInverse(m) {\r\n var ac = m.isEven();\r\n if ((this.isEven() && ac) || m.signum() === 0) return BigInteger.ZERO;\r\n var u = m.clone(), v = this.clone();\r\n var a = nbv(1), b = nbv(0), c = nbv(0), d = nbv(1);\r\n while (u.signum() != 0) {\r\n while (u.isEven()) {\r\n u.rShiftTo(1, u);\r\n if (ac) {\r\n if (!a.isEven() || !b.isEven()) {\r\n a.addTo(this, a);\r\n b.subTo(m, b);\r\n }\r\n a.rShiftTo(1, a);\r\n }\r\n else if (!b.isEven()) b.subTo(m, b);\r\n b.rShiftTo(1, b);\r\n }\r\n while (v.isEven()) {\r\n v.rShiftTo(1, v);\r\n if (ac) {\r\n if (!c.isEven() || !d.isEven()) {\r\n c.addTo(this, c);\r\n d.subTo(m, d);\r\n }\r\n c.rShiftTo(1, c);\r\n }\r\n else if (!d.isEven()) d.subTo(m, d);\r\n d.rShiftTo(1, d);\r\n }\r\n if (u.compareTo(v) >= 0) {\r\n u.subTo(v, u);\r\n if (ac) a.subTo(c, a);\r\n b.subTo(d, b);\r\n }\r\n else {\r\n v.subTo(u, v);\r\n if (ac) c.subTo(a, c);\r\n d.subTo(b, d);\r\n }\r\n }\r\n if (v.compareTo(BigInteger.ONE) != 0) return BigInteger.ZERO;\r\n if (d.compareTo(m) >= 0) return d.subtract(m);\r\n if (d.signum() < 0) d.addTo(m, d); else return d;\r\n if (d.signum() < 0) return d.add(m); else return d;\r\n}\r\n\r\nvar 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];\r\nvar lplim = (1 << 26) / lowprimes[lowprimes.length - 1];\r\n\r\n//(public) test primality with certainty >= 1-.5^t\r\nfunction bnIsProbablePrime(t) {\r\n var i, x = this.abs();\r\n if (x.t == 1 && x[0] <= lowprimes[lowprimes.length - 1]) {\r\n for (i = 0; i < lowprimes.length; ++i)\r\n if (x[0] == lowprimes[i]) return true;\r\n return false;\r\n }\r\n if (x.isEven()) return false;\r\n i = 1;\r\n while (i < lowprimes.length) {\r\n var m = lowprimes[i], j = i + 1;\r\n while (j < lowprimes.length && m < lplim) m *= lowprimes[j++];\r\n m = x.modInt(m);\r\n while (i < j) if (m % lowprimes[i++] === 0) return false;\r\n }\r\n return x.millerRabin(t);\r\n}\r\n\r\n//(protected) true if probably prime (HAC 4.24, Miller-Rabin)\r\nfunction bnpMillerRabin(t) {\r\n var n1 = this.subtract(BigInteger.ONE);\r\n var k = n1.getLowestSetBit();\r\n if (k <= 0) return false;\r\n var r = n1.shiftRight(k);\r\n t = (t + 1) >> 1;\r\n if (t > lowprimes.length) t = lowprimes.length;\r\n var a = nbi();\r\n for (var i = 0; i < t; ++i) {\r\n //Pick bases at random, instead of starting at 2\r\n a.fromInt(lowprimes[Math.floor(Math.random() * lowprimes.length)]);\r\n var y = a.modPow(r, this);\r\n if (y.compareTo(BigInteger.ONE) != 0 && y.compareTo(n1) != 0) {\r\n var j = 1;\r\n while (j++ < k && y.compareTo(n1) != 0) {\r\n y = y.modPowInt(2, this);\r\n if (y.compareTo(BigInteger.ONE) === 0) return false;\r\n }\r\n if (y.compareTo(n1) != 0) return false;\r\n }\r\n }\r\n return true;\r\n}\r\n\r\n// protected\r\nBigInteger.prototype.copyTo = bnpCopyTo;\r\nBigInteger.prototype.fromInt = bnpFromInt;\r\nBigInteger.prototype.fromString = bnpFromString;\r\nBigInteger.prototype.fromByteArray = bnpFromByteArray;\r\nBigInteger.prototype.fromBuffer = bnpFromBuffer;\r\nBigInteger.prototype.clamp = bnpClamp;\r\nBigInteger.prototype.dlShiftTo = bnpDLShiftTo;\r\nBigInteger.prototype.drShiftTo = bnpDRShiftTo;\r\nBigInteger.prototype.lShiftTo = bnpLShiftTo;\r\nBigInteger.prototype.rShiftTo = bnpRShiftTo;\r\nBigInteger.prototype.subTo = bnpSubTo;\r\nBigInteger.prototype.multiplyTo = bnpMultiplyTo;\r\nBigInteger.prototype.squareTo = bnpSquareTo;\r\nBigInteger.prototype.divRemTo = bnpDivRemTo;\r\nBigInteger.prototype.invDigit = bnpInvDigit;\r\nBigInteger.prototype.isEven = bnpIsEven;\r\nBigInteger.prototype.exp = bnpExp;\r\n\r\nBigInteger.prototype.chunkSize = bnpChunkSize;\r\nBigInteger.prototype.toRadix = bnpToRadix;\r\nBigInteger.prototype.fromRadix = bnpFromRadix;\r\nBigInteger.prototype.fromNumber = bnpFromNumber;\r\nBigInteger.prototype.bitwiseTo = bnpBitwiseTo;\r\nBigInteger.prototype.changeBit = bnpChangeBit;\r\nBigInteger.prototype.addTo = bnpAddTo;\r\nBigInteger.prototype.dMultiply = bnpDMultiply;\r\nBigInteger.prototype.dAddOffset = bnpDAddOffset;\r\nBigInteger.prototype.multiplyLowerTo = bnpMultiplyLowerTo;\r\nBigInteger.prototype.multiplyUpperTo = bnpMultiplyUpperTo;\r\nBigInteger.prototype.modInt = bnpModInt;\r\nBigInteger.prototype.millerRabin = bnpMillerRabin;\r\n\r\n\r\n// public\r\nBigInteger.prototype.toString = bnToString;\r\nBigInteger.prototype.negate = bnNegate;\r\nBigInteger.prototype.abs = bnAbs;\r\nBigInteger.prototype.compareTo = bnCompareTo;\r\nBigInteger.prototype.bitLength = bnBitLength;\r\nBigInteger.prototype.mod = bnMod;\r\nBigInteger.prototype.modPowInt = bnModPowInt;\r\n\r\nBigInteger.prototype.clone = bnClone;\r\nBigInteger.prototype.intValue = bnIntValue;\r\nBigInteger.prototype.byteValue = bnByteValue;\r\nBigInteger.prototype.shortValue = bnShortValue;\r\nBigInteger.prototype.signum = bnSigNum;\r\nBigInteger.prototype.toByteArray = bnToByteArray;\r\nBigInteger.prototype.toBuffer = bnToBuffer;\r\nBigInteger.prototype.equals = bnEquals;\r\nBigInteger.prototype.min = bnMin;\r\nBigInteger.prototype.max = bnMax;\r\nBigInteger.prototype.and = bnAnd;\r\nBigInteger.prototype.or = bnOr;\r\nBigInteger.prototype.xor = bnXor;\r\nBigInteger.prototype.andNot = bnAndNot;\r\nBigInteger.prototype.not = bnNot;\r\nBigInteger.prototype.shiftLeft = bnShiftLeft;\r\nBigInteger.prototype.shiftRight = bnShiftRight;\r\nBigInteger.prototype.getLowestSetBit = bnGetLowestSetBit;\r\nBigInteger.prototype.bitCount = bnBitCount;\r\nBigInteger.prototype.testBit = bnTestBit;\r\nBigInteger.prototype.setBit = bnSetBit;\r\nBigInteger.prototype.clearBit = bnClearBit;\r\nBigInteger.prototype.flipBit = bnFlipBit;\r\nBigInteger.prototype.add = bnAdd;\r\nBigInteger.prototype.subtract = bnSubtract;\r\nBigInteger.prototype.multiply = bnMultiply;\r\nBigInteger.prototype.divide = bnDivide;\r\nBigInteger.prototype.remainder = bnRemainder;\r\nBigInteger.prototype.divideAndRemainder = bnDivideAndRemainder;\r\nBigInteger.prototype.modPow = bnModPow;\r\nBigInteger.prototype.modInverse = bnModInverse;\r\nBigInteger.prototype.pow = bnPow;\r\nBigInteger.prototype.gcd = bnGCD;\r\nBigInteger.prototype.isProbablePrime = bnIsProbablePrime;\r\nBigInteger.int2char = int2char;\r\n\r\n// \"constants\"\r\nBigInteger.ZERO = nbv(0);\r\nBigInteger.ONE = nbv(1);\r\n\r\n// JSBN-specific extension\r\nBigInteger.prototype.square = bnSquare;\r\n\r\n//BigInteger interfaces not implemented in jsbn:\r\n\r\n//BigInteger(int signum, byte[] magnitude)\r\n//double doubleValue()\r\n//float floatValue()\r\n//int hashCode()\r\n//long longValue()\r\n//static BigInteger valueOf(long val)\r\n\r\nmodule.exports = BigInteger;","/*\n * RSA Encryption / Decryption with PKCS1 v2 Padding.\n * \n * Copyright (c) 2003-2005 Tom Wu\n * All Rights Reserved.\n *\n * Permission is hereby granted, free of charge, to any person obtaining\n * a copy of this software and associated documentation files (the\n * \"Software\"), to deal in the Software without restriction, including\n * without limitation the rights to use, copy, modify, merge, publish,\n * distribute, sublicense, and/or sell copies of the Software, and to\n * permit persons to whom the Software is furnished to do so, subject to\n * the following conditions:\n *\n * The above copyright notice and this permission notice shall be\n * included in all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS-IS\" AND WITHOUT WARRANTY OF ANY KIND, \n * EXPRESS, IMPLIED OR OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY \n * WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. \n *\n * IN NO EVENT SHALL TOM WU BE LIABLE FOR ANY SPECIAL, INCIDENTAL,\n * INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY KIND, OR ANY DAMAGES WHATSOEVER\n * RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER OR NOT ADVISED OF\n * THE POSSIBILITY OF DAMAGE, AND ON ANY THEORY OF LIABILITY, ARISING OUT\n * OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.\n *\n * In addition, the following condition applies:\n *\n * All redistributions must retain an intact copy of this copyright notice\n * and disclaimer.\n */\n\n/*\n * Node.js adaptation\n * long message support implementation\n * signing/verifying\n *\n * 2014 rzcoder\n */\n\nvar _ = require('../utils')._;\nvar crypt = require('crypto');\nvar BigInteger = require('./jsbn.js');\nvar utils = require('../utils.js');\nvar schemes = require('../schemes/schemes.js');\nvar encryptEngines = require('../encryptEngines/encryptEngines.js');\n\nexports.BigInteger = BigInteger;\nmodule.exports.Key = (function () {\n /**\n * RSA key constructor\n *\n * n - modulus\n * e - publicExponent\n * d - privateExponent\n * p - prime1\n * q - prime2\n * dmp1 - exponent1 -- d mod (p1)\n * dmq1 - exponent2 -- d mod (q-1)\n * coeff - coefficient -- (inverse of q) mod p\n */\n function RSAKey() {\n this.n = null;\n this.e = 0;\n this.d = null;\n this.p = null;\n this.q = null;\n this.dmp1 = null;\n this.dmq1 = null;\n this.coeff = null;\n }\n\n RSAKey.prototype.setOptions = function (options) {\n var signingSchemeProvider = schemes[options.signingScheme];\n var encryptionSchemeProvider = schemes[options.encryptionScheme];\n\n if (signingSchemeProvider === encryptionSchemeProvider) {\n this.signingScheme = this.encryptionScheme = encryptionSchemeProvider.makeScheme(this, options);\n } else {\n this.encryptionScheme = encryptionSchemeProvider.makeScheme(this, options);\n this.signingScheme = signingSchemeProvider.makeScheme(this, options);\n }\n\n this.encryptEngine = encryptEngines.getEngine(this, options);\n };\n\n /**\n * Generate a new random private key B bits long, using public expt E\n * @param B\n * @param E\n */\n RSAKey.prototype.generate = function (B, E) {\n var qs = B >> 1;\n this.e = parseInt(E, 16);\n var ee = new BigInteger(E, 16);\n while (true) {\n while (true) {\n this.p = new BigInteger(B - qs, 1);\n if (this.p.subtract(BigInteger.ONE).gcd(ee).compareTo(BigInteger.ONE) === 0 && this.p.isProbablePrime(10))\n break;\n }\n while (true) {\n this.q = new BigInteger(qs, 1);\n if (this.q.subtract(BigInteger.ONE).gcd(ee).compareTo(BigInteger.ONE) === 0 && this.q.isProbablePrime(10))\n break;\n }\n if (this.p.compareTo(this.q) <= 0) {\n var t = this.p;\n this.p = this.q;\n this.q = t;\n }\n var p1 = this.p.subtract(BigInteger.ONE);\n var q1 = this.q.subtract(BigInteger.ONE);\n var phi = p1.multiply(q1);\n if (phi.gcd(ee).compareTo(BigInteger.ONE) === 0) {\n this.n = this.p.multiply(this.q);\n if (this.n.bitLength() < B) {\n continue;\n }\n this.d = ee.modInverse(phi);\n this.dmp1 = this.d.mod(p1);\n this.dmq1 = this.d.mod(q1);\n this.coeff = this.q.modInverse(this.p);\n break;\n }\n }\n this.$$recalculateCache();\n };\n\n /**\n * Set the private key fields N, e, d and CRT params from buffers\n *\n * @param N\n * @param E\n * @param D\n * @param P\n * @param Q\n * @param DP\n * @param DQ\n * @param C\n */\n RSAKey.prototype.setPrivate = function (N, E, D, P, Q, DP, DQ, C) {\n if (N && E && D && N.length > 0 && (_.isNumber(E) || E.length > 0) && D.length > 0) {\n this.n = new BigInteger(N);\n this.e = _.isNumber(E) ? E : utils.get32IntFromBuffer(E, 0);\n this.d = new BigInteger(D);\n\n if (P && Q && DP && DQ && C) {\n this.p = new BigInteger(P);\n this.q = new BigInteger(Q);\n this.dmp1 = new BigInteger(DP);\n this.dmq1 = new BigInteger(DQ);\n this.coeff = new BigInteger(C);\n } else {\n // TODO: re-calculate any missing CRT params\n }\n this.$$recalculateCache();\n } else {\n throw Error(\"Invalid RSA private key\");\n }\n };\n\n /**\n * Set the public key fields N and e from hex strings\n * @param N\n * @param E\n */\n RSAKey.prototype.setPublic = function (N, E) {\n if (N && E && N.length > 0 && (_.isNumber(E) || E.length > 0)) {\n this.n = new BigInteger(N);\n this.e = _.isNumber(E) ? E : utils.get32IntFromBuffer(E, 0);\n this.$$recalculateCache();\n } else {\n throw Error(\"Invalid RSA public key\");\n }\n };\n\n /**\n * private\n * Perform raw private operation on \"x\": return x^d (mod n)\n *\n * @param x\n * @returns {*}\n */\n RSAKey.prototype.$doPrivate = function (x) {\n if (this.p || this.q) {\n return x.modPow(this.d, this.n);\n }\n\n // TODO: re-calculate any missing CRT params\n var xp = x.mod(this.p).modPow(this.dmp1, this.p);\n var xq = x.mod(this.q).modPow(this.dmq1, this.q);\n\n while (xp.compareTo(xq) < 0) {\n xp = xp.add(this.p);\n }\n return xp.subtract(xq).multiply(this.coeff).mod(this.p).multiply(this.q).add(xq);\n };\n\n /**\n * private\n * Perform raw public operation on \"x\": return x^e (mod n)\n *\n * @param x\n * @returns {*}\n */\n RSAKey.prototype.$doPublic = function (x) {\n return x.modPowInt(this.e, this.n);\n };\n\n /**\n * Return the PKCS#1 RSA encryption of buffer\n * @param buffer {Buffer}\n * @returns {Buffer}\n */\n RSAKey.prototype.encrypt = function (buffer, usePrivate) {\n var buffers = [];\n var results = [];\n var bufferSize = buffer.length;\n var buffersCount = Math.ceil(bufferSize / this.maxMessageLength) || 1; // total buffers count for encrypt\n var dividedSize = Math.ceil(bufferSize / buffersCount || 1); // each buffer size\n\n if (buffersCount == 1) {\n buffers.push(buffer);\n } else {\n for (var bufNum = 0; bufNum < buffersCount; bufNum++) {\n buffers.push(buffer.slice(bufNum * dividedSize, (bufNum + 1) * dividedSize));\n }\n }\n\n for (var i = 0; i < buffers.length; i++) {\n results.push(this.encryptEngine.encrypt(buffers[i], usePrivate));\n }\n\n return Buffer.concat(results);\n };\n\n /**\n * Return the PKCS#1 RSA decryption of buffer\n * @param buffer {Buffer}\n * @returns {Buffer}\n */\n RSAKey.prototype.decrypt = function (buffer, usePublic) {\n if (buffer.length % this.encryptedDataLength > 0) {\n throw Error('Incorrect data or key');\n }\n\n var result = [];\n var offset = 0;\n var length = 0;\n var buffersCount = buffer.length / this.encryptedDataLength;\n\n for (var i = 0; i < buffersCount; i++) {\n offset = i * this.encryptedDataLength;\n length = offset + this.encryptedDataLength;\n result.push(this.encryptEngine.decrypt(buffer.slice(offset, Math.min(length, buffer.length)), usePublic));\n }\n\n return Buffer.concat(result);\n };\n\n RSAKey.prototype.sign = function (buffer) {\n return this.signingScheme.sign.apply(this.signingScheme, arguments);\n };\n\n RSAKey.prototype.verify = function (buffer, signature, signature_encoding) {\n return this.signingScheme.verify.apply(this.signingScheme, arguments);\n };\n\n /**\n * Check if key pair contains private key\n */\n RSAKey.prototype.isPrivate = function () {\n return this.n && this.e && this.d && true || false;\n };\n\n /**\n * Check if key pair contains public key\n * @param strict {boolean} - public key only, return false if have private exponent\n */\n RSAKey.prototype.isPublic = function (strict) {\n return this.n && this.e && !(strict && this.d) || false;\n };\n\n Object.defineProperty(RSAKey.prototype, 'keySize', {\n get: function () {\n return this.cache.keyBitLength;\n }\n });\n\n Object.defineProperty(RSAKey.prototype, 'encryptedDataLength', {\n get: function () {\n return this.cache.keyByteLength;\n }\n });\n\n Object.defineProperty(RSAKey.prototype, 'maxMessageLength', {\n get: function () {\n return this.encryptionScheme.maxMessageLength();\n }\n });\n\n /**\n * Caching key data\n */\n RSAKey.prototype.$$recalculateCache = function () {\n this.cache = this.cache || {};\n // Bit & byte length\n this.cache.keyBitLength = this.n.bitLength();\n this.cache.keyByteLength = (this.cache.keyBitLength + 6) >> 3;\n };\n\n return RSAKey;\n})();\n\n","/**\n * PKCS_OAEP signature scheme\n */\n\nvar BigInteger = require('../libs/jsbn');\nvar crypt = require('crypto');\n\nmodule.exports = {\n isEncryption: true,\n isSignature: false\n};\n\nmodule.exports.digestLength = {\n md4: 16,\n md5: 16,\n ripemd160: 20,\n rmd160: 20,\n sha1: 20,\n sha224: 28,\n sha256: 32,\n sha384: 48,\n sha512: 64\n};\n\nvar DEFAULT_HASH_FUNCTION = 'sha1';\n\n/*\n * OAEP Mask Generation Function 1\n * Generates a buffer full of pseudorandom bytes given seed and maskLength.\n * Giving the same seed, maskLength, and hashFunction will result in the same exact byte values in the buffer.\n *\n * https://tools.ietf.org/html/rfc3447#appendix-B.2.1\n *\n * Parameters:\n * seed\t\t\t[Buffer]\tThe pseudo random seed for this function\n * maskLength\t[int]\t\tThe length of the output\n * hashFunction\t[String]\tThe hashing function to use. Will accept any valid crypto hash. Default \"sha1\"\n *\t\tSupports \"sha1\" and \"sha256\".\n *\t\tTo add another algorythm the algorythem must be accepted by crypto.createHash, and then the length of the output of the hash function (the digest) must be added to the digestLength object below.\n *\t\tMost RSA implementations will be expecting sha1\n */\nmodule.exports.eme_oaep_mgf1 = function (seed, maskLength, hashFunction) {\n hashFunction = hashFunction || DEFAULT_HASH_FUNCTION;\n var hLen = module.exports.digestLength[hashFunction];\n var count = Math.ceil(maskLength / hLen);\n var T = Buffer.alloc(hLen * count);\n var c = Buffer.alloc(4);\n for (var i = 0; i < count; ++i) {\n var hash = crypt.createHash(hashFunction);\n hash.update(seed);\n c.writeUInt32BE(i, 0);\n hash.update(c);\n hash.digest().copy(T, i * hLen);\n }\n return T.slice(0, maskLength);\n};\n\nmodule.exports.makeScheme = function (key, options) {\n function Scheme(key, options) {\n this.key = key;\n this.options = options;\n }\n\n Scheme.prototype.maxMessageLength = function () {\n return this.key.encryptedDataLength - 2 * module.exports.digestLength[this.options.encryptionSchemeOptions.hash || DEFAULT_HASH_FUNCTION] - 2;\n };\n\n /**\n * Pad input\n * alg: PKCS1_OAEP\n *\n * https://tools.ietf.org/html/rfc3447#section-7.1.1\n */\n Scheme.prototype.encPad = function (buffer) {\n var hash = this.options.encryptionSchemeOptions.hash || DEFAULT_HASH_FUNCTION;\n var mgf = this.options.encryptionSchemeOptions.mgf || module.exports.eme_oaep_mgf1;\n var label = this.options.encryptionSchemeOptions.label || Buffer.alloc(0);\n var emLen = this.key.encryptedDataLength;\n\n var hLen = module.exports.digestLength[hash];\n\n // Make sure we can put message into an encoded message of emLen bytes\n if (buffer.length > emLen - 2 * hLen - 2) {\n throw new Error(\"Message is too long to encode into an encoded message with a length of \" + emLen + \" bytes, increase\" +\n \"emLen to fix this error (minimum value for given parameters and options: \" + (emLen - 2 * hLen - 2) + \")\");\n }\n\n var lHash = crypt.createHash(hash);\n lHash.update(label);\n lHash = lHash.digest();\n\n var PS = Buffer.alloc(emLen - buffer.length - 2 * hLen - 1); // Padding \"String\"\n PS.fill(0); // Fill the buffer with octets of 0\n PS[PS.length - 1] = 1;\n\n var DB = Buffer.concat([lHash, PS, buffer]);\n var seed = crypt.randomBytes(hLen);\n\n // mask = dbMask\n var mask = mgf(seed, DB.length, hash);\n // XOR DB and dbMask together.\n for (var i = 0; i < DB.length; i++) {\n DB[i] ^= mask[i];\n }\n // DB = maskedDB\n\n // mask = seedMask\n mask = mgf(DB, hLen, hash);\n // XOR seed and seedMask together.\n for (i = 0; i < seed.length; i++) {\n seed[i] ^= mask[i];\n }\n // seed = maskedSeed\n\n var em = Buffer.alloc(1 + seed.length + DB.length);\n em[0] = 0;\n seed.copy(em, 1);\n DB.copy(em, 1 + seed.length);\n\n return em;\n };\n\n /**\n * Unpad input\n * alg: PKCS1_OAEP\n *\n * Note: This method works within the buffer given and modifies the values. It also returns a slice of the EM as the return Message.\n * If the implementation requires that the EM parameter be unmodified then the implementation should pass in a clone of the EM buffer.\n *\n * https://tools.ietf.org/html/rfc3447#section-7.1.2\n */\n Scheme.prototype.encUnPad = function (buffer) {\n var hash = this.options.encryptionSchemeOptions.hash || DEFAULT_HASH_FUNCTION;\n var mgf = this.options.encryptionSchemeOptions.mgf || module.exports.eme_oaep_mgf1;\n var label = this.options.encryptionSchemeOptions.label || Buffer.alloc(0);\n\n var hLen = module.exports.digestLength[hash];\n\n // Check to see if buffer is a properly encoded OAEP message\n if (buffer.length < 2 * hLen + 2) {\n throw new Error(\"Error decoding message, the supplied message is not long enough to be a valid OAEP encoded message\");\n }\n\n var seed = buffer.slice(1, hLen + 1);\t// seed = maskedSeed\n var DB = buffer.slice(1 + hLen);\t\t// DB = maskedDB\n\n var mask = mgf(DB, hLen, hash); // seedMask\n // XOR maskedSeed and seedMask together to get the original seed.\n for (var i = 0; i < seed.length; i++) {\n seed[i] ^= mask[i];\n }\n\n mask = mgf(seed, DB.length, hash); // dbMask\n // XOR DB and dbMask together to get the original data block.\n for (i = 0; i < DB.length; i++) {\n DB[i] ^= mask[i];\n }\n\n var lHash = crypt.createHash(hash);\n lHash.update(label);\n lHash = lHash.digest();\n\n var lHashEM = DB.slice(0, hLen);\n if (lHashEM.toString(\"hex\") != lHash.toString(\"hex\")) {\n throw new Error(\"Error decoding message, the lHash calculated from the label provided and the lHash in the encrypted data do not match.\");\n }\n\n // Filter out padding\n i = hLen;\n while (DB[i++] === 0 && i < DB.length);\n if (DB[i - 1] != 1) {\n throw new Error(\"Error decoding message, there is no padding message separator byte\");\n }\n\n return DB.slice(i); // Message\n };\n\n return new Scheme(key, options);\n};\n","/**\n * PKCS1 padding and signature scheme\n */\n\nvar BigInteger = require('../libs/jsbn');\nvar crypt = require('crypto');\nvar constants = require('constants');\nvar SIGN_INFO_HEAD = {\n md2: Buffer.from('3020300c06082a864886f70d020205000410', 'hex'),\n md5: Buffer.from('3020300c06082a864886f70d020505000410', 'hex'),\n sha1: Buffer.from('3021300906052b0e03021a05000414', 'hex'),\n sha224: Buffer.from('302d300d06096086480165030402040500041c', 'hex'),\n sha256: Buffer.from('3031300d060960864801650304020105000420', 'hex'),\n sha384: Buffer.from('3041300d060960864801650304020205000430', 'hex'),\n sha512: Buffer.from('3051300d060960864801650304020305000440', 'hex'),\n ripemd160: Buffer.from('3021300906052b2403020105000414', 'hex'),\n rmd160: Buffer.from('3021300906052b2403020105000414', 'hex')\n};\n\nvar SIGN_ALG_TO_HASH_ALIASES = {\n 'ripemd160': 'rmd160'\n};\n\nvar DEFAULT_HASH_FUNCTION = 'sha256';\n\nmodule.exports = {\n isEncryption: true,\n isSignature: true\n};\n\nmodule.exports.makeScheme = function (key, options) {\n function Scheme(key, options) {\n this.key = key;\n this.options = options;\n }\n\n Scheme.prototype.maxMessageLength = function () {\n if (this.options.encryptionSchemeOptions && this.options.encryptionSchemeOptions.padding == constants.RSA_NO_PADDING) {\n return this.key.encryptedDataLength;\n }\n return this.key.encryptedDataLength - 11;\n };\n\n /**\n * Pad input Buffer to encryptedDataLength bytes, and return Buffer.from\n * alg: PKCS#1\n * @param buffer\n * @returns {Buffer}\n */\n Scheme.prototype.encPad = function (buffer, options) {\n options = options || {};\n var filled;\n if (buffer.length > this.key.maxMessageLength) {\n throw new Error(\"Message too long for RSA (n=\" + this.key.encryptedDataLength + \", l=\" + buffer.length + \")\");\n }\n if (this.options.encryptionSchemeOptions && this.options.encryptionSchemeOptions.padding == constants.RSA_NO_PADDING) {\n //RSA_NO_PADDING treated like JAVA left pad with zero character\n filled = Buffer.alloc(this.key.maxMessageLength - buffer.length);\n filled.fill(0);\n return Buffer.concat([filled, buffer]);\n }\n\n /* Type 1: zeros padding for private key encrypt */\n if (options.type === 1) {\n filled = Buffer.alloc(this.key.encryptedDataLength - buffer.length - 1);\n filled.fill(0xff, 0, filled.length - 1);\n filled[0] = 1;\n filled[filled.length - 1] = 0;\n\n return Buffer.concat([filled, buffer]);\n } else {\n /* random padding for public key encrypt */\n filled = Buffer.alloc(this.key.encryptedDataLength - buffer.length);\n filled[0] = 0;\n filled[1] = 2;\n var rand = crypt.randomBytes(filled.length - 3);\n for (var i = 0; i < rand.length; i++) {\n var r = rand[i];\n while (r === 0) { // non-zero only\n r = crypt.randomBytes(1)[0];\n }\n filled[i + 2] = r;\n }\n filled[filled.length - 1] = 0;\n return Buffer.concat([filled, buffer]);\n }\n };\n\n /**\n * Unpad input Buffer and, if valid, return the Buffer object\n * alg: PKCS#1 (type 2, random)\n * @param buffer\n * @returns {Buffer}\n */\n Scheme.prototype.encUnPad = function (buffer, options) {\n options = options || {};\n var i = 0;\n\n if (this.options.encryptionSchemeOptions && this.options.encryptionSchemeOptions.padding == constants.RSA_NO_PADDING) {\n //RSA_NO_PADDING treated like JAVA left pad with zero character\n var unPad;\n if (typeof buffer.lastIndexOf == \"function\") { //patch for old node version\n unPad = buffer.slice(buffer.lastIndexOf('\\0') + 1, buffer.length);\n } else {\n unPad = buffer.slice(String.prototype.lastIndexOf.call(buffer, '\\0') + 1, buffer.length);\n }\n return unPad;\n }\n\n if (buffer.length < 4) {\n return null;\n }\n\n /* Type 1: zeros padding for private key decrypt */\n if (options.type === 1) {\n if (buffer[0] !== 0 || buffer[1] !== 1) {\n return null;\n }\n i = 3;\n while (buffer[i] !== 0) {\n if (buffer[i] != 0xFF || ++i >= buffer.length) {\n return null;\n }\n }\n } else {\n /* random padding for public key decrypt */\n if (buffer[0] !== 0 || buffer[1] !== 2) {\n return null;\n }\n i = 3;\n while (buffer[i] !== 0) {\n if (++i >= buffer.length) {\n return null;\n }\n }\n }\n return buffer.slice(i + 1, buffer.length);\n };\n\n Scheme.prototype.sign = function (buffer) {\n var hashAlgorithm = this.options.signingSchemeOptions.hash || DEFAULT_HASH_FUNCTION;\n if (this.options.environment === 'browser') {\n hashAlgorithm = SIGN_ALG_TO_HASH_ALIASES[hashAlgorithm] || hashAlgorithm;\n\n var hasher = crypt.createHash(hashAlgorithm);\n hasher.update(buffer);\n var hash = this.pkcs1pad(hasher.digest(), hashAlgorithm);\n var res = this.key.$doPrivate(new BigInteger(hash)).toBuffer(this.key.encryptedDataLength);\n\n return res;\n } else {\n var signer = crypt.createSign('RSA-' + hashAlgorithm.toUpperCase());\n signer.update(buffer);\n return signer.sign(this.options.rsaUtils.exportKey('private'));\n }\n };\n\n Scheme.prototype.verify = function (buffer, signature, signature_encoding) {\n if (this.options.encryptionSchemeOptions && this.options.encryptionSchemeOptions.padding == constants.RSA_NO_PADDING) {\n //RSA_NO_PADDING has no verify data\n return false;\n }\n var hashAlgorithm = this.options.signingSchemeOptions.hash || DEFAULT_HASH_FUNCTION;\n if (this.options.environment === 'browser') {\n hashAlgorithm = SIGN_ALG_TO_HASH_ALIASES[hashAlgorithm] || hashAlgorithm;\n\n if (signature_encoding) {\n signature = Buffer.from(signature, signature_encoding);\n }\n\n var hasher = crypt.createHash(hashAlgorithm);\n hasher.update(buffer);\n var hash = this.pkcs1pad(hasher.digest(), hashAlgorithm);\n var m = this.key.$doPublic(new BigInteger(signature));\n\n return m.toBuffer().toString('hex') == hash.toString('hex');\n } else {\n var verifier = crypt.createVerify('RSA-' + hashAlgorithm.toUpperCase());\n verifier.update(buffer);\n return verifier.verify(this.options.rsaUtils.exportKey('public'), signature, signature_encoding);\n }\n };\n\n /**\n * PKCS#1 zero pad input buffer to max data length\n * @param hashBuf\n * @param hashAlgorithm\n * @returns {*}\n */\n Scheme.prototype.pkcs0pad = function (buffer) {\n var filled = Buffer.alloc(this.key.maxMessageLength - buffer.length);\n filled.fill(0);\n return Buffer.concat([filled, buffer]);\n };\n\n Scheme.prototype.pkcs0unpad = function (buffer) {\n var unPad;\n if (typeof buffer.lastIndexOf == \"function\") { //patch for old node version\n unPad = buffer.slice(buffer.lastIndexOf('\\0') + 1, buffer.length);\n } else {\n unPad = buffer.slice(String.prototype.lastIndexOf.call(buffer, '\\0') + 1, buffer.length);\n }\n\n return unPad;\n };\n\n /**\n * PKCS#1 pad input buffer to max data length\n * @param hashBuf\n * @param hashAlgorithm\n * @returns {*}\n */\n Scheme.prototype.pkcs1pad = function (hashBuf, hashAlgorithm) {\n var digest = SIGN_INFO_HEAD[hashAlgorithm];\n if (!digest) {\n throw Error('Unsupported hash algorithm');\n }\n\n var data = Buffer.concat([digest, hashBuf]);\n\n if (data.length + 10 > this.key.encryptedDataLength) {\n throw Error('Key is too short for signing algorithm (' + hashAlgorithm + ')');\n }\n\n var filled = Buffer.alloc(this.key.encryptedDataLength - data.length - 1);\n filled.fill(0xff, 0, filled.length - 1);\n filled[0] = 1;\n filled[filled.length - 1] = 0;\n\n var res = Buffer.concat([filled, data]);\n\n return res;\n };\n\n return new Scheme(key, options);\n};\n\n\n","/**\r\n * PSS signature scheme\r\n */\r\n\r\nvar BigInteger = require('../libs/jsbn');\r\nvar crypt = require('crypto');\r\n\r\nmodule.exports = {\r\n isEncryption: false,\r\n isSignature: true\r\n};\r\n\r\nvar DEFAULT_HASH_FUNCTION = 'sha1';\r\nvar DEFAULT_SALT_LENGTH = 20;\r\n\r\nmodule.exports.makeScheme = function (key, options) {\r\n var OAEP = require('./schemes').pkcs1_oaep;\r\n\r\n /**\r\n * @param key\r\n * @param options\r\n * options [Object] An object that contains the following keys that specify certain options for encoding.\r\n * └>signingSchemeOptions\r\n * ├>hash [String] Hash function to use when encoding and generating masks. Must be a string accepted by node's crypto.createHash function. (default = \"sha1\")\r\n * ├>mgf [function] The mask generation function to use when encoding. (default = mgf1SHA1)\r\n * └>sLen [uint] The length of the salt to generate. (default = 20)\r\n * @constructor\r\n */\r\n function Scheme(key, options) {\r\n this.key = key;\r\n this.options = options;\r\n }\r\n\r\n Scheme.prototype.sign = function (buffer) {\r\n var mHash = crypt.createHash(this.options.signingSchemeOptions.hash || DEFAULT_HASH_FUNCTION);\r\n mHash.update(buffer);\r\n\r\n var encoded = this.emsa_pss_encode(mHash.digest(), this.key.keySize - 1);\r\n return this.key.$doPrivate(new BigInteger(encoded)).toBuffer(this.key.encryptedDataLength);\r\n };\r\n\r\n Scheme.prototype.verify = function (buffer, signature, signature_encoding) {\r\n if (signature_encoding) {\r\n signature = Buffer.from(signature, signature_encoding);\r\n }\r\n signature = new BigInteger(signature);\r\n\r\n var emLen = Math.ceil((this.key.keySize - 1) / 8);\r\n var m = this.key.$doPublic(signature).toBuffer(emLen);\r\n\r\n var mHash = crypt.createHash(this.options.signingSchemeOptions.hash || DEFAULT_HASH_FUNCTION);\r\n mHash.update(buffer);\r\n\r\n return this.emsa_pss_verify(mHash.digest(), m, this.key.keySize - 1);\r\n };\r\n\r\n /*\r\n * https://tools.ietf.org/html/rfc3447#section-9.1.1\r\n *\r\n * mHash\t[Buffer]\tHashed message to encode\r\n * emBits\t[uint]\t\tMaximum length of output in bits. Must be at least 8hLen + 8sLen + 9 (hLen = Hash digest length in bytes | sLen = length of salt in bytes)\r\n * @returns {Buffer} The encoded message\r\n */\r\n Scheme.prototype.emsa_pss_encode = function (mHash, emBits) {\r\n var hash = this.options.signingSchemeOptions.hash || DEFAULT_HASH_FUNCTION;\r\n var mgf = this.options.signingSchemeOptions.mgf || OAEP.eme_oaep_mgf1;\r\n var sLen = this.options.signingSchemeOptions.saltLength || DEFAULT_SALT_LENGTH;\r\n\r\n var hLen = OAEP.digestLength[hash];\r\n var emLen = Math.ceil(emBits / 8);\r\n\r\n if (emLen < hLen + sLen + 2) {\r\n throw new Error(\"Output length passed to emBits(\" + emBits + \") is too small for the options \" +\r\n \"specified(\" + hash + \", \" + sLen + \"). To fix this issue increase the value of emBits. (minimum size: \" +\r\n (8 * hLen + 8 * sLen + 9) + \")\"\r\n );\r\n }\r\n\r\n var salt = crypt.randomBytes(sLen);\r\n\r\n var Mapostrophe = Buffer.alloc(8 + hLen + sLen);\r\n Mapostrophe.fill(0, 0, 8);\r\n mHash.copy(Mapostrophe, 8);\r\n salt.copy(Mapostrophe, 8 + mHash.length);\r\n\r\n var H = crypt.createHash(hash);\r\n H.update(Mapostrophe);\r\n H = H.digest();\r\n\r\n var PS = Buffer.alloc(emLen - salt.length - hLen - 2);\r\n PS.fill(0);\r\n\r\n var DB = Buffer.alloc(PS.length + 1 + salt.length);\r\n PS.copy(DB);\r\n DB[PS.length] = 0x01;\r\n salt.copy(DB, PS.length + 1);\r\n\r\n var dbMask = mgf(H, DB.length, hash);\r\n\r\n // XOR DB and dbMask together\r\n var maskedDB = Buffer.alloc(DB.length);\r\n for (var i = 0; i < dbMask.length; i++) {\r\n maskedDB[i] = DB[i] ^ dbMask[i];\r\n }\r\n\r\n var bits = 8 * emLen - emBits;\r\n var mask = 255 ^ (255 >> 8 - bits << 8 - bits);\r\n maskedDB[0] = maskedDB[0] & mask;\r\n\r\n var EM = Buffer.alloc(maskedDB.length + H.length + 1);\r\n maskedDB.copy(EM, 0);\r\n H.copy(EM, maskedDB.length);\r\n EM[EM.length - 1] = 0xbc;\r\n\r\n return EM;\r\n };\r\n\r\n /*\r\n * https://tools.ietf.org/html/rfc3447#section-9.1.2\r\n *\r\n * mHash\t[Buffer]\tHashed message\r\n * EM\t\t[Buffer]\tSignature\r\n * emBits\t[uint]\t\tLength of EM in bits. Must be at least 8hLen + 8sLen + 9 to be a valid signature. (hLen = Hash digest length in bytes | sLen = length of salt in bytes)\r\n * @returns {Boolean} True if signature(EM) matches message(M)\r\n */\r\n Scheme.prototype.emsa_pss_verify = function (mHash, EM, emBits) {\r\n var hash = this.options.signingSchemeOptions.hash || DEFAULT_HASH_FUNCTION;\r\n var mgf = this.options.signingSchemeOptions.mgf || OAEP.eme_oaep_mgf1;\r\n var sLen = this.options.signingSchemeOptions.saltLength || DEFAULT_SALT_LENGTH;\r\n\r\n var hLen = OAEP.digestLength[hash];\r\n var emLen = Math.ceil(emBits / 8);\r\n\r\n if (emLen < hLen + sLen + 2 || EM[EM.length - 1] != 0xbc) {\r\n return false;\r\n }\r\n\r\n var DB = Buffer.alloc(emLen - hLen - 1);\r\n EM.copy(DB, 0, 0, emLen - hLen - 1);\r\n\r\n var mask = 0;\r\n for (var i = 0, bits = 8 * emLen - emBits; i < bits; i++) {\r\n mask |= 1 << (7 - i);\r\n }\r\n\r\n if ((DB[0] & mask) !== 0) {\r\n return false;\r\n }\r\n\r\n var H = EM.slice(emLen - hLen - 1, emLen - 1);\r\n var dbMask = mgf(H, DB.length, hash);\r\n\r\n // Unmask DB\r\n for (i = 0; i < DB.length; i++) {\r\n DB[i] ^= dbMask[i];\r\n }\r\n\r\n bits = 8 * emLen - emBits;\r\n mask = 255 ^ (255 >> 8 - bits << 8 - bits);\r\n DB[0] = DB[0] & mask;\r\n\r\n // Filter out padding\r\n for (i = 0; DB[i] === 0 && i < DB.length; i++);\r\n if (DB[i] != 1) {\r\n return false;\r\n }\r\n\r\n var salt = DB.slice(DB.length - sLen);\r\n\r\n var Mapostrophe = Buffer.alloc(8 + hLen + sLen);\r\n Mapostrophe.fill(0, 0, 8);\r\n mHash.copy(Mapostrophe, 8);\r\n salt.copy(Mapostrophe, 8 + mHash.length);\r\n\r\n var Hapostrophe = crypt.createHash(hash);\r\n Hapostrophe.update(Mapostrophe);\r\n Hapostrophe = Hapostrophe.digest();\r\n\r\n return H.toString(\"hex\") === Hapostrophe.toString(\"hex\");\r\n };\r\n\r\n return new Scheme(key, options);\r\n};\r\n","module.exports = {\r\n pkcs1: require('./pkcs1'),\r\n pkcs1_oaep: require('./oaep'),\r\n pss: require('./pss'),\r\n\r\n /**\r\n * Check if scheme has padding methods\r\n * @param scheme {string}\r\n * @returns {Boolean}\r\n */\r\n isEncryption: function (scheme) {\r\n return module.exports[scheme] && module.exports[scheme].isEncryption;\r\n },\r\n\r\n /**\r\n * Check if scheme has sign/verify methods\r\n * @param scheme {string}\r\n * @returns {Boolean}\r\n */\r\n isSignature: function (scheme) {\r\n return module.exports[scheme] && module.exports[scheme].isSignature;\r\n }\r\n};","/*\n * Utils functions\n *\n */\n\nvar crypt = require('crypto');\n\n/**\n * Break string str each maxLen symbols\n * @param str\n * @param maxLen\n * @returns {string}\n */\nmodule.exports.linebrk = function (str, maxLen) {\n var res = '';\n var i = 0;\n while (i + maxLen < str.length) {\n res += str.substring(i, i + maxLen) + \"\\n\";\n i += maxLen;\n }\n return res + str.substring(i, str.length);\n};\n\nmodule.exports.detectEnvironment = function () {\n if (typeof(window) !== 'undefined' && window && !(process && process.title === 'node')) {\n return 'browser';\n }\n\n return 'node';\n};\n\n/**\n * Trying get a 32-bit unsigned integer from the partial buffer\n * @param buffer\n * @param offset\n * @returns {Number}\n */\nmodule.exports.get32IntFromBuffer = function (buffer, offset) {\n offset = offset || 0;\n var size = 0;\n if ((size = buffer.length - offset) > 0) {\n if (size >= 4) {\n return buffer.readUIntBE(offset, size);\n } else {\n var res = 0;\n for (var i = offset + size, d = 0; i > offset; i--, d += 2) {\n res += buffer[i - 1] * Math.pow(16, d);\n }\n return res;\n }\n } else {\n return NaN;\n }\n};\n\nmodule.exports._ = {\n isObject: function (value) {\n var type = typeof value;\n return !!value && (type == 'object' || type == 'function');\n },\n\n isString: function (value) {\n return typeof value == 'string' || value instanceof String;\n },\n\n isNumber: function (value) {\n return typeof value == 'number' || !isNaN(parseFloat(value)) && isFinite(value);\n },\n\n /**\n * Returns copy of `obj` without `removeProp` field.\n * @param obj\n * @param removeProp\n * @returns Object\n */\n omit: function (obj, removeProp) {\n var newObj = {};\n for (var prop in obj) {\n if (!obj.hasOwnProperty(prop) || prop === removeProp) {\n continue;\n }\n newObj[prop] = obj[prop];\n }\n\n return newObj;\n }\n};\n\n/**\n * Strips everything around the opening and closing lines, including the lines\n * themselves.\n */\nmodule.exports.trimSurroundingText = function (data, opening, closing) {\n var trimStartIndex = 0;\n var trimEndIndex = data.length;\n\n var openingBoundaryIndex = data.indexOf(opening);\n if (openingBoundaryIndex >= 0) {\n trimStartIndex = openingBoundaryIndex + opening.length;\n }\n\n var closingBoundaryIndex = data.indexOf(closing, openingBoundaryIndex);\n if (closingBoundaryIndex >= 0) {\n trimEndIndex = closingBoundaryIndex;\n }\n\n return data.substring(trimStartIndex, trimEndIndex);\n}"],"names":["base64","ieee754","customInspectSymbol","Symbol","exports","Buffer","K_MAX_LENGTH","typedArraySupport","arr","Uint8Array","proto","foo","Object","setPrototypeOf","prototype","e","createBuffer","length","RangeError","buf","arg","encodingOrOffset","TypeError","allocUnsafe","from","value","fromString","ArrayBuffer","isView","fromArrayView","isInstance","buffer","fromArrayBuffer","SharedArrayBuffer","valueOf","b","fromObject","toPrimitive","assertSize","size","alloc","fill","encoding","undefined","checked","string","isEncoding","byteLength","actual","write","slice","fromArrayLike","array","i","arrayView","copy","byteOffset","obj","isBuffer","len","numberIsNaN","type","Array","isArray","data","toString","SlowBuffer","mustMatch","arguments","loweredCase","utf8ToBytes","base64ToBytes","toLowerCase","slowToString","start","end","this","hexSlice","utf8Slice","asciiSlice","latin1Slice","base64Slice","utf16leSlice","swap","n","m","bidirectionalIndexOf","val","dir","arrayIndexOf","indexOf","call","lastIndexOf","indexSize","arrLength","valLength","String","read","readUInt16BE","foundIndex","found","j","hexWrite","offset","Number","remaining","strLen","parsed","parseInt","substr","utf8Write","blitBuffer","asciiWrite","asciiToBytes","base64Write","ucs2Write","utf16leToBytes","fromByteArray","Math","min","res","firstByte","codePoint","bytesPerSequence","secondByte","thirdByte","fourthByte","tempCodePoint","push","decodeCodePointsArray","TYPED_ARRAY_SUPPORT","console","error","defineProperty","enumerable","get","poolSize","allocUnsafeSlow","_isBuffer","compare","a","x","y","concat","list","pos","set","swap16","swap32","swap64","apply","toLocaleString","equals","inspect","str","max","replace","trim","target","thisStart","thisEnd","thisCopy","targetCopy","includes","isFinite","Error","toJSON","_arr","MAX_ARGUMENTS_LENGTH","codePoints","fromCharCode","ret","out","hexSliceLookupTable","bytes","checkOffset","ext","checkInt","wrtBigUInt64LE","checkIntBI","lo","BigInt","hi","wrtBigUInt64BE","checkIEEE754","writeFloat","littleEndian","noAssert","writeDouble","newBuf","subarray","readUintLE","readUIntLE","mul","readUintBE","readUIntBE","readUint8","readUInt8","readUint16LE","readUInt16LE","readUint16BE","readUint32LE","readUInt32LE","readUint32BE","readUInt32BE","readBigUInt64LE","defineBigIntMethod","validateNumber","first","last","boundsError","readBigUInt64BE","readIntLE","pow","readIntBE","readInt8","readInt16LE","readInt16BE","readInt32LE","readInt32BE","readBigInt64LE","readBigInt64BE","readFloatLE","readFloatBE","readDoubleLE","readDoubleBE","writeUintLE","writeUIntLE","maxBytes","writeUintBE","writeUIntBE","writeUint8","writeUInt8","writeUint16LE","writeUInt16LE","writeUint16BE","writeUInt16BE","writeUint32LE","writeUInt32LE","writeUint32BE","writeUInt32BE","writeBigUInt64LE","writeBigUInt64BE","writeIntLE","limit","sub","writeIntBE","writeInt8","writeInt16LE","writeInt16BE","writeInt32LE","writeInt32BE","writeBigInt64LE","writeBigInt64BE","writeFloatLE","writeFloatBE","writeDoubleLE","writeDoubleBE","targetStart","copyWithin","code","charCodeAt","errors","E","sym","getMessage","Base","constructor","super","writable","configurable","name","stack","message","addNumericalSeparator","checkBounds","range","ERR_OUT_OF_RANGE","ERR_INVALID_ARG_TYPE","floor","ERR_BUFFER_OUT_OF_BOUNDS","input","msg","received","isInteger","abs","INVALID_BASE64_RE","base64clean","split","units","Infinity","leadSurrogate","byteArray","c","toByteArray","src","dst","alphabet","table","i16","fn","BufferBigIntNotDefined","constants","rsa","_","utils","schemes","formats","RSA_NO_PADDING","module","SUPPORTED_HASH_ALGORITHMS","node10","node","iojs","browser","DEFAULT_ENCRYPTION_SCHEME","DEFAULT_SIGNING_SCHEME","DEFAULT_EXPORT_FORMAT","EXPORT_FORMAT_ALIASES","NodeRSA","key","format","options","isObject","$options","signingScheme","signingSchemeOptions","hash","saltLength","encryptionScheme","encryptionSchemeOptions","label","environment","detectEnvironment","rsaUtils","keyPair","Key","$cache","isString","importKey","generateKeyPair","setOptions","scheme","omit","isSignature","isEncryption","bits","exp","generate","keyData","detectAndImport","exportKey","detectAndExport","isPrivate","isPublic","strict","isEmpty","d","encrypt","source_encoding","$$encryptKey","decrypt","$$decryptKey","encryptPrivate","decryptPublic","usePrivate","$getDataForEncrypt","usePublic","$getDecryptedData","sign","verify","signature","signature_encoding","getKeySize","keySize","getMaxMessageSize","maxMessageLength","isNumber","JSON","stringify","parse","crypt","getEngine","engine","publicEncrypt","privateDecrypt","privateEncrypt","publicDecrypt","crypto","pkcs1Scheme","pkcs1","makeScheme","padding","RSA_PKCS1_PADDING","RSA_PKCS1_OAEP_PADDING","pkcs0pad","pkcs0unpad","BigInteger","encPad","$doPrivate","$doPublic","toBuffer","encryptedDataLength","encUnPad","jsEngine","privateExport","p","q","dmp1","dmq1","coeff","privateImport","setPrivate","publicExport","publicImport","setPublic","autoImport","formatParse","keyType","keyOpt","pkcs8","components","openssh","isPrivateExport","isPrivateImport","isPublicExport","isPublicImport","fmt","PRIVATE_OPENING_BOUNDARY","PRIVATE_CLOSING_BOUNDARY","readOpenSSHKeyString","reader","off","writeOpenSSHKeyString","writer","nbuf","ebuf","dbuf","coeffbuf","pbuf","qbuf","commentbuf","sshcomment","pubkeyLength","privateKeyLength","paddingLength","ceil","pad","linebrk","pem","trimSurroundingText","dint","qint","pint","dp","mod","subtract","ONE","dq","comment","substring","pemEnd","test","ber","PUBLIC_OPENING_BOUNDARY","PUBLIC_CLOSING_BOUNDARY","Writer","startSequence","writeInt","writeBuffer","endSequence","Reader","readSequence","readString","bodyWriter","body","PUBLIC_RSA_OID","writeOID","writeNull","readInt","header","readOID","writeByte","readByte","dbits","fromNumber","fromBuffer","nbi","am3","w","xl","xh","l","h","am","DB","DM","DV","BI_FP","FV","F1","F2","rr","vv","BI_RM","BI_RC","int2char","charAt","intAt","s","bnpCopyTo","r","t","bnpFromInt","nbv","fromInt","bnpFromString","radix","unsigned","k","fromRadix","mi","sh","clamp","ZERO","subTo","bnpFromByteArray","bnpFromBuffer","bnpClamp","bnToString","negate","toRadix","km","bnNegate","bnAbs","bnCompareTo","nbits","bnBitLength","bnpDLShiftTo","bnpDRShiftTo","bnpLShiftTo","bs","cbs","bm","ds","bnpRShiftTo","bnpSubTo","bnpMultiplyTo","bnpSquareTo","bnpDivRemTo","pm","pt","copyTo","ts","ms","nsh","lShiftTo","ys","y0","yt","d1","d2","dlShiftTo","compareTo","qd","drShiftTo","rShiftTo","bnMod","divRemTo","Classic","cConvert","cRevert","cReduce","cMulTo","multiplyTo","reduce","cSqrTo","squareTo","bnpInvDigit","Montgomery","mp","invDigit","mpl","mph","um","mt2","montConvert","montRevert","montReduce","u0","montSqrTo","montMulTo","bnpIsEven","bnpExp","z","r2","g","convert","sqrTo","mulTo","revert","bnModPowInt","isEven","bnClone","bnIntValue","bnByteValue","bnShortValue","bnpChunkSize","LN2","log","bnSigNum","bnpToRadix","signum","cs","chunkSize","intValue","bnpFromRadix","dMultiply","dAddOffset","bnpFromNumber","testBit","bitwiseTo","shiftLeft","op_or","isProbablePrime","bitLength","randomBytes","bnToByteArray","bnToBuffer","trimOrSize","padded","bnEquals","bnMin","bnMax","bnpBitwiseTo","op","f","op_and","bnAnd","bnOr","op_xor","bnXor","op_andnot","bnAndNot","bnNot","bnShiftLeft","bnShiftRight","lbit","bnGetLowestSetBit","cbit","bnBitCount","bnTestBit","bnpChangeBit","bnSetBit","changeBit","bnClearBit","bnFlipBit","bnpAddTo","bnAdd","addTo","bnSubtract","bnMultiply","bnSquare","bnDivide","bnRemainder","bnDivideAndRemainder","bnpDMultiply","bnpDAddOffset","NullExp","nNop","nMulTo","nSqrTo","bnPow","bnpMultiplyLowerTo","bnpMultiplyUpperTo","Barrett","q3","mu","divide","barrettConvert","barrettRevert","barrettReduce","multiplyUpperTo","multiplyLowerTo","barrettSqrTo","barrettMulTo","bnModPow","k1","g2","is1","bnGCD","clone","getLowestSetBit","bnpModInt","bnModInverse","ac","u","v","add","lowprimes","lplim","bnIsProbablePrime","modInt","millerRabin","bnpMillerRabin","n1","shiftRight","random","modPow","modPowInt","byteValue","shortValue","and","or","xor","andNot","not","bitCount","setBit","clearBit","flipBit","multiply","remainder","divideAndRemainder","modInverse","gcd","square","encryptEngines","RSAKey","signingSchemeProvider","encryptionSchemeProvider","encryptEngine","B","qs","ee","p1","q1","phi","$$recalculateCache","N","D","P","Q","DP","DQ","C","get32IntFromBuffer","xp","xq","buffers","results","bufferSize","buffersCount","dividedSize","bufNum","result","cache","keyBitLength","keyByteLength","digestLength","md4","md5","ripemd160","rmd160","sha1","sha224","sha256","sha384","sha512","DEFAULT_HASH_FUNCTION","eme_oaep_mgf1","seed","maskLength","hashFunction","hLen","count","T","createHash","update","digest","Scheme","mgf","emLen","lHash","PS","mask","em","lHashEM","SIGN_INFO_HEAD","md2","SIGN_ALG_TO_HASH_ALIASES","filled","rand","unPad","hashAlgorithm","hasher","pkcs1pad","signer","createSign","toUpperCase","verifier","createVerify","hashBuf","DEFAULT_SALT_LENGTH","OAEP","mHash","encoded","emsa_pss_encode","emsa_pss_verify","emBits","sLen","salt","Mapostrophe","H","dbMask","maskedDB","EM","Hapostrophe","pkcs1_oaep","pss","maxLen","window","process","title","NaN","isNaN","parseFloat","removeProp","newObj","prop","hasOwnProperty","opening","closing","trimStartIndex","trimEndIndex","openingBoundaryIndex","closingBoundaryIndex"],"sourceRoot":""}