diff --git a/.idea/codeStyles/Project.xml b/.idea/codeStyles/Project.xml new file mode 100644 index 0000000..681f41a --- /dev/null +++ b/.idea/codeStyles/Project.xml @@ -0,0 +1,116 @@ + + + + + + + +
+ + + + xmlns:android + + ^$ + + + +
+
+ + + + xmlns:.* + + ^$ + + + BY_NAME + +
+
+ + + + .*:id + + http://schemas.android.com/apk/res/android + + + +
+
+ + + + .*:name + + http://schemas.android.com/apk/res/android + + + +
+
+ + + + name + + ^$ + + + +
+
+ + + + style + + ^$ + + + +
+
+ + + + .* + + ^$ + + + BY_NAME + +
+
+ + + + .* + + http://schemas.android.com/apk/res/android + + + ANDROID_ATTRIBUTE_ORDER + +
+
+ + + + .* + + .* + + + BY_NAME + +
+
+
+
+
+
\ No newline at end of file diff --git a/build.gradle b/build.gradle index e60fc0a..db77778 100644 --- a/build.gradle +++ b/build.gradle @@ -7,8 +7,8 @@ buildscript { } dependencies { - classpath 'com.android.tools.build:gradle:3.5.1' - classpath 'com.github.dcendents:android-maven-gradle-plugin:1.5' + classpath 'com.android.tools.build:gradle:3.5.3' + classpath 'com.github.dcendents:android-maven-gradle-plugin:2.1' // NOTE: Do not place your application dependencies here; they belong // in the individual module build.gradle files diff --git a/sdk/src/main/assets/cruxpay-0.1.9.js b/sdk/src/main/assets/cruxpay-0.2.4.js similarity index 87% rename from sdk/src/main/assets/cruxpay-0.1.9.js rename to sdk/src/main/assets/cruxpay-0.2.4.js index 1525231..9cc921e 100644 --- a/sdk/src/main/assets/cruxpay-0.1.9.js +++ b/sdk/src/main/assets/cruxpay-0.2.4.js @@ -845,4219 +845,6233 @@ try { Function("r", "regeneratorRuntime = r")(runtime); } -},{}],"BrLT":[function(require,module,exports) { -module.exports = { - "CONFIG_MODE": "PROD", - "BLOCKSTACK": { - "SUBDOMAIN_REGISTRAR": "https://registrar.cruxpay.com", - "GAIA_HUB": "https://hub.cruxpay.com", - "BNS_NODES": ["https://core.blockstack.org", "https://bns.cruxpay.com"] - } -}; -},{}],"C9JJ":[function(require,module,exports) { -"use strict"; - -Object.defineProperty(exports, "__esModule", { - value: true -}); -exports.default = void 0; - -var _config = _interopRequireDefault(require("./config.json")); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } +},{}],"a1XM":[function(require,module,exports) { +var global = arguments[3]; -// @ts-ignore -var _default = _config.default; -exports.default = _default; -},{"./config.json":"BrLT"}],"S14b":[function(require,module,exports) { -"use strict"; +/** + * Lodash (Custom Build) + * Build: `lodash modularize exports="npm" -o ./` + * Copyright JS Foundation and other contributors + * Released under MIT license + * Based on Underscore.js 1.8.3 + * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors + */ -Object.defineProperty(exports, "__esModule", { - value: true -}); -exports.BaseError = void 0; +/** Used as the size to enable large array optimizations. */ +var LARGE_ARRAY_SIZE = 200; -var __extends = void 0 && (void 0).__extends || function () { - var _extendStatics = function extendStatics(d, b) { - _extendStatics = Object.setPrototypeOf || { - __proto__: [] - } instanceof Array && function (d, b) { - d.__proto__ = b; - } || function (d, b) { - for (var p in b) { - if (b.hasOwnProperty(p)) d[p] = b[p]; - } - }; +/** Used to stand-in for `undefined` hash values. */ +var HASH_UNDEFINED = '__lodash_hash_undefined__'; - return _extendStatics(d, b); - }; +/** Used to compose bitmasks for value comparisons. */ +var COMPARE_PARTIAL_FLAG = 1, + COMPARE_UNORDERED_FLAG = 2; - return function (d, b) { - _extendStatics(d, b); +/** Used as references for various `Number` constants. */ +var MAX_SAFE_INTEGER = 9007199254740991; - function __() { - this.constructor = d; - } +/** `Object#toString` result references. */ +var argsTag = '[object Arguments]', + arrayTag = '[object Array]', + asyncTag = '[object AsyncFunction]', + boolTag = '[object Boolean]', + dateTag = '[object Date]', + errorTag = '[object Error]', + funcTag = '[object Function]', + genTag = '[object GeneratorFunction]', + mapTag = '[object Map]', + numberTag = '[object Number]', + nullTag = '[object Null]', + objectTag = '[object Object]', + promiseTag = '[object Promise]', + proxyTag = '[object Proxy]', + regexpTag = '[object RegExp]', + setTag = '[object Set]', + stringTag = '[object String]', + symbolTag = '[object Symbol]', + undefinedTag = '[object Undefined]', + weakMapTag = '[object WeakMap]'; - d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); - }; -}(); +var arrayBufferTag = '[object ArrayBuffer]', + dataViewTag = '[object DataView]', + float32Tag = '[object Float32Array]', + float64Tag = '[object Float64Array]', + int8Tag = '[object Int8Array]', + int16Tag = '[object Int16Array]', + int32Tag = '[object Int32Array]', + uint8Tag = '[object Uint8Array]', + uint8ClampedTag = '[object Uint8ClampedArray]', + uint16Tag = '[object Uint16Array]', + uint32Tag = '[object Uint32Array]'; -var BaseError = -/** @class */ -function (_super) { - __extends(BaseError, _super); +/** + * Used to match `RegExp` + * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns). + */ +var reRegExpChar = /[\\^$.*+?()[\]{}|]/g; - function BaseError(cause, message, code, skipStackStructuring) { - var _newTarget = this.constructor; +/** Used to detect host constructors (Safari). */ +var reIsHostCtor = /^\[object .+?Constructor\]$/; - if (skipStackStructuring === void 0) { - skipStackStructuring = false; - } +/** Used to detect unsigned integer values. */ +var reIsUint = /^(?:0|[1-9]\d*)$/; - var _this = _super.call(this, message) || this; +/** Used to identify `toStringTag` values of typed arrays. */ +var typedArrayTags = {}; +typedArrayTags[float32Tag] = typedArrayTags[float64Tag] = +typedArrayTags[int8Tag] = typedArrayTags[int16Tag] = +typedArrayTags[int32Tag] = typedArrayTags[uint8Tag] = +typedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] = +typedArrayTags[uint32Tag] = true; +typedArrayTags[argsTag] = typedArrayTags[arrayTag] = +typedArrayTags[arrayBufferTag] = typedArrayTags[boolTag] = +typedArrayTags[dataViewTag] = typedArrayTags[dateTag] = +typedArrayTags[errorTag] = typedArrayTags[funcTag] = +typedArrayTags[mapTag] = typedArrayTags[numberTag] = +typedArrayTags[objectTag] = typedArrayTags[regexpTag] = +typedArrayTags[setTag] = typedArrayTags[stringTag] = +typedArrayTags[weakMapTag] = false; - Object.setPrototypeOf(_this, _newTarget.prototype); - _this.name = _this.constructor.name; +/** Detect free variable `global` from Node.js. */ +var freeGlobal = typeof global == 'object' && global && global.Object === Object && global; - if (!skipStackStructuring) { - // Appending code as stack prefix if available - if (code && _this.stack) { - _this.stack = ("(" + code + ") ").concat(_this.stack); - } // Preserving the stack of the cause for ease of debugging +/** Detect free variable `self`. */ +var freeSelf = typeof self == 'object' && self && self.Object === Object && self; +/** Used as a reference to the global object. */ +var root = freeGlobal || freeSelf || Function('return this')(); - if (_this.stack && cause && cause.stack) { - _this.stack = _this.stack.concat("\n\n").concat(cause.stack); - } - } +/** Detect free variable `exports`. */ +var freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports; - return _this; - } +/** Detect free variable `module`. */ +var freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module; - return BaseError; -}(Error); +/** Detect the popular CommonJS extension `module.exports`. */ +var moduleExports = freeModule && freeModule.exports === freeExports; -exports.BaseError = BaseError; -},{}],"JIdw":[function(require,module,exports) { -"use strict"; +/** Detect free variable `process` from Node.js. */ +var freeProcess = moduleExports && freeGlobal.process; -Object.defineProperty(exports, "__esModule", { - value: true -}); -exports.PackageErrorCode = void 0; -var PackageErrorCode; -exports.PackageErrorCode = PackageErrorCode; +/** Used to access faster Node.js helpers. */ +var nodeUtil = (function() { + try { + return freeProcess && freeProcess.binding && freeProcess.binding('util'); + } catch (e) {} +}()); -(function (PackageErrorCode) { - // 1000s: NameService errors - PackageErrorCode[PackageErrorCode["BnsResolutionFailed"] = 1001] = "BnsResolutionFailed"; - PackageErrorCode[PackageErrorCode["UserDoesNotExist"] = 1002] = "UserDoesNotExist"; - PackageErrorCode[PackageErrorCode["NameIntegrityCheckFailed"] = 1003] = "NameIntegrityCheckFailed"; - PackageErrorCode[PackageErrorCode["BnsEmptyData"] = 1004] = "BnsEmptyData"; - PackageErrorCode[PackageErrorCode["AddressNotAvailable"] = 1005] = "AddressNotAvailable"; - PackageErrorCode[PackageErrorCode["AssetIDNotAvailable"] = 1006] = "AssetIDNotAvailable"; - PackageErrorCode[PackageErrorCode["DecryptionFailed"] = 1007] = "DecryptionFailed"; - PackageErrorCode[PackageErrorCode["IdentityMismatch"] = 1008] = "IdentityMismatch"; - PackageErrorCode[PackageErrorCode["GetNamesByAddressFailed"] = 1009] = "GetNamesByAddressFailed"; - PackageErrorCode[PackageErrorCode["KeyPairMismatch"] = 1010] = "KeyPairMismatch"; - PackageErrorCode[PackageErrorCode["DifferentWalletCruxID"] = 1011] = "DifferentWalletCruxID"; - PackageErrorCode[PackageErrorCode["GetAddressMapFailed"] = 1012] = "GetAddressMapFailed"; // 2000s: Gaia errors +/* Node.js helper references. */ +var nodeIsTypedArray = nodeUtil && nodeUtil.isTypedArray; - PackageErrorCode[PackageErrorCode["GaiaUploadFailed"] = 2001] = "GaiaUploadFailed"; - PackageErrorCode[PackageErrorCode["GaiaCruxPayUploadFailed"] = 2002] = "GaiaCruxPayUploadFailed"; - PackageErrorCode[PackageErrorCode["GaiaClientConfigUploadFailed"] = 2003] = "GaiaClientConfigUploadFailed"; - PackageErrorCode[PackageErrorCode["GaiaProfileUploadFailed"] = 2005] = "GaiaProfileUploadFailed"; - PackageErrorCode[PackageErrorCode["GaiaCruxPayGetFailed"] = 2102] = "GaiaCruxPayGetFailed"; - PackageErrorCode[PackageErrorCode["GaiaClientConfigGetFailed"] = 2103] = "GaiaClientConfigGetFailed"; - PackageErrorCode[PackageErrorCode["GaiaGetFileFailed"] = 2105] = "GaiaGetFileFailed"; - PackageErrorCode[PackageErrorCode["TokenVerificationFailed"] = 2106] = "TokenVerificationFailed"; - PackageErrorCode[PackageErrorCode["GaiaEmptyResponse"] = 2107] = "GaiaEmptyResponse"; // 3000s: Registry errors +/** + * A specialized version of `_.filter` for arrays without support for + * iteratee shorthands. + * + * @private + * @param {Array} [array] The array to iterate over. + * @param {Function} predicate The function invoked per iteration. + * @returns {Array} Returns the new filtered array. + */ +function arrayFilter(array, predicate) { + var index = -1, + length = array == null ? 0 : array.length, + resIndex = 0, + result = []; - PackageErrorCode[PackageErrorCode["SubdomainRegistrationFailed"] = 3001] = "SubdomainRegistrationFailed"; - PackageErrorCode[PackageErrorCode["SubdomainRegistrationAcknowledgementFailed"] = 3002] = "SubdomainRegistrationAcknowledgementFailed"; - PackageErrorCode[PackageErrorCode["FetchPendingRegistrationsByAddressFailed"] = 3003] = "FetchPendingRegistrationsByAddressFailed"; // Validating user input errors + while (++index < length) { + var value = array[index]; + if (predicate(value, index, array)) { + result[resIndex++] = value; + } + } + return result; +} - PackageErrorCode[PackageErrorCode["ExpectedEncryptionKeyValue"] = 4001] = "ExpectedEncryptionKeyValue"; - PackageErrorCode[PackageErrorCode["SubdomainRegexMatchFailure"] = 4002] = "SubdomainRegexMatchFailure"; - PackageErrorCode[PackageErrorCode["SubdomainLengthCheckFailure"] = 4003] = "SubdomainLengthCheckFailure"; - PackageErrorCode[PackageErrorCode["AddressMappingDecodingFailure"] = 4004] = "AddressMappingDecodingFailure"; - PackageErrorCode[PackageErrorCode["CruxIdNamespaceValidation"] = 4005] = "CruxIdNamespaceValidation"; - PackageErrorCode[PackageErrorCode["CruxIdInvalidStructure"] = 4006] = "CruxIdInvalidStructure"; - PackageErrorCode[PackageErrorCode["BlockstackIdNamespaceValidation"] = 4007] = "BlockstackIdNamespaceValidation"; - PackageErrorCode[PackageErrorCode["BlockstackIdInvalidStructure"] = 4008] = "BlockstackIdInvalidStructure"; - PackageErrorCode[PackageErrorCode["BlockstackIdInvalidSubdomainForTranslation"] = 4009] = "BlockstackIdInvalidSubdomainForTranslation"; - PackageErrorCode[PackageErrorCode["BlockstackIdInvalidDomainForTranslation"] = 4010] = "BlockstackIdInvalidDomainForTranslation"; - PackageErrorCode[PackageErrorCode["CurrencyDoesNotExistInClientMapping"] = 4011] = "CurrencyDoesNotExistInClientMapping"; - PackageErrorCode[PackageErrorCode["ExistingCruxIDFound"] = 4012] = "ExistingCruxIDFound"; - PackageErrorCode[PackageErrorCode["CruxIDUnavailable"] = 4013] = "CruxIDUnavailable"; - PackageErrorCode[PackageErrorCode["InvalidPrivateKeyFormat"] = 4014] = "InvalidPrivateKeyFormat"; - PackageErrorCode[PackageErrorCode["PrivateKeyRequired"] = 4015] = "PrivateKeyRequired"; // Internal errors +/** + * Appends the elements of `values` to `array`. + * + * @private + * @param {Array} array The array to modify. + * @param {Array} values The values to append. + * @returns {Array} Returns `array`. + */ +function arrayPush(array, values) { + var index = -1, + length = values.length, + offset = array.length; - PackageErrorCode[PackageErrorCode["CouldNotFindBlockstackConfigurationServiceClientConfig"] = 5001] = "CouldNotFindBlockstackConfigurationServiceClientConfig"; - PackageErrorCode[PackageErrorCode["CouldNotFindKeyPairToRestoreIdentity"] = 5002] = "CouldNotFindKeyPairToRestoreIdentity"; - PackageErrorCode[PackageErrorCode["CouldNotValidateZoneFile"] = 5003] = "CouldNotValidateZoneFile"; - PackageErrorCode[PackageErrorCode["CouldNotFindIdentityKeyPairToPutAddressMapping"] = 5004] = "CouldNotFindIdentityKeyPairToPutAddressMapping"; - PackageErrorCode[PackageErrorCode["CouldNotFindAssetListInClientConfig"] = 5005] = "CouldNotFindAssetListInClientConfig"; - PackageErrorCode[PackageErrorCode["CouldNotFindKeyPairToRegisterName"] = 5006] = "CouldNotFindKeyPairToRegisterName"; - PackageErrorCode[PackageErrorCode["ClientNotInitialized"] = 5007] = "ClientNotInitialized"; -})(PackageErrorCode || (exports.PackageErrorCode = PackageErrorCode = {})); -},{}],"Z94C":[function(require,module,exports) { -"use strict"; + while (++index < length) { + array[offset + index] = values[index]; + } + return array; +} -Object.defineProperty(exports, "__esModule", { - value: true -}); -exports.PackageError = void 0; +/** + * A specialized version of `_.some` for arrays without support for iteratee + * shorthands. + * + * @private + * @param {Array} [array] The array to iterate over. + * @param {Function} predicate The function invoked per iteration. + * @returns {boolean} Returns `true` if any element passes the predicate check, + * else `false`. + */ +function arraySome(array, predicate) { + var index = -1, + length = array == null ? 0 : array.length; -var _baseError = require("./base-error"); + while (++index < length) { + if (predicate(array[index], index, array)) { + return true; + } + } + return false; +} -var _packageErrorCode = require("./package-error-code"); +/** + * The base implementation of `_.times` without support for iteratee shorthands + * or max array length checks. + * + * @private + * @param {number} n The number of times to invoke `iteratee`. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Array} Returns the array of results. + */ +function baseTimes(n, iteratee) { + var index = -1, + result = Array(n); -var __extends = void 0 && (void 0).__extends || function () { - var _extendStatics = function extendStatics(d, b) { - _extendStatics = Object.setPrototypeOf || { - __proto__: [] - } instanceof Array && function (d, b) { - d.__proto__ = b; - } || function (d, b) { - for (var p in b) { - if (b.hasOwnProperty(p)) d[p] = b[p]; - } - }; + while (++index < n) { + result[index] = iteratee(index); + } + return result; +} - return _extendStatics(d, b); +/** + * The base implementation of `_.unary` without support for storing metadata. + * + * @private + * @param {Function} func The function to cap arguments for. + * @returns {Function} Returns the new capped function. + */ +function baseUnary(func) { + return function(value) { + return func(value); }; +} - return function (d, b) { - _extendStatics(d, b); +/** + * Checks if a `cache` value for `key` exists. + * + * @private + * @param {Object} cache The cache to query. + * @param {string} key The key of the entry to check. + * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. + */ +function cacheHas(cache, key) { + return cache.has(key); +} - function __() { - this.constructor = d; - } +/** + * Gets the value at `key` of `object`. + * + * @private + * @param {Object} [object] The object to query. + * @param {string} key The key of the property to get. + * @returns {*} Returns the property value. + */ +function getValue(object, key) { + return object == null ? undefined : object[key]; +} - d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); - }; -}(); +/** + * Converts `map` to its key-value pairs. + * + * @private + * @param {Object} map The map to convert. + * @returns {Array} Returns the key-value pairs. + */ +function mapToArray(map) { + var index = -1, + result = Array(map.size); -var PackageError = -/** @class */ -function (_super) { - __extends(PackageError, _super); + map.forEach(function(value, key) { + result[++index] = [key, value]; + }); + return result; +} - function PackageError(cause, message, code) { - var _this = _super.call(this, cause, message, code, true) || this; +/** + * Creates a unary function that invokes `func` with its argument transformed. + * + * @private + * @param {Function} func The function to wrap. + * @param {Function} transform The argument transform. + * @returns {Function} Returns the new function. + */ +function overArg(func, transform) { + return function(arg) { + return func(transform(arg)); + }; +} - _this.name = _this.constructor.name; - _this.message = message || ""; - _this.errorCode = code || 1000; // Changing the Error name printed in the stacktrace if code is given; +/** + * Converts `set` to an array of its values. + * + * @private + * @param {Object} set The set to convert. + * @returns {Array} Returns the values. + */ +function setToArray(set) { + var index = -1, + result = Array(set.size); - if (code) { - _this.name = _packageErrorCode.PackageErrorCode[code]; + set.forEach(function(value) { + result[++index] = value; + }); + return result; +} - if (_this.stack) { - // Appending code as stack prefix if available - _this.stack = ("(" + code + ") ").concat(_this.stack); - } - } // Stack trace structuring; +/** Used for built-in method references. */ +var arrayProto = Array.prototype, + funcProto = Function.prototype, + objectProto = Object.prototype; +/** Used to detect overreaching core-js shims. */ +var coreJsData = root['__core-js_shared__']; - if (_this.stack && cause && cause.stack) { - _this.stack = _this.stack.concat("\n\n").concat(cause.stack); - } +/** Used to resolve the decompiled source of functions. */ +var funcToString = funcProto.toString; - return _this; - } +/** Used to check objects for own properties. */ +var hasOwnProperty = objectProto.hasOwnProperty; - return PackageError; -}(_baseError.BaseError); +/** Used to detect methods masquerading as native. */ +var maskSrcKey = (function() { + var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || ''); + return uid ? ('Symbol(src)_1.' + uid) : ''; +}()); -exports.PackageError = PackageError; -},{"./base-error":"S14b","./package-error-code":"JIdw"}],"R1rB":[function(require,module,exports) { -"use strict"; +/** + * Used to resolve the + * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring) + * of values. + */ +var nativeObjectToString = objectProto.toString; -Object.defineProperty(exports, "__esModule", { - value: true -}); -exports.CruxClientError = void 0; +/** Used to detect if a method is native. */ +var reIsNative = RegExp('^' + + funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\$&') + .replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g, '$1.*?') + '$' +); -var _baseError = require("./base-error"); +/** Built-in value references. */ +var Buffer = moduleExports ? root.Buffer : undefined, + Symbol = root.Symbol, + Uint8Array = root.Uint8Array, + propertyIsEnumerable = objectProto.propertyIsEnumerable, + splice = arrayProto.splice, + symToStringTag = Symbol ? Symbol.toStringTag : undefined; -var _packageError = require("./package-error"); +/* Built-in method references for those with the same name as other `lodash` methods. */ +var nativeGetSymbols = Object.getOwnPropertySymbols, + nativeIsBuffer = Buffer ? Buffer.isBuffer : undefined, + nativeKeys = overArg(Object.keys, Object); -function _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } +/* Built-in method references that are verified to be native. */ +var DataView = getNative(root, 'DataView'), + Map = getNative(root, 'Map'), + Promise = getNative(root, 'Promise'), + Set = getNative(root, 'Set'), + WeakMap = getNative(root, 'WeakMap'), + nativeCreate = getNative(Object, 'create'); -var __extends = void 0 && (void 0).__extends || function () { - var _extendStatics = function extendStatics(d, b) { - _extendStatics = Object.setPrototypeOf || { - __proto__: [] - } instanceof Array && function (d, b) { - d.__proto__ = b; - } || function (d, b) { - for (var p in b) { - if (b.hasOwnProperty(p)) d[p] = b[p]; - } - }; +/** Used to detect maps, sets, and weakmaps. */ +var dataViewCtorString = toSource(DataView), + mapCtorString = toSource(Map), + promiseCtorString = toSource(Promise), + setCtorString = toSource(Set), + weakMapCtorString = toSource(WeakMap); - return _extendStatics(d, b); - }; +/** Used to convert symbols to primitives and strings. */ +var symbolProto = Symbol ? Symbol.prototype : undefined, + symbolValueOf = symbolProto ? symbolProto.valueOf : undefined; - return function (d, b) { - _extendStatics(d, b); +/** + * Creates a hash object. + * + * @private + * @constructor + * @param {Array} [entries] The key-value pairs to cache. + */ +function Hash(entries) { + var index = -1, + length = entries == null ? 0 : entries.length; - function __() { - this.constructor = d; - } - - d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); - }; -}(); - -var CruxClientError = -/** @class */ -function (_super) { - __extends(CruxClientError, _super); - - function CruxClientError(cause, errorMessage, errorCode) { - var _this = this; - - var message = errorMessage || ""; - _this = _super.call(this, cause, message, errorCode) || this; - _this.name = _this.constructor.name; - _this.errorCode = errorCode || CruxClientError.FALLBACK_ERROR_CODE; - return _this; + this.clear(); + while (++index < length) { + var entry = entries[index]; + this.set(entry[0], entry[1]); } +} - CruxClientError.fromError = function (error, messagePrefix) { - var msgPrefix = messagePrefix === undefined ? "" : messagePrefix + " : "; - - if (error instanceof CruxClientError) { - if (error.message !== undefined) { - error.message = msgPrefix + error.message; - } - - return error; - } else if (error instanceof _packageError.PackageError) { - return new CruxClientError(error, msgPrefix + error.message, error.errorCode); - } else if (typeof error === "string") { - return new CruxClientError(null, msgPrefix + error); - } else if (error instanceof Error) { - return new CruxClientError(error, msgPrefix + error.message); - } else { - throw new _baseError.BaseError(null, "Wrong instance type: " + _typeof(error)); - } - }; - - CruxClientError.FALLBACK_ERROR_CODE = 9000; - return CruxClientError; -}(_baseError.BaseError); - -exports.CruxClientError = CruxClientError; -},{"./base-error":"S14b","./package-error":"Z94C"}],"UOYu":[function(require,module,exports) { -"use strict"; - -Object.defineProperty(exports, "__esModule", { - value: true -}); -exports.ERROR_STRINGS = void 0; - -var _packageErrorCode = require("./package-error-code"); - -var _a; - -var ERROR_STRINGS = (_a = {}, _a[_packageErrorCode.PackageErrorCode.AddressMappingDecodingFailure] = "AddressMapping decoding failure", _a[_packageErrorCode.PackageErrorCode.AddressNotAvailable] = "Currency address not available for user", _a[_packageErrorCode.PackageErrorCode.AssetIDNotAvailable] = "AssetID doesn\'t exist in client mapping", _a[_packageErrorCode.PackageErrorCode.BlockstackIdInvalidStructure] = "Invalid Blockstack ID namespace: '{0}', should end with .id", _a[_packageErrorCode.PackageErrorCode.BlockstackIdInvalidSubdomainForTranslation] = "Invalid Blockstack ID, subdomain must be non null to be translated", _a[_packageErrorCode.PackageErrorCode.BlockstackIdInvalidDomainForTranslation] = "Only Blockstack Domains ending with _crux can be translated", _a[_packageErrorCode.PackageErrorCode.BlockstackIdNamespaceValidation] = "Invalid Blockstack ID", _a[_packageErrorCode.PackageErrorCode.BnsEmptyData] = "No name data available", _a[_packageErrorCode.PackageErrorCode.BnsResolutionFailed] = "'{0}' node not available because '{1}'", _a[_packageErrorCode.PackageErrorCode.ExistingCruxIDFound] = "keypair is already used in registration of CruxID: '{0}'", _a[_packageErrorCode.PackageErrorCode.ClientNotInitialized] = "CRUX Client not initialized.", _a[_packageErrorCode.PackageErrorCode.CouldNotFindAssetListInClientConfig] = "Missing global asset list", _a[_packageErrorCode.PackageErrorCode.CouldNotFindBlockstackConfigurationServiceClientConfig] = "Missing client-config for: '{0}'", _a[_packageErrorCode.PackageErrorCode.CouldNotFindIdentityKeyPairToPutAddressMapping] = "Missing IdentityKeyPair", _a[_packageErrorCode.PackageErrorCode.CouldNotFindKeyPairToRestoreIdentity] = "Require keypair for restoring the identity", _a[_packageErrorCode.PackageErrorCode.CouldNotFindKeyPairToRegisterName] = "Require keypair for registering name/subdomain", _a[_packageErrorCode.PackageErrorCode.CouldNotValidateZoneFile] = "Invalid zonefile", _a[_packageErrorCode.PackageErrorCode.CruxIdNamespaceValidation] = "Invalid Crux ID namespace: '{0}', should end with .crux", _a[_packageErrorCode.PackageErrorCode.CruxIdInvalidStructure] = "Invalid Crux ID", _a[_packageErrorCode.PackageErrorCode.CruxIDUnavailable] = "'{0}' name is unavailable", _a[_packageErrorCode.PackageErrorCode.CurrencyDoesNotExistInClientMapping] = "Currency does not exist in wallet's client mapping", _a[_packageErrorCode.PackageErrorCode.DecryptionFailed] = "Decryption failed", _a[_packageErrorCode.PackageErrorCode.DifferentWalletCruxID] = "Already has a Crux ID registered with different wallet", _a[_packageErrorCode.PackageErrorCode.ExpectedEncryptionKeyValue] = "Missing encryptionKey method", _a[_packageErrorCode.PackageErrorCode.FetchPendingRegistrationsByAddressFailed] = "'{0}' failed with error '{1}'", _a[_packageErrorCode.PackageErrorCode.GaiaClientConfigUploadFailed] = "Unable to upload '{0}' to gaia: '{1}'", _a[_packageErrorCode.PackageErrorCode.GaiaCruxPayUploadFailed] = "Unable to upload '{0}' to gaia: '{1}'", _a[_packageErrorCode.PackageErrorCode.GaiaEmptyResponse] = "Gaia sent empty response", _a[_packageErrorCode.PackageErrorCode.GetAddressMapFailed] = "No address found for CRUX ID", _a[_packageErrorCode.PackageErrorCode.GaiaCruxPayGetFailed] = "Unable to get from gaia: '{0}'", _a[_packageErrorCode.PackageErrorCode.GaiaClientConfigGetFailed] = "Unable to get from gaia : '{0}'", _a[_packageErrorCode.PackageErrorCode.GaiaGetFileFailed] = "Unable to get gaia file: '{0}'", _a[_packageErrorCode.PackageErrorCode.GaiaProfileUploadFailed] = "Unable to upload '{0}' to gaia: '{1}'", _a[_packageErrorCode.PackageErrorCode.GaiaUploadFailed] = "Unable to upload '{0}' to gaia: '{1}'", _a[_packageErrorCode.PackageErrorCode.GetNamesByAddressFailed] = "'{0}' failed with error '{1}'", _a[_packageErrorCode.PackageErrorCode.InvalidPrivateKeyFormat] = "Private key should be either hex encoded, base64 encoded or WIF (base58 - compressed) only", _a[_packageErrorCode.PackageErrorCode.KeyPairMismatch] = "Invalid keyPair provided", _a[_packageErrorCode.PackageErrorCode.NameIntegrityCheckFailed] = "Name resolution integrity check failed", _a[_packageErrorCode.PackageErrorCode.PrivateKeyRequired] = "CruxClient should be intantiated with a private key", _a[_packageErrorCode.PackageErrorCode.SubdomainLengthCheckFailure] = "Validation failed: Subdomain length must be between 4 to 20", _a[_packageErrorCode.PackageErrorCode.SubdomainRegexMatchFailure] = "Validation failed: Subdomain should start with alphabet and end with alphabet or number. Allowed characters are lowercase alphabets, numbers, - and _", _a[_packageErrorCode.PackageErrorCode.SubdomainRegistrationAcknowledgementFailed] = "Register call to registrar failed: '{0}'", _a[_packageErrorCode.PackageErrorCode.SubdomainRegistrationFailed] = "Register call to registrar failed: '{0}'", _a[_packageErrorCode.PackageErrorCode.TokenVerificationFailed] = "Token verification failed for '{0}'", _a[_packageErrorCode.PackageErrorCode.UserDoesNotExist] = "ID does not exist", _a[_packageErrorCode.PackageErrorCode.IdentityMismatch] = "Identity mismatch", _a); -exports.ERROR_STRINGS = ERROR_STRINGS; -},{"./package-error-code":"JIdw"}],"Jpvl":[function(require,module,exports) { -"use strict"; - -Object.defineProperty(exports, "__esModule", { - value: true -}); -exports.ErrorHelper = void 0; - -var _errorString = require("./error-string"); - -var _packageError = require("./package-error"); - -var __read = void 0 && (void 0).__read || function (o, n) { - var m = typeof Symbol === "function" && o[Symbol.iterator]; - if (!m) return o; - var i = m.call(o), - r, - ar = [], - e; - - try { - while ((n === void 0 || n-- > 0) && !(r = i.next()).done) { - ar.push(r.value); - } - } catch (error) { - e = { - error: error - }; - } finally { - try { - if (r && !r.done && (m = i["return"])) m.call(i); - } finally { - if (e) throw e.error; - } - } +/** + * Removes all key-value entries from the hash. + * + * @private + * @name clear + * @memberOf Hash + */ +function hashClear() { + this.__data__ = nativeCreate ? nativeCreate(null) : {}; + this.size = 0; +} - return ar; -}; +/** + * Removes `key` and its value from the hash. + * + * @private + * @name delete + * @memberOf Hash + * @param {Object} hash The hash to modify. + * @param {string} key The key of the value to remove. + * @returns {boolean} Returns `true` if the entry was removed, else `false`. + */ +function hashDelete(key) { + var result = this.has(key) && delete this.__data__[key]; + this.size -= result ? 1 : 0; + return result; +} -var __spread = void 0 && (void 0).__spread || function () { - for (var ar = [], i = 0; i < arguments.length; i++) { - ar = ar.concat(__read(arguments[i])); +/** + * Gets the hash value for `key`. + * + * @private + * @name get + * @memberOf Hash + * @param {string} key The key of the value to get. + * @returns {*} Returns the entry value. + */ +function hashGet(key) { + var data = this.__data__; + if (nativeCreate) { + var result = data[key]; + return result === HASH_UNDEFINED ? undefined : result; } + return hasOwnProperty.call(data, key) ? data[key] : undefined; +} - return ar; -}; - -var ErrorHelper = -/** @class */ -function () { - function ErrorHelper() {} - - ErrorHelper.getPackageError = function (cause, errorCode) { - var optionalArgs = []; - - for (var _i = 2; _i < arguments.length; _i++) { - optionalArgs[_i - 2] = arguments[_i]; - } - - var message = ErrorHelper.getErrorMessage.apply(ErrorHelper, __spread([errorCode], optionalArgs)); - return new _packageError.PackageError(cause, message, errorCode); - }; - - ErrorHelper.getErrorMessage = function (errorCode) { - var optionalArgs = []; - - for (var _i = 1; _i < arguments.length; _i++) { - optionalArgs[_i - 1] = arguments[_i]; - } - - return ErrorHelper.formatErrorMessage.apply(ErrorHelper, __spread([_errorString.ERROR_STRINGS[errorCode]], optionalArgs)); - }; - - ErrorHelper.formatErrorMessage = function (errorMessage) { - var optionalArgs = []; - - for (var _i = 1; _i < arguments.length; _i++) { - optionalArgs[_i - 1] = arguments[_i]; - } - - if (!errorMessage) { - return errorMessage; - } - - var result = errorMessage; - var args = ErrorHelper.getOptionalArgsArrayFromFunctionCall(arguments, 1); - - if (args) { - for (var i = 0; i < args.length; i++) { - result = result.replace(new RegExp("\\{" + i + "\\}", "g"), args[i]); - } - } +/** + * Checks if a hash value for `key` exists. + * + * @private + * @name has + * @memberOf Hash + * @param {string} key The key of the entry to check. + * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. + */ +function hashHas(key) { + var data = this.__data__; + return nativeCreate ? (data[key] !== undefined) : hasOwnProperty.call(data, key); +} - return result; - }; +/** + * Sets the hash `key` to `value`. + * + * @private + * @name set + * @memberOf Hash + * @param {string} key The key of the value to set. + * @param {*} value The value to set. + * @returns {Object} Returns the hash instance. + */ +function hashSet(key, value) { + var data = this.__data__; + this.size += this.has(key) ? 0 : 1; + data[key] = (nativeCreate && value === undefined) ? HASH_UNDEFINED : value; + return this; +} - ErrorHelper.getOptionalArgsArrayFromFunctionCall = function (functionArguments, startIndex) { - if (functionArguments.length <= startIndex) { - return []; - } +// Add methods to `Hash`. +Hash.prototype.clear = hashClear; +Hash.prototype['delete'] = hashDelete; +Hash.prototype.get = hashGet; +Hash.prototype.has = hashHas; +Hash.prototype.set = hashSet; - if (Array.isArray(functionArguments[startIndex])) { - return functionArguments[startIndex]; - } +/** + * Creates an list cache object. + * + * @private + * @constructor + * @param {Array} [entries] The key-value pairs to cache. + */ +function ListCache(entries) { + var index = -1, + length = entries == null ? 0 : entries.length; - return Array.prototype.slice.apply(functionArguments, [startIndex]); - }; + this.clear(); + while (++index < length) { + var entry = entries[index]; + this.set(entry[0], entry[1]); + } +} - return ErrorHelper; -}(); +/** + * Removes all key-value entries from the list cache. + * + * @private + * @name clear + * @memberOf ListCache + */ +function listCacheClear() { + this.__data__ = []; + this.size = 0; +} -exports.ErrorHelper = ErrorHelper; -},{"./error-string":"UOYu","./package-error":"Z94C"}],"yXIU":[function(require,module,exports) { -"use strict"; +/** + * Removes `key` and its value from the list cache. + * + * @private + * @name delete + * @memberOf ListCache + * @param {string} key The key of the value to remove. + * @returns {boolean} Returns `true` if the entry was removed, else `false`. + */ +function listCacheDelete(key) { + var data = this.__data__, + index = assocIndexOf(data, key); -Object.defineProperty(exports, "__esModule", { - value: true -}); -Object.defineProperty(exports, "BaseError", { - enumerable: true, - get: function () { - return _baseError.BaseError; - } -}); -Object.defineProperty(exports, "CruxClientError", { - enumerable: true, - get: function () { - return _cruxClientError.CruxClientError; - } -}); -Object.defineProperty(exports, "ErrorHelper", { - enumerable: true, - get: function () { - return _errorHelper.ErrorHelper; - } -}); -Object.defineProperty(exports, "ERROR_STRINGS", { - enumerable: true, - get: function () { - return _errorString.ERROR_STRINGS; + if (index < 0) { + return false; } -}); -Object.defineProperty(exports, "PackageErrorCode", { - enumerable: true, - get: function () { - return _packageErrorCode.PackageErrorCode; + var lastIndex = data.length - 1; + if (index == lastIndex) { + data.pop(); + } else { + splice.call(data, index, 1); } -}); - -var _baseError = require("./base-error"); - -var _cruxClientError = require("./crux-client-error"); + --this.size; + return true; +} -var _errorHelper = require("./error-helper"); +/** + * Gets the list cache value for `key`. + * + * @private + * @name get + * @memberOf ListCache + * @param {string} key The key of the value to get. + * @returns {*} Returns the entry value. + */ +function listCacheGet(key) { + var data = this.__data__, + index = assocIndexOf(data, key); -var _errorString = require("./error-string"); + return index < 0 ? undefined : data[index][1]; +} -var _packageErrorCode = require("./package-error-code"); -},{"./base-error":"S14b","./crux-client-error":"R1rB","./error-helper":"Jpvl","./error-string":"UOYu","./package-error-code":"JIdw"}],"ou4A":[function(require,module,exports) { -"use strict"; /** - * This logic is in a separate file with no dependencies so that it can be - * loaded and executed as soon as possible to fulfill the purpose of the protocol - * detection technique. The effectiveness of this is obviously subject to how web - * apps bundle/consume the blockstack.js lib. + * Checks if a list cache value for `key` exists. + * + * @private + * @name has + * @memberOf ListCache + * @param {string} key The key of the entry to check. + * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. */ +function listCacheHas(key) { + return assocIndexOf(this.__data__, key) > -1; +} -Object.defineProperty(exports, "__esModule", { - value: true -}); -var GLOBAL_DETECTION_CACHE_KEY = '_blockstackDidCheckEchoReply'; -var ECHO_REPLY_PARAM = 'echoReply'; -var AUTH_CONTINUATION_PARAM = 'authContinuation'; /** - * Checks if the current window location URL contains an 'echoReply' parameter - * which indicates that this page was only opened to signal back to the originating - * tab that the protocol handler is installed. - * If found, then localStorage events are used to notify the other tab, - * and this page is redirected back to the Blockstack authenticator URL. - * This function caches its result and will not trigger multiple redirects when - * invoked multiple times. - * @returns True if detected and the page will be automatically redirected. - * @hidden + * Sets the list cache `key` to `value`. + * + * @private + * @name set + * @memberOf ListCache + * @param {string} key The key of the value to set. + * @param {*} value The value to set. + * @returns {Object} Returns the list cache instance. */ +function listCacheSet(key, value) { + var data = this.__data__, + index = assocIndexOf(data, key); -function protocolEchoReplyDetection() { - // Check that the `window` APIs exist - var globalScope; - - if (typeof self !== 'undefined') { - globalScope = self; - } else if (typeof window !== 'undefined') { - globalScope = window; + if (index < 0) { + ++this.size; + data.push([key, value]); } else { - // Exit detection function - we are not running in a browser environment. - return false; - } - - if (!globalScope.location || !globalScope.localStorage || !globalScope.URLSearchParams) { - // Exit detection function - we are not running in a browser environment. - return false; - } // Avoid performing the check twice and triggered multiple redirect timers. - - - var existingDetection = globalScope[GLOBAL_DETECTION_CACHE_KEY]; - - if (typeof existingDetection === 'boolean') { - return existingDetection; + data[index][1] = value; } + return this; +} - var searchParams = new globalScope.URLSearchParams(globalScope.location.search); - var echoReplyParam = searchParams.get(ECHO_REPLY_PARAM); - - if (echoReplyParam) { - globalScope[GLOBAL_DETECTION_CACHE_KEY] = true; // Use localStorage to notify originated tab that protocol handler is available and working. - - var echoReplyKey = "echo-reply-".concat(echoReplyParam); // Set the echo-reply result in localStorage for the other window to see. +// Add methods to `ListCache`. +ListCache.prototype.clear = listCacheClear; +ListCache.prototype['delete'] = listCacheDelete; +ListCache.prototype.get = listCacheGet; +ListCache.prototype.has = listCacheHas; +ListCache.prototype.set = listCacheSet; - globalScope.localStorage.setItem(echoReplyKey, 'success'); // Redirect back to the localhost auth url, as opposed to another protocol launch. - // This will re-use the same tab rather than creating another useless one. +/** + * Creates a map cache object to store key-value pairs. + * + * @private + * @constructor + * @param {Array} [entries] The key-value pairs to cache. + */ +function MapCache(entries) { + var index = -1, + length = entries == null ? 0 : entries.length; - globalScope.setTimeout(function () { - var authContinuationParam = searchParams.get(AUTH_CONTINUATION_PARAM); - globalScope.location.href = authContinuationParam; - }, 10); - return true; + this.clear(); + while (++index < length) { + var entry = entries[index]; + this.set(entry[0], entry[1]); } - - return false; } -exports.protocolEchoReplyDetection = protocolEchoReplyDetection; -},{}],"UTxZ":[function(require,module,exports) { -"use strict"; - -Object.defineProperty(exports, "__esModule", { - value: true -}); /** -* @ignore -*/ + * Removes all key-value entries from the map. + * + * @private + * @name clear + * @memberOf MapCache + */ +function mapCacheClear() { + this.size = 0; + this.__data__ = { + 'hash': new Hash, + 'map': new (Map || ListCache), + 'string': new Hash + }; +} -exports.BLOCKSTACK_HANDLER = 'blockstack'; /** -* @ignore -*/ + * Removes `key` and its value from the map. + * + * @private + * @name delete + * @memberOf MapCache + * @param {string} key The key of the value to remove. + * @returns {boolean} Returns `true` if the entry was removed, else `false`. + */ +function mapCacheDelete(key) { + var result = getMapData(this, key)['delete'](key); + this.size -= result ? 1 : 0; + return result; +} -exports.BLOCKSTACK_STORAGE_LABEL = 'blockstack'; /** -* This constant is used in the [[redirectToSignInWithAuthRequest]] -*/ + * Gets the map value for `key`. + * + * @private + * @name get + * @memberOf MapCache + * @param {string} key The key of the value to get. + * @returns {*} Returns the entry value. + */ +function mapCacheGet(key) { + return getMapData(this, key).get(key); +} -exports.DEFAULT_BLOCKSTACK_HOST = 'https://browser.blockstack.org/auth'; /** -* @ignore -*/ + * Checks if a map value for `key` exists. + * + * @private + * @name has + * @memberOf MapCache + * @param {string} key The key of the entry to check. + * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. + */ +function mapCacheHas(key) { + return getMapData(this, key).has(key); +} -exports.DEFAULT_SCOPE = ["store_write" -/* store_write */ -]; /** -* @ignore -*/ - -exports.BLOCKSTACK_APP_PRIVATE_KEY_LABEL = 'blockstack-transit-private-key'; + * Sets the map `key` to `value`. + * + * @private + * @name set + * @memberOf MapCache + * @param {string} key The key of the value to set. + * @param {*} value The value to set. + * @returns {Object} Returns the map cache instance. + */ +function mapCacheSet(key, value) { + var data = getMapData(this, key), + size = data.size; + + data.set(key, value); + this.size += data.size == size ? 0 : 1; + return this; +} + +// Add methods to `MapCache`. +MapCache.prototype.clear = mapCacheClear; +MapCache.prototype['delete'] = mapCacheDelete; +MapCache.prototype.get = mapCacheGet; +MapCache.prototype.has = mapCacheHas; +MapCache.prototype.set = mapCacheSet; + /** -* @ignore -*/ + * + * Creates an array cache object to store unique values. + * + * @private + * @constructor + * @param {Array} [values] The values to cache. + */ +function SetCache(values) { + var index = -1, + length = values == null ? 0 : values.length; + + this.__data__ = new MapCache; + while (++index < length) { + this.add(values[index]); + } +} -exports.BLOCKSTACK_DEFAULT_GAIA_HUB_URL = 'https://hub.blockstack.org'; /** -* @ignore -*/ + * Adds `value` to the array cache. + * + * @private + * @name add + * @memberOf SetCache + * @alias push + * @param {*} value The value to cache. + * @returns {Object} Returns the cache instance. + */ +function setCacheAdd(value) { + this.__data__.set(value, HASH_UNDEFINED); + return this; +} -exports.DEFAULT_CORE_NODE = 'https://core.blockstack.org'; /** -* @ignore -*/ + * Checks if `value` is in the array cache. + * + * @private + * @name has + * @memberOf SetCache + * @param {*} value The value to search for. + * @returns {number} Returns `true` if `value` is found, else `false`. + */ +function setCacheHas(value) { + return this.__data__.has(value); +} + +// Add methods to `SetCache`. +SetCache.prototype.add = SetCache.prototype.push = setCacheAdd; +SetCache.prototype.has = setCacheHas; -exports.NAME_LOOKUP_PATH = '/v1/names'; /** -* @ignore -*/ + * Creates a stack cache object to store key-value pairs. + * + * @private + * @constructor + * @param {Array} [entries] The key-value pairs to cache. + */ +function Stack(entries) { + var data = this.__data__ = new ListCache(entries); + this.size = data.size; +} -exports.LOCALSTORAGE_SESSION_KEY = 'blockstack-session'; -},{}],"oWqx":[function(require,module,exports) { -var global = arguments[3]; -var define; -/*! https://mths.be/punycode v1.4.1 by @mathias */ -;(function(root) { +/** + * Removes all key-value entries from the stack. + * + * @private + * @name clear + * @memberOf Stack + */ +function stackClear() { + this.__data__ = new ListCache; + this.size = 0; +} - /** Detect free variables */ - var freeExports = typeof exports == 'object' && exports && - !exports.nodeType && exports; - var freeModule = typeof module == 'object' && module && - !module.nodeType && module; - var freeGlobal = typeof global == 'object' && global; - if ( - freeGlobal.global === freeGlobal || - freeGlobal.window === freeGlobal || - freeGlobal.self === freeGlobal - ) { - root = freeGlobal; - } +/** + * Removes `key` and its value from the stack. + * + * @private + * @name delete + * @memberOf Stack + * @param {string} key The key of the value to remove. + * @returns {boolean} Returns `true` if the entry was removed, else `false`. + */ +function stackDelete(key) { + var data = this.__data__, + result = data['delete'](key); - /** - * The `punycode` object. - * @name punycode - * @type Object - */ - var punycode, + this.size = data.size; + return result; +} - /** Highest positive signed 32-bit float value */ - maxInt = 2147483647, // aka. 0x7FFFFFFF or 2^31-1 +/** + * Gets the stack value for `key`. + * + * @private + * @name get + * @memberOf Stack + * @param {string} key The key of the value to get. + * @returns {*} Returns the entry value. + */ +function stackGet(key) { + return this.__data__.get(key); +} - /** Bootstring parameters */ - base = 36, - tMin = 1, - tMax = 26, - skew = 38, - damp = 700, - initialBias = 72, - initialN = 128, // 0x80 - delimiter = '-', // '\x2D' +/** + * Checks if a stack value for `key` exists. + * + * @private + * @name has + * @memberOf Stack + * @param {string} key The key of the entry to check. + * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. + */ +function stackHas(key) { + return this.__data__.has(key); +} - /** Regular expressions */ - regexPunycode = /^xn--/, - regexNonASCII = /[^\x20-\x7E]/, // unprintable ASCII chars + non-ASCII chars - regexSeparators = /[\x2E\u3002\uFF0E\uFF61]/g, // RFC 3490 separators +/** + * Sets the stack `key` to `value`. + * + * @private + * @name set + * @memberOf Stack + * @param {string} key The key of the value to set. + * @param {*} value The value to set. + * @returns {Object} Returns the stack cache instance. + */ +function stackSet(key, value) { + var data = this.__data__; + if (data instanceof ListCache) { + var pairs = data.__data__; + if (!Map || (pairs.length < LARGE_ARRAY_SIZE - 1)) { + pairs.push([key, value]); + this.size = ++data.size; + return this; + } + data = this.__data__ = new MapCache(pairs); + } + data.set(key, value); + this.size = data.size; + return this; +} - /** Error messages */ - errors = { - 'overflow': 'Overflow: input needs wider integers to process', - 'not-basic': 'Illegal input >= 0x80 (not a basic code point)', - 'invalid-input': 'Invalid input' - }, +// Add methods to `Stack`. +Stack.prototype.clear = stackClear; +Stack.prototype['delete'] = stackDelete; +Stack.prototype.get = stackGet; +Stack.prototype.has = stackHas; +Stack.prototype.set = stackSet; - /** Convenience shortcuts */ - baseMinusTMin = base - tMin, - floor = Math.floor, - stringFromCharCode = String.fromCharCode, +/** + * Creates an array of the enumerable property names of the array-like `value`. + * + * @private + * @param {*} value The value to query. + * @param {boolean} inherited Specify returning inherited property names. + * @returns {Array} Returns the array of property names. + */ +function arrayLikeKeys(value, inherited) { + var isArr = isArray(value), + isArg = !isArr && isArguments(value), + isBuff = !isArr && !isArg && isBuffer(value), + isType = !isArr && !isArg && !isBuff && isTypedArray(value), + skipIndexes = isArr || isArg || isBuff || isType, + result = skipIndexes ? baseTimes(value.length, String) : [], + length = result.length; - /** Temporary variable */ - key; + for (var key in value) { + if ((inherited || hasOwnProperty.call(value, key)) && + !(skipIndexes && ( + // Safari 9 has enumerable `arguments.length` in strict mode. + key == 'length' || + // Node.js 0.10 has enumerable non-index properties on buffers. + (isBuff && (key == 'offset' || key == 'parent')) || + // PhantomJS 2 has enumerable non-index properties on typed arrays. + (isType && (key == 'buffer' || key == 'byteLength' || key == 'byteOffset')) || + // Skip index properties. + isIndex(key, length) + ))) { + result.push(key); + } + } + return result; +} - /*--------------------------------------------------------------------------*/ +/** + * Gets the index at which the `key` is found in `array` of key-value pairs. + * + * @private + * @param {Array} array The array to inspect. + * @param {*} key The key to search for. + * @returns {number} Returns the index of the matched value, else `-1`. + */ +function assocIndexOf(array, key) { + var length = array.length; + while (length--) { + if (eq(array[length][0], key)) { + return length; + } + } + return -1; +} - /** - * A generic error utility function. - * @private - * @param {String} type The error type. - * @returns {Error} Throws a `RangeError` with the applicable error message. - */ - function error(type) { - throw new RangeError(errors[type]); - } +/** + * The base implementation of `getAllKeys` and `getAllKeysIn` which uses + * `keysFunc` and `symbolsFunc` to get the enumerable property names and + * symbols of `object`. + * + * @private + * @param {Object} object The object to query. + * @param {Function} keysFunc The function to get the keys of `object`. + * @param {Function} symbolsFunc The function to get the symbols of `object`. + * @returns {Array} Returns the array of property names and symbols. + */ +function baseGetAllKeys(object, keysFunc, symbolsFunc) { + var result = keysFunc(object); + return isArray(object) ? result : arrayPush(result, symbolsFunc(object)); +} - /** - * A generic `Array#map` utility function. - * @private - * @param {Array} array The array to iterate over. - * @param {Function} callback The function that gets called for every array - * item. - * @returns {Array} A new array of values returned by the callback function. - */ - function map(array, fn) { - var length = array.length; - var result = []; - while (length--) { - result[length] = fn(array[length]); - } - return result; - } +/** + * The base implementation of `getTag` without fallbacks for buggy environments. + * + * @private + * @param {*} value The value to query. + * @returns {string} Returns the `toStringTag`. + */ +function baseGetTag(value) { + if (value == null) { + return value === undefined ? undefinedTag : nullTag; + } + return (symToStringTag && symToStringTag in Object(value)) + ? getRawTag(value) + : objectToString(value); +} - /** - * A simple `Array#map`-like wrapper to work with domain name strings or email - * addresses. - * @private - * @param {String} domain The domain name or email address. - * @param {Function} callback The function that gets called for every - * character. - * @returns {Array} A new string of characters returned by the callback - * function. - */ - function mapDomain(string, fn) { - var parts = string.split('@'); - var result = ''; - if (parts.length > 1) { - // In email addresses, only the domain name should be punycoded. Leave - // the local part (i.e. everything up to `@`) intact. - result = parts[0] + '@'; - string = parts[1]; - } - // Avoid `split(regex)` for IE8 compatibility. See #17. - string = string.replace(regexSeparators, '\x2E'); - var labels = string.split('.'); - var encoded = map(labels, fn).join('.'); - return result + encoded; - } +/** + * The base implementation of `_.isArguments`. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an `arguments` object, + */ +function baseIsArguments(value) { + return isObjectLike(value) && baseGetTag(value) == argsTag; +} - /** - * Creates an array containing the numeric code points of each Unicode - * character in the string. While JavaScript uses UCS-2 internally, - * this function will convert a pair of surrogate halves (each of which - * UCS-2 exposes as separate characters) into a single code point, - * matching UTF-16. - * @see `punycode.ucs2.encode` - * @see - * @memberOf punycode.ucs2 - * @name decode - * @param {String} string The Unicode input string (UCS-2). - * @returns {Array} The new array of code points. - */ - function ucs2decode(string) { - var output = [], - counter = 0, - length = string.length, - value, - extra; - while (counter < length) { - value = string.charCodeAt(counter++); - if (value >= 0xD800 && value <= 0xDBFF && counter < length) { - // high surrogate, and there is a next character - extra = string.charCodeAt(counter++); - if ((extra & 0xFC00) == 0xDC00) { // low surrogate - output.push(((value & 0x3FF) << 10) + (extra & 0x3FF) + 0x10000); - } else { - // unmatched surrogate; only append this code unit, in case the next - // code unit is the high surrogate of a surrogate pair - output.push(value); - counter--; - } - } else { - output.push(value); - } - } - return output; - } +/** + * The base implementation of `_.isEqual` which supports partial comparisons + * and tracks traversed objects. + * + * @private + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @param {boolean} bitmask The bitmask flags. + * 1 - Unordered comparison + * 2 - Partial comparison + * @param {Function} [customizer] The function to customize comparisons. + * @param {Object} [stack] Tracks traversed `value` and `other` objects. + * @returns {boolean} Returns `true` if the values are equivalent, else `false`. + */ +function baseIsEqual(value, other, bitmask, customizer, stack) { + if (value === other) { + return true; + } + if (value == null || other == null || (!isObjectLike(value) && !isObjectLike(other))) { + return value !== value && other !== other; + } + return baseIsEqualDeep(value, other, bitmask, customizer, baseIsEqual, stack); +} - /** - * Creates a string based on an array of numeric code points. - * @see `punycode.ucs2.decode` - * @memberOf punycode.ucs2 - * @name encode - * @param {Array} codePoints The array of numeric code points. - * @returns {String} The new Unicode string (UCS-2). - */ - function ucs2encode(array) { - return map(array, function(value) { - var output = ''; - if (value > 0xFFFF) { - value -= 0x10000; - output += stringFromCharCode(value >>> 10 & 0x3FF | 0xD800); - value = 0xDC00 | value & 0x3FF; - } - output += stringFromCharCode(value); - return output; - }).join(''); - } +/** + * A specialized version of `baseIsEqual` for arrays and objects which performs + * deep comparisons and tracks traversed objects enabling objects with circular + * references to be compared. + * + * @private + * @param {Object} object The object to compare. + * @param {Object} other The other object to compare. + * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details. + * @param {Function} customizer The function to customize comparisons. + * @param {Function} equalFunc The function to determine equivalents of values. + * @param {Object} [stack] Tracks traversed `object` and `other` objects. + * @returns {boolean} Returns `true` if the objects are equivalent, else `false`. + */ +function baseIsEqualDeep(object, other, bitmask, customizer, equalFunc, stack) { + var objIsArr = isArray(object), + othIsArr = isArray(other), + objTag = objIsArr ? arrayTag : getTag(object), + othTag = othIsArr ? arrayTag : getTag(other); - /** - * Converts a basic code point into a digit/integer. - * @see `digitToBasic()` - * @private - * @param {Number} codePoint The basic numeric code point value. - * @returns {Number} The numeric value of a basic code point (for use in - * representing integers) in the range `0` to `base - 1`, or `base` if - * the code point does not represent a value. - */ - function basicToDigit(codePoint) { - if (codePoint - 48 < 10) { - return codePoint - 22; - } - if (codePoint - 65 < 26) { - return codePoint - 65; - } - if (codePoint - 97 < 26) { - return codePoint - 97; - } - return base; - } + objTag = objTag == argsTag ? objectTag : objTag; + othTag = othTag == argsTag ? objectTag : othTag; - /** - * Converts a digit/integer into a basic code point. - * @see `basicToDigit()` - * @private - * @param {Number} digit The numeric value of a basic code point. - * @returns {Number} The basic code point whose value (when used for - * representing integers) is `digit`, which needs to be in the range - * `0` to `base - 1`. If `flag` is non-zero, the uppercase form is - * used; else, the lowercase form is used. The behavior is undefined - * if `flag` is non-zero and `digit` has no uppercase form. - */ - function digitToBasic(digit, flag) { - // 0..25 map to ASCII a..z or A..Z - // 26..35 map to ASCII 0..9 - return digit + 22 + 75 * (digit < 26) - ((flag != 0) << 5); - } + var objIsObj = objTag == objectTag, + othIsObj = othTag == objectTag, + isSameTag = objTag == othTag; - /** - * Bias adaptation function as per section 3.4 of RFC 3492. - * https://tools.ietf.org/html/rfc3492#section-3.4 - * @private - */ - function adapt(delta, numPoints, firstTime) { - var k = 0; - delta = firstTime ? floor(delta / damp) : delta >> 1; - delta += floor(delta / numPoints); - for (/* no initialization */; delta > baseMinusTMin * tMax >> 1; k += base) { - delta = floor(delta / baseMinusTMin); - } - return floor(k + (baseMinusTMin + 1) * delta / (delta + skew)); - } - - /** - * Converts a Punycode string of ASCII-only symbols to a string of Unicode - * symbols. - * @memberOf punycode - * @param {String} input The Punycode string of ASCII-only symbols. - * @returns {String} The resulting string of Unicode symbols. - */ - function decode(input) { - // Don't use UCS-2 - var output = [], - inputLength = input.length, - out, - i = 0, - n = initialN, - bias = initialBias, - basic, - j, - index, - oldi, - w, - k, - digit, - t, - /** Cached calculation results */ - baseMinusT; - - // Handle the basic code points: let `basic` be the number of input code - // points before the last delimiter, or `0` if there is none, then copy - // the first basic code points to the output. - - basic = input.lastIndexOf(delimiter); - if (basic < 0) { - basic = 0; - } - - for (j = 0; j < basic; ++j) { - // if it's not a basic code point - if (input.charCodeAt(j) >= 0x80) { - error('not-basic'); - } - output.push(input.charCodeAt(j)); - } + if (isSameTag && isBuffer(object)) { + if (!isBuffer(other)) { + return false; + } + objIsArr = true; + objIsObj = false; + } + if (isSameTag && !objIsObj) { + stack || (stack = new Stack); + return (objIsArr || isTypedArray(object)) + ? equalArrays(object, other, bitmask, customizer, equalFunc, stack) + : equalByTag(object, other, objTag, bitmask, customizer, equalFunc, stack); + } + if (!(bitmask & COMPARE_PARTIAL_FLAG)) { + var objIsWrapped = objIsObj && hasOwnProperty.call(object, '__wrapped__'), + othIsWrapped = othIsObj && hasOwnProperty.call(other, '__wrapped__'); - // Main decoding loop: start just after the last delimiter if any basic code - // points were copied; start at the beginning otherwise. + if (objIsWrapped || othIsWrapped) { + var objUnwrapped = objIsWrapped ? object.value() : object, + othUnwrapped = othIsWrapped ? other.value() : other; - for (index = basic > 0 ? basic + 1 : 0; index < inputLength; /* no final expression */) { + stack || (stack = new Stack); + return equalFunc(objUnwrapped, othUnwrapped, bitmask, customizer, stack); + } + } + if (!isSameTag) { + return false; + } + stack || (stack = new Stack); + return equalObjects(object, other, bitmask, customizer, equalFunc, stack); +} - // `index` is the index of the next character to be consumed. - // Decode a generalized variable-length integer into `delta`, - // which gets added to `i`. The overflow checking is easier - // if we increase `i` as we go, then subtract off its starting - // value at the end to obtain `delta`. - for (oldi = i, w = 1, k = base; /* no condition */; k += base) { +/** + * The base implementation of `_.isNative` without bad shim checks. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a native function, + * else `false`. + */ +function baseIsNative(value) { + if (!isObject(value) || isMasked(value)) { + return false; + } + var pattern = isFunction(value) ? reIsNative : reIsHostCtor; + return pattern.test(toSource(value)); +} - if (index >= inputLength) { - error('invalid-input'); - } +/** + * The base implementation of `_.isTypedArray` without Node.js optimizations. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a typed array, else `false`. + */ +function baseIsTypedArray(value) { + return isObjectLike(value) && + isLength(value.length) && !!typedArrayTags[baseGetTag(value)]; +} - digit = basicToDigit(input.charCodeAt(index++)); +/** + * The base implementation of `_.keys` which doesn't treat sparse arrays as dense. + * + * @private + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property names. + */ +function baseKeys(object) { + if (!isPrototype(object)) { + return nativeKeys(object); + } + var result = []; + for (var key in Object(object)) { + if (hasOwnProperty.call(object, key) && key != 'constructor') { + result.push(key); + } + } + return result; +} - if (digit >= base || digit > floor((maxInt - i) / w)) { - error('overflow'); - } +/** + * A specialized version of `baseIsEqualDeep` for arrays with support for + * partial deep comparisons. + * + * @private + * @param {Array} array The array to compare. + * @param {Array} other The other array to compare. + * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details. + * @param {Function} customizer The function to customize comparisons. + * @param {Function} equalFunc The function to determine equivalents of values. + * @param {Object} stack Tracks traversed `array` and `other` objects. + * @returns {boolean} Returns `true` if the arrays are equivalent, else `false`. + */ +function equalArrays(array, other, bitmask, customizer, equalFunc, stack) { + var isPartial = bitmask & COMPARE_PARTIAL_FLAG, + arrLength = array.length, + othLength = other.length; - i += digit * w; - t = k <= bias ? tMin : (k >= bias + tMax ? tMax : k - bias); + if (arrLength != othLength && !(isPartial && othLength > arrLength)) { + return false; + } + // Assume cyclic values are equal. + var stacked = stack.get(array); + if (stacked && stack.get(other)) { + return stacked == other; + } + var index = -1, + result = true, + seen = (bitmask & COMPARE_UNORDERED_FLAG) ? new SetCache : undefined; - if (digit < t) { - break; - } + stack.set(array, other); + stack.set(other, array); - baseMinusT = base - t; - if (w > floor(maxInt / baseMinusT)) { - error('overflow'); - } + // Ignore non-index properties. + while (++index < arrLength) { + var arrValue = array[index], + othValue = other[index]; - w *= baseMinusT; + if (customizer) { + var compared = isPartial + ? customizer(othValue, arrValue, index, other, array, stack) + : customizer(arrValue, othValue, index, array, other, stack); + } + if (compared !== undefined) { + if (compared) { + continue; + } + result = false; + break; + } + // Recursively compare arrays (susceptible to call stack limits). + if (seen) { + if (!arraySome(other, function(othValue, othIndex) { + if (!cacheHas(seen, othIndex) && + (arrValue === othValue || equalFunc(arrValue, othValue, bitmask, customizer, stack))) { + return seen.push(othIndex); + } + })) { + result = false; + break; + } + } else if (!( + arrValue === othValue || + equalFunc(arrValue, othValue, bitmask, customizer, stack) + )) { + result = false; + break; + } + } + stack['delete'](array); + stack['delete'](other); + return result; +} - } +/** + * A specialized version of `baseIsEqualDeep` for comparing objects of + * the same `toStringTag`. + * + * **Note:** This function only supports comparing values with tags of + * `Boolean`, `Date`, `Error`, `Number`, `RegExp`, or `String`. + * + * @private + * @param {Object} object The object to compare. + * @param {Object} other The other object to compare. + * @param {string} tag The `toStringTag` of the objects to compare. + * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details. + * @param {Function} customizer The function to customize comparisons. + * @param {Function} equalFunc The function to determine equivalents of values. + * @param {Object} stack Tracks traversed `object` and `other` objects. + * @returns {boolean} Returns `true` if the objects are equivalent, else `false`. + */ +function equalByTag(object, other, tag, bitmask, customizer, equalFunc, stack) { + switch (tag) { + case dataViewTag: + if ((object.byteLength != other.byteLength) || + (object.byteOffset != other.byteOffset)) { + return false; + } + object = object.buffer; + other = other.buffer; - out = output.length + 1; - bias = adapt(i - oldi, out, oldi == 0); + case arrayBufferTag: + if ((object.byteLength != other.byteLength) || + !equalFunc(new Uint8Array(object), new Uint8Array(other))) { + return false; + } + return true; - // `i` was supposed to wrap around from `out` to `0`, - // incrementing `n` each time, so we'll fix that now: - if (floor(i / out) > maxInt - n) { - error('overflow'); - } + case boolTag: + case dateTag: + case numberTag: + // Coerce booleans to `1` or `0` and dates to milliseconds. + // Invalid dates are coerced to `NaN`. + return eq(+object, +other); - n += floor(i / out); - i %= out; + case errorTag: + return object.name == other.name && object.message == other.message; - // Insert `n` at position `i` of the output - output.splice(i++, 0, n); + case regexpTag: + case stringTag: + // Coerce regexes to strings and treat strings, primitives and objects, + // as equal. See http://www.ecma-international.org/ecma-262/7.0/#sec-regexp.prototype.tostring + // for more details. + return object == (other + ''); - } + case mapTag: + var convert = mapToArray; - return ucs2encode(output); - } + case setTag: + var isPartial = bitmask & COMPARE_PARTIAL_FLAG; + convert || (convert = setToArray); - /** - * Converts a string of Unicode symbols (e.g. a domain name label) to a - * Punycode string of ASCII-only symbols. - * @memberOf punycode - * @param {String} input The string of Unicode symbols. - * @returns {String} The resulting Punycode string of ASCII-only symbols. - */ - function encode(input) { - var n, - delta, - handledCPCount, - basicLength, - bias, - j, - m, - q, - k, - t, - currentValue, - output = [], - /** `inputLength` will hold the number of code points in `input`. */ - inputLength, - /** Cached calculation results */ - handledCPCountPlusOne, - baseMinusT, - qMinusT; + if (object.size != other.size && !isPartial) { + return false; + } + // Assume cyclic values are equal. + var stacked = stack.get(object); + if (stacked) { + return stacked == other; + } + bitmask |= COMPARE_UNORDERED_FLAG; - // Convert the input in UCS-2 to Unicode - input = ucs2decode(input); + // Recursively compare objects (susceptible to call stack limits). + stack.set(object, other); + var result = equalArrays(convert(object), convert(other), bitmask, customizer, equalFunc, stack); + stack['delete'](object); + return result; - // Cache the length - inputLength = input.length; + case symbolTag: + if (symbolValueOf) { + return symbolValueOf.call(object) == symbolValueOf.call(other); + } + } + return false; +} - // Initialize the state - n = initialN; - delta = 0; - bias = initialBias; +/** + * A specialized version of `baseIsEqualDeep` for objects with support for + * partial deep comparisons. + * + * @private + * @param {Object} object The object to compare. + * @param {Object} other The other object to compare. + * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details. + * @param {Function} customizer The function to customize comparisons. + * @param {Function} equalFunc The function to determine equivalents of values. + * @param {Object} stack Tracks traversed `object` and `other` objects. + * @returns {boolean} Returns `true` if the objects are equivalent, else `false`. + */ +function equalObjects(object, other, bitmask, customizer, equalFunc, stack) { + var isPartial = bitmask & COMPARE_PARTIAL_FLAG, + objProps = getAllKeys(object), + objLength = objProps.length, + othProps = getAllKeys(other), + othLength = othProps.length; - // Handle the basic code points - for (j = 0; j < inputLength; ++j) { - currentValue = input[j]; - if (currentValue < 0x80) { - output.push(stringFromCharCode(currentValue)); - } - } + if (objLength != othLength && !isPartial) { + return false; + } + var index = objLength; + while (index--) { + var key = objProps[index]; + if (!(isPartial ? key in other : hasOwnProperty.call(other, key))) { + return false; + } + } + // Assume cyclic values are equal. + var stacked = stack.get(object); + if (stacked && stack.get(other)) { + return stacked == other; + } + var result = true; + stack.set(object, other); + stack.set(other, object); - handledCPCount = basicLength = output.length; + var skipCtor = isPartial; + while (++index < objLength) { + key = objProps[index]; + var objValue = object[key], + othValue = other[key]; - // `handledCPCount` is the number of code points that have been handled; - // `basicLength` is the number of basic code points. + if (customizer) { + var compared = isPartial + ? customizer(othValue, objValue, key, other, object, stack) + : customizer(objValue, othValue, key, object, other, stack); + } + // Recursively compare objects (susceptible to call stack limits). + if (!(compared === undefined + ? (objValue === othValue || equalFunc(objValue, othValue, bitmask, customizer, stack)) + : compared + )) { + result = false; + break; + } + skipCtor || (skipCtor = key == 'constructor'); + } + if (result && !skipCtor) { + var objCtor = object.constructor, + othCtor = other.constructor; - // Finish the basic string - if it is not empty - with a delimiter - if (basicLength) { - output.push(delimiter); - } + // Non `Object` object instances with different constructors are not equal. + if (objCtor != othCtor && + ('constructor' in object && 'constructor' in other) && + !(typeof objCtor == 'function' && objCtor instanceof objCtor && + typeof othCtor == 'function' && othCtor instanceof othCtor)) { + result = false; + } + } + stack['delete'](object); + stack['delete'](other); + return result; +} - // Main encoding loop: - while (handledCPCount < inputLength) { +/** + * Creates an array of own enumerable property names and symbols of `object`. + * + * @private + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property names and symbols. + */ +function getAllKeys(object) { + return baseGetAllKeys(object, keys, getSymbols); +} - // All non-basic code points < n have been handled already. Find the next - // larger one: - for (m = maxInt, j = 0; j < inputLength; ++j) { - currentValue = input[j]; - if (currentValue >= n && currentValue < m) { - m = currentValue; - } - } +/** + * Gets the data for `map`. + * + * @private + * @param {Object} map The map to query. + * @param {string} key The reference key. + * @returns {*} Returns the map data. + */ +function getMapData(map, key) { + var data = map.__data__; + return isKeyable(key) + ? data[typeof key == 'string' ? 'string' : 'hash'] + : data.map; +} - // Increase `delta` enough to advance the decoder's state to , - // but guard against overflow - handledCPCountPlusOne = handledCPCount + 1; - if (m - n > floor((maxInt - delta) / handledCPCountPlusOne)) { - error('overflow'); - } +/** + * Gets the native function at `key` of `object`. + * + * @private + * @param {Object} object The object to query. + * @param {string} key The key of the method to get. + * @returns {*} Returns the function if it's native, else `undefined`. + */ +function getNative(object, key) { + var value = getValue(object, key); + return baseIsNative(value) ? value : undefined; +} - delta += (m - n) * handledCPCountPlusOne; - n = m; +/** + * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values. + * + * @private + * @param {*} value The value to query. + * @returns {string} Returns the raw `toStringTag`. + */ +function getRawTag(value) { + var isOwn = hasOwnProperty.call(value, symToStringTag), + tag = value[symToStringTag]; - for (j = 0; j < inputLength; ++j) { - currentValue = input[j]; + try { + value[symToStringTag] = undefined; + var unmasked = true; + } catch (e) {} - if (currentValue < n && ++delta > maxInt) { - error('overflow'); - } + var result = nativeObjectToString.call(value); + if (unmasked) { + if (isOwn) { + value[symToStringTag] = tag; + } else { + delete value[symToStringTag]; + } + } + return result; +} - if (currentValue == n) { - // Represent delta as a generalized variable-length integer - for (q = delta, k = base; /* no condition */; k += base) { - t = k <= bias ? tMin : (k >= bias + tMax ? tMax : k - bias); - if (q < t) { - break; - } - qMinusT = q - t; - baseMinusT = base - t; - output.push( - stringFromCharCode(digitToBasic(t + qMinusT % baseMinusT, 0)) - ); - q = floor(qMinusT / baseMinusT); - } - - output.push(stringFromCharCode(digitToBasic(q, 0))); - bias = adapt(delta, handledCPCountPlusOne, handledCPCount == basicLength); - delta = 0; - ++handledCPCount; - } - } +/** + * Creates an array of the own enumerable symbols of `object`. + * + * @private + * @param {Object} object The object to query. + * @returns {Array} Returns the array of symbols. + */ +var getSymbols = !nativeGetSymbols ? stubArray : function(object) { + if (object == null) { + return []; + } + object = Object(object); + return arrayFilter(nativeGetSymbols(object), function(symbol) { + return propertyIsEnumerable.call(object, symbol); + }); +}; - ++delta; - ++n; +/** + * Gets the `toStringTag` of `value`. + * + * @private + * @param {*} value The value to query. + * @returns {string} Returns the `toStringTag`. + */ +var getTag = baseGetTag; - } - return output.join(''); - } +// Fallback for data views, maps, sets, and weak maps in IE 11 and promises in Node.js < 6. +if ((DataView && getTag(new DataView(new ArrayBuffer(1))) != dataViewTag) || + (Map && getTag(new Map) != mapTag) || + (Promise && getTag(Promise.resolve()) != promiseTag) || + (Set && getTag(new Set) != setTag) || + (WeakMap && getTag(new WeakMap) != weakMapTag)) { + getTag = function(value) { + var result = baseGetTag(value), + Ctor = result == objectTag ? value.constructor : undefined, + ctorString = Ctor ? toSource(Ctor) : ''; - /** - * Converts a Punycode string representing a domain name or an email address - * to Unicode. Only the Punycoded parts of the input will be converted, i.e. - * it doesn't matter if you call it on a string that has already been - * converted to Unicode. - * @memberOf punycode - * @param {String} input The Punycoded domain name or email address to - * convert to Unicode. - * @returns {String} The Unicode representation of the given Punycode - * string. - */ - function toUnicode(input) { - return mapDomain(input, function(string) { - return regexPunycode.test(string) - ? decode(string.slice(4).toLowerCase()) - : string; - }); - } + if (ctorString) { + switch (ctorString) { + case dataViewCtorString: return dataViewTag; + case mapCtorString: return mapTag; + case promiseCtorString: return promiseTag; + case setCtorString: return setTag; + case weakMapCtorString: return weakMapTag; + } + } + return result; + }; +} - /** - * Converts a Unicode string representing a domain name or an email address to - * Punycode. Only the non-ASCII parts of the domain name will be converted, - * i.e. it doesn't matter if you call it with a domain that's already in - * ASCII. - * @memberOf punycode - * @param {String} input The domain name or email address to convert, as a - * Unicode string. - * @returns {String} The Punycode representation of the given domain name or - * email address. - */ - function toASCII(input) { - return mapDomain(input, function(string) { - return regexNonASCII.test(string) - ? 'xn--' + encode(string) - : string; - }); - } +/** + * Checks if `value` is a valid array-like index. + * + * @private + * @param {*} value The value to check. + * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index. + * @returns {boolean} Returns `true` if `value` is a valid index, else `false`. + */ +function isIndex(value, length) { + length = length == null ? MAX_SAFE_INTEGER : length; + return !!length && + (typeof value == 'number' || reIsUint.test(value)) && + (value > -1 && value % 1 == 0 && value < length); +} - /*--------------------------------------------------------------------------*/ +/** + * Checks if `value` is suitable for use as unique object key. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is suitable, else `false`. + */ +function isKeyable(value) { + var type = typeof value; + return (type == 'string' || type == 'number' || type == 'symbol' || type == 'boolean') + ? (value !== '__proto__') + : (value === null); +} - /** Define the public API */ - punycode = { - /** - * A string representing the current Punycode.js version number. - * @memberOf punycode - * @type String - */ - 'version': '1.4.1', - /** - * An object of methods to convert from JavaScript's internal character - * representation (UCS-2) to Unicode code points, and back. - * @see - * @memberOf punycode - * @type Object - */ - 'ucs2': { - 'decode': ucs2decode, - 'encode': ucs2encode - }, - 'decode': decode, - 'encode': encode, - 'toASCII': toASCII, - 'toUnicode': toUnicode - }; +/** + * Checks if `func` has its source masked. + * + * @private + * @param {Function} func The function to check. + * @returns {boolean} Returns `true` if `func` is masked, else `false`. + */ +function isMasked(func) { + return !!maskSrcKey && (maskSrcKey in func); +} - /** Expose `punycode` */ - // Some AMD build optimizers, like r.js, check for specific condition patterns - // like the following: - if ( - typeof define == 'function' && - typeof define.amd == 'object' && - define.amd - ) { - define('punycode', function() { - return punycode; - }); - } else if (freeExports && freeModule) { - if (module.exports == freeExports) { - // in Node.js, io.js, or RingoJS v0.8.0+ - freeModule.exports = punycode; - } else { - // in Narwhal or RingoJS v0.7.0- - for (key in punycode) { - punycode.hasOwnProperty(key) && (freeExports[key] = punycode[key]); - } - } - } else { - // in Rhino or a web browser - root.punycode = punycode; - } +/** + * Checks if `value` is likely a prototype object. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a prototype, else `false`. + */ +function isPrototype(value) { + var Ctor = value && value.constructor, + proto = (typeof Ctor == 'function' && Ctor.prototype) || objectProto; -}(this)); + return value === proto; +} -},{}],"YsIc":[function(require,module,exports) { -'use strict'; +/** + * Converts `value` to a string using `Object.prototype.toString`. + * + * @private + * @param {*} value The value to convert. + * @returns {string} Returns the converted string. + */ +function objectToString(value) { + return nativeObjectToString.call(value); +} -module.exports = { - isString: function(arg) { - return typeof(arg) === 'string'; - }, - isObject: function(arg) { - return typeof(arg) === 'object' && arg !== null; - }, - isNull: function(arg) { - return arg === null; - }, - isNullOrUndefined: function(arg) { - return arg == null; +/** + * Converts `func` to its source code. + * + * @private + * @param {Function} func The function to convert. + * @returns {string} Returns the source code. + */ +function toSource(func) { + if (func != null) { + try { + return funcToString.call(func); + } catch (e) {} + try { + return (func + ''); + } catch (e) {} } -}; - -},{}],"J6GP":[function(require,module,exports) { -// Copyright Joyent, Inc. and other Node contributors. -// -// Permission is hereby granted, free of charge, to any person obtaining a -// copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to permit -// persons to whom the Software is furnished to do so, subject to the -// following conditions: -// -// The above copyright notice and this permission notice shall be included -// in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN -// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, -// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE -// USE OR OTHER DEALINGS IN THE SOFTWARE. -'use strict'; // If obj.hasOwnProperty has been overridden, then calling -// obj.hasOwnProperty(prop) will break. -// See: https://github.com/joyent/node/issues/1707 + return ''; +} -function hasOwnProperty(obj, prop) { - return Object.prototype.hasOwnProperty.call(obj, prop); +/** + * Performs a + * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) + * comparison between two values to determine if they are equivalent. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @returns {boolean} Returns `true` if the values are equivalent, else `false`. + * @example + * + * var object = { 'a': 1 }; + * var other = { 'a': 1 }; + * + * _.eq(object, object); + * // => true + * + * _.eq(object, other); + * // => false + * + * _.eq('a', 'a'); + * // => true + * + * _.eq('a', Object('a')); + * // => false + * + * _.eq(NaN, NaN); + * // => true + */ +function eq(value, other) { + return value === other || (value !== value && other !== other); } -module.exports = function (qs, sep, eq, options) { - sep = sep || '&'; - eq = eq || '='; - var obj = {}; +/** + * Checks if `value` is likely an `arguments` object. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an `arguments` object, + * else `false`. + * @example + * + * _.isArguments(function() { return arguments; }()); + * // => true + * + * _.isArguments([1, 2, 3]); + * // => false + */ +var isArguments = baseIsArguments(function() { return arguments; }()) ? baseIsArguments : function(value) { + return isObjectLike(value) && hasOwnProperty.call(value, 'callee') && + !propertyIsEnumerable.call(value, 'callee'); +}; - if (typeof qs !== 'string' || qs.length === 0) { - return obj; - } +/** + * Checks if `value` is classified as an `Array` object. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an array, else `false`. + * @example + * + * _.isArray([1, 2, 3]); + * // => true + * + * _.isArray(document.body.children); + * // => false + * + * _.isArray('abc'); + * // => false + * + * _.isArray(_.noop); + * // => false + */ +var isArray = Array.isArray; - var regexp = /\+/g; - qs = qs.split(sep); - var maxKeys = 1000; +/** + * Checks if `value` is array-like. A value is considered array-like if it's + * not a function and has a `value.length` that's an integer greater than or + * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is array-like, else `false`. + * @example + * + * _.isArrayLike([1, 2, 3]); + * // => true + * + * _.isArrayLike(document.body.children); + * // => true + * + * _.isArrayLike('abc'); + * // => true + * + * _.isArrayLike(_.noop); + * // => false + */ +function isArrayLike(value) { + return value != null && isLength(value.length) && !isFunction(value); +} - if (options && typeof options.maxKeys === 'number') { - maxKeys = options.maxKeys; - } +/** + * Checks if `value` is a buffer. + * + * @static + * @memberOf _ + * @since 4.3.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a buffer, else `false`. + * @example + * + * _.isBuffer(new Buffer(2)); + * // => true + * + * _.isBuffer(new Uint8Array(2)); + * // => false + */ +var isBuffer = nativeIsBuffer || stubFalse; - var len = qs.length; // maxKeys <= 0 means that we should not limit keys count +/** + * Performs a deep comparison between two values to determine if they are + * equivalent. + * + * **Note:** This method supports comparing arrays, array buffers, booleans, + * date objects, error objects, maps, numbers, `Object` objects, regexes, + * sets, strings, symbols, and typed arrays. `Object` objects are compared + * by their own, not inherited, enumerable properties. Functions and DOM + * nodes are compared by strict equality, i.e. `===`. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @returns {boolean} Returns `true` if the values are equivalent, else `false`. + * @example + * + * var object = { 'a': 1 }; + * var other = { 'a': 1 }; + * + * _.isEqual(object, other); + * // => true + * + * object === other; + * // => false + */ +function isEqual(value, other) { + return baseIsEqual(value, other); +} - if (maxKeys > 0 && len > maxKeys) { - len = maxKeys; +/** + * Checks if `value` is classified as a `Function` object. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a function, else `false`. + * @example + * + * _.isFunction(_); + * // => true + * + * _.isFunction(/abc/); + * // => false + */ +function isFunction(value) { + if (!isObject(value)) { + return false; } + // The use of `Object#toString` avoids issues with the `typeof` operator + // in Safari 9 which returns 'object' for typed arrays and other constructors. + var tag = baseGetTag(value); + return tag == funcTag || tag == genTag || tag == asyncTag || tag == proxyTag; +} - for (var i = 0; i < len; ++i) { - var x = qs[i].replace(regexp, '%20'), - idx = x.indexOf(eq), - kstr, - vstr, - k, - v; +/** + * Checks if `value` is a valid array-like length. + * + * **Note:** This method is loosely based on + * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a valid length, else `false`. + * @example + * + * _.isLength(3); + * // => true + * + * _.isLength(Number.MIN_VALUE); + * // => false + * + * _.isLength(Infinity); + * // => false + * + * _.isLength('3'); + * // => false + */ +function isLength(value) { + return typeof value == 'number' && + value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER; +} - if (idx >= 0) { - kstr = x.substr(0, idx); - vstr = x.substr(idx + 1); - } else { - kstr = x; - vstr = ''; - } +/** + * Checks if `value` is the + * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types) + * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`) + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an object, else `false`. + * @example + * + * _.isObject({}); + * // => true + * + * _.isObject([1, 2, 3]); + * // => true + * + * _.isObject(_.noop); + * // => true + * + * _.isObject(null); + * // => false + */ +function isObject(value) { + var type = typeof value; + return value != null && (type == 'object' || type == 'function'); +} - k = decodeURIComponent(kstr); - v = decodeURIComponent(vstr); +/** + * Checks if `value` is object-like. A value is object-like if it's not `null` + * and has a `typeof` result of "object". + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is object-like, else `false`. + * @example + * + * _.isObjectLike({}); + * // => true + * + * _.isObjectLike([1, 2, 3]); + * // => true + * + * _.isObjectLike(_.noop); + * // => false + * + * _.isObjectLike(null); + * // => false + */ +function isObjectLike(value) { + return value != null && typeof value == 'object'; +} - if (!hasOwnProperty(obj, k)) { - obj[k] = v; - } else if (isArray(obj[k])) { - obj[k].push(v); - } else { - obj[k] = [obj[k], v]; - } - } +/** + * Checks if `value` is classified as a typed array. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a typed array, else `false`. + * @example + * + * _.isTypedArray(new Uint8Array); + * // => true + * + * _.isTypedArray([]); + * // => false + */ +var isTypedArray = nodeIsTypedArray ? baseUnary(nodeIsTypedArray) : baseIsTypedArray; - return obj; -}; +/** + * Creates an array of the own enumerable property names of `object`. + * + * **Note:** Non-object values are coerced to objects. See the + * [ES spec](http://ecma-international.org/ecma-262/7.0/#sec-object.keys) + * for more details. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Object + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property names. + * @example + * + * function Foo() { + * this.a = 1; + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.keys(new Foo); + * // => ['a', 'b'] (iteration order is not guaranteed) + * + * _.keys('hi'); + * // => ['0', '1'] + */ +function keys(object) { + return isArrayLike(object) ? arrayLikeKeys(object) : baseKeys(object); +} -var isArray = Array.isArray || function (xs) { - return Object.prototype.toString.call(xs) === '[object Array]'; -}; -},{}],"bvhO":[function(require,module,exports) { -// Copyright Joyent, Inc. and other Node contributors. -// -// Permission is hereby granted, free of charge, to any person obtaining a -// copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to permit -// persons to whom the Software is furnished to do so, subject to the -// following conditions: -// -// The above copyright notice and this permission notice shall be included -// in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN -// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, -// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE -// USE OR OTHER DEALINGS IN THE SOFTWARE. -'use strict'; +/** + * This method returns a new empty array. + * + * @static + * @memberOf _ + * @since 4.13.0 + * @category Util + * @returns {Array} Returns the new empty array. + * @example + * + * var arrays = _.times(2, _.stubArray); + * + * console.log(arrays); + * // => [[], []] + * + * console.log(arrays[0] === arrays[1]); + * // => false + */ +function stubArray() { + return []; +} -var stringifyPrimitive = function (v) { - switch (typeof v) { - case 'string': - return v; +/** + * This method returns `false`. + * + * @static + * @memberOf _ + * @since 4.13.0 + * @category Util + * @returns {boolean} Returns `false`. + * @example + * + * _.times(2, _.stubFalse); + * // => [false, false] + */ +function stubFalse() { + return false; +} - case 'boolean': - return v ? 'true' : 'false'; +module.exports = isEqual; - case 'number': - return isFinite(v) ? v : ''; +},{}],"jcIg":[function(require,module,exports) { +"use strict"; - default: - return ''; - } +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.lazy = exports.fail = exports.succeed = exports.valueAt = exports.withDefault = exports.intersection = exports.union = exports.oneOf = exports.optional = exports.dict = exports.tuple = exports.array = exports.object = exports.constant = exports.unknownJson = exports.anyJson = exports.boolean = exports.number = exports.string = exports.isDecoderError = exports.Decoder = exports.Result = void 0; + +function _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function (obj) { return typeof obj; }; } else { _typeof = function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } + +/** + * Wraps values in an `Ok` type. + * + * Example: `ok(5) // => {ok: true, result: 5}` + */ +var ok = function (result) { + return { + ok: true, + result: result + }; }; +/** + * Typeguard for `Ok`. + */ -module.exports = function (obj, sep, eq, name) { - sep = sep || '&'; - eq = eq || '='; - if (obj === null) { - obj = undefined; - } +var isOk = function (r) { + return r.ok === true; +}; +/** + * Wraps errors in an `Err` type. + * + * Example: `err('on fire') // => {ok: false, error: 'on fire'}` + */ - if (typeof obj === 'object') { - return map(objectKeys(obj), function (k) { - var ks = encodeURIComponent(stringifyPrimitive(k)) + eq; - if (isArray(obj[k])) { - return map(obj[k], function (v) { - return ks + encodeURIComponent(stringifyPrimitive(v)); - }).join(sep); - } else { - return ks + encodeURIComponent(stringifyPrimitive(obj[k])); - } - }).join(sep); - } +var err = function (error) { + return { + ok: false, + error: error + }; +}; +/** + * Typeguard for `Err`. + */ - if (!name) return ''; - return encodeURIComponent(stringifyPrimitive(name)) + eq + encodeURIComponent(stringifyPrimitive(obj)); + +var isErr = function (r) { + return r.ok === false; }; +/** + * Create a `Promise` that either resolves with the result of `Ok` or rejects + * with the error of `Err`. + */ -var isArray = Array.isArray || function (xs) { - return Object.prototype.toString.call(xs) === '[object Array]'; + +var asPromise = function (r) { + return r.ok === true ? Promise.resolve(r.result) : Promise.reject(r.error); +}; +/** + * Unwraps a `Result` and returns either the result of an `Ok`, or + * `defaultValue`. + * + * Example: + * ``` + * Result.withDefault(5, number().run(json)) + * ``` + * + * It would be nice if `Decoder` had an instance method that mirrored this + * function. Such a method would look something like this: + * ``` + * class Decoder { + * runWithDefault = (defaultValue: A, json: any): A => + * Result.withDefault(defaultValue, this.run(json)); + * } + * + * number().runWithDefault(5, json) + * ``` + * Unfortunately, the type of `defaultValue: A` on the method causes issues + * with type inference on the `object` decoder in some situations. While these + * inference issues can be solved by providing the optional type argument for + * `object`s, the extra trouble and confusion doesn't seem worth it. + */ + + +var withDefault = function (defaultValue, r) { + return r.ok === true ? r.result : defaultValue; }; +/** + * Return the successful result, or throw an error. + */ -function map(xs, f) { - if (xs.map) return xs.map(f); - var res = []; - for (var i = 0; i < xs.length; i++) { - res.push(f(xs[i], i)); +var withException = function (r) { + if (r.ok === true) { + return r.result; + } else { + throw r.error; } +}; +/** + * Given an array of `Result`s, return the successful values. + */ - return res; -} -var objectKeys = Object.keys || function (obj) { - var res = []; +var successes = function (results) { + return results.reduce(function (acc, r) { + return r.ok === true ? acc.concat(r.result) : acc; + }, []); +}; +/** + * Apply `f` to the result of an `Ok`, or pass the error through. + */ - for (var key in obj) { - if (Object.prototype.hasOwnProperty.call(obj, key)) res.push(key); - } - return res; +var map = function (f, r) { + return r.ok === true ? ok(f(r.result)) : r; }; -},{}],"fk5h":[function(require,module,exports) { -'use strict'; +/** + * Apply `f` to the result of two `Ok`s, or pass an error through. If both + * `Result`s are errors then the first one is returned. + */ -exports.decode = exports.parse = require('./decode'); -exports.encode = exports.stringify = require('./encode'); -},{"./decode":"J6GP","./encode":"bvhO"}],"Mej7":[function(require,module,exports) { -// Copyright Joyent, Inc. and other Node contributors. -// -// Permission is hereby granted, free of charge, to any person obtaining a -// copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to permit -// persons to whom the Software is furnished to do so, subject to the -// following conditions: -// -// The above copyright notice and this permission notice shall be included -// in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN -// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, -// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE -// USE OR OTHER DEALINGS IN THE SOFTWARE. -'use strict'; +var map2 = function (f, ar, br) { + return ar.ok === false ? ar : br.ok === false ? br : ok(f(ar.result, br.result)); +}; +/** + * Apply `f` to the error of an `Err`, or pass the success through. + */ -var punycode = require('punycode'); -var util = require('./util'); -exports.parse = urlParse; -exports.resolve = urlResolve; -exports.resolveObject = urlResolveObject; -exports.format = urlFormat; +var mapError = function (f, r) { + return r.ok === true ? r : err(f(r.error)); +}; +/** + * Chain together a sequence of computations that may fail, similar to a + * `Promise`. If the first computation fails then the error will propagate + * through. If it succeeds, then `f` will be applied to the value, returning a + * new `Result`. + */ -exports.Url = Url; -function Url() { - this.protocol = null; - this.slashes = null; - this.auth = null; - this.host = null; - this.port = null; - this.hostname = null; - this.hash = null; - this.search = null; - this.query = null; - this.pathname = null; - this.path = null; - this.href = null; -} +var andThen = function (f, r) { + return r.ok === true ? f(r.result) : r; +}; -// Reference: RFC 3986, RFC 1808, RFC 2396 +var result = Object.freeze({ + ok: ok, + isOk: isOk, + err: err, + isErr: isErr, + asPromise: asPromise, + withDefault: withDefault, + withException: withException, + successes: successes, + map: map, + map2: map2, + mapError: mapError, + andThen: andThen +}); +/*! ***************************************************************************** +Copyright (c) Microsoft Corporation. All rights reserved. +Licensed under the Apache License, Version 2.0 (the "License"); you may not use +this file except in compliance with the License. You may obtain a copy of the +License at http://www.apache.org/licenses/LICENSE-2.0 + +THIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +KIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED +WARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE, +MERCHANTABLITY OR NON-INFRINGEMENT. + +See the Apache Version 2.0 License for specific language governing permissions +and limitations under the License. +***************************************************************************** */ -// define these here so at least they only have to be -// compiled once on the first module load. -var protocolPattern = /^([a-z0-9.+-]+:)/i, - portPattern = /:[0-9]*$/, +/* global Reflect, Promise */ - // Special case for a simple path URL - simplePathPattern = /^(\/\/?(?!\/)[^\?\s]*)(\?[^\s]*)?$/, +exports.Result = result; - // RFC 2396: characters reserved for delimiting URLs. - // We actually just auto-escape these. - delims = ['<', '>', '"', '`', ' ', '\r', '\n', '\t'], +var __assign = function () { + __assign = Object.assign || function __assign(t) { + for (var s, i = 1, n = arguments.length; i < n; i++) { + s = arguments[i]; - // RFC 2396: characters not allowed for various reasons. - unwise = ['{', '}', '|', '\\', '^', '`'].concat(delims), + for (var p in s) { + if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p]; + } + } - // Allowed by RFCs, but cause of XSS attacks. Always escape these. - autoEscape = ['\''].concat(unwise), - // Characters that are never ever allowed in a hostname. - // Note that any invalid chars are also handled, but these - // are the ones that are *expected* to be seen, so we fast-path - // them. - nonHostChars = ['%', '/', '?', ';', '#'].concat(autoEscape), - hostEndingChars = ['/', '?', '#'], - hostnameMaxLen = 255, - hostnamePartPattern = /^[+a-z0-9A-Z_-]{0,63}$/, - hostnamePartStart = /^([+a-z0-9A-Z_-]{0,63})(.*)$/, - // protocols that can allow "unsafe" and "unwise" chars. - unsafeProtocol = { - 'javascript': true, - 'javascript:': true - }, - // protocols that never have a hostname. - hostlessProtocol = { - 'javascript': true, - 'javascript:': true - }, - // protocols that always contain a // bit. - slashedProtocol = { - 'http': true, - 'https': true, - 'ftp': true, - 'gopher': true, - 'file': true, - 'http:': true, - 'https:': true, - 'ftp:': true, - 'gopher:': true, - 'file:': true - }, - querystring = require('querystring'); + return t; + }; -function urlParse(url, parseQueryString, slashesDenoteHost) { - if (url && util.isObject(url) && url instanceof Url) return url; + return __assign.apply(this, arguments); +}; - var u = new Url; - u.parse(url, parseQueryString, slashesDenoteHost); - return u; -} +function __rest(s, e) { + var t = {}; -Url.prototype.parse = function(url, parseQueryString, slashesDenoteHost) { - if (!util.isString(url)) { - throw new TypeError("Parameter 'url' must be a string, not " + typeof url); + for (var p in s) { + if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) t[p] = s[p]; } - // Copy chrome, IE, opera backslash-handling behavior. - // Back slashes before the query string get converted to forward slashes - // See: https://code.google.com/p/chromium/issues/detail?id=25916 - var queryIndex = url.indexOf('?'), - splitter = - (queryIndex !== -1 && queryIndex < url.indexOf('#')) ? '?' : '#', - uSplit = url.split(splitter), - slashRegex = /\\/g; - uSplit[0] = uSplit[0].replace(slashRegex, '/'); - url = uSplit.join(splitter); + if (s != null && typeof Object.getOwnPropertySymbols === "function") for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) { + if (e.indexOf(p[i]) < 0) t[p[i]] = s[p[i]]; + } + return t; +} - var rest = url; +var isEqual = require('lodash.isequal'); // this syntax avoids TS1192 - // trim before proceeding. - // This is to support parse stuff like " http://foo.com \n" - rest = rest.trim(); +/** + * Type guard for `DecoderError`. One use case of the type guard is in the + * `catch` of a promise. Typescript types the error argument of `catch` as + * `any`, so when dealing with a decoder as a promise you may need to + * distinguish between a `DecoderError` and an error string. + */ - if (!slashesDenoteHost && url.split('#').length === 1) { - // Try fast path regexp - var simplePath = simplePathPattern.exec(rest); - if (simplePath) { - this.path = rest; - this.href = rest; - this.pathname = simplePath[1]; - if (simplePath[2]) { - this.search = simplePath[2]; - if (parseQueryString) { - this.query = querystring.parse(this.search.substr(1)); - } else { - this.query = this.search.substr(1); - } - } else if (parseQueryString) { - this.search = ''; - this.query = {}; - } - return this; - } - } - var proto = protocolPattern.exec(rest); - if (proto) { - proto = proto[0]; - var lowerProto = proto.toLowerCase(); - this.protocol = lowerProto; - rest = rest.substr(proto.length); - } +var isDecoderError = function (a) { + return a.kind === 'DecoderError' && typeof a.at === 'string' && typeof a.message === 'string'; +}; +/* + * Helpers + */ - // figure out if it's got a host - // user@server is *always* interpreted as a hostname, and url - // resolution will treat //foo/bar as host=foo,path=bar because that's - // how the browser resolves relative URLs. - if (slashesDenoteHost || proto || rest.match(/^\/\/[^@\/]+@[^@\/]+/)) { - var slashes = rest.substr(0, 2) === '//'; - if (slashes && !(proto && hostlessProtocol[proto])) { - rest = rest.substr(2); - this.slashes = true; - } - } - if (!hostlessProtocol[proto] && - (slashes || (proto && !slashedProtocol[proto]))) { +exports.isDecoderError = isDecoderError; - // there's a hostname. - // the first instance of /, ?, ;, or # ends the host. - // - // If there is an @ in the hostname, then non-host chars *are* allowed - // to the left of the last @ sign, unless some host-ending character - // comes *before* the @-sign. - // URLs are obnoxious. - // - // ex: - // http://a@b@c/ => user:a@b host:c - // http://a@b?@c => user:a host:c path:/?@c +var isJsonArray = function (json) { + return Array.isArray(json); +}; - // v0.12 TODO(isaacs): This is not quite how Chrome does things. - // Review our test case against browsers more comprehensively. +var isJsonObject = function (json) { + return _typeof(json) === 'object' && json !== null && !isJsonArray(json); +}; - // find the first instance of any hostEndingChars - var hostEnd = -1; - for (var i = 0; i < hostEndingChars.length; i++) { - var hec = rest.indexOf(hostEndingChars[i]); - if (hec !== -1 && (hostEnd === -1 || hec < hostEnd)) - hostEnd = hec; - } +var typeString = function (json) { + switch (_typeof(json)) { + case 'string': + return 'a string'; - // at this point, either we have an explicit point where the - // auth portion cannot go past, or the last @ char is the decider. - var auth, atSign; - if (hostEnd === -1) { - // atSign can be anywhere. - atSign = rest.lastIndexOf('@'); - } else { - // atSign must be in auth portion. - // http://a@b/c@d => host:b auth:a path:/c@d - atSign = rest.lastIndexOf('@', hostEnd); - } + case 'number': + return 'a number'; - // Now we have a portion which is definitely the auth. - // Pull that off. - if (atSign !== -1) { - auth = rest.slice(0, atSign); - rest = rest.slice(atSign + 1); - this.auth = decodeURIComponent(auth); - } + case 'boolean': + return 'a boolean'; - // the host is the remaining to the left of the first non-host char - hostEnd = -1; - for (var i = 0; i < nonHostChars.length; i++) { - var hec = rest.indexOf(nonHostChars[i]); - if (hec !== -1 && (hostEnd === -1 || hec < hostEnd)) - hostEnd = hec; - } - // if we still have not hit it, then the entire thing is a host. - if (hostEnd === -1) - hostEnd = rest.length; + case 'undefined': + return 'undefined'; - this.host = rest.slice(0, hostEnd); - rest = rest.slice(hostEnd); + case 'object': + if (json instanceof Array) { + return 'an array'; + } else if (json === null) { + return 'null'; + } else { + return 'an object'; + } - // pull out port. - this.parseHost(); + default: + return JSON.stringify(json); + } +}; - // we've indicated that there is a hostname, - // so even if it's empty, it has to be present. - this.hostname = this.hostname || ''; +var expectedGot = function (expected, got) { + return "expected " + expected + ", got " + typeString(got); +}; - // if hostname begins with [ and ends with ] - // assume that it's an IPv6 address. - var ipv6Hostname = this.hostname[0] === '[' && - this.hostname[this.hostname.length - 1] === ']'; +var printPath = function (paths) { + return paths.map(function (path) { + return typeof path === 'string' ? "." + path : "[" + path + "]"; + }).join(''); +}; - // validate a little. - if (!ipv6Hostname) { - var hostparts = this.hostname.split(/\./); - for (var i = 0, l = hostparts.length; i < l; i++) { - var part = hostparts[i]; - if (!part) continue; - if (!part.match(hostnamePartPattern)) { - var newpart = ''; - for (var j = 0, k = part.length; j < k; j++) { - if (part.charCodeAt(j) > 127) { - // we replace non-ASCII char with a temporary placeholder - // we need this to make sure size of hostname is not - // broken by replacing non-ASCII by nothing - newpart += 'x'; - } else { - newpart += part[j]; - } - } - // we test again with ASCII char only - if (!newpart.match(hostnamePartPattern)) { - var validParts = hostparts.slice(0, i); - var notHost = hostparts.slice(i + 1); - var bit = part.match(hostnamePartStart); - if (bit) { - validParts.push(bit[1]); - notHost.unshift(bit[2]); - } - if (notHost.length) { - rest = '/' + notHost.join('.') + rest; - } - this.hostname = validParts.join('.'); - break; - } - } - } - } +var prependAt = function (newAt, _a) { + var at = _a.at, + rest = __rest(_a, ["at"]); - if (this.hostname.length > hostnameMaxLen) { - this.hostname = ''; - } else { - // hostnames are always lower case. - this.hostname = this.hostname.toLowerCase(); - } + return __assign({ + at: newAt + (at || '') + }, rest); +}; +/** + * Decoders transform json objects with unknown structure into known and + * verified forms. You can create objects of type `Decoder` with either the + * primitive decoder functions, such as `boolean()` and `string()`, or by + * applying higher-order decoders to the primitives, such as `array(boolean())` + * or `dict(string())`. + * + * Each of the decoder functions are available both as a static method on + * `Decoder` and as a function alias -- for example the string decoder is + * defined at `Decoder.string()`, but is also aliased to `string()`. Using the + * function aliases exported with the library is recommended. + * + * `Decoder` exposes a number of 'run' methods, which all decode json in the + * same way, but communicate success and failure in different ways. The `map` + * and `andThen` methods modify decoders without having to call a 'run' method. + * + * Alternatively, the main decoder `run()` method returns an object of type + * `Result`. This library provides a number of helper + * functions for dealing with the `Result` type, so you can do all the same + * things with a `Result` as with the decoder methods. + */ - if (!ipv6Hostname) { - // IDNA Support: Returns a punycoded representation of "domain". - // It only converts parts of the domain name that - // have non-ASCII characters, i.e. it doesn't matter if - // you call it with a domain that already is ASCII-only. - this.hostname = punycode.toASCII(this.hostname); - } - var p = this.port ? ':' + this.port : ''; - var h = this.hostname || ''; - this.host = h + p; - this.href += this.host; +var Decoder = +/** @class */ +function () { + /** + * The Decoder class constructor is kept private to separate the internal + * `decode` function from the external `run` function. The distinction + * between the two functions is that `decode` returns a + * `Partial` on failure, which contains an unfinished error + * report. When `run` is called on a decoder, the relevant series of `decode` + * calls is made, and then on failure the resulting `Partial` + * is turned into a `DecoderError` by filling in the missing information. + * + * While hiding the constructor may seem restrictive, leveraging the + * provided decoder combinators and helper functions such as + * `andThen` and `map` should be enough to build specialized decoders as + * needed. + */ + function Decoder(decode) { + var _this = this; - // strip [ and ] from the hostname - // the host field still retains them, though - if (ipv6Hostname) { - this.hostname = this.hostname.substr(1, this.hostname.length - 2); - if (rest[0] !== '/') { - rest = '/' + rest; - } - } - } + this.decode = decode; + /** + * Run the decoder and return a `Result` with either the decoded value or a + * `DecoderError` containing the json input, the location of the error, and + * the error message. + * + * Examples: + * ``` + * number().run(12) + * // => {ok: true, result: 12} + * + * string().run(9001) + * // => + * // { + * // ok: false, + * // error: { + * // kind: 'DecoderError', + * // input: 9001, + * // at: 'input', + * // message: 'expected a string, got 9001' + * // } + * // } + * ``` + */ - // now rest is set to the post-host stuff. - // chop off any delim chars. - if (!unsafeProtocol[lowerProto]) { + this.run = function (json) { + return mapError(function (error) { + return { + kind: 'DecoderError', + input: json, + at: 'input' + (error.at || ''), + message: error.message || '' + }; + }, _this.decode(json)); + }; + /** + * Run the decoder as a `Promise`. + */ - // First, make 100% sure that any "autoEscape" chars get - // escaped, even if encodeURIComponent doesn't think they - // need to be. - for (var i = 0, l = autoEscape.length; i < l; i++) { - var ae = autoEscape[i]; - if (rest.indexOf(ae) === -1) - continue; - var esc = encodeURIComponent(ae); - if (esc === ae) { - esc = escape(ae); - } - rest = rest.split(ae).join(esc); - } - } + this.runPromise = function (json) { + return asPromise(_this.run(json)); + }; + /** + * Run the decoder and return the value on success, or throw an exception + * with a formatted error string. + */ - // chop off from the tail first. - var hash = rest.indexOf('#'); - if (hash !== -1) { - // got a fragment string. - this.hash = rest.substr(hash); - rest = rest.slice(0, hash); - } - var qm = rest.indexOf('?'); - if (qm !== -1) { - this.search = rest.substr(qm); - this.query = rest.substr(qm + 1); - if (parseQueryString) { - this.query = querystring.parse(this.query); - } - rest = rest.slice(0, qm); - } else if (parseQueryString) { - // no query string, but parseQueryString still requested - this.search = ''; - this.query = {}; - } - if (rest) this.pathname = rest; - if (slashedProtocol[lowerProto] && - this.hostname && !this.pathname) { - this.pathname = '/'; - } - //to support http.request - if (this.pathname || this.search) { - var p = this.pathname || ''; - var s = this.search || ''; - this.path = p + s; - } + this.runWithException = function (json) { + return withException(_this.run(json)); + }; + /** + * Construct a new decoder that applies a transformation to the decoded + * result. If the decoder succeeds then `f` will be applied to the value. If + * it fails the error will propagated through. + * + * Example: + * ``` + * number().map(x => x * 5).run(10) + * // => {ok: true, result: 50} + * ``` + */ - // finally, reconstruct the href based on what has been validated. - this.href = this.format(); - return this; -}; -// format a parsed object into a url string -function urlFormat(obj) { - // ensure it's an object, and not a string url. - // If it's an obj, this is a no-op. - // this way, you can call url_format() on strings - // to clean up potentially wonky urls. - if (util.isString(obj)) obj = urlParse(obj); - if (!(obj instanceof Url)) return Url.prototype.format.call(obj); - return obj.format(); -} + this.map = function (f) { + return new Decoder(function (json) { + return map(f, _this.decode(json)); + }); + }; + /** + * Chain together a sequence of decoders. The first decoder will run, and + * then the function will determine what decoder to run second. If the result + * of the first decoder succeeds then `f` will be applied to the decoded + * value. If it fails the error will propagate through. + * + * This is a very powerful method -- it can act as both the `map` and `where` + * methods, can improve error messages for edge cases, and can be used to + * make a decoder for custom types. + * + * Example of adding an error message: + * ``` + * const versionDecoder = valueAt(['version'], number()); + * const infoDecoder3 = object({a: boolean()}); + * + * const decoder = versionDecoder.andThen(version => { + * switch (version) { + * case 3: + * return infoDecoder3; + * default: + * return fail(`Unable to decode info, version ${version} is not supported.`); + * } + * }); + * + * decoder.run({version: 3, a: true}) + * // => {ok: true, result: {a: true}} + * + * decoder.run({version: 5, x: 'abc'}) + * // => + * // { + * // ok: false, + * // error: {... message: 'Unable to decode info, version 5 is not supported.'} + * // } + * ``` + * + * Example of decoding a custom type: + * ``` + * // nominal type for arrays with a length of at least one + * type NonEmptyArray = T[] & { __nonEmptyArrayBrand__: void }; + * + * const nonEmptyArrayDecoder = (values: Decoder): Decoder> => + * array(values).andThen(arr => + * arr.length > 0 + * ? succeed(createNonEmptyArray(arr)) + * : fail(`expected a non-empty array, got an empty array`) + * ); + * ``` + */ -Url.prototype.format = function() { - var auth = this.auth || ''; - if (auth) { - auth = encodeURIComponent(auth); - auth = auth.replace(/%3A/i, ':'); - auth += '@'; - } - var protocol = this.protocol || '', - pathname = this.pathname || '', - hash = this.hash || '', - host = false, - query = ''; + this.andThen = function (f) { + return new Decoder(function (json) { + return andThen(function (value) { + return f(value).decode(json); + }, _this.decode(json)); + }); + }; + /** + * Add constraints to a decoder _without_ changing the resulting type. The + * `test` argument is a predicate function which returns true for valid + * inputs. When `test` fails on an input, the decoder fails with the given + * `errorMessage`. + * + * ``` + * const chars = (length: number): Decoder => + * string().where( + * (s: string) => s.length === length, + * `expected a string of length ${length}` + * ); + * + * chars(5).run('12345') + * // => {ok: true, result: '12345'} + * + * chars(2).run('HELLO') + * // => {ok: false, error: {... message: 'expected a string of length 2'}} + * + * chars(12).run(true) + * // => {ok: false, error: {... message: 'expected a string, got a boolean'}} + * ``` + */ - if (this.host) { - host = auth + this.host; - } else if (this.hostname) { - host = auth + (this.hostname.indexOf(':') === -1 ? - this.hostname : - '[' + this.hostname + ']'); - if (this.port) { - host += ':' + this.port; - } - } - if (this.query && - util.isObject(this.query) && - Object.keys(this.query).length) { - query = querystring.stringify(this.query); + this.where = function (test, errorMessage) { + return _this.andThen(function (value) { + return test(value) ? Decoder.succeed(value) : Decoder.fail(errorMessage); + }); + }; } + /** + * Decoder primitive that validates strings, and fails on all other input. + */ - var search = this.search || (query && ('?' + query)) || ''; - - if (protocol && protocol.substr(-1) !== ':') protocol += ':'; - // only the slashedProtocols get the //. Not mailto:, xmpp:, etc. - // unless they had them to begin with. - if (this.slashes || - (!protocol || slashedProtocol[protocol]) && host !== false) { - host = '//' + (host || ''); - if (pathname && pathname.charAt(0) !== '/') pathname = '/' + pathname; - } else if (!host) { - host = ''; - } - - if (hash && hash.charAt(0) !== '#') hash = '#' + hash; - if (search && search.charAt(0) !== '?') search = '?' + search; + Decoder.string = function () { + return new Decoder(function (json) { + return typeof json === 'string' ? ok(json) : err({ + message: expectedGot('a string', json) + }); + }); + }; + /** + * Decoder primitive that validates numbers, and fails on all other input. + */ - pathname = pathname.replace(/[?#]/g, function(match) { - return encodeURIComponent(match); - }); - search = search.replace('#', '%23'); - return protocol + host + pathname + search + hash; -}; + Decoder.number = function () { + return new Decoder(function (json) { + return typeof json === 'number' ? ok(json) : err({ + message: expectedGot('a number', json) + }); + }); + }; + /** + * Decoder primitive that validates booleans, and fails on all other input. + */ -function urlResolve(source, relative) { - return urlParse(source, false, true).resolve(relative); -} -Url.prototype.resolve = function(relative) { - return this.resolveObject(urlParse(relative, false, true)).format(); -}; + Decoder.boolean = function () { + return new Decoder(function (json) { + return typeof json === 'boolean' ? ok(json) : err({ + message: expectedGot('a boolean', json) + }); + }); + }; -function urlResolveObject(source, relative) { - if (!source) return relative; - return urlParse(source, false, true).resolveObject(relative); -} + Decoder.constant = function (value) { + return new Decoder(function (json) { + return isEqual(json, value) ? ok(value) : err({ + message: "expected " + JSON.stringify(value) + ", got " + JSON.stringify(json) + }); + }); + }; -Url.prototype.resolveObject = function(relative) { - if (util.isString(relative)) { - var rel = new Url(); - rel.parse(relative, false, true); - relative = rel; - } + Decoder.object = function (decoders) { + return new Decoder(function (json) { + if (isJsonObject(json) && decoders) { + var obj = {}; - var result = new Url(); - var tkeys = Object.keys(this); - for (var tk = 0; tk < tkeys.length; tk++) { - var tkey = tkeys[tk]; - result[tkey] = this[tkey]; - } + for (var key in decoders) { + if (decoders.hasOwnProperty(key)) { + var r = decoders[key].decode(json[key]); - // hash is always overridden, no matter what. - // even href="" will remove it. - result.hash = relative.hash; + if (r.ok === true) { + // tslint:disable-next-line:strict-type-predicates + if (r.result !== undefined) { + obj[key] = r.result; + } + } else if (json[key] === undefined) { + return err({ + message: "the key '" + key + "' is required but was not present" + }); + } else { + return err(prependAt("." + key, r.error)); + } + } + } - // if the relative url is empty, then there's nothing left to do here. - if (relative.href === '') { - result.href = result.format(); - return result; - } + return ok(obj); + } else if (isJsonObject(json)) { + return ok(json); + } else { + return err({ + message: expectedGot('an object', json) + }); + } + }); + }; - // hrefs like //foo/bar always cut to the protocol. - if (relative.slashes && !relative.protocol) { - // take everything except the protocol from relative - var rkeys = Object.keys(relative); - for (var rk = 0; rk < rkeys.length; rk++) { - var rkey = rkeys[rk]; - if (rkey !== 'protocol') - result[rkey] = relative[rkey]; - } + Decoder.array = function (decoder) { + return new Decoder(function (json) { + if (isJsonArray(json) && decoder) { + var decodeValue_1 = function (v, i) { + return mapError(function (err$$1) { + return prependAt("[" + i + "]", err$$1); + }, decoder.decode(v)); + }; - //urlParse appends trailing / to urls like http://www.example.com - if (slashedProtocol[result.protocol] && - result.hostname && !result.pathname) { - result.path = result.pathname = '/'; - } + return json.reduce(function (acc, v, i) { + return map2(function (arr, result) { + return arr.concat([result]); + }, acc, decodeValue_1(v, i)); + }, ok([])); + } else if (isJsonArray(json)) { + return ok(json); + } else { + return err({ + message: expectedGot('an array', json) + }); + } + }); + }; - result.href = result.format(); - return result; - } + Decoder.tuple = function (decoders) { + return new Decoder(function (json) { + if (isJsonArray(json)) { + if (json.length !== decoders.length) { + return err({ + message: "expected a tuple of length " + decoders.length + ", got one of length " + json.length + }); + } - if (relative.protocol && relative.protocol !== result.protocol) { - // if it's a known url protocol, then changing - // the protocol does weird things - // first, if it's not file:, then we MUST have a host, - // and if there was a path - // to begin with, then we MUST have a path. - // if it is file:, then the host is dropped, - // because that's known to be hostless. - // anything else is assumed to be absolute. - if (!slashedProtocol[relative.protocol]) { - var keys = Object.keys(relative); - for (var v = 0; v < keys.length; v++) { - var k = keys[v]; - result[k] = relative[k]; - } - result.href = result.format(); - return result; - } + var result = []; - result.protocol = relative.protocol; - if (!relative.host && !hostlessProtocol[relative.protocol]) { - var relPath = (relative.pathname || '').split('/'); - while (relPath.length && !(relative.host = relPath.shift())); - if (!relative.host) relative.host = ''; - if (!relative.hostname) relative.hostname = ''; - if (relPath[0] !== '') relPath.unshift(''); - if (relPath.length < 2) relPath.unshift(''); - result.pathname = relPath.join('/'); - } else { - result.pathname = relative.pathname; - } - result.search = relative.search; - result.query = relative.query; - result.host = relative.host || ''; - result.auth = relative.auth; - result.hostname = relative.hostname || relative.host; - result.port = relative.port; - // to support http.request - if (result.pathname || result.search) { - var p = result.pathname || ''; - var s = result.search || ''; - result.path = p + s; - } - result.slashes = result.slashes || relative.slashes; - result.href = result.format(); - return result; - } + for (var i = 0; i < decoders.length; i++) { + var nth = decoders[i].decode(json[i]); - var isSourceAbs = (result.pathname && result.pathname.charAt(0) === '/'), - isRelAbs = ( - relative.host || - relative.pathname && relative.pathname.charAt(0) === '/' - ), - mustEndAbs = (isRelAbs || isSourceAbs || - (result.host && relative.pathname)), - removeAllDots = mustEndAbs, - srcPath = result.pathname && result.pathname.split('/') || [], - relPath = relative.pathname && relative.pathname.split('/') || [], - psychotic = result.protocol && !slashedProtocol[result.protocol]; + if (nth.ok) { + result[i] = nth.result; + } else { + return err(prependAt("[" + i + "]", nth.error)); + } + } - // if the url is a non-slashed url, then relative - // links like ../.. should be able - // to crawl up to the hostname, as well. This is strange. - // result.protocol has already been set by now. - // Later on, put the first path part into the host field. - if (psychotic) { - result.hostname = ''; - result.port = null; - if (result.host) { - if (srcPath[0] === '') srcPath[0] = result.host; - else srcPath.unshift(result.host); - } - result.host = ''; - if (relative.protocol) { - relative.hostname = null; - relative.port = null; - if (relative.host) { - if (relPath[0] === '') relPath[0] = relative.host; - else relPath.unshift(relative.host); + return ok(result); + } else { + return err({ + message: expectedGot("a tuple of length " + decoders.length, json) + }); } - relative.host = null; - } - mustEndAbs = mustEndAbs && (relPath[0] === '' || srcPath[0] === ''); - } + }); + }; - if (isRelAbs) { - // it's absolute. - result.host = (relative.host || relative.host === '') ? - relative.host : result.host; - result.hostname = (relative.hostname || relative.hostname === '') ? - relative.hostname : result.hostname; - result.search = relative.search; - result.query = relative.query; - srcPath = relPath; - // fall through to the dot-handling below. - } else if (relPath.length) { - // it's relative - // throw away the existing file, and take the new path instead. - if (!srcPath) srcPath = []; - srcPath.pop(); - srcPath = srcPath.concat(relPath); - result.search = relative.search; - result.query = relative.query; - } else if (!util.isNullOrUndefined(relative.search)) { - // just pull out the search. - // like href='?foo'. - // Put this after the other two cases because it simplifies the booleans - if (psychotic) { - result.hostname = result.host = srcPath.shift(); - //occationaly the auth can get stuck only in host - //this especially happens in cases like - //url.resolveObject('mailto:local1@domain1', 'local2@domain2') - var authInHost = result.host && result.host.indexOf('@') > 0 ? - result.host.split('@') : false; - if (authInHost) { - result.auth = authInHost.shift(); - result.host = result.hostname = authInHost.shift(); - } - } - result.search = relative.search; - result.query = relative.query; - //to support http.request - if (!util.isNull(result.pathname) || !util.isNull(result.search)) { - result.path = (result.pathname ? result.pathname : '') + - (result.search ? result.search : ''); - } - result.href = result.format(); - return result; - } + Decoder.union = function (ad, bd) { + var decoders = []; - if (!srcPath.length) { - // no path at all. easy. - // we've already handled the other stuff above. - result.pathname = null; - //to support http.request - if (result.search) { - result.path = '/' + result.search; - } else { - result.path = null; + for (var _i = 2; _i < arguments.length; _i++) { + decoders[_i - 2] = arguments[_i]; } - result.href = result.format(); - return result; - } - // if a url ENDs in . or .., then it must get a trailing slash. - // however, if it ends in anything else non-slashy, - // then it must NOT get a trailing slash. - var last = srcPath.slice(-1)[0]; - var hasTrailingSlash = ( - (result.host || relative.host || srcPath.length > 1) && - (last === '.' || last === '..') || last === ''); + return Decoder.oneOf.apply(Decoder, [ad, bd].concat(decoders)); + }; - // strip single dots, resolve double dots to parent dir - // if the path tries to go above the root, `up` ends up > 0 - var up = 0; - for (var i = srcPath.length; i >= 0; i--) { - last = srcPath[i]; - if (last === '.') { - srcPath.splice(i, 1); - } else if (last === '..') { - srcPath.splice(i, 1); - up++; - } else if (up) { - srcPath.splice(i, 1); - up--; - } - } + Decoder.intersection = function (ad, bd) { + var ds = []; - // if the path is allowed to go above the root, restore leading ..s - if (!mustEndAbs && !removeAllDots) { - for (; up--; up) { - srcPath.unshift('..'); + for (var _i = 2; _i < arguments.length; _i++) { + ds[_i - 2] = arguments[_i]; } - } - - if (mustEndAbs && srcPath[0] !== '' && - (!srcPath[0] || srcPath[0].charAt(0) !== '/')) { - srcPath.unshift(''); - } - if (hasTrailingSlash && (srcPath.join('/').substr(-1) !== '/')) { - srcPath.push(''); - } + return new Decoder(function (json) { + return [ad, bd].concat(ds).reduce(function (acc, decoder) { + return map2(Object.assign, acc, decoder.decode(json)); + }, ok({})); + }); + }; + /** + * Escape hatch to bypass validation. Always succeeds and types the result as + * `any`. Useful for defining decoders incrementally, particularly for + * complex objects. + * + * Example: + * ``` + * interface User { + * name: string; + * complexUserData: ComplexType; + * } + * + * const userDecoder: Decoder = object({ + * name: string(), + * complexUserData: anyJson() + * }); + * ``` + */ - var isAbsolute = srcPath[0] === '' || - (srcPath[0] && srcPath[0].charAt(0) === '/'); - // put the host back - if (psychotic) { - result.hostname = result.host = isAbsolute ? '' : - srcPath.length ? srcPath.shift() : ''; - //occationaly the auth can get stuck only in host - //this especially happens in cases like - //url.resolveObject('mailto:local1@domain1', 'local2@domain2') - var authInHost = result.host && result.host.indexOf('@') > 0 ? - result.host.split('@') : false; - if (authInHost) { - result.auth = authInHost.shift(); - result.host = result.hostname = authInHost.shift(); - } - } + Decoder.anyJson = function () { + return new Decoder(function (json) { + return ok(json); + }); + }; + /** + * Decoder identity function which always succeeds and types the result as + * `unknown`. + */ - mustEndAbs = mustEndAbs || (result.host && srcPath.length); - if (mustEndAbs && !isAbsolute) { - srcPath.unshift(''); - } + Decoder.unknownJson = function () { + return new Decoder(function (json) { + return ok(json); + }); + }; + /** + * Decoder for json objects where the keys are unknown strings, but the values + * should all be of the same type. + * + * Example: + * ``` + * dict(number()).run({chocolate: 12, vanilla: 10, mint: 37}); + * // => {ok: true, result: {chocolate: 12, vanilla: 10, mint: 37}} + * ``` + */ - if (!srcPath.length) { - result.pathname = null; - result.path = null; - } else { - result.pathname = srcPath.join('/'); - } - //to support request.http - if (!util.isNull(result.pathname) || !util.isNull(result.search)) { - result.path = (result.pathname ? result.pathname : '') + - (result.search ? result.search : ''); - } - result.auth = relative.auth || result.auth; - result.slashes = result.slashes || relative.slashes; - result.href = result.format(); - return result; -}; + Decoder.dict = function (decoder) { + return new Decoder(function (json) { + if (isJsonObject(json)) { + var obj = {}; -Url.prototype.parseHost = function() { - var host = this.host; - var port = portPattern.exec(host); - if (port) { - port = port[0]; - if (port !== ':') { - this.port = port.substr(1); - } - host = host.substr(0, host.length - port.length); - } - if (host) this.hostname = host; -}; + for (var key in json) { + if (json.hasOwnProperty(key)) { + var r = decoder.decode(json[key]); -},{"punycode":"oWqx","./util":"YsIc","querystring":"fk5h"}],"Bm0n":[function(require,module,exports) { -if (typeof Object.create === 'function') { - // implementation from standard node.js 'util' module - module.exports = function inherits(ctor, superCtor) { - if (superCtor) { - ctor.super_ = superCtor - ctor.prototype = Object.create(superCtor.prototype, { - constructor: { - value: ctor, - enumerable: false, - writable: true, - configurable: true + if (r.ok === true) { + obj[key] = r.result; + } else { + return err(prependAt("." + key, r.error)); + } + } } - }) - } + + return ok(obj); + } else { + return err({ + message: expectedGot('an object', json) + }); + } + }); }; -} else { - // old school shim for old browsers - module.exports = function inherits(ctor, superCtor) { - if (superCtor) { - ctor.super_ = superCtor - var TempCtor = function () {} - TempCtor.prototype = superCtor.prototype - ctor.prototype = new TempCtor() - ctor.prototype.constructor = ctor - } - } -} + /** + * Decoder for values that may be `undefined`. This is primarily helpful for + * decoding interfaces with optional fields. + * + * Example: + * ``` + * interface User { + * id: number; + * isOwner?: boolean; + * } + * + * const decoder: Decoder = object({ + * id: number(), + * isOwner: optional(boolean()) + * }); + * ``` + */ -},{}],"yh9p":[function(require,module,exports) { -'use strict' -exports.byteLength = byteLength -exports.toByteArray = toByteArray -exports.fromByteArray = fromByteArray + Decoder.optional = function (decoder) { + return new Decoder(function (json) { + return json === undefined ? ok(undefined) : decoder.decode(json); + }); + }; + /** + * Decoder that attempts to run each decoder in `decoders` and either succeeds + * with the first successful decoder, or fails after all decoders have failed. + * + * Note that `oneOf` expects the decoders to all have the same return type, + * while `union` creates a decoder for the union type of all the input + * decoders. + * + * Examples: + * ``` + * oneOf(string(), number().map(String)) + * oneOf(constant('start'), constant('stop'), succeed('unknown')) + * ``` + */ -var lookup = [] -var revLookup = [] -var Arr = typeof Uint8Array !== 'undefined' ? Uint8Array : Array -var code = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/' -for (var i = 0, len = code.length; i < len; ++i) { - lookup[i] = code[i] - revLookup[code.charCodeAt(i)] = i -} + Decoder.oneOf = function () { + var decoders = []; -// Support decoding URL-safe base64 strings, as Node.js does. -// See: https://en.wikipedia.org/wiki/Base64#URL_applications -revLookup['-'.charCodeAt(0)] = 62 -revLookup['_'.charCodeAt(0)] = 63 + for (var _i = 0; _i < arguments.length; _i++) { + decoders[_i] = arguments[_i]; + } -function getLens (b64) { - var len = b64.length + return new Decoder(function (json) { + var errors = []; - if (len % 4 > 0) { - throw new Error('Invalid string. Length must be a multiple of 4') - } + for (var i = 0; i < decoders.length; i++) { + var r = decoders[i].decode(json); - // Trim off extra bytes after placeholder bytes are found - // See: https://github.com/beatgammit/base64-js/issues/42 - var validLen = b64.indexOf('=') - if (validLen === -1) validLen = len + if (r.ok === true) { + return r; + } else { + errors[i] = r.error; + } + } - var placeHoldersLen = validLen === len - ? 0 - : 4 - (validLen % 4) + var errorsList = errors.map(function (error) { + return "at error" + (error.at || '') + ": " + error.message; + }).join('", "'); + return err({ + message: "expected a value matching one of the decoders, got the errors [\"" + errorsList + "\"]" + }); + }); + }; + /** + * Decoder that always succeeds with either the decoded value, or a fallback + * default value. + */ - return [validLen, placeHoldersLen] -} -// base64 is 4/3 + up to two characters of the original data -function byteLength (b64) { - var lens = getLens(b64) - var validLen = lens[0] - var placeHoldersLen = lens[1] - return ((validLen + placeHoldersLen) * 3 / 4) - placeHoldersLen -} + Decoder.withDefault = function (defaultValue, decoder) { + return new Decoder(function (json) { + return ok(withDefault(defaultValue, decoder.decode(json))); + }); + }; + /** + * Decoder that pulls a specific field out of a json structure, instead of + * decoding and returning the full structure. The `paths` array describes the + * object keys and array indices to traverse, so that values can be pulled out + * of a nested structure. + * + * Example: + * ``` + * const decoder = valueAt(['a', 'b', 0], string()); + * + * decoder.run({a: {b: ['surprise!']}}) + * // => {ok: true, result: 'surprise!'} + * + * decoder.run({a: {x: 'cats'}}) + * // => {ok: false, error: {... at: 'input.a.b[0]' message: 'path does not exist'}} + * ``` + * + * Note that the `decoder` is ran on the value found at the last key in the + * path, even if the last key is not found. This allows the `optional` + * decoder to succeed when appropriate. + * ``` + * const optionalDecoder = valueAt(['a', 'b', 'c'], optional(string())); + * + * optionalDecoder.run({a: {b: {c: 'surprise!'}}}) + * // => {ok: true, result: 'surprise!'} + * + * optionalDecoder.run({a: {b: 'cats'}}) + * // => {ok: false, error: {... at: 'input.a.b.c' message: 'expected an object, got "cats"'} + * + * optionalDecoder.run({a: {b: {z: 1}}}) + * // => {ok: true, result: undefined} + * ``` + */ -function _byteLength (b64, validLen, placeHoldersLen) { - return ((validLen + placeHoldersLen) * 3 / 4) - placeHoldersLen -} -function toByteArray (b64) { - var tmp - var lens = getLens(b64) - var validLen = lens[0] - var placeHoldersLen = lens[1] + Decoder.valueAt = function (paths, decoder) { + return new Decoder(function (json) { + var jsonAtPath = json; - var arr = new Arr(_byteLength(b64, validLen, placeHoldersLen)) + for (var i = 0; i < paths.length; i++) { + if (jsonAtPath === undefined) { + return err({ + at: printPath(paths.slice(0, i + 1)), + message: 'path does not exist' + }); + } else if (typeof paths[i] === 'string' && !isJsonObject(jsonAtPath)) { + return err({ + at: printPath(paths.slice(0, i + 1)), + message: expectedGot('an object', jsonAtPath) + }); + } else if (typeof paths[i] === 'number' && !isJsonArray(jsonAtPath)) { + return err({ + at: printPath(paths.slice(0, i + 1)), + message: expectedGot('an array', jsonAtPath) + }); + } else { + jsonAtPath = jsonAtPath[paths[i]]; + } + } - var curByte = 0 + return mapError(function (error) { + return jsonAtPath === undefined ? { + at: printPath(paths), + message: 'path does not exist' + } : prependAt(printPath(paths), error); + }, decoder.decode(jsonAtPath)); + }); + }; + /** + * Decoder that ignores the input json and always succeeds with `fixedValue`. + */ - // if there are placeholders, only get up to the last complete 4 chars - var len = placeHoldersLen > 0 - ? validLen - 4 - : validLen - var i - for (i = 0; i < len; i += 4) { - tmp = - (revLookup[b64.charCodeAt(i)] << 18) | - (revLookup[b64.charCodeAt(i + 1)] << 12) | - (revLookup[b64.charCodeAt(i + 2)] << 6) | - revLookup[b64.charCodeAt(i + 3)] - arr[curByte++] = (tmp >> 16) & 0xFF - arr[curByte++] = (tmp >> 8) & 0xFF - arr[curByte++] = tmp & 0xFF - } + Decoder.succeed = function (fixedValue) { + return new Decoder(function (json) { + return ok(fixedValue); + }); + }; + /** + * Decoder that ignores the input json and always fails with `errorMessage`. + */ - if (placeHoldersLen === 2) { - tmp = - (revLookup[b64.charCodeAt(i)] << 2) | - (revLookup[b64.charCodeAt(i + 1)] >> 4) - arr[curByte++] = tmp & 0xFF - } - if (placeHoldersLen === 1) { - tmp = - (revLookup[b64.charCodeAt(i)] << 10) | - (revLookup[b64.charCodeAt(i + 1)] << 4) | - (revLookup[b64.charCodeAt(i + 2)] >> 2) - arr[curByte++] = (tmp >> 8) & 0xFF - arr[curByte++] = tmp & 0xFF - } + Decoder.fail = function (errorMessage) { + return new Decoder(function (json) { + return err({ + message: errorMessage + }); + }); + }; + /** + * Decoder that allows for validating recursive data structures. Unlike with + * functions, decoders assigned to variables can't reference themselves + * before they are fully defined. We can avoid prematurely referencing the + * decoder by wrapping it in a function that won't be called until use, at + * which point the decoder has been defined. + * + * Example: + * ``` + * interface Comment { + * msg: string; + * replies: Comment[]; + * } + * + * const decoder: Decoder = object({ + * msg: string(), + * replies: lazy(() => array(decoder)) + * }); + * ``` + */ - return arr -} -function tripletToBase64 (num) { - return lookup[num >> 18 & 0x3F] + - lookup[num >> 12 & 0x3F] + - lookup[num >> 6 & 0x3F] + - lookup[num & 0x3F] -} + Decoder.lazy = function (mkDecoder) { + return new Decoder(function (json) { + return mkDecoder().decode(json); + }); + }; -function encodeChunk (uint8, start, end) { - var tmp - var output = [] - for (var i = start; i < end; i += 3) { - tmp = - ((uint8[i] << 16) & 0xFF0000) + - ((uint8[i + 1] << 8) & 0xFF00) + - (uint8[i + 2] & 0xFF) - output.push(tripletToBase64(tmp)) - } - return output.join('') -} + return Decoder; +}(); +/* tslint:disable:variable-name */ -function fromByteArray (uint8) { - var tmp - var len = uint8.length - var extraBytes = len % 3 // if we have 1 byte left, pad 2 bytes - var parts = [] - var maxChunkLength = 16383 // must be multiple of 3 +/** See `Decoder.string` */ - // go through the array every three bytes, we'll deal with trailing stuff later - for (var i = 0, len2 = len - extraBytes; i < len2; i += maxChunkLength) { - parts.push(encodeChunk( - uint8, i, (i + maxChunkLength) > len2 ? len2 : (i + maxChunkLength) - )) - } - // pad the end with zeros, but make sure to not forget the extra bytes - if (extraBytes === 1) { - tmp = uint8[len - 1] - parts.push( - lookup[tmp >> 2] + - lookup[(tmp << 4) & 0x3F] + - '==' - ) - } else if (extraBytes === 2) { - tmp = (uint8[len - 2] << 8) + uint8[len - 1] - parts.push( - lookup[tmp >> 10] + - lookup[(tmp >> 4) & 0x3F] + - lookup[(tmp << 2) & 0x3F] + - '=' - ) - } +exports.Decoder = Decoder; +var string = Decoder.string; +/** See `Decoder.number` */ - return parts.join('') -} +exports.string = string; +var number = Decoder.number; +/** See `Decoder.boolean` */ -},{}],"JgNJ":[function(require,module,exports) { -exports.read = function (buffer, offset, isLE, mLen, nBytes) { - var e, m - var eLen = (nBytes * 8) - mLen - 1 - var eMax = (1 << eLen) - 1 - var eBias = eMax >> 1 - var nBits = -7 - var i = isLE ? (nBytes - 1) : 0 - var d = isLE ? -1 : 1 - var s = buffer[offset + i] +exports.number = number; +var boolean = Decoder.boolean; +/** See `Decoder.anyJson` */ - i += d +exports.boolean = boolean; +var anyJson = Decoder.anyJson; +/** See `Decoder.unknownJson` */ - e = s & ((1 << (-nBits)) - 1) - s >>= (-nBits) - nBits += eLen - for (; nBits > 0; e = (e * 256) + buffer[offset + i], i += d, nBits -= 8) {} +exports.anyJson = anyJson; +var unknownJson = Decoder.unknownJson; +/** See `Decoder.constant` */ - m = e & ((1 << (-nBits)) - 1) - e >>= (-nBits) - nBits += mLen - for (; nBits > 0; m = (m * 256) + buffer[offset + i], i += d, nBits -= 8) {} +exports.unknownJson = unknownJson; +var constant = Decoder.constant; +/** See `Decoder.object` */ - if (e === 0) { - e = 1 - eBias - } else if (e === eMax) { - return m ? NaN : ((s ? -1 : 1) * Infinity) - } else { - m = m + Math.pow(2, mLen) - e = e - eBias - } - return (s ? -1 : 1) * m * Math.pow(2, e - mLen) -} +exports.constant = constant; +var object = Decoder.object; +/** See `Decoder.array` */ -exports.write = function (buffer, value, offset, isLE, mLen, nBytes) { - var e, m, c - var eLen = (nBytes * 8) - mLen - 1 - var eMax = (1 << eLen) - 1 - var eBias = eMax >> 1 - var rt = (mLen === 23 ? Math.pow(2, -24) - Math.pow(2, -77) : 0) - var i = isLE ? 0 : (nBytes - 1) - var d = isLE ? 1 : -1 - var s = value < 0 || (value === 0 && 1 / value < 0) ? 1 : 0 +exports.object = object; +var array = Decoder.array; +/** See `Decoder.tuple` */ - value = Math.abs(value) +exports.array = array; +var tuple = Decoder.tuple; +/** See `Decoder.dict` */ - if (isNaN(value) || value === Infinity) { - m = isNaN(value) ? 1 : 0 - e = eMax - } else { - e = Math.floor(Math.log(value) / Math.LN2) - if (value * (c = Math.pow(2, -e)) < 1) { - e-- - c *= 2 - } - if (e + eBias >= 1) { - value += rt / c - } else { - value += rt * Math.pow(2, 1 - eBias) - } - if (value * c >= 2) { - e++ - c /= 2 - } +exports.tuple = tuple; +var dict = Decoder.dict; +/** See `Decoder.optional` */ - if (e + eBias >= eMax) { - m = 0 - e = eMax - } else if (e + eBias >= 1) { - m = ((value * c) - 1) * Math.pow(2, mLen) - e = e + eBias - } else { - m = value * Math.pow(2, eBias - 1) * Math.pow(2, mLen) - e = 0 - } - } +exports.dict = dict; +var optional = Decoder.optional; +/** See `Decoder.oneOf` */ - for (; mLen >= 8; buffer[offset + i] = m & 0xff, i += d, m /= 256, mLen -= 8) {} +exports.optional = optional; +var oneOf = Decoder.oneOf; +/** See `Decoder.union` */ - e = (e << mLen) | m - eLen += mLen - for (; eLen > 0; buffer[offset + i] = e & 0xff, i += d, e /= 256, eLen -= 8) {} +exports.oneOf = oneOf; +var union = Decoder.union; +/** See `Decoder.intersection` */ - buffer[offset + i - d] |= s * 128 -} +exports.union = union; +var intersection = Decoder.intersection; +/** See `Decoder.withDefault` */ -},{}],"REa7":[function(require,module,exports) { -var toString = {}.toString; +exports.intersection = intersection; +var withDefault$1 = Decoder.withDefault; +/** See `Decoder.valueAt` */ -module.exports = Array.isArray || function (arr) { - return toString.call(arr) == '[object Array]'; +exports.withDefault = withDefault$1; +var valueAt = Decoder.valueAt; +/** See `Decoder.succeed` */ + +exports.valueAt = valueAt; +var succeed = Decoder.succeed; +/** See `Decoder.fail` */ + +exports.succeed = succeed; +var fail = Decoder.fail; +/** See `Decoder.lazy` */ + +exports.fail = fail; +var lazy = Decoder.lazy; +exports.lazy = lazy; +},{"lodash.isequal":"a1XM"}],"BrLT":[function(require,module,exports) { +module.exports = { + "LOGGING_LEVEL": "INFO", + "BLOCKSTACK": { + "SUBDOMAIN_REGISTRAR": "https://registrar.cruxpay.com", + "GAIA_HUB": "https://hub.cruxpay.com", + "BNS_NODES": ["https://core.blockstack.org", "https://bns.cruxpay.com"] + } }; +},{}],"C9JJ":[function(require,module,exports) { +"use strict"; -},{}],"dskh":[function(require,module,exports) { +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = void 0; -var global = arguments[3]; -/*! - * The buffer module from node.js, for the browser. - * - * @author Feross Aboukhadijeh - * @license MIT - */ -/* eslint-disable no-proto */ +var _config = _interopRequireDefault(require("./config.json")); -'use strict' +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } -var base64 = require('base64-js') -var ieee754 = require('ieee754') -var isArray = require('isarray') +// @ts-ignore +var _default = _config.default; +exports.default = _default; +},{"./config.json":"BrLT"}],"S14b":[function(require,module,exports) { +"use strict"; -exports.Buffer = Buffer -exports.SlowBuffer = SlowBuffer -exports.INSPECT_MAX_BYTES = 50 +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.BaseError = void 0; -/** - * If `Buffer.TYPED_ARRAY_SUPPORT`: - * === true Use Uint8Array implementation (fastest) - * === false Use Object implementation (most compatible, even IE6) - * - * Browsers that support typed arrays are IE 10+, Firefox 4+, Chrome 7+, Safari 5.1+, - * Opera 11.6+, iOS 4.2+. - * - * Due to various browser bugs, sometimes the Object implementation will be used even - * when the browser supports typed arrays. - * - * Note: - * - * - Firefox 4-29 lacks support for adding new properties to `Uint8Array` instances, - * See: https://bugzilla.mozilla.org/show_bug.cgi?id=695438. - * - * - Chrome 9-10 is missing the `TypedArray.prototype.subarray` function. - * - * - IE10 has a broken `TypedArray.prototype.subarray` function which returns arrays of - * incorrect length in some situations. +var __extends = void 0 && (void 0).__extends || function () { + var _extendStatics = function extendStatics(d, b) { + _extendStatics = Object.setPrototypeOf || { + __proto__: [] + } instanceof Array && function (d, b) { + d.__proto__ = b; + } || function (d, b) { + for (var p in b) { + if (b.hasOwnProperty(p)) d[p] = b[p]; + } + }; - * We detect these buggy browsers and set `Buffer.TYPED_ARRAY_SUPPORT` to `false` so they - * get the Object implementation, which is slower but behaves correctly. - */ -Buffer.TYPED_ARRAY_SUPPORT = global.TYPED_ARRAY_SUPPORT !== undefined - ? global.TYPED_ARRAY_SUPPORT - : typedArraySupport() + return _extendStatics(d, b); + }; -/* - * Export kMaxLength after typed array support is determined. - */ -exports.kMaxLength = kMaxLength() + return function (d, b) { + _extendStatics(d, b); -function typedArraySupport () { - try { - var arr = new Uint8Array(1) - arr.__proto__ = {__proto__: Uint8Array.prototype, foo: function () { return 42 }} - return arr.foo() === 42 && // typed array instances can be augmented - typeof arr.subarray === 'function' && // chrome 9-10 lack `subarray` - arr.subarray(1, 1).byteLength === 0 // ie10 has broken `subarray` - } catch (e) { - return false - } -} + function __() { + this.constructor = d; + } -function kMaxLength () { - return Buffer.TYPED_ARRAY_SUPPORT - ? 0x7fffffff - : 0x3fffffff -} + d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); + }; +}(); -function createBuffer (that, length) { - if (kMaxLength() < length) { - throw new RangeError('Invalid typed array length') - } - if (Buffer.TYPED_ARRAY_SUPPORT) { - // Return an augmented `Uint8Array` instance, for best performance - that = new Uint8Array(length) - that.__proto__ = Buffer.prototype - } else { - // Fallback: Return an object instance of the Buffer class - if (that === null) { - that = new Buffer(length) +var BaseError = +/** @class */ +function (_super) { + __extends(BaseError, _super); + + function BaseError(cause, message, code, skipStackStructuring) { + var _newTarget = this.constructor; + + if (skipStackStructuring === void 0) { + skipStackStructuring = false; } - that.length = length - } - return that -} + var _this = _super.call(this, message) || this; -/** - * The Buffer constructor returns instances of `Uint8Array` that have their - * prototype changed to `Buffer.prototype`. Furthermore, `Buffer` is a subclass of - * `Uint8Array`, so the returned instances will have all the node `Buffer` methods - * and the `Uint8Array` methods. Square bracket notation works as expected -- it - * returns a single octet. - * - * The `Uint8Array` prototype remains unmodified. - */ + Object.setPrototypeOf(_this, _newTarget.prototype); + _this.name = _this.constructor.name; -function Buffer (arg, encodingOrOffset, length) { - if (!Buffer.TYPED_ARRAY_SUPPORT && !(this instanceof Buffer)) { - return new Buffer(arg, encodingOrOffset, length) - } + if (!skipStackStructuring) { + // Appending code as stack prefix if available + if (code && _this.stack) { + _this.stack = ("(" + code + ") ").concat(_this.stack); + } // Preserving the stack of the cause for ease of debugging - // Common case. - if (typeof arg === 'number') { - if (typeof encodingOrOffset === 'string') { - throw new Error( - 'If encoding is specified then the first argument must be a string' - ) + + if (_this.stack && cause && cause.stack) { + _this.stack = _this.stack.concat("\n\n").concat(cause.stack); + } } - return allocUnsafe(this, arg) + + return _this; } - return from(this, arg, encodingOrOffset, length) -} -Buffer.poolSize = 8192 // not used by this implementation + return BaseError; +}(Error); -// TODO: Legacy, not needed anymore. Remove in next major version. -Buffer._augment = function (arr) { - arr.__proto__ = Buffer.prototype - return arr -} +exports.BaseError = BaseError; +},{}],"uE8s":[function(require,module,exports) { +"use strict"; -function from (that, value, encodingOrOffset, length) { - if (typeof value === 'number') { - throw new TypeError('"value" argument must not be a number') - } +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.ClientError = void 0; - if (typeof ArrayBuffer !== 'undefined' && value instanceof ArrayBuffer) { - return fromArrayBuffer(that, value, encodingOrOffset, length) - } +var _ = require("."); - if (typeof value === 'string') { - return fromString(that, value, encodingOrOffset) - } +function _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } - return fromObject(that, value) -} +var __extends = void 0 && (void 0).__extends || function () { + var _extendStatics = function extendStatics(d, b) { + _extendStatics = Object.setPrototypeOf || { + __proto__: [] + } instanceof Array && function (d, b) { + d.__proto__ = b; + } || function (d, b) { + for (var p in b) { + if (b.hasOwnProperty(p)) d[p] = b[p]; + } + }; -/** - * Functionally equivalent to Buffer(arg, encoding) but throws a TypeError - * if value is a number. - * Buffer.from(str[, encoding]) - * Buffer.from(array) - * Buffer.from(buffer) - * Buffer.from(arrayBuffer[, byteOffset[, length]]) - **/ -Buffer.from = function (value, encodingOrOffset, length) { - return from(null, value, encodingOrOffset, length) -} + return _extendStatics(d, b); + }; -if (Buffer.TYPED_ARRAY_SUPPORT) { - Buffer.prototype.__proto__ = Uint8Array.prototype - Buffer.__proto__ = Uint8Array - if (typeof Symbol !== 'undefined' && Symbol.species && - Buffer[Symbol.species] === Buffer) { - // Fix subarray() in ES2016. See: https://github.com/feross/buffer/pull/97 - Object.defineProperty(Buffer, Symbol.species, { - value: null, - configurable: true - }) - } -} + return function (d, b) { + _extendStatics(d, b); -function assertSize (size) { - if (typeof size !== 'number') { - throw new TypeError('"size" argument must be a number') - } else if (size < 0) { - throw new RangeError('"size" argument must not be negative') - } -} + function __() { + this.constructor = d; + } -function alloc (that, size, fill, encoding) { - assertSize(size) - if (size <= 0) { - return createBuffer(that, size) - } - if (fill !== undefined) { - // Only pay attention to encoding if it's a string. This - // prevents accidentally sending in a number that would - // be interpretted as a start offset. - return typeof encoding === 'string' - ? createBuffer(that, size).fill(fill, encoding) - : createBuffer(that, size).fill(fill) - } - return createBuffer(that, size) -} + d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); + }; +}(); -/** - * Creates a new filled Buffer instance. - * alloc(size[, fill[, encoding]]) - **/ -Buffer.alloc = function (size, fill, encoding) { - return alloc(null, size, fill, encoding) -} +var ClientError = +/** @class */ +function (_super) { + __extends(ClientError, _super); -function allocUnsafe (that, size) { - assertSize(size) - that = createBuffer(that, size < 0 ? 0 : checked(size) | 0) - if (!Buffer.TYPED_ARRAY_SUPPORT) { - for (var i = 0; i < size; ++i) { - that[i] = 0 - } + function ClientError(cause, errorMessage, errorCode) { + var _this = this; + + var message = errorMessage || ""; + _this = _super.call(this, cause, message, errorCode) || this; + _this.name = _this.constructor.name; + _this.errorCode = errorCode || ClientError.FALLBACK_ERROR_CODE; + return _this; } - return that -} -/** - * Equivalent to Buffer(num), by default creates a non-zero-filled Buffer instance. - * */ -Buffer.allocUnsafe = function (size) { - return allocUnsafe(null, size) -} -/** - * Equivalent to SlowBuffer(num), by default creates a non-zero-filled Buffer instance. - */ -Buffer.allocUnsafeSlow = function (size) { - return allocUnsafe(null, size) -} + ClientError.fromError = function (error, messagePrefix) { + var msgPrefix = messagePrefix === undefined ? "" : messagePrefix + " : "; -function fromString (that, string, encoding) { - if (typeof encoding !== 'string' || encoding === '') { - encoding = 'utf8' - } + if (error instanceof ClientError) { + if (error.message !== undefined) { + error.message = msgPrefix + error.message; + } - if (!Buffer.isEncoding(encoding)) { - throw new TypeError('"encoding" must be a valid string encoding') - } + return error; + } else if (error instanceof _.PackageError) { + return new this(error, msgPrefix + error.message, error.errorCode); + } else if (typeof error === "string") { + return new this(null, msgPrefix + error); + } else if (error instanceof Error) { + return new this(error, msgPrefix + error.message); + } else { + throw new _.BaseError(null, "Wrong instance type: " + _typeof(error)); + } + }; - var length = byteLength(string, encoding) | 0 - that = createBuffer(that, length) + ClientError.FALLBACK_ERROR_CODE = 9000; + return ClientError; +}(_.BaseError); - var actual = that.write(string, encoding) +exports.ClientError = ClientError; +},{".":"yXIU"}],"R1rB":[function(require,module,exports) { +"use strict"; - if (actual !== length) { - // Writing a hex string, for example, that contains invalid characters will - // cause everything after the first invalid character to be ignored. (e.g. - // 'abxxcd' will be treated as 'ab') - that = that.slice(0, actual) - } +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.CruxClientError = void 0; - return that -} +var _clientError = require("./client-error"); -function fromArrayLike (that, array) { - var length = array.length < 0 ? 0 : checked(array.length) | 0 - that = createBuffer(that, length) - for (var i = 0; i < length; i += 1) { - that[i] = array[i] & 255 - } - return that -} +var __extends = void 0 && (void 0).__extends || function () { + var _extendStatics = function extendStatics(d, b) { + _extendStatics = Object.setPrototypeOf || { + __proto__: [] + } instanceof Array && function (d, b) { + d.__proto__ = b; + } || function (d, b) { + for (var p in b) { + if (b.hasOwnProperty(p)) d[p] = b[p]; + } + }; -function fromArrayBuffer (that, array, byteOffset, length) { - array.byteLength // this throws if `array` is not a valid ArrayBuffer + return _extendStatics(d, b); + }; - if (byteOffset < 0 || array.byteLength < byteOffset) { - throw new RangeError('\'offset\' is out of bounds') - } + return function (d, b) { + _extendStatics(d, b); - if (array.byteLength < byteOffset + (length || 0)) { - throw new RangeError('\'length\' is out of bounds') - } + function __() { + this.constructor = d; + } - if (byteOffset === undefined && length === undefined) { - array = new Uint8Array(array) - } else if (length === undefined) { - array = new Uint8Array(array, byteOffset) - } else { - array = new Uint8Array(array, byteOffset, length) - } + d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); + }; +}(); - if (Buffer.TYPED_ARRAY_SUPPORT) { - // Return an augmented `Uint8Array` instance, for best performance - that = array - that.__proto__ = Buffer.prototype - } else { - // Fallback: Return an object instance of the Buffer class - that = fromArrayLike(that, array) +var CruxClientError = +/** @class */ +function (_super) { + __extends(CruxClientError, _super); + + function CruxClientError() { + return _super !== null && _super.apply(this, arguments) || this; } - return that -} -function fromObject (that, obj) { - if (Buffer.isBuffer(obj)) { - var len = checked(obj.length) | 0 - that = createBuffer(that, len) + return CruxClientError; +}(_clientError.ClientError); - if (that.length === 0) { - return that - } +exports.CruxClientError = CruxClientError; +},{"./client-error":"uE8s"}],"JIdw":[function(require,module,exports) { +"use strict"; - obj.copy(that, 0, 0, len) - return that - } +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.PackageErrorCode = void 0; +var PackageErrorCode; +exports.PackageErrorCode = PackageErrorCode; - if (obj) { - if ((typeof ArrayBuffer !== 'undefined' && - obj.buffer instanceof ArrayBuffer) || 'length' in obj) { - if (typeof obj.length !== 'number' || isnan(obj.length)) { - return createBuffer(that, 0) - } - return fromArrayLike(that, obj) - } +(function (PackageErrorCode) { + // 1000s: NameService errors + PackageErrorCode[PackageErrorCode["BnsResolutionFailed"] = 1001] = "BnsResolutionFailed"; + PackageErrorCode[PackageErrorCode["UserDoesNotExist"] = 1002] = "UserDoesNotExist"; + PackageErrorCode[PackageErrorCode["NameIntegrityCheckFailed"] = 1003] = "NameIntegrityCheckFailed"; + PackageErrorCode[PackageErrorCode["BnsEmptyData"] = 1004] = "BnsEmptyData"; + PackageErrorCode[PackageErrorCode["AddressNotAvailable"] = 1005] = "AddressNotAvailable"; + PackageErrorCode[PackageErrorCode["AssetIDNotAvailable"] = 1006] = "AssetIDNotAvailable"; + PackageErrorCode[PackageErrorCode["DecryptionFailed"] = 1007] = "DecryptionFailed"; + PackageErrorCode[PackageErrorCode["IdentityMismatch"] = 1008] = "IdentityMismatch"; + PackageErrorCode[PackageErrorCode["GetNamesByAddressFailed"] = 1009] = "GetNamesByAddressFailed"; + PackageErrorCode[PackageErrorCode["KeyPairMismatch"] = 1010] = "KeyPairMismatch"; + PackageErrorCode[PackageErrorCode["DifferentWalletCruxID"] = 1011] = "DifferentWalletCruxID"; + PackageErrorCode[PackageErrorCode["GetAddressMapFailed"] = 1012] = "GetAddressMapFailed"; + PackageErrorCode[PackageErrorCode["InvalidWalletClientName"] = 1013] = "InvalidWalletClientName"; // 2000s: Gaia errors - if (obj.type === 'Buffer' && isArray(obj.data)) { - return fromArrayLike(that, obj.data) - } - } + PackageErrorCode[PackageErrorCode["GaiaUploadFailed"] = 2001] = "GaiaUploadFailed"; + PackageErrorCode[PackageErrorCode["GaiaCruxPayUploadFailed"] = 2002] = "GaiaCruxPayUploadFailed"; + PackageErrorCode[PackageErrorCode["GaiaClientConfigUploadFailed"] = 2003] = "GaiaClientConfigUploadFailed"; + PackageErrorCode[PackageErrorCode["GaiaProfileUploadFailed"] = 2005] = "GaiaProfileUploadFailed"; + PackageErrorCode[PackageErrorCode["GaiaCruxPayGetFailed"] = 2102] = "GaiaCruxPayGetFailed"; + PackageErrorCode[PackageErrorCode["GaiaClientConfigGetFailed"] = 2103] = "GaiaClientConfigGetFailed"; + PackageErrorCode[PackageErrorCode["GaiaGetFileFailed"] = 2105] = "GaiaGetFileFailed"; + PackageErrorCode[PackageErrorCode["TokenVerificationFailed"] = 2106] = "TokenVerificationFailed"; + PackageErrorCode[PackageErrorCode["GaiaEmptyResponse"] = 2107] = "GaiaEmptyResponse"; + PackageErrorCode[PackageErrorCode["FailedToGetGaiaUrlFromZonefile"] = 2018] = "FailedToGetGaiaUrlFromZonefile"; // 3000s: Registry errors - throw new TypeError('First argument must be a string, Buffer, ArrayBuffer, Array, or array-like object.') -} + PackageErrorCode[PackageErrorCode["SubdomainRegistrationFailed"] = 3001] = "SubdomainRegistrationFailed"; + PackageErrorCode[PackageErrorCode["SubdomainRegistrationAcknowledgementFailed"] = 3002] = "SubdomainRegistrationAcknowledgementFailed"; + PackageErrorCode[PackageErrorCode["FetchPendingRegistrationsByAddressFailed"] = 3003] = "FetchPendingRegistrationsByAddressFailed"; // Validating user input errors -function checked (length) { - // Note: cannot use `length < kMaxLength()` here because that fails when - // length is NaN (which is otherwise coerced to zero.) - if (length >= kMaxLength()) { - throw new RangeError('Attempt to allocate Buffer larger than maximum ' + - 'size: 0x' + kMaxLength().toString(16) + ' bytes') - } - return length | 0 -} + PackageErrorCode[PackageErrorCode["ExpectedEncryptionKeyValue"] = 4001] = "ExpectedEncryptionKeyValue"; + PackageErrorCode[PackageErrorCode["SubdomainRegexMatchFailure"] = 4002] = "SubdomainRegexMatchFailure"; + PackageErrorCode[PackageErrorCode["SubdomainLengthCheckFailure"] = 4003] = "SubdomainLengthCheckFailure"; + PackageErrorCode[PackageErrorCode["AddressMappingDecodingFailure"] = 4004] = "AddressMappingDecodingFailure"; + PackageErrorCode[PackageErrorCode["CruxIdNamespaceValidation"] = 4005] = "CruxIdNamespaceValidation"; + PackageErrorCode[PackageErrorCode["CruxIdInvalidStructure"] = 4006] = "CruxIdInvalidStructure"; + PackageErrorCode[PackageErrorCode["BlockstackIdNamespaceValidation"] = 4007] = "BlockstackIdNamespaceValidation"; + PackageErrorCode[PackageErrorCode["BlockstackIdInvalidStructure"] = 4008] = "BlockstackIdInvalidStructure"; + PackageErrorCode[PackageErrorCode["BlockstackIdInvalidSubdomainForTranslation"] = 4009] = "BlockstackIdInvalidSubdomainForTranslation"; + PackageErrorCode[PackageErrorCode["InvalidBlockstackDomainForTranslation"] = 4010] = "InvalidBlockstackDomainForTranslation"; + PackageErrorCode[PackageErrorCode["CurrencyDoesNotExistInClientMapping"] = 4011] = "CurrencyDoesNotExistInClientMapping"; + PackageErrorCode[PackageErrorCode["ExistingCruxIDFound"] = 4012] = "ExistingCruxIDFound"; + PackageErrorCode[PackageErrorCode["CruxIDUnavailable"] = 4013] = "CruxIDUnavailable"; + PackageErrorCode[PackageErrorCode["InvalidPrivateKeyFormat"] = 4014] = "InvalidPrivateKeyFormat"; + PackageErrorCode[PackageErrorCode["PrivateKeyRequired"] = 4015] = "PrivateKeyRequired"; + PackageErrorCode[PackageErrorCode["ConfigKeyManagerRequired"] = 4016] = "ConfigKeyManagerRequired"; + PackageErrorCode[PackageErrorCode["CruxDomainInvalidStructure"] = 4017] = "CruxDomainInvalidStructure"; + PackageErrorCode[PackageErrorCode["CruxDomainNamespaceValidation"] = 4018] = "CruxDomainNamespaceValidation"; + PackageErrorCode[PackageErrorCode["BlockstackDomainInvalidStructure"] = 4019] = "BlockstackDomainInvalidStructure"; + PackageErrorCode[PackageErrorCode["BlockstackDomainNamespaceValidation"] = 4020] = "BlockstackDomainNamespaceValidation"; // Internal errors -function SlowBuffer (length) { - if (+length != length) { // eslint-disable-line eqeqeq - length = 0 - } - return Buffer.alloc(+length) -} + PackageErrorCode[PackageErrorCode["CouldNotFindBlockstackConfigurationServiceClientConfig"] = 5001] = "CouldNotFindBlockstackConfigurationServiceClientConfig"; + PackageErrorCode[PackageErrorCode["CouldNotFindKeyPairToRestoreIdentity"] = 5002] = "CouldNotFindKeyPairToRestoreIdentity"; + PackageErrorCode[PackageErrorCode["CouldNotValidateZoneFile"] = 5003] = "CouldNotValidateZoneFile"; + PackageErrorCode[PackageErrorCode["CouldNotFindIdentityKeyPairToPutAddressMapping"] = 5004] = "CouldNotFindIdentityKeyPairToPutAddressMapping"; + PackageErrorCode[PackageErrorCode["CouldNotFindAssetListInClientConfig"] = 5005] = "CouldNotFindAssetListInClientConfig"; + PackageErrorCode[PackageErrorCode["CouldNotFindKeyPairToRegisterName"] = 5006] = "CouldNotFindKeyPairToRegisterName"; + PackageErrorCode[PackageErrorCode["ClientNotInitialized"] = 5007] = "ClientNotInitialized"; + PackageErrorCode[PackageErrorCode["InsecureNetworkCall"] = 5008] = "InsecureNetworkCall"; + PackageErrorCode[PackageErrorCode["MissingCruxDomainInCruxOnBoardingClient"] = 5009] = "MissingCruxDomainInCruxOnBoardingClient"; + PackageErrorCode[PackageErrorCode["IsNotSupported"] = 5010] = "IsNotSupported"; + PackageErrorCode[PackageErrorCode["MissingCruxDomainInCruxWalletClient"] = 5011] = "MissingCruxDomainInCruxWalletClient"; + PackageErrorCode[PackageErrorCode["MissingZoneFile"] = 5012] = "MissingZoneFile"; + PackageErrorCode[PackageErrorCode["MissingNameOwnerAddress"] = 5013] = "MissingNameOwnerAddress"; +})(PackageErrorCode || (exports.PackageErrorCode = PackageErrorCode = {})); +},{}],"UOYu":[function(require,module,exports) { +"use strict"; -Buffer.isBuffer = function isBuffer (b) { - return !!(b != null && b._isBuffer) -} +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.ERROR_STRINGS = void 0; -Buffer.compare = function compare (a, b) { - if (!Buffer.isBuffer(a) || !Buffer.isBuffer(b)) { - throw new TypeError('Arguments must be Buffers') - } +var _packageErrorCode = require("./package-error-code"); - if (a === b) return 0 +var _a; - var x = a.length - var y = b.length +var ERROR_STRINGS = (_a = {}, _a[_packageErrorCode.PackageErrorCode.AddressMappingDecodingFailure] = "AddressMapping decoding failure", _a[_packageErrorCode.PackageErrorCode.AddressNotAvailable] = "Currency address not available for user", _a[_packageErrorCode.PackageErrorCode.AssetIDNotAvailable] = "AssetID doesn\'t exist in client mapping", _a[_packageErrorCode.PackageErrorCode.BlockstackIdInvalidStructure] = "Invalid Blockstack ID", _a[_packageErrorCode.PackageErrorCode.BlockstackDomainInvalidStructure] = "Invalid Blockstack Domain", _a[_packageErrorCode.PackageErrorCode.BlockstackDomainNamespaceValidation] = "Invalid Blockstack Domain namespace: '{0}', should end with .id", _a[_packageErrorCode.PackageErrorCode.BlockstackIdInvalidSubdomainForTranslation] = "Invalid Blockstack ID, subdomain must be non null to be translated", _a[_packageErrorCode.PackageErrorCode.InvalidBlockstackDomainForTranslation] = "Only Blockstack Domains ending with _crux can be translated", _a[_packageErrorCode.PackageErrorCode.BlockstackIdNamespaceValidation] = "Invalid Blockstack ID namespace: '{0}', should end with .id", _a[_packageErrorCode.PackageErrorCode.BnsEmptyData] = "No name data available", _a[_packageErrorCode.PackageErrorCode.BnsResolutionFailed] = "'{0}' node not available because '{1}'", _a[_packageErrorCode.PackageErrorCode.ExistingCruxIDFound] = "keypair is already used in registration of CruxID: '{0}'", _a[_packageErrorCode.PackageErrorCode.ClientNotInitialized] = "CRUX Client not initialized.", _a[_packageErrorCode.PackageErrorCode.ConfigKeyManagerRequired] = "CruxOnBoardingClient should be instantiated with ConfigKeyManager", _a[_packageErrorCode.PackageErrorCode.CouldNotFindAssetListInClientConfig] = "Missing global asset list", _a[_packageErrorCode.PackageErrorCode.CouldNotFindBlockstackConfigurationServiceClientConfig] = "Missing client-config for: '{0}'", _a[_packageErrorCode.PackageErrorCode.CouldNotFindIdentityKeyPairToPutAddressMapping] = "Missing IdentityKeyPair", _a[_packageErrorCode.PackageErrorCode.CouldNotFindKeyPairToRestoreIdentity] = "Require keypair for restoring the identity", _a[_packageErrorCode.PackageErrorCode.CouldNotFindKeyPairToRegisterName] = "Require keypair for registering name/subdomain", _a[_packageErrorCode.PackageErrorCode.CouldNotValidateZoneFile] = "Invalid zonefile", _a[_packageErrorCode.PackageErrorCode.CruxDomainInvalidStructure] = "Invalid Crux Domian", _a[_packageErrorCode.PackageErrorCode.CruxDomainNamespaceValidation] = "Invalid Crux Domain namespace: '{0}', should end with .crux", _a[_packageErrorCode.PackageErrorCode.CruxIdNamespaceValidation] = "Invalid Crux ID namespace: '{0}', should end with .crux", _a[_packageErrorCode.PackageErrorCode.CruxIdInvalidStructure] = "Invalid Crux ID", _a[_packageErrorCode.PackageErrorCode.CruxIDUnavailable] = "'{0}' name is unavailable", _a[_packageErrorCode.PackageErrorCode.CurrencyDoesNotExistInClientMapping] = "Currency does not exist in wallet's client mapping", _a[_packageErrorCode.PackageErrorCode.DecryptionFailed] = "Decryption failed", _a[_packageErrorCode.PackageErrorCode.DifferentWalletCruxID] = "Already has a Crux ID registered with different wallet", _a[_packageErrorCode.PackageErrorCode.IsNotSupported] = "Method is not supported", _a[_packageErrorCode.PackageErrorCode.ExpectedEncryptionKeyValue] = "Missing encryptionKey method", _a[_packageErrorCode.PackageErrorCode.FetchPendingRegistrationsByAddressFailed] = "'{0}' failed with error '{1}'", _a[_packageErrorCode.PackageErrorCode.GaiaClientConfigUploadFailed] = "Unable to upload '{0}' to gaia: '{1}'", _a[_packageErrorCode.PackageErrorCode.GaiaCruxPayUploadFailed] = "Unable to upload '{0}' to gaia: '{1}'", _a[_packageErrorCode.PackageErrorCode.GaiaEmptyResponse] = "Gaia sent empty response", _a[_packageErrorCode.PackageErrorCode.GetAddressMapFailed] = "No address found for CRUX ID", _a[_packageErrorCode.PackageErrorCode.GaiaCruxPayGetFailed] = "Unable to get from gaia: '{0}'", _a[_packageErrorCode.PackageErrorCode.GaiaClientConfigGetFailed] = "Unable to get from gaia : '{0}'", _a[_packageErrorCode.PackageErrorCode.GaiaGetFileFailed] = "Unable to get gaia file: '{0}'", _a[_packageErrorCode.PackageErrorCode.GaiaProfileUploadFailed] = "Unable to upload '{0}' to gaia: '{1}'", _a[_packageErrorCode.PackageErrorCode.GaiaUploadFailed] = "Unable to upload '{0}' to gaia: '{1}'", _a[_packageErrorCode.PackageErrorCode.GetNamesByAddressFailed] = "'{0}' failed with error '{1}'", _a[_packageErrorCode.PackageErrorCode.InvalidPrivateKeyFormat] = "Private key should be either hex encoded, base64 encoded or WIF (base58 - compressed) only", _a[_packageErrorCode.PackageErrorCode.KeyPairMismatch] = "Invalid keyPair provided", _a[_packageErrorCode.PackageErrorCode.MissingCruxDomainInCruxOnBoardingClient] = "No domain found with the key provided or missing key in the CruxOnBoardingClient", _a[_packageErrorCode.PackageErrorCode.MissingCruxDomainInCruxWalletClient] = "No domain found with the key provided or missing key in the CruxWalletClient", _a[_packageErrorCode.PackageErrorCode.MissingZoneFile] = "Missing zonefile for: '{0}'", _a[_packageErrorCode.PackageErrorCode.MissingNameOwnerAddress] = "Missing owner address for: '{0}'", _a[_packageErrorCode.PackageErrorCode.NameIntegrityCheckFailed] = "Name resolution integrity check failed", _a[_packageErrorCode.PackageErrorCode.PrivateKeyRequired] = "CruxClient should be intantiated with a private key", _a[_packageErrorCode.PackageErrorCode.SubdomainLengthCheckFailure] = "Validation failed: Subdomain length must be between 4 to 20", _a[_packageErrorCode.PackageErrorCode.SubdomainRegexMatchFailure] = "Validation failed: Subdomain should start with alphabet and end with alphabet or number. Allowed characters are lowercase alphabets, numbers, - and _", _a[_packageErrorCode.PackageErrorCode.SubdomainRegistrationAcknowledgementFailed] = "Register call to registrar failed: '{0}'", _a[_packageErrorCode.PackageErrorCode.SubdomainRegistrationFailed] = "Register call to registrar failed: '{0}'", _a[_packageErrorCode.PackageErrorCode.TokenVerificationFailed] = "Token verification failed for '{0}'", _a[_packageErrorCode.PackageErrorCode.UserDoesNotExist] = "ID does not exist", _a[_packageErrorCode.PackageErrorCode.IdentityMismatch] = "Identity mismatch", _a[_packageErrorCode.PackageErrorCode.InvalidWalletClientName] = "Invalid Wallet Client Name", _a[_packageErrorCode.PackageErrorCode.InsecureNetworkCall] = "Insecure network call", _a[_packageErrorCode.PackageErrorCode.FailedToGetGaiaUrlFromZonefile] = "Failed to get Gaia URL from user's zonefile: '{0}'", _a); +exports.ERROR_STRINGS = ERROR_STRINGS; +},{"./package-error-code":"JIdw"}],"Z94C":[function(require,module,exports) { +"use strict"; - for (var i = 0, len = Math.min(x, y); i < len; ++i) { - if (a[i] !== b[i]) { - x = a[i] - y = b[i] - break - } - } +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.PackageError = void 0; - if (x < y) return -1 - if (y < x) return 1 - return 0 -} +var _baseError = require("./base-error"); -Buffer.isEncoding = function isEncoding (encoding) { - switch (String(encoding).toLowerCase()) { - case 'hex': - case 'utf8': - case 'utf-8': - case 'ascii': - case 'latin1': - case 'binary': - case 'base64': - case 'ucs2': - case 'ucs-2': - case 'utf16le': - case 'utf-16le': - return true - default: - return false - } -} +var _packageErrorCode = require("./package-error-code"); -Buffer.concat = function concat (list, length) { - if (!isArray(list)) { - throw new TypeError('"list" argument must be an Array of Buffers') - } +var __extends = void 0 && (void 0).__extends || function () { + var _extendStatics = function extendStatics(d, b) { + _extendStatics = Object.setPrototypeOf || { + __proto__: [] + } instanceof Array && function (d, b) { + d.__proto__ = b; + } || function (d, b) { + for (var p in b) { + if (b.hasOwnProperty(p)) d[p] = b[p]; + } + }; - if (list.length === 0) { - return Buffer.alloc(0) - } + return _extendStatics(d, b); + }; - var i - if (length === undefined) { - length = 0 - for (i = 0; i < list.length; ++i) { - length += list[i].length - } - } + return function (d, b) { + _extendStatics(d, b); - var buffer = Buffer.allocUnsafe(length) - var pos = 0 - for (i = 0; i < list.length; ++i) { - var buf = list[i] - if (!Buffer.isBuffer(buf)) { - throw new TypeError('"list" argument must be an Array of Buffers') + function __() { + this.constructor = d; } - buf.copy(buffer, pos) - pos += buf.length - } - return buffer -} -function byteLength (string, encoding) { - if (Buffer.isBuffer(string)) { - return string.length - } - if (typeof ArrayBuffer !== 'undefined' && typeof ArrayBuffer.isView === 'function' && - (ArrayBuffer.isView(string) || string instanceof ArrayBuffer)) { - return string.byteLength - } - if (typeof string !== 'string') { - string = '' + string - } + d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); + }; +}(); - var len = string.length - if (len === 0) return 0 +var PackageError = +/** @class */ +function (_super) { + __extends(PackageError, _super); - // Use a for loop to avoid recursion - var loweredCase = false - for (;;) { - switch (encoding) { - case 'ascii': - case 'latin1': - case 'binary': - return len - case 'utf8': - case 'utf-8': - case undefined: - return utf8ToBytes(string).length - case 'ucs2': - case 'ucs-2': - case 'utf16le': - case 'utf-16le': - return len * 2 - case 'hex': - return len >>> 1 - case 'base64': - return base64ToBytes(string).length - default: - if (loweredCase) return utf8ToBytes(string).length // assume utf8 - encoding = ('' + encoding).toLowerCase() - loweredCase = true + function PackageError(cause, message, code) { + var _this = _super.call(this, cause, message, code, true) || this; + + _this.name = _this.constructor.name; + _this.message = message || ""; + _this.errorCode = code || 1000; // Changing the Error name printed in the stacktrace if code is given; + + if (code) { + _this.name = _packageErrorCode.PackageErrorCode[code]; + + if (_this.stack) { + // Appending code as stack prefix if available + _this.stack = ("(" + code + ") ").concat(_this.stack); + } + } // Stack trace structuring; + + + if (_this.stack && cause && cause.stack) { + _this.stack = _this.stack.concat("\n\n").concat(cause.stack); } + + return _this; } -} -Buffer.byteLength = byteLength -function slowToString (encoding, start, end) { - var loweredCase = false + return PackageError; +}(_baseError.BaseError); - // No need to verify that "this.length <= MAX_UINT32" since it's a read-only - // property of a typed array. +exports.PackageError = PackageError; +},{"./base-error":"S14b","./package-error-code":"JIdw"}],"Jpvl":[function(require,module,exports) { +"use strict"; - // This behaves neither like String nor Uint8Array in that we set start/end - // to their upper/lower bounds if the value passed is out of range. - // undefined is handled specially as per ECMA-262 6th Edition, - // Section 13.3.3.7 Runtime Semantics: KeyedBindingInitialization. - if (start === undefined || start < 0) { - start = 0 - } - // Return early if start > this.length. Done here to prevent potential uint32 - // coercion fail below. - if (start > this.length) { - return '' - } +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.ErrorHelper = void 0; - if (end === undefined || end > this.length) { - end = this.length - } +var _errorString = require("./error-string"); - if (end <= 0) { - return '' +var _packageError = require("./package-error"); + +var __read = void 0 && (void 0).__read || function (o, n) { + var m = typeof Symbol === "function" && o[Symbol.iterator]; + if (!m) return o; + var i = m.call(o), + r, + ar = [], + e; + + try { + while ((n === void 0 || n-- > 0) && !(r = i.next()).done) { + ar.push(r.value); + } + } catch (error) { + e = { + error: error + }; + } finally { + try { + if (r && !r.done && (m = i["return"])) m.call(i); + } finally { + if (e) throw e.error; + } } - // Force coersion to uint32. This will also coerce falsey/NaN values to 0. - end >>>= 0 - start >>>= 0 + return ar; +}; - if (end <= start) { - return '' +var __spread = void 0 && (void 0).__spread || function () { + for (var ar = [], i = 0; i < arguments.length; i++) { + ar = ar.concat(__read(arguments[i])); } - if (!encoding) encoding = 'utf8' + return ar; +}; - while (true) { - switch (encoding) { - case 'hex': - return hexSlice(this, start, end) +var ErrorHelper = +/** @class */ +function () { + function ErrorHelper() {} - case 'utf8': - case 'utf-8': - return utf8Slice(this, start, end) + ErrorHelper.getPackageError = function (cause, errorCode) { + var optionalArgs = []; - case 'ascii': - return asciiSlice(this, start, end) + for (var _i = 2; _i < arguments.length; _i++) { + optionalArgs[_i - 2] = arguments[_i]; + } - case 'latin1': - case 'binary': - return latin1Slice(this, start, end) + var message = ErrorHelper.getErrorMessage.apply(ErrorHelper, __spread([errorCode], optionalArgs)); + return new _packageError.PackageError(cause, message, errorCode); + }; - case 'base64': - return base64Slice(this, start, end) + ErrorHelper.getErrorMessage = function (errorCode) { + var optionalArgs = []; - case 'ucs2': - case 'ucs-2': - case 'utf16le': - case 'utf-16le': - return utf16leSlice(this, start, end) + for (var _i = 1; _i < arguments.length; _i++) { + optionalArgs[_i - 1] = arguments[_i]; + } - default: - if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding) - encoding = (encoding + '').toLowerCase() - loweredCase = true + return ErrorHelper.formatErrorMessage.apply(ErrorHelper, __spread([_errorString.ERROR_STRINGS[errorCode]], optionalArgs)); + }; + + ErrorHelper.formatErrorMessage = function (errorMessage) { + var optionalArgs = []; + + for (var _i = 1; _i < arguments.length; _i++) { + optionalArgs[_i - 1] = arguments[_i]; } - } -} -// The property is used by `Buffer.isBuffer` and `is-buffer` (in Safari 5-7) to detect -// Buffer instances. -Buffer.prototype._isBuffer = true + if (!errorMessage) { + return errorMessage; + } -function swap (b, n, m) { - var i = b[n] - b[n] = b[m] - b[m] = i -} + var result = errorMessage; + var args = ErrorHelper.getOptionalArgsArrayFromFunctionCall(arguments, 1); -Buffer.prototype.swap16 = function swap16 () { - var len = this.length - if (len % 2 !== 0) { - throw new RangeError('Buffer size must be a multiple of 16-bits') - } - for (var i = 0; i < len; i += 2) { - swap(this, i, i + 1) - } - return this -} + if (args) { + for (var i = 0; i < args.length; i++) { + // tslint:disable-next-line: tsr-detect-non-literal-regexp + result = result.replace(new RegExp("\\{" + i + "\\}", "g"), args[i]); + } + } -Buffer.prototype.swap32 = function swap32 () { - var len = this.length - if (len % 4 !== 0) { - throw new RangeError('Buffer size must be a multiple of 32-bits') - } - for (var i = 0; i < len; i += 4) { - swap(this, i, i + 3) - swap(this, i + 1, i + 2) - } - return this -} + return result; + }; -Buffer.prototype.swap64 = function swap64 () { - var len = this.length - if (len % 8 !== 0) { - throw new RangeError('Buffer size must be a multiple of 64-bits') - } - for (var i = 0; i < len; i += 8) { - swap(this, i, i + 7) - swap(this, i + 1, i + 6) - swap(this, i + 2, i + 5) - swap(this, i + 3, i + 4) - } - return this -} + ErrorHelper.getOptionalArgsArrayFromFunctionCall = function (functionArguments, startIndex) { + if (functionArguments.length <= startIndex) { + return []; + } -Buffer.prototype.toString = function toString () { - var length = this.length | 0 - if (length === 0) return '' - if (arguments.length === 0) return utf8Slice(this, 0, length) - return slowToString.apply(this, arguments) -} + if (Array.isArray(functionArguments[startIndex])) { + return functionArguments[startIndex]; + } -Buffer.prototype.equals = function equals (b) { - if (!Buffer.isBuffer(b)) throw new TypeError('Argument must be a Buffer') - if (this === b) return true - return Buffer.compare(this, b) === 0 -} + return Array.prototype.slice.apply(functionArguments, [startIndex]); + }; -Buffer.prototype.inspect = function inspect () { - var str = '' - var max = exports.INSPECT_MAX_BYTES - if (this.length > 0) { - str = this.toString('hex', 0, max).match(/.{2}/g).join(' ') - if (this.length > max) str += ' ... ' - } - return '' -} + return ErrorHelper; +}(); -Buffer.prototype.compare = function compare (target, start, end, thisStart, thisEnd) { - if (!Buffer.isBuffer(target)) { - throw new TypeError('Argument must be a Buffer') - } +exports.ErrorHelper = ErrorHelper; +},{"./error-string":"UOYu","./package-error":"Z94C"}],"yXIU":[function(require,module,exports) { +"use strict"; - if (start === undefined) { - start = 0 - } - if (end === undefined) { - end = target ? target.length : 0 - } - if (thisStart === undefined) { - thisStart = 0 +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "BaseError", { + enumerable: true, + get: function () { + return _baseError.BaseError; } - if (thisEnd === undefined) { - thisEnd = this.length +}); +Object.defineProperty(exports, "CruxClientError", { + enumerable: true, + get: function () { + return _cruxClientError.CruxClientError; } - - if (start < 0 || end > target.length || thisStart < 0 || thisEnd > this.length) { - throw new RangeError('out of range index') +}); +Object.defineProperty(exports, "ErrorHelper", { + enumerable: true, + get: function () { + return _errorHelper.ErrorHelper; } - - if (thisStart >= thisEnd && start >= end) { - return 0 +}); +Object.defineProperty(exports, "ERROR_STRINGS", { + enumerable: true, + get: function () { + return _errorString.ERROR_STRINGS; } - if (thisStart >= thisEnd) { - return -1 +}); +Object.defineProperty(exports, "PackageError", { + enumerable: true, + get: function () { + return _packageError.PackageError; } - if (start >= end) { - return 1 +}); +Object.defineProperty(exports, "PackageErrorCode", { + enumerable: true, + get: function () { + return _packageErrorCode.PackageErrorCode; } +}); - start >>>= 0 - end >>>= 0 - thisStart >>>= 0 - thisEnd >>>= 0 - - if (this === target) return 0 +var _baseError = require("./base-error"); - var x = thisEnd - thisStart - var y = end - start - var len = Math.min(x, y) +var _cruxClientError = require("./crux-client-error"); - var thisCopy = this.slice(thisStart, thisEnd) - var targetCopy = target.slice(start, end) +var _errorHelper = require("./error-helper"); - for (var i = 0; i < len; ++i) { - if (thisCopy[i] !== targetCopy[i]) { - x = thisCopy[i] - y = targetCopy[i] - break - } - } +var _errorString = require("./error-string"); - if (x < y) return -1 - if (y < x) return 1 - return 0 -} +var _packageError = require("./package-error"); -// Finds either the first index of `val` in `buffer` at offset >= `byteOffset`, -// OR the last index of `val` in `buffer` at offset <= `byteOffset`. -// -// Arguments: -// - buffer - a Buffer to search -// - val - a string, Buffer, or number -// - byteOffset - an index into `buffer`; will be clamped to an int32 -// - encoding - an optional encoding, relevant is val is a string -// - dir - true for indexOf, false for lastIndexOf -function bidirectionalIndexOf (buffer, val, byteOffset, encoding, dir) { - // Empty buffer means no match - if (buffer.length === 0) return -1 +var _packageErrorCode = require("./package-error-code"); +},{"./base-error":"S14b","./crux-client-error":"R1rB","./error-helper":"Jpvl","./error-string":"UOYu","./package-error":"Z94C","./package-error-code":"JIdw"}],"j93N":[function(require,module,exports) { +"use strict"; - // Normalize byteOffset - if (typeof byteOffset === 'string') { - encoding = byteOffset - byteOffset = 0 - } else if (byteOffset > 0x7fffffff) { - byteOffset = 0x7fffffff - } else if (byteOffset < -0x80000000) { - byteOffset = -0x80000000 - } - byteOffset = +byteOffset // Coerce to Number. - if (isNaN(byteOffset)) { - // byteOffset: it it's undefined, null, NaN, "foo", etc, search whole buffer - byteOffset = dir ? 0 : (buffer.length - 1) - } +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.IdTranslator = exports.BlockstackDomainId = exports.CruxDomainId = exports.BlockstackId = exports.CruxId = exports.validateSubdomain = exports.CRUX_DOMAIN_SUFFIX = exports.DEFAULT_BLOCKSTACK_NAMESPACE = exports.DEFAULT_CRUX_NAMESPACE = void 0; - // Normalize byteOffset: negative offsets start from the end of the buffer - if (byteOffset < 0) byteOffset = buffer.length + byteOffset - if (byteOffset >= buffer.length) { - if (dir) return -1 - else byteOffset = buffer.length - 1 - } else if (byteOffset < 0) { - if (dir) byteOffset = 0 - else return -1 - } +var _error = require("./error"); - // Normalize val - if (typeof val === 'string') { - val = Buffer.from(val, encoding) - } +var __assign = void 0 && (void 0).__assign || function () { + __assign = Object.assign || function (t) { + for (var s, i = 1, n = arguments.length; i < n; i++) { + s = arguments[i]; - // Finally, search either indexOf (if dir is true) or lastIndexOf - if (Buffer.isBuffer(val)) { - // Special case: looking for empty string/buffer always fails - if (val.length === 0) { - return -1 - } - return arrayIndexOf(buffer, val, byteOffset, encoding, dir) - } else if (typeof val === 'number') { - val = val & 0xFF // Search for a byte value [0-255] - if (Buffer.TYPED_ARRAY_SUPPORT && - typeof Uint8Array.prototype.indexOf === 'function') { - if (dir) { - return Uint8Array.prototype.indexOf.call(buffer, val, byteOffset) - } else { - return Uint8Array.prototype.lastIndexOf.call(buffer, val, byteOffset) + for (var p in s) { + if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p]; } } - return arrayIndexOf(buffer, [ val ], byteOffset, encoding, dir) - } - - throw new TypeError('val must be string, number or Buffer') -} -function arrayIndexOf (arr, val, byteOffset, encoding, dir) { - var indexSize = 1 - var arrLength = arr.length - var valLength = val.length + return t; + }; - if (encoding !== undefined) { - encoding = String(encoding).toLowerCase() - if (encoding === 'ucs2' || encoding === 'ucs-2' || - encoding === 'utf16le' || encoding === 'utf-16le') { - if (arr.length < 2 || val.length < 2) { - return -1 - } - indexSize = 2 - arrLength /= 2 - valLength /= 2 - byteOffset /= 2 - } - } + return __assign.apply(this, arguments); +}; - function read (buf, i) { - if (indexSize === 1) { - return buf[i] - } else { - return buf.readUInt16BE(i * indexSize) - } - } +var __read = void 0 && (void 0).__read || function (o, n) { + var m = typeof Symbol === "function" && o[Symbol.iterator]; + if (!m) return o; + var i = m.call(o), + r, + ar = [], + e; - var i - if (dir) { - var foundIndex = -1 - for (i = byteOffset; i < arrLength; i++) { - if (read(arr, i) === read(val, foundIndex === -1 ? 0 : i - foundIndex)) { - if (foundIndex === -1) foundIndex = i - if (i - foundIndex + 1 === valLength) return foundIndex * indexSize - } else { - if (foundIndex !== -1) i -= i - foundIndex - foundIndex = -1 - } + try { + while ((n === void 0 || n-- > 0) && !(r = i.next()).done) { + ar.push(r.value); } - } else { - if (byteOffset + valLength > arrLength) byteOffset = arrLength - valLength - for (i = byteOffset; i >= 0; i--) { - var found = true - for (var j = 0; j < valLength; j++) { - if (read(arr, i + j) !== read(val, j)) { - found = false - break - } - } - if (found) return i + } catch (error) { + e = { + error: error + }; + } finally { + try { + if (r && !r.done && (m = i["return"])) m.call(i); + } finally { + if (e) throw e.error; } } - return -1 -} + return ar; +}; -Buffer.prototype.includes = function includes (val, byteOffset, encoding) { - return this.indexOf(val, byteOffset, encoding) !== -1 -} +var DEFAULT_CRUX_NAMESPACE = "crux"; +exports.DEFAULT_CRUX_NAMESPACE = DEFAULT_CRUX_NAMESPACE; +var DEFAULT_BLOCKSTACK_NAMESPACE = "id"; +exports.DEFAULT_BLOCKSTACK_NAMESPACE = DEFAULT_BLOCKSTACK_NAMESPACE; +var CRUX_DOMAIN_SUFFIX = "_crux"; +exports.CRUX_DOMAIN_SUFFIX = CRUX_DOMAIN_SUFFIX; -Buffer.prototype.indexOf = function indexOf (val, byteOffset, encoding) { - return bidirectionalIndexOf(this, val, byteOffset, encoding, true) -} +var validateSubdomain = function validateSubdomain(subDomain) { + var subdomainRegex = "^[a-z]([a-z]|[0-9]|-|_)*([a-z]|[0-9])$"; + var subdomainMinLength = 4; + var subdomainMaxLength = 20; // tslint:disable-next-line: tsr-detect-non-literal-regexp -Buffer.prototype.lastIndexOf = function lastIndexOf (val, byteOffset, encoding) { - return bidirectionalIndexOf(this, val, byteOffset, encoding, false) -} + if (!subDomain.match(new RegExp(subdomainRegex))) { + throw _error.ErrorHelper.getPackageError(null, _error.PackageErrorCode.SubdomainRegexMatchFailure); + } -function hexWrite (buf, string, offset, length) { - offset = Number(offset) || 0 - var remaining = buf.length - offset - if (!length) { - length = remaining - } else { - length = Number(length) - if (length > remaining) { - length = remaining - } + if (subDomain.length < subdomainMinLength || subDomain.length > subdomainMaxLength) { + throw _error.ErrorHelper.getPackageError(null, _error.PackageErrorCode.SubdomainLengthCheckFailure); } +}; - // must be an even number of digits - var strLen = string.length - if (strLen % 2 !== 0) throw new TypeError('Invalid hex string') +exports.validateSubdomain = validateSubdomain; - if (length > strLen / 2) { - length = strLen / 2 - } - for (var i = 0; i < length; ++i) { - var parsed = parseInt(string.substr(i * 2, 2), 16) - if (isNaN(parsed)) return i - buf[offset + i] = parsed - } - return i -} +var CruxId = +/** @class */ +function () { + function CruxId(inputComponents) { + var _this = this; -function utf8Write (buf, string, offset, length) { - return blitBuffer(utf8ToBytes(string, buf.length - offset), buf, offset, length) -} + this.toString = function () { + var cruxSubdomainPart = _this.components.subdomain + "@"; + var otherPart = _this.components.domain + "." + _this.components.namespace; + return cruxSubdomainPart + otherPart; + }; // validateSubdomain(inputComponents.subdomain); -function asciiWrite (buf, string, offset, length) { - return blitBuffer(asciiToBytes(string), buf, offset, length) -} -function latin1Write (buf, string, offset, length) { - return asciiWrite(buf, string, offset, length) -} + this.components = { + domain: inputComponents.domain.toLowerCase(), + namespace: DEFAULT_CRUX_NAMESPACE, + subdomain: inputComponents.subdomain.toLowerCase() + }; + } -function base64Write (buf, string, offset, length) { - return blitBuffer(base64ToBytes(string), buf, offset, length) -} + CruxId.fromString = function (stringRepresentation) { + var _a; -function ucs2Write (buf, string, offset, length) { - return blitBuffer(utf16leToBytes(string, buf.length - offset), buf, offset, length) -} + stringRepresentation = stringRepresentation.toLowerCase(); + var arrayCruxId = stringRepresentation.split(/[.@]/); + var cruxSubdomain = ""; + var cruxDomain = ""; + var cruxNamespace = ""; -Buffer.prototype.write = function write (string, offset, length, encoding) { - // Buffer#write(string) - if (offset === undefined) { - encoding = 'utf8' - length = this.length - offset = 0 - // Buffer#write(string, encoding) - } else if (length === undefined && typeof offset === 'string') { - encoding = offset - length = this.length - offset = 0 - // Buffer#write(string, offset[, length][, encoding]) - } else if (isFinite(offset)) { - offset = offset | 0 - if (isFinite(length)) { - length = length | 0 - if (encoding === undefined) encoding = 'utf8' + if (arrayCruxId.length === 3) { + _a = __read(arrayCruxId, 3), cruxSubdomain = _a[0], cruxDomain = _a[1], cruxNamespace = _a[2]; // foo@exodus.crux } else { - encoding = length - length = undefined + throw _error.ErrorHelper.getPackageError(null, _error.PackageErrorCode.CruxIdInvalidStructure); } - // legacy write(string, encoding, offset, length) - remove in v0.13 - } else { - throw new Error( - 'Buffer.write(string, encoding, offset[, length]) is no longer supported' - ) - } - var remaining = this.length - offset - if (length === undefined || length > remaining) length = remaining + if (cruxNamespace !== DEFAULT_CRUX_NAMESPACE) { + throw _error.ErrorHelper.getPackageError(null, _error.PackageErrorCode.CruxIdNamespaceValidation, cruxNamespace); + } - if ((string.length > 0 && (length < 0 || offset < 0)) || offset > this.length) { - throw new RangeError('Attempt to write outside buffer bounds') - } + return new CruxId({ + domain: cruxDomain, + subdomain: cruxSubdomain + }); + }; - if (!encoding) encoding = 'utf8' + return CruxId; +}(); - var loweredCase = false - for (;;) { - switch (encoding) { - case 'hex': - return hexWrite(this, string, offset, length) +exports.CruxId = CruxId; - case 'utf8': - case 'utf-8': - return utf8Write(this, string, offset, length) +var BlockstackId = +/** @class */ +function () { + function BlockstackId(inputComponents) { + var _this = this; - case 'ascii': - return asciiWrite(this, string, offset, length) + this.toString = function () { + var bsSubdomainPart = _this.components.subdomain.length > 0 ? _this.components.subdomain + "." : ""; + return bsSubdomainPart + _this.components.domain + "." + _this.components.namespace; + }; - case 'latin1': - case 'binary': - return latin1Write(this, string, offset, length) + this.components = __assign(__assign({}, inputComponents), { + namespace: DEFAULT_BLOCKSTACK_NAMESPACE + }); + } - case 'base64': - // Warning: maxLength not taken into account in base64Write - return base64Write(this, string, offset, length) + BlockstackId.fromString = function (stringRepresentation) { + var _a, _b; - case 'ucs2': - case 'ucs-2': - case 'utf16le': - case 'utf-16le': - return ucs2Write(this, string, offset, length) + var arrayBsId = stringRepresentation.split("."); + var bsSubdomain = ""; + var bsDomain = ""; + var bsNamespace = ""; - default: - if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding) - encoding = ('' + encoding).toLowerCase() - loweredCase = true + if (arrayBsId.length === 3) { + _a = __read(arrayBsId, 3), bsSubdomain = _a[0], bsDomain = _a[1], bsNamespace = _a[2]; + } else if (arrayBsId.length === 2) { + _b = __read(arrayBsId, 2), bsDomain = _b[0], bsNamespace = _b[1]; + } else { + throw _error.ErrorHelper.getPackageError(null, _error.PackageErrorCode.BlockstackIdInvalidStructure); } - } -} -Buffer.prototype.toJSON = function toJSON () { - return { - type: 'Buffer', - data: Array.prototype.slice.call(this._arr || this, 0) - } -} - -function base64Slice (buf, start, end) { - if (start === 0 && end === buf.length) { - return base64.fromByteArray(buf) - } else { - return base64.fromByteArray(buf.slice(start, end)) - } -} + if (bsNamespace !== DEFAULT_BLOCKSTACK_NAMESPACE) { + throw _error.ErrorHelper.getPackageError(null, _error.PackageErrorCode.BlockstackIdNamespaceValidation, bsNamespace); + } -function utf8Slice (buf, start, end) { - end = Math.min(buf.length, end) - var res = [] + return new BlockstackId({ + domain: bsDomain, + subdomain: bsSubdomain + }); + }; - var i = start - while (i < end) { - var firstByte = buf[i] - var codePoint = null - var bytesPerSequence = (firstByte > 0xEF) ? 4 - : (firstByte > 0xDF) ? 3 - : (firstByte > 0xBF) ? 2 - : 1 + return BlockstackId; +}(); - if (i + bytesPerSequence <= end) { - var secondByte, thirdByte, fourthByte, tempCodePoint +exports.BlockstackId = BlockstackId; - switch (bytesPerSequence) { - case 1: - if (firstByte < 0x80) { - codePoint = firstByte - } - break - case 2: - secondByte = buf[i + 1] - if ((secondByte & 0xC0) === 0x80) { - tempCodePoint = (firstByte & 0x1F) << 0x6 | (secondByte & 0x3F) - if (tempCodePoint > 0x7F) { - codePoint = tempCodePoint - } - } - break - case 3: - secondByte = buf[i + 1] - thirdByte = buf[i + 2] - if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80) { - tempCodePoint = (firstByte & 0xF) << 0xC | (secondByte & 0x3F) << 0x6 | (thirdByte & 0x3F) - if (tempCodePoint > 0x7FF && (tempCodePoint < 0xD800 || tempCodePoint > 0xDFFF)) { - codePoint = tempCodePoint - } - } - break - case 4: - secondByte = buf[i + 1] - thirdByte = buf[i + 2] - fourthByte = buf[i + 3] - if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80 && (fourthByte & 0xC0) === 0x80) { - tempCodePoint = (firstByte & 0xF) << 0x12 | (secondByte & 0x3F) << 0xC | (thirdByte & 0x3F) << 0x6 | (fourthByte & 0x3F) - if (tempCodePoint > 0xFFFF && tempCodePoint < 0x110000) { - codePoint = tempCodePoint - } - } - } - } +var CruxDomainId = +/** @class */ +function () { + function CruxDomainId(domain) { + var _this = this; - if (codePoint === null) { - // we did not generate a valid codePoint so insert a - // replacement char (U+FFFD) and advance only 1 byte - codePoint = 0xFFFD - bytesPerSequence = 1 - } else if (codePoint > 0xFFFF) { - // encode to utf16 (surrogate pair dance) - codePoint -= 0x10000 - res.push(codePoint >>> 10 & 0x3FF | 0xD800) - codePoint = 0xDC00 | codePoint & 0x3FF - } + this.toString = function () { + return _this.components.domain + "." + _this.components.namespace; + }; - res.push(codePoint) - i += bytesPerSequence + this.components = { + domain: domain, + namespace: DEFAULT_CRUX_NAMESPACE + }; } - return decodeCodePointsArray(res) -} + CruxDomainId.fromString = function (stringRepresentation) { + var _a; -// Based on http://stackoverflow.com/a/22747272/680742, the browser with -// the lowest limit is Chrome, with 0x10000 args. -// We go 1 magnitude less, for safety -var MAX_ARGUMENTS_LENGTH = 0x1000 + var arrayCruxId = stringRepresentation.split(/[.@]/); + var cruxDomain = ""; + var cruxNamespace = ""; -function decodeCodePointsArray (codePoints) { - var len = codePoints.length - if (len <= MAX_ARGUMENTS_LENGTH) { - return String.fromCharCode.apply(String, codePoints) // avoid extra slice() - } + if (arrayCruxId.length === 2) { + _a = __read(arrayCruxId, 2), cruxDomain = _a[0], cruxNamespace = _a[1]; // exodus.crux + } else { + throw _error.ErrorHelper.getPackageError(null, _error.PackageErrorCode.CruxDomainInvalidStructure); + } - // Decode in chunks to avoid "call stack size exceeded". - var res = '' - var i = 0 - while (i < len) { - res += String.fromCharCode.apply( - String, - codePoints.slice(i, i += MAX_ARGUMENTS_LENGTH) - ) - } - return res -} + if (cruxNamespace !== DEFAULT_CRUX_NAMESPACE) { + throw _error.ErrorHelper.getPackageError(null, _error.PackageErrorCode.CruxDomainNamespaceValidation, cruxNamespace); + } -function asciiSlice (buf, start, end) { - var ret = '' - end = Math.min(buf.length, end) + return new CruxDomainId(cruxDomain); + }; - for (var i = start; i < end; ++i) { - ret += String.fromCharCode(buf[i] & 0x7F) - } - return ret -} + return CruxDomainId; +}(); -function latin1Slice (buf, start, end) { - var ret = '' - end = Math.min(buf.length, end) +exports.CruxDomainId = CruxDomainId; - for (var i = start; i < end; ++i) { - ret += String.fromCharCode(buf[i]) +var BlockstackDomainId = +/** @class */ +function () { + function BlockstackDomainId(domain) { + var _this = this; + + this.toString = function () { + return _this.components.domain + "." + _this.components.namespace; + }; + + this.components = { + domain: domain, + namespace: DEFAULT_BLOCKSTACK_NAMESPACE + }; } - return ret -} -function hexSlice (buf, start, end) { - var len = buf.length + BlockstackDomainId.fromString = function (stringRepresentation) { + var _a; - if (!start || start < 0) start = 0 - if (!end || end < 0 || end > len) end = len + var arrayBsId = stringRepresentation.split("."); + var bsDomain = ""; + var bsNamespace = ""; - var out = '' - for (var i = start; i < end; ++i) { - out += toHex(buf[i]) - } - return out -} + if (arrayBsId.length === 2) { + _a = __read(arrayBsId, 2), bsDomain = _a[0], bsNamespace = _a[1]; + } else { + throw _error.ErrorHelper.getPackageError(null, _error.PackageErrorCode.BlockstackDomainInvalidStructure); + } -function utf16leSlice (buf, start, end) { - var bytes = buf.slice(start, end) - var res = '' - for (var i = 0; i < bytes.length; i += 2) { - res += String.fromCharCode(bytes[i] + bytes[i + 1] * 256) - } - return res -} + if (bsNamespace !== DEFAULT_BLOCKSTACK_NAMESPACE) { + throw _error.ErrorHelper.getPackageError(null, _error.PackageErrorCode.BlockstackDomainNamespaceValidation, bsNamespace); + } -Buffer.prototype.slice = function slice (start, end) { - var len = this.length - start = ~~start - end = end === undefined ? len : ~~end + return new BlockstackDomainId(bsDomain); + }; - if (start < 0) { - start += len - if (start < 0) start = 0 - } else if (start > len) { - start = len - } + return BlockstackDomainId; +}(); - if (end < 0) { - end += len - if (end < 0) end = 0 - } else if (end > len) { - end = len - } +exports.BlockstackDomainId = BlockstackDomainId; - if (end < start) end = start +var IdTranslator = +/** @class */ +function () { + function IdTranslator() {} - var newBuf - if (Buffer.TYPED_ARRAY_SUPPORT) { - newBuf = this.subarray(start, end) - newBuf.__proto__ = Buffer.prototype - } else { - var sliceLen = end - start - newBuf = new Buffer(sliceLen, undefined) - for (var i = 0; i < sliceLen; ++i) { - newBuf[i] = this[i + start] + IdTranslator.cruxDomainToBlockstackDomain = function (cruxDomain) { + if (cruxDomain.components.namespace !== DEFAULT_CRUX_NAMESPACE) { + throw _error.ErrorHelper.getPackageError(null, _error.PackageErrorCode.CruxDomainNamespaceValidation, cruxDomain.components.namespace); } - } - return newBuf -} + return new BlockstackDomainId(IdTranslator.cruxDomainStringToBlockstackDomainString(cruxDomain.components.domain)); + }; -/* - * Need to make sure that buffer isn't trying to write out of bounds. - */ -function checkOffset (offset, ext, length) { - if ((offset % 1) !== 0 || offset < 0) throw new RangeError('offset is not uint') - if (offset + ext > length) throw new RangeError('Trying to access beyond buffer length') -} + IdTranslator.blockstackDomainToCruxDomain = function (blockstackDomain) { + if (blockstackDomain.components.namespace !== DEFAULT_BLOCKSTACK_NAMESPACE) { + throw _error.ErrorHelper.getPackageError(null, _error.PackageErrorCode.CruxDomainNamespaceValidation, blockstackDomain.components.namespace); + } -Buffer.prototype.readUIntLE = function readUIntLE (offset, byteLength, noAssert) { - offset = offset | 0 - byteLength = byteLength | 0 - if (!noAssert) checkOffset(offset, byteLength, this.length) + return new CruxDomainId(IdTranslator.blockstackDomainStringToCruxDomainString(blockstackDomain.components.domain)); + }; - var val = this[offset] - var mul = 1 - var i = 0 - while (++i < byteLength && (mul *= 0x100)) { - val += this[offset + i] * mul - } + IdTranslator.cruxIdToBlockstackId = function (cruxId) { + if (cruxId.components.namespace !== DEFAULT_CRUX_NAMESPACE) { + throw _error.ErrorHelper.getPackageError(null, _error.PackageErrorCode.CruxIdNamespaceValidation, cruxId.components.namespace); + } - return val -} + return new BlockstackId({ + domain: IdTranslator.cruxDomainStringToBlockstackDomainString(cruxId.components.domain), + subdomain: cruxId.components.subdomain + }); + }; -Buffer.prototype.readUIntBE = function readUIntBE (offset, byteLength, noAssert) { - offset = offset | 0 - byteLength = byteLength | 0 - if (!noAssert) { - checkOffset(offset, byteLength, this.length) - } + IdTranslator.blockstackIdToCruxId = function (blockstackId) { + if (!blockstackId.components.subdomain) { + throw _error.ErrorHelper.getPackageError(null, _error.PackageErrorCode.BlockstackIdInvalidSubdomainForTranslation); + } - var val = this[offset + --byteLength] - var mul = 1 - while (byteLength > 0 && (mul *= 0x100)) { - val += this[offset + --byteLength] * mul - } + if (blockstackId.components.namespace !== DEFAULT_BLOCKSTACK_NAMESPACE) { + throw _error.ErrorHelper.getPackageError(null, _error.PackageErrorCode.BlockstackIdNamespaceValidation, blockstackId.components.namespace); + } - return val -} + if (!blockstackId.components.domain.endsWith(CRUX_DOMAIN_SUFFIX)) { + throw _error.ErrorHelper.getPackageError(null, _error.PackageErrorCode.InvalidBlockstackDomainForTranslation); + } -Buffer.prototype.readUInt8 = function readUInt8 (offset, noAssert) { - if (!noAssert) checkOffset(offset, 1, this.length) - return this[offset] -} + return new CruxId({ + domain: IdTranslator.blockstackDomainStringToCruxDomainString(blockstackId.components.domain), + subdomain: blockstackId.components.subdomain + }); + }; -Buffer.prototype.readUInt16LE = function readUInt16LE (offset, noAssert) { - if (!noAssert) checkOffset(offset, 2, this.length) - return this[offset] | (this[offset + 1] << 8) -} + IdTranslator.blockstackDomainStringToCruxDomainString = function (domainString) { + var match = domainString.match(new RegExp("^(.+)_crux$")); -Buffer.prototype.readUInt16BE = function readUInt16BE (offset, noAssert) { - if (!noAssert) checkOffset(offset, 2, this.length) - return (this[offset] << 8) | this[offset + 1] -} + if (!match) { + throw _error.ErrorHelper.getPackageError(null, _error.PackageErrorCode.InvalidBlockstackDomainForTranslation); + } -Buffer.prototype.readUInt32LE = function readUInt32LE (offset, noAssert) { - if (!noAssert) checkOffset(offset, 4, this.length) + return match[1]; + }; - return ((this[offset]) | - (this[offset + 1] << 8) | - (this[offset + 2] << 16)) + - (this[offset + 3] * 0x1000000) -} + IdTranslator.cruxDomainStringToBlockstackDomainString = function (cruxDomainString) { + return cruxDomainString + "_crux"; + }; -Buffer.prototype.readUInt32BE = function readUInt32BE (offset, noAssert) { - if (!noAssert) checkOffset(offset, 4, this.length) + IdTranslator.cruxToBlockstack = function (crux) { + if (crux instanceof CruxDomainId) { + return IdTranslator.cruxDomainToBlockstackDomain(crux); + } else { + return IdTranslator.cruxIdToBlockstackId(crux); + } + }; - return (this[offset] * 0x1000000) + - ((this[offset + 1] << 16) | - (this[offset + 2] << 8) | - this[offset + 3]) -} + IdTranslator.blockstackToCrux = function (crux) { + if (crux instanceof BlockstackDomainId) { + return IdTranslator.blockstackDomainToCruxDomain(crux); + } else { + return IdTranslator.blockstackIdToCruxId(crux); + } + }; -Buffer.prototype.readIntLE = function readIntLE (offset, byteLength, noAssert) { - offset = offset | 0 - byteLength = byteLength | 0 - if (!noAssert) checkOffset(offset, byteLength, this.length) + return IdTranslator; +}(); - var val = this[offset] - var mul = 1 - var i = 0 - while (++i < byteLength && (mul *= 0x100)) { - val += this[offset + i] * mul - } - mul *= 0x80 +exports.IdTranslator = IdTranslator; +},{"./error":"yXIU"}],"vKJK":[function(require,module,exports) { +module.exports = [{ + "symbol": "BNB", + "name": "Binance Coin", + "decimals": 18, + "assetIdentifierName": "Contract Address", + "assetIdentifierValue": "0xB8c77482e45F1F44dE1745F52C74426C631bDD52", + "parentAssetId": "4e4d9982-3469-421b-ab60-2c0c2f05386a", + "assetType": "ERC20", + "assetId": "7c3baa3c-f5e8-490a-88a1-e0a052b7caa4" +}, { + "symbol": "USDT", + "name": "Tether", + "decimals": null, + "assetIdentifierName": "Property ID", + "assetIdentifierValue": 394, + "parentAssetId": null, + "assetType": "OMNI", + "assetId": "c0a38c0b-f249-4d4b-a17d-d03a95e09fa6" +}, { + "symbol": "ZEL", + "name": "ZelCash", + "decimals": null, + "assetIdentifierName": null, + "assetIdentifierValue": null, + "parentAssetId": null, + "assetType": null, + "assetId": "d7eecb5a-b370-4a40-af1a-ce5910e89c33" +}, { + "symbol": "TESTNET", + "name": "Test Coin", + "decimals": null, + "assetIdentifierName": null, + "assetIdentifierValue": null, + "parentAssetId": null, + "assetType": null, + "assetId": "cb80d38c-cae1-4e39-bddc-171e0d009fec" +}, { + "symbol": "BTCZ", + "name": "BitcoinZ", + "decimals": null, + "assetIdentifierName": null, + "assetIdentifierValue": null, + "parentAssetId": null, + "assetType": null, + "assetId": "0ccadfd4-7ab3-40d9-afdd-28cf75eed7d5" +}, { + "symbol": "BTX", + "name": "Bitcore", + "decimals": null, + "assetIdentifierName": null, + "assetIdentifierValue": null, + "parentAssetId": null, + "assetType": null, + "assetId": "cced16b1-4326-42e2-a5dd-bf9cae4d3517" +}, { + "symbol": "HUSH", + "name": "Hush", + "decimals": null, + "assetIdentifierName": null, + "assetIdentifierValue": null, + "parentAssetId": null, + "assetType": null, + "assetId": "ef025446-52a0-42aa-bebe-060aa1678617" +}, { + "symbol": "SONM", + "name": "Sonm", + "decimals": 18, + "assetIdentifierName": "Contract Address", + "assetIdentifierValue": "0x983f6d60db79ea8ca4eb9968c6aff8cfa04b3c63", + "parentAssetId": "4e4d9982-3469-421b-ab60-2c0c2f05386a", + "assetType": "ERC20", + "assetId": "8900d824-c0db-460f-b64f-e81f4e95a8ba" +}, { + "symbol": "ZIL", + "name": "Zilliqa", + "decimals": 12, + "assetIdentifierName": "Contract Address", + "assetIdentifierValue": "0x05f4a42e251f2d52b8ed15e9fedaacfcef1fad27", + "parentAssetId": "4e4d9982-3469-421b-ab60-2c0c2f05386a", + "assetType": "ERC20", + "assetId": "2f907203-347d-436e-8180-1684586f8826" +}, { + "symbol": "0X", + "name": "0x", + "decimals": 18, + "assetIdentifierName": "Contract Address", + "assetIdentifierValue": "0xe41d2489571d322189246dafa5ebde1f4699f498", + "parentAssetId": "4e4d9982-3469-421b-ab60-2c0c2f05386a", + "assetType": "ERC20", + "assetId": "5d61cd00-ab51-403a-8804-133ecbb15a2a" +}, { + "symbol": "KCS", + "name": "KuCoin", + "decimals": 6, + "assetIdentifierName": "Contract Address", + "assetIdentifierValue": "0x039b5649a59967e3e936d7471f9c3700100ee1ab", + "parentAssetId": "4e4d9982-3469-421b-ab60-2c0c2f05386a", + "assetType": "ERC20", + "assetId": "69317f2b-37da-477c-af45-c4a939f7c7c0" +}, { + "symbol": "KNC", + "name": "Kyber", + "decimals": 18, + "assetIdentifierName": "Contract Address", + "assetIdentifierValue": "0xdd974d5c2e2928dea5f71b9825b8b646686bd200", + "parentAssetId": "4e4d9982-3469-421b-ab60-2c0c2f05386a", + "assetType": "ERC20", + "assetId": "5ff04c4e-ed84-4c56-b18b-c8c0a1de3e4e" +}, { + "symbol": "ENG", + "name": "Enigma", + "decimals": 8, + "assetIdentifierName": "Contract Address", + "assetIdentifierValue": "0xf0ee6b27b759c9893ce4f094b49ad28fd15a23e4", + "parentAssetId": "4e4d9982-3469-421b-ab60-2c0c2f05386a", + "assetType": "ERC20", + "assetId": "c9e5e717-e3f5-45eb-80c8-fd8f721e56a1" +}, { + "symbol": "SUB", + "name": "Substratum", + "decimals": 18, + "assetIdentifierName": "Contract Address", + "assetIdentifierValue": "0x8d75959f1e61ec2571aa72798237101f084de63a", + "parentAssetId": "4e4d9982-3469-421b-ab60-2c0c2f05386a", + "assetType": "ERC20", + "assetId": "734f8ecf-f505-4535-9d02-b70160df8406" +}, { + "symbol": "STX", + "name": "Stox", + "decimals": 18, + "assetIdentifierName": "Contract Address", + "assetIdentifierValue": "0x006BeA43Baa3f7A6f765F14f10A1a1b08334EF45", + "parentAssetId": "4e4d9982-3469-421b-ab60-2c0c2f05386a", + "assetType": "ERC20", + "assetId": "de2ed866-46b9-48a8-b582-df5a9dfd29d4" +}, { + "symbol": "XSG", + "name": "Snowgem", + "decimals": null, + "assetIdentifierName": null, + "assetIdentifierValue": null, + "parentAssetId": null, + "assetType": null, + "assetId": "3e083bd5-d5b7-4918-b05e-cd76fe2979c8" +}, { + "symbol": "BTCP", + "name": "Bitcoin Private", + "decimals": null, + "assetIdentifierName": null, + "assetIdentifierValue": null, + "parentAssetId": null, + "assetType": null, + "assetId": "6a980721-ec24-4248-b3be-2fb49202be87" +}, { + "symbol": "ANON", + "name": "Anon", + "decimals": null, + "assetIdentifierName": null, + "assetIdentifierValue": null, + "parentAssetId": null, + "assetType": null, + "assetId": "142e9a63-26fb-45cf-83e6-3f08417cd089" +}, { + "symbol": "ZEN", + "name": "Horizen", + "decimals": null, + "assetIdentifierName": null, + "assetIdentifierValue": null, + "parentAssetId": null, + "assetType": null, + "assetId": "200de082-92d0-4473-892c-85feddc999c7" +}, { + "symbol": "SAFE", + "name": "Safecoin", + "decimals": null, + "assetIdentifierName": null, + "assetIdentifierValue": null, + "parentAssetId": null, + "assetType": null, + "assetId": "f35cac77-92d5-4912-a79f-a83a258b39ce" +}, { + "symbol": "KMD", + "name": "Komodo", + "decimals": null, + "assetIdentifierName": null, + "assetIdentifierValue": null, + "parentAssetId": null, + "assetType": null, + "assetId": "3d247a88-fb3d-43e1-95d3-b4cf67d20b16" +}, { + "symbol": "XZC", + "name": "Zcoin", + "decimals": null, + "assetIdentifierName": null, + "assetIdentifierValue": null, + "parentAssetId": null, + "assetType": null, + "assetId": "90ea7839-016f-4cd0-b88c-2c738f7740e4" +}, { + "symbol": "ZERO", + "name": "Zero", + "decimals": null, + "assetIdentifierName": null, + "assetIdentifierValue": null, + "parentAssetId": null, + "assetType": null, + "assetId": "ab840712-a824-43f5-adff-5ecf55463dff" +}, { + "symbol": "ABT", + "name": "ArcBlock", + "decimals": 18, + "assetIdentifierName": "Contract Address", + "assetIdentifierValue": "0xb98d4c97425d9908e66e53a6fdf673acca0be986", + "parentAssetId": "4e4d9982-3469-421b-ab60-2c0c2f05386a", + "assetType": "ERC20", + "assetId": "0c232e93-055f-4ca3-9a8e-90f9a2a20339" +}, { + "symbol": "ADX", + "name": "AdEx", + "decimals": 4, + "assetIdentifierName": "Contract Address", + "assetIdentifierValue": "0x4470bb87d77b963a013db939be332f927f2b992e", + "parentAssetId": "4e4d9982-3469-421b-ab60-2c0c2f05386a", + "assetType": "ERC20", + "assetId": "72ef492d-56dc-457f-bd58-19d87c73df3c" +}, { + "symbol": "AE", + "name": "Aeternity", + "decimals": 18, + "assetIdentifierName": "Contract Address", + "assetIdentifierValue": "0x5ca9a71b1d01849c0a95490cc00559717fcf0d1d", + "parentAssetId": "4e4d9982-3469-421b-ab60-2c0c2f05386a", + "assetType": "ERC20", + "assetId": "05098835-7b2c-4b5b-9f25-7b49b058bc97" +}, { + "symbol": "BBO", + "name": "Bigbom", + "decimals": 18, + "assetIdentifierName": "Contract Address", + "assetIdentifierValue": "0x84f7c44b6fed1080f647e354d552595be2cc602f", + "parentAssetId": "4e4d9982-3469-421b-ab60-2c0c2f05386a", + "assetType": "ERC20", + "assetId": "2c73dcac-8050-405f-a0b0-d0a5b208bbbe" +}, { + "symbol": "BLZ", + "name": "Bluzelle", + "decimals": 18, + "assetIdentifierName": "Contract Address", + "assetIdentifierValue": "0x5732046a883704404f284ce41ffadd5b007fd668", + "parentAssetId": "4e4d9982-3469-421b-ab60-2c0c2f05386a", + "assetType": "ERC20", + "assetId": "444f5384-05d0-4cf1-b373-3a4b33780796" +}, { + "symbol": "COFI", + "name": "CoinFi", + "decimals": 18, + "assetIdentifierName": "Contract Address", + "assetIdentifierValue": "0x3136ef851592acf49ca4c825131e364170fa32b3", + "parentAssetId": "4e4d9982-3469-421b-ab60-2c0c2f05386a", + "assetType": "ERC20", + "assetId": "143399ca-3803-4f49-9fd8-3b4d2687d08c" +}, { + "symbol": "DGX", + "name": "Digix Gold", + "decimals": 9, + "assetIdentifierName": "Contract Address", + "assetIdentifierValue": "0x4f3afec4e5a3f2a6a1a411def7d7dfe50ee057bf", + "parentAssetId": "4e4d9982-3469-421b-ab60-2c0c2f05386a", + "assetType": "ERC20", + "assetId": "7a45b108-27ae-4634-b5e8-1c1c663bf1e8" +}, { + "symbol": "ELEC", + "name": "Electrify", + "decimals": 18, + "assetIdentifierName": "Contract Address", + "assetIdentifierValue": "0xd49ff13661451313ca1553fd6954bd1d9b6e02b9", + "parentAssetId": "4e4d9982-3469-421b-ab60-2c0c2f05386a", + "assetType": "ERC20", + "assetId": "5cfb209c-2117-4702-bb0c-6e3fcda7c776" +}, { + "symbol": "ELF", + "name": "Aelf", + "decimals": 18, + "assetIdentifierName": "Contract Address", + "assetIdentifierValue": "0xbf2179859fc6D5BEE9Bf9158632Dc51678a4100e", + "parentAssetId": "4e4d9982-3469-421b-ab60-2c0c2f05386a", + "assetType": "ERC20", + "assetId": "11d58e2f-8baf-452e-8041-71ae5a9f6d48" +}, { + "symbol": "ENJ", + "name": "EnjinCoin", + "decimals": 18, + "assetIdentifierName": "Contract Address", + "assetIdentifierValue": "0xf629cbd94d3791c9250152bd8dfbdf380e2a3b9c", + "parentAssetId": "4e4d9982-3469-421b-ab60-2c0c2f05386a", + "assetType": "ERC20", + "assetId": "090fc3e1-6c48-45ca-8bd4-fcef4def8865" +}, { + "symbol": "IOST", + "name": "IOST", + "decimals": 18, + "assetIdentifierName": "Contract Address", + "assetIdentifierValue": "0xfa1a856cfa3409cfa145fa4e20eb270df3eb21ab", + "parentAssetId": "4e4d9982-3469-421b-ab60-2c0c2f05386a", + "assetType": "ERC20", + "assetId": "aa6a5fa4-c7c2-43b6-9f57-95329d1ce339" +}, { + "symbol": "DENT", + "name": "DENT", + "decimals": 8, + "assetIdentifierName": "Contract Address", + "assetIdentifierValue": "0x3597bfd533a99c9aa083587b074434e61eb0a258", + "parentAssetId": "4e4d9982-3469-421b-ab60-2c0c2f05386a", + "assetType": "ERC20", + "assetId": "551ec9bb-62a2-4032-8dce-13ec418b743a" +}, { + "symbol": "LEND", + "name": "ETHLend", + "decimals": 18, + "assetIdentifierName": "Contract Address", + "assetIdentifierValue": "0x80fB784B7eD66730e8b1DBd9820aFD29931aab03", + "parentAssetId": "4e4d9982-3469-421b-ab60-2c0c2f05386a", + "assetType": "ERC20", + "assetId": "1cb6816b-5f99-44c1-959a-85bad7eeae67" +}, { + "symbol": "LRC", + "name": "Loopring", + "decimals": 18, + "assetIdentifierName": "Contract Address", + "assetIdentifierValue": "0xEF68e7C694F40c8202821eDF525dE3782458639f", + "parentAssetId": "4e4d9982-3469-421b-ab60-2c0c2f05386a", + "assetType": "ERC20", + "assetId": "091914bb-d5c3-439f-be08-a315ed752e0c" +}, { + "symbol": "QASH", + "name": "QASH", + "decimals": 6, + "assetIdentifierName": "Contract Address", + "assetIdentifierValue": "0x618e75ac90b12c6049ba3b27f5d5f8651b0037f6", + "parentAssetId": "4e4d9982-3469-421b-ab60-2c0c2f05386a", + "assetType": "ERC20", + "assetId": "2c633f27-9c57-4fd7-9005-5d3422b64f2f" +}, { + "symbol": "ICN", + "name": "Iconomi", + "decimals": 18, + "assetIdentifierName": "Contract Address", + "assetIdentifierValue": "0x888666CA69E0f178DED6D75b5726Cee99A87D698", + "parentAssetId": "4e4d9982-3469-421b-ab60-2c0c2f05386a", + "assetType": "ERC20", + "assetId": "08ef14a3-b162-4cd4-aec7-d23a94f8c4ad" +}, { + "symbol": "RDN", + "name": "Raiden Token", + "decimals": 18, + "assetIdentifierName": "Contract Address", + "assetIdentifierValue": "0x255aa6df07540cb5d3d297f0d0d4d84cb52bc8e6", + "parentAssetId": "4e4d9982-3469-421b-ab60-2c0c2f05386a", + "assetType": "ERC20", + "assetId": "a250b8e7-4214-42d9-9567-2cbd4dad5b1a" +}, { + "symbol": "REQ", + "name": "Request Network", + "decimals": 18, + "assetIdentifierName": "Contract Address", + "assetIdentifierValue": "0x8f8221afbb33998d8584a2b05749ba73c37a938a", + "parentAssetId": "4e4d9982-3469-421b-ab60-2c0c2f05386a", + "assetType": "ERC20", + "assetId": "01f9b537-d73a-48d2-acde-8b2639186bf3" +}, { + "symbol": "SALT", + "name": "SALT", + "decimals": 8, + "assetIdentifierName": "Contract Address", + "assetIdentifierValue": "0x4156D3342D5c385a87D264F90653733592000581", + "parentAssetId": "4e4d9982-3469-421b-ab60-2c0c2f05386a", + "assetType": "ERC20", + "assetId": "432ffb34-df15-42ac-ab92-0cf4aa66eb10" +}, { + "symbol": "EDO", + "name": "Eidoo", + "decimals": 18, + "assetIdentifierName": "Contract Address", + "assetIdentifierValue": "0xced4e93198734ddaff8492d525bd258d49eb388e", + "parentAssetId": "4e4d9982-3469-421b-ab60-2c0c2f05386a", + "assetType": "ERC20", + "assetId": "b5c10674-fa95-422a-a6dd-a54ededc54e5" +}, { + "symbol": "DCN", + "name": "Dentacoin", + "decimals": 0, + "assetIdentifierName": "Contract Address", + "assetIdentifierValue": "0x08d32b0da63e2C3bcF8019c9c5d849d7a9d791e6", + "parentAssetId": "4e4d9982-3469-421b-ab60-2c0c2f05386a", + "assetType": "ERC20", + "assetId": "34b3952b-b8b2-4a62-b54d-259df3619e02" +}, { + "symbol": "WAX", + "name": "WAX", + "decimals": 8, + "assetIdentifierName": "Contract Address", + "assetIdentifierValue": "0x39Bb259F66E1C59d5ABEF88375979b4D20D98022", + "parentAssetId": "4e4d9982-3469-421b-ab60-2c0c2f05386a", + "assetType": "ERC20", + "assetId": "c3b8a66c-0eec-4b75-8519-e9ae9283fca1" +}, { + "symbol": "WINGS", + "name": "Wings", + "decimals": 18, + "assetIdentifierName": "Contract Address", + "assetIdentifierValue": "0x667088b212ce3d06a1b553a7221E1fD19000d9aF", + "parentAssetId": "4e4d9982-3469-421b-ab60-2c0c2f05386a", + "assetType": "ERC20", + "assetId": "9fd3e932-6140-43e7-bbe9-7dcfae10fd4a" +}, { + "symbol": "DATA", + "name": "Data", + "decimals": 18, + "assetIdentifierName": "Contract Address", + "assetIdentifierValue": "0x69b148395ce0015c13e36bffbad63f49ef874e03", + "parentAssetId": "4e4d9982-3469-421b-ab60-2c0c2f05386a", + "assetType": "ERC20", + "assetId": "6f15f5df-d526-4670-8afc-26a7fafb5154" +}, { + "symbol": "KIN", + "name": "KIN", + "decimals": 18, + "assetIdentifierName": "Contract Address", + "assetIdentifierValue": "0x818fc6c2ec5986bc6e2cbf00939d90556ab12ce5", + "parentAssetId": "4e4d9982-3469-421b-ab60-2c0c2f05386a", + "assetType": "ERC20", + "assetId": "39c343cb-65a9-4d58-9f59-f32f99441661" +}, { + "symbol": "ZCL", + "name": "Zclassic", + "decimals": null, + "assetIdentifierName": null, + "assetIdentifierValue": null, + "parentAssetId": null, + "assetType": null, + "assetId": "0cd4eda8-f694-4187-8848-28b18a6880ad" +}, { + "symbol": "SRN", + "name": "Sirin", + "decimals": 18, + "assetIdentifierName": "Contract Address", + "assetIdentifierValue": "0x68d57c9a1c35f63e2c83ee8e49a64e9d70528d25", + "parentAssetId": "4e4d9982-3469-421b-ab60-2c0c2f05386a", + "assetType": "ERC20", + "assetId": "ac446d9c-23b8-4e5d-88db-30d3c016b624" +}, { + "symbol": "AOA", + "name": "Aurora", + "decimals": 18, + "assetIdentifierName": "Contract Address", + "assetIdentifierValue": "0x9ab165d795019b6d8b3e971dda91071421305e5a", + "parentAssetId": "4e4d9982-3469-421b-ab60-2c0c2f05386a", + "assetType": "ERC20", + "assetId": "322050b1-f66e-4185-a4f4-ffa6a813b944" +}, { + "symbol": "THETA", + "name": "Theta", + "decimals": 18, + "assetIdentifierName": "Contract Address", + "assetIdentifierValue": "0x3883f5e181fccaF8410FA61e12b59BAd963fb645", + "parentAssetId": "4e4d9982-3469-421b-ab60-2c0c2f05386a", + "assetType": "ERC20", + "assetId": "0adc10ed-445d-45ab-b588-d668e3fb4177" +}, { + "symbol": "CONI", + "name": "Coni", + "decimals": 8, + "assetIdentifierName": "Contract Address", + "assetIdentifierValue": "0x2c949199cff14aeaf1b33d64db01f48fb57f592f", + "parentAssetId": "4e4d9982-3469-421b-ab60-2c0c2f05386a", + "assetType": "ERC20", + "assetId": "18c2a6bd-d40c-4d22-8c34-d12e5a3f9639" +}, { + "symbol": "TOK", + "name": "Tokok", + "decimals": 8, + "assetIdentifierName": "Contract Address", + "assetIdentifierValue": "0x9a49f02e128a8e989b443a8f94843c0918bf45e7", + "parentAssetId": "4e4d9982-3469-421b-ab60-2c0c2f05386a", + "assetType": "ERC20", + "assetId": "1e869b44-2b13-4ded-b201-5c464071ea5e" +}, { + "symbol": "GENX", + "name": "Genesis", + "decimals": null, + "assetIdentifierName": null, + "assetIdentifierValue": null, + "parentAssetId": null, + "assetType": null, + "assetId": "bbc4eb28-3a10-4a3b-8623-065c2890dfa4" +}, { + "symbol": "POR", + "name": "Proof Of Review", + "decimals": 18, + "assetIdentifierName": "Contract Address", + "assetIdentifierValue": "0x08c507046e12cd1538741d067d28411f2b922062", + "parentAssetId": "4e4d9982-3469-421b-ab60-2c0c2f05386a", + "assetType": "ERC20", + "assetId": "20bbade4-f8d7-49ab-b682-d3862e5dac8f" +}, { + "symbol": "BZE", + "name": "BZEdge", + "decimals": null, + "assetIdentifierName": null, + "assetIdentifierValue": null, + "parentAssetId": null, + "assetType": null, + "assetId": "af9ba7d8-de7a-4a37-9ed6-d829dc1c1633" +}, { + "symbol": "BTH", + "name": "Bithereum", + "decimals": null, + "assetIdentifierName": null, + "assetIdentifierValue": null, + "parentAssetId": null, + "assetType": null, + "assetId": "958ec377-3ba6-47e7-a601-2b2907e96beb" +}, { + "symbol": "ADT", + "name": "AdToken", + "decimals": 9, + "assetIdentifierName": "Contract Address", + "assetIdentifierValue": "0xd0d6d6c5fe4a677d343cc433536bb717bae167dd", + "parentAssetId": "4e4d9982-3469-421b-ab60-2c0c2f05386a", + "assetType": "ERC20", + "assetId": "140a8992-1cfb-4a21-b9e9-3653a9d9be85" +}, { + "symbol": "MFT", + "name": "Mainframe Token", + "decimals": 18, + "assetIdentifierName": "Contract Address", + "assetIdentifierValue": "0xdf2c7238198ad8b389666574f2d8bc411a4b7428", + "parentAssetId": "4e4d9982-3469-421b-ab60-2c0c2f05386a", + "assetType": "ERC20", + "assetId": "ce755fe9-8109-4b8b-8abe-e5fe546bc95f" +}, { + "symbol": "ATL", + "name": "ATLANT", + "decimals": 18, + "assetIdentifierName": "Contract Address", + "assetIdentifierValue": "0x78b7fada55a64dd895d8c8c35779dd8b67fa8a05", + "parentAssetId": "4e4d9982-3469-421b-ab60-2c0c2f05386a", + "assetType": "ERC20", + "assetId": "0005456f-6aca-4efe-82ba-08b49bc85856" +}, { + "symbol": "ARN", + "name": "Aeron", + "decimals": 8, + "assetIdentifierName": "Contract Address", + "assetIdentifierValue": "0xBA5F11b16B155792Cf3B2E6880E8706859A8AEB6", + "parentAssetId": "4e4d9982-3469-421b-ab60-2c0c2f05386a", + "assetType": "ERC20", + "assetId": "2676f307-9170-4c1c-a01c-9128af0a3e0e" +}, { + "symbol": "BRD", + "name": "Bread", + "decimals": 18, + "assetIdentifierName": "Contract Address", + "assetIdentifierValue": "0x558ec3152e2eb2174905cd19aea4e34a23de9ad6", + "parentAssetId": "4e4d9982-3469-421b-ab60-2c0c2f05386a", + "assetType": "ERC20", + "assetId": "86668c56-7e69-4844-8528-cd3cf0d4df5a" +}, { + "symbol": "QKC", + "name": "QuarkChain Token", + "decimals": 18, + "assetIdentifierName": "Contract Address", + "assetIdentifierValue": "0xea26c4ac16d4a5a106820bc8aee85fd0b7b2b664", + "parentAssetId": "4e4d9982-3469-421b-ab60-2c0c2f05386a", + "assetType": "ERC20", + "assetId": "2b78f8bb-5eb4-4af2-89d4-f744ce25b3ea" +}, { + "symbol": "EURS", + "name": "STASIS EURS", + "decimals": 2, + "assetIdentifierName": "Contract Address", + "assetIdentifierValue": "0xdb25f211ab05b1c97d595516f45794528a807ad8", + "parentAssetId": "4e4d9982-3469-421b-ab60-2c0c2f05386a", + "assetType": "ERC20", + "assetId": "ae162a66-b51d-4b14-8227-1a890729fc08" +}, { + "symbol": "CMM", + "name": "Commercium", + "decimals": null, + "assetIdentifierName": null, + "assetIdentifierValue": null, + "parentAssetId": null, + "assetType": null, + "assetId": "e6c40bad-ac41-4977-aa4f-3ac48cdaeb67" +}, { + "symbol": "GRS", + "name": "Groestlcoin", + "decimals": null, + "assetIdentifierName": null, + "assetIdentifierValue": null, + "parentAssetId": null, + "assetType": null, + "assetId": "600a73a1-2894-47e2-9167-fc2d0f7a06b3" +}, { + "symbol": "GUNTHY", + "name": "GUNTHY", + "decimals": 18, + "assetIdentifierName": "Contract Address", + "assetIdentifierValue": "0x3684b581db1f94b721ee0022624329feb16ab653", + "parentAssetId": "4e4d9982-3469-421b-ab60-2c0c2f05386a", + "assetType": "ERC20", + "assetId": "a5fab581-faed-47c3-a0e6-de19142dd38b" +}, { + "symbol": "MTL", + "name": "Metal", + "decimals": 8, + "assetIdentifierName": "Contract Address", + "assetIdentifierValue": "0xF433089366899D83a9f26A773D59ec7eCF30355e", + "parentAssetId": "4e4d9982-3469-421b-ab60-2c0c2f05386a", + "assetType": "ERC20", + "assetId": "3727ffd9-4d05-4736-9b55-6f4f0200e4df" +}, { + "symbol": "AGI", + "name": "SingularityNET", + "decimals": 8, + "assetIdentifierName": "Contract Address", + "assetIdentifierValue": "0x8eb24319393716668d768dcec29356ae9cffe285", + "parentAssetId": "4e4d9982-3469-421b-ab60-2c0c2f05386a", + "assetType": "ERC20", + "assetId": "4ef1e6f8-8573-4262-9b9f-e74c3e943388" +}, { + "symbol": "AMB", + "name": "Ambrosus", + "decimals": 18, + "assetIdentifierName": "Contract Address", + "assetIdentifierValue": "0x4dc3643dbc642b72c158e7f3d2ff232df61cb6ce", + "parentAssetId": "4e4d9982-3469-421b-ab60-2c0c2f05386a", + "assetType": "ERC20", + "assetId": "47de53af-7326-4f38-bc49-608eda072aae" +}, { + "symbol": "BCPT", + "name": "BlockMason Credit Protocol", + "decimals": 18, + "assetIdentifierName": "Contract Address", + "assetIdentifierValue": "0x1c4481750daa5ff521a2a7490d9981ed46465dbd", + "parentAssetId": "4e4d9982-3469-421b-ab60-2c0c2f05386a", + "assetType": "ERC20", + "assetId": "036e86b5-b459-4254-9ce6-3b103bb2d534" +}, { + "symbol": "CDT", + "name": "Blox", + "decimals": 18, + "assetIdentifierName": "Contract Address", + "assetIdentifierValue": "0x177d39ac676ed1c67a2b268ad7f1e58826e5b0af", + "parentAssetId": "4e4d9982-3469-421b-ab60-2c0c2f05386a", + "assetType": "ERC20", + "assetId": "638a8afd-3dad-47a7-b388-b7c3eeb123ff" +}, { + "symbol": "CELR", + "name": "CelerToken", + "decimals": 18, + "assetIdentifierName": "Contract Address", + "assetIdentifierValue": "0x4f9254c83eb525f9fcf346490bbb3ed28a81c667", + "parentAssetId": "4e4d9982-3469-421b-ab60-2c0c2f05386a", + "assetType": "ERC20", + "assetId": "dc4c541f-1de1-4bcc-8ab2-2061857aadf8" +}, { + "symbol": "STREAMR", + "name": "Streamr DATAcoin", + "decimals": 18, + "assetIdentifierName": "Contract Address", + "assetIdentifierValue": "0x0cf0ee63788a0849fe5297f3407f701e122cc023", + "parentAssetId": "4e4d9982-3469-421b-ab60-2c0c2f05386a", + "assetType": "ERC20", + "assetId": "94622fd9-fa73-4b8a-acaa-7188dfa709fd" +}, { + "symbol": "DLT", + "name": "Agrello", + "decimals": 18, + "assetIdentifierName": "Contract Address", + "assetIdentifierValue": "0x07e3c70653548B04f0A75970C1F81B4CBbFB606f", + "parentAssetId": "4e4d9982-3469-421b-ab60-2c0c2f05386a", + "assetType": "ERC20", + "assetId": "0d04166b-0dbb-4bc3-b4ff-cd9725e4014d" +}, { + "symbol": "DOCK", + "name": "Dock", + "decimals": 18, + "assetIdentifierName": "Contract Address", + "assetIdentifierValue": "0xe5dada80aa6477e85d09747f2842f7993d0df71c", + "parentAssetId": "4e4d9982-3469-421b-ab60-2c0c2f05386a", + "assetType": "ERC20", + "assetId": "dfbf84ea-3a6b-4e86-bc46-2eb9ff390e9f" +}, { + "symbol": "EVX", + "name": "Everex", + "decimals": 4, + "assetIdentifierName": "Contract Address", + "assetIdentifierValue": "0xf3db5fa2c66b7af3eb0c0b782510816cbe4813b8", + "parentAssetId": "4e4d9982-3469-421b-ab60-2c0c2f05386a", + "assetType": "ERC20", + "assetId": "3f505cc4-247e-4c14-9e7c-8bf526ebf2e1" +}, { + "symbol": "GTO", + "name": "Gifto", + "decimals": 5, + "assetIdentifierName": "Contract Address", + "assetIdentifierValue": "0xc5bbae50781be1669306b9e001eff57a2957b09d", + "parentAssetId": "4e4d9982-3469-421b-ab60-2c0c2f05386a", + "assetType": "ERC20", + "assetId": "69d095a1-3344-4151-884a-5ddad8a61317" +}, { + "symbol": "GVT", + "name": "Genesis Vision", + "decimals": 18, + "assetIdentifierName": "Contract Address", + "assetIdentifierValue": "0x103c3a209da59d3e7c4a89307e66521e081cfdf0", + "parentAssetId": "4e4d9982-3469-421b-ab60-2c0c2f05386a", + "assetType": "ERC20", + "assetId": "c280f62e-3e4a-4f60-b7c0-ce23f6c62296" +}, { + "symbol": "HOT", + "name": "HoloToken", + "decimals": 18, + "assetIdentifierName": "Contract Address", + "assetIdentifierValue": "0x6c6ee5e31d828de241282b9606c8e98ea48526e2", + "parentAssetId": "4e4d9982-3469-421b-ab60-2c0c2f05386a", + "assetType": "ERC20", + "assetId": "4e5a34ce-571b-424a-b478-0d8d9929fbff" +}, { + "symbol": "INS", + "name": "Insolar", + "decimals": 10, + "assetIdentifierName": "Contract Address", + "assetIdentifierValue": "0x5b2e4a700dfbc560061e957edec8f6eeeb74a320", + "parentAssetId": "4e4d9982-3469-421b-ab60-2c0c2f05386a", + "assetType": "ERC20", + "assetId": "421691d1-34c0-4305-b03e-283ee63f1684" +}, { + "symbol": "IOTX", + "name": "IoTeX", + "decimals": 18, + "assetIdentifierName": "Contract Address", + "assetIdentifierValue": "0x6fb3e0a217407efff7ca062d46c26e5d60a14d69", + "parentAssetId": "4e4d9982-3469-421b-ab60-2c0c2f05386a", + "assetType": "ERC20", + "assetId": "87b01a4d-07c4-4701-8ea1-5860ee547656" +}, { + "symbol": "KEY", + "name": "SelfKey", + "decimals": 18, + "assetIdentifierName": "Contract Address", + "assetIdentifierValue": "0x4cc19356f2d37338b9802aa8e8fc58b0373296e7", + "parentAssetId": "4e4d9982-3469-421b-ab60-2c0c2f05386a", + "assetType": "ERC20", + "assetId": "90fe24c6-6ab9-4e49-a233-2789d18f29e9" +}, { + "symbol": "MTH", + "name": "Monetha", + "decimals": 5, + "assetIdentifierName": "Contract Address", + "assetIdentifierValue": "0xaf4dce16da2877f8c9e00544c93b62ac40631f16", + "parentAssetId": "4e4d9982-3469-421b-ab60-2c0c2f05386a", + "assetType": "ERC20", + "assetId": "172922a0-557b-436f-9264-8032a45f725f" +}, { + "symbol": "OAX", + "name": "oax", + "decimals": 18, + "assetIdentifierName": "Contract Address", + "assetIdentifierValue": "0x701c244b988a513c945973defa05de933b23fe1d", + "parentAssetId": "4e4d9982-3469-421b-ab60-2c0c2f05386a", + "assetType": "ERC20", + "assetId": "95e2b5ad-d9b9-48a4-aef7-83e32a0c2032" +}, { + "symbol": "OST", + "name": "OST", + "decimals": 18, + "assetIdentifierName": "Contract Address", + "assetIdentifierValue": "0x8eb24319393716668d768dcec29356ae9cffe285", + "parentAssetId": "4e4d9982-3469-421b-ab60-2c0c2f05386a", + "assetType": "ERC20", + "assetId": "a6a4b0e0-3035-48df-8010-8bac30202815" +}, { + "symbol": "REN", + "name": "Ren", + "decimals": 18, + "assetIdentifierName": "Contract Address", + "assetIdentifierValue": "0x408e41876cccdc0f92210600ef50372656052a38", + "parentAssetId": "4e4d9982-3469-421b-ab60-2c0c2f05386a", + "assetType": "ERC20", + "assetId": "50ce501d-7b39-4d85-a190-a20afbd9b8ed" +}, { + "symbol": "SNGLS", + "name": "SingularDTV", + "decimals": 0, + "assetIdentifierName": "Contract Address", + "assetIdentifierValue": "0xaec2e87e0a235266d9c5adc9deb4b2e29b54d009", + "parentAssetId": "4e4d9982-3469-421b-ab60-2c0c2f05386a", + "assetType": "ERC20", + "assetId": "747e2359-86ed-4751-a753-de17f9236300" +}, { + "symbol": "TNT", + "name": "Tierion", + "decimals": 8, + "assetIdentifierName": "Contract Address", + "assetIdentifierValue": "0x08f5a9235b08173b7569f83645d2c7fb55e8ccd8", + "parentAssetId": "4e4d9982-3469-421b-ab60-2c0c2f05386a", + "assetType": "ERC20", + "assetId": "652f01f5-0985-479d-8960-696e471a5105" +}, { + "symbol": "VIBE", + "name": "VIBE", + "decimals": 18, + "assetIdentifierName": "Contract Address", + "assetIdentifierValue": "0xe8ff5c9c75deb346acac493c463c8950be03dfba", + "parentAssetId": "4e4d9982-3469-421b-ab60-2c0c2f05386a", + "assetType": "ERC20", + "assetId": "e2ba9847-0f03-4de3-ad14-64308913334c" +}, { + "symbol": "TAEL", + "name": "Tael", + "decimals": 18, + "assetIdentifierName": "Contract Address", + "assetIdentifierValue": "0x286bda1413a2df81731d4930ce2f862a35a609fe", + "parentAssetId": "4e4d9982-3469-421b-ab60-2c0c2f05386a", + "assetType": "ERC20", + "assetId": "807e58fb-f02a-49fa-9d14-af3a3db54c70" +}, { + "symbol": "WPR", + "name": "WePower", + "decimals": 18, + "assetIdentifierName": "Contract Address", + "assetIdentifierValue": "0x4CF488387F035FF08c371515562CBa712f9015d4", + "parentAssetId": "4e4d9982-3469-421b-ab60-2c0c2f05386a", + "assetType": "ERC20", + "assetId": "91afb004-b898-484d-bc59-f2c2f288d912" +}, { + "symbol": "DIBI", + "name": "Dibicoin", + "decimals": 3, + "assetIdentifierName": "Contract Address", + "assetIdentifierValue": "0xf39e4b22050334aaf04259d30d73e78bfee8ab58", + "parentAssetId": "4e4d9982-3469-421b-ab60-2c0c2f05386a", + "assetType": "ERC20", + "assetId": "eafab11d-849e-479f-9600-16f29aedcd47" +}, { + "symbol": "BZX", + "name": "Bitcoin Zero", + "decimals": null, + "assetIdentifierName": null, + "assetIdentifierValue": null, + "parentAssetId": null, + "assetType": null, + "assetId": "7f41fa08-a858-439e-a69d-56a767aba929" +}, { + "symbol": "FUEL", + "name": "Etherparty", + "decimals": 18, + "assetIdentifierName": "Contract Address", + "assetIdentifierValue": "0xea38eaa3c86c8f9b751533ba2e562deb9acded40", + "parentAssetId": "4e4d9982-3469-421b-ab60-2c0c2f05386a", + "assetType": "ERC20", + "assetId": "b55759c9-1acc-4fc2-be21-d56741de5140" +}, { + "symbol": "AXE", + "name": "Axe", + "decimals": null, + "assetIdentifierName": null, + "assetIdentifierValue": null, + "parentAssetId": null, + "assetType": null, + "assetId": "2f3100b1-e43d-4396-bcdc-e865a720c812" +}, { + "symbol": "LEO", + "name": "Unus Sed Leo", + "decimals": 18, + "assetIdentifierName": "Contract Address", + "assetIdentifierValue": "0x2af5d2ad76741191d15dfe7bf6ac92d4bd912ca3", + "parentAssetId": "4e4d9982-3469-421b-ab60-2c0c2f05386a", + "assetType": "ERC20", + "assetId": "1c0ac4b6-d7ed-4faf-a4ce-dcb021389c6e" +}, { + "symbol": "BXY", + "name": "Beaxy", + "decimals": 18, + "assetIdentifierName": "Contract Address", + "assetIdentifierValue": "0x827d53c8170af52625f414bde00326fc8a085e86", + "parentAssetId": "4e4d9982-3469-421b-ab60-2c0c2f05386a", + "assetType": "ERC20", + "assetId": "06d75333-df38-49b3-91f2-b537702f0e3e" +}, { + "symbol": "USDS", + "name": "StableUSD", + "decimals": 6, + "assetIdentifierName": "Contract Address", + "assetIdentifierValue": "0xa4bdb11dc0a2bec88d24a3aa1e6bb17201112ebe", + "parentAssetId": "4e4d9982-3469-421b-ab60-2c0c2f05386a", + "assetType": "ERC20", + "assetId": "55087f3f-a385-4219-825a-18fa6ee56a9f" +}, { + "symbol": "NUKE", + "name": "Half Life", + "decimals": 18, + "assetIdentifierName": "Contract Address", + "assetIdentifierValue": "0xc58c0Fca06908E66540102356f2E91edCaEB8D81", + "parentAssetId": "4e4d9982-3469-421b-ab60-2c0c2f05386a", + "assetType": "ERC20", + "assetId": "a2f25f45-ca0e-492f-87d3-129a92bae5d9" +}, { + "symbol": "SIN", + "name": "SINOVATE", + "decimals": null, + "assetIdentifierName": null, + "assetIdentifierValue": null, + "parentAssetId": null, + "assetType": null, + "assetId": "92a30868-760f-4d35-bcd6-cad347ab5e5e" +}, { + "symbol": "GCSTAR", + "name": "GCSTAR", + "decimals": 18, + "assetIdentifierName": "Contract Address", + "assetIdentifierValue": "0xb2d25d27f3f8f2265bedc400f00dac8b7521106a", + "parentAssetId": "4e4d9982-3469-421b-ab60-2c0c2f05386a", + "assetType": "ERC20", + "assetId": "a44d35c5-4de2-4b89-976e-8aac1269a460" +}, { + "symbol": "GCTGT", + "name": "GCTGT", + "decimals": 18, + "assetIdentifierName": "Contract Address", + "assetIdentifierValue": "0xed1a361830628c87ca3e283450101b833ae26114", + "parentAssetId": "4e4d9982-3469-421b-ab60-2c0c2f05386a", + "assetType": "ERC20", + "assetId": "5b10f7af-5cf3-4985-9590-13ade7b6eb53" +}, { + "symbol": "GCWAL", + "name": "GCWAL", + "decimals": 18, + "assetIdentifierName": "Contract Address", + "assetIdentifierValue": "0x0bd0e8e9ce51945e3295f12a344ccaf6893f43f9", + "parentAssetId": "4e4d9982-3469-421b-ab60-2c0c2f05386a", + "assetType": "ERC20", + "assetId": "5309cedf-e984-4e7e-aab9-522e4031509a" +}, { + "symbol": "GCBEST", + "name": "GCBEST", + "decimals": 18, + "assetIdentifierName": "Contract Address", + "assetIdentifierValue": "0x1388f1635aed7fc09526bd66f317e88aea888dd5", + "parentAssetId": "4e4d9982-3469-421b-ab60-2c0c2f05386a", + "assetType": "ERC20", + "assetId": "5c9dcfac-8337-4301-8390-e0c43774a422" +}, { + "symbol": "GCHD", + "name": "GCHD", + "decimals": 18, + "assetIdentifierName": "Contract Address", + "assetIdentifierValue": "0xa33d3b1bc1bf9fd9987c9e3f5e81722e12767a72", + "parentAssetId": "4e4d9982-3469-421b-ab60-2c0c2f05386a", + "assetType": "ERC20", + "assetId": "a27d9d46-0f01-4b59-99cc-39e36da07825" +}, { + "symbol": "LOWES", + "name": "GCLOWE", + "decimals": 18, + "assetIdentifierName": "Contract Address", + "assetIdentifierValue": "0x1675c092306d147d65ee81976d5d3bec99a3bb91", + "parentAssetId": "4e4d9982-3469-421b-ab60-2c0c2f05386a", + "assetType": "ERC20", + "assetId": "8e329a0d-b267-44b4-bf1d-6bb9c36d9a78" +}, { + "symbol": "DMME", + "name": "DMme", + "decimals": 18, + "assetIdentifierName": "Contract Address", + "assetIdentifierValue": "0x9556f8ee795d991ff371f547162d5efb2769425f", + "parentAssetId": "4e4d9982-3469-421b-ab60-2c0c2f05386a", + "assetType": "ERC20", + "assetId": "548b3397-f0a8-411a-a8b2-c266d38385a1" +}, { + "assetId": "b7683297-2194-4ce5-93ac-ac881f84b04f", + "symbol": "ARK", + "name": "Ark", + "assetType": null, + "decimals": 8, + "assetIdentifierName": null, + "assetIdentifierValue": null, + "parentAssetId": null +}, { + "assetId": "eaa860f3-cd65-407f-bc43-591393293f20", + "symbol": "AST", + "name": "AirSwap Token", + "assetType": "ERC20", + "decimals": 4, + "assetIdentifierName": "Contract Address", + "assetIdentifierValue": "0x27054b13b1B798B345b591a4d22e6562d47eA75a", + "parentAssetId": "4e4d9982-3469-421b-ab60-2c0c2f05386a" +}, { + "assetId": "5d07ccc2-a9de-495a-a981-cd7394c7deee", + "symbol": "APPC", + "name": "AppCoins", + "assetType": "ERC20", + "decimals": 18, + "assetIdentifierName": "Contract Address", + "assetIdentifierValue": "0x1a7a8bd9106f2b8d977e08582dc7d24c723ab0db", + "parentAssetId": "4e4d9982-3469-421b-ab60-2c0c2f05386a" +}, { + "assetId": "e1423643-722d-4b3d-b3bc-472c237b9e84", + "symbol": "ANT", + "name": "Aragon Network Token", + "assetType": "ERC20", + "decimals": 18, + "assetIdentifierName": "Contract Address", + "assetIdentifierValue": "0x960b236A07cf122663c4303350609A66A7B288C0", + "parentAssetId": "4e4d9982-3469-421b-ab60-2c0c2f05386a" +}, { + "assetId": "19bd1501-9a8e-4500-9a93-129f9c23d31d", + "symbol": "REP", + "name": "Reputation", + "assetType": "ERC20", + "decimals": 18, + "assetIdentifierName": "Contract Address", + "assetIdentifierValue": "0x1985365e9f78359a9B6AD760e32412f4a445E862", + "parentAssetId": "4e4d9982-3469-421b-ab60-2c0c2f05386a" +}, { + "assetId": "65023c5f-8cf6-448c-bc00-498a64e85ba2", + "symbol": "BNT", + "name": "Bancor Network Token", + "assetType": "ERC20", + "decimals": 18, + "assetIdentifierName": "Contract Address", + "assetIdentifierValue": "0x1F573D6Fb3F13d689FF844B4cE37794d79a7FF1C", + "parentAssetId": "4e4d9982-3469-421b-ab60-2c0c2f05386a" +}, { + "assetId": "0ae676cf-68b7-42ba-b54f-2672afd4f921", + "symbol": "BAT", + "name": "Basic Attention Token", + "assetType": "ERC20", + "decimals": 18, + "assetIdentifierName": "Contract Address", + "assetIdentifierValue": "0x0D8775F648430679A709E98d2b0Cb6250d2887EF", + "parentAssetId": "4e4d9982-3469-421b-ab60-2c0c2f05386a" +}, { + "assetId": "d88f558a-7a0e-4cd4-8629-07e5f7326a3c", + "symbol": "BNB", + "name": "Binance Coin", + "assetType": null, + "decimals": 8, + "assetIdentifierName": null, + "assetIdentifierValue": null, + "parentAssetId": null +}, { + "assetId": "d78c26f8-7c13-4909-bf62-57d7623f8ee8", + "symbol": "BTC", + "name": "Bitcoin", + "assetType": null, + "decimals": 8, + "assetIdentifierName": null, + "assetIdentifierValue": null, + "parentAssetId": null +}, { + "assetId": "aa841d73-3105-485d-9af9-870bc42d6284", + "symbol": "BCH", + "name": "Bitcoin Cash", + "assetType": null, + "decimals": 8, + "assetIdentifierName": null, + "assetIdentifierValue": null, + "parentAssetId": null +}, { + "assetId": "bf8d2a6f-0628-4d39-b7d0-2b32a20d556f", + "symbol": "BSV", + "name": "Bitcoin SV", + "assetType": null, + "decimals": 8, + "assetIdentifierName": null, + "assetIdentifierValue": null, + "parentAssetId": null +}, { + "assetId": "578b7fa7-f12f-4503-b0ff-cc66ed1bc0df", + "symbol": "BTG", + "name": "Bitcoin Gold", + "assetType": null, + "decimals": 8, + "assetIdentifierName": null, + "assetIdentifierValue": null, + "parentAssetId": null +}, { + "assetId": "11d2d19d-bfea-4abf-a52d-4600982f47a6", + "symbol": "BTT", + "name": "BitTorrent", + "assetType": "TRC10", + "decimals": 6, + "assetIdentifierName": "Asset ID", + "assetIdentifierValue": "1002000", + "parentAssetId": "ab212c90-a2ab-48cf-873c-a7b6e97d8935" +}, { + "assetId": "c72972bd-7e85-40b4-83e5-9634f827214e", + "symbol": "ADA", + "name": "Cardano", + "assetType": null, + "decimals": 5, + "assetIdentifierName": null, + "assetIdentifierValue": null, + "parentAssetId": null +}, { + "assetId": "ac9895e5-ea39-4483-a614-00462f04e986", + "symbol": "LINK", + "name": "ChainLink Token", + "assetType": "ERC20", + "decimals": 18, + "assetIdentifierName": "Contract Address", + "assetIdentifierValue": "0x514910771af9ca656af840dff83e8264ecf986ca", + "parentAssetId": "4e4d9982-3469-421b-ab60-2c0c2f05386a" +}, { + "assetId": "a6d02462-e1b0-4135-bb64-49e567217a5f", + "symbol": "CVC", + "name": "Civic", + "assetType": "ERC20", + "decimals": 8, + "assetIdentifierName": "Contract Address", + "assetIdentifierValue": "0x41e5560054824ea6b0732e656e3ad64e20e94e45", + "parentAssetId": "4e4d9982-3469-421b-ab60-2c0c2f05386a" +}, { + "assetId": "f653b133-c106-41d1-b821-5ad4fc84e05e", + "symbol": "CND", + "name": "Cindicator Token", + "assetType": "ERC20", + "decimals": 18, + "assetIdentifierName": "Contract Address", + "assetIdentifierValue": "0xd4c435f5b09f855c3317c8524cb1f586e42795fa", + "parentAssetId": "4e4d9982-3469-421b-ab60-2c0c2f05386a" +}, { + "assetId": "9ba604b1-c9ae-4600-aad4-e3a7c2903388", + "symbol": "ATOM", + "name": "Cosmos", + "assetType": null, + "decimals": 6, + "assetIdentifierName": null, + "assetIdentifierValue": null, + "parentAssetId": null +}, { + "assetId": "7d965a5c-9268-417a-972a-7b62fd690fad", + "symbol": "DAI", + "name": "DAI", + "assetType": "ERC20", + "decimals": 18, + "assetIdentifierName": "Contract Address", + "assetIdentifierValue": "0x89d24A6b4CcB1B6fAA2625fE562bDD9a23260359", + "parentAssetId": "4e4d9982-3469-421b-ab60-2c0c2f05386a" +}, { + "assetId": "5ed4d7ac-f741-4af0-bca9-3c02acd00beb", + "symbol": "DASH", + "name": "Dash", + "assetType": null, + "decimals": 8, + "assetIdentifierName": null, + "assetIdentifierValue": null, + "parentAssetId": null +}, { + "assetId": "0f484fe3-e603-4508-93ac-d048ac9a552d", + "symbol": "MANA", + "name": "Decentraland", + "assetType": "ERC20", + "decimals": 18, + "assetIdentifierName": "Contract Address", + "assetIdentifierValue": "0x0F5D2fB29fb7d3CFeE444a200298f468908cC942", + "parentAssetId": "4e4d9982-3469-421b-ab60-2c0c2f05386a" +}, { + "assetId": "78466ff1-5a36-4210-9a26-dc8585f75b1e", + "symbol": "DCR", + "name": "Decred", + "assetType": null, + "decimals": 8, + "assetIdentifierName": null, + "assetIdentifierValue": null, + "parentAssetId": null +}, { + "assetId": "97c3dc32-c042-475c-b173-008289c772f7", + "symbol": "DGB", + "name": "DigiByte", + "assetType": null, + "decimals": 8, + "assetIdentifierName": null, + "assetIdentifierValue": null, + "parentAssetId": null +}, { + "assetId": "cfa80d98-11b9-47b9-b928-7e8323295820", + "symbol": "DGD", + "name": "Digix", + "assetType": "ERC20", + "decimals": 9, + "assetIdentifierName": "Contract Address", + "assetIdentifierValue": "0xE0B7927c4aF23765Cb51314A0E0521A9645F0E2A", + "parentAssetId": "4e4d9982-3469-421b-ab60-2c0c2f05386a" +}, { + "assetId": "e9e1f0f5-cc4e-4369-ab01-8477e7b971e5", + "symbol": "DNT", + "name": "district0x Network Token", + "assetType": "ERC20", + "decimals": 18, + "assetIdentifierName": "Contract Address", + "assetIdentifierValue": "0x0abdace70d3790235af448c88547603b945604ea", + "parentAssetId": "4e4d9982-3469-421b-ab60-2c0c2f05386a" +}, { + "assetId": "0a2f3bb6-5190-4c02-85a9-5eecea9ed912", + "symbol": "DOGE", + "name": "Dogecoin", + "assetType": null, + "decimals": 8, + "assetIdentifierName": null, + "assetIdentifierValue": null, + "parentAssetId": null +}, { + "assetId": "948a4b55-be93-4caa-ab6e-9b2076a0a958", + "symbol": "EOS", + "name": "EOS", + "assetType": null, + "decimals": 4, + "assetIdentifierName": null, + "assetIdentifierValue": null, + "parentAssetId": null +}, { + "assetId": "4e4d9982-3469-421b-ab60-2c0c2f05386a", + "symbol": "ETH", + "name": "Ethereum", + "assetType": null, + "decimals": 8, + "assetIdentifierName": null, + "assetIdentifierValue": null, + "parentAssetId": null +}, { + "assetId": "b38a1576-a704-479b-96fa-b9a83bda7ed5", + "symbol": "ETC", + "name": "Ethereum Classic", + "assetType": null, + "decimals": 8, + "assetIdentifierName": null, + "assetIdentifierValue": null, + "parentAssetId": null +}, { + "assetId": "d7cf1afe-47f0-458a-9a5a-eea031ad2e05", + "symbol": "ETHOS", + "name": "Ethos", + "assetType": "ERC20", + "decimals": 8, + "assetIdentifierName": "Contract Address", + "assetIdentifierValue": "0x5Af2Be193a6ABCa9c8817001F45744777Db30756", + "parentAssetId": "4e4d9982-3469-421b-ab60-2c0c2f05386a" +}, { + "assetId": "8b9f7abb-a364-4996-9819-3c45272fe95e", + "symbol": "GAS", + "name": "GAS", + "assetType": "NEOUtilityToken", + "decimals": 18, + "assetIdentifierName": "Asset ID", + "assetIdentifierValue": "602c79718b16e442de58778e148d0b1084e3b2dffd5de6b7b16cee7969282de7", + "parentAssetId": "aae85fa5-7d6a-427c-8088-37df459d55b8" +}, { + "assetId": "8b123456-a364-4996-9819-3c45272fe95e", + "symbol": "FISH", + "name": "NeoFish", + "assetType": "NEP5", + "decimals": 4, + "assetIdentifierName": "Asset ID", + "assetIdentifierValue": "833ff069a6f04488192bbfd9334699719c8c9c63", + "parentAssetId": "aae85fa5-7d6a-427c-8088-37df459d55b8" +}, { + "assetId": "8118483c-1484-4223-85c9-6d1632ba610b", + "symbol": "GUSD", + "name": "Gemini Dollar", + "assetType": "ERC20", + "decimals": 2, + "assetIdentifierName": "Contract Address", + "assetIdentifierValue": "0x056Fd409E1d7A124BD7017459dFEa2F387b6d5Cd", + "parentAssetId": "4e4d9982-3469-421b-ab60-2c0c2f05386a" +}, { + "assetId": "85508230-6a6c-4c39-a256-4f25bd44d898", + "symbol": "GNO", + "name": "Gnosis Token", + "assetType": "ERC20", + "decimals": 18, + "assetIdentifierName": "Contract Address", + "assetIdentifierValue": "0x6810e776880C02933D47DB1b9fc05908e5386b96", + "parentAssetId": "4e4d9982-3469-421b-ab60-2c0c2f05386a" +}, { + "assetId": "d74d3574-0e02-47f8-945d-d5da3da24c05", + "symbol": "GNT", + "name": "Golem Network Token", + "assetType": "ERC20", + "decimals": 18, + "assetIdentifierName": "Contract Address", + "assetIdentifierValue": "0xa74476443119A942dE498590Fe1f2454d7D4aC0d", + "parentAssetId": "4e4d9982-3469-421b-ab60-2c0c2f05386a" +}, { + "assetId": "03d284a9-6896-4f9b-9ce4-b5f6dba5600d", + "symbol": "FUN", + "name": "FunFair", + "assetType": "ERC20", + "decimals": 8, + "assetIdentifierName": "Contract Address", + "assetIdentifierValue": "0x419D0d8BdD9aF5e606Ae2232ed285Aff190E711b", + "parentAssetId": "4e4d9982-3469-421b-ab60-2c0c2f05386a" +}, { + "assetId": "b14a6498-de43-4115-81a6-4a88660508f4", + "symbol": "RLC", + "name": "iEx.ec Network Token", + "assetType": "ERC20", + "decimals": 9, + "assetIdentifierName": "Contract Address", + "assetIdentifierValue": "0x607F4C5BB672230e8672085532f7e901544a7375", + "parentAssetId": "4e4d9982-3469-421b-ab60-2c0c2f05386a" +}, { + "assetId": "a9b1c316-298b-4615-9e13-5408e6ff9043", + "symbol": "LSK", + "name": "Lisk", + "assetType": null, + "decimals": 8, + "assetIdentifierName": null, + "assetIdentifierValue": null, + "parentAssetId": null +}, { + "assetId": "d79b9ece-a918-4523-b2bc-74071675b54a", + "symbol": "LTC", + "name": "Litecoin", + "assetType": null, + "decimals": 8, + "assetIdentifierName": null, + "assetIdentifierValue": null, + "parentAssetId": null +}, { + "assetId": "8380065d-4c64-4736-a3e0-841c205ee6d7", + "symbol": "LUN", + "name": "Lunyr Token", + "assetType": "ERC20", + "decimals": 18, + "assetIdentifierName": "Contract Address", + "assetIdentifierValue": "0xfa05A73FfE78ef8f1a739473e462c54bae6567D9", + "parentAssetId": "4e4d9982-3469-421b-ab60-2c0c2f05386a" +}, { + "assetId": "48826f18-c591-46ec-bd05-03c97bec3f15", + "symbol": "LOOM", + "name": "LoomToken", + "assetType": "ERC20", + "decimals": 18, + "assetIdentifierName": "Contract Address", + "assetIdentifierValue": "0xa4e8c3ec456107ea67d3075bf9e3df3a75823db0", + "parentAssetId": "4e4d9982-3469-421b-ab60-2c0c2f05386a" +}, { + "assetId": "ec93bb71-0bb5-4412-af66-8c905d73033d", + "symbol": "MKR", + "name": "Maker", + "assetType": "ERC20", + "decimals": 18, + "assetIdentifierName": "Contract Address", + "assetIdentifierValue": "0x9f8F72aA9304c8B593d555F12eF6589cC3A579A2", + "parentAssetId": "4e4d9982-3469-421b-ab60-2c0c2f05386a" +}, { + "assetId": "7d443286-3ed9-424d-a296-87a4616aa692", + "symbol": "MCO", + "name": "Monaco", + "assetType": "ERC20", + "decimals": 8, + "assetIdentifierName": "Contract Address", + "assetIdentifierValue": "0xB63B606Ac810a52cCa15e44bB630fd42D8d1d83d", + "parentAssetId": "4e4d9982-3469-421b-ab60-2c0c2f05386a" +}, { + "assetId": "d4b874c4-7cf7-456f-8225-eb20e33767f2", + "symbol": "XMR", + "name": "Monero", + "assetType": null, + "decimals": 8, + "assetIdentifierName": null, + "assetIdentifierValue": null, + "parentAssetId": null +}, { + "assetId": "e4f66cbc-c2ef-4462-8226-c944936804ff", + "symbol": "NANO", + "name": "Nano", + "assetType": null, + "decimals": 8, + "assetIdentifierName": null, + "assetIdentifierValue": null, + "parentAssetId": null +}, { + "assetId": "aae85fa5-7d6a-427c-8088-37df459d55b8", + "symbol": "NEO", + "name": "NEO", + "assetType": "NEOGoverningToken", + "decimals": 18, + "assetIdentifierName": "Asset ID", + "assetIdentifierValue": "c56f33fc6ecfcd0c225c4ab356fee59390af8560be0e930faebe74a6daff7c9b", + "parentAssetId": null +}, { + "assetId": "7333c9c9-976a-4045-b6fa-176ac13ddf6d", + "symbol": "XEM", + "name": "NEM", + "assetType": null, + "decimals": 6, + "assetIdentifierName": null, + "assetIdentifierValue": null, + "parentAssetId": null +}, { + "assetId": "9dbafbf2-5974-4308-ae7d-eb2957dab8e0", + "symbol": "NMR", + "name": "Numeraire", + "assetType": "ERC20", + "decimals": 18, + "assetIdentifierName": "Contract Address", + "assetIdentifierValue": "0x1776e1F26f98b1A5dF9cD347953a26dd3Cb46671", + "parentAssetId": "4e4d9982-3469-421b-ab60-2c0c2f05386a" +}, { + "assetId": "1c70b1cd-0bc2-4ea4-a3d2-c031fcdd04e5", + "symbol": "OMG", + "name": "OMGToken", + "assetType": "ERC20", + "decimals": 18, + "assetIdentifierName": "Contract Address", + "assetIdentifierValue": "0xd26114cd6EE289AccF82350c8d8487fedB8A0C07", + "parentAssetId": "4e4d9982-3469-421b-ab60-2c0c2f05386a" +}, { + "assetId": "af9c0656-580e-4700-bec8-13d24d2ead87", + "symbol": "ONT", + "name": "Ontology", + "assetType": null, + "decimals": 1, + "assetIdentifierName": null, + "assetIdentifierValue": null, + "parentAssetId": null +}, { + "assetId": "14a75048-0658-44c9-9501-d7a290358835", + "symbol": "ONG", + "name": "Ontology Gas", + "assetType": null, + "decimals": 9, + "assetIdentifierName": null, + "assetIdentifierValue": null, + "parentAssetId": null +}, { + "assetId": "87330131-52aa-46c7-8700-1cd7d6c25501", + "symbol": "PAX", + "name": "PAX", + "assetType": "ERC20", + "decimals": 18, + "assetIdentifierName": "Contract Address", + "assetIdentifierValue": "0x8e870d67f660d95d5be530380d0ec0bd388289e1", + "parentAssetId": "4e4d9982-3469-421b-ab60-2c0c2f05386a" +}, { + "assetId": "a7c58707-15dc-45ae-ac28-775c5eb6be73", + "symbol": "POE", + "name": "Po.et", + "assetType": "ERC20", + "decimals": 8, + "assetIdentifierName": "Contract Address", + "assetIdentifierValue": "0x0e0989b1f9b8a38983c2ba8053269ca62ec9b195", + "parentAssetId": "4e4d9982-3469-421b-ab60-2c0c2f05386a" +}, { + "assetId": "002d16b6-8393-4369-83f1-46d8d1f8939e", + "symbol": "POLY", + "name": "Polymath", + "assetType": "ERC20", + "decimals": 18, + "assetIdentifierName": "Contract Address", + "assetIdentifierValue": "0x9992eC3cF6A55b00978cdDF2b27BC6882d88D1eC", + "parentAssetId": "4e4d9982-3469-421b-ab60-2c0c2f05386a" +}, { + "assetId": "669c5f7e-f3da-4fd6-87e2-039f9f6281d8", + "symbol": "PPT", + "name": "Populous Platform", + "assetType": "ERC20", + "decimals": 8, + "assetIdentifierName": "Contract Address", + "assetIdentifierValue": "0xd4fa1460F537bb9085d22C7bcCB5DD450Ef28e3a", + "parentAssetId": "4e4d9982-3469-421b-ab60-2c0c2f05386a" +}, { + "assetId": "1103e34a-6955-4d16-8b5c-91b9ea54c229", + "symbol": "POWR", + "name": "Power Ledger", + "assetType": "ERC20", + "decimals": 6, + "assetIdentifierName": "Contract Address", + "assetIdentifierValue": "0x595832f8fc6bf59c85c527fec3740a1b7a361269", + "parentAssetId": "4e4d9982-3469-421b-ab60-2c0c2f05386a" +}, { + "assetId": "16e3dbc3-4db5-4593-8cb3-4f0a12b99aad", + "symbol": "QSP", + "name": "Quantstamp Token", + "assetType": "ERC20", + "decimals": 18, + "assetIdentifierName": "Contract Address", + "assetIdentifierValue": "0x99ea4dB9EE77ACD40B119BD1dC4E33e1C070b80d", + "parentAssetId": "4e4d9982-3469-421b-ab60-2c0c2f05386a" +}, { + "assetId": "dfb13a51-6bf7-48df-8db8-84021d70e6b0", + "symbol": "QTUM", + "name": "Qtum", + "assetType": null, + "decimals": 8, + "assetIdentifierName": null, + "assetIdentifierValue": null, + "parentAssetId": null +}, { + "assetId": "a08cecb9-8e5d-415e-83f0-184be79f68ba", + "symbol": "RVN", + "name": "Ravencoin", + "assetType": null, + "decimals": 8, + "assetIdentifierName": null, + "assetIdentifierValue": null, + "parentAssetId": null +}, { + "assetId": "abe0030a-d8e3-4518-879f-cd9939b7d8ab", + "symbol": "XRP", + "name": "Ripple", + "assetType": null, + "decimals": 6, + "assetIdentifierName": null, + "assetIdentifierValue": null, + "parentAssetId": null +}, { + "assetId": "29ba5109-4e56-4946-9c0a-03261d1573eb", + "symbol": "RCN", + "name": "Ripio Credit Network Token", + "assetType": "ERC20", + "decimals": 18, + "assetIdentifierName": "Contract Address", + "assetIdentifierValue": "0xf970b8e36e23f7fc3fd752eea86f8be8d83375a6", + "parentAssetId": "4e4d9982-3469-421b-ab60-2c0c2f05386a" +}, { + "assetId": "2bb2b950-9583-4d54-b3f6-1ff5b8e076df", + "symbol": "SNT", + "name": "Status Network", + "assetType": "ERC20", + "decimals": 18, + "assetIdentifierName": "Contract Address", + "assetIdentifierValue": "0x744d70FDBE2Ba4CF95131626614a1763DF805B9E", + "parentAssetId": "4e4d9982-3469-421b-ab60-2c0c2f05386a" +}, { + "assetId": "b8edc3ba-6606-4a63-b8f6-58b491c2e40a", + "symbol": "XLM", + "name": "Stellar Lumens", + "assetType": null, + "decimals": 7, + "assetIdentifierName": null, + "assetIdentifierValue": null, + "parentAssetId": null +}, { + "assetId": "619bd3ce-b74e-4c05-91a9-a4ea7a771a76", + "symbol": "STORJ", + "name": "StorjToken", + "assetType": "ERC20", + "decimals": 8, + "assetIdentifierName": "Contract Address", + "assetIdentifierValue": "0xB64ef51C888972c908CFacf59B47C1AfBC0Ab8aC", + "parentAssetId": "4e4d9982-3469-421b-ab60-2c0c2f05386a" +}, { + "assetId": "17ec53b2-741c-448a-b3b1-b3c082c58cd2", + "symbol": "STORM", + "name": "Storm Token", + "assetType": "ERC20", + "decimals": 18, + "assetIdentifierName": "Contract Address", + "assetIdentifierValue": "0xD0a4b8946Cb52f0661273bfbC6fD0E0C75Fc6433", + "parentAssetId": "4e4d9982-3469-421b-ab60-2c0c2f05386a" +}, { + "assetId": "73b1618a-d61f-4dd4-87c3-853a967d4490", + "symbol": "PAY", + "name": "TenX Pay Token", + "assetType": "ERC20", + "decimals": 18, + "assetIdentifierName": "Contract Address", + "assetIdentifierValue": "0xB97048628DB6B661D4C2aA833e95Dbe1A905B280", + "parentAssetId": "4e4d9982-3469-421b-ab60-2c0c2f05386a" +}, { + "assetId": "5e414e43-e6fe-4de0-8fc7-8e56282cf90f", + "symbol": "USDT", + "name": "Tether USD", + "assetType": "ERC20", + "decimals": 6, + "assetIdentifierName": "Contract Address", + "assetIdentifierValue": "0xdac17f958d2ee523a2206206994597c13d831ec7", + "parentAssetId": "4e4d9982-3469-421b-ab60-2c0c2f05386a" +}, { + "assetId": "b0115257-13f2-4fb1-8796-07becdcacf8f", + "symbol": "XTZ", + "name": "Tezos", + "assetType": null, + "decimals": 3, + "assetIdentifierName": null, + "assetIdentifierValue": null, + "parentAssetId": null +}, { + "assetId": "ab212c90-a2ab-48cf-873c-a7b6e97d8935", + "symbol": "TRX", + "name": "TRON", + "assetType": null, + "decimals": 6, + "assetIdentifierName": null, + "assetIdentifierValue": null, + "parentAssetId": null +}, { + "assetId": "29cb1dc7-37b1-427a-89b3-98734fc1311b", + "symbol": "TUSD", + "name": "TrueUSD", + "assetType": "ERC20", + "decimals": 18, + "assetIdentifierName": "Contract Address", + "assetIdentifierValue": "0x0000000000085d4780B73119b644AE5ecd22b376", + "parentAssetId": "4e4d9982-3469-421b-ab60-2c0c2f05386a" +}, { + "assetId": "23fab390-e6cb-4676-a5f1-e1c5317366e5", + "symbol": "USDC", + "name": "USD Coin", + "assetType": "ERC20", + "decimals": 6, + "assetIdentifierName": "Contract Address", + "assetIdentifierValue": "0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48", + "parentAssetId": "4e4d9982-3469-421b-ab60-2c0c2f05386a" +}, { + "assetId": "b3e4cc24-5af1-4ed3-b989-15a79f0282de", + "symbol": "VET", + "name": "VeChain", + "assetType": null, + "decimals": 18, + "assetIdentifierName": null, + "assetIdentifierValue": null, + "parentAssetId": null +}, { + "assetId": "97b02406-2331-4ee2-99db-8751ca6c1782", + "symbol": "VTHO", + "name": "VeThor", + "assetType": "VIP180", + "decimals": 18, + "assetIdentifierName": "Contract Address", + "assetIdentifierValue": "0x0000000000000000000000000000456E65726779", + "parentAssetId": "b3e4cc24-5af1-4ed3-b989-15a79f0282de" +}, { + "assetId": "4afe61e1-7209-4a87-9f2a-b2a73ebc9b93", + "symbol": "VIB", + "name": "Viberate", + "assetType": "ERC20", + "decimals": 18, + "assetIdentifierName": "Contract Address", + "assetIdentifierValue": "0x2C974B2d0BA1716E644c1FC59982a89DDD2fF724", + "parentAssetId": "4e4d9982-3469-421b-ab60-2c0c2f05386a" +}, { + "assetId": "948f056c-d1f7-418f-b0c1-e449cd8ad215", + "symbol": "WAVES", + "name": "Waves", + "assetType": null, + "decimals": 8, + "assetIdentifierName": null, + "assetIdentifierValue": null, + "parentAssetId": null +}, { + "assetId": "65705c19-c6d5-445e-8235-29a0da22ee89", + "symbol": "ZEC", + "name": "Zcash", + "assetType": null, + "decimals": 8, + "assetIdentifierName": null, + "assetIdentifierValue": null, + "parentAssetId": null +}, { + "assetId": "ed919ad4-c0d0-42a7-a2b3-9728cbb81f26", + "symbol": "ZRX", + "name": "0x Protocol Token", + "assetType": "ERC20", + "decimals": 18, + "assetIdentifierName": "Contract Address", + "assetIdentifierValue": "0xE41d2489571d322189246DaFA5ebDe1F4699F498", + "parentAssetId": "4e4d9982-3469-421b-ab60-2c0c2f05386a" +}, { + "assetId": "0fcdab6b-9ca8-48d9-9254-32b078a2b31e", + "symbol": "LIFE", + "name": "PureLifeCoin", + "assetType": "ERC20", + "decimals": 18, + "assetIdentifierName": "Contract Address", + "assetIdentifierValue": "0xff18dbc487b4c2e3222d115952babfda8ba52f5f", + "parentAssetId": "4e4d9982-3469-421b-ab60-2c0c2f05386a" +}, { + "assetId": "163be021-9a85-41c8-ad8c-bdbf779e8dcd", + "symbol": "VBK", + "name": "VeriBlock", + "assetType": null, + "decimals": 8, + "assetIdentifierName": null, + "assetIdentifierValue": null, + "parentAssetId": null +}, { + "assetId": "0b10f26b-b4aa-43f1-b085-79f2e04e057a", + "symbol": "VEIL", + "name": "Veil", + "assetType": null, + "decimals": 8, + "assetIdentifierName": null, + "assetIdentifierValue": null, + "parentAssetId": null +}, { + "assetId": "bb0e2008-8e7b-4fee-b1cd-0fa8148e2284", + "symbol": "HPT", + "name": "HuobiPoolToken", + "assetType": "ERC20", + "decimals": 18, + "assetIdentifierName": "Contract Address", + "assetIdentifierValue": "0xa66Daa57432024023DB65477BA87D4E7F5f95213", + "parentAssetId": "4e4d9982-3469-421b-ab60-2c0c2f05386a" +}, { + "assetId": "a96765ca-eba7-47f6-9b4b-cdb513751481", + "symbol": "HTB", + "name": "Hotbit Token", + "assetType": "ERC20", + "decimals": 18, + "assetIdentifierName": "Contract Address", + "assetIdentifierValue": "0x6be61833FC4381990e82D7D4a9F4c9B3F67eA941", + "parentAssetId": "4e4d9982-3469-421b-ab60-2c0c2f05386a" +}, { + "assetId": "c79f65ff-0bf2-4350-a93d-8a9aba318505", + "symbol": "ZB", + "name": " ZBToken", + "assetType": "ERC20", + "decimals": 18, + "assetIdentifierName": "Contract Address", + "assetIdentifierValue": "0xBd0793332e9fB844A52a205A233EF27a5b34B927", + "parentAssetId": "4e4d9982-3469-421b-ab60-2c0c2f05386a" +}, { + "assetId": "cd7b2dfd-cad6-4555-8c0e-14f05657534e", + "symbol": "MX", + "name": "MX Token", + "assetType": "ERC20", + "decimals": 18, + "assetIdentifierName": "Contract Address", + "assetIdentifierValue": "0x11eeF04c884E24d9B7B4760e7476D06ddF797f36", + "parentAssetId": "4e4d9982-3469-421b-ab60-2c0c2f05386a" +}, { + "assetId": "9a5809f8-679d-4a7a-9d58-8ba3d50e5535", + "symbol": "BF", + "name": "BitForex Token", + "assetType": "ERC20", + "decimals": 18, + "assetIdentifierName": "Contract Address", + "assetIdentifierValue": "0x5b71BEE9D961b1B848f8485EEC8d8787f80217F5", + "parentAssetId": "4e4d9982-3469-421b-ab60-2c0c2f05386a" +}, { + "assetId": "e53d2a02-00f9-4d63-827f-a673f6961ecc", + "symbol": "OKB", + "name": "OKB", + "assetType": "ERC20", + "decimals": 18, + "assetIdentifierName": "Contract Address", + "assetIdentifierValue": "0x75231F58b43240C9718Dd58B4967c5114342a86c", + "parentAssetId": "4e4d9982-3469-421b-ab60-2c0c2f05386a" +}, { + "assetId": "11e33d88-2a73-4176-838b-47302662b1db", + "symbol": "BUSD", + "name": "Binance USD", + "assetType": "ERC20", + "decimals": 18, + "assetIdentifierName": "Contract Address", + "assetIdentifierValue": "0x4Fabb145d64652a948d72533023f6E7A623C7C53", + "parentAssetId": "4e4d9982-3469-421b-ab60-2c0c2f05386a" +}, { + "assetId": "936c485e-587e-406d-8e60-deec09f878f9", + "symbol": "HT", + "name": "HuobiToken", + "assetType": "ERC20", + "decimals": 18, + "assetIdentifierName": "Contract Address", + "assetIdentifierValue": "0x6f259637dcD74C767781E37Bc6133cd6A68aa161", + "parentAssetId": "4e4d9982-3469-421b-ab60-2c0c2f05386a" +}, { + "assetId": "5c1562d4-14ca-11ea-8d71-362b9e155667", + "symbol": "DAI", + "name": "DAI", + "assetType": "ERC20", + "decimals": 18, + "assetIdentifierName": "Contract Address", + "assetIdentifierValue": "0x6B175474E89094C44Da98b954EedeAC495271d0F", + "parentAssetId": "4e4d9982-3469-421b-ab60-2c0c2f05386a" +}, { + "assetId": "01446739-1bd4-4d97-8113-df9ec19b54ef", + "symbol": "VTX", + "name": "VOLENTIX", + "assetType": "EOSToken", + "decimals": 8, + "assetIdentifierName": "Account Name", + "assetIdentifierValue": "volentixgsys", + "parentAssetId": "948a4b55-be93-4caa-ab6e-9b2076a0a958" +}, { + "assetId": "62176ba4-7928-4e79-8afe-046f192cfcdd", + "symbol": "EOSDT", + "name": "EOSDT", + "assetType": "EOSToken", + "decimals": 9, + "assetIdentifierName": "Account Name", + "assetIdentifierValue": "eosdtsttoken", + "parentAssetId": "948a4b55-be93-4caa-ab6e-9b2076a0a958" +}, { + "assetId": "129a9628-fda7-47d0-8b11-f6871b0fd03b", + "symbol": "PLR", + "name": "PILLAR", + "assetType": "ERC20", + "decimals": 18, + "assetIdentifierName": "Contract Address", + "assetIdentifierValue": "0xe3818504c1b32bf1557b16c238b2e01fd3149c17", + "parentAssetId": "4e4d9982-3469-421b-ab60-2c0c2f05386a" +}, { + "assetId": "352f1cca-d28d-41f9-8819-47cebe7c8f3a", + "symbol": "EDG", + "name": "Edgeless", + "assetType": "ERC20", + "decimals": 0, + "assetIdentifierName": "Contract Address", + "assetIdentifierValue": "0x08711d3b02c8758f2fb3ab4e80228418a7f8e39c", + "parentAssetId": "4e4d9982-3469-421b-ab60-2c0c2f05386a" +}, { + "assetId": "efd69854-7b54-4753-9f2a-2a0c79d6c819", + "symbol": "VERI", + "name": "Veritaseum", + "assetType": "ERC20", + "decimals": 18, + "assetIdentifierName": "Contract Address", + "assetIdentifierValue": "0x8f3470A7388c05eE4e7AF3d01D8C722b0FF52374", + "parentAssetId": "4e4d9982-3469-421b-ab60-2c0c2f05386a" +}, { + "assetId": "f21a6cce-ffeb-45ad-885f-efa0680cd231", + "symbol": "WETH", + "name": "Wrapped Ether", + "assetType": "ERC20", + "decimals": 18, + "assetIdentifierName": "Contract Address", + "assetIdentifierValue": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", + "parentAssetId": "4e4d9982-3469-421b-ab60-2c0c2f05386a" +}]; +},{}],"Zk7e":[function(require,module,exports) { +"use strict"; - if (val >= mul) val -= Math.pow(2, 8 * byteLength) +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.CruxSpec = exports.Validations = void 0; - return val -} +var _jsonTypeValidation = require("@mojotech/json-type-validation"); -Buffer.prototype.readIntBE = function readIntBE (offset, byteLength, noAssert) { - offset = offset | 0 - byteLength = byteLength | 0 - if (!noAssert) checkOffset(offset, byteLength, this.length) +var _config = _interopRequireDefault(require("../../config")); - var i = byteLength - var mul = 1 - var val = this[offset + --i] - while (i > 0 && (mul *= 0x100)) { - val += this[offset + --i] * mul - } - mul *= 0x80 +var _error = require("../../packages/error"); - if (val >= mul) val -= Math.pow(2, 8 * byteLength) +var _identityUtils = require("../../packages/identity-utils"); - return val -} +var _globalAssetList = _interopRequireDefault(require("../global-asset-list.json")); -Buffer.prototype.readInt8 = function readInt8 (offset, noAssert) { - if (!noAssert) checkOffset(offset, 1, this.length) - if (!(this[offset] & 0x80)) return (this[offset]) - return ((0xff - this[offset] + 1) * -1) -} +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } -Buffer.prototype.readInt16LE = function readInt16LE (offset, noAssert) { - if (!noAssert) checkOffset(offset, 2, this.length) - var val = this[offset] | (this[offset + 1] << 8) - return (val & 0x8000) ? val | 0xFFFF0000 : val -} +var _a; -Buffer.prototype.readInt16BE = function readInt16BE (offset, noAssert) { - if (!noAssert) checkOffset(offset, 2, this.length) - var val = this[offset + 1] | (this[offset] << 8) - return (val & 0x8000) ? val | 0xFFFF0000 : val -} +var assetIdRegex = new RegExp("^[0-9a-f]{8}-[0-9a-f]{4}-[0-5][0-9a-f]{3}-[089ab][0-9a-f]{3}-[0-9a-f]{12}$"); // tslint:disable-next-line: tsr-detect-unsafe-regexp -Buffer.prototype.readInt32LE = function readInt32LE (offset, noAssert) { - if (!noAssert) checkOffset(offset, 4, this.length) +var urlRegex = new RegExp("^(?:http(s)?:\\/\\/)?[\\w.-]+(?:\\.[\\w\\.-]+)+[\\w\\-\\._~:/?#[\\]@!\\$&'\\(\\)\\*\\+,;=.]+$"); - return (this[offset]) | - (this[offset + 1] << 8) | - (this[offset + 2] << 16) | - (this[offset + 3] << 24) -} +var Validations = +/** @class */ +function () { + function Validations() {} -Buffer.prototype.readInt32BE = function readInt32BE (offset, noAssert) { - if (!noAssert) checkOffset(offset, 4, this.length) + Validations.validateSubdomainString = function (subDomainString) { + var subdomainRegex = "^[a-z]([a-z]|[0-9]|-|_)*([a-z]|[0-9])$"; + var subdomainMinLength = 4; + var subdomainMaxLength = 20; // tslint:disable-next-line: tsr-detect-non-literal-regexp - return (this[offset] << 24) | - (this[offset + 1] << 16) | - (this[offset + 2] << 8) | - (this[offset + 3]) -} + if (!subDomainString.match(new RegExp(subdomainRegex))) { + throw _error.ErrorHelper.getPackageError(null, _error.PackageErrorCode.SubdomainRegexMatchFailure); + } -Buffer.prototype.readFloatLE = function readFloatLE (offset, noAssert) { - if (!noAssert) checkOffset(offset, 4, this.length) - return ieee754.read(this, offset, true, 23, 4) -} - -Buffer.prototype.readFloatBE = function readFloatBE (offset, noAssert) { - if (!noAssert) checkOffset(offset, 4, this.length) - return ieee754.read(this, offset, false, 23, 4) -} + if (subDomainString.length < subdomainMinLength || subDomainString.length > subdomainMaxLength) { + throw _error.ErrorHelper.getPackageError(null, _error.PackageErrorCode.SubdomainLengthCheckFailure); + } + }; -Buffer.prototype.readDoubleLE = function readDoubleLE (offset, noAssert) { - if (!noAssert) checkOffset(offset, 8, this.length) - return ieee754.read(this, offset, true, 52, 8) -} + Validations.validateRegex = function (string, regex) { + if (!regex.test(string)) { + throw new _error.BaseError(null, "regex failed for: " + string); + } + }; -Buffer.prototype.readDoubleBE = function readDoubleBE (offset, noAssert) { - if (!noAssert) checkOffset(offset, 8, this.length) - return ieee754.read(this, offset, false, 52, 8) -} + Validations.validateURL = function (url) { + try { + Validations.validateRegex(url, urlRegex); + } catch (e) { + throw new _error.BaseError(e, "Invalid URL: " + url); + } + }; -function checkInt (buf, value, offset, ext, max, min) { - if (!Buffer.isBuffer(buf)) throw new TypeError('"buffer" argument must be a Buffer instance') - if (value > max || value < min) throw new RangeError('"value" argument is out of bounds') - if (offset + ext > buf.length) throw new RangeError('Index out of range') -} + Validations.validateAssetId = function (assetId) { + try { + Validations.validateRegex(assetId, assetIdRegex); + } catch (e) { + throw new _error.BaseError(e, "Invalid AssetID: " + assetId); + } + }; -Buffer.prototype.writeUIntLE = function writeUIntLE (value, offset, byteLength, noAssert) { - value = +value - offset = offset | 0 - byteLength = byteLength | 0 - if (!noAssert) { - var maxBytes = Math.pow(2, 8 * byteLength) - 1 - checkInt(this, value, offset, byteLength, maxBytes, 0) - } + Validations.validateAssetIdAgainstAssetList = function (assetId, assetList) { + if (!assetList.find(function (asset) { + return asset.assetId === assetId; + })) { + throw new _error.BaseError(null, "AssetID: " + assetId + " is not recognized."); + } + }; - var mul = 1 - var i = 0 - this[offset] = value & 0xFF - while (++i < byteLength && (mul *= 0x100)) { - this[offset + i] = (value / mul) & 0xFF - } + Validations.validateGlobalAsset = function (assetObject) { + // TODO: add validations for all fields + Validations.validateAssetId(assetObject.assetId); // tslint:disable-next-line: no-unused-expression - return offset + byteLength -} + assetObject.parentAssetId && Validations.validateAssetId(assetObject.parentAssetId); + }; -Buffer.prototype.writeUIntBE = function writeUIntBE (value, offset, byteLength, noAssert) { - value = +value - offset = offset | 0 - byteLength = byteLength | 0 - if (!noAssert) { - var maxBytes = Math.pow(2, 8 * byteLength) - 1 - checkInt(this, value, offset, byteLength, maxBytes, 0) - } + Validations.validateAssetList = function (assetList) { + assetList.forEach(Validations.validateGlobalAsset); + }; - var i = byteLength - 1 - var mul = 1 - this[offset + i] = value & 0xFF - while (--i >= 0 && (mul *= 0x100)) { - this[offset + i] = (value / mul) & 0xFF - } + Validations.validateAssetMapping = function (assetMapping, assetList) { + Object.keys(assetMapping).forEach(function (assetSymbol) { + Validations.validateAssetId(assetMapping[assetSymbol]); + Validations.validateAssetIdAgainstAssetList(assetMapping[assetSymbol], assetList); + }); + }; - return offset + byteLength -} + Validations.validateNameServiceConfig = function (nameServiceConfig) { + // TODO: domain name validation + if (nameServiceConfig.gaiaHub) { + Validations.validateURL(nameServiceConfig.gaiaHub); + } -Buffer.prototype.writeUInt8 = function writeUInt8 (value, offset, noAssert) { - value = +value - offset = offset | 0 - if (!noAssert) checkInt(this, value, offset, 1, 0xff, 0) - if (!Buffer.TYPED_ARRAY_SUPPORT) value = Math.floor(value) - this[offset] = (value & 0xff) - return offset + 1 -} + if (nameServiceConfig.subdomainRegistrar) { + Validations.validateURL(nameServiceConfig.subdomainRegistrar); + } -function objectWriteUInt16 (buf, value, offset, littleEndian) { - if (value < 0) value = 0xffff + value + 1 - for (var i = 0, j = Math.min(buf.length - offset, 2); i < j; ++i) { - buf[offset + i] = (value & (0xff << (8 * (littleEndian ? i : 1 - i)))) >>> - (littleEndian ? i : 1 - i) * 8 - } -} + if (nameServiceConfig.bnsNodes) { + nameServiceConfig.bnsNodes.forEach(Validations.validateURL); + } + }; -Buffer.prototype.writeUInt16LE = function writeUInt16LE (value, offset, noAssert) { - value = +value - offset = offset | 0 - if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0) - if (Buffer.TYPED_ARRAY_SUPPORT) { - this[offset] = (value & 0xff) - this[offset + 1] = (value >>> 8) - } else { - objectWriteUInt16(this, value, offset, true) - } - return offset + 2 -} + Validations.validateAddressObj = function (addressObject) { + var addressDecoder = (0, _jsonTypeValidation.object)({ + addressHash: (0, _jsonTypeValidation.string)(), + secIdentifier: (0, _jsonTypeValidation.optional)((0, _jsonTypeValidation.string)()) + }); -Buffer.prototype.writeUInt16BE = function writeUInt16BE (value, offset, noAssert) { - value = +value - offset = offset | 0 - if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0) - if (Buffer.TYPED_ARRAY_SUPPORT) { - this[offset] = (value >>> 8) - this[offset + 1] = (value & 0xff) - } else { - objectWriteUInt16(this, value, offset, false) - } - return offset + 2 -} + try { + addressDecoder.runWithException(addressObject); + } catch (e) { + throw _error.ErrorHelper.getPackageError(e, _error.PackageErrorCode.AddressMappingDecodingFailure); + } + }; -function objectWriteUInt32 (buf, value, offset, littleEndian) { - if (value < 0) value = 0xffffffff + value + 1 - for (var i = 0, j = Math.min(buf.length - offset, 4); i < j; ++i) { - buf[offset + i] = (value >>> (littleEndian ? i : 3 - i) * 8) & 0xff - } -} + Validations.validateAssetIdAddressMap = function (addressMap) { + for (var assetId in addressMap) { + if (addressMap.hasOwnProperty(assetId)) { + Validations.validateAssetId(assetId); + Validations.validateAddressObj(addressMap[assetId]); + } + } + }; -Buffer.prototype.writeUInt32LE = function writeUInt32LE (value, offset, noAssert) { - value = +value - offset = offset | 0 - if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0) - if (Buffer.TYPED_ARRAY_SUPPORT) { - this[offset + 3] = (value >>> 24) - this[offset + 2] = (value >>> 16) - this[offset + 1] = (value >>> 8) - this[offset] = (value & 0xff) - } else { - objectWriteUInt32(this, value, offset, true) - } - return offset + 4 -} + return Validations; +}(); -Buffer.prototype.writeUInt32BE = function writeUInt32BE (value, offset, noAssert) { - value = +value - offset = offset | 0 - if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0) - if (Buffer.TYPED_ARRAY_SUPPORT) { - this[offset] = (value >>> 24) - this[offset + 1] = (value >>> 16) - this[offset + 2] = (value >>> 8) - this[offset + 3] = (value & 0xff) - } else { - objectWriteUInt32(this, value, offset, false) - } - return offset + 4 -} +exports.Validations = Validations; +var CruxSpec = { + blockstack: (_a = + /** @class */ + function () { + function blockstack() {} + + return blockstack; + }(), _a.infrastructure = { + bnsNodes: _config.default.BLOCKSTACK.BNS_NODES, + gaiaHub: _config.default.BLOCKSTACK.GAIA_HUB, + subdomainRegistrar: _config.default.BLOCKSTACK.SUBDOMAIN_REGISTRAR + }, _a.configSubdomain = "_config", _a.getDomainConfigFileName = function (cruxDomainId) { + return cruxDomainId.components.domain + "_client-config.json"; + }, _a.getConfigCruxId = function (cruxDomainId) { + return new _identityUtils.CruxId({ + domain: cruxDomainId.components.domain, + subdomain: CruxSpec.blockstack.configSubdomain + }); + }, _a.getCruxPayFilename = function (cruxDomainId) { + return cruxDomainId.components.domain + "_cruxpay.json"; + }, _a), + globalAssetList: _globalAssetList.default, + idTranslator: _identityUtils.IdTranslator, + validations: Validations +}; +exports.CruxSpec = CruxSpec; +},{"@mojotech/json-type-validation":"jcIg","../../config":"C9JJ","../../packages/error":"yXIU","../../packages/identity-utils":"j93N","../global-asset-list.json":"vKJK"}],"nnXn":[function(require,module,exports) { +var define; +var global = arguments[3]; +/*! + * js-logger - http://github.com/jonnyreeves/js-logger + * Jonny Reeves, http://jonnyreeves.co.uk/ + * js-logger may be freely distributed under the MIT license. + */ +(function (global) { + "use strict"; + + // Top level module for the global, static logger instance. + var Logger = { }; + + // For those that are at home that are keeping score. + Logger.VERSION = "1.6.0"; + + // Function which handles all incoming log messages. + var logHandler; + + // Map of ContextualLogger instances by name; used by Logger.get() to return the same named instance. + var contextualLoggersByNameMap = {}; + + // Polyfill for ES5's Function.bind. + var bind = function(scope, func) { + return function() { + return func.apply(scope, arguments); + }; + }; + + // Super exciting object merger-matron 9000 adding another 100 bytes to your download. + var merge = function () { + var args = arguments, target = args[0], key, i; + for (i = 1; i < args.length; i++) { + for (key in args[i]) { + if (!(key in target) && args[i].hasOwnProperty(key)) { + target[key] = args[i][key]; + } + } + } + return target; + }; + + // Helper to define a logging level object; helps with optimisation. + var defineLogLevel = function(value, name) { + return { value: value, name: name }; + }; + + // Predefined logging levels. + Logger.TRACE = defineLogLevel(1, 'TRACE'); + Logger.DEBUG = defineLogLevel(2, 'DEBUG'); + Logger.INFO = defineLogLevel(3, 'INFO'); + Logger.TIME = defineLogLevel(4, 'TIME'); + Logger.WARN = defineLogLevel(5, 'WARN'); + Logger.ERROR = defineLogLevel(8, 'ERROR'); + Logger.OFF = defineLogLevel(99, 'OFF'); + + // Inner class which performs the bulk of the work; ContextualLogger instances can be configured independently + // of each other. + var ContextualLogger = function(defaultContext) { + this.context = defaultContext; + this.setLevel(defaultContext.filterLevel); + this.log = this.info; // Convenience alias. + }; + + ContextualLogger.prototype = { + // Changes the current logging level for the logging instance. + setLevel: function (newLevel) { + // Ensure the supplied Level object looks valid. + if (newLevel && "value" in newLevel) { + this.context.filterLevel = newLevel; + } + }, + + // Gets the current logging level for the logging instance + getLevel: function () { + return this.context.filterLevel; + }, + + // Is the logger configured to output messages at the supplied level? + enabledFor: function (lvl) { + var filterLevel = this.context.filterLevel; + return lvl.value >= filterLevel.value; + }, + + trace: function () { + this.invoke(Logger.TRACE, arguments); + }, + + debug: function () { + this.invoke(Logger.DEBUG, arguments); + }, + + info: function () { + this.invoke(Logger.INFO, arguments); + }, + + warn: function () { + this.invoke(Logger.WARN, arguments); + }, + + error: function () { + this.invoke(Logger.ERROR, arguments); + }, + + time: function (label) { + if (typeof label === 'string' && label.length > 0) { + this.invoke(Logger.TIME, [ label, 'start' ]); + } + }, + + timeEnd: function (label) { + if (typeof label === 'string' && label.length > 0) { + this.invoke(Logger.TIME, [ label, 'end' ]); + } + }, + + // Invokes the logger callback if it's not being filtered. + invoke: function (level, msgArgs) { + if (logHandler && this.enabledFor(level)) { + logHandler(msgArgs, merge({ level: level }, this.context)); + } + } + }; + + // Protected instance which all calls to the to level `Logger` module will be routed through. + var globalLogger = new ContextualLogger({ filterLevel: Logger.OFF }); + + // Configure the global Logger instance. + (function() { + // Shortcut for optimisers. + var L = Logger; + + L.enabledFor = bind(globalLogger, globalLogger.enabledFor); + L.trace = bind(globalLogger, globalLogger.trace); + L.debug = bind(globalLogger, globalLogger.debug); + L.time = bind(globalLogger, globalLogger.time); + L.timeEnd = bind(globalLogger, globalLogger.timeEnd); + L.info = bind(globalLogger, globalLogger.info); + L.warn = bind(globalLogger, globalLogger.warn); + L.error = bind(globalLogger, globalLogger.error); + + // Don't forget the convenience alias! + L.log = L.info; + }()); + + // Set the global logging handler. The supplied function should expect two arguments, the first being an arguments + // object with the supplied log messages and the second being a context object which contains a hash of stateful + // parameters which the logging function can consume. + Logger.setHandler = function (func) { + logHandler = func; + }; + + // Sets the global logging filter level which applies to *all* previously registered, and future Logger instances. + // (note that named loggers (retrieved via `Logger.get`) can be configured independently if required). + Logger.setLevel = function(level) { + // Set the globalLogger's level. + globalLogger.setLevel(level); + + // Apply this level to all registered contextual loggers. + for (var key in contextualLoggersByNameMap) { + if (contextualLoggersByNameMap.hasOwnProperty(key)) { + contextualLoggersByNameMap[key].setLevel(level); + } + } + }; + + // Gets the global logging filter level + Logger.getLevel = function() { + return globalLogger.getLevel(); + }; + + // Retrieve a ContextualLogger instance. Note that named loggers automatically inherit the global logger's level, + // default context and log handler. + Logger.get = function (name) { + // All logger instances are cached so they can be configured ahead of use. + return contextualLoggersByNameMap[name] || + (contextualLoggersByNameMap[name] = new ContextualLogger(merge({ name: name }, globalLogger.context))); + }; + + // CreateDefaultHandler returns a handler function which can be passed to `Logger.setHandler()` which will + // write to the window's console object (if present); the optional options object can be used to customise the + // formatter used to format each log message. + Logger.createDefaultHandler = function (options) { + options = options || {}; + + options.formatter = options.formatter || function defaultMessageFormatter(messages, context) { + // Prepend the logger's name to the log message for easy identification. + if (context.name) { + messages.unshift("[" + context.name + "]"); + } + }; + + // Map of timestamps by timer labels used to track `#time` and `#timeEnd()` invocations in environments + // that don't offer a native console method. + var timerStartTimeByLabelMap = {}; + + // Support for IE8+ (and other, slightly more sane environments) + var invokeConsoleMethod = function (hdlr, messages) { + Function.prototype.apply.call(hdlr, console, messages); + }; + + // Check for the presence of a logger. + if (typeof console === "undefined") { + return function () { /* no console */ }; + } + + return function(messages, context) { + // Convert arguments object to Array. + messages = Array.prototype.slice.call(messages); + + var hdlr = console.log; + var timerLabel; + + if (context.level === Logger.TIME) { + timerLabel = (context.name ? '[' + context.name + '] ' : '') + messages[0]; + + if (messages[1] === 'start') { + if (console.time) { + console.time(timerLabel); + } + else { + timerStartTimeByLabelMap[timerLabel] = new Date().getTime(); + } + } + else { + if (console.timeEnd) { + console.timeEnd(timerLabel); + } + else { + invokeConsoleMethod(hdlr, [ timerLabel + ': ' + + (new Date().getTime() - timerStartTimeByLabelMap[timerLabel]) + 'ms' ]); + } + } + } + else { + // Delegate through to custom warn/error loggers if present on the console. + if (context.level === Logger.WARN && console.warn) { + hdlr = console.warn; + } else if (context.level === Logger.ERROR && console.error) { + hdlr = console.error; + } else if (context.level === Logger.INFO && console.info) { + hdlr = console.info; + } else if (context.level === Logger.DEBUG && console.debug) { + hdlr = console.debug; + } else if (context.level === Logger.TRACE && console.trace) { + hdlr = console.trace; + } + + options.formatter(messages, context); + invokeConsoleMethod(hdlr, messages); + } + }; + }; + + // Configure and example a Default implementation which writes to the `window.console` (if present). The + // `options` hash can be used to configure the default logLevel and provide a custom message formatter. + Logger.useDefaults = function(options) { + Logger.setLevel(options && options.defaultLevel || Logger.DEBUG); + Logger.setHandler(Logger.createDefaultHandler(options)); + }; + + // Export to popular environments boilerplate. + if (typeof define === 'function' && define.amd) { + define(Logger); + } + else if (typeof module !== 'undefined' && module.exports) { + module.exports = Logger; + } + else { + Logger._prevLogger = global.Logger; + + Logger.noConflict = function () { + global.Logger = Logger._prevLogger; + return Logger; + }; + + global.Logger = Logger; + } +}(this)); -Buffer.prototype.writeIntLE = function writeIntLE (value, offset, byteLength, noAssert) { - value = +value - offset = offset | 0 - if (!noAssert) { - var limit = Math.pow(2, 8 * byteLength - 1) +},{}],"pBGv":[function(require,module,exports) { - checkInt(this, value, offset, byteLength, limit - 1, -limit) - } +// shim for using process in browser +var process = module.exports = {}; // cached from whatever global is present so that test runners that stub it +// don't break things. But we need to wrap it in a try catch in case it is +// wrapped in strict mode code which doesn't define any globals. It's inside a +// function because try/catches deoptimize in certain engines. - var i = 0 - var mul = 1 - var sub = 0 - this[offset] = value & 0xFF - while (++i < byteLength && (mul *= 0x100)) { - if (value < 0 && sub === 0 && this[offset + i - 1] !== 0) { - sub = 1 - } - this[offset + i] = ((value / mul) >> 0) - sub & 0xFF - } +var cachedSetTimeout; +var cachedClearTimeout; - return offset + byteLength +function defaultSetTimout() { + throw new Error('setTimeout has not been defined'); } -Buffer.prototype.writeIntBE = function writeIntBE (value, offset, byteLength, noAssert) { - value = +value - offset = offset | 0 - if (!noAssert) { - var limit = Math.pow(2, 8 * byteLength - 1) +function defaultClearTimeout() { + throw new Error('clearTimeout has not been defined'); +} - checkInt(this, value, offset, byteLength, limit - 1, -limit) +(function () { + try { + if (typeof setTimeout === 'function') { + cachedSetTimeout = setTimeout; + } else { + cachedSetTimeout = defaultSetTimout; + } + } catch (e) { + cachedSetTimeout = defaultSetTimout; } - var i = byteLength - 1 - var mul = 1 - var sub = 0 - this[offset + i] = value & 0xFF - while (--i >= 0 && (mul *= 0x100)) { - if (value < 0 && sub === 0 && this[offset + i + 1] !== 0) { - sub = 1 + try { + if (typeof clearTimeout === 'function') { + cachedClearTimeout = clearTimeout; + } else { + cachedClearTimeout = defaultClearTimeout; } - this[offset + i] = ((value / mul) >> 0) - sub & 0xFF + } catch (e) { + cachedClearTimeout = defaultClearTimeout; } +})(); - return offset + byteLength -} +function runTimeout(fun) { + if (cachedSetTimeout === setTimeout) { + //normal enviroments in sane situations + return setTimeout(fun, 0); + } // if setTimeout wasn't available but was latter defined -Buffer.prototype.writeInt8 = function writeInt8 (value, offset, noAssert) { - value = +value - offset = offset | 0 - if (!noAssert) checkInt(this, value, offset, 1, 0x7f, -0x80) - if (!Buffer.TYPED_ARRAY_SUPPORT) value = Math.floor(value) - if (value < 0) value = 0xff + value + 1 - this[offset] = (value & 0xff) - return offset + 1 -} - -Buffer.prototype.writeInt16LE = function writeInt16LE (value, offset, noAssert) { - value = +value - offset = offset | 0 - if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000) - if (Buffer.TYPED_ARRAY_SUPPORT) { - this[offset] = (value & 0xff) - this[offset + 1] = (value >>> 8) - } else { - objectWriteUInt16(this, value, offset, true) - } - return offset + 2 -} - -Buffer.prototype.writeInt16BE = function writeInt16BE (value, offset, noAssert) { - value = +value - offset = offset | 0 - if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000) - if (Buffer.TYPED_ARRAY_SUPPORT) { - this[offset] = (value >>> 8) - this[offset + 1] = (value & 0xff) - } else { - objectWriteUInt16(this, value, offset, false) - } - return offset + 2 -} - -Buffer.prototype.writeInt32LE = function writeInt32LE (value, offset, noAssert) { - value = +value - offset = offset | 0 - if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000) - if (Buffer.TYPED_ARRAY_SUPPORT) { - this[offset] = (value & 0xff) - this[offset + 1] = (value >>> 8) - this[offset + 2] = (value >>> 16) - this[offset + 3] = (value >>> 24) - } else { - objectWriteUInt32(this, value, offset, true) - } - return offset + 4 -} - -Buffer.prototype.writeInt32BE = function writeInt32BE (value, offset, noAssert) { - value = +value - offset = offset | 0 - if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000) - if (value < 0) value = 0xffffffff + value + 1 - if (Buffer.TYPED_ARRAY_SUPPORT) { - this[offset] = (value >>> 24) - this[offset + 1] = (value >>> 16) - this[offset + 2] = (value >>> 8) - this[offset + 3] = (value & 0xff) - } else { - objectWriteUInt32(this, value, offset, false) - } - return offset + 4 -} - -function checkIEEE754 (buf, value, offset, ext, max, min) { - if (offset + ext > buf.length) throw new RangeError('Index out of range') - if (offset < 0) throw new RangeError('Index out of range') -} -function writeFloat (buf, value, offset, littleEndian, noAssert) { - if (!noAssert) { - checkIEEE754(buf, value, offset, 4, 3.4028234663852886e+38, -3.4028234663852886e+38) + if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) { + cachedSetTimeout = setTimeout; + return setTimeout(fun, 0); } - ieee754.write(buf, value, offset, littleEndian, 23, 4) - return offset + 4 -} - -Buffer.prototype.writeFloatLE = function writeFloatLE (value, offset, noAssert) { - return writeFloat(this, value, offset, true, noAssert) -} - -Buffer.prototype.writeFloatBE = function writeFloatBE (value, offset, noAssert) { - return writeFloat(this, value, offset, false, noAssert) -} -function writeDouble (buf, value, offset, littleEndian, noAssert) { - if (!noAssert) { - checkIEEE754(buf, value, offset, 8, 1.7976931348623157E+308, -1.7976931348623157E+308) + try { + // when when somebody has screwed with setTimeout but no I.E. maddness + return cachedSetTimeout(fun, 0); + } catch (e) { + try { + // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally + return cachedSetTimeout.call(null, fun, 0); + } catch (e) { + // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error + return cachedSetTimeout.call(this, fun, 0); + } } - ieee754.write(buf, value, offset, littleEndian, 52, 8) - return offset + 8 -} - -Buffer.prototype.writeDoubleLE = function writeDoubleLE (value, offset, noAssert) { - return writeDouble(this, value, offset, true, noAssert) -} - -Buffer.prototype.writeDoubleBE = function writeDoubleBE (value, offset, noAssert) { - return writeDouble(this, value, offset, false, noAssert) } -// copy(targetBuffer, targetStart=0, sourceStart=0, sourceEnd=buffer.length) -Buffer.prototype.copy = function copy (target, targetStart, start, end) { - if (!start) start = 0 - if (!end && end !== 0) end = this.length - if (targetStart >= target.length) targetStart = target.length - if (!targetStart) targetStart = 0 - if (end > 0 && end < start) end = start - - // Copy 0 bytes; we're done - if (end === start) return 0 - if (target.length === 0 || this.length === 0) return 0 +function runClearTimeout(marker) { + if (cachedClearTimeout === clearTimeout) { + //normal enviroments in sane situations + return clearTimeout(marker); + } // if clearTimeout wasn't available but was latter defined - // Fatal error conditions - if (targetStart < 0) { - throw new RangeError('targetStart out of bounds') - } - if (start < 0 || start >= this.length) throw new RangeError('sourceStart out of bounds') - if (end < 0) throw new RangeError('sourceEnd out of bounds') - // Are we oob? - if (end > this.length) end = this.length - if (target.length - targetStart < end - start) { - end = target.length - targetStart + start + if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) { + cachedClearTimeout = clearTimeout; + return clearTimeout(marker); } - var len = end - start - var i - - if (this === target && start < targetStart && targetStart < end) { - // descending copy from end - for (i = len - 1; i >= 0; --i) { - target[i + targetStart] = this[i + start] - } - } else if (len < 1000 || !Buffer.TYPED_ARRAY_SUPPORT) { - // ascending copy from start - for (i = 0; i < len; ++i) { - target[i + targetStart] = this[i + start] + try { + // when when somebody has screwed with setTimeout but no I.E. maddness + return cachedClearTimeout(marker); + } catch (e) { + try { + // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally + return cachedClearTimeout.call(null, marker); + } catch (e) { + // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error. + // Some versions of I.E. have different rules for clearTimeout vs setTimeout + return cachedClearTimeout.call(this, marker); } - } else { - Uint8Array.prototype.set.call( - target, - this.subarray(start, start + len), - targetStart - ) } - - return len } -// Usage: -// buffer.fill(number[, offset[, end]]) -// buffer.fill(buffer[, offset[, end]]) -// buffer.fill(string[, offset[, end]][, encoding]) -Buffer.prototype.fill = function fill (val, start, end, encoding) { - // Handle string cases: - if (typeof val === 'string') { - if (typeof start === 'string') { - encoding = start - start = 0 - end = this.length - } else if (typeof end === 'string') { - encoding = end - end = this.length - } - if (val.length === 1) { - var code = val.charCodeAt(0) - if (code < 256) { - val = code - } - } - if (encoding !== undefined && typeof encoding !== 'string') { - throw new TypeError('encoding must be a string') - } - if (typeof encoding === 'string' && !Buffer.isEncoding(encoding)) { - throw new TypeError('Unknown encoding: ' + encoding) - } - } else if (typeof val === 'number') { - val = val & 255 - } - - // Invalid ranges are not set to a default, so can range check early. - if (start < 0 || this.length < start || this.length < end) { - throw new RangeError('Out of range index') - } +var queue = []; +var draining = false; +var currentQueue; +var queueIndex = -1; - if (end <= start) { - return this +function cleanUpNextTick() { + if (!draining || !currentQueue) { + return; } - start = start >>> 0 - end = end === undefined ? this.length : end >>> 0 - - if (!val) val = 0 + draining = false; - var i - if (typeof val === 'number') { - for (i = start; i < end; ++i) { - this[i] = val - } + if (currentQueue.length) { + queue = currentQueue.concat(queue); } else { - var bytes = Buffer.isBuffer(val) - ? val - : utf8ToBytes(new Buffer(val, encoding).toString()) - var len = bytes.length - for (i = 0; i < end - start; ++i) { - this[i + start] = bytes[i % len] - } + queueIndex = -1; } - return this -} - -// HELPER FUNCTIONS -// ================ - -var INVALID_BASE64_RE = /[^+\/0-9A-Za-z-_]/g - -function base64clean (str) { - // Node strips out invalid characters like \n and \t from the string, base64-js does not - str = stringtrim(str).replace(INVALID_BASE64_RE, '') - // Node converts strings with length < 2 to '' - if (str.length < 2) return '' - // Node allows for non-padded base64 strings (missing trailing ===), base64-js does not - while (str.length % 4 !== 0) { - str = str + '=' + if (queue.length) { + drainQueue(); } - return str -} - -function stringtrim (str) { - if (str.trim) return str.trim() - return str.replace(/^\s+|\s+$/g, '') -} - -function toHex (n) { - if (n < 16) return '0' + n.toString(16) - return n.toString(16) } -function utf8ToBytes (string, units) { - units = units || Infinity - var codePoint - var length = string.length - var leadSurrogate = null - var bytes = [] - - for (var i = 0; i < length; ++i) { - codePoint = string.charCodeAt(i) - - // is surrogate component - if (codePoint > 0xD7FF && codePoint < 0xE000) { - // last char was a lead - if (!leadSurrogate) { - // no lead yet - if (codePoint > 0xDBFF) { - // unexpected trail - if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD) - continue - } else if (i + 1 === length) { - // unpaired lead - if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD) - continue - } +function drainQueue() { + if (draining) { + return; + } - // valid lead - leadSurrogate = codePoint + var timeout = runTimeout(cleanUpNextTick); + draining = true; + var len = queue.length; - continue - } + while (len) { + currentQueue = queue; + queue = []; - // 2 leads in a row - if (codePoint < 0xDC00) { - if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD) - leadSurrogate = codePoint - continue + while (++queueIndex < len) { + if (currentQueue) { + currentQueue[queueIndex].run(); } - - // valid surrogate pair - codePoint = (leadSurrogate - 0xD800 << 10 | codePoint - 0xDC00) + 0x10000 - } else if (leadSurrogate) { - // valid bmp char, but last char was a lead - if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD) } - leadSurrogate = null - - // encode utf8 - if (codePoint < 0x80) { - if ((units -= 1) < 0) break - bytes.push(codePoint) - } else if (codePoint < 0x800) { - if ((units -= 2) < 0) break - bytes.push( - codePoint >> 0x6 | 0xC0, - codePoint & 0x3F | 0x80 - ) - } else if (codePoint < 0x10000) { - if ((units -= 3) < 0) break - bytes.push( - codePoint >> 0xC | 0xE0, - codePoint >> 0x6 & 0x3F | 0x80, - codePoint & 0x3F | 0x80 - ) - } else if (codePoint < 0x110000) { - if ((units -= 4) < 0) break - bytes.push( - codePoint >> 0x12 | 0xF0, - codePoint >> 0xC & 0x3F | 0x80, - codePoint >> 0x6 & 0x3F | 0x80, - codePoint & 0x3F | 0x80 - ) - } else { - throw new Error('Invalid code point') - } + queueIndex = -1; + len = queue.length; } - return bytes -} - -function asciiToBytes (str) { - var byteArray = [] - for (var i = 0; i < str.length; ++i) { - // Node's code seems to be doing this and not & 0x7F.. - byteArray.push(str.charCodeAt(i) & 0xFF) - } - return byteArray + currentQueue = null; + draining = false; + runClearTimeout(timeout); } -function utf16leToBytes (str, units) { - var c, hi, lo - var byteArray = [] - for (var i = 0; i < str.length; ++i) { - if ((units -= 2) < 0) break +process.nextTick = function (fun) { + var args = new Array(arguments.length - 1); - c = str.charCodeAt(i) - hi = c >> 8 - lo = c % 256 - byteArray.push(lo) - byteArray.push(hi) + if (arguments.length > 1) { + for (var i = 1; i < arguments.length; i++) { + args[i - 1] = arguments[i]; + } } - return byteArray -} - -function base64ToBytes (str) { - return base64.toByteArray(base64clean(str)) -} + queue.push(new Item(fun, args)); -function blitBuffer (src, dst, offset, length) { - for (var i = 0; i < length; ++i) { - if ((i + offset >= dst.length) || (i >= src.length)) break - dst[i + offset] = src[i] + if (queue.length === 1 && !draining) { + runTimeout(drainQueue); } - return i -} +}; // v8 likes predictible objects -function isnan (val) { - return val !== val // eslint-disable-line no-self-compare + +function Item(fun, array) { + this.fun = fun; + this.array = array; } -},{"base64-js":"yh9p","ieee754":"JgNJ","isarray":"REa7","buffer":"dskh"}],"Wugr":[function(require,module,exports) { +Item.prototype.run = function () { + this.fun.apply(null, this.array); +}; -/* eslint-disable node/no-deprecated-api */ -var buffer = require('buffer') -var Buffer = buffer.Buffer +process.title = 'browser'; +process.env = {}; +process.argv = []; +process.version = ''; // empty string to avoid regexp issues -// alternative to using Object.keys for old browsers -function copyProps (src, dst) { - for (var key in src) { - dst[key] = src[key] - } -} -if (Buffer.from && Buffer.alloc && Buffer.allocUnsafe && Buffer.allocUnsafeSlow) { - module.exports = buffer -} else { - // Copy properties from require('buffer') - copyProps(buffer, exports) - exports.Buffer = SafeBuffer -} +process.versions = {}; -function SafeBuffer (arg, encodingOrOffset, length) { - return Buffer(arg, encodingOrOffset, length) -} +function noop() {} -SafeBuffer.prototype = Object.create(Buffer.prototype) +process.on = noop; +process.addListener = noop; +process.once = noop; +process.off = noop; +process.removeListener = noop; +process.removeAllListeners = noop; +process.emit = noop; +process.prependListener = noop; +process.prependOnceListener = noop; -// Copy static methods from Buffer -copyProps(Buffer, SafeBuffer) +process.listeners = function (name) { + return []; +}; -SafeBuffer.from = function (arg, encodingOrOffset, length) { - if (typeof arg === 'number') { - throw new TypeError('Argument must not be a number') - } - return Buffer(arg, encodingOrOffset, length) -} +process.binding = function (name) { + throw new Error('process.binding is not supported'); +}; -SafeBuffer.alloc = function (size, fill, encoding) { - if (typeof size !== 'number') { - throw new TypeError('Argument must be a number') - } - var buf = Buffer(size) - if (fill !== undefined) { - if (typeof encoding === 'string') { - buf.fill(fill, encoding) - } else { - buf.fill(fill) - } - } else { - buf.fill(0) - } - return buf -} +process.cwd = function () { + return '/'; +}; -SafeBuffer.allocUnsafe = function (size) { - if (typeof size !== 'number') { - throw new TypeError('Argument must be a number') - } - return Buffer(size) -} +process.chdir = function (dir) { + throw new Error('process.chdir is not supported'); +}; -SafeBuffer.allocUnsafeSlow = function (size) { - if (typeof size !== 'number') { - throw new TypeError('Argument must be a number') - } - return buffer.SlowBuffer(size) -} +process.umask = function () { + return 0; +}; +},{}],"UUq2":[function(require,module,exports) { +var process = require("process"); +// .dirname, .basename, and .extname methods are extracted from Node.js v8.11.1, +// backported and transplited with Babel, with backwards-compat fixes -},{"buffer":"dskh"}],"FRpO":[function(require,module,exports) { // Copyright Joyent, Inc. and other Node contributors. // // Permission is hereby granted, free of charge, to any person obtaining a @@ -5078,101507 +7092,80213 @@ SafeBuffer.allocUnsafeSlow = function (size) { // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE // USE OR OTHER DEALINGS IN THE SOFTWARE. -'use strict'; -var R = typeof Reflect === 'object' ? Reflect : null; -var ReflectApply = R && typeof R.apply === 'function' ? R.apply : function ReflectApply(target, receiver, args) { - return Function.prototype.apply.call(target, receiver, args); -}; -var ReflectOwnKeys; +// resolves . and .. elements in a path array with directory names there +// must be no slashes, empty elements, or device names (c:\) in the array +// (so also no leading and trailing slashes - it does not distinguish +// relative and absolute paths) +function normalizeArray(parts, allowAboveRoot) { + // if the path tries to go above the root, `up` ends up > 0 + var up = 0; + for (var i = parts.length - 1; i >= 0; i--) { + var last = parts[i]; + if (last === '.') { + parts.splice(i, 1); + } else if (last === '..') { + parts.splice(i, 1); + up++; + } else if (up) { + parts.splice(i, 1); + up--; + } + } -if (R && typeof R.ownKeys === 'function') { - ReflectOwnKeys = R.ownKeys; -} else if (Object.getOwnPropertySymbols) { - ReflectOwnKeys = function ReflectOwnKeys(target) { - return Object.getOwnPropertyNames(target).concat(Object.getOwnPropertySymbols(target)); - }; -} else { - ReflectOwnKeys = function ReflectOwnKeys(target) { - return Object.getOwnPropertyNames(target); - }; -} - -function ProcessEmitWarning(warning) { - if (console && console.warn) console.warn(warning); -} - -var NumberIsNaN = Number.isNaN || function NumberIsNaN(value) { - return value !== value; -}; + // if the path is allowed to go above the root, restore leading ..s + if (allowAboveRoot) { + for (; up--; up) { + parts.unshift('..'); + } + } -function EventEmitter() { - EventEmitter.init.call(this); + return parts; } -module.exports = EventEmitter; // Backwards-compat with node 0.10.x +// path.resolve([from ...], to) +// posix version +exports.resolve = function() { + var resolvedPath = '', + resolvedAbsolute = false; -EventEmitter.EventEmitter = EventEmitter; -EventEmitter.prototype._events = undefined; -EventEmitter.prototype._eventsCount = 0; -EventEmitter.prototype._maxListeners = undefined; // By default EventEmitters will print a warning if more than 10 listeners are -// added to it. This is a useful default which helps finding memory leaks. + for (var i = arguments.length - 1; i >= -1 && !resolvedAbsolute; i--) { + var path = (i >= 0) ? arguments[i] : process.cwd(); -var defaultMaxListeners = 10; -Object.defineProperty(EventEmitter, 'defaultMaxListeners', { - enumerable: true, - get: function () { - return defaultMaxListeners; - }, - set: function (arg) { - if (typeof arg !== 'number' || arg < 0 || NumberIsNaN(arg)) { - throw new RangeError('The value of "defaultMaxListeners" is out of range. It must be a non-negative number. Received ' + arg + '.'); + // Skip empty and invalid entries + if (typeof path !== 'string') { + throw new TypeError('Arguments to path.resolve must be strings'); + } else if (!path) { + continue; } - defaultMaxListeners = arg; + resolvedPath = path + '/' + resolvedPath; + resolvedAbsolute = path.charAt(0) === '/'; } -}); -EventEmitter.init = function () { - if (this._events === undefined || this._events === Object.getPrototypeOf(this)._events) { - this._events = Object.create(null); - this._eventsCount = 0; - } + // At this point the path should be resolved to a full absolute path, but + // handle relative paths to be safe (might happen when process.cwd() fails) - this._maxListeners = this._maxListeners || undefined; -}; // Obviously not all Emitters should be limited to 10. This function allows -// that to be increased. Set to zero for unlimited. + // Normalize the path + resolvedPath = normalizeArray(filter(resolvedPath.split('/'), function(p) { + return !!p; + }), !resolvedAbsolute).join('/'); + return ((resolvedAbsolute ? '/' : '') + resolvedPath) || '.'; +}; -EventEmitter.prototype.setMaxListeners = function setMaxListeners(n) { - if (typeof n !== 'number' || n < 0 || NumberIsNaN(n)) { - throw new RangeError('The value of "n" is out of range. It must be a non-negative number. Received ' + n + '.'); - } +// path.normalize(path) +// posix version +exports.normalize = function(path) { + var isAbsolute = exports.isAbsolute(path), + trailingSlash = substr(path, -1) === '/'; - this._maxListeners = n; - return this; -}; + // Normalize the path + path = normalizeArray(filter(path.split('/'), function(p) { + return !!p; + }), !isAbsolute).join('/'); -function $getMaxListeners(that) { - if (that._maxListeners === undefined) return EventEmitter.defaultMaxListeners; - return that._maxListeners; -} + if (!path && !isAbsolute) { + path = '.'; + } + if (path && trailingSlash) { + path += '/'; + } -EventEmitter.prototype.getMaxListeners = function getMaxListeners() { - return $getMaxListeners(this); + return (isAbsolute ? '/' : '') + path; }; -EventEmitter.prototype.emit = function emit(type) { - var args = []; +// posix version +exports.isAbsolute = function(path) { + return path.charAt(0) === '/'; +}; - for (var i = 1; i < arguments.length; i++) args.push(arguments[i]); +// posix version +exports.join = function() { + var paths = Array.prototype.slice.call(arguments, 0); + return exports.normalize(filter(paths, function(p, index) { + if (typeof p !== 'string') { + throw new TypeError('Arguments to path.join must be strings'); + } + return p; + }).join('/')); +}; - var doError = type === 'error'; - var events = this._events; - if (events !== undefined) doError = doError && events.error === undefined;else if (!doError) return false; // If there is no 'error' event listener then throw. - if (doError) { - var er; - if (args.length > 0) er = args[0]; +// path.relative(from, to) +// posix version +exports.relative = function(from, to) { + from = exports.resolve(from).substr(1); + to = exports.resolve(to).substr(1); - if (er instanceof Error) { - // Note: The comments on the `throw` lines are intentional, they show - // up in Node's output if this results in an unhandled exception. - throw er; // Unhandled 'error' event - } // At least give some kind of context to the user + function trim(arr) { + var start = 0; + for (; start < arr.length; start++) { + if (arr[start] !== '') break; + } + var end = arr.length - 1; + for (; end >= 0; end--) { + if (arr[end] !== '') break; + } - var err = new Error('Unhandled error.' + (er ? ' (' + er.message + ')' : '')); - err.context = er; - throw err; // Unhandled 'error' event + if (start > end) return []; + return arr.slice(start, end - start + 1); } - var handler = events[type]; - if (handler === undefined) return false; + var fromParts = trim(from.split('/')); + var toParts = trim(to.split('/')); - if (typeof handler === 'function') { - ReflectApply(handler, this, args); - } else { - var len = handler.length; - var listeners = arrayClone(handler, len); + var length = Math.min(fromParts.length, toParts.length); + var samePartsLength = length; + for (var i = 0; i < length; i++) { + if (fromParts[i] !== toParts[i]) { + samePartsLength = i; + break; + } + } - for (var i = 0; i < len; ++i) ReflectApply(listeners[i], this, args); + var outputParts = []; + for (var i = samePartsLength; i < fromParts.length; i++) { + outputParts.push('..'); } - return true; + outputParts = outputParts.concat(toParts.slice(samePartsLength)); + + return outputParts.join('/'); }; -function _addListener(target, type, listener, prepend) { - var m; - var events; - var existing; +exports.sep = '/'; +exports.delimiter = ':'; - if (typeof listener !== 'function') { - throw new TypeError('The "listener" argument must be of type Function. Received type ' + typeof listener); +exports.dirname = function (path) { + if (typeof path !== 'string') path = path + ''; + if (path.length === 0) return '.'; + var code = path.charCodeAt(0); + var hasRoot = code === 47 /*/*/; + var end = -1; + var matchedSlash = true; + for (var i = path.length - 1; i >= 1; --i) { + code = path.charCodeAt(i); + if (code === 47 /*/*/) { + if (!matchedSlash) { + end = i; + break; + } + } else { + // We saw the first non-path separator + matchedSlash = false; + } } - events = target._events; + if (end === -1) return hasRoot ? '/' : '.'; + if (hasRoot && end === 1) { + // return '//'; + // Backwards-compat fix: + return '/'; + } + return path.slice(0, end); +}; - if (events === undefined) { - events = target._events = Object.create(null); - target._eventsCount = 0; - } else { - // To avoid recursion in the case that type === "newListener"! Before - // adding it to the listeners, first emit "newListener". - if (events.newListener !== undefined) { - target.emit('newListener', type, listener.listener ? listener.listener : listener); // Re-assign `events` because a newListener handler could have caused the - // this._events to be assigned to a new object +function basename(path) { + if (typeof path !== 'string') path = path + ''; - events = target._events; - } + var start = 0; + var end = -1; + var matchedSlash = true; + var i; - existing = events[type]; + for (i = path.length - 1; i >= 0; --i) { + if (path.charCodeAt(i) === 47 /*/*/) { + // If we reached a path separator that was not part of a set of path + // separators at the end of the string, stop now + if (!matchedSlash) { + start = i + 1; + break; + } + } else if (end === -1) { + // We saw the first non-path separator, mark this as the end of our + // path component + matchedSlash = false; + end = i + 1; + } } - if (existing === undefined) { - // Optimize the case of one listener. Don't need the extra array object. - existing = events[type] = listener; - ++target._eventsCount; - } else { - if (typeof existing === 'function') { - // Adding the second element, need to change to array. - existing = events[type] = prepend ? [listener, existing] : [existing, listener]; // If we've already got an array, just append. - } else if (prepend) { - existing.unshift(listener); - } else { - existing.push(listener); - } // Check for listener leak - - - m = $getMaxListeners(target); + if (end === -1) return ''; + return path.slice(start, end); +} - if (m > 0 && existing.length > m && !existing.warned) { - existing.warned = true; // No error code for this since it is a Warning - // eslint-disable-next-line no-restricted-syntax +// Uses a mixed approach for backwards-compatibility, as ext behavior changed +// in new Node.js versions, so only basename() above is backported here +exports.basename = function (path, ext) { + var f = basename(path); + if (ext && f.substr(-1 * ext.length) === ext) { + f = f.substr(0, f.length - ext.length); + } + return f; +}; - var w = new Error('Possible EventEmitter memory leak detected. ' + existing.length + ' ' + String(type) + ' listeners ' + 'added. Use emitter.setMaxListeners() to ' + 'increase limit'); - w.name = 'MaxListenersExceededWarning'; - w.emitter = target; - w.type = type; - w.count = existing.length; - ProcessEmitWarning(w); +exports.extname = function (path) { + if (typeof path !== 'string') path = path + ''; + var startDot = -1; + var startPart = 0; + var end = -1; + var matchedSlash = true; + // Track the state of characters (if any) we see before our first dot and + // after any path separator we find + var preDotState = 0; + for (var i = path.length - 1; i >= 0; --i) { + var code = path.charCodeAt(i); + if (code === 47 /*/*/) { + // If we reached a path separator that was not part of a set of path + // separators at the end of the string, stop now + if (!matchedSlash) { + startPart = i + 1; + break; + } + continue; + } + if (end === -1) { + // We saw the first non-path separator, mark this as the end of our + // extension + matchedSlash = false; + end = i + 1; + } + if (code === 46 /*.*/) { + // If this is our first dot, mark it as the start of our extension + if (startDot === -1) + startDot = i; + else if (preDotState !== 1) + preDotState = 1; + } else if (startDot !== -1) { + // We saw a non-dot and non-path separator before our dot, so we should + // have a good chance at having a non-empty extension + preDotState = -1; } } - return target; + if (startDot === -1 || end === -1 || + // We saw a non-dot character immediately before the dot + preDotState === 0 || + // The (right-most) trimmed path component is exactly '..' + preDotState === 1 && startDot === end - 1 && startDot === startPart + 1) { + return ''; + } + return path.slice(startDot, end); +}; + +function filter (xs, f) { + if (xs.filter) return xs.filter(f); + var res = []; + for (var i = 0; i < xs.length; i++) { + if (f(xs[i], i, xs)) res.push(xs[i]); + } + return res; } -EventEmitter.prototype.addListener = function addListener(type, listener) { - return _addListener(this, type, listener, false); -}; +// String.prototype.substr - negative index don't work in IE8 +var substr = 'ab'.substr(-1) === 'b' + ? function (str, start, len) { return str.substr(start, len) } + : function (str, start, len) { + if (start < 0) start = str.length + start; + return str.substr(start, len); + } +; -EventEmitter.prototype.on = EventEmitter.prototype.addListener; +},{"process":"pBGv"}],"eThb":[function(require,module,exports) { +"use strict"; -EventEmitter.prototype.prependListener = function prependListener(type, listener) { - return _addListener(this, type, listener, true); -}; +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.getLogger = getLogger; -function onceWrapper() { - var args = []; +var _jsLogger = _interopRequireDefault(require("js-logger")); - for (var i = 0; i < arguments.length; i++) args.push(arguments[i]); +var _path = _interopRequireDefault(require("path")); - if (!this.fired) { - this.target.removeListener(this.type, this.wrapFn); - this.fired = true; - ReflectApply(this.listener, this.target, args); - } -} +var _config = _interopRequireDefault(require("../config")); -function _onceWrap(target, type, listener) { - var state = { - fired: false, - wrapFn: undefined, - target: target, - type: type, - listener: listener - }; - var wrapped = onceWrapper.bind(state); - wrapped.listener = listener; - state.wrapFn = wrapped; - return wrapped; +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +// Setup logging configuration +_jsLogger.default.useDefaults(); + +_jsLogger.default.setLevel(_config.default.LOGGING_LEVEL === "DEBUG" ? _jsLogger.default.DEBUG : _jsLogger.default.INFO); + +function getLogger(filename) { + return _jsLogger.default.get("CruxPay: " + filename.slice(filename.lastIndexOf(_path.default.sep) + 1, filename.length - 3)); } +},{"js-logger":"nnXn","path":"UUq2","../config":"C9JJ"}],"prrt":[function(require,module,exports) { +var __filename = "/Users/Sanchay/Work/js-sdk/src/application/services/crux-asset-translator.ts"; +"use strict"; -EventEmitter.prototype.once = function once(type, listener) { - if (typeof listener !== 'function') { - throw new TypeError('The "listener" argument must be of type Function. Received type ' + typeof listener); - } +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.CruxAssetTranslator = void 0; - this.on(type, _onceWrap(this, type, listener)); - return this; -}; +var _cruxSpec = require("../../core/entities/crux-spec"); -EventEmitter.prototype.prependOnceListener = function prependOnceListener(type, listener) { - if (typeof listener !== 'function') { - throw new TypeError('The "listener" argument must be of type Function. Received type ' + typeof listener); - } +var _error = require("../../packages/error"); - this.prependListener(type, _onceWrap(this, type, listener)); - return this; -}; // Emits a 'removeListener' event if and only if the listener was removed. +var _logger = require("../../packages/logger"); +var __values = void 0 && (void 0).__values || function (o) { + var s = typeof Symbol === "function" && Symbol.iterator, + m = s && o[s], + i = 0; + if (m) return m.call(o); + if (o && typeof o.length === "number") return { + next: function next() { + if (o && i >= o.length) o = void 0; + return { + value: o && o[i++], + done: !o + }; + } + }; + throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined."); +}; -EventEmitter.prototype.removeListener = function removeListener(type, listener) { - var list, events, position, i, originalListener; +var log = (0, _logger.getLogger)(__filename); - if (typeof listener !== 'function') { - throw new TypeError('The "listener" argument must be of type Function. Received type ' + typeof listener); - } +var CruxAssetTranslator = +/** @class */ +function () { + function CruxAssetTranslator(assetMapping, assetList) { + var e_1, _a; - events = this._events; - if (events === undefined) return this; - list = events[type]; - if (list === undefined) return this; + _cruxSpec.Validations.validateAssetMapping(assetMapping, assetList); - if (list === listener || list.listener === listener) { - if (--this._eventsCount === 0) this._events = Object.create(null);else { - delete events[type]; - if (events.removeListener) this.emit('removeListener', type, list.listener || listener); - } - } else if (typeof list !== 'function') { - position = -1; + this.assetMap = this.getLowerAssetMapping(assetMapping); + this.reverseAssetMap = {}; - for (i = list.length - 1; i >= 0; i--) { - if (list[i] === listener || list[i].listener === listener) { - originalListener = list[i].listener; - position = i; - break; + try { + for (var _b = __values(Object.keys(this.assetMap)), _c = _b.next(); !_c.done; _c = _b.next()) { + var walletCurrencySymbol = _c.value; + this.reverseAssetMap[this.assetMap[walletCurrencySymbol]] = walletCurrencySymbol; + } + } catch (e_1_1) { + e_1 = { + error: e_1_1 + }; + } finally { + try { + if (_c && !_c.done && (_a = _b.return)) _a.call(_b); + } finally { + if (e_1) throw e_1.error; } } - - if (position < 0) return this; - if (position === 0) list.shift();else { - spliceOne(list, position); - } - if (list.length === 1) events[type] = list[0]; - if (events.removeListener !== undefined) this.emit('removeListener', type, originalListener || listener); } - return this; -}; + Object.defineProperty(CruxAssetTranslator.prototype, "assetMapping", { + get: function get() { + return this.assetMap; + }, + enumerable: true, + configurable: true + }); -EventEmitter.prototype.off = EventEmitter.prototype.removeListener; + CruxAssetTranslator.prototype.symbolToAssetId = function (currencySymbol) { + currencySymbol = currencySymbol.toLowerCase(); + return this.assetMap[currencySymbol]; + }; -EventEmitter.prototype.removeAllListeners = function removeAllListeners(type) { - var listeners, events, i; - events = this._events; - if (events === undefined) return this; // not listening for removeListener, no need to emit + CruxAssetTranslator.prototype.assetIdToSymbol = function (assetId) { + return this.reverseAssetMap[assetId]; + }; - if (events.removeListener === undefined) { - if (arguments.length === 0) { - this._events = Object.create(null); - this._eventsCount = 0; - } else if (events[type] !== undefined) { - if (--this._eventsCount === 0) this._events = Object.create(null);else delete events[type]; - } + CruxAssetTranslator.prototype.assetIdAssetListToSymbolAssetMap = function (assetIdAssetList) { + var _this = this; - return this; - } // emit removeListener for all listeners on all events + var symbolAssetMap = {}; + assetIdAssetList.forEach(function (asset) { + symbolAssetMap[_this.assetIdToSymbol(asset.assetId)] = asset; + }); + return symbolAssetMap; + }; // TODO: What should we be returning when calling below two methods? - if (arguments.length === 0) { - var keys = Object.keys(events); - var key; + CruxAssetTranslator.prototype.assetIdAddressMapToSymbolAddressMap = function (userAssetIdToAddressMap) { + var e_2, _a; - for (i = 0; i < keys.length; ++i) { - key = keys[i]; - if (key === 'removeListener') continue; - this.removeAllListeners(key); + var currencyAddressMap = {}; + + try { + for (var _b = __values(Object.keys(userAssetIdToAddressMap)), _c = _b.next(); !_c.done; _c = _b.next()) { + var assetId = _c.value; + currencyAddressMap[this.assetIdToSymbol(assetId)] = userAssetIdToAddressMap[assetId]; + } + } catch (e_2_1) { + e_2 = { + error: e_2_1 + }; + } finally { + try { + if (_c && !_c.done && (_a = _b.return)) _a.call(_b); + } finally { + if (e_2) throw e_2.error; + } } - this.removeAllListeners('removeListener'); - this._events = Object.create(null); - this._eventsCount = 0; - return this; - } + return currencyAddressMap; + }; - listeners = events[type]; + CruxAssetTranslator.prototype.symbolAddressMapToAssetIdAddressMap = function (currencyAddressMap) { + var e_3, _a; - if (typeof listeners === 'function') { - this.removeListener(type, listeners); - } else if (listeners !== undefined) { - // LIFO order - for (i = listeners.length - 1; i >= 0; i--) { - this.removeListener(type, listeners[i]); - } - } - - return this; -}; - -function _listeners(target, type, unwrap) { - var events = target._events; - if (events === undefined) return []; - var evlistener = events[type]; - if (evlistener === undefined) return []; - if (typeof evlistener === 'function') return unwrap ? [evlistener.listener || evlistener] : [evlistener]; - return unwrap ? unwrapListeners(evlistener) : arrayClone(evlistener, evlistener.length); -} - -EventEmitter.prototype.listeners = function listeners(type) { - return _listeners(this, type, true); -}; - -EventEmitter.prototype.rawListeners = function rawListeners(type) { - return _listeners(this, type, false); -}; + var lowerCurrencyAddressMap = {}; + var assetAddressMap = {}; + var success = {}; + var failures = {}; -EventEmitter.listenerCount = function (emitter, type) { - if (typeof emitter.listenerCount === 'function') { - return emitter.listenerCount(type); - } else { - return listenerCount.call(emitter, type); - } -}; + try { + for (var _b = __values(Object.keys(currencyAddressMap)), _c = _b.next(); !_c.done; _c = _b.next()) { + var walletCurrencySymbol = _c.value; + lowerCurrencyAddressMap[walletCurrencySymbol.toLowerCase()] = currencyAddressMap[walletCurrencySymbol]; + walletCurrencySymbol = walletCurrencySymbol.toLowerCase(); + var assetId = this.symbolToAssetId(walletCurrencySymbol); + + if (assetId) { + assetAddressMap[assetId] = lowerCurrencyAddressMap[walletCurrencySymbol]; + success[walletCurrencySymbol] = lowerCurrencyAddressMap[walletCurrencySymbol]; + } else { + failures[walletCurrencySymbol] = _error.PackageErrorCode.CurrencyDoesNotExistInClientMapping + ": " + _error.ERROR_STRINGS[_error.PackageErrorCode.CurrencyDoesNotExistInClientMapping]; + } + } + } catch (e_3_1) { + e_3 = { + error: e_3_1 + }; + } finally { + try { + if (_c && !_c.done && (_a = _b.return)) _a.call(_b); + } finally { + if (e_3) throw e_3.error; + } + } -EventEmitter.prototype.listenerCount = listenerCount; + return { + assetAddressMap: assetAddressMap, + failures: failures, + success: success + }; + }; -function listenerCount(type) { - var events = this._events; + CruxAssetTranslator.prototype.getLowerAssetMapping = function (assetMapping) { + var e_4, _a; - if (events !== undefined) { - var evlistener = events[type]; + var lowerAssetMapping = {}; - if (typeof evlistener === 'function') { - return 1; - } else if (evlistener !== undefined) { - return evlistener.length; + try { + for (var _b = __values(Object.keys(assetMapping)), _c = _b.next(); !_c.done; _c = _b.next()) { + var currencySymbol = _c.value; + lowerAssetMapping[currencySymbol.toLowerCase()] = assetMapping[currencySymbol]; + } + } catch (e_4_1) { + e_4 = { + error: e_4_1 + }; + } finally { + try { + if (_c && !_c.done && (_a = _b.return)) _a.call(_b); + } finally { + if (e_4) throw e_4.error; + } } - } - - return 0; -} - -EventEmitter.prototype.eventNames = function eventNames() { - return this._eventsCount > 0 ? ReflectOwnKeys(this._events) : []; -}; -function arrayClone(arr, n) { - var copy = new Array(n); + return lowerAssetMapping; + }; - for (var i = 0; i < n; ++i) copy[i] = arr[i]; + return CruxAssetTranslator; +}(); - return copy; -} +exports.CruxAssetTranslator = CruxAssetTranslator; +},{"../../core/entities/crux-spec":"Zk7e","../../packages/error":"yXIU","../../packages/logger":"eThb"}],"zwk0":[function(require,module,exports) { +var __filename = "/Users/Sanchay/Work/js-sdk/src/core/entities/crux-user.ts"; +"use strict"; -function spliceOne(list, index) { - for (; index + 1 < list.length; index++) list[index] = list[index + 1]; +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.CruxUser = exports.SubdomainRegistrationStatusDetail = exports.SubdomainRegistrationStatus = void 0; - list.pop(); -} +var _error = require("../../packages/error"); -function unwrapListeners(arr) { - var ret = new Array(arr.length); +var _identityUtils = require("../../packages/identity-utils"); - for (var i = 0; i < ret.length; ++i) { - ret[i] = arr[i].listener || arr[i]; - } +var _logger = require("../../packages/logger"); - return ret; -} -},{}],"pBGv":[function(require,module,exports) { +var _cruxSpec = require("./crux-spec"); -// shim for using process in browser -var process = module.exports = {}; // cached from whatever global is present so that test runners that stub it -// don't break things. But we need to wrap it in a try catch in case it is -// wrapped in strict mode code which doesn't define any globals. It's inside a -// function because try/catches deoptimize in certain engines. +var log = (0, _logger.getLogger)(__filename); +var SubdomainRegistrationStatus; +exports.SubdomainRegistrationStatus = SubdomainRegistrationStatus; -var cachedSetTimeout; -var cachedClearTimeout; +(function (SubdomainRegistrationStatus) { + SubdomainRegistrationStatus["NONE"] = "NONE"; + SubdomainRegistrationStatus["PENDING"] = "PENDING"; + SubdomainRegistrationStatus["DONE"] = "DONE"; + SubdomainRegistrationStatus["REJECT"] = "REJECT"; +})(SubdomainRegistrationStatus || (exports.SubdomainRegistrationStatus = SubdomainRegistrationStatus = {})); -function defaultSetTimout() { - throw new Error('setTimeout has not been defined'); -} +var SubdomainRegistrationStatusDetail; +exports.SubdomainRegistrationStatusDetail = SubdomainRegistrationStatusDetail; -function defaultClearTimeout() { - throw new Error('clearTimeout has not been defined'); -} +(function (SubdomainRegistrationStatusDetail) { + SubdomainRegistrationStatusDetail["NONE"] = "Subdomain not registered with this registrar."; + SubdomainRegistrationStatusDetail["PENDING_REGISTRAR"] = "Subdomain registration pending on registrar."; + SubdomainRegistrationStatusDetail["PENDING_BLOCKCHAIN"] = "Subdomain registration pending on blockchain."; + SubdomainRegistrationStatusDetail["DONE"] = "Subdomain propagated."; +})(SubdomainRegistrationStatusDetail || (exports.SubdomainRegistrationStatusDetail = SubdomainRegistrationStatusDetail = {})); -(function () { - try { - if (typeof setTimeout === 'function') { - cachedSetTimeout = setTimeout; - } else { - cachedSetTimeout = defaultSetTimout; - } - } catch (e) { - cachedSetTimeout = defaultSetTimout; - } +var CruxUser = +/** @class */ +function () { + function CruxUser(cruxID, addressMap, cruxUserInformation) { + var _this = this; - try { - if (typeof clearTimeout === 'function') { - cachedClearTimeout = clearTimeout; - } else { - cachedClearTimeout = defaultClearTimeout; - } - } catch (e) { - cachedClearTimeout = defaultClearTimeout; - } -})(); + this.setCruxUserID = function (cruxID) { + if (cruxID instanceof _identityUtils.CruxId) { + _this.cruxUserID = cruxID; + } else { + throw new _error.BaseError(null, "Invalid CruxID"); + } + }; -function runTimeout(fun) { - if (cachedSetTimeout === setTimeout) { - //normal enviroments in sane situations - return setTimeout(fun, 0); - } // if setTimeout wasn't available but was latter defined + this.setCruxUserInformation = function (cruxUserInformation) { + // validate and set the cruxUserInformation + if (!Object.values(SubdomainRegistrationStatus).includes(cruxUserInformation.registrationStatus.status)) { + throw new _error.BaseError(null, "Subdomain registration status validation failed!"); + } + if (!Object.values(SubdomainRegistrationStatusDetail).includes(cruxUserInformation.registrationStatus.statusDetail)) { + throw new _error.BaseError(null, "Subdomain registration status detail validation failed!"); + } - if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) { - cachedSetTimeout = setTimeout; - return setTimeout(fun, 0); - } + _this.cruxUserInformation = cruxUserInformation; + }; - try { - // when when somebody has screwed with setTimeout but no I.E. maddness - return cachedSetTimeout(fun, 0); - } catch (e) { - try { - // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally - return cachedSetTimeout.call(null, fun, 0); - } catch (e) { - // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error - return cachedSetTimeout.call(this, fun, 0); - } + this.setCruxUserID(cruxID); + this.setAddressMap(addressMap); + this.setCruxUserInformation(cruxUserInformation); + log.debug("CruxUser initialised"); } -} - -function runClearTimeout(marker) { - if (cachedClearTimeout === clearTimeout) { - //normal enviroments in sane situations - return clearTimeout(marker); - } // if clearTimeout wasn't available but was latter defined + Object.defineProperty(CruxUser.prototype, "cruxID", { + get: function get() { + return this.cruxUserID; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(CruxUser.prototype, "info", { + get: function get() { + return this.cruxUserInformation; + }, + enumerable: true, + configurable: true + }); - if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) { - cachedClearTimeout = clearTimeout; - return clearTimeout(marker); - } + CruxUser.prototype.getAddressMap = function () { + return this.addressMap; + }; - try { - // when when somebody has screwed with setTimeout but no I.E. maddness - return cachedClearTimeout(marker); - } catch (e) { + CruxUser.prototype.setAddressMap = function (addressMap) { try { - // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally - return cachedClearTimeout.call(null, marker); - } catch (e) { - // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error. - // Some versions of I.E. have different rules for clearTimeout vs setTimeout - return cachedClearTimeout.call(this, marker); + _cruxSpec.CruxSpec.validations.validateAssetIdAddressMap(addressMap); + } catch (error) { + throw new _error.BaseError(error, "Address Map validation failed!"); } - } -} -var queue = []; -var draining = false; -var currentQueue; -var queueIndex = -1; + this.addressMap = addressMap; + }; -function cleanUpNextTick() { - if (!draining || !currentQueue) { - return; - } + CruxUser.prototype.getAddressFromAsset = function (assetId) { + return this.addressMap[assetId]; + }; - draining = false; + return CruxUser; +}(); - if (currentQueue.length) { - queue = currentQueue.concat(queue); - } else { - queueIndex = -1; - } +exports.CruxUser = CruxUser; +},{"../../packages/error":"yXIU","../../packages/identity-utils":"j93N","../../packages/logger":"eThb","./crux-spec":"Zk7e"}],"d8Gn":[function(require,module,exports) { +"use strict"; - if (queue.length) { - drainQueue(); - } -} +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.isInstanceOfKeyManager = void 0; -function drainQueue() { - if (draining) { - return; +var isInstanceOfKeyManager = function isInstanceOfKeyManager(object) { + if ("getPubKey" in object && typeof object.getPubKey === "function" && "signWebToken" in object && typeof object.signWebToken === "function") { + return true; + } else { + return false; } +}; - var timeout = runTimeout(cleanUpNextTick); - draining = true; - var len = queue.length; - - while (len) { - currentQueue = queue; - queue = []; +exports.isInstanceOfKeyManager = isInstanceOfKeyManager; +},{}],"yh9p":[function(require,module,exports) { +'use strict' - while (++queueIndex < len) { - if (currentQueue) { - currentQueue[queueIndex].run(); - } - } +exports.byteLength = byteLength +exports.toByteArray = toByteArray +exports.fromByteArray = fromByteArray - queueIndex = -1; - len = queue.length; - } +var lookup = [] +var revLookup = [] +var Arr = typeof Uint8Array !== 'undefined' ? Uint8Array : Array - currentQueue = null; - draining = false; - runClearTimeout(timeout); +var code = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/' +for (var i = 0, len = code.length; i < len; ++i) { + lookup[i] = code[i] + revLookup[code.charCodeAt(i)] = i } -process.nextTick = function (fun) { - var args = new Array(arguments.length - 1); +// Support decoding URL-safe base64 strings, as Node.js does. +// See: https://en.wikipedia.org/wiki/Base64#URL_applications +revLookup['-'.charCodeAt(0)] = 62 +revLookup['_'.charCodeAt(0)] = 63 - if (arguments.length > 1) { - for (var i = 1; i < arguments.length; i++) { - args[i - 1] = arguments[i]; - } +function getLens (b64) { + var len = b64.length + + if (len % 4 > 0) { + throw new Error('Invalid string. Length must be a multiple of 4') } - queue.push(new Item(fun, args)); + // Trim off extra bytes after placeholder bytes are found + // See: https://github.com/beatgammit/base64-js/issues/42 + var validLen = b64.indexOf('=') + if (validLen === -1) validLen = len - if (queue.length === 1 && !draining) { - runTimeout(drainQueue); - } -}; // v8 likes predictible objects + var placeHoldersLen = validLen === len + ? 0 + : 4 - (validLen % 4) + return [validLen, placeHoldersLen] +} -function Item(fun, array) { - this.fun = fun; - this.array = array; +// base64 is 4/3 + up to two characters of the original data +function byteLength (b64) { + var lens = getLens(b64) + var validLen = lens[0] + var placeHoldersLen = lens[1] + return ((validLen + placeHoldersLen) * 3 / 4) - placeHoldersLen } -Item.prototype.run = function () { - this.fun.apply(null, this.array); -}; +function _byteLength (b64, validLen, placeHoldersLen) { + return ((validLen + placeHoldersLen) * 3 / 4) - placeHoldersLen +} -process.title = 'browser'; -process.env = {}; -process.argv = []; -process.version = ''; // empty string to avoid regexp issues +function toByteArray (b64) { + var tmp + var lens = getLens(b64) + var validLen = lens[0] + var placeHoldersLen = lens[1] -process.versions = {}; + var arr = new Arr(_byteLength(b64, validLen, placeHoldersLen)) -function noop() {} + var curByte = 0 -process.on = noop; -process.addListener = noop; -process.once = noop; -process.off = noop; -process.removeListener = noop; -process.removeAllListeners = noop; -process.emit = noop; -process.prependListener = noop; -process.prependOnceListener = noop; + // if there are placeholders, only get up to the last complete 4 chars + var len = placeHoldersLen > 0 + ? validLen - 4 + : validLen -process.listeners = function (name) { - return []; -}; + var i + for (i = 0; i < len; i += 4) { + tmp = + (revLookup[b64.charCodeAt(i)] << 18) | + (revLookup[b64.charCodeAt(i + 1)] << 12) | + (revLookup[b64.charCodeAt(i + 2)] << 6) | + revLookup[b64.charCodeAt(i + 3)] + arr[curByte++] = (tmp >> 16) & 0xFF + arr[curByte++] = (tmp >> 8) & 0xFF + arr[curByte++] = tmp & 0xFF + } -process.binding = function (name) { - throw new Error('process.binding is not supported'); -}; + if (placeHoldersLen === 2) { + tmp = + (revLookup[b64.charCodeAt(i)] << 2) | + (revLookup[b64.charCodeAt(i + 1)] >> 4) + arr[curByte++] = tmp & 0xFF + } -process.cwd = function () { - return '/'; -}; + if (placeHoldersLen === 1) { + tmp = + (revLookup[b64.charCodeAt(i)] << 10) | + (revLookup[b64.charCodeAt(i + 1)] << 4) | + (revLookup[b64.charCodeAt(i + 2)] >> 2) + arr[curByte++] = (tmp >> 8) & 0xFF + arr[curByte++] = tmp & 0xFF + } -process.chdir = function (dir) { - throw new Error('process.chdir is not supported'); -}; + return arr +} -process.umask = function () { - return 0; -}; -},{}],"Yj0v":[function(require,module,exports) { -var process = require("process"); -'use strict'; +function tripletToBase64 (num) { + return lookup[num >> 18 & 0x3F] + + lookup[num >> 12 & 0x3F] + + lookup[num >> 6 & 0x3F] + + lookup[num & 0x3F] +} -if (typeof process === 'undefined' || - !process.version || - process.version.indexOf('v0.') === 0 || - process.version.indexOf('v1.') === 0 && process.version.indexOf('v1.8.') !== 0) { - module.exports = { nextTick: nextTick }; -} else { - module.exports = process +function encodeChunk (uint8, start, end) { + var tmp + var output = [] + for (var i = start; i < end; i += 3) { + tmp = + ((uint8[i] << 16) & 0xFF0000) + + ((uint8[i + 1] << 8) & 0xFF00) + + (uint8[i + 2] & 0xFF) + output.push(tripletToBase64(tmp)) + } + return output.join('') } -function nextTick(fn, arg1, arg2, arg3) { - if (typeof fn !== 'function') { - throw new TypeError('"callback" argument must be a function'); +function fromByteArray (uint8) { + var tmp + var len = uint8.length + var extraBytes = len % 3 // if we have 1 byte left, pad 2 bytes + var parts = [] + var maxChunkLength = 16383 // must be multiple of 3 + + // go through the array every three bytes, we'll deal with trailing stuff later + for (var i = 0, len2 = len - extraBytes; i < len2; i += maxChunkLength) { + parts.push(encodeChunk( + uint8, i, (i + maxChunkLength) > len2 ? len2 : (i + maxChunkLength) + )) } - var len = arguments.length; - var args, i; - switch (len) { - case 0: - case 1: - return process.nextTick(fn); - case 2: - return process.nextTick(function afterTickOne() { - fn.call(null, arg1); - }); - case 3: - return process.nextTick(function afterTickTwo() { - fn.call(null, arg1, arg2); - }); - case 4: - return process.nextTick(function afterTickThree() { - fn.call(null, arg1, arg2, arg3); - }); - default: - args = new Array(len - 1); - i = 0; - while (i < args.length) { - args[i++] = arguments[i]; - } - return process.nextTick(function afterTick() { - fn.apply(null, args); - }); + + // pad the end with zeros, but make sure to not forget the extra bytes + if (extraBytes === 1) { + tmp = uint8[len - 1] + parts.push( + lookup[tmp >> 2] + + lookup[(tmp << 4) & 0x3F] + + '==' + ) + } else if (extraBytes === 2) { + tmp = (uint8[len - 2] << 8) + uint8[len - 1] + parts.push( + lookup[tmp >> 10] + + lookup[(tmp >> 4) & 0x3F] + + lookup[(tmp << 2) & 0x3F] + + '=' + ) } + + return parts.join('') } +},{}],"JgNJ":[function(require,module,exports) { +exports.read = function (buffer, offset, isLE, mLen, nBytes) { + var e, m + var eLen = (nBytes * 8) - mLen - 1 + var eMax = (1 << eLen) - 1 + var eBias = eMax >> 1 + var nBits = -7 + var i = isLE ? (nBytes - 1) : 0 + var d = isLE ? -1 : 1 + var s = buffer[offset + i] -},{"process":"pBGv"}],"Q8A6":[function(require,module,exports) { -module.exports = require('events').EventEmitter; + i += d -},{"events":"FRpO"}],"l6K0":[function(require,module,exports) { + e = s & ((1 << (-nBits)) - 1) + s >>= (-nBits) + nBits += eLen + for (; nBits > 0; e = (e * 256) + buffer[offset + i], i += d, nBits -= 8) {} -/* eslint-disable node/no-deprecated-api */ -var buffer = require('buffer') -var Buffer = buffer.Buffer + m = e & ((1 << (-nBits)) - 1) + e >>= (-nBits) + nBits += mLen + for (; nBits > 0; m = (m * 256) + buffer[offset + i], i += d, nBits -= 8) {} -// alternative to using Object.keys for old browsers -function copyProps (src, dst) { - for (var key in src) { - dst[key] = src[key] + if (e === 0) { + e = 1 - eBias + } else if (e === eMax) { + return m ? NaN : ((s ? -1 : 1) * Infinity) + } else { + m = m + Math.pow(2, mLen) + e = e - eBias } -} -if (Buffer.from && Buffer.alloc && Buffer.allocUnsafe && Buffer.allocUnsafeSlow) { - module.exports = buffer -} else { - // Copy properties from require('buffer') - copyProps(buffer, exports) - exports.Buffer = SafeBuffer -} - -function SafeBuffer (arg, encodingOrOffset, length) { - return Buffer(arg, encodingOrOffset, length) + return (s ? -1 : 1) * m * Math.pow(2, e - mLen) } -// Copy static methods from Buffer -copyProps(Buffer, SafeBuffer) +exports.write = function (buffer, value, offset, isLE, mLen, nBytes) { + var e, m, c + var eLen = (nBytes * 8) - mLen - 1 + var eMax = (1 << eLen) - 1 + var eBias = eMax >> 1 + var rt = (mLen === 23 ? Math.pow(2, -24) - Math.pow(2, -77) : 0) + var i = isLE ? 0 : (nBytes - 1) + var d = isLE ? 1 : -1 + var s = value < 0 || (value === 0 && 1 / value < 0) ? 1 : 0 -SafeBuffer.from = function (arg, encodingOrOffset, length) { - if (typeof arg === 'number') { - throw new TypeError('Argument must not be a number') - } - return Buffer(arg, encodingOrOffset, length) -} + value = Math.abs(value) -SafeBuffer.alloc = function (size, fill, encoding) { - if (typeof size !== 'number') { - throw new TypeError('Argument must be a number') - } - var buf = Buffer(size) - if (fill !== undefined) { - if (typeof encoding === 'string') { - buf.fill(fill, encoding) + if (isNaN(value) || value === Infinity) { + m = isNaN(value) ? 1 : 0 + e = eMax + } else { + e = Math.floor(Math.log(value) / Math.LN2) + if (value * (c = Math.pow(2, -e)) < 1) { + e-- + c *= 2 + } + if (e + eBias >= 1) { + value += rt / c } else { - buf.fill(fill) + value += rt * Math.pow(2, 1 - eBias) + } + if (value * c >= 2) { + e++ + c /= 2 + } + + if (e + eBias >= eMax) { + m = 0 + e = eMax + } else if (e + eBias >= 1) { + m = ((value * c) - 1) * Math.pow(2, mLen) + e = e + eBias + } else { + m = value * Math.pow(2, eBias - 1) * Math.pow(2, mLen) + e = 0 } - } else { - buf.fill(0) } - return buf + + for (; mLen >= 8; buffer[offset + i] = m & 0xff, i += d, m /= 256, mLen -= 8) {} + + e = (e << mLen) | m + eLen += mLen + for (; eLen > 0; buffer[offset + i] = e & 0xff, i += d, e /= 256, eLen -= 8) {} + + buffer[offset + i - d] |= s * 128 } -SafeBuffer.allocUnsafe = function (size) { - if (typeof size !== 'number') { - throw new TypeError('Argument must be a number') +},{}],"REa7":[function(require,module,exports) { +var toString = {}.toString; + +module.exports = Array.isArray || function (arr) { + return toString.call(arr) == '[object Array]'; +}; + +},{}],"dskh":[function(require,module,exports) { + +var global = arguments[3]; +/*! + * The buffer module from node.js, for the browser. + * + * @author Feross Aboukhadijeh + * @license MIT + */ +/* eslint-disable no-proto */ + +'use strict' + +var base64 = require('base64-js') +var ieee754 = require('ieee754') +var isArray = require('isarray') + +exports.Buffer = Buffer +exports.SlowBuffer = SlowBuffer +exports.INSPECT_MAX_BYTES = 50 + +/** + * If `Buffer.TYPED_ARRAY_SUPPORT`: + * === true Use Uint8Array implementation (fastest) + * === false Use Object implementation (most compatible, even IE6) + * + * Browsers that support typed arrays are IE 10+, Firefox 4+, Chrome 7+, Safari 5.1+, + * Opera 11.6+, iOS 4.2+. + * + * Due to various browser bugs, sometimes the Object implementation will be used even + * when the browser supports typed arrays. + * + * Note: + * + * - Firefox 4-29 lacks support for adding new properties to `Uint8Array` instances, + * See: https://bugzilla.mozilla.org/show_bug.cgi?id=695438. + * + * - Chrome 9-10 is missing the `TypedArray.prototype.subarray` function. + * + * - IE10 has a broken `TypedArray.prototype.subarray` function which returns arrays of + * incorrect length in some situations. + + * We detect these buggy browsers and set `Buffer.TYPED_ARRAY_SUPPORT` to `false` so they + * get the Object implementation, which is slower but behaves correctly. + */ +Buffer.TYPED_ARRAY_SUPPORT = global.TYPED_ARRAY_SUPPORT !== undefined + ? global.TYPED_ARRAY_SUPPORT + : typedArraySupport() + +/* + * Export kMaxLength after typed array support is determined. + */ +exports.kMaxLength = kMaxLength() + +function typedArraySupport () { + try { + var arr = new Uint8Array(1) + arr.__proto__ = {__proto__: Uint8Array.prototype, foo: function () { return 42 }} + return arr.foo() === 42 && // typed array instances can be augmented + typeof arr.subarray === 'function' && // chrome 9-10 lack `subarray` + arr.subarray(1, 1).byteLength === 0 // ie10 has broken `subarray` + } catch (e) { + return false } - return Buffer(size) } -SafeBuffer.allocUnsafeSlow = function (size) { - if (typeof size !== 'number') { - throw new TypeError('Argument must be a number') +function kMaxLength () { + return Buffer.TYPED_ARRAY_SUPPORT + ? 0x7fffffff + : 0x3fffffff +} + +function createBuffer (that, length) { + if (kMaxLength() < length) { + throw new RangeError('Invalid typed array length') } - return buffer.SlowBuffer(size) + if (Buffer.TYPED_ARRAY_SUPPORT) { + // Return an augmented `Uint8Array` instance, for best performance + that = new Uint8Array(length) + that.__proto__ = Buffer.prototype + } else { + // Fallback: Return an object instance of the Buffer class + if (that === null) { + that = new Buffer(length) + } + that.length = length + } + + return that } -},{"buffer":"dskh"}],"Q14w":[function(require,module,exports) { -var Buffer = require("buffer").Buffer; -// Copyright Joyent, Inc. and other Node contributors. -// -// Permission is hereby granted, free of charge, to any person obtaining a -// copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to permit -// persons to whom the Software is furnished to do so, subject to the -// following conditions: -// -// The above copyright notice and this permission notice shall be included -// in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN -// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, -// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE -// USE OR OTHER DEALINGS IN THE SOFTWARE. +/** + * The Buffer constructor returns instances of `Uint8Array` that have their + * prototype changed to `Buffer.prototype`. Furthermore, `Buffer` is a subclass of + * `Uint8Array`, so the returned instances will have all the node `Buffer` methods + * and the `Uint8Array` methods. Square bracket notation works as expected -- it + * returns a single octet. + * + * The `Uint8Array` prototype remains unmodified. + */ -// NOTE: These type checking functions intentionally don't use `instanceof` -// because it is fragile and can be easily faked with `Object.create()`. +function Buffer (arg, encodingOrOffset, length) { + if (!Buffer.TYPED_ARRAY_SUPPORT && !(this instanceof Buffer)) { + return new Buffer(arg, encodingOrOffset, length) + } -function isArray(arg) { - if (Array.isArray) { - return Array.isArray(arg); + // Common case. + if (typeof arg === 'number') { + if (typeof encodingOrOffset === 'string') { + throw new Error( + 'If encoding is specified then the first argument must be a string' + ) + } + return allocUnsafe(this, arg) } - return objectToString(arg) === '[object Array]'; + return from(this, arg, encodingOrOffset, length) } -exports.isArray = isArray; -function isBoolean(arg) { - return typeof arg === 'boolean'; -} -exports.isBoolean = isBoolean; +Buffer.poolSize = 8192 // not used by this implementation -function isNull(arg) { - return arg === null; +// TODO: Legacy, not needed anymore. Remove in next major version. +Buffer._augment = function (arr) { + arr.__proto__ = Buffer.prototype + return arr } -exports.isNull = isNull; -function isNullOrUndefined(arg) { - return arg == null; -} -exports.isNullOrUndefined = isNullOrUndefined; +function from (that, value, encodingOrOffset, length) { + if (typeof value === 'number') { + throw new TypeError('"value" argument must not be a number') + } -function isNumber(arg) { - return typeof arg === 'number'; -} -exports.isNumber = isNumber; + if (typeof ArrayBuffer !== 'undefined' && value instanceof ArrayBuffer) { + return fromArrayBuffer(that, value, encodingOrOffset, length) + } -function isString(arg) { - return typeof arg === 'string'; -} -exports.isString = isString; + if (typeof value === 'string') { + return fromString(that, value, encodingOrOffset) + } -function isSymbol(arg) { - return typeof arg === 'symbol'; + return fromObject(that, value) } -exports.isSymbol = isSymbol; -function isUndefined(arg) { - return arg === void 0; +/** + * Functionally equivalent to Buffer(arg, encoding) but throws a TypeError + * if value is a number. + * Buffer.from(str[, encoding]) + * Buffer.from(array) + * Buffer.from(buffer) + * Buffer.from(arrayBuffer[, byteOffset[, length]]) + **/ +Buffer.from = function (value, encodingOrOffset, length) { + return from(null, value, encodingOrOffset, length) } -exports.isUndefined = isUndefined; -function isRegExp(re) { - return objectToString(re) === '[object RegExp]'; +if (Buffer.TYPED_ARRAY_SUPPORT) { + Buffer.prototype.__proto__ = Uint8Array.prototype + Buffer.__proto__ = Uint8Array + if (typeof Symbol !== 'undefined' && Symbol.species && + Buffer[Symbol.species] === Buffer) { + // Fix subarray() in ES2016. See: https://github.com/feross/buffer/pull/97 + Object.defineProperty(Buffer, Symbol.species, { + value: null, + configurable: true + }) + } } -exports.isRegExp = isRegExp; -function isObject(arg) { - return typeof arg === 'object' && arg !== null; +function assertSize (size) { + if (typeof size !== 'number') { + throw new TypeError('"size" argument must be a number') + } else if (size < 0) { + throw new RangeError('"size" argument must not be negative') + } } -exports.isObject = isObject; -function isDate(d) { - return objectToString(d) === '[object Date]'; +function alloc (that, size, fill, encoding) { + assertSize(size) + if (size <= 0) { + return createBuffer(that, size) + } + if (fill !== undefined) { + // Only pay attention to encoding if it's a string. This + // prevents accidentally sending in a number that would + // be interpretted as a start offset. + return typeof encoding === 'string' + ? createBuffer(that, size).fill(fill, encoding) + : createBuffer(that, size).fill(fill) + } + return createBuffer(that, size) } -exports.isDate = isDate; -function isError(e) { - return (objectToString(e) === '[object Error]' || e instanceof Error); +/** + * Creates a new filled Buffer instance. + * alloc(size[, fill[, encoding]]) + **/ +Buffer.alloc = function (size, fill, encoding) { + return alloc(null, size, fill, encoding) } -exports.isError = isError; -function isFunction(arg) { - return typeof arg === 'function'; +function allocUnsafe (that, size) { + assertSize(size) + that = createBuffer(that, size < 0 ? 0 : checked(size) | 0) + if (!Buffer.TYPED_ARRAY_SUPPORT) { + for (var i = 0; i < size; ++i) { + that[i] = 0 + } + } + return that } -exports.isFunction = isFunction; -function isPrimitive(arg) { - return arg === null || - typeof arg === 'boolean' || - typeof arg === 'number' || - typeof arg === 'string' || - typeof arg === 'symbol' || // ES6 symbol - typeof arg === 'undefined'; +/** + * Equivalent to Buffer(num), by default creates a non-zero-filled Buffer instance. + * */ +Buffer.allocUnsafe = function (size) { + return allocUnsafe(null, size) } -exports.isPrimitive = isPrimitive; - -exports.isBuffer = Buffer.isBuffer; - -function objectToString(o) { - return Object.prototype.toString.call(o); +/** + * Equivalent to SlowBuffer(num), by default creates a non-zero-filled Buffer instance. + */ +Buffer.allocUnsafeSlow = function (size) { + return allocUnsafe(null, size) } -},{"buffer":"dskh"}],"rDCW":[function(require,module,exports) { +function fromString (that, string, encoding) { + if (typeof encoding !== 'string' || encoding === '') { + encoding = 'utf8' + } -},{}],"Um5I":[function(require,module,exports) { + if (!Buffer.isEncoding(encoding)) { + throw new TypeError('"encoding" must be a valid string encoding') + } -'use strict'; + var length = byteLength(string, encoding) | 0 + that = createBuffer(that, length) -function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } + var actual = that.write(string, encoding) -var Buffer = require('safe-buffer').Buffer; -var util = require('util'); + if (actual !== length) { + // Writing a hex string, for example, that contains invalid characters will + // cause everything after the first invalid character to be ignored. (e.g. + // 'abxxcd' will be treated as 'ab') + that = that.slice(0, actual) + } -function copyBuffer(src, target, offset) { - src.copy(target, offset); + return that } -module.exports = function () { - function BufferList() { - _classCallCheck(this, BufferList); - - this.head = null; - this.tail = null; - this.length = 0; +function fromArrayLike (that, array) { + var length = array.length < 0 ? 0 : checked(array.length) | 0 + that = createBuffer(that, length) + for (var i = 0; i < length; i += 1) { + that[i] = array[i] & 255 } + return that +} - BufferList.prototype.push = function push(v) { - var entry = { data: v, next: null }; - if (this.length > 0) this.tail.next = entry;else this.head = entry; - this.tail = entry; - ++this.length; - }; - - BufferList.prototype.unshift = function unshift(v) { - var entry = { data: v, next: this.head }; - if (this.length === 0) this.tail = entry; - this.head = entry; - ++this.length; - }; - - BufferList.prototype.shift = function shift() { - if (this.length === 0) return; - var ret = this.head.data; - if (this.length === 1) this.head = this.tail = null;else this.head = this.head.next; - --this.length; - return ret; - }; - - BufferList.prototype.clear = function clear() { - this.head = this.tail = null; - this.length = 0; - }; +function fromArrayBuffer (that, array, byteOffset, length) { + array.byteLength // this throws if `array` is not a valid ArrayBuffer - BufferList.prototype.join = function join(s) { - if (this.length === 0) return ''; - var p = this.head; - var ret = '' + p.data; - while (p = p.next) { - ret += s + p.data; - }return ret; - }; + if (byteOffset < 0 || array.byteLength < byteOffset) { + throw new RangeError('\'offset\' is out of bounds') + } - BufferList.prototype.concat = function concat(n) { - if (this.length === 0) return Buffer.alloc(0); - if (this.length === 1) return this.head.data; - var ret = Buffer.allocUnsafe(n >>> 0); - var p = this.head; - var i = 0; - while (p) { - copyBuffer(p.data, ret, i); - i += p.data.length; - p = p.next; - } - return ret; - }; + if (array.byteLength < byteOffset + (length || 0)) { + throw new RangeError('\'length\' is out of bounds') + } - return BufferList; -}(); + if (byteOffset === undefined && length === undefined) { + array = new Uint8Array(array) + } else if (length === undefined) { + array = new Uint8Array(array, byteOffset) + } else { + array = new Uint8Array(array, byteOffset, length) + } -if (util && util.inspect && util.inspect.custom) { - module.exports.prototype[util.inspect.custom] = function () { - var obj = util.inspect({ length: this.length }); - return this.constructor.name + ' ' + obj; - }; + if (Buffer.TYPED_ARRAY_SUPPORT) { + // Return an augmented `Uint8Array` instance, for best performance + that = array + that.__proto__ = Buffer.prototype + } else { + // Fallback: Return an object instance of the Buffer class + that = fromArrayLike(that, array) + } + return that } -},{"safe-buffer":"l6K0","util":"rDCW"}],"avqi":[function(require,module,exports) { -'use strict'; -/**/ +function fromObject (that, obj) { + if (Buffer.isBuffer(obj)) { + var len = checked(obj.length) | 0 + that = createBuffer(that, len) -var pna = require('process-nextick-args'); -/**/ + if (that.length === 0) { + return that + } -// undocumented cb() API, needed for core, not for public API -function destroy(err, cb) { - var _this = this; + obj.copy(that, 0, 0, len) + return that + } - var readableDestroyed = this._readableState && this._readableState.destroyed; - var writableDestroyed = this._writableState && this._writableState.destroyed; + if (obj) { + if ((typeof ArrayBuffer !== 'undefined' && + obj.buffer instanceof ArrayBuffer) || 'length' in obj) { + if (typeof obj.length !== 'number' || isnan(obj.length)) { + return createBuffer(that, 0) + } + return fromArrayLike(that, obj) + } - if (readableDestroyed || writableDestroyed) { - if (cb) { - cb(err); - } else if (err && (!this._writableState || !this._writableState.errorEmitted)) { - pna.nextTick(emitErrorNT, this, err); + if (obj.type === 'Buffer' && isArray(obj.data)) { + return fromArrayLike(that, obj.data) } - return this; } - // we set destroyed to true before firing error callbacks in order - // to make it re-entrance safe in case destroy() is called within callbacks + throw new TypeError('First argument must be a string, Buffer, ArrayBuffer, Array, or array-like object.') +} - if (this._readableState) { - this._readableState.destroyed = true; +function checked (length) { + // Note: cannot use `length < kMaxLength()` here because that fails when + // length is NaN (which is otherwise coerced to zero.) + if (length >= kMaxLength()) { + throw new RangeError('Attempt to allocate Buffer larger than maximum ' + + 'size: 0x' + kMaxLength().toString(16) + ' bytes') } - - // if this is a duplex stream mark the writable part as destroyed as well - if (this._writableState) { - this._writableState.destroyed = true; - } - - this._destroy(err || null, function (err) { - if (!cb && err) { - pna.nextTick(emitErrorNT, _this, err); - if (_this._writableState) { - _this._writableState.errorEmitted = true; - } - } else if (cb) { - cb(err); - } - }); - - return this; + return length | 0 } -function undestroy() { - if (this._readableState) { - this._readableState.destroyed = false; - this._readableState.reading = false; - this._readableState.ended = false; - this._readableState.endEmitted = false; - } - - if (this._writableState) { - this._writableState.destroyed = false; - this._writableState.ended = false; - this._writableState.ending = false; - this._writableState.finished = false; - this._writableState.errorEmitted = false; +function SlowBuffer (length) { + if (+length != length) { // eslint-disable-line eqeqeq + length = 0 } + return Buffer.alloc(+length) } -function emitErrorNT(self, err) { - self.emit('error', err); +Buffer.isBuffer = function isBuffer (b) { + return !!(b != null && b._isBuffer) } -module.exports = { - destroy: destroy, - undestroy: undestroy -}; -},{"process-nextick-args":"Yj0v"}],"yM1o":[function(require,module,exports) { -var global = arguments[3]; - -/** - * Module exports. - */ - -module.exports = deprecate; +Buffer.compare = function compare (a, b) { + if (!Buffer.isBuffer(a) || !Buffer.isBuffer(b)) { + throw new TypeError('Arguments must be Buffers') + } -/** - * Mark that a method should not be used. - * Returns a modified function which warns once by default. - * - * If `localStorage.noDeprecation = true` is set, then it is a no-op. - * - * If `localStorage.throwDeprecation = true` is set, then deprecated functions - * will throw an Error when invoked. - * - * If `localStorage.traceDeprecation = true` is set, then deprecated functions - * will invoke `console.trace()` instead of `console.error()`. - * - * @param {Function} fn - the function to deprecate - * @param {String} msg - the string to print to the console when `fn` is invoked - * @returns {Function} a new "deprecated" version of `fn` - * @api public - */ + if (a === b) return 0 -function deprecate (fn, msg) { - if (config('noDeprecation')) { - return fn; - } + var x = a.length + var y = b.length - var warned = false; - function deprecated() { - if (!warned) { - if (config('throwDeprecation')) { - throw new Error(msg); - } else if (config('traceDeprecation')) { - console.trace(msg); - } else { - console.warn(msg); - } - warned = true; + for (var i = 0, len = Math.min(x, y); i < len; ++i) { + if (a[i] !== b[i]) { + x = a[i] + y = b[i] + break } - return fn.apply(this, arguments); } - return deprecated; + if (x < y) return -1 + if (y < x) return 1 + return 0 } -/** - * Checks `localStorage` for boolean values for the given `name`. - * - * @param {String} name - * @returns {Boolean} - * @api private - */ - -function config (name) { - // accessing global.localStorage can trigger a DOMException in sandboxed iframes - try { - if (!global.localStorage) return false; - } catch (_) { - return false; +Buffer.isEncoding = function isEncoding (encoding) { + switch (String(encoding).toLowerCase()) { + case 'hex': + case 'utf8': + case 'utf-8': + case 'ascii': + case 'latin1': + case 'binary': + case 'base64': + case 'ucs2': + case 'ucs-2': + case 'utf16le': + case 'utf-16le': + return true + default: + return false } - var val = global.localStorage[name]; - if (null == val) return false; - return String(val).toLowerCase() === 'true'; } -},{}],"I0x5":[function(require,module,exports) { -var process = require("process"); - -var global = arguments[3]; -// Copyright Joyent, Inc. and other Node contributors. -// -// Permission is hereby granted, free of charge, to any person obtaining a -// copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to permit -// persons to whom the Software is furnished to do so, subject to the -// following conditions: -// -// The above copyright notice and this permission notice shall be included -// in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN -// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, -// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE -// USE OR OTHER DEALINGS IN THE SOFTWARE. -// A bit simpler than readable streams. -// Implement an async ._write(chunk, encoding, cb), and it'll handle all -// the drain event emission and buffering. -'use strict'; -/**/ - -var pna = require('process-nextick-args'); -/**/ - +Buffer.concat = function concat (list, length) { + if (!isArray(list)) { + throw new TypeError('"list" argument must be an Array of Buffers') + } -module.exports = Writable; -/* */ + if (list.length === 0) { + return Buffer.alloc(0) + } -function WriteReq(chunk, encoding, cb) { - this.chunk = chunk; - this.encoding = encoding; - this.callback = cb; - this.next = null; -} // It seems a linked list but it is not -// there will be only 2 of these for each stream + var i + if (length === undefined) { + length = 0 + for (i = 0; i < list.length; ++i) { + length += list[i].length + } + } + var buffer = Buffer.allocUnsafe(length) + var pos = 0 + for (i = 0; i < list.length; ++i) { + var buf = list[i] + if (!Buffer.isBuffer(buf)) { + throw new TypeError('"list" argument must be an Array of Buffers') + } + buf.copy(buffer, pos) + pos += buf.length + } + return buffer +} -function CorkedRequest(state) { - var _this = this; +function byteLength (string, encoding) { + if (Buffer.isBuffer(string)) { + return string.length + } + if (typeof ArrayBuffer !== 'undefined' && typeof ArrayBuffer.isView === 'function' && + (ArrayBuffer.isView(string) || string instanceof ArrayBuffer)) { + return string.byteLength + } + if (typeof string !== 'string') { + string = '' + string + } - this.next = null; - this.entry = null; + var len = string.length + if (len === 0) return 0 - this.finish = function () { - onCorkedFinish(_this, state); - }; + // Use a for loop to avoid recursion + var loweredCase = false + for (;;) { + switch (encoding) { + case 'ascii': + case 'latin1': + case 'binary': + return len + case 'utf8': + case 'utf-8': + case undefined: + return utf8ToBytes(string).length + case 'ucs2': + case 'ucs-2': + case 'utf16le': + case 'utf-16le': + return len * 2 + case 'hex': + return len >>> 1 + case 'base64': + return base64ToBytes(string).length + default: + if (loweredCase) return utf8ToBytes(string).length // assume utf8 + encoding = ('' + encoding).toLowerCase() + loweredCase = true + } + } } -/* */ +Buffer.byteLength = byteLength -/**/ +function slowToString (encoding, start, end) { + var loweredCase = false + // No need to verify that "this.length <= MAX_UINT32" since it's a read-only + // property of a typed array. -var asyncWrite = !true && ['v0.10', 'v0.9.'].indexOf(process.version.slice(0, 5)) > -1 ? setImmediate : pna.nextTick; -/**/ + // This behaves neither like String nor Uint8Array in that we set start/end + // to their upper/lower bounds if the value passed is out of range. + // undefined is handled specially as per ECMA-262 6th Edition, + // Section 13.3.3.7 Runtime Semantics: KeyedBindingInitialization. + if (start === undefined || start < 0) { + start = 0 + } + // Return early if start > this.length. Done here to prevent potential uint32 + // coercion fail below. + if (start > this.length) { + return '' + } -/**/ + if (end === undefined || end > this.length) { + end = this.length + } -var Duplex; -/**/ + if (end <= 0) { + return '' + } -Writable.WritableState = WritableState; -/**/ + // Force coersion to uint32. This will also coerce falsey/NaN values to 0. + end >>>= 0 + start >>>= 0 -var util = require('core-util-is'); + if (end <= start) { + return '' + } -util.inherits = require('inherits'); -/**/ + if (!encoding) encoding = 'utf8' -/**/ + while (true) { + switch (encoding) { + case 'hex': + return hexSlice(this, start, end) -var internalUtil = { - deprecate: require('util-deprecate') -}; -/**/ + case 'utf8': + case 'utf-8': + return utf8Slice(this, start, end) -/**/ + case 'ascii': + return asciiSlice(this, start, end) -var Stream = require('./internal/streams/stream'); -/**/ + case 'latin1': + case 'binary': + return latin1Slice(this, start, end) -/**/ + case 'base64': + return base64Slice(this, start, end) + case 'ucs2': + case 'ucs-2': + case 'utf16le': + case 'utf-16le': + return utf16leSlice(this, start, end) -var Buffer = require('safe-buffer').Buffer; + default: + if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding) + encoding = (encoding + '').toLowerCase() + loweredCase = true + } + } +} -var OurUint8Array = global.Uint8Array || function () {}; +// The property is used by `Buffer.isBuffer` and `is-buffer` (in Safari 5-7) to detect +// Buffer instances. +Buffer.prototype._isBuffer = true -function _uint8ArrayToBuffer(chunk) { - return Buffer.from(chunk); +function swap (b, n, m) { + var i = b[n] + b[n] = b[m] + b[m] = i } -function _isUint8Array(obj) { - return Buffer.isBuffer(obj) || obj instanceof OurUint8Array; +Buffer.prototype.swap16 = function swap16 () { + var len = this.length + if (len % 2 !== 0) { + throw new RangeError('Buffer size must be a multiple of 16-bits') + } + for (var i = 0; i < len; i += 2) { + swap(this, i, i + 1) + } + return this } -/**/ - - -var destroyImpl = require('./internal/streams/destroy'); -util.inherits(Writable, Stream); +Buffer.prototype.swap32 = function swap32 () { + var len = this.length + if (len % 4 !== 0) { + throw new RangeError('Buffer size must be a multiple of 32-bits') + } + for (var i = 0; i < len; i += 4) { + swap(this, i, i + 3) + swap(this, i + 1, i + 2) + } + return this +} -function nop() {} +Buffer.prototype.swap64 = function swap64 () { + var len = this.length + if (len % 8 !== 0) { + throw new RangeError('Buffer size must be a multiple of 64-bits') + } + for (var i = 0; i < len; i += 8) { + swap(this, i, i + 7) + swap(this, i + 1, i + 6) + swap(this, i + 2, i + 5) + swap(this, i + 3, i + 4) + } + return this +} -function WritableState(options, stream) { - Duplex = Duplex || require('./_stream_duplex'); - options = options || {}; // Duplex streams are both readable and writable, but share - // the same options object. - // However, some cases require setting options to different - // values for the readable and the writable sides of the duplex stream. - // These options can be provided separately as readableXXX and writableXXX. +Buffer.prototype.toString = function toString () { + var length = this.length | 0 + if (length === 0) return '' + if (arguments.length === 0) return utf8Slice(this, 0, length) + return slowToString.apply(this, arguments) +} - var isDuplex = stream instanceof Duplex; // object stream flag to indicate whether or not this stream - // contains buffers or objects. +Buffer.prototype.equals = function equals (b) { + if (!Buffer.isBuffer(b)) throw new TypeError('Argument must be a Buffer') + if (this === b) return true + return Buffer.compare(this, b) === 0 +} - this.objectMode = !!options.objectMode; - if (isDuplex) this.objectMode = this.objectMode || !!options.writableObjectMode; // the point at which write() starts returning false - // Note: 0 is a valid value, means that we always return false if - // the entire buffer is not flushed immediately on write() +Buffer.prototype.inspect = function inspect () { + var str = '' + var max = exports.INSPECT_MAX_BYTES + if (this.length > 0) { + str = this.toString('hex', 0, max).match(/.{2}/g).join(' ') + if (this.length > max) str += ' ... ' + } + return '' +} - var hwm = options.highWaterMark; - var writableHwm = options.writableHighWaterMark; - var defaultHwm = this.objectMode ? 16 : 16 * 1024; - if (hwm || hwm === 0) this.highWaterMark = hwm;else if (isDuplex && (writableHwm || writableHwm === 0)) this.highWaterMark = writableHwm;else this.highWaterMark = defaultHwm; // cast to ints. +Buffer.prototype.compare = function compare (target, start, end, thisStart, thisEnd) { + if (!Buffer.isBuffer(target)) { + throw new TypeError('Argument must be a Buffer') + } - this.highWaterMark = Math.floor(this.highWaterMark); // if _final has been called + if (start === undefined) { + start = 0 + } + if (end === undefined) { + end = target ? target.length : 0 + } + if (thisStart === undefined) { + thisStart = 0 + } + if (thisEnd === undefined) { + thisEnd = this.length + } - this.finalCalled = false; // drain event flag. + if (start < 0 || end > target.length || thisStart < 0 || thisEnd > this.length) { + throw new RangeError('out of range index') + } - this.needDrain = false; // at the start of calling end() + if (thisStart >= thisEnd && start >= end) { + return 0 + } + if (thisStart >= thisEnd) { + return -1 + } + if (start >= end) { + return 1 + } - this.ending = false; // when end() has been called, and returned + start >>>= 0 + end >>>= 0 + thisStart >>>= 0 + thisEnd >>>= 0 - this.ended = false; // when 'finish' is emitted + if (this === target) return 0 - this.finished = false; // has it been destroyed + var x = thisEnd - thisStart + var y = end - start + var len = Math.min(x, y) - this.destroyed = false; // should we decode strings into buffers before passing to _write? - // this is here so that some node-core streams can optimize string - // handling at a lower level. + var thisCopy = this.slice(thisStart, thisEnd) + var targetCopy = target.slice(start, end) - var noDecode = options.decodeStrings === false; - this.decodeStrings = !noDecode; // Crypto is kind of old and crusty. Historically, its default string - // encoding is 'binary' so we have to make this configurable. - // Everything else in the universe uses 'utf8', though. + for (var i = 0; i < len; ++i) { + if (thisCopy[i] !== targetCopy[i]) { + x = thisCopy[i] + y = targetCopy[i] + break + } + } - this.defaultEncoding = options.defaultEncoding || 'utf8'; // not an actual buffer we keep track of, but a measurement - // of how much we're waiting to get pushed to some underlying - // socket or file. + if (x < y) return -1 + if (y < x) return 1 + return 0 +} - this.length = 0; // a flag to see when we're in the middle of a write. +// Finds either the first index of `val` in `buffer` at offset >= `byteOffset`, +// OR the last index of `val` in `buffer` at offset <= `byteOffset`. +// +// Arguments: +// - buffer - a Buffer to search +// - val - a string, Buffer, or number +// - byteOffset - an index into `buffer`; will be clamped to an int32 +// - encoding - an optional encoding, relevant is val is a string +// - dir - true for indexOf, false for lastIndexOf +function bidirectionalIndexOf (buffer, val, byteOffset, encoding, dir) { + // Empty buffer means no match + if (buffer.length === 0) return -1 - this.writing = false; // when true all writes will be buffered until .uncork() call + // Normalize byteOffset + if (typeof byteOffset === 'string') { + encoding = byteOffset + byteOffset = 0 + } else if (byteOffset > 0x7fffffff) { + byteOffset = 0x7fffffff + } else if (byteOffset < -0x80000000) { + byteOffset = -0x80000000 + } + byteOffset = +byteOffset // Coerce to Number. + if (isNaN(byteOffset)) { + // byteOffset: it it's undefined, null, NaN, "foo", etc, search whole buffer + byteOffset = dir ? 0 : (buffer.length - 1) + } - this.corked = 0; // a flag to be able to tell if the onwrite cb is called immediately, - // or on a later tick. We set this to true at first, because any - // actions that shouldn't happen until "later" should generally also - // not happen before the first write call. - - this.sync = true; // a flag to know if we're processing previously buffered items, which - // may call the _write() callback in the same tick, so that we don't - // end up in an overlapped onwrite situation. + // Normalize byteOffset: negative offsets start from the end of the buffer + if (byteOffset < 0) byteOffset = buffer.length + byteOffset + if (byteOffset >= buffer.length) { + if (dir) return -1 + else byteOffset = buffer.length - 1 + } else if (byteOffset < 0) { + if (dir) byteOffset = 0 + else return -1 + } - this.bufferProcessing = false; // the callback that's passed to _write(chunk,cb) + // Normalize val + if (typeof val === 'string') { + val = Buffer.from(val, encoding) + } - this.onwrite = function (er) { - onwrite(stream, er); - }; // the callback that the user supplies to write(chunk,encoding,cb) + // Finally, search either indexOf (if dir is true) or lastIndexOf + if (Buffer.isBuffer(val)) { + // Special case: looking for empty string/buffer always fails + if (val.length === 0) { + return -1 + } + return arrayIndexOf(buffer, val, byteOffset, encoding, dir) + } else if (typeof val === 'number') { + val = val & 0xFF // Search for a byte value [0-255] + if (Buffer.TYPED_ARRAY_SUPPORT && + typeof Uint8Array.prototype.indexOf === 'function') { + if (dir) { + return Uint8Array.prototype.indexOf.call(buffer, val, byteOffset) + } else { + return Uint8Array.prototype.lastIndexOf.call(buffer, val, byteOffset) + } + } + return arrayIndexOf(buffer, [ val ], byteOffset, encoding, dir) + } + throw new TypeError('val must be string, number or Buffer') +} - this.writecb = null; // the amount that is being written when _write is called. +function arrayIndexOf (arr, val, byteOffset, encoding, dir) { + var indexSize = 1 + var arrLength = arr.length + var valLength = val.length - this.writelen = 0; - this.bufferedRequest = null; - this.lastBufferedRequest = null; // number of pending user-supplied write callbacks - // this must be 0 before 'finish' can be emitted + if (encoding !== undefined) { + encoding = String(encoding).toLowerCase() + if (encoding === 'ucs2' || encoding === 'ucs-2' || + encoding === 'utf16le' || encoding === 'utf-16le') { + if (arr.length < 2 || val.length < 2) { + return -1 + } + indexSize = 2 + arrLength /= 2 + valLength /= 2 + byteOffset /= 2 + } + } - this.pendingcb = 0; // emit prefinish if the only thing we're waiting for is _write cbs - // This is relevant for synchronous Transform streams + function read (buf, i) { + if (indexSize === 1) { + return buf[i] + } else { + return buf.readUInt16BE(i * indexSize) + } + } - this.prefinished = false; // True if the error was already emitted and should not be thrown again + var i + if (dir) { + var foundIndex = -1 + for (i = byteOffset; i < arrLength; i++) { + if (read(arr, i) === read(val, foundIndex === -1 ? 0 : i - foundIndex)) { + if (foundIndex === -1) foundIndex = i + if (i - foundIndex + 1 === valLength) return foundIndex * indexSize + } else { + if (foundIndex !== -1) i -= i - foundIndex + foundIndex = -1 + } + } + } else { + if (byteOffset + valLength > arrLength) byteOffset = arrLength - valLength + for (i = byteOffset; i >= 0; i--) { + var found = true + for (var j = 0; j < valLength; j++) { + if (read(arr, i + j) !== read(val, j)) { + found = false + break + } + } + if (found) return i + } + } - this.errorEmitted = false; // count buffered requests + return -1 +} - this.bufferedRequestCount = 0; // allocate the first CorkedRequest, there is always - // one allocated and free to use, and we maintain at most two +Buffer.prototype.includes = function includes (val, byteOffset, encoding) { + return this.indexOf(val, byteOffset, encoding) !== -1 +} - this.corkedRequestsFree = new CorkedRequest(this); +Buffer.prototype.indexOf = function indexOf (val, byteOffset, encoding) { + return bidirectionalIndexOf(this, val, byteOffset, encoding, true) } -WritableState.prototype.getBuffer = function getBuffer() { - var current = this.bufferedRequest; - var out = []; +Buffer.prototype.lastIndexOf = function lastIndexOf (val, byteOffset, encoding) { + return bidirectionalIndexOf(this, val, byteOffset, encoding, false) +} - while (current) { - out.push(current); - current = current.next; +function hexWrite (buf, string, offset, length) { + offset = Number(offset) || 0 + var remaining = buf.length - offset + if (!length) { + length = remaining + } else { + length = Number(length) + if (length > remaining) { + length = remaining + } } - return out; -}; + // must be an even number of digits + var strLen = string.length + if (strLen % 2 !== 0) throw new TypeError('Invalid hex string') -(function () { - try { - Object.defineProperty(WritableState.prototype, 'buffer', { - get: internalUtil.deprecate(function () { - return this.getBuffer(); - }, '_writableState.buffer is deprecated. Use _writableState.getBuffer ' + 'instead.', 'DEP0003') - }); - } catch (_) {} -})(); // Test _writableState for inheritance to account for Duplex streams, -// whose prototype chain only points to Readable. + if (length > strLen / 2) { + length = strLen / 2 + } + for (var i = 0; i < length; ++i) { + var parsed = parseInt(string.substr(i * 2, 2), 16) + if (isNaN(parsed)) return i + buf[offset + i] = parsed + } + return i +} +function utf8Write (buf, string, offset, length) { + return blitBuffer(utf8ToBytes(string, buf.length - offset), buf, offset, length) +} -var realHasInstance; +function asciiWrite (buf, string, offset, length) { + return blitBuffer(asciiToBytes(string), buf, offset, length) +} -if (typeof Symbol === 'function' && Symbol.hasInstance && typeof Function.prototype[Symbol.hasInstance] === 'function') { - realHasInstance = Function.prototype[Symbol.hasInstance]; - Object.defineProperty(Writable, Symbol.hasInstance, { - value: function (object) { - if (realHasInstance.call(this, object)) return true; - if (this !== Writable) return false; - return object && object._writableState instanceof WritableState; - } - }); -} else { - realHasInstance = function (object) { - return object instanceof this; - }; +function latin1Write (buf, string, offset, length) { + return asciiWrite(buf, string, offset, length) } -function Writable(options) { - Duplex = Duplex || require('./_stream_duplex'); // Writable ctor is applied to Duplexes, too. - // `realHasInstance` is necessary because using plain `instanceof` - // would return false, as no `_writableState` property is attached. - // Trying to use the custom `instanceof` for Writable here will also break the - // Node.js LazyTransform implementation, which has a non-trivial getter for - // `_writableState` that would lead to infinite recursion. +function base64Write (buf, string, offset, length) { + return blitBuffer(base64ToBytes(string), buf, offset, length) +} - if (!realHasInstance.call(Writable, this) && !(this instanceof Duplex)) { - return new Writable(options); - } +function ucs2Write (buf, string, offset, length) { + return blitBuffer(utf16leToBytes(string, buf.length - offset), buf, offset, length) +} - this._writableState = new WritableState(options, this); // legacy. +Buffer.prototype.write = function write (string, offset, length, encoding) { + // Buffer#write(string) + if (offset === undefined) { + encoding = 'utf8' + length = this.length + offset = 0 + // Buffer#write(string, encoding) + } else if (length === undefined && typeof offset === 'string') { + encoding = offset + length = this.length + offset = 0 + // Buffer#write(string, offset[, length][, encoding]) + } else if (isFinite(offset)) { + offset = offset | 0 + if (isFinite(length)) { + length = length | 0 + if (encoding === undefined) encoding = 'utf8' + } else { + encoding = length + length = undefined + } + // legacy write(string, encoding, offset, length) - remove in v0.13 + } else { + throw new Error( + 'Buffer.write(string, encoding, offset[, length]) is no longer supported' + ) + } - this.writable = true; + var remaining = this.length - offset + if (length === undefined || length > remaining) length = remaining - if (options) { - if (typeof options.write === 'function') this._write = options.write; - if (typeof options.writev === 'function') this._writev = options.writev; - if (typeof options.destroy === 'function') this._destroy = options.destroy; - if (typeof options.final === 'function') this._final = options.final; + if ((string.length > 0 && (length < 0 || offset < 0)) || offset > this.length) { + throw new RangeError('Attempt to write outside buffer bounds') } - Stream.call(this); -} // Otherwise people can pipe Writable streams, which is just wrong. + if (!encoding) encoding = 'utf8' + var loweredCase = false + for (;;) { + switch (encoding) { + case 'hex': + return hexWrite(this, string, offset, length) -Writable.prototype.pipe = function () { - this.emit('error', new Error('Cannot pipe, not readable')); -}; + case 'utf8': + case 'utf-8': + return utf8Write(this, string, offset, length) -function writeAfterEnd(stream, cb) { - var er = new Error('write after end'); // TODO: defer error events consistently everywhere, not just the cb + case 'ascii': + return asciiWrite(this, string, offset, length) - stream.emit('error', er); - pna.nextTick(cb, er); -} // Checks that a user-supplied chunk is valid, especially for the particular -// mode the stream is in. Currently this means that `null` is never accepted -// and undefined/non-string values are only allowed in object mode. + case 'latin1': + case 'binary': + return latin1Write(this, string, offset, length) + case 'base64': + // Warning: maxLength not taken into account in base64Write + return base64Write(this, string, offset, length) -function validChunk(stream, state, chunk, cb) { - var valid = true; - var er = false; + case 'ucs2': + case 'ucs-2': + case 'utf16le': + case 'utf-16le': + return ucs2Write(this, string, offset, length) - if (chunk === null) { - er = new TypeError('May not write null values to stream'); - } else if (typeof chunk !== 'string' && chunk !== undefined && !state.objectMode) { - er = new TypeError('Invalid non-string/buffer chunk'); + default: + if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding) + encoding = ('' + encoding).toLowerCase() + loweredCase = true + } } +} - if (er) { - stream.emit('error', er); - pna.nextTick(cb, er); - valid = false; +Buffer.prototype.toJSON = function toJSON () { + return { + type: 'Buffer', + data: Array.prototype.slice.call(this._arr || this, 0) } +} - return valid; +function base64Slice (buf, start, end) { + if (start === 0 && end === buf.length) { + return base64.fromByteArray(buf) + } else { + return base64.fromByteArray(buf.slice(start, end)) + } } -Writable.prototype.write = function (chunk, encoding, cb) { - var state = this._writableState; - var ret = false; +function utf8Slice (buf, start, end) { + end = Math.min(buf.length, end) + var res = [] - var isBuf = !state.objectMode && _isUint8Array(chunk); + var i = start + while (i < end) { + var firstByte = buf[i] + var codePoint = null + var bytesPerSequence = (firstByte > 0xEF) ? 4 + : (firstByte > 0xDF) ? 3 + : (firstByte > 0xBF) ? 2 + : 1 - if (isBuf && !Buffer.isBuffer(chunk)) { - chunk = _uint8ArrayToBuffer(chunk); - } + if (i + bytesPerSequence <= end) { + var secondByte, thirdByte, fourthByte, tempCodePoint - if (typeof encoding === 'function') { - cb = encoding; - encoding = null; - } + switch (bytesPerSequence) { + case 1: + if (firstByte < 0x80) { + codePoint = firstByte + } + break + case 2: + secondByte = buf[i + 1] + if ((secondByte & 0xC0) === 0x80) { + tempCodePoint = (firstByte & 0x1F) << 0x6 | (secondByte & 0x3F) + if (tempCodePoint > 0x7F) { + codePoint = tempCodePoint + } + } + break + case 3: + secondByte = buf[i + 1] + thirdByte = buf[i + 2] + if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80) { + tempCodePoint = (firstByte & 0xF) << 0xC | (secondByte & 0x3F) << 0x6 | (thirdByte & 0x3F) + if (tempCodePoint > 0x7FF && (tempCodePoint < 0xD800 || tempCodePoint > 0xDFFF)) { + codePoint = tempCodePoint + } + } + break + case 4: + secondByte = buf[i + 1] + thirdByte = buf[i + 2] + fourthByte = buf[i + 3] + if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80 && (fourthByte & 0xC0) === 0x80) { + tempCodePoint = (firstByte & 0xF) << 0x12 | (secondByte & 0x3F) << 0xC | (thirdByte & 0x3F) << 0x6 | (fourthByte & 0x3F) + if (tempCodePoint > 0xFFFF && tempCodePoint < 0x110000) { + codePoint = tempCodePoint + } + } + } + } - if (isBuf) encoding = 'buffer';else if (!encoding) encoding = state.defaultEncoding; - if (typeof cb !== 'function') cb = nop; - if (state.ended) writeAfterEnd(this, cb);else if (isBuf || validChunk(this, state, chunk, cb)) { - state.pendingcb++; - ret = writeOrBuffer(this, state, isBuf, chunk, encoding, cb); + if (codePoint === null) { + // we did not generate a valid codePoint so insert a + // replacement char (U+FFFD) and advance only 1 byte + codePoint = 0xFFFD + bytesPerSequence = 1 + } else if (codePoint > 0xFFFF) { + // encode to utf16 (surrogate pair dance) + codePoint -= 0x10000 + res.push(codePoint >>> 10 & 0x3FF | 0xD800) + codePoint = 0xDC00 | codePoint & 0x3FF + } + + res.push(codePoint) + i += bytesPerSequence } - return ret; -}; -Writable.prototype.cork = function () { - var state = this._writableState; - state.corked++; -}; + return decodeCodePointsArray(res) +} -Writable.prototype.uncork = function () { - var state = this._writableState; +// Based on http://stackoverflow.com/a/22747272/680742, the browser with +// the lowest limit is Chrome, with 0x10000 args. +// We go 1 magnitude less, for safety +var MAX_ARGUMENTS_LENGTH = 0x1000 - if (state.corked) { - state.corked--; - if (!state.writing && !state.corked && !state.finished && !state.bufferProcessing && state.bufferedRequest) clearBuffer(this, state); +function decodeCodePointsArray (codePoints) { + var len = codePoints.length + if (len <= MAX_ARGUMENTS_LENGTH) { + return String.fromCharCode.apply(String, codePoints) // avoid extra slice() } -}; - -Writable.prototype.setDefaultEncoding = function setDefaultEncoding(encoding) { - // node::ParseEncoding() requires lower case. - if (typeof encoding === 'string') encoding = encoding.toLowerCase(); - if (!(['hex', 'utf8', 'utf-8', 'ascii', 'binary', 'base64', 'ucs2', 'ucs-2', 'utf16le', 'utf-16le', 'raw'].indexOf((encoding + '').toLowerCase()) > -1)) throw new TypeError('Unknown encoding: ' + encoding); - this._writableState.defaultEncoding = encoding; - return this; -}; -function decodeChunk(state, chunk, encoding) { - if (!state.objectMode && state.decodeStrings !== false && typeof chunk === 'string') { - chunk = Buffer.from(chunk, encoding); + // Decode in chunks to avoid "call stack size exceeded". + var res = '' + var i = 0 + while (i < len) { + res += String.fromCharCode.apply( + String, + codePoints.slice(i, i += MAX_ARGUMENTS_LENGTH) + ) } - - return chunk; + return res } -Object.defineProperty(Writable.prototype, 'writableHighWaterMark', { - // making it explicit this property is not enumerable - // because otherwise some prototype manipulation in - // userland will fail - enumerable: false, - get: function () { - return this._writableState.highWaterMark; - } -}); // if we're already writing something, then just put this -// in the queue, and wait our turn. Otherwise, call _write -// If we return false, then we need a drain event, so set that flag. - -function writeOrBuffer(stream, state, isBuf, chunk, encoding, cb) { - if (!isBuf) { - var newChunk = decodeChunk(state, chunk, encoding); +function asciiSlice (buf, start, end) { + var ret = '' + end = Math.min(buf.length, end) - if (chunk !== newChunk) { - isBuf = true; - encoding = 'buffer'; - chunk = newChunk; - } + for (var i = start; i < end; ++i) { + ret += String.fromCharCode(buf[i] & 0x7F) } + return ret +} - var len = state.objectMode ? 1 : chunk.length; - state.length += len; - var ret = state.length < state.highWaterMark; // we must ensure that previous needDrain will not be reset to false. +function latin1Slice (buf, start, end) { + var ret = '' + end = Math.min(buf.length, end) - if (!ret) state.needDrain = true; + for (var i = start; i < end; ++i) { + ret += String.fromCharCode(buf[i]) + } + return ret +} - if (state.writing || state.corked) { - var last = state.lastBufferedRequest; - state.lastBufferedRequest = { - chunk: chunk, - encoding: encoding, - isBuf: isBuf, - callback: cb, - next: null - }; +function hexSlice (buf, start, end) { + var len = buf.length - if (last) { - last.next = state.lastBufferedRequest; - } else { - state.bufferedRequest = state.lastBufferedRequest; - } + if (!start || start < 0) start = 0 + if (!end || end < 0 || end > len) end = len - state.bufferedRequestCount += 1; - } else { - doWrite(stream, state, false, len, chunk, encoding, cb); + var out = '' + for (var i = start; i < end; ++i) { + out += toHex(buf[i]) } - - return ret; + return out } -function doWrite(stream, state, writev, len, chunk, encoding, cb) { - state.writelen = len; - state.writecb = cb; - state.writing = true; - state.sync = true; - if (writev) stream._writev(chunk, state.onwrite);else stream._write(chunk, encoding, state.onwrite); - state.sync = false; +function utf16leSlice (buf, start, end) { + var bytes = buf.slice(start, end) + var res = '' + for (var i = 0; i < bytes.length; i += 2) { + res += String.fromCharCode(bytes[i] + bytes[i + 1] * 256) + } + return res } -function onwriteError(stream, state, sync, er, cb) { - --state.pendingcb; - - if (sync) { - // defer the callback if we are being called synchronously - // to avoid piling up things on the stack - pna.nextTick(cb, er); // this can emit finish, and it will always happen - // after error +Buffer.prototype.slice = function slice (start, end) { + var len = this.length + start = ~~start + end = end === undefined ? len : ~~end - pna.nextTick(finishMaybe, stream, state); - stream._writableState.errorEmitted = true; - stream.emit('error', er); - } else { - // the caller expect this to happen before if - // it is async - cb(er); - stream._writableState.errorEmitted = true; - stream.emit('error', er); // this can emit finish, but finish must - // always follow error + if (start < 0) { + start += len + if (start < 0) start = 0 + } else if (start > len) { + start = len + } - finishMaybe(stream, state); + if (end < 0) { + end += len + if (end < 0) end = 0 + } else if (end > len) { + end = len } -} -function onwriteStateUpdate(state) { - state.writing = false; - state.writecb = null; - state.length -= state.writelen; - state.writelen = 0; + if (end < start) end = start + + var newBuf + if (Buffer.TYPED_ARRAY_SUPPORT) { + newBuf = this.subarray(start, end) + newBuf.__proto__ = Buffer.prototype + } else { + var sliceLen = end - start + newBuf = new Buffer(sliceLen, undefined) + for (var i = 0; i < sliceLen; ++i) { + newBuf[i] = this[i + start] + } + } + + return newBuf } -function onwrite(stream, er) { - var state = stream._writableState; - var sync = state.sync; - var cb = state.writecb; - onwriteStateUpdate(state); - if (er) onwriteError(stream, state, sync, er, cb);else { - // Check if we're actually ready to finish, but don't emit yet - var finished = needFinish(state); +/* + * Need to make sure that buffer isn't trying to write out of bounds. + */ +function checkOffset (offset, ext, length) { + if ((offset % 1) !== 0 || offset < 0) throw new RangeError('offset is not uint') + if (offset + ext > length) throw new RangeError('Trying to access beyond buffer length') +} - if (!finished && !state.corked && !state.bufferProcessing && state.bufferedRequest) { - clearBuffer(stream, state); - } +Buffer.prototype.readUIntLE = function readUIntLE (offset, byteLength, noAssert) { + offset = offset | 0 + byteLength = byteLength | 0 + if (!noAssert) checkOffset(offset, byteLength, this.length) - if (sync) { - /**/ - asyncWrite(afterWrite, stream, state, finished, cb); - /**/ - } else { - afterWrite(stream, state, finished, cb); - } + var val = this[offset] + var mul = 1 + var i = 0 + while (++i < byteLength && (mul *= 0x100)) { + val += this[offset + i] * mul } -} -function afterWrite(stream, state, finished, cb) { - if (!finished) onwriteDrain(stream, state); - state.pendingcb--; - cb(); - finishMaybe(stream, state); -} // Must force callback to be called on nextTick, so that we don't -// emit 'drain' before the write() consumer gets the 'false' return -// value, and has a chance to attach a 'drain' listener. + return val +} +Buffer.prototype.readUIntBE = function readUIntBE (offset, byteLength, noAssert) { + offset = offset | 0 + byteLength = byteLength | 0 + if (!noAssert) { + checkOffset(offset, byteLength, this.length) + } -function onwriteDrain(stream, state) { - if (state.length === 0 && state.needDrain) { - state.needDrain = false; - stream.emit('drain'); + var val = this[offset + --byteLength] + var mul = 1 + while (byteLength > 0 && (mul *= 0x100)) { + val += this[offset + --byteLength] * mul } -} // if there's something in the buffer waiting, then process it + return val +} -function clearBuffer(stream, state) { - state.bufferProcessing = true; - var entry = state.bufferedRequest; +Buffer.prototype.readUInt8 = function readUInt8 (offset, noAssert) { + if (!noAssert) checkOffset(offset, 1, this.length) + return this[offset] +} - if (stream._writev && entry && entry.next) { - // Fast case, write everything using _writev() - var l = state.bufferedRequestCount; - var buffer = new Array(l); - var holder = state.corkedRequestsFree; - holder.entry = entry; - var count = 0; - var allBuffers = true; +Buffer.prototype.readUInt16LE = function readUInt16LE (offset, noAssert) { + if (!noAssert) checkOffset(offset, 2, this.length) + return this[offset] | (this[offset + 1] << 8) +} - while (entry) { - buffer[count] = entry; - if (!entry.isBuf) allBuffers = false; - entry = entry.next; - count += 1; - } +Buffer.prototype.readUInt16BE = function readUInt16BE (offset, noAssert) { + if (!noAssert) checkOffset(offset, 2, this.length) + return (this[offset] << 8) | this[offset + 1] +} - buffer.allBuffers = allBuffers; - doWrite(stream, state, true, state.length, buffer, '', holder.finish); // doWrite is almost always async, defer these to save a bit of time - // as the hot path ends with doWrite +Buffer.prototype.readUInt32LE = function readUInt32LE (offset, noAssert) { + if (!noAssert) checkOffset(offset, 4, this.length) - state.pendingcb++; - state.lastBufferedRequest = null; + return ((this[offset]) | + (this[offset + 1] << 8) | + (this[offset + 2] << 16)) + + (this[offset + 3] * 0x1000000) +} - if (holder.next) { - state.corkedRequestsFree = holder.next; - holder.next = null; - } else { - state.corkedRequestsFree = new CorkedRequest(state); - } +Buffer.prototype.readUInt32BE = function readUInt32BE (offset, noAssert) { + if (!noAssert) checkOffset(offset, 4, this.length) - state.bufferedRequestCount = 0; - } else { - // Slow case, write chunks one-by-one - while (entry) { - var chunk = entry.chunk; - var encoding = entry.encoding; - var cb = entry.callback; - var len = state.objectMode ? 1 : chunk.length; - doWrite(stream, state, false, len, chunk, encoding, cb); - entry = entry.next; - state.bufferedRequestCount--; // if we didn't call the onwrite immediately, then - // it means that we need to wait until it does. - // also, that means that the chunk and cb are currently - // being processed, so move the buffer counter past them. + return (this[offset] * 0x1000000) + + ((this[offset + 1] << 16) | + (this[offset + 2] << 8) | + this[offset + 3]) +} - if (state.writing) { - break; - } - } +Buffer.prototype.readIntLE = function readIntLE (offset, byteLength, noAssert) { + offset = offset | 0 + byteLength = byteLength | 0 + if (!noAssert) checkOffset(offset, byteLength, this.length) - if (entry === null) state.lastBufferedRequest = null; + var val = this[offset] + var mul = 1 + var i = 0 + while (++i < byteLength && (mul *= 0x100)) { + val += this[offset + i] * mul } + mul *= 0x80 - state.bufferedRequest = entry; - state.bufferProcessing = false; + if (val >= mul) val -= Math.pow(2, 8 * byteLength) + + return val } -Writable.prototype._write = function (chunk, encoding, cb) { - cb(new Error('_write() is not implemented')); -}; +Buffer.prototype.readIntBE = function readIntBE (offset, byteLength, noAssert) { + offset = offset | 0 + byteLength = byteLength | 0 + if (!noAssert) checkOffset(offset, byteLength, this.length) -Writable.prototype._writev = null; + var i = byteLength + var mul = 1 + var val = this[offset + --i] + while (i > 0 && (mul *= 0x100)) { + val += this[offset + --i] * mul + } + mul *= 0x80 -Writable.prototype.end = function (chunk, encoding, cb) { - var state = this._writableState; + if (val >= mul) val -= Math.pow(2, 8 * byteLength) - if (typeof chunk === 'function') { - cb = chunk; - chunk = null; - encoding = null; - } else if (typeof encoding === 'function') { - cb = encoding; - encoding = null; - } + return val +} - if (chunk !== null && chunk !== undefined) this.write(chunk, encoding); // .end() fully uncorks +Buffer.prototype.readInt8 = function readInt8 (offset, noAssert) { + if (!noAssert) checkOffset(offset, 1, this.length) + if (!(this[offset] & 0x80)) return (this[offset]) + return ((0xff - this[offset] + 1) * -1) +} - if (state.corked) { - state.corked = 1; - this.uncork(); - } // ignore unnecessary end() calls. +Buffer.prototype.readInt16LE = function readInt16LE (offset, noAssert) { + if (!noAssert) checkOffset(offset, 2, this.length) + var val = this[offset] | (this[offset + 1] << 8) + return (val & 0x8000) ? val | 0xFFFF0000 : val +} +Buffer.prototype.readInt16BE = function readInt16BE (offset, noAssert) { + if (!noAssert) checkOffset(offset, 2, this.length) + var val = this[offset + 1] | (this[offset] << 8) + return (val & 0x8000) ? val | 0xFFFF0000 : val +} - if (!state.ending && !state.finished) endWritable(this, state, cb); -}; +Buffer.prototype.readInt32LE = function readInt32LE (offset, noAssert) { + if (!noAssert) checkOffset(offset, 4, this.length) -function needFinish(state) { - return state.ending && state.length === 0 && state.bufferedRequest === null && !state.finished && !state.writing; + return (this[offset]) | + (this[offset + 1] << 8) | + (this[offset + 2] << 16) | + (this[offset + 3] << 24) } -function callFinal(stream, state) { - stream._final(function (err) { - state.pendingcb--; +Buffer.prototype.readInt32BE = function readInt32BE (offset, noAssert) { + if (!noAssert) checkOffset(offset, 4, this.length) - if (err) { - stream.emit('error', err); - } + return (this[offset] << 24) | + (this[offset + 1] << 16) | + (this[offset + 2] << 8) | + (this[offset + 3]) +} - state.prefinished = true; - stream.emit('prefinish'); - finishMaybe(stream, state); - }); +Buffer.prototype.readFloatLE = function readFloatLE (offset, noAssert) { + if (!noAssert) checkOffset(offset, 4, this.length) + return ieee754.read(this, offset, true, 23, 4) } -function prefinish(stream, state) { - if (!state.prefinished && !state.finalCalled) { - if (typeof stream._final === 'function') { - state.pendingcb++; - state.finalCalled = true; - pna.nextTick(callFinal, stream, state); - } else { - state.prefinished = true; - stream.emit('prefinish'); - } - } +Buffer.prototype.readFloatBE = function readFloatBE (offset, noAssert) { + if (!noAssert) checkOffset(offset, 4, this.length) + return ieee754.read(this, offset, false, 23, 4) } -function finishMaybe(stream, state) { - var need = needFinish(state); +Buffer.prototype.readDoubleLE = function readDoubleLE (offset, noAssert) { + if (!noAssert) checkOffset(offset, 8, this.length) + return ieee754.read(this, offset, true, 52, 8) +} - if (need) { - prefinish(stream, state); +Buffer.prototype.readDoubleBE = function readDoubleBE (offset, noAssert) { + if (!noAssert) checkOffset(offset, 8, this.length) + return ieee754.read(this, offset, false, 52, 8) +} - if (state.pendingcb === 0) { - state.finished = true; - stream.emit('finish'); - } +function checkInt (buf, value, offset, ext, max, min) { + if (!Buffer.isBuffer(buf)) throw new TypeError('"buffer" argument must be a Buffer instance') + if (value > max || value < min) throw new RangeError('"value" argument is out of bounds') + if (offset + ext > buf.length) throw new RangeError('Index out of range') +} + +Buffer.prototype.writeUIntLE = function writeUIntLE (value, offset, byteLength, noAssert) { + value = +value + offset = offset | 0 + byteLength = byteLength | 0 + if (!noAssert) { + var maxBytes = Math.pow(2, 8 * byteLength) - 1 + checkInt(this, value, offset, byteLength, maxBytes, 0) } - return need; + var mul = 1 + var i = 0 + this[offset] = value & 0xFF + while (++i < byteLength && (mul *= 0x100)) { + this[offset + i] = (value / mul) & 0xFF + } + + return offset + byteLength } -function endWritable(stream, state, cb) { - state.ending = true; - finishMaybe(stream, state); +Buffer.prototype.writeUIntBE = function writeUIntBE (value, offset, byteLength, noAssert) { + value = +value + offset = offset | 0 + byteLength = byteLength | 0 + if (!noAssert) { + var maxBytes = Math.pow(2, 8 * byteLength) - 1 + checkInt(this, value, offset, byteLength, maxBytes, 0) + } - if (cb) { - if (state.finished) pna.nextTick(cb);else stream.once('finish', cb); + var i = byteLength - 1 + var mul = 1 + this[offset + i] = value & 0xFF + while (--i >= 0 && (mul *= 0x100)) { + this[offset + i] = (value / mul) & 0xFF } - state.ended = true; - stream.writable = false; + return offset + byteLength } -function onCorkedFinish(corkReq, state, err) { - var entry = corkReq.entry; - corkReq.entry = null; +Buffer.prototype.writeUInt8 = function writeUInt8 (value, offset, noAssert) { + value = +value + offset = offset | 0 + if (!noAssert) checkInt(this, value, offset, 1, 0xff, 0) + if (!Buffer.TYPED_ARRAY_SUPPORT) value = Math.floor(value) + this[offset] = (value & 0xff) + return offset + 1 +} - while (entry) { - var cb = entry.callback; - state.pendingcb--; - cb(err); - entry = entry.next; +function objectWriteUInt16 (buf, value, offset, littleEndian) { + if (value < 0) value = 0xffff + value + 1 + for (var i = 0, j = Math.min(buf.length - offset, 2); i < j; ++i) { + buf[offset + i] = (value & (0xff << (8 * (littleEndian ? i : 1 - i)))) >>> + (littleEndian ? i : 1 - i) * 8 } +} - if (state.corkedRequestsFree) { - state.corkedRequestsFree.next = corkReq; +Buffer.prototype.writeUInt16LE = function writeUInt16LE (value, offset, noAssert) { + value = +value + offset = offset | 0 + if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0) + if (Buffer.TYPED_ARRAY_SUPPORT) { + this[offset] = (value & 0xff) + this[offset + 1] = (value >>> 8) } else { - state.corkedRequestsFree = corkReq; + objectWriteUInt16(this, value, offset, true) } + return offset + 2 } -Object.defineProperty(Writable.prototype, 'destroyed', { - get: function () { - if (this._writableState === undefined) { - return false; - } - - return this._writableState.destroyed; - }, - set: function (value) { - // we ignore the value if the stream - // has not been initialized yet - if (!this._writableState) { - return; - } // backward compatibility, the user is explicitly - // managing destroyed +Buffer.prototype.writeUInt16BE = function writeUInt16BE (value, offset, noAssert) { + value = +value + offset = offset | 0 + if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0) + if (Buffer.TYPED_ARRAY_SUPPORT) { + this[offset] = (value >>> 8) + this[offset + 1] = (value & 0xff) + } else { + objectWriteUInt16(this, value, offset, false) + } + return offset + 2 +} +function objectWriteUInt32 (buf, value, offset, littleEndian) { + if (value < 0) value = 0xffffffff + value + 1 + for (var i = 0, j = Math.min(buf.length - offset, 4); i < j; ++i) { + buf[offset + i] = (value >>> (littleEndian ? i : 3 - i) * 8) & 0xff + } +} - this._writableState.destroyed = value; +Buffer.prototype.writeUInt32LE = function writeUInt32LE (value, offset, noAssert) { + value = +value + offset = offset | 0 + if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0) + if (Buffer.TYPED_ARRAY_SUPPORT) { + this[offset + 3] = (value >>> 24) + this[offset + 2] = (value >>> 16) + this[offset + 1] = (value >>> 8) + this[offset] = (value & 0xff) + } else { + objectWriteUInt32(this, value, offset, true) } -}); -Writable.prototype.destroy = destroyImpl.destroy; -Writable.prototype._undestroy = destroyImpl.undestroy; + return offset + 4 +} -Writable.prototype._destroy = function (err, cb) { - this.end(); - cb(err); -}; -},{"process-nextick-args":"Yj0v","core-util-is":"Q14w","inherits":"Bm0n","util-deprecate":"yM1o","./internal/streams/stream":"Q8A6","safe-buffer":"l6K0","./internal/streams/destroy":"avqi","./_stream_duplex":"wldW","process":"pBGv"}],"wldW":[function(require,module,exports) { -// Copyright Joyent, Inc. and other Node contributors. -// -// Permission is hereby granted, free of charge, to any person obtaining a -// copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to permit -// persons to whom the Software is furnished to do so, subject to the -// following conditions: -// -// The above copyright notice and this permission notice shall be included -// in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN -// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, -// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE -// USE OR OTHER DEALINGS IN THE SOFTWARE. +Buffer.prototype.writeUInt32BE = function writeUInt32BE (value, offset, noAssert) { + value = +value + offset = offset | 0 + if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0) + if (Buffer.TYPED_ARRAY_SUPPORT) { + this[offset] = (value >>> 24) + this[offset + 1] = (value >>> 16) + this[offset + 2] = (value >>> 8) + this[offset + 3] = (value & 0xff) + } else { + objectWriteUInt32(this, value, offset, false) + } + return offset + 4 +} -// a duplex stream is just a stream that is both readable and writable. -// Since JS doesn't have multiple prototypal inheritance, this class -// prototypally inherits from Readable, and then parasitically from -// Writable. +Buffer.prototype.writeIntLE = function writeIntLE (value, offset, byteLength, noAssert) { + value = +value + offset = offset | 0 + if (!noAssert) { + var limit = Math.pow(2, 8 * byteLength - 1) -'use strict'; + checkInt(this, value, offset, byteLength, limit - 1, -limit) + } -/**/ + var i = 0 + var mul = 1 + var sub = 0 + this[offset] = value & 0xFF + while (++i < byteLength && (mul *= 0x100)) { + if (value < 0 && sub === 0 && this[offset + i - 1] !== 0) { + sub = 1 + } + this[offset + i] = ((value / mul) >> 0) - sub & 0xFF + } -var pna = require('process-nextick-args'); -/**/ + return offset + byteLength +} -/**/ -var objectKeys = Object.keys || function (obj) { - var keys = []; - for (var key in obj) { - keys.push(key); - }return keys; -}; -/**/ +Buffer.prototype.writeIntBE = function writeIntBE (value, offset, byteLength, noAssert) { + value = +value + offset = offset | 0 + if (!noAssert) { + var limit = Math.pow(2, 8 * byteLength - 1) -module.exports = Duplex; + checkInt(this, value, offset, byteLength, limit - 1, -limit) + } -/**/ -var util = require('core-util-is'); -util.inherits = require('inherits'); -/**/ + var i = byteLength - 1 + var mul = 1 + var sub = 0 + this[offset + i] = value & 0xFF + while (--i >= 0 && (mul *= 0x100)) { + if (value < 0 && sub === 0 && this[offset + i + 1] !== 0) { + sub = 1 + } + this[offset + i] = ((value / mul) >> 0) - sub & 0xFF + } -var Readable = require('./_stream_readable'); -var Writable = require('./_stream_writable'); + return offset + byteLength +} -util.inherits(Duplex, Readable); +Buffer.prototype.writeInt8 = function writeInt8 (value, offset, noAssert) { + value = +value + offset = offset | 0 + if (!noAssert) checkInt(this, value, offset, 1, 0x7f, -0x80) + if (!Buffer.TYPED_ARRAY_SUPPORT) value = Math.floor(value) + if (value < 0) value = 0xff + value + 1 + this[offset] = (value & 0xff) + return offset + 1 +} -{ - // avoid scope creep, the keys array can then be collected - var keys = objectKeys(Writable.prototype); - for (var v = 0; v < keys.length; v++) { - var method = keys[v]; - if (!Duplex.prototype[method]) Duplex.prototype[method] = Writable.prototype[method]; +Buffer.prototype.writeInt16LE = function writeInt16LE (value, offset, noAssert) { + value = +value + offset = offset | 0 + if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000) + if (Buffer.TYPED_ARRAY_SUPPORT) { + this[offset] = (value & 0xff) + this[offset + 1] = (value >>> 8) + } else { + objectWriteUInt16(this, value, offset, true) } + return offset + 2 } -function Duplex(options) { - if (!(this instanceof Duplex)) return new Duplex(options); - - Readable.call(this, options); - Writable.call(this, options); - - if (options && options.readable === false) this.readable = false; - - if (options && options.writable === false) this.writable = false; - - this.allowHalfOpen = true; - if (options && options.allowHalfOpen === false) this.allowHalfOpen = false; +Buffer.prototype.writeInt16BE = function writeInt16BE (value, offset, noAssert) { + value = +value + offset = offset | 0 + if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000) + if (Buffer.TYPED_ARRAY_SUPPORT) { + this[offset] = (value >>> 8) + this[offset + 1] = (value & 0xff) + } else { + objectWriteUInt16(this, value, offset, false) + } + return offset + 2 +} - this.once('end', onend); +Buffer.prototype.writeInt32LE = function writeInt32LE (value, offset, noAssert) { + value = +value + offset = offset | 0 + if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000) + if (Buffer.TYPED_ARRAY_SUPPORT) { + this[offset] = (value & 0xff) + this[offset + 1] = (value >>> 8) + this[offset + 2] = (value >>> 16) + this[offset + 3] = (value >>> 24) + } else { + objectWriteUInt32(this, value, offset, true) + } + return offset + 4 } -Object.defineProperty(Duplex.prototype, 'writableHighWaterMark', { - // making it explicit this property is not enumerable - // because otherwise some prototype manipulation in - // userland will fail - enumerable: false, - get: function () { - return this._writableState.highWaterMark; +Buffer.prototype.writeInt32BE = function writeInt32BE (value, offset, noAssert) { + value = +value + offset = offset | 0 + if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000) + if (value < 0) value = 0xffffffff + value + 1 + if (Buffer.TYPED_ARRAY_SUPPORT) { + this[offset] = (value >>> 24) + this[offset + 1] = (value >>> 16) + this[offset + 2] = (value >>> 8) + this[offset + 3] = (value & 0xff) + } else { + objectWriteUInt32(this, value, offset, false) } -}); + return offset + 4 +} -// the no-half-open enforcer -function onend() { - // if we allow half-open state, or if the writable side ended, - // then we're ok. - if (this.allowHalfOpen || this._writableState.ended) return; +function checkIEEE754 (buf, value, offset, ext, max, min) { + if (offset + ext > buf.length) throw new RangeError('Index out of range') + if (offset < 0) throw new RangeError('Index out of range') +} - // no more data can be written. - // But allow more writes to happen in this tick. - pna.nextTick(onEndNT, this); +function writeFloat (buf, value, offset, littleEndian, noAssert) { + if (!noAssert) { + checkIEEE754(buf, value, offset, 4, 3.4028234663852886e+38, -3.4028234663852886e+38) + } + ieee754.write(buf, value, offset, littleEndian, 23, 4) + return offset + 4 } -function onEndNT(self) { - self.end(); +Buffer.prototype.writeFloatLE = function writeFloatLE (value, offset, noAssert) { + return writeFloat(this, value, offset, true, noAssert) } -Object.defineProperty(Duplex.prototype, 'destroyed', { - get: function () { - if (this._readableState === undefined || this._writableState === undefined) { - return false; - } - return this._readableState.destroyed && this._writableState.destroyed; - }, - set: function (value) { - // we ignore the value if the stream - // has not been initialized yet - if (this._readableState === undefined || this._writableState === undefined) { - return; - } +Buffer.prototype.writeFloatBE = function writeFloatBE (value, offset, noAssert) { + return writeFloat(this, value, offset, false, noAssert) +} - // backward compatibility, the user is explicitly - // managing destroyed - this._readableState.destroyed = value; - this._writableState.destroyed = value; +function writeDouble (buf, value, offset, littleEndian, noAssert) { + if (!noAssert) { + checkIEEE754(buf, value, offset, 8, 1.7976931348623157E+308, -1.7976931348623157E+308) } -}); - -Duplex.prototype._destroy = function (err, cb) { - this.push(null); - this.end(); + ieee754.write(buf, value, offset, littleEndian, 52, 8) + return offset + 8 +} - pna.nextTick(cb, err); -}; -},{"process-nextick-args":"Yj0v","core-util-is":"Q14w","inherits":"Bm0n","./_stream_readable":"Ogwm","./_stream_writable":"I0x5"}],"F7WD":[function(require,module,exports) { +Buffer.prototype.writeDoubleLE = function writeDoubleLE (value, offset, noAssert) { + return writeDouble(this, value, offset, true, noAssert) +} -// Copyright Joyent, Inc. and other Node contributors. -// -// Permission is hereby granted, free of charge, to any person obtaining a -// copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to permit -// persons to whom the Software is furnished to do so, subject to the -// following conditions: -// -// The above copyright notice and this permission notice shall be included -// in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN -// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, -// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE -// USE OR OTHER DEALINGS IN THE SOFTWARE. +Buffer.prototype.writeDoubleBE = function writeDoubleBE (value, offset, noAssert) { + return writeDouble(this, value, offset, false, noAssert) +} -'use strict'; +// copy(targetBuffer, targetStart=0, sourceStart=0, sourceEnd=buffer.length) +Buffer.prototype.copy = function copy (target, targetStart, start, end) { + if (!start) start = 0 + if (!end && end !== 0) end = this.length + if (targetStart >= target.length) targetStart = target.length + if (!targetStart) targetStart = 0 + if (end > 0 && end < start) end = start -/**/ + // Copy 0 bytes; we're done + if (end === start) return 0 + if (target.length === 0 || this.length === 0) return 0 -var Buffer = require('safe-buffer').Buffer; -/**/ + // Fatal error conditions + if (targetStart < 0) { + throw new RangeError('targetStart out of bounds') + } + if (start < 0 || start >= this.length) throw new RangeError('sourceStart out of bounds') + if (end < 0) throw new RangeError('sourceEnd out of bounds') -var isEncoding = Buffer.isEncoding || function (encoding) { - encoding = '' + encoding; - switch (encoding && encoding.toLowerCase()) { - case 'hex':case 'utf8':case 'utf-8':case 'ascii':case 'binary':case 'base64':case 'ucs2':case 'ucs-2':case 'utf16le':case 'utf-16le':case 'raw': - return true; - default: - return false; + // Are we oob? + if (end > this.length) end = this.length + if (target.length - targetStart < end - start) { + end = target.length - targetStart + start } -}; -function _normalizeEncoding(enc) { - if (!enc) return 'utf8'; - var retried; - while (true) { - switch (enc) { - case 'utf8': - case 'utf-8': - return 'utf8'; - case 'ucs2': - case 'ucs-2': - case 'utf16le': - case 'utf-16le': - return 'utf16le'; - case 'latin1': - case 'binary': - return 'latin1'; - case 'base64': - case 'ascii': - case 'hex': - return enc; - default: - if (retried) return; // undefined - enc = ('' + enc).toLowerCase(); - retried = true; + var len = end - start + var i + + if (this === target && start < targetStart && targetStart < end) { + // descending copy from end + for (i = len - 1; i >= 0; --i) { + target[i + targetStart] = this[i + start] + } + } else if (len < 1000 || !Buffer.TYPED_ARRAY_SUPPORT) { + // ascending copy from start + for (i = 0; i < len; ++i) { + target[i + targetStart] = this[i + start] } + } else { + Uint8Array.prototype.set.call( + target, + this.subarray(start, start + len), + targetStart + ) } -}; -// Do not cache `Buffer.isEncoding` when checking encoding names as some -// modules monkey-patch it to support additional encodings -function normalizeEncoding(enc) { - var nenc = _normalizeEncoding(enc); - if (typeof nenc !== 'string' && (Buffer.isEncoding === isEncoding || !isEncoding(enc))) throw new Error('Unknown encoding: ' + enc); - return nenc || enc; + return len } -// StringDecoder provides an interface for efficiently splitting a series of -// buffers into a series of JS strings without breaking apart multi-byte -// characters. -exports.StringDecoder = StringDecoder; -function StringDecoder(encoding) { - this.encoding = normalizeEncoding(encoding); - var nb; - switch (this.encoding) { - case 'utf16le': - this.text = utf16Text; - this.end = utf16End; - nb = 4; - break; - case 'utf8': - this.fillLast = utf8FillLast; - nb = 4; - break; - case 'base64': - this.text = base64Text; - this.end = base64End; - nb = 3; - break; - default: - this.write = simpleWrite; - this.end = simpleEnd; - return; +// Usage: +// buffer.fill(number[, offset[, end]]) +// buffer.fill(buffer[, offset[, end]]) +// buffer.fill(string[, offset[, end]][, encoding]) +Buffer.prototype.fill = function fill (val, start, end, encoding) { + // Handle string cases: + if (typeof val === 'string') { + if (typeof start === 'string') { + encoding = start + start = 0 + end = this.length + } else if (typeof end === 'string') { + encoding = end + end = this.length + } + if (val.length === 1) { + var code = val.charCodeAt(0) + if (code < 256) { + val = code + } + } + if (encoding !== undefined && typeof encoding !== 'string') { + throw new TypeError('encoding must be a string') + } + if (typeof encoding === 'string' && !Buffer.isEncoding(encoding)) { + throw new TypeError('Unknown encoding: ' + encoding) + } + } else if (typeof val === 'number') { + val = val & 255 } - this.lastNeed = 0; - this.lastTotal = 0; - this.lastChar = Buffer.allocUnsafe(nb); -} -StringDecoder.prototype.write = function (buf) { - if (buf.length === 0) return ''; - var r; - var i; - if (this.lastNeed) { - r = this.fillLast(buf); - if (r === undefined) return ''; - i = this.lastNeed; - this.lastNeed = 0; - } else { - i = 0; + // Invalid ranges are not set to a default, so can range check early. + if (start < 0 || this.length < start || this.length < end) { + throw new RangeError('Out of range index') } - if (i < buf.length) return r ? r + this.text(buf, i) : this.text(buf, i); - return r || ''; -}; - -StringDecoder.prototype.end = utf8End; - -// Returns only complete characters in a Buffer -StringDecoder.prototype.text = utf8Text; -// Attempts to complete a partial non-UTF-8 character using bytes from a Buffer -StringDecoder.prototype.fillLast = function (buf) { - if (this.lastNeed <= buf.length) { - buf.copy(this.lastChar, this.lastTotal - this.lastNeed, 0, this.lastNeed); - return this.lastChar.toString(this.encoding, 0, this.lastTotal); + if (end <= start) { + return this } - buf.copy(this.lastChar, this.lastTotal - this.lastNeed, 0, buf.length); - this.lastNeed -= buf.length; -}; -// Checks the type of a UTF-8 byte, whether it's ASCII, a leading byte, or a -// continuation byte. If an invalid byte is detected, -2 is returned. -function utf8CheckByte(byte) { - if (byte <= 0x7F) return 0;else if (byte >> 5 === 0x06) return 2;else if (byte >> 4 === 0x0E) return 3;else if (byte >> 3 === 0x1E) return 4; - return byte >> 6 === 0x02 ? -1 : -2; -} + start = start >>> 0 + end = end === undefined ? this.length : end >>> 0 -// Checks at most 3 bytes at the end of a Buffer in order to detect an -// incomplete multi-byte UTF-8 character. The total number of bytes (2, 3, or 4) -// needed to complete the UTF-8 character (if applicable) are returned. -function utf8CheckIncomplete(self, buf, i) { - var j = buf.length - 1; - if (j < i) return 0; - var nb = utf8CheckByte(buf[j]); - if (nb >= 0) { - if (nb > 0) self.lastNeed = nb - 1; - return nb; - } - if (--j < i || nb === -2) return 0; - nb = utf8CheckByte(buf[j]); - if (nb >= 0) { - if (nb > 0) self.lastNeed = nb - 2; - return nb; - } - if (--j < i || nb === -2) return 0; - nb = utf8CheckByte(buf[j]); - if (nb >= 0) { - if (nb > 0) { - if (nb === 2) nb = 0;else self.lastNeed = nb - 3; - } - return nb; - } - return 0; -} + if (!val) val = 0 -// Validates as many continuation bytes for a multi-byte UTF-8 character as -// needed or are available. If we see a non-continuation byte where we expect -// one, we "replace" the validated continuation bytes we've seen so far with -// a single UTF-8 replacement character ('\ufffd'), to match v8's UTF-8 decoding -// behavior. The continuation byte check is included three times in the case -// where all of the continuation bytes for a character exist in the same buffer. -// It is also done this way as a slight performance increase instead of using a -// loop. -function utf8CheckExtraBytes(self, buf, p) { - if ((buf[0] & 0xC0) !== 0x80) { - self.lastNeed = 0; - return '\ufffd'; - } - if (self.lastNeed > 1 && buf.length > 1) { - if ((buf[1] & 0xC0) !== 0x80) { - self.lastNeed = 1; - return '\ufffd'; + var i + if (typeof val === 'number') { + for (i = start; i < end; ++i) { + this[i] = val } - if (self.lastNeed > 2 && buf.length > 2) { - if ((buf[2] & 0xC0) !== 0x80) { - self.lastNeed = 2; - return '\ufffd'; - } + } else { + var bytes = Buffer.isBuffer(val) + ? val + : utf8ToBytes(new Buffer(val, encoding).toString()) + var len = bytes.length + for (i = 0; i < end - start; ++i) { + this[i + start] = bytes[i % len] } } -} -// Attempts to complete a multi-byte UTF-8 character using bytes from a Buffer. -function utf8FillLast(buf) { - var p = this.lastTotal - this.lastNeed; - var r = utf8CheckExtraBytes(this, buf, p); - if (r !== undefined) return r; - if (this.lastNeed <= buf.length) { - buf.copy(this.lastChar, p, 0, this.lastNeed); - return this.lastChar.toString(this.encoding, 0, this.lastTotal); - } - buf.copy(this.lastChar, p, 0, buf.length); - this.lastNeed -= buf.length; + return this } -// Returns all complete UTF-8 characters in a Buffer. If the Buffer ended on a -// partial character, the character's bytes are buffered until the required -// number of bytes are available. -function utf8Text(buf, i) { - var total = utf8CheckIncomplete(this, buf, i); - if (!this.lastNeed) return buf.toString('utf8', i); - this.lastTotal = total; - var end = buf.length - (total - this.lastNeed); - buf.copy(this.lastChar, 0, end); - return buf.toString('utf8', i, end); -} +// HELPER FUNCTIONS +// ================ -// For UTF-8, a replacement character is added when ending on a partial -// character. -function utf8End(buf) { - var r = buf && buf.length ? this.write(buf) : ''; - if (this.lastNeed) return r + '\ufffd'; - return r; -} +var INVALID_BASE64_RE = /[^+\/0-9A-Za-z-_]/g -// UTF-16LE typically needs two bytes per character, but even if we have an even -// number of bytes available, we need to check if we end on a leading/high -// surrogate. In that case, we need to wait for the next two bytes in order to -// decode the last character properly. -function utf16Text(buf, i) { - if ((buf.length - i) % 2 === 0) { - var r = buf.toString('utf16le', i); - if (r) { - var c = r.charCodeAt(r.length - 1); - if (c >= 0xD800 && c <= 0xDBFF) { - this.lastNeed = 2; - this.lastTotal = 4; - this.lastChar[0] = buf[buf.length - 2]; - this.lastChar[1] = buf[buf.length - 1]; - return r.slice(0, -1); - } - } - return r; +function base64clean (str) { + // Node strips out invalid characters like \n and \t from the string, base64-js does not + str = stringtrim(str).replace(INVALID_BASE64_RE, '') + // Node converts strings with length < 2 to '' + if (str.length < 2) return '' + // Node allows for non-padded base64 strings (missing trailing ===), base64-js does not + while (str.length % 4 !== 0) { + str = str + '=' } - this.lastNeed = 1; - this.lastTotal = 2; - this.lastChar[0] = buf[buf.length - 1]; - return buf.toString('utf16le', i, buf.length - 1); + return str } -// For UTF-16LE we do not explicitly append special replacement characters if we -// end on a partial character, we simply let v8 handle that. -function utf16End(buf) { - var r = buf && buf.length ? this.write(buf) : ''; - if (this.lastNeed) { - var end = this.lastTotal - this.lastNeed; - return r + this.lastChar.toString('utf16le', 0, end); - } - return r; +function stringtrim (str) { + if (str.trim) return str.trim() + return str.replace(/^\s+|\s+$/g, '') } -function base64Text(buf, i) { - var n = (buf.length - i) % 3; - if (n === 0) return buf.toString('base64', i); - this.lastNeed = 3 - n; - this.lastTotal = 3; - if (n === 1) { - this.lastChar[0] = buf[buf.length - 1]; - } else { - this.lastChar[0] = buf[buf.length - 2]; - this.lastChar[1] = buf[buf.length - 1]; - } - return buf.toString('base64', i, buf.length - n); -} - -function base64End(buf) { - var r = buf && buf.length ? this.write(buf) : ''; - if (this.lastNeed) return r + this.lastChar.toString('base64', 0, 3 - this.lastNeed); - return r; +function toHex (n) { + if (n < 16) return '0' + n.toString(16) + return n.toString(16) } -// Pass bytes on through for single-byte encodings (e.g. ascii, latin1, hex) -function simpleWrite(buf) { - return buf.toString(this.encoding); -} +function utf8ToBytes (string, units) { + units = units || Infinity + var codePoint + var length = string.length + var leadSurrogate = null + var bytes = [] -function simpleEnd(buf) { - return buf && buf.length ? this.write(buf) : ''; -} -},{"safe-buffer":"l6K0"}],"Ogwm":[function(require,module,exports) { + for (var i = 0; i < length; ++i) { + codePoint = string.charCodeAt(i) -var global = arguments[3]; -var process = require("process"); -// Copyright Joyent, Inc. and other Node contributors. -// -// Permission is hereby granted, free of charge, to any person obtaining a -// copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to permit -// persons to whom the Software is furnished to do so, subject to the -// following conditions: -// -// The above copyright notice and this permission notice shall be included -// in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN -// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, -// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE -// USE OR OTHER DEALINGS IN THE SOFTWARE. + // is surrogate component + if (codePoint > 0xD7FF && codePoint < 0xE000) { + // last char was a lead + if (!leadSurrogate) { + // no lead yet + if (codePoint > 0xDBFF) { + // unexpected trail + if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD) + continue + } else if (i + 1 === length) { + // unpaired lead + if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD) + continue + } -'use strict'; + // valid lead + leadSurrogate = codePoint -/**/ + continue + } -var pna = require('process-nextick-args'); -/**/ + // 2 leads in a row + if (codePoint < 0xDC00) { + if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD) + leadSurrogate = codePoint + continue + } -module.exports = Readable; + // valid surrogate pair + codePoint = (leadSurrogate - 0xD800 << 10 | codePoint - 0xDC00) + 0x10000 + } else if (leadSurrogate) { + // valid bmp char, but last char was a lead + if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD) + } -/**/ -var isArray = require('isarray'); -/**/ + leadSurrogate = null -/**/ -var Duplex; -/**/ + // encode utf8 + if (codePoint < 0x80) { + if ((units -= 1) < 0) break + bytes.push(codePoint) + } else if (codePoint < 0x800) { + if ((units -= 2) < 0) break + bytes.push( + codePoint >> 0x6 | 0xC0, + codePoint & 0x3F | 0x80 + ) + } else if (codePoint < 0x10000) { + if ((units -= 3) < 0) break + bytes.push( + codePoint >> 0xC | 0xE0, + codePoint >> 0x6 & 0x3F | 0x80, + codePoint & 0x3F | 0x80 + ) + } else if (codePoint < 0x110000) { + if ((units -= 4) < 0) break + bytes.push( + codePoint >> 0x12 | 0xF0, + codePoint >> 0xC & 0x3F | 0x80, + codePoint >> 0x6 & 0x3F | 0x80, + codePoint & 0x3F | 0x80 + ) + } else { + throw new Error('Invalid code point') + } + } -Readable.ReadableState = ReadableState; + return bytes +} -/**/ -var EE = require('events').EventEmitter; +function asciiToBytes (str) { + var byteArray = [] + for (var i = 0; i < str.length; ++i) { + // Node's code seems to be doing this and not & 0x7F.. + byteArray.push(str.charCodeAt(i) & 0xFF) + } + return byteArray +} -var EElistenerCount = function (emitter, type) { - return emitter.listeners(type).length; -}; -/**/ +function utf16leToBytes (str, units) { + var c, hi, lo + var byteArray = [] + for (var i = 0; i < str.length; ++i) { + if ((units -= 2) < 0) break -/**/ -var Stream = require('./internal/streams/stream'); -/**/ + c = str.charCodeAt(i) + hi = c >> 8 + lo = c % 256 + byteArray.push(lo) + byteArray.push(hi) + } -/**/ + return byteArray +} -var Buffer = require('safe-buffer').Buffer; -var OurUint8Array = global.Uint8Array || function () {}; -function _uint8ArrayToBuffer(chunk) { - return Buffer.from(chunk); +function base64ToBytes (str) { + return base64.toByteArray(base64clean(str)) } -function _isUint8Array(obj) { - return Buffer.isBuffer(obj) || obj instanceof OurUint8Array; + +function blitBuffer (src, dst, offset, length) { + for (var i = 0; i < length; ++i) { + if ((i + offset >= dst.length) || (i >= src.length)) break + dst[i + offset] = src[i] + } + return i } -/**/ +function isnan (val) { + return val !== val // eslint-disable-line no-self-compare +} -/**/ -var util = require('core-util-is'); -util.inherits = require('inherits'); -/**/ +},{"base64-js":"yh9p","ieee754":"JgNJ","isarray":"REa7","buffer":"dskh"}],"hgKi":[function(require,module,exports) { +var Buffer = require("buffer").Buffer; +"use strict"; -/**/ -var debugUtil = require('util'); -var debug = void 0; -if (debugUtil && debugUtil.debuglog) { - debug = debugUtil.debuglog('stream'); -} else { - debug = function () {}; -} -/**/ +Object.defineProperty(exports, "__esModule", { + value: true +}); -var BufferList = require('./internal/streams/BufferList'); -var destroyImpl = require('./internal/streams/destroy'); -var StringDecoder; +function padString(input) { + var segmentLength = 4; + var stringLength = input.length; + var diff = stringLength % segmentLength; -util.inherits(Readable, Stream); + if (!diff) { + return input; + } -var kProxyEvents = ['error', 'close', 'destroy', 'pause', 'resume']; + var position = stringLength; + var padLength = segmentLength - diff; + var paddedStringLength = stringLength + padLength; + var buffer = Buffer.alloc(paddedStringLength); + buffer.write(input); -function prependListener(emitter, event, fn) { - // Sadly this is not cacheable as some libraries bundle their own - // event emitter implementation with them. - if (typeof emitter.prependListener === 'function') return emitter.prependListener(event, fn); + while (padLength--) { + buffer.write("=", position++); + } - // This is a hack to make sure that our error handler is attached before any - // userland ones. NEVER DO THIS. This is here only because this code needs - // to continue to work with older versions of Node.js that do not include - // the prependListener() method. The goal is to eventually remove this hack. - if (!emitter._events || !emitter._events[event]) emitter.on(event, fn);else if (isArray(emitter._events[event])) emitter._events[event].unshift(fn);else emitter._events[event] = [fn, emitter._events[event]]; + return buffer.toString(); } -function ReadableState(options, stream) { - Duplex = Duplex || require('./_stream_duplex'); +exports.default = padString; +},{"buffer":"dskh"}],"oNlT":[function(require,module,exports) { +var Buffer = require("buffer").Buffer; +"use strict"; - options = options || {}; +Object.defineProperty(exports, "__esModule", { + value: true +}); - // Duplex streams are both readable and writable, but share - // the same options object. - // However, some cases require setting options to different - // values for the readable and the writable sides of the duplex stream. - // These options can be provided separately as readableXXX and writableXXX. - var isDuplex = stream instanceof Duplex; +var pad_string_1 = require("./pad-string"); - // object stream flag. Used to make read(n) ignore n and to - // make all the buffer merging and length checks go away - this.objectMode = !!options.objectMode; +function encode(input, encoding) { + if (encoding === void 0) { + encoding = "utf8"; + } - if (isDuplex) this.objectMode = this.objectMode || !!options.readableObjectMode; + if (Buffer.isBuffer(input)) { + return fromBase64(input.toString("base64")); + } - // the point at which it stops calling _read() to fill the buffer - // Note: 0 is a valid value, means "don't call _read preemptively ever" - var hwm = options.highWaterMark; - var readableHwm = options.readableHighWaterMark; - var defaultHwm = this.objectMode ? 16 : 16 * 1024; + return fromBase64(Buffer.from(input, encoding).toString("base64")); +} - if (hwm || hwm === 0) this.highWaterMark = hwm;else if (isDuplex && (readableHwm || readableHwm === 0)) this.highWaterMark = readableHwm;else this.highWaterMark = defaultHwm; +; - // cast to ints. - this.highWaterMark = Math.floor(this.highWaterMark); +function decode(base64url, encoding) { + if (encoding === void 0) { + encoding = "utf8"; + } - // A linked list is used to store data chunks instead of an array because the - // linked list can remove elements from the beginning faster than - // array.shift() - this.buffer = new BufferList(); - this.length = 0; - this.pipes = null; - this.pipesCount = 0; - this.flowing = null; - this.ended = false; - this.endEmitted = false; - this.reading = false; + return Buffer.from(toBase64(base64url), "base64").toString(encoding); +} - // a flag to be able to tell if the event 'readable'/'data' is emitted - // immediately, or on a later tick. We set this to true at first, because - // any actions that shouldn't happen until "later" should generally also - // not happen before the first read call. - this.sync = true; +function toBase64(base64url) { + base64url = base64url.toString(); + return pad_string_1.default(base64url).replace(/\-/g, "+").replace(/_/g, "/"); +} - // whenever we return null, then we set a flag to say - // that we're awaiting a 'readable' event emission. - this.needReadable = false; - this.emittedReadable = false; - this.readableListening = false; - this.resumeScheduled = false; +function fromBase64(base64) { + return base64.replace(/=/g, "").replace(/\+/g, "-").replace(/\//g, "_"); +} - // has it been destroyed - this.destroyed = false; +function toBuffer(base64url) { + return Buffer.from(toBase64(base64url), "base64"); +} - // Crypto is kind of old and crusty. Historically, its default string - // encoding is 'binary' so we have to make this configurable. - // Everything else in the universe uses 'utf8', though. - this.defaultEncoding = options.defaultEncoding || 'utf8'; +var base64url = encode; +base64url.encode = encode; +base64url.decode = decode; +base64url.toBase64 = toBase64; +base64url.fromBase64 = fromBase64; +base64url.toBuffer = toBuffer; +exports.default = base64url; +},{"./pad-string":"hgKi","buffer":"dskh"}],"XVTP":[function(require,module,exports) { +module.exports = require('./dist/base64url').default; +module.exports.default = module.exports; +},{"./dist/base64url":"oNlT"}],"bNi7":[function(require,module,exports) { +module.exports = { + "_args": [ + [ + "elliptic@6.5.0", + "/Users/Sanchay/Work/js-sdk" + ] + ], + "_from": "elliptic@6.5.0", + "_id": "elliptic@6.5.0", + "_inBundle": false, + "_integrity": "sha512-eFOJTMyCYb7xtE/caJ6JJu+bhi67WCYNbkGSknu20pmM8Ke/bqOfdnZWxyoGN26JgfxTbXrsCkEw4KheCT/KGg==", + "_location": "/elliptic", + "_phantomChildren": {}, + "_requested": { + "type": "version", + "registry": true, + "raw": "elliptic@6.5.0", + "name": "elliptic", + "escapedName": "elliptic", + "rawSpec": "6.5.0", + "saveSpec": null, + "fetchSpec": "6.5.0" + }, + "_requiredBy": [ + "/blockstack", + "/blockstack/jsontokens", + "/browserify-sign", + "/create-ecdh", + "/jsontokens", + "/jsontokens/key-encoder", + "/key-encoder", + "/tiny-secp256k1" + ], + "_resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.0.tgz", + "_spec": "6.5.0", + "_where": "/Users/Sanchay/Work/js-sdk", + "author": { + "name": "Fedor Indutny", + "email": "fedor@indutny.com" + }, + "bugs": { + "url": "https://github.com/indutny/elliptic/issues" + }, + "dependencies": { + "bn.js": "^4.4.0", + "brorand": "^1.0.1", + "hash.js": "^1.0.0", + "hmac-drbg": "^1.0.0", + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0", + "minimalistic-crypto-utils": "^1.0.0" + }, + "description": "EC cryptography", + "devDependencies": { + "brfs": "^1.4.3", + "coveralls": "^2.11.3", + "grunt": "^0.4.5", + "grunt-browserify": "^5.0.0", + "grunt-cli": "^1.2.0", + "grunt-contrib-connect": "^1.0.0", + "grunt-contrib-copy": "^1.0.0", + "grunt-contrib-uglify": "^1.0.1", + "grunt-mocha-istanbul": "^3.0.1", + "grunt-saucelabs": "^8.6.2", + "istanbul": "^0.4.2", + "jscs": "^2.9.0", + "jshint": "^2.6.0", + "mocha": "^2.1.0" + }, + "files": [ + "lib" + ], + "homepage": "https://github.com/indutny/elliptic", + "keywords": [ + "EC", + "Elliptic", + "curve", + "Cryptography" + ], + "license": "MIT", + "main": "lib/elliptic.js", + "name": "elliptic", + "repository": { + "type": "git", + "url": "git+ssh://git@github.com/indutny/elliptic.git" + }, + "scripts": { + "jscs": "jscs benchmarks/*.js lib/*.js lib/**/*.js lib/**/**/*.js test/index.js", + "jshint": "jscs benchmarks/*.js lib/*.js lib/**/*.js lib/**/**/*.js test/index.js", + "lint": "npm run jscs && npm run jshint", + "test": "npm run lint && npm run unit", + "unit": "istanbul test _mocha --reporter=spec test/index.js", + "version": "grunt dist && git add dist/" + }, + "version": "6.5.0" +} +; +},{}],"rDCW":[function(require,module,exports) { - // the number of writers that are awaiting a drain event in .pipe()s - this.awaitDrain = 0; +},{}],"BOxy":[function(require,module,exports) { +var Buffer = require("buffer").Buffer; +(function (module, exports) { + 'use strict'; - // if true, a maybeReadMore has been scheduled - this.readingMore = false; + // Utils + function assert (val, msg) { + if (!val) throw new Error(msg || 'Assertion failed'); + } - this.decoder = null; - this.encoding = null; - if (options.encoding) { - if (!StringDecoder) StringDecoder = require('string_decoder/').StringDecoder; - this.decoder = new StringDecoder(options.encoding); - this.encoding = options.encoding; + // Could use `inherits` module, but don't want to move from single file + // architecture yet. + function inherits (ctor, superCtor) { + ctor.super_ = superCtor; + var TempCtor = function () {}; + TempCtor.prototype = superCtor.prototype; + ctor.prototype = new TempCtor(); + ctor.prototype.constructor = ctor; } -} -function Readable(options) { - Duplex = Duplex || require('./_stream_duplex'); + // BN - if (!(this instanceof Readable)) return new Readable(options); + function BN (number, base, endian) { + if (BN.isBN(number)) { + return number; + } - this._readableState = new ReadableState(options, this); + this.negative = 0; + this.words = null; + this.length = 0; - // legacy - this.readable = true; + // Reduction context + this.red = null; - if (options) { - if (typeof options.read === 'function') this._read = options.read; + if (number !== null) { + if (base === 'le' || base === 'be') { + endian = base; + base = 10; + } - if (typeof options.destroy === 'function') this._destroy = options.destroy; + this._init(number || 0, base || 10, endian || 'be'); + } + } + if (typeof module === 'object') { + module.exports = BN; + } else { + exports.BN = BN; } - Stream.call(this); -} + BN.BN = BN; + BN.wordSize = 26; -Object.defineProperty(Readable.prototype, 'destroyed', { - get: function () { - if (this._readableState === undefined) { - return false; - } - return this._readableState.destroyed; - }, - set: function (value) { - // we ignore the value if the stream - // has not been initialized yet - if (!this._readableState) { - return; + var Buffer; + try { + Buffer = require('buffer').Buffer; + } catch (e) { + } + + BN.isBN = function isBN (num) { + if (num instanceof BN) { + return true; } - // backward compatibility, the user is explicitly - // managing destroyed - this._readableState.destroyed = value; - } -}); + return num !== null && typeof num === 'object' && + num.constructor.wordSize === BN.wordSize && Array.isArray(num.words); + }; -Readable.prototype.destroy = destroyImpl.destroy; -Readable.prototype._undestroy = destroyImpl.undestroy; -Readable.prototype._destroy = function (err, cb) { - this.push(null); - cb(err); -}; + BN.max = function max (left, right) { + if (left.cmp(right) > 0) return left; + return right; + }; -// Manually shove something into the read() buffer. -// This returns true if the highWaterMark has not been hit yet, -// similar to how Writable.write() returns true if you should -// write() some more. -Readable.prototype.push = function (chunk, encoding) { - var state = this._readableState; - var skipChunkCheck; + BN.min = function min (left, right) { + if (left.cmp(right) < 0) return left; + return right; + }; - if (!state.objectMode) { - if (typeof chunk === 'string') { - encoding = encoding || state.defaultEncoding; - if (encoding !== state.encoding) { - chunk = Buffer.from(chunk, encoding); - encoding = ''; - } - skipChunkCheck = true; + BN.prototype._init = function init (number, base, endian) { + if (typeof number === 'number') { + return this._initNumber(number, base, endian); } - } else { - skipChunkCheck = true; - } - - return readableAddChunk(this, chunk, encoding, false, skipChunkCheck); -}; - -// Unshift should *always* be something directly out of read() -Readable.prototype.unshift = function (chunk) { - return readableAddChunk(this, chunk, null, true, false); -}; - -function readableAddChunk(stream, chunk, encoding, addToFront, skipChunkCheck) { - var state = stream._readableState; - if (chunk === null) { - state.reading = false; - onEofChunk(stream, state); - } else { - var er; - if (!skipChunkCheck) er = chunkInvalid(state, chunk); - if (er) { - stream.emit('error', er); - } else if (state.objectMode || chunk && chunk.length > 0) { - if (typeof chunk !== 'string' && !state.objectMode && Object.getPrototypeOf(chunk) !== Buffer.prototype) { - chunk = _uint8ArrayToBuffer(chunk); - } - if (addToFront) { - if (state.endEmitted) stream.emit('error', new Error('stream.unshift() after end event'));else addChunk(stream, state, chunk, true); - } else if (state.ended) { - stream.emit('error', new Error('stream.push() after EOF')); - } else { - state.reading = false; - if (state.decoder && !encoding) { - chunk = state.decoder.write(chunk); - if (state.objectMode || chunk.length !== 0) addChunk(stream, state, chunk, false);else maybeReadMore(stream, state); - } else { - addChunk(stream, state, chunk, false); - } - } - } else if (!addToFront) { - state.reading = false; + if (typeof number === 'object') { + return this._initArray(number, base, endian); } - } - return needMoreData(state); -} + if (base === 'hex') { + base = 16; + } + assert(base === (base | 0) && base >= 2 && base <= 36); -function addChunk(stream, state, chunk, addToFront) { - if (state.flowing && state.length === 0 && !state.sync) { - stream.emit('data', chunk); - stream.read(0); - } else { - // update the buffer info. - state.length += state.objectMode ? 1 : chunk.length; - if (addToFront) state.buffer.unshift(chunk);else state.buffer.push(chunk); + number = number.toString().replace(/\s+/g, ''); + var start = 0; + if (number[0] === '-') { + start++; + } - if (state.needReadable) emitReadable(stream); - } - maybeReadMore(stream, state); -} + if (base === 16) { + this._parseHex(number, start); + } else { + this._parseBase(number, base, start); + } -function chunkInvalid(state, chunk) { - var er; - if (!_isUint8Array(chunk) && typeof chunk !== 'string' && chunk !== undefined && !state.objectMode) { - er = new TypeError('Invalid non-string/buffer chunk'); - } - return er; -} + if (number[0] === '-') { + this.negative = 1; + } -// if it's past the high water mark, we can push in some more. -// Also, if we have no data yet, we can stand some -// more bytes. This is to work around cases where hwm=0, -// such as the repl. Also, if the push() triggered a -// readable event, and the user called read(largeNumber) such that -// needReadable was set, then we ought to push more, so that another -// 'readable' event will be triggered. -function needMoreData(state) { - return !state.ended && (state.needReadable || state.length < state.highWaterMark || state.length === 0); -} + this.strip(); -Readable.prototype.isPaused = function () { - return this._readableState.flowing === false; -}; + if (endian !== 'le') return; -// backwards compatibility. -Readable.prototype.setEncoding = function (enc) { - if (!StringDecoder) StringDecoder = require('string_decoder/').StringDecoder; - this._readableState.decoder = new StringDecoder(enc); - this._readableState.encoding = enc; - return this; -}; + this._initArray(this.toArray(), base, endian); + }; -// Don't raise the hwm > 8MB -var MAX_HWM = 0x800000; -function computeNewHighWaterMark(n) { - if (n >= MAX_HWM) { - n = MAX_HWM; - } else { - // Get the next highest power of 2 to prevent increasing hwm excessively in - // tiny amounts - n--; - n |= n >>> 1; - n |= n >>> 2; - n |= n >>> 4; - n |= n >>> 8; - n |= n >>> 16; - n++; - } - return n; -} + BN.prototype._initNumber = function _initNumber (number, base, endian) { + if (number < 0) { + this.negative = 1; + number = -number; + } + if (number < 0x4000000) { + this.words = [ number & 0x3ffffff ]; + this.length = 1; + } else if (number < 0x10000000000000) { + this.words = [ + number & 0x3ffffff, + (number / 0x4000000) & 0x3ffffff + ]; + this.length = 2; + } else { + assert(number < 0x20000000000000); // 2 ^ 53 (unsafe) + this.words = [ + number & 0x3ffffff, + (number / 0x4000000) & 0x3ffffff, + 1 + ]; + this.length = 3; + } -// This function is designed to be inlinable, so please take care when making -// changes to the function body. -function howMuchToRead(n, state) { - if (n <= 0 || state.length === 0 && state.ended) return 0; - if (state.objectMode) return 1; - if (n !== n) { - // Only flow one buffer at a time - if (state.flowing && state.length) return state.buffer.head.data.length;else return state.length; - } - // If we're asking for more than the current hwm, then raise the hwm. - if (n > state.highWaterMark) state.highWaterMark = computeNewHighWaterMark(n); - if (n <= state.length) return n; - // Don't have enough - if (!state.ended) { - state.needReadable = true; - return 0; - } - return state.length; -} + if (endian !== 'le') return; -// you can override either this method, or the async _read(n) below. -Readable.prototype.read = function (n) { - debug('read', n); - n = parseInt(n, 10); - var state = this._readableState; - var nOrig = n; + // Reverse the bytes + this._initArray(this.toArray(), base, endian); + }; - if (n !== 0) state.emittedReadable = false; + BN.prototype._initArray = function _initArray (number, base, endian) { + // Perhaps a Uint8Array + assert(typeof number.length === 'number'); + if (number.length <= 0) { + this.words = [ 0 ]; + this.length = 1; + return this; + } - // if we're doing read(0) to trigger a readable event, but we - // already have a bunch of data in the buffer, then just trigger - // the 'readable' event and move on. - if (n === 0 && state.needReadable && (state.length >= state.highWaterMark || state.ended)) { - debug('read: emitReadable', state.length, state.ended); - if (state.length === 0 && state.ended) endReadable(this);else emitReadable(this); - return null; - } + this.length = Math.ceil(number.length / 3); + this.words = new Array(this.length); + for (var i = 0; i < this.length; i++) { + this.words[i] = 0; + } - n = howMuchToRead(n, state); + var j, w; + var off = 0; + if (endian === 'be') { + for (i = number.length - 1, j = 0; i >= 0; i -= 3) { + w = number[i] | (number[i - 1] << 8) | (number[i - 2] << 16); + this.words[j] |= (w << off) & 0x3ffffff; + this.words[j + 1] = (w >>> (26 - off)) & 0x3ffffff; + off += 24; + if (off >= 26) { + off -= 26; + j++; + } + } + } else if (endian === 'le') { + for (i = 0, j = 0; i < number.length; i += 3) { + w = number[i] | (number[i + 1] << 8) | (number[i + 2] << 16); + this.words[j] |= (w << off) & 0x3ffffff; + this.words[j + 1] = (w >>> (26 - off)) & 0x3ffffff; + off += 24; + if (off >= 26) { + off -= 26; + j++; + } + } + } + return this.strip(); + }; - // if we've ended, and we're now clear, then finish it up. - if (n === 0 && state.ended) { - if (state.length === 0) endReadable(this); - return null; - } + function parseHex (str, start, end) { + var r = 0; + var len = Math.min(str.length, end); + for (var i = start; i < len; i++) { + var c = str.charCodeAt(i) - 48; - // All the actual chunk generation logic needs to be - // *below* the call to _read. The reason is that in certain - // synthetic stream cases, such as passthrough streams, _read - // may be a completely synchronous operation which may change - // the state of the read buffer, providing enough data when - // before there was *not* enough. - // - // So, the steps are: - // 1. Figure out what the state of things will be after we do - // a read from the buffer. - // - // 2. If that resulting state will trigger a _read, then call _read. - // Note that this may be asynchronous, or synchronous. Yes, it is - // deeply ugly to write APIs this way, but that still doesn't mean - // that the Readable class should behave improperly, as streams are - // designed to be sync/async agnostic. - // Take note if the _read call is sync or async (ie, if the read call - // has returned yet), so that we know whether or not it's safe to emit - // 'readable' etc. - // - // 3. Actually pull the requested chunks out of the buffer and return. + r <<= 4; - // if we need a readable event, then we need to do some reading. - var doRead = state.needReadable; - debug('need readable', doRead); + // 'a' - 'f' + if (c >= 49 && c <= 54) { + r |= c - 49 + 0xa; - // if we currently have less than the highWaterMark, then also read some - if (state.length === 0 || state.length - n < state.highWaterMark) { - doRead = true; - debug('length less than watermark', doRead); - } + // 'A' - 'F' + } else if (c >= 17 && c <= 22) { + r |= c - 17 + 0xa; - // however, if we've ended, then there's no point, and if we're already - // reading, then it's unnecessary. - if (state.ended || state.reading) { - doRead = false; - debug('reading or ended', doRead); - } else if (doRead) { - debug('do read'); - state.reading = true; - state.sync = true; - // if the length is currently zero, then we *need* a readable event. - if (state.length === 0) state.needReadable = true; - // call internal read method - this._read(state.highWaterMark); - state.sync = false; - // If _read pushed data synchronously, then `reading` will be false, - // and we need to re-evaluate how much data we can return to the user. - if (!state.reading) n = howMuchToRead(nOrig, state); + // '0' - '9' + } else { + r |= c & 0xf; + } + } + return r; } - var ret; - if (n > 0) ret = fromList(n, state);else ret = null; + BN.prototype._parseHex = function _parseHex (number, start) { + // Create possibly bigger array to ensure that it fits the number + this.length = Math.ceil((number.length - start) / 6); + this.words = new Array(this.length); + for (var i = 0; i < this.length; i++) { + this.words[i] = 0; + } - if (ret === null) { - state.needReadable = true; - n = 0; - } else { - state.length -= n; - } + var j, w; + // Scan 24-bit chunks and add them to the number + var off = 0; + for (i = number.length - 6, j = 0; i >= start; i -= 6) { + w = parseHex(number, i, i + 6); + this.words[j] |= (w << off) & 0x3ffffff; + // NOTE: `0x3fffff` is intentional here, 26bits max shift + 24bit hex limb + this.words[j + 1] |= w >>> (26 - off) & 0x3fffff; + off += 24; + if (off >= 26) { + off -= 26; + j++; + } + } + if (i + 6 !== start) { + w = parseHex(number, start, i + 6); + this.words[j] |= (w << off) & 0x3ffffff; + this.words[j + 1] |= w >>> (26 - off) & 0x3fffff; + } + this.strip(); + }; - if (state.length === 0) { - // If we have nothing in the buffer, then we want to know - // as soon as we *do* get something into the buffer. - if (!state.ended) state.needReadable = true; + function parseBase (str, start, end, mul) { + var r = 0; + var len = Math.min(str.length, end); + for (var i = start; i < len; i++) { + var c = str.charCodeAt(i) - 48; - // If we tried to read() past the EOF, then emit end on the next tick. - if (nOrig !== n && state.ended) endReadable(this); - } + r *= mul; - if (ret !== null) this.emit('data', ret); + // 'a' + if (c >= 49) { + r += c - 49 + 0xa; - return ret; -}; + // 'A' + } else if (c >= 17) { + r += c - 17 + 0xa; -function onEofChunk(stream, state) { - if (state.ended) return; - if (state.decoder) { - var chunk = state.decoder.end(); - if (chunk && chunk.length) { - state.buffer.push(chunk); - state.length += state.objectMode ? 1 : chunk.length; + // '0' - '9' + } else { + r += c; + } } + return r; } - state.ended = true; - - // emit 'readable' now to make sure it gets picked up. - emitReadable(stream); -} - -// Don't emit readable right away in sync mode, because this can trigger -// another read() call => stack overflow. This way, it might trigger -// a nextTick recursion warning, but that's not so bad. -function emitReadable(stream) { - var state = stream._readableState; - state.needReadable = false; - if (!state.emittedReadable) { - debug('emitReadable', state.flowing); - state.emittedReadable = true; - if (state.sync) pna.nextTick(emitReadable_, stream);else emitReadable_(stream); - } -} - -function emitReadable_(stream) { - debug('emit readable'); - stream.emit('readable'); - flow(stream); -} -// at this point, the user has presumably seen the 'readable' event, -// and called read() to consume some data. that may have triggered -// in turn another _read(n) call, in which case reading = true if -// it's in progress. -// However, if we're not ended, or reading, and the length < hwm, -// then go ahead and try to read some more preemptively. -function maybeReadMore(stream, state) { - if (!state.readingMore) { - state.readingMore = true; - pna.nextTick(maybeReadMore_, stream, state); - } -} + BN.prototype._parseBase = function _parseBase (number, base, start) { + // Initialize as zero + this.words = [ 0 ]; + this.length = 1; -function maybeReadMore_(stream, state) { - var len = state.length; - while (!state.reading && !state.flowing && !state.ended && state.length < state.highWaterMark) { - debug('maybeReadMore read 0'); - stream.read(0); - if (len === state.length) - // didn't get any data, stop spinning. - break;else len = state.length; - } - state.readingMore = false; -} + // Find length of limb in base + for (var limbLen = 0, limbPow = 1; limbPow <= 0x3ffffff; limbPow *= base) { + limbLen++; + } + limbLen--; + limbPow = (limbPow / base) | 0; -// abstract method. to be overridden in specific implementation classes. -// call cb(er, data) where data is <= n in length. -// for virtual (non-string, non-buffer) streams, "length" is somewhat -// arbitrary, and perhaps not very meaningful. -Readable.prototype._read = function (n) { - this.emit('error', new Error('_read() is not implemented')); -}; + var total = number.length - start; + var mod = total % limbLen; + var end = Math.min(total, total - mod) + start; -Readable.prototype.pipe = function (dest, pipeOpts) { - var src = this; - var state = this._readableState; + var word = 0; + for (var i = start; i < end; i += limbLen) { + word = parseBase(number, i, i + limbLen, base); - switch (state.pipesCount) { - case 0: - state.pipes = dest; - break; - case 1: - state.pipes = [state.pipes, dest]; - break; - default: - state.pipes.push(dest); - break; - } - state.pipesCount += 1; - debug('pipe count=%d opts=%j', state.pipesCount, pipeOpts); + this.imuln(limbPow); + if (this.words[0] + word < 0x4000000) { + this.words[0] += word; + } else { + this._iaddn(word); + } + } - var doEnd = (!pipeOpts || pipeOpts.end !== false) && dest !== process.stdout && dest !== process.stderr; + if (mod !== 0) { + var pow = 1; + word = parseBase(number, i, number.length, base); - var endFn = doEnd ? onend : unpipe; - if (state.endEmitted) pna.nextTick(endFn);else src.once('end', endFn); + for (i = 0; i < mod; i++) { + pow *= base; + } - dest.on('unpipe', onunpipe); - function onunpipe(readable, unpipeInfo) { - debug('onunpipe'); - if (readable === src) { - if (unpipeInfo && unpipeInfo.hasUnpiped === false) { - unpipeInfo.hasUnpiped = true; - cleanup(); + this.imuln(pow); + if (this.words[0] + word < 0x4000000) { + this.words[0] += word; + } else { + this._iaddn(word); } } - } - - function onend() { - debug('onend'); - dest.end(); - } + }; - // when the dest drains, it reduces the awaitDrain counter - // on the source. This would be more elegant with a .once() - // handler in flow(), but adding and removing repeatedly is - // too slow. - var ondrain = pipeOnDrain(src); - dest.on('drain', ondrain); + BN.prototype.copy = function copy (dest) { + dest.words = new Array(this.length); + for (var i = 0; i < this.length; i++) { + dest.words[i] = this.words[i]; + } + dest.length = this.length; + dest.negative = this.negative; + dest.red = this.red; + }; - var cleanedUp = false; - function cleanup() { - debug('cleanup'); - // cleanup event handlers once the pipe is broken - dest.removeListener('close', onclose); - dest.removeListener('finish', onfinish); - dest.removeListener('drain', ondrain); - dest.removeListener('error', onerror); - dest.removeListener('unpipe', onunpipe); - src.removeListener('end', onend); - src.removeListener('end', unpipe); - src.removeListener('data', ondata); + BN.prototype.clone = function clone () { + var r = new BN(null); + this.copy(r); + return r; + }; - cleanedUp = true; + BN.prototype._expand = function _expand (size) { + while (this.length < size) { + this.words[this.length++] = 0; + } + return this; + }; - // if the reader is waiting for a drain event from this - // specific writer, then it would cause it to never start - // flowing again. - // So, if this is awaiting a drain, then we just call it now. - // If we don't know, then assume that we are waiting for one. - if (state.awaitDrain && (!dest._writableState || dest._writableState.needDrain)) ondrain(); - } + // Remove leading `0` from `this` + BN.prototype.strip = function strip () { + while (this.length > 1 && this.words[this.length - 1] === 0) { + this.length--; + } + return this._normSign(); + }; - // If the user pushes more data while we're writing to dest then we'll end up - // in ondata again. However, we only want to increase awaitDrain once because - // dest will only emit one 'drain' event for the multiple writes. - // => Introduce a guard on increasing awaitDrain. - var increasedAwaitDrain = false; - src.on('data', ondata); - function ondata(chunk) { - debug('ondata'); - increasedAwaitDrain = false; - var ret = dest.write(chunk); - if (false === ret && !increasedAwaitDrain) { - // If the user unpiped during `dest.write()`, it is possible - // to get stuck in a permanently paused state if that write - // also returned false. - // => Check whether `dest` is still a piping destination. - if ((state.pipesCount === 1 && state.pipes === dest || state.pipesCount > 1 && indexOf(state.pipes, dest) !== -1) && !cleanedUp) { - debug('false write response, pause', src._readableState.awaitDrain); - src._readableState.awaitDrain++; - increasedAwaitDrain = true; - } - src.pause(); + BN.prototype._normSign = function _normSign () { + // -0 = 0 + if (this.length === 1 && this.words[0] === 0) { + this.negative = 0; } - } + return this; + }; - // if the dest has an error, then stop piping into it. - // however, don't suppress the throwing behavior for this. - function onerror(er) { - debug('onerror', er); - unpipe(); - dest.removeListener('error', onerror); - if (EElistenerCount(dest, 'error') === 0) dest.emit('error', er); - } + BN.prototype.inspect = function inspect () { + return (this.red ? ''; + }; - // Make sure our error handler is attached before userland ones. - prependListener(dest, 'error', onerror); + /* - // Both close and finish should trigger unpipe, but only once. - function onclose() { - dest.removeListener('finish', onfinish); - unpipe(); + var zeros = []; + var groupSizes = []; + var groupBases = []; + + var s = ''; + var i = -1; + while (++i < BN.wordSize) { + zeros[i] = s; + s += '0'; } - dest.once('close', onclose); - function onfinish() { - debug('onfinish'); - dest.removeListener('close', onclose); - unpipe(); + groupSizes[0] = 0; + groupSizes[1] = 0; + groupBases[0] = 0; + groupBases[1] = 0; + var base = 2 - 1; + while (++base < 36 + 1) { + var groupSize = 0; + var groupBase = 1; + while (groupBase < (1 << BN.wordSize) / base) { + groupBase *= base; + groupSize += 1; + } + groupSizes[base] = groupSize; + groupBases[base] = groupBase; } - dest.once('finish', onfinish); - function unpipe() { - debug('unpipe'); - src.unpipe(dest); - } + */ - // tell the dest that it's being piped to - dest.emit('pipe', src); + var zeros = [ + '', + '0', + '00', + '000', + '0000', + '00000', + '000000', + '0000000', + '00000000', + '000000000', + '0000000000', + '00000000000', + '000000000000', + '0000000000000', + '00000000000000', + '000000000000000', + '0000000000000000', + '00000000000000000', + '000000000000000000', + '0000000000000000000', + '00000000000000000000', + '000000000000000000000', + '0000000000000000000000', + '00000000000000000000000', + '000000000000000000000000', + '0000000000000000000000000' + ]; - // start the flow if it hasn't been started already. - if (!state.flowing) { - debug('pipe resume'); - src.resume(); - } + var groupSizes = [ + 0, 0, + 25, 16, 12, 11, 10, 9, 8, + 8, 7, 7, 7, 7, 6, 6, + 6, 6, 6, 6, 6, 5, 5, + 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5 + ]; - return dest; -}; + var groupBases = [ + 0, 0, + 33554432, 43046721, 16777216, 48828125, 60466176, 40353607, 16777216, + 43046721, 10000000, 19487171, 35831808, 62748517, 7529536, 11390625, + 16777216, 24137569, 34012224, 47045881, 64000000, 4084101, 5153632, + 6436343, 7962624, 9765625, 11881376, 14348907, 17210368, 20511149, + 24300000, 28629151, 33554432, 39135393, 45435424, 52521875, 60466176 + ]; -function pipeOnDrain(src) { - return function () { - var state = src._readableState; - debug('pipeOnDrain', state.awaitDrain); - if (state.awaitDrain) state.awaitDrain--; - if (state.awaitDrain === 0 && EElistenerCount(src, 'data')) { - state.flowing = true; - flow(src); + BN.prototype.toString = function toString (base, padding) { + base = base || 10; + padding = padding | 0 || 1; + + var out; + if (base === 16 || base === 'hex') { + out = ''; + var off = 0; + var carry = 0; + for (var i = 0; i < this.length; i++) { + var w = this.words[i]; + var word = (((w << off) | carry) & 0xffffff).toString(16); + carry = (w >>> (24 - off)) & 0xffffff; + if (carry !== 0 || i !== this.length - 1) { + out = zeros[6 - word.length] + word + out; + } else { + out = word + out; + } + off += 2; + if (off >= 26) { + off -= 26; + i--; + } + } + if (carry !== 0) { + out = carry.toString(16) + out; + } + while (out.length % padding !== 0) { + out = '0' + out; + } + if (this.negative !== 0) { + out = '-' + out; + } + return out; } - }; -} -Readable.prototype.unpipe = function (dest) { - var state = this._readableState; - var unpipeInfo = { hasUnpiped: false }; + if (base === (base | 0) && base >= 2 && base <= 36) { + // var groupSize = Math.floor(BN.wordSize * Math.LN2 / Math.log(base)); + var groupSize = groupSizes[base]; + // var groupBase = Math.pow(base, groupSize); + var groupBase = groupBases[base]; + out = ''; + var c = this.clone(); + c.negative = 0; + while (!c.isZero()) { + var r = c.modn(groupBase).toString(base); + c = c.idivn(groupBase); - // if we're not piping anywhere, then do nothing. - if (state.pipesCount === 0) return this; + if (!c.isZero()) { + out = zeros[groupSize - r.length] + r + out; + } else { + out = r + out; + } + } + if (this.isZero()) { + out = '0' + out; + } + while (out.length % padding !== 0) { + out = '0' + out; + } + if (this.negative !== 0) { + out = '-' + out; + } + return out; + } - // just one destination. most common case. - if (state.pipesCount === 1) { - // passed in one, but it's not the right one. - if (dest && dest !== state.pipes) return this; + assert(false, 'Base should be between 2 and 36'); + }; - if (!dest) dest = state.pipes; + BN.prototype.toNumber = function toNumber () { + var ret = this.words[0]; + if (this.length === 2) { + ret += this.words[1] * 0x4000000; + } else if (this.length === 3 && this.words[2] === 0x01) { + // NOTE: at this stage it is known that the top bit is set + ret += 0x10000000000000 + (this.words[1] * 0x4000000); + } else if (this.length > 2) { + assert(false, 'Number can only safely store up to 53 bits'); + } + return (this.negative !== 0) ? -ret : ret; + }; - // got a match. - state.pipes = null; - state.pipesCount = 0; - state.flowing = false; - if (dest) dest.emit('unpipe', this, unpipeInfo); - return this; - } + BN.prototype.toJSON = function toJSON () { + return this.toString(16); + }; - // slow case. multiple pipe destinations. + BN.prototype.toBuffer = function toBuffer (endian, length) { + assert(typeof Buffer !== 'undefined'); + return this.toArrayLike(Buffer, endian, length); + }; - if (!dest) { - // remove all. - var dests = state.pipes; - var len = state.pipesCount; - state.pipes = null; - state.pipesCount = 0; - state.flowing = false; + BN.prototype.toArray = function toArray (endian, length) { + return this.toArrayLike(Array, endian, length); + }; - for (var i = 0; i < len; i++) { - dests[i].emit('unpipe', this, unpipeInfo); - }return this; - } + BN.prototype.toArrayLike = function toArrayLike (ArrayType, endian, length) { + var byteLength = this.byteLength(); + var reqLength = length || Math.max(1, byteLength); + assert(byteLength <= reqLength, 'byte array longer than desired length'); + assert(reqLength > 0, 'Requested array length <= 0'); - // try to find the right one. - var index = indexOf(state.pipes, dest); - if (index === -1) return this; + this.strip(); + var littleEndian = endian === 'le'; + var res = new ArrayType(reqLength); - state.pipes.splice(index, 1); - state.pipesCount -= 1; - if (state.pipesCount === 1) state.pipes = state.pipes[0]; + var b, i; + var q = this.clone(); + if (!littleEndian) { + // Assume big-endian + for (i = 0; i < reqLength - byteLength; i++) { + res[i] = 0; + } - dest.emit('unpipe', this, unpipeInfo); + for (i = 0; !q.isZero(); i++) { + b = q.andln(0xff); + q.iushrn(8); - return this; -}; + res[reqLength - i - 1] = b; + } + } else { + for (i = 0; !q.isZero(); i++) { + b = q.andln(0xff); + q.iushrn(8); -// set up data events if they are asked for -// Ensure readable listeners eventually get something -Readable.prototype.on = function (ev, fn) { - var res = Stream.prototype.on.call(this, ev, fn); + res[i] = b; + } - if (ev === 'data') { - // Start flowing on next tick if stream isn't explicitly paused - if (this._readableState.flowing !== false) this.resume(); - } else if (ev === 'readable') { - var state = this._readableState; - if (!state.endEmitted && !state.readableListening) { - state.readableListening = state.needReadable = true; - state.emittedReadable = false; - if (!state.reading) { - pna.nextTick(nReadingNextTick, this); - } else if (state.length) { - emitReadable(this); + for (; i < reqLength; i++) { + res[i] = 0; } } + + return res; + }; + + if (Math.clz32) { + BN.prototype._countBits = function _countBits (w) { + return 32 - Math.clz32(w); + }; + } else { + BN.prototype._countBits = function _countBits (w) { + var t = w; + var r = 0; + if (t >= 0x1000) { + r += 13; + t >>>= 13; + } + if (t >= 0x40) { + r += 7; + t >>>= 7; + } + if (t >= 0x8) { + r += 4; + t >>>= 4; + } + if (t >= 0x02) { + r += 2; + t >>>= 2; + } + return r + t; + }; } - return res; -}; -Readable.prototype.addListener = Readable.prototype.on; + BN.prototype._zeroBits = function _zeroBits (w) { + // Short-cut + if (w === 0) return 26; -function nReadingNextTick(self) { - debug('readable nexttick read 0'); - self.read(0); -} + var t = w; + var r = 0; + if ((t & 0x1fff) === 0) { + r += 13; + t >>>= 13; + } + if ((t & 0x7f) === 0) { + r += 7; + t >>>= 7; + } + if ((t & 0xf) === 0) { + r += 4; + t >>>= 4; + } + if ((t & 0x3) === 0) { + r += 2; + t >>>= 2; + } + if ((t & 0x1) === 0) { + r++; + } + return r; + }; -// pause() and resume() are remnants of the legacy readable stream API -// If the user uses them, then switch into old mode. -Readable.prototype.resume = function () { - var state = this._readableState; - if (!state.flowing) { - debug('resume'); - state.flowing = true; - resume(this, state); - } - return this; -}; + // Return number of used bits in a BN + BN.prototype.bitLength = function bitLength () { + var w = this.words[this.length - 1]; + var hi = this._countBits(w); + return (this.length - 1) * 26 + hi; + }; -function resume(stream, state) { - if (!state.resumeScheduled) { - state.resumeScheduled = true; - pna.nextTick(resume_, stream, state); - } -} + function toBitArray (num) { + var w = new Array(num.bitLength()); -function resume_(stream, state) { - if (!state.reading) { - debug('resume read 0'); - stream.read(0); - } + for (var bit = 0; bit < w.length; bit++) { + var off = (bit / 26) | 0; + var wbit = bit % 26; - state.resumeScheduled = false; - state.awaitDrain = 0; - stream.emit('resume'); - flow(stream); - if (state.flowing && !state.reading) stream.read(0); -} + w[bit] = (num.words[off] & (1 << wbit)) >>> wbit; + } -Readable.prototype.pause = function () { - debug('call pause flowing=%j', this._readableState.flowing); - if (false !== this._readableState.flowing) { - debug('pause'); - this._readableState.flowing = false; - this.emit('pause'); + return w; } - return this; -}; -function flow(stream) { - var state = stream._readableState; - debug('flow', state.flowing); - while (state.flowing && stream.read() !== null) {} -} + // Number of trailing zero bits + BN.prototype.zeroBits = function zeroBits () { + if (this.isZero()) return 0; -// wrap an old-style stream as the async data source. -// This is *not* part of the readable stream interface. -// It is an ugly unfortunate mess of history. -Readable.prototype.wrap = function (stream) { - var _this = this; + var r = 0; + for (var i = 0; i < this.length; i++) { + var b = this._zeroBits(this.words[i]); + r += b; + if (b !== 26) break; + } + return r; + }; - var state = this._readableState; - var paused = false; + BN.prototype.byteLength = function byteLength () { + return Math.ceil(this.bitLength() / 8); + }; - stream.on('end', function () { - debug('wrapped end'); - if (state.decoder && !state.ended) { - var chunk = state.decoder.end(); - if (chunk && chunk.length) _this.push(chunk); + BN.prototype.toTwos = function toTwos (width) { + if (this.negative !== 0) { + return this.abs().inotn(width).iaddn(1); } + return this.clone(); + }; - _this.push(null); - }); - - stream.on('data', function (chunk) { - debug('wrapped data'); - if (state.decoder) chunk = state.decoder.write(chunk); - - // don't skip over falsy values in objectMode - if (state.objectMode && (chunk === null || chunk === undefined)) return;else if (!state.objectMode && (!chunk || !chunk.length)) return; - - var ret = _this.push(chunk); - if (!ret) { - paused = true; - stream.pause(); + BN.prototype.fromTwos = function fromTwos (width) { + if (this.testn(width - 1)) { + return this.notn(width).iaddn(1).ineg(); } - }); + return this.clone(); + }; - // proxy all the other methods. - // important when wrapping filters and duplexes. - for (var i in stream) { - if (this[i] === undefined && typeof stream[i] === 'function') { - this[i] = function (method) { - return function () { - return stream[method].apply(stream, arguments); - }; - }(i); - } - } + BN.prototype.isNeg = function isNeg () { + return this.negative !== 0; + }; - // proxy certain important events. - for (var n = 0; n < kProxyEvents.length; n++) { - stream.on(kProxyEvents[n], this.emit.bind(this, kProxyEvents[n])); - } + // Return negative clone of `this` + BN.prototype.neg = function neg () { + return this.clone().ineg(); + }; - // when we try to consume some more bytes, simply unpause the - // underlying stream. - this._read = function (n) { - debug('wrapped _read', n); - if (paused) { - paused = false; - stream.resume(); + BN.prototype.ineg = function ineg () { + if (!this.isZero()) { + this.negative ^= 1; } - }; - return this; -}; + return this; + }; -Object.defineProperty(Readable.prototype, 'readableHighWaterMark', { - // making it explicit this property is not enumerable - // because otherwise some prototype manipulation in - // userland will fail - enumerable: false, - get: function () { - return this._readableState.highWaterMark; - } -}); + // Or `num` with `this` in-place + BN.prototype.iuor = function iuor (num) { + while (this.length < num.length) { + this.words[this.length++] = 0; + } -// exposed for testing purposes only. -Readable._fromList = fromList; + for (var i = 0; i < num.length; i++) { + this.words[i] = this.words[i] | num.words[i]; + } -// Pluck off n bytes from an array of buffers. -// Length is the combined lengths of all the buffers in the list. -// This function is designed to be inlinable, so please take care when making -// changes to the function body. -function fromList(n, state) { - // nothing buffered - if (state.length === 0) return null; + return this.strip(); + }; - var ret; - if (state.objectMode) ret = state.buffer.shift();else if (!n || n >= state.length) { - // read it all, truncate the list - if (state.decoder) ret = state.buffer.join('');else if (state.buffer.length === 1) ret = state.buffer.head.data;else ret = state.buffer.concat(state.length); - state.buffer.clear(); - } else { - // read part of list - ret = fromListPartial(n, state.buffer, state.decoder); - } + BN.prototype.ior = function ior (num) { + assert((this.negative | num.negative) === 0); + return this.iuor(num); + }; - return ret; -} + // Or `num` with `this` + BN.prototype.or = function or (num) { + if (this.length > num.length) return this.clone().ior(num); + return num.clone().ior(this); + }; -// Extracts only enough buffered data to satisfy the amount requested. -// This function is designed to be inlinable, so please take care when making -// changes to the function body. -function fromListPartial(n, list, hasStrings) { - var ret; - if (n < list.head.data.length) { - // slice is the same for buffers and strings - ret = list.head.data.slice(0, n); - list.head.data = list.head.data.slice(n); - } else if (n === list.head.data.length) { - // first chunk is a perfect match - ret = list.shift(); - } else { - // result spans more than one buffer - ret = hasStrings ? copyFromBufferString(n, list) : copyFromBuffer(n, list); - } - return ret; -} + BN.prototype.uor = function uor (num) { + if (this.length > num.length) return this.clone().iuor(num); + return num.clone().iuor(this); + }; -// Copies a specified amount of characters from the list of buffered data -// chunks. -// This function is designed to be inlinable, so please take care when making -// changes to the function body. -function copyFromBufferString(n, list) { - var p = list.head; - var c = 1; - var ret = p.data; - n -= ret.length; - while (p = p.next) { - var str = p.data; - var nb = n > str.length ? str.length : n; - if (nb === str.length) ret += str;else ret += str.slice(0, n); - n -= nb; - if (n === 0) { - if (nb === str.length) { - ++c; - if (p.next) list.head = p.next;else list.head = list.tail = null; - } else { - list.head = p; - p.data = str.slice(nb); - } - break; + // And `num` with `this` in-place + BN.prototype.iuand = function iuand (num) { + // b = min-length(num, this) + var b; + if (this.length > num.length) { + b = num; + } else { + b = this; } - ++c; - } - list.length -= c; - return ret; -} -// Copies a specified amount of bytes from the list of buffered data chunks. -// This function is designed to be inlinable, so please take care when making -// changes to the function body. -function copyFromBuffer(n, list) { - var ret = Buffer.allocUnsafe(n); - var p = list.head; - var c = 1; - p.data.copy(ret); - n -= p.data.length; - while (p = p.next) { - var buf = p.data; - var nb = n > buf.length ? buf.length : n; - buf.copy(ret, ret.length - n, 0, nb); - n -= nb; - if (n === 0) { - if (nb === buf.length) { - ++c; - if (p.next) list.head = p.next;else list.head = list.tail = null; - } else { - list.head = p; - p.data = buf.slice(nb); - } - break; + for (var i = 0; i < b.length; i++) { + this.words[i] = this.words[i] & num.words[i]; } - ++c; - } - list.length -= c; - return ret; -} -function endReadable(stream) { - var state = stream._readableState; + this.length = b.length; - // If we get here before consuming all the bytes, then that is a - // bug in node. Should never happen. - if (state.length > 0) throw new Error('"endReadable()" called on non-empty stream'); + return this.strip(); + }; - if (!state.endEmitted) { - state.ended = true; - pna.nextTick(endReadableNT, state, stream); - } -} + BN.prototype.iand = function iand (num) { + assert((this.negative | num.negative) === 0); + return this.iuand(num); + }; -function endReadableNT(state, stream) { - // Check that we didn't get one last unshift. - if (!state.endEmitted && state.length === 0) { - state.endEmitted = true; - stream.readable = false; - stream.emit('end'); - } -} + // And `num` with `this` + BN.prototype.and = function and (num) { + if (this.length > num.length) return this.clone().iand(num); + return num.clone().iand(this); + }; -function indexOf(xs, x) { - for (var i = 0, l = xs.length; i < l; i++) { - if (xs[i] === x) return i; - } - return -1; -} -},{"process-nextick-args":"Yj0v","isarray":"REa7","events":"FRpO","./internal/streams/stream":"Q8A6","safe-buffer":"l6K0","core-util-is":"Q14w","inherits":"Bm0n","util":"rDCW","./internal/streams/BufferList":"Um5I","./internal/streams/destroy":"avqi","./_stream_duplex":"wldW","string_decoder/":"F7WD","process":"pBGv"}],"I3bg":[function(require,module,exports) { -// Copyright Joyent, Inc. and other Node contributors. -// -// Permission is hereby granted, free of charge, to any person obtaining a -// copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to permit -// persons to whom the Software is furnished to do so, subject to the -// following conditions: -// -// The above copyright notice and this permission notice shall be included -// in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN -// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, -// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE -// USE OR OTHER DEALINGS IN THE SOFTWARE. + BN.prototype.uand = function uand (num) { + if (this.length > num.length) return this.clone().iuand(num); + return num.clone().iuand(this); + }; -// a transform stream is a readable/writable stream where you do -// something with the data. Sometimes it's called a "filter", -// but that's not a great name for it, since that implies a thing where -// some bits pass through, and others are simply ignored. (That would -// be a valid example of a transform, of course.) -// -// While the output is causally related to the input, it's not a -// necessarily symmetric or synchronous transformation. For example, -// a zlib stream might take multiple plain-text writes(), and then -// emit a single compressed chunk some time in the future. -// -// Here's how this works: -// -// The Transform stream has all the aspects of the readable and writable -// stream classes. When you write(chunk), that calls _write(chunk,cb) -// internally, and returns false if there's a lot of pending writes -// buffered up. When you call read(), that calls _read(n) until -// there's enough pending readable data buffered up. -// -// In a transform stream, the written data is placed in a buffer. When -// _read(n) is called, it transforms the queued up data, calling the -// buffered _write cb's as it consumes chunks. If consuming a single -// written chunk would result in multiple output chunks, then the first -// outputted bit calls the readcb, and subsequent chunks just go into -// the read buffer, and will cause it to emit 'readable' if necessary. -// -// This way, back-pressure is actually determined by the reading side, -// since _read has to be called to start processing a new chunk. However, -// a pathological inflate type of transform can cause excessive buffering -// here. For example, imagine a stream where every byte of input is -// interpreted as an integer from 0-255, and then results in that many -// bytes of output. Writing the 4 bytes {ff,ff,ff,ff} would result in -// 1kb of data being output. In this case, you could write a very small -// amount of input, and end up with a very large amount of output. In -// such a pathological inflating mechanism, there'd be no way to tell -// the system to stop doing the transform. A single 4MB write could -// cause the system to run out of memory. -// -// However, even in such a pathological case, only a single written chunk -// would be consumed, and then the rest would wait (un-transformed) until -// the results of the previous transformed chunk were consumed. + // Xor `num` with `this` in-place + BN.prototype.iuxor = function iuxor (num) { + // a.length > b.length + var a; + var b; + if (this.length > num.length) { + a = this; + b = num; + } else { + a = num; + b = this; + } -'use strict'; + for (var i = 0; i < b.length; i++) { + this.words[i] = a.words[i] ^ b.words[i]; + } -module.exports = Transform; + if (this !== a) { + for (; i < a.length; i++) { + this.words[i] = a.words[i]; + } + } -var Duplex = require('./_stream_duplex'); + this.length = a.length; -/**/ -var util = require('core-util-is'); -util.inherits = require('inherits'); -/**/ + return this.strip(); + }; -util.inherits(Transform, Duplex); + BN.prototype.ixor = function ixor (num) { + assert((this.negative | num.negative) === 0); + return this.iuxor(num); + }; -function afterTransform(er, data) { - var ts = this._transformState; - ts.transforming = false; + // Xor `num` with `this` + BN.prototype.xor = function xor (num) { + if (this.length > num.length) return this.clone().ixor(num); + return num.clone().ixor(this); + }; - var cb = ts.writecb; + BN.prototype.uxor = function uxor (num) { + if (this.length > num.length) return this.clone().iuxor(num); + return num.clone().iuxor(this); + }; - if (!cb) { - return this.emit('error', new Error('write callback called multiple times')); - } + // Not ``this`` with ``width`` bitwidth + BN.prototype.inotn = function inotn (width) { + assert(typeof width === 'number' && width >= 0); - ts.writechunk = null; - ts.writecb = null; + var bytesNeeded = Math.ceil(width / 26) | 0; + var bitsLeft = width % 26; - if (data != null) // single equals check for both `null` and `undefined` - this.push(data); + // Extend the buffer with leading zeroes + this._expand(bytesNeeded); - cb(er); + if (bitsLeft > 0) { + bytesNeeded--; + } - var rs = this._readableState; - rs.reading = false; - if (rs.needReadable || rs.length < rs.highWaterMark) { - this._read(rs.highWaterMark); - } -} + // Handle complete words + for (var i = 0; i < bytesNeeded; i++) { + this.words[i] = ~this.words[i] & 0x3ffffff; + } -function Transform(options) { - if (!(this instanceof Transform)) return new Transform(options); + // Handle the residue + if (bitsLeft > 0) { + this.words[i] = ~this.words[i] & (0x3ffffff >> (26 - bitsLeft)); + } - Duplex.call(this, options); + // And remove leading zeroes + return this.strip(); + }; - this._transformState = { - afterTransform: afterTransform.bind(this), - needTransform: false, - transforming: false, - writecb: null, - writechunk: null, - writeencoding: null + BN.prototype.notn = function notn (width) { + return this.clone().inotn(width); }; - // start out asking for a readable event once data is transformed. - this._readableState.needReadable = true; + // Set `bit` of `this` + BN.prototype.setn = function setn (bit, val) { + assert(typeof bit === 'number' && bit >= 0); - // we have implemented the _read method, and done the other things - // that Readable wants before the first _read call, so unset the - // sync guard flag. - this._readableState.sync = false; + var off = (bit / 26) | 0; + var wbit = bit % 26; - if (options) { - if (typeof options.transform === 'function') this._transform = options.transform; + this._expand(off + 1); - if (typeof options.flush === 'function') this._flush = options.flush; - } + if (val) { + this.words[off] = this.words[off] | (1 << wbit); + } else { + this.words[off] = this.words[off] & ~(1 << wbit); + } - // When the writable side finishes, then flush out anything remaining. - this.on('prefinish', prefinish); -} + return this.strip(); + }; -function prefinish() { - var _this = this; + // Add `num` to `this` in-place + BN.prototype.iadd = function iadd (num) { + var r; - if (typeof this._flush === 'function') { - this._flush(function (er, data) { - done(_this, er, data); - }); - } else { - done(this, null, null); - } -} + // negative + positive + if (this.negative !== 0 && num.negative === 0) { + this.negative = 0; + r = this.isub(num); + this.negative ^= 1; + return this._normSign(); -Transform.prototype.push = function (chunk, encoding) { - this._transformState.needTransform = false; - return Duplex.prototype.push.call(this, chunk, encoding); -}; + // positive + negative + } else if (this.negative === 0 && num.negative !== 0) { + num.negative = 0; + r = this.isub(num); + num.negative = 1; + return r._normSign(); + } -// This is the part where you do stuff! -// override this function in implementation classes. -// 'chunk' is an input chunk. -// -// Call `push(newChunk)` to pass along transformed output -// to the readable side. You may call 'push' zero or more times. -// -// Call `cb(err)` when you are done with this chunk. If you pass -// an error, then that'll put the hurt on the whole operation. If you -// never call cb(), then you'll never get another chunk. -Transform.prototype._transform = function (chunk, encoding, cb) { - throw new Error('_transform() is not implemented'); -}; + // a.length > b.length + var a, b; + if (this.length > num.length) { + a = this; + b = num; + } else { + a = num; + b = this; + } -Transform.prototype._write = function (chunk, encoding, cb) { - var ts = this._transformState; - ts.writecb = cb; - ts.writechunk = chunk; - ts.writeencoding = encoding; - if (!ts.transforming) { - var rs = this._readableState; - if (ts.needTransform || rs.needReadable || rs.length < rs.highWaterMark) this._read(rs.highWaterMark); - } -}; + var carry = 0; + for (var i = 0; i < b.length; i++) { + r = (a.words[i] | 0) + (b.words[i] | 0) + carry; + this.words[i] = r & 0x3ffffff; + carry = r >>> 26; + } + for (; carry !== 0 && i < a.length; i++) { + r = (a.words[i] | 0) + carry; + this.words[i] = r & 0x3ffffff; + carry = r >>> 26; + } -// Doesn't matter what the args are here. -// _transform does all the work. -// That we got here means that the readable side wants more data. -Transform.prototype._read = function (n) { - var ts = this._transformState; + this.length = a.length; + if (carry !== 0) { + this.words[this.length] = carry; + this.length++; + // Copy the rest of the words + } else if (a !== this) { + for (; i < a.length; i++) { + this.words[i] = a.words[i]; + } + } - if (ts.writechunk !== null && ts.writecb && !ts.transforming) { - ts.transforming = true; - this._transform(ts.writechunk, ts.writeencoding, ts.afterTransform); - } else { - // mark that we need a transform, so that any data that comes in - // will get processed, now that we've asked for it. - ts.needTransform = true; - } -}; + return this; + }; -Transform.prototype._destroy = function (err, cb) { - var _this2 = this; - - Duplex.prototype._destroy.call(this, err, function (err2) { - cb(err2); - _this2.emit('close'); - }); -}; - -function done(stream, er, data) { - if (er) return stream.emit('error', er); - - if (data != null) // single equals check for both `null` and `undefined` - stream.push(data); - - // if there's nothing in the write buffer, then that means - // that nothing more will ever be provided - if (stream._writableState.length) throw new Error('Calling transform done when ws.length != 0'); - - if (stream._transformState.transforming) throw new Error('Calling transform done when still transforming'); - - return stream.push(null); -} -},{"./_stream_duplex":"wldW","core-util-is":"Q14w","inherits":"Bm0n"}],"kQBK":[function(require,module,exports) { -// Copyright Joyent, Inc. and other Node contributors. -// -// Permission is hereby granted, free of charge, to any person obtaining a -// copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to permit -// persons to whom the Software is furnished to do so, subject to the -// following conditions: -// -// The above copyright notice and this permission notice shall be included -// in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN -// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, -// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE -// USE OR OTHER DEALINGS IN THE SOFTWARE. - -// a passthrough stream. -// basically just the most minimal sort of Transform stream. -// Every written chunk gets output as-is. - -'use strict'; - -module.exports = PassThrough; - -var Transform = require('./_stream_transform'); - -/**/ -var util = require('core-util-is'); -util.inherits = require('inherits'); -/**/ - -util.inherits(PassThrough, Transform); - -function PassThrough(options) { - if (!(this instanceof PassThrough)) return new PassThrough(options); - - Transform.call(this, options); -} - -PassThrough.prototype._transform = function (chunk, encoding, cb) { - cb(null, chunk); -}; -},{"./_stream_transform":"I3bg","core-util-is":"Q14w","inherits":"Bm0n"}],"uwsL":[function(require,module,exports) { -exports = module.exports = require('./lib/_stream_readable.js'); -exports.Stream = exports; -exports.Readable = exports; -exports.Writable = require('./lib/_stream_writable.js'); -exports.Duplex = require('./lib/_stream_duplex.js'); -exports.Transform = require('./lib/_stream_transform.js'); -exports.PassThrough = require('./lib/_stream_passthrough.js'); - -},{"./lib/_stream_readable.js":"Ogwm","./lib/_stream_writable.js":"I0x5","./lib/_stream_duplex.js":"wldW","./lib/_stream_transform.js":"I3bg","./lib/_stream_passthrough.js":"kQBK"}],"GAH2":[function(require,module,exports) { -module.exports = require('./lib/_stream_writable.js'); - -},{"./lib/_stream_writable.js":"I0x5"}],"dMbb":[function(require,module,exports) { -module.exports = require('./lib/_stream_duplex.js'); - -},{"./lib/_stream_duplex.js":"wldW"}],"yG3q":[function(require,module,exports) { -module.exports = require('./readable').Transform - -},{"./readable":"uwsL"}],"jlpe":[function(require,module,exports) { -module.exports = require('./readable').PassThrough - -},{"./readable":"uwsL"}],"fnRj":[function(require,module,exports) { -// Copyright Joyent, Inc. and other Node contributors. -// -// Permission is hereby granted, free of charge, to any person obtaining a -// copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to permit -// persons to whom the Software is furnished to do so, subject to the -// following conditions: -// -// The above copyright notice and this permission notice shall be included -// in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN -// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, -// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE -// USE OR OTHER DEALINGS IN THE SOFTWARE. - -module.exports = Stream; + // Add `num` to `this` + BN.prototype.add = function add (num) { + var res; + if (num.negative !== 0 && this.negative === 0) { + num.negative = 0; + res = this.sub(num); + num.negative ^= 1; + return res; + } else if (num.negative === 0 && this.negative !== 0) { + this.negative = 0; + res = num.sub(this); + this.negative = 1; + return res; + } -var EE = require('events').EventEmitter; -var inherits = require('inherits'); + if (this.length > num.length) return this.clone().iadd(num); -inherits(Stream, EE); -Stream.Readable = require('readable-stream/readable.js'); -Stream.Writable = require('readable-stream/writable.js'); -Stream.Duplex = require('readable-stream/duplex.js'); -Stream.Transform = require('readable-stream/transform.js'); -Stream.PassThrough = require('readable-stream/passthrough.js'); + return num.clone().iadd(this); + }; -// Backwards-compat with node 0.4.x -Stream.Stream = Stream; + // Subtract `num` from `this` in-place + BN.prototype.isub = function isub (num) { + // this - (-num) = this + num + if (num.negative !== 0) { + num.negative = 0; + var r = this.iadd(num); + num.negative = 1; + return r._normSign(); + // -this - num = -(this + num) + } else if (this.negative !== 0) { + this.negative = 0; + this.iadd(num); + this.negative = 1; + return this._normSign(); + } + // At this point both numbers are positive + var cmp = this.cmp(num); -// old-style streams. Note that the pipe method (the only relevant -// part of this class) is overridden in the Readable class. + // Optimization - zeroify + if (cmp === 0) { + this.negative = 0; + this.length = 1; + this.words[0] = 0; + return this; + } -function Stream() { - EE.call(this); -} + // a > b + var a, b; + if (cmp > 0) { + a = this; + b = num; + } else { + a = num; + b = this; + } -Stream.prototype.pipe = function(dest, options) { - var source = this; + var carry = 0; + for (var i = 0; i < b.length; i++) { + r = (a.words[i] | 0) - (b.words[i] | 0) + carry; + carry = r >> 26; + this.words[i] = r & 0x3ffffff; + } + for (; carry !== 0 && i < a.length; i++) { + r = (a.words[i] | 0) + carry; + carry = r >> 26; + this.words[i] = r & 0x3ffffff; + } - function ondata(chunk) { - if (dest.writable) { - if (false === dest.write(chunk) && source.pause) { - source.pause(); + // Copy rest of the words + if (carry === 0 && i < a.length && a !== this) { + for (; i < a.length; i++) { + this.words[i] = a.words[i]; } } - } - source.on('data', ondata); + this.length = Math.max(this.length, i); - function ondrain() { - if (source.readable && source.resume) { - source.resume(); + if (a !== this) { + this.negative = 1; } - } - dest.on('drain', ondrain); - - // If the 'end' option is not supplied, dest.end() will be called when - // source gets the 'end' or 'close' events. Only dest.end() once. - if (!dest._isStdio && (!options || options.end !== false)) { - source.on('end', onend); - source.on('close', onclose); - } - - var didOnEnd = false; - function onend() { - if (didOnEnd) return; - didOnEnd = true; + return this.strip(); + }; - dest.end(); - } + // Subtract `num` from `this` + BN.prototype.sub = function sub (num) { + return this.clone().isub(num); + }; + function smallMulTo (self, num, out) { + out.negative = num.negative ^ self.negative; + var len = (self.length + num.length) | 0; + out.length = len; + len = (len - 1) | 0; - function onclose() { - if (didOnEnd) return; - didOnEnd = true; + // Peel one iteration (compiler can't do it, because of code complexity) + var a = self.words[0] | 0; + var b = num.words[0] | 0; + var r = a * b; - if (typeof dest.destroy === 'function') dest.destroy(); - } + var lo = r & 0x3ffffff; + var carry = (r / 0x4000000) | 0; + out.words[0] = lo; - // don't leave dangling pipes when there are errors. - function onerror(er) { - cleanup(); - if (EE.listenerCount(this, 'error') === 0) { - throw er; // Unhandled stream error in pipe. + for (var k = 1; k < len; k++) { + // Sum all words with the same `i + j = k` and accumulate `ncarry`, + // note that ncarry could be >= 0x3ffffff + var ncarry = carry >>> 26; + var rword = carry & 0x3ffffff; + var maxJ = Math.min(k, num.length - 1); + for (var j = Math.max(0, k - self.length + 1); j <= maxJ; j++) { + var i = (k - j) | 0; + a = self.words[i] | 0; + b = num.words[j] | 0; + r = a * b + rword; + ncarry += (r / 0x4000000) | 0; + rword = r & 0x3ffffff; + } + out.words[k] = rword | 0; + carry = ncarry | 0; + } + if (carry !== 0) { + out.words[k] = carry | 0; + } else { + out.length--; } - } - - source.on('error', onerror); - dest.on('error', onerror); - - // remove all the event listeners that were added. - function cleanup() { - source.removeListener('data', ondata); - dest.removeListener('drain', ondrain); - - source.removeListener('end', onend); - source.removeListener('close', onclose); - - source.removeListener('error', onerror); - dest.removeListener('error', onerror); - - source.removeListener('end', cleanup); - source.removeListener('close', cleanup); - - dest.removeListener('close', cleanup); - } - - source.on('end', cleanup); - source.on('close', cleanup); - - dest.on('close', cleanup); - - dest.emit('pipe', source); - - // Allow for unix-like usage: A.pipe(B).pipe(C) - return dest; -}; - -},{"events":"FRpO","inherits":"Bm0n","readable-stream/readable.js":"uwsL","readable-stream/writable.js":"GAH2","readable-stream/duplex.js":"dMbb","readable-stream/transform.js":"yG3q","readable-stream/passthrough.js":"jlpe"}],"UcQW":[function(require,module,exports) { - -'use strict'; - -var Buffer = require('safe-buffer').Buffer; - -var Transform = require('stream').Transform; - -var inherits = require('inherits'); - -function throwIfNotStringOrBuffer(val, prefix) { - if (!Buffer.isBuffer(val) && typeof val !== 'string') { - throw new TypeError(prefix + ' must be a string or a buffer'); - } -} - -function HashBase(blockSize) { - Transform.call(this); - this._block = Buffer.allocUnsafe(blockSize); - this._blockSize = blockSize; - this._blockOffset = 0; - this._length = [0, 0, 0, 0]; - this._finalized = false; -} - -inherits(HashBase, Transform); - -HashBase.prototype._transform = function (chunk, encoding, callback) { - var error = null; - - try { - this.update(chunk, encoding); - } catch (err) { - error = err; - } - - callback(error); -}; - -HashBase.prototype._flush = function (callback) { - var error = null; - - try { - this.push(this.digest()); - } catch (err) { - error = err; - } - - callback(error); -}; - -HashBase.prototype.update = function (data, encoding) { - throwIfNotStringOrBuffer(data, 'Data'); - if (this._finalized) throw new Error('Digest already called'); - if (!Buffer.isBuffer(data)) data = Buffer.from(data, encoding); // consume data - - var block = this._block; - var offset = 0; - - while (this._blockOffset + data.length - offset >= this._blockSize) { - for (var i = this._blockOffset; i < this._blockSize;) block[i++] = data[offset++]; - - this._update(); - - this._blockOffset = 0; - } - - while (offset < data.length) block[this._blockOffset++] = data[offset++]; // update length - - for (var j = 0, carry = data.length * 8; carry > 0; ++j) { - this._length[j] += carry; - carry = this._length[j] / 0x0100000000 | 0; - if (carry > 0) this._length[j] -= 0x0100000000 * carry; + return out.strip(); } - return this; -}; - -HashBase.prototype._update = function () { - throw new Error('_update is not implemented'); -}; - -HashBase.prototype.digest = function (encoding) { - if (this._finalized) throw new Error('Digest already called'); - this._finalized = true; - - var digest = this._digest(); - - if (encoding !== undefined) digest = digest.toString(encoding); // reset state - - this._block.fill(0); - - this._blockOffset = 0; - - for (var i = 0; i < 4; ++i) this._length[i] = 0; - - return digest; -}; - -HashBase.prototype._digest = function () { - throw new Error('_digest is not implemented'); -}; - -module.exports = HashBase; -},{"safe-buffer":"Wugr","stream":"fnRj","inherits":"Bm0n"}],"OP64":[function(require,module,exports) { - -'use strict' -var inherits = require('inherits') -var HashBase = require('hash-base') -var Buffer = require('safe-buffer').Buffer - -var ARRAY16 = new Array(16) - -function MD5 () { - HashBase.call(this, 64) - - // state - this._a = 0x67452301 - this._b = 0xefcdab89 - this._c = 0x98badcfe - this._d = 0x10325476 -} - -inherits(MD5, HashBase) - -MD5.prototype._update = function () { - var M = ARRAY16 - for (var i = 0; i < 16; ++i) M[i] = this._block.readInt32LE(i * 4) - - var a = this._a - var b = this._b - var c = this._c - var d = this._d + // TODO(indutny): it may be reasonable to omit it for users who don't need + // to work with 256-bit numbers, otherwise it gives 20% improvement for 256-bit + // multiplication (like elliptic secp256k1). + var comb10MulTo = function comb10MulTo (self, num, out) { + var a = self.words; + var b = num.words; + var o = out.words; + var c = 0; + var lo; + var mid; + var hi; + var a0 = a[0] | 0; + var al0 = a0 & 0x1fff; + var ah0 = a0 >>> 13; + var a1 = a[1] | 0; + var al1 = a1 & 0x1fff; + var ah1 = a1 >>> 13; + var a2 = a[2] | 0; + var al2 = a2 & 0x1fff; + var ah2 = a2 >>> 13; + var a3 = a[3] | 0; + var al3 = a3 & 0x1fff; + var ah3 = a3 >>> 13; + var a4 = a[4] | 0; + var al4 = a4 & 0x1fff; + var ah4 = a4 >>> 13; + var a5 = a[5] | 0; + var al5 = a5 & 0x1fff; + var ah5 = a5 >>> 13; + var a6 = a[6] | 0; + var al6 = a6 & 0x1fff; + var ah6 = a6 >>> 13; + var a7 = a[7] | 0; + var al7 = a7 & 0x1fff; + var ah7 = a7 >>> 13; + var a8 = a[8] | 0; + var al8 = a8 & 0x1fff; + var ah8 = a8 >>> 13; + var a9 = a[9] | 0; + var al9 = a9 & 0x1fff; + var ah9 = a9 >>> 13; + var b0 = b[0] | 0; + var bl0 = b0 & 0x1fff; + var bh0 = b0 >>> 13; + var b1 = b[1] | 0; + var bl1 = b1 & 0x1fff; + var bh1 = b1 >>> 13; + var b2 = b[2] | 0; + var bl2 = b2 & 0x1fff; + var bh2 = b2 >>> 13; + var b3 = b[3] | 0; + var bl3 = b3 & 0x1fff; + var bh3 = b3 >>> 13; + var b4 = b[4] | 0; + var bl4 = b4 & 0x1fff; + var bh4 = b4 >>> 13; + var b5 = b[5] | 0; + var bl5 = b5 & 0x1fff; + var bh5 = b5 >>> 13; + var b6 = b[6] | 0; + var bl6 = b6 & 0x1fff; + var bh6 = b6 >>> 13; + var b7 = b[7] | 0; + var bl7 = b7 & 0x1fff; + var bh7 = b7 >>> 13; + var b8 = b[8] | 0; + var bl8 = b8 & 0x1fff; + var bh8 = b8 >>> 13; + var b9 = b[9] | 0; + var bl9 = b9 & 0x1fff; + var bh9 = b9 >>> 13; - a = fnF(a, b, c, d, M[0], 0xd76aa478, 7) - d = fnF(d, a, b, c, M[1], 0xe8c7b756, 12) - c = fnF(c, d, a, b, M[2], 0x242070db, 17) - b = fnF(b, c, d, a, M[3], 0xc1bdceee, 22) - a = fnF(a, b, c, d, M[4], 0xf57c0faf, 7) - d = fnF(d, a, b, c, M[5], 0x4787c62a, 12) - c = fnF(c, d, a, b, M[6], 0xa8304613, 17) - b = fnF(b, c, d, a, M[7], 0xfd469501, 22) - a = fnF(a, b, c, d, M[8], 0x698098d8, 7) - d = fnF(d, a, b, c, M[9], 0x8b44f7af, 12) - c = fnF(c, d, a, b, M[10], 0xffff5bb1, 17) - b = fnF(b, c, d, a, M[11], 0x895cd7be, 22) - a = fnF(a, b, c, d, M[12], 0x6b901122, 7) - d = fnF(d, a, b, c, M[13], 0xfd987193, 12) - c = fnF(c, d, a, b, M[14], 0xa679438e, 17) - b = fnF(b, c, d, a, M[15], 0x49b40821, 22) - - a = fnG(a, b, c, d, M[1], 0xf61e2562, 5) - d = fnG(d, a, b, c, M[6], 0xc040b340, 9) - c = fnG(c, d, a, b, M[11], 0x265e5a51, 14) - b = fnG(b, c, d, a, M[0], 0xe9b6c7aa, 20) - a = fnG(a, b, c, d, M[5], 0xd62f105d, 5) - d = fnG(d, a, b, c, M[10], 0x02441453, 9) - c = fnG(c, d, a, b, M[15], 0xd8a1e681, 14) - b = fnG(b, c, d, a, M[4], 0xe7d3fbc8, 20) - a = fnG(a, b, c, d, M[9], 0x21e1cde6, 5) - d = fnG(d, a, b, c, M[14], 0xc33707d6, 9) - c = fnG(c, d, a, b, M[3], 0xf4d50d87, 14) - b = fnG(b, c, d, a, M[8], 0x455a14ed, 20) - a = fnG(a, b, c, d, M[13], 0xa9e3e905, 5) - d = fnG(d, a, b, c, M[2], 0xfcefa3f8, 9) - c = fnG(c, d, a, b, M[7], 0x676f02d9, 14) - b = fnG(b, c, d, a, M[12], 0x8d2a4c8a, 20) - - a = fnH(a, b, c, d, M[5], 0xfffa3942, 4) - d = fnH(d, a, b, c, M[8], 0x8771f681, 11) - c = fnH(c, d, a, b, M[11], 0x6d9d6122, 16) - b = fnH(b, c, d, a, M[14], 0xfde5380c, 23) - a = fnH(a, b, c, d, M[1], 0xa4beea44, 4) - d = fnH(d, a, b, c, M[4], 0x4bdecfa9, 11) - c = fnH(c, d, a, b, M[7], 0xf6bb4b60, 16) - b = fnH(b, c, d, a, M[10], 0xbebfbc70, 23) - a = fnH(a, b, c, d, M[13], 0x289b7ec6, 4) - d = fnH(d, a, b, c, M[0], 0xeaa127fa, 11) - c = fnH(c, d, a, b, M[3], 0xd4ef3085, 16) - b = fnH(b, c, d, a, M[6], 0x04881d05, 23) - a = fnH(a, b, c, d, M[9], 0xd9d4d039, 4) - d = fnH(d, a, b, c, M[12], 0xe6db99e5, 11) - c = fnH(c, d, a, b, M[15], 0x1fa27cf8, 16) - b = fnH(b, c, d, a, M[2], 0xc4ac5665, 23) - - a = fnI(a, b, c, d, M[0], 0xf4292244, 6) - d = fnI(d, a, b, c, M[7], 0x432aff97, 10) - c = fnI(c, d, a, b, M[14], 0xab9423a7, 15) - b = fnI(b, c, d, a, M[5], 0xfc93a039, 21) - a = fnI(a, b, c, d, M[12], 0x655b59c3, 6) - d = fnI(d, a, b, c, M[3], 0x8f0ccc92, 10) - c = fnI(c, d, a, b, M[10], 0xffeff47d, 15) - b = fnI(b, c, d, a, M[1], 0x85845dd1, 21) - a = fnI(a, b, c, d, M[8], 0x6fa87e4f, 6) - d = fnI(d, a, b, c, M[15], 0xfe2ce6e0, 10) - c = fnI(c, d, a, b, M[6], 0xa3014314, 15) - b = fnI(b, c, d, a, M[13], 0x4e0811a1, 21) - a = fnI(a, b, c, d, M[4], 0xf7537e82, 6) - d = fnI(d, a, b, c, M[11], 0xbd3af235, 10) - c = fnI(c, d, a, b, M[2], 0x2ad7d2bb, 15) - b = fnI(b, c, d, a, M[9], 0xeb86d391, 21) - - this._a = (this._a + a) | 0 - this._b = (this._b + b) | 0 - this._c = (this._c + c) | 0 - this._d = (this._d + d) | 0 -} - -MD5.prototype._digest = function () { - // create padding and handle blocks - this._block[this._blockOffset++] = 0x80 - if (this._blockOffset > 56) { - this._block.fill(0, this._blockOffset, 64) - this._update() - this._blockOffset = 0 - } - - this._block.fill(0, this._blockOffset, 56) - this._block.writeUInt32LE(this._length[0], 56) - this._block.writeUInt32LE(this._length[1], 60) - this._update() - - // produce result - var buffer = Buffer.allocUnsafe(16) - buffer.writeInt32LE(this._a, 0) - buffer.writeInt32LE(this._b, 4) - buffer.writeInt32LE(this._c, 8) - buffer.writeInt32LE(this._d, 12) - return buffer -} - -function rotl (x, n) { - return (x << n) | (x >>> (32 - n)) -} - -function fnF (a, b, c, d, m, k, s) { - return (rotl((a + ((b & c) | ((~b) & d)) + m + k) | 0, s) + b) | 0 -} - -function fnG (a, b, c, d, m, k, s) { - return (rotl((a + ((b & d) | (c & (~d))) + m + k) | 0, s) + b) | 0 -} - -function fnH (a, b, c, d, m, k, s) { - return (rotl((a + (b ^ c ^ d) + m + k) | 0, s) + b) | 0 -} - -function fnI (a, b, c, d, m, k, s) { - return (rotl((a + ((c ^ (b | (~d)))) + m + k) | 0, s) + b) | 0 -} - -module.exports = MD5 - -},{"inherits":"Bm0n","hash-base":"UcQW","safe-buffer":"Wugr"}],"quyi":[function(require,module,exports) { - -'use strict' -var Buffer = require('buffer').Buffer -var inherits = require('inherits') -var HashBase = require('hash-base') - -var ARRAY16 = new Array(16) - -var zl = [ - 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, - 7, 4, 13, 1, 10, 6, 15, 3, 12, 0, 9, 5, 2, 14, 11, 8, - 3, 10, 14, 4, 9, 15, 8, 1, 2, 7, 0, 6, 13, 11, 5, 12, - 1, 9, 11, 10, 0, 8, 12, 4, 13, 3, 7, 15, 14, 5, 6, 2, - 4, 0, 5, 9, 7, 12, 2, 10, 14, 1, 3, 8, 11, 6, 15, 13 -] - -var zr = [ - 5, 14, 7, 0, 9, 2, 11, 4, 13, 6, 15, 8, 1, 10, 3, 12, - 6, 11, 3, 7, 0, 13, 5, 10, 14, 15, 8, 12, 4, 9, 1, 2, - 15, 5, 1, 3, 7, 14, 6, 9, 11, 8, 12, 2, 10, 0, 4, 13, - 8, 6, 4, 1, 3, 11, 15, 0, 5, 12, 2, 13, 9, 7, 10, 14, - 12, 15, 10, 4, 1, 5, 8, 7, 6, 2, 13, 14, 0, 3, 9, 11 -] - -var sl = [ - 11, 14, 15, 12, 5, 8, 7, 9, 11, 13, 14, 15, 6, 7, 9, 8, - 7, 6, 8, 13, 11, 9, 7, 15, 7, 12, 15, 9, 11, 7, 13, 12, - 11, 13, 6, 7, 14, 9, 13, 15, 14, 8, 13, 6, 5, 12, 7, 5, - 11, 12, 14, 15, 14, 15, 9, 8, 9, 14, 5, 6, 8, 6, 5, 12, - 9, 15, 5, 11, 6, 8, 13, 12, 5, 12, 13, 14, 11, 8, 5, 6 -] - -var sr = [ - 8, 9, 9, 11, 13, 15, 15, 5, 7, 7, 8, 11, 14, 14, 12, 6, - 9, 13, 15, 7, 12, 8, 9, 11, 7, 7, 12, 7, 6, 15, 13, 11, - 9, 7, 15, 11, 8, 6, 6, 14, 12, 13, 5, 14, 13, 13, 7, 5, - 15, 5, 8, 11, 14, 14, 6, 14, 6, 9, 12, 9, 12, 5, 15, 8, - 8, 5, 12, 9, 12, 5, 14, 6, 8, 13, 6, 5, 15, 13, 11, 11 -] - -var hl = [0x00000000, 0x5a827999, 0x6ed9eba1, 0x8f1bbcdc, 0xa953fd4e] -var hr = [0x50a28be6, 0x5c4dd124, 0x6d703ef3, 0x7a6d76e9, 0x00000000] - -function RIPEMD160 () { - HashBase.call(this, 64) - - // state - this._a = 0x67452301 - this._b = 0xefcdab89 - this._c = 0x98badcfe - this._d = 0x10325476 - this._e = 0xc3d2e1f0 -} - -inherits(RIPEMD160, HashBase) - -RIPEMD160.prototype._update = function () { - var words = ARRAY16 - for (var j = 0; j < 16; ++j) words[j] = this._block.readInt32LE(j * 4) - - var al = this._a | 0 - var bl = this._b | 0 - var cl = this._c | 0 - var dl = this._d | 0 - var el = this._e | 0 - - var ar = this._a | 0 - var br = this._b | 0 - var cr = this._c | 0 - var dr = this._d | 0 - var er = this._e | 0 - - // computation - for (var i = 0; i < 80; i += 1) { - var tl - var tr - if (i < 16) { - tl = fn1(al, bl, cl, dl, el, words[zl[i]], hl[0], sl[i]) - tr = fn5(ar, br, cr, dr, er, words[zr[i]], hr[0], sr[i]) - } else if (i < 32) { - tl = fn2(al, bl, cl, dl, el, words[zl[i]], hl[1], sl[i]) - tr = fn4(ar, br, cr, dr, er, words[zr[i]], hr[1], sr[i]) - } else if (i < 48) { - tl = fn3(al, bl, cl, dl, el, words[zl[i]], hl[2], sl[i]) - tr = fn3(ar, br, cr, dr, er, words[zr[i]], hr[2], sr[i]) - } else if (i < 64) { - tl = fn4(al, bl, cl, dl, el, words[zl[i]], hl[3], sl[i]) - tr = fn2(ar, br, cr, dr, er, words[zr[i]], hr[3], sr[i]) - } else { // if (i<80) { - tl = fn5(al, bl, cl, dl, el, words[zl[i]], hl[4], sl[i]) - tr = fn1(ar, br, cr, dr, er, words[zr[i]], hr[4], sr[i]) - } - - al = el - el = dl - dl = rotl(cl, 10) - cl = bl - bl = tl - - ar = er - er = dr - dr = rotl(cr, 10) - cr = br - br = tr - } - - // update state - var t = (this._b + cl + dr) | 0 - this._b = (this._c + dl + er) | 0 - this._c = (this._d + el + ar) | 0 - this._d = (this._e + al + br) | 0 - this._e = (this._a + bl + cr) | 0 - this._a = t -} - -RIPEMD160.prototype._digest = function () { - // create padding and handle blocks - this._block[this._blockOffset++] = 0x80 - if (this._blockOffset > 56) { - this._block.fill(0, this._blockOffset, 64) - this._update() - this._blockOffset = 0 - } - - this._block.fill(0, this._blockOffset, 56) - this._block.writeUInt32LE(this._length[0], 56) - this._block.writeUInt32LE(this._length[1], 60) - this._update() - - // produce result - var buffer = Buffer.alloc ? Buffer.alloc(20) : new Buffer(20) - buffer.writeInt32LE(this._a, 0) - buffer.writeInt32LE(this._b, 4) - buffer.writeInt32LE(this._c, 8) - buffer.writeInt32LE(this._d, 12) - buffer.writeInt32LE(this._e, 16) - return buffer -} - -function rotl (x, n) { - return (x << n) | (x >>> (32 - n)) -} - -function fn1 (a, b, c, d, e, m, k, s) { - return (rotl((a + (b ^ c ^ d) + m + k) | 0, s) + e) | 0 -} - -function fn2 (a, b, c, d, e, m, k, s) { - return (rotl((a + ((b & c) | ((~b) & d)) + m + k) | 0, s) + e) | 0 -} - -function fn3 (a, b, c, d, e, m, k, s) { - return (rotl((a + ((b | (~c)) ^ d) + m + k) | 0, s) + e) | 0 -} - -function fn4 (a, b, c, d, e, m, k, s) { - return (rotl((a + ((b & d) | (c & (~d))) + m + k) | 0, s) + e) | 0 -} - -function fn5 (a, b, c, d, e, m, k, s) { - return (rotl((a + (b ^ (c | (~d))) + m + k) | 0, s) + e) | 0 -} - -module.exports = RIPEMD160 - -},{"buffer":"dskh","inherits":"Bm0n","hash-base":"UcQW"}],"VHby":[function(require,module,exports) { - -var Buffer = require('safe-buffer').Buffer - -// prototype class for hash functions -function Hash (blockSize, finalSize) { - this._block = Buffer.alloc(blockSize) - this._finalSize = finalSize - this._blockSize = blockSize - this._len = 0 -} - -Hash.prototype.update = function (data, enc) { - if (typeof data === 'string') { - enc = enc || 'utf8' - data = Buffer.from(data, enc) - } - - var block = this._block - var blockSize = this._blockSize - var length = data.length - var accum = this._len - - for (var offset = 0; offset < length;) { - var assigned = accum % blockSize - var remainder = Math.min(length - offset, blockSize - assigned) - - for (var i = 0; i < remainder; i++) { - block[assigned + i] = data[offset + i] - } - - accum += remainder - offset += remainder - - if ((accum % blockSize) === 0) { - this._update(block) - } - } - - this._len += length - return this -} - -Hash.prototype.digest = function (enc) { - var rem = this._len % this._blockSize - - this._block[rem] = 0x80 - - // zero (rem + 1) trailing bits, where (rem + 1) is the smallest - // non-negative solution to the equation (length + 1 + (rem + 1)) === finalSize mod blockSize - this._block.fill(0, rem + 1) - - if (rem >= this._finalSize) { - this._update(this._block) - this._block.fill(0) - } - - var bits = this._len * 8 - - // uint32 - if (bits <= 0xffffffff) { - this._block.writeUInt32BE(bits, this._blockSize - 4) - - // uint64 - } else { - var lowBits = (bits & 0xffffffff) >>> 0 - var highBits = (bits - lowBits) / 0x100000000 - - this._block.writeUInt32BE(highBits, this._blockSize - 8) - this._block.writeUInt32BE(lowBits, this._blockSize - 4) - } - - this._update(this._block) - var hash = this._hash() - - return enc ? hash.toString(enc) : hash -} - -Hash.prototype._update = function () { - throw new Error('_update must be implemented by subclass') -} - -module.exports = Hash - -},{"safe-buffer":"Wugr"}],"j9dE":[function(require,module,exports) { - -/* - * A JavaScript implementation of the Secure Hash Algorithm, SHA-0, as defined - * in FIPS PUB 180-1 - * This source code is derived from sha1.js of the same repository. - * The difference between SHA-0 and SHA-1 is just a bitwise rotate left - * operation was added. - */ - -var inherits = require('inherits') -var Hash = require('./hash') -var Buffer = require('safe-buffer').Buffer - -var K = [ - 0x5a827999, 0x6ed9eba1, 0x8f1bbcdc | 0, 0xca62c1d6 | 0 -] - -var W = new Array(80) - -function Sha () { - this.init() - this._w = W - - Hash.call(this, 64, 56) -} - -inherits(Sha, Hash) - -Sha.prototype.init = function () { - this._a = 0x67452301 - this._b = 0xefcdab89 - this._c = 0x98badcfe - this._d = 0x10325476 - this._e = 0xc3d2e1f0 - - return this -} - -function rotl5 (num) { - return (num << 5) | (num >>> 27) -} - -function rotl30 (num) { - return (num << 30) | (num >>> 2) -} - -function ft (s, b, c, d) { - if (s === 0) return (b & c) | ((~b) & d) - if (s === 2) return (b & c) | (b & d) | (c & d) - return b ^ c ^ d -} - -Sha.prototype._update = function (M) { - var W = this._w - - var a = this._a | 0 - var b = this._b | 0 - var c = this._c | 0 - var d = this._d | 0 - var e = this._e | 0 - - for (var i = 0; i < 16; ++i) W[i] = M.readInt32BE(i * 4) - for (; i < 80; ++i) W[i] = W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16] - - for (var j = 0; j < 80; ++j) { - var s = ~~(j / 20) - var t = (rotl5(a) + ft(s, b, c, d) + e + W[j] + K[s]) | 0 - - e = d - d = c - c = rotl30(b) - b = a - a = t - } - - this._a = (a + this._a) | 0 - this._b = (b + this._b) | 0 - this._c = (c + this._c) | 0 - this._d = (d + this._d) | 0 - this._e = (e + this._e) | 0 -} - -Sha.prototype._hash = function () { - var H = Buffer.allocUnsafe(20) - - H.writeInt32BE(this._a | 0, 0) - H.writeInt32BE(this._b | 0, 4) - H.writeInt32BE(this._c | 0, 8) - H.writeInt32BE(this._d | 0, 12) - H.writeInt32BE(this._e | 0, 16) - - return H -} - -module.exports = Sha - -},{"inherits":"Bm0n","./hash":"VHby","safe-buffer":"Wugr"}],"oPH4":[function(require,module,exports) { - -/* - * A JavaScript implementation of the Secure Hash Algorithm, SHA-1, as defined - * in FIPS PUB 180-1 - * Version 2.1a Copyright Paul Johnston 2000 - 2002. - * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet - * Distributed under the BSD License - * See http://pajhome.org.uk/crypt/md5 for details. - */ - -var inherits = require('inherits') -var Hash = require('./hash') -var Buffer = require('safe-buffer').Buffer - -var K = [ - 0x5a827999, 0x6ed9eba1, 0x8f1bbcdc | 0, 0xca62c1d6 | 0 -] - -var W = new Array(80) - -function Sha1 () { - this.init() - this._w = W - - Hash.call(this, 64, 56) -} - -inherits(Sha1, Hash) - -Sha1.prototype.init = function () { - this._a = 0x67452301 - this._b = 0xefcdab89 - this._c = 0x98badcfe - this._d = 0x10325476 - this._e = 0xc3d2e1f0 - - return this -} - -function rotl1 (num) { - return (num << 1) | (num >>> 31) -} - -function rotl5 (num) { - return (num << 5) | (num >>> 27) -} - -function rotl30 (num) { - return (num << 30) | (num >>> 2) -} - -function ft (s, b, c, d) { - if (s === 0) return (b & c) | ((~b) & d) - if (s === 2) return (b & c) | (b & d) | (c & d) - return b ^ c ^ d -} - -Sha1.prototype._update = function (M) { - var W = this._w - - var a = this._a | 0 - var b = this._b | 0 - var c = this._c | 0 - var d = this._d | 0 - var e = this._e | 0 - - for (var i = 0; i < 16; ++i) W[i] = M.readInt32BE(i * 4) - for (; i < 80; ++i) W[i] = rotl1(W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16]) - - for (var j = 0; j < 80; ++j) { - var s = ~~(j / 20) - var t = (rotl5(a) + ft(s, b, c, d) + e + W[j] + K[s]) | 0 - - e = d - d = c - c = rotl30(b) - b = a - a = t - } - - this._a = (a + this._a) | 0 - this._b = (b + this._b) | 0 - this._c = (c + this._c) | 0 - this._d = (d + this._d) | 0 - this._e = (e + this._e) | 0 -} - -Sha1.prototype._hash = function () { - var H = Buffer.allocUnsafe(20) - - H.writeInt32BE(this._a | 0, 0) - H.writeInt32BE(this._b | 0, 4) - H.writeInt32BE(this._c | 0, 8) - H.writeInt32BE(this._d | 0, 12) - H.writeInt32BE(this._e | 0, 16) - - return H -} - -module.exports = Sha1 - -},{"inherits":"Bm0n","./hash":"VHby","safe-buffer":"Wugr"}],"IUSb":[function(require,module,exports) { - -/** - * A JavaScript implementation of the Secure Hash Algorithm, SHA-256, as defined - * in FIPS 180-2 - * Version 2.2-beta Copyright Angel Marin, Paul Johnston 2000 - 2009. - * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet - * - */ - -var inherits = require('inherits') -var Hash = require('./hash') -var Buffer = require('safe-buffer').Buffer - -var K = [ - 0x428A2F98, 0x71374491, 0xB5C0FBCF, 0xE9B5DBA5, - 0x3956C25B, 0x59F111F1, 0x923F82A4, 0xAB1C5ED5, - 0xD807AA98, 0x12835B01, 0x243185BE, 0x550C7DC3, - 0x72BE5D74, 0x80DEB1FE, 0x9BDC06A7, 0xC19BF174, - 0xE49B69C1, 0xEFBE4786, 0x0FC19DC6, 0x240CA1CC, - 0x2DE92C6F, 0x4A7484AA, 0x5CB0A9DC, 0x76F988DA, - 0x983E5152, 0xA831C66D, 0xB00327C8, 0xBF597FC7, - 0xC6E00BF3, 0xD5A79147, 0x06CA6351, 0x14292967, - 0x27B70A85, 0x2E1B2138, 0x4D2C6DFC, 0x53380D13, - 0x650A7354, 0x766A0ABB, 0x81C2C92E, 0x92722C85, - 0xA2BFE8A1, 0xA81A664B, 0xC24B8B70, 0xC76C51A3, - 0xD192E819, 0xD6990624, 0xF40E3585, 0x106AA070, - 0x19A4C116, 0x1E376C08, 0x2748774C, 0x34B0BCB5, - 0x391C0CB3, 0x4ED8AA4A, 0x5B9CCA4F, 0x682E6FF3, - 0x748F82EE, 0x78A5636F, 0x84C87814, 0x8CC70208, - 0x90BEFFFA, 0xA4506CEB, 0xBEF9A3F7, 0xC67178F2 -] - -var W = new Array(64) - -function Sha256 () { - this.init() - - this._w = W // new Array(64) - - Hash.call(this, 64, 56) -} - -inherits(Sha256, Hash) - -Sha256.prototype.init = function () { - this._a = 0x6a09e667 - this._b = 0xbb67ae85 - this._c = 0x3c6ef372 - this._d = 0xa54ff53a - this._e = 0x510e527f - this._f = 0x9b05688c - this._g = 0x1f83d9ab - this._h = 0x5be0cd19 - - return this -} - -function ch (x, y, z) { - return z ^ (x & (y ^ z)) -} - -function maj (x, y, z) { - return (x & y) | (z & (x | y)) -} - -function sigma0 (x) { - return (x >>> 2 | x << 30) ^ (x >>> 13 | x << 19) ^ (x >>> 22 | x << 10) -} - -function sigma1 (x) { - return (x >>> 6 | x << 26) ^ (x >>> 11 | x << 21) ^ (x >>> 25 | x << 7) -} - -function gamma0 (x) { - return (x >>> 7 | x << 25) ^ (x >>> 18 | x << 14) ^ (x >>> 3) -} - -function gamma1 (x) { - return (x >>> 17 | x << 15) ^ (x >>> 19 | x << 13) ^ (x >>> 10) -} - -Sha256.prototype._update = function (M) { - var W = this._w - - var a = this._a | 0 - var b = this._b | 0 - var c = this._c | 0 - var d = this._d | 0 - var e = this._e | 0 - var f = this._f | 0 - var g = this._g | 0 - var h = this._h | 0 - - for (var i = 0; i < 16; ++i) W[i] = M.readInt32BE(i * 4) - for (; i < 64; ++i) W[i] = (gamma1(W[i - 2]) + W[i - 7] + gamma0(W[i - 15]) + W[i - 16]) | 0 - - for (var j = 0; j < 64; ++j) { - var T1 = (h + sigma1(e) + ch(e, f, g) + K[j] + W[j]) | 0 - var T2 = (sigma0(a) + maj(a, b, c)) | 0 - - h = g - g = f - f = e - e = (d + T1) | 0 - d = c - c = b - b = a - a = (T1 + T2) | 0 - } - - this._a = (a + this._a) | 0 - this._b = (b + this._b) | 0 - this._c = (c + this._c) | 0 - this._d = (d + this._d) | 0 - this._e = (e + this._e) | 0 - this._f = (f + this._f) | 0 - this._g = (g + this._g) | 0 - this._h = (h + this._h) | 0 -} - -Sha256.prototype._hash = function () { - var H = Buffer.allocUnsafe(32) - - H.writeInt32BE(this._a, 0) - H.writeInt32BE(this._b, 4) - H.writeInt32BE(this._c, 8) - H.writeInt32BE(this._d, 12) - H.writeInt32BE(this._e, 16) - H.writeInt32BE(this._f, 20) - H.writeInt32BE(this._g, 24) - H.writeInt32BE(this._h, 28) - - return H -} - -module.exports = Sha256 - -},{"inherits":"Bm0n","./hash":"VHby","safe-buffer":"Wugr"}],"MeLE":[function(require,module,exports) { - -/** - * A JavaScript implementation of the Secure Hash Algorithm, SHA-256, as defined - * in FIPS 180-2 - * Version 2.2-beta Copyright Angel Marin, Paul Johnston 2000 - 2009. - * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet - * - */ - -var inherits = require('inherits') -var Sha256 = require('./sha256') -var Hash = require('./hash') -var Buffer = require('safe-buffer').Buffer - -var W = new Array(64) - -function Sha224 () { - this.init() - - this._w = W // new Array(64) - - Hash.call(this, 64, 56) -} - -inherits(Sha224, Sha256) - -Sha224.prototype.init = function () { - this._a = 0xc1059ed8 - this._b = 0x367cd507 - this._c = 0x3070dd17 - this._d = 0xf70e5939 - this._e = 0xffc00b31 - this._f = 0x68581511 - this._g = 0x64f98fa7 - this._h = 0xbefa4fa4 - - return this -} - -Sha224.prototype._hash = function () { - var H = Buffer.allocUnsafe(28) - - H.writeInt32BE(this._a, 0) - H.writeInt32BE(this._b, 4) - H.writeInt32BE(this._c, 8) - H.writeInt32BE(this._d, 12) - H.writeInt32BE(this._e, 16) - H.writeInt32BE(this._f, 20) - H.writeInt32BE(this._g, 24) - - return H -} - -module.exports = Sha224 - -},{"inherits":"Bm0n","./sha256":"IUSb","./hash":"VHby","safe-buffer":"Wugr"}],"sILY":[function(require,module,exports) { - -var inherits = require('inherits') -var Hash = require('./hash') -var Buffer = require('safe-buffer').Buffer - -var K = [ - 0x428a2f98, 0xd728ae22, 0x71374491, 0x23ef65cd, - 0xb5c0fbcf, 0xec4d3b2f, 0xe9b5dba5, 0x8189dbbc, - 0x3956c25b, 0xf348b538, 0x59f111f1, 0xb605d019, - 0x923f82a4, 0xaf194f9b, 0xab1c5ed5, 0xda6d8118, - 0xd807aa98, 0xa3030242, 0x12835b01, 0x45706fbe, - 0x243185be, 0x4ee4b28c, 0x550c7dc3, 0xd5ffb4e2, - 0x72be5d74, 0xf27b896f, 0x80deb1fe, 0x3b1696b1, - 0x9bdc06a7, 0x25c71235, 0xc19bf174, 0xcf692694, - 0xe49b69c1, 0x9ef14ad2, 0xefbe4786, 0x384f25e3, - 0x0fc19dc6, 0x8b8cd5b5, 0x240ca1cc, 0x77ac9c65, - 0x2de92c6f, 0x592b0275, 0x4a7484aa, 0x6ea6e483, - 0x5cb0a9dc, 0xbd41fbd4, 0x76f988da, 0x831153b5, - 0x983e5152, 0xee66dfab, 0xa831c66d, 0x2db43210, - 0xb00327c8, 0x98fb213f, 0xbf597fc7, 0xbeef0ee4, - 0xc6e00bf3, 0x3da88fc2, 0xd5a79147, 0x930aa725, - 0x06ca6351, 0xe003826f, 0x14292967, 0x0a0e6e70, - 0x27b70a85, 0x46d22ffc, 0x2e1b2138, 0x5c26c926, - 0x4d2c6dfc, 0x5ac42aed, 0x53380d13, 0x9d95b3df, - 0x650a7354, 0x8baf63de, 0x766a0abb, 0x3c77b2a8, - 0x81c2c92e, 0x47edaee6, 0x92722c85, 0x1482353b, - 0xa2bfe8a1, 0x4cf10364, 0xa81a664b, 0xbc423001, - 0xc24b8b70, 0xd0f89791, 0xc76c51a3, 0x0654be30, - 0xd192e819, 0xd6ef5218, 0xd6990624, 0x5565a910, - 0xf40e3585, 0x5771202a, 0x106aa070, 0x32bbd1b8, - 0x19a4c116, 0xb8d2d0c8, 0x1e376c08, 0x5141ab53, - 0x2748774c, 0xdf8eeb99, 0x34b0bcb5, 0xe19b48a8, - 0x391c0cb3, 0xc5c95a63, 0x4ed8aa4a, 0xe3418acb, - 0x5b9cca4f, 0x7763e373, 0x682e6ff3, 0xd6b2b8a3, - 0x748f82ee, 0x5defb2fc, 0x78a5636f, 0x43172f60, - 0x84c87814, 0xa1f0ab72, 0x8cc70208, 0x1a6439ec, - 0x90befffa, 0x23631e28, 0xa4506ceb, 0xde82bde9, - 0xbef9a3f7, 0xb2c67915, 0xc67178f2, 0xe372532b, - 0xca273ece, 0xea26619c, 0xd186b8c7, 0x21c0c207, - 0xeada7dd6, 0xcde0eb1e, 0xf57d4f7f, 0xee6ed178, - 0x06f067aa, 0x72176fba, 0x0a637dc5, 0xa2c898a6, - 0x113f9804, 0xbef90dae, 0x1b710b35, 0x131c471b, - 0x28db77f5, 0x23047d84, 0x32caab7b, 0x40c72493, - 0x3c9ebe0a, 0x15c9bebc, 0x431d67c4, 0x9c100d4c, - 0x4cc5d4be, 0xcb3e42b6, 0x597f299c, 0xfc657e2a, - 0x5fcb6fab, 0x3ad6faec, 0x6c44198c, 0x4a475817 -] - -var W = new Array(160) - -function Sha512 () { - this.init() - this._w = W - - Hash.call(this, 128, 112) -} - -inherits(Sha512, Hash) - -Sha512.prototype.init = function () { - this._ah = 0x6a09e667 - this._bh = 0xbb67ae85 - this._ch = 0x3c6ef372 - this._dh = 0xa54ff53a - this._eh = 0x510e527f - this._fh = 0x9b05688c - this._gh = 0x1f83d9ab - this._hh = 0x5be0cd19 - - this._al = 0xf3bcc908 - this._bl = 0x84caa73b - this._cl = 0xfe94f82b - this._dl = 0x5f1d36f1 - this._el = 0xade682d1 - this._fl = 0x2b3e6c1f - this._gl = 0xfb41bd6b - this._hl = 0x137e2179 - - return this -} - -function Ch (x, y, z) { - return z ^ (x & (y ^ z)) -} - -function maj (x, y, z) { - return (x & y) | (z & (x | y)) -} - -function sigma0 (x, xl) { - return (x >>> 28 | xl << 4) ^ (xl >>> 2 | x << 30) ^ (xl >>> 7 | x << 25) -} - -function sigma1 (x, xl) { - return (x >>> 14 | xl << 18) ^ (x >>> 18 | xl << 14) ^ (xl >>> 9 | x << 23) -} - -function Gamma0 (x, xl) { - return (x >>> 1 | xl << 31) ^ (x >>> 8 | xl << 24) ^ (x >>> 7) -} - -function Gamma0l (x, xl) { - return (x >>> 1 | xl << 31) ^ (x >>> 8 | xl << 24) ^ (x >>> 7 | xl << 25) -} - -function Gamma1 (x, xl) { - return (x >>> 19 | xl << 13) ^ (xl >>> 29 | x << 3) ^ (x >>> 6) -} - -function Gamma1l (x, xl) { - return (x >>> 19 | xl << 13) ^ (xl >>> 29 | x << 3) ^ (x >>> 6 | xl << 26) -} - -function getCarry (a, b) { - return (a >>> 0) < (b >>> 0) ? 1 : 0 -} - -Sha512.prototype._update = function (M) { - var W = this._w - - var ah = this._ah | 0 - var bh = this._bh | 0 - var ch = this._ch | 0 - var dh = this._dh | 0 - var eh = this._eh | 0 - var fh = this._fh | 0 - var gh = this._gh | 0 - var hh = this._hh | 0 - - var al = this._al | 0 - var bl = this._bl | 0 - var cl = this._cl | 0 - var dl = this._dl | 0 - var el = this._el | 0 - var fl = this._fl | 0 - var gl = this._gl | 0 - var hl = this._hl | 0 - - for (var i = 0; i < 32; i += 2) { - W[i] = M.readInt32BE(i * 4) - W[i + 1] = M.readInt32BE(i * 4 + 4) - } - for (; i < 160; i += 2) { - var xh = W[i - 15 * 2] - var xl = W[i - 15 * 2 + 1] - var gamma0 = Gamma0(xh, xl) - var gamma0l = Gamma0l(xl, xh) - - xh = W[i - 2 * 2] - xl = W[i - 2 * 2 + 1] - var gamma1 = Gamma1(xh, xl) - var gamma1l = Gamma1l(xl, xh) - - // W[i] = gamma0 + W[i - 7] + gamma1 + W[i - 16] - var Wi7h = W[i - 7 * 2] - var Wi7l = W[i - 7 * 2 + 1] - - var Wi16h = W[i - 16 * 2] - var Wi16l = W[i - 16 * 2 + 1] - - var Wil = (gamma0l + Wi7l) | 0 - var Wih = (gamma0 + Wi7h + getCarry(Wil, gamma0l)) | 0 - Wil = (Wil + gamma1l) | 0 - Wih = (Wih + gamma1 + getCarry(Wil, gamma1l)) | 0 - Wil = (Wil + Wi16l) | 0 - Wih = (Wih + Wi16h + getCarry(Wil, Wi16l)) | 0 - - W[i] = Wih - W[i + 1] = Wil - } - - for (var j = 0; j < 160; j += 2) { - Wih = W[j] - Wil = W[j + 1] - - var majh = maj(ah, bh, ch) - var majl = maj(al, bl, cl) - - var sigma0h = sigma0(ah, al) - var sigma0l = sigma0(al, ah) - var sigma1h = sigma1(eh, el) - var sigma1l = sigma1(el, eh) - - // t1 = h + sigma1 + ch + K[j] + W[j] - var Kih = K[j] - var Kil = K[j + 1] - - var chh = Ch(eh, fh, gh) - var chl = Ch(el, fl, gl) - - var t1l = (hl + sigma1l) | 0 - var t1h = (hh + sigma1h + getCarry(t1l, hl)) | 0 - t1l = (t1l + chl) | 0 - t1h = (t1h + chh + getCarry(t1l, chl)) | 0 - t1l = (t1l + Kil) | 0 - t1h = (t1h + Kih + getCarry(t1l, Kil)) | 0 - t1l = (t1l + Wil) | 0 - t1h = (t1h + Wih + getCarry(t1l, Wil)) | 0 - - // t2 = sigma0 + maj - var t2l = (sigma0l + majl) | 0 - var t2h = (sigma0h + majh + getCarry(t2l, sigma0l)) | 0 - - hh = gh - hl = gl - gh = fh - gl = fl - fh = eh - fl = el - el = (dl + t1l) | 0 - eh = (dh + t1h + getCarry(el, dl)) | 0 - dh = ch - dl = cl - ch = bh - cl = bl - bh = ah - bl = al - al = (t1l + t2l) | 0 - ah = (t1h + t2h + getCarry(al, t1l)) | 0 - } - - this._al = (this._al + al) | 0 - this._bl = (this._bl + bl) | 0 - this._cl = (this._cl + cl) | 0 - this._dl = (this._dl + dl) | 0 - this._el = (this._el + el) | 0 - this._fl = (this._fl + fl) | 0 - this._gl = (this._gl + gl) | 0 - this._hl = (this._hl + hl) | 0 - - this._ah = (this._ah + ah + getCarry(this._al, al)) | 0 - this._bh = (this._bh + bh + getCarry(this._bl, bl)) | 0 - this._ch = (this._ch + ch + getCarry(this._cl, cl)) | 0 - this._dh = (this._dh + dh + getCarry(this._dl, dl)) | 0 - this._eh = (this._eh + eh + getCarry(this._el, el)) | 0 - this._fh = (this._fh + fh + getCarry(this._fl, fl)) | 0 - this._gh = (this._gh + gh + getCarry(this._gl, gl)) | 0 - this._hh = (this._hh + hh + getCarry(this._hl, hl)) | 0 -} - -Sha512.prototype._hash = function () { - var H = Buffer.allocUnsafe(64) - - function writeInt64BE (h, l, offset) { - H.writeInt32BE(h, offset) - H.writeInt32BE(l, offset + 4) - } - - writeInt64BE(this._ah, this._al, 0) - writeInt64BE(this._bh, this._bl, 8) - writeInt64BE(this._ch, this._cl, 16) - writeInt64BE(this._dh, this._dl, 24) - writeInt64BE(this._eh, this._el, 32) - writeInt64BE(this._fh, this._fl, 40) - writeInt64BE(this._gh, this._gl, 48) - writeInt64BE(this._hh, this._hl, 56) - - return H -} - -module.exports = Sha512 - -},{"inherits":"Bm0n","./hash":"VHby","safe-buffer":"Wugr"}],"V2o3":[function(require,module,exports) { - -var inherits = require('inherits') -var SHA512 = require('./sha512') -var Hash = require('./hash') -var Buffer = require('safe-buffer').Buffer - -var W = new Array(160) - -function Sha384 () { - this.init() - this._w = W - - Hash.call(this, 128, 112) -} - -inherits(Sha384, SHA512) - -Sha384.prototype.init = function () { - this._ah = 0xcbbb9d5d - this._bh = 0x629a292a - this._ch = 0x9159015a - this._dh = 0x152fecd8 - this._eh = 0x67332667 - this._fh = 0x8eb44a87 - this._gh = 0xdb0c2e0d - this._hh = 0x47b5481d - - this._al = 0xc1059ed8 - this._bl = 0x367cd507 - this._cl = 0x3070dd17 - this._dl = 0xf70e5939 - this._el = 0xffc00b31 - this._fl = 0x68581511 - this._gl = 0x64f98fa7 - this._hl = 0xbefa4fa4 - - return this -} - -Sha384.prototype._hash = function () { - var H = Buffer.allocUnsafe(48) - - function writeInt64BE (h, l, offset) { - H.writeInt32BE(h, offset) - H.writeInt32BE(l, offset + 4) - } - - writeInt64BE(this._ah, this._al, 0) - writeInt64BE(this._bh, this._bl, 8) - writeInt64BE(this._ch, this._cl, 16) - writeInt64BE(this._dh, this._dl, 24) - writeInt64BE(this._eh, this._el, 32) - writeInt64BE(this._fh, this._fl, 40) - - return H -} - -module.exports = Sha384 - -},{"inherits":"Bm0n","./sha512":"sILY","./hash":"VHby","safe-buffer":"Wugr"}],"t0b9":[function(require,module,exports) { -var exports = module.exports = function SHA (algorithm) { - algorithm = algorithm.toLowerCase() - - var Algorithm = exports[algorithm] - if (!Algorithm) throw new Error(algorithm + ' is not supported (we accept pull requests)') - - return new Algorithm() -} - -exports.sha = require('./sha') -exports.sha1 = require('./sha1') -exports.sha224 = require('./sha224') -exports.sha256 = require('./sha256') -exports.sha384 = require('./sha384') -exports.sha512 = require('./sha512') - -},{"./sha":"j9dE","./sha1":"oPH4","./sha224":"MeLE","./sha256":"IUSb","./sha384":"V2o3","./sha512":"sILY"}],"z0rv":[function(require,module,exports) { - -// Copyright Joyent, Inc. and other Node contributors. -// -// Permission is hereby granted, free of charge, to any person obtaining a -// copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to permit -// persons to whom the Software is furnished to do so, subject to the -// following conditions: -// -// The above copyright notice and this permission notice shall be included -// in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN -// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, -// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE -// USE OR OTHER DEALINGS IN THE SOFTWARE. - -'use strict'; - -/**/ - -var Buffer = require('safe-buffer').Buffer; -/**/ - -var isEncoding = Buffer.isEncoding || function (encoding) { - encoding = '' + encoding; - switch (encoding && encoding.toLowerCase()) { - case 'hex':case 'utf8':case 'utf-8':case 'ascii':case 'binary':case 'base64':case 'ucs2':case 'ucs-2':case 'utf16le':case 'utf-16le':case 'raw': - return true; - default: - return false; - } -}; - -function _normalizeEncoding(enc) { - if (!enc) return 'utf8'; - var retried; - while (true) { - switch (enc) { - case 'utf8': - case 'utf-8': - return 'utf8'; - case 'ucs2': - case 'ucs-2': - case 'utf16le': - case 'utf-16le': - return 'utf16le'; - case 'latin1': - case 'binary': - return 'latin1'; - case 'base64': - case 'ascii': - case 'hex': - return enc; - default: - if (retried) return; // undefined - enc = ('' + enc).toLowerCase(); - retried = true; - } - } -}; - -// Do not cache `Buffer.isEncoding` when checking encoding names as some -// modules monkey-patch it to support additional encodings -function normalizeEncoding(enc) { - var nenc = _normalizeEncoding(enc); - if (typeof nenc !== 'string' && (Buffer.isEncoding === isEncoding || !isEncoding(enc))) throw new Error('Unknown encoding: ' + enc); - return nenc || enc; -} - -// StringDecoder provides an interface for efficiently splitting a series of -// buffers into a series of JS strings without breaking apart multi-byte -// characters. -exports.StringDecoder = StringDecoder; -function StringDecoder(encoding) { - this.encoding = normalizeEncoding(encoding); - var nb; - switch (this.encoding) { - case 'utf16le': - this.text = utf16Text; - this.end = utf16End; - nb = 4; - break; - case 'utf8': - this.fillLast = utf8FillLast; - nb = 4; - break; - case 'base64': - this.text = base64Text; - this.end = base64End; - nb = 3; - break; - default: - this.write = simpleWrite; - this.end = simpleEnd; - return; - } - this.lastNeed = 0; - this.lastTotal = 0; - this.lastChar = Buffer.allocUnsafe(nb); -} - -StringDecoder.prototype.write = function (buf) { - if (buf.length === 0) return ''; - var r; - var i; - if (this.lastNeed) { - r = this.fillLast(buf); - if (r === undefined) return ''; - i = this.lastNeed; - this.lastNeed = 0; - } else { - i = 0; - } - if (i < buf.length) return r ? r + this.text(buf, i) : this.text(buf, i); - return r || ''; -}; - -StringDecoder.prototype.end = utf8End; - -// Returns only complete characters in a Buffer -StringDecoder.prototype.text = utf8Text; - -// Attempts to complete a partial non-UTF-8 character using bytes from a Buffer -StringDecoder.prototype.fillLast = function (buf) { - if (this.lastNeed <= buf.length) { - buf.copy(this.lastChar, this.lastTotal - this.lastNeed, 0, this.lastNeed); - return this.lastChar.toString(this.encoding, 0, this.lastTotal); - } - buf.copy(this.lastChar, this.lastTotal - this.lastNeed, 0, buf.length); - this.lastNeed -= buf.length; -}; - -// Checks the type of a UTF-8 byte, whether it's ASCII, a leading byte, or a -// continuation byte. If an invalid byte is detected, -2 is returned. -function utf8CheckByte(byte) { - if (byte <= 0x7F) return 0;else if (byte >> 5 === 0x06) return 2;else if (byte >> 4 === 0x0E) return 3;else if (byte >> 3 === 0x1E) return 4; - return byte >> 6 === 0x02 ? -1 : -2; -} - -// Checks at most 3 bytes at the end of a Buffer in order to detect an -// incomplete multi-byte UTF-8 character. The total number of bytes (2, 3, or 4) -// needed to complete the UTF-8 character (if applicable) are returned. -function utf8CheckIncomplete(self, buf, i) { - var j = buf.length - 1; - if (j < i) return 0; - var nb = utf8CheckByte(buf[j]); - if (nb >= 0) { - if (nb > 0) self.lastNeed = nb - 1; - return nb; - } - if (--j < i || nb === -2) return 0; - nb = utf8CheckByte(buf[j]); - if (nb >= 0) { - if (nb > 0) self.lastNeed = nb - 2; - return nb; - } - if (--j < i || nb === -2) return 0; - nb = utf8CheckByte(buf[j]); - if (nb >= 0) { - if (nb > 0) { - if (nb === 2) nb = 0;else self.lastNeed = nb - 3; - } - return nb; - } - return 0; -} - -// Validates as many continuation bytes for a multi-byte UTF-8 character as -// needed or are available. If we see a non-continuation byte where we expect -// one, we "replace" the validated continuation bytes we've seen so far with -// a single UTF-8 replacement character ('\ufffd'), to match v8's UTF-8 decoding -// behavior. The continuation byte check is included three times in the case -// where all of the continuation bytes for a character exist in the same buffer. -// It is also done this way as a slight performance increase instead of using a -// loop. -function utf8CheckExtraBytes(self, buf, p) { - if ((buf[0] & 0xC0) !== 0x80) { - self.lastNeed = 0; - return '\ufffd'; - } - if (self.lastNeed > 1 && buf.length > 1) { - if ((buf[1] & 0xC0) !== 0x80) { - self.lastNeed = 1; - return '\ufffd'; - } - if (self.lastNeed > 2 && buf.length > 2) { - if ((buf[2] & 0xC0) !== 0x80) { - self.lastNeed = 2; - return '\ufffd'; - } - } - } -} - -// Attempts to complete a multi-byte UTF-8 character using bytes from a Buffer. -function utf8FillLast(buf) { - var p = this.lastTotal - this.lastNeed; - var r = utf8CheckExtraBytes(this, buf, p); - if (r !== undefined) return r; - if (this.lastNeed <= buf.length) { - buf.copy(this.lastChar, p, 0, this.lastNeed); - return this.lastChar.toString(this.encoding, 0, this.lastTotal); - } - buf.copy(this.lastChar, p, 0, buf.length); - this.lastNeed -= buf.length; -} - -// Returns all complete UTF-8 characters in a Buffer. If the Buffer ended on a -// partial character, the character's bytes are buffered until the required -// number of bytes are available. -function utf8Text(buf, i) { - var total = utf8CheckIncomplete(this, buf, i); - if (!this.lastNeed) return buf.toString('utf8', i); - this.lastTotal = total; - var end = buf.length - (total - this.lastNeed); - buf.copy(this.lastChar, 0, end); - return buf.toString('utf8', i, end); -} - -// For UTF-8, a replacement character is added when ending on a partial -// character. -function utf8End(buf) { - var r = buf && buf.length ? this.write(buf) : ''; - if (this.lastNeed) return r + '\ufffd'; - return r; -} - -// UTF-16LE typically needs two bytes per character, but even if we have an even -// number of bytes available, we need to check if we end on a leading/high -// surrogate. In that case, we need to wait for the next two bytes in order to -// decode the last character properly. -function utf16Text(buf, i) { - if ((buf.length - i) % 2 === 0) { - var r = buf.toString('utf16le', i); - if (r) { - var c = r.charCodeAt(r.length - 1); - if (c >= 0xD800 && c <= 0xDBFF) { - this.lastNeed = 2; - this.lastTotal = 4; - this.lastChar[0] = buf[buf.length - 2]; - this.lastChar[1] = buf[buf.length - 1]; - return r.slice(0, -1); - } - } - return r; - } - this.lastNeed = 1; - this.lastTotal = 2; - this.lastChar[0] = buf[buf.length - 1]; - return buf.toString('utf16le', i, buf.length - 1); -} - -// For UTF-16LE we do not explicitly append special replacement characters if we -// end on a partial character, we simply let v8 handle that. -function utf16End(buf) { - var r = buf && buf.length ? this.write(buf) : ''; - if (this.lastNeed) { - var end = this.lastTotal - this.lastNeed; - return r + this.lastChar.toString('utf16le', 0, end); - } - return r; -} - -function base64Text(buf, i) { - var n = (buf.length - i) % 3; - if (n === 0) return buf.toString('base64', i); - this.lastNeed = 3 - n; - this.lastTotal = 3; - if (n === 1) { - this.lastChar[0] = buf[buf.length - 1]; - } else { - this.lastChar[0] = buf[buf.length - 2]; - this.lastChar[1] = buf[buf.length - 1]; - } - return buf.toString('base64', i, buf.length - n); -} - -function base64End(buf) { - var r = buf && buf.length ? this.write(buf) : ''; - if (this.lastNeed) return r + this.lastChar.toString('base64', 0, 3 - this.lastNeed); - return r; -} - -// Pass bytes on through for single-byte encodings (e.g. ascii, latin1, hex) -function simpleWrite(buf) { - return buf.toString(this.encoding); -} - -function simpleEnd(buf) { - return buf && buf.length ? this.write(buf) : ''; -} -},{"safe-buffer":"Wugr"}],"bjfr":[function(require,module,exports) { - -var Buffer = require('safe-buffer').Buffer -var Transform = require('stream').Transform -var StringDecoder = require('string_decoder').StringDecoder -var inherits = require('inherits') - -function CipherBase (hashMode) { - Transform.call(this) - this.hashMode = typeof hashMode === 'string' - if (this.hashMode) { - this[hashMode] = this._finalOrDigest - } else { - this.final = this._finalOrDigest - } - if (this._final) { - this.__final = this._final - this._final = null - } - this._decoder = null - this._encoding = null -} -inherits(CipherBase, Transform) - -CipherBase.prototype.update = function (data, inputEnc, outputEnc) { - if (typeof data === 'string') { - data = Buffer.from(data, inputEnc) - } - - var outData = this._update(data) - if (this.hashMode) return this - - if (outputEnc) { - outData = this._toString(outData, outputEnc) - } - - return outData -} - -CipherBase.prototype.setAutoPadding = function () {} -CipherBase.prototype.getAuthTag = function () { - throw new Error('trying to get auth tag in unsupported state') -} - -CipherBase.prototype.setAuthTag = function () { - throw new Error('trying to set auth tag in unsupported state') -} - -CipherBase.prototype.setAAD = function () { - throw new Error('trying to set aad in unsupported state') -} - -CipherBase.prototype._transform = function (data, _, next) { - var err - try { - if (this.hashMode) { - this._update(data) - } else { - this.push(this._update(data)) - } - } catch (e) { - err = e - } finally { - next(err) - } -} -CipherBase.prototype._flush = function (done) { - var err - try { - this.push(this.__final()) - } catch (e) { - err = e - } - - done(err) -} -CipherBase.prototype._finalOrDigest = function (outputEnc) { - var outData = this.__final() || Buffer.alloc(0) - if (outputEnc) { - outData = this._toString(outData, outputEnc, true) - } - return outData -} - -CipherBase.prototype._toString = function (value, enc, fin) { - if (!this._decoder) { - this._decoder = new StringDecoder(enc) - this._encoding = enc - } - - if (this._encoding !== enc) throw new Error('can\'t switch encodings') - - var out = this._decoder.write(value) - if (fin) { - out += this._decoder.end() - } - - return out -} - -module.exports = CipherBase - -},{"safe-buffer":"Wugr","stream":"fnRj","string_decoder":"z0rv","inherits":"Bm0n"}],"LF8r":[function(require,module,exports) { -'use strict' -var inherits = require('inherits') -var MD5 = require('md5.js') -var RIPEMD160 = require('ripemd160') -var sha = require('sha.js') -var Base = require('cipher-base') - -function Hash (hash) { - Base.call(this, 'digest') - - this._hash = hash -} - -inherits(Hash, Base) - -Hash.prototype._update = function (data) { - this._hash.update(data) -} - -Hash.prototype._final = function () { - return this._hash.digest() -} - -module.exports = function createHash (alg) { - alg = alg.toLowerCase() - if (alg === 'md5') return new MD5() - if (alg === 'rmd160' || alg === 'ripemd160') return new RIPEMD160() - - return new Hash(sha(alg)) -} - -},{"inherits":"Bm0n","md5.js":"OP64","ripemd160":"quyi","sha.js":"t0b9","cipher-base":"bjfr"}],"aHbo":[function(require,module,exports) { - -'use strict' -var inherits = require('inherits') -var Buffer = require('safe-buffer').Buffer - -var Base = require('cipher-base') - -var ZEROS = Buffer.alloc(128) -var blocksize = 64 - -function Hmac (alg, key) { - Base.call(this, 'digest') - if (typeof key === 'string') { - key = Buffer.from(key) - } - - this._alg = alg - this._key = key - - if (key.length > blocksize) { - key = alg(key) - } else if (key.length < blocksize) { - key = Buffer.concat([key, ZEROS], blocksize) - } - - var ipad = this._ipad = Buffer.allocUnsafe(blocksize) - var opad = this._opad = Buffer.allocUnsafe(blocksize) - - for (var i = 0; i < blocksize; i++) { - ipad[i] = key[i] ^ 0x36 - opad[i] = key[i] ^ 0x5C - } - - this._hash = [ipad] -} - -inherits(Hmac, Base) - -Hmac.prototype._update = function (data) { - this._hash.push(data) -} - -Hmac.prototype._final = function () { - var h = this._alg(Buffer.concat(this._hash)) - return this._alg(Buffer.concat([this._opad, h])) -} -module.exports = Hmac - -},{"inherits":"Bm0n","safe-buffer":"Wugr","cipher-base":"bjfr"}],"Mobq":[function(require,module,exports) { -var MD5 = require('md5.js') - -module.exports = function (buffer) { - return new MD5().update(buffer).digest() -} - -},{"md5.js":"OP64"}],"Cx6S":[function(require,module,exports) { - -'use strict' -var inherits = require('inherits') -var Legacy = require('./legacy') -var Base = require('cipher-base') -var Buffer = require('safe-buffer').Buffer -var md5 = require('create-hash/md5') -var RIPEMD160 = require('ripemd160') - -var sha = require('sha.js') - -var ZEROS = Buffer.alloc(128) - -function Hmac (alg, key) { - Base.call(this, 'digest') - if (typeof key === 'string') { - key = Buffer.from(key) - } - - var blocksize = (alg === 'sha512' || alg === 'sha384') ? 128 : 64 - - this._alg = alg - this._key = key - if (key.length > blocksize) { - var hash = alg === 'rmd160' ? new RIPEMD160() : sha(alg) - key = hash.update(key).digest() - } else if (key.length < blocksize) { - key = Buffer.concat([key, ZEROS], blocksize) - } - - var ipad = this._ipad = Buffer.allocUnsafe(blocksize) - var opad = this._opad = Buffer.allocUnsafe(blocksize) - - for (var i = 0; i < blocksize; i++) { - ipad[i] = key[i] ^ 0x36 - opad[i] = key[i] ^ 0x5C - } - this._hash = alg === 'rmd160' ? new RIPEMD160() : sha(alg) - this._hash.update(ipad) -} - -inherits(Hmac, Base) - -Hmac.prototype._update = function (data) { - this._hash.update(data) -} - -Hmac.prototype._final = function () { - var h = this._hash.digest() - var hash = this._alg === 'rmd160' ? new RIPEMD160() : sha(this._alg) - return hash.update(this._opad).update(h).digest() -} - -module.exports = function createHmac (alg, key) { - alg = alg.toLowerCase() - if (alg === 'rmd160' || alg === 'ripemd160') { - return new Hmac('rmd160', key) - } - if (alg === 'md5') { - return new Legacy(md5, key) - } - return new Hmac(alg, key) -} - -},{"inherits":"Bm0n","./legacy":"aHbo","cipher-base":"bjfr","safe-buffer":"Wugr","create-hash/md5":"Mobq","ripemd160":"quyi","sha.js":"t0b9"}],"V9ao":[function(require,module,exports) { -"use strict"; - -Object.defineProperty(exports, "__esModule", { - value: true -}); - -var createHash = require('create-hash'); - -var createHmac = require('create-hmac'); - -function hash160(buffer) { - var sha256Hash = createHash('sha256').update(buffer).digest(); - - try { - return createHash('rmd160').update(sha256Hash).digest(); - } catch (err) { - return createHash('ripemd160').update(sha256Hash).digest(); - } -} - -exports.hash160 = hash160; - -function hmacSHA512(key, data) { - return createHmac('sha512', key).update(data).digest(); -} - -exports.hmacSHA512 = hmacSHA512; -},{"create-hash":"LF8r","create-hmac":"Cx6S"}],"g2zT":[function(require,module,exports) { -'use strict' -// base-x encoding / decoding -// Copyright (c) 2018 base-x contributors -// Copyright (c) 2014-2018 The Bitcoin Core developers (base58.cpp) -// Distributed under the MIT software license, see the accompanying -// file LICENSE or http://www.opensource.org/licenses/mit-license.php. -// @ts-ignore -var _Buffer = require('safe-buffer').Buffer -function base (ALPHABET) { - if (ALPHABET.length >= 255) { throw new TypeError('Alphabet too long') } - var BASE_MAP = new Uint8Array(256) - BASE_MAP.fill(255) - for (var i = 0; i < ALPHABET.length; i++) { - var x = ALPHABET.charAt(i) - var xc = x.charCodeAt(0) - if (BASE_MAP[xc] !== 255) { throw new TypeError(x + ' is ambiguous') } - BASE_MAP[xc] = i - } - var BASE = ALPHABET.length - var LEADER = ALPHABET.charAt(0) - var FACTOR = Math.log(BASE) / Math.log(256) // log(BASE) / log(256), rounded up - var iFACTOR = Math.log(256) / Math.log(BASE) // log(256) / log(BASE), rounded up - function encode (source) { - if (!_Buffer.isBuffer(source)) { throw new TypeError('Expected Buffer') } - if (source.length === 0) { return '' } - // Skip & count leading zeroes. - var zeroes = 0 - var length = 0 - var pbegin = 0 - var pend = source.length - while (pbegin !== pend && source[pbegin] === 0) { - pbegin++ - zeroes++ - } - // Allocate enough space in big-endian base58 representation. - var size = ((pend - pbegin) * iFACTOR + 1) >>> 0 - var b58 = new Uint8Array(size) - // Process the bytes. - while (pbegin !== pend) { - var carry = source[pbegin] - // Apply "b58 = b58 * 256 + ch". - var i = 0 - for (var it1 = size - 1; (carry !== 0 || i < length) && (it1 !== -1); it1--, i++) { - carry += (256 * b58[it1]) >>> 0 - b58[it1] = (carry % BASE) >>> 0 - carry = (carry / BASE) >>> 0 - } - if (carry !== 0) { throw new Error('Non-zero carry') } - length = i - pbegin++ - } - // Skip leading zeroes in base58 result. - var it2 = size - length - while (it2 !== size && b58[it2] === 0) { - it2++ - } - // Translate the result into a string. - var str = LEADER.repeat(zeroes) - for (; it2 < size; ++it2) { str += ALPHABET.charAt(b58[it2]) } - return str - } - function decodeUnsafe (source) { - if (typeof source !== 'string') { throw new TypeError('Expected String') } - if (source.length === 0) { return _Buffer.alloc(0) } - var psz = 0 - // Skip leading spaces. - if (source[psz] === ' ') { return } - // Skip and count leading '1's. - var zeroes = 0 - var length = 0 - while (source[psz] === LEADER) { - zeroes++ - psz++ - } - // Allocate enough space in big-endian base256 representation. - var size = (((source.length - psz) * FACTOR) + 1) >>> 0 // log(58) / log(256), rounded up. - var b256 = new Uint8Array(size) - // Process the characters. - while (source[psz]) { - // Decode character - var carry = BASE_MAP[source.charCodeAt(psz)] - // Invalid character - if (carry === 255) { return } - var i = 0 - for (var it3 = size - 1; (carry !== 0 || i < length) && (it3 !== -1); it3--, i++) { - carry += (BASE * b256[it3]) >>> 0 - b256[it3] = (carry % 256) >>> 0 - carry = (carry / 256) >>> 0 - } - if (carry !== 0) { throw new Error('Non-zero carry') } - length = i - psz++ - } - // Skip trailing spaces. - if (source[psz] === ' ') { return } - // Skip leading zeroes in b256. - var it4 = size - length - while (it4 !== size && b256[it4] === 0) { - it4++ - } - var vch = _Buffer.allocUnsafe(zeroes + (size - it4)) - vch.fill(0x00, 0, zeroes) - var j = zeroes - while (it4 !== size) { - vch[j++] = b256[it4++] - } - return vch - } - function decode (string) { - var buffer = decodeUnsafe(string) - if (buffer) { return buffer } - throw new Error('Non-base' + BASE + ' character') - } - return { - encode: encode, - decodeUnsafe: decodeUnsafe, - decode: decode - } -} -module.exports = base - -},{"safe-buffer":"Wugr"}],"GtuF":[function(require,module,exports) { -var basex = require('base-x') -var ALPHABET = '123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz' - -module.exports = basex(ALPHABET) - -},{"base-x":"g2zT"}],"XHF5":[function(require,module,exports) { - -'use strict' - -var base58 = require('bs58') -var Buffer = require('safe-buffer').Buffer - -module.exports = function (checksumFn) { - // Encode a buffer as a base58-check encoded string - function encode (payload) { - var checksum = checksumFn(payload) - - return base58.encode(Buffer.concat([ - payload, - checksum - ], payload.length + 4)) - } - - function decodeRaw (buffer) { - var payload = buffer.slice(0, -4) - var checksum = buffer.slice(-4) - var newChecksum = checksumFn(payload) - - if (checksum[0] ^ newChecksum[0] | - checksum[1] ^ newChecksum[1] | - checksum[2] ^ newChecksum[2] | - checksum[3] ^ newChecksum[3]) return - - return payload - } - - // Decode a base58-check encoded string to a buffer, no result if checksum is wrong - function decodeUnsafe (string) { - var buffer = base58.decodeUnsafe(string) - if (!buffer) return - - return decodeRaw(buffer) - } - - function decode (string) { - var buffer = base58.decode(string) - var payload = decodeRaw(buffer, checksumFn) - if (!payload) throw new Error('Invalid checksum') - return payload - } - - return { - encode: encode, - decode: decode, - decodeUnsafe: decodeUnsafe - } -} - -},{"bs58":"GtuF","safe-buffer":"Wugr"}],"lJVR":[function(require,module,exports) { -'use strict' - -var createHash = require('create-hash') -var bs58checkBase = require('./base') - -// SHA256(SHA256(buffer)) -function sha256x2 (buffer) { - var tmp = createHash('sha256').update(buffer).digest() - return createHash('sha256').update(tmp).digest() -} - -module.exports = bs58checkBase(sha256x2) - -},{"create-hash":"LF8r","./base":"XHF5"}],"BOxy":[function(require,module,exports) { -var Buffer = require("buffer").Buffer; -(function (module, exports) { - 'use strict'; - - // Utils - function assert (val, msg) { - if (!val) throw new Error(msg || 'Assertion failed'); - } - - // Could use `inherits` module, but don't want to move from single file - // architecture yet. - function inherits (ctor, superCtor) { - ctor.super_ = superCtor; - var TempCtor = function () {}; - TempCtor.prototype = superCtor.prototype; - ctor.prototype = new TempCtor(); - ctor.prototype.constructor = ctor; - } - - // BN - - function BN (number, base, endian) { - if (BN.isBN(number)) { - return number; - } - - this.negative = 0; - this.words = null; - this.length = 0; - - // Reduction context - this.red = null; - - if (number !== null) { - if (base === 'le' || base === 'be') { - endian = base; - base = 10; - } - - this._init(number || 0, base || 10, endian || 'be'); - } - } - if (typeof module === 'object') { - module.exports = BN; - } else { - exports.BN = BN; - } - - BN.BN = BN; - BN.wordSize = 26; - - var Buffer; - try { - Buffer = require('buffer').Buffer; - } catch (e) { - } - - BN.isBN = function isBN (num) { - if (num instanceof BN) { - return true; - } - - return num !== null && typeof num === 'object' && - num.constructor.wordSize === BN.wordSize && Array.isArray(num.words); - }; - - BN.max = function max (left, right) { - if (left.cmp(right) > 0) return left; - return right; - }; - - BN.min = function min (left, right) { - if (left.cmp(right) < 0) return left; - return right; - }; - - BN.prototype._init = function init (number, base, endian) { - if (typeof number === 'number') { - return this._initNumber(number, base, endian); - } - - if (typeof number === 'object') { - return this._initArray(number, base, endian); - } - - if (base === 'hex') { - base = 16; - } - assert(base === (base | 0) && base >= 2 && base <= 36); - - number = number.toString().replace(/\s+/g, ''); - var start = 0; - if (number[0] === '-') { - start++; - } - - if (base === 16) { - this._parseHex(number, start); - } else { - this._parseBase(number, base, start); - } - - if (number[0] === '-') { - this.negative = 1; - } - - this.strip(); - - if (endian !== 'le') return; - - this._initArray(this.toArray(), base, endian); - }; - - BN.prototype._initNumber = function _initNumber (number, base, endian) { - if (number < 0) { - this.negative = 1; - number = -number; - } - if (number < 0x4000000) { - this.words = [ number & 0x3ffffff ]; - this.length = 1; - } else if (number < 0x10000000000000) { - this.words = [ - number & 0x3ffffff, - (number / 0x4000000) & 0x3ffffff - ]; - this.length = 2; - } else { - assert(number < 0x20000000000000); // 2 ^ 53 (unsafe) - this.words = [ - number & 0x3ffffff, - (number / 0x4000000) & 0x3ffffff, - 1 - ]; - this.length = 3; - } - - if (endian !== 'le') return; - - // Reverse the bytes - this._initArray(this.toArray(), base, endian); - }; - - BN.prototype._initArray = function _initArray (number, base, endian) { - // Perhaps a Uint8Array - assert(typeof number.length === 'number'); - if (number.length <= 0) { - this.words = [ 0 ]; - this.length = 1; - return this; - } - - this.length = Math.ceil(number.length / 3); - this.words = new Array(this.length); - for (var i = 0; i < this.length; i++) { - this.words[i] = 0; - } - - var j, w; - var off = 0; - if (endian === 'be') { - for (i = number.length - 1, j = 0; i >= 0; i -= 3) { - w = number[i] | (number[i - 1] << 8) | (number[i - 2] << 16); - this.words[j] |= (w << off) & 0x3ffffff; - this.words[j + 1] = (w >>> (26 - off)) & 0x3ffffff; - off += 24; - if (off >= 26) { - off -= 26; - j++; - } - } - } else if (endian === 'le') { - for (i = 0, j = 0; i < number.length; i += 3) { - w = number[i] | (number[i + 1] << 8) | (number[i + 2] << 16); - this.words[j] |= (w << off) & 0x3ffffff; - this.words[j + 1] = (w >>> (26 - off)) & 0x3ffffff; - off += 24; - if (off >= 26) { - off -= 26; - j++; - } - } - } - return this.strip(); - }; - - function parseHex (str, start, end) { - var r = 0; - var len = Math.min(str.length, end); - for (var i = start; i < len; i++) { - var c = str.charCodeAt(i) - 48; - - r <<= 4; - - // 'a' - 'f' - if (c >= 49 && c <= 54) { - r |= c - 49 + 0xa; - - // 'A' - 'F' - } else if (c >= 17 && c <= 22) { - r |= c - 17 + 0xa; - - // '0' - '9' - } else { - r |= c & 0xf; - } - } - return r; - } - - BN.prototype._parseHex = function _parseHex (number, start) { - // Create possibly bigger array to ensure that it fits the number - this.length = Math.ceil((number.length - start) / 6); - this.words = new Array(this.length); - for (var i = 0; i < this.length; i++) { - this.words[i] = 0; - } - - var j, w; - // Scan 24-bit chunks and add them to the number - var off = 0; - for (i = number.length - 6, j = 0; i >= start; i -= 6) { - w = parseHex(number, i, i + 6); - this.words[j] |= (w << off) & 0x3ffffff; - // NOTE: `0x3fffff` is intentional here, 26bits max shift + 24bit hex limb - this.words[j + 1] |= w >>> (26 - off) & 0x3fffff; - off += 24; - if (off >= 26) { - off -= 26; - j++; - } - } - if (i + 6 !== start) { - w = parseHex(number, start, i + 6); - this.words[j] |= (w << off) & 0x3ffffff; - this.words[j + 1] |= w >>> (26 - off) & 0x3fffff; - } - this.strip(); - }; - - function parseBase (str, start, end, mul) { - var r = 0; - var len = Math.min(str.length, end); - for (var i = start; i < len; i++) { - var c = str.charCodeAt(i) - 48; - - r *= mul; - - // 'a' - if (c >= 49) { - r += c - 49 + 0xa; - - // 'A' - } else if (c >= 17) { - r += c - 17 + 0xa; - - // '0' - '9' - } else { - r += c; - } - } - return r; - } - - BN.prototype._parseBase = function _parseBase (number, base, start) { - // Initialize as zero - this.words = [ 0 ]; - this.length = 1; - - // Find length of limb in base - for (var limbLen = 0, limbPow = 1; limbPow <= 0x3ffffff; limbPow *= base) { - limbLen++; - } - limbLen--; - limbPow = (limbPow / base) | 0; - - var total = number.length - start; - var mod = total % limbLen; - var end = Math.min(total, total - mod) + start; - - var word = 0; - for (var i = start; i < end; i += limbLen) { - word = parseBase(number, i, i + limbLen, base); - - this.imuln(limbPow); - if (this.words[0] + word < 0x4000000) { - this.words[0] += word; - } else { - this._iaddn(word); - } - } - - if (mod !== 0) { - var pow = 1; - word = parseBase(number, i, number.length, base); - - for (i = 0; i < mod; i++) { - pow *= base; - } - - this.imuln(pow); - if (this.words[0] + word < 0x4000000) { - this.words[0] += word; - } else { - this._iaddn(word); - } - } - }; - - BN.prototype.copy = function copy (dest) { - dest.words = new Array(this.length); - for (var i = 0; i < this.length; i++) { - dest.words[i] = this.words[i]; - } - dest.length = this.length; - dest.negative = this.negative; - dest.red = this.red; - }; - - BN.prototype.clone = function clone () { - var r = new BN(null); - this.copy(r); - return r; - }; - - BN.prototype._expand = function _expand (size) { - while (this.length < size) { - this.words[this.length++] = 0; - } - return this; - }; - - // Remove leading `0` from `this` - BN.prototype.strip = function strip () { - while (this.length > 1 && this.words[this.length - 1] === 0) { - this.length--; - } - return this._normSign(); - }; - - BN.prototype._normSign = function _normSign () { - // -0 = 0 - if (this.length === 1 && this.words[0] === 0) { - this.negative = 0; - } - return this; - }; - - BN.prototype.inspect = function inspect () { - return (this.red ? ''; - }; - - /* - - var zeros = []; - var groupSizes = []; - var groupBases = []; - - var s = ''; - var i = -1; - while (++i < BN.wordSize) { - zeros[i] = s; - s += '0'; - } - groupSizes[0] = 0; - groupSizes[1] = 0; - groupBases[0] = 0; - groupBases[1] = 0; - var base = 2 - 1; - while (++base < 36 + 1) { - var groupSize = 0; - var groupBase = 1; - while (groupBase < (1 << BN.wordSize) / base) { - groupBase *= base; - groupSize += 1; - } - groupSizes[base] = groupSize; - groupBases[base] = groupBase; - } - - */ - - var zeros = [ - '', - '0', - '00', - '000', - '0000', - '00000', - '000000', - '0000000', - '00000000', - '000000000', - '0000000000', - '00000000000', - '000000000000', - '0000000000000', - '00000000000000', - '000000000000000', - '0000000000000000', - '00000000000000000', - '000000000000000000', - '0000000000000000000', - '00000000000000000000', - '000000000000000000000', - '0000000000000000000000', - '00000000000000000000000', - '000000000000000000000000', - '0000000000000000000000000' - ]; - - var groupSizes = [ - 0, 0, - 25, 16, 12, 11, 10, 9, 8, - 8, 7, 7, 7, 7, 6, 6, - 6, 6, 6, 6, 6, 5, 5, - 5, 5, 5, 5, 5, 5, 5, - 5, 5, 5, 5, 5, 5, 5 - ]; - - var groupBases = [ - 0, 0, - 33554432, 43046721, 16777216, 48828125, 60466176, 40353607, 16777216, - 43046721, 10000000, 19487171, 35831808, 62748517, 7529536, 11390625, - 16777216, 24137569, 34012224, 47045881, 64000000, 4084101, 5153632, - 6436343, 7962624, 9765625, 11881376, 14348907, 17210368, 20511149, - 24300000, 28629151, 33554432, 39135393, 45435424, 52521875, 60466176 - ]; - - BN.prototype.toString = function toString (base, padding) { - base = base || 10; - padding = padding | 0 || 1; - - var out; - if (base === 16 || base === 'hex') { - out = ''; - var off = 0; - var carry = 0; - for (var i = 0; i < this.length; i++) { - var w = this.words[i]; - var word = (((w << off) | carry) & 0xffffff).toString(16); - carry = (w >>> (24 - off)) & 0xffffff; - if (carry !== 0 || i !== this.length - 1) { - out = zeros[6 - word.length] + word + out; - } else { - out = word + out; - } - off += 2; - if (off >= 26) { - off -= 26; - i--; - } - } - if (carry !== 0) { - out = carry.toString(16) + out; - } - while (out.length % padding !== 0) { - out = '0' + out; - } - if (this.negative !== 0) { - out = '-' + out; - } - return out; - } - - if (base === (base | 0) && base >= 2 && base <= 36) { - // var groupSize = Math.floor(BN.wordSize * Math.LN2 / Math.log(base)); - var groupSize = groupSizes[base]; - // var groupBase = Math.pow(base, groupSize); - var groupBase = groupBases[base]; - out = ''; - var c = this.clone(); - c.negative = 0; - while (!c.isZero()) { - var r = c.modn(groupBase).toString(base); - c = c.idivn(groupBase); - - if (!c.isZero()) { - out = zeros[groupSize - r.length] + r + out; - } else { - out = r + out; - } - } - if (this.isZero()) { - out = '0' + out; - } - while (out.length % padding !== 0) { - out = '0' + out; - } - if (this.negative !== 0) { - out = '-' + out; - } - return out; - } - - assert(false, 'Base should be between 2 and 36'); - }; - - BN.prototype.toNumber = function toNumber () { - var ret = this.words[0]; - if (this.length === 2) { - ret += this.words[1] * 0x4000000; - } else if (this.length === 3 && this.words[2] === 0x01) { - // NOTE: at this stage it is known that the top bit is set - ret += 0x10000000000000 + (this.words[1] * 0x4000000); - } else if (this.length > 2) { - assert(false, 'Number can only safely store up to 53 bits'); - } - return (this.negative !== 0) ? -ret : ret; - }; - - BN.prototype.toJSON = function toJSON () { - return this.toString(16); - }; - - BN.prototype.toBuffer = function toBuffer (endian, length) { - assert(typeof Buffer !== 'undefined'); - return this.toArrayLike(Buffer, endian, length); - }; - - BN.prototype.toArray = function toArray (endian, length) { - return this.toArrayLike(Array, endian, length); - }; - - BN.prototype.toArrayLike = function toArrayLike (ArrayType, endian, length) { - var byteLength = this.byteLength(); - var reqLength = length || Math.max(1, byteLength); - assert(byteLength <= reqLength, 'byte array longer than desired length'); - assert(reqLength > 0, 'Requested array length <= 0'); - - this.strip(); - var littleEndian = endian === 'le'; - var res = new ArrayType(reqLength); - - var b, i; - var q = this.clone(); - if (!littleEndian) { - // Assume big-endian - for (i = 0; i < reqLength - byteLength; i++) { - res[i] = 0; - } - - for (i = 0; !q.isZero(); i++) { - b = q.andln(0xff); - q.iushrn(8); - - res[reqLength - i - 1] = b; - } - } else { - for (i = 0; !q.isZero(); i++) { - b = q.andln(0xff); - q.iushrn(8); - - res[i] = b; - } - - for (; i < reqLength; i++) { - res[i] = 0; - } - } - - return res; - }; - - if (Math.clz32) { - BN.prototype._countBits = function _countBits (w) { - return 32 - Math.clz32(w); - }; - } else { - BN.prototype._countBits = function _countBits (w) { - var t = w; - var r = 0; - if (t >= 0x1000) { - r += 13; - t >>>= 13; - } - if (t >= 0x40) { - r += 7; - t >>>= 7; - } - if (t >= 0x8) { - r += 4; - t >>>= 4; - } - if (t >= 0x02) { - r += 2; - t >>>= 2; - } - return r + t; - }; - } - - BN.prototype._zeroBits = function _zeroBits (w) { - // Short-cut - if (w === 0) return 26; - - var t = w; - var r = 0; - if ((t & 0x1fff) === 0) { - r += 13; - t >>>= 13; - } - if ((t & 0x7f) === 0) { - r += 7; - t >>>= 7; - } - if ((t & 0xf) === 0) { - r += 4; - t >>>= 4; - } - if ((t & 0x3) === 0) { - r += 2; - t >>>= 2; - } - if ((t & 0x1) === 0) { - r++; - } - return r; - }; - - // Return number of used bits in a BN - BN.prototype.bitLength = function bitLength () { - var w = this.words[this.length - 1]; - var hi = this._countBits(w); - return (this.length - 1) * 26 + hi; - }; - - function toBitArray (num) { - var w = new Array(num.bitLength()); - - for (var bit = 0; bit < w.length; bit++) { - var off = (bit / 26) | 0; - var wbit = bit % 26; - - w[bit] = (num.words[off] & (1 << wbit)) >>> wbit; - } - - return w; - } - - // Number of trailing zero bits - BN.prototype.zeroBits = function zeroBits () { - if (this.isZero()) return 0; - - var r = 0; - for (var i = 0; i < this.length; i++) { - var b = this._zeroBits(this.words[i]); - r += b; - if (b !== 26) break; - } - return r; - }; - - BN.prototype.byteLength = function byteLength () { - return Math.ceil(this.bitLength() / 8); - }; - - BN.prototype.toTwos = function toTwos (width) { - if (this.negative !== 0) { - return this.abs().inotn(width).iaddn(1); - } - return this.clone(); - }; - - BN.prototype.fromTwos = function fromTwos (width) { - if (this.testn(width - 1)) { - return this.notn(width).iaddn(1).ineg(); - } - return this.clone(); - }; - - BN.prototype.isNeg = function isNeg () { - return this.negative !== 0; - }; - - // Return negative clone of `this` - BN.prototype.neg = function neg () { - return this.clone().ineg(); - }; - - BN.prototype.ineg = function ineg () { - if (!this.isZero()) { - this.negative ^= 1; - } - - return this; - }; - - // Or `num` with `this` in-place - BN.prototype.iuor = function iuor (num) { - while (this.length < num.length) { - this.words[this.length++] = 0; - } - - for (var i = 0; i < num.length; i++) { - this.words[i] = this.words[i] | num.words[i]; - } - - return this.strip(); - }; - - BN.prototype.ior = function ior (num) { - assert((this.negative | num.negative) === 0); - return this.iuor(num); - }; - - // Or `num` with `this` - BN.prototype.or = function or (num) { - if (this.length > num.length) return this.clone().ior(num); - return num.clone().ior(this); - }; - - BN.prototype.uor = function uor (num) { - if (this.length > num.length) return this.clone().iuor(num); - return num.clone().iuor(this); - }; - - // And `num` with `this` in-place - BN.prototype.iuand = function iuand (num) { - // b = min-length(num, this) - var b; - if (this.length > num.length) { - b = num; - } else { - b = this; - } - - for (var i = 0; i < b.length; i++) { - this.words[i] = this.words[i] & num.words[i]; - } - - this.length = b.length; - - return this.strip(); - }; - - BN.prototype.iand = function iand (num) { - assert((this.negative | num.negative) === 0); - return this.iuand(num); - }; - - // And `num` with `this` - BN.prototype.and = function and (num) { - if (this.length > num.length) return this.clone().iand(num); - return num.clone().iand(this); - }; - - BN.prototype.uand = function uand (num) { - if (this.length > num.length) return this.clone().iuand(num); - return num.clone().iuand(this); - }; - - // Xor `num` with `this` in-place - BN.prototype.iuxor = function iuxor (num) { - // a.length > b.length - var a; - var b; - if (this.length > num.length) { - a = this; - b = num; - } else { - a = num; - b = this; - } - - for (var i = 0; i < b.length; i++) { - this.words[i] = a.words[i] ^ b.words[i]; - } - - if (this !== a) { - for (; i < a.length; i++) { - this.words[i] = a.words[i]; - } - } - - this.length = a.length; - - return this.strip(); - }; - - BN.prototype.ixor = function ixor (num) { - assert((this.negative | num.negative) === 0); - return this.iuxor(num); - }; - - // Xor `num` with `this` - BN.prototype.xor = function xor (num) { - if (this.length > num.length) return this.clone().ixor(num); - return num.clone().ixor(this); - }; - - BN.prototype.uxor = function uxor (num) { - if (this.length > num.length) return this.clone().iuxor(num); - return num.clone().iuxor(this); - }; - - // Not ``this`` with ``width`` bitwidth - BN.prototype.inotn = function inotn (width) { - assert(typeof width === 'number' && width >= 0); - - var bytesNeeded = Math.ceil(width / 26) | 0; - var bitsLeft = width % 26; - - // Extend the buffer with leading zeroes - this._expand(bytesNeeded); - - if (bitsLeft > 0) { - bytesNeeded--; - } - - // Handle complete words - for (var i = 0; i < bytesNeeded; i++) { - this.words[i] = ~this.words[i] & 0x3ffffff; - } - - // Handle the residue - if (bitsLeft > 0) { - this.words[i] = ~this.words[i] & (0x3ffffff >> (26 - bitsLeft)); - } - - // And remove leading zeroes - return this.strip(); - }; - - BN.prototype.notn = function notn (width) { - return this.clone().inotn(width); - }; - - // Set `bit` of `this` - BN.prototype.setn = function setn (bit, val) { - assert(typeof bit === 'number' && bit >= 0); - - var off = (bit / 26) | 0; - var wbit = bit % 26; - - this._expand(off + 1); - - if (val) { - this.words[off] = this.words[off] | (1 << wbit); - } else { - this.words[off] = this.words[off] & ~(1 << wbit); - } - - return this.strip(); - }; - - // Add `num` to `this` in-place - BN.prototype.iadd = function iadd (num) { - var r; - - // negative + positive - if (this.negative !== 0 && num.negative === 0) { - this.negative = 0; - r = this.isub(num); - this.negative ^= 1; - return this._normSign(); - - // positive + negative - } else if (this.negative === 0 && num.negative !== 0) { - num.negative = 0; - r = this.isub(num); - num.negative = 1; - return r._normSign(); - } - - // a.length > b.length - var a, b; - if (this.length > num.length) { - a = this; - b = num; - } else { - a = num; - b = this; - } - - var carry = 0; - for (var i = 0; i < b.length; i++) { - r = (a.words[i] | 0) + (b.words[i] | 0) + carry; - this.words[i] = r & 0x3ffffff; - carry = r >>> 26; - } - for (; carry !== 0 && i < a.length; i++) { - r = (a.words[i] | 0) + carry; - this.words[i] = r & 0x3ffffff; - carry = r >>> 26; - } - - this.length = a.length; - if (carry !== 0) { - this.words[this.length] = carry; - this.length++; - // Copy the rest of the words - } else if (a !== this) { - for (; i < a.length; i++) { - this.words[i] = a.words[i]; - } - } - - return this; - }; - - // Add `num` to `this` - BN.prototype.add = function add (num) { - var res; - if (num.negative !== 0 && this.negative === 0) { - num.negative = 0; - res = this.sub(num); - num.negative ^= 1; - return res; - } else if (num.negative === 0 && this.negative !== 0) { - this.negative = 0; - res = num.sub(this); - this.negative = 1; - return res; - } - - if (this.length > num.length) return this.clone().iadd(num); - - return num.clone().iadd(this); - }; - - // Subtract `num` from `this` in-place - BN.prototype.isub = function isub (num) { - // this - (-num) = this + num - if (num.negative !== 0) { - num.negative = 0; - var r = this.iadd(num); - num.negative = 1; - return r._normSign(); - - // -this - num = -(this + num) - } else if (this.negative !== 0) { - this.negative = 0; - this.iadd(num); - this.negative = 1; - return this._normSign(); - } - - // At this point both numbers are positive - var cmp = this.cmp(num); - - // Optimization - zeroify - if (cmp === 0) { - this.negative = 0; - this.length = 1; - this.words[0] = 0; - return this; - } - - // a > b - var a, b; - if (cmp > 0) { - a = this; - b = num; - } else { - a = num; - b = this; - } - - var carry = 0; - for (var i = 0; i < b.length; i++) { - r = (a.words[i] | 0) - (b.words[i] | 0) + carry; - carry = r >> 26; - this.words[i] = r & 0x3ffffff; - } - for (; carry !== 0 && i < a.length; i++) { - r = (a.words[i] | 0) + carry; - carry = r >> 26; - this.words[i] = r & 0x3ffffff; - } - - // Copy rest of the words - if (carry === 0 && i < a.length && a !== this) { - for (; i < a.length; i++) { - this.words[i] = a.words[i]; - } - } - - this.length = Math.max(this.length, i); - - if (a !== this) { - this.negative = 1; - } - - return this.strip(); - }; - - // Subtract `num` from `this` - BN.prototype.sub = function sub (num) { - return this.clone().isub(num); - }; - - function smallMulTo (self, num, out) { - out.negative = num.negative ^ self.negative; - var len = (self.length + num.length) | 0; - out.length = len; - len = (len - 1) | 0; - - // Peel one iteration (compiler can't do it, because of code complexity) - var a = self.words[0] | 0; - var b = num.words[0] | 0; - var r = a * b; - - var lo = r & 0x3ffffff; - var carry = (r / 0x4000000) | 0; - out.words[0] = lo; - - for (var k = 1; k < len; k++) { - // Sum all words with the same `i + j = k` and accumulate `ncarry`, - // note that ncarry could be >= 0x3ffffff - var ncarry = carry >>> 26; - var rword = carry & 0x3ffffff; - var maxJ = Math.min(k, num.length - 1); - for (var j = Math.max(0, k - self.length + 1); j <= maxJ; j++) { - var i = (k - j) | 0; - a = self.words[i] | 0; - b = num.words[j] | 0; - r = a * b + rword; - ncarry += (r / 0x4000000) | 0; - rword = r & 0x3ffffff; - } - out.words[k] = rword | 0; - carry = ncarry | 0; - } - if (carry !== 0) { - out.words[k] = carry | 0; - } else { - out.length--; - } - - return out.strip(); - } - - // TODO(indutny): it may be reasonable to omit it for users who don't need - // to work with 256-bit numbers, otherwise it gives 20% improvement for 256-bit - // multiplication (like elliptic secp256k1). - var comb10MulTo = function comb10MulTo (self, num, out) { - var a = self.words; - var b = num.words; - var o = out.words; - var c = 0; - var lo; - var mid; - var hi; - var a0 = a[0] | 0; - var al0 = a0 & 0x1fff; - var ah0 = a0 >>> 13; - var a1 = a[1] | 0; - var al1 = a1 & 0x1fff; - var ah1 = a1 >>> 13; - var a2 = a[2] | 0; - var al2 = a2 & 0x1fff; - var ah2 = a2 >>> 13; - var a3 = a[3] | 0; - var al3 = a3 & 0x1fff; - var ah3 = a3 >>> 13; - var a4 = a[4] | 0; - var al4 = a4 & 0x1fff; - var ah4 = a4 >>> 13; - var a5 = a[5] | 0; - var al5 = a5 & 0x1fff; - var ah5 = a5 >>> 13; - var a6 = a[6] | 0; - var al6 = a6 & 0x1fff; - var ah6 = a6 >>> 13; - var a7 = a[7] | 0; - var al7 = a7 & 0x1fff; - var ah7 = a7 >>> 13; - var a8 = a[8] | 0; - var al8 = a8 & 0x1fff; - var ah8 = a8 >>> 13; - var a9 = a[9] | 0; - var al9 = a9 & 0x1fff; - var ah9 = a9 >>> 13; - var b0 = b[0] | 0; - var bl0 = b0 & 0x1fff; - var bh0 = b0 >>> 13; - var b1 = b[1] | 0; - var bl1 = b1 & 0x1fff; - var bh1 = b1 >>> 13; - var b2 = b[2] | 0; - var bl2 = b2 & 0x1fff; - var bh2 = b2 >>> 13; - var b3 = b[3] | 0; - var bl3 = b3 & 0x1fff; - var bh3 = b3 >>> 13; - var b4 = b[4] | 0; - var bl4 = b4 & 0x1fff; - var bh4 = b4 >>> 13; - var b5 = b[5] | 0; - var bl5 = b5 & 0x1fff; - var bh5 = b5 >>> 13; - var b6 = b[6] | 0; - var bl6 = b6 & 0x1fff; - var bh6 = b6 >>> 13; - var b7 = b[7] | 0; - var bl7 = b7 & 0x1fff; - var bh7 = b7 >>> 13; - var b8 = b[8] | 0; - var bl8 = b8 & 0x1fff; - var bh8 = b8 >>> 13; - var b9 = b[9] | 0; - var bl9 = b9 & 0x1fff; - var bh9 = b9 >>> 13; - - out.negative = self.negative ^ num.negative; - out.length = 19; - /* k = 0 */ - lo = Math.imul(al0, bl0); - mid = Math.imul(al0, bh0); - mid = (mid + Math.imul(ah0, bl0)) | 0; - hi = Math.imul(ah0, bh0); - var w0 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; - c = (((hi + (mid >>> 13)) | 0) + (w0 >>> 26)) | 0; - w0 &= 0x3ffffff; - /* k = 1 */ - lo = Math.imul(al1, bl0); - mid = Math.imul(al1, bh0); - mid = (mid + Math.imul(ah1, bl0)) | 0; - hi = Math.imul(ah1, bh0); - lo = (lo + Math.imul(al0, bl1)) | 0; - mid = (mid + Math.imul(al0, bh1)) | 0; - mid = (mid + Math.imul(ah0, bl1)) | 0; - hi = (hi + Math.imul(ah0, bh1)) | 0; - var w1 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; - c = (((hi + (mid >>> 13)) | 0) + (w1 >>> 26)) | 0; - w1 &= 0x3ffffff; - /* k = 2 */ - lo = Math.imul(al2, bl0); - mid = Math.imul(al2, bh0); - mid = (mid + Math.imul(ah2, bl0)) | 0; - hi = Math.imul(ah2, bh0); - lo = (lo + Math.imul(al1, bl1)) | 0; - mid = (mid + Math.imul(al1, bh1)) | 0; - mid = (mid + Math.imul(ah1, bl1)) | 0; - hi = (hi + Math.imul(ah1, bh1)) | 0; - lo = (lo + Math.imul(al0, bl2)) | 0; - mid = (mid + Math.imul(al0, bh2)) | 0; - mid = (mid + Math.imul(ah0, bl2)) | 0; - hi = (hi + Math.imul(ah0, bh2)) | 0; - var w2 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; - c = (((hi + (mid >>> 13)) | 0) + (w2 >>> 26)) | 0; - w2 &= 0x3ffffff; - /* k = 3 */ - lo = Math.imul(al3, bl0); - mid = Math.imul(al3, bh0); - mid = (mid + Math.imul(ah3, bl0)) | 0; - hi = Math.imul(ah3, bh0); - lo = (lo + Math.imul(al2, bl1)) | 0; - mid = (mid + Math.imul(al2, bh1)) | 0; - mid = (mid + Math.imul(ah2, bl1)) | 0; - hi = (hi + Math.imul(ah2, bh1)) | 0; - lo = (lo + Math.imul(al1, bl2)) | 0; - mid = (mid + Math.imul(al1, bh2)) | 0; - mid = (mid + Math.imul(ah1, bl2)) | 0; - hi = (hi + Math.imul(ah1, bh2)) | 0; - lo = (lo + Math.imul(al0, bl3)) | 0; - mid = (mid + Math.imul(al0, bh3)) | 0; - mid = (mid + Math.imul(ah0, bl3)) | 0; - hi = (hi + Math.imul(ah0, bh3)) | 0; - var w3 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; - c = (((hi + (mid >>> 13)) | 0) + (w3 >>> 26)) | 0; - w3 &= 0x3ffffff; - /* k = 4 */ - lo = Math.imul(al4, bl0); - mid = Math.imul(al4, bh0); - mid = (mid + Math.imul(ah4, bl0)) | 0; - hi = Math.imul(ah4, bh0); - lo = (lo + Math.imul(al3, bl1)) | 0; - mid = (mid + Math.imul(al3, bh1)) | 0; - mid = (mid + Math.imul(ah3, bl1)) | 0; - hi = (hi + Math.imul(ah3, bh1)) | 0; - lo = (lo + Math.imul(al2, bl2)) | 0; - mid = (mid + Math.imul(al2, bh2)) | 0; - mid = (mid + Math.imul(ah2, bl2)) | 0; - hi = (hi + Math.imul(ah2, bh2)) | 0; - lo = (lo + Math.imul(al1, bl3)) | 0; - mid = (mid + Math.imul(al1, bh3)) | 0; - mid = (mid + Math.imul(ah1, bl3)) | 0; - hi = (hi + Math.imul(ah1, bh3)) | 0; - lo = (lo + Math.imul(al0, bl4)) | 0; - mid = (mid + Math.imul(al0, bh4)) | 0; - mid = (mid + Math.imul(ah0, bl4)) | 0; - hi = (hi + Math.imul(ah0, bh4)) | 0; - var w4 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; - c = (((hi + (mid >>> 13)) | 0) + (w4 >>> 26)) | 0; - w4 &= 0x3ffffff; - /* k = 5 */ - lo = Math.imul(al5, bl0); - mid = Math.imul(al5, bh0); - mid = (mid + Math.imul(ah5, bl0)) | 0; - hi = Math.imul(ah5, bh0); - lo = (lo + Math.imul(al4, bl1)) | 0; - mid = (mid + Math.imul(al4, bh1)) | 0; - mid = (mid + Math.imul(ah4, bl1)) | 0; - hi = (hi + Math.imul(ah4, bh1)) | 0; - lo = (lo + Math.imul(al3, bl2)) | 0; - mid = (mid + Math.imul(al3, bh2)) | 0; - mid = (mid + Math.imul(ah3, bl2)) | 0; - hi = (hi + Math.imul(ah3, bh2)) | 0; - lo = (lo + Math.imul(al2, bl3)) | 0; - mid = (mid + Math.imul(al2, bh3)) | 0; - mid = (mid + Math.imul(ah2, bl3)) | 0; - hi = (hi + Math.imul(ah2, bh3)) | 0; - lo = (lo + Math.imul(al1, bl4)) | 0; - mid = (mid + Math.imul(al1, bh4)) | 0; - mid = (mid + Math.imul(ah1, bl4)) | 0; - hi = (hi + Math.imul(ah1, bh4)) | 0; - lo = (lo + Math.imul(al0, bl5)) | 0; - mid = (mid + Math.imul(al0, bh5)) | 0; - mid = (mid + Math.imul(ah0, bl5)) | 0; - hi = (hi + Math.imul(ah0, bh5)) | 0; - var w5 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; - c = (((hi + (mid >>> 13)) | 0) + (w5 >>> 26)) | 0; - w5 &= 0x3ffffff; - /* k = 6 */ - lo = Math.imul(al6, bl0); - mid = Math.imul(al6, bh0); - mid = (mid + Math.imul(ah6, bl0)) | 0; - hi = Math.imul(ah6, bh0); - lo = (lo + Math.imul(al5, bl1)) | 0; - mid = (mid + Math.imul(al5, bh1)) | 0; - mid = (mid + Math.imul(ah5, bl1)) | 0; - hi = (hi + Math.imul(ah5, bh1)) | 0; - lo = (lo + Math.imul(al4, bl2)) | 0; - mid = (mid + Math.imul(al4, bh2)) | 0; - mid = (mid + Math.imul(ah4, bl2)) | 0; - hi = (hi + Math.imul(ah4, bh2)) | 0; - lo = (lo + Math.imul(al3, bl3)) | 0; - mid = (mid + Math.imul(al3, bh3)) | 0; - mid = (mid + Math.imul(ah3, bl3)) | 0; - hi = (hi + Math.imul(ah3, bh3)) | 0; - lo = (lo + Math.imul(al2, bl4)) | 0; - mid = (mid + Math.imul(al2, bh4)) | 0; - mid = (mid + Math.imul(ah2, bl4)) | 0; - hi = (hi + Math.imul(ah2, bh4)) | 0; - lo = (lo + Math.imul(al1, bl5)) | 0; - mid = (mid + Math.imul(al1, bh5)) | 0; - mid = (mid + Math.imul(ah1, bl5)) | 0; - hi = (hi + Math.imul(ah1, bh5)) | 0; - lo = (lo + Math.imul(al0, bl6)) | 0; - mid = (mid + Math.imul(al0, bh6)) | 0; - mid = (mid + Math.imul(ah0, bl6)) | 0; - hi = (hi + Math.imul(ah0, bh6)) | 0; - var w6 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; - c = (((hi + (mid >>> 13)) | 0) + (w6 >>> 26)) | 0; - w6 &= 0x3ffffff; - /* k = 7 */ - lo = Math.imul(al7, bl0); - mid = Math.imul(al7, bh0); - mid = (mid + Math.imul(ah7, bl0)) | 0; - hi = Math.imul(ah7, bh0); - lo = (lo + Math.imul(al6, bl1)) | 0; - mid = (mid + Math.imul(al6, bh1)) | 0; - mid = (mid + Math.imul(ah6, bl1)) | 0; - hi = (hi + Math.imul(ah6, bh1)) | 0; - lo = (lo + Math.imul(al5, bl2)) | 0; - mid = (mid + Math.imul(al5, bh2)) | 0; - mid = (mid + Math.imul(ah5, bl2)) | 0; - hi = (hi + Math.imul(ah5, bh2)) | 0; - lo = (lo + Math.imul(al4, bl3)) | 0; - mid = (mid + Math.imul(al4, bh3)) | 0; - mid = (mid + Math.imul(ah4, bl3)) | 0; - hi = (hi + Math.imul(ah4, bh3)) | 0; - lo = (lo + Math.imul(al3, bl4)) | 0; - mid = (mid + Math.imul(al3, bh4)) | 0; - mid = (mid + Math.imul(ah3, bl4)) | 0; - hi = (hi + Math.imul(ah3, bh4)) | 0; - lo = (lo + Math.imul(al2, bl5)) | 0; - mid = (mid + Math.imul(al2, bh5)) | 0; - mid = (mid + Math.imul(ah2, bl5)) | 0; - hi = (hi + Math.imul(ah2, bh5)) | 0; - lo = (lo + Math.imul(al1, bl6)) | 0; - mid = (mid + Math.imul(al1, bh6)) | 0; - mid = (mid + Math.imul(ah1, bl6)) | 0; - hi = (hi + Math.imul(ah1, bh6)) | 0; - lo = (lo + Math.imul(al0, bl7)) | 0; - mid = (mid + Math.imul(al0, bh7)) | 0; - mid = (mid + Math.imul(ah0, bl7)) | 0; - hi = (hi + Math.imul(ah0, bh7)) | 0; - var w7 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; - c = (((hi + (mid >>> 13)) | 0) + (w7 >>> 26)) | 0; - w7 &= 0x3ffffff; - /* k = 8 */ - lo = Math.imul(al8, bl0); - mid = Math.imul(al8, bh0); - mid = (mid + Math.imul(ah8, bl0)) | 0; - hi = Math.imul(ah8, bh0); - lo = (lo + Math.imul(al7, bl1)) | 0; - mid = (mid + Math.imul(al7, bh1)) | 0; - mid = (mid + Math.imul(ah7, bl1)) | 0; - hi = (hi + Math.imul(ah7, bh1)) | 0; - lo = (lo + Math.imul(al6, bl2)) | 0; - mid = (mid + Math.imul(al6, bh2)) | 0; - mid = (mid + Math.imul(ah6, bl2)) | 0; - hi = (hi + Math.imul(ah6, bh2)) | 0; - lo = (lo + Math.imul(al5, bl3)) | 0; - mid = (mid + Math.imul(al5, bh3)) | 0; - mid = (mid + Math.imul(ah5, bl3)) | 0; - hi = (hi + Math.imul(ah5, bh3)) | 0; - lo = (lo + Math.imul(al4, bl4)) | 0; - mid = (mid + Math.imul(al4, bh4)) | 0; - mid = (mid + Math.imul(ah4, bl4)) | 0; - hi = (hi + Math.imul(ah4, bh4)) | 0; - lo = (lo + Math.imul(al3, bl5)) | 0; - mid = (mid + Math.imul(al3, bh5)) | 0; - mid = (mid + Math.imul(ah3, bl5)) | 0; - hi = (hi + Math.imul(ah3, bh5)) | 0; - lo = (lo + Math.imul(al2, bl6)) | 0; - mid = (mid + Math.imul(al2, bh6)) | 0; - mid = (mid + Math.imul(ah2, bl6)) | 0; - hi = (hi + Math.imul(ah2, bh6)) | 0; - lo = (lo + Math.imul(al1, bl7)) | 0; - mid = (mid + Math.imul(al1, bh7)) | 0; - mid = (mid + Math.imul(ah1, bl7)) | 0; - hi = (hi + Math.imul(ah1, bh7)) | 0; - lo = (lo + Math.imul(al0, bl8)) | 0; - mid = (mid + Math.imul(al0, bh8)) | 0; - mid = (mid + Math.imul(ah0, bl8)) | 0; - hi = (hi + Math.imul(ah0, bh8)) | 0; - var w8 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; - c = (((hi + (mid >>> 13)) | 0) + (w8 >>> 26)) | 0; - w8 &= 0x3ffffff; - /* k = 9 */ - lo = Math.imul(al9, bl0); - mid = Math.imul(al9, bh0); - mid = (mid + Math.imul(ah9, bl0)) | 0; - hi = Math.imul(ah9, bh0); - lo = (lo + Math.imul(al8, bl1)) | 0; - mid = (mid + Math.imul(al8, bh1)) | 0; - mid = (mid + Math.imul(ah8, bl1)) | 0; - hi = (hi + Math.imul(ah8, bh1)) | 0; - lo = (lo + Math.imul(al7, bl2)) | 0; - mid = (mid + Math.imul(al7, bh2)) | 0; - mid = (mid + Math.imul(ah7, bl2)) | 0; - hi = (hi + Math.imul(ah7, bh2)) | 0; - lo = (lo + Math.imul(al6, bl3)) | 0; - mid = (mid + Math.imul(al6, bh3)) | 0; - mid = (mid + Math.imul(ah6, bl3)) | 0; - hi = (hi + Math.imul(ah6, bh3)) | 0; - lo = (lo + Math.imul(al5, bl4)) | 0; - mid = (mid + Math.imul(al5, bh4)) | 0; - mid = (mid + Math.imul(ah5, bl4)) | 0; - hi = (hi + Math.imul(ah5, bh4)) | 0; - lo = (lo + Math.imul(al4, bl5)) | 0; - mid = (mid + Math.imul(al4, bh5)) | 0; - mid = (mid + Math.imul(ah4, bl5)) | 0; - hi = (hi + Math.imul(ah4, bh5)) | 0; - lo = (lo + Math.imul(al3, bl6)) | 0; - mid = (mid + Math.imul(al3, bh6)) | 0; - mid = (mid + Math.imul(ah3, bl6)) | 0; - hi = (hi + Math.imul(ah3, bh6)) | 0; - lo = (lo + Math.imul(al2, bl7)) | 0; - mid = (mid + Math.imul(al2, bh7)) | 0; - mid = (mid + Math.imul(ah2, bl7)) | 0; - hi = (hi + Math.imul(ah2, bh7)) | 0; - lo = (lo + Math.imul(al1, bl8)) | 0; - mid = (mid + Math.imul(al1, bh8)) | 0; - mid = (mid + Math.imul(ah1, bl8)) | 0; - hi = (hi + Math.imul(ah1, bh8)) | 0; - lo = (lo + Math.imul(al0, bl9)) | 0; - mid = (mid + Math.imul(al0, bh9)) | 0; - mid = (mid + Math.imul(ah0, bl9)) | 0; - hi = (hi + Math.imul(ah0, bh9)) | 0; - var w9 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; - c = (((hi + (mid >>> 13)) | 0) + (w9 >>> 26)) | 0; - w9 &= 0x3ffffff; - /* k = 10 */ - lo = Math.imul(al9, bl1); - mid = Math.imul(al9, bh1); - mid = (mid + Math.imul(ah9, bl1)) | 0; - hi = Math.imul(ah9, bh1); - lo = (lo + Math.imul(al8, bl2)) | 0; - mid = (mid + Math.imul(al8, bh2)) | 0; - mid = (mid + Math.imul(ah8, bl2)) | 0; - hi = (hi + Math.imul(ah8, bh2)) | 0; - lo = (lo + Math.imul(al7, bl3)) | 0; - mid = (mid + Math.imul(al7, bh3)) | 0; - mid = (mid + Math.imul(ah7, bl3)) | 0; - hi = (hi + Math.imul(ah7, bh3)) | 0; - lo = (lo + Math.imul(al6, bl4)) | 0; - mid = (mid + Math.imul(al6, bh4)) | 0; - mid = (mid + Math.imul(ah6, bl4)) | 0; - hi = (hi + Math.imul(ah6, bh4)) | 0; - lo = (lo + Math.imul(al5, bl5)) | 0; - mid = (mid + Math.imul(al5, bh5)) | 0; - mid = (mid + Math.imul(ah5, bl5)) | 0; - hi = (hi + Math.imul(ah5, bh5)) | 0; - lo = (lo + Math.imul(al4, bl6)) | 0; - mid = (mid + Math.imul(al4, bh6)) | 0; - mid = (mid + Math.imul(ah4, bl6)) | 0; - hi = (hi + Math.imul(ah4, bh6)) | 0; - lo = (lo + Math.imul(al3, bl7)) | 0; - mid = (mid + Math.imul(al3, bh7)) | 0; - mid = (mid + Math.imul(ah3, bl7)) | 0; - hi = (hi + Math.imul(ah3, bh7)) | 0; - lo = (lo + Math.imul(al2, bl8)) | 0; - mid = (mid + Math.imul(al2, bh8)) | 0; - mid = (mid + Math.imul(ah2, bl8)) | 0; - hi = (hi + Math.imul(ah2, bh8)) | 0; - lo = (lo + Math.imul(al1, bl9)) | 0; - mid = (mid + Math.imul(al1, bh9)) | 0; - mid = (mid + Math.imul(ah1, bl9)) | 0; - hi = (hi + Math.imul(ah1, bh9)) | 0; - var w10 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; - c = (((hi + (mid >>> 13)) | 0) + (w10 >>> 26)) | 0; - w10 &= 0x3ffffff; - /* k = 11 */ - lo = Math.imul(al9, bl2); - mid = Math.imul(al9, bh2); - mid = (mid + Math.imul(ah9, bl2)) | 0; - hi = Math.imul(ah9, bh2); - lo = (lo + Math.imul(al8, bl3)) | 0; - mid = (mid + Math.imul(al8, bh3)) | 0; - mid = (mid + Math.imul(ah8, bl3)) | 0; - hi = (hi + Math.imul(ah8, bh3)) | 0; - lo = (lo + Math.imul(al7, bl4)) | 0; - mid = (mid + Math.imul(al7, bh4)) | 0; - mid = (mid + Math.imul(ah7, bl4)) | 0; - hi = (hi + Math.imul(ah7, bh4)) | 0; - lo = (lo + Math.imul(al6, bl5)) | 0; - mid = (mid + Math.imul(al6, bh5)) | 0; - mid = (mid + Math.imul(ah6, bl5)) | 0; - hi = (hi + Math.imul(ah6, bh5)) | 0; - lo = (lo + Math.imul(al5, bl6)) | 0; - mid = (mid + Math.imul(al5, bh6)) | 0; - mid = (mid + Math.imul(ah5, bl6)) | 0; - hi = (hi + Math.imul(ah5, bh6)) | 0; - lo = (lo + Math.imul(al4, bl7)) | 0; - mid = (mid + Math.imul(al4, bh7)) | 0; - mid = (mid + Math.imul(ah4, bl7)) | 0; - hi = (hi + Math.imul(ah4, bh7)) | 0; - lo = (lo + Math.imul(al3, bl8)) | 0; - mid = (mid + Math.imul(al3, bh8)) | 0; - mid = (mid + Math.imul(ah3, bl8)) | 0; - hi = (hi + Math.imul(ah3, bh8)) | 0; - lo = (lo + Math.imul(al2, bl9)) | 0; - mid = (mid + Math.imul(al2, bh9)) | 0; - mid = (mid + Math.imul(ah2, bl9)) | 0; - hi = (hi + Math.imul(ah2, bh9)) | 0; - var w11 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; - c = (((hi + (mid >>> 13)) | 0) + (w11 >>> 26)) | 0; - w11 &= 0x3ffffff; - /* k = 12 */ - lo = Math.imul(al9, bl3); - mid = Math.imul(al9, bh3); - mid = (mid + Math.imul(ah9, bl3)) | 0; - hi = Math.imul(ah9, bh3); - lo = (lo + Math.imul(al8, bl4)) | 0; - mid = (mid + Math.imul(al8, bh4)) | 0; - mid = (mid + Math.imul(ah8, bl4)) | 0; - hi = (hi + Math.imul(ah8, bh4)) | 0; - lo = (lo + Math.imul(al7, bl5)) | 0; - mid = (mid + Math.imul(al7, bh5)) | 0; - mid = (mid + Math.imul(ah7, bl5)) | 0; - hi = (hi + Math.imul(ah7, bh5)) | 0; - lo = (lo + Math.imul(al6, bl6)) | 0; - mid = (mid + Math.imul(al6, bh6)) | 0; - mid = (mid + Math.imul(ah6, bl6)) | 0; - hi = (hi + Math.imul(ah6, bh6)) | 0; - lo = (lo + Math.imul(al5, bl7)) | 0; - mid = (mid + Math.imul(al5, bh7)) | 0; - mid = (mid + Math.imul(ah5, bl7)) | 0; - hi = (hi + Math.imul(ah5, bh7)) | 0; - lo = (lo + Math.imul(al4, bl8)) | 0; - mid = (mid + Math.imul(al4, bh8)) | 0; - mid = (mid + Math.imul(ah4, bl8)) | 0; - hi = (hi + Math.imul(ah4, bh8)) | 0; - lo = (lo + Math.imul(al3, bl9)) | 0; - mid = (mid + Math.imul(al3, bh9)) | 0; - mid = (mid + Math.imul(ah3, bl9)) | 0; - hi = (hi + Math.imul(ah3, bh9)) | 0; - var w12 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; - c = (((hi + (mid >>> 13)) | 0) + (w12 >>> 26)) | 0; - w12 &= 0x3ffffff; - /* k = 13 */ - lo = Math.imul(al9, bl4); - mid = Math.imul(al9, bh4); - mid = (mid + Math.imul(ah9, bl4)) | 0; - hi = Math.imul(ah9, bh4); - lo = (lo + Math.imul(al8, bl5)) | 0; - mid = (mid + Math.imul(al8, bh5)) | 0; - mid = (mid + Math.imul(ah8, bl5)) | 0; - hi = (hi + Math.imul(ah8, bh5)) | 0; - lo = (lo + Math.imul(al7, bl6)) | 0; - mid = (mid + Math.imul(al7, bh6)) | 0; - mid = (mid + Math.imul(ah7, bl6)) | 0; - hi = (hi + Math.imul(ah7, bh6)) | 0; - lo = (lo + Math.imul(al6, bl7)) | 0; - mid = (mid + Math.imul(al6, bh7)) | 0; - mid = (mid + Math.imul(ah6, bl7)) | 0; - hi = (hi + Math.imul(ah6, bh7)) | 0; - lo = (lo + Math.imul(al5, bl8)) | 0; - mid = (mid + Math.imul(al5, bh8)) | 0; - mid = (mid + Math.imul(ah5, bl8)) | 0; - hi = (hi + Math.imul(ah5, bh8)) | 0; - lo = (lo + Math.imul(al4, bl9)) | 0; - mid = (mid + Math.imul(al4, bh9)) | 0; - mid = (mid + Math.imul(ah4, bl9)) | 0; - hi = (hi + Math.imul(ah4, bh9)) | 0; - var w13 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; - c = (((hi + (mid >>> 13)) | 0) + (w13 >>> 26)) | 0; - w13 &= 0x3ffffff; - /* k = 14 */ - lo = Math.imul(al9, bl5); - mid = Math.imul(al9, bh5); - mid = (mid + Math.imul(ah9, bl5)) | 0; - hi = Math.imul(ah9, bh5); - lo = (lo + Math.imul(al8, bl6)) | 0; - mid = (mid + Math.imul(al8, bh6)) | 0; - mid = (mid + Math.imul(ah8, bl6)) | 0; - hi = (hi + Math.imul(ah8, bh6)) | 0; - lo = (lo + Math.imul(al7, bl7)) | 0; - mid = (mid + Math.imul(al7, bh7)) | 0; - mid = (mid + Math.imul(ah7, bl7)) | 0; - hi = (hi + Math.imul(ah7, bh7)) | 0; - lo = (lo + Math.imul(al6, bl8)) | 0; - mid = (mid + Math.imul(al6, bh8)) | 0; - mid = (mid + Math.imul(ah6, bl8)) | 0; - hi = (hi + Math.imul(ah6, bh8)) | 0; - lo = (lo + Math.imul(al5, bl9)) | 0; - mid = (mid + Math.imul(al5, bh9)) | 0; - mid = (mid + Math.imul(ah5, bl9)) | 0; - hi = (hi + Math.imul(ah5, bh9)) | 0; - var w14 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; - c = (((hi + (mid >>> 13)) | 0) + (w14 >>> 26)) | 0; - w14 &= 0x3ffffff; - /* k = 15 */ - lo = Math.imul(al9, bl6); - mid = Math.imul(al9, bh6); - mid = (mid + Math.imul(ah9, bl6)) | 0; - hi = Math.imul(ah9, bh6); - lo = (lo + Math.imul(al8, bl7)) | 0; - mid = (mid + Math.imul(al8, bh7)) | 0; - mid = (mid + Math.imul(ah8, bl7)) | 0; - hi = (hi + Math.imul(ah8, bh7)) | 0; - lo = (lo + Math.imul(al7, bl8)) | 0; - mid = (mid + Math.imul(al7, bh8)) | 0; - mid = (mid + Math.imul(ah7, bl8)) | 0; - hi = (hi + Math.imul(ah7, bh8)) | 0; - lo = (lo + Math.imul(al6, bl9)) | 0; - mid = (mid + Math.imul(al6, bh9)) | 0; - mid = (mid + Math.imul(ah6, bl9)) | 0; - hi = (hi + Math.imul(ah6, bh9)) | 0; - var w15 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; - c = (((hi + (mid >>> 13)) | 0) + (w15 >>> 26)) | 0; - w15 &= 0x3ffffff; - /* k = 16 */ - lo = Math.imul(al9, bl7); - mid = Math.imul(al9, bh7); - mid = (mid + Math.imul(ah9, bl7)) | 0; - hi = Math.imul(ah9, bh7); - lo = (lo + Math.imul(al8, bl8)) | 0; - mid = (mid + Math.imul(al8, bh8)) | 0; - mid = (mid + Math.imul(ah8, bl8)) | 0; - hi = (hi + Math.imul(ah8, bh8)) | 0; - lo = (lo + Math.imul(al7, bl9)) | 0; - mid = (mid + Math.imul(al7, bh9)) | 0; - mid = (mid + Math.imul(ah7, bl9)) | 0; - hi = (hi + Math.imul(ah7, bh9)) | 0; - var w16 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; - c = (((hi + (mid >>> 13)) | 0) + (w16 >>> 26)) | 0; - w16 &= 0x3ffffff; - /* k = 17 */ - lo = Math.imul(al9, bl8); - mid = Math.imul(al9, bh8); - mid = (mid + Math.imul(ah9, bl8)) | 0; - hi = Math.imul(ah9, bh8); - lo = (lo + Math.imul(al8, bl9)) | 0; - mid = (mid + Math.imul(al8, bh9)) | 0; - mid = (mid + Math.imul(ah8, bl9)) | 0; - hi = (hi + Math.imul(ah8, bh9)) | 0; - var w17 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; - c = (((hi + (mid >>> 13)) | 0) + (w17 >>> 26)) | 0; - w17 &= 0x3ffffff; - /* k = 18 */ - lo = Math.imul(al9, bl9); - mid = Math.imul(al9, bh9); - mid = (mid + Math.imul(ah9, bl9)) | 0; - hi = Math.imul(ah9, bh9); - var w18 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; - c = (((hi + (mid >>> 13)) | 0) + (w18 >>> 26)) | 0; - w18 &= 0x3ffffff; - o[0] = w0; - o[1] = w1; - o[2] = w2; - o[3] = w3; - o[4] = w4; - o[5] = w5; - o[6] = w6; - o[7] = w7; - o[8] = w8; - o[9] = w9; - o[10] = w10; - o[11] = w11; - o[12] = w12; - o[13] = w13; - o[14] = w14; - o[15] = w15; - o[16] = w16; - o[17] = w17; - o[18] = w18; - if (c !== 0) { - o[19] = c; - out.length++; - } - return out; - }; - - // Polyfill comb - if (!Math.imul) { - comb10MulTo = smallMulTo; - } - - function bigMulTo (self, num, out) { - out.negative = num.negative ^ self.negative; - out.length = self.length + num.length; - - var carry = 0; - var hncarry = 0; - for (var k = 0; k < out.length - 1; k++) { - // Sum all words with the same `i + j = k` and accumulate `ncarry`, - // note that ncarry could be >= 0x3ffffff - var ncarry = hncarry; - hncarry = 0; - var rword = carry & 0x3ffffff; - var maxJ = Math.min(k, num.length - 1); - for (var j = Math.max(0, k - self.length + 1); j <= maxJ; j++) { - var i = k - j; - var a = self.words[i] | 0; - var b = num.words[j] | 0; - var r = a * b; - - var lo = r & 0x3ffffff; - ncarry = (ncarry + ((r / 0x4000000) | 0)) | 0; - lo = (lo + rword) | 0; - rword = lo & 0x3ffffff; - ncarry = (ncarry + (lo >>> 26)) | 0; - - hncarry += ncarry >>> 26; - ncarry &= 0x3ffffff; - } - out.words[k] = rword; - carry = ncarry; - ncarry = hncarry; - } - if (carry !== 0) { - out.words[k] = carry; - } else { - out.length--; - } - - return out.strip(); - } - - function jumboMulTo (self, num, out) { - var fftm = new FFTM(); - return fftm.mulp(self, num, out); - } - - BN.prototype.mulTo = function mulTo (num, out) { - var res; - var len = this.length + num.length; - if (this.length === 10 && num.length === 10) { - res = comb10MulTo(this, num, out); - } else if (len < 63) { - res = smallMulTo(this, num, out); - } else if (len < 1024) { - res = bigMulTo(this, num, out); - } else { - res = jumboMulTo(this, num, out); - } - - return res; - }; - - // Cooley-Tukey algorithm for FFT - // slightly revisited to rely on looping instead of recursion - - function FFTM (x, y) { - this.x = x; - this.y = y; - } - - FFTM.prototype.makeRBT = function makeRBT (N) { - var t = new Array(N); - var l = BN.prototype._countBits(N) - 1; - for (var i = 0; i < N; i++) { - t[i] = this.revBin(i, l, N); - } - - return t; - }; - - // Returns binary-reversed representation of `x` - FFTM.prototype.revBin = function revBin (x, l, N) { - if (x === 0 || x === N - 1) return x; - - var rb = 0; - for (var i = 0; i < l; i++) { - rb |= (x & 1) << (l - i - 1); - x >>= 1; - } - - return rb; - }; - - // Performs "tweedling" phase, therefore 'emulating' - // behaviour of the recursive algorithm - FFTM.prototype.permute = function permute (rbt, rws, iws, rtws, itws, N) { - for (var i = 0; i < N; i++) { - rtws[i] = rws[rbt[i]]; - itws[i] = iws[rbt[i]]; - } - }; - - FFTM.prototype.transform = function transform (rws, iws, rtws, itws, N, rbt) { - this.permute(rbt, rws, iws, rtws, itws, N); - - for (var s = 1; s < N; s <<= 1) { - var l = s << 1; - - var rtwdf = Math.cos(2 * Math.PI / l); - var itwdf = Math.sin(2 * Math.PI / l); - - for (var p = 0; p < N; p += l) { - var rtwdf_ = rtwdf; - var itwdf_ = itwdf; - - for (var j = 0; j < s; j++) { - var re = rtws[p + j]; - var ie = itws[p + j]; - - var ro = rtws[p + j + s]; - var io = itws[p + j + s]; - - var rx = rtwdf_ * ro - itwdf_ * io; - - io = rtwdf_ * io + itwdf_ * ro; - ro = rx; - - rtws[p + j] = re + ro; - itws[p + j] = ie + io; - - rtws[p + j + s] = re - ro; - itws[p + j + s] = ie - io; - - /* jshint maxdepth : false */ - if (j !== l) { - rx = rtwdf * rtwdf_ - itwdf * itwdf_; - - itwdf_ = rtwdf * itwdf_ + itwdf * rtwdf_; - rtwdf_ = rx; - } - } - } - } - }; - - FFTM.prototype.guessLen13b = function guessLen13b (n, m) { - var N = Math.max(m, n) | 1; - var odd = N & 1; - var i = 0; - for (N = N / 2 | 0; N; N = N >>> 1) { - i++; - } - - return 1 << i + 1 + odd; - }; - - FFTM.prototype.conjugate = function conjugate (rws, iws, N) { - if (N <= 1) return; - - for (var i = 0; i < N / 2; i++) { - var t = rws[i]; - - rws[i] = rws[N - i - 1]; - rws[N - i - 1] = t; - - t = iws[i]; - - iws[i] = -iws[N - i - 1]; - iws[N - i - 1] = -t; - } - }; - - FFTM.prototype.normalize13b = function normalize13b (ws, N) { - var carry = 0; - for (var i = 0; i < N / 2; i++) { - var w = Math.round(ws[2 * i + 1] / N) * 0x2000 + - Math.round(ws[2 * i] / N) + - carry; - - ws[i] = w & 0x3ffffff; - - if (w < 0x4000000) { - carry = 0; - } else { - carry = w / 0x4000000 | 0; - } - } - - return ws; - }; - - FFTM.prototype.convert13b = function convert13b (ws, len, rws, N) { - var carry = 0; - for (var i = 0; i < len; i++) { - carry = carry + (ws[i] | 0); - - rws[2 * i] = carry & 0x1fff; carry = carry >>> 13; - rws[2 * i + 1] = carry & 0x1fff; carry = carry >>> 13; - } - - // Pad with zeroes - for (i = 2 * len; i < N; ++i) { - rws[i] = 0; - } - - assert(carry === 0); - assert((carry & ~0x1fff) === 0); - }; - - FFTM.prototype.stub = function stub (N) { - var ph = new Array(N); - for (var i = 0; i < N; i++) { - ph[i] = 0; - } - - return ph; - }; - - FFTM.prototype.mulp = function mulp (x, y, out) { - var N = 2 * this.guessLen13b(x.length, y.length); - - var rbt = this.makeRBT(N); - - var _ = this.stub(N); - - var rws = new Array(N); - var rwst = new Array(N); - var iwst = new Array(N); - - var nrws = new Array(N); - var nrwst = new Array(N); - var niwst = new Array(N); - - var rmws = out.words; - rmws.length = N; - - this.convert13b(x.words, x.length, rws, N); - this.convert13b(y.words, y.length, nrws, N); - - this.transform(rws, _, rwst, iwst, N, rbt); - this.transform(nrws, _, nrwst, niwst, N, rbt); - - for (var i = 0; i < N; i++) { - var rx = rwst[i] * nrwst[i] - iwst[i] * niwst[i]; - iwst[i] = rwst[i] * niwst[i] + iwst[i] * nrwst[i]; - rwst[i] = rx; - } - - this.conjugate(rwst, iwst, N); - this.transform(rwst, iwst, rmws, _, N, rbt); - this.conjugate(rmws, _, N); - this.normalize13b(rmws, N); - - out.negative = x.negative ^ y.negative; - out.length = x.length + y.length; - return out.strip(); - }; - - // Multiply `this` by `num` - BN.prototype.mul = function mul (num) { - var out = new BN(null); - out.words = new Array(this.length + num.length); - return this.mulTo(num, out); - }; - - // Multiply employing FFT - BN.prototype.mulf = function mulf (num) { - var out = new BN(null); - out.words = new Array(this.length + num.length); - return jumboMulTo(this, num, out); - }; - - // In-place Multiplication - BN.prototype.imul = function imul (num) { - return this.clone().mulTo(num, this); - }; - - BN.prototype.imuln = function imuln (num) { - assert(typeof num === 'number'); - assert(num < 0x4000000); - - // Carry - var carry = 0; - for (var i = 0; i < this.length; i++) { - var w = (this.words[i] | 0) * num; - var lo = (w & 0x3ffffff) + (carry & 0x3ffffff); - carry >>= 26; - carry += (w / 0x4000000) | 0; - // NOTE: lo is 27bit maximum - carry += lo >>> 26; - this.words[i] = lo & 0x3ffffff; - } - - if (carry !== 0) { - this.words[i] = carry; - this.length++; - } - - return this; - }; - - BN.prototype.muln = function muln (num) { - return this.clone().imuln(num); - }; - - // `this` * `this` - BN.prototype.sqr = function sqr () { - return this.mul(this); - }; - - // `this` * `this` in-place - BN.prototype.isqr = function isqr () { - return this.imul(this.clone()); - }; - - // Math.pow(`this`, `num`) - BN.prototype.pow = function pow (num) { - var w = toBitArray(num); - if (w.length === 0) return new BN(1); - - // Skip leading zeroes - var res = this; - for (var i = 0; i < w.length; i++, res = res.sqr()) { - if (w[i] !== 0) break; - } - - if (++i < w.length) { - for (var q = res.sqr(); i < w.length; i++, q = q.sqr()) { - if (w[i] === 0) continue; - - res = res.mul(q); - } - } - - return res; - }; - - // Shift-left in-place - BN.prototype.iushln = function iushln (bits) { - assert(typeof bits === 'number' && bits >= 0); - var r = bits % 26; - var s = (bits - r) / 26; - var carryMask = (0x3ffffff >>> (26 - r)) << (26 - r); - var i; - - if (r !== 0) { - var carry = 0; - - for (i = 0; i < this.length; i++) { - var newCarry = this.words[i] & carryMask; - var c = ((this.words[i] | 0) - newCarry) << r; - this.words[i] = c | carry; - carry = newCarry >>> (26 - r); - } - - if (carry) { - this.words[i] = carry; - this.length++; - } - } - - if (s !== 0) { - for (i = this.length - 1; i >= 0; i--) { - this.words[i + s] = this.words[i]; - } - - for (i = 0; i < s; i++) { - this.words[i] = 0; - } - - this.length += s; - } - - return this.strip(); - }; - - BN.prototype.ishln = function ishln (bits) { - // TODO(indutny): implement me - assert(this.negative === 0); - return this.iushln(bits); - }; - - // Shift-right in-place - // NOTE: `hint` is a lowest bit before trailing zeroes - // NOTE: if `extended` is present - it will be filled with destroyed bits - BN.prototype.iushrn = function iushrn (bits, hint, extended) { - assert(typeof bits === 'number' && bits >= 0); - var h; - if (hint) { - h = (hint - (hint % 26)) / 26; - } else { - h = 0; - } - - var r = bits % 26; - var s = Math.min((bits - r) / 26, this.length); - var mask = 0x3ffffff ^ ((0x3ffffff >>> r) << r); - var maskedWords = extended; - - h -= s; - h = Math.max(0, h); - - // Extended mode, copy masked part - if (maskedWords) { - for (var i = 0; i < s; i++) { - maskedWords.words[i] = this.words[i]; - } - maskedWords.length = s; - } - - if (s === 0) { - // No-op, we should not move anything at all - } else if (this.length > s) { - this.length -= s; - for (i = 0; i < this.length; i++) { - this.words[i] = this.words[i + s]; - } - } else { - this.words[0] = 0; - this.length = 1; - } - - var carry = 0; - for (i = this.length - 1; i >= 0 && (carry !== 0 || i >= h); i--) { - var word = this.words[i] | 0; - this.words[i] = (carry << (26 - r)) | (word >>> r); - carry = word & mask; - } - - // Push carried bits as a mask - if (maskedWords && carry !== 0) { - maskedWords.words[maskedWords.length++] = carry; - } - - if (this.length === 0) { - this.words[0] = 0; - this.length = 1; - } - - return this.strip(); - }; - - BN.prototype.ishrn = function ishrn (bits, hint, extended) { - // TODO(indutny): implement me - assert(this.negative === 0); - return this.iushrn(bits, hint, extended); - }; - - // Shift-left - BN.prototype.shln = function shln (bits) { - return this.clone().ishln(bits); - }; - - BN.prototype.ushln = function ushln (bits) { - return this.clone().iushln(bits); - }; - - // Shift-right - BN.prototype.shrn = function shrn (bits) { - return this.clone().ishrn(bits); - }; - - BN.prototype.ushrn = function ushrn (bits) { - return this.clone().iushrn(bits); - }; - - // Test if n bit is set - BN.prototype.testn = function testn (bit) { - assert(typeof bit === 'number' && bit >= 0); - var r = bit % 26; - var s = (bit - r) / 26; - var q = 1 << r; - - // Fast case: bit is much higher than all existing words - if (this.length <= s) return false; - - // Check bit and return - var w = this.words[s]; - - return !!(w & q); - }; - - // Return only lowers bits of number (in-place) - BN.prototype.imaskn = function imaskn (bits) { - assert(typeof bits === 'number' && bits >= 0); - var r = bits % 26; - var s = (bits - r) / 26; - - assert(this.negative === 0, 'imaskn works only with positive numbers'); - - if (this.length <= s) { - return this; - } - - if (r !== 0) { - s++; - } - this.length = Math.min(s, this.length); - - if (r !== 0) { - var mask = 0x3ffffff ^ ((0x3ffffff >>> r) << r); - this.words[this.length - 1] &= mask; - } - - return this.strip(); - }; - - // Return only lowers bits of number - BN.prototype.maskn = function maskn (bits) { - return this.clone().imaskn(bits); - }; - - // Add plain number `num` to `this` - BN.prototype.iaddn = function iaddn (num) { - assert(typeof num === 'number'); - assert(num < 0x4000000); - if (num < 0) return this.isubn(-num); - - // Possible sign change - if (this.negative !== 0) { - if (this.length === 1 && (this.words[0] | 0) < num) { - this.words[0] = num - (this.words[0] | 0); - this.negative = 0; - return this; - } - - this.negative = 0; - this.isubn(num); - this.negative = 1; - return this; - } - - // Add without checks - return this._iaddn(num); - }; - - BN.prototype._iaddn = function _iaddn (num) { - this.words[0] += num; - - // Carry - for (var i = 0; i < this.length && this.words[i] >= 0x4000000; i++) { - this.words[i] -= 0x4000000; - if (i === this.length - 1) { - this.words[i + 1] = 1; - } else { - this.words[i + 1]++; - } - } - this.length = Math.max(this.length, i + 1); - - return this; - }; - - // Subtract plain number `num` from `this` - BN.prototype.isubn = function isubn (num) { - assert(typeof num === 'number'); - assert(num < 0x4000000); - if (num < 0) return this.iaddn(-num); - - if (this.negative !== 0) { - this.negative = 0; - this.iaddn(num); - this.negative = 1; - return this; - } - - this.words[0] -= num; - - if (this.length === 1 && this.words[0] < 0) { - this.words[0] = -this.words[0]; - this.negative = 1; - } else { - // Carry - for (var i = 0; i < this.length && this.words[i] < 0; i++) { - this.words[i] += 0x4000000; - this.words[i + 1] -= 1; - } - } - - return this.strip(); - }; - - BN.prototype.addn = function addn (num) { - return this.clone().iaddn(num); - }; - - BN.prototype.subn = function subn (num) { - return this.clone().isubn(num); - }; - - BN.prototype.iabs = function iabs () { - this.negative = 0; - - return this; - }; - - BN.prototype.abs = function abs () { - return this.clone().iabs(); - }; - - BN.prototype._ishlnsubmul = function _ishlnsubmul (num, mul, shift) { - var len = num.length + shift; - var i; - - this._expand(len); - - var w; - var carry = 0; - for (i = 0; i < num.length; i++) { - w = (this.words[i + shift] | 0) + carry; - var right = (num.words[i] | 0) * mul; - w -= right & 0x3ffffff; - carry = (w >> 26) - ((right / 0x4000000) | 0); - this.words[i + shift] = w & 0x3ffffff; - } - for (; i < this.length - shift; i++) { - w = (this.words[i + shift] | 0) + carry; - carry = w >> 26; - this.words[i + shift] = w & 0x3ffffff; - } - - if (carry === 0) return this.strip(); - - // Subtraction overflow - assert(carry === -1); - carry = 0; - for (i = 0; i < this.length; i++) { - w = -(this.words[i] | 0) + carry; - carry = w >> 26; - this.words[i] = w & 0x3ffffff; - } - this.negative = 1; - - return this.strip(); - }; - - BN.prototype._wordDiv = function _wordDiv (num, mode) { - var shift = this.length - num.length; - - var a = this.clone(); - var b = num; - - // Normalize - var bhi = b.words[b.length - 1] | 0; - var bhiBits = this._countBits(bhi); - shift = 26 - bhiBits; - if (shift !== 0) { - b = b.ushln(shift); - a.iushln(shift); - bhi = b.words[b.length - 1] | 0; - } - - // Initialize quotient - var m = a.length - b.length; - var q; - - if (mode !== 'mod') { - q = new BN(null); - q.length = m + 1; - q.words = new Array(q.length); - for (var i = 0; i < q.length; i++) { - q.words[i] = 0; - } - } - - var diff = a.clone()._ishlnsubmul(b, 1, m); - if (diff.negative === 0) { - a = diff; - if (q) { - q.words[m] = 1; - } - } - - for (var j = m - 1; j >= 0; j--) { - var qj = (a.words[b.length + j] | 0) * 0x4000000 + - (a.words[b.length + j - 1] | 0); - - // NOTE: (qj / bhi) is (0x3ffffff * 0x4000000 + 0x3ffffff) / 0x2000000 max - // (0x7ffffff) - qj = Math.min((qj / bhi) | 0, 0x3ffffff); - - a._ishlnsubmul(b, qj, j); - while (a.negative !== 0) { - qj--; - a.negative = 0; - a._ishlnsubmul(b, 1, j); - if (!a.isZero()) { - a.negative ^= 1; - } - } - if (q) { - q.words[j] = qj; - } - } - if (q) { - q.strip(); - } - a.strip(); - - // Denormalize - if (mode !== 'div' && shift !== 0) { - a.iushrn(shift); - } - - return { - div: q || null, - mod: a - }; - }; - - // NOTE: 1) `mode` can be set to `mod` to request mod only, - // to `div` to request div only, or be absent to - // request both div & mod - // 2) `positive` is true if unsigned mod is requested - BN.prototype.divmod = function divmod (num, mode, positive) { - assert(!num.isZero()); - - if (this.isZero()) { - return { - div: new BN(0), - mod: new BN(0) - }; - } - - var div, mod, res; - if (this.negative !== 0 && num.negative === 0) { - res = this.neg().divmod(num, mode); - - if (mode !== 'mod') { - div = res.div.neg(); - } - - if (mode !== 'div') { - mod = res.mod.neg(); - if (positive && mod.negative !== 0) { - mod.iadd(num); - } - } - - return { - div: div, - mod: mod - }; - } - - if (this.negative === 0 && num.negative !== 0) { - res = this.divmod(num.neg(), mode); - - if (mode !== 'mod') { - div = res.div.neg(); - } - - return { - div: div, - mod: res.mod - }; - } - - if ((this.negative & num.negative) !== 0) { - res = this.neg().divmod(num.neg(), mode); - - if (mode !== 'div') { - mod = res.mod.neg(); - if (positive && mod.negative !== 0) { - mod.isub(num); - } - } - - return { - div: res.div, - mod: mod - }; - } - - // Both numbers are positive at this point - - // Strip both numbers to approximate shift value - if (num.length > this.length || this.cmp(num) < 0) { - return { - div: new BN(0), - mod: this - }; - } - - // Very short reduction - if (num.length === 1) { - if (mode === 'div') { - return { - div: this.divn(num.words[0]), - mod: null - }; - } - - if (mode === 'mod') { - return { - div: null, - mod: new BN(this.modn(num.words[0])) - }; - } - - return { - div: this.divn(num.words[0]), - mod: new BN(this.modn(num.words[0])) - }; - } - - return this._wordDiv(num, mode); - }; - - // Find `this` / `num` - BN.prototype.div = function div (num) { - return this.divmod(num, 'div', false).div; - }; - - // Find `this` % `num` - BN.prototype.mod = function mod (num) { - return this.divmod(num, 'mod', false).mod; - }; - - BN.prototype.umod = function umod (num) { - return this.divmod(num, 'mod', true).mod; - }; - - // Find Round(`this` / `num`) - BN.prototype.divRound = function divRound (num) { - var dm = this.divmod(num); - - // Fast case - exact division - if (dm.mod.isZero()) return dm.div; - - var mod = dm.div.negative !== 0 ? dm.mod.isub(num) : dm.mod; - - var half = num.ushrn(1); - var r2 = num.andln(1); - var cmp = mod.cmp(half); - - // Round down - if (cmp < 0 || r2 === 1 && cmp === 0) return dm.div; - - // Round up - return dm.div.negative !== 0 ? dm.div.isubn(1) : dm.div.iaddn(1); - }; - - BN.prototype.modn = function modn (num) { - assert(num <= 0x3ffffff); - var p = (1 << 26) % num; - - var acc = 0; - for (var i = this.length - 1; i >= 0; i--) { - acc = (p * acc + (this.words[i] | 0)) % num; - } - - return acc; - }; - - // In-place division by number - BN.prototype.idivn = function idivn (num) { - assert(num <= 0x3ffffff); - - var carry = 0; - for (var i = this.length - 1; i >= 0; i--) { - var w = (this.words[i] | 0) + carry * 0x4000000; - this.words[i] = (w / num) | 0; - carry = w % num; - } - - return this.strip(); - }; - - BN.prototype.divn = function divn (num) { - return this.clone().idivn(num); - }; - - BN.prototype.egcd = function egcd (p) { - assert(p.negative === 0); - assert(!p.isZero()); - - var x = this; - var y = p.clone(); - - if (x.negative !== 0) { - x = x.umod(p); - } else { - x = x.clone(); - } - - // A * x + B * y = x - var A = new BN(1); - var B = new BN(0); - - // C * x + D * y = y - var C = new BN(0); - var D = new BN(1); - - var g = 0; - - while (x.isEven() && y.isEven()) { - x.iushrn(1); - y.iushrn(1); - ++g; - } - - var yp = y.clone(); - var xp = x.clone(); - - while (!x.isZero()) { - for (var i = 0, im = 1; (x.words[0] & im) === 0 && i < 26; ++i, im <<= 1); - if (i > 0) { - x.iushrn(i); - while (i-- > 0) { - if (A.isOdd() || B.isOdd()) { - A.iadd(yp); - B.isub(xp); - } - - A.iushrn(1); - B.iushrn(1); - } - } - - for (var j = 0, jm = 1; (y.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1); - if (j > 0) { - y.iushrn(j); - while (j-- > 0) { - if (C.isOdd() || D.isOdd()) { - C.iadd(yp); - D.isub(xp); - } - - C.iushrn(1); - D.iushrn(1); - } - } - - if (x.cmp(y) >= 0) { - x.isub(y); - A.isub(C); - B.isub(D); - } else { - y.isub(x); - C.isub(A); - D.isub(B); - } - } - - return { - a: C, - b: D, - gcd: y.iushln(g) - }; - }; - - // This is reduced incarnation of the binary EEA - // above, designated to invert members of the - // _prime_ fields F(p) at a maximal speed - BN.prototype._invmp = function _invmp (p) { - assert(p.negative === 0); - assert(!p.isZero()); - - var a = this; - var b = p.clone(); - - if (a.negative !== 0) { - a = a.umod(p); - } else { - a = a.clone(); - } - - var x1 = new BN(1); - var x2 = new BN(0); - - var delta = b.clone(); - - while (a.cmpn(1) > 0 && b.cmpn(1) > 0) { - for (var i = 0, im = 1; (a.words[0] & im) === 0 && i < 26; ++i, im <<= 1); - if (i > 0) { - a.iushrn(i); - while (i-- > 0) { - if (x1.isOdd()) { - x1.iadd(delta); - } - - x1.iushrn(1); - } - } - - for (var j = 0, jm = 1; (b.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1); - if (j > 0) { - b.iushrn(j); - while (j-- > 0) { - if (x2.isOdd()) { - x2.iadd(delta); - } - - x2.iushrn(1); - } - } - - if (a.cmp(b) >= 0) { - a.isub(b); - x1.isub(x2); - } else { - b.isub(a); - x2.isub(x1); - } - } - - var res; - if (a.cmpn(1) === 0) { - res = x1; - } else { - res = x2; - } - - if (res.cmpn(0) < 0) { - res.iadd(p); - } - - return res; - }; - - BN.prototype.gcd = function gcd (num) { - if (this.isZero()) return num.abs(); - if (num.isZero()) return this.abs(); - - var a = this.clone(); - var b = num.clone(); - a.negative = 0; - b.negative = 0; - - // Remove common factor of two - for (var shift = 0; a.isEven() && b.isEven(); shift++) { - a.iushrn(1); - b.iushrn(1); - } - - do { - while (a.isEven()) { - a.iushrn(1); - } - while (b.isEven()) { - b.iushrn(1); - } - - var r = a.cmp(b); - if (r < 0) { - // Swap `a` and `b` to make `a` always bigger than `b` - var t = a; - a = b; - b = t; - } else if (r === 0 || b.cmpn(1) === 0) { - break; - } - - a.isub(b); - } while (true); - - return b.iushln(shift); - }; - - // Invert number in the field F(num) - BN.prototype.invm = function invm (num) { - return this.egcd(num).a.umod(num); - }; - - BN.prototype.isEven = function isEven () { - return (this.words[0] & 1) === 0; - }; - - BN.prototype.isOdd = function isOdd () { - return (this.words[0] & 1) === 1; - }; - - // And first word and num - BN.prototype.andln = function andln (num) { - return this.words[0] & num; - }; - - // Increment at the bit position in-line - BN.prototype.bincn = function bincn (bit) { - assert(typeof bit === 'number'); - var r = bit % 26; - var s = (bit - r) / 26; - var q = 1 << r; - - // Fast case: bit is much higher than all existing words - if (this.length <= s) { - this._expand(s + 1); - this.words[s] |= q; - return this; - } - - // Add bit and propagate, if needed - var carry = q; - for (var i = s; carry !== 0 && i < this.length; i++) { - var w = this.words[i] | 0; - w += carry; - carry = w >>> 26; - w &= 0x3ffffff; - this.words[i] = w; - } - if (carry !== 0) { - this.words[i] = carry; - this.length++; - } - return this; - }; - - BN.prototype.isZero = function isZero () { - return this.length === 1 && this.words[0] === 0; - }; - - BN.prototype.cmpn = function cmpn (num) { - var negative = num < 0; - - if (this.negative !== 0 && !negative) return -1; - if (this.negative === 0 && negative) return 1; - - this.strip(); - - var res; - if (this.length > 1) { - res = 1; - } else { - if (negative) { - num = -num; - } - - assert(num <= 0x3ffffff, 'Number is too big'); - - var w = this.words[0] | 0; - res = w === num ? 0 : w < num ? -1 : 1; - } - if (this.negative !== 0) return -res | 0; - return res; - }; - - // Compare two numbers and return: - // 1 - if `this` > `num` - // 0 - if `this` == `num` - // -1 - if `this` < `num` - BN.prototype.cmp = function cmp (num) { - if (this.negative !== 0 && num.negative === 0) return -1; - if (this.negative === 0 && num.negative !== 0) return 1; - - var res = this.ucmp(num); - if (this.negative !== 0) return -res | 0; - return res; - }; - - // Unsigned comparison - BN.prototype.ucmp = function ucmp (num) { - // At this point both numbers have the same sign - if (this.length > num.length) return 1; - if (this.length < num.length) return -1; - - var res = 0; - for (var i = this.length - 1; i >= 0; i--) { - var a = this.words[i] | 0; - var b = num.words[i] | 0; - - if (a === b) continue; - if (a < b) { - res = -1; - } else if (a > b) { - res = 1; - } - break; - } - return res; - }; - - BN.prototype.gtn = function gtn (num) { - return this.cmpn(num) === 1; - }; - - BN.prototype.gt = function gt (num) { - return this.cmp(num) === 1; - }; - - BN.prototype.gten = function gten (num) { - return this.cmpn(num) >= 0; - }; - - BN.prototype.gte = function gte (num) { - return this.cmp(num) >= 0; - }; - - BN.prototype.ltn = function ltn (num) { - return this.cmpn(num) === -1; - }; - - BN.prototype.lt = function lt (num) { - return this.cmp(num) === -1; - }; - - BN.prototype.lten = function lten (num) { - return this.cmpn(num) <= 0; - }; - - BN.prototype.lte = function lte (num) { - return this.cmp(num) <= 0; - }; - - BN.prototype.eqn = function eqn (num) { - return this.cmpn(num) === 0; - }; - - BN.prototype.eq = function eq (num) { - return this.cmp(num) === 0; - }; - - // - // A reduce context, could be using montgomery or something better, depending - // on the `m` itself. - // - BN.red = function red (num) { - return new Red(num); - }; - - BN.prototype.toRed = function toRed (ctx) { - assert(!this.red, 'Already a number in reduction context'); - assert(this.negative === 0, 'red works only with positives'); - return ctx.convertTo(this)._forceRed(ctx); - }; - - BN.prototype.fromRed = function fromRed () { - assert(this.red, 'fromRed works only with numbers in reduction context'); - return this.red.convertFrom(this); - }; - - BN.prototype._forceRed = function _forceRed (ctx) { - this.red = ctx; - return this; - }; - - BN.prototype.forceRed = function forceRed (ctx) { - assert(!this.red, 'Already a number in reduction context'); - return this._forceRed(ctx); - }; - - BN.prototype.redAdd = function redAdd (num) { - assert(this.red, 'redAdd works only with red numbers'); - return this.red.add(this, num); - }; - - BN.prototype.redIAdd = function redIAdd (num) { - assert(this.red, 'redIAdd works only with red numbers'); - return this.red.iadd(this, num); - }; - - BN.prototype.redSub = function redSub (num) { - assert(this.red, 'redSub works only with red numbers'); - return this.red.sub(this, num); - }; - - BN.prototype.redISub = function redISub (num) { - assert(this.red, 'redISub works only with red numbers'); - return this.red.isub(this, num); - }; - - BN.prototype.redShl = function redShl (num) { - assert(this.red, 'redShl works only with red numbers'); - return this.red.shl(this, num); - }; - - BN.prototype.redMul = function redMul (num) { - assert(this.red, 'redMul works only with red numbers'); - this.red._verify2(this, num); - return this.red.mul(this, num); - }; - - BN.prototype.redIMul = function redIMul (num) { - assert(this.red, 'redMul works only with red numbers'); - this.red._verify2(this, num); - return this.red.imul(this, num); - }; - - BN.prototype.redSqr = function redSqr () { - assert(this.red, 'redSqr works only with red numbers'); - this.red._verify1(this); - return this.red.sqr(this); - }; - - BN.prototype.redISqr = function redISqr () { - assert(this.red, 'redISqr works only with red numbers'); - this.red._verify1(this); - return this.red.isqr(this); - }; - - // Square root over p - BN.prototype.redSqrt = function redSqrt () { - assert(this.red, 'redSqrt works only with red numbers'); - this.red._verify1(this); - return this.red.sqrt(this); - }; - - BN.prototype.redInvm = function redInvm () { - assert(this.red, 'redInvm works only with red numbers'); - this.red._verify1(this); - return this.red.invm(this); - }; - - // Return negative clone of `this` % `red modulo` - BN.prototype.redNeg = function redNeg () { - assert(this.red, 'redNeg works only with red numbers'); - this.red._verify1(this); - return this.red.neg(this); - }; - - BN.prototype.redPow = function redPow (num) { - assert(this.red && !num.red, 'redPow(normalNum)'); - this.red._verify1(this); - return this.red.pow(this, num); - }; - - // Prime numbers with efficient reduction - var primes = { - k256: null, - p224: null, - p192: null, - p25519: null - }; - - // Pseudo-Mersenne prime - function MPrime (name, p) { - // P = 2 ^ N - K - this.name = name; - this.p = new BN(p, 16); - this.n = this.p.bitLength(); - this.k = new BN(1).iushln(this.n).isub(this.p); - - this.tmp = this._tmp(); - } - - MPrime.prototype._tmp = function _tmp () { - var tmp = new BN(null); - tmp.words = new Array(Math.ceil(this.n / 13)); - return tmp; - }; - - MPrime.prototype.ireduce = function ireduce (num) { - // Assumes that `num` is less than `P^2` - // num = HI * (2 ^ N - K) + HI * K + LO = HI * K + LO (mod P) - var r = num; - var rlen; - - do { - this.split(r, this.tmp); - r = this.imulK(r); - r = r.iadd(this.tmp); - rlen = r.bitLength(); - } while (rlen > this.n); - - var cmp = rlen < this.n ? -1 : r.ucmp(this.p); - if (cmp === 0) { - r.words[0] = 0; - r.length = 1; - } else if (cmp > 0) { - r.isub(this.p); - } else { - r.strip(); - } - - return r; - }; - - MPrime.prototype.split = function split (input, out) { - input.iushrn(this.n, 0, out); - }; - - MPrime.prototype.imulK = function imulK (num) { - return num.imul(this.k); - }; - - function K256 () { - MPrime.call( - this, - 'k256', - 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f'); - } - inherits(K256, MPrime); - - K256.prototype.split = function split (input, output) { - // 256 = 9 * 26 + 22 - var mask = 0x3fffff; - - var outLen = Math.min(input.length, 9); - for (var i = 0; i < outLen; i++) { - output.words[i] = input.words[i]; - } - output.length = outLen; - - if (input.length <= 9) { - input.words[0] = 0; - input.length = 1; - return; - } - - // Shift by 9 limbs - var prev = input.words[9]; - output.words[output.length++] = prev & mask; - - for (i = 10; i < input.length; i++) { - var next = input.words[i] | 0; - input.words[i - 10] = ((next & mask) << 4) | (prev >>> 22); - prev = next; - } - prev >>>= 22; - input.words[i - 10] = prev; - if (prev === 0 && input.length > 10) { - input.length -= 10; - } else { - input.length -= 9; - } - }; - - K256.prototype.imulK = function imulK (num) { - // K = 0x1000003d1 = [ 0x40, 0x3d1 ] - num.words[num.length] = 0; - num.words[num.length + 1] = 0; - num.length += 2; - - // bounded at: 0x40 * 0x3ffffff + 0x3d0 = 0x100000390 - var lo = 0; - for (var i = 0; i < num.length; i++) { - var w = num.words[i] | 0; - lo += w * 0x3d1; - num.words[i] = lo & 0x3ffffff; - lo = w * 0x40 + ((lo / 0x4000000) | 0); - } - - // Fast length reduction - if (num.words[num.length - 1] === 0) { - num.length--; - if (num.words[num.length - 1] === 0) { - num.length--; - } - } - return num; - }; - - function P224 () { - MPrime.call( - this, - 'p224', - 'ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001'); - } - inherits(P224, MPrime); - - function P192 () { - MPrime.call( - this, - 'p192', - 'ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff'); - } - inherits(P192, MPrime); - - function P25519 () { - // 2 ^ 255 - 19 - MPrime.call( - this, - '25519', - '7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed'); - } - inherits(P25519, MPrime); - - P25519.prototype.imulK = function imulK (num) { - // K = 0x13 - var carry = 0; - for (var i = 0; i < num.length; i++) { - var hi = (num.words[i] | 0) * 0x13 + carry; - var lo = hi & 0x3ffffff; - hi >>>= 26; - - num.words[i] = lo; - carry = hi; - } - if (carry !== 0) { - num.words[num.length++] = carry; - } - return num; - }; - - // Exported mostly for testing purposes, use plain name instead - BN._prime = function prime (name) { - // Cached version of prime - if (primes[name]) return primes[name]; - - var prime; - if (name === 'k256') { - prime = new K256(); - } else if (name === 'p224') { - prime = new P224(); - } else if (name === 'p192') { - prime = new P192(); - } else if (name === 'p25519') { - prime = new P25519(); - } else { - throw new Error('Unknown prime ' + name); - } - primes[name] = prime; - - return prime; - }; - - // - // Base reduction engine - // - function Red (m) { - if (typeof m === 'string') { - var prime = BN._prime(m); - this.m = prime.p; - this.prime = prime; - } else { - assert(m.gtn(1), 'modulus must be greater than 1'); - this.m = m; - this.prime = null; - } - } - - Red.prototype._verify1 = function _verify1 (a) { - assert(a.negative === 0, 'red works only with positives'); - assert(a.red, 'red works only with red numbers'); - }; - - Red.prototype._verify2 = function _verify2 (a, b) { - assert((a.negative | b.negative) === 0, 'red works only with positives'); - assert(a.red && a.red === b.red, - 'red works only with red numbers'); - }; - - Red.prototype.imod = function imod (a) { - if (this.prime) return this.prime.ireduce(a)._forceRed(this); - return a.umod(this.m)._forceRed(this); - }; - - Red.prototype.neg = function neg (a) { - if (a.isZero()) { - return a.clone(); - } - - return this.m.sub(a)._forceRed(this); - }; - - Red.prototype.add = function add (a, b) { - this._verify2(a, b); - - var res = a.add(b); - if (res.cmp(this.m) >= 0) { - res.isub(this.m); - } - return res._forceRed(this); - }; - - Red.prototype.iadd = function iadd (a, b) { - this._verify2(a, b); - - var res = a.iadd(b); - if (res.cmp(this.m) >= 0) { - res.isub(this.m); - } - return res; - }; - - Red.prototype.sub = function sub (a, b) { - this._verify2(a, b); - - var res = a.sub(b); - if (res.cmpn(0) < 0) { - res.iadd(this.m); - } - return res._forceRed(this); - }; - - Red.prototype.isub = function isub (a, b) { - this._verify2(a, b); - - var res = a.isub(b); - if (res.cmpn(0) < 0) { - res.iadd(this.m); - } - return res; - }; - - Red.prototype.shl = function shl (a, num) { - this._verify1(a); - return this.imod(a.ushln(num)); - }; - - Red.prototype.imul = function imul (a, b) { - this._verify2(a, b); - return this.imod(a.imul(b)); - }; - - Red.prototype.mul = function mul (a, b) { - this._verify2(a, b); - return this.imod(a.mul(b)); - }; - - Red.prototype.isqr = function isqr (a) { - return this.imul(a, a.clone()); - }; - - Red.prototype.sqr = function sqr (a) { - return this.mul(a, a); - }; - - Red.prototype.sqrt = function sqrt (a) { - if (a.isZero()) return a.clone(); - - var mod3 = this.m.andln(3); - assert(mod3 % 2 === 1); - - // Fast case - if (mod3 === 3) { - var pow = this.m.add(new BN(1)).iushrn(2); - return this.pow(a, pow); - } - - // Tonelli-Shanks algorithm (Totally unoptimized and slow) - // - // Find Q and S, that Q * 2 ^ S = (P - 1) - var q = this.m.subn(1); - var s = 0; - while (!q.isZero() && q.andln(1) === 0) { - s++; - q.iushrn(1); - } - assert(!q.isZero()); - - var one = new BN(1).toRed(this); - var nOne = one.redNeg(); - - // Find quadratic non-residue - // NOTE: Max is such because of generalized Riemann hypothesis. - var lpow = this.m.subn(1).iushrn(1); - var z = this.m.bitLength(); - z = new BN(2 * z * z).toRed(this); - - while (this.pow(z, lpow).cmp(nOne) !== 0) { - z.redIAdd(nOne); - } - - var c = this.pow(z, q); - var r = this.pow(a, q.addn(1).iushrn(1)); - var t = this.pow(a, q); - var m = s; - while (t.cmp(one) !== 0) { - var tmp = t; - for (var i = 0; tmp.cmp(one) !== 0; i++) { - tmp = tmp.redSqr(); - } - assert(i < m); - var b = this.pow(c, new BN(1).iushln(m - i - 1)); - - r = r.redMul(b); - c = b.redSqr(); - t = t.redMul(c); - m = i; - } - - return r; - }; - - Red.prototype.invm = function invm (a) { - var inv = a._invmp(this.m); - if (inv.negative !== 0) { - inv.negative = 0; - return this.imod(inv).redNeg(); - } else { - return this.imod(inv); - } - }; - - Red.prototype.pow = function pow (a, num) { - if (num.isZero()) return new BN(1).toRed(this); - if (num.cmpn(1) === 0) return a.clone(); - - var windowSize = 4; - var wnd = new Array(1 << windowSize); - wnd[0] = new BN(1).toRed(this); - wnd[1] = a; - for (var i = 2; i < wnd.length; i++) { - wnd[i] = this.mul(wnd[i - 1], a); - } - - var res = wnd[0]; - var current = 0; - var currentLen = 0; - var start = num.bitLength() % 26; - if (start === 0) { - start = 26; - } - - for (i = num.length - 1; i >= 0; i--) { - var word = num.words[i]; - for (var j = start - 1; j >= 0; j--) { - var bit = (word >> j) & 1; - if (res !== wnd[0]) { - res = this.sqr(res); - } - - if (bit === 0 && current === 0) { - currentLen = 0; - continue; - } - - current <<= 1; - current |= bit; - currentLen++; - if (currentLen !== windowSize && (i !== 0 || j !== 0)) continue; - - res = this.mul(res, wnd[current]); - currentLen = 0; - current = 0; - } - start = 26; - } - - return res; - }; - - Red.prototype.convertTo = function convertTo (num) { - var r = num.umod(this.m); - - return r === num ? r.clone() : r; - }; - - Red.prototype.convertFrom = function convertFrom (num) { - var res = num.clone(); - res.red = null; - return res; - }; - - // - // Montgomery method engine - // - - BN.mont = function mont (num) { - return new Mont(num); - }; - - function Mont (m) { - Red.call(this, m); - - this.shift = this.m.bitLength(); - if (this.shift % 26 !== 0) { - this.shift += 26 - (this.shift % 26); - } - - this.r = new BN(1).iushln(this.shift); - this.r2 = this.imod(this.r.sqr()); - this.rinv = this.r._invmp(this.m); - - this.minv = this.rinv.mul(this.r).isubn(1).div(this.m); - this.minv = this.minv.umod(this.r); - this.minv = this.r.sub(this.minv); - } - inherits(Mont, Red); - - Mont.prototype.convertTo = function convertTo (num) { - return this.imod(num.ushln(this.shift)); - }; - - Mont.prototype.convertFrom = function convertFrom (num) { - var r = this.imod(num.mul(this.rinv)); - r.red = null; - return r; - }; - - Mont.prototype.imul = function imul (a, b) { - if (a.isZero() || b.isZero()) { - a.words[0] = 0; - a.length = 1; - return a; - } - - var t = a.imul(b); - var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m); - var u = t.isub(c).iushrn(this.shift); - var res = u; - - if (u.cmp(this.m) >= 0) { - res = u.isub(this.m); - } else if (u.cmpn(0) < 0) { - res = u.iadd(this.m); - } - - return res._forceRed(this); - }; - - Mont.prototype.mul = function mul (a, b) { - if (a.isZero() || b.isZero()) return new BN(0)._forceRed(this); - - var t = a.mul(b); - var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m); - var u = t.isub(c).iushrn(this.shift); - var res = u; - if (u.cmp(this.m) >= 0) { - res = u.isub(this.m); - } else if (u.cmpn(0) < 0) { - res = u.iadd(this.m); - } - - return res._forceRed(this); - }; - - Mont.prototype.invm = function invm (a) { - // (AR)^-1 * R^2 = (A^-1 * R^-1) * R^2 = A^-1 * R - var res = this.imod(a._invmp(this.m).mul(this.r2)); - return res._forceRed(this); - }; -})(typeof module === 'undefined' || module, this); - -},{"buffer":"rDCW"}],"bNi7":[function(require,module,exports) { -module.exports = { - "_args": [ - [ - "elliptic@6.5.0", - "/Users/Sanchay/Work/js-sdk" - ] - ], - "_from": "elliptic@6.5.0", - "_id": "elliptic@6.5.0", - "_inBundle": false, - "_integrity": "sha512-eFOJTMyCYb7xtE/caJ6JJu+bhi67WCYNbkGSknu20pmM8Ke/bqOfdnZWxyoGN26JgfxTbXrsCkEw4KheCT/KGg==", - "_location": "/elliptic", - "_phantomChildren": {}, - "_requested": { - "type": "version", - "registry": true, - "raw": "elliptic@6.5.0", - "name": "elliptic", - "escapedName": "elliptic", - "rawSpec": "6.5.0", - "saveSpec": null, - "fetchSpec": "6.5.0" - }, - "_requiredBy": [ - "/blockstack", - "/blockstack/jsontokens", - "/browserify-sign", - "/create-ecdh", - "/jsontokens", - "/jsontokens/key-encoder", - "/key-encoder", - "/tiny-secp256k1" - ], - "_resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.0.tgz", - "_spec": "6.5.0", - "_where": "/Users/Sanchay/Work/js-sdk", - "author": { - "name": "Fedor Indutny", - "email": "fedor@indutny.com" - }, - "bugs": { - "url": "https://github.com/indutny/elliptic/issues" - }, - "dependencies": { - "bn.js": "^4.4.0", - "brorand": "^1.0.1", - "hash.js": "^1.0.0", - "hmac-drbg": "^1.0.0", - "inherits": "^2.0.1", - "minimalistic-assert": "^1.0.0", - "minimalistic-crypto-utils": "^1.0.0" - }, - "description": "EC cryptography", - "devDependencies": { - "brfs": "^1.4.3", - "coveralls": "^2.11.3", - "grunt": "^0.4.5", - "grunt-browserify": "^5.0.0", - "grunt-cli": "^1.2.0", - "grunt-contrib-connect": "^1.0.0", - "grunt-contrib-copy": "^1.0.0", - "grunt-contrib-uglify": "^1.0.1", - "grunt-mocha-istanbul": "^3.0.1", - "grunt-saucelabs": "^8.6.2", - "istanbul": "^0.4.2", - "jscs": "^2.9.0", - "jshint": "^2.6.0", - "mocha": "^2.1.0" - }, - "files": [ - "lib" - ], - "homepage": "https://github.com/indutny/elliptic", - "keywords": [ - "EC", - "Elliptic", - "curve", - "Cryptography" - ], - "license": "MIT", - "main": "lib/elliptic.js", - "name": "elliptic", - "repository": { - "type": "git", - "url": "git+ssh://git@github.com/indutny/elliptic.git" - }, - "scripts": { - "jscs": "jscs benchmarks/*.js lib/*.js lib/**/*.js lib/**/**/*.js test/index.js", - "jshint": "jscs benchmarks/*.js lib/*.js lib/**/*.js lib/**/**/*.js test/index.js", - "lint": "npm run jscs && npm run jshint", - "test": "npm run lint && npm run unit", - "unit": "istanbul test _mocha --reporter=spec test/index.js", - "version": "grunt dist && git add dist/" - }, - "version": "6.5.0" -} -; -},{}],"MpuC":[function(require,module,exports) { -module.exports = assert; - -function assert(val, msg) { - if (!val) - throw new Error(msg || 'Assertion failed'); -} - -assert.equal = function assertEqual(l, r, msg) { - if (l != r) - throw new Error(msg || ('Assertion failed: ' + l + ' != ' + r)); -}; - -},{}],"vl2S":[function(require,module,exports) { -'use strict'; - -var utils = exports; - -function toArray(msg, enc) { - if (Array.isArray(msg)) - return msg.slice(); - if (!msg) - return []; - var res = []; - if (typeof msg !== 'string') { - for (var i = 0; i < msg.length; i++) - res[i] = msg[i] | 0; - return res; - } - if (enc === 'hex') { - msg = msg.replace(/[^a-z0-9]+/ig, ''); - if (msg.length % 2 !== 0) - msg = '0' + msg; - for (var i = 0; i < msg.length; i += 2) - res.push(parseInt(msg[i] + msg[i + 1], 16)); - } else { - for (var i = 0; i < msg.length; i++) { - var c = msg.charCodeAt(i); - var hi = c >> 8; - var lo = c & 0xff; - if (hi) - res.push(hi, lo); - else - res.push(lo); - } - } - return res; -} -utils.toArray = toArray; - -function zero2(word) { - if (word.length === 1) - return '0' + word; - else - return word; -} -utils.zero2 = zero2; - -function toHex(msg) { - var res = ''; - for (var i = 0; i < msg.length; i++) - res += zero2(msg[i].toString(16)); - return res; -} -utils.toHex = toHex; - -utils.encode = function encode(arr, enc) { - if (enc === 'hex') - return toHex(arr); - else - return arr; -}; - -},{}],"F8Ez":[function(require,module,exports) { -'use strict'; - -var utils = exports; -var BN = require('bn.js'); -var minAssert = require('minimalistic-assert'); -var minUtils = require('minimalistic-crypto-utils'); - -utils.assert = minAssert; -utils.toArray = minUtils.toArray; -utils.zero2 = minUtils.zero2; -utils.toHex = minUtils.toHex; -utils.encode = minUtils.encode; - -// Represent num in a w-NAF form -function getNAF(num, w) { - var naf = []; - var ws = 1 << (w + 1); - var k = num.clone(); - while (k.cmpn(1) >= 0) { - var z; - if (k.isOdd()) { - var mod = k.andln(ws - 1); - if (mod > (ws >> 1) - 1) - z = (ws >> 1) - mod; - else - z = mod; - k.isubn(z); - } else { - z = 0; - } - naf.push(z); - - // Optimization, shift by word if possible - var shift = (k.cmpn(0) !== 0 && k.andln(ws - 1) === 0) ? (w + 1) : 1; - for (var i = 1; i < shift; i++) - naf.push(0); - k.iushrn(shift); - } - - return naf; -} -utils.getNAF = getNAF; - -// Represent k1, k2 in a Joint Sparse Form -function getJSF(k1, k2) { - var jsf = [ - [], - [] - ]; - - k1 = k1.clone(); - k2 = k2.clone(); - var d1 = 0; - var d2 = 0; - while (k1.cmpn(-d1) > 0 || k2.cmpn(-d2) > 0) { - - // First phase - var m14 = (k1.andln(3) + d1) & 3; - var m24 = (k2.andln(3) + d2) & 3; - if (m14 === 3) - m14 = -1; - if (m24 === 3) - m24 = -1; - var u1; - if ((m14 & 1) === 0) { - u1 = 0; - } else { - var m8 = (k1.andln(7) + d1) & 7; - if ((m8 === 3 || m8 === 5) && m24 === 2) - u1 = -m14; - else - u1 = m14; - } - jsf[0].push(u1); - - var u2; - if ((m24 & 1) === 0) { - u2 = 0; - } else { - var m8 = (k2.andln(7) + d2) & 7; - if ((m8 === 3 || m8 === 5) && m14 === 2) - u2 = -m24; - else - u2 = m24; - } - jsf[1].push(u2); - - // Second phase - if (2 * d1 === u1 + 1) - d1 = 1 - d1; - if (2 * d2 === u2 + 1) - d2 = 1 - d2; - k1.iushrn(1); - k2.iushrn(1); - } - - return jsf; -} -utils.getJSF = getJSF; - -function cachedProperty(obj, name, computer) { - var key = '_' + name; - obj.prototype[name] = function cachedProperty() { - return this[key] !== undefined ? this[key] : - this[key] = computer.call(this); - }; -} -utils.cachedProperty = cachedProperty; - -function parseBytes(bytes) { - return typeof bytes === 'string' ? utils.toArray(bytes, 'hex') : - bytes; -} -utils.parseBytes = parseBytes; - -function intFromLE(bytes) { - return new BN(bytes, 'hex', 'le'); -} -utils.intFromLE = intFromLE; - - -},{"bn.js":"BOxy","minimalistic-assert":"MpuC","minimalistic-crypto-utils":"vl2S"}],"e03B":[function(require,module,exports) { -var r; - -module.exports = function rand(len) { - if (!r) - r = new Rand(null); - - return r.generate(len); -}; - -function Rand(rand) { - this.rand = rand; -} -module.exports.Rand = Rand; - -Rand.prototype.generate = function generate(len) { - return this._rand(len); -}; - -// Emulate crypto API using randy -Rand.prototype._rand = function _rand(n) { - if (this.rand.getBytes) - return this.rand.getBytes(n); - - var res = new Uint8Array(n); - for (var i = 0; i < res.length; i++) - res[i] = this.rand.getByte(); - return res; -}; - -if (typeof self === 'object') { - if (self.crypto && self.crypto.getRandomValues) { - // Modern browsers - Rand.prototype._rand = function _rand(n) { - var arr = new Uint8Array(n); - self.crypto.getRandomValues(arr); - return arr; - }; - } else if (self.msCrypto && self.msCrypto.getRandomValues) { - // IE - Rand.prototype._rand = function _rand(n) { - var arr = new Uint8Array(n); - self.msCrypto.getRandomValues(arr); - return arr; - }; - - // Safari's WebWorkers do not have `crypto` - } else if (typeof window === 'object') { - // Old junk - Rand.prototype._rand = function() { - throw new Error('Not implemented yet'); - }; - } -} else { - // Node.js or Web worker with no crypto support - try { - var crypto = require('crypto'); - if (typeof crypto.randomBytes !== 'function') - throw new Error('Not supported'); - - Rand.prototype._rand = function _rand(n) { - return crypto.randomBytes(n); - }; - } catch (e) { - } -} - -},{"crypto":"rDCW"}],"NX8i":[function(require,module,exports) { -'use strict'; - -var BN = require('bn.js'); -var utils = require('../utils'); -var getNAF = utils.getNAF; -var getJSF = utils.getJSF; -var assert = utils.assert; - -function BaseCurve(type, conf) { - this.type = type; - this.p = new BN(conf.p, 16); - - // Use Montgomery, when there is no fast reduction for the prime - this.red = conf.prime ? BN.red(conf.prime) : BN.mont(this.p); - - // Useful for many curves - this.zero = new BN(0).toRed(this.red); - this.one = new BN(1).toRed(this.red); - this.two = new BN(2).toRed(this.red); - - // Curve configuration, optional - this.n = conf.n && new BN(conf.n, 16); - this.g = conf.g && this.pointFromJSON(conf.g, conf.gRed); - - // Temporary arrays - this._wnafT1 = new Array(4); - this._wnafT2 = new Array(4); - this._wnafT3 = new Array(4); - this._wnafT4 = new Array(4); - - // Generalized Greg Maxwell's trick - var adjustCount = this.n && this.p.div(this.n); - if (!adjustCount || adjustCount.cmpn(100) > 0) { - this.redN = null; - } else { - this._maxwellTrick = true; - this.redN = this.n.toRed(this.red); - } -} -module.exports = BaseCurve; - -BaseCurve.prototype.point = function point() { - throw new Error('Not implemented'); -}; - -BaseCurve.prototype.validate = function validate() { - throw new Error('Not implemented'); -}; - -BaseCurve.prototype._fixedNafMul = function _fixedNafMul(p, k) { - assert(p.precomputed); - var doubles = p._getDoubles(); - - var naf = getNAF(k, 1); - var I = (1 << (doubles.step + 1)) - (doubles.step % 2 === 0 ? 2 : 1); - I /= 3; - - // Translate into more windowed form - var repr = []; - for (var j = 0; j < naf.length; j += doubles.step) { - var nafW = 0; - for (var k = j + doubles.step - 1; k >= j; k--) - nafW = (nafW << 1) + naf[k]; - repr.push(nafW); - } - - var a = this.jpoint(null, null, null); - var b = this.jpoint(null, null, null); - for (var i = I; i > 0; i--) { - for (var j = 0; j < repr.length; j++) { - var nafW = repr[j]; - if (nafW === i) - b = b.mixedAdd(doubles.points[j]); - else if (nafW === -i) - b = b.mixedAdd(doubles.points[j].neg()); - } - a = a.add(b); - } - return a.toP(); -}; - -BaseCurve.prototype._wnafMul = function _wnafMul(p, k) { - var w = 4; - - // Precompute window - var nafPoints = p._getNAFPoints(w); - w = nafPoints.wnd; - var wnd = nafPoints.points; - - // Get NAF form - var naf = getNAF(k, w); - - // Add `this`*(N+1) for every w-NAF index - var acc = this.jpoint(null, null, null); - for (var i = naf.length - 1; i >= 0; i--) { - // Count zeroes - for (var k = 0; i >= 0 && naf[i] === 0; i--) - k++; - if (i >= 0) - k++; - acc = acc.dblp(k); - - if (i < 0) - break; - var z = naf[i]; - assert(z !== 0); - if (p.type === 'affine') { - // J +- P - if (z > 0) - acc = acc.mixedAdd(wnd[(z - 1) >> 1]); - else - acc = acc.mixedAdd(wnd[(-z - 1) >> 1].neg()); - } else { - // J +- J - if (z > 0) - acc = acc.add(wnd[(z - 1) >> 1]); - else - acc = acc.add(wnd[(-z - 1) >> 1].neg()); - } - } - return p.type === 'affine' ? acc.toP() : acc; -}; - -BaseCurve.prototype._wnafMulAdd = function _wnafMulAdd(defW, - points, - coeffs, - len, - jacobianResult) { - var wndWidth = this._wnafT1; - var wnd = this._wnafT2; - var naf = this._wnafT3; - - // Fill all arrays - var max = 0; - for (var i = 0; i < len; i++) { - var p = points[i]; - var nafPoints = p._getNAFPoints(defW); - wndWidth[i] = nafPoints.wnd; - wnd[i] = nafPoints.points; - } - - // Comb small window NAFs - for (var i = len - 1; i >= 1; i -= 2) { - var a = i - 1; - var b = i; - if (wndWidth[a] !== 1 || wndWidth[b] !== 1) { - naf[a] = getNAF(coeffs[a], wndWidth[a]); - naf[b] = getNAF(coeffs[b], wndWidth[b]); - max = Math.max(naf[a].length, max); - max = Math.max(naf[b].length, max); - continue; - } - - var comb = [ - points[a], /* 1 */ - null, /* 3 */ - null, /* 5 */ - points[b] /* 7 */ - ]; - - // Try to avoid Projective points, if possible - if (points[a].y.cmp(points[b].y) === 0) { - comb[1] = points[a].add(points[b]); - comb[2] = points[a].toJ().mixedAdd(points[b].neg()); - } else if (points[a].y.cmp(points[b].y.redNeg()) === 0) { - comb[1] = points[a].toJ().mixedAdd(points[b]); - comb[2] = points[a].add(points[b].neg()); - } else { - comb[1] = points[a].toJ().mixedAdd(points[b]); - comb[2] = points[a].toJ().mixedAdd(points[b].neg()); - } - - var index = [ - -3, /* -1 -1 */ - -1, /* -1 0 */ - -5, /* -1 1 */ - -7, /* 0 -1 */ - 0, /* 0 0 */ - 7, /* 0 1 */ - 5, /* 1 -1 */ - 1, /* 1 0 */ - 3 /* 1 1 */ - ]; - - var jsf = getJSF(coeffs[a], coeffs[b]); - max = Math.max(jsf[0].length, max); - naf[a] = new Array(max); - naf[b] = new Array(max); - for (var j = 0; j < max; j++) { - var ja = jsf[0][j] | 0; - var jb = jsf[1][j] | 0; - - naf[a][j] = index[(ja + 1) * 3 + (jb + 1)]; - naf[b][j] = 0; - wnd[a] = comb; - } - } - - var acc = this.jpoint(null, null, null); - var tmp = this._wnafT4; - for (var i = max; i >= 0; i--) { - var k = 0; - - while (i >= 0) { - var zero = true; - for (var j = 0; j < len; j++) { - tmp[j] = naf[j][i] | 0; - if (tmp[j] !== 0) - zero = false; - } - if (!zero) - break; - k++; - i--; - } - if (i >= 0) - k++; - acc = acc.dblp(k); - if (i < 0) - break; - - for (var j = 0; j < len; j++) { - var z = tmp[j]; - var p; - if (z === 0) - continue; - else if (z > 0) - p = wnd[j][(z - 1) >> 1]; - else if (z < 0) - p = wnd[j][(-z - 1) >> 1].neg(); - - if (p.type === 'affine') - acc = acc.mixedAdd(p); - else - acc = acc.add(p); - } - } - // Zeroify references - for (var i = 0; i < len; i++) - wnd[i] = null; - - if (jacobianResult) - return acc; - else - return acc.toP(); -}; - -function BasePoint(curve, type) { - this.curve = curve; - this.type = type; - this.precomputed = null; -} -BaseCurve.BasePoint = BasePoint; - -BasePoint.prototype.eq = function eq(/*other*/) { - throw new Error('Not implemented'); -}; - -BasePoint.prototype.validate = function validate() { - return this.curve.validate(this); -}; - -BaseCurve.prototype.decodePoint = function decodePoint(bytes, enc) { - bytes = utils.toArray(bytes, enc); - - var len = this.p.byteLength(); - - // uncompressed, hybrid-odd, hybrid-even - if ((bytes[0] === 0x04 || bytes[0] === 0x06 || bytes[0] === 0x07) && - bytes.length - 1 === 2 * len) { - if (bytes[0] === 0x06) - assert(bytes[bytes.length - 1] % 2 === 0); - else if (bytes[0] === 0x07) - assert(bytes[bytes.length - 1] % 2 === 1); - - var res = this.point(bytes.slice(1, 1 + len), - bytes.slice(1 + len, 1 + 2 * len)); - - return res; - } else if ((bytes[0] === 0x02 || bytes[0] === 0x03) && - bytes.length - 1 === len) { - return this.pointFromX(bytes.slice(1, 1 + len), bytes[0] === 0x03); - } - throw new Error('Unknown point format'); -}; - -BasePoint.prototype.encodeCompressed = function encodeCompressed(enc) { - return this.encode(enc, true); -}; - -BasePoint.prototype._encode = function _encode(compact) { - var len = this.curve.p.byteLength(); - var x = this.getX().toArray('be', len); - - if (compact) - return [ this.getY().isEven() ? 0x02 : 0x03 ].concat(x); - - return [ 0x04 ].concat(x, this.getY().toArray('be', len)) ; -}; - -BasePoint.prototype.encode = function encode(enc, compact) { - return utils.encode(this._encode(compact), enc); -}; - -BasePoint.prototype.precompute = function precompute(power) { - if (this.precomputed) - return this; - - var precomputed = { - doubles: null, - naf: null, - beta: null - }; - precomputed.naf = this._getNAFPoints(8); - precomputed.doubles = this._getDoubles(4, power); - precomputed.beta = this._getBeta(); - this.precomputed = precomputed; - - return this; -}; - -BasePoint.prototype._hasDoubles = function _hasDoubles(k) { - if (!this.precomputed) - return false; - - var doubles = this.precomputed.doubles; - if (!doubles) - return false; - - return doubles.points.length >= Math.ceil((k.bitLength() + 1) / doubles.step); -}; - -BasePoint.prototype._getDoubles = function _getDoubles(step, power) { - if (this.precomputed && this.precomputed.doubles) - return this.precomputed.doubles; - - var doubles = [ this ]; - var acc = this; - for (var i = 0; i < power; i += step) { - for (var j = 0; j < step; j++) - acc = acc.dbl(); - doubles.push(acc); - } - return { - step: step, - points: doubles - }; -}; - -BasePoint.prototype._getNAFPoints = function _getNAFPoints(wnd) { - if (this.precomputed && this.precomputed.naf) - return this.precomputed.naf; - - var res = [ this ]; - var max = (1 << wnd) - 1; - var dbl = max === 1 ? null : this.dbl(); - for (var i = 1; i < max; i++) - res[i] = res[i - 1].add(dbl); - return { - wnd: wnd, - points: res - }; -}; - -BasePoint.prototype._getBeta = function _getBeta() { - return null; -}; - -BasePoint.prototype.dblp = function dblp(k) { - var r = this; - for (var i = 0; i < k; i++) - r = r.dbl(); - return r; -}; - -},{"bn.js":"BOxy","../utils":"F8Ez"}],"CO0D":[function(require,module,exports) { -'use strict'; - -var utils = require('../utils'); -var BN = require('bn.js'); -var inherits = require('inherits'); -var Base = require('./base'); - -var assert = utils.assert; - -function ShortCurve(conf) { - Base.call(this, 'short', conf); - - this.a = new BN(conf.a, 16).toRed(this.red); - this.b = new BN(conf.b, 16).toRed(this.red); - this.tinv = this.two.redInvm(); - - this.zeroA = this.a.fromRed().cmpn(0) === 0; - this.threeA = this.a.fromRed().sub(this.p).cmpn(-3) === 0; - - // If the curve is endomorphic, precalculate beta and lambda - this.endo = this._getEndomorphism(conf); - this._endoWnafT1 = new Array(4); - this._endoWnafT2 = new Array(4); -} -inherits(ShortCurve, Base); -module.exports = ShortCurve; - -ShortCurve.prototype._getEndomorphism = function _getEndomorphism(conf) { - // No efficient endomorphism - if (!this.zeroA || !this.g || !this.n || this.p.modn(3) !== 1) - return; - - // Compute beta and lambda, that lambda * P = (beta * Px; Py) - var beta; - var lambda; - if (conf.beta) { - beta = new BN(conf.beta, 16).toRed(this.red); - } else { - var betas = this._getEndoRoots(this.p); - // Choose the smallest beta - beta = betas[0].cmp(betas[1]) < 0 ? betas[0] : betas[1]; - beta = beta.toRed(this.red); - } - if (conf.lambda) { - lambda = new BN(conf.lambda, 16); - } else { - // Choose the lambda that is matching selected beta - var lambdas = this._getEndoRoots(this.n); - if (this.g.mul(lambdas[0]).x.cmp(this.g.x.redMul(beta)) === 0) { - lambda = lambdas[0]; - } else { - lambda = lambdas[1]; - assert(this.g.mul(lambda).x.cmp(this.g.x.redMul(beta)) === 0); - } - } - - // Get basis vectors, used for balanced length-two representation - var basis; - if (conf.basis) { - basis = conf.basis.map(function(vec) { - return { - a: new BN(vec.a, 16), - b: new BN(vec.b, 16) - }; - }); - } else { - basis = this._getEndoBasis(lambda); - } - - return { - beta: beta, - lambda: lambda, - basis: basis - }; -}; - -ShortCurve.prototype._getEndoRoots = function _getEndoRoots(num) { - // Find roots of for x^2 + x + 1 in F - // Root = (-1 +- Sqrt(-3)) / 2 - // - var red = num === this.p ? this.red : BN.mont(num); - var tinv = new BN(2).toRed(red).redInvm(); - var ntinv = tinv.redNeg(); - - var s = new BN(3).toRed(red).redNeg().redSqrt().redMul(tinv); - - var l1 = ntinv.redAdd(s).fromRed(); - var l2 = ntinv.redSub(s).fromRed(); - return [ l1, l2 ]; -}; - -ShortCurve.prototype._getEndoBasis = function _getEndoBasis(lambda) { - // aprxSqrt >= sqrt(this.n) - var aprxSqrt = this.n.ushrn(Math.floor(this.n.bitLength() / 2)); - - // 3.74 - // Run EGCD, until r(L + 1) < aprxSqrt - var u = lambda; - var v = this.n.clone(); - var x1 = new BN(1); - var y1 = new BN(0); - var x2 = new BN(0); - var y2 = new BN(1); - - // NOTE: all vectors are roots of: a + b * lambda = 0 (mod n) - var a0; - var b0; - // First vector - var a1; - var b1; - // Second vector - var a2; - var b2; - - var prevR; - var i = 0; - var r; - var x; - while (u.cmpn(0) !== 0) { - var q = v.div(u); - r = v.sub(q.mul(u)); - x = x2.sub(q.mul(x1)); - var y = y2.sub(q.mul(y1)); - - if (!a1 && r.cmp(aprxSqrt) < 0) { - a0 = prevR.neg(); - b0 = x1; - a1 = r.neg(); - b1 = x; - } else if (a1 && ++i === 2) { - break; - } - prevR = r; - - v = u; - u = r; - x2 = x1; - x1 = x; - y2 = y1; - y1 = y; - } - a2 = r.neg(); - b2 = x; - - var len1 = a1.sqr().add(b1.sqr()); - var len2 = a2.sqr().add(b2.sqr()); - if (len2.cmp(len1) >= 0) { - a2 = a0; - b2 = b0; - } - - // Normalize signs - if (a1.negative) { - a1 = a1.neg(); - b1 = b1.neg(); - } - if (a2.negative) { - a2 = a2.neg(); - b2 = b2.neg(); - } - - return [ - { a: a1, b: b1 }, - { a: a2, b: b2 } - ]; -}; - -ShortCurve.prototype._endoSplit = function _endoSplit(k) { - var basis = this.endo.basis; - var v1 = basis[0]; - var v2 = basis[1]; - - var c1 = v2.b.mul(k).divRound(this.n); - var c2 = v1.b.neg().mul(k).divRound(this.n); - - var p1 = c1.mul(v1.a); - var p2 = c2.mul(v2.a); - var q1 = c1.mul(v1.b); - var q2 = c2.mul(v2.b); - - // Calculate answer - var k1 = k.sub(p1).sub(p2); - var k2 = q1.add(q2).neg(); - return { k1: k1, k2: k2 }; -}; - -ShortCurve.prototype.pointFromX = function pointFromX(x, odd) { - x = new BN(x, 16); - if (!x.red) - x = x.toRed(this.red); - - var y2 = x.redSqr().redMul(x).redIAdd(x.redMul(this.a)).redIAdd(this.b); - var y = y2.redSqrt(); - if (y.redSqr().redSub(y2).cmp(this.zero) !== 0) - throw new Error('invalid point'); - - // XXX Is there any way to tell if the number is odd without converting it - // to non-red form? - var isOdd = y.fromRed().isOdd(); - if (odd && !isOdd || !odd && isOdd) - y = y.redNeg(); - - return this.point(x, y); -}; - -ShortCurve.prototype.validate = function validate(point) { - if (point.inf) - return true; - - var x = point.x; - var y = point.y; - - var ax = this.a.redMul(x); - var rhs = x.redSqr().redMul(x).redIAdd(ax).redIAdd(this.b); - return y.redSqr().redISub(rhs).cmpn(0) === 0; -}; - -ShortCurve.prototype._endoWnafMulAdd = - function _endoWnafMulAdd(points, coeffs, jacobianResult) { - var npoints = this._endoWnafT1; - var ncoeffs = this._endoWnafT2; - for (var i = 0; i < points.length; i++) { - var split = this._endoSplit(coeffs[i]); - var p = points[i]; - var beta = p._getBeta(); - - if (split.k1.negative) { - split.k1.ineg(); - p = p.neg(true); - } - if (split.k2.negative) { - split.k2.ineg(); - beta = beta.neg(true); - } - - npoints[i * 2] = p; - npoints[i * 2 + 1] = beta; - ncoeffs[i * 2] = split.k1; - ncoeffs[i * 2 + 1] = split.k2; - } - var res = this._wnafMulAdd(1, npoints, ncoeffs, i * 2, jacobianResult); - - // Clean-up references to points and coefficients - for (var j = 0; j < i * 2; j++) { - npoints[j] = null; - ncoeffs[j] = null; - } - return res; -}; - -function Point(curve, x, y, isRed) { - Base.BasePoint.call(this, curve, 'affine'); - if (x === null && y === null) { - this.x = null; - this.y = null; - this.inf = true; - } else { - this.x = new BN(x, 16); - this.y = new BN(y, 16); - // Force redgomery representation when loading from JSON - if (isRed) { - this.x.forceRed(this.curve.red); - this.y.forceRed(this.curve.red); - } - if (!this.x.red) - this.x = this.x.toRed(this.curve.red); - if (!this.y.red) - this.y = this.y.toRed(this.curve.red); - this.inf = false; - } -} -inherits(Point, Base.BasePoint); - -ShortCurve.prototype.point = function point(x, y, isRed) { - return new Point(this, x, y, isRed); -}; - -ShortCurve.prototype.pointFromJSON = function pointFromJSON(obj, red) { - return Point.fromJSON(this, obj, red); -}; - -Point.prototype._getBeta = function _getBeta() { - if (!this.curve.endo) - return; - - var pre = this.precomputed; - if (pre && pre.beta) - return pre.beta; - - var beta = this.curve.point(this.x.redMul(this.curve.endo.beta), this.y); - if (pre) { - var curve = this.curve; - var endoMul = function(p) { - return curve.point(p.x.redMul(curve.endo.beta), p.y); - }; - pre.beta = beta; - beta.precomputed = { - beta: null, - naf: pre.naf && { - wnd: pre.naf.wnd, - points: pre.naf.points.map(endoMul) - }, - doubles: pre.doubles && { - step: pre.doubles.step, - points: pre.doubles.points.map(endoMul) - } - }; - } - return beta; -}; - -Point.prototype.toJSON = function toJSON() { - if (!this.precomputed) - return [ this.x, this.y ]; - - return [ this.x, this.y, this.precomputed && { - doubles: this.precomputed.doubles && { - step: this.precomputed.doubles.step, - points: this.precomputed.doubles.points.slice(1) - }, - naf: this.precomputed.naf && { - wnd: this.precomputed.naf.wnd, - points: this.precomputed.naf.points.slice(1) - } - } ]; -}; - -Point.fromJSON = function fromJSON(curve, obj, red) { - if (typeof obj === 'string') - obj = JSON.parse(obj); - var res = curve.point(obj[0], obj[1], red); - if (!obj[2]) - return res; - - function obj2point(obj) { - return curve.point(obj[0], obj[1], red); - } - - var pre = obj[2]; - res.precomputed = { - beta: null, - doubles: pre.doubles && { - step: pre.doubles.step, - points: [ res ].concat(pre.doubles.points.map(obj2point)) - }, - naf: pre.naf && { - wnd: pre.naf.wnd, - points: [ res ].concat(pre.naf.points.map(obj2point)) - } - }; - return res; -}; - -Point.prototype.inspect = function inspect() { - if (this.isInfinity()) - return ''; - return ''; -}; - -Point.prototype.isInfinity = function isInfinity() { - return this.inf; -}; - -Point.prototype.add = function add(p) { - // O + P = P - if (this.inf) - return p; - - // P + O = P - if (p.inf) - return this; - - // P + P = 2P - if (this.eq(p)) - return this.dbl(); - - // P + (-P) = O - if (this.neg().eq(p)) - return this.curve.point(null, null); - - // P + Q = O - if (this.x.cmp(p.x) === 0) - return this.curve.point(null, null); - - var c = this.y.redSub(p.y); - if (c.cmpn(0) !== 0) - c = c.redMul(this.x.redSub(p.x).redInvm()); - var nx = c.redSqr().redISub(this.x).redISub(p.x); - var ny = c.redMul(this.x.redSub(nx)).redISub(this.y); - return this.curve.point(nx, ny); -}; - -Point.prototype.dbl = function dbl() { - if (this.inf) - return this; - - // 2P = O - var ys1 = this.y.redAdd(this.y); - if (ys1.cmpn(0) === 0) - return this.curve.point(null, null); - - var a = this.curve.a; - - var x2 = this.x.redSqr(); - var dyinv = ys1.redInvm(); - var c = x2.redAdd(x2).redIAdd(x2).redIAdd(a).redMul(dyinv); - - var nx = c.redSqr().redISub(this.x.redAdd(this.x)); - var ny = c.redMul(this.x.redSub(nx)).redISub(this.y); - return this.curve.point(nx, ny); -}; - -Point.prototype.getX = function getX() { - return this.x.fromRed(); -}; - -Point.prototype.getY = function getY() { - return this.y.fromRed(); -}; - -Point.prototype.mul = function mul(k) { - k = new BN(k, 16); - - if (this._hasDoubles(k)) - return this.curve._fixedNafMul(this, k); - else if (this.curve.endo) - return this.curve._endoWnafMulAdd([ this ], [ k ]); - else - return this.curve._wnafMul(this, k); -}; - -Point.prototype.mulAdd = function mulAdd(k1, p2, k2) { - var points = [ this, p2 ]; - var coeffs = [ k1, k2 ]; - if (this.curve.endo) - return this.curve._endoWnafMulAdd(points, coeffs); - else - return this.curve._wnafMulAdd(1, points, coeffs, 2); -}; - -Point.prototype.jmulAdd = function jmulAdd(k1, p2, k2) { - var points = [ this, p2 ]; - var coeffs = [ k1, k2 ]; - if (this.curve.endo) - return this.curve._endoWnafMulAdd(points, coeffs, true); - else - return this.curve._wnafMulAdd(1, points, coeffs, 2, true); -}; - -Point.prototype.eq = function eq(p) { - return this === p || - this.inf === p.inf && - (this.inf || this.x.cmp(p.x) === 0 && this.y.cmp(p.y) === 0); -}; - -Point.prototype.neg = function neg(_precompute) { - if (this.inf) - return this; - - var res = this.curve.point(this.x, this.y.redNeg()); - if (_precompute && this.precomputed) { - var pre = this.precomputed; - var negate = function(p) { - return p.neg(); - }; - res.precomputed = { - naf: pre.naf && { - wnd: pre.naf.wnd, - points: pre.naf.points.map(negate) - }, - doubles: pre.doubles && { - step: pre.doubles.step, - points: pre.doubles.points.map(negate) - } - }; - } - return res; -}; - -Point.prototype.toJ = function toJ() { - if (this.inf) - return this.curve.jpoint(null, null, null); - - var res = this.curve.jpoint(this.x, this.y, this.curve.one); - return res; -}; - -function JPoint(curve, x, y, z) { - Base.BasePoint.call(this, curve, 'jacobian'); - if (x === null && y === null && z === null) { - this.x = this.curve.one; - this.y = this.curve.one; - this.z = new BN(0); - } else { - this.x = new BN(x, 16); - this.y = new BN(y, 16); - this.z = new BN(z, 16); - } - if (!this.x.red) - this.x = this.x.toRed(this.curve.red); - if (!this.y.red) - this.y = this.y.toRed(this.curve.red); - if (!this.z.red) - this.z = this.z.toRed(this.curve.red); - - this.zOne = this.z === this.curve.one; -} -inherits(JPoint, Base.BasePoint); - -ShortCurve.prototype.jpoint = function jpoint(x, y, z) { - return new JPoint(this, x, y, z); -}; - -JPoint.prototype.toP = function toP() { - if (this.isInfinity()) - return this.curve.point(null, null); - - var zinv = this.z.redInvm(); - var zinv2 = zinv.redSqr(); - var ax = this.x.redMul(zinv2); - var ay = this.y.redMul(zinv2).redMul(zinv); - - return this.curve.point(ax, ay); -}; - -JPoint.prototype.neg = function neg() { - return this.curve.jpoint(this.x, this.y.redNeg(), this.z); -}; - -JPoint.prototype.add = function add(p) { - // O + P = P - if (this.isInfinity()) - return p; - - // P + O = P - if (p.isInfinity()) - return this; - - // 12M + 4S + 7A - var pz2 = p.z.redSqr(); - var z2 = this.z.redSqr(); - var u1 = this.x.redMul(pz2); - var u2 = p.x.redMul(z2); - var s1 = this.y.redMul(pz2.redMul(p.z)); - var s2 = p.y.redMul(z2.redMul(this.z)); - - var h = u1.redSub(u2); - var r = s1.redSub(s2); - if (h.cmpn(0) === 0) { - if (r.cmpn(0) !== 0) - return this.curve.jpoint(null, null, null); - else - return this.dbl(); - } - - var h2 = h.redSqr(); - var h3 = h2.redMul(h); - var v = u1.redMul(h2); - - var nx = r.redSqr().redIAdd(h3).redISub(v).redISub(v); - var ny = r.redMul(v.redISub(nx)).redISub(s1.redMul(h3)); - var nz = this.z.redMul(p.z).redMul(h); - - return this.curve.jpoint(nx, ny, nz); -}; - -JPoint.prototype.mixedAdd = function mixedAdd(p) { - // O + P = P - if (this.isInfinity()) - return p.toJ(); - - // P + O = P - if (p.isInfinity()) - return this; - - // 8M + 3S + 7A - var z2 = this.z.redSqr(); - var u1 = this.x; - var u2 = p.x.redMul(z2); - var s1 = this.y; - var s2 = p.y.redMul(z2).redMul(this.z); - - var h = u1.redSub(u2); - var r = s1.redSub(s2); - if (h.cmpn(0) === 0) { - if (r.cmpn(0) !== 0) - return this.curve.jpoint(null, null, null); - else - return this.dbl(); - } - - var h2 = h.redSqr(); - var h3 = h2.redMul(h); - var v = u1.redMul(h2); - - var nx = r.redSqr().redIAdd(h3).redISub(v).redISub(v); - var ny = r.redMul(v.redISub(nx)).redISub(s1.redMul(h3)); - var nz = this.z.redMul(h); - - return this.curve.jpoint(nx, ny, nz); -}; - -JPoint.prototype.dblp = function dblp(pow) { - if (pow === 0) - return this; - if (this.isInfinity()) - return this; - if (!pow) - return this.dbl(); - - if (this.curve.zeroA || this.curve.threeA) { - var r = this; - for (var i = 0; i < pow; i++) - r = r.dbl(); - return r; - } - - // 1M + 2S + 1A + N * (4S + 5M + 8A) - // N = 1 => 6M + 6S + 9A - var a = this.curve.a; - var tinv = this.curve.tinv; - - var jx = this.x; - var jy = this.y; - var jz = this.z; - var jz4 = jz.redSqr().redSqr(); - - // Reuse results - var jyd = jy.redAdd(jy); - for (var i = 0; i < pow; i++) { - var jx2 = jx.redSqr(); - var jyd2 = jyd.redSqr(); - var jyd4 = jyd2.redSqr(); - var c = jx2.redAdd(jx2).redIAdd(jx2).redIAdd(a.redMul(jz4)); - - var t1 = jx.redMul(jyd2); - var nx = c.redSqr().redISub(t1.redAdd(t1)); - var t2 = t1.redISub(nx); - var dny = c.redMul(t2); - dny = dny.redIAdd(dny).redISub(jyd4); - var nz = jyd.redMul(jz); - if (i + 1 < pow) - jz4 = jz4.redMul(jyd4); - - jx = nx; - jz = nz; - jyd = dny; - } - - return this.curve.jpoint(jx, jyd.redMul(tinv), jz); -}; - -JPoint.prototype.dbl = function dbl() { - if (this.isInfinity()) - return this; - - if (this.curve.zeroA) - return this._zeroDbl(); - else if (this.curve.threeA) - return this._threeDbl(); - else - return this._dbl(); -}; - -JPoint.prototype._zeroDbl = function _zeroDbl() { - var nx; - var ny; - var nz; - // Z = 1 - if (this.zOne) { - // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-0.html - // #doubling-mdbl-2007-bl - // 1M + 5S + 14A - - // XX = X1^2 - var xx = this.x.redSqr(); - // YY = Y1^2 - var yy = this.y.redSqr(); - // YYYY = YY^2 - var yyyy = yy.redSqr(); - // S = 2 * ((X1 + YY)^2 - XX - YYYY) - var s = this.x.redAdd(yy).redSqr().redISub(xx).redISub(yyyy); - s = s.redIAdd(s); - // M = 3 * XX + a; a = 0 - var m = xx.redAdd(xx).redIAdd(xx); - // T = M ^ 2 - 2*S - var t = m.redSqr().redISub(s).redISub(s); - - // 8 * YYYY - var yyyy8 = yyyy.redIAdd(yyyy); - yyyy8 = yyyy8.redIAdd(yyyy8); - yyyy8 = yyyy8.redIAdd(yyyy8); - - // X3 = T - nx = t; - // Y3 = M * (S - T) - 8 * YYYY - ny = m.redMul(s.redISub(t)).redISub(yyyy8); - // Z3 = 2*Y1 - nz = this.y.redAdd(this.y); - } else { - // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-0.html - // #doubling-dbl-2009-l - // 2M + 5S + 13A - - // A = X1^2 - var a = this.x.redSqr(); - // B = Y1^2 - var b = this.y.redSqr(); - // C = B^2 - var c = b.redSqr(); - // D = 2 * ((X1 + B)^2 - A - C) - var d = this.x.redAdd(b).redSqr().redISub(a).redISub(c); - d = d.redIAdd(d); - // E = 3 * A - var e = a.redAdd(a).redIAdd(a); - // F = E^2 - var f = e.redSqr(); - - // 8 * C - var c8 = c.redIAdd(c); - c8 = c8.redIAdd(c8); - c8 = c8.redIAdd(c8); - - // X3 = F - 2 * D - nx = f.redISub(d).redISub(d); - // Y3 = E * (D - X3) - 8 * C - ny = e.redMul(d.redISub(nx)).redISub(c8); - // Z3 = 2 * Y1 * Z1 - nz = this.y.redMul(this.z); - nz = nz.redIAdd(nz); - } - - return this.curve.jpoint(nx, ny, nz); -}; - -JPoint.prototype._threeDbl = function _threeDbl() { - var nx; - var ny; - var nz; - // Z = 1 - if (this.zOne) { - // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-3.html - // #doubling-mdbl-2007-bl - // 1M + 5S + 15A - - // XX = X1^2 - var xx = this.x.redSqr(); - // YY = Y1^2 - var yy = this.y.redSqr(); - // YYYY = YY^2 - var yyyy = yy.redSqr(); - // S = 2 * ((X1 + YY)^2 - XX - YYYY) - var s = this.x.redAdd(yy).redSqr().redISub(xx).redISub(yyyy); - s = s.redIAdd(s); - // M = 3 * XX + a - var m = xx.redAdd(xx).redIAdd(xx).redIAdd(this.curve.a); - // T = M^2 - 2 * S - var t = m.redSqr().redISub(s).redISub(s); - // X3 = T - nx = t; - // Y3 = M * (S - T) - 8 * YYYY - var yyyy8 = yyyy.redIAdd(yyyy); - yyyy8 = yyyy8.redIAdd(yyyy8); - yyyy8 = yyyy8.redIAdd(yyyy8); - ny = m.redMul(s.redISub(t)).redISub(yyyy8); - // Z3 = 2 * Y1 - nz = this.y.redAdd(this.y); - } else { - // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-3.html#doubling-dbl-2001-b - // 3M + 5S - - // delta = Z1^2 - var delta = this.z.redSqr(); - // gamma = Y1^2 - var gamma = this.y.redSqr(); - // beta = X1 * gamma - var beta = this.x.redMul(gamma); - // alpha = 3 * (X1 - delta) * (X1 + delta) - var alpha = this.x.redSub(delta).redMul(this.x.redAdd(delta)); - alpha = alpha.redAdd(alpha).redIAdd(alpha); - // X3 = alpha^2 - 8 * beta - var beta4 = beta.redIAdd(beta); - beta4 = beta4.redIAdd(beta4); - var beta8 = beta4.redAdd(beta4); - nx = alpha.redSqr().redISub(beta8); - // Z3 = (Y1 + Z1)^2 - gamma - delta - nz = this.y.redAdd(this.z).redSqr().redISub(gamma).redISub(delta); - // Y3 = alpha * (4 * beta - X3) - 8 * gamma^2 - var ggamma8 = gamma.redSqr(); - ggamma8 = ggamma8.redIAdd(ggamma8); - ggamma8 = ggamma8.redIAdd(ggamma8); - ggamma8 = ggamma8.redIAdd(ggamma8); - ny = alpha.redMul(beta4.redISub(nx)).redISub(ggamma8); - } - - return this.curve.jpoint(nx, ny, nz); -}; - -JPoint.prototype._dbl = function _dbl() { - var a = this.curve.a; - - // 4M + 6S + 10A - var jx = this.x; - var jy = this.y; - var jz = this.z; - var jz4 = jz.redSqr().redSqr(); - - var jx2 = jx.redSqr(); - var jy2 = jy.redSqr(); - - var c = jx2.redAdd(jx2).redIAdd(jx2).redIAdd(a.redMul(jz4)); - - var jxd4 = jx.redAdd(jx); - jxd4 = jxd4.redIAdd(jxd4); - var t1 = jxd4.redMul(jy2); - var nx = c.redSqr().redISub(t1.redAdd(t1)); - var t2 = t1.redISub(nx); - - var jyd8 = jy2.redSqr(); - jyd8 = jyd8.redIAdd(jyd8); - jyd8 = jyd8.redIAdd(jyd8); - jyd8 = jyd8.redIAdd(jyd8); - var ny = c.redMul(t2).redISub(jyd8); - var nz = jy.redAdd(jy).redMul(jz); - - return this.curve.jpoint(nx, ny, nz); -}; - -JPoint.prototype.trpl = function trpl() { - if (!this.curve.zeroA) - return this.dbl().add(this); - - // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-0.html#tripling-tpl-2007-bl - // 5M + 10S + ... - - // XX = X1^2 - var xx = this.x.redSqr(); - // YY = Y1^2 - var yy = this.y.redSqr(); - // ZZ = Z1^2 - var zz = this.z.redSqr(); - // YYYY = YY^2 - var yyyy = yy.redSqr(); - // M = 3 * XX + a * ZZ2; a = 0 - var m = xx.redAdd(xx).redIAdd(xx); - // MM = M^2 - var mm = m.redSqr(); - // E = 6 * ((X1 + YY)^2 - XX - YYYY) - MM - var e = this.x.redAdd(yy).redSqr().redISub(xx).redISub(yyyy); - e = e.redIAdd(e); - e = e.redAdd(e).redIAdd(e); - e = e.redISub(mm); - // EE = E^2 - var ee = e.redSqr(); - // T = 16*YYYY - var t = yyyy.redIAdd(yyyy); - t = t.redIAdd(t); - t = t.redIAdd(t); - t = t.redIAdd(t); - // U = (M + E)^2 - MM - EE - T - var u = m.redIAdd(e).redSqr().redISub(mm).redISub(ee).redISub(t); - // X3 = 4 * (X1 * EE - 4 * YY * U) - var yyu4 = yy.redMul(u); - yyu4 = yyu4.redIAdd(yyu4); - yyu4 = yyu4.redIAdd(yyu4); - var nx = this.x.redMul(ee).redISub(yyu4); - nx = nx.redIAdd(nx); - nx = nx.redIAdd(nx); - // Y3 = 8 * Y1 * (U * (T - U) - E * EE) - var ny = this.y.redMul(u.redMul(t.redISub(u)).redISub(e.redMul(ee))); - ny = ny.redIAdd(ny); - ny = ny.redIAdd(ny); - ny = ny.redIAdd(ny); - // Z3 = (Z1 + E)^2 - ZZ - EE - var nz = this.z.redAdd(e).redSqr().redISub(zz).redISub(ee); - - return this.curve.jpoint(nx, ny, nz); -}; - -JPoint.prototype.mul = function mul(k, kbase) { - k = new BN(k, kbase); - - return this.curve._wnafMul(this, k); -}; - -JPoint.prototype.eq = function eq(p) { - if (p.type === 'affine') - return this.eq(p.toJ()); - - if (this === p) - return true; - - // x1 * z2^2 == x2 * z1^2 - var z2 = this.z.redSqr(); - var pz2 = p.z.redSqr(); - if (this.x.redMul(pz2).redISub(p.x.redMul(z2)).cmpn(0) !== 0) - return false; - - // y1 * z2^3 == y2 * z1^3 - var z3 = z2.redMul(this.z); - var pz3 = pz2.redMul(p.z); - return this.y.redMul(pz3).redISub(p.y.redMul(z3)).cmpn(0) === 0; -}; - -JPoint.prototype.eqXToP = function eqXToP(x) { - var zs = this.z.redSqr(); - var rx = x.toRed(this.curve.red).redMul(zs); - if (this.x.cmp(rx) === 0) - return true; - - var xc = x.clone(); - var t = this.curve.redN.redMul(zs); - for (;;) { - xc.iadd(this.curve.n); - if (xc.cmp(this.curve.p) >= 0) - return false; - - rx.redIAdd(t); - if (this.x.cmp(rx) === 0) - return true; - } -}; - -JPoint.prototype.inspect = function inspect() { - if (this.isInfinity()) - return ''; - return ''; -}; - -JPoint.prototype.isInfinity = function isInfinity() { - // XXX This code assumes that zero is always zero in red - return this.z.cmpn(0) === 0; -}; - -},{"../utils":"F8Ez","bn.js":"BOxy","inherits":"Bm0n","./base":"NX8i"}],"PwwO":[function(require,module,exports) { -'use strict'; - -var BN = require('bn.js'); -var inherits = require('inherits'); -var Base = require('./base'); - -var utils = require('../utils'); - -function MontCurve(conf) { - Base.call(this, 'mont', conf); - - this.a = new BN(conf.a, 16).toRed(this.red); - this.b = new BN(conf.b, 16).toRed(this.red); - this.i4 = new BN(4).toRed(this.red).redInvm(); - this.two = new BN(2).toRed(this.red); - this.a24 = this.i4.redMul(this.a.redAdd(this.two)); -} -inherits(MontCurve, Base); -module.exports = MontCurve; - -MontCurve.prototype.validate = function validate(point) { - var x = point.normalize().x; - var x2 = x.redSqr(); - var rhs = x2.redMul(x).redAdd(x2.redMul(this.a)).redAdd(x); - var y = rhs.redSqrt(); - - return y.redSqr().cmp(rhs) === 0; -}; - -function Point(curve, x, z) { - Base.BasePoint.call(this, curve, 'projective'); - if (x === null && z === null) { - this.x = this.curve.one; - this.z = this.curve.zero; - } else { - this.x = new BN(x, 16); - this.z = new BN(z, 16); - if (!this.x.red) - this.x = this.x.toRed(this.curve.red); - if (!this.z.red) - this.z = this.z.toRed(this.curve.red); - } -} -inherits(Point, Base.BasePoint); - -MontCurve.prototype.decodePoint = function decodePoint(bytes, enc) { - return this.point(utils.toArray(bytes, enc), 1); -}; - -MontCurve.prototype.point = function point(x, z) { - return new Point(this, x, z); -}; - -MontCurve.prototype.pointFromJSON = function pointFromJSON(obj) { - return Point.fromJSON(this, obj); -}; - -Point.prototype.precompute = function precompute() { - // No-op -}; - -Point.prototype._encode = function _encode() { - return this.getX().toArray('be', this.curve.p.byteLength()); -}; - -Point.fromJSON = function fromJSON(curve, obj) { - return new Point(curve, obj[0], obj[1] || curve.one); -}; - -Point.prototype.inspect = function inspect() { - if (this.isInfinity()) - return ''; - return ''; -}; - -Point.prototype.isInfinity = function isInfinity() { - // XXX This code assumes that zero is always zero in red - return this.z.cmpn(0) === 0; -}; - -Point.prototype.dbl = function dbl() { - // http://hyperelliptic.org/EFD/g1p/auto-montgom-xz.html#doubling-dbl-1987-m-3 - // 2M + 2S + 4A - - // A = X1 + Z1 - var a = this.x.redAdd(this.z); - // AA = A^2 - var aa = a.redSqr(); - // B = X1 - Z1 - var b = this.x.redSub(this.z); - // BB = B^2 - var bb = b.redSqr(); - // C = AA - BB - var c = aa.redSub(bb); - // X3 = AA * BB - var nx = aa.redMul(bb); - // Z3 = C * (BB + A24 * C) - var nz = c.redMul(bb.redAdd(this.curve.a24.redMul(c))); - return this.curve.point(nx, nz); -}; - -Point.prototype.add = function add() { - throw new Error('Not supported on Montgomery curve'); -}; - -Point.prototype.diffAdd = function diffAdd(p, diff) { - // http://hyperelliptic.org/EFD/g1p/auto-montgom-xz.html#diffadd-dadd-1987-m-3 - // 4M + 2S + 6A - - // A = X2 + Z2 - var a = this.x.redAdd(this.z); - // B = X2 - Z2 - var b = this.x.redSub(this.z); - // C = X3 + Z3 - var c = p.x.redAdd(p.z); - // D = X3 - Z3 - var d = p.x.redSub(p.z); - // DA = D * A - var da = d.redMul(a); - // CB = C * B - var cb = c.redMul(b); - // X5 = Z1 * (DA + CB)^2 - var nx = diff.z.redMul(da.redAdd(cb).redSqr()); - // Z5 = X1 * (DA - CB)^2 - var nz = diff.x.redMul(da.redISub(cb).redSqr()); - return this.curve.point(nx, nz); -}; - -Point.prototype.mul = function mul(k) { - var t = k.clone(); - var a = this; // (N / 2) * Q + Q - var b = this.curve.point(null, null); // (N / 2) * Q - var c = this; // Q - - for (var bits = []; t.cmpn(0) !== 0; t.iushrn(1)) - bits.push(t.andln(1)); - - for (var i = bits.length - 1; i >= 0; i--) { - if (bits[i] === 0) { - // N * Q + Q = ((N / 2) * Q + Q)) + (N / 2) * Q - a = a.diffAdd(b, c); - // N * Q = 2 * ((N / 2) * Q + Q)) - b = b.dbl(); - } else { - // N * Q = ((N / 2) * Q + Q) + ((N / 2) * Q) - b = a.diffAdd(b, c); - // N * Q + Q = 2 * ((N / 2) * Q + Q) - a = a.dbl(); - } - } - return b; -}; - -Point.prototype.mulAdd = function mulAdd() { - throw new Error('Not supported on Montgomery curve'); -}; - -Point.prototype.jumlAdd = function jumlAdd() { - throw new Error('Not supported on Montgomery curve'); -}; - -Point.prototype.eq = function eq(other) { - return this.getX().cmp(other.getX()) === 0; -}; - -Point.prototype.normalize = function normalize() { - this.x = this.x.redMul(this.z.redInvm()); - this.z = this.curve.one; - return this; -}; - -Point.prototype.getX = function getX() { - // Normalize coordinates - this.normalize(); - - return this.x.fromRed(); -}; - -},{"bn.js":"BOxy","inherits":"Bm0n","./base":"NX8i","../utils":"F8Ez"}],"tiqw":[function(require,module,exports) { -'use strict'; - -var utils = require('../utils'); -var BN = require('bn.js'); -var inherits = require('inherits'); -var Base = require('./base'); - -var assert = utils.assert; - -function EdwardsCurve(conf) { - // NOTE: Important as we are creating point in Base.call() - this.twisted = (conf.a | 0) !== 1; - this.mOneA = this.twisted && (conf.a | 0) === -1; - this.extended = this.mOneA; - - Base.call(this, 'edwards', conf); - - this.a = new BN(conf.a, 16).umod(this.red.m); - this.a = this.a.toRed(this.red); - this.c = new BN(conf.c, 16).toRed(this.red); - this.c2 = this.c.redSqr(); - this.d = new BN(conf.d, 16).toRed(this.red); - this.dd = this.d.redAdd(this.d); - - assert(!this.twisted || this.c.fromRed().cmpn(1) === 0); - this.oneC = (conf.c | 0) === 1; -} -inherits(EdwardsCurve, Base); -module.exports = EdwardsCurve; - -EdwardsCurve.prototype._mulA = function _mulA(num) { - if (this.mOneA) - return num.redNeg(); - else - return this.a.redMul(num); -}; - -EdwardsCurve.prototype._mulC = function _mulC(num) { - if (this.oneC) - return num; - else - return this.c.redMul(num); -}; - -// Just for compatibility with Short curve -EdwardsCurve.prototype.jpoint = function jpoint(x, y, z, t) { - return this.point(x, y, z, t); -}; - -EdwardsCurve.prototype.pointFromX = function pointFromX(x, odd) { - x = new BN(x, 16); - if (!x.red) - x = x.toRed(this.red); - - var x2 = x.redSqr(); - var rhs = this.c2.redSub(this.a.redMul(x2)); - var lhs = this.one.redSub(this.c2.redMul(this.d).redMul(x2)); - - var y2 = rhs.redMul(lhs.redInvm()); - var y = y2.redSqrt(); - if (y.redSqr().redSub(y2).cmp(this.zero) !== 0) - throw new Error('invalid point'); - - var isOdd = y.fromRed().isOdd(); - if (odd && !isOdd || !odd && isOdd) - y = y.redNeg(); - - return this.point(x, y); -}; - -EdwardsCurve.prototype.pointFromY = function pointFromY(y, odd) { - y = new BN(y, 16); - if (!y.red) - y = y.toRed(this.red); - - // x^2 = (y^2 - c^2) / (c^2 d y^2 - a) - var y2 = y.redSqr(); - var lhs = y2.redSub(this.c2); - var rhs = y2.redMul(this.d).redMul(this.c2).redSub(this.a); - var x2 = lhs.redMul(rhs.redInvm()); - - if (x2.cmp(this.zero) === 0) { - if (odd) - throw new Error('invalid point'); - else - return this.point(this.zero, y); - } - - var x = x2.redSqrt(); - if (x.redSqr().redSub(x2).cmp(this.zero) !== 0) - throw new Error('invalid point'); - - if (x.fromRed().isOdd() !== odd) - x = x.redNeg(); - - return this.point(x, y); -}; - -EdwardsCurve.prototype.validate = function validate(point) { - if (point.isInfinity()) - return true; - - // Curve: A * X^2 + Y^2 = C^2 * (1 + D * X^2 * Y^2) - point.normalize(); - - var x2 = point.x.redSqr(); - var y2 = point.y.redSqr(); - var lhs = x2.redMul(this.a).redAdd(y2); - var rhs = this.c2.redMul(this.one.redAdd(this.d.redMul(x2).redMul(y2))); - - return lhs.cmp(rhs) === 0; -}; - -function Point(curve, x, y, z, t) { - Base.BasePoint.call(this, curve, 'projective'); - if (x === null && y === null && z === null) { - this.x = this.curve.zero; - this.y = this.curve.one; - this.z = this.curve.one; - this.t = this.curve.zero; - this.zOne = true; - } else { - this.x = new BN(x, 16); - this.y = new BN(y, 16); - this.z = z ? new BN(z, 16) : this.curve.one; - this.t = t && new BN(t, 16); - if (!this.x.red) - this.x = this.x.toRed(this.curve.red); - if (!this.y.red) - this.y = this.y.toRed(this.curve.red); - if (!this.z.red) - this.z = this.z.toRed(this.curve.red); - if (this.t && !this.t.red) - this.t = this.t.toRed(this.curve.red); - this.zOne = this.z === this.curve.one; - - // Use extended coordinates - if (this.curve.extended && !this.t) { - this.t = this.x.redMul(this.y); - if (!this.zOne) - this.t = this.t.redMul(this.z.redInvm()); - } - } -} -inherits(Point, Base.BasePoint); - -EdwardsCurve.prototype.pointFromJSON = function pointFromJSON(obj) { - return Point.fromJSON(this, obj); -}; - -EdwardsCurve.prototype.point = function point(x, y, z, t) { - return new Point(this, x, y, z, t); -}; - -Point.fromJSON = function fromJSON(curve, obj) { - return new Point(curve, obj[0], obj[1], obj[2]); -}; - -Point.prototype.inspect = function inspect() { - if (this.isInfinity()) - return ''; - return ''; -}; - -Point.prototype.isInfinity = function isInfinity() { - // XXX This code assumes that zero is always zero in red - return this.x.cmpn(0) === 0 && - (this.y.cmp(this.z) === 0 || - (this.zOne && this.y.cmp(this.curve.c) === 0)); -}; - -Point.prototype._extDbl = function _extDbl() { - // hyperelliptic.org/EFD/g1p/auto-twisted-extended-1.html - // #doubling-dbl-2008-hwcd - // 4M + 4S - - // A = X1^2 - var a = this.x.redSqr(); - // B = Y1^2 - var b = this.y.redSqr(); - // C = 2 * Z1^2 - var c = this.z.redSqr(); - c = c.redIAdd(c); - // D = a * A - var d = this.curve._mulA(a); - // E = (X1 + Y1)^2 - A - B - var e = this.x.redAdd(this.y).redSqr().redISub(a).redISub(b); - // G = D + B - var g = d.redAdd(b); - // F = G - C - var f = g.redSub(c); - // H = D - B - var h = d.redSub(b); - // X3 = E * F - var nx = e.redMul(f); - // Y3 = G * H - var ny = g.redMul(h); - // T3 = E * H - var nt = e.redMul(h); - // Z3 = F * G - var nz = f.redMul(g); - return this.curve.point(nx, ny, nz, nt); -}; - -Point.prototype._projDbl = function _projDbl() { - // hyperelliptic.org/EFD/g1p/auto-twisted-projective.html - // #doubling-dbl-2008-bbjlp - // #doubling-dbl-2007-bl - // and others - // Generally 3M + 4S or 2M + 4S - - // B = (X1 + Y1)^2 - var b = this.x.redAdd(this.y).redSqr(); - // C = X1^2 - var c = this.x.redSqr(); - // D = Y1^2 - var d = this.y.redSqr(); - - var nx; - var ny; - var nz; - if (this.curve.twisted) { - // E = a * C - var e = this.curve._mulA(c); - // F = E + D - var f = e.redAdd(d); - if (this.zOne) { - // X3 = (B - C - D) * (F - 2) - nx = b.redSub(c).redSub(d).redMul(f.redSub(this.curve.two)); - // Y3 = F * (E - D) - ny = f.redMul(e.redSub(d)); - // Z3 = F^2 - 2 * F - nz = f.redSqr().redSub(f).redSub(f); - } else { - // H = Z1^2 - var h = this.z.redSqr(); - // J = F - 2 * H - var j = f.redSub(h).redISub(h); - // X3 = (B-C-D)*J - nx = b.redSub(c).redISub(d).redMul(j); - // Y3 = F * (E - D) - ny = f.redMul(e.redSub(d)); - // Z3 = F * J - nz = f.redMul(j); - } - } else { - // E = C + D - var e = c.redAdd(d); - // H = (c * Z1)^2 - var h = this.curve._mulC(this.z).redSqr(); - // J = E - 2 * H - var j = e.redSub(h).redSub(h); - // X3 = c * (B - E) * J - nx = this.curve._mulC(b.redISub(e)).redMul(j); - // Y3 = c * E * (C - D) - ny = this.curve._mulC(e).redMul(c.redISub(d)); - // Z3 = E * J - nz = e.redMul(j); - } - return this.curve.point(nx, ny, nz); -}; - -Point.prototype.dbl = function dbl() { - if (this.isInfinity()) - return this; - - // Double in extended coordinates - if (this.curve.extended) - return this._extDbl(); - else - return this._projDbl(); -}; - -Point.prototype._extAdd = function _extAdd(p) { - // hyperelliptic.org/EFD/g1p/auto-twisted-extended-1.html - // #addition-add-2008-hwcd-3 - // 8M - - // A = (Y1 - X1) * (Y2 - X2) - var a = this.y.redSub(this.x).redMul(p.y.redSub(p.x)); - // B = (Y1 + X1) * (Y2 + X2) - var b = this.y.redAdd(this.x).redMul(p.y.redAdd(p.x)); - // C = T1 * k * T2 - var c = this.t.redMul(this.curve.dd).redMul(p.t); - // D = Z1 * 2 * Z2 - var d = this.z.redMul(p.z.redAdd(p.z)); - // E = B - A - var e = b.redSub(a); - // F = D - C - var f = d.redSub(c); - // G = D + C - var g = d.redAdd(c); - // H = B + A - var h = b.redAdd(a); - // X3 = E * F - var nx = e.redMul(f); - // Y3 = G * H - var ny = g.redMul(h); - // T3 = E * H - var nt = e.redMul(h); - // Z3 = F * G - var nz = f.redMul(g); - return this.curve.point(nx, ny, nz, nt); -}; - -Point.prototype._projAdd = function _projAdd(p) { - // hyperelliptic.org/EFD/g1p/auto-twisted-projective.html - // #addition-add-2008-bbjlp - // #addition-add-2007-bl - // 10M + 1S - - // A = Z1 * Z2 - var a = this.z.redMul(p.z); - // B = A^2 - var b = a.redSqr(); - // C = X1 * X2 - var c = this.x.redMul(p.x); - // D = Y1 * Y2 - var d = this.y.redMul(p.y); - // E = d * C * D - var e = this.curve.d.redMul(c).redMul(d); - // F = B - E - var f = b.redSub(e); - // G = B + E - var g = b.redAdd(e); - // X3 = A * F * ((X1 + Y1) * (X2 + Y2) - C - D) - var tmp = this.x.redAdd(this.y).redMul(p.x.redAdd(p.y)).redISub(c).redISub(d); - var nx = a.redMul(f).redMul(tmp); - var ny; - var nz; - if (this.curve.twisted) { - // Y3 = A * G * (D - a * C) - ny = a.redMul(g).redMul(d.redSub(this.curve._mulA(c))); - // Z3 = F * G - nz = f.redMul(g); - } else { - // Y3 = A * G * (D - C) - ny = a.redMul(g).redMul(d.redSub(c)); - // Z3 = c * F * G - nz = this.curve._mulC(f).redMul(g); - } - return this.curve.point(nx, ny, nz); -}; - -Point.prototype.add = function add(p) { - if (this.isInfinity()) - return p; - if (p.isInfinity()) - return this; - - if (this.curve.extended) - return this._extAdd(p); - else - return this._projAdd(p); -}; - -Point.prototype.mul = function mul(k) { - if (this._hasDoubles(k)) - return this.curve._fixedNafMul(this, k); - else - return this.curve._wnafMul(this, k); -}; - -Point.prototype.mulAdd = function mulAdd(k1, p, k2) { - return this.curve._wnafMulAdd(1, [ this, p ], [ k1, k2 ], 2, false); -}; - -Point.prototype.jmulAdd = function jmulAdd(k1, p, k2) { - return this.curve._wnafMulAdd(1, [ this, p ], [ k1, k2 ], 2, true); -}; - -Point.prototype.normalize = function normalize() { - if (this.zOne) - return this; - - // Normalize coordinates - var zi = this.z.redInvm(); - this.x = this.x.redMul(zi); - this.y = this.y.redMul(zi); - if (this.t) - this.t = this.t.redMul(zi); - this.z = this.curve.one; - this.zOne = true; - return this; -}; - -Point.prototype.neg = function neg() { - return this.curve.point(this.x.redNeg(), - this.y, - this.z, - this.t && this.t.redNeg()); -}; - -Point.prototype.getX = function getX() { - this.normalize(); - return this.x.fromRed(); -}; - -Point.prototype.getY = function getY() { - this.normalize(); - return this.y.fromRed(); -}; - -Point.prototype.eq = function eq(other) { - return this === other || - this.getX().cmp(other.getX()) === 0 && - this.getY().cmp(other.getY()) === 0; -}; - -Point.prototype.eqXToP = function eqXToP(x) { - var rx = x.toRed(this.curve.red).redMul(this.z); - if (this.x.cmp(rx) === 0) - return true; - - var xc = x.clone(); - var t = this.curve.redN.redMul(this.z); - for (;;) { - xc.iadd(this.curve.n); - if (xc.cmp(this.curve.p) >= 0) - return false; - - rx.redIAdd(t); - if (this.x.cmp(rx) === 0) - return true; - } -}; - -// Compatibility with BaseCurve -Point.prototype.toP = Point.prototype.normalize; -Point.prototype.mixedAdd = Point.prototype.add; - -},{"../utils":"F8Ez","bn.js":"BOxy","inherits":"Bm0n","./base":"NX8i"}],"P4Ml":[function(require,module,exports) { -'use strict'; - -var curve = exports; - -curve.base = require('./base'); -curve.short = require('./short'); -curve.mont = require('./mont'); -curve.edwards = require('./edwards'); - -},{"./base":"NX8i","./short":"CO0D","./mont":"PwwO","./edwards":"tiqw"}],"eeOV":[function(require,module,exports) { -'use strict'; - -var assert = require('minimalistic-assert'); -var inherits = require('inherits'); - -exports.inherits = inherits; - -function isSurrogatePair(msg, i) { - if ((msg.charCodeAt(i) & 0xFC00) !== 0xD800) { - return false; - } - if (i < 0 || i + 1 >= msg.length) { - return false; - } - return (msg.charCodeAt(i + 1) & 0xFC00) === 0xDC00; -} - -function toArray(msg, enc) { - if (Array.isArray(msg)) - return msg.slice(); - if (!msg) - return []; - var res = []; - if (typeof msg === 'string') { - if (!enc) { - // Inspired by stringToUtf8ByteArray() in closure-library by Google - // https://github.com/google/closure-library/blob/8598d87242af59aac233270742c8984e2b2bdbe0/closure/goog/crypt/crypt.js#L117-L143 - // Apache License 2.0 - // https://github.com/google/closure-library/blob/master/LICENSE - var p = 0; - for (var i = 0; i < msg.length; i++) { - var c = msg.charCodeAt(i); - if (c < 128) { - res[p++] = c; - } else if (c < 2048) { - res[p++] = (c >> 6) | 192; - res[p++] = (c & 63) | 128; - } else if (isSurrogatePair(msg, i)) { - c = 0x10000 + ((c & 0x03FF) << 10) + (msg.charCodeAt(++i) & 0x03FF); - res[p++] = (c >> 18) | 240; - res[p++] = ((c >> 12) & 63) | 128; - res[p++] = ((c >> 6) & 63) | 128; - res[p++] = (c & 63) | 128; - } else { - res[p++] = (c >> 12) | 224; - res[p++] = ((c >> 6) & 63) | 128; - res[p++] = (c & 63) | 128; - } - } - } else if (enc === 'hex') { - msg = msg.replace(/[^a-z0-9]+/ig, ''); - if (msg.length % 2 !== 0) - msg = '0' + msg; - for (i = 0; i < msg.length; i += 2) - res.push(parseInt(msg[i] + msg[i + 1], 16)); - } - } else { - for (i = 0; i < msg.length; i++) - res[i] = msg[i] | 0; - } - return res; -} -exports.toArray = toArray; - -function toHex(msg) { - var res = ''; - for (var i = 0; i < msg.length; i++) - res += zero2(msg[i].toString(16)); - return res; -} -exports.toHex = toHex; - -function htonl(w) { - var res = (w >>> 24) | - ((w >>> 8) & 0xff00) | - ((w << 8) & 0xff0000) | - ((w & 0xff) << 24); - return res >>> 0; -} -exports.htonl = htonl; - -function toHex32(msg, endian) { - var res = ''; - for (var i = 0; i < msg.length; i++) { - var w = msg[i]; - if (endian === 'little') - w = htonl(w); - res += zero8(w.toString(16)); - } - return res; -} -exports.toHex32 = toHex32; - -function zero2(word) { - if (word.length === 1) - return '0' + word; - else - return word; -} -exports.zero2 = zero2; - -function zero8(word) { - if (word.length === 7) - return '0' + word; - else if (word.length === 6) - return '00' + word; - else if (word.length === 5) - return '000' + word; - else if (word.length === 4) - return '0000' + word; - else if (word.length === 3) - return '00000' + word; - else if (word.length === 2) - return '000000' + word; - else if (word.length === 1) - return '0000000' + word; - else - return word; -} -exports.zero8 = zero8; - -function join32(msg, start, end, endian) { - var len = end - start; - assert(len % 4 === 0); - var res = new Array(len / 4); - for (var i = 0, k = start; i < res.length; i++, k += 4) { - var w; - if (endian === 'big') - w = (msg[k] << 24) | (msg[k + 1] << 16) | (msg[k + 2] << 8) | msg[k + 3]; - else - w = (msg[k + 3] << 24) | (msg[k + 2] << 16) | (msg[k + 1] << 8) | msg[k]; - res[i] = w >>> 0; - } - return res; -} -exports.join32 = join32; - -function split32(msg, endian) { - var res = new Array(msg.length * 4); - for (var i = 0, k = 0; i < msg.length; i++, k += 4) { - var m = msg[i]; - if (endian === 'big') { - res[k] = m >>> 24; - res[k + 1] = (m >>> 16) & 0xff; - res[k + 2] = (m >>> 8) & 0xff; - res[k + 3] = m & 0xff; - } else { - res[k + 3] = m >>> 24; - res[k + 2] = (m >>> 16) & 0xff; - res[k + 1] = (m >>> 8) & 0xff; - res[k] = m & 0xff; - } - } - return res; -} -exports.split32 = split32; - -function rotr32(w, b) { - return (w >>> b) | (w << (32 - b)); -} -exports.rotr32 = rotr32; - -function rotl32(w, b) { - return (w << b) | (w >>> (32 - b)); -} -exports.rotl32 = rotl32; - -function sum32(a, b) { - return (a + b) >>> 0; -} -exports.sum32 = sum32; - -function sum32_3(a, b, c) { - return (a + b + c) >>> 0; -} -exports.sum32_3 = sum32_3; - -function sum32_4(a, b, c, d) { - return (a + b + c + d) >>> 0; -} -exports.sum32_4 = sum32_4; - -function sum32_5(a, b, c, d, e) { - return (a + b + c + d + e) >>> 0; -} -exports.sum32_5 = sum32_5; - -function sum64(buf, pos, ah, al) { - var bh = buf[pos]; - var bl = buf[pos + 1]; - - var lo = (al + bl) >>> 0; - var hi = (lo < al ? 1 : 0) + ah + bh; - buf[pos] = hi >>> 0; - buf[pos + 1] = lo; -} -exports.sum64 = sum64; - -function sum64_hi(ah, al, bh, bl) { - var lo = (al + bl) >>> 0; - var hi = (lo < al ? 1 : 0) + ah + bh; - return hi >>> 0; -} -exports.sum64_hi = sum64_hi; - -function sum64_lo(ah, al, bh, bl) { - var lo = al + bl; - return lo >>> 0; -} -exports.sum64_lo = sum64_lo; - -function sum64_4_hi(ah, al, bh, bl, ch, cl, dh, dl) { - var carry = 0; - var lo = al; - lo = (lo + bl) >>> 0; - carry += lo < al ? 1 : 0; - lo = (lo + cl) >>> 0; - carry += lo < cl ? 1 : 0; - lo = (lo + dl) >>> 0; - carry += lo < dl ? 1 : 0; - - var hi = ah + bh + ch + dh + carry; - return hi >>> 0; -} -exports.sum64_4_hi = sum64_4_hi; - -function sum64_4_lo(ah, al, bh, bl, ch, cl, dh, dl) { - var lo = al + bl + cl + dl; - return lo >>> 0; -} -exports.sum64_4_lo = sum64_4_lo; - -function sum64_5_hi(ah, al, bh, bl, ch, cl, dh, dl, eh, el) { - var carry = 0; - var lo = al; - lo = (lo + bl) >>> 0; - carry += lo < al ? 1 : 0; - lo = (lo + cl) >>> 0; - carry += lo < cl ? 1 : 0; - lo = (lo + dl) >>> 0; - carry += lo < dl ? 1 : 0; - lo = (lo + el) >>> 0; - carry += lo < el ? 1 : 0; - - var hi = ah + bh + ch + dh + eh + carry; - return hi >>> 0; -} -exports.sum64_5_hi = sum64_5_hi; - -function sum64_5_lo(ah, al, bh, bl, ch, cl, dh, dl, eh, el) { - var lo = al + bl + cl + dl + el; - - return lo >>> 0; -} -exports.sum64_5_lo = sum64_5_lo; - -function rotr64_hi(ah, al, num) { - var r = (al << (32 - num)) | (ah >>> num); - return r >>> 0; -} -exports.rotr64_hi = rotr64_hi; - -function rotr64_lo(ah, al, num) { - var r = (ah << (32 - num)) | (al >>> num); - return r >>> 0; -} -exports.rotr64_lo = rotr64_lo; - -function shr64_hi(ah, al, num) { - return ah >>> num; -} -exports.shr64_hi = shr64_hi; - -function shr64_lo(ah, al, num) { - var r = (ah << (32 - num)) | (al >>> num); - return r >>> 0; -} -exports.shr64_lo = shr64_lo; - -},{"minimalistic-assert":"MpuC","inherits":"Bm0n"}],"p0gz":[function(require,module,exports) { -'use strict'; - -var utils = require('./utils'); -var assert = require('minimalistic-assert'); - -function BlockHash() { - this.pending = null; - this.pendingTotal = 0; - this.blockSize = this.constructor.blockSize; - this.outSize = this.constructor.outSize; - this.hmacStrength = this.constructor.hmacStrength; - this.padLength = this.constructor.padLength / 8; - this.endian = 'big'; - - this._delta8 = this.blockSize / 8; - this._delta32 = this.blockSize / 32; -} -exports.BlockHash = BlockHash; - -BlockHash.prototype.update = function update(msg, enc) { - // Convert message to array, pad it, and join into 32bit blocks - msg = utils.toArray(msg, enc); - if (!this.pending) - this.pending = msg; - else - this.pending = this.pending.concat(msg); - this.pendingTotal += msg.length; - - // Enough data, try updating - if (this.pending.length >= this._delta8) { - msg = this.pending; - - // Process pending data in blocks - var r = msg.length % this._delta8; - this.pending = msg.slice(msg.length - r, msg.length); - if (this.pending.length === 0) - this.pending = null; - - msg = utils.join32(msg, 0, msg.length - r, this.endian); - for (var i = 0; i < msg.length; i += this._delta32) - this._update(msg, i, i + this._delta32); - } - - return this; -}; - -BlockHash.prototype.digest = function digest(enc) { - this.update(this._pad()); - assert(this.pending === null); - - return this._digest(enc); -}; - -BlockHash.prototype._pad = function pad() { - var len = this.pendingTotal; - var bytes = this._delta8; - var k = bytes - ((len + this.padLength) % bytes); - var res = new Array(k + this.padLength); - res[0] = 0x80; - for (var i = 1; i < k; i++) - res[i] = 0; - - // Append length - len <<= 3; - if (this.endian === 'big') { - for (var t = 8; t < this.padLength; t++) - res[i++] = 0; - - res[i++] = 0; - res[i++] = 0; - res[i++] = 0; - res[i++] = 0; - res[i++] = (len >>> 24) & 0xff; - res[i++] = (len >>> 16) & 0xff; - res[i++] = (len >>> 8) & 0xff; - res[i++] = len & 0xff; - } else { - res[i++] = len & 0xff; - res[i++] = (len >>> 8) & 0xff; - res[i++] = (len >>> 16) & 0xff; - res[i++] = (len >>> 24) & 0xff; - res[i++] = 0; - res[i++] = 0; - res[i++] = 0; - res[i++] = 0; - - for (t = 8; t < this.padLength; t++) - res[i++] = 0; - } - - return res; -}; - -},{"./utils":"eeOV","minimalistic-assert":"MpuC"}],"qR4i":[function(require,module,exports) { -'use strict'; - -var utils = require('../utils'); -var rotr32 = utils.rotr32; - -function ft_1(s, x, y, z) { - if (s === 0) - return ch32(x, y, z); - if (s === 1 || s === 3) - return p32(x, y, z); - if (s === 2) - return maj32(x, y, z); -} -exports.ft_1 = ft_1; - -function ch32(x, y, z) { - return (x & y) ^ ((~x) & z); -} -exports.ch32 = ch32; - -function maj32(x, y, z) { - return (x & y) ^ (x & z) ^ (y & z); -} -exports.maj32 = maj32; - -function p32(x, y, z) { - return x ^ y ^ z; -} -exports.p32 = p32; - -function s0_256(x) { - return rotr32(x, 2) ^ rotr32(x, 13) ^ rotr32(x, 22); -} -exports.s0_256 = s0_256; - -function s1_256(x) { - return rotr32(x, 6) ^ rotr32(x, 11) ^ rotr32(x, 25); -} -exports.s1_256 = s1_256; - -function g0_256(x) { - return rotr32(x, 7) ^ rotr32(x, 18) ^ (x >>> 3); -} -exports.g0_256 = g0_256; - -function g1_256(x) { - return rotr32(x, 17) ^ rotr32(x, 19) ^ (x >>> 10); -} -exports.g1_256 = g1_256; - -},{"../utils":"eeOV"}],"rIEX":[function(require,module,exports) { -'use strict'; - -var utils = require('../utils'); -var common = require('../common'); -var shaCommon = require('./common'); - -var rotl32 = utils.rotl32; -var sum32 = utils.sum32; -var sum32_5 = utils.sum32_5; -var ft_1 = shaCommon.ft_1; -var BlockHash = common.BlockHash; - -var sha1_K = [ - 0x5A827999, 0x6ED9EBA1, - 0x8F1BBCDC, 0xCA62C1D6 -]; - -function SHA1() { - if (!(this instanceof SHA1)) - return new SHA1(); - - BlockHash.call(this); - this.h = [ - 0x67452301, 0xefcdab89, 0x98badcfe, - 0x10325476, 0xc3d2e1f0 ]; - this.W = new Array(80); -} - -utils.inherits(SHA1, BlockHash); -module.exports = SHA1; - -SHA1.blockSize = 512; -SHA1.outSize = 160; -SHA1.hmacStrength = 80; -SHA1.padLength = 64; - -SHA1.prototype._update = function _update(msg, start) { - var W = this.W; - - for (var i = 0; i < 16; i++) - W[i] = msg[start + i]; - - for(; i < W.length; i++) - W[i] = rotl32(W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16], 1); - - var a = this.h[0]; - var b = this.h[1]; - var c = this.h[2]; - var d = this.h[3]; - var e = this.h[4]; - - for (i = 0; i < W.length; i++) { - var s = ~~(i / 20); - var t = sum32_5(rotl32(a, 5), ft_1(s, b, c, d), e, W[i], sha1_K[s]); - e = d; - d = c; - c = rotl32(b, 30); - b = a; - a = t; - } - - this.h[0] = sum32(this.h[0], a); - this.h[1] = sum32(this.h[1], b); - this.h[2] = sum32(this.h[2], c); - this.h[3] = sum32(this.h[3], d); - this.h[4] = sum32(this.h[4], e); -}; - -SHA1.prototype._digest = function digest(enc) { - if (enc === 'hex') - return utils.toHex32(this.h, 'big'); - else - return utils.split32(this.h, 'big'); -}; - -},{"../utils":"eeOV","../common":"p0gz","./common":"qR4i"}],"iJWs":[function(require,module,exports) { -'use strict'; - -var utils = require('../utils'); -var common = require('../common'); -var shaCommon = require('./common'); -var assert = require('minimalistic-assert'); - -var sum32 = utils.sum32; -var sum32_4 = utils.sum32_4; -var sum32_5 = utils.sum32_5; -var ch32 = shaCommon.ch32; -var maj32 = shaCommon.maj32; -var s0_256 = shaCommon.s0_256; -var s1_256 = shaCommon.s1_256; -var g0_256 = shaCommon.g0_256; -var g1_256 = shaCommon.g1_256; - -var BlockHash = common.BlockHash; - -var sha256_K = [ - 0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5, - 0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5, - 0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3, - 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174, - 0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc, - 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da, - 0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7, - 0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967, - 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13, - 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85, - 0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3, - 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070, - 0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5, - 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3, - 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208, - 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2 -]; - -function SHA256() { - if (!(this instanceof SHA256)) - return new SHA256(); - - BlockHash.call(this); - this.h = [ - 0x6a09e667, 0xbb67ae85, 0x3c6ef372, 0xa54ff53a, - 0x510e527f, 0x9b05688c, 0x1f83d9ab, 0x5be0cd19 - ]; - this.k = sha256_K; - this.W = new Array(64); -} -utils.inherits(SHA256, BlockHash); -module.exports = SHA256; - -SHA256.blockSize = 512; -SHA256.outSize = 256; -SHA256.hmacStrength = 192; -SHA256.padLength = 64; - -SHA256.prototype._update = function _update(msg, start) { - var W = this.W; - - for (var i = 0; i < 16; i++) - W[i] = msg[start + i]; - for (; i < W.length; i++) - W[i] = sum32_4(g1_256(W[i - 2]), W[i - 7], g0_256(W[i - 15]), W[i - 16]); - - var a = this.h[0]; - var b = this.h[1]; - var c = this.h[2]; - var d = this.h[3]; - var e = this.h[4]; - var f = this.h[5]; - var g = this.h[6]; - var h = this.h[7]; - - assert(this.k.length === W.length); - for (i = 0; i < W.length; i++) { - var T1 = sum32_5(h, s1_256(e), ch32(e, f, g), this.k[i], W[i]); - var T2 = sum32(s0_256(a), maj32(a, b, c)); - h = g; - g = f; - f = e; - e = sum32(d, T1); - d = c; - c = b; - b = a; - a = sum32(T1, T2); - } - - this.h[0] = sum32(this.h[0], a); - this.h[1] = sum32(this.h[1], b); - this.h[2] = sum32(this.h[2], c); - this.h[3] = sum32(this.h[3], d); - this.h[4] = sum32(this.h[4], e); - this.h[5] = sum32(this.h[5], f); - this.h[6] = sum32(this.h[6], g); - this.h[7] = sum32(this.h[7], h); -}; - -SHA256.prototype._digest = function digest(enc) { - if (enc === 'hex') - return utils.toHex32(this.h, 'big'); - else - return utils.split32(this.h, 'big'); -}; - -},{"../utils":"eeOV","../common":"p0gz","./common":"qR4i","minimalistic-assert":"MpuC"}],"NwVK":[function(require,module,exports) { -'use strict'; - -var utils = require('../utils'); -var SHA256 = require('./256'); - -function SHA224() { - if (!(this instanceof SHA224)) - return new SHA224(); - - SHA256.call(this); - this.h = [ - 0xc1059ed8, 0x367cd507, 0x3070dd17, 0xf70e5939, - 0xffc00b31, 0x68581511, 0x64f98fa7, 0xbefa4fa4 ]; -} -utils.inherits(SHA224, SHA256); -module.exports = SHA224; - -SHA224.blockSize = 512; -SHA224.outSize = 224; -SHA224.hmacStrength = 192; -SHA224.padLength = 64; - -SHA224.prototype._digest = function digest(enc) { - // Just truncate output - if (enc === 'hex') - return utils.toHex32(this.h.slice(0, 7), 'big'); - else - return utils.split32(this.h.slice(0, 7), 'big'); -}; - - -},{"../utils":"eeOV","./256":"iJWs"}],"CY40":[function(require,module,exports) { -'use strict'; - -var utils = require('../utils'); -var common = require('../common'); -var assert = require('minimalistic-assert'); - -var rotr64_hi = utils.rotr64_hi; -var rotr64_lo = utils.rotr64_lo; -var shr64_hi = utils.shr64_hi; -var shr64_lo = utils.shr64_lo; -var sum64 = utils.sum64; -var sum64_hi = utils.sum64_hi; -var sum64_lo = utils.sum64_lo; -var sum64_4_hi = utils.sum64_4_hi; -var sum64_4_lo = utils.sum64_4_lo; -var sum64_5_hi = utils.sum64_5_hi; -var sum64_5_lo = utils.sum64_5_lo; - -var BlockHash = common.BlockHash; - -var sha512_K = [ - 0x428a2f98, 0xd728ae22, 0x71374491, 0x23ef65cd, - 0xb5c0fbcf, 0xec4d3b2f, 0xe9b5dba5, 0x8189dbbc, - 0x3956c25b, 0xf348b538, 0x59f111f1, 0xb605d019, - 0x923f82a4, 0xaf194f9b, 0xab1c5ed5, 0xda6d8118, - 0xd807aa98, 0xa3030242, 0x12835b01, 0x45706fbe, - 0x243185be, 0x4ee4b28c, 0x550c7dc3, 0xd5ffb4e2, - 0x72be5d74, 0xf27b896f, 0x80deb1fe, 0x3b1696b1, - 0x9bdc06a7, 0x25c71235, 0xc19bf174, 0xcf692694, - 0xe49b69c1, 0x9ef14ad2, 0xefbe4786, 0x384f25e3, - 0x0fc19dc6, 0x8b8cd5b5, 0x240ca1cc, 0x77ac9c65, - 0x2de92c6f, 0x592b0275, 0x4a7484aa, 0x6ea6e483, - 0x5cb0a9dc, 0xbd41fbd4, 0x76f988da, 0x831153b5, - 0x983e5152, 0xee66dfab, 0xa831c66d, 0x2db43210, - 0xb00327c8, 0x98fb213f, 0xbf597fc7, 0xbeef0ee4, - 0xc6e00bf3, 0x3da88fc2, 0xd5a79147, 0x930aa725, - 0x06ca6351, 0xe003826f, 0x14292967, 0x0a0e6e70, - 0x27b70a85, 0x46d22ffc, 0x2e1b2138, 0x5c26c926, - 0x4d2c6dfc, 0x5ac42aed, 0x53380d13, 0x9d95b3df, - 0x650a7354, 0x8baf63de, 0x766a0abb, 0x3c77b2a8, - 0x81c2c92e, 0x47edaee6, 0x92722c85, 0x1482353b, - 0xa2bfe8a1, 0x4cf10364, 0xa81a664b, 0xbc423001, - 0xc24b8b70, 0xd0f89791, 0xc76c51a3, 0x0654be30, - 0xd192e819, 0xd6ef5218, 0xd6990624, 0x5565a910, - 0xf40e3585, 0x5771202a, 0x106aa070, 0x32bbd1b8, - 0x19a4c116, 0xb8d2d0c8, 0x1e376c08, 0x5141ab53, - 0x2748774c, 0xdf8eeb99, 0x34b0bcb5, 0xe19b48a8, - 0x391c0cb3, 0xc5c95a63, 0x4ed8aa4a, 0xe3418acb, - 0x5b9cca4f, 0x7763e373, 0x682e6ff3, 0xd6b2b8a3, - 0x748f82ee, 0x5defb2fc, 0x78a5636f, 0x43172f60, - 0x84c87814, 0xa1f0ab72, 0x8cc70208, 0x1a6439ec, - 0x90befffa, 0x23631e28, 0xa4506ceb, 0xde82bde9, - 0xbef9a3f7, 0xb2c67915, 0xc67178f2, 0xe372532b, - 0xca273ece, 0xea26619c, 0xd186b8c7, 0x21c0c207, - 0xeada7dd6, 0xcde0eb1e, 0xf57d4f7f, 0xee6ed178, - 0x06f067aa, 0x72176fba, 0x0a637dc5, 0xa2c898a6, - 0x113f9804, 0xbef90dae, 0x1b710b35, 0x131c471b, - 0x28db77f5, 0x23047d84, 0x32caab7b, 0x40c72493, - 0x3c9ebe0a, 0x15c9bebc, 0x431d67c4, 0x9c100d4c, - 0x4cc5d4be, 0xcb3e42b6, 0x597f299c, 0xfc657e2a, - 0x5fcb6fab, 0x3ad6faec, 0x6c44198c, 0x4a475817 -]; - -function SHA512() { - if (!(this instanceof SHA512)) - return new SHA512(); - - BlockHash.call(this); - this.h = [ - 0x6a09e667, 0xf3bcc908, - 0xbb67ae85, 0x84caa73b, - 0x3c6ef372, 0xfe94f82b, - 0xa54ff53a, 0x5f1d36f1, - 0x510e527f, 0xade682d1, - 0x9b05688c, 0x2b3e6c1f, - 0x1f83d9ab, 0xfb41bd6b, - 0x5be0cd19, 0x137e2179 ]; - this.k = sha512_K; - this.W = new Array(160); -} -utils.inherits(SHA512, BlockHash); -module.exports = SHA512; - -SHA512.blockSize = 1024; -SHA512.outSize = 512; -SHA512.hmacStrength = 192; -SHA512.padLength = 128; - -SHA512.prototype._prepareBlock = function _prepareBlock(msg, start) { - var W = this.W; - - // 32 x 32bit words - for (var i = 0; i < 32; i++) - W[i] = msg[start + i]; - for (; i < W.length; i += 2) { - var c0_hi = g1_512_hi(W[i - 4], W[i - 3]); // i - 2 - var c0_lo = g1_512_lo(W[i - 4], W[i - 3]); - var c1_hi = W[i - 14]; // i - 7 - var c1_lo = W[i - 13]; - var c2_hi = g0_512_hi(W[i - 30], W[i - 29]); // i - 15 - var c2_lo = g0_512_lo(W[i - 30], W[i - 29]); - var c3_hi = W[i - 32]; // i - 16 - var c3_lo = W[i - 31]; - - W[i] = sum64_4_hi( - c0_hi, c0_lo, - c1_hi, c1_lo, - c2_hi, c2_lo, - c3_hi, c3_lo); - W[i + 1] = sum64_4_lo( - c0_hi, c0_lo, - c1_hi, c1_lo, - c2_hi, c2_lo, - c3_hi, c3_lo); - } -}; - -SHA512.prototype._update = function _update(msg, start) { - this._prepareBlock(msg, start); - - var W = this.W; - - var ah = this.h[0]; - var al = this.h[1]; - var bh = this.h[2]; - var bl = this.h[3]; - var ch = this.h[4]; - var cl = this.h[5]; - var dh = this.h[6]; - var dl = this.h[7]; - var eh = this.h[8]; - var el = this.h[9]; - var fh = this.h[10]; - var fl = this.h[11]; - var gh = this.h[12]; - var gl = this.h[13]; - var hh = this.h[14]; - var hl = this.h[15]; - - assert(this.k.length === W.length); - for (var i = 0; i < W.length; i += 2) { - var c0_hi = hh; - var c0_lo = hl; - var c1_hi = s1_512_hi(eh, el); - var c1_lo = s1_512_lo(eh, el); - var c2_hi = ch64_hi(eh, el, fh, fl, gh, gl); - var c2_lo = ch64_lo(eh, el, fh, fl, gh, gl); - var c3_hi = this.k[i]; - var c3_lo = this.k[i + 1]; - var c4_hi = W[i]; - var c4_lo = W[i + 1]; - - var T1_hi = sum64_5_hi( - c0_hi, c0_lo, - c1_hi, c1_lo, - c2_hi, c2_lo, - c3_hi, c3_lo, - c4_hi, c4_lo); - var T1_lo = sum64_5_lo( - c0_hi, c0_lo, - c1_hi, c1_lo, - c2_hi, c2_lo, - c3_hi, c3_lo, - c4_hi, c4_lo); - - c0_hi = s0_512_hi(ah, al); - c0_lo = s0_512_lo(ah, al); - c1_hi = maj64_hi(ah, al, bh, bl, ch, cl); - c1_lo = maj64_lo(ah, al, bh, bl, ch, cl); - - var T2_hi = sum64_hi(c0_hi, c0_lo, c1_hi, c1_lo); - var T2_lo = sum64_lo(c0_hi, c0_lo, c1_hi, c1_lo); - - hh = gh; - hl = gl; - - gh = fh; - gl = fl; - - fh = eh; - fl = el; - - eh = sum64_hi(dh, dl, T1_hi, T1_lo); - el = sum64_lo(dl, dl, T1_hi, T1_lo); - - dh = ch; - dl = cl; - - ch = bh; - cl = bl; - - bh = ah; - bl = al; - - ah = sum64_hi(T1_hi, T1_lo, T2_hi, T2_lo); - al = sum64_lo(T1_hi, T1_lo, T2_hi, T2_lo); - } - - sum64(this.h, 0, ah, al); - sum64(this.h, 2, bh, bl); - sum64(this.h, 4, ch, cl); - sum64(this.h, 6, dh, dl); - sum64(this.h, 8, eh, el); - sum64(this.h, 10, fh, fl); - sum64(this.h, 12, gh, gl); - sum64(this.h, 14, hh, hl); -}; - -SHA512.prototype._digest = function digest(enc) { - if (enc === 'hex') - return utils.toHex32(this.h, 'big'); - else - return utils.split32(this.h, 'big'); -}; - -function ch64_hi(xh, xl, yh, yl, zh) { - var r = (xh & yh) ^ ((~xh) & zh); - if (r < 0) - r += 0x100000000; - return r; -} - -function ch64_lo(xh, xl, yh, yl, zh, zl) { - var r = (xl & yl) ^ ((~xl) & zl); - if (r < 0) - r += 0x100000000; - return r; -} - -function maj64_hi(xh, xl, yh, yl, zh) { - var r = (xh & yh) ^ (xh & zh) ^ (yh & zh); - if (r < 0) - r += 0x100000000; - return r; -} - -function maj64_lo(xh, xl, yh, yl, zh, zl) { - var r = (xl & yl) ^ (xl & zl) ^ (yl & zl); - if (r < 0) - r += 0x100000000; - return r; -} - -function s0_512_hi(xh, xl) { - var c0_hi = rotr64_hi(xh, xl, 28); - var c1_hi = rotr64_hi(xl, xh, 2); // 34 - var c2_hi = rotr64_hi(xl, xh, 7); // 39 - - var r = c0_hi ^ c1_hi ^ c2_hi; - if (r < 0) - r += 0x100000000; - return r; -} - -function s0_512_lo(xh, xl) { - var c0_lo = rotr64_lo(xh, xl, 28); - var c1_lo = rotr64_lo(xl, xh, 2); // 34 - var c2_lo = rotr64_lo(xl, xh, 7); // 39 - - var r = c0_lo ^ c1_lo ^ c2_lo; - if (r < 0) - r += 0x100000000; - return r; -} - -function s1_512_hi(xh, xl) { - var c0_hi = rotr64_hi(xh, xl, 14); - var c1_hi = rotr64_hi(xh, xl, 18); - var c2_hi = rotr64_hi(xl, xh, 9); // 41 - - var r = c0_hi ^ c1_hi ^ c2_hi; - if (r < 0) - r += 0x100000000; - return r; -} - -function s1_512_lo(xh, xl) { - var c0_lo = rotr64_lo(xh, xl, 14); - var c1_lo = rotr64_lo(xh, xl, 18); - var c2_lo = rotr64_lo(xl, xh, 9); // 41 - - var r = c0_lo ^ c1_lo ^ c2_lo; - if (r < 0) - r += 0x100000000; - return r; -} - -function g0_512_hi(xh, xl) { - var c0_hi = rotr64_hi(xh, xl, 1); - var c1_hi = rotr64_hi(xh, xl, 8); - var c2_hi = shr64_hi(xh, xl, 7); - - var r = c0_hi ^ c1_hi ^ c2_hi; - if (r < 0) - r += 0x100000000; - return r; -} - -function g0_512_lo(xh, xl) { - var c0_lo = rotr64_lo(xh, xl, 1); - var c1_lo = rotr64_lo(xh, xl, 8); - var c2_lo = shr64_lo(xh, xl, 7); - - var r = c0_lo ^ c1_lo ^ c2_lo; - if (r < 0) - r += 0x100000000; - return r; -} - -function g1_512_hi(xh, xl) { - var c0_hi = rotr64_hi(xh, xl, 19); - var c1_hi = rotr64_hi(xl, xh, 29); // 61 - var c2_hi = shr64_hi(xh, xl, 6); - - var r = c0_hi ^ c1_hi ^ c2_hi; - if (r < 0) - r += 0x100000000; - return r; -} - -function g1_512_lo(xh, xl) { - var c0_lo = rotr64_lo(xh, xl, 19); - var c1_lo = rotr64_lo(xl, xh, 29); // 61 - var c2_lo = shr64_lo(xh, xl, 6); - - var r = c0_lo ^ c1_lo ^ c2_lo; - if (r < 0) - r += 0x100000000; - return r; -} - -},{"../utils":"eeOV","../common":"p0gz","minimalistic-assert":"MpuC"}],"sAVb":[function(require,module,exports) { -'use strict'; - -var utils = require('../utils'); - -var SHA512 = require('./512'); - -function SHA384() { - if (!(this instanceof SHA384)) - return new SHA384(); - - SHA512.call(this); - this.h = [ - 0xcbbb9d5d, 0xc1059ed8, - 0x629a292a, 0x367cd507, - 0x9159015a, 0x3070dd17, - 0x152fecd8, 0xf70e5939, - 0x67332667, 0xffc00b31, - 0x8eb44a87, 0x68581511, - 0xdb0c2e0d, 0x64f98fa7, - 0x47b5481d, 0xbefa4fa4 ]; -} -utils.inherits(SHA384, SHA512); -module.exports = SHA384; - -SHA384.blockSize = 1024; -SHA384.outSize = 384; -SHA384.hmacStrength = 192; -SHA384.padLength = 128; - -SHA384.prototype._digest = function digest(enc) { - if (enc === 'hex') - return utils.toHex32(this.h.slice(0, 12), 'big'); - else - return utils.split32(this.h.slice(0, 12), 'big'); -}; - -},{"../utils":"eeOV","./512":"CY40"}],"BhcK":[function(require,module,exports) { -'use strict'; - -exports.sha1 = require('./sha/1'); -exports.sha224 = require('./sha/224'); -exports.sha256 = require('./sha/256'); -exports.sha384 = require('./sha/384'); -exports.sha512 = require('./sha/512'); - -},{"./sha/1":"rIEX","./sha/224":"NwVK","./sha/256":"iJWs","./sha/384":"sAVb","./sha/512":"CY40"}],"tE3w":[function(require,module,exports) { -'use strict'; - -var utils = require('./utils'); -var common = require('./common'); - -var rotl32 = utils.rotl32; -var sum32 = utils.sum32; -var sum32_3 = utils.sum32_3; -var sum32_4 = utils.sum32_4; -var BlockHash = common.BlockHash; - -function RIPEMD160() { - if (!(this instanceof RIPEMD160)) - return new RIPEMD160(); - - BlockHash.call(this); - - this.h = [ 0x67452301, 0xefcdab89, 0x98badcfe, 0x10325476, 0xc3d2e1f0 ]; - this.endian = 'little'; -} -utils.inherits(RIPEMD160, BlockHash); -exports.ripemd160 = RIPEMD160; - -RIPEMD160.blockSize = 512; -RIPEMD160.outSize = 160; -RIPEMD160.hmacStrength = 192; -RIPEMD160.padLength = 64; - -RIPEMD160.prototype._update = function update(msg, start) { - var A = this.h[0]; - var B = this.h[1]; - var C = this.h[2]; - var D = this.h[3]; - var E = this.h[4]; - var Ah = A; - var Bh = B; - var Ch = C; - var Dh = D; - var Eh = E; - for (var j = 0; j < 80; j++) { - var T = sum32( - rotl32( - sum32_4(A, f(j, B, C, D), msg[r[j] + start], K(j)), - s[j]), - E); - A = E; - E = D; - D = rotl32(C, 10); - C = B; - B = T; - T = sum32( - rotl32( - sum32_4(Ah, f(79 - j, Bh, Ch, Dh), msg[rh[j] + start], Kh(j)), - sh[j]), - Eh); - Ah = Eh; - Eh = Dh; - Dh = rotl32(Ch, 10); - Ch = Bh; - Bh = T; - } - T = sum32_3(this.h[1], C, Dh); - this.h[1] = sum32_3(this.h[2], D, Eh); - this.h[2] = sum32_3(this.h[3], E, Ah); - this.h[3] = sum32_3(this.h[4], A, Bh); - this.h[4] = sum32_3(this.h[0], B, Ch); - this.h[0] = T; -}; - -RIPEMD160.prototype._digest = function digest(enc) { - if (enc === 'hex') - return utils.toHex32(this.h, 'little'); - else - return utils.split32(this.h, 'little'); -}; - -function f(j, x, y, z) { - if (j <= 15) - return x ^ y ^ z; - else if (j <= 31) - return (x & y) | ((~x) & z); - else if (j <= 47) - return (x | (~y)) ^ z; - else if (j <= 63) - return (x & z) | (y & (~z)); - else - return x ^ (y | (~z)); -} - -function K(j) { - if (j <= 15) - return 0x00000000; - else if (j <= 31) - return 0x5a827999; - else if (j <= 47) - return 0x6ed9eba1; - else if (j <= 63) - return 0x8f1bbcdc; - else - return 0xa953fd4e; -} - -function Kh(j) { - if (j <= 15) - return 0x50a28be6; - else if (j <= 31) - return 0x5c4dd124; - else if (j <= 47) - return 0x6d703ef3; - else if (j <= 63) - return 0x7a6d76e9; - else - return 0x00000000; -} - -var r = [ - 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, - 7, 4, 13, 1, 10, 6, 15, 3, 12, 0, 9, 5, 2, 14, 11, 8, - 3, 10, 14, 4, 9, 15, 8, 1, 2, 7, 0, 6, 13, 11, 5, 12, - 1, 9, 11, 10, 0, 8, 12, 4, 13, 3, 7, 15, 14, 5, 6, 2, - 4, 0, 5, 9, 7, 12, 2, 10, 14, 1, 3, 8, 11, 6, 15, 13 -]; - -var rh = [ - 5, 14, 7, 0, 9, 2, 11, 4, 13, 6, 15, 8, 1, 10, 3, 12, - 6, 11, 3, 7, 0, 13, 5, 10, 14, 15, 8, 12, 4, 9, 1, 2, - 15, 5, 1, 3, 7, 14, 6, 9, 11, 8, 12, 2, 10, 0, 4, 13, - 8, 6, 4, 1, 3, 11, 15, 0, 5, 12, 2, 13, 9, 7, 10, 14, - 12, 15, 10, 4, 1, 5, 8, 7, 6, 2, 13, 14, 0, 3, 9, 11 -]; - -var s = [ - 11, 14, 15, 12, 5, 8, 7, 9, 11, 13, 14, 15, 6, 7, 9, 8, - 7, 6, 8, 13, 11, 9, 7, 15, 7, 12, 15, 9, 11, 7, 13, 12, - 11, 13, 6, 7, 14, 9, 13, 15, 14, 8, 13, 6, 5, 12, 7, 5, - 11, 12, 14, 15, 14, 15, 9, 8, 9, 14, 5, 6, 8, 6, 5, 12, - 9, 15, 5, 11, 6, 8, 13, 12, 5, 12, 13, 14, 11, 8, 5, 6 -]; - -var sh = [ - 8, 9, 9, 11, 13, 15, 15, 5, 7, 7, 8, 11, 14, 14, 12, 6, - 9, 13, 15, 7, 12, 8, 9, 11, 7, 7, 12, 7, 6, 15, 13, 11, - 9, 7, 15, 11, 8, 6, 6, 14, 12, 13, 5, 14, 13, 13, 7, 5, - 15, 5, 8, 11, 14, 14, 6, 14, 6, 9, 12, 9, 12, 5, 15, 8, - 8, 5, 12, 9, 12, 5, 14, 6, 8, 13, 6, 5, 15, 13, 11, 11 -]; - -},{"./utils":"eeOV","./common":"p0gz"}],"AA3E":[function(require,module,exports) { -'use strict'; - -var utils = require('./utils'); -var assert = require('minimalistic-assert'); - -function Hmac(hash, key, enc) { - if (!(this instanceof Hmac)) - return new Hmac(hash, key, enc); - this.Hash = hash; - this.blockSize = hash.blockSize / 8; - this.outSize = hash.outSize / 8; - this.inner = null; - this.outer = null; - - this._init(utils.toArray(key, enc)); -} -module.exports = Hmac; - -Hmac.prototype._init = function init(key) { - // Shorten key, if needed - if (key.length > this.blockSize) - key = new this.Hash().update(key).digest(); - assert(key.length <= this.blockSize); - - // Add padding to key - for (var i = key.length; i < this.blockSize; i++) - key.push(0); - - for (i = 0; i < key.length; i++) - key[i] ^= 0x36; - this.inner = new this.Hash().update(key); - - // 0x36 ^ 0x5c = 0x6a - for (i = 0; i < key.length; i++) - key[i] ^= 0x6a; - this.outer = new this.Hash().update(key); -}; - -Hmac.prototype.update = function update(msg, enc) { - this.inner.update(msg, enc); - return this; -}; - -Hmac.prototype.digest = function digest(enc) { - this.outer.update(this.inner.digest()); - return this.outer.digest(enc); -}; - -},{"./utils":"eeOV","minimalistic-assert":"MpuC"}],"fVGI":[function(require,module,exports) { -var hash = exports; - -hash.utils = require('./hash/utils'); -hash.common = require('./hash/common'); -hash.sha = require('./hash/sha'); -hash.ripemd = require('./hash/ripemd'); -hash.hmac = require('./hash/hmac'); - -// Proxy hash functions to the main object -hash.sha1 = hash.sha.sha1; -hash.sha256 = hash.sha.sha256; -hash.sha224 = hash.sha.sha224; -hash.sha384 = hash.sha.sha384; -hash.sha512 = hash.sha.sha512; -hash.ripemd160 = hash.ripemd.ripemd160; - -},{"./hash/utils":"eeOV","./hash/common":"p0gz","./hash/sha":"BhcK","./hash/ripemd":"tE3w","./hash/hmac":"AA3E"}],"khx4":[function(require,module,exports) { -module.exports = { - doubles: { - step: 4, - points: [ - [ - 'e60fce93b59e9ec53011aabc21c23e97b2a31369b87a5ae9c44ee89e2a6dec0a', - 'f7e3507399e595929db99f34f57937101296891e44d23f0be1f32cce69616821' - ], - [ - '8282263212c609d9ea2a6e3e172de238d8c39cabd5ac1ca10646e23fd5f51508', - '11f8a8098557dfe45e8256e830b60ace62d613ac2f7b17bed31b6eaff6e26caf' - ], - [ - '175e159f728b865a72f99cc6c6fc846de0b93833fd2222ed73fce5b551e5b739', - 'd3506e0d9e3c79eba4ef97a51ff71f5eacb5955add24345c6efa6ffee9fed695' - ], - [ - '363d90d447b00c9c99ceac05b6262ee053441c7e55552ffe526bad8f83ff4640', - '4e273adfc732221953b445397f3363145b9a89008199ecb62003c7f3bee9de9' - ], - [ - '8b4b5f165df3c2be8c6244b5b745638843e4a781a15bcd1b69f79a55dffdf80c', - '4aad0a6f68d308b4b3fbd7813ab0da04f9e336546162ee56b3eff0c65fd4fd36' - ], - [ - '723cbaa6e5db996d6bf771c00bd548c7b700dbffa6c0e77bcb6115925232fcda', - '96e867b5595cc498a921137488824d6e2660a0653779494801dc069d9eb39f5f' - ], - [ - 'eebfa4d493bebf98ba5feec812c2d3b50947961237a919839a533eca0e7dd7fa', - '5d9a8ca3970ef0f269ee7edaf178089d9ae4cdc3a711f712ddfd4fdae1de8999' - ], - [ - '100f44da696e71672791d0a09b7bde459f1215a29b3c03bfefd7835b39a48db0', - 'cdd9e13192a00b772ec8f3300c090666b7ff4a18ff5195ac0fbd5cd62bc65a09' - ], - [ - 'e1031be262c7ed1b1dc9227a4a04c017a77f8d4464f3b3852c8acde6e534fd2d', - '9d7061928940405e6bb6a4176597535af292dd419e1ced79a44f18f29456a00d' - ], - [ - 'feea6cae46d55b530ac2839f143bd7ec5cf8b266a41d6af52d5e688d9094696d', - 'e57c6b6c97dce1bab06e4e12bf3ecd5c981c8957cc41442d3155debf18090088' - ], - [ - 'da67a91d91049cdcb367be4be6ffca3cfeed657d808583de33fa978bc1ec6cb1', - '9bacaa35481642bc41f463f7ec9780e5dec7adc508f740a17e9ea8e27a68be1d' - ], - [ - '53904faa0b334cdda6e000935ef22151ec08d0f7bb11069f57545ccc1a37b7c0', - '5bc087d0bc80106d88c9eccac20d3c1c13999981e14434699dcb096b022771c8' - ], - [ - '8e7bcd0bd35983a7719cca7764ca906779b53a043a9b8bcaeff959f43ad86047', - '10b7770b2a3da4b3940310420ca9514579e88e2e47fd68b3ea10047e8460372a' - ], - [ - '385eed34c1cdff21e6d0818689b81bde71a7f4f18397e6690a841e1599c43862', - '283bebc3e8ea23f56701de19e9ebf4576b304eec2086dc8cc0458fe5542e5453' - ], - [ - '6f9d9b803ecf191637c73a4413dfa180fddf84a5947fbc9c606ed86c3fac3a7', - '7c80c68e603059ba69b8e2a30e45c4d47ea4dd2f5c281002d86890603a842160' - ], - [ - '3322d401243c4e2582a2147c104d6ecbf774d163db0f5e5313b7e0e742d0e6bd', - '56e70797e9664ef5bfb019bc4ddaf9b72805f63ea2873af624f3a2e96c28b2a0' - ], - [ - '85672c7d2de0b7da2bd1770d89665868741b3f9af7643397721d74d28134ab83', - '7c481b9b5b43b2eb6374049bfa62c2e5e77f17fcc5298f44c8e3094f790313a6' - ], - [ - '948bf809b1988a46b06c9f1919413b10f9226c60f668832ffd959af60c82a0a', - '53a562856dcb6646dc6b74c5d1c3418c6d4dff08c97cd2bed4cb7f88d8c8e589' - ], - [ - '6260ce7f461801c34f067ce0f02873a8f1b0e44dfc69752accecd819f38fd8e8', - 'bc2da82b6fa5b571a7f09049776a1ef7ecd292238051c198c1a84e95b2b4ae17' - ], - [ - 'e5037de0afc1d8d43d8348414bbf4103043ec8f575bfdc432953cc8d2037fa2d', - '4571534baa94d3b5f9f98d09fb990bddbd5f5b03ec481f10e0e5dc841d755bda' - ], - [ - 'e06372b0f4a207adf5ea905e8f1771b4e7e8dbd1c6a6c5b725866a0ae4fce725', - '7a908974bce18cfe12a27bb2ad5a488cd7484a7787104870b27034f94eee31dd' - ], - [ - '213c7a715cd5d45358d0bbf9dc0ce02204b10bdde2a3f58540ad6908d0559754', - '4b6dad0b5ae462507013ad06245ba190bb4850f5f36a7eeddff2c27534b458f2' - ], - [ - '4e7c272a7af4b34e8dbb9352a5419a87e2838c70adc62cddf0cc3a3b08fbd53c', - '17749c766c9d0b18e16fd09f6def681b530b9614bff7dd33e0b3941817dcaae6' - ], - [ - 'fea74e3dbe778b1b10f238ad61686aa5c76e3db2be43057632427e2840fb27b6', - '6e0568db9b0b13297cf674deccb6af93126b596b973f7b77701d3db7f23cb96f' - ], - [ - '76e64113f677cf0e10a2570d599968d31544e179b760432952c02a4417bdde39', - 'c90ddf8dee4e95cf577066d70681f0d35e2a33d2b56d2032b4b1752d1901ac01' - ], - [ - 'c738c56b03b2abe1e8281baa743f8f9a8f7cc643df26cbee3ab150242bcbb891', - '893fb578951ad2537f718f2eacbfbbbb82314eef7880cfe917e735d9699a84c3' - ], - [ - 'd895626548b65b81e264c7637c972877d1d72e5f3a925014372e9f6588f6c14b', - 'febfaa38f2bc7eae728ec60818c340eb03428d632bb067e179363ed75d7d991f' - ], - [ - 'b8da94032a957518eb0f6433571e8761ceffc73693e84edd49150a564f676e03', - '2804dfa44805a1e4d7c99cc9762808b092cc584d95ff3b511488e4e74efdf6e7' - ], - [ - 'e80fea14441fb33a7d8adab9475d7fab2019effb5156a792f1a11778e3c0df5d', - 'eed1de7f638e00771e89768ca3ca94472d155e80af322ea9fcb4291b6ac9ec78' - ], - [ - 'a301697bdfcd704313ba48e51d567543f2a182031efd6915ddc07bbcc4e16070', - '7370f91cfb67e4f5081809fa25d40f9b1735dbf7c0a11a130c0d1a041e177ea1' - ], - [ - '90ad85b389d6b936463f9d0512678de208cc330b11307fffab7ac63e3fb04ed4', - 'e507a3620a38261affdcbd9427222b839aefabe1582894d991d4d48cb6ef150' - ], - [ - '8f68b9d2f63b5f339239c1ad981f162ee88c5678723ea3351b7b444c9ec4c0da', - '662a9f2dba063986de1d90c2b6be215dbbea2cfe95510bfdf23cbf79501fff82' - ], - [ - 'e4f3fb0176af85d65ff99ff9198c36091f48e86503681e3e6686fd5053231e11', - '1e63633ad0ef4f1c1661a6d0ea02b7286cc7e74ec951d1c9822c38576feb73bc' - ], - [ - '8c00fa9b18ebf331eb961537a45a4266c7034f2f0d4e1d0716fb6eae20eae29e', - 'efa47267fea521a1a9dc343a3736c974c2fadafa81e36c54e7d2a4c66702414b' - ], - [ - 'e7a26ce69dd4829f3e10cec0a9e98ed3143d084f308b92c0997fddfc60cb3e41', - '2a758e300fa7984b471b006a1aafbb18d0a6b2c0420e83e20e8a9421cf2cfd51' - ], - [ - 'b6459e0ee3662ec8d23540c223bcbdc571cbcb967d79424f3cf29eb3de6b80ef', - '67c876d06f3e06de1dadf16e5661db3c4b3ae6d48e35b2ff30bf0b61a71ba45' - ], - [ - 'd68a80c8280bb840793234aa118f06231d6f1fc67e73c5a5deda0f5b496943e8', - 'db8ba9fff4b586d00c4b1f9177b0e28b5b0e7b8f7845295a294c84266b133120' - ], - [ - '324aed7df65c804252dc0270907a30b09612aeb973449cea4095980fc28d3d5d', - '648a365774b61f2ff130c0c35aec1f4f19213b0c7e332843967224af96ab7c84' - ], - [ - '4df9c14919cde61f6d51dfdbe5fee5dceec4143ba8d1ca888e8bd373fd054c96', - '35ec51092d8728050974c23a1d85d4b5d506cdc288490192ebac06cad10d5d' - ], - [ - '9c3919a84a474870faed8a9c1cc66021523489054d7f0308cbfc99c8ac1f98cd', - 'ddb84f0f4a4ddd57584f044bf260e641905326f76c64c8e6be7e5e03d4fc599d' - ], - [ - '6057170b1dd12fdf8de05f281d8e06bb91e1493a8b91d4cc5a21382120a959e5', - '9a1af0b26a6a4807add9a2daf71df262465152bc3ee24c65e899be932385a2a8' - ], - [ - 'a576df8e23a08411421439a4518da31880cef0fba7d4df12b1a6973eecb94266', - '40a6bf20e76640b2c92b97afe58cd82c432e10a7f514d9f3ee8be11ae1b28ec8' - ], - [ - '7778a78c28dec3e30a05fe9629de8c38bb30d1f5cf9a3a208f763889be58ad71', - '34626d9ab5a5b22ff7098e12f2ff580087b38411ff24ac563b513fc1fd9f43ac' - ], - [ - '928955ee637a84463729fd30e7afd2ed5f96274e5ad7e5cb09eda9c06d903ac', - 'c25621003d3f42a827b78a13093a95eeac3d26efa8a8d83fc5180e935bcd091f' - ], - [ - '85d0fef3ec6db109399064f3a0e3b2855645b4a907ad354527aae75163d82751', - '1f03648413a38c0be29d496e582cf5663e8751e96877331582c237a24eb1f962' - ], - [ - 'ff2b0dce97eece97c1c9b6041798b85dfdfb6d8882da20308f5404824526087e', - '493d13fef524ba188af4c4dc54d07936c7b7ed6fb90e2ceb2c951e01f0c29907' - ], - [ - '827fbbe4b1e880ea9ed2b2e6301b212b57f1ee148cd6dd28780e5e2cf856e241', - 'c60f9c923c727b0b71bef2c67d1d12687ff7a63186903166d605b68baec293ec' - ], - [ - 'eaa649f21f51bdbae7be4ae34ce6e5217a58fdce7f47f9aa7f3b58fa2120e2b3', - 'be3279ed5bbbb03ac69a80f89879aa5a01a6b965f13f7e59d47a5305ba5ad93d' - ], - [ - 'e4a42d43c5cf169d9391df6decf42ee541b6d8f0c9a137401e23632dda34d24f', - '4d9f92e716d1c73526fc99ccfb8ad34ce886eedfa8d8e4f13a7f7131deba9414' - ], - [ - '1ec80fef360cbdd954160fadab352b6b92b53576a88fea4947173b9d4300bf19', - 'aeefe93756b5340d2f3a4958a7abbf5e0146e77f6295a07b671cdc1cc107cefd' - ], - [ - '146a778c04670c2f91b00af4680dfa8bce3490717d58ba889ddb5928366642be', - 'b318e0ec3354028add669827f9d4b2870aaa971d2f7e5ed1d0b297483d83efd0' - ], - [ - 'fa50c0f61d22e5f07e3acebb1aa07b128d0012209a28b9776d76a8793180eef9', - '6b84c6922397eba9b72cd2872281a68a5e683293a57a213b38cd8d7d3f4f2811' - ], - [ - 'da1d61d0ca721a11b1a5bf6b7d88e8421a288ab5d5bba5220e53d32b5f067ec2', - '8157f55a7c99306c79c0766161c91e2966a73899d279b48a655fba0f1ad836f1' - ], - [ - 'a8e282ff0c9706907215ff98e8fd416615311de0446f1e062a73b0610d064e13', - '7f97355b8db81c09abfb7f3c5b2515888b679a3e50dd6bd6cef7c73111f4cc0c' - ], - [ - '174a53b9c9a285872d39e56e6913cab15d59b1fa512508c022f382de8319497c', - 'ccc9dc37abfc9c1657b4155f2c47f9e6646b3a1d8cb9854383da13ac079afa73' - ], - [ - '959396981943785c3d3e57edf5018cdbe039e730e4918b3d884fdff09475b7ba', - '2e7e552888c331dd8ba0386a4b9cd6849c653f64c8709385e9b8abf87524f2fd' - ], - [ - 'd2a63a50ae401e56d645a1153b109a8fcca0a43d561fba2dbb51340c9d82b151', - 'e82d86fb6443fcb7565aee58b2948220a70f750af484ca52d4142174dcf89405' - ], - [ - '64587e2335471eb890ee7896d7cfdc866bacbdbd3839317b3436f9b45617e073', - 'd99fcdd5bf6902e2ae96dd6447c299a185b90a39133aeab358299e5e9faf6589' - ], - [ - '8481bde0e4e4d885b3a546d3e549de042f0aa6cea250e7fd358d6c86dd45e458', - '38ee7b8cba5404dd84a25bf39cecb2ca900a79c42b262e556d64b1b59779057e' - ], - [ - '13464a57a78102aa62b6979ae817f4637ffcfed3c4b1ce30bcd6303f6caf666b', - '69be159004614580ef7e433453ccb0ca48f300a81d0942e13f495a907f6ecc27' - ], - [ - 'bc4a9df5b713fe2e9aef430bcc1dc97a0cd9ccede2f28588cada3a0d2d83f366', - 'd3a81ca6e785c06383937adf4b798caa6e8a9fbfa547b16d758d666581f33c1' - ], - [ - '8c28a97bf8298bc0d23d8c749452a32e694b65e30a9472a3954ab30fe5324caa', - '40a30463a3305193378fedf31f7cc0eb7ae784f0451cb9459e71dc73cbef9482' - ], - [ - '8ea9666139527a8c1dd94ce4f071fd23c8b350c5a4bb33748c4ba111faccae0', - '620efabbc8ee2782e24e7c0cfb95c5d735b783be9cf0f8e955af34a30e62b945' - ], - [ - 'dd3625faef5ba06074669716bbd3788d89bdde815959968092f76cc4eb9a9787', - '7a188fa3520e30d461da2501045731ca941461982883395937f68d00c644a573' - ], - [ - 'f710d79d9eb962297e4f6232b40e8f7feb2bc63814614d692c12de752408221e', - 'ea98e67232d3b3295d3b535532115ccac8612c721851617526ae47a9c77bfc82' - ] - ] - }, - naf: { - wnd: 7, - points: [ - [ - 'f9308a019258c31049344f85f89d5229b531c845836f99b08601f113bce036f9', - '388f7b0f632de8140fe337e62a37f3566500a99934c2231b6cb9fd7584b8e672' - ], - [ - '2f8bde4d1a07209355b4a7250a5c5128e88b84bddc619ab7cba8d569b240efe4', - 'd8ac222636e5e3d6d4dba9dda6c9c426f788271bab0d6840dca87d3aa6ac62d6' - ], - [ - '5cbdf0646e5db4eaa398f365f2ea7a0e3d419b7e0330e39ce92bddedcac4f9bc', - '6aebca40ba255960a3178d6d861a54dba813d0b813fde7b5a5082628087264da' - ], - [ - 'acd484e2f0c7f65309ad178a9f559abde09796974c57e714c35f110dfc27ccbe', - 'cc338921b0a7d9fd64380971763b61e9add888a4375f8e0f05cc262ac64f9c37' - ], - [ - '774ae7f858a9411e5ef4246b70c65aac5649980be5c17891bbec17895da008cb', - 'd984a032eb6b5e190243dd56d7b7b365372db1e2dff9d6a8301d74c9c953c61b' - ], - [ - 'f28773c2d975288bc7d1d205c3748651b075fbc6610e58cddeeddf8f19405aa8', - 'ab0902e8d880a89758212eb65cdaf473a1a06da521fa91f29b5cb52db03ed81' - ], - [ - 'd7924d4f7d43ea965a465ae3095ff41131e5946f3c85f79e44adbcf8e27e080e', - '581e2872a86c72a683842ec228cc6defea40af2bd896d3a5c504dc9ff6a26b58' - ], - [ - 'defdea4cdb677750a420fee807eacf21eb9898ae79b9768766e4faa04a2d4a34', - '4211ab0694635168e997b0ead2a93daeced1f4a04a95c0f6cfb199f69e56eb77' - ], - [ - '2b4ea0a797a443d293ef5cff444f4979f06acfebd7e86d277475656138385b6c', - '85e89bc037945d93b343083b5a1c86131a01f60c50269763b570c854e5c09b7a' - ], - [ - '352bbf4a4cdd12564f93fa332ce333301d9ad40271f8107181340aef25be59d5', - '321eb4075348f534d59c18259dda3e1f4a1b3b2e71b1039c67bd3d8bcf81998c' - ], - [ - '2fa2104d6b38d11b0230010559879124e42ab8dfeff5ff29dc9cdadd4ecacc3f', - '2de1068295dd865b64569335bd5dd80181d70ecfc882648423ba76b532b7d67' - ], - [ - '9248279b09b4d68dab21a9b066edda83263c3d84e09572e269ca0cd7f5453714', - '73016f7bf234aade5d1aa71bdea2b1ff3fc0de2a887912ffe54a32ce97cb3402' - ], - [ - 'daed4f2be3a8bf278e70132fb0beb7522f570e144bf615c07e996d443dee8729', - 'a69dce4a7d6c98e8d4a1aca87ef8d7003f83c230f3afa726ab40e52290be1c55' - ], - [ - 'c44d12c7065d812e8acf28d7cbb19f9011ecd9e9fdf281b0e6a3b5e87d22e7db', - '2119a460ce326cdc76c45926c982fdac0e106e861edf61c5a039063f0e0e6482' - ], - [ - '6a245bf6dc698504c89a20cfded60853152b695336c28063b61c65cbd269e6b4', - 'e022cf42c2bd4a708b3f5126f16a24ad8b33ba48d0423b6efd5e6348100d8a82' - ], - [ - '1697ffa6fd9de627c077e3d2fe541084ce13300b0bec1146f95ae57f0d0bd6a5', - 'b9c398f186806f5d27561506e4557433a2cf15009e498ae7adee9d63d01b2396' - ], - [ - '605bdb019981718b986d0f07e834cb0d9deb8360ffb7f61df982345ef27a7479', - '2972d2de4f8d20681a78d93ec96fe23c26bfae84fb14db43b01e1e9056b8c49' - ], - [ - '62d14dab4150bf497402fdc45a215e10dcb01c354959b10cfe31c7e9d87ff33d', - '80fc06bd8cc5b01098088a1950eed0db01aa132967ab472235f5642483b25eaf' - ], - [ - '80c60ad0040f27dade5b4b06c408e56b2c50e9f56b9b8b425e555c2f86308b6f', - '1c38303f1cc5c30f26e66bad7fe72f70a65eed4cbe7024eb1aa01f56430bd57a' - ], - [ - '7a9375ad6167ad54aa74c6348cc54d344cc5dc9487d847049d5eabb0fa03c8fb', - 'd0e3fa9eca8726909559e0d79269046bdc59ea10c70ce2b02d499ec224dc7f7' - ], - [ - 'd528ecd9b696b54c907a9ed045447a79bb408ec39b68df504bb51f459bc3ffc9', - 'eecf41253136e5f99966f21881fd656ebc4345405c520dbc063465b521409933' - ], - [ - '49370a4b5f43412ea25f514e8ecdad05266115e4a7ecb1387231808f8b45963', - '758f3f41afd6ed428b3081b0512fd62a54c3f3afbb5b6764b653052a12949c9a' - ], - [ - '77f230936ee88cbbd73df930d64702ef881d811e0e1498e2f1c13eb1fc345d74', - '958ef42a7886b6400a08266e9ba1b37896c95330d97077cbbe8eb3c7671c60d6' - ], - [ - 'f2dac991cc4ce4b9ea44887e5c7c0bce58c80074ab9d4dbaeb28531b7739f530', - 'e0dedc9b3b2f8dad4da1f32dec2531df9eb5fbeb0598e4fd1a117dba703a3c37' - ], - [ - '463b3d9f662621fb1b4be8fbbe2520125a216cdfc9dae3debcba4850c690d45b', - '5ed430d78c296c3543114306dd8622d7c622e27c970a1de31cb377b01af7307e' - ], - [ - 'f16f804244e46e2a09232d4aff3b59976b98fac14328a2d1a32496b49998f247', - 'cedabd9b82203f7e13d206fcdf4e33d92a6c53c26e5cce26d6579962c4e31df6' - ], - [ - 'caf754272dc84563b0352b7a14311af55d245315ace27c65369e15f7151d41d1', - 'cb474660ef35f5f2a41b643fa5e460575f4fa9b7962232a5c32f908318a04476' - ], - [ - '2600ca4b282cb986f85d0f1709979d8b44a09c07cb86d7c124497bc86f082120', - '4119b88753c15bd6a693b03fcddbb45d5ac6be74ab5f0ef44b0be9475a7e4b40' - ], - [ - '7635ca72d7e8432c338ec53cd12220bc01c48685e24f7dc8c602a7746998e435', - '91b649609489d613d1d5e590f78e6d74ecfc061d57048bad9e76f302c5b9c61' - ], - [ - '754e3239f325570cdbbf4a87deee8a66b7f2b33479d468fbc1a50743bf56cc18', - '673fb86e5bda30fb3cd0ed304ea49a023ee33d0197a695d0c5d98093c536683' - ], - [ - 'e3e6bd1071a1e96aff57859c82d570f0330800661d1c952f9fe2694691d9b9e8', - '59c9e0bba394e76f40c0aa58379a3cb6a5a2283993e90c4167002af4920e37f5' - ], - [ - '186b483d056a033826ae73d88f732985c4ccb1f32ba35f4b4cc47fdcf04aa6eb', - '3b952d32c67cf77e2e17446e204180ab21fb8090895138b4a4a797f86e80888b' - ], - [ - 'df9d70a6b9876ce544c98561f4be4f725442e6d2b737d9c91a8321724ce0963f', - '55eb2dafd84d6ccd5f862b785dc39d4ab157222720ef9da217b8c45cf2ba2417' - ], - [ - '5edd5cc23c51e87a497ca815d5dce0f8ab52554f849ed8995de64c5f34ce7143', - 'efae9c8dbc14130661e8cec030c89ad0c13c66c0d17a2905cdc706ab7399a868' - ], - [ - '290798c2b6476830da12fe02287e9e777aa3fba1c355b17a722d362f84614fba', - 'e38da76dcd440621988d00bcf79af25d5b29c094db2a23146d003afd41943e7a' - ], - [ - 'af3c423a95d9f5b3054754efa150ac39cd29552fe360257362dfdecef4053b45', - 'f98a3fd831eb2b749a93b0e6f35cfb40c8cd5aa667a15581bc2feded498fd9c6' - ], - [ - '766dbb24d134e745cccaa28c99bf274906bb66b26dcf98df8d2fed50d884249a', - '744b1152eacbe5e38dcc887980da38b897584a65fa06cedd2c924f97cbac5996' - ], - [ - '59dbf46f8c94759ba21277c33784f41645f7b44f6c596a58ce92e666191abe3e', - 'c534ad44175fbc300f4ea6ce648309a042ce739a7919798cd85e216c4a307f6e' - ], - [ - 'f13ada95103c4537305e691e74e9a4a8dd647e711a95e73cb62dc6018cfd87b8', - 'e13817b44ee14de663bf4bc808341f326949e21a6a75c2570778419bdaf5733d' - ], - [ - '7754b4fa0e8aced06d4167a2c59cca4cda1869c06ebadfb6488550015a88522c', - '30e93e864e669d82224b967c3020b8fa8d1e4e350b6cbcc537a48b57841163a2' - ], - [ - '948dcadf5990e048aa3874d46abef9d701858f95de8041d2a6828c99e2262519', - 'e491a42537f6e597d5d28a3224b1bc25df9154efbd2ef1d2cbba2cae5347d57e' - ], - [ - '7962414450c76c1689c7b48f8202ec37fb224cf5ac0bfa1570328a8a3d7c77ab', - '100b610ec4ffb4760d5c1fc133ef6f6b12507a051f04ac5760afa5b29db83437' - ], - [ - '3514087834964b54b15b160644d915485a16977225b8847bb0dd085137ec47ca', - 'ef0afbb2056205448e1652c48e8127fc6039e77c15c2378b7e7d15a0de293311' - ], - [ - 'd3cc30ad6b483e4bc79ce2c9dd8bc54993e947eb8df787b442943d3f7b527eaf', - '8b378a22d827278d89c5e9be8f9508ae3c2ad46290358630afb34db04eede0a4' - ], - [ - '1624d84780732860ce1c78fcbfefe08b2b29823db913f6493975ba0ff4847610', - '68651cf9b6da903e0914448c6cd9d4ca896878f5282be4c8cc06e2a404078575' - ], - [ - '733ce80da955a8a26902c95633e62a985192474b5af207da6df7b4fd5fc61cd4', - 'f5435a2bd2badf7d485a4d8b8db9fcce3e1ef8e0201e4578c54673bc1dc5ea1d' - ], - [ - '15d9441254945064cf1a1c33bbd3b49f8966c5092171e699ef258dfab81c045c', - 'd56eb30b69463e7234f5137b73b84177434800bacebfc685fc37bbe9efe4070d' - ], - [ - 'a1d0fcf2ec9de675b612136e5ce70d271c21417c9d2b8aaaac138599d0717940', - 'edd77f50bcb5a3cab2e90737309667f2641462a54070f3d519212d39c197a629' - ], - [ - 'e22fbe15c0af8ccc5780c0735f84dbe9a790badee8245c06c7ca37331cb36980', - 'a855babad5cd60c88b430a69f53a1a7a38289154964799be43d06d77d31da06' - ], - [ - '311091dd9860e8e20ee13473c1155f5f69635e394704eaa74009452246cfa9b3', - '66db656f87d1f04fffd1f04788c06830871ec5a64feee685bd80f0b1286d8374' - ], - [ - '34c1fd04d301be89b31c0442d3e6ac24883928b45a9340781867d4232ec2dbdf', - '9414685e97b1b5954bd46f730174136d57f1ceeb487443dc5321857ba73abee' - ], - [ - 'f219ea5d6b54701c1c14de5b557eb42a8d13f3abbcd08affcc2a5e6b049b8d63', - '4cb95957e83d40b0f73af4544cccf6b1f4b08d3c07b27fb8d8c2962a400766d1' - ], - [ - 'd7b8740f74a8fbaab1f683db8f45de26543a5490bca627087236912469a0b448', - 'fa77968128d9c92ee1010f337ad4717eff15db5ed3c049b3411e0315eaa4593b' - ], - [ - '32d31c222f8f6f0ef86f7c98d3a3335ead5bcd32abdd94289fe4d3091aa824bf', - '5f3032f5892156e39ccd3d7915b9e1da2e6dac9e6f26e961118d14b8462e1661' - ], - [ - '7461f371914ab32671045a155d9831ea8793d77cd59592c4340f86cbc18347b5', - '8ec0ba238b96bec0cbdddcae0aa442542eee1ff50c986ea6b39847b3cc092ff6' - ], - [ - 'ee079adb1df1860074356a25aa38206a6d716b2c3e67453d287698bad7b2b2d6', - '8dc2412aafe3be5c4c5f37e0ecc5f9f6a446989af04c4e25ebaac479ec1c8c1e' - ], - [ - '16ec93e447ec83f0467b18302ee620f7e65de331874c9dc72bfd8616ba9da6b5', - '5e4631150e62fb40d0e8c2a7ca5804a39d58186a50e497139626778e25b0674d' - ], - [ - 'eaa5f980c245f6f038978290afa70b6bd8855897f98b6aa485b96065d537bd99', - 'f65f5d3e292c2e0819a528391c994624d784869d7e6ea67fb18041024edc07dc' - ], - [ - '78c9407544ac132692ee1910a02439958ae04877151342ea96c4b6b35a49f51', - 'f3e0319169eb9b85d5404795539a5e68fa1fbd583c064d2462b675f194a3ddb4' - ], - [ - '494f4be219a1a77016dcd838431aea0001cdc8ae7a6fc688726578d9702857a5', - '42242a969283a5f339ba7f075e36ba2af925ce30d767ed6e55f4b031880d562c' - ], - [ - 'a598a8030da6d86c6bc7f2f5144ea549d28211ea58faa70ebf4c1e665c1fe9b5', - '204b5d6f84822c307e4b4a7140737aec23fc63b65b35f86a10026dbd2d864e6b' - ], - [ - 'c41916365abb2b5d09192f5f2dbeafec208f020f12570a184dbadc3e58595997', - '4f14351d0087efa49d245b328984989d5caf9450f34bfc0ed16e96b58fa9913' - ], - [ - '841d6063a586fa475a724604da03bc5b92a2e0d2e0a36acfe4c73a5514742881', - '73867f59c0659e81904f9a1c7543698e62562d6744c169ce7a36de01a8d6154' - ], - [ - '5e95bb399a6971d376026947f89bde2f282b33810928be4ded112ac4d70e20d5', - '39f23f366809085beebfc71181313775a99c9aed7d8ba38b161384c746012865' - ], - [ - '36e4641a53948fd476c39f8a99fd974e5ec07564b5315d8bf99471bca0ef2f66', - 'd2424b1b1abe4eb8164227b085c9aa9456ea13493fd563e06fd51cf5694c78fc' - ], - [ - '336581ea7bfbbb290c191a2f507a41cf5643842170e914faeab27c2c579f726', - 'ead12168595fe1be99252129b6e56b3391f7ab1410cd1e0ef3dcdcabd2fda224' - ], - [ - '8ab89816dadfd6b6a1f2634fcf00ec8403781025ed6890c4849742706bd43ede', - '6fdcef09f2f6d0a044e654aef624136f503d459c3e89845858a47a9129cdd24e' - ], - [ - '1e33f1a746c9c5778133344d9299fcaa20b0938e8acff2544bb40284b8c5fb94', - '60660257dd11b3aa9c8ed618d24edff2306d320f1d03010e33a7d2057f3b3b6' - ], - [ - '85b7c1dcb3cec1b7ee7f30ded79dd20a0ed1f4cc18cbcfcfa410361fd8f08f31', - '3d98a9cdd026dd43f39048f25a8847f4fcafad1895d7a633c6fed3c35e999511' - ], - [ - '29df9fbd8d9e46509275f4b125d6d45d7fbe9a3b878a7af872a2800661ac5f51', - 'b4c4fe99c775a606e2d8862179139ffda61dc861c019e55cd2876eb2a27d84b' - ], - [ - 'a0b1cae06b0a847a3fea6e671aaf8adfdfe58ca2f768105c8082b2e449fce252', - 'ae434102edde0958ec4b19d917a6a28e6b72da1834aff0e650f049503a296cf2' - ], - [ - '4e8ceafb9b3e9a136dc7ff67e840295b499dfb3b2133e4ba113f2e4c0e121e5', - 'cf2174118c8b6d7a4b48f6d534ce5c79422c086a63460502b827ce62a326683c' - ], - [ - 'd24a44e047e19b6f5afb81c7ca2f69080a5076689a010919f42725c2b789a33b', - '6fb8d5591b466f8fc63db50f1c0f1c69013f996887b8244d2cdec417afea8fa3' - ], - [ - 'ea01606a7a6c9cdd249fdfcfacb99584001edd28abbab77b5104e98e8e3b35d4', - '322af4908c7312b0cfbfe369f7a7b3cdb7d4494bc2823700cfd652188a3ea98d' - ], - [ - 'af8addbf2b661c8a6c6328655eb96651252007d8c5ea31be4ad196de8ce2131f', - '6749e67c029b85f52a034eafd096836b2520818680e26ac8f3dfbcdb71749700' - ], - [ - 'e3ae1974566ca06cc516d47e0fb165a674a3dabcfca15e722f0e3450f45889', - '2aeabe7e4531510116217f07bf4d07300de97e4874f81f533420a72eeb0bd6a4' - ], - [ - '591ee355313d99721cf6993ffed1e3e301993ff3ed258802075ea8ced397e246', - 'b0ea558a113c30bea60fc4775460c7901ff0b053d25ca2bdeee98f1a4be5d196' - ], - [ - '11396d55fda54c49f19aa97318d8da61fa8584e47b084945077cf03255b52984', - '998c74a8cd45ac01289d5833a7beb4744ff536b01b257be4c5767bea93ea57a4' - ], - [ - '3c5d2a1ba39c5a1790000738c9e0c40b8dcdfd5468754b6405540157e017aa7a', - 'b2284279995a34e2f9d4de7396fc18b80f9b8b9fdd270f6661f79ca4c81bd257' - ], - [ - 'cc8704b8a60a0defa3a99a7299f2e9c3fbc395afb04ac078425ef8a1793cc030', - 'bdd46039feed17881d1e0862db347f8cf395b74fc4bcdc4e940b74e3ac1f1b13' - ], - [ - 'c533e4f7ea8555aacd9777ac5cad29b97dd4defccc53ee7ea204119b2889b197', - '6f0a256bc5efdf429a2fb6242f1a43a2d9b925bb4a4b3a26bb8e0f45eb596096' - ], - [ - 'c14f8f2ccb27d6f109f6d08d03cc96a69ba8c34eec07bbcf566d48e33da6593', - 'c359d6923bb398f7fd4473e16fe1c28475b740dd098075e6c0e8649113dc3a38' - ], - [ - 'a6cbc3046bc6a450bac24789fa17115a4c9739ed75f8f21ce441f72e0b90e6ef', - '21ae7f4680e889bb130619e2c0f95a360ceb573c70603139862afd617fa9b9f' - ], - [ - '347d6d9a02c48927ebfb86c1359b1caf130a3c0267d11ce6344b39f99d43cc38', - '60ea7f61a353524d1c987f6ecec92f086d565ab687870cb12689ff1e31c74448' - ], - [ - 'da6545d2181db8d983f7dcb375ef5866d47c67b1bf31c8cf855ef7437b72656a', - '49b96715ab6878a79e78f07ce5680c5d6673051b4935bd897fea824b77dc208a' - ], - [ - 'c40747cc9d012cb1a13b8148309c6de7ec25d6945d657146b9d5994b8feb1111', - '5ca560753be2a12fc6de6caf2cb489565db936156b9514e1bb5e83037e0fa2d4' - ], - [ - '4e42c8ec82c99798ccf3a610be870e78338c7f713348bd34c8203ef4037f3502', - '7571d74ee5e0fb92a7a8b33a07783341a5492144cc54bcc40a94473693606437' - ], - [ - '3775ab7089bc6af823aba2e1af70b236d251cadb0c86743287522a1b3b0dedea', - 'be52d107bcfa09d8bcb9736a828cfa7fac8db17bf7a76a2c42ad961409018cf7' - ], - [ - 'cee31cbf7e34ec379d94fb814d3d775ad954595d1314ba8846959e3e82f74e26', - '8fd64a14c06b589c26b947ae2bcf6bfa0149ef0be14ed4d80f448a01c43b1c6d' - ], - [ - 'b4f9eaea09b6917619f6ea6a4eb5464efddb58fd45b1ebefcdc1a01d08b47986', - '39e5c9925b5a54b07433a4f18c61726f8bb131c012ca542eb24a8ac07200682a' - ], - [ - 'd4263dfc3d2df923a0179a48966d30ce84e2515afc3dccc1b77907792ebcc60e', - '62dfaf07a0f78feb30e30d6295853ce189e127760ad6cf7fae164e122a208d54' - ], - [ - '48457524820fa65a4f8d35eb6930857c0032acc0a4a2de422233eeda897612c4', - '25a748ab367979d98733c38a1fa1c2e7dc6cc07db2d60a9ae7a76aaa49bd0f77' - ], - [ - 'dfeeef1881101f2cb11644f3a2afdfc2045e19919152923f367a1767c11cceda', - 'ecfb7056cf1de042f9420bab396793c0c390bde74b4bbdff16a83ae09a9a7517' - ], - [ - '6d7ef6b17543f8373c573f44e1f389835d89bcbc6062ced36c82df83b8fae859', - 'cd450ec335438986dfefa10c57fea9bcc521a0959b2d80bbf74b190dca712d10' - ], - [ - 'e75605d59102a5a2684500d3b991f2e3f3c88b93225547035af25af66e04541f', - 'f5c54754a8f71ee540b9b48728473e314f729ac5308b06938360990e2bfad125' - ], - [ - 'eb98660f4c4dfaa06a2be453d5020bc99a0c2e60abe388457dd43fefb1ed620c', - '6cb9a8876d9cb8520609af3add26cd20a0a7cd8a9411131ce85f44100099223e' - ], - [ - '13e87b027d8514d35939f2e6892b19922154596941888336dc3563e3b8dba942', - 'fef5a3c68059a6dec5d624114bf1e91aac2b9da568d6abeb2570d55646b8adf1' - ], - [ - 'ee163026e9fd6fe017c38f06a5be6fc125424b371ce2708e7bf4491691e5764a', - '1acb250f255dd61c43d94ccc670d0f58f49ae3fa15b96623e5430da0ad6c62b2' - ], - [ - 'b268f5ef9ad51e4d78de3a750c2dc89b1e626d43505867999932e5db33af3d80', - '5f310d4b3c99b9ebb19f77d41c1dee018cf0d34fd4191614003e945a1216e423' - ], - [ - 'ff07f3118a9df035e9fad85eb6c7bfe42b02f01ca99ceea3bf7ffdba93c4750d', - '438136d603e858a3a5c440c38eccbaddc1d2942114e2eddd4740d098ced1f0d8' - ], - [ - '8d8b9855c7c052a34146fd20ffb658bea4b9f69e0d825ebec16e8c3ce2b526a1', - 'cdb559eedc2d79f926baf44fb84ea4d44bcf50fee51d7ceb30e2e7f463036758' - ], - [ - '52db0b5384dfbf05bfa9d472d7ae26dfe4b851ceca91b1eba54263180da32b63', - 'c3b997d050ee5d423ebaf66a6db9f57b3180c902875679de924b69d84a7b375' - ], - [ - 'e62f9490d3d51da6395efd24e80919cc7d0f29c3f3fa48c6fff543becbd43352', - '6d89ad7ba4876b0b22c2ca280c682862f342c8591f1daf5170e07bfd9ccafa7d' - ], - [ - '7f30ea2476b399b4957509c88f77d0191afa2ff5cb7b14fd6d8e7d65aaab1193', - 'ca5ef7d4b231c94c3b15389a5f6311e9daff7bb67b103e9880ef4bff637acaec' - ], - [ - '5098ff1e1d9f14fb46a210fada6c903fef0fb7b4a1dd1d9ac60a0361800b7a00', - '9731141d81fc8f8084d37c6e7542006b3ee1b40d60dfe5362a5b132fd17ddc0' - ], - [ - '32b78c7de9ee512a72895be6b9cbefa6e2f3c4ccce445c96b9f2c81e2778ad58', - 'ee1849f513df71e32efc3896ee28260c73bb80547ae2275ba497237794c8753c' - ], - [ - 'e2cb74fddc8e9fbcd076eef2a7c72b0ce37d50f08269dfc074b581550547a4f7', - 'd3aa2ed71c9dd2247a62df062736eb0baddea9e36122d2be8641abcb005cc4a4' - ], - [ - '8438447566d4d7bedadc299496ab357426009a35f235cb141be0d99cd10ae3a8', - 'c4e1020916980a4da5d01ac5e6ad330734ef0d7906631c4f2390426b2edd791f' - ], - [ - '4162d488b89402039b584c6fc6c308870587d9c46f660b878ab65c82c711d67e', - '67163e903236289f776f22c25fb8a3afc1732f2b84b4e95dbda47ae5a0852649' - ], - [ - '3fad3fa84caf0f34f0f89bfd2dcf54fc175d767aec3e50684f3ba4a4bf5f683d', - 'cd1bc7cb6cc407bb2f0ca647c718a730cf71872e7d0d2a53fa20efcdfe61826' - ], - [ - '674f2600a3007a00568c1a7ce05d0816c1fb84bf1370798f1c69532faeb1a86b', - '299d21f9413f33b3edf43b257004580b70db57da0b182259e09eecc69e0d38a5' - ], - [ - 'd32f4da54ade74abb81b815ad1fb3b263d82d6c692714bcff87d29bd5ee9f08f', - 'f9429e738b8e53b968e99016c059707782e14f4535359d582fc416910b3eea87' - ], - [ - '30e4e670435385556e593657135845d36fbb6931f72b08cb1ed954f1e3ce3ff6', - '462f9bce619898638499350113bbc9b10a878d35da70740dc695a559eb88db7b' - ], - [ - 'be2062003c51cc3004682904330e4dee7f3dcd10b01e580bf1971b04d4cad297', - '62188bc49d61e5428573d48a74e1c655b1c61090905682a0d5558ed72dccb9bc' - ], - [ - '93144423ace3451ed29e0fb9ac2af211cb6e84a601df5993c419859fff5df04a', - '7c10dfb164c3425f5c71a3f9d7992038f1065224f72bb9d1d902a6d13037b47c' - ], - [ - 'b015f8044f5fcbdcf21ca26d6c34fb8197829205c7b7d2a7cb66418c157b112c', - 'ab8c1e086d04e813744a655b2df8d5f83b3cdc6faa3088c1d3aea1454e3a1d5f' - ], - [ - 'd5e9e1da649d97d89e4868117a465a3a4f8a18de57a140d36b3f2af341a21b52', - '4cb04437f391ed73111a13cc1d4dd0db1693465c2240480d8955e8592f27447a' - ], - [ - 'd3ae41047dd7ca065dbf8ed77b992439983005cd72e16d6f996a5316d36966bb', - 'bd1aeb21ad22ebb22a10f0303417c6d964f8cdd7df0aca614b10dc14d125ac46' - ], - [ - '463e2763d885f958fc66cdd22800f0a487197d0a82e377b49f80af87c897b065', - 'bfefacdb0e5d0fd7df3a311a94de062b26b80c61fbc97508b79992671ef7ca7f' - ], - [ - '7985fdfd127c0567c6f53ec1bb63ec3158e597c40bfe747c83cddfc910641917', - '603c12daf3d9862ef2b25fe1de289aed24ed291e0ec6708703a5bd567f32ed03' - ], - [ - '74a1ad6b5f76e39db2dd249410eac7f99e74c59cb83d2d0ed5ff1543da7703e9', - 'cc6157ef18c9c63cd6193d83631bbea0093e0968942e8c33d5737fd790e0db08' - ], - [ - '30682a50703375f602d416664ba19b7fc9bab42c72747463a71d0896b22f6da3', - '553e04f6b018b4fa6c8f39e7f311d3176290d0e0f19ca73f17714d9977a22ff8' - ], - [ - '9e2158f0d7c0d5f26c3791efefa79597654e7a2b2464f52b1ee6c1347769ef57', - '712fcdd1b9053f09003a3481fa7762e9ffd7c8ef35a38509e2fbf2629008373' - ], - [ - '176e26989a43c9cfeba4029c202538c28172e566e3c4fce7322857f3be327d66', - 'ed8cc9d04b29eb877d270b4878dc43c19aefd31f4eee09ee7b47834c1fa4b1c3' - ], - [ - '75d46efea3771e6e68abb89a13ad747ecf1892393dfc4f1b7004788c50374da8', - '9852390a99507679fd0b86fd2b39a868d7efc22151346e1a3ca4726586a6bed8' - ], - [ - '809a20c67d64900ffb698c4c825f6d5f2310fb0451c869345b7319f645605721', - '9e994980d9917e22b76b061927fa04143d096ccc54963e6a5ebfa5f3f8e286c1' - ], - [ - '1b38903a43f7f114ed4500b4eac7083fdefece1cf29c63528d563446f972c180', - '4036edc931a60ae889353f77fd53de4a2708b26b6f5da72ad3394119daf408f9' - ] - ] - } -}; - -},{}],"ExaX":[function(require,module,exports) { -'use strict'; - -var curves = exports; - -var hash = require('hash.js'); -var curve = require('./curve'); -var utils = require('./utils'); - -var assert = utils.assert; - -function PresetCurve(options) { - if (options.type === 'short') - this.curve = new curve.short(options); - else if (options.type === 'edwards') - this.curve = new curve.edwards(options); - else - this.curve = new curve.mont(options); - this.g = this.curve.g; - this.n = this.curve.n; - this.hash = options.hash; - - assert(this.g.validate(), 'Invalid curve'); - assert(this.g.mul(this.n).isInfinity(), 'Invalid curve, G*N != O'); -} -curves.PresetCurve = PresetCurve; - -function defineCurve(name, options) { - Object.defineProperty(curves, name, { - configurable: true, - enumerable: true, - get: function() { - var curve = new PresetCurve(options); - Object.defineProperty(curves, name, { - configurable: true, - enumerable: true, - value: curve - }); - return curve; - } - }); -} - -defineCurve('p192', { - type: 'short', - prime: 'p192', - p: 'ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff', - a: 'ffffffff ffffffff ffffffff fffffffe ffffffff fffffffc', - b: '64210519 e59c80e7 0fa7e9ab 72243049 feb8deec c146b9b1', - n: 'ffffffff ffffffff ffffffff 99def836 146bc9b1 b4d22831', - hash: hash.sha256, - gRed: false, - g: [ - '188da80e b03090f6 7cbf20eb 43a18800 f4ff0afd 82ff1012', - '07192b95 ffc8da78 631011ed 6b24cdd5 73f977a1 1e794811' - ] -}); - -defineCurve('p224', { - type: 'short', - prime: 'p224', - p: 'ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001', - a: 'ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff fffffffe', - b: 'b4050a85 0c04b3ab f5413256 5044b0b7 d7bfd8ba 270b3943 2355ffb4', - n: 'ffffffff ffffffff ffffffff ffff16a2 e0b8f03e 13dd2945 5c5c2a3d', - hash: hash.sha256, - gRed: false, - g: [ - 'b70e0cbd 6bb4bf7f 321390b9 4a03c1d3 56c21122 343280d6 115c1d21', - 'bd376388 b5f723fb 4c22dfe6 cd4375a0 5a074764 44d58199 85007e34' - ] -}); - -defineCurve('p256', { - type: 'short', - prime: null, - p: 'ffffffff 00000001 00000000 00000000 00000000 ffffffff ffffffff ffffffff', - a: 'ffffffff 00000001 00000000 00000000 00000000 ffffffff ffffffff fffffffc', - b: '5ac635d8 aa3a93e7 b3ebbd55 769886bc 651d06b0 cc53b0f6 3bce3c3e 27d2604b', - n: 'ffffffff 00000000 ffffffff ffffffff bce6faad a7179e84 f3b9cac2 fc632551', - hash: hash.sha256, - gRed: false, - g: [ - '6b17d1f2 e12c4247 f8bce6e5 63a440f2 77037d81 2deb33a0 f4a13945 d898c296', - '4fe342e2 fe1a7f9b 8ee7eb4a 7c0f9e16 2bce3357 6b315ece cbb64068 37bf51f5' - ] -}); - -defineCurve('p384', { - type: 'short', - prime: null, - p: 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ' + - 'fffffffe ffffffff 00000000 00000000 ffffffff', - a: 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ' + - 'fffffffe ffffffff 00000000 00000000 fffffffc', - b: 'b3312fa7 e23ee7e4 988e056b e3f82d19 181d9c6e fe814112 0314088f ' + - '5013875a c656398d 8a2ed19d 2a85c8ed d3ec2aef', - n: 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff c7634d81 ' + - 'f4372ddf 581a0db2 48b0a77a ecec196a ccc52973', - hash: hash.sha384, - gRed: false, - g: [ - 'aa87ca22 be8b0537 8eb1c71e f320ad74 6e1d3b62 8ba79b98 59f741e0 82542a38 ' + - '5502f25d bf55296c 3a545e38 72760ab7', - '3617de4a 96262c6f 5d9e98bf 9292dc29 f8f41dbd 289a147c e9da3113 b5f0b8c0 ' + - '0a60b1ce 1d7e819d 7a431d7c 90ea0e5f' - ] -}); - -defineCurve('p521', { - type: 'short', - prime: null, - p: '000001ff ffffffff ffffffff ffffffff ffffffff ffffffff ' + - 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ' + - 'ffffffff ffffffff ffffffff ffffffff ffffffff', - a: '000001ff ffffffff ffffffff ffffffff ffffffff ffffffff ' + - 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ' + - 'ffffffff ffffffff ffffffff ffffffff fffffffc', - b: '00000051 953eb961 8e1c9a1f 929a21a0 b68540ee a2da725b ' + - '99b315f3 b8b48991 8ef109e1 56193951 ec7e937b 1652c0bd ' + - '3bb1bf07 3573df88 3d2c34f1 ef451fd4 6b503f00', - n: '000001ff ffffffff ffffffff ffffffff ffffffff ffffffff ' + - 'ffffffff ffffffff fffffffa 51868783 bf2f966b 7fcc0148 ' + - 'f709a5d0 3bb5c9b8 899c47ae bb6fb71e 91386409', - hash: hash.sha512, - gRed: false, - g: [ - '000000c6 858e06b7 0404e9cd 9e3ecb66 2395b442 9c648139 ' + - '053fb521 f828af60 6b4d3dba a14b5e77 efe75928 fe1dc127 ' + - 'a2ffa8de 3348b3c1 856a429b f97e7e31 c2e5bd66', - '00000118 39296a78 9a3bc004 5c8a5fb4 2c7d1bd9 98f54449 ' + - '579b4468 17afbd17 273e662c 97ee7299 5ef42640 c550b901 ' + - '3fad0761 353c7086 a272c240 88be9476 9fd16650' - ] -}); - -defineCurve('curve25519', { - type: 'mont', - prime: 'p25519', - p: '7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed', - a: '76d06', - b: '1', - n: '1000000000000000 0000000000000000 14def9dea2f79cd6 5812631a5cf5d3ed', - hash: hash.sha256, - gRed: false, - g: [ - '9' - ] -}); - -defineCurve('ed25519', { - type: 'edwards', - prime: 'p25519', - p: '7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed', - a: '-1', - c: '1', - // -121665 * (121666^(-1)) (mod P) - d: '52036cee2b6ffe73 8cc740797779e898 00700a4d4141d8ab 75eb4dca135978a3', - n: '1000000000000000 0000000000000000 14def9dea2f79cd6 5812631a5cf5d3ed', - hash: hash.sha256, - gRed: false, - g: [ - '216936d3cd6e53fec0a4e231fdd6dc5c692cc7609525a7b2c9562d608f25d51a', - - // 4/5 - '6666666666666666666666666666666666666666666666666666666666666658' - ] -}); - -var pre; -try { - pre = require('./precomputed/secp256k1'); -} catch (e) { - pre = undefined; -} - -defineCurve('secp256k1', { - type: 'short', - prime: 'k256', - p: 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f', - a: '0', - b: '7', - n: 'ffffffff ffffffff ffffffff fffffffe baaedce6 af48a03b bfd25e8c d0364141', - h: '1', - hash: hash.sha256, - - // Precomputed endomorphism - beta: '7ae96a2b657c07106e64479eac3434e99cf0497512f58995c1396c28719501ee', - lambda: '5363ad4cc05c30e0a5261c028812645a122e22ea20816678df02967c1b23bd72', - basis: [ - { - a: '3086d221a7d46bcde86c90e49284eb15', - b: '-e4437ed6010e88286f547fa90abfe4c3' - }, - { - a: '114ca50f7a8e2f3f657c1108d9d44cfd8', - b: '3086d221a7d46bcde86c90e49284eb15' - } - ], - - gRed: false, - g: [ - '79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798', - '483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b8', - pre - ] -}); - -},{"hash.js":"fVGI","./curve":"P4Ml","./utils":"F8Ez","./precomputed/secp256k1":"khx4"}],"vdhc":[function(require,module,exports) { -'use strict'; - -var hash = require('hash.js'); -var utils = require('minimalistic-crypto-utils'); -var assert = require('minimalistic-assert'); - -function HmacDRBG(options) { - if (!(this instanceof HmacDRBG)) - return new HmacDRBG(options); - this.hash = options.hash; - this.predResist = !!options.predResist; - - this.outLen = this.hash.outSize; - this.minEntropy = options.minEntropy || this.hash.hmacStrength; - - this._reseed = null; - this.reseedInterval = null; - this.K = null; - this.V = null; - - var entropy = utils.toArray(options.entropy, options.entropyEnc || 'hex'); - var nonce = utils.toArray(options.nonce, options.nonceEnc || 'hex'); - var pers = utils.toArray(options.pers, options.persEnc || 'hex'); - assert(entropy.length >= (this.minEntropy / 8), - 'Not enough entropy. Minimum is: ' + this.minEntropy + ' bits'); - this._init(entropy, nonce, pers); -} -module.exports = HmacDRBG; - -HmacDRBG.prototype._init = function init(entropy, nonce, pers) { - var seed = entropy.concat(nonce).concat(pers); - - this.K = new Array(this.outLen / 8); - this.V = new Array(this.outLen / 8); - for (var i = 0; i < this.V.length; i++) { - this.K[i] = 0x00; - this.V[i] = 0x01; - } - - this._update(seed); - this._reseed = 1; - this.reseedInterval = 0x1000000000000; // 2^48 -}; - -HmacDRBG.prototype._hmac = function hmac() { - return new hash.hmac(this.hash, this.K); -}; - -HmacDRBG.prototype._update = function update(seed) { - var kmac = this._hmac() - .update(this.V) - .update([ 0x00 ]); - if (seed) - kmac = kmac.update(seed); - this.K = kmac.digest(); - this.V = this._hmac().update(this.V).digest(); - if (!seed) - return; - - this.K = this._hmac() - .update(this.V) - .update([ 0x01 ]) - .update(seed) - .digest(); - this.V = this._hmac().update(this.V).digest(); -}; - -HmacDRBG.prototype.reseed = function reseed(entropy, entropyEnc, add, addEnc) { - // Optional entropy enc - if (typeof entropyEnc !== 'string') { - addEnc = add; - add = entropyEnc; - entropyEnc = null; - } - - entropy = utils.toArray(entropy, entropyEnc); - add = utils.toArray(add, addEnc); - - assert(entropy.length >= (this.minEntropy / 8), - 'Not enough entropy. Minimum is: ' + this.minEntropy + ' bits'); - - this._update(entropy.concat(add || [])); - this._reseed = 1; -}; - -HmacDRBG.prototype.generate = function generate(len, enc, add, addEnc) { - if (this._reseed > this.reseedInterval) - throw new Error('Reseed is required'); - - // Optional encoding - if (typeof enc !== 'string') { - addEnc = add; - add = enc; - enc = null; - } - - // Optional additional data - if (add) { - add = utils.toArray(add, addEnc || 'hex'); - this._update(add); - } - - var temp = []; - while (temp.length < len) { - this.V = this._hmac().update(this.V).digest(); - temp = temp.concat(this.V); - } - - var res = temp.slice(0, len); - this._update(add); - this._reseed++; - return utils.encode(res, enc); -}; - -},{"hash.js":"fVGI","minimalistic-crypto-utils":"vl2S","minimalistic-assert":"MpuC"}],"YPk7":[function(require,module,exports) { -'use strict'; - -var BN = require('bn.js'); -var utils = require('../utils'); -var assert = utils.assert; - -function KeyPair(ec, options) { - this.ec = ec; - this.priv = null; - this.pub = null; - - // KeyPair(ec, { priv: ..., pub: ... }) - if (options.priv) - this._importPrivate(options.priv, options.privEnc); - if (options.pub) - this._importPublic(options.pub, options.pubEnc); -} -module.exports = KeyPair; - -KeyPair.fromPublic = function fromPublic(ec, pub, enc) { - if (pub instanceof KeyPair) - return pub; - - return new KeyPair(ec, { - pub: pub, - pubEnc: enc - }); -}; - -KeyPair.fromPrivate = function fromPrivate(ec, priv, enc) { - if (priv instanceof KeyPair) - return priv; - - return new KeyPair(ec, { - priv: priv, - privEnc: enc - }); -}; - -KeyPair.prototype.validate = function validate() { - var pub = this.getPublic(); - - if (pub.isInfinity()) - return { result: false, reason: 'Invalid public key' }; - if (!pub.validate()) - return { result: false, reason: 'Public key is not a point' }; - if (!pub.mul(this.ec.curve.n).isInfinity()) - return { result: false, reason: 'Public key * N != O' }; - - return { result: true, reason: null }; -}; - -KeyPair.prototype.getPublic = function getPublic(compact, enc) { - // compact is optional argument - if (typeof compact === 'string') { - enc = compact; - compact = null; - } - - if (!this.pub) - this.pub = this.ec.g.mul(this.priv); - - if (!enc) - return this.pub; - - return this.pub.encode(enc, compact); -}; - -KeyPair.prototype.getPrivate = function getPrivate(enc) { - if (enc === 'hex') - return this.priv.toString(16, 2); - else - return this.priv; -}; - -KeyPair.prototype._importPrivate = function _importPrivate(key, enc) { - this.priv = new BN(key, enc || 16); - - // Ensure that the priv won't be bigger than n, otherwise we may fail - // in fixed multiplication method - this.priv = this.priv.umod(this.ec.curve.n); -}; - -KeyPair.prototype._importPublic = function _importPublic(key, enc) { - if (key.x || key.y) { - // Montgomery points only have an `x` coordinate. - // Weierstrass/Edwards points on the other hand have both `x` and - // `y` coordinates. - if (this.ec.curve.type === 'mont') { - assert(key.x, 'Need x coordinate'); - } else if (this.ec.curve.type === 'short' || - this.ec.curve.type === 'edwards') { - assert(key.x && key.y, 'Need both x and y coordinate'); - } - this.pub = this.ec.curve.point(key.x, key.y); - return; - } - this.pub = this.ec.curve.decodePoint(key, enc); -}; - -// ECDH -KeyPair.prototype.derive = function derive(pub) { - return pub.mul(this.priv).getX(); -}; - -// ECDSA -KeyPair.prototype.sign = function sign(msg, enc, options) { - return this.ec.sign(msg, this, enc, options); -}; - -KeyPair.prototype.verify = function verify(msg, signature) { - return this.ec.verify(msg, signature, this); -}; - -KeyPair.prototype.inspect = function inspect() { - return ''; -}; - -},{"bn.js":"BOxy","../utils":"F8Ez"}],"g9QR":[function(require,module,exports) { -'use strict'; - -var BN = require('bn.js'); - -var utils = require('../utils'); -var assert = utils.assert; - -function Signature(options, enc) { - if (options instanceof Signature) - return options; - - if (this._importDER(options, enc)) - return; - - assert(options.r && options.s, 'Signature without r or s'); - this.r = new BN(options.r, 16); - this.s = new BN(options.s, 16); - if (options.recoveryParam === undefined) - this.recoveryParam = null; - else - this.recoveryParam = options.recoveryParam; -} -module.exports = Signature; - -function Position() { - this.place = 0; -} - -function getLength(buf, p) { - var initial = buf[p.place++]; - if (!(initial & 0x80)) { - return initial; - } - var octetLen = initial & 0xf; - var val = 0; - for (var i = 0, off = p.place; i < octetLen; i++, off++) { - val <<= 8; - val |= buf[off]; - } - p.place = off; - return val; -} - -function rmPadding(buf) { - var i = 0; - var len = buf.length - 1; - while (!buf[i] && !(buf[i + 1] & 0x80) && i < len) { - i++; - } - if (i === 0) { - return buf; - } - return buf.slice(i); -} - -Signature.prototype._importDER = function _importDER(data, enc) { - data = utils.toArray(data, enc); - var p = new Position(); - if (data[p.place++] !== 0x30) { - return false; - } - var len = getLength(data, p); - if ((len + p.place) !== data.length) { - return false; - } - if (data[p.place++] !== 0x02) { - return false; - } - var rlen = getLength(data, p); - var r = data.slice(p.place, rlen + p.place); - p.place += rlen; - if (data[p.place++] !== 0x02) { - return false; - } - var slen = getLength(data, p); - if (data.length !== slen + p.place) { - return false; - } - var s = data.slice(p.place, slen + p.place); - if (r[0] === 0 && (r[1] & 0x80)) { - r = r.slice(1); - } - if (s[0] === 0 && (s[1] & 0x80)) { - s = s.slice(1); - } - - this.r = new BN(r); - this.s = new BN(s); - this.recoveryParam = null; - - return true; -}; - -function constructLength(arr, len) { - if (len < 0x80) { - arr.push(len); - return; - } - var octets = 1 + (Math.log(len) / Math.LN2 >>> 3); - arr.push(octets | 0x80); - while (--octets) { - arr.push((len >>> (octets << 3)) & 0xff); - } - arr.push(len); -} - -Signature.prototype.toDER = function toDER(enc) { - var r = this.r.toArray(); - var s = this.s.toArray(); - - // Pad values - if (r[0] & 0x80) - r = [ 0 ].concat(r); - // Pad values - if (s[0] & 0x80) - s = [ 0 ].concat(s); - - r = rmPadding(r); - s = rmPadding(s); - - while (!s[0] && !(s[1] & 0x80)) { - s = s.slice(1); - } - var arr = [ 0x02 ]; - constructLength(arr, r.length); - arr = arr.concat(r); - arr.push(0x02); - constructLength(arr, s.length); - var backHalf = arr.concat(s); - var res = [ 0x30 ]; - constructLength(res, backHalf.length); - res = res.concat(backHalf); - return utils.encode(res, enc); -}; - -},{"bn.js":"BOxy","../utils":"F8Ez"}],"Ly8t":[function(require,module,exports) { -'use strict'; - -var BN = require('bn.js'); -var HmacDRBG = require('hmac-drbg'); -var utils = require('../utils'); -var curves = require('../curves'); -var rand = require('brorand'); -var assert = utils.assert; - -var KeyPair = require('./key'); -var Signature = require('./signature'); - -function EC(options) { - if (!(this instanceof EC)) - return new EC(options); - - // Shortcut `elliptic.ec(curve-name)` - if (typeof options === 'string') { - assert(curves.hasOwnProperty(options), 'Unknown curve ' + options); - - options = curves[options]; - } - - // Shortcut for `elliptic.ec(elliptic.curves.curveName)` - if (options instanceof curves.PresetCurve) - options = { curve: options }; - - this.curve = options.curve.curve; - this.n = this.curve.n; - this.nh = this.n.ushrn(1); - this.g = this.curve.g; - - // Point on curve - this.g = options.curve.g; - this.g.precompute(options.curve.n.bitLength() + 1); - - // Hash for function for DRBG - this.hash = options.hash || options.curve.hash; -} -module.exports = EC; - -EC.prototype.keyPair = function keyPair(options) { - return new KeyPair(this, options); -}; - -EC.prototype.keyFromPrivate = function keyFromPrivate(priv, enc) { - return KeyPair.fromPrivate(this, priv, enc); -}; - -EC.prototype.keyFromPublic = function keyFromPublic(pub, enc) { - return KeyPair.fromPublic(this, pub, enc); -}; - -EC.prototype.genKeyPair = function genKeyPair(options) { - if (!options) - options = {}; - - // Instantiate Hmac_DRBG - var drbg = new HmacDRBG({ - hash: this.hash, - pers: options.pers, - persEnc: options.persEnc || 'utf8', - entropy: options.entropy || rand(this.hash.hmacStrength), - entropyEnc: options.entropy && options.entropyEnc || 'utf8', - nonce: this.n.toArray() - }); - - var bytes = this.n.byteLength(); - var ns2 = this.n.sub(new BN(2)); - do { - var priv = new BN(drbg.generate(bytes)); - if (priv.cmp(ns2) > 0) - continue; - - priv.iaddn(1); - return this.keyFromPrivate(priv); - } while (true); -}; - -EC.prototype._truncateToN = function truncateToN(msg, truncOnly) { - var delta = msg.byteLength() * 8 - this.n.bitLength(); - if (delta > 0) - msg = msg.ushrn(delta); - if (!truncOnly && msg.cmp(this.n) >= 0) - return msg.sub(this.n); - else - return msg; -}; - -EC.prototype.sign = function sign(msg, key, enc, options) { - if (typeof enc === 'object') { - options = enc; - enc = null; - } - if (!options) - options = {}; - - key = this.keyFromPrivate(key, enc); - msg = this._truncateToN(new BN(msg, 16)); - - // Zero-extend key to provide enough entropy - var bytes = this.n.byteLength(); - var bkey = key.getPrivate().toArray('be', bytes); - - // Zero-extend nonce to have the same byte size as N - var nonce = msg.toArray('be', bytes); - - // Instantiate Hmac_DRBG - var drbg = new HmacDRBG({ - hash: this.hash, - entropy: bkey, - nonce: nonce, - pers: options.pers, - persEnc: options.persEnc || 'utf8' - }); - - // Number of bytes to generate - var ns1 = this.n.sub(new BN(1)); - - for (var iter = 0; true; iter++) { - var k = options.k ? - options.k(iter) : - new BN(drbg.generate(this.n.byteLength())); - k = this._truncateToN(k, true); - if (k.cmpn(1) <= 0 || k.cmp(ns1) >= 0) - continue; - - var kp = this.g.mul(k); - if (kp.isInfinity()) - continue; - - var kpX = kp.getX(); - var r = kpX.umod(this.n); - if (r.cmpn(0) === 0) - continue; - - var s = k.invm(this.n).mul(r.mul(key.getPrivate()).iadd(msg)); - s = s.umod(this.n); - if (s.cmpn(0) === 0) - continue; - - var recoveryParam = (kp.getY().isOdd() ? 1 : 0) | - (kpX.cmp(r) !== 0 ? 2 : 0); - - // Use complement of `s`, if it is > `n / 2` - if (options.canonical && s.cmp(this.nh) > 0) { - s = this.n.sub(s); - recoveryParam ^= 1; - } - - return new Signature({ r: r, s: s, recoveryParam: recoveryParam }); - } -}; - -EC.prototype.verify = function verify(msg, signature, key, enc) { - msg = this._truncateToN(new BN(msg, 16)); - key = this.keyFromPublic(key, enc); - signature = new Signature(signature, 'hex'); - - // Perform primitive values validation - var r = signature.r; - var s = signature.s; - if (r.cmpn(1) < 0 || r.cmp(this.n) >= 0) - return false; - if (s.cmpn(1) < 0 || s.cmp(this.n) >= 0) - return false; - - // Validate signature - var sinv = s.invm(this.n); - var u1 = sinv.mul(msg).umod(this.n); - var u2 = sinv.mul(r).umod(this.n); - - if (!this.curve._maxwellTrick) { - var p = this.g.mulAdd(u1, key.getPublic(), u2); - if (p.isInfinity()) - return false; - - return p.getX().umod(this.n).cmp(r) === 0; - } - - // NOTE: Greg Maxwell's trick, inspired by: - // https://git.io/vad3K - - var p = this.g.jmulAdd(u1, key.getPublic(), u2); - if (p.isInfinity()) - return false; - - // Compare `p.x` of Jacobian point with `r`, - // this will do `p.x == r * p.z^2` instead of multiplying `p.x` by the - // inverse of `p.z^2` - return p.eqXToP(r); -}; - -EC.prototype.recoverPubKey = function(msg, signature, j, enc) { - assert((3 & j) === j, 'The recovery param is more than two bits'); - signature = new Signature(signature, enc); - - var n = this.n; - var e = new BN(msg); - var r = signature.r; - var s = signature.s; - - // A set LSB signifies that the y-coordinate is odd - var isYOdd = j & 1; - var isSecondKey = j >> 1; - if (r.cmp(this.curve.p.umod(this.curve.n)) >= 0 && isSecondKey) - throw new Error('Unable to find sencond key candinate'); - - // 1.1. Let x = r + jn. - if (isSecondKey) - r = this.curve.pointFromX(r.add(this.curve.n), isYOdd); - else - r = this.curve.pointFromX(r, isYOdd); - - var rInv = signature.r.invm(n); - var s1 = n.sub(e).mul(rInv).umod(n); - var s2 = s.mul(rInv).umod(n); - - // 1.6.1 Compute Q = r^-1 (sR - eG) - // Q = r^-1 (sR + -eG) - return this.g.mulAdd(s1, r, s2); -}; - -EC.prototype.getKeyRecoveryParam = function(e, signature, Q, enc) { - signature = new Signature(signature, enc); - if (signature.recoveryParam !== null) - return signature.recoveryParam; - - for (var i = 0; i < 4; i++) { - var Qprime; - try { - Qprime = this.recoverPubKey(e, signature, i); - } catch (e) { - continue; - } - - if (Qprime.eq(Q)) - return i; - } - throw new Error('Unable to find valid recovery factor'); -}; - -},{"bn.js":"BOxy","hmac-drbg":"vdhc","../utils":"F8Ez","../curves":"ExaX","brorand":"e03B","./key":"YPk7","./signature":"g9QR"}],"mg26":[function(require,module,exports) { -'use strict'; - -var utils = require('../utils'); -var assert = utils.assert; -var parseBytes = utils.parseBytes; -var cachedProperty = utils.cachedProperty; - -/** -* @param {EDDSA} eddsa - instance -* @param {Object} params - public/private key parameters -* -* @param {Array} [params.secret] - secret seed bytes -* @param {Point} [params.pub] - public key point (aka `A` in eddsa terms) -* @param {Array} [params.pub] - public key point encoded as bytes -* -*/ -function KeyPair(eddsa, params) { - this.eddsa = eddsa; - this._secret = parseBytes(params.secret); - if (eddsa.isPoint(params.pub)) - this._pub = params.pub; - else - this._pubBytes = parseBytes(params.pub); -} - -KeyPair.fromPublic = function fromPublic(eddsa, pub) { - if (pub instanceof KeyPair) - return pub; - return new KeyPair(eddsa, { pub: pub }); -}; - -KeyPair.fromSecret = function fromSecret(eddsa, secret) { - if (secret instanceof KeyPair) - return secret; - return new KeyPair(eddsa, { secret: secret }); -}; - -KeyPair.prototype.secret = function secret() { - return this._secret; -}; - -cachedProperty(KeyPair, 'pubBytes', function pubBytes() { - return this.eddsa.encodePoint(this.pub()); -}); - -cachedProperty(KeyPair, 'pub', function pub() { - if (this._pubBytes) - return this.eddsa.decodePoint(this._pubBytes); - return this.eddsa.g.mul(this.priv()); -}); - -cachedProperty(KeyPair, 'privBytes', function privBytes() { - var eddsa = this.eddsa; - var hash = this.hash(); - var lastIx = eddsa.encodingLength - 1; - - var a = hash.slice(0, eddsa.encodingLength); - a[0] &= 248; - a[lastIx] &= 127; - a[lastIx] |= 64; - - return a; -}); - -cachedProperty(KeyPair, 'priv', function priv() { - return this.eddsa.decodeInt(this.privBytes()); -}); - -cachedProperty(KeyPair, 'hash', function hash() { - return this.eddsa.hash().update(this.secret()).digest(); -}); - -cachedProperty(KeyPair, 'messagePrefix', function messagePrefix() { - return this.hash().slice(this.eddsa.encodingLength); -}); - -KeyPair.prototype.sign = function sign(message) { - assert(this._secret, 'KeyPair can only verify'); - return this.eddsa.sign(message, this); -}; - -KeyPair.prototype.verify = function verify(message, sig) { - return this.eddsa.verify(message, sig, this); -}; - -KeyPair.prototype.getSecret = function getSecret(enc) { - assert(this._secret, 'KeyPair is public only'); - return utils.encode(this.secret(), enc); -}; - -KeyPair.prototype.getPublic = function getPublic(enc) { - return utils.encode(this.pubBytes(), enc); -}; - -module.exports = KeyPair; - -},{"../utils":"F8Ez"}],"p5it":[function(require,module,exports) { -'use strict'; - -var BN = require('bn.js'); -var utils = require('../utils'); -var assert = utils.assert; -var cachedProperty = utils.cachedProperty; -var parseBytes = utils.parseBytes; - -/** -* @param {EDDSA} eddsa - eddsa instance -* @param {Array|Object} sig - -* @param {Array|Point} [sig.R] - R point as Point or bytes -* @param {Array|bn} [sig.S] - S scalar as bn or bytes -* @param {Array} [sig.Rencoded] - R point encoded -* @param {Array} [sig.Sencoded] - S scalar encoded -*/ -function Signature(eddsa, sig) { - this.eddsa = eddsa; - - if (typeof sig !== 'object') - sig = parseBytes(sig); - - if (Array.isArray(sig)) { - sig = { - R: sig.slice(0, eddsa.encodingLength), - S: sig.slice(eddsa.encodingLength) - }; - } - - assert(sig.R && sig.S, 'Signature without R or S'); - - if (eddsa.isPoint(sig.R)) - this._R = sig.R; - if (sig.S instanceof BN) - this._S = sig.S; - - this._Rencoded = Array.isArray(sig.R) ? sig.R : sig.Rencoded; - this._Sencoded = Array.isArray(sig.S) ? sig.S : sig.Sencoded; -} - -cachedProperty(Signature, 'S', function S() { - return this.eddsa.decodeInt(this.Sencoded()); -}); - -cachedProperty(Signature, 'R', function R() { - return this.eddsa.decodePoint(this.Rencoded()); -}); - -cachedProperty(Signature, 'Rencoded', function Rencoded() { - return this.eddsa.encodePoint(this.R()); -}); - -cachedProperty(Signature, 'Sencoded', function Sencoded() { - return this.eddsa.encodeInt(this.S()); -}); - -Signature.prototype.toBytes = function toBytes() { - return this.Rencoded().concat(this.Sencoded()); -}; - -Signature.prototype.toHex = function toHex() { - return utils.encode(this.toBytes(), 'hex').toUpperCase(); -}; - -module.exports = Signature; - -},{"bn.js":"BOxy","../utils":"F8Ez"}],"a3LM":[function(require,module,exports) { -'use strict'; - -var hash = require('hash.js'); -var curves = require('../curves'); -var utils = require('../utils'); -var assert = utils.assert; -var parseBytes = utils.parseBytes; -var KeyPair = require('./key'); -var Signature = require('./signature'); - -function EDDSA(curve) { - assert(curve === 'ed25519', 'only tested with ed25519 so far'); - - if (!(this instanceof EDDSA)) - return new EDDSA(curve); - - var curve = curves[curve].curve; - this.curve = curve; - this.g = curve.g; - this.g.precompute(curve.n.bitLength() + 1); - - this.pointClass = curve.point().constructor; - this.encodingLength = Math.ceil(curve.n.bitLength() / 8); - this.hash = hash.sha512; -} - -module.exports = EDDSA; - -/** -* @param {Array|String} message - message bytes -* @param {Array|String|KeyPair} secret - secret bytes or a keypair -* @returns {Signature} - signature -*/ -EDDSA.prototype.sign = function sign(message, secret) { - message = parseBytes(message); - var key = this.keyFromSecret(secret); - var r = this.hashInt(key.messagePrefix(), message); - var R = this.g.mul(r); - var Rencoded = this.encodePoint(R); - var s_ = this.hashInt(Rencoded, key.pubBytes(), message) - .mul(key.priv()); - var S = r.add(s_).umod(this.curve.n); - return this.makeSignature({ R: R, S: S, Rencoded: Rencoded }); -}; - -/** -* @param {Array} message - message bytes -* @param {Array|String|Signature} sig - sig bytes -* @param {Array|String|Point|KeyPair} pub - public key -* @returns {Boolean} - true if public key matches sig of message -*/ -EDDSA.prototype.verify = function verify(message, sig, pub) { - message = parseBytes(message); - sig = this.makeSignature(sig); - var key = this.keyFromPublic(pub); - var h = this.hashInt(sig.Rencoded(), key.pubBytes(), message); - var SG = this.g.mul(sig.S()); - var RplusAh = sig.R().add(key.pub().mul(h)); - return RplusAh.eq(SG); -}; - -EDDSA.prototype.hashInt = function hashInt() { - var hash = this.hash(); - for (var i = 0; i < arguments.length; i++) - hash.update(arguments[i]); - return utils.intFromLE(hash.digest()).umod(this.curve.n); -}; - -EDDSA.prototype.keyFromPublic = function keyFromPublic(pub) { - return KeyPair.fromPublic(this, pub); -}; - -EDDSA.prototype.keyFromSecret = function keyFromSecret(secret) { - return KeyPair.fromSecret(this, secret); -}; - -EDDSA.prototype.makeSignature = function makeSignature(sig) { - if (sig instanceof Signature) - return sig; - return new Signature(this, sig); -}; - -/** -* * https://tools.ietf.org/html/draft-josefsson-eddsa-ed25519-03#section-5.2 -* -* EDDSA defines methods for encoding and decoding points and integers. These are -* helper convenience methods, that pass along to utility functions implied -* parameters. -* -*/ -EDDSA.prototype.encodePoint = function encodePoint(point) { - var enc = point.getY().toArray('le', this.encodingLength); - enc[this.encodingLength - 1] |= point.getX().isOdd() ? 0x80 : 0; - return enc; -}; - -EDDSA.prototype.decodePoint = function decodePoint(bytes) { - bytes = utils.parseBytes(bytes); - - var lastIx = bytes.length - 1; - var normed = bytes.slice(0, lastIx).concat(bytes[lastIx] & ~0x80); - var xIsOdd = (bytes[lastIx] & 0x80) !== 0; - - var y = utils.intFromLE(normed); - return this.curve.pointFromY(y, xIsOdd); -}; - -EDDSA.prototype.encodeInt = function encodeInt(num) { - return num.toArray('le', this.encodingLength); -}; - -EDDSA.prototype.decodeInt = function decodeInt(bytes) { - return utils.intFromLE(bytes); -}; - -EDDSA.prototype.isPoint = function isPoint(val) { - return val instanceof this.pointClass; -}; - -},{"hash.js":"fVGI","../curves":"ExaX","../utils":"F8Ez","./key":"mg26","./signature":"p5it"}],"xha3":[function(require,module,exports) { -'use strict'; - -var elliptic = exports; - -elliptic.version = require('../package.json').version; -elliptic.utils = require('./elliptic/utils'); -elliptic.rand = require('brorand'); -elliptic.curve = require('./elliptic/curve'); -elliptic.curves = require('./elliptic/curves'); - -// Protocols -elliptic.ec = require('./elliptic/ec'); -elliptic.eddsa = require('./elliptic/eddsa'); - -},{"../package.json":"bNi7","./elliptic/utils":"F8Ez","brorand":"e03B","./elliptic/curve":"P4Ml","./elliptic/curves":"ExaX","./elliptic/ec":"Ly8t","./elliptic/eddsa":"a3LM"}],"TM1d":[function(require,module,exports) { -var Buffer = require("buffer").Buffer; -var createHmac = require('create-hmac'); - -var ONE1 = Buffer.alloc(1, 1); -var ZERO1 = Buffer.alloc(1, 0); // https://tools.ietf.org/html/rfc6979#section-3.2 - -function deterministicGenerateK(hash, x, checkSig, isPrivate, extraEntropy) { - // Step A, ignored as hash already provided - // Step B - // Step C - var k = Buffer.alloc(32, 0); - var v = Buffer.alloc(32, 1); // Step D - - k = createHmac('sha256', k).update(v).update(ZERO1).update(x).update(hash).update(extraEntropy || '').digest(); // Step E - - v = createHmac('sha256', k).update(v).digest(); // Step F - - k = createHmac('sha256', k).update(v).update(ONE1).update(x).update(hash).update(extraEntropy || '').digest(); // Step G - - v = createHmac('sha256', k).update(v).digest(); // Step H1/H2a, ignored as tlen === qlen (256 bit) - // Step H2b - - v = createHmac('sha256', k).update(v).digest(); - var T = v; // Step H3, repeat until T is within the interval [1, n - 1] and is suitable for ECDSA - - while (!isPrivate(T) || !checkSig(T)) { - k = createHmac('sha256', k).update(v).update(ZERO1).digest(); - v = createHmac('sha256', k).update(v).digest(); // Step H1/H2a, again, ignored as tlen === qlen (256 bit) - // Step H2b again - - v = createHmac('sha256', k).update(v).digest(); - T = v; - } - - return T; -} - -module.exports = deterministicGenerateK; -},{"create-hmac":"Cx6S","buffer":"dskh"}],"fCMY":[function(require,module,exports) { -var Buffer = require("buffer").Buffer; -var BN = require('bn.js'); - -var EC = require('elliptic').ec; - -var secp256k1 = new EC('secp256k1'); - -var deterministicGenerateK = require('./rfc6979'); - -var ZERO32 = Buffer.alloc(32, 0); -var EC_GROUP_ORDER = Buffer.from('fffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364141', 'hex'); -var EC_P = Buffer.from('fffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2f', 'hex'); -var n = secp256k1.curve.n; -var nDiv2 = n.shrn(1); -var G = secp256k1.curve.g; -var THROW_BAD_PRIVATE = 'Expected Private'; -var THROW_BAD_POINT = 'Expected Point'; -var THROW_BAD_TWEAK = 'Expected Tweak'; -var THROW_BAD_HASH = 'Expected Hash'; -var THROW_BAD_SIGNATURE = 'Expected Signature'; -var THROW_BAD_EXTRA_DATA = 'Expected Extra Data (32 bytes)'; - -function isScalar(x) { - return Buffer.isBuffer(x) && x.length === 32; -} - -function isOrderScalar(x) { - if (!isScalar(x)) return false; - return x.compare(EC_GROUP_ORDER) < 0; // < G -} - -function isPoint(p) { - if (!Buffer.isBuffer(p)) return false; - if (p.length < 33) return false; - var t = p[0]; - var x = p.slice(1, 33); - if (x.compare(ZERO32) === 0) return false; - if (x.compare(EC_P) >= 0) return false; - - if ((t === 0x02 || t === 0x03) && p.length === 33) { - try { - decodeFrom(p); - } catch (e) { - return false; - } // TODO: temporary - - - return true; - } - - var y = p.slice(33); - if (y.compare(ZERO32) === 0) return false; - if (y.compare(EC_P) >= 0) return false; - if (t === 0x04 && p.length === 65) return true; - return false; -} - -function __isPointCompressed(p) { - return p[0] !== 0x04; -} - -function isPointCompressed(p) { - if (!isPoint(p)) return false; - return __isPointCompressed(p); -} - -function isPrivate(x) { - if (!isScalar(x)) return false; - return x.compare(ZERO32) > 0 && // > 0 - x.compare(EC_GROUP_ORDER) < 0; // < G -} - -function isSignature(value) { - var r = value.slice(0, 32); - var s = value.slice(32, 64); - return Buffer.isBuffer(value) && value.length === 64 && r.compare(EC_GROUP_ORDER) < 0 && s.compare(EC_GROUP_ORDER) < 0; -} - -function assumeCompression(value, pubkey) { - if (value === undefined && pubkey !== undefined) return __isPointCompressed(pubkey); - if (value === undefined) return true; - return value; -} - -function fromBuffer(d) { - return new BN(d); -} - -function toBuffer(d) { - return d.toArrayLike(Buffer, 'be', 32); -} - -function decodeFrom(P) { - return secp256k1.curve.decodePoint(P); -} - -function getEncoded(P, compressed) { - return Buffer.from(P._encode(compressed)); -} - -function pointAdd(pA, pB, __compressed) { - if (!isPoint(pA)) throw new TypeError(THROW_BAD_POINT); - if (!isPoint(pB)) throw new TypeError(THROW_BAD_POINT); - var a = decodeFrom(pA); - var b = decodeFrom(pB); - var pp = a.add(b); - if (pp.isInfinity()) return null; - var compressed = assumeCompression(__compressed, pA); - return getEncoded(pp, compressed); -} - -function pointAddScalar(p, tweak, __compressed) { - if (!isPoint(p)) throw new TypeError(THROW_BAD_POINT); - if (!isOrderScalar(tweak)) throw new TypeError(THROW_BAD_TWEAK); - var compressed = assumeCompression(__compressed, p); - var pp = decodeFrom(p); - if (tweak.compare(ZERO32) === 0) return getEncoded(pp, compressed); - var tt = fromBuffer(tweak); - var qq = G.mul(tt); - var uu = pp.add(qq); - if (uu.isInfinity()) return null; - return getEncoded(uu, compressed); -} - -function pointCompress(p, compressed) { - if (!isPoint(p)) throw new TypeError(THROW_BAD_POINT); - var pp = decodeFrom(p); - if (pp.isInfinity()) throw new TypeError(THROW_BAD_POINT); - return getEncoded(pp, compressed); -} - -function pointFromScalar(d, __compressed) { - if (!isPrivate(d)) throw new TypeError(THROW_BAD_PRIVATE); - var dd = fromBuffer(d); - var pp = G.mul(dd); - if (pp.isInfinity()) return null; - var compressed = assumeCompression(__compressed); - return getEncoded(pp, compressed); -} - -function pointMultiply(p, tweak, __compressed) { - if (!isPoint(p)) throw new TypeError(THROW_BAD_POINT); - if (!isOrderScalar(tweak)) throw new TypeError(THROW_BAD_TWEAK); - var compressed = assumeCompression(__compressed, p); - var pp = decodeFrom(p); - var tt = fromBuffer(tweak); - var qq = pp.mul(tt); - if (qq.isInfinity()) return null; - return getEncoded(qq, compressed); -} - -function privateAdd(d, tweak) { - if (!isPrivate(d)) throw new TypeError(THROW_BAD_PRIVATE); - if (!isOrderScalar(tweak)) throw new TypeError(THROW_BAD_TWEAK); - var dd = fromBuffer(d); - var tt = fromBuffer(tweak); - var dt = toBuffer(dd.add(tt).umod(n)); - if (!isPrivate(dt)) return null; - return dt; -} - -function privateSub(d, tweak) { - if (!isPrivate(d)) throw new TypeError(THROW_BAD_PRIVATE); - if (!isOrderScalar(tweak)) throw new TypeError(THROW_BAD_TWEAK); - var dd = fromBuffer(d); - var tt = fromBuffer(tweak); - var dt = toBuffer(dd.sub(tt).umod(n)); - if (!isPrivate(dt)) return null; - return dt; -} - -function sign(hash, x) { - return __sign(hash, x); -} - -function signWithEntropy(hash, x, addData) { - return __sign(hash, x, addData); -} - -function __sign(hash, x, addData) { - if (!isScalar(hash)) throw new TypeError(THROW_BAD_HASH); - if (!isPrivate(x)) throw new TypeError(THROW_BAD_PRIVATE); - if (addData !== undefined && !isScalar(addData)) throw new TypeError(THROW_BAD_EXTRA_DATA); - var d = fromBuffer(x); - var e = fromBuffer(hash); - var r, s; - - var checkSig = function (k) { - var kI = fromBuffer(k); - var Q = G.mul(kI); - if (Q.isInfinity()) return false; - r = Q.x.umod(n); - if (r.isZero() === 0) return false; - s = kI.invm(n).mul(e.add(d.mul(r))).umod(n); - if (s.isZero() === 0) return false; - return true; - }; - - deterministicGenerateK(hash, x, checkSig, isPrivate, addData); // enforce low S values, see bip62: 'low s values in signatures' - - if (s.cmp(nDiv2) > 0) { - s = n.sub(s); - } - - var buffer = Buffer.allocUnsafe(64); - toBuffer(r).copy(buffer, 0); - toBuffer(s).copy(buffer, 32); - return buffer; -} - -function verify(hash, q, signature) { - if (!isScalar(hash)) throw new TypeError(THROW_BAD_HASH); - if (!isPoint(q)) throw new TypeError(THROW_BAD_POINT); // 1.4.1 Enforce r and s are both integers in the interval [1, n − 1] (1, isSignature enforces '< n - 1') - - if (!isSignature(signature)) throw new TypeError(THROW_BAD_SIGNATURE); - var Q = decodeFrom(q); - var r = fromBuffer(signature.slice(0, 32)); - var s = fromBuffer(signature.slice(32, 64)); // 1.4.1 Enforce r and s are both integers in the interval [1, n − 1] (2, enforces '> 0') - - if (r.gtn(0) <= 0 - /* || r.compareTo(n) >= 0 */ - ) return false; - if (s.gtn(0) <= 0 - /* || s.compareTo(n) >= 0 */ - ) return false; // 1.4.2 H = Hash(M), already done by the user - // 1.4.3 e = H - - var e = fromBuffer(hash); // Compute s^-1 - - var sInv = s.invm(n); // 1.4.4 Compute u1 = es^−1 mod n - // u2 = rs^−1 mod n - - var u1 = e.mul(sInv).umod(n); - var u2 = r.mul(sInv).umod(n); // 1.4.5 Compute R = (xR, yR) - // R = u1G + u2Q - - var R = G.mulAdd(u1, Q, u2); // 1.4.5 (cont.) Enforce R is not at infinity - - if (R.isInfinity()) return false; // 1.4.6 Convert the field element R.x to an integer - - var xR = R.x; // 1.4.7 Set v = xR mod n - - var v = xR.umod(n); // 1.4.8 If v = r, output "valid", and if v != r, output "invalid" - - return v.eq(r); -} - -module.exports = { - isPoint: isPoint, - isPointCompressed: isPointCompressed, - isPrivate: isPrivate, - pointAdd: pointAdd, - pointAddScalar: pointAddScalar, - pointCompress: pointCompress, - pointFromScalar: pointFromScalar, - pointMultiply: pointMultiply, - privateAdd: privateAdd, - privateSub: privateSub, - sign: sign, - signWithEntropy: signWithEntropy, - verify: verify -}; -},{"bn.js":"BOxy","elliptic":"xha3","./rfc6979":"TM1d","buffer":"dskh"}],"XRex":[function(require,module,exports) { -var types = { - Array: function (value) { return value !== null && value !== undefined && value.constructor === Array }, - Boolean: function (value) { return typeof value === 'boolean' }, - Function: function (value) { return typeof value === 'function' }, - Nil: function (value) { return value === undefined || value === null }, - Number: function (value) { return typeof value === 'number' }, - Object: function (value) { return typeof value === 'object' }, - String: function (value) { return typeof value === 'string' }, - '': function () { return true } -} - -// TODO: deprecate -types.Null = types.Nil - -for (var typeName in types) { - types[typeName].toJSON = function (t) { - return t - }.bind(null, typeName) -} - -module.exports = types - -},{}],"p5LL":[function(require,module,exports) { -var native = require('./native') - -function getTypeName (fn) { - return fn.name || fn.toString().match(/function (.*?)\s*\(/)[1] -} - -function getValueTypeName (value) { - return native.Nil(value) ? '' : getTypeName(value.constructor) -} - -function getValue (value) { - if (native.Function(value)) return '' - if (native.String(value)) return JSON.stringify(value) - if (value && native.Object(value)) return '' - return value -} - -function captureStackTrace (e, t) { - if (Error.captureStackTrace) { - Error.captureStackTrace(e, t) - } -} - -function tfJSON (type) { - if (native.Function(type)) return type.toJSON ? type.toJSON() : getTypeName(type) - if (native.Array(type)) return 'Array' - if (type && native.Object(type)) return 'Object' - - return type !== undefined ? type : '' -} - -function tfErrorString (type, value, valueTypeName) { - var valueJson = getValue(value) - - return 'Expected ' + tfJSON(type) + ', got' + - (valueTypeName !== '' ? ' ' + valueTypeName : '') + - (valueJson !== '' ? ' ' + valueJson : '') -} - -function TfTypeError (type, value, valueTypeName) { - valueTypeName = valueTypeName || getValueTypeName(value) - this.message = tfErrorString(type, value, valueTypeName) - - captureStackTrace(this, TfTypeError) - this.__type = type - this.__value = value - this.__valueTypeName = valueTypeName -} - -TfTypeError.prototype = Object.create(Error.prototype) -TfTypeError.prototype.constructor = TfTypeError - -function tfPropertyErrorString (type, label, name, value, valueTypeName) { - var description = '" of type ' - if (label === 'key') description = '" with key type ' - - return tfErrorString('property "' + tfJSON(name) + description + tfJSON(type), value, valueTypeName) -} - -function TfPropertyTypeError (type, property, label, value, valueTypeName) { - if (type) { - valueTypeName = valueTypeName || getValueTypeName(value) - this.message = tfPropertyErrorString(type, label, property, value, valueTypeName) - } else { - this.message = 'Unexpected property "' + property + '"' - } - - captureStackTrace(this, TfTypeError) - this.__label = label - this.__property = property - this.__type = type - this.__value = value - this.__valueTypeName = valueTypeName -} - -TfPropertyTypeError.prototype = Object.create(Error.prototype) -TfPropertyTypeError.prototype.constructor = TfTypeError - -function tfCustomError (expected, actual) { - return new TfTypeError(expected, {}, actual) -} - -function tfSubError (e, property, label) { - // sub child? - if (e instanceof TfPropertyTypeError) { - property = property + '.' + e.__property - - e = new TfPropertyTypeError( - e.__type, property, e.__label, e.__value, e.__valueTypeName - ) - - // child? - } else if (e instanceof TfTypeError) { - e = new TfPropertyTypeError( - e.__type, property, label, e.__value, e.__valueTypeName - ) - } - - captureStackTrace(e) - return e -} - -module.exports = { - TfTypeError: TfTypeError, - TfPropertyTypeError: TfPropertyTypeError, - tfCustomError: tfCustomError, - tfSubError: tfSubError, - tfJSON: tfJSON, - getValueTypeName: getValueTypeName -} - -},{"./native":"XRex"}],"hl3b":[function(require,module,exports) { -var Buffer = require("buffer").Buffer; -var NATIVE = require('./native') -var ERRORS = require('./errors') - -function _Buffer (value) { - return Buffer.isBuffer(value) -} - -function Hex (value) { - return typeof value === 'string' && /^([0-9a-f]{2})+$/i.test(value) -} - -function _LengthN (type, length) { - var name = type.toJSON() - - function Length (value) { - if (!type(value)) return false - if (value.length === length) return true - - throw ERRORS.tfCustomError(name + '(Length: ' + length + ')', name + '(Length: ' + value.length + ')') - } - Length.toJSON = function () { return name } - - return Length -} - -var _ArrayN = _LengthN.bind(null, NATIVE.Array) -var _BufferN = _LengthN.bind(null, _Buffer) -var _HexN = _LengthN.bind(null, Hex) -var _StringN = _LengthN.bind(null, NATIVE.String) - -function Range (a, b, f) { - f = f || NATIVE.Number - function _range (value, strict) { - return f(value, strict) && (value > a) && (value < b) - } - _range.toJSON = function () { - return `${f.toJSON()} between [${a}, ${b}]` - } - return _range -} - -var INT53_MAX = Math.pow(2, 53) - 1 - -function Finite (value) { - return typeof value === 'number' && isFinite(value) -} -function Int8 (value) { return ((value << 24) >> 24) === value } -function Int16 (value) { return ((value << 16) >> 16) === value } -function Int32 (value) { return (value | 0) === value } -function Int53 (value) { - return typeof value === 'number' && - value >= -INT53_MAX && - value <= INT53_MAX && - Math.floor(value) === value -} -function UInt8 (value) { return (value & 0xff) === value } -function UInt16 (value) { return (value & 0xffff) === value } -function UInt32 (value) { return (value >>> 0) === value } -function UInt53 (value) { - return typeof value === 'number' && - value >= 0 && - value <= INT53_MAX && - Math.floor(value) === value -} - -var types = { - ArrayN: _ArrayN, - Buffer: _Buffer, - BufferN: _BufferN, - Finite: Finite, - Hex: Hex, - HexN: _HexN, - Int8: Int8, - Int16: Int16, - Int32: Int32, - Int53: Int53, - Range: Range, - StringN: _StringN, - UInt8: UInt8, - UInt16: UInt16, - UInt32: UInt32, - UInt53: UInt53 -} - -for (var typeName in types) { - types[typeName].toJSON = function (t) { - return t - }.bind(null, typeName) -} - -module.exports = types - -},{"./native":"XRex","./errors":"p5LL","buffer":"dskh"}],"PKU7":[function(require,module,exports) { -var ERRORS = require('./errors') -var NATIVE = require('./native') - -// short-hand -var tfJSON = ERRORS.tfJSON -var TfTypeError = ERRORS.TfTypeError -var TfPropertyTypeError = ERRORS.TfPropertyTypeError -var tfSubError = ERRORS.tfSubError -var getValueTypeName = ERRORS.getValueTypeName - -var TYPES = { - arrayOf: function arrayOf (type, options) { - type = compile(type) - options = options || {} - - function _arrayOf (array, strict) { - if (!NATIVE.Array(array)) return false - if (NATIVE.Nil(array)) return false - if (options.minLength !== undefined && array.length < options.minLength) return false - if (options.maxLength !== undefined && array.length > options.maxLength) return false - if (options.length !== undefined && array.length !== options.length) return false - - return array.every(function (value, i) { - try { - return typeforce(type, value, strict) - } catch (e) { - throw tfSubError(e, i) - } - }) - } - _arrayOf.toJSON = function () { - var str = '[' + tfJSON(type) + ']' - if (options.length !== undefined) { - str += '{' + options.length + '}' - } else if (options.minLength !== undefined || options.maxLength !== undefined) { - str += '{' + - (options.minLength === undefined ? 0 : options.minLength) + ',' + - (options.maxLength === undefined ? Infinity : options.maxLength) + '}' - } - return str - } - - return _arrayOf - }, - - maybe: function maybe (type) { - type = compile(type) - - function _maybe (value, strict) { - return NATIVE.Nil(value) || type(value, strict, maybe) - } - _maybe.toJSON = function () { return '?' + tfJSON(type) } - - return _maybe - }, - - map: function map (propertyType, propertyKeyType) { - propertyType = compile(propertyType) - if (propertyKeyType) propertyKeyType = compile(propertyKeyType) - - function _map (value, strict) { - if (!NATIVE.Object(value)) return false - if (NATIVE.Nil(value)) return false - - for (var propertyName in value) { - try { - if (propertyKeyType) { - typeforce(propertyKeyType, propertyName, strict) - } - } catch (e) { - throw tfSubError(e, propertyName, 'key') - } - - try { - var propertyValue = value[propertyName] - typeforce(propertyType, propertyValue, strict) - } catch (e) { - throw tfSubError(e, propertyName) - } - } - - return true - } - - if (propertyKeyType) { - _map.toJSON = function () { - return '{' + tfJSON(propertyKeyType) + ': ' + tfJSON(propertyType) + '}' - } - } else { - _map.toJSON = function () { return '{' + tfJSON(propertyType) + '}' } - } - - return _map - }, - - object: function object (uncompiled) { - var type = {} - - for (var typePropertyName in uncompiled) { - type[typePropertyName] = compile(uncompiled[typePropertyName]) - } - - function _object (value, strict) { - if (!NATIVE.Object(value)) return false - if (NATIVE.Nil(value)) return false - - var propertyName - - try { - for (propertyName in type) { - var propertyType = type[propertyName] - var propertyValue = value[propertyName] - - typeforce(propertyType, propertyValue, strict) - } - } catch (e) { - throw tfSubError(e, propertyName) - } - - if (strict) { - for (propertyName in value) { - if (type[propertyName]) continue - - throw new TfPropertyTypeError(undefined, propertyName) - } - } - - return true - } - _object.toJSON = function () { return tfJSON(type) } - - return _object - }, - - anyOf: function anyOf () { - var types = [].slice.call(arguments).map(compile) - - function _anyOf (value, strict) { - return types.some(function (type) { - try { - return typeforce(type, value, strict) - } catch (e) { - return false - } - }) - } - _anyOf.toJSON = function () { return types.map(tfJSON).join('|') } - - return _anyOf - }, - - allOf: function allOf () { - var types = [].slice.call(arguments).map(compile) - - function _allOf (value, strict) { - return types.every(function (type) { - try { - return typeforce(type, value, strict) - } catch (e) { - return false - } - }) - } - _allOf.toJSON = function () { return types.map(tfJSON).join(' & ') } - - return _allOf - }, - - quacksLike: function quacksLike (type) { - function _quacksLike (value) { - return type === getValueTypeName(value) - } - _quacksLike.toJSON = function () { return type } - - return _quacksLike - }, - - tuple: function tuple () { - var types = [].slice.call(arguments).map(compile) - - function _tuple (values, strict) { - if (NATIVE.Nil(values)) return false - if (NATIVE.Nil(values.length)) return false - if (strict && (values.length !== types.length)) return false - - return types.every(function (type, i) { - try { - return typeforce(type, values[i], strict) - } catch (e) { - throw tfSubError(e, i) - } - }) - } - _tuple.toJSON = function () { return '(' + types.map(tfJSON).join(', ') + ')' } - - return _tuple - }, - - value: function value (expected) { - function _value (actual) { - return actual === expected - } - _value.toJSON = function () { return expected } - - return _value - } -} - -// TODO: deprecate -TYPES.oneOf = TYPES.anyOf - -function compile (type) { - if (NATIVE.String(type)) { - if (type[0] === '?') return TYPES.maybe(type.slice(1)) - - return NATIVE[type] || TYPES.quacksLike(type) - } else if (type && NATIVE.Object(type)) { - if (NATIVE.Array(type)) { - if (type.length !== 1) throw new TypeError('Expected compile() parameter of type Array of length 1') - return TYPES.arrayOf(type[0]) - } - - return TYPES.object(type) - } else if (NATIVE.Function(type)) { - return type - } - - return TYPES.value(type) -} - -function typeforce (type, value, strict, surrogate) { - if (NATIVE.Function(type)) { - if (type(value, strict)) return true - - throw new TfTypeError(surrogate || type, value) - } - - // JIT - return typeforce(compile(type), value, strict) -} - -// assign types to typeforce function -for (var typeName in NATIVE) { - typeforce[typeName] = NATIVE[typeName] -} - -for (typeName in TYPES) { - typeforce[typeName] = TYPES[typeName] -} - -var EXTRA = require('./extra') -for (typeName in EXTRA) { - typeforce[typeName] = EXTRA[typeName] -} - -typeforce.compile = compile -typeforce.TfTypeError = TfTypeError -typeforce.TfPropertyTypeError = TfPropertyTypeError - -module.exports = typeforce - -},{"./errors":"p5LL","./native":"XRex","./extra":"hl3b"}],"zCNS":[function(require,module,exports) { -var Buffer = require("buffer").Buffer; -var bs58check = require('bs58check') - -function decodeRaw (buffer, version) { - // check version only if defined - if (version !== undefined && buffer[0] !== version) throw new Error('Invalid network version') - - // uncompressed - if (buffer.length === 33) { - return { - version: buffer[0], - privateKey: buffer.slice(1, 33), - compressed: false - } - } - - // invalid length - if (buffer.length !== 34) throw new Error('Invalid WIF length') - - // invalid compression flag - if (buffer[33] !== 0x01) throw new Error('Invalid compression flag') - - return { - version: buffer[0], - privateKey: buffer.slice(1, 33), - compressed: true - } -} - -function encodeRaw (version, privateKey, compressed) { - var result = new Buffer(compressed ? 34 : 33) - - result.writeUInt8(version, 0) - privateKey.copy(result, 1) - - if (compressed) { - result[33] = 0x01 - } - - return result -} - -function decode (string, version) { - return decodeRaw(bs58check.decode(string), version) -} - -function encode (version, privateKey, compressed) { - if (typeof version === 'number') return bs58check.encode(encodeRaw(version, privateKey, compressed)) - - return bs58check.encode( - encodeRaw( - version.version, - version.privateKey, - version.compressed - ) - ) -} - -module.exports = { - decode: decode, - decodeRaw: decodeRaw, - encode: encode, - encodeRaw: encodeRaw -} - -},{"bs58check":"lJVR","buffer":"dskh"}],"iQbK":[function(require,module,exports) { -var Buffer = require("buffer").Buffer; -"use strict"; - -function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - -function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } - -function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; } - -Object.defineProperty(exports, "__esModule", { - value: true -}); - -var crypto = require("./crypto"); - -var bs58check = require('bs58check'); - -var ecc = require('tiny-secp256k1'); - -var typeforce = require('typeforce'); - -var wif = require('wif'); - -var UINT256_TYPE = typeforce.BufferN(32); -var NETWORK_TYPE = typeforce.compile({ - wif: typeforce.UInt8, - bip32: { - public: typeforce.UInt32, - private: typeforce.UInt32 - } -}); -var BITCOIN = { - wif: 0x80, - bip32: { - public: 0x0488b21e, - private: 0x0488ade4 - } -}; -var HIGHEST_BIT = 0x80000000; -var UINT31_MAX = Math.pow(2, 31) - 1; - -function BIP32Path(value) { - return typeforce.String(value) && value.match(/^(m\/)?(\d+'?\/)*\d+'?$/) !== null; -} - -function UInt31(value) { - return typeforce.UInt32(value) && value <= UINT31_MAX; -} - -var BIP32 = -/*#__PURE__*/ -function () { - function BIP32(__D, __Q, chainCode, network) { - var __DEPTH = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : 0; - - var __INDEX = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : 0; - - var __PARENT_FINGERPRINT = arguments.length > 6 && arguments[6] !== undefined ? arguments[6] : 0x00000000; - - _classCallCheck(this, BIP32); - - this.__D = __D; - this.__Q = __Q; - this.chainCode = chainCode; - this.network = network; - this.__DEPTH = __DEPTH; - this.__INDEX = __INDEX; - this.__PARENT_FINGERPRINT = __PARENT_FINGERPRINT; - typeforce(NETWORK_TYPE, network); - this.lowR = false; - } - - _createClass(BIP32, [{ - key: "isNeutered", - // Private === not neutered - // Public === neutered - value: function isNeutered() { - return this.__D === undefined; - } - }, { - key: "neutered", - value: function neutered() { - return fromPublicKeyLocal(this.publicKey, this.chainCode, this.network, this.depth, this.index, this.parentFingerprint); - } - }, { - key: "toBase58", - value: function toBase58() { - var network = this.network; - var version = !this.isNeutered() ? network.bip32.private : network.bip32.public; - var buffer = Buffer.allocUnsafe(78); // 4 bytes: version bytes - - buffer.writeUInt32BE(version, 0); // 1 byte: depth: 0x00 for master nodes, 0x01 for level-1 descendants, .... - - buffer.writeUInt8(this.depth, 4); // 4 bytes: the fingerprint of the parent's key (0x00000000 if master key) - - buffer.writeUInt32BE(this.parentFingerprint, 5); // 4 bytes: child number. This is the number i in xi = xpar/i, with xi the key being serialized. - // This is encoded in big endian. (0x00000000 if master key) - - buffer.writeUInt32BE(this.index, 9); // 32 bytes: the chain code - - this.chainCode.copy(buffer, 13); // 33 bytes: the public key or private key data - - if (!this.isNeutered()) { - // 0x00 + k for private keys - buffer.writeUInt8(0, 45); - this.privateKey.copy(buffer, 46); // 33 bytes: the public key - } else { - // X9.62 encoding for public keys - this.publicKey.copy(buffer, 45); - } - - return bs58check.encode(buffer); - } - }, { - key: "toWIF", - value: function toWIF() { - if (!this.privateKey) throw new TypeError('Missing private key'); - return wif.encode(this.network.wif, this.privateKey, true); - } // https://github.com/bitcoin/bips/blob/master/bip-0032.mediawiki#child-key-derivation-ckd-functions - - }, { - key: "derive", - value: function derive(index) { - typeforce(typeforce.UInt32, index); - var isHardened = index >= HIGHEST_BIT; - var data = Buffer.allocUnsafe(37); // Hardened child - - if (isHardened) { - if (this.isNeutered()) throw new TypeError('Missing private key for hardened child key'); // data = 0x00 || ser256(kpar) || ser32(index) - - data[0] = 0x00; - this.privateKey.copy(data, 1); - data.writeUInt32BE(index, 33); // Normal child - } else { - // data = serP(point(kpar)) || ser32(index) - // = serP(Kpar) || ser32(index) - this.publicKey.copy(data, 0); - data.writeUInt32BE(index, 33); - } - - var I = crypto.hmacSHA512(this.chainCode, data); - var IL = I.slice(0, 32); - var IR = I.slice(32); // if parse256(IL) >= n, proceed with the next value for i - - if (!ecc.isPrivate(IL)) return this.derive(index + 1); // Private parent key -> private child key - - var hd; - - if (!this.isNeutered()) { - // ki = parse256(IL) + kpar (mod n) - var ki = ecc.privateAdd(this.privateKey, IL); // In case ki == 0, proceed with the next value for i - - if (ki == null) return this.derive(index + 1); - hd = fromPrivateKeyLocal(ki, IR, this.network, this.depth + 1, index, this.fingerprint.readUInt32BE(0)); // Public parent key -> public child key - } else { - // Ki = point(parse256(IL)) + Kpar - // = G*IL + Kpar - var Ki = ecc.pointAddScalar(this.publicKey, IL, true); // In case Ki is the point at infinity, proceed with the next value for i - - if (Ki === null) return this.derive(index + 1); - hd = fromPublicKeyLocal(Ki, IR, this.network, this.depth + 1, index, this.fingerprint.readUInt32BE(0)); - } - - return hd; - } - }, { - key: "deriveHardened", - value: function deriveHardened(index) { - typeforce(UInt31, index); // Only derives hardened private keys by default - - return this.derive(index + HIGHEST_BIT); - } - }, { - key: "derivePath", - value: function derivePath(path) { - typeforce(BIP32Path, path); - var splitPath = path.split('/'); - - if (splitPath[0] === 'm') { - if (this.parentFingerprint) throw new TypeError('Expected master, got child'); - splitPath = splitPath.slice(1); - } - - return splitPath.reduce(function (prevHd, indexStr) { - var index; - - if (indexStr.slice(-1) === "'") { - index = parseInt(indexStr.slice(0, -1), 10); - return prevHd.deriveHardened(index); - } else { - index = parseInt(indexStr, 10); - return prevHd.derive(index); - } - }, this); - } - }, { - key: "sign", - value: function sign(hash, lowR) { - if (!this.privateKey) throw new Error('Missing private key'); - if (lowR === undefined) lowR = this.lowR; - - if (lowR === false) { - return ecc.sign(hash, this.privateKey); - } else { - var sig = ecc.sign(hash, this.privateKey); - var extraData = Buffer.alloc(32, 0); - var counter = 0; // if first try is lowR, skip the loop - // for second try and on, add extra entropy counting up - - while (sig[0] > 0x7f) { - counter++; - extraData.writeUIntLE(counter, 0, 6); - sig = ecc.signWithEntropy(hash, this.privateKey, extraData); - } - - return sig; - } - } - }, { - key: "verify", - value: function verify(hash, signature) { - return ecc.verify(hash, this.publicKey, signature); - } - }, { - key: "depth", - get: function () { - return this.__DEPTH; - } - }, { - key: "index", - get: function () { - return this.__INDEX; - } - }, { - key: "parentFingerprint", - get: function () { - return this.__PARENT_FINGERPRINT; - } - }, { - key: "publicKey", - get: function () { - if (this.__Q === undefined) this.__Q = ecc.pointFromScalar(this.__D, true); - return this.__Q; - } - }, { - key: "privateKey", - get: function () { - return this.__D; - } - }, { - key: "identifier", - get: function () { - return crypto.hash160(this.publicKey); - } - }, { - key: "fingerprint", - get: function () { - return this.identifier.slice(0, 4); - } - }]); - - return BIP32; -}(); - -function fromBase58(inString, network) { - var buffer = bs58check.decode(inString); - if (buffer.length !== 78) throw new TypeError('Invalid buffer length'); - network = network || BITCOIN; // 4 bytes: version bytes - - var version = buffer.readUInt32BE(0); - if (version !== network.bip32.private && version !== network.bip32.public) throw new TypeError('Invalid network version'); // 1 byte: depth: 0x00 for master nodes, 0x01 for level-1 descendants, ... - - var depth = buffer[4]; // 4 bytes: the fingerprint of the parent's key (0x00000000 if master key) - - var parentFingerprint = buffer.readUInt32BE(5); - - if (depth === 0) { - if (parentFingerprint !== 0x00000000) throw new TypeError('Invalid parent fingerprint'); - } // 4 bytes: child number. This is the number i in xi = xpar/i, with xi the key being serialized. - // This is encoded in MSB order. (0x00000000 if master key) - - - var index = buffer.readUInt32BE(9); - if (depth === 0 && index !== 0) throw new TypeError('Invalid index'); // 32 bytes: the chain code - - var chainCode = buffer.slice(13, 45); - var hd; // 33 bytes: private key data (0x00 + k) - - if (version === network.bip32.private) { - if (buffer.readUInt8(45) !== 0x00) throw new TypeError('Invalid private key'); - var k = buffer.slice(46, 78); - hd = fromPrivateKeyLocal(k, chainCode, network, depth, index, parentFingerprint); // 33 bytes: public key data (0x02 + X or 0x03 + X) - } else { - var X = buffer.slice(45, 78); - hd = fromPublicKeyLocal(X, chainCode, network, depth, index, parentFingerprint); - } - - return hd; -} - -exports.fromBase58 = fromBase58; - -function fromPrivateKey(privateKey, chainCode, network) { - return fromPrivateKeyLocal(privateKey, chainCode, network); -} - -exports.fromPrivateKey = fromPrivateKey; - -function fromPrivateKeyLocal(privateKey, chainCode, network, depth, index, parentFingerprint) { - typeforce({ - privateKey: UINT256_TYPE, - chainCode: UINT256_TYPE - }, { - privateKey: privateKey, - chainCode: chainCode - }); - network = network || BITCOIN; - if (!ecc.isPrivate(privateKey)) throw new TypeError('Private key not in range [1, n)'); - return new BIP32(privateKey, undefined, chainCode, network, depth, index, parentFingerprint); -} - -function fromPublicKey(publicKey, chainCode, network) { - return fromPublicKeyLocal(publicKey, chainCode, network); -} - -exports.fromPublicKey = fromPublicKey; - -function fromPublicKeyLocal(publicKey, chainCode, network, depth, index, parentFingerprint) { - typeforce({ - publicKey: typeforce.BufferN(33), - chainCode: UINT256_TYPE - }, { - publicKey: publicKey, - chainCode: chainCode - }); - network = network || BITCOIN; // verify the X coordinate is a point on the curve - - if (!ecc.isPoint(publicKey)) throw new TypeError('Point is not on the curve'); - return new BIP32(undefined, publicKey, chainCode, network, depth, index, parentFingerprint); -} - -function fromSeed(seed, network) { - typeforce(typeforce.Buffer, seed); - if (seed.length < 16) throw new TypeError('Seed should be at least 128 bits'); - if (seed.length > 64) throw new TypeError('Seed should be at most 512 bits'); - network = network || BITCOIN; - var I = crypto.hmacSHA512(Buffer.from('Bitcoin seed', 'utf8'), seed); - var IL = I.slice(0, 32); - var IR = I.slice(32); - return fromPrivateKey(IL, IR, network); -} - -exports.fromSeed = fromSeed; -},{"./crypto":"V9ao","bs58check":"lJVR","tiny-secp256k1":"fCMY","typeforce":"PKU7","wif":"zCNS","buffer":"dskh"}],"pelw":[function(require,module,exports) { -"use strict"; - -Object.defineProperty(exports, "__esModule", { - value: true -}); - -var bip32_1 = require("./bip32"); - -exports.fromSeed = bip32_1.fromSeed; -exports.fromBase58 = bip32_1.fromBase58; -exports.fromPublicKey = bip32_1.fromPublicKey; -exports.fromPrivateKey = bip32_1.fromPrivateKey; -},{"./bip32":"iQbK"}],"LuAr":[function(require,module,exports) { -'use strict'; - -Object.defineProperty(exports, '__esModule', { - value: true -}); -exports.bitcoin = { - messagePrefix: '\x18Bitcoin Signed Message:\n', - bech32: 'bc', - bip32: { - public: 0x0488b21e, - private: 0x0488ade4 - }, - pubKeyHash: 0x00, - scriptHash: 0x05, - wif: 0x80 -}; -exports.regtest = { - messagePrefix: '\x18Bitcoin Signed Message:\n', - bech32: 'bcrt', - bip32: { - public: 0x043587cf, - private: 0x04358394 - }, - pubKeyHash: 0x6f, - scriptHash: 0xc4, - wif: 0xef -}; -exports.testnet = { - messagePrefix: '\x18Bitcoin Signed Message:\n', - bech32: 'tb', - bip32: { - public: 0x043587cf, - private: 0x04358394 - }, - pubKeyHash: 0x6f, - scriptHash: 0xc4, - wif: 0xef -}; -},{}],"wihG":[function(require,module,exports) { -var Buffer = require("buffer").Buffer; -'use strict'; - -Object.defineProperty(exports, '__esModule', { - value: true -}); - -function decode(buffer, maxLength, minimal) { - maxLength = maxLength || 4; - minimal = minimal === undefined ? true : minimal; - var length = buffer.length; - if (length === 0) return 0; - if (length > maxLength) throw new TypeError('Script number overflow'); - - if (minimal) { - if ((buffer[length - 1] & 0x7f) === 0) { - if (length <= 1 || (buffer[length - 2] & 0x80) === 0) throw new Error('Non-minimally encoded script number'); - } - } // 40-bit - - - if (length === 5) { - var a = buffer.readUInt32LE(0); - var b = buffer.readUInt8(4); - if (b & 0x80) return -((b & ~0x80) * 0x100000000 + a); - return b * 0x100000000 + a; - } // 32-bit / 24-bit / 16-bit / 8-bit - - - var result = 0; - - for (var i = 0; i < length; ++i) { - result |= buffer[i] << 8 * i; - } - - if (buffer[length - 1] & 0x80) return -(result & ~(0x80 << 8 * (length - 1))); - return result; -} - -exports.decode = decode; - -function scriptNumSize(i) { - return i > 0x7fffffff ? 5 : i > 0x7fffff ? 4 : i > 0x7fff ? 3 : i > 0x7f ? 2 : i > 0x00 ? 1 : 0; -} - -function encode(_number) { - var value = Math.abs(_number); - var size = scriptNumSize(value); - var buffer = Buffer.allocUnsafe(size); - var negative = _number < 0; - - for (var i = 0; i < size; ++i) { - buffer.writeUInt8(value & 0xff, i); - value >>= 8; - } - - if (buffer[size - 1] & 0x80) { - buffer.writeUInt8(negative ? 0x80 : 0x00, size - 1); - } else if (negative) { - buffer[size - 1] |= 0x80; - } - - return buffer; -} - -exports.encode = encode; -},{"buffer":"dskh"}],"mf8L":[function(require,module,exports) { -'use strict'; - -Object.defineProperty(exports, '__esModule', { - value: true -}); - -var typeforce = require('typeforce'); - -var UINT31_MAX = Math.pow(2, 31) - 1; - -function UInt31(value) { - return typeforce.UInt32(value) && value <= UINT31_MAX; -} - -exports.UInt31 = UInt31; - -function BIP32Path(value) { - return typeforce.String(value) && !!value.match(/^(m\/)?(\d+'?\/)*\d+'?$/); -} - -exports.BIP32Path = BIP32Path; - -BIP32Path.toJSON = function () { - return 'BIP32 derivation path'; -}; - -function Signer(obj) { - return (typeforce.Buffer(obj.publicKey) || typeof obj.getPublicKey === 'function') && typeof obj.sign === 'function'; -} - -exports.Signer = Signer; -var SATOSHI_MAX = 21 * 1e14; - -function Satoshi(value) { - return typeforce.UInt53(value) && value <= SATOSHI_MAX; -} - -exports.Satoshi = Satoshi; // external dependent types - -exports.ECPoint = typeforce.quacksLike('Point'); // exposed, external API - -exports.Network = typeforce.compile({ - messagePrefix: typeforce.oneOf(typeforce.Buffer, typeforce.String), - bip32: { - public: typeforce.UInt32, - private: typeforce.UInt32 - }, - pubKeyHash: typeforce.UInt8, - scriptHash: typeforce.UInt8, - wif: typeforce.UInt8 -}); -exports.Buffer256bit = typeforce.BufferN(32); -exports.Hash160bit = typeforce.BufferN(20); -exports.Hash256bit = typeforce.BufferN(32); -exports.Number = typeforce.Number; // tslint:disable-line variable-name - -exports.Array = typeforce.Array; -exports.Boolean = typeforce.Boolean; // tslint:disable-line variable-name - -exports.String = typeforce.String; // tslint:disable-line variable-name - -exports.Buffer = typeforce.Buffer; -exports.Hex = typeforce.Hex; -exports.maybe = typeforce.maybe; -exports.tuple = typeforce.tuple; -exports.UInt8 = typeforce.UInt8; -exports.UInt32 = typeforce.UInt32; -exports.Function = typeforce.Function; -exports.BufferN = typeforce.BufferN; -exports.Null = typeforce.Null; -exports.oneOf = typeforce.oneOf; -},{"typeforce":"PKU7"}],"qbEO":[function(require,module,exports) { - -// Reference https://github.com/bitcoin/bips/blob/master/bip-0066.mediawiki -// Format: 0x30 [total-length] 0x02 [R-length] [R] 0x02 [S-length] [S] -// NOTE: SIGHASH byte ignored AND restricted, truncate before use - -var Buffer = require('safe-buffer').Buffer - -function check (buffer) { - if (buffer.length < 8) return false - if (buffer.length > 72) return false - if (buffer[0] !== 0x30) return false - if (buffer[1] !== buffer.length - 2) return false - if (buffer[2] !== 0x02) return false - - var lenR = buffer[3] - if (lenR === 0) return false - if (5 + lenR >= buffer.length) return false - if (buffer[4 + lenR] !== 0x02) return false - - var lenS = buffer[5 + lenR] - if (lenS === 0) return false - if ((6 + lenR + lenS) !== buffer.length) return false - - if (buffer[4] & 0x80) return false - if (lenR > 1 && (buffer[4] === 0x00) && !(buffer[5] & 0x80)) return false - - if (buffer[lenR + 6] & 0x80) return false - if (lenS > 1 && (buffer[lenR + 6] === 0x00) && !(buffer[lenR + 7] & 0x80)) return false - return true -} - -function decode (buffer) { - if (buffer.length < 8) throw new Error('DER sequence length is too short') - if (buffer.length > 72) throw new Error('DER sequence length is too long') - if (buffer[0] !== 0x30) throw new Error('Expected DER sequence') - if (buffer[1] !== buffer.length - 2) throw new Error('DER sequence length is invalid') - if (buffer[2] !== 0x02) throw new Error('Expected DER integer') - - var lenR = buffer[3] - if (lenR === 0) throw new Error('R length is zero') - if (5 + lenR >= buffer.length) throw new Error('R length is too long') - if (buffer[4 + lenR] !== 0x02) throw new Error('Expected DER integer (2)') - - var lenS = buffer[5 + lenR] - if (lenS === 0) throw new Error('S length is zero') - if ((6 + lenR + lenS) !== buffer.length) throw new Error('S length is invalid') - - if (buffer[4] & 0x80) throw new Error('R value is negative') - if (lenR > 1 && (buffer[4] === 0x00) && !(buffer[5] & 0x80)) throw new Error('R value excessively padded') - - if (buffer[lenR + 6] & 0x80) throw new Error('S value is negative') - if (lenS > 1 && (buffer[lenR + 6] === 0x00) && !(buffer[lenR + 7] & 0x80)) throw new Error('S value excessively padded') - - // non-BIP66 - extract R, S values - return { - r: buffer.slice(4, 4 + lenR), - s: buffer.slice(6 + lenR) - } -} - -/* - * Expects r and s to be positive DER integers. - * - * The DER format uses the most significant bit as a sign bit (& 0x80). - * If the significant bit is set AND the integer is positive, a 0x00 is prepended. - * - * Examples: - * - * 0 => 0x00 - * 1 => 0x01 - * -1 => 0xff - * 127 => 0x7f - * -127 => 0x81 - * 128 => 0x0080 - * -128 => 0x80 - * 255 => 0x00ff - * -255 => 0xff01 - * 16300 => 0x3fac - * -16300 => 0xc054 - * 62300 => 0x00f35c - * -62300 => 0xff0ca4 -*/ -function encode (r, s) { - var lenR = r.length - var lenS = s.length - if (lenR === 0) throw new Error('R length is zero') - if (lenS === 0) throw new Error('S length is zero') - if (lenR > 33) throw new Error('R length is too long') - if (lenS > 33) throw new Error('S length is too long') - if (r[0] & 0x80) throw new Error('R value is negative') - if (s[0] & 0x80) throw new Error('S value is negative') - if (lenR > 1 && (r[0] === 0x00) && !(r[1] & 0x80)) throw new Error('R value excessively padded') - if (lenS > 1 && (s[0] === 0x00) && !(s[1] & 0x80)) throw new Error('S value excessively padded') - - var signature = Buffer.allocUnsafe(6 + lenR + lenS) - - // 0x30 [total-length] 0x02 [R-length] [R] 0x02 [S-length] [S] - signature[0] = 0x30 - signature[1] = signature.length - 2 - signature[2] = 0x02 - signature[3] = r.length - r.copy(signature, 4) - signature[4 + lenR] = 0x02 - signature[5 + lenR] = s.length - s.copy(signature, 6 + lenR) - - return signature -} - -module.exports = { - check: check, - decode: decode, - encode: encode -} - -},{"safe-buffer":"Wugr"}],"n7qe":[function(require,module,exports) { -var Buffer = require("buffer").Buffer; -'use strict'; - -Object.defineProperty(exports, '__esModule', { - value: true -}); - -var types = require('./types'); - -var bip66 = require('bip66'); - -var typeforce = require('typeforce'); - -var ZERO = Buffer.alloc(1, 0); - -function toDER(x) { - var i = 0; - - while (x[i] === 0) { - ++i; - } - - if (i === x.length) return ZERO; - x = x.slice(i); - if (x[0] & 0x80) return Buffer.concat([ZERO, x], 1 + x.length); - return x; -} - -function fromDER(x) { - if (x[0] === 0x00) x = x.slice(1); - var buffer = Buffer.alloc(32, 0); - var bstart = Math.max(0, 32 - x.length); - x.copy(buffer, bstart); - return buffer; -} // BIP62: 1 byte hashType flag (only 0x01, 0x02, 0x03, 0x81, 0x82 and 0x83 are allowed) - - -function decode(buffer) { - var hashType = buffer.readUInt8(buffer.length - 1); - var hashTypeMod = hashType & ~0x80; - if (hashTypeMod <= 0 || hashTypeMod >= 4) throw new Error('Invalid hashType ' + hashType); - var decoded = bip66.decode(buffer.slice(0, -1)); - var r = fromDER(decoded.r); - var s = fromDER(decoded.s); - var signature = Buffer.concat([r, s], 64); - return { - signature: signature, - hashType: hashType - }; -} - -exports.decode = decode; - -function encode(signature, hashType) { - typeforce({ - signature: types.BufferN(64), - hashType: types.UInt8 - }, { - signature: signature, - hashType: hashType - }); - var hashTypeMod = hashType & ~0x80; - if (hashTypeMod <= 0 || hashTypeMod >= 4) throw new Error('Invalid hashType ' + hashType); - var hashTypeBuffer = Buffer.allocUnsafe(1); - hashTypeBuffer.writeUInt8(hashType, 0); - var r = toDER(signature.slice(0, 32)); - var s = toDER(signature.slice(32, 64)); - return Buffer.concat([bip66.encode(r, s), hashTypeBuffer]); -} - -exports.encode = encode; -},{"./types":"mf8L","bip66":"qbEO","typeforce":"PKU7","buffer":"dskh"}],"T5UE":[function(require,module,exports) { -module.exports = { - "OP_FALSE": 0, - "OP_0": 0, - "OP_PUSHDATA1": 76, - "OP_PUSHDATA2": 77, - "OP_PUSHDATA4": 78, - "OP_1NEGATE": 79, - "OP_RESERVED": 80, - "OP_TRUE": 81, - "OP_1": 81, - "OP_2": 82, - "OP_3": 83, - "OP_4": 84, - "OP_5": 85, - "OP_6": 86, - "OP_7": 87, - "OP_8": 88, - "OP_9": 89, - "OP_10": 90, - "OP_11": 91, - "OP_12": 92, - "OP_13": 93, - "OP_14": 94, - "OP_15": 95, - "OP_16": 96, - - "OP_NOP": 97, - "OP_VER": 98, - "OP_IF": 99, - "OP_NOTIF": 100, - "OP_VERIF": 101, - "OP_VERNOTIF": 102, - "OP_ELSE": 103, - "OP_ENDIF": 104, - "OP_VERIFY": 105, - "OP_RETURN": 106, - - "OP_TOALTSTACK": 107, - "OP_FROMALTSTACK": 108, - "OP_2DROP": 109, - "OP_2DUP": 110, - "OP_3DUP": 111, - "OP_2OVER": 112, - "OP_2ROT": 113, - "OP_2SWAP": 114, - "OP_IFDUP": 115, - "OP_DEPTH": 116, - "OP_DROP": 117, - "OP_DUP": 118, - "OP_NIP": 119, - "OP_OVER": 120, - "OP_PICK": 121, - "OP_ROLL": 122, - "OP_ROT": 123, - "OP_SWAP": 124, - "OP_TUCK": 125, - - "OP_CAT": 126, - "OP_SUBSTR": 127, - "OP_LEFT": 128, - "OP_RIGHT": 129, - "OP_SIZE": 130, - - "OP_INVERT": 131, - "OP_AND": 132, - "OP_OR": 133, - "OP_XOR": 134, - "OP_EQUAL": 135, - "OP_EQUALVERIFY": 136, - "OP_RESERVED1": 137, - "OP_RESERVED2": 138, - - "OP_1ADD": 139, - "OP_1SUB": 140, - "OP_2MUL": 141, - "OP_2DIV": 142, - "OP_NEGATE": 143, - "OP_ABS": 144, - "OP_NOT": 145, - "OP_0NOTEQUAL": 146, - "OP_ADD": 147, - "OP_SUB": 148, - "OP_MUL": 149, - "OP_DIV": 150, - "OP_MOD": 151, - "OP_LSHIFT": 152, - "OP_RSHIFT": 153, - - "OP_BOOLAND": 154, - "OP_BOOLOR": 155, - "OP_NUMEQUAL": 156, - "OP_NUMEQUALVERIFY": 157, - "OP_NUMNOTEQUAL": 158, - "OP_LESSTHAN": 159, - "OP_GREATERTHAN": 160, - "OP_LESSTHANOREQUAL": 161, - "OP_GREATERTHANOREQUAL": 162, - "OP_MIN": 163, - "OP_MAX": 164, - - "OP_WITHIN": 165, - - "OP_RIPEMD160": 166, - "OP_SHA1": 167, - "OP_SHA256": 168, - "OP_HASH160": 169, - "OP_HASH256": 170, - "OP_CODESEPARATOR": 171, - "OP_CHECKSIG": 172, - "OP_CHECKSIGVERIFY": 173, - "OP_CHECKMULTISIG": 174, - "OP_CHECKMULTISIGVERIFY": 175, - - "OP_NOP1": 176, - - "OP_NOP2": 177, - "OP_CHECKLOCKTIMEVERIFY": 177, - - "OP_NOP3": 178, - "OP_CHECKSEQUENCEVERIFY": 178, - - "OP_NOP4": 179, - "OP_NOP5": 180, - "OP_NOP6": 181, - "OP_NOP7": 182, - "OP_NOP8": 183, - "OP_NOP9": 184, - "OP_NOP10": 185, - - "OP_PUBKEYHASH": 253, - "OP_PUBKEY": 254, - "OP_INVALIDOPCODE": 255 -} -; -},{}],"HZCS":[function(require,module,exports) { -var OPS = require('bitcoin-ops') - -function encodingLength (i) { - return i < OPS.OP_PUSHDATA1 ? 1 - : i <= 0xff ? 2 - : i <= 0xffff ? 3 - : 5 -} - -function encode (buffer, number, offset) { - var size = encodingLength(number) - - // ~6 bit - if (size === 1) { - buffer.writeUInt8(number, offset) - - // 8 bit - } else if (size === 2) { - buffer.writeUInt8(OPS.OP_PUSHDATA1, offset) - buffer.writeUInt8(number, offset + 1) - - // 16 bit - } else if (size === 3) { - buffer.writeUInt8(OPS.OP_PUSHDATA2, offset) - buffer.writeUInt16LE(number, offset + 1) - - // 32 bit - } else { - buffer.writeUInt8(OPS.OP_PUSHDATA4, offset) - buffer.writeUInt32LE(number, offset + 1) - } - - return size -} - -function decode (buffer, offset) { - var opcode = buffer.readUInt8(offset) - var number, size - - // ~6 bit - if (opcode < OPS.OP_PUSHDATA1) { - number = opcode - size = 1 - - // 8 bit - } else if (opcode === OPS.OP_PUSHDATA1) { - if (offset + 2 > buffer.length) return null - number = buffer.readUInt8(offset + 1) - size = 2 - - // 16 bit - } else if (opcode === OPS.OP_PUSHDATA2) { - if (offset + 3 > buffer.length) return null - number = buffer.readUInt16LE(offset + 1) - size = 3 - - // 32 bit - } else { - if (offset + 5 > buffer.length) return null - if (opcode !== OPS.OP_PUSHDATA4) throw new Error('Unexpected opcode') - - number = buffer.readUInt32LE(offset + 1) - size = 5 - } - - return { - opcode: opcode, - number: number, - size: size - } -} - -module.exports = { - encodingLength: encodingLength, - encode: encode, - decode: decode -} - -},{"bitcoin-ops":"T5UE"}],"XAxl":[function(require,module,exports) { -var OPS = require('./index.json') - -var map = {} -for (var op in OPS) { - var code = OPS[op] - map[code] = op -} - -module.exports = map - -},{"./index.json":"T5UE"}],"zCpQ":[function(require,module,exports) { -var Buffer = require("buffer").Buffer; -'use strict'; - -Object.defineProperty(exports, '__esModule', { - value: true -}); - -var scriptNumber = require('./script_number'); - -var scriptSignature = require('./script_signature'); - -var types = require('./types'); - -var bip66 = require('bip66'); - -var ecc = require('tiny-secp256k1'); - -var pushdata = require('pushdata-bitcoin'); - -var typeforce = require('typeforce'); - -exports.OPS = require('bitcoin-ops'); - -var REVERSE_OPS = require('bitcoin-ops/map'); - -var OP_INT_BASE = exports.OPS.OP_RESERVED; // OP_1 - 1 - -function isOPInt(value) { - return types.Number(value) && (value === exports.OPS.OP_0 || value >= exports.OPS.OP_1 && value <= exports.OPS.OP_16 || value === exports.OPS.OP_1NEGATE); -} - -function isPushOnlyChunk(value) { - return types.Buffer(value) || isOPInt(value); -} - -function isPushOnly(value) { - return types.Array(value) && value.every(isPushOnlyChunk); -} - -exports.isPushOnly = isPushOnly; - -function asMinimalOP(buffer) { - if (buffer.length === 0) return exports.OPS.OP_0; - if (buffer.length !== 1) return; - if (buffer[0] >= 1 && buffer[0] <= 16) return OP_INT_BASE + buffer[0]; - if (buffer[0] === 0x81) return exports.OPS.OP_1NEGATE; -} - -function chunksIsBuffer(buf) { - return Buffer.isBuffer(buf); -} - -function chunksIsArray(buf) { - return types.Array(buf); -} - -function singleChunkIsBuffer(buf) { - return Buffer.isBuffer(buf); -} - -function compile(chunks) { - // TODO: remove me - if (chunksIsBuffer(chunks)) return chunks; - typeforce(types.Array, chunks); - var bufferSize = chunks.reduce(function (accum, chunk) { - // data chunk - if (singleChunkIsBuffer(chunk)) { - // adhere to BIP62.3, minimal push policy - if (chunk.length === 1 && asMinimalOP(chunk) !== undefined) { - return accum + 1; - } - - return accum + pushdata.encodingLength(chunk.length) + chunk.length; - } // opcode - - - return accum + 1; - }, 0.0); - var buffer = Buffer.allocUnsafe(bufferSize); - var offset = 0; - chunks.forEach(function (chunk) { - // data chunk - if (singleChunkIsBuffer(chunk)) { - // adhere to BIP62.3, minimal push policy - var opcode = asMinimalOP(chunk); - - if (opcode !== undefined) { - buffer.writeUInt8(opcode, offset); - offset += 1; - return; - } - - offset += pushdata.encode(buffer, chunk.length, offset); - chunk.copy(buffer, offset); - offset += chunk.length; // opcode - } else { - buffer.writeUInt8(chunk, offset); - offset += 1; - } - }); - if (offset !== buffer.length) throw new Error('Could not decode chunks'); - return buffer; -} - -exports.compile = compile; - -function decompile(buffer) { - // TODO: remove me - if (chunksIsArray(buffer)) return buffer; - typeforce(types.Buffer, buffer); - var chunks = []; - var i = 0; - - while (i < buffer.length) { - var opcode = buffer[i]; // data chunk - - if (opcode > exports.OPS.OP_0 && opcode <= exports.OPS.OP_PUSHDATA4) { - var d = pushdata.decode(buffer, i); // did reading a pushDataInt fail? - - if (d === null) return null; - i += d.size; // attempt to read too much data? - - if (i + d.number > buffer.length) return null; - var data = buffer.slice(i, i + d.number); - i += d.number; // decompile minimally - - var op = asMinimalOP(data); - - if (op !== undefined) { - chunks.push(op); - } else { - chunks.push(data); - } // opcode - - } else { - chunks.push(opcode); - i += 1; - } - } - - return chunks; -} - -exports.decompile = decompile; - -function toASM(chunks) { - if (chunksIsBuffer(chunks)) { - chunks = decompile(chunks); - } - - return chunks.map(function (chunk) { - // data? - if (singleChunkIsBuffer(chunk)) { - var op = asMinimalOP(chunk); - if (op === undefined) return chunk.toString('hex'); - chunk = op; - } // opcode! - - - return REVERSE_OPS[chunk]; - }).join(' '); -} - -exports.toASM = toASM; - -function fromASM(asm) { - typeforce(types.String, asm); - return compile(asm.split(' ').map(function (chunkStr) { - // opcode? - if (exports.OPS[chunkStr] !== undefined) return exports.OPS[chunkStr]; - typeforce(types.Hex, chunkStr); // data! - - return Buffer.from(chunkStr, 'hex'); - })); -} - -exports.fromASM = fromASM; - -function toStack(chunks) { - chunks = decompile(chunks); - typeforce(isPushOnly, chunks); - return chunks.map(function (op) { - if (singleChunkIsBuffer(op)) return op; - if (op === exports.OPS.OP_0) return Buffer.allocUnsafe(0); - return scriptNumber.encode(op - OP_INT_BASE); - }); -} - -exports.toStack = toStack; - -function isCanonicalPubKey(buffer) { - return ecc.isPoint(buffer); -} - -exports.isCanonicalPubKey = isCanonicalPubKey; - -function isDefinedHashType(hashType) { - var hashTypeMod = hashType & ~0x80; // return hashTypeMod > SIGHASH_ALL && hashTypeMod < SIGHASH_SINGLE - - return hashTypeMod > 0x00 && hashTypeMod < 0x04; -} - -exports.isDefinedHashType = isDefinedHashType; - -function isCanonicalScriptSignature(buffer) { - if (!Buffer.isBuffer(buffer)) return false; - if (!isDefinedHashType(buffer[buffer.length - 1])) return false; - return bip66.check(buffer.slice(0, -1)); -} - -exports.isCanonicalScriptSignature = isCanonicalScriptSignature; // tslint:disable-next-line variable-name - -exports.number = scriptNumber; -exports.signature = scriptSignature; -},{"./script_number":"wihG","./script_signature":"n7qe","./types":"mf8L","bip66":"qbEO","tiny-secp256k1":"fCMY","pushdata-bitcoin":"HZCS","typeforce":"PKU7","bitcoin-ops":"T5UE","bitcoin-ops/map":"XAxl","buffer":"dskh"}],"SsCk":[function(require,module,exports) { -'use strict'; - -Object.defineProperty(exports, '__esModule', { - value: true -}); - -function prop(object, name, f) { - Object.defineProperty(object, name, { - configurable: true, - enumerable: true, - get: function get() { - var _value = f.call(this); - - this[name] = _value; - return _value; - }, - set: function set(_value) { - Object.defineProperty(this, name, { - configurable: true, - enumerable: true, - value: _value, - writable: true - }); - } - }); -} - -exports.prop = prop; - -function value(f) { - var _value; - - return function () { - if (_value !== undefined) return _value; - _value = f(); - return _value; - }; -} - -exports.value = value; -},{}],"GxwO":[function(require,module,exports) { -'use strict'; - -Object.defineProperty(exports, '__esModule', { - value: true -}); - -var networks_1 = require('../networks'); - -var bscript = require('../script'); - -var lazy = require('./lazy'); - -var typef = require('typeforce'); - -var OPS = bscript.OPS; - -function stacksEqual(a, b) { - if (a.length !== b.length) return false; - return a.every(function (x, i) { - return x.equals(b[i]); - }); -} // output: OP_RETURN ... - - -function p2data(a, opts) { - if (!a.data && !a.output) throw new TypeError('Not enough data'); - opts = Object.assign({ - validate: true - }, opts || {}); - typef({ - network: typef.maybe(typef.Object), - output: typef.maybe(typef.Buffer), - data: typef.maybe(typef.arrayOf(typef.Buffer)) - }, a); - var network = a.network || networks_1.bitcoin; - var o = { - name: 'embed', - network: network - }; - lazy.prop(o, 'output', function () { - if (!a.data) return; - return bscript.compile([OPS.OP_RETURN].concat(a.data)); - }); - lazy.prop(o, 'data', function () { - if (!a.output) return; - return bscript.decompile(a.output).slice(1); - }); // extended validation - - if (opts.validate) { - if (a.output) { - var chunks = bscript.decompile(a.output); - if (chunks[0] !== OPS.OP_RETURN) throw new TypeError('Output is invalid'); - if (!chunks.slice(1).every(typef.Buffer)) throw new TypeError('Output is invalid'); - if (a.data && !stacksEqual(a.data, o.data)) throw new TypeError('Data mismatch'); - } - } - - return Object.assign(o, a); -} - -exports.p2data = p2data; -},{"../networks":"LuAr","../script":"zCpQ","./lazy":"SsCk","typeforce":"PKU7"}],"N5r7":[function(require,module,exports) { -'use strict'; - -Object.defineProperty(exports, '__esModule', { - value: true -}); - -var networks_1 = require('../networks'); - -var bscript = require('../script'); - -var lazy = require('./lazy'); - -var OPS = bscript.OPS; - -var typef = require('typeforce'); - -var ecc = require('tiny-secp256k1'); - -var OP_INT_BASE = OPS.OP_RESERVED; // OP_1 - 1 - -function stacksEqual(a, b) { - if (a.length !== b.length) return false; - return a.every(function (x, i) { - return x.equals(b[i]); - }); -} // input: OP_0 [signatures ...] -// output: m [pubKeys ...] n OP_CHECKMULTISIG - - -function p2ms(a, opts) { - if (!a.input && !a.output && !(a.pubkeys && a.m !== undefined) && !a.signatures) throw new TypeError('Not enough data'); - opts = Object.assign({ - validate: true - }, opts || {}); - - function isAcceptableSignature(x) { - return bscript.isCanonicalScriptSignature(x) || (opts.allowIncomplete && x === OPS.OP_0) !== undefined; - } - - typef({ - network: typef.maybe(typef.Object), - m: typef.maybe(typef.Number), - n: typef.maybe(typef.Number), - output: typef.maybe(typef.Buffer), - pubkeys: typef.maybe(typef.arrayOf(ecc.isPoint)), - signatures: typef.maybe(typef.arrayOf(isAcceptableSignature)), - input: typef.maybe(typef.Buffer) - }, a); - var network = a.network || networks_1.bitcoin; - var o = { - network: network - }; - var chunks = []; - var decoded = false; - - function decode(output) { - if (decoded) return; - decoded = true; - chunks = bscript.decompile(output); - o.m = chunks[0] - OP_INT_BASE; - o.n = chunks[chunks.length - 2] - OP_INT_BASE; - o.pubkeys = chunks.slice(1, -2); - } - - lazy.prop(o, 'output', function () { - if (!a.m) return; - if (!o.n) return; - if (!a.pubkeys) return; - return bscript.compile([].concat(OP_INT_BASE + a.m, a.pubkeys, OP_INT_BASE + o.n, OPS.OP_CHECKMULTISIG)); - }); - lazy.prop(o, 'm', function () { - if (!o.output) return; - decode(o.output); - return o.m; - }); - lazy.prop(o, 'n', function () { - if (!o.pubkeys) return; - return o.pubkeys.length; - }); - lazy.prop(o, 'pubkeys', function () { - if (!a.output) return; - decode(a.output); - return o.pubkeys; - }); - lazy.prop(o, 'signatures', function () { - if (!a.input) return; - return bscript.decompile(a.input).slice(1); - }); - lazy.prop(o, 'input', function () { - if (!a.signatures) return; - return bscript.compile([OPS.OP_0].concat(a.signatures)); - }); - lazy.prop(o, 'witness', function () { - if (!o.input) return; - return []; - }); - lazy.prop(o, 'name', function () { - if (!o.m || !o.n) return; - return "p2ms(".concat(o.m, " of ").concat(o.n, ")"); - }); // extended validation - - if (opts.validate) { - if (a.output) { - decode(a.output); - if (!typef.Number(chunks[0])) throw new TypeError('Output is invalid'); - if (!typef.Number(chunks[chunks.length - 2])) throw new TypeError('Output is invalid'); - if (chunks[chunks.length - 1] !== OPS.OP_CHECKMULTISIG) throw new TypeError('Output is invalid'); - if (o.m <= 0 || o.n > 16 || o.m > o.n || o.n !== chunks.length - 3) throw new TypeError('Output is invalid'); - if (!o.pubkeys.every(function (x) { - return ecc.isPoint(x); - })) throw new TypeError('Output is invalid'); - if (a.m !== undefined && a.m !== o.m) throw new TypeError('m mismatch'); - if (a.n !== undefined && a.n !== o.n) throw new TypeError('n mismatch'); - if (a.pubkeys && !stacksEqual(a.pubkeys, o.pubkeys)) throw new TypeError('Pubkeys mismatch'); - } - - if (a.pubkeys) { - if (a.n !== undefined && a.n !== a.pubkeys.length) throw new TypeError('Pubkey count mismatch'); - o.n = a.pubkeys.length; - if (o.n < o.m) throw new TypeError('Pubkey count cannot be less than m'); - } - - if (a.signatures) { - if (a.signatures.length < o.m) throw new TypeError('Not enough signatures provided'); - if (a.signatures.length > o.m) throw new TypeError('Too many signatures provided'); - } - - if (a.input) { - if (a.input[0] !== OPS.OP_0) throw new TypeError('Input is invalid'); - if (o.signatures.length === 0 || !o.signatures.every(isAcceptableSignature)) throw new TypeError('Input has invalid signature(s)'); - if (a.signatures && !stacksEqual(a.signatures, o.signatures)) throw new TypeError('Signature mismatch'); - if (a.m !== undefined && a.m !== a.signatures.length) throw new TypeError('Signature count mismatch'); - } - } - - return Object.assign(o, a); -} - -exports.p2ms = p2ms; -},{"../networks":"LuAr","../script":"zCpQ","./lazy":"SsCk","typeforce":"PKU7","tiny-secp256k1":"fCMY"}],"q45I":[function(require,module,exports) { -'use strict'; - -Object.defineProperty(exports, '__esModule', { - value: true -}); - -var networks_1 = require('../networks'); - -var bscript = require('../script'); - -var lazy = require('./lazy'); - -var typef = require('typeforce'); - -var OPS = bscript.OPS; - -var ecc = require('tiny-secp256k1'); // input: {signature} -// output: {pubKey} OP_CHECKSIG - - -function p2pk(a, opts) { - if (!a.input && !a.output && !a.pubkey && !a.input && !a.signature) throw new TypeError('Not enough data'); - opts = Object.assign({ - validate: true - }, opts || {}); - typef({ - network: typef.maybe(typef.Object), - output: typef.maybe(typef.Buffer), - pubkey: typef.maybe(ecc.isPoint), - signature: typef.maybe(bscript.isCanonicalScriptSignature), - input: typef.maybe(typef.Buffer) - }, a); - - var _chunks = lazy.value(function () { - return bscript.decompile(a.input); - }); - - var network = a.network || networks_1.bitcoin; - var o = { - name: 'p2pk', - network: network - }; - lazy.prop(o, 'output', function () { - if (!a.pubkey) return; - return bscript.compile([a.pubkey, OPS.OP_CHECKSIG]); - }); - lazy.prop(o, 'pubkey', function () { - if (!a.output) return; - return a.output.slice(1, -1); - }); - lazy.prop(o, 'signature', function () { - if (!a.input) return; - return _chunks()[0]; - }); - lazy.prop(o, 'input', function () { - if (!a.signature) return; - return bscript.compile([a.signature]); - }); - lazy.prop(o, 'witness', function () { - if (!o.input) return; - return []; - }); // extended validation - - if (opts.validate) { - if (a.output) { - if (a.output[a.output.length - 1] !== OPS.OP_CHECKSIG) throw new TypeError('Output is invalid'); - if (!ecc.isPoint(o.pubkey)) throw new TypeError('Output pubkey is invalid'); - if (a.pubkey && !a.pubkey.equals(o.pubkey)) throw new TypeError('Pubkey mismatch'); - } - - if (a.signature) { - if (a.input && !a.input.equals(o.input)) throw new TypeError('Signature mismatch'); - } - - if (a.input) { - if (_chunks().length !== 1) throw new TypeError('Input is invalid'); - if (!bscript.isCanonicalScriptSignature(o.signature)) throw new TypeError('Input has invalid signature'); - } - } - - return Object.assign(o, a); -} - -exports.p2pk = p2pk; -},{"../networks":"LuAr","../script":"zCpQ","./lazy":"SsCk","typeforce":"PKU7","tiny-secp256k1":"fCMY"}],"wHwg":[function(require,module,exports) { -'use strict'; - -Object.defineProperty(exports, '__esModule', { - value: true -}); - -var createHash = require('create-hash'); - -function ripemd160(buffer) { - try { - return createHash('rmd160').update(buffer).digest(); - } catch (err) { - return createHash('ripemd160').update(buffer).digest(); - } -} - -exports.ripemd160 = ripemd160; - -function sha1(buffer) { - return createHash('sha1').update(buffer).digest(); -} - -exports.sha1 = sha1; - -function sha256(buffer) { - return createHash('sha256').update(buffer).digest(); -} - -exports.sha256 = sha256; - -function hash160(buffer) { - return ripemd160(sha256(buffer)); -} - -exports.hash160 = hash160; - -function hash256(buffer) { - return sha256(sha256(buffer)); -} - -exports.hash256 = hash256; -},{"create-hash":"LF8r"}],"sm5n":[function(require,module,exports) { -var Buffer = require("buffer").Buffer; -'use strict'; - -Object.defineProperty(exports, '__esModule', { - value: true -}); - -var bcrypto = require('../crypto'); - -var networks_1 = require('../networks'); - -var bscript = require('../script'); - -var lazy = require('./lazy'); - -var typef = require('typeforce'); - -var OPS = bscript.OPS; - -var ecc = require('tiny-secp256k1'); - -var bs58check = require('bs58check'); // input: {signature} {pubkey} -// output: OP_DUP OP_HASH160 {hash160(pubkey)} OP_EQUALVERIFY OP_CHECKSIG - - -function p2pkh(a, opts) { - if (!a.address && !a.hash && !a.output && !a.pubkey && !a.input) throw new TypeError('Not enough data'); - opts = Object.assign({ - validate: true - }, opts || {}); - typef({ - network: typef.maybe(typef.Object), - address: typef.maybe(typef.String), - hash: typef.maybe(typef.BufferN(20)), - output: typef.maybe(typef.BufferN(25)), - pubkey: typef.maybe(ecc.isPoint), - signature: typef.maybe(bscript.isCanonicalScriptSignature), - input: typef.maybe(typef.Buffer) - }, a); - - var _address = lazy.value(function () { - var payload = bs58check.decode(a.address); - var version = payload.readUInt8(0); - var hash = payload.slice(1); - return { - version: version, - hash: hash - }; - }); - - var _chunks = lazy.value(function () { - return bscript.decompile(a.input); - }); - - var network = a.network || networks_1.bitcoin; - var o = { - name: 'p2pkh', - network: network - }; - lazy.prop(o, 'address', function () { - if (!o.hash) return; - var payload = Buffer.allocUnsafe(21); - payload.writeUInt8(network.pubKeyHash, 0); - o.hash.copy(payload, 1); - return bs58check.encode(payload); - }); - lazy.prop(o, 'hash', function () { - if (a.output) return a.output.slice(3, 23); - if (a.address) return _address().hash; - if (a.pubkey || o.pubkey) return bcrypto.hash160(a.pubkey || o.pubkey); - }); - lazy.prop(o, 'output', function () { - if (!o.hash) return; - return bscript.compile([OPS.OP_DUP, OPS.OP_HASH160, o.hash, OPS.OP_EQUALVERIFY, OPS.OP_CHECKSIG]); - }); - lazy.prop(o, 'pubkey', function () { - if (!a.input) return; - return _chunks()[1]; - }); - lazy.prop(o, 'signature', function () { - if (!a.input) return; - return _chunks()[0]; - }); - lazy.prop(o, 'input', function () { - if (!a.pubkey) return; - if (!a.signature) return; - return bscript.compile([a.signature, a.pubkey]); - }); - lazy.prop(o, 'witness', function () { - if (!o.input) return; - return []; - }); // extended validation - - if (opts.validate) { - var hash = Buffer.from([]); - - if (a.address) { - if (_address().version !== network.pubKeyHash) throw new TypeError('Invalid version or Network mismatch'); - if (_address().hash.length !== 20) throw new TypeError('Invalid address'); - hash = _address().hash; - } - - if (a.hash) { - if (hash.length > 0 && !hash.equals(a.hash)) throw new TypeError('Hash mismatch');else hash = a.hash; - } - - if (a.output) { - if (a.output.length !== 25 || a.output[0] !== OPS.OP_DUP || a.output[1] !== OPS.OP_HASH160 || a.output[2] !== 0x14 || a.output[23] !== OPS.OP_EQUALVERIFY || a.output[24] !== OPS.OP_CHECKSIG) throw new TypeError('Output is invalid'); - var hash2 = a.output.slice(3, 23); - if (hash.length > 0 && !hash.equals(hash2)) throw new TypeError('Hash mismatch');else hash = hash2; - } - - if (a.pubkey) { - var pkh = bcrypto.hash160(a.pubkey); - if (hash.length > 0 && !hash.equals(pkh)) throw new TypeError('Hash mismatch');else hash = pkh; - } - - if (a.input) { - var chunks = _chunks(); - - if (chunks.length !== 2) throw new TypeError('Input is invalid'); - if (!bscript.isCanonicalScriptSignature(chunks[0])) throw new TypeError('Input has invalid signature'); - if (!ecc.isPoint(chunks[1])) throw new TypeError('Input has invalid pubkey'); - if (a.signature && !a.signature.equals(chunks[0])) throw new TypeError('Signature mismatch'); - if (a.pubkey && !a.pubkey.equals(chunks[1])) throw new TypeError('Pubkey mismatch'); - - var _pkh = bcrypto.hash160(chunks[1]); - - if (hash.length > 0 && !hash.equals(_pkh)) throw new TypeError('Hash mismatch'); - } - } - - return Object.assign(o, a); -} - -exports.p2pkh = p2pkh; -},{"../crypto":"wHwg","../networks":"LuAr","../script":"zCpQ","./lazy":"SsCk","typeforce":"PKU7","tiny-secp256k1":"fCMY","bs58check":"lJVR","buffer":"dskh"}],"IpD6":[function(require,module,exports) { -var Buffer = require("buffer").Buffer; -'use strict'; - -Object.defineProperty(exports, '__esModule', { - value: true -}); - -var bcrypto = require('../crypto'); - -var networks_1 = require('../networks'); - -var bscript = require('../script'); - -var lazy = require('./lazy'); - -var typef = require('typeforce'); - -var OPS = bscript.OPS; - -var bs58check = require('bs58check'); - -function stacksEqual(a, b) { - if (a.length !== b.length) return false; - return a.every(function (x, i) { - return x.equals(b[i]); - }); -} // input: [redeemScriptSig ...] {redeemScript} -// witness: -// output: OP_HASH160 {hash160(redeemScript)} OP_EQUAL - - -function p2sh(a, opts) { - if (!a.address && !a.hash && !a.output && !a.redeem && !a.input) throw new TypeError('Not enough data'); - opts = Object.assign({ - validate: true - }, opts || {}); - typef({ - network: typef.maybe(typef.Object), - address: typef.maybe(typef.String), - hash: typef.maybe(typef.BufferN(20)), - output: typef.maybe(typef.BufferN(23)), - redeem: typef.maybe({ - network: typef.maybe(typef.Object), - output: typef.maybe(typef.Buffer), - input: typef.maybe(typef.Buffer), - witness: typef.maybe(typef.arrayOf(typef.Buffer)) - }), - input: typef.maybe(typef.Buffer), - witness: typef.maybe(typef.arrayOf(typef.Buffer)) - }, a); - var network = a.network; - - if (!network) { - network = a.redeem && a.redeem.network || networks_1.bitcoin; - } - - var o = { - network: network - }; - - var _address = lazy.value(function () { - var payload = bs58check.decode(a.address); - var version = payload.readUInt8(0); - var hash = payload.slice(1); - return { - version: version, - hash: hash - }; - }); - - var _chunks = lazy.value(function () { - return bscript.decompile(a.input); - }); - - var _redeem = lazy.value(function () { - var chunks = _chunks(); - - return { - network: network, - output: chunks[chunks.length - 1], - input: bscript.compile(chunks.slice(0, -1)), - witness: a.witness || [] - }; - }); // output dependents - - - lazy.prop(o, 'address', function () { - if (!o.hash) return; - var payload = Buffer.allocUnsafe(21); - payload.writeUInt8(o.network.scriptHash, 0); - o.hash.copy(payload, 1); - return bs58check.encode(payload); - }); - lazy.prop(o, 'hash', function () { - // in order of least effort - if (a.output) return a.output.slice(2, 22); - if (a.address) return _address().hash; - if (o.redeem && o.redeem.output) return bcrypto.hash160(o.redeem.output); - }); - lazy.prop(o, 'output', function () { - if (!o.hash) return; - return bscript.compile([OPS.OP_HASH160, o.hash, OPS.OP_EQUAL]); - }); // input dependents - - lazy.prop(o, 'redeem', function () { - if (!a.input) return; - return _redeem(); - }); - lazy.prop(o, 'input', function () { - if (!a.redeem || !a.redeem.input || !a.redeem.output) return; - return bscript.compile([].concat(bscript.decompile(a.redeem.input), a.redeem.output)); - }); - lazy.prop(o, 'witness', function () { - if (o.redeem && o.redeem.witness) return o.redeem.witness; - if (o.input) return []; - }); - lazy.prop(o, 'name', function () { - var nameParts = ['p2sh']; - if (o.redeem !== undefined) nameParts.push(o.redeem.name); - return nameParts.join('-'); - }); - - if (opts.validate) { - var hash = Buffer.from([]); - - if (a.address) { - if (_address().version !== network.scriptHash) throw new TypeError('Invalid version or Network mismatch'); - if (_address().hash.length !== 20) throw new TypeError('Invalid address'); - hash = _address().hash; - } - - if (a.hash) { - if (hash.length > 0 && !hash.equals(a.hash)) throw new TypeError('Hash mismatch');else hash = a.hash; - } - - if (a.output) { - if (a.output.length !== 23 || a.output[0] !== OPS.OP_HASH160 || a.output[1] !== 0x14 || a.output[22] !== OPS.OP_EQUAL) throw new TypeError('Output is invalid'); - var hash2 = a.output.slice(2, 22); - if (hash.length > 0 && !hash.equals(hash2)) throw new TypeError('Hash mismatch');else hash = hash2; - } // inlined to prevent 'no-inner-declarations' failing - - - var checkRedeem = function checkRedeem(redeem) { - // is the redeem output empty/invalid? - if (redeem.output) { - var decompile = bscript.decompile(redeem.output); - if (!decompile || decompile.length < 1) throw new TypeError('Redeem.output too short'); // match hash against other sources - - var _hash = bcrypto.hash160(redeem.output); - - if (hash.length > 0 && !hash.equals(_hash)) throw new TypeError('Hash mismatch');else hash = _hash; - } - - if (redeem.input) { - var hasInput = redeem.input.length > 0; - var hasWitness = redeem.witness && redeem.witness.length > 0; - if (!hasInput && !hasWitness) throw new TypeError('Empty input'); - if (hasInput && hasWitness) throw new TypeError('Input and witness provided'); - - if (hasInput) { - var richunks = bscript.decompile(redeem.input); - if (!bscript.isPushOnly(richunks)) throw new TypeError('Non push-only scriptSig'); - } - } - }; - - if (a.input) { - var chunks = _chunks(); - - if (!chunks || chunks.length < 1) throw new TypeError('Input too short'); - if (!Buffer.isBuffer(_redeem().output)) throw new TypeError('Input is invalid'); - checkRedeem(_redeem()); - } - - if (a.redeem) { - if (a.redeem.network && a.redeem.network !== network) throw new TypeError('Network mismatch'); - - if (a.input) { - var redeem = _redeem(); - - if (a.redeem.output && !a.redeem.output.equals(redeem.output)) throw new TypeError('Redeem.output mismatch'); - if (a.redeem.input && !a.redeem.input.equals(redeem.input)) throw new TypeError('Redeem.input mismatch'); - } - - checkRedeem(a.redeem); - } - - if (a.witness) { - if (a.redeem && a.redeem.witness && !stacksEqual(a.redeem.witness, a.witness)) throw new TypeError('Witness and redeem.witness mismatch'); - } - } - - return Object.assign(o, a); -} - -exports.p2sh = p2sh; -},{"../crypto":"wHwg","../networks":"LuAr","../script":"zCpQ","./lazy":"SsCk","typeforce":"PKU7","bs58check":"lJVR","buffer":"dskh"}],"gbth":[function(require,module,exports) { -'use strict' -var ALPHABET = 'qpzry9x8gf2tvdw0s3jn54khce6mua7l' - -// pre-compute lookup table -var ALPHABET_MAP = {} -for (var z = 0; z < ALPHABET.length; z++) { - var x = ALPHABET.charAt(z) - - if (ALPHABET_MAP[x] !== undefined) throw new TypeError(x + ' is ambiguous') - ALPHABET_MAP[x] = z -} - -function polymodStep (pre) { - var b = pre >> 25 - return ((pre & 0x1FFFFFF) << 5) ^ - (-((b >> 0) & 1) & 0x3b6a57b2) ^ - (-((b >> 1) & 1) & 0x26508e6d) ^ - (-((b >> 2) & 1) & 0x1ea119fa) ^ - (-((b >> 3) & 1) & 0x3d4233dd) ^ - (-((b >> 4) & 1) & 0x2a1462b3) -} - -function prefixChk (prefix) { - var chk = 1 - for (var i = 0; i < prefix.length; ++i) { - var c = prefix.charCodeAt(i) - if (c < 33 || c > 126) throw new Error('Invalid prefix (' + prefix + ')') - - chk = polymodStep(chk) ^ (c >> 5) - } - chk = polymodStep(chk) - - for (i = 0; i < prefix.length; ++i) { - var v = prefix.charCodeAt(i) - chk = polymodStep(chk) ^ (v & 0x1f) - } - return chk -} - -function encode (prefix, words, LIMIT) { - LIMIT = LIMIT || 90 - if ((prefix.length + 7 + words.length) > LIMIT) throw new TypeError('Exceeds length limit') - - prefix = prefix.toLowerCase() - - // determine chk mod - var chk = prefixChk(prefix) - var result = prefix + '1' - for (var i = 0; i < words.length; ++i) { - var x = words[i] - if ((x >> 5) !== 0) throw new Error('Non 5-bit word') - - chk = polymodStep(chk) ^ x - result += ALPHABET.charAt(x) - } - - for (i = 0; i < 6; ++i) { - chk = polymodStep(chk) - } - chk ^= 1 - - for (i = 0; i < 6; ++i) { - var v = (chk >> ((5 - i) * 5)) & 0x1f - result += ALPHABET.charAt(v) - } - - return result -} - -function decode (str, LIMIT) { - LIMIT = LIMIT || 90 - if (str.length < 8) throw new TypeError(str + ' too short') - if (str.length > LIMIT) throw new TypeError('Exceeds length limit') - - // don't allow mixed case - var lowered = str.toLowerCase() - var uppered = str.toUpperCase() - if (str !== lowered && str !== uppered) throw new Error('Mixed-case string ' + str) - str = lowered - - var split = str.lastIndexOf('1') - if (split === -1) throw new Error('No separator character for ' + str) - if (split === 0) throw new Error('Missing prefix for ' + str) - - var prefix = str.slice(0, split) - var wordChars = str.slice(split + 1) - if (wordChars.length < 6) throw new Error('Data too short') - - var chk = prefixChk(prefix) - var words = [] - for (var i = 0; i < wordChars.length; ++i) { - var c = wordChars.charAt(i) - var v = ALPHABET_MAP[c] - if (v === undefined) throw new Error('Unknown character ' + c) - chk = polymodStep(chk) ^ v - - // not in the checksum? - if (i + 6 >= wordChars.length) continue - words.push(v) - } - - if (chk !== 1) throw new Error('Invalid checksum for ' + str) - return { prefix: prefix, words: words } -} - -function convert (data, inBits, outBits, pad) { - var value = 0 - var bits = 0 - var maxV = (1 << outBits) - 1 - - var result = [] - for (var i = 0; i < data.length; ++i) { - value = (value << inBits) | data[i] - bits += inBits - - while (bits >= outBits) { - bits -= outBits - result.push((value >> bits) & maxV) - } - } - - if (pad) { - if (bits > 0) { - result.push((value << (outBits - bits)) & maxV) - } - } else { - if (bits >= inBits) throw new Error('Excess padding') - if ((value << (outBits - bits)) & maxV) throw new Error('Non-zero padding') - } - - return result -} - -function toWords (bytes) { - return convert(bytes, 8, 5, true) -} - -function fromWords (words) { - return convert(words, 5, 8, false) -} - -module.exports = { - decode: decode, - encode: encode, - toWords: toWords, - fromWords: fromWords -} - -},{}],"ktg4":[function(require,module,exports) { -var Buffer = require("buffer").Buffer; -'use strict'; - -Object.defineProperty(exports, '__esModule', { - value: true -}); - -var bcrypto = require('../crypto'); - -var networks_1 = require('../networks'); - -var bscript = require('../script'); - -var lazy = require('./lazy'); - -var typef = require('typeforce'); - -var OPS = bscript.OPS; - -var ecc = require('tiny-secp256k1'); - -var bech32 = require('bech32'); - -var EMPTY_BUFFER = Buffer.alloc(0); // witness: {signature} {pubKey} -// input: <> -// output: OP_0 {pubKeyHash} - -function p2wpkh(a, opts) { - if (!a.address && !a.hash && !a.output && !a.pubkey && !a.witness) throw new TypeError('Not enough data'); - opts = Object.assign({ - validate: true - }, opts || {}); - typef({ - address: typef.maybe(typef.String), - hash: typef.maybe(typef.BufferN(20)), - input: typef.maybe(typef.BufferN(0)), - network: typef.maybe(typef.Object), - output: typef.maybe(typef.BufferN(22)), - pubkey: typef.maybe(ecc.isPoint), - signature: typef.maybe(bscript.isCanonicalScriptSignature), - witness: typef.maybe(typef.arrayOf(typef.Buffer)) - }, a); - - var _address = lazy.value(function () { - var result = bech32.decode(a.address); - var version = result.words.shift(); - var data = bech32.fromWords(result.words); - return { - version: version, - prefix: result.prefix, - data: Buffer.from(data) - }; - }); - - var network = a.network || networks_1.bitcoin; - var o = { - name: 'p2wpkh', - network: network - }; - lazy.prop(o, 'address', function () { - if (!o.hash) return; - var words = bech32.toWords(o.hash); - words.unshift(0x00); - return bech32.encode(network.bech32, words); - }); - lazy.prop(o, 'hash', function () { - if (a.output) return a.output.slice(2, 22); - if (a.address) return _address().data; - if (a.pubkey || o.pubkey) return bcrypto.hash160(a.pubkey || o.pubkey); - }); - lazy.prop(o, 'output', function () { - if (!o.hash) return; - return bscript.compile([OPS.OP_0, o.hash]); - }); - lazy.prop(o, 'pubkey', function () { - if (a.pubkey) return a.pubkey; - if (!a.witness) return; - return a.witness[1]; - }); - lazy.prop(o, 'signature', function () { - if (!a.witness) return; - return a.witness[0]; - }); - lazy.prop(o, 'input', function () { - if (!o.witness) return; - return EMPTY_BUFFER; - }); - lazy.prop(o, 'witness', function () { - if (!a.pubkey) return; - if (!a.signature) return; - return [a.signature, a.pubkey]; - }); // extended validation - - if (opts.validate) { - var hash = Buffer.from([]); - - if (a.address) { - if (network && network.bech32 !== _address().prefix) throw new TypeError('Invalid prefix or Network mismatch'); - if (_address().version !== 0x00) throw new TypeError('Invalid address version'); - if (_address().data.length !== 20) throw new TypeError('Invalid address data'); - hash = _address().data; - } - - if (a.hash) { - if (hash.length > 0 && !hash.equals(a.hash)) throw new TypeError('Hash mismatch');else hash = a.hash; - } - - if (a.output) { - if (a.output.length !== 22 || a.output[0] !== OPS.OP_0 || a.output[1] !== 0x14) throw new TypeError('Output is invalid'); - if (hash.length > 0 && !hash.equals(a.output.slice(2))) throw new TypeError('Hash mismatch');else hash = a.output.slice(2); - } - - if (a.pubkey) { - var pkh = bcrypto.hash160(a.pubkey); - if (hash.length > 0 && !hash.equals(pkh)) throw new TypeError('Hash mismatch');else hash = pkh; - } - - if (a.witness) { - if (a.witness.length !== 2) throw new TypeError('Witness is invalid'); - if (!bscript.isCanonicalScriptSignature(a.witness[0])) throw new TypeError('Witness has invalid signature'); - if (!ecc.isPoint(a.witness[1])) throw new TypeError('Witness has invalid pubkey'); - if (a.signature && !a.signature.equals(a.witness[0])) throw new TypeError('Signature mismatch'); - if (a.pubkey && !a.pubkey.equals(a.witness[1])) throw new TypeError('Pubkey mismatch'); - - var _pkh = bcrypto.hash160(a.witness[1]); - - if (hash.length > 0 && !hash.equals(_pkh)) throw new TypeError('Hash mismatch'); - } - } - - return Object.assign(o, a); -} - -exports.p2wpkh = p2wpkh; -},{"../crypto":"wHwg","../networks":"LuAr","../script":"zCpQ","./lazy":"SsCk","typeforce":"PKU7","tiny-secp256k1":"fCMY","bech32":"gbth","buffer":"dskh"}],"awsQ":[function(require,module,exports) { -var Buffer = require("buffer").Buffer; -'use strict'; - -Object.defineProperty(exports, '__esModule', { - value: true -}); - -var bcrypto = require('../crypto'); - -var networks_1 = require('../networks'); - -var bscript = require('../script'); - -var lazy = require('./lazy'); - -var typef = require('typeforce'); - -var OPS = bscript.OPS; - -var bech32 = require('bech32'); - -var EMPTY_BUFFER = Buffer.alloc(0); - -function stacksEqual(a, b) { - if (a.length !== b.length) return false; - return a.every(function (x, i) { - return x.equals(b[i]); - }); -} // input: <> -// witness: [redeemScriptSig ...] {redeemScript} -// output: OP_0 {sha256(redeemScript)} - - -function p2wsh(a, opts) { - if (!a.address && !a.hash && !a.output && !a.redeem && !a.witness) throw new TypeError('Not enough data'); - opts = Object.assign({ - validate: true - }, opts || {}); - typef({ - network: typef.maybe(typef.Object), - address: typef.maybe(typef.String), - hash: typef.maybe(typef.BufferN(32)), - output: typef.maybe(typef.BufferN(34)), - redeem: typef.maybe({ - input: typef.maybe(typef.Buffer), - network: typef.maybe(typef.Object), - output: typef.maybe(typef.Buffer), - witness: typef.maybe(typef.arrayOf(typef.Buffer)) - }), - input: typef.maybe(typef.BufferN(0)), - witness: typef.maybe(typef.arrayOf(typef.Buffer)) - }, a); - - var _address = lazy.value(function () { - var result = bech32.decode(a.address); - var version = result.words.shift(); - var data = bech32.fromWords(result.words); - return { - version: version, - prefix: result.prefix, - data: Buffer.from(data) - }; - }); - - var _rchunks = lazy.value(function () { - return bscript.decompile(a.redeem.input); - }); - - var network = a.network; - - if (!network) { - network = a.redeem && a.redeem.network || networks_1.bitcoin; - } - - var o = { - network: network - }; - lazy.prop(o, 'address', function () { - if (!o.hash) return; - var words = bech32.toWords(o.hash); - words.unshift(0x00); - return bech32.encode(network.bech32, words); - }); - lazy.prop(o, 'hash', function () { - if (a.output) return a.output.slice(2); - if (a.address) return _address().data; - if (o.redeem && o.redeem.output) return bcrypto.sha256(o.redeem.output); - }); - lazy.prop(o, 'output', function () { - if (!o.hash) return; - return bscript.compile([OPS.OP_0, o.hash]); - }); - lazy.prop(o, 'redeem', function () { - if (!a.witness) return; - return { - output: a.witness[a.witness.length - 1], - input: EMPTY_BUFFER, - witness: a.witness.slice(0, -1) - }; - }); - lazy.prop(o, 'input', function () { - if (!o.witness) return; - return EMPTY_BUFFER; - }); - lazy.prop(o, 'witness', function () { - // transform redeem input to witness stack? - if (a.redeem && a.redeem.input && a.redeem.input.length > 0 && a.redeem.output && a.redeem.output.length > 0) { - var stack = bscript.toStack(_rchunks()); // assign, and blank the existing input - - o.redeem = Object.assign({ - witness: stack - }, a.redeem); - o.redeem.input = EMPTY_BUFFER; - return [].concat(stack, a.redeem.output); - } - - if (!a.redeem) return; - if (!a.redeem.output) return; - if (!a.redeem.witness) return; - return [].concat(a.redeem.witness, a.redeem.output); - }); - lazy.prop(o, 'name', function () { - var nameParts = ['p2wsh']; - if (o.redeem !== undefined) nameParts.push(o.redeem.name); - return nameParts.join('-'); - }); // extended validation - - if (opts.validate) { - var hash = Buffer.from([]); - - if (a.address) { - if (_address().prefix !== network.bech32) throw new TypeError('Invalid prefix or Network mismatch'); - if (_address().version !== 0x00) throw new TypeError('Invalid address version'); - if (_address().data.length !== 32) throw new TypeError('Invalid address data'); - hash = _address().data; - } - - if (a.hash) { - if (hash.length > 0 && !hash.equals(a.hash)) throw new TypeError('Hash mismatch');else hash = a.hash; - } - - if (a.output) { - if (a.output.length !== 34 || a.output[0] !== OPS.OP_0 || a.output[1] !== 0x20) throw new TypeError('Output is invalid'); - var hash2 = a.output.slice(2); - if (hash.length > 0 && !hash.equals(hash2)) throw new TypeError('Hash mismatch');else hash = hash2; - } - - if (a.redeem) { - if (a.redeem.network && a.redeem.network !== network) throw new TypeError('Network mismatch'); // is there two redeem sources? - - if (a.redeem.input && a.redeem.input.length > 0 && a.redeem.witness && a.redeem.witness.length > 0) throw new TypeError('Ambiguous witness source'); // is the redeem output non-empty? - - if (a.redeem.output) { - if (bscript.decompile(a.redeem.output).length === 0) throw new TypeError('Redeem.output is invalid'); // match hash against other sources - - var _hash = bcrypto.sha256(a.redeem.output); - - if (hash.length > 0 && !hash.equals(_hash)) throw new TypeError('Hash mismatch');else hash = _hash; - } - - if (a.redeem.input && !bscript.isPushOnly(_rchunks())) throw new TypeError('Non push-only scriptSig'); - if (a.witness && a.redeem.witness && !stacksEqual(a.witness, a.redeem.witness)) throw new TypeError('Witness and redeem.witness mismatch'); - } - - if (a.witness) { - if (a.redeem && a.redeem.output && !a.redeem.output.equals(a.witness[a.witness.length - 1])) throw new TypeError('Witness and redeem.output mismatch'); - } - } - - return Object.assign(o, a); -} - -exports.p2wsh = p2wsh; -},{"../crypto":"wHwg","../networks":"LuAr","../script":"zCpQ","./lazy":"SsCk","typeforce":"PKU7","bech32":"gbth","buffer":"dskh"}],"M8O6":[function(require,module,exports) { -'use strict'; - -Object.defineProperty(exports, '__esModule', { - value: true -}); - -var embed_1 = require('./embed'); - -exports.embed = embed_1.p2data; - -var p2ms_1 = require('./p2ms'); - -exports.p2ms = p2ms_1.p2ms; - -var p2pk_1 = require('./p2pk'); - -exports.p2pk = p2pk_1.p2pk; - -var p2pkh_1 = require('./p2pkh'); - -exports.p2pkh = p2pkh_1.p2pkh; - -var p2sh_1 = require('./p2sh'); - -exports.p2sh = p2sh_1.p2sh; - -var p2wpkh_1 = require('./p2wpkh'); - -exports.p2wpkh = p2wpkh_1.p2wpkh; - -var p2wsh_1 = require('./p2wsh'); - -exports.p2wsh = p2wsh_1.p2wsh; // TODO -// witness commitment -},{"./embed":"GxwO","./p2ms":"N5r7","./p2pk":"q45I","./p2pkh":"sm5n","./p2sh":"IpD6","./p2wpkh":"ktg4","./p2wsh":"awsQ"}],"kxhz":[function(require,module,exports) { -var Buffer = require("buffer").Buffer; -'use strict'; - -Object.defineProperty(exports, '__esModule', { - value: true -}); - -var networks = require('./networks'); - -var payments = require('./payments'); - -var bscript = require('./script'); - -var types = require('./types'); - -var bech32 = require('bech32'); - -var bs58check = require('bs58check'); - -var typeforce = require('typeforce'); - -function fromBase58Check(address) { - var payload = bs58check.decode(address); // TODO: 4.0.0, move to "toOutputScript" - - if (payload.length < 21) throw new TypeError(address + ' is too short'); - if (payload.length > 21) throw new TypeError(address + ' is too long'); - var version = payload.readUInt8(0); - var hash = payload.slice(1); - return { - version: version, - hash: hash - }; -} - -exports.fromBase58Check = fromBase58Check; - -function fromBech32(address) { - var result = bech32.decode(address); - var data = bech32.fromWords(result.words.slice(1)); - return { - version: result.words[0], - prefix: result.prefix, - data: Buffer.from(data) - }; -} - -exports.fromBech32 = fromBech32; - -function toBase58Check(hash, version) { - typeforce(types.tuple(types.Hash160bit, types.UInt8), arguments); - var payload = Buffer.allocUnsafe(21); - payload.writeUInt8(version, 0); - hash.copy(payload, 1); - return bs58check.encode(payload); -} - -exports.toBase58Check = toBase58Check; - -function toBech32(data, version, prefix) { - var words = bech32.toWords(data); - words.unshift(version); - return bech32.encode(prefix, words); -} - -exports.toBech32 = toBech32; - -function fromOutputScript(output, network) { - // TODO: Network - network = network || networks.bitcoin; - - try { - return payments.p2pkh({ - output: output, - network: network - }).address; - } catch (e) {} - - try { - return payments.p2sh({ - output: output, - network: network - }).address; - } catch (e) {} - - try { - return payments.p2wpkh({ - output: output, - network: network - }).address; - } catch (e) {} - - try { - return payments.p2wsh({ - output: output, - network: network - }).address; - } catch (e) {} - - throw new Error(bscript.toASM(output) + ' has no matching Address'); -} - -exports.fromOutputScript = fromOutputScript; - -function toOutputScript(address, network) { - network = network || networks.bitcoin; - var decodeBase58; - var decodeBech32; - - try { - decodeBase58 = fromBase58Check(address); - } catch (e) {} - - if (decodeBase58) { - if (decodeBase58.version === network.pubKeyHash) return payments.p2pkh({ - hash: decodeBase58.hash - }).output; - if (decodeBase58.version === network.scriptHash) return payments.p2sh({ - hash: decodeBase58.hash - }).output; - } else { - try { - decodeBech32 = fromBech32(address); - } catch (e) {} - - if (decodeBech32) { - if (decodeBech32.prefix !== network.bech32) throw new Error(address + ' has an invalid prefix'); - - if (decodeBech32.version === 0) { - if (decodeBech32.data.length === 20) return payments.p2wpkh({ - hash: decodeBech32.data - }).output; - if (decodeBech32.data.length === 32) return payments.p2wsh({ - hash: decodeBech32.data - }).output; - } - } - } - - throw new Error(address + ' has no matching Script'); -} - -exports.toOutputScript = toOutputScript; -},{"./networks":"LuAr","./payments":"M8O6","./script":"zCpQ","./types":"mf8L","bech32":"gbth","bs58check":"lJVR","typeforce":"PKU7","buffer":"dskh"}],"XJNj":[function(require,module,exports) { - -var global = arguments[3]; -var process = require("process"); -'use strict' - -// limit of Crypto.getRandomValues() -// https://developer.mozilla.org/en-US/docs/Web/API/Crypto/getRandomValues -var MAX_BYTES = 65536 - -// Node supports requesting up to this number of bytes -// https://github.com/nodejs/node/blob/master/lib/internal/crypto/random.js#L48 -var MAX_UINT32 = 4294967295 - -function oldBrowser () { - throw new Error('Secure random number generation is not supported by this browser.\nUse Chrome, Firefox or Internet Explorer 11') -} - -var Buffer = require('safe-buffer').Buffer -var crypto = global.crypto || global.msCrypto - -if (crypto && crypto.getRandomValues) { - module.exports = randomBytes -} else { - module.exports = oldBrowser -} - -function randomBytes (size, cb) { - // phantomjs needs to throw - if (size > MAX_UINT32) throw new RangeError('requested too many random bytes') - - var bytes = Buffer.allocUnsafe(size) - - if (size > 0) { // getRandomValues fails on IE if size == 0 - if (size > MAX_BYTES) { // this is the max bytes crypto.getRandomValues - // can do at once see https://developer.mozilla.org/en-US/docs/Web/API/window.crypto.getRandomValues - for (var generated = 0; generated < size; generated += MAX_BYTES) { - // buffer.slice automatically checks if the end is past the end of - // the buffer so we don't have to here - crypto.getRandomValues(bytes.slice(generated, generated + MAX_BYTES)) - } - } else { - crypto.getRandomValues(bytes) - } - } - - if (typeof cb === 'function') { - return process.nextTick(function () { - cb(null, bytes) - }) - } - - return bytes -} - -},{"safe-buffer":"Wugr","process":"pBGv"}],"SRL3":[function(require,module,exports) { -var Buffer = require("buffer").Buffer; -'use strict'; - -function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - -function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } - -function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; } - -Object.defineProperty(exports, '__esModule', { - value: true -}); - -var NETWORKS = require('./networks'); - -var types = require('./types'); - -var ecc = require('tiny-secp256k1'); - -var randomBytes = require('randombytes'); - -var typeforce = require('typeforce'); - -var wif = require('wif'); - -var isOptions = typeforce.maybe(typeforce.compile({ - compressed: types.maybe(types.Boolean), - network: types.maybe(types.Network) -})); - -var ECPair = -/*#__PURE__*/ -function () { - function ECPair(__D, __Q, options) { - _classCallCheck(this, ECPair); - - this.__D = __D; - this.__Q = __Q; - this.lowR = false; - if (options === undefined) options = {}; - this.compressed = options.compressed === undefined ? true : options.compressed; - this.network = options.network || NETWORKS.bitcoin; - if (__Q !== undefined) this.__Q = ecc.pointCompress(__Q, this.compressed); - } - - _createClass(ECPair, [{ - key: "toWIF", - value: function toWIF() { - if (!this.__D) throw new Error('Missing private key'); - return wif.encode(this.network.wif, this.__D, this.compressed); - } - }, { - key: "sign", - value: function sign(hash, lowR) { - if (!this.__D) throw new Error('Missing private key'); - if (lowR === undefined) lowR = this.lowR; - - if (lowR === false) { - return ecc.sign(hash, this.__D); - } else { - var sig = ecc.sign(hash, this.__D); - var extraData = Buffer.alloc(32, 0); - var counter = 0; // if first try is lowR, skip the loop - // for second try and on, add extra entropy counting up - - while (sig[0] > 0x7f) { - counter++; - extraData.writeUIntLE(counter, 0, 6); - sig = ecc.signWithEntropy(hash, this.__D, extraData); - } - - return sig; - } - } - }, { - key: "verify", - value: function verify(hash, signature) { - return ecc.verify(hash, this.publicKey, signature); - } - }, { - key: "privateKey", - get: function get() { - return this.__D; - } - }, { - key: "publicKey", - get: function get() { - if (!this.__Q) this.__Q = ecc.pointFromScalar(this.__D, this.compressed); - return this.__Q; - } - }]); - - return ECPair; -}(); - -function fromPrivateKey(buffer, options) { - typeforce(types.Buffer256bit, buffer); - if (!ecc.isPrivate(buffer)) throw new TypeError('Private key not in range [1, n)'); - typeforce(isOptions, options); - return new ECPair(buffer, undefined, options); -} - -exports.fromPrivateKey = fromPrivateKey; - -function fromPublicKey(buffer, options) { - typeforce(ecc.isPoint, buffer); - typeforce(isOptions, options); - return new ECPair(undefined, buffer, options); -} - -exports.fromPublicKey = fromPublicKey; - -function fromWIF(wifString, network) { - var decoded = wif.decode(wifString); - var version = decoded.version; // list of networks? - - if (types.Array(network)) { - network = network.filter(function (x) { - return version === x.wif; - }).pop(); - if (!network) throw new Error('Unknown network version'); // otherwise, assume a network object (or default to bitcoin) - } else { - network = network || NETWORKS.bitcoin; - if (version !== network.wif) throw new Error('Invalid network version'); - } - - return fromPrivateKey(decoded.privateKey, { - compressed: decoded.compressed, - network: network - }); -} - -exports.fromWIF = fromWIF; - -function makeRandom(options) { - typeforce(isOptions, options); - if (options === undefined) options = {}; - var rng = options.rng || randomBytes; - var d; - - do { - d = rng(32); - typeforce(types.Buffer256bit, d); - } while (!ecc.isPrivate(d)); - - return fromPrivateKey(d, options); -} - -exports.makeRandom = makeRandom; -},{"./networks":"LuAr","./types":"mf8L","tiny-secp256k1":"fCMY","randombytes":"XJNj","typeforce":"PKU7","wif":"zCNS","buffer":"dskh"}],"kTjr":[function(require,module,exports) { -'use strict'; - -Object.defineProperty(exports, '__esModule', { - value: true -}); // https://github.com/feross/buffer/blob/master/index.js#L1127 - -function verifuint(value, max) { - if (typeof value !== 'number') throw new Error('cannot write a non-number as a number'); - if (value < 0) throw new Error('specified a negative value for writing an unsigned value'); - if (value > max) throw new Error('RangeError: value out of range'); - if (Math.floor(value) !== value) throw new Error('value has a fractional component'); -} - -function readUInt64LE(buffer, offset) { - var a = buffer.readUInt32LE(offset); - var b = buffer.readUInt32LE(offset + 4); - b *= 0x100000000; - verifuint(b + a, 0x001fffffffffffff); - return b + a; -} - -exports.readUInt64LE = readUInt64LE; - -function writeUInt64LE(buffer, value, offset) { - verifuint(value, 0x001fffffffffffff); - buffer.writeInt32LE(value & -1, offset); - buffer.writeUInt32LE(Math.floor(value / 0x100000000), offset + 4); - return offset + 8; -} - -exports.writeUInt64LE = writeUInt64LE; - -function reverseBuffer(buffer) { - if (buffer.length < 1) return buffer; - var j = buffer.length - 1; - var tmp = 0; - - for (var i = 0; i < buffer.length / 2; i++) { - tmp = buffer[i]; - buffer[i] = buffer[j]; - buffer[j] = tmp; - j--; - } - - return buffer; -} - -exports.reverseBuffer = reverseBuffer; -},{}],"xFE2":[function(require,module,exports) { - -'use strict' -var Buffer = require('safe-buffer').Buffer - -// Number.MAX_SAFE_INTEGER -var MAX_SAFE_INTEGER = 9007199254740991 - -function checkUInt53 (n) { - if (n < 0 || n > MAX_SAFE_INTEGER || n % 1 !== 0) throw new RangeError('value out of range') -} - -function encode (number, buffer, offset) { - checkUInt53(number) - - if (!buffer) buffer = Buffer.allocUnsafe(encodingLength(number)) - if (!Buffer.isBuffer(buffer)) throw new TypeError('buffer must be a Buffer instance') - if (!offset) offset = 0 - - // 8 bit - if (number < 0xfd) { - buffer.writeUInt8(number, offset) - encode.bytes = 1 - - // 16 bit - } else if (number <= 0xffff) { - buffer.writeUInt8(0xfd, offset) - buffer.writeUInt16LE(number, offset + 1) - encode.bytes = 3 - - // 32 bit - } else if (number <= 0xffffffff) { - buffer.writeUInt8(0xfe, offset) - buffer.writeUInt32LE(number, offset + 1) - encode.bytes = 5 - - // 64 bit - } else { - buffer.writeUInt8(0xff, offset) - buffer.writeUInt32LE(number >>> 0, offset + 1) - buffer.writeUInt32LE((number / 0x100000000) | 0, offset + 5) - encode.bytes = 9 - } - - return buffer -} - -function decode (buffer, offset) { - if (!Buffer.isBuffer(buffer)) throw new TypeError('buffer must be a Buffer instance') - if (!offset) offset = 0 - - var first = buffer.readUInt8(offset) - - // 8 bit - if (first < 0xfd) { - decode.bytes = 1 - return first - - // 16 bit - } else if (first === 0xfd) { - decode.bytes = 3 - return buffer.readUInt16LE(offset + 1) - - // 32 bit - } else if (first === 0xfe) { - decode.bytes = 5 - return buffer.readUInt32LE(offset + 1) - - // 64 bit - } else { - decode.bytes = 9 - var lo = buffer.readUInt32LE(offset + 1) - var hi = buffer.readUInt32LE(offset + 5) - var number = hi * 0x0100000000 + lo - checkUInt53(number) - - return number - } -} - -function encodingLength (number) { - checkUInt53(number) - - return ( - number < 0xfd ? 1 - : number <= 0xffff ? 3 - : number <= 0xffffffff ? 5 - : 9 - ) -} - -module.exports = { encode: encode, decode: decode, encodingLength: encodingLength } - -},{"safe-buffer":"Wugr"}],"kntI":[function(require,module,exports) { -var Buffer = require("buffer").Buffer; -'use strict'; - -function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - -function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } - -function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; } - -Object.defineProperty(exports, '__esModule', { - value: true -}); - -var bufferutils = require('./bufferutils'); - -var bufferutils_1 = require('./bufferutils'); - -var bcrypto = require('./crypto'); - -var bscript = require('./script'); - -var script_1 = require('./script'); - -var types = require('./types'); - -var typeforce = require('typeforce'); - -var varuint = require('varuint-bitcoin'); - -function varSliceSize(someScript) { - var length = someScript.length; - return varuint.encodingLength(length) + length; -} - -function vectorSize(someVector) { - var length = someVector.length; - return varuint.encodingLength(length) + someVector.reduce(function (sum, witness) { - return sum + varSliceSize(witness); - }, 0); -} - -var EMPTY_SCRIPT = Buffer.allocUnsafe(0); -var EMPTY_WITNESS = []; -var ZERO = Buffer.from('0000000000000000000000000000000000000000000000000000000000000000', 'hex'); -var ONE = Buffer.from('0000000000000000000000000000000000000000000000000000000000000001', 'hex'); -var VALUE_UINT64_MAX = Buffer.from('ffffffffffffffff', 'hex'); -var BLANK_OUTPUT = { - script: EMPTY_SCRIPT, - valueBuffer: VALUE_UINT64_MAX -}; - -function isOutput(out) { - return out.value !== undefined; -} - -var Transaction = -/*#__PURE__*/ -function () { - function Transaction() { - _classCallCheck(this, Transaction); - - this.version = 1; - this.locktime = 0; - this.ins = []; - this.outs = []; - } - - _createClass(Transaction, [{ - key: "isCoinbase", - value: function isCoinbase() { - return this.ins.length === 1 && Transaction.isCoinbaseHash(this.ins[0].hash); - } - }, { - key: "addInput", - value: function addInput(hash, index, sequence, scriptSig) { - typeforce(types.tuple(types.Hash256bit, types.UInt32, types.maybe(types.UInt32), types.maybe(types.Buffer)), arguments); - - if (types.Null(sequence)) { - sequence = Transaction.DEFAULT_SEQUENCE; - } // Add the input and return the input's index - - - return this.ins.push({ - hash: hash, - index: index, - script: scriptSig || EMPTY_SCRIPT, - sequence: sequence, - witness: EMPTY_WITNESS - }) - 1; - } - }, { - key: "addOutput", - value: function addOutput(scriptPubKey, value) { - typeforce(types.tuple(types.Buffer, types.Satoshi), arguments); // Add the output and return the output's index - - return this.outs.push({ - script: scriptPubKey, - value: value - }) - 1; - } - }, { - key: "hasWitnesses", - value: function hasWitnesses() { - return this.ins.some(function (x) { - return x.witness.length !== 0; - }); - } - }, { - key: "weight", - value: function weight() { - var base = this.__byteLength(false); - - var total = this.__byteLength(true); - - return base * 3 + total; - } - }, { - key: "virtualSize", - value: function virtualSize() { - return Math.ceil(this.weight() / 4); - } - }, { - key: "byteLength", - value: function byteLength() { - return this.__byteLength(true); - } - }, { - key: "clone", - value: function clone() { - var newTx = new Transaction(); - newTx.version = this.version; - newTx.locktime = this.locktime; - newTx.ins = this.ins.map(function (txIn) { - return { - hash: txIn.hash, - index: txIn.index, - script: txIn.script, - sequence: txIn.sequence, - witness: txIn.witness - }; - }); - newTx.outs = this.outs.map(function (txOut) { - return { - script: txOut.script, - value: txOut.value - }; - }); - return newTx; - } - /** - * Hash transaction for signing a specific input. - * - * Bitcoin uses a different hash for each signed transaction input. - * This method copies the transaction, makes the necessary changes based on the - * hashType, and then hashes the result. - * This hash can then be used to sign the provided transaction input. - */ - - }, { - key: "hashForSignature", - value: function hashForSignature(inIndex, prevOutScript, hashType) { - typeforce(types.tuple(types.UInt32, types.Buffer, - /* types.UInt8 */ - types.Number), arguments); // https://github.com/bitcoin/bitcoin/blob/master/src/test/sighash_tests.cpp#L29 - - if (inIndex >= this.ins.length) return ONE; // ignore OP_CODESEPARATOR - - var ourScript = bscript.compile(bscript.decompile(prevOutScript).filter(function (x) { - return x !== script_1.OPS.OP_CODESEPARATOR; - })); - var txTmp = this.clone(); // SIGHASH_NONE: ignore all outputs? (wildcard payee) - - if ((hashType & 0x1f) === Transaction.SIGHASH_NONE) { - txTmp.outs = []; // ignore sequence numbers (except at inIndex) - - txTmp.ins.forEach(function (input, i) { - if (i === inIndex) return; - input.sequence = 0; - }); // SIGHASH_SINGLE: ignore all outputs, except at the same index? - } else if ((hashType & 0x1f) === Transaction.SIGHASH_SINGLE) { - // https://github.com/bitcoin/bitcoin/blob/master/src/test/sighash_tests.cpp#L60 - if (inIndex >= this.outs.length) return ONE; // truncate outputs after - - txTmp.outs.length = inIndex + 1; // "blank" outputs before - - for (var i = 0; i < inIndex; i++) { - txTmp.outs[i] = BLANK_OUTPUT; - } // ignore sequence numbers (except at inIndex) - - - txTmp.ins.forEach(function (input, y) { - if (y === inIndex) return; - input.sequence = 0; - }); - } // SIGHASH_ANYONECANPAY: ignore inputs entirely? - - - if (hashType & Transaction.SIGHASH_ANYONECANPAY) { - txTmp.ins = [txTmp.ins[inIndex]]; - txTmp.ins[0].script = ourScript; // SIGHASH_ALL: only ignore input scripts - } else { - // "blank" others input scripts - txTmp.ins.forEach(function (input) { - input.script = EMPTY_SCRIPT; - }); - txTmp.ins[inIndex].script = ourScript; - } // serialize and hash - - - var buffer = Buffer.allocUnsafe(txTmp.__byteLength(false) + 4); - buffer.writeInt32LE(hashType, buffer.length - 4); - - txTmp.__toBuffer(buffer, 0, false); - - return bcrypto.hash256(buffer); - } - }, { - key: "hashForWitnessV0", - value: function hashForWitnessV0(inIndex, prevOutScript, value, hashType) { - typeforce(types.tuple(types.UInt32, types.Buffer, types.Satoshi, types.UInt32), arguments); - var tbuffer = Buffer.from([]); - var toffset = 0; - - function writeSlice(slice) { - toffset += slice.copy(tbuffer, toffset); - } - - function writeUInt32(i) { - toffset = tbuffer.writeUInt32LE(i, toffset); - } - - function writeUInt64(i) { - toffset = bufferutils.writeUInt64LE(tbuffer, i, toffset); - } - - function writeVarInt(i) { - varuint.encode(i, tbuffer, toffset); - toffset += varuint.encode.bytes; - } - - function writeVarSlice(slice) { - writeVarInt(slice.length); - writeSlice(slice); - } - - var hashOutputs = ZERO; - var hashPrevouts = ZERO; - var hashSequence = ZERO; - - if (!(hashType & Transaction.SIGHASH_ANYONECANPAY)) { - tbuffer = Buffer.allocUnsafe(36 * this.ins.length); - toffset = 0; - this.ins.forEach(function (txIn) { - writeSlice(txIn.hash); - writeUInt32(txIn.index); - }); - hashPrevouts = bcrypto.hash256(tbuffer); - } - - if (!(hashType & Transaction.SIGHASH_ANYONECANPAY) && (hashType & 0x1f) !== Transaction.SIGHASH_SINGLE && (hashType & 0x1f) !== Transaction.SIGHASH_NONE) { - tbuffer = Buffer.allocUnsafe(4 * this.ins.length); - toffset = 0; - this.ins.forEach(function (txIn) { - writeUInt32(txIn.sequence); - }); - hashSequence = bcrypto.hash256(tbuffer); - } - - if ((hashType & 0x1f) !== Transaction.SIGHASH_SINGLE && (hashType & 0x1f) !== Transaction.SIGHASH_NONE) { - var txOutsSize = this.outs.reduce(function (sum, output) { - return sum + 8 + varSliceSize(output.script); - }, 0); - tbuffer = Buffer.allocUnsafe(txOutsSize); - toffset = 0; - this.outs.forEach(function (out) { - writeUInt64(out.value); - writeVarSlice(out.script); - }); - hashOutputs = bcrypto.hash256(tbuffer); - } else if ((hashType & 0x1f) === Transaction.SIGHASH_SINGLE && inIndex < this.outs.length) { - var output = this.outs[inIndex]; - tbuffer = Buffer.allocUnsafe(8 + varSliceSize(output.script)); - toffset = 0; - writeUInt64(output.value); - writeVarSlice(output.script); - hashOutputs = bcrypto.hash256(tbuffer); - } - - tbuffer = Buffer.allocUnsafe(156 + varSliceSize(prevOutScript)); - toffset = 0; - var input = this.ins[inIndex]; - writeUInt32(this.version); - writeSlice(hashPrevouts); - writeSlice(hashSequence); - writeSlice(input.hash); - writeUInt32(input.index); - writeVarSlice(prevOutScript); - writeUInt64(value); - writeUInt32(input.sequence); - writeSlice(hashOutputs); - writeUInt32(this.locktime); - writeUInt32(hashType); - return bcrypto.hash256(tbuffer); - } - }, { - key: "getHash", - value: function getHash(forWitness) { - // wtxid for coinbase is always 32 bytes of 0x00 - if (forWitness && this.isCoinbase()) return Buffer.alloc(32, 0); - return bcrypto.hash256(this.__toBuffer(undefined, undefined, forWitness)); - } - }, { - key: "getId", - value: function getId() { - // transaction hash's are displayed in reverse order - return bufferutils_1.reverseBuffer(this.getHash(false)).toString('hex'); - } - }, { - key: "toBuffer", - value: function toBuffer(buffer, initialOffset) { - return this.__toBuffer(buffer, initialOffset, true); - } - }, { - key: "toHex", - value: function toHex() { - return this.toBuffer(undefined, undefined).toString('hex'); - } - }, { - key: "setInputScript", - value: function setInputScript(index, scriptSig) { - typeforce(types.tuple(types.Number, types.Buffer), arguments); - this.ins[index].script = scriptSig; - } - }, { - key: "setWitness", - value: function setWitness(index, witness) { - typeforce(types.tuple(types.Number, [types.Buffer]), arguments); - this.ins[index].witness = witness; - } - }, { - key: "__byteLength", - value: function __byteLength(_ALLOW_WITNESS) { - var hasWitnesses = _ALLOW_WITNESS && this.hasWitnesses(); - - return (hasWitnesses ? 10 : 8) + varuint.encodingLength(this.ins.length) + varuint.encodingLength(this.outs.length) + this.ins.reduce(function (sum, input) { - return sum + 40 + varSliceSize(input.script); - }, 0) + this.outs.reduce(function (sum, output) { - return sum + 8 + varSliceSize(output.script); - }, 0) + (hasWitnesses ? this.ins.reduce(function (sum, input) { - return sum + vectorSize(input.witness); - }, 0) : 0); - } - }, { - key: "__toBuffer", - value: function __toBuffer(buffer, initialOffset, _ALLOW_WITNESS) { - if (!buffer) buffer = Buffer.allocUnsafe(this.__byteLength(_ALLOW_WITNESS)); - var offset = initialOffset || 0; - - function writeSlice(slice) { - offset += slice.copy(buffer, offset); - } - - function writeUInt8(i) { - offset = buffer.writeUInt8(i, offset); - } - - function writeUInt32(i) { - offset = buffer.writeUInt32LE(i, offset); - } - - function writeInt32(i) { - offset = buffer.writeInt32LE(i, offset); - } - - function writeUInt64(i) { - offset = bufferutils.writeUInt64LE(buffer, i, offset); - } - - function writeVarInt(i) { - varuint.encode(i, buffer, offset); - offset += varuint.encode.bytes; - } - - function writeVarSlice(slice) { - writeVarInt(slice.length); - writeSlice(slice); - } - - function writeVector(vector) { - writeVarInt(vector.length); - vector.forEach(writeVarSlice); - } - - writeInt32(this.version); - - var hasWitnesses = _ALLOW_WITNESS && this.hasWitnesses(); - - if (hasWitnesses) { - writeUInt8(Transaction.ADVANCED_TRANSACTION_MARKER); - writeUInt8(Transaction.ADVANCED_TRANSACTION_FLAG); - } - - writeVarInt(this.ins.length); - this.ins.forEach(function (txIn) { - writeSlice(txIn.hash); - writeUInt32(txIn.index); - writeVarSlice(txIn.script); - writeUInt32(txIn.sequence); - }); - writeVarInt(this.outs.length); - this.outs.forEach(function (txOut) { - if (isOutput(txOut)) { - writeUInt64(txOut.value); - } else { - writeSlice(txOut.valueBuffer); - } - - writeVarSlice(txOut.script); - }); - - if (hasWitnesses) { - this.ins.forEach(function (input) { - writeVector(input.witness); - }); - } - - writeUInt32(this.locktime); // avoid slicing unless necessary - - if (initialOffset !== undefined) return buffer.slice(initialOffset, offset); - return buffer; - } - }], [{ - key: "fromBuffer", - value: function fromBuffer(buffer, _NO_STRICT) { - var offset = 0; - - function readSlice(n) { - offset += n; - return buffer.slice(offset - n, offset); - } - - function readUInt32() { - var i = buffer.readUInt32LE(offset); - offset += 4; - return i; - } - - function readInt32() { - var i = buffer.readInt32LE(offset); - offset += 4; - return i; - } - - function readUInt64() { - var i = bufferutils.readUInt64LE(buffer, offset); - offset += 8; - return i; - } - - function readVarInt() { - var vi = varuint.decode(buffer, offset); - offset += varuint.decode.bytes; - return vi; - } - - function readVarSlice() { - return readSlice(readVarInt()); - } - - function readVector() { - var count = readVarInt(); - var vector = []; - - for (var i = 0; i < count; i++) { - vector.push(readVarSlice()); - } - - return vector; - } - - var tx = new Transaction(); - tx.version = readInt32(); - var marker = buffer.readUInt8(offset); - var flag = buffer.readUInt8(offset + 1); - var hasWitnesses = false; - - if (marker === Transaction.ADVANCED_TRANSACTION_MARKER && flag === Transaction.ADVANCED_TRANSACTION_FLAG) { - offset += 2; - hasWitnesses = true; - } - - var vinLen = readVarInt(); - - for (var i = 0; i < vinLen; ++i) { - tx.ins.push({ - hash: readSlice(32), - index: readUInt32(), - script: readVarSlice(), - sequence: readUInt32(), - witness: EMPTY_WITNESS - }); - } - - var voutLen = readVarInt(); - - for (var _i = 0; _i < voutLen; ++_i) { - tx.outs.push({ - value: readUInt64(), - script: readVarSlice() - }); - } - - if (hasWitnesses) { - for (var _i2 = 0; _i2 < vinLen; ++_i2) { - tx.ins[_i2].witness = readVector(); - } // was this pointless? - - - if (!tx.hasWitnesses()) throw new Error('Transaction has superfluous witness data'); - } - - tx.locktime = readUInt32(); - if (_NO_STRICT) return tx; - if (offset !== buffer.length) throw new Error('Transaction has unexpected data'); - return tx; - } - }, { - key: "fromHex", - value: function fromHex(hex) { - return Transaction.fromBuffer(Buffer.from(hex, 'hex'), false); - } - }, { - key: "isCoinbaseHash", - value: function isCoinbaseHash(buffer) { - typeforce(types.Hash256bit, buffer); - - for (var i = 0; i < 32; ++i) { - if (buffer[i] !== 0) return false; - } - - return true; - } - }]); - - return Transaction; -}(); - -Transaction.DEFAULT_SEQUENCE = 0xffffffff; -Transaction.SIGHASH_ALL = 0x01; -Transaction.SIGHASH_NONE = 0x02; -Transaction.SIGHASH_SINGLE = 0x03; -Transaction.SIGHASH_ANYONECANPAY = 0x80; -Transaction.ADVANCED_TRANSACTION_MARKER = 0x00; -Transaction.ADVANCED_TRANSACTION_FLAG = 0x01; -exports.Transaction = Transaction; -},{"./bufferutils":"kTjr","./crypto":"wHwg","./script":"zCpQ","./types":"mf8L","typeforce":"PKU7","varuint-bitcoin":"xFE2","buffer":"dskh"}],"DNBG":[function(require,module,exports) { -var Buffer = require("buffer").Buffer; -// constant-space merkle root calculation algorithm -module.exports = function fastRoot (values, digestFn) { - if (!Array.isArray(values)) throw TypeError('Expected values Array') - if (typeof digestFn !== 'function') throw TypeError('Expected digest Function') - - var length = values.length - var results = values.concat() - - while (length > 1) { - var j = 0 - - for (var i = 0; i < length; i += 2, ++j) { - var left = results[i] - var right = i + 1 === length ? left : results[i + 1] - var data = Buffer.concat([left, right]) - - results[j] = digestFn(data) - } - - length = j - } - - return results[0] -} - -},{"buffer":"dskh"}],"n2sH":[function(require,module,exports) { -var Buffer = require("buffer").Buffer; -'use strict'; - -function _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } - -function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - -function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } - -function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; } - -Object.defineProperty(exports, '__esModule', { - value: true -}); - -var bufferutils_1 = require('./bufferutils'); - -var bcrypto = require('./crypto'); - -var transaction_1 = require('./transaction'); - -var types = require('./types'); - -var fastMerkleRoot = require('merkle-lib/fastRoot'); - -var typeforce = require('typeforce'); - -var varuint = require('varuint-bitcoin'); - -var errorMerkleNoTxes = new TypeError('Cannot compute merkle root for zero transactions'); -var errorWitnessNotSegwit = new TypeError('Cannot compute witness commit for non-segwit block'); - -var Block = -/*#__PURE__*/ -function () { - function Block() { - _classCallCheck(this, Block); - - this.version = 1; - this.prevHash = undefined; - this.merkleRoot = undefined; - this.timestamp = 0; - this.witnessCommit = undefined; - this.bits = 0; - this.nonce = 0; - this.transactions = undefined; - } - - _createClass(Block, [{ - key: "getWitnessCommit", - value: function getWitnessCommit() { - if (!txesHaveWitnessCommit(this.transactions)) return null; // The merkle root for the witness data is in an OP_RETURN output. - // There is no rule for the index of the output, so use filter to find it. - // The root is prepended with 0xaa21a9ed so check for 0x6a24aa21a9ed - // If multiple commits are found, the output with highest index is assumed. - - var witnessCommits = this.transactions[0].outs.filter(function (out) { - return out.script.slice(0, 6).equals(Buffer.from('6a24aa21a9ed', 'hex')); - }).map(function (out) { - return out.script.slice(6, 38); - }); - if (witnessCommits.length === 0) return null; // Use the commit with the highest output (should only be one though) - - var result = witnessCommits[witnessCommits.length - 1]; - if (!(result instanceof Buffer && result.length === 32)) return null; - return result; - } - }, { - key: "hasWitnessCommit", - value: function hasWitnessCommit() { - if (this.witnessCommit instanceof Buffer && this.witnessCommit.length === 32) return true; - if (this.getWitnessCommit() !== null) return true; - return false; - } - }, { - key: "hasWitness", - value: function hasWitness() { - return anyTxHasWitness(this.transactions); - } - }, { - key: "byteLength", - value: function byteLength(headersOnly) { - if (headersOnly || !this.transactions) return 80; - return 80 + varuint.encodingLength(this.transactions.length) + this.transactions.reduce(function (a, x) { - return a + x.byteLength(); - }, 0); - } - }, { - key: "getHash", - value: function getHash() { - return bcrypto.hash256(this.toBuffer(true)); - } - }, { - key: "getId", - value: function getId() { - return bufferutils_1.reverseBuffer(this.getHash()).toString('hex'); - } - }, { - key: "getUTCDate", - value: function getUTCDate() { - var date = new Date(0); // epoch - - date.setUTCSeconds(this.timestamp); - return date; - } // TODO: buffer, offset compatibility - - }, { - key: "toBuffer", - value: function toBuffer(headersOnly) { - var buffer = Buffer.allocUnsafe(this.byteLength(headersOnly)); - var offset = 0; - - var writeSlice = function writeSlice(slice) { - slice.copy(buffer, offset); - offset += slice.length; - }; - - var writeInt32 = function writeInt32(i) { - buffer.writeInt32LE(i, offset); - offset += 4; - }; - - var writeUInt32 = function writeUInt32(i) { - buffer.writeUInt32LE(i, offset); - offset += 4; - }; - - writeInt32(this.version); - writeSlice(this.prevHash); - writeSlice(this.merkleRoot); - writeUInt32(this.timestamp); - writeUInt32(this.bits); - writeUInt32(this.nonce); - if (headersOnly || !this.transactions) return buffer; - varuint.encode(this.transactions.length, buffer, offset); - offset += varuint.encode.bytes; - this.transactions.forEach(function (tx) { - var txSize = tx.byteLength(); // TODO: extract from toBuffer? - - tx.toBuffer(buffer, offset); - offset += txSize; - }); - return buffer; - } - }, { - key: "toHex", - value: function toHex(headersOnly) { - return this.toBuffer(headersOnly).toString('hex'); - } - }, { - key: "checkTxRoots", - value: function checkTxRoots() { - // If the Block has segwit transactions but no witness commit, - // there's no way it can be valid, so fail the check. - var hasWitnessCommit = this.hasWitnessCommit(); - if (!hasWitnessCommit && this.hasWitness()) return false; - return this.__checkMerkleRoot() && (hasWitnessCommit ? this.__checkWitnessCommit() : true); - } - }, { - key: "checkProofOfWork", - value: function checkProofOfWork() { - var hash = bufferutils_1.reverseBuffer(this.getHash()); - var target = Block.calculateTarget(this.bits); - return hash.compare(target) <= 0; - } - }, { - key: "__checkMerkleRoot", - value: function __checkMerkleRoot() { - if (!this.transactions) throw errorMerkleNoTxes; - var actualMerkleRoot = Block.calculateMerkleRoot(this.transactions); - return this.merkleRoot.compare(actualMerkleRoot) === 0; - } - }, { - key: "__checkWitnessCommit", - value: function __checkWitnessCommit() { - if (!this.transactions) throw errorMerkleNoTxes; - if (!this.hasWitnessCommit()) throw errorWitnessNotSegwit; - var actualWitnessCommit = Block.calculateMerkleRoot(this.transactions, true); - return this.witnessCommit.compare(actualWitnessCommit) === 0; - } - }], [{ - key: "fromBuffer", - value: function fromBuffer(buffer) { - if (buffer.length < 80) throw new Error('Buffer too small (< 80 bytes)'); - var offset = 0; - - var readSlice = function readSlice(n) { - offset += n; - return buffer.slice(offset - n, offset); - }; - - var readUInt32 = function readUInt32() { - var i = buffer.readUInt32LE(offset); - offset += 4; - return i; - }; - - var readInt32 = function readInt32() { - var i = buffer.readInt32LE(offset); - offset += 4; - return i; - }; - - var block = new Block(); - block.version = readInt32(); - block.prevHash = readSlice(32); - block.merkleRoot = readSlice(32); - block.timestamp = readUInt32(); - block.bits = readUInt32(); - block.nonce = readUInt32(); - if (buffer.length === 80) return block; - - var readVarInt = function readVarInt() { - var vi = varuint.decode(buffer, offset); - offset += varuint.decode.bytes; - return vi; - }; - - var readTransaction = function readTransaction() { - var tx = transaction_1.Transaction.fromBuffer(buffer.slice(offset), true); - offset += tx.byteLength(); - return tx; - }; - - var nTransactions = readVarInt(); - block.transactions = []; - - for (var i = 0; i < nTransactions; ++i) { - var tx = readTransaction(); - block.transactions.push(tx); - } - - var witnessCommit = block.getWitnessCommit(); // This Block contains a witness commit - - if (witnessCommit) block.witnessCommit = witnessCommit; - return block; - } - }, { - key: "fromHex", - value: function fromHex(hex) { - return Block.fromBuffer(Buffer.from(hex, 'hex')); - } - }, { - key: "calculateTarget", - value: function calculateTarget(bits) { - var exponent = ((bits & 0xff000000) >> 24) - 3; - var mantissa = bits & 0x007fffff; - var target = Buffer.alloc(32, 0); - target.writeUIntBE(mantissa, 29 - exponent, 3); - return target; - } - }, { - key: "calculateMerkleRoot", - value: function calculateMerkleRoot(transactions, forWitness) { - typeforce([{ - getHash: types.Function - }], transactions); - if (transactions.length === 0) throw errorMerkleNoTxes; - if (forWitness && !txesHaveWitnessCommit(transactions)) throw errorWitnessNotSegwit; - var hashes = transactions.map(function (transaction) { - return transaction.getHash(forWitness); - }); - var rootHash = fastMerkleRoot(hashes, bcrypto.hash256); - return forWitness ? bcrypto.hash256(Buffer.concat([rootHash, transactions[0].ins[0].witness[0]])) : rootHash; - } - }]); - - return Block; -}(); - -exports.Block = Block; - -function txesHaveWitnessCommit(transactions) { - return transactions instanceof Array && transactions[0] && transactions[0].ins && transactions[0].ins instanceof Array && transactions[0].ins[0] && transactions[0].ins[0].witness && transactions[0].ins[0].witness instanceof Array && transactions[0].ins[0].witness.length > 0; -} - -function anyTxHasWitness(transactions) { - return transactions instanceof Array && transactions.some(function (tx) { - return _typeof(tx) === 'object' && tx.ins instanceof Array && tx.ins.some(function (input) { - return _typeof(input) === 'object' && input.witness instanceof Array && input.witness.length > 0; - }); - }); -} -},{"./bufferutils":"kTjr","./crypto":"wHwg","./transaction":"kntI","./types":"mf8L","merkle-lib/fastRoot":"DNBG","typeforce":"PKU7","varuint-bitcoin":"xFE2","buffer":"dskh"}],"TcPe":[function(require,module,exports) { -'use strict'; - -Object.defineProperty(exports, '__esModule', { - value: true -}); -var GlobalTypes; - -(function (GlobalTypes) { - GlobalTypes[GlobalTypes['UNSIGNED_TX'] = 0] = 'UNSIGNED_TX'; - GlobalTypes[GlobalTypes['GLOBAL_XPUB'] = 1] = 'GLOBAL_XPUB'; -})(GlobalTypes = exports.GlobalTypes || (exports.GlobalTypes = {})); - -exports.GLOBAL_TYPE_NAMES = ['unsignedTx', 'globalXpub']; -var InputTypes; - -(function (InputTypes) { - InputTypes[InputTypes['NON_WITNESS_UTXO'] = 0] = 'NON_WITNESS_UTXO'; - InputTypes[InputTypes['WITNESS_UTXO'] = 1] = 'WITNESS_UTXO'; - InputTypes[InputTypes['PARTIAL_SIG'] = 2] = 'PARTIAL_SIG'; - InputTypes[InputTypes['SIGHASH_TYPE'] = 3] = 'SIGHASH_TYPE'; - InputTypes[InputTypes['REDEEM_SCRIPT'] = 4] = 'REDEEM_SCRIPT'; - InputTypes[InputTypes['WITNESS_SCRIPT'] = 5] = 'WITNESS_SCRIPT'; - InputTypes[InputTypes['BIP32_DERIVATION'] = 6] = 'BIP32_DERIVATION'; - InputTypes[InputTypes['FINAL_SCRIPTSIG'] = 7] = 'FINAL_SCRIPTSIG'; - InputTypes[InputTypes['FINAL_SCRIPTWITNESS'] = 8] = 'FINAL_SCRIPTWITNESS'; - InputTypes[InputTypes['POR_COMMITMENT'] = 9] = 'POR_COMMITMENT'; -})(InputTypes = exports.InputTypes || (exports.InputTypes = {})); - -exports.INPUT_TYPE_NAMES = ['nonWitnessUtxo', 'witnessUtxo', 'partialSig', 'sighashType', 'redeemScript', 'witnessScript', 'bip32Derivation', 'finalScriptSig', 'finalScriptWitness', 'porCommitment']; -var OutputTypes; - -(function (OutputTypes) { - OutputTypes[OutputTypes['REDEEM_SCRIPT'] = 0] = 'REDEEM_SCRIPT'; - OutputTypes[OutputTypes['WITNESS_SCRIPT'] = 1] = 'WITNESS_SCRIPT'; - OutputTypes[OutputTypes['BIP32_DERIVATION'] = 2] = 'BIP32_DERIVATION'; -})(OutputTypes = exports.OutputTypes || (exports.OutputTypes = {})); - -exports.OUTPUT_TYPE_NAMES = ['redeemScript', 'witnessScript', 'bip32Derivation']; -},{}],"vGPv":[function(require,module,exports) { -var Buffer = require("buffer").Buffer; -'use strict'; - -function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _nonIterableSpread(); } - -function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance"); } - -function _iterableToArray(iter) { if (Symbol.iterator in Object(iter) || Object.prototype.toString.call(iter) === "[object Arguments]") return Array.from(iter); } - -function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = new Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } } - -Object.defineProperty(exports, '__esModule', { - value: true -}); - -var typeFields_1 = require('../../typeFields'); - -var range = function range(n) { - return _toConsumableArray(Array(n).keys()); -}; - -function decode(keyVal) { - if (keyVal.key[0] !== typeFields_1.GlobalTypes.GLOBAL_XPUB) { - throw new Error('Decode Error: could not decode globalXpub with key 0x' + keyVal.key.toString('hex')); - } - - if (keyVal.key.length !== 79 || ![2, 3].includes(keyVal.key[46])) { - throw new Error('Decode Error: globalXpub has invalid extended pubkey in key 0x' + keyVal.key.toString('hex')); - } - - if (keyVal.value.length / 4 % 1 !== 0) { - throw new Error('Decode Error: Global GLOBAL_XPUB value length should be multiple of 4'); - } - - var extendedPubkey = keyVal.key.slice(1); - var data = { - masterFingerprint: keyVal.value.slice(0, 4), - extendedPubkey: extendedPubkey, - path: 'm' - }; - var _iteratorNormalCompletion = true; - var _didIteratorError = false; - var _iteratorError = undefined; - - try { - for (var _iterator = range(keyVal.value.length / 4 - 1)[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) { - var i = _step.value; - var val = keyVal.value.readUInt32LE(i * 4 + 4); - var isHard = !!(val & 0x80000000); - var idx = val & 0x7fffffff; - data.path += '/' + idx.toString(10) + (isHard ? "'" : ''); - } - } catch (err) { - _didIteratorError = true; - _iteratorError = err; - } finally { - try { - if (!_iteratorNormalCompletion && _iterator.return != null) { - _iterator.return(); - } - } finally { - if (_didIteratorError) { - throw _iteratorError; - } - } - } - - return data; -} - -exports.decode = decode; - -function encode(data) { - var head = Buffer.from([typeFields_1.GlobalTypes.GLOBAL_XPUB]); - var key = Buffer.concat([head, data.extendedPubkey]); - var splitPath = data.path.split('/'); - var value = Buffer.allocUnsafe(splitPath.length * 4); - data.masterFingerprint.copy(value, 0); - var offset = 4; - splitPath.slice(1).forEach(function (level) { - var isHard = level.slice(-1) === "'"; - var num = 0x7fffffff & parseInt(isHard ? level.slice(0, -1) : level, 10); - if (isHard) num += 0x80000000; - value.writeUInt32LE(num, offset); - offset += 4; - }); - return { - key: key, - value: value - }; -} - -exports.encode = encode; -exports.expected = '{ masterFingerprint: Buffer; extendedPubkey: Buffer; path: string; }'; - -function check(data) { - var epk = data.extendedPubkey; - var mfp = data.masterFingerprint; - var p = data.path; - return Buffer.isBuffer(epk) && epk.length === 78 && [2, 3].indexOf(epk[45]) > -1 && Buffer.isBuffer(mfp) && mfp.length === 4 && typeof p === 'string' && !!p.match(/^m(\/\d+'?)+$/); -} - -exports.check = check; - -function canAddToArray(array, item, dupeSet) { - var dupeString = item.extendedPubkey.toString('hex'); - if (dupeSet.has(dupeString)) return false; - dupeSet.add(dupeString); - return array.filter(function (v) { - return v.extendedPubkey.equals(item.extendedPubkey); - }).length === 0; -} - -exports.canAddToArray = canAddToArray; -},{"../../typeFields":"TcPe","buffer":"dskh"}],"KAzb":[function(require,module,exports) { -var Buffer = require("buffer").Buffer; -'use strict'; - -Object.defineProperty(exports, '__esModule', { - value: true -}); - -var typeFields_1 = require('../../typeFields'); - -function encode(data) { - return { - key: Buffer.from([typeFields_1.GlobalTypes.UNSIGNED_TX]), - value: data.toBuffer() - }; -} - -exports.encode = encode; -},{"../../typeFields":"TcPe","buffer":"dskh"}],"ktbP":[function(require,module,exports) { -var Buffer = require("buffer").Buffer; -'use strict'; - -Object.defineProperty(exports, '__esModule', { - value: true -}); - -var typeFields_1 = require('../../typeFields'); - -function decode(keyVal) { - if (keyVal.key[0] !== typeFields_1.InputTypes.FINAL_SCRIPTSIG) { - throw new Error('Decode Error: could not decode finalScriptSig with key 0x' + keyVal.key.toString('hex')); - } - - return keyVal.value; -} - -exports.decode = decode; - -function encode(data) { - var key = Buffer.from([typeFields_1.InputTypes.FINAL_SCRIPTSIG]); - return { - key: key, - value: data - }; -} - -exports.encode = encode; -exports.expected = 'Buffer'; - -function check(data) { - return Buffer.isBuffer(data); -} - -exports.check = check; - -function canAdd(currentData, newData) { - return !!currentData && !!newData && currentData.finalScriptSig === undefined; -} - -exports.canAdd = canAdd; -},{"../../typeFields":"TcPe","buffer":"dskh"}],"rKOF":[function(require,module,exports) { -var Buffer = require("buffer").Buffer; -'use strict'; - -Object.defineProperty(exports, '__esModule', { - value: true -}); - -var typeFields_1 = require('../../typeFields'); - -function decode(keyVal) { - if (keyVal.key[0] !== typeFields_1.InputTypes.FINAL_SCRIPTWITNESS) { - throw new Error('Decode Error: could not decode finalScriptWitness with key 0x' + keyVal.key.toString('hex')); - } - - return keyVal.value; -} - -exports.decode = decode; - -function encode(data) { - var key = Buffer.from([typeFields_1.InputTypes.FINAL_SCRIPTWITNESS]); - return { - key: key, - value: data - }; -} - -exports.encode = encode; -exports.expected = 'Buffer'; - -function check(data) { - return Buffer.isBuffer(data); -} - -exports.check = check; - -function canAdd(currentData, newData) { - return !!currentData && !!newData && currentData.finalScriptWitness === undefined; -} - -exports.canAdd = canAdd; -},{"../../typeFields":"TcPe","buffer":"dskh"}],"suxJ":[function(require,module,exports) { -var Buffer = require("buffer").Buffer; -'use strict'; - -Object.defineProperty(exports, '__esModule', { - value: true -}); - -var typeFields_1 = require('../../typeFields'); - -function decode(keyVal) { - if (keyVal.key[0] !== typeFields_1.InputTypes.NON_WITNESS_UTXO) { - throw new Error('Decode Error: could not decode nonWitnessUtxo with key 0x' + keyVal.key.toString('hex')); - } - - return keyVal.value; -} - -exports.decode = decode; - -function encode(data) { - return { - key: Buffer.from([typeFields_1.InputTypes.NON_WITNESS_UTXO]), - value: data - }; -} - -exports.encode = encode; -exports.expected = 'Buffer'; - -function check(data) { - return Buffer.isBuffer(data); -} - -exports.check = check; - -function canAdd(currentData, newData) { - return !!currentData && !!newData && currentData.witnessUtxo === undefined && currentData.nonWitnessUtxo === undefined; -} - -exports.canAdd = canAdd; -},{"../../typeFields":"TcPe","buffer":"dskh"}],"DQOH":[function(require,module,exports) { -var Buffer = require("buffer").Buffer; -'use strict'; - -Object.defineProperty(exports, '__esModule', { - value: true -}); - -var typeFields_1 = require('../../typeFields'); - -function decode(keyVal) { - if (keyVal.key[0] !== typeFields_1.InputTypes.PARTIAL_SIG) { - throw new Error('Decode Error: could not decode partialSig with key 0x' + keyVal.key.toString('hex')); - } - - if (!(keyVal.key.length === 34 || keyVal.key.length === 66) || ![2, 3, 4].includes(keyVal.key[1])) { - throw new Error('Decode Error: partialSig has invalid pubkey in key 0x' + keyVal.key.toString('hex')); - } - - var pubkey = keyVal.key.slice(1); - return { - pubkey: pubkey, - signature: keyVal.value - }; -} - -exports.decode = decode; - -function encode(pSig) { - var head = Buffer.from([typeFields_1.InputTypes.PARTIAL_SIG]); - return { - key: Buffer.concat([head, pSig.pubkey]), - value: pSig.signature - }; -} - -exports.encode = encode; -exports.expected = '{ pubkey: Buffer; signature: Buffer; }'; - -function check(data) { - return Buffer.isBuffer(data.pubkey) && Buffer.isBuffer(data.signature) && [33, 65].includes(data.pubkey.length) && [2, 3, 4].includes(data.pubkey[0]) && isDerSigWithSighash(data.signature); -} - -exports.check = check; - -function isDerSigWithSighash(buf) { - if (!Buffer.isBuffer(buf) || buf.length < 9) return false; - if (buf[0] !== 0x30) return false; - if (buf.length !== buf[1] + 3) return false; - if (buf[2] !== 0x02) return false; - var rLen = buf[3]; - if (rLen > 33 || rLen < 1) return false; - if (buf[3 + rLen + 1] !== 0x02) return false; - var sLen = buf[3 + rLen + 2]; - if (sLen > 33 || sLen < 1) return false; - if (buf.length !== 3 + rLen + 2 + sLen + 2) return false; - return true; -} - -function canAddToArray(array, item, dupeSet) { - var dupeString = item.pubkey.toString('hex'); - if (dupeSet.has(dupeString)) return false; - dupeSet.add(dupeString); - return array.filter(function (v) { - return v.pubkey.equals(item.pubkey); - }).length === 0; -} - -exports.canAddToArray = canAddToArray; -},{"../../typeFields":"TcPe","buffer":"dskh"}],"N7P5":[function(require,module,exports) { -var Buffer = require("buffer").Buffer; -'use strict'; - -Object.defineProperty(exports, '__esModule', { - value: true -}); - -var typeFields_1 = require('../../typeFields'); - -function decode(keyVal) { - if (keyVal.key[0] !== typeFields_1.InputTypes.POR_COMMITMENT) { - throw new Error('Decode Error: could not decode porCommitment with key 0x' + keyVal.key.toString('hex')); - } - - return keyVal.value.toString('utf8'); -} - -exports.decode = decode; - -function encode(data) { - var key = Buffer.from([typeFields_1.InputTypes.POR_COMMITMENT]); - return { - key: key, - value: Buffer.from(data, 'utf8') - }; -} - -exports.encode = encode; -exports.expected = 'string'; - -function check(data) { - return typeof data === 'string'; -} - -exports.check = check; - -function canAdd(currentData, newData) { - return !!currentData && !!newData && currentData.porCommitment === undefined; -} - -exports.canAdd = canAdd; -},{"../../typeFields":"TcPe","buffer":"dskh"}],"b4tW":[function(require,module,exports) { -var Buffer = require("buffer").Buffer; -'use strict'; - -Object.defineProperty(exports, '__esModule', { - value: true -}); - -var typeFields_1 = require('../../typeFields'); - -function decode(keyVal) { - if (keyVal.key[0] !== typeFields_1.InputTypes.SIGHASH_TYPE) { - throw new Error('Decode Error: could not decode sighashType with key 0x' + keyVal.key.toString('hex')); - } - - return keyVal.value.readUInt32LE(0); -} - -exports.decode = decode; - -function encode(data) { - var key = Buffer.from([typeFields_1.InputTypes.SIGHASH_TYPE]); - var value = Buffer.allocUnsafe(4); - value.writeUInt32LE(data, 0); - return { - key: key, - value: value - }; -} - -exports.encode = encode; -exports.expected = 'number'; - -function check(data) { - return typeof data === 'number'; -} - -exports.check = check; - -function canAdd(currentData, newData) { - return !!currentData && !!newData && currentData.sighashType === undefined; -} - -exports.canAdd = canAdd; -},{"../../typeFields":"TcPe","buffer":"dskh"}],"ViXA":[function(require,module,exports) { -var Buffer = require("buffer").Buffer; -'use strict'; - -Object.defineProperty(exports, '__esModule', { - value: true -}); // Number.MAX_SAFE_INTEGER - -var MAX_SAFE_INTEGER = 9007199254740991; - -function checkUInt53(n) { - if (n < 0 || n > MAX_SAFE_INTEGER || n % 1 !== 0) throw new RangeError('value out of range'); -} - -function encode(_number, buffer, offset) { - checkUInt53(_number); - if (!buffer) buffer = Buffer.allocUnsafe(encodingLength(_number)); - if (!Buffer.isBuffer(buffer)) throw new TypeError('buffer must be a Buffer instance'); - if (!offset) offset = 0; // 8 bit - - if (_number < 0xfd) { - buffer.writeUInt8(_number, offset); - Object.assign(encode, { - bytes: 1 - }); // 16 bit - } else if (_number <= 0xffff) { - buffer.writeUInt8(0xfd, offset); - buffer.writeUInt16LE(_number, offset + 1); - Object.assign(encode, { - bytes: 3 - }); // 32 bit - } else if (_number <= 0xffffffff) { - buffer.writeUInt8(0xfe, offset); - buffer.writeUInt32LE(_number, offset + 1); - Object.assign(encode, { - bytes: 5 - }); // 64 bit - } else { - buffer.writeUInt8(0xff, offset); - buffer.writeUInt32LE(_number >>> 0, offset + 1); - buffer.writeUInt32LE(_number / 0x100000000 | 0, offset + 5); - Object.assign(encode, { - bytes: 9 - }); - } - - return buffer; -} - -exports.encode = encode; - -function decode(buffer, offset) { - if (!Buffer.isBuffer(buffer)) throw new TypeError('buffer must be a Buffer instance'); - if (!offset) offset = 0; - var first = buffer.readUInt8(offset); // 8 bit - - if (first < 0xfd) { - Object.assign(decode, { - bytes: 1 - }); - return first; // 16 bit - } else if (first === 0xfd) { - Object.assign(decode, { - bytes: 3 - }); - return buffer.readUInt16LE(offset + 1); // 32 bit - } else if (first === 0xfe) { - Object.assign(decode, { - bytes: 5 - }); - return buffer.readUInt32LE(offset + 1); // 64 bit - } else { - Object.assign(decode, { - bytes: 9 - }); - var lo = buffer.readUInt32LE(offset + 1); - var hi = buffer.readUInt32LE(offset + 5); - - var _number = hi * 0x0100000000 + lo; - - checkUInt53(_number); - return _number; - } -} - -exports.decode = decode; - -function encodingLength(_number) { - checkUInt53(_number); - return _number < 0xfd ? 1 : _number <= 0xffff ? 3 : _number <= 0xffffffff ? 5 : 9; -} - -exports.encodingLength = encodingLength; -},{"buffer":"dskh"}],"cEUk":[function(require,module,exports) { -var Buffer = require("buffer").Buffer; -'use strict'; - -function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _nonIterableSpread(); } - -function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance"); } - -function _iterableToArray(iter) { if (Symbol.iterator in Object(iter) || Object.prototype.toString.call(iter) === "[object Arguments]") return Array.from(iter); } - -function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = new Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } } - -Object.defineProperty(exports, '__esModule', { - value: true -}); - -var varuint = require('./varint'); - -exports.range = function (n) { - return _toConsumableArray(Array(n).keys()); -}; - -function reverseBuffer(buffer) { - if (buffer.length < 1) return buffer; - var j = buffer.length - 1; - var tmp = 0; - - for (var i = 0; i < buffer.length / 2; i++) { - tmp = buffer[i]; - buffer[i] = buffer[j]; - buffer[j] = tmp; - j--; - } - - return buffer; -} - -exports.reverseBuffer = reverseBuffer; - -function keyValsToBuffer(keyVals) { - var buffers = keyVals.map(keyValToBuffer); - buffers.push(Buffer.from([0])); - return Buffer.concat(buffers); -} - -exports.keyValsToBuffer = keyValsToBuffer; - -function keyValToBuffer(keyVal) { - var keyLen = keyVal.key.length; - var valLen = keyVal.value.length; - var keyVarIntLen = varuint.encodingLength(keyLen); - var valVarIntLen = varuint.encodingLength(valLen); - var buffer = Buffer.allocUnsafe(keyVarIntLen + keyLen + valVarIntLen + valLen); - varuint.encode(keyLen, buffer, 0); - keyVal.key.copy(buffer, keyVarIntLen); - varuint.encode(valLen, buffer, keyVarIntLen + keyLen); - keyVal.value.copy(buffer, keyVarIntLen + keyLen + valVarIntLen); - return buffer; -} - -exports.keyValToBuffer = keyValToBuffer; // https://github.com/feross/buffer/blob/master/index.js#L1127 - -function verifuint(value, max) { - if (typeof value !== 'number') throw new Error('cannot write a non-number as a number'); - if (value < 0) throw new Error('specified a negative value for writing an unsigned value'); - if (value > max) throw new Error('RangeError: value out of range'); - if (Math.floor(value) !== value) throw new Error('value has a fractional component'); -} - -function readUInt64LE(buffer, offset) { - var a = buffer.readUInt32LE(offset); - var b = buffer.readUInt32LE(offset + 4); - b *= 0x100000000; - verifuint(b + a, 0x001fffffffffffff); - return b + a; -} - -exports.readUInt64LE = readUInt64LE; - -function writeUInt64LE(buffer, value, offset) { - verifuint(value, 0x001fffffffffffff); - buffer.writeInt32LE(value & -1, offset); - buffer.writeUInt32LE(Math.floor(value / 0x100000000), offset + 4); - return offset + 8; -} - -exports.writeUInt64LE = writeUInt64LE; -},{"./varint":"ViXA","buffer":"dskh"}],"lZIU":[function(require,module,exports) { -var Buffer = require("buffer").Buffer; -'use strict'; - -Object.defineProperty(exports, '__esModule', { - value: true -}); - -var typeFields_1 = require('../../typeFields'); - -var tools_1 = require('../tools'); - -var varuint = require('../varint'); - -function decode(keyVal) { - if (keyVal.key[0] !== typeFields_1.InputTypes.WITNESS_UTXO) { - throw new Error('Decode Error: could not decode witnessUtxo with key 0x' + keyVal.key.toString('hex')); - } - - var value = tools_1.readUInt64LE(keyVal.value, 0); - var _offset = 8; - var scriptLen = varuint.decode(keyVal.value, _offset); - _offset += varuint.encodingLength(scriptLen); - var script = keyVal.value.slice(_offset); - - if (script.length !== scriptLen) { - throw new Error('Decode Error: WITNESS_UTXO script is not proper length'); - } - - return { - script: script, - value: value - }; -} - -exports.decode = decode; - -function encode(data) { - var script = data.script, - value = data.value; - var varintLen = varuint.encodingLength(script.length); - var result = Buffer.allocUnsafe(8 + varintLen + script.length); - tools_1.writeUInt64LE(result, value, 0); - varuint.encode(script.length, result, 8); - script.copy(result, 8 + varintLen); - return { - key: Buffer.from([typeFields_1.InputTypes.WITNESS_UTXO]), - value: result - }; -} - -exports.encode = encode; -exports.expected = '{ script: Buffer; value: number; }'; - -function check(data) { - return Buffer.isBuffer(data.script) && typeof data.value === 'number'; -} - -exports.check = check; - -function canAdd(currentData, newData) { - return !!currentData && !!newData && currentData.witnessUtxo === undefined && currentData.nonWitnessUtxo === undefined; -} - -exports.canAdd = canAdd; -},{"../../typeFields":"TcPe","../tools":"cEUk","../varint":"ViXA","buffer":"dskh"}],"i1UC":[function(require,module,exports) { -var Buffer = require("buffer").Buffer; -'use strict'; - -function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _nonIterableSpread(); } - -function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance"); } - -function _iterableToArray(iter) { if (Symbol.iterator in Object(iter) || Object.prototype.toString.call(iter) === "[object Arguments]") return Array.from(iter); } - -function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = new Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } } - -Object.defineProperty(exports, '__esModule', { - value: true -}); - -var range = function range(n) { - return _toConsumableArray(Array(n).keys()); -}; - -function makeConverter(TYPE_BYTE) { - function decode(keyVal) { - if (keyVal.key[0] !== TYPE_BYTE) { - throw new Error('Decode Error: could not decode bip32Derivation with key 0x' + keyVal.key.toString('hex')); - } - - if (!(keyVal.key.length === 34 || keyVal.key.length === 66) || ![2, 3, 4].includes(keyVal.key[1])) { - throw new Error('Decode Error: bip32Derivation has invalid pubkey in key 0x' + keyVal.key.toString('hex')); - } - - if (keyVal.value.length / 4 % 1 !== 0) { - throw new Error('Decode Error: Input BIP32_DERIVATION value length should be multiple of 4'); - } - - var pubkey = keyVal.key.slice(1); - var data = { - masterFingerprint: keyVal.value.slice(0, 4), - pubkey: pubkey, - path: 'm' - }; - var _iteratorNormalCompletion = true; - var _didIteratorError = false; - var _iteratorError = undefined; - - try { - for (var _iterator = range(keyVal.value.length / 4 - 1)[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) { - var i = _step.value; - var val = keyVal.value.readUInt32LE(i * 4 + 4); - var isHard = !!(val & 0x80000000); - var idx = val & 0x7fffffff; - data.path += '/' + idx.toString(10) + (isHard ? "'" : ''); - } - } catch (err) { - _didIteratorError = true; - _iteratorError = err; - } finally { - try { - if (!_iteratorNormalCompletion && _iterator.return != null) { - _iterator.return(); - } - } finally { - if (_didIteratorError) { - throw _iteratorError; - } - } - } - - return data; - } - - function encode(data) { - var head = Buffer.from([TYPE_BYTE]); - var key = Buffer.concat([head, data.pubkey]); - var splitPath = data.path.split('/'); - var value = Buffer.allocUnsafe(splitPath.length * 4); - data.masterFingerprint.copy(value, 0); - var offset = 4; - splitPath.slice(1).forEach(function (level) { - var isHard = level.slice(-1) === "'"; - var num = 0x7fffffff & parseInt(isHard ? level.slice(0, -1) : level, 10); - if (isHard) num += 0x80000000; - value.writeUInt32LE(num, offset); - offset += 4; - }); - return { - key: key, - value: value - }; - } - - var expected = '{ masterFingerprint: Buffer; pubkey: Buffer; path: string; }'; - - function check(data) { - return Buffer.isBuffer(data.pubkey) && Buffer.isBuffer(data.masterFingerprint) && typeof data.path === 'string' && [33, 65].includes(data.pubkey.length) && [2, 3, 4].includes(data.pubkey[0]) && data.masterFingerprint.length === 4; - } - - function canAddToArray(array, item, dupeSet) { - var dupeString = item.pubkey.toString('hex'); - if (dupeSet.has(dupeString)) return false; - dupeSet.add(dupeString); - return array.filter(function (v) { - return v.pubkey.equals(item.pubkey); - }).length === 0; - } - - return { - decode: decode, - encode: encode, - check: check, - expected: expected, - canAddToArray: canAddToArray - }; -} - -exports.makeConverter = makeConverter; -},{"buffer":"dskh"}],"qJSm":[function(require,module,exports) { -'use strict'; - -Object.defineProperty(exports, '__esModule', { - value: true -}); - -function makeChecker(pubkeyTypes) { - return checkPubkey; - - function checkPubkey(keyVal) { - var pubkey; - - if (pubkeyTypes.includes(keyVal.key[0])) { - pubkey = keyVal.key.slice(1); - - if (!(pubkey.length === 33 || pubkey.length === 65) || ![2, 3, 4].includes(pubkey[0])) { - throw new Error('Format Error: invalid pubkey in key 0x' + keyVal.key.toString('hex')); - } - } - - return pubkey; - } -} - -exports.makeChecker = makeChecker; -},{}],"tAlt":[function(require,module,exports) { -var Buffer = require("buffer").Buffer; -'use strict'; - -Object.defineProperty(exports, '__esModule', { - value: true -}); - -function makeConverter(TYPE_BYTE) { - function decode(keyVal) { - if (keyVal.key[0] !== TYPE_BYTE) { - throw new Error('Decode Error: could not decode redeemScript with key 0x' + keyVal.key.toString('hex')); - } - - return keyVal.value; - } - - function encode(data) { - var key = Buffer.from([TYPE_BYTE]); - return { - key: key, - value: data - }; - } - - var expected = 'Buffer'; - - function check(data) { - return Buffer.isBuffer(data); - } - - function canAdd(currentData, newData) { - return !!currentData && !!newData && currentData.redeemScript === undefined; - } - - return { - decode: decode, - encode: encode, - check: check, - expected: expected, - canAdd: canAdd - }; -} - -exports.makeConverter = makeConverter; -},{"buffer":"dskh"}],"KvC2":[function(require,module,exports) { -var Buffer = require("buffer").Buffer; -'use strict'; - -Object.defineProperty(exports, '__esModule', { - value: true -}); - -function makeConverter(TYPE_BYTE) { - function decode(keyVal) { - if (keyVal.key[0] !== TYPE_BYTE) { - throw new Error('Decode Error: could not decode witnessScript with key 0x' + keyVal.key.toString('hex')); - } - - return keyVal.value; - } - - function encode(data) { - var key = Buffer.from([TYPE_BYTE]); - return { - key: key, - value: data - }; - } - - var expected = 'Buffer'; - - function check(data) { - return Buffer.isBuffer(data); - } - - function canAdd(currentData, newData) { - return !!currentData && !!newData && currentData.witnessScript === undefined; - } - - return { - decode: decode, - encode: encode, - check: check, - expected: expected, - canAdd: canAdd - }; -} - -exports.makeConverter = makeConverter; -},{"buffer":"dskh"}],"E3XB":[function(require,module,exports) { -'use strict'; - -Object.defineProperty(exports, '__esModule', { - value: true -}); - -var typeFields_1 = require('../typeFields'); - -var globalXpub = require('./global/globalXpub'); - -var unsignedTx = require('./global/unsignedTx'); - -var finalScriptSig = require('./input/finalScriptSig'); - -var finalScriptWitness = require('./input/finalScriptWitness'); - -var nonWitnessUtxo = require('./input/nonWitnessUtxo'); - -var partialSig = require('./input/partialSig'); - -var porCommitment = require('./input/porCommitment'); - -var sighashType = require('./input/sighashType'); - -var witnessUtxo = require('./input/witnessUtxo'); - -var bip32Derivation = require('./shared/bip32Derivation'); - -var checkPubkey = require('./shared/checkPubkey'); - -var redeemScript = require('./shared/redeemScript'); - -var witnessScript = require('./shared/witnessScript'); - -var globals = { - unsignedTx: unsignedTx, - globalXpub: globalXpub, - // pass an Array of key bytes that require pubkey beside the key - checkPubkey: checkPubkey.makeChecker([]) -}; -exports.globals = globals; -var inputs = { - nonWitnessUtxo: nonWitnessUtxo, - partialSig: partialSig, - sighashType: sighashType, - finalScriptSig: finalScriptSig, - finalScriptWitness: finalScriptWitness, - porCommitment: porCommitment, - witnessUtxo: witnessUtxo, - bip32Derivation: bip32Derivation.makeConverter(typeFields_1.InputTypes.BIP32_DERIVATION), - redeemScript: redeemScript.makeConverter(typeFields_1.InputTypes.REDEEM_SCRIPT), - witnessScript: witnessScript.makeConverter(typeFields_1.InputTypes.WITNESS_SCRIPT), - checkPubkey: checkPubkey.makeChecker([typeFields_1.InputTypes.PARTIAL_SIG, typeFields_1.InputTypes.BIP32_DERIVATION]) -}; -exports.inputs = inputs; -var outputs = { - bip32Derivation: bip32Derivation.makeConverter(typeFields_1.OutputTypes.BIP32_DERIVATION), - redeemScript: redeemScript.makeConverter(typeFields_1.OutputTypes.REDEEM_SCRIPT), - witnessScript: witnessScript.makeConverter(typeFields_1.OutputTypes.WITNESS_SCRIPT), - checkPubkey: checkPubkey.makeChecker([typeFields_1.OutputTypes.BIP32_DERIVATION]) -}; -exports.outputs = outputs; -},{"../typeFields":"TcPe","./global/globalXpub":"vGPv","./global/unsignedTx":"KAzb","./input/finalScriptSig":"ktbP","./input/finalScriptWitness":"rKOF","./input/nonWitnessUtxo":"suxJ","./input/partialSig":"DQOH","./input/porCommitment":"N7P5","./input/sighashType":"b4tW","./input/witnessUtxo":"lZIU","./shared/bip32Derivation":"i1UC","./shared/checkPubkey":"qJSm","./shared/redeemScript":"tAlt","./shared/witnessScript":"KvC2"}],"ykP0":[function(require,module,exports) { -var Buffer = require("buffer").Buffer; -'use strict'; - -Object.defineProperty(exports, '__esModule', { - value: true -}); - -var convert = require('../converter'); - -var tools_1 = require('../converter/tools'); - -var varuint = require('../converter/varint'); - -var typeFields_1 = require('../typeFields'); - -function psbtFromBuffer(buffer, txGetter) { - var offset = 0; - - function varSlice() { - var keyLen = varuint.decode(buffer, offset); - offset += varuint.encodingLength(keyLen); - var key = buffer.slice(offset, offset + keyLen); - offset += keyLen; - return key; - } - - function readUInt32BE() { - var num = buffer.readUInt32BE(offset); - offset += 4; - return num; - } - - function readUInt8() { - var num = buffer.readUInt8(offset); - offset += 1; - return num; - } - - function getKeyValue() { - var key = varSlice(); - var value = varSlice(); - return { - key: key, - value: value - }; - } - - function checkEndOfKeyValPairs() { - if (offset >= buffer.length) { - throw new Error('Format Error: Unexpected End of PSBT'); - } - - var isEnd = buffer.readUInt8(offset) === 0; - - if (isEnd) { - offset++; - } - - return isEnd; - } - - if (readUInt32BE() !== 0x70736274) { - throw new Error('Format Error: Invalid Magic Number'); - } - - if (readUInt8() !== 0xff) { - throw new Error('Format Error: Magic Number must be followed by 0xff separator'); - } - - var globalMapKeyVals = []; - var globalKeyIndex = {}; - - while (!checkEndOfKeyValPairs()) { - var keyVal = getKeyValue(); - var hexKey = keyVal.key.toString('hex'); - - if (globalKeyIndex[hexKey]) { - throw new Error('Format Error: Keys must be unique for global keymap: key ' + hexKey); - } - - globalKeyIndex[hexKey] = 1; - globalMapKeyVals.push(keyVal); - } - - var unsignedTxMaps = globalMapKeyVals.filter(function (keyVal) { - return keyVal.key[0] === typeFields_1.GlobalTypes.UNSIGNED_TX; - }); - - if (unsignedTxMaps.length !== 1) { - throw new Error('Format Error: Only one UNSIGNED_TX allowed'); - } - - var unsignedTx = txGetter(unsignedTxMaps[0].value); // Get input and output counts to loop the respective fields - - var _unsignedTx$getInputO = unsignedTx.getInputOutputCounts(), - inputCount = _unsignedTx$getInputO.inputCount, - outputCount = _unsignedTx$getInputO.outputCount; - - var inputKeyVals = []; - var outputKeyVals = []; // Get input fields - - var _iteratorNormalCompletion = true; - var _didIteratorError = false; - var _iteratorError = undefined; - - try { - for (var _iterator = tools_1.range(inputCount)[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) { - var index = _step.value; - var inputKeyIndex = {}; - var input = []; - - while (!checkEndOfKeyValPairs()) { - var _keyVal = getKeyValue(); - - var _hexKey = _keyVal.key.toString('hex'); - - if (inputKeyIndex[_hexKey]) { - throw new Error('Format Error: Keys must be unique for each input: ' + 'input index ' + index + ' key ' + _hexKey); - } - - inputKeyIndex[_hexKey] = 1; - input.push(_keyVal); - } - - inputKeyVals.push(input); - } - } catch (err) { - _didIteratorError = true; - _iteratorError = err; - } finally { - try { - if (!_iteratorNormalCompletion && _iterator.return != null) { - _iterator.return(); - } - } finally { - if (_didIteratorError) { - throw _iteratorError; - } - } - } - - var _iteratorNormalCompletion2 = true; - var _didIteratorError2 = false; - var _iteratorError2 = undefined; - - try { - for (var _iterator2 = tools_1.range(outputCount)[Symbol.iterator](), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true) { - var _index = _step2.value; - var outputKeyIndex = {}; - var output = []; - - while (!checkEndOfKeyValPairs()) { - var _keyVal2 = getKeyValue(); - - var _hexKey2 = _keyVal2.key.toString('hex'); - - if (outputKeyIndex[_hexKey2]) { - throw new Error('Format Error: Keys must be unique for each output: ' + 'output index ' + _index + ' key ' + _hexKey2); - } - - outputKeyIndex[_hexKey2] = 1; - output.push(_keyVal2); - } - - outputKeyVals.push(output); - } - } catch (err) { - _didIteratorError2 = true; - _iteratorError2 = err; - } finally { - try { - if (!_iteratorNormalCompletion2 && _iterator2.return != null) { - _iterator2.return(); - } - } finally { - if (_didIteratorError2) { - throw _iteratorError2; - } - } - } - - return psbtFromKeyVals(unsignedTx, { - globalMapKeyVals: globalMapKeyVals, - inputKeyVals: inputKeyVals, - outputKeyVals: outputKeyVals - }); -} - -exports.psbtFromBuffer = psbtFromBuffer; - -function checkKeyBuffer(type, keyBuf, keyNum) { - if (!keyBuf.equals(Buffer.from([keyNum]))) { - throw new Error("Format Error: Invalid ".concat(type, " key: ").concat(keyBuf.toString('hex'))); - } -} - -exports.checkKeyBuffer = checkKeyBuffer; - -function psbtFromKeyVals(unsignedTx, _ref) { - var globalMapKeyVals = _ref.globalMapKeyVals, - inputKeyVals = _ref.inputKeyVals, - outputKeyVals = _ref.outputKeyVals; - // That was easy :-) - var globalMap = { - unsignedTx: unsignedTx - }; - var txCount = 0; - var _iteratorNormalCompletion3 = true; - var _didIteratorError3 = false; - var _iteratorError3 = undefined; - - try { - for (var _iterator3 = globalMapKeyVals[Symbol.iterator](), _step3; !(_iteratorNormalCompletion3 = (_step3 = _iterator3.next()).done); _iteratorNormalCompletion3 = true) { - var keyVal = _step3.value; - - // If a globalMap item needs pubkey, uncomment - // const pubkey = convert.globals.checkPubkey(keyVal); - switch (keyVal.key[0]) { - case typeFields_1.GlobalTypes.UNSIGNED_TX: - checkKeyBuffer('global', keyVal.key, typeFields_1.GlobalTypes.UNSIGNED_TX); - - if (txCount > 0) { - throw new Error('Format Error: GlobalMap has multiple UNSIGNED_TX'); - } - - txCount++; - break; - - case typeFields_1.GlobalTypes.GLOBAL_XPUB: - if (globalMap.globalXpub === undefined) { - globalMap.globalXpub = []; - } - - globalMap.globalXpub.push(convert.globals.globalXpub.decode(keyVal)); - break; - - default: - // This will allow inclusion during serialization. - if (!globalMap.unknownKeyVals) globalMap.unknownKeyVals = []; - globalMap.unknownKeyVals.push(keyVal); - } - } // Get input and output counts to loop the respective fields - - } catch (err) { - _didIteratorError3 = true; - _iteratorError3 = err; - } finally { - try { - if (!_iteratorNormalCompletion3 && _iterator3.return != null) { - _iterator3.return(); - } - } finally { - if (_didIteratorError3) { - throw _iteratorError3; - } - } - } - - var inputCount = inputKeyVals.length; - var outputCount = outputKeyVals.length; - var inputs = []; - var outputs = []; // Get input fields - - var _iteratorNormalCompletion4 = true; - var _didIteratorError4 = false; - var _iteratorError4 = undefined; - - try { - for (var _iterator4 = tools_1.range(inputCount)[Symbol.iterator](), _step4; !(_iteratorNormalCompletion4 = (_step4 = _iterator4.next()).done); _iteratorNormalCompletion4 = true) { - var index = _step4.value; - var input = {}; - var _iteratorNormalCompletion6 = true; - var _didIteratorError6 = false; - var _iteratorError6 = undefined; - - try { - for (var _iterator6 = inputKeyVals[index][Symbol.iterator](), _step6; !(_iteratorNormalCompletion6 = (_step6 = _iterator6.next()).done); _iteratorNormalCompletion6 = true) { - var _keyVal3 = _step6.value; - convert.inputs.checkPubkey(_keyVal3); - - switch (_keyVal3.key[0]) { - case typeFields_1.InputTypes.NON_WITNESS_UTXO: - checkKeyBuffer('input', _keyVal3.key, typeFields_1.InputTypes.NON_WITNESS_UTXO); - - if (input.nonWitnessUtxo !== undefined || input.witnessUtxo !== undefined) { - throw new Error('Format Error: Input has multiple [NON_]WITNESS_UTXO'); - } - - input.nonWitnessUtxo = convert.inputs.nonWitnessUtxo.decode(_keyVal3); - break; - - case typeFields_1.InputTypes.WITNESS_UTXO: - checkKeyBuffer('input', _keyVal3.key, typeFields_1.InputTypes.WITNESS_UTXO); - - if (input.nonWitnessUtxo !== undefined || input.witnessUtxo !== undefined) { - throw new Error('Format Error: Input has multiple [NON_]WITNESS_UTXO'); - } - - input.witnessUtxo = convert.inputs.witnessUtxo.decode(_keyVal3); - break; - - case typeFields_1.InputTypes.PARTIAL_SIG: - if (input.partialSig === undefined) { - input.partialSig = []; - } - - input.partialSig.push(convert.inputs.partialSig.decode(_keyVal3)); - break; - - case typeFields_1.InputTypes.SIGHASH_TYPE: - checkKeyBuffer('input', _keyVal3.key, typeFields_1.InputTypes.SIGHASH_TYPE); - - if (input.sighashType !== undefined) { - throw new Error('Format Error: Input has multiple SIGHASH_TYPE'); - } - - input.sighashType = convert.inputs.sighashType.decode(_keyVal3); - break; - - case typeFields_1.InputTypes.REDEEM_SCRIPT: - checkKeyBuffer('input', _keyVal3.key, typeFields_1.InputTypes.REDEEM_SCRIPT); - - if (input.redeemScript !== undefined) { - throw new Error('Format Error: Input has multiple REDEEM_SCRIPT'); - } - - input.redeemScript = convert.inputs.redeemScript.decode(_keyVal3); - break; - - case typeFields_1.InputTypes.WITNESS_SCRIPT: - checkKeyBuffer('input', _keyVal3.key, typeFields_1.InputTypes.WITNESS_SCRIPT); - - if (input.witnessScript !== undefined) { - throw new Error('Format Error: Input has multiple WITNESS_SCRIPT'); - } - - input.witnessScript = convert.inputs.witnessScript.decode(_keyVal3); - break; - - case typeFields_1.InputTypes.BIP32_DERIVATION: - if (input.bip32Derivation === undefined) { - input.bip32Derivation = []; - } - - input.bip32Derivation.push(convert.inputs.bip32Derivation.decode(_keyVal3)); - break; - - case typeFields_1.InputTypes.FINAL_SCRIPTSIG: - checkKeyBuffer('input', _keyVal3.key, typeFields_1.InputTypes.FINAL_SCRIPTSIG); - input.finalScriptSig = convert.inputs.finalScriptSig.decode(_keyVal3); - break; - - case typeFields_1.InputTypes.FINAL_SCRIPTWITNESS: - checkKeyBuffer('input', _keyVal3.key, typeFields_1.InputTypes.FINAL_SCRIPTWITNESS); - input.finalScriptWitness = convert.inputs.finalScriptWitness.decode(_keyVal3); - break; - - case typeFields_1.InputTypes.POR_COMMITMENT: - checkKeyBuffer('input', _keyVal3.key, typeFields_1.InputTypes.POR_COMMITMENT); - input.porCommitment = convert.inputs.porCommitment.decode(_keyVal3); - break; - - default: - // This will allow inclusion during serialization. - if (!input.unknownKeyVals) input.unknownKeyVals = []; - input.unknownKeyVals.push(_keyVal3); - } - } - } catch (err) { - _didIteratorError6 = true; - _iteratorError6 = err; - } finally { - try { - if (!_iteratorNormalCompletion6 && _iterator6.return != null) { - _iterator6.return(); - } - } finally { - if (_didIteratorError6) { - throw _iteratorError6; - } - } - } - - inputs.push(input); - } - } catch (err) { - _didIteratorError4 = true; - _iteratorError4 = err; - } finally { - try { - if (!_iteratorNormalCompletion4 && _iterator4.return != null) { - _iterator4.return(); - } - } finally { - if (_didIteratorError4) { - throw _iteratorError4; - } - } - } - - var _iteratorNormalCompletion5 = true; - var _didIteratorError5 = false; - var _iteratorError5 = undefined; - - try { - for (var _iterator5 = tools_1.range(outputCount)[Symbol.iterator](), _step5; !(_iteratorNormalCompletion5 = (_step5 = _iterator5.next()).done); _iteratorNormalCompletion5 = true) { - var _index2 = _step5.value; - var output = {}; - var _iteratorNormalCompletion7 = true; - var _didIteratorError7 = false; - var _iteratorError7 = undefined; - - try { - for (var _iterator7 = outputKeyVals[_index2][Symbol.iterator](), _step7; !(_iteratorNormalCompletion7 = (_step7 = _iterator7.next()).done); _iteratorNormalCompletion7 = true) { - var _keyVal4 = _step7.value; - convert.outputs.checkPubkey(_keyVal4); - - switch (_keyVal4.key[0]) { - case typeFields_1.OutputTypes.REDEEM_SCRIPT: - checkKeyBuffer('output', _keyVal4.key, typeFields_1.OutputTypes.REDEEM_SCRIPT); - - if (output.redeemScript !== undefined) { - throw new Error('Format Error: Output has multiple REDEEM_SCRIPT'); - } - - output.redeemScript = convert.outputs.redeemScript.decode(_keyVal4); - break; - - case typeFields_1.OutputTypes.WITNESS_SCRIPT: - checkKeyBuffer('output', _keyVal4.key, typeFields_1.OutputTypes.WITNESS_SCRIPT); - - if (output.witnessScript !== undefined) { - throw new Error('Format Error: Output has multiple WITNESS_SCRIPT'); - } - - output.witnessScript = convert.outputs.witnessScript.decode(_keyVal4); - break; - - case typeFields_1.OutputTypes.BIP32_DERIVATION: - if (output.bip32Derivation === undefined) { - output.bip32Derivation = []; - } - - output.bip32Derivation.push(convert.outputs.bip32Derivation.decode(_keyVal4)); - break; - - default: - if (!output.unknownKeyVals) output.unknownKeyVals = []; - output.unknownKeyVals.push(_keyVal4); - } - } - } catch (err) { - _didIteratorError7 = true; - _iteratorError7 = err; - } finally { - try { - if (!_iteratorNormalCompletion7 && _iterator7.return != null) { - _iterator7.return(); - } - } finally { - if (_didIteratorError7) { - throw _iteratorError7; - } - } - } - - outputs.push(output); - } - } catch (err) { - _didIteratorError5 = true; - _iteratorError5 = err; - } finally { - try { - if (!_iteratorNormalCompletion5 && _iterator5.return != null) { - _iterator5.return(); - } - } finally { - if (_didIteratorError5) { - throw _iteratorError5; - } - } - } - - return { - globalMap: globalMap, - inputs: inputs, - outputs: outputs - }; -} - -exports.psbtFromKeyVals = psbtFromKeyVals; -},{"../converter":"E3XB","../converter/tools":"cEUk","../converter/varint":"ViXA","../typeFields":"TcPe","buffer":"dskh"}],"l8QV":[function(require,module,exports) { -var Buffer = require("buffer").Buffer; -'use strict'; - -function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _nonIterableRest(); } - -function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance"); } - -function _iterableToArrayLimit(arr, i) { if (!(Symbol.iterator in Object(arr) || Object.prototype.toString.call(arr) === "[object Arguments]")) { return; } var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; } - -function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; } - -Object.defineProperty(exports, '__esModule', { - value: true -}); - -var convert = require('../converter'); - -var tools_1 = require('../converter/tools'); - -function psbtToBuffer(_ref) { - var globalMap = _ref.globalMap, - inputs = _ref.inputs, - outputs = _ref.outputs; - - var _psbtToKeyVals = psbtToKeyVals({ - globalMap: globalMap, - inputs: inputs, - outputs: outputs - }), - globalKeyVals = _psbtToKeyVals.globalKeyVals, - inputKeyVals = _psbtToKeyVals.inputKeyVals, - outputKeyVals = _psbtToKeyVals.outputKeyVals; - - var globalBuffer = tools_1.keyValsToBuffer(globalKeyVals); - - var keyValsOrEmptyToBuffer = function keyValsOrEmptyToBuffer(keyVals) { - return keyVals.length === 0 ? [Buffer.from([0])] : keyVals.map(tools_1.keyValsToBuffer); - }; - - var inputBuffers = keyValsOrEmptyToBuffer(inputKeyVals); - var outputBuffers = keyValsOrEmptyToBuffer(outputKeyVals); - var header = Buffer.allocUnsafe(5); - header.writeUIntBE(0x70736274ff, 0, 5); - return Buffer.concat([header, globalBuffer].concat(inputBuffers, outputBuffers)); -} - -exports.psbtToBuffer = psbtToBuffer; - -var sortKeyVals = function sortKeyVals(a, b) { - return a.key.compare(b.key); -}; - -function keyValsFromMap(keyValMap, converterFactory) { - var keyHexSet = new Set(); - var keyVals = Object.entries(keyValMap).reduce(function (result, _ref2) { - var _ref3 = _slicedToArray(_ref2, 2), - key = _ref3[0], - value = _ref3[1]; - - if (key === 'unknownKeyVals') return result; // We are checking for undefined anyways. So ignore TS error - // @ts-ignore - - var converter = converterFactory[key]; - if (converter === undefined) return result; - var encodedKeyVals = (Array.isArray(value) ? value : [value]).map(converter.encode); - var keyHexes = encodedKeyVals.map(function (kv) { - return kv.key.toString('hex'); - }); - keyHexes.forEach(function (hex) { - if (keyHexSet.has(hex)) throw new Error('Serialize Error: Duplicate key: ' + hex); - keyHexSet.add(hex); - }); - return result.concat(encodedKeyVals); - }, []); // Get other keyVals that have not yet been gotten - - var otherKeyVals = keyValMap.unknownKeyVals ? keyValMap.unknownKeyVals.filter(function (keyVal) { - return !keyHexSet.has(keyVal.key.toString('hex')); - }) : []; - return keyVals.concat(otherKeyVals).sort(sortKeyVals); -} - -function psbtToKeyVals(_ref4) { - var globalMap = _ref4.globalMap, - inputs = _ref4.inputs, - outputs = _ref4.outputs; - // First parse the global keyVals - // Get any extra keyvals to pass along - return { - globalKeyVals: keyValsFromMap(globalMap, convert.globals), - inputKeyVals: inputs.map(function (i) { - return keyValsFromMap(i, convert.inputs); - }), - outputKeyVals: outputs.map(function (o) { - return keyValsFromMap(o, convert.outputs); - }) - }; -} - -exports.psbtToKeyVals = psbtToKeyVals; -},{"../converter":"E3XB","../converter/tools":"cEUk","buffer":"dskh"}],"jTIM":[function(require,module,exports) { -'use strict'; - -function __export(m) { - for (var p in m) { - if (!exports.hasOwnProperty(p)) exports[p] = m[p]; - } -} - -Object.defineProperty(exports, '__esModule', { - value: true -}); - -__export(require('./fromBuffer')); - -__export(require('./toBuffer')); -},{"./fromBuffer":"ykP0","./toBuffer":"l8QV"}],"qsU6":[function(require,module,exports) { -'use strict'; - -Object.defineProperty(exports, '__esModule', { - value: true -}); - -var parser_1 = require('../parser'); - -function combine(psbts) { - var self = psbts[0]; - var selfKeyVals = parser_1.psbtToKeyVals(self); - var others = psbts.slice(1); - if (others.length === 0) throw new Error('Combine: Nothing to combine'); - var selfTx = getTx(self); - - if (selfTx === undefined) { - throw new Error('Combine: Self missing transaction'); - } - - var selfGlobalSet = getKeySet(selfKeyVals.globalKeyVals); - var selfInputSets = selfKeyVals.inputKeyVals.map(getKeySet); - var selfOutputSets = selfKeyVals.outputKeyVals.map(getKeySet); - var _iteratorNormalCompletion = true; - var _didIteratorError = false; - var _iteratorError = undefined; - - try { - var _loop = function _loop() { - var other = _step.value; - var otherTx = getTx(other); - - if (otherTx === undefined || !otherTx.toBuffer().equals(selfTx.toBuffer())) { - throw new Error('Combine: One of the Psbts does not have the same transaction.'); - } - - var otherKeyVals = parser_1.psbtToKeyVals(other); - var otherGlobalSet = getKeySet(otherKeyVals.globalKeyVals); - otherGlobalSet.forEach(keyPusher(selfGlobalSet, selfKeyVals.globalKeyVals, otherKeyVals.globalKeyVals)); - var otherInputSets = otherKeyVals.inputKeyVals.map(getKeySet); - otherInputSets.forEach(function (inputSet, idx) { - return inputSet.forEach(keyPusher(selfInputSets[idx], selfKeyVals.inputKeyVals[idx], otherKeyVals.inputKeyVals[idx])); - }); - var otherOutputSets = otherKeyVals.outputKeyVals.map(getKeySet); - otherOutputSets.forEach(function (outputSet, idx) { - return outputSet.forEach(keyPusher(selfOutputSets[idx], selfKeyVals.outputKeyVals[idx], otherKeyVals.outputKeyVals[idx])); - }); - }; - - for (var _iterator = others[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) { - _loop(); - } - } catch (err) { - _didIteratorError = true; - _iteratorError = err; - } finally { - try { - if (!_iteratorNormalCompletion && _iterator.return != null) { - _iterator.return(); - } - } finally { - if (_didIteratorError) { - throw _iteratorError; - } - } - } - - return parser_1.psbtFromKeyVals(selfTx, { - globalMapKeyVals: selfKeyVals.globalKeyVals, - inputKeyVals: selfKeyVals.inputKeyVals, - outputKeyVals: selfKeyVals.outputKeyVals - }); -} - -exports.combine = combine; - -function keyPusher(selfSet, selfKeyVals, otherKeyVals) { - return function (key) { - if (selfSet.has(key)) return; - var newKv = otherKeyVals.filter(function (kv) { - return kv.key.toString('hex') === key; - })[0]; - selfKeyVals.push(newKv); - selfSet.add(key); - }; -} - -function getTx(psbt) { - return psbt.globalMap.unsignedTx; -} - -function getKeySet(keyVals) { - var set = new Set(); - keyVals.forEach(function (keyVal) { - var hex = keyVal.key.toString('hex'); - if (set.has(hex)) throw new Error('Combine: KeyValue Map keys should be unique'); - set.add(hex); - }); - return set; -} -},{"../parser":"jTIM"}],"GfFi":[function(require,module,exports) { -var Buffer = require("buffer").Buffer; -'use strict'; - -Object.defineProperty(exports, '__esModule', { - value: true -}); - -var converter = require('./converter'); - -function checkForInput(inputs, inputIndex) { - var input = inputs[inputIndex]; - if (input === undefined) throw new Error("No input #".concat(inputIndex)); - return input; -} - -exports.checkForInput = checkForInput; - -function checkForOutput(outputs, outputIndex) { - var output = outputs[outputIndex]; - if (output === undefined) throw new Error("No output #".concat(outputIndex)); - return output; -} - -exports.checkForOutput = checkForOutput; - -function checkHasKey(checkKeyVal, keyVals, enumLength) { - if (checkKeyVal.key[0] < enumLength) { - throw new Error("Use the method for your specific key instead of addUnknownKeyVal*"); - } - - if (keyVals && keyVals.filter(function (kv) { - return kv.key.equals(checkKeyVal.key); - }).length !== 0) { - throw new Error("Duplicate Key: ".concat(checkKeyVal.key.toString('hex'))); - } -} - -exports.checkHasKey = checkHasKey; - -function getEnumLength(myenum) { - var count = 0; - Object.keys(myenum).forEach(function (val) { - if (Number(isNaN(Number(val)))) { - count++; - } - }); - return count; -} - -exports.getEnumLength = getEnumLength; - -function inputCheckUncleanFinalized(inputIndex, input) { - var result = false; - - if (!input.nonWitnessUtxo !== !input.witnessUtxo) { - var needScriptSig = !!input.redeemScript; - var needWitnessScript = !!input.witnessScript; - var scriptSigOK = !needScriptSig || !!input.finalScriptSig; - var witnessScriptOK = !needWitnessScript || !!input.finalScriptWitness; - var hasOneFinal = !!input.finalScriptSig || !!input.finalScriptWitness; - result = scriptSigOK && witnessScriptOK && hasOneFinal; - } - - if (result === false) { - throw new Error("Input #".concat(inputIndex, " has too much or too little data to clean")); - } -} - -exports.inputCheckUncleanFinalized = inputCheckUncleanFinalized; - -function throwForUpdateMaker(typeName, name, expected, data) { - throw new Error("Data for ".concat(typeName, " key ").concat(name, " is incorrect: Expected ") + "".concat(expected, " and got ").concat(JSON.stringify(data))); -} - -function updateMaker(typeName) { - return function (updateData, mainData) { - var _loop = function _loop() { - var name = _Object$keys[_i]; - // @ts-ignore - var data = updateData[name]; // @ts-ignore - - var _ref = // @ts-ignore - converter[typeName + 's'][name] || {}, - canAdd = _ref.canAdd, - canAddToArray = _ref.canAddToArray, - check = _ref.check, - expected = _ref.expected; - - var isArray = !!canAddToArray; // If unknown data. ignore and do not add - - if (check) { - if (isArray) { - if (!Array.isArray(data) || // @ts-ignore - mainData[name] && !Array.isArray(mainData[name])) { - throw new Error("Key type ".concat(name, " must be an array")); - } - - if (!data.every(check)) { - throwForUpdateMaker(typeName, name, expected, data); - } // @ts-ignore - - - var arr = mainData[name] || []; - var dupeCheckSet = new Set(); - - if (!data.every(function (v) { - return canAddToArray(arr, v, dupeCheckSet); - })) { - throw new Error('Can not add duplicate data to array'); - } // @ts-ignore - - - mainData[name] = arr.concat(data); - } else { - if (!check(data)) { - throwForUpdateMaker(typeName, name, expected, data); - } - - if (!canAdd(mainData, data)) { - throw new Error("Can not add duplicate data to ".concat(typeName)); - } // @ts-ignore - - - mainData[name] = data; - } - } - }; - - for (var _i = 0, _Object$keys = Object.keys(updateData); _i < _Object$keys.length; _i++) { - _loop(); - } - }; -} - -exports.updateGlobal = updateMaker('global'); -exports.updateInput = updateMaker('input'); -exports.updateOutput = updateMaker('output'); - -function addInputAttributes(inputs, data) { - var index = inputs.length - 1; - var input = checkForInput(inputs, index); - exports.updateInput(data, input); -} - -exports.addInputAttributes = addInputAttributes; - -function addOutputAttributes(outputs, data) { - var index = outputs.length - 1; - var output = checkForInput(outputs, index); - exports.updateOutput(data, output); -} - -exports.addOutputAttributes = addOutputAttributes; - -function defaultVersionSetter(version, txBuf) { - if (!Buffer.isBuffer(txBuf) || txBuf.length < 4) { - throw new Error('Set Version: Invalid Transaction'); - } - - txBuf.writeUInt32LE(version, 0); - return txBuf; -} - -exports.defaultVersionSetter = defaultVersionSetter; - -function defaultLocktimeSetter(locktime, txBuf) { - if (!Buffer.isBuffer(txBuf) || txBuf.length < 4) { - throw new Error('Set Locktime: Invalid Transaction'); - } - - txBuf.writeUInt32LE(locktime, txBuf.length - 4); - return txBuf; -} - -exports.defaultLocktimeSetter = defaultLocktimeSetter; -},{"./converter":"E3XB","buffer":"dskh"}],"Kgzo":[function(require,module,exports) { -var Buffer = require("buffer").Buffer; -'use strict'; - -function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - -function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } - -function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; } - -Object.defineProperty(exports, '__esModule', { - value: true -}); - -var combiner_1 = require('./combiner'); - -var parser_1 = require('./parser'); - -var typeFields_1 = require('./typeFields'); - -var utils_1 = require('./utils'); - -var Psbt = -/*#__PURE__*/ -function () { - function Psbt(tx) { - _classCallCheck(this, Psbt); - - this.inputs = []; - this.outputs = []; - this.globalMap = { - unsignedTx: tx - }; - } - - _createClass(Psbt, [{ - key: "toBase64", - value: function toBase64() { - var buffer = this.toBuffer(); - return buffer.toString('base64'); - } - }, { - key: "toHex", - value: function toHex() { - var buffer = this.toBuffer(); - return buffer.toString('hex'); - } - }, { - key: "toBuffer", - value: function toBuffer() { - return parser_1.psbtToBuffer(this); - } - }, { - key: "updateGlobal", - value: function updateGlobal(updateData) { - utils_1.updateGlobal(updateData, this.globalMap); - return this; - } - }, { - key: "updateInput", - value: function updateInput(inputIndex, updateData) { - var input = utils_1.checkForInput(this.inputs, inputIndex); - utils_1.updateInput(updateData, input); - return this; - } - }, { - key: "updateOutput", - value: function updateOutput(outputIndex, updateData) { - var output = utils_1.checkForOutput(this.outputs, outputIndex); - utils_1.updateOutput(updateData, output); - return this; - } - }, { - key: "addUnknownKeyValToGlobal", - value: function addUnknownKeyValToGlobal(keyVal) { - utils_1.checkHasKey(keyVal, this.globalMap.unknownKeyVals, utils_1.getEnumLength(typeFields_1.GlobalTypes)); - if (!this.globalMap.unknownKeyVals) this.globalMap.unknownKeyVals = []; - this.globalMap.unknownKeyVals.push(keyVal); - return this; - } - }, { - key: "addUnknownKeyValToInput", - value: function addUnknownKeyValToInput(inputIndex, keyVal) { - var input = utils_1.checkForInput(this.inputs, inputIndex); - utils_1.checkHasKey(keyVal, input.unknownKeyVals, utils_1.getEnumLength(typeFields_1.InputTypes)); - if (!input.unknownKeyVals) input.unknownKeyVals = []; - input.unknownKeyVals.push(keyVal); - return this; - } - }, { - key: "addUnknownKeyValToOutput", - value: function addUnknownKeyValToOutput(outputIndex, keyVal) { - var output = utils_1.checkForOutput(this.outputs, outputIndex); - utils_1.checkHasKey(keyVal, output.unknownKeyVals, utils_1.getEnumLength(typeFields_1.OutputTypes)); - if (!output.unknownKeyVals) output.unknownKeyVals = []; - output.unknownKeyVals.push(keyVal); - return this; - } - }, { - key: "addInput", - value: function addInput(inputData) { - var _this = this; - - this.globalMap.unsignedTx.addInput(inputData); - this.inputs.push({ - unknownKeyVals: [] - }); - var addKeyVals = inputData.unknownKeyVals || []; - var inputIndex = this.inputs.length - 1; - - if (!Array.isArray(addKeyVals)) { - throw new Error('unknownKeyVals must be an Array'); - } - - addKeyVals.forEach(function (keyVal) { - return _this.addUnknownKeyValToInput(inputIndex, keyVal); - }); - utils_1.addInputAttributes(this.inputs, inputData); - return this; - } - }, { - key: "addOutput", - value: function addOutput(outputData) { - var _this2 = this; - - this.globalMap.unsignedTx.addOutput(outputData); - this.outputs.push({ - unknownKeyVals: [] - }); - var addKeyVals = outputData.unknownKeyVals || []; - var outputIndex = this.outputs.length - 1; - - if (!Array.isArray(addKeyVals)) { - throw new Error('unknownKeyVals must be an Array'); - } - - addKeyVals.forEach(function (keyVal) { - return _this2.addUnknownKeyValToInput(outputIndex, keyVal); - }); - utils_1.addOutputAttributes(this.outputs, outputData); - return this; - } - }, { - key: "clearFinalizedInput", - value: function clearFinalizedInput(inputIndex) { - var input = utils_1.checkForInput(this.inputs, inputIndex); - utils_1.inputCheckUncleanFinalized(inputIndex, input); - - for (var _i = 0, _Object$keys = Object.keys(input); _i < _Object$keys.length; _i++) { - var key = _Object$keys[_i]; - - if (!['witnessUtxo', 'nonWitnessUtxo', 'finalScriptSig', 'finalScriptWitness', 'unknownKeyVals'].includes(key)) { - // @ts-ignore - delete input[key]; - } - } - - return this; - } - }, { - key: "combine", - value: function combine() { - for (var _len = arguments.length, those = new Array(_len), _key = 0; _key < _len; _key++) { - those[_key] = arguments[_key]; - } - - // Combine this with those. - // Return self for chaining. - var result = combiner_1.combine([this].concat(those)); - Object.assign(this, result); - return this; - } - }, { - key: "getTransaction", - value: function getTransaction() { - return this.globalMap.unsignedTx.toBuffer(); - } - }], [{ - key: "fromBase64", - value: function fromBase64(data, txFromBuffer) { - var buffer = Buffer.from(data, 'base64'); - return this.fromBuffer(buffer, txFromBuffer); - } - }, { - key: "fromHex", - value: function fromHex(data, txFromBuffer) { - var buffer = Buffer.from(data, 'hex'); - return this.fromBuffer(buffer, txFromBuffer); - } - }, { - key: "fromBuffer", - value: function fromBuffer(buffer, txFromBuffer) { - var results = parser_1.psbtFromBuffer(buffer, txFromBuffer); - var psbt = new this(results.globalMap.unsignedTx); - Object.assign(psbt, results); - return psbt; - } - }]); - - return Psbt; -}(); - -exports.Psbt = Psbt; -},{"./combiner":"qsU6","./parser":"jTIM","./typeFields":"TcPe","./utils":"GfFi","buffer":"dskh"}],"GRRo":[function(require,module,exports) { -var Buffer = require("buffer").Buffer; -'use strict'; - -function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _nonIterableRest(); } - -function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance"); } - -function _iterableToArrayLimit(arr, i) { if (!(Symbol.iterator in Object(arr) || Object.prototype.toString.call(arr) === "[object Arguments]")) { return; } var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; } - -function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; } - -function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _nonIterableSpread(); } - -function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance"); } - -function _iterableToArray(iter) { if (Symbol.iterator in Object(iter) || Object.prototype.toString.call(iter) === "[object Arguments]") return Array.from(iter); } - -function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = new Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } } - -function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - -function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } - -function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; } - -Object.defineProperty(exports, '__esModule', { - value: true -}); - -var bip174_1 = require('bip174'); - -var varuint = require('bip174/src/lib/converter/varint'); - -var utils_1 = require('bip174/src/lib/utils'); - -var address_1 = require('./address'); - -var bufferutils_1 = require('./bufferutils'); - -var crypto_1 = require('./crypto'); - -var ecpair_1 = require('./ecpair'); - -var networks_1 = require('./networks'); - -var payments = require('./payments'); - -var bscript = require('./script'); - -var transaction_1 = require('./transaction'); -/** - * These are the default arguments for a Psbt instance. - */ - - -var DEFAULT_OPTS = { - /** - * A bitcoinjs Network object. This is only used if you pass an `address` - * parameter to addOutput. Otherwise it is not needed and can be left default. - */ - network: networks_1.bitcoin, - - /** - * When extractTransaction is called, the fee rate is checked. - * THIS IS NOT TO BE RELIED ON. - * It is only here as a last ditch effort to prevent sending a 500 BTC fee etc. - */ - maximumFeeRate: 5000 -}; -/** - * Psbt class can parse and generate a PSBT binary based off of the BIP174. - * There are 6 roles that this class fulfills. (Explained in BIP174) - * - * Creator: This can be done with `new Psbt()` - * Updater: This can be done with `psbt.addInput(input)`, `psbt.addInputs(inputs)`, - * `psbt.addOutput(output)`, `psbt.addOutputs(outputs)` when you are looking to - * add new inputs and outputs to the PSBT, and `psbt.updateGlobal(itemObject)`, - * `psbt.updateInput(itemObject)`, `psbt.updateOutput(itemObject)` - * addInput requires hash: Buffer | string; and index: number; as attributes - * and can also include any attributes that are used in updateInput method. - * addOutput requires script: Buffer; and value: number; and likewise can include - * data for updateOutput. - * For a list of what attributes should be what types. Check the bip174 library. - * Also, check the integration tests for some examples of usage. - * Signer: There are a few methods. signAllInputs and signAllInputsAsync, which will search all input - * information for your pubkey or pubkeyhash, and only sign inputs where it finds - * your info. Or you can explicitly sign a specific input with signInput and - * signInputAsync. For the async methods you can create a SignerAsync object - * and use something like a hardware wallet to sign with. (You must implement this) - * Combiner: psbts can be combined easily with `psbt.combine(psbt2, psbt3, psbt4 ...)` - * the psbt calling combine will always have precedence when a conflict occurs. - * Combine checks if the internal bitcoin transaction is the same, so be sure that - * all sequences, version, locktime, etc. are the same before combining. - * Input Finalizer: This role is fairly important. Not only does it need to construct - * the input scriptSigs and witnesses, but it SHOULD verify the signatures etc. - * Before running `psbt.finalizeAllInputs()` please run `psbt.validateSignaturesOfAllInputs()` - * Running any finalize method will delete any data in the input(s) that are no longer - * needed due to the finalized scripts containing the information. - * Transaction Extractor: This role will perform some checks before returning a - * Transaction object. Such as fee rate not being larger than maximumFeeRate etc. - */ - -var Psbt = -/*#__PURE__*/ -function () { - function Psbt() { - var opts = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; - var data = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : new bip174_1.Psbt(new PsbtTransaction()); - - _classCallCheck(this, Psbt); - - this.data = data; // set defaults - - this.opts = Object.assign({}, DEFAULT_OPTS, opts); - this.__CACHE = { - __NON_WITNESS_UTXO_TX_CACHE: [], - __NON_WITNESS_UTXO_BUF_CACHE: [], - __TX_IN_CACHE: {}, - __TX: this.data.globalMap.unsignedTx.tx - }; - if (this.data.inputs.length === 0) this.setVersion(2); // Make data hidden when enumerating - - var dpew = function dpew(obj, attr, enumerable, writable) { - return Object.defineProperty(obj, attr, { - enumerable: enumerable, - writable: writable - }); - }; - - dpew(this, '__CACHE', false, true); - dpew(this, 'opts', false, true); - } - - _createClass(Psbt, [{ - key: "combine", - value: function combine() { - var _this$data; - - for (var _len = arguments.length, those = new Array(_len), _key = 0; _key < _len; _key++) { - those[_key] = arguments[_key]; - } - - (_this$data = this.data).combine.apply(_this$data, _toConsumableArray(those.map(function (o) { - return o.data; - }))); - - return this; - } - }, { - key: "clone", - value: function clone() { - // TODO: more efficient cloning - var res = Psbt.fromBuffer(this.data.toBuffer()); - res.opts = JSON.parse(JSON.stringify(this.opts)); - return res; - } - }, { - key: "setMaximumFeeRate", - value: function setMaximumFeeRate(satoshiPerByte) { - check32Bit(satoshiPerByte); // 42.9 BTC per byte IS excessive... so throw - - this.opts.maximumFeeRate = satoshiPerByte; - } - }, { - key: "setVersion", - value: function setVersion(version) { - check32Bit(version); - checkInputsForPartialSig(this.data.inputs, 'setVersion'); - var c = this.__CACHE; - c.__TX.version = version; - c.__EXTRACTED_TX = undefined; - return this; - } - }, { - key: "setLocktime", - value: function setLocktime(locktime) { - check32Bit(locktime); - checkInputsForPartialSig(this.data.inputs, 'setLocktime'); - var c = this.__CACHE; - c.__TX.locktime = locktime; - c.__EXTRACTED_TX = undefined; - return this; - } - }, { - key: "setInputSequence", - value: function setInputSequence(inputIndex, sequence) { - check32Bit(sequence); - checkInputsForPartialSig(this.data.inputs, 'setInputSequence'); - var c = this.__CACHE; - - if (c.__TX.ins.length <= inputIndex) { - throw new Error('Input index too high'); - } - - c.__TX.ins[inputIndex].sequence = sequence; - c.__EXTRACTED_TX = undefined; - return this; - } - }, { - key: "addInputs", - value: function addInputs(inputDatas) { - var _this = this; - - inputDatas.forEach(function (inputData) { - return _this.addInput(inputData); - }); - return this; - } - }, { - key: "addInput", - value: function addInput(inputData) { - checkInputsForPartialSig(this.data.inputs, 'addInput'); - var c = this.__CACHE; - this.data.addInput(inputData); - var txIn = c.__TX.ins[c.__TX.ins.length - 1]; - checkTxInputCache(c, txIn); - var inputIndex = this.data.inputs.length - 1; - var input = this.data.inputs[inputIndex]; - - if (input.nonWitnessUtxo) { - addNonWitnessTxCache(this.__CACHE, input, inputIndex); - } - - c.__FEE = undefined; - c.__FEE_RATE = undefined; - c.__EXTRACTED_TX = undefined; - return this; - } - }, { - key: "addOutputs", - value: function addOutputs(outputDatas) { - var _this2 = this; - - outputDatas.forEach(function (outputData) { - return _this2.addOutput(outputData); - }); - return this; - } - }, { - key: "addOutput", - value: function addOutput(outputData) { - checkInputsForPartialSig(this.data.inputs, 'addOutput'); - var _outputData = outputData, - address = _outputData.address; - - if (typeof address === 'string') { - var network = this.opts.network; - var script = address_1.toOutputScript(address, network); - outputData = Object.assign(outputData, { - script: script - }); - } - - var c = this.__CACHE; - this.data.addOutput(outputData); - c.__FEE = undefined; - c.__FEE_RATE = undefined; - c.__EXTRACTED_TX = undefined; - return this; - } - }, { - key: "extractTransaction", - value: function extractTransaction(disableFeeCheck) { - if (!this.data.inputs.every(isFinalized)) throw new Error('Not finalized'); - var c = this.__CACHE; - - if (!disableFeeCheck) { - checkFees(this, c, this.opts); - } - - if (c.__EXTRACTED_TX) return c.__EXTRACTED_TX; - - var tx = c.__TX.clone(); - - inputFinalizeGetAmts(this.data.inputs, tx, c, true); - return tx; - } - }, { - key: "getFeeRate", - value: function getFeeRate() { - return getTxCacheValue('__FEE_RATE', 'fee rate', this.data.inputs, this.__CACHE); - } - }, { - key: "getFee", - value: function getFee() { - return getTxCacheValue('__FEE', 'fee', this.data.inputs, this.__CACHE); - } - }, { - key: "finalizeAllInputs", - value: function finalizeAllInputs() { - var _this3 = this; - - utils_1.checkForInput(this.data.inputs, 0); // making sure we have at least one - - range(this.data.inputs.length).forEach(function (idx) { - return _this3.finalizeInput(idx); - }); - return this; - } - }, { - key: "finalizeInput", - value: function finalizeInput(inputIndex) { - var input = utils_1.checkForInput(this.data.inputs, inputIndex); - - var _getScriptFromInput = getScriptFromInput(inputIndex, input, this.__CACHE), - script = _getScriptFromInput.script, - isP2SH = _getScriptFromInput.isP2SH, - isP2WSH = _getScriptFromInput.isP2WSH, - isSegwit = _getScriptFromInput.isSegwit; - - if (!script) throw new Error("No script found for input #".concat(inputIndex)); - var scriptType = classifyScript(script); - if (!canFinalize(input, script, scriptType)) throw new Error("Can not finalize input #".concat(inputIndex)); - checkPartialSigSighashes(input); - - var _getFinalScripts = getFinalScripts(script, scriptType, input.partialSig, isSegwit, isP2SH, isP2WSH), - finalScriptSig = _getFinalScripts.finalScriptSig, - finalScriptWitness = _getFinalScripts.finalScriptWitness; - - if (finalScriptSig) this.data.updateInput(inputIndex, { - finalScriptSig: finalScriptSig - }); - if (finalScriptWitness) this.data.updateInput(inputIndex, { - finalScriptWitness: finalScriptWitness - }); - if (!finalScriptSig && !finalScriptWitness) throw new Error("Unknown error finalizing input #".concat(inputIndex)); - this.data.clearFinalizedInput(inputIndex); - return this; - } - }, { - key: "validateSignaturesOfAllInputs", - value: function validateSignaturesOfAllInputs() { - var _this4 = this; - - utils_1.checkForInput(this.data.inputs, 0); // making sure we have at least one - - var results = range(this.data.inputs.length).map(function (idx) { - return _this4.validateSignaturesOfInput(idx); - }); - return results.reduce(function (final, res) { - return res === true && final; - }, true); - } - }, { - key: "validateSignaturesOfInput", - value: function validateSignaturesOfInput(inputIndex, pubkey) { - var input = this.data.inputs[inputIndex]; - var partialSig = (input || {}).partialSig; - if (!input || !partialSig || partialSig.length < 1) throw new Error('No signatures to validate'); - var mySigs = pubkey ? partialSig.filter(function (sig) { - return sig.pubkey.equals(pubkey); - }) : partialSig; - if (mySigs.length < 1) throw new Error('No signatures for this pubkey'); - var results = []; - var hashCache; - var scriptCache; - var sighashCache; - var _iteratorNormalCompletion = true; - var _didIteratorError = false; - var _iteratorError = undefined; - - try { - for (var _iterator = mySigs[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) { - var pSig = _step.value; - var sig = bscript.signature.decode(pSig.signature); - - var _ref = sighashCache !== sig.hashType ? getHashForSig(inputIndex, Object.assign({}, input, { - sighashType: sig.hashType - }), this.__CACHE) : { - hash: hashCache, - script: scriptCache - }, - hash = _ref.hash, - script = _ref.script; - - sighashCache = sig.hashType; - hashCache = hash; - scriptCache = script; - checkScriptForPubkey(pSig.pubkey, script, 'verify'); - var keypair = ecpair_1.fromPublicKey(pSig.pubkey); - results.push(keypair.verify(hash, sig.signature)); - } - } catch (err) { - _didIteratorError = true; - _iteratorError = err; - } finally { - try { - if (!_iteratorNormalCompletion && _iterator.return != null) { - _iterator.return(); - } - } finally { - if (_didIteratorError) { - throw _iteratorError; - } - } - } - - return results.every(function (res) { - return res === true; - }); - } - }, { - key: "signAllInputsHD", - value: function signAllInputsHD(hdKeyPair) { - var sighashTypes = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [transaction_1.Transaction.SIGHASH_ALL]; - - if (!hdKeyPair || !hdKeyPair.publicKey || !hdKeyPair.fingerprint) { - throw new Error('Need HDSigner to sign input'); - } - - var results = []; - var _iteratorNormalCompletion2 = true; - var _didIteratorError2 = false; - var _iteratorError2 = undefined; - - try { - for (var _iterator2 = range(this.data.inputs.length)[Symbol.iterator](), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true) { - var i = _step2.value; - - try { - this.signInputHD(i, hdKeyPair, sighashTypes); - results.push(true); - } catch (err) { - results.push(false); - } - } - } catch (err) { - _didIteratorError2 = true; - _iteratorError2 = err; - } finally { - try { - if (!_iteratorNormalCompletion2 && _iterator2.return != null) { - _iterator2.return(); - } - } finally { - if (_didIteratorError2) { - throw _iteratorError2; - } - } - } - - if (results.every(function (v) { - return v === false; - })) { - throw new Error('No inputs were signed'); - } - - return this; - } - }, { - key: "signAllInputsHDAsync", - value: function signAllInputsHDAsync(hdKeyPair) { - var _this5 = this; - - var sighashTypes = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [transaction_1.Transaction.SIGHASH_ALL]; - return new Promise(function (resolve, reject) { - if (!hdKeyPair || !hdKeyPair.publicKey || !hdKeyPair.fingerprint) { - return reject(new Error('Need HDSigner to sign input')); - } - - var results = []; - var promises = []; - var _iteratorNormalCompletion3 = true; - var _didIteratorError3 = false; - var _iteratorError3 = undefined; - - try { - for (var _iterator3 = range(_this5.data.inputs.length)[Symbol.iterator](), _step3; !(_iteratorNormalCompletion3 = (_step3 = _iterator3.next()).done); _iteratorNormalCompletion3 = true) { - var i = _step3.value; - promises.push(_this5.signInputHDAsync(i, hdKeyPair, sighashTypes).then(function () { - results.push(true); - }, function () { - results.push(false); - })); - } - } catch (err) { - _didIteratorError3 = true; - _iteratorError3 = err; - } finally { - try { - if (!_iteratorNormalCompletion3 && _iterator3.return != null) { - _iterator3.return(); - } - } finally { - if (_didIteratorError3) { - throw _iteratorError3; - } - } - } - - return Promise.all(promises).then(function () { - if (results.every(function (v) { - return v === false; - })) { - return reject(new Error('No inputs were signed')); - } - - resolve(); - }); - }); - } - }, { - key: "signInputHD", - value: function signInputHD(inputIndex, hdKeyPair) { - var _this6 = this; - - var sighashTypes = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : [transaction_1.Transaction.SIGHASH_ALL]; - - if (!hdKeyPair || !hdKeyPair.publicKey || !hdKeyPair.fingerprint) { - throw new Error('Need HDSigner to sign input'); - } - - var signers = getSignersFromHD(inputIndex, this.data.inputs, hdKeyPair); - signers.forEach(function (signer) { - return _this6.signInput(inputIndex, signer, sighashTypes); - }); - return this; - } - }, { - key: "signInputHDAsync", - value: function signInputHDAsync(inputIndex, hdKeyPair) { - var _this7 = this; - - var sighashTypes = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : [transaction_1.Transaction.SIGHASH_ALL]; - return new Promise(function (resolve, reject) { - if (!hdKeyPair || !hdKeyPair.publicKey || !hdKeyPair.fingerprint) { - return reject(new Error('Need HDSigner to sign input')); - } - - var signers = getSignersFromHD(inputIndex, _this7.data.inputs, hdKeyPair); - var promises = signers.map(function (signer) { - return _this7.signInputAsync(inputIndex, signer, sighashTypes); - }); - return Promise.all(promises).then(function () { - resolve(); - }).catch(reject); - }); - } - }, { - key: "signAllInputs", - value: function signAllInputs(keyPair) { - var sighashTypes = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [transaction_1.Transaction.SIGHASH_ALL]; - if (!keyPair || !keyPair.publicKey) throw new Error('Need Signer to sign input'); // TODO: Add a pubkey/pubkeyhash cache to each input - // as input information is added, then eventually - // optimize this method. - - var results = []; - var _iteratorNormalCompletion4 = true; - var _didIteratorError4 = false; - var _iteratorError4 = undefined; - - try { - for (var _iterator4 = range(this.data.inputs.length)[Symbol.iterator](), _step4; !(_iteratorNormalCompletion4 = (_step4 = _iterator4.next()).done); _iteratorNormalCompletion4 = true) { - var i = _step4.value; - - try { - this.signInput(i, keyPair, sighashTypes); - results.push(true); - } catch (err) { - results.push(false); - } - } - } catch (err) { - _didIteratorError4 = true; - _iteratorError4 = err; - } finally { - try { - if (!_iteratorNormalCompletion4 && _iterator4.return != null) { - _iterator4.return(); - } - } finally { - if (_didIteratorError4) { - throw _iteratorError4; - } - } - } - - if (results.every(function (v) { - return v === false; - })) { - throw new Error('No inputs were signed'); - } - - return this; - } - }, { - key: "signAllInputsAsync", - value: function signAllInputsAsync(keyPair) { - var _this8 = this; - - var sighashTypes = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [transaction_1.Transaction.SIGHASH_ALL]; - return new Promise(function (resolve, reject) { - if (!keyPair || !keyPair.publicKey) return reject(new Error('Need Signer to sign input')); // TODO: Add a pubkey/pubkeyhash cache to each input - // as input information is added, then eventually - // optimize this method. - - var results = []; - var promises = []; - var _iteratorNormalCompletion5 = true; - var _didIteratorError5 = false; - var _iteratorError5 = undefined; - - try { - for (var _iterator5 = _this8.data.inputs.entries()[Symbol.iterator](), _step5; !(_iteratorNormalCompletion5 = (_step5 = _iterator5.next()).done); _iteratorNormalCompletion5 = true) { - var _step5$value = _slicedToArray(_step5.value, 1), - i = _step5$value[0]; - - promises.push(_this8.signInputAsync(i, keyPair, sighashTypes).then(function () { - results.push(true); - }, function () { - results.push(false); - })); - } - } catch (err) { - _didIteratorError5 = true; - _iteratorError5 = err; - } finally { - try { - if (!_iteratorNormalCompletion5 && _iterator5.return != null) { - _iterator5.return(); - } - } finally { - if (_didIteratorError5) { - throw _iteratorError5; - } - } - } - - return Promise.all(promises).then(function () { - if (results.every(function (v) { - return v === false; - })) { - return reject(new Error('No inputs were signed')); - } - - resolve(); - }); - }); - } - }, { - key: "signInput", - value: function signInput(inputIndex, keyPair) { - var sighashTypes = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : [transaction_1.Transaction.SIGHASH_ALL]; - if (!keyPair || !keyPair.publicKey) throw new Error('Need Signer to sign input'); - - var _getHashAndSighashTyp = getHashAndSighashType(this.data.inputs, inputIndex, keyPair.publicKey, this.__CACHE, sighashTypes), - hash = _getHashAndSighashTyp.hash, - sighashType = _getHashAndSighashTyp.sighashType; - - var partialSig = [{ - pubkey: keyPair.publicKey, - signature: bscript.signature.encode(keyPair.sign(hash), sighashType) - }]; - this.data.updateInput(inputIndex, { - partialSig: partialSig - }); - return this; - } - }, { - key: "signInputAsync", - value: function signInputAsync(inputIndex, keyPair) { - var _this9 = this; - - var sighashTypes = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : [transaction_1.Transaction.SIGHASH_ALL]; - return new Promise(function (resolve, reject) { - if (!keyPair || !keyPair.publicKey) return reject(new Error('Need Signer to sign input')); - - var _getHashAndSighashTyp2 = getHashAndSighashType(_this9.data.inputs, inputIndex, keyPair.publicKey, _this9.__CACHE, sighashTypes), - hash = _getHashAndSighashTyp2.hash, - sighashType = _getHashAndSighashTyp2.sighashType; - - Promise.resolve(keyPair.sign(hash)).then(function (signature) { - var partialSig = [{ - pubkey: keyPair.publicKey, - signature: bscript.signature.encode(signature, sighashType) - }]; - - _this9.data.updateInput(inputIndex, { - partialSig: partialSig - }); - - resolve(); - }); - }); - } - }, { - key: "toBuffer", - value: function toBuffer() { - return this.data.toBuffer(); - } - }, { - key: "toHex", - value: function toHex() { - return this.data.toHex(); - } - }, { - key: "toBase64", - value: function toBase64() { - return this.data.toBase64(); - } - }, { - key: "updateGlobal", - value: function updateGlobal(updateData) { - this.data.updateGlobal(updateData); - return this; - } - }, { - key: "updateInput", - value: function updateInput(inputIndex, updateData) { - this.data.updateInput(inputIndex, updateData); - - if (updateData.nonWitnessUtxo) { - addNonWitnessTxCache(this.__CACHE, this.data.inputs[inputIndex], inputIndex); - } - - return this; - } - }, { - key: "updateOutput", - value: function updateOutput(outputIndex, updateData) { - this.data.updateOutput(outputIndex, updateData); - return this; - } - }, { - key: "addUnknownKeyValToGlobal", - value: function addUnknownKeyValToGlobal(keyVal) { - this.data.addUnknownKeyValToGlobal(keyVal); - return this; - } - }, { - key: "addUnknownKeyValToInput", - value: function addUnknownKeyValToInput(inputIndex, keyVal) { - this.data.addUnknownKeyValToInput(inputIndex, keyVal); - return this; - } - }, { - key: "addUnknownKeyValToOutput", - value: function addUnknownKeyValToOutput(outputIndex, keyVal) { - this.data.addUnknownKeyValToOutput(outputIndex, keyVal); - return this; - } - }, { - key: "clearFinalizedInput", - value: function clearFinalizedInput(inputIndex) { - this.data.clearFinalizedInput(inputIndex); - return this; - } - }, { - key: "inputCount", - get: function get() { - return this.data.inputs.length; - } - }], [{ - key: "fromBase64", - value: function fromBase64(data) { - var opts = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; - var buffer = Buffer.from(data, 'base64'); - return this.fromBuffer(buffer, opts); - } - }, { - key: "fromHex", - value: function fromHex(data) { - var opts = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; - var buffer = Buffer.from(data, 'hex'); - return this.fromBuffer(buffer, opts); - } - }, { - key: "fromBuffer", - value: function fromBuffer(buffer) { - var opts = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; - var psbtBase = bip174_1.Psbt.fromBuffer(buffer, transactionFromBuffer); - var psbt = new Psbt(opts, psbtBase); - checkTxForDupeIns(psbt.__CACHE.__TX, psbt.__CACHE); - return psbt; - } - }]); - - return Psbt; -}(); - -exports.Psbt = Psbt; -/** - * This function is needed to pass to the bip174 base class's fromBuffer. - * It takes the "transaction buffer" portion of the psbt buffer and returns a - * Transaction (From the bip174 library) interface. - */ - -var transactionFromBuffer = function transactionFromBuffer(buffer) { - return new PsbtTransaction(buffer); -}; -/** - * This class implements the Transaction interface from bip174 library. - * It contains a bitcoinjs-lib Transaction object. - */ - - -var PsbtTransaction = -/*#__PURE__*/ -function () { - function PsbtTransaction() { - var buffer = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : Buffer.from([2, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - - _classCallCheck(this, PsbtTransaction); - - this.tx = transaction_1.Transaction.fromBuffer(buffer); - checkTxEmpty(this.tx); - Object.defineProperty(this, 'tx', { - enumerable: false, - writable: true - }); - } - - _createClass(PsbtTransaction, [{ - key: "getInputOutputCounts", - value: function getInputOutputCounts() { - return { - inputCount: this.tx.ins.length, - outputCount: this.tx.outs.length - }; - } - }, { - key: "addInput", - value: function addInput(input) { - if (input.hash === undefined || input.index === undefined || !Buffer.isBuffer(input.hash) && typeof input.hash !== 'string' || typeof input.index !== 'number') { - throw new Error('Error adding input.'); - } - - var hash = typeof input.hash === 'string' ? bufferutils_1.reverseBuffer(Buffer.from(input.hash, 'hex')) : input.hash; - this.tx.addInput(hash, input.index, input.sequence); - } - }, { - key: "addOutput", - value: function addOutput(output) { - if (output.script === undefined || output.value === undefined || !Buffer.isBuffer(output.script) || typeof output.value !== 'number') { - throw new Error('Error adding output.'); - } - - this.tx.addOutput(output.script, output.value); - } - }, { - key: "toBuffer", - value: function toBuffer() { - return this.tx.toBuffer(); - } - }]); - - return PsbtTransaction; -}(); - -function canFinalize(input, script, scriptType) { - switch (scriptType) { - case 'pubkey': - case 'pubkeyhash': - case 'witnesspubkeyhash': - return hasSigs(1, input.partialSig); - - case 'multisig': - var p2ms = payments.p2ms({ - output: script - }); - return hasSigs(p2ms.m, input.partialSig); - - default: - return false; - } -} - -function hasSigs(neededSigs, partialSig) { - if (!partialSig) return false; - if (partialSig.length > neededSigs) throw new Error('Too many signatures'); - return partialSig.length === neededSigs; -} - -function isFinalized(input) { - return !!input.finalScriptSig || !!input.finalScriptWitness; -} - -function isPaymentFactory(payment) { - return function (script) { - try { - payment({ - output: script - }); - return true; - } catch (err) { - return false; - } - }; -} - -var isP2MS = isPaymentFactory(payments.p2ms); -var isP2PK = isPaymentFactory(payments.p2pk); -var isP2PKH = isPaymentFactory(payments.p2pkh); -var isP2WPKH = isPaymentFactory(payments.p2wpkh); -var isP2WSHScript = isPaymentFactory(payments.p2wsh); - -function check32Bit(num) { - if (typeof num !== 'number' || num !== Math.floor(num) || num > 0xffffffff || num < 0) { - throw new Error('Invalid 32 bit integer'); - } -} - -function checkFees(psbt, cache, opts) { - var feeRate = cache.__FEE_RATE || psbt.getFeeRate(); - - var vsize = cache.__EXTRACTED_TX.virtualSize(); - - var satoshis = feeRate * vsize; - - if (feeRate >= opts.maximumFeeRate) { - throw new Error("Warning: You are paying around ".concat((satoshis / 1e8).toFixed(8), " in ") + "fees, which is ".concat(feeRate, " satoshi per byte for a transaction ") + "with a VSize of ".concat(vsize, " bytes (segwit counted as 0.25 byte per ") + "byte). Use setMaximumFeeRate method to raise your threshold, or " + "pass true to the first arg of extractTransaction."); - } -} - -function checkInputsForPartialSig(inputs, action) { - inputs.forEach(function (input) { - var throws = false; - var pSigs = []; - - if ((input.partialSig || []).length === 0) { - if (!input.finalScriptSig && !input.finalScriptWitness) return; - pSigs = getPsigsFromInputFinalScripts(input); - } else { - pSigs = input.partialSig; - } - - pSigs.forEach(function (pSig) { - var _bscript$signature$de = bscript.signature.decode(pSig.signature), - hashType = _bscript$signature$de.hashType; - - var whitelist = []; - var isAnyoneCanPay = hashType & transaction_1.Transaction.SIGHASH_ANYONECANPAY; - if (isAnyoneCanPay) whitelist.push('addInput'); - var hashMod = hashType & 0x1f; - - switch (hashMod) { - case transaction_1.Transaction.SIGHASH_ALL: - break; - - case transaction_1.Transaction.SIGHASH_SINGLE: - case transaction_1.Transaction.SIGHASH_NONE: - whitelist.push('addOutput'); - whitelist.push('setInputSequence'); - break; - } - - if (whitelist.indexOf(action) === -1) { - throws = true; - } - }); - - if (throws) { - throw new Error('Can not modify transaction, signatures exist.'); - } - }); -} - -function checkPartialSigSighashes(input) { - if (!input.sighashType || !input.partialSig) return; - var partialSig = input.partialSig, - sighashType = input.sighashType; - partialSig.forEach(function (pSig) { - var _bscript$signature$de2 = bscript.signature.decode(pSig.signature), - hashType = _bscript$signature$de2.hashType; - - if (sighashType !== hashType) { - throw new Error('Signature sighash does not match input sighash type'); - } - }); -} - -function checkScriptForPubkey(pubkey, script, action) { - var pubkeyHash = crypto_1.hash160(pubkey); - var decompiled = bscript.decompile(script); - if (decompiled === null) throw new Error('Unknown script error'); - var hasKey = decompiled.some(function (element) { - if (typeof element === 'number') return false; - return element.equals(pubkey) || element.equals(pubkeyHash); - }); - - if (!hasKey) { - throw new Error("Can not ".concat(action, " for this input with the key ").concat(pubkey.toString('hex'))); - } -} - -function checkTxEmpty(tx) { - var isEmpty = tx.ins.every(function (input) { - return input.script && input.script.length === 0 && input.witness && input.witness.length === 0; - }); - - if (!isEmpty) { - throw new Error('Format Error: Transaction ScriptSigs are not empty'); - } -} - -function checkTxForDupeIns(tx, cache) { - tx.ins.forEach(function (input) { - checkTxInputCache(cache, input); - }); -} - -function checkTxInputCache(cache, input) { - var key = bufferutils_1.reverseBuffer(Buffer.from(input.hash)).toString('hex') + ':' + input.index; - if (cache.__TX_IN_CACHE[key]) throw new Error('Duplicate input detected.'); - cache.__TX_IN_CACHE[key] = 1; -} - -function scriptCheckerFactory(payment, paymentScriptName) { - return function (inputIndex, scriptPubKey, redeemScript) { - var redeemScriptOutput = payment({ - redeem: { - output: redeemScript - } - }).output; - - if (!scriptPubKey.equals(redeemScriptOutput)) { - throw new Error("".concat(paymentScriptName, " for input #").concat(inputIndex, " doesn't match the scriptPubKey in the prevout")); - } - }; -} - -var checkRedeemScript = scriptCheckerFactory(payments.p2sh, 'Redeem script'); -var checkWitnessScript = scriptCheckerFactory(payments.p2wsh, 'Witness script'); - -function getTxCacheValue(key, name, inputs, c) { - if (!inputs.every(isFinalized)) throw new Error("PSBT must be finalized to calculate ".concat(name)); - if (key === '__FEE_RATE' && c.__FEE_RATE) return c.__FEE_RATE; - if (key === '__FEE' && c.__FEE) return c.__FEE; - var tx; - var mustFinalize = true; - - if (c.__EXTRACTED_TX) { - tx = c.__EXTRACTED_TX; - mustFinalize = false; - } else { - tx = c.__TX.clone(); - } - - inputFinalizeGetAmts(inputs, tx, c, mustFinalize); - if (key === '__FEE_RATE') return c.__FEE_RATE;else if (key === '__FEE') return c.__FEE; -} - -function getFinalScripts(script, scriptType, partialSig, isSegwit, isP2SH, isP2WSH) { - var finalScriptSig; - var finalScriptWitness; // Wow, the payments API is very handy - - var payment = getPayment(script, scriptType, partialSig); - var p2wsh = !isP2WSH ? null : payments.p2wsh({ - redeem: payment - }); - var p2sh = !isP2SH ? null : payments.p2sh({ - redeem: p2wsh || payment - }); - - if (isSegwit) { - if (p2wsh) { - finalScriptWitness = witnessStackToScriptWitness(p2wsh.witness); - } else { - finalScriptWitness = witnessStackToScriptWitness(payment.witness); - } - - if (p2sh) { - finalScriptSig = p2sh.input; - } - } else { - if (p2sh) { - finalScriptSig = p2sh.input; - } else { - finalScriptSig = payment.input; - } - } - - return { - finalScriptSig: finalScriptSig, - finalScriptWitness: finalScriptWitness - }; -} - -function getHashAndSighashType(inputs, inputIndex, pubkey, cache, sighashTypes) { - var input = utils_1.checkForInput(inputs, inputIndex); - - var _getHashForSig = getHashForSig(inputIndex, input, cache, sighashTypes), - hash = _getHashForSig.hash, - sighashType = _getHashForSig.sighashType, - script = _getHashForSig.script; - - checkScriptForPubkey(pubkey, script, 'sign'); - return { - hash: hash, - sighashType: sighashType - }; -} - -function getHashForSig(inputIndex, input, cache, sighashTypes) { - var unsignedTx = cache.__TX; - var sighashType = input.sighashType || transaction_1.Transaction.SIGHASH_ALL; - - if (sighashTypes && sighashTypes.indexOf(sighashType) < 0) { - var str = sighashTypeToString(sighashType); - throw new Error("Sighash type is not allowed. Retry the sign method passing the " + "sighashTypes array of whitelisted types. Sighash type: ".concat(str)); - } - - var hash; - var script; - - if (input.nonWitnessUtxo) { - var nonWitnessUtxoTx = nonWitnessUtxoTxFromCache(cache, input, inputIndex); - var prevoutHash = unsignedTx.ins[inputIndex].hash; - var utxoHash = nonWitnessUtxoTx.getHash(); // If a non-witness UTXO is provided, its hash must match the hash specified in the prevout - - if (!prevoutHash.equals(utxoHash)) { - throw new Error("Non-witness UTXO hash for input #".concat(inputIndex, " doesn't match the hash specified in the prevout")); - } - - var prevoutIndex = unsignedTx.ins[inputIndex].index; - var prevout = nonWitnessUtxoTx.outs[prevoutIndex]; - - if (input.redeemScript) { - // If a redeemScript is provided, the scriptPubKey must be for that redeemScript - checkRedeemScript(inputIndex, prevout.script, input.redeemScript); - script = input.redeemScript; - } else { - script = prevout.script; - } - - if (isP2WSHScript(script)) { - if (!input.witnessScript) throw new Error('Segwit input needs witnessScript if not P2WPKH'); - checkWitnessScript(inputIndex, script, input.witnessScript); - hash = unsignedTx.hashForWitnessV0(inputIndex, input.witnessScript, prevout.value, sighashType); - script = input.witnessScript; - } else if (isP2WPKH(script)) { - // P2WPKH uses the P2PKH template for prevoutScript when signing - var signingScript = payments.p2pkh({ - hash: script.slice(2) - }).output; - hash = unsignedTx.hashForWitnessV0(inputIndex, signingScript, prevout.value, sighashType); - } else { - hash = unsignedTx.hashForSignature(inputIndex, script, sighashType); - } - } else if (input.witnessUtxo) { - var _script; // so we don't shadow the `let script` above - - - if (input.redeemScript) { - // If a redeemScript is provided, the scriptPubKey must be for that redeemScript - checkRedeemScript(inputIndex, input.witnessUtxo.script, input.redeemScript); - _script = input.redeemScript; - } else { - _script = input.witnessUtxo.script; - } - - if (isP2WPKH(_script)) { - // P2WPKH uses the P2PKH template for prevoutScript when signing - var _signingScript = payments.p2pkh({ - hash: _script.slice(2) - }).output; - hash = unsignedTx.hashForWitnessV0(inputIndex, _signingScript, input.witnessUtxo.value, sighashType); - script = _script; - } else if (isP2WSHScript(_script)) { - if (!input.witnessScript) throw new Error('Segwit input needs witnessScript if not P2WPKH'); - checkWitnessScript(inputIndex, _script, input.witnessScript); - hash = unsignedTx.hashForWitnessV0(inputIndex, input.witnessScript, input.witnessUtxo.value, sighashType); // want to make sure the script we return is the actual meaningful script - - script = input.witnessScript; - } else { - throw new Error("Input #".concat(inputIndex, " has witnessUtxo but non-segwit script: ") + "".concat(_script.toString('hex'))); - } - } else { - throw new Error('Need a Utxo input item for signing'); - } - - return { - script: script, - sighashType: sighashType, - hash: hash - }; -} - -function getPayment(script, scriptType, partialSig) { - var payment; - - switch (scriptType) { - case 'multisig': - var sigs = getSortedSigs(script, partialSig); - payment = payments.p2ms({ - output: script, - signatures: sigs - }); - break; - - case 'pubkey': - payment = payments.p2pk({ - output: script, - signature: partialSig[0].signature - }); - break; - - case 'pubkeyhash': - payment = payments.p2pkh({ - output: script, - pubkey: partialSig[0].pubkey, - signature: partialSig[0].signature - }); - break; - - case 'witnesspubkeyhash': - payment = payments.p2wpkh({ - output: script, - pubkey: partialSig[0].pubkey, - signature: partialSig[0].signature - }); - break; - } - - return payment; -} - -function getPsigsFromInputFinalScripts(input) { - var scriptItems = !input.finalScriptSig ? [] : bscript.decompile(input.finalScriptSig) || []; - var witnessItems = !input.finalScriptWitness ? [] : bscript.decompile(input.finalScriptWitness) || []; - return scriptItems.concat(witnessItems).filter(function (item) { - return Buffer.isBuffer(item) && bscript.isCanonicalScriptSignature(item); - }).map(function (sig) { - return { - signature: sig - }; - }); -} - -function getScriptFromInput(inputIndex, input, cache) { - var unsignedTx = cache.__TX; - var res = { - script: null, - isSegwit: false, - isP2SH: false, - isP2WSH: false - }; - res.isP2SH = !!input.redeemScript; - res.isP2WSH = !!input.witnessScript; - - if (input.witnessScript) { - res.script = input.witnessScript; - } else if (input.redeemScript) { - res.script = input.redeemScript; - } else { - if (input.nonWitnessUtxo) { - var nonWitnessUtxoTx = nonWitnessUtxoTxFromCache(cache, input, inputIndex); - var prevoutIndex = unsignedTx.ins[inputIndex].index; - res.script = nonWitnessUtxoTx.outs[prevoutIndex].script; - } else if (input.witnessUtxo) { - res.script = input.witnessUtxo.script; - } - } - - if (input.witnessScript || isP2WPKH(res.script)) { - res.isSegwit = true; - } - - return res; -} - -function getSignersFromHD(inputIndex, inputs, hdKeyPair) { - var input = utils_1.checkForInput(inputs, inputIndex); - - if (!input.bip32Derivation || input.bip32Derivation.length === 0) { - throw new Error('Need bip32Derivation to sign with HD'); - } - - var myDerivations = input.bip32Derivation.map(function (bipDv) { - if (bipDv.masterFingerprint.equals(hdKeyPair.fingerprint)) { - return bipDv; - } else { - return; - } - }).filter(function (v) { - return !!v; - }); - - if (myDerivations.length === 0) { - throw new Error('Need one bip32Derivation masterFingerprint to match the HDSigner fingerprint'); - } - - var signers = myDerivations.map(function (bipDv) { - var node = hdKeyPair.derivePath(bipDv.path); - - if (!bipDv.pubkey.equals(node.publicKey)) { - throw new Error('pubkey did not match bip32Derivation'); - } - - return node; - }); - return signers; -} - -function getSortedSigs(script, partialSig) { - var p2ms = payments.p2ms({ - output: script - }); // for each pubkey in order of p2ms script - - return p2ms.pubkeys.map(function (pk) { - // filter partialSig array by pubkey being equal - return (partialSig.filter(function (ps) { - return ps.pubkey.equals(pk); - })[0] || {}).signature; // Any pubkey without a match will return undefined - // this last filter removes all the undefined items in the array. - }).filter(function (v) { - return !!v; - }); -} - -function scriptWitnessToWitnessStack(buffer) { - var offset = 0; - - function readSlice(n) { - offset += n; - return buffer.slice(offset - n, offset); - } - - function readVarInt() { - var vi = varuint.decode(buffer, offset); - offset += varuint.decode.bytes; - return vi; - } - - function readVarSlice() { - return readSlice(readVarInt()); - } - - function readVector() { - var count = readVarInt(); - var vector = []; - - for (var i = 0; i < count; i++) { - vector.push(readVarSlice()); - } - - return vector; - } - - return readVector(); -} - -function sighashTypeToString(sighashType) { - var text = sighashType & transaction_1.Transaction.SIGHASH_ANYONECANPAY ? 'SIGHASH_ANYONECANPAY | ' : ''; - var sigMod = sighashType & 0x1f; - - switch (sigMod) { - case transaction_1.Transaction.SIGHASH_ALL: - text += 'SIGHASH_ALL'; - break; - - case transaction_1.Transaction.SIGHASH_SINGLE: - text += 'SIGHASH_SINGLE'; - break; - - case transaction_1.Transaction.SIGHASH_NONE: - text += 'SIGHASH_NONE'; - break; - } - - return text; -} - -function witnessStackToScriptWitness(witness) { - var buffer = Buffer.allocUnsafe(0); - - function writeSlice(slice) { - buffer = Buffer.concat([buffer, Buffer.from(slice)]); - } - - function writeVarInt(i) { - var currentLen = buffer.length; - var varintLen = varuint.encodingLength(i); - buffer = Buffer.concat([buffer, Buffer.allocUnsafe(varintLen)]); - varuint.encode(i, buffer, currentLen); - } - - function writeVarSlice(slice) { - writeVarInt(slice.length); - writeSlice(slice); - } - - function writeVector(vector) { - writeVarInt(vector.length); - vector.forEach(writeVarSlice); - } - - writeVector(witness); - return buffer; -} - -function addNonWitnessTxCache(cache, input, inputIndex) { - cache.__NON_WITNESS_UTXO_BUF_CACHE[inputIndex] = input.nonWitnessUtxo; - var tx = transaction_1.Transaction.fromBuffer(input.nonWitnessUtxo); - cache.__NON_WITNESS_UTXO_TX_CACHE[inputIndex] = tx; - var self = cache; - var selfIndex = inputIndex; - delete input.nonWitnessUtxo; - Object.defineProperty(input, 'nonWitnessUtxo', { - enumerable: true, - get: function get() { - var buf = self.__NON_WITNESS_UTXO_BUF_CACHE[selfIndex]; - var txCache = self.__NON_WITNESS_UTXO_TX_CACHE[selfIndex]; - - if (buf !== undefined) { - return buf; - } else { - var newBuf = txCache.toBuffer(); - self.__NON_WITNESS_UTXO_BUF_CACHE[selfIndex] = newBuf; - return newBuf; - } - }, - set: function set(data) { - self.__NON_WITNESS_UTXO_BUF_CACHE[selfIndex] = data; - } - }); -} - -function inputFinalizeGetAmts(inputs, tx, cache, mustFinalize) { - var inputAmount = 0; - inputs.forEach(function (input, idx) { - if (mustFinalize && input.finalScriptSig) tx.ins[idx].script = input.finalScriptSig; - - if (mustFinalize && input.finalScriptWitness) { - tx.ins[idx].witness = scriptWitnessToWitnessStack(input.finalScriptWitness); - } - - if (input.witnessUtxo) { - inputAmount += input.witnessUtxo.value; - } else if (input.nonWitnessUtxo) { - var nwTx = nonWitnessUtxoTxFromCache(cache, input, idx); - var vout = tx.ins[idx].index; - var out = nwTx.outs[vout]; - inputAmount += out.value; - } - }); - var outputAmount = tx.outs.reduce(function (total, o) { - return total + o.value; - }, 0); - var fee = inputAmount - outputAmount; - - if (fee < 0) { - throw new Error('Outputs are spending more than Inputs'); - } - - var bytes = tx.virtualSize(); - cache.__FEE = fee; - cache.__EXTRACTED_TX = tx; - cache.__FEE_RATE = Math.floor(fee / bytes); -} - -function nonWitnessUtxoTxFromCache(cache, input, inputIndex) { - var c = cache.__NON_WITNESS_UTXO_TX_CACHE; - - if (!c[inputIndex]) { - addNonWitnessTxCache(cache, input, inputIndex); - } - - return c[inputIndex]; -} - -function classifyScript(script) { - if (isP2WPKH(script)) return 'witnesspubkeyhash'; - if (isP2PKH(script)) return 'pubkeyhash'; - if (isP2MS(script)) return 'multisig'; - if (isP2PK(script)) return 'pubkey'; - return 'nonstandard'; -} - -function range(n) { - return _toConsumableArray(Array(n).keys()); -} -},{"bip174":"Kgzo","bip174/src/lib/converter/varint":"ViXA","bip174/src/lib/utils":"GfFi","./address":"kxhz","./bufferutils":"kTjr","./crypto":"wHwg","./ecpair":"SRL3","./networks":"LuAr","./payments":"M8O6","./script":"zCpQ","./transaction":"kntI","buffer":"dskh"}],"qcLI":[function(require,module,exports) { -'use strict'; // OP_0 [signatures ...] - -Object.defineProperty(exports, '__esModule', { - value: true -}); - -var bscript = require('../../script'); - -var script_1 = require('../../script'); - -function partialSignature(value) { - return value === script_1.OPS.OP_0 || bscript.isCanonicalScriptSignature(value); -} - -function check(script, allowIncomplete) { - var chunks = bscript.decompile(script); - if (chunks.length < 2) return false; - if (chunks[0] !== script_1.OPS.OP_0) return false; - - if (allowIncomplete) { - return chunks.slice(1).every(partialSignature); - } - - return chunks.slice(1).every(bscript.isCanonicalScriptSignature); -} - -exports.check = check; - -check.toJSON = function () { - return 'multisig input'; -}; -},{"../../script":"zCpQ"}],"K6n3":[function(require,module,exports) { -'use strict'; // m [pubKeys ...] n OP_CHECKMULTISIG - -Object.defineProperty(exports, '__esModule', { - value: true -}); - -var bscript = require('../../script'); - -var script_1 = require('../../script'); - -var types = require('../../types'); - -var OP_INT_BASE = script_1.OPS.OP_RESERVED; // OP_1 - 1 - -function check(script, allowIncomplete) { - var chunks = bscript.decompile(script); - if (chunks.length < 4) return false; - if (chunks[chunks.length - 1] !== script_1.OPS.OP_CHECKMULTISIG) return false; - if (!types.Number(chunks[0])) return false; - if (!types.Number(chunks[chunks.length - 2])) return false; - var m = chunks[0] - OP_INT_BASE; - var n = chunks[chunks.length - 2] - OP_INT_BASE; - if (m <= 0) return false; - if (n > 16) return false; - if (m > n) return false; - if (n !== chunks.length - 3) return false; - if (allowIncomplete) return true; - var keys = chunks.slice(1, -2); - return keys.every(bscript.isCanonicalPubKey); -} - -exports.check = check; - -check.toJSON = function () { - return 'multi-sig output'; -}; -},{"../../script":"zCpQ","../../types":"mf8L"}],"dh2f":[function(require,module,exports) { -'use strict'; - -Object.defineProperty(exports, '__esModule', { - value: true -}); - -var input = require('./input'); - -exports.input = input; - -var output = require('./output'); - -exports.output = output; -},{"./input":"qcLI","./output":"K6n3"}],"YIHc":[function(require,module,exports) { -'use strict'; - -Object.defineProperty(exports, '__esModule', { - value: true -}); // OP_RETURN {data} - -var bscript = require('../script'); - -var OPS = bscript.OPS; - -function check(script) { - var buffer = bscript.compile(script); - return buffer.length > 1 && buffer[0] === OPS.OP_RETURN; -} - -exports.check = check; - -check.toJSON = function () { - return 'null data output'; -}; - -var output = { - check: check -}; -exports.output = output; -},{"../script":"zCpQ"}],"QV0D":[function(require,module,exports) { -'use strict'; // {signature} - -Object.defineProperty(exports, '__esModule', { - value: true -}); - -var bscript = require('../../script'); - -function check(script) { - var chunks = bscript.decompile(script); - return chunks.length === 1 && bscript.isCanonicalScriptSignature(chunks[0]); -} - -exports.check = check; - -check.toJSON = function () { - return 'pubKey input'; -}; -},{"../../script":"zCpQ"}],"xhy1":[function(require,module,exports) { -'use strict'; // {pubKey} OP_CHECKSIG - -Object.defineProperty(exports, '__esModule', { - value: true -}); - -var bscript = require('../../script'); - -var script_1 = require('../../script'); - -function check(script) { - var chunks = bscript.decompile(script); - return chunks.length === 2 && bscript.isCanonicalPubKey(chunks[0]) && chunks[1] === script_1.OPS.OP_CHECKSIG; -} - -exports.check = check; - -check.toJSON = function () { - return 'pubKey output'; -}; -},{"../../script":"zCpQ"}],"E3Ef":[function(require,module,exports) { -'use strict'; - -Object.defineProperty(exports, '__esModule', { - value: true -}); - -var input = require('./input'); - -exports.input = input; - -var output = require('./output'); - -exports.output = output; -},{"./input":"QV0D","./output":"xhy1"}],"rXOy":[function(require,module,exports) { -'use strict'; // {signature} {pubKey} - -Object.defineProperty(exports, '__esModule', { - value: true -}); - -var bscript = require('../../script'); - -function check(script) { - var chunks = bscript.decompile(script); - return chunks.length === 2 && bscript.isCanonicalScriptSignature(chunks[0]) && bscript.isCanonicalPubKey(chunks[1]); -} - -exports.check = check; - -check.toJSON = function () { - return 'pubKeyHash input'; -}; -},{"../../script":"zCpQ"}],"mh5j":[function(require,module,exports) { -'use strict'; // OP_DUP OP_HASH160 {pubKeyHash} OP_EQUALVERIFY OP_CHECKSIG - -Object.defineProperty(exports, '__esModule', { - value: true -}); - -var bscript = require('../../script'); - -var script_1 = require('../../script'); - -function check(script) { - var buffer = bscript.compile(script); - return buffer.length === 25 && buffer[0] === script_1.OPS.OP_DUP && buffer[1] === script_1.OPS.OP_HASH160 && buffer[2] === 0x14 && buffer[23] === script_1.OPS.OP_EQUALVERIFY && buffer[24] === script_1.OPS.OP_CHECKSIG; -} - -exports.check = check; - -check.toJSON = function () { - return 'pubKeyHash output'; -}; -},{"../../script":"zCpQ"}],"Ozlu":[function(require,module,exports) { -'use strict'; - -Object.defineProperty(exports, '__esModule', { - value: true -}); - -var input = require('./input'); - -exports.input = input; - -var output = require('./output'); - -exports.output = output; -},{"./input":"rXOy","./output":"mh5j"}],"G1IW":[function(require,module,exports) { -'use strict'; // OP_0 {pubKeyHash} - -Object.defineProperty(exports, '__esModule', { - value: true -}); - -var bscript = require('../../script'); - -var script_1 = require('../../script'); - -function check(script) { - var buffer = bscript.compile(script); - return buffer.length === 22 && buffer[0] === script_1.OPS.OP_0 && buffer[1] === 0x14; -} - -exports.check = check; - -check.toJSON = function () { - return 'Witness pubKeyHash output'; -}; -},{"../../script":"zCpQ"}],"uP37":[function(require,module,exports) { -'use strict'; // OP_0 {scriptHash} - -Object.defineProperty(exports, '__esModule', { - value: true -}); - -var bscript = require('../../script'); - -var script_1 = require('../../script'); - -function check(script) { - var buffer = bscript.compile(script); - return buffer.length === 34 && buffer[0] === script_1.OPS.OP_0 && buffer[1] === 0x20; -} - -exports.check = check; - -check.toJSON = function () { - return 'Witness scriptHash output'; -}; -},{"../../script":"zCpQ"}],"NCja":[function(require,module,exports) { -var Buffer = require("buffer").Buffer; -'use strict'; // {serialized scriptPubKey script} - -Object.defineProperty(exports, '__esModule', { - value: true -}); - -var bscript = require('../../script'); - -var p2ms = require('../multisig'); - -var p2pk = require('../pubkey'); - -var p2pkh = require('../pubkeyhash'); - -var p2wpkho = require('../witnesspubkeyhash/output'); - -var p2wsho = require('../witnessscripthash/output'); - -function check(script, allowIncomplete) { - var chunks = bscript.decompile(script); - if (chunks.length < 1) return false; - var lastChunk = chunks[chunks.length - 1]; - if (!Buffer.isBuffer(lastChunk)) return false; - var scriptSigChunks = bscript.decompile(bscript.compile(chunks.slice(0, -1))); - var redeemScriptChunks = bscript.decompile(lastChunk); // is redeemScript a valid script? - - if (!redeemScriptChunks) return false; // is redeemScriptSig push only? - - if (!bscript.isPushOnly(scriptSigChunks)) return false; // is witness? - - if (chunks.length === 1) { - return p2wsho.check(redeemScriptChunks) || p2wpkho.check(redeemScriptChunks); - } // match types - - - if (p2pkh.input.check(scriptSigChunks) && p2pkh.output.check(redeemScriptChunks)) return true; - if (p2ms.input.check(scriptSigChunks, allowIncomplete) && p2ms.output.check(redeemScriptChunks)) return true; - if (p2pk.input.check(scriptSigChunks) && p2pk.output.check(redeemScriptChunks)) return true; - return false; -} - -exports.check = check; - -check.toJSON = function () { - return 'scriptHash input'; -}; -},{"../../script":"zCpQ","../multisig":"dh2f","../pubkey":"E3Ef","../pubkeyhash":"Ozlu","../witnesspubkeyhash/output":"G1IW","../witnessscripthash/output":"uP37","buffer":"dskh"}],"fjnZ":[function(require,module,exports) { -'use strict'; // OP_HASH160 {scriptHash} OP_EQUAL - -Object.defineProperty(exports, '__esModule', { - value: true -}); - -var bscript = require('../../script'); - -var script_1 = require('../../script'); - -function check(script) { - var buffer = bscript.compile(script); - return buffer.length === 23 && buffer[0] === script_1.OPS.OP_HASH160 && buffer[1] === 0x14 && buffer[22] === script_1.OPS.OP_EQUAL; -} - -exports.check = check; - -check.toJSON = function () { - return 'scriptHash output'; -}; -},{"../../script":"zCpQ"}],"fq1j":[function(require,module,exports) { -'use strict'; - -Object.defineProperty(exports, '__esModule', { - value: true -}); - -var input = require('./input'); - -exports.input = input; - -var output = require('./output'); - -exports.output = output; -},{"./input":"NCja","./output":"fjnZ"}],"BCOX":[function(require,module,exports) { -var Buffer = require("buffer").Buffer; -'use strict'; // OP_RETURN {aa21a9ed} {commitment} - -Object.defineProperty(exports, '__esModule', { - value: true -}); - -var bscript = require('../../script'); - -var script_1 = require('../../script'); - -var types = require('../../types'); - -var typeforce = require('typeforce'); - -var HEADER = Buffer.from('aa21a9ed', 'hex'); - -function check(script) { - var buffer = bscript.compile(script); - return buffer.length > 37 && buffer[0] === script_1.OPS.OP_RETURN && buffer[1] === 0x24 && buffer.slice(2, 6).equals(HEADER); -} - -exports.check = check; - -check.toJSON = function () { - return 'Witness commitment output'; -}; - -function encode(commitment) { - typeforce(types.Hash256bit, commitment); - var buffer = Buffer.allocUnsafe(36); - HEADER.copy(buffer, 0); - commitment.copy(buffer, 4); - return bscript.compile([script_1.OPS.OP_RETURN, buffer]); -} - -exports.encode = encode; - -function decode(buffer) { - typeforce(check, buffer); - return bscript.decompile(buffer)[1].slice(4, 36); -} - -exports.decode = decode; -},{"../../script":"zCpQ","../../types":"mf8L","typeforce":"PKU7","buffer":"dskh"}],"gtgV":[function(require,module,exports) { -'use strict'; - -Object.defineProperty(exports, '__esModule', { - value: true -}); - -var output = require('./output'); - -exports.output = output; -},{"./output":"BCOX"}],"XYWP":[function(require,module,exports) { -'use strict'; // {signature} {pubKey} - -Object.defineProperty(exports, '__esModule', { - value: true -}); - -var bscript = require('../../script'); - -function isCompressedCanonicalPubKey(pubKey) { - return bscript.isCanonicalPubKey(pubKey) && pubKey.length === 33; -} - -function check(script) { - var chunks = bscript.decompile(script); - return chunks.length === 2 && bscript.isCanonicalScriptSignature(chunks[0]) && isCompressedCanonicalPubKey(chunks[1]); -} - -exports.check = check; - -check.toJSON = function () { - return 'witnessPubKeyHash input'; -}; -},{"../../script":"zCpQ"}],"dUCE":[function(require,module,exports) { -'use strict'; - -Object.defineProperty(exports, '__esModule', { - value: true -}); - -var input = require('./input'); - -exports.input = input; - -var output = require('./output'); - -exports.output = output; -},{"./input":"XYWP","./output":"G1IW"}],"SHiP":[function(require,module,exports) { -var Buffer = require("buffer").Buffer; -'use strict'; // {serialized scriptPubKey script} - -Object.defineProperty(exports, '__esModule', { - value: true -}); - -var bscript = require('../../script'); - -var typeforce = require('typeforce'); - -var p2ms = require('../multisig'); - -var p2pk = require('../pubkey'); - -var p2pkh = require('../pubkeyhash'); - -function check(chunks, allowIncomplete) { - typeforce(typeforce.Array, chunks); - if (chunks.length < 1) return false; - var witnessScript = chunks[chunks.length - 1]; - if (!Buffer.isBuffer(witnessScript)) return false; - var witnessScriptChunks = bscript.decompile(witnessScript); // is witnessScript a valid script? - - if (!witnessScriptChunks || witnessScriptChunks.length === 0) return false; - var witnessRawScriptSig = bscript.compile(chunks.slice(0, -1)); // match types - - if (p2pkh.input.check(witnessRawScriptSig) && p2pkh.output.check(witnessScriptChunks)) return true; - if (p2ms.input.check(witnessRawScriptSig, allowIncomplete) && p2ms.output.check(witnessScriptChunks)) return true; - if (p2pk.input.check(witnessRawScriptSig) && p2pk.output.check(witnessScriptChunks)) return true; - return false; -} - -exports.check = check; - -check.toJSON = function () { - return 'witnessScriptHash input'; -}; -},{"../../script":"zCpQ","typeforce":"PKU7","../multisig":"dh2f","../pubkey":"E3Ef","../pubkeyhash":"Ozlu","buffer":"dskh"}],"bFJ9":[function(require,module,exports) { -'use strict'; - -Object.defineProperty(exports, '__esModule', { - value: true -}); - -var input = require('./input'); - -exports.input = input; - -var output = require('./output'); - -exports.output = output; -},{"./input":"SHiP","./output":"uP37"}],"YNBe":[function(require,module,exports) { -'use strict'; - -Object.defineProperty(exports, '__esModule', { - value: true -}); - -var script_1 = require('./script'); - -var multisig = require('./templates/multisig'); - -var nullData = require('./templates/nulldata'); - -var pubKey = require('./templates/pubkey'); - -var pubKeyHash = require('./templates/pubkeyhash'); - -var scriptHash = require('./templates/scripthash'); - -var witnessCommitment = require('./templates/witnesscommitment'); - -var witnessPubKeyHash = require('./templates/witnesspubkeyhash'); - -var witnessScriptHash = require('./templates/witnessscripthash'); - -var types = { - P2MS: 'multisig', - NONSTANDARD: 'nonstandard', - NULLDATA: 'nulldata', - P2PK: 'pubkey', - P2PKH: 'pubkeyhash', - P2SH: 'scripthash', - P2WPKH: 'witnesspubkeyhash', - P2WSH: 'witnessscripthash', - WITNESS_COMMITMENT: 'witnesscommitment' -}; -exports.types = types; - -function classifyOutput(script) { - if (witnessPubKeyHash.output.check(script)) return types.P2WPKH; - if (witnessScriptHash.output.check(script)) return types.P2WSH; - if (pubKeyHash.output.check(script)) return types.P2PKH; - if (scriptHash.output.check(script)) return types.P2SH; // XXX: optimization, below functions .decompile before use - - var chunks = script_1.decompile(script); - if (!chunks) throw new TypeError('Invalid script'); - if (multisig.output.check(chunks)) return types.P2MS; - if (pubKey.output.check(chunks)) return types.P2PK; - if (witnessCommitment.output.check(chunks)) return types.WITNESS_COMMITMENT; - if (nullData.output.check(chunks)) return types.NULLDATA; - return types.NONSTANDARD; -} - -exports.output = classifyOutput; - -function classifyInput(script, allowIncomplete) { - // XXX: optimization, below functions .decompile before use - var chunks = script_1.decompile(script); - if (!chunks) throw new TypeError('Invalid script'); - if (pubKeyHash.input.check(chunks)) return types.P2PKH; - if (scriptHash.input.check(chunks, allowIncomplete)) return types.P2SH; - if (multisig.input.check(chunks, allowIncomplete)) return types.P2MS; - if (pubKey.input.check(chunks)) return types.P2PK; - return types.NONSTANDARD; -} - -exports.input = classifyInput; - -function classifyWitness(script, allowIncomplete) { - // XXX: optimization, below functions .decompile before use - var chunks = script_1.decompile(script); - if (!chunks) throw new TypeError('Invalid script'); - if (witnessPubKeyHash.input.check(chunks)) return types.P2WPKH; - if (witnessScriptHash.input.check(chunks, allowIncomplete)) return types.P2WSH; - return types.NONSTANDARD; -} - -exports.witness = classifyWitness; -},{"./script":"zCpQ","./templates/multisig":"dh2f","./templates/nulldata":"YIHc","./templates/pubkey":"E3Ef","./templates/pubkeyhash":"Ozlu","./templates/scripthash":"fq1j","./templates/witnesscommitment":"gtgV","./templates/witnesspubkeyhash":"dUCE","./templates/witnessscripthash":"bFJ9"}],"Y73L":[function(require,module,exports) { -var Buffer = require("buffer").Buffer; -'use strict'; - -function _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } - -function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _nonIterableRest(); } - -function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance"); } - -function _iterableToArrayLimit(arr, i) { if (!(Symbol.iterator in Object(arr) || Object.prototype.toString.call(arr) === "[object Arguments]")) { return; } var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; } - -function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; } - -function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - -function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } - -function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; } - -Object.defineProperty(exports, '__esModule', { - value: true -}); - -var baddress = require('./address'); - -var bufferutils_1 = require('./bufferutils'); - -var classify = require('./classify'); - -var bcrypto = require('./crypto'); - -var ECPair = require('./ecpair'); - -var networks = require('./networks'); - -var payments = require('./payments'); - -var bscript = require('./script'); - -var script_1 = require('./script'); - -var transaction_1 = require('./transaction'); - -var types = require('./types'); - -var typeforce = require('typeforce'); - -var SCRIPT_TYPES = classify.types; -var PREVOUT_TYPES = new Set([// Raw -'p2pkh', 'p2pk', 'p2wpkh', 'p2ms', // P2SH wrapped -'p2sh-p2pkh', 'p2sh-p2pk', 'p2sh-p2wpkh', 'p2sh-p2ms', // P2WSH wrapped -'p2wsh-p2pkh', 'p2wsh-p2pk', 'p2wsh-p2ms', // P2SH-P2WSH wrapper -'p2sh-p2wsh-p2pkh', 'p2sh-p2wsh-p2pk', 'p2sh-p2wsh-p2ms']); - -function tfMessage(type, value, message) { - try { - typeforce(type, value); - } catch (err) { - throw new Error(message); - } -} - -function txIsString(tx) { - return typeof tx === 'string' || tx instanceof String; -} - -function txIsTransaction(tx) { - return tx instanceof transaction_1.Transaction; -} - -var TransactionBuilder = -/*#__PURE__*/ -function () { - // WARNING: maximumFeeRate is __NOT__ to be relied on, - // it's just another potential safety mechanism (safety in-depth) - function TransactionBuilder() { - var network = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : networks.bitcoin; - var maximumFeeRate = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 2500; - - _classCallCheck(this, TransactionBuilder); - - this.network = network; - this.maximumFeeRate = maximumFeeRate; - this.__PREV_TX_SET = {}; - this.__INPUTS = []; - this.__TX = new transaction_1.Transaction(); - this.__TX.version = 2; - this.__USE_LOW_R = false; - console.warn('Deprecation Warning: TransactionBuilder will be removed in the future. ' + '(v6.x.x or later) Please use the Psbt class instead. Examples of usage ' + 'are available in the transactions-psbt.js integration test file on our ' + 'Github. A high level explanation is available in the psbt.ts and psbt.js ' + 'files as well.'); - } - - _createClass(TransactionBuilder, [{ - key: "setLowR", - value: function setLowR(setting) { - typeforce(typeforce.maybe(typeforce.Boolean), setting); - - if (setting === undefined) { - setting = true; - } - - this.__USE_LOW_R = setting; - return setting; - } - }, { - key: "setLockTime", - value: function setLockTime(locktime) { - typeforce(types.UInt32, locktime); // if any signatures exist, throw - - if (this.__INPUTS.some(function (input) { - if (!input.signatures) return false; - return input.signatures.some(function (s) { - return s !== undefined; - }); - })) { - throw new Error('No, this would invalidate signatures'); - } - - this.__TX.locktime = locktime; - } - }, { - key: "setVersion", - value: function setVersion(version) { - typeforce(types.UInt32, version); // XXX: this might eventually become more complex depending on what the versions represent - - this.__TX.version = version; - } - }, { - key: "addInput", - value: function addInput(txHash, vout, sequence, prevOutScript) { - if (!this.__canModifyInputs()) { - throw new Error('No, this would invalidate signatures'); - } - - var value; // is it a hex string? - - if (txIsString(txHash)) { - // transaction hashs's are displayed in reverse order, un-reverse it - txHash = bufferutils_1.reverseBuffer(Buffer.from(txHash, 'hex')); // is it a Transaction object? - } else if (txIsTransaction(txHash)) { - var txOut = txHash.outs[vout]; - prevOutScript = txOut.script; - value = txOut.value; - txHash = txHash.getHash(false); - } - - return this.__addInputUnsafe(txHash, vout, { - sequence: sequence, - prevOutScript: prevOutScript, - value: value - }); - } - }, { - key: "addOutput", - value: function addOutput(scriptPubKey, value) { - if (!this.__canModifyOutputs()) { - throw new Error('No, this would invalidate signatures'); - } // Attempt to get a script if it's a base58 or bech32 address string - - - if (typeof scriptPubKey === 'string') { - scriptPubKey = baddress.toOutputScript(scriptPubKey, this.network); - } - - return this.__TX.addOutput(scriptPubKey, value); - } - }, { - key: "build", - value: function build() { - return this.__build(false); - } - }, { - key: "buildIncomplete", - value: function buildIncomplete() { - return this.__build(true); - } - }, { - key: "sign", - value: function sign(signParams, keyPair, redeemScript, hashType, witnessValue, witnessScript) { - trySign(getSigningData(this.network, this.__INPUTS, this.__needsOutputs.bind(this), this.__TX, signParams, keyPair, redeemScript, hashType, witnessValue, witnessScript, this.__USE_LOW_R)); - } - }, { - key: "__addInputUnsafe", - value: function __addInputUnsafe(txHash, vout, options) { - if (transaction_1.Transaction.isCoinbaseHash(txHash)) { - throw new Error('coinbase inputs not supported'); - } - - var prevTxOut = txHash.toString('hex') + ':' + vout; - if (this.__PREV_TX_SET[prevTxOut] !== undefined) throw new Error('Duplicate TxOut: ' + prevTxOut); - var input = {}; // derive what we can from the scriptSig - - if (options.script !== undefined) { - input = expandInput(options.script, options.witness || []); - } // if an input value was given, retain it - - - if (options.value !== undefined) { - input.value = options.value; - } // derive what we can from the previous transactions output script - - - if (!input.prevOutScript && options.prevOutScript) { - var prevOutType; - - if (!input.pubkeys && !input.signatures) { - var expanded = expandOutput(options.prevOutScript); - - if (expanded.pubkeys) { - input.pubkeys = expanded.pubkeys; - input.signatures = expanded.signatures; - } - - prevOutType = expanded.type; - } - - input.prevOutScript = options.prevOutScript; - input.prevOutType = prevOutType || classify.output(options.prevOutScript); - } - - var vin = this.__TX.addInput(txHash, vout, options.sequence, options.scriptSig); - - this.__INPUTS[vin] = input; - this.__PREV_TX_SET[prevTxOut] = true; - return vin; - } - }, { - key: "__build", - value: function __build(allowIncomplete) { - if (!allowIncomplete) { - if (!this.__TX.ins.length) throw new Error('Transaction has no inputs'); - if (!this.__TX.outs.length) throw new Error('Transaction has no outputs'); - } - - var tx = this.__TX.clone(); // create script signatures from inputs - - - this.__INPUTS.forEach(function (input, i) { - if (!input.prevOutType && !allowIncomplete) throw new Error('Transaction is not complete'); - var result = build(input.prevOutType, input, allowIncomplete); - - if (!result) { - if (!allowIncomplete && input.prevOutType === SCRIPT_TYPES.NONSTANDARD) throw new Error('Unknown input type'); - if (!allowIncomplete) throw new Error('Not enough information'); - return; - } - - tx.setInputScript(i, result.input); - tx.setWitness(i, result.witness); - }); - - if (!allowIncomplete) { - // do not rely on this, its merely a last resort - if (this.__overMaximumFees(tx.virtualSize())) { - throw new Error('Transaction has absurd fees'); - } - } - - return tx; - } - }, { - key: "__canModifyInputs", - value: function __canModifyInputs() { - return this.__INPUTS.every(function (input) { - if (!input.signatures) return true; - return input.signatures.every(function (signature) { - if (!signature) return true; - var hashType = signatureHashType(signature); // if SIGHASH_ANYONECANPAY is set, signatures would not - // be invalidated by more inputs - - return (hashType & transaction_1.Transaction.SIGHASH_ANYONECANPAY) !== 0; - }); - }); - } - }, { - key: "__needsOutputs", - value: function __needsOutputs(signingHashType) { - if (signingHashType === transaction_1.Transaction.SIGHASH_ALL) { - return this.__TX.outs.length === 0; - } // if inputs are being signed with SIGHASH_NONE, we don't strictly need outputs - // .build() will fail, but .buildIncomplete() is OK - - - return this.__TX.outs.length === 0 && this.__INPUTS.some(function (input) { - if (!input.signatures) return false; - return input.signatures.some(function (signature) { - if (!signature) return false; // no signature, no issue - - var hashType = signatureHashType(signature); - if (hashType & transaction_1.Transaction.SIGHASH_NONE) return false; // SIGHASH_NONE doesn't care about outputs - - return true; // SIGHASH_* does care - }); - }); - } - }, { - key: "__canModifyOutputs", - value: function __canModifyOutputs() { - var nInputs = this.__TX.ins.length; - var nOutputs = this.__TX.outs.length; - return this.__INPUTS.every(function (input) { - if (input.signatures === undefined) return true; - return input.signatures.every(function (signature) { - if (!signature) return true; - var hashType = signatureHashType(signature); - var hashTypeMod = hashType & 0x1f; - if (hashTypeMod === transaction_1.Transaction.SIGHASH_NONE) return true; - - if (hashTypeMod === transaction_1.Transaction.SIGHASH_SINGLE) { - // if SIGHASH_SINGLE is set, and nInputs > nOutputs - // some signatures would be invalidated by the addition - // of more outputs - return nInputs <= nOutputs; - } - - return false; - }); - }); - } - }, { - key: "__overMaximumFees", - value: function __overMaximumFees(bytes) { - // not all inputs will have .value defined - var incoming = this.__INPUTS.reduce(function (a, x) { - return a + (x.value >>> 0); - }, 0); // but all outputs do, and if we have any input value - // we can immediately determine if the outputs are too small - - - var outgoing = this.__TX.outs.reduce(function (a, x) { - return a + x.value; - }, 0); - - var fee = incoming - outgoing; - var feeRate = fee / bytes; - return feeRate > this.maximumFeeRate; - } - }], [{ - key: "fromTransaction", - value: function fromTransaction(transaction, network) { - var txb = new TransactionBuilder(network); // Copy transaction fields - - txb.setVersion(transaction.version); - txb.setLockTime(transaction.locktime); // Copy outputs (done first to avoid signature invalidation) - - transaction.outs.forEach(function (txOut) { - txb.addOutput(txOut.script, txOut.value); - }); // Copy inputs - - transaction.ins.forEach(function (txIn) { - txb.__addInputUnsafe(txIn.hash, txIn.index, { - sequence: txIn.sequence, - script: txIn.script, - witness: txIn.witness - }); - }); // fix some things not possible through the public API - - txb.__INPUTS.forEach(function (input, i) { - fixMultisigOrder(input, transaction, i); - }); - - return txb; - } - }]); - - return TransactionBuilder; -}(); - -exports.TransactionBuilder = TransactionBuilder; - -function expandInput(scriptSig, witnessStack, type, scriptPubKey) { - if (scriptSig.length === 0 && witnessStack.length === 0) return {}; - - if (!type) { - var ssType = classify.input(scriptSig, true); - var wsType = classify.witness(witnessStack, true); - if (ssType === SCRIPT_TYPES.NONSTANDARD) ssType = undefined; - if (wsType === SCRIPT_TYPES.NONSTANDARD) wsType = undefined; - type = ssType || wsType; - } - - switch (type) { - case SCRIPT_TYPES.P2WPKH: - { - var _payments$p2wpkh = payments.p2wpkh({ - witness: witnessStack - }), - output = _payments$p2wpkh.output, - pubkey = _payments$p2wpkh.pubkey, - signature = _payments$p2wpkh.signature; - - return { - prevOutScript: output, - prevOutType: SCRIPT_TYPES.P2WPKH, - pubkeys: [pubkey], - signatures: [signature] - }; - } - - case SCRIPT_TYPES.P2PKH: - { - var _payments$p2pkh = payments.p2pkh({ - input: scriptSig - }), - _output = _payments$p2pkh.output, - _pubkey = _payments$p2pkh.pubkey, - _signature = _payments$p2pkh.signature; - - return { - prevOutScript: _output, - prevOutType: SCRIPT_TYPES.P2PKH, - pubkeys: [_pubkey], - signatures: [_signature] - }; - } - - case SCRIPT_TYPES.P2PK: - { - var _payments$p2pk = payments.p2pk({ - input: scriptSig - }), - _signature2 = _payments$p2pk.signature; - - return { - prevOutType: SCRIPT_TYPES.P2PK, - pubkeys: [undefined], - signatures: [_signature2] - }; - } - - case SCRIPT_TYPES.P2MS: - { - var _payments$p2ms = payments.p2ms({ - input: scriptSig, - output: scriptPubKey - }, { - allowIncomplete: true - }), - m = _payments$p2ms.m, - pubkeys = _payments$p2ms.pubkeys, - signatures = _payments$p2ms.signatures; - - return { - prevOutType: SCRIPT_TYPES.P2MS, - pubkeys: pubkeys, - signatures: signatures, - maxSignatures: m - }; - } - } - - if (type === SCRIPT_TYPES.P2SH) { - var _payments$p2sh = payments.p2sh({ - input: scriptSig, - witness: witnessStack - }), - _output2 = _payments$p2sh.output, - redeem = _payments$p2sh.redeem; - - var outputType = classify.output(redeem.output); - var expanded = expandInput(redeem.input, redeem.witness, outputType, redeem.output); - if (!expanded.prevOutType) return {}; - return { - prevOutScript: _output2, - prevOutType: SCRIPT_TYPES.P2SH, - redeemScript: redeem.output, - redeemScriptType: expanded.prevOutType, - witnessScript: expanded.witnessScript, - witnessScriptType: expanded.witnessScriptType, - pubkeys: expanded.pubkeys, - signatures: expanded.signatures - }; - } - - if (type === SCRIPT_TYPES.P2WSH) { - var _payments$p2wsh = payments.p2wsh({ - input: scriptSig, - witness: witnessStack - }), - _output3 = _payments$p2wsh.output, - _redeem = _payments$p2wsh.redeem; - - var _outputType = classify.output(_redeem.output); - - var _expanded; - - if (_outputType === SCRIPT_TYPES.P2WPKH) { - _expanded = expandInput(_redeem.input, _redeem.witness, _outputType); - } else { - _expanded = expandInput(bscript.compile(_redeem.witness), [], _outputType, _redeem.output); - } - - if (!_expanded.prevOutType) return {}; - return { - prevOutScript: _output3, - prevOutType: SCRIPT_TYPES.P2WSH, - witnessScript: _redeem.output, - witnessScriptType: _expanded.prevOutType, - pubkeys: _expanded.pubkeys, - signatures: _expanded.signatures - }; - } - - return { - prevOutType: SCRIPT_TYPES.NONSTANDARD, - prevOutScript: scriptSig - }; -} // could be done in expandInput, but requires the original Transaction for hashForSignature - - -function fixMultisigOrder(input, transaction, vin) { - if (input.redeemScriptType !== SCRIPT_TYPES.P2MS || !input.redeemScript) return; - if (input.pubkeys.length === input.signatures.length) return; - var unmatched = input.signatures.concat(); - input.signatures = input.pubkeys.map(function (pubKey) { - var keyPair = ECPair.fromPublicKey(pubKey); - var match; // check for a signature - - unmatched.some(function (signature, i) { - // skip if undefined || OP_0 - if (!signature) return false; // TODO: avoid O(n) hashForSignature - - var parsed = bscript.signature.decode(signature); - var hash = transaction.hashForSignature(vin, input.redeemScript, parsed.hashType); // skip if signature does not match pubKey - - if (!keyPair.verify(hash, parsed.signature)) return false; // remove matched signature from unmatched - - unmatched[i] = undefined; - match = signature; - return true; - }); - return match; - }); -} - -function expandOutput(script, ourPubKey) { - typeforce(types.Buffer, script); - var type = classify.output(script); - - switch (type) { - case SCRIPT_TYPES.P2PKH: - { - if (!ourPubKey) return { - type: type - }; // does our hash160(pubKey) match the output scripts? - - var pkh1 = payments.p2pkh({ - output: script - }).hash; - var pkh2 = bcrypto.hash160(ourPubKey); - if (!pkh1.equals(pkh2)) return { - type: type - }; - return { - type: type, - pubkeys: [ourPubKey], - signatures: [undefined] - }; - } - - case SCRIPT_TYPES.P2WPKH: - { - if (!ourPubKey) return { - type: type - }; // does our hash160(pubKey) match the output scripts? - - var wpkh1 = payments.p2wpkh({ - output: script - }).hash; - var wpkh2 = bcrypto.hash160(ourPubKey); - if (!wpkh1.equals(wpkh2)) return { - type: type - }; - return { - type: type, - pubkeys: [ourPubKey], - signatures: [undefined] - }; - } - - case SCRIPT_TYPES.P2PK: - { - var p2pk = payments.p2pk({ - output: script - }); - return { - type: type, - pubkeys: [p2pk.pubkey], - signatures: [undefined] - }; - } - - case SCRIPT_TYPES.P2MS: - { - var p2ms = payments.p2ms({ - output: script - }); - return { - type: type, - pubkeys: p2ms.pubkeys, - signatures: p2ms.pubkeys.map(function () { - return undefined; - }), - maxSignatures: p2ms.m - }; - } - } - - return { - type: type - }; -} - -function prepareInput(input, ourPubKey, redeemScript, witnessScript) { - if (redeemScript && witnessScript) { - var p2wsh = payments.p2wsh({ - redeem: { - output: witnessScript - } - }); - var p2wshAlt = payments.p2wsh({ - output: redeemScript - }); - var p2sh = payments.p2sh({ - redeem: { - output: redeemScript - } - }); - var p2shAlt = payments.p2sh({ - redeem: p2wsh - }); // enforces P2SH(P2WSH(...)) - - if (!p2wsh.hash.equals(p2wshAlt.hash)) throw new Error('Witness script inconsistent with prevOutScript'); - if (!p2sh.hash.equals(p2shAlt.hash)) throw new Error('Redeem script inconsistent with prevOutScript'); - var expanded = expandOutput(p2wsh.redeem.output, ourPubKey); - if (!expanded.pubkeys) throw new Error(expanded.type + ' not supported as witnessScript (' + bscript.toASM(witnessScript) + ')'); - - if (input.signatures && input.signatures.some(function (x) { - return x !== undefined; - })) { - expanded.signatures = input.signatures; - } - - var signScript = witnessScript; - if (expanded.type === SCRIPT_TYPES.P2WPKH) throw new Error('P2SH(P2WSH(P2WPKH)) is a consensus failure'); - return { - redeemScript: redeemScript, - redeemScriptType: SCRIPT_TYPES.P2WSH, - witnessScript: witnessScript, - witnessScriptType: expanded.type, - prevOutType: SCRIPT_TYPES.P2SH, - prevOutScript: p2sh.output, - hasWitness: true, - signScript: signScript, - signType: expanded.type, - pubkeys: expanded.pubkeys, - signatures: expanded.signatures, - maxSignatures: expanded.maxSignatures - }; - } - - if (redeemScript) { - var _p2sh = payments.p2sh({ - redeem: { - output: redeemScript - } - }); - - if (input.prevOutScript) { - var _p2shAlt; - - try { - _p2shAlt = payments.p2sh({ - output: input.prevOutScript - }); - } catch (e) { - throw new Error('PrevOutScript must be P2SH'); - } - - if (!_p2sh.hash.equals(_p2shAlt.hash)) throw new Error('Redeem script inconsistent with prevOutScript'); - } - - var _expanded2 = expandOutput(_p2sh.redeem.output, ourPubKey); - - if (!_expanded2.pubkeys) throw new Error(_expanded2.type + ' not supported as redeemScript (' + bscript.toASM(redeemScript) + ')'); - - if (input.signatures && input.signatures.some(function (x) { - return x !== undefined; - })) { - _expanded2.signatures = input.signatures; - } - - var _signScript = redeemScript; - - if (_expanded2.type === SCRIPT_TYPES.P2WPKH) { - _signScript = payments.p2pkh({ - pubkey: _expanded2.pubkeys[0] - }).output; - } - - return { - redeemScript: redeemScript, - redeemScriptType: _expanded2.type, - prevOutType: SCRIPT_TYPES.P2SH, - prevOutScript: _p2sh.output, - hasWitness: _expanded2.type === SCRIPT_TYPES.P2WPKH, - signScript: _signScript, - signType: _expanded2.type, - pubkeys: _expanded2.pubkeys, - signatures: _expanded2.signatures, - maxSignatures: _expanded2.maxSignatures - }; - } - - if (witnessScript) { - var _p2wsh = payments.p2wsh({ - redeem: { - output: witnessScript - } - }); - - if (input.prevOutScript) { - var _p2wshAlt = payments.p2wsh({ - output: input.prevOutScript - }); - - if (!_p2wsh.hash.equals(_p2wshAlt.hash)) throw new Error('Witness script inconsistent with prevOutScript'); - } - - var _expanded3 = expandOutput(_p2wsh.redeem.output, ourPubKey); - - if (!_expanded3.pubkeys) throw new Error(_expanded3.type + ' not supported as witnessScript (' + bscript.toASM(witnessScript) + ')'); - - if (input.signatures && input.signatures.some(function (x) { - return x !== undefined; - })) { - _expanded3.signatures = input.signatures; - } - - var _signScript2 = witnessScript; - if (_expanded3.type === SCRIPT_TYPES.P2WPKH) throw new Error('P2WSH(P2WPKH) is a consensus failure'); - return { - witnessScript: witnessScript, - witnessScriptType: _expanded3.type, - prevOutType: SCRIPT_TYPES.P2WSH, - prevOutScript: _p2wsh.output, - hasWitness: true, - signScript: _signScript2, - signType: _expanded3.type, - pubkeys: _expanded3.pubkeys, - signatures: _expanded3.signatures, - maxSignatures: _expanded3.maxSignatures - }; - } - - if (input.prevOutType && input.prevOutScript) { - // embedded scripts are not possible without extra information - if (input.prevOutType === SCRIPT_TYPES.P2SH) throw new Error('PrevOutScript is ' + input.prevOutType + ', requires redeemScript'); - if (input.prevOutType === SCRIPT_TYPES.P2WSH) throw new Error('PrevOutScript is ' + input.prevOutType + ', requires witnessScript'); - if (!input.prevOutScript) throw new Error('PrevOutScript is missing'); - - var _expanded4 = expandOutput(input.prevOutScript, ourPubKey); - - if (!_expanded4.pubkeys) throw new Error(_expanded4.type + ' not supported (' + bscript.toASM(input.prevOutScript) + ')'); - - if (input.signatures && input.signatures.some(function (x) { - return x !== undefined; - })) { - _expanded4.signatures = input.signatures; - } - - var _signScript3 = input.prevOutScript; - - if (_expanded4.type === SCRIPT_TYPES.P2WPKH) { - _signScript3 = payments.p2pkh({ - pubkey: _expanded4.pubkeys[0] - }).output; - } - - return { - prevOutType: _expanded4.type, - prevOutScript: input.prevOutScript, - hasWitness: _expanded4.type === SCRIPT_TYPES.P2WPKH, - signScript: _signScript3, - signType: _expanded4.type, - pubkeys: _expanded4.pubkeys, - signatures: _expanded4.signatures, - maxSignatures: _expanded4.maxSignatures - }; - } - - var prevOutScript = payments.p2pkh({ - pubkey: ourPubKey - }).output; - return { - prevOutType: SCRIPT_TYPES.P2PKH, - prevOutScript: prevOutScript, - hasWitness: false, - signScript: prevOutScript, - signType: SCRIPT_TYPES.P2PKH, - pubkeys: [ourPubKey], - signatures: [undefined] - }; -} - -function build(type, input, allowIncomplete) { - var pubkeys = input.pubkeys || []; - var signatures = input.signatures || []; - - switch (type) { - case SCRIPT_TYPES.P2PKH: - { - if (pubkeys.length === 0) break; - if (signatures.length === 0) break; - return payments.p2pkh({ - pubkey: pubkeys[0], - signature: signatures[0] - }); - } - - case SCRIPT_TYPES.P2WPKH: - { - if (pubkeys.length === 0) break; - if (signatures.length === 0) break; - return payments.p2wpkh({ - pubkey: pubkeys[0], - signature: signatures[0] - }); - } - - case SCRIPT_TYPES.P2PK: - { - if (pubkeys.length === 0) break; - if (signatures.length === 0) break; - return payments.p2pk({ - signature: signatures[0] - }); - } - - case SCRIPT_TYPES.P2MS: - { - var m = input.maxSignatures; - - if (allowIncomplete) { - signatures = signatures.map(function (x) { - return x || script_1.OPS.OP_0; - }); - } else { - signatures = signatures.filter(function (x) { - return x; - }); - } // if the transaction is not not complete (complete), or if signatures.length === m, validate - // otherwise, the number of OP_0's may be >= m, so don't validate (boo) - - - var validate = !allowIncomplete || m === signatures.length; - return payments.p2ms({ - m: m, - pubkeys: pubkeys, - signatures: signatures - }, { - allowIncomplete: allowIncomplete, - validate: validate - }); - } - - case SCRIPT_TYPES.P2SH: - { - var redeem = build(input.redeemScriptType, input, allowIncomplete); - if (!redeem) return; - return payments.p2sh({ - redeem: { - output: redeem.output || input.redeemScript, - input: redeem.input, - witness: redeem.witness - } - }); - } - - case SCRIPT_TYPES.P2WSH: - { - var _redeem2 = build(input.witnessScriptType, input, allowIncomplete); - - if (!_redeem2) return; - return payments.p2wsh({ - redeem: { - output: input.witnessScript, - input: _redeem2.input, - witness: _redeem2.witness - } - }); - } - } -} - -function canSign(input) { - return input.signScript !== undefined && input.signType !== undefined && input.pubkeys !== undefined && input.signatures !== undefined && input.signatures.length === input.pubkeys.length && input.pubkeys.length > 0 && (input.hasWitness === false || input.value !== undefined); -} - -function signatureHashType(buffer) { - return buffer.readUInt8(buffer.length - 1); -} - -function checkSignArgs(inputs, signParams) { - if (!PREVOUT_TYPES.has(signParams.prevOutScriptType)) { - throw new TypeError("Unknown prevOutScriptType \"".concat(signParams.prevOutScriptType, "\"")); - } - - tfMessage(typeforce.Number, signParams.vin, "sign must include vin parameter as Number (input index)"); - tfMessage(types.Signer, signParams.keyPair, "sign must include keyPair parameter as Signer interface"); - tfMessage(typeforce.maybe(typeforce.Number), signParams.hashType, "sign hashType parameter must be a number"); - var prevOutType = (inputs[signParams.vin] || []).prevOutType; - var posType = signParams.prevOutScriptType; - - switch (posType) { - case 'p2pkh': - if (prevOutType && prevOutType !== 'pubkeyhash') { - throw new TypeError("input #".concat(signParams.vin, " is not of type p2pkh: ").concat(prevOutType)); - } - - tfMessage(typeforce.value(undefined), signParams.witnessScript, "".concat(posType, " requires NO witnessScript")); - tfMessage(typeforce.value(undefined), signParams.redeemScript, "".concat(posType, " requires NO redeemScript")); - tfMessage(typeforce.value(undefined), signParams.witnessValue, "".concat(posType, " requires NO witnessValue")); - break; - - case 'p2pk': - if (prevOutType && prevOutType !== 'pubkey') { - throw new TypeError("input #".concat(signParams.vin, " is not of type p2pk: ").concat(prevOutType)); - } - - tfMessage(typeforce.value(undefined), signParams.witnessScript, "".concat(posType, " requires NO witnessScript")); - tfMessage(typeforce.value(undefined), signParams.redeemScript, "".concat(posType, " requires NO redeemScript")); - tfMessage(typeforce.value(undefined), signParams.witnessValue, "".concat(posType, " requires NO witnessValue")); - break; - - case 'p2wpkh': - if (prevOutType && prevOutType !== 'witnesspubkeyhash') { - throw new TypeError("input #".concat(signParams.vin, " is not of type p2wpkh: ").concat(prevOutType)); - } - - tfMessage(typeforce.value(undefined), signParams.witnessScript, "".concat(posType, " requires NO witnessScript")); - tfMessage(typeforce.value(undefined), signParams.redeemScript, "".concat(posType, " requires NO redeemScript")); - tfMessage(types.Satoshi, signParams.witnessValue, "".concat(posType, " requires witnessValue")); - break; - - case 'p2ms': - if (prevOutType && prevOutType !== 'multisig') { - throw new TypeError("input #".concat(signParams.vin, " is not of type p2ms: ").concat(prevOutType)); - } - - tfMessage(typeforce.value(undefined), signParams.witnessScript, "".concat(posType, " requires NO witnessScript")); - tfMessage(typeforce.value(undefined), signParams.redeemScript, "".concat(posType, " requires NO redeemScript")); - tfMessage(typeforce.value(undefined), signParams.witnessValue, "".concat(posType, " requires NO witnessValue")); - break; - - case 'p2sh-p2wpkh': - if (prevOutType && prevOutType !== 'scripthash') { - throw new TypeError("input #".concat(signParams.vin, " is not of type p2sh-p2wpkh: ").concat(prevOutType)); - } - - tfMessage(typeforce.value(undefined), signParams.witnessScript, "".concat(posType, " requires NO witnessScript")); - tfMessage(typeforce.Buffer, signParams.redeemScript, "".concat(posType, " requires redeemScript")); - tfMessage(types.Satoshi, signParams.witnessValue, "".concat(posType, " requires witnessValue")); - break; - - case 'p2sh-p2ms': - case 'p2sh-p2pk': - case 'p2sh-p2pkh': - if (prevOutType && prevOutType !== 'scripthash') { - throw new TypeError("input #".concat(signParams.vin, " is not of type ").concat(posType, ": ").concat(prevOutType)); - } - - tfMessage(typeforce.value(undefined), signParams.witnessScript, "".concat(posType, " requires NO witnessScript")); - tfMessage(typeforce.Buffer, signParams.redeemScript, "".concat(posType, " requires redeemScript")); - tfMessage(typeforce.value(undefined), signParams.witnessValue, "".concat(posType, " requires NO witnessValue")); - break; - - case 'p2wsh-p2ms': - case 'p2wsh-p2pk': - case 'p2wsh-p2pkh': - if (prevOutType && prevOutType !== 'witnessscripthash') { - throw new TypeError("input #".concat(signParams.vin, " is not of type ").concat(posType, ": ").concat(prevOutType)); - } - - tfMessage(typeforce.Buffer, signParams.witnessScript, "".concat(posType, " requires witnessScript")); - tfMessage(typeforce.value(undefined), signParams.redeemScript, "".concat(posType, " requires NO redeemScript")); - tfMessage(types.Satoshi, signParams.witnessValue, "".concat(posType, " requires witnessValue")); - break; - - case 'p2sh-p2wsh-p2ms': - case 'p2sh-p2wsh-p2pk': - case 'p2sh-p2wsh-p2pkh': - if (prevOutType && prevOutType !== 'scripthash') { - throw new TypeError("input #".concat(signParams.vin, " is not of type ").concat(posType, ": ").concat(prevOutType)); - } - - tfMessage(typeforce.Buffer, signParams.witnessScript, "".concat(posType, " requires witnessScript")); - tfMessage(typeforce.Buffer, signParams.redeemScript, "".concat(posType, " requires witnessScript")); - tfMessage(types.Satoshi, signParams.witnessValue, "".concat(posType, " requires witnessScript")); - break; - } -} - -function trySign(_ref) { - var input = _ref.input, - ourPubKey = _ref.ourPubKey, - keyPair = _ref.keyPair, - signatureHash = _ref.signatureHash, - hashType = _ref.hashType, - useLowR = _ref.useLowR; - // enforce in order signing of public keys - var signed = false; - var _iteratorNormalCompletion = true; - var _didIteratorError = false; - var _iteratorError = undefined; - - try { - for (var _iterator = input.pubkeys.entries()[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) { - var _step$value = _slicedToArray(_step.value, 2), - i = _step$value[0], - pubKey = _step$value[1]; - - if (!ourPubKey.equals(pubKey)) continue; - if (input.signatures[i]) throw new Error('Signature already exists'); // TODO: add tests - - if (ourPubKey.length !== 33 && input.hasWitness) { - throw new Error('BIP143 rejects uncompressed public keys in P2WPKH or P2WSH'); - } - - var signature = keyPair.sign(signatureHash, useLowR); - input.signatures[i] = bscript.signature.encode(signature, hashType); - signed = true; - } - } catch (err) { - _didIteratorError = true; - _iteratorError = err; - } finally { - try { - if (!_iteratorNormalCompletion && _iterator.return != null) { - _iterator.return(); - } - } finally { - if (_didIteratorError) { - throw _iteratorError; - } - } - } - - if (!signed) throw new Error('Key pair cannot sign for this input'); -} - -function getSigningData(network, inputs, needsOutputs, tx, signParams, keyPair, redeemScript, hashType, witnessValue, witnessScript, useLowR) { - var vin; - - if (typeof signParams === 'number') { - console.warn('DEPRECATED: TransactionBuilder sign method arguments ' + 'will change in v6, please use the TxbSignArg interface'); - vin = signParams; - } else if (_typeof(signParams) === 'object') { - checkSignArgs(inputs, signParams); - vin = signParams.vin; - keyPair = signParams.keyPair; - redeemScript = signParams.redeemScript; - hashType = signParams.hashType; - witnessValue = signParams.witnessValue; - witnessScript = signParams.witnessScript; - } else { - throw new TypeError('TransactionBuilder sign first arg must be TxbSignArg or number'); - } - - if (keyPair === undefined) { - throw new Error('sign requires keypair'); - } // TODO: remove keyPair.network matching in 4.0.0 - - - if (keyPair.network && keyPair.network !== network) throw new TypeError('Inconsistent network'); - if (!inputs[vin]) throw new Error('No input at index: ' + vin); - hashType = hashType || transaction_1.Transaction.SIGHASH_ALL; - if (needsOutputs(hashType)) throw new Error('Transaction needs outputs'); - var input = inputs[vin]; // if redeemScript was previously provided, enforce consistency - - if (input.redeemScript !== undefined && redeemScript && !input.redeemScript.equals(redeemScript)) { - throw new Error('Inconsistent redeemScript'); - } - - var ourPubKey = keyPair.publicKey || keyPair.getPublicKey && keyPair.getPublicKey(); - - if (!canSign(input)) { - if (witnessValue !== undefined) { - if (input.value !== undefined && input.value !== witnessValue) throw new Error('Input did not match witnessValue'); - typeforce(types.Satoshi, witnessValue); - input.value = witnessValue; - } - - if (!canSign(input)) { - var prepared = prepareInput(input, ourPubKey, redeemScript, witnessScript); // updates inline - - Object.assign(input, prepared); - } - - if (!canSign(input)) throw Error(input.prevOutType + ' not supported'); - } // ready to sign - - - var signatureHash; - - if (input.hasWitness) { - signatureHash = tx.hashForWitnessV0(vin, input.signScript, input.value, hashType); - } else { - signatureHash = tx.hashForSignature(vin, input.signScript, hashType); - } - - return { - input: input, - ourPubKey: ourPubKey, - keyPair: keyPair, - signatureHash: signatureHash, - hashType: hashType, - useLowR: !!useLowR - }; -} -},{"./address":"kxhz","./bufferutils":"kTjr","./classify":"YNBe","./crypto":"wHwg","./ecpair":"SRL3","./networks":"LuAr","./payments":"M8O6","./script":"zCpQ","./transaction":"kntI","./types":"mf8L","typeforce":"PKU7","buffer":"dskh"}],"Bcue":[function(require,module,exports) { -'use strict'; - -Object.defineProperty(exports, '__esModule', { - value: true -}); - -var bip32 = require('bip32'); - -exports.bip32 = bip32; - -var address = require('./address'); - -exports.address = address; - -var crypto = require('./crypto'); - -exports.crypto = crypto; - -var ECPair = require('./ecpair'); - -exports.ECPair = ECPair; - -var networks = require('./networks'); - -exports.networks = networks; - -var payments = require('./payments'); - -exports.payments = payments; - -var script = require('./script'); - -exports.script = script; - -var block_1 = require('./block'); - -exports.Block = block_1.Block; - -var psbt_1 = require('./psbt'); - -exports.Psbt = psbt_1.Psbt; - -var script_1 = require('./script'); - -exports.opcodes = script_1.OPS; - -var transaction_1 = require('./transaction'); - -exports.Transaction = transaction_1.Transaction; - -var transaction_builder_1 = require('./transaction_builder'); - -exports.TransactionBuilder = transaction_builder_1.TransactionBuilder; -},{"bip32":"pelw","./address":"kxhz","./crypto":"wHwg","./ecpair":"SRL3","./networks":"LuAr","./payments":"M8O6","./script":"zCpQ","./block":"n2sH","./psbt":"GRRo","./transaction":"kntI","./transaction_builder":"Y73L"}],"iC5B":[function(require,module,exports) { -function _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function (obj) { return typeof obj; }; } else { _typeof = function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } - -/* eslint-env browser */ -module.exports = (typeof self === "undefined" ? "undefined" : _typeof(self)) == 'object' ? self.FormData : window.FormData; -},{}],"V7fS":[function(require,module,exports) { -"use strict"; - -function _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } - -function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - -function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } - -function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; } - -function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); } - -function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; } - -function _get(target, property, receiver) { if (typeof Reflect !== "undefined" && Reflect.get) { _get = Reflect.get; } else { _get = function _get(target, property, receiver) { var base = _superPropBase(target, property); if (!base) return; var desc = Object.getOwnPropertyDescriptor(base, property); if (desc.get) { return desc.get.call(receiver); } return desc.value; }; } return _get(target, property, receiver || target); } - -function _superPropBase(object, property) { while (!Object.prototype.hasOwnProperty.call(object, property)) { object = _getPrototypeOf(object); if (object === null) break; } return object; } - -function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); } - -function _wrapNativeSuper(Class) { var _cache = typeof Map === "function" ? new Map() : undefined; _wrapNativeSuper = function _wrapNativeSuper(Class) { if (Class === null || !_isNativeFunction(Class)) return Class; if (typeof Class !== "function") { throw new TypeError("Super expression must either be null or a function"); } if (typeof _cache !== "undefined") { if (_cache.has(Class)) return _cache.get(Class); _cache.set(Class, Wrapper); } function Wrapper() { return _construct(Class, arguments, _getPrototypeOf(this).constructor); } Wrapper.prototype = Object.create(Class.prototype, { constructor: { value: Wrapper, enumerable: false, writable: true, configurable: true } }); return _setPrototypeOf(Wrapper, Class); }; return _wrapNativeSuper(Class); } - -function isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } } - -function _construct(Parent, args, Class) { if (isNativeReflectConstruct()) { _construct = Reflect.construct; } else { _construct = function _construct(Parent, args, Class) { var a = [null]; a.push.apply(a, args); var Constructor = Function.bind.apply(Parent, a); var instance = new Constructor(); if (Class) _setPrototypeOf(instance, Class.prototype); return instance; }; } return _construct.apply(null, arguments); } - -function _isNativeFunction(fn) { return Function.toString.call(fn).indexOf("[native code]") !== -1; } - -function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); } - -function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); } - -Object.defineProperty(exports, "__esModule", { - value: true -}); -/** -* @ignore -*/ - -exports.ERROR_CODES = { - MISSING_PARAMETER: 'missing_parameter', - REMOTE_SERVICE_ERROR: 'remote_service_error', - INVALID_STATE: 'invalid_state', - NO_SESSION_DATA: 'no_session_data', - UNKNOWN: 'unknown' -}; -Object.freeze(exports.ERROR_CODES); -/** -* @ignore -*/ - -var BlockstackError = -/*#__PURE__*/ -function (_Error) { - _inherits(BlockstackError, _Error); - - function BlockstackError(error) { - var _this; - - _classCallCheck(this, BlockstackError); - - _this = _possibleConstructorReturn(this, _getPrototypeOf(BlockstackError).call(this, error.message)); - _this.message = error.message; - _this.code = error.code; - _this.parameter = error.parameter ? error.parameter : null; - return _this; - } - - _createClass(BlockstackError, [{ - key: "toString", - value: function toString() { - return "".concat(_get(_getPrototypeOf(BlockstackError.prototype), "toString", this).call(this), "\n code: ").concat(this.code, " param: ").concat(this.parameter ? this.parameter : 'n/a'); - } - }]); - - return BlockstackError; -}(_wrapNativeSuper(Error)); - -exports.BlockstackError = BlockstackError; -/** -* @ignore -*/ - -var FileNotFound = -/*#__PURE__*/ -function (_BlockstackError) { - _inherits(FileNotFound, _BlockstackError); - - function FileNotFound(message) { - var _this2; - - _classCallCheck(this, FileNotFound); - - _this2 = _possibleConstructorReturn(this, _getPrototypeOf(FileNotFound).call(this, { - message: message, - code: 'file_not_found' - })); - _this2.name = 'FileNotFound'; - return _this2; - } - - return FileNotFound; -}(BlockstackError); - -exports.FileNotFound = FileNotFound; -/** -* @ignore -*/ - -var InvalidParameterError = -/*#__PURE__*/ -function (_BlockstackError2) { - _inherits(InvalidParameterError, _BlockstackError2); - - function InvalidParameterError(parameter) { - var _this3; - - var message = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : ''; - - _classCallCheck(this, InvalidParameterError); - - _this3 = _possibleConstructorReturn(this, _getPrototypeOf(InvalidParameterError).call(this, { - code: 'missing_parameter', - message: message, - parameter: '' - })); - _this3.name = 'MissingParametersError'; - return _this3; - } - - return InvalidParameterError; -}(BlockstackError); - -exports.InvalidParameterError = InvalidParameterError; -/** -* @ignore -*/ - -var MissingParameterError = -/*#__PURE__*/ -function (_BlockstackError3) { - _inherits(MissingParameterError, _BlockstackError3); - - function MissingParameterError(parameter) { - var _this4; - - var message = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : ''; - - _classCallCheck(this, MissingParameterError); - - _this4 = _possibleConstructorReturn(this, _getPrototypeOf(MissingParameterError).call(this, { - code: exports.ERROR_CODES.MISSING_PARAMETER, - message: message, - parameter: parameter - })); - _this4.name = 'MissingParametersError'; - return _this4; - } - - return MissingParameterError; -}(BlockstackError); - -exports.MissingParameterError = MissingParameterError; -/** -* @ignore -*/ - -var RemoteServiceError = -/*#__PURE__*/ -function (_BlockstackError4) { - _inherits(RemoteServiceError, _BlockstackError4); - - function RemoteServiceError(response) { - var _this5; - - var message = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : ''; - - _classCallCheck(this, RemoteServiceError); - - _this5 = _possibleConstructorReturn(this, _getPrototypeOf(RemoteServiceError).call(this, { - code: exports.ERROR_CODES.REMOTE_SERVICE_ERROR, - message: message - })); - _this5.response = response; - return _this5; - } - - return RemoteServiceError; -}(BlockstackError); - -exports.RemoteServiceError = RemoteServiceError; -/** -* @ignore -*/ - -var InvalidDIDError = -/*#__PURE__*/ -function (_BlockstackError5) { - _inherits(InvalidDIDError, _BlockstackError5); - - function InvalidDIDError() { - var _this6; - - var message = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : ''; - - _classCallCheck(this, InvalidDIDError); - - _this6 = _possibleConstructorReturn(this, _getPrototypeOf(InvalidDIDError).call(this, { - code: 'invalid_did_error', - message: message - })); - _this6.name = 'InvalidDIDError'; - return _this6; - } - - return InvalidDIDError; -}(BlockstackError); - -exports.InvalidDIDError = InvalidDIDError; -/** -* @ignore -*/ - -var NotEnoughFundsError = -/*#__PURE__*/ -function (_BlockstackError6) { - _inherits(NotEnoughFundsError, _BlockstackError6); - - function NotEnoughFundsError(leftToFund) { - var _this7; - - _classCallCheck(this, NotEnoughFundsError); - - var message = "Not enough UTXOs to fund. Left to fund: ".concat(leftToFund); - _this7 = _possibleConstructorReturn(this, _getPrototypeOf(NotEnoughFundsError).call(this, { - code: 'not_enough_error', - message: message - })); - _this7.leftToFund = leftToFund; - _this7.name = 'NotEnoughFundsError'; - _this7.message = message; - return _this7; - } - - return NotEnoughFundsError; -}(BlockstackError); - -exports.NotEnoughFundsError = NotEnoughFundsError; -/** -* @ignore -*/ - -var InvalidAmountError = -/*#__PURE__*/ -function (_BlockstackError7) { - _inherits(InvalidAmountError, _BlockstackError7); - - function InvalidAmountError(fees, specifiedAmount) { - var _this8; - - _classCallCheck(this, InvalidAmountError); - - var message = "Not enough coin to fund fees transaction fees. Fees would be ".concat(fees, ",") + " specified spend is ".concat(specifiedAmount); - _this8 = _possibleConstructorReturn(this, _getPrototypeOf(InvalidAmountError).call(this, { - code: 'invalid_amount_error', - message: message - })); - _this8.specifiedAmount = specifiedAmount; - _this8.fees = fees; - _this8.name = 'InvalidAmountError'; - _this8.message = message; - return _this8; - } - - return InvalidAmountError; -}(BlockstackError); - -exports.InvalidAmountError = InvalidAmountError; -/** -* @ignore -*/ - -var LoginFailedError = -/*#__PURE__*/ -function (_BlockstackError8) { - _inherits(LoginFailedError, _BlockstackError8); - - function LoginFailedError(reason) { - var _this9; - - _classCallCheck(this, LoginFailedError); - - var message = "Failed to login: ".concat(reason); - _this9 = _possibleConstructorReturn(this, _getPrototypeOf(LoginFailedError).call(this, { - code: 'login_failed', - message: message - })); - _this9.message = message; - _this9.name = 'LoginFailedError'; - return _this9; - } - - return LoginFailedError; -}(BlockstackError); - -exports.LoginFailedError = LoginFailedError; -/** -* @ignore -*/ - -var SignatureVerificationError = -/*#__PURE__*/ -function (_BlockstackError9) { - _inherits(SignatureVerificationError, _BlockstackError9); - - function SignatureVerificationError(reason) { - var _this10; - - _classCallCheck(this, SignatureVerificationError); - - var message = "Failed to verify signature: ".concat(reason); - _this10 = _possibleConstructorReturn(this, _getPrototypeOf(SignatureVerificationError).call(this, { - code: 'signature_verification_failure', - message: message - })); - _this10.message = message; - _this10.name = 'SignatureVerificationError'; - return _this10; - } - - return SignatureVerificationError; -}(BlockstackError); - -exports.SignatureVerificationError = SignatureVerificationError; -/** -* @ignore -*/ - -var InvalidStateError = -/*#__PURE__*/ -function (_BlockstackError10) { - _inherits(InvalidStateError, _BlockstackError10); - - function InvalidStateError(message) { - var _this11; - - _classCallCheck(this, InvalidStateError); - - _this11 = _possibleConstructorReturn(this, _getPrototypeOf(InvalidStateError).call(this, { - code: exports.ERROR_CODES.INVALID_STATE, - message: message - })); - _this11.message = message; - _this11.name = 'InvalidStateError'; - return _this11; - } - - return InvalidStateError; -}(BlockstackError); - -exports.InvalidStateError = InvalidStateError; -/** -* @ignore -*/ - -var NoSessionDataError = -/*#__PURE__*/ -function (_BlockstackError11) { - _inherits(NoSessionDataError, _BlockstackError11); - - function NoSessionDataError(message) { - var _this12; - - _classCallCheck(this, NoSessionDataError); - - _this12 = _possibleConstructorReturn(this, _getPrototypeOf(NoSessionDataError).call(this, { - code: exports.ERROR_CODES.INVALID_STATE, - message: message - })); - _this12.message = message; - _this12.name = 'NoSessionDataError'; - return _this12; - } - - return NoSessionDataError; -}(BlockstackError); - -exports.NoSessionDataError = NoSessionDataError; -},{}],"qjRs":[function(require,module,exports) { -"use strict"; - -function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - -function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } - -function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; } - -Object.defineProperty(exports, "__esModule", { - value: true -}); - -var config_1 = require("./config"); - -var levels = ['debug', 'info', 'warn', 'error', 'none']; -var levelToInt = {}; -var intToLevel = {}; - -for (var index = 0; index < levels.length; index++) { - var level = levels[index]; - levelToInt[level] = index; - intToLevel[index] = level; -} -/** -* @ignore -*/ - - -var Logger = -/*#__PURE__*/ -function () { - function Logger() { - _classCallCheck(this, Logger); - } - - _createClass(Logger, null, [{ - key: "error", - value: function error(message) { - if (!this.shouldLog('error')) return; - console.error(this.logMessage('error', message)); - } - }, { - key: "warn", - value: function warn(message) { - if (!this.shouldLog('warn')) return; - console.warn(this.logMessage('warn', message)); - } - }, { - key: "info", - value: function info(message) { - if (!this.shouldLog('info')) return; - console.log(this.logMessage('info', message)); - } - }, { - key: "debug", - value: function debug(message) { - if (!this.shouldLog('debug')) return; - console.log(this.logMessage('debug', message)); - } - }, { - key: "logMessage", - value: function logMessage(level, message) { - return "[".concat(level.toUpperCase(), "] ").concat(message); - } - }, { - key: "shouldLog", - value: function shouldLog(level) { - var currentLevel = levelToInt[config_1.config.logLevel]; - return currentLevel <= levelToInt[level]; - } - }]); - - return Logger; -}(); - -exports.Logger = Logger; -},{"./config":"GmrD"}],"bSeT":[function(require,module,exports) { -"use strict"; - -Object.defineProperty(exports, "__esModule", { - value: true -}); -/** @ignore */ - -function fetchPrivate(input, init) { - init = init || {}; - init.referrerPolicy = 'no-referrer'; - return fetch(input, init); -} - -exports.fetchPrivate = fetchPrivate; -},{}],"Si1t":[function(require,module,exports) { -var Buffer = require("buffer").Buffer; -"use strict"; - -function _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } - -function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); } - -function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; } - -function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); } - -function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); } - -function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); } - -function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _nonIterableRest(); } - -function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance"); } - -function _iterableToArrayLimit(arr, i) { if (!(Symbol.iterator in Object(arr) || Object.prototype.toString.call(arr) === "[object Arguments]")) { return; } var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; } - -function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; } - -function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - -function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } - -function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; } - -var __importDefault = this && this.__importDefault || function (mod) { - return mod && mod.__esModule ? mod : { - "default": mod - }; -}; - -Object.defineProperty(exports, "__esModule", { - value: true -}); - -var bitcoinjs_lib_1 = require("bitcoinjs-lib"); - -var form_data_1 = __importDefault(require("form-data")); - -var bn_js_1 = __importDefault(require("bn.js")); - -var ripemd160_1 = __importDefault(require("ripemd160")); - -var errors_1 = require("./errors"); - -var logger_1 = require("./logger"); - -var config_1 = require("./config"); - -var fetchUtil_1 = require("./fetchUtil"); - -var SATOSHIS_PER_BTC = 1e8; -var TX_BROADCAST_SERVICE_ZONE_FILE_ENDPOINT = 'zone-file'; -var TX_BROADCAST_SERVICE_REGISTRATION_ENDPOINT = 'registration'; -var TX_BROADCAST_SERVICE_TX_ENDPOINT = 'transaction'; -/** - * @private - * @ignore - */ - -var BitcoinNetwork = -/*#__PURE__*/ -function () { - function BitcoinNetwork() { - _classCallCheck(this, BitcoinNetwork); - } - - _createClass(BitcoinNetwork, [{ - key: "broadcastTransaction", - value: function broadcastTransaction(transaction) { - return Promise.reject(new Error("Not implemented, broadcastTransaction(".concat(transaction, ")"))); - } - }, { - key: "getBlockHeight", - value: function getBlockHeight() { - return Promise.reject(new Error('Not implemented, getBlockHeight()')); - } - }, { - key: "getTransactionInfo", - value: function getTransactionInfo(txid) { - return Promise.reject(new Error("Not implemented, getTransactionInfo(".concat(txid, ")"))); - } - }, { - key: "getNetworkedUTXOs", - value: function getNetworkedUTXOs(address) { - return Promise.reject(new Error("Not implemented, getNetworkedUTXOs(".concat(address, ")"))); - } - }]); - - return BitcoinNetwork; -}(); - -exports.BitcoinNetwork = BitcoinNetwork; -/** - * @private - * @ignore - */ - -var BlockstackNetwork = -/*#__PURE__*/ -function () { - function BlockstackNetwork(apiUrl, broadcastServiceUrl, bitcoinAPI) { - var network = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : bitcoinjs_lib_1.networks.bitcoin; - - _classCallCheck(this, BlockstackNetwork); - - this.blockstackAPIUrl = apiUrl; - this.broadcastServiceUrl = broadcastServiceUrl; - this.layer1 = network; - this.btc = bitcoinAPI; - this.DUST_MINIMUM = 5500; - this.includeUtxoMap = {}; - this.excludeUtxoSet = []; - this.MAGIC_BYTES = 'id'; - } - - _createClass(BlockstackNetwork, [{ - key: "coerceAddress", - value: function coerceAddress(address) { - var _bitcoinjs_lib_1$addr = bitcoinjs_lib_1.address.fromBase58Check(address), - hash = _bitcoinjs_lib_1$addr.hash, - version = _bitcoinjs_lib_1$addr.version; - - var scriptHashes = [bitcoinjs_lib_1.networks.bitcoin.scriptHash, bitcoinjs_lib_1.networks.testnet.scriptHash]; - var pubKeyHashes = [bitcoinjs_lib_1.networks.bitcoin.pubKeyHash, bitcoinjs_lib_1.networks.testnet.pubKeyHash]; - var coercedVersion; - - if (scriptHashes.indexOf(version) >= 0) { - coercedVersion = this.layer1.scriptHash; - } else if (pubKeyHashes.indexOf(version) >= 0) { - coercedVersion = this.layer1.pubKeyHash; - } else { - throw new Error("Unrecognized address version number ".concat(version, " in ").concat(address)); - } - - return bitcoinjs_lib_1.address.toBase58Check(hash, coercedVersion); - } - /** - * @ignore - */ - - }, { - key: "getDefaultBurnAddress", - value: function getDefaultBurnAddress() { - return this.coerceAddress('1111111111111111111114oLvT2'); - } - /** - * Get the price of a name via the legacy /v1/prices API endpoint. - * @param {String} fullyQualifiedName the name to query - * @return {Promise} a promise to an Object with { units: String, amount: BigInteger } - * @private - */ - - }, { - key: "getNamePriceV1", - value: function getNamePriceV1(fullyQualifiedName) { - var _this = this; - - // legacy code path - return fetchUtil_1.fetchPrivate("".concat(this.blockstackAPIUrl, "/v1/prices/names/").concat(fullyQualifiedName)).then(function (resp) { - if (!resp.ok) { - throw new Error("Failed to query name price for ".concat(fullyQualifiedName)); - } - - return resp; - }).then(function (resp) { - return resp.json(); - }).then(function (resp) { - return resp.name_price; - }).then(function (namePrice) { - if (!namePrice || !namePrice.satoshis) { - throw new Error("Failed to get price for ".concat(fullyQualifiedName, ". Does the namespace exist?")); - } - - if (namePrice.satoshis < _this.DUST_MINIMUM) { - namePrice.satoshis = _this.DUST_MINIMUM; - } - - var result = { - units: 'BTC', - amount: new bn_js_1.default(String(namePrice.satoshis)) - }; - return result; - }); - } - /** - * Get the price of a namespace via the legacy /v1/prices API endpoint. - * @param {String} namespaceID the namespace to query - * @return {Promise} a promise to an Object with { units: String, amount: BigInteger } - * @private - */ - - }, { - key: "getNamespacePriceV1", - value: function getNamespacePriceV1(namespaceID) { - var _this2 = this; - - // legacy code path - return fetchUtil_1.fetchPrivate("".concat(this.blockstackAPIUrl, "/v1/prices/namespaces/").concat(namespaceID)).then(function (resp) { - if (!resp.ok) { - throw new Error("Failed to query name price for ".concat(namespaceID)); - } - - return resp; - }).then(function (resp) { - return resp.json(); - }).then(function (namespacePrice) { - if (!namespacePrice || !namespacePrice.satoshis) { - throw new Error("Failed to get price for ".concat(namespaceID)); - } - - if (namespacePrice.satoshis < _this2.DUST_MINIMUM) { - namespacePrice.satoshis = _this2.DUST_MINIMUM; - } - - var result = { - units: 'BTC', - amount: new bn_js_1.default(String(namespacePrice.satoshis)) - }; - return result; - }); - } - /** - * Get the price of a name via the /v2/prices API endpoint. - * @param {String} fullyQualifiedName the name to query - * @return {Promise} a promise to an Object with { units: String, amount: BigInteger } - * @private - */ - - }, { - key: "getNamePriceV2", - value: function getNamePriceV2(fullyQualifiedName) { - var _this3 = this; - - return fetchUtil_1.fetchPrivate("".concat(this.blockstackAPIUrl, "/v2/prices/names/").concat(fullyQualifiedName)).then(function (resp) { - if (resp.status !== 200) { - // old core node - throw new Error('The upstream node does not handle the /v2/ price namespace'); - } - - return resp; - }).then(function (resp) { - return resp.json(); - }).then(function (resp) { - return resp.name_price; - }).then(function (namePrice) { - if (!namePrice) { - throw new Error("Failed to get price for ".concat(fullyQualifiedName, ". Does the namespace exist?")); - } - - var result = { - units: namePrice.units, - amount: new bn_js_1.default(namePrice.amount) - }; - - if (namePrice.units === 'BTC') { - // must be at least dust-minimum - var dustMin = new bn_js_1.default(String(_this3.DUST_MINIMUM)); - - if (result.amount.ucmp(dustMin) < 0) { - result.amount = dustMin; - } - } - - return result; - }); - } - /** - * Get the price of a namespace via the /v2/prices API endpoint. - * @param {String} namespaceID the namespace to query - * @return {Promise} a promise to an Object with { units: String, amount: BigInteger } - * @private - */ - - }, { - key: "getNamespacePriceV2", - value: function getNamespacePriceV2(namespaceID) { - var _this4 = this; - - return fetchUtil_1.fetchPrivate("".concat(this.blockstackAPIUrl, "/v2/prices/namespaces/").concat(namespaceID)).then(function (resp) { - if (resp.status !== 200) { - // old core node - throw new Error('The upstream node does not handle the /v2/ price namespace'); - } - - return resp; - }).then(function (resp) { - return resp.json(); - }).then(function (namespacePrice) { - if (!namespacePrice) { - throw new Error("Failed to get price for ".concat(namespaceID)); - } - - var result = { - units: namespacePrice.units, - amount: new bn_js_1.default(namespacePrice.amount) - }; - - if (namespacePrice.units === 'BTC') { - // must be at least dust-minimum - var dustMin = new bn_js_1.default(String(_this4.DUST_MINIMUM)); - - if (result.amount.ucmp(dustMin) < 0) { - result.amount = dustMin; - } - } - - return result; - }); - } - /** - * Get the price of a name. - * @param {String} fullyQualifiedName the name to query - * @return {Promise} a promise to an Object with { units: String, amount: BigInteger }, where - * .units encodes the cryptocurrency units to pay (e.g. BTC, STACKS), and - * .amount encodes the number of units, in the smallest denominiated amount - * (e.g. if .units is BTC, .amount will be satoshis; if .units is STACKS, - * .amount will be microStacks) - */ - - }, { - key: "getNamePrice", - value: function getNamePrice(fullyQualifiedName) { - var _this5 = this; - - // handle v1 or v2 - return Promise.resolve().then(function () { - return _this5.getNamePriceV2(fullyQualifiedName); - }).catch(function () { - return _this5.getNamePriceV1(fullyQualifiedName); - }); - } - /** - * Get the price of a namespace - * @param {String} namespaceID the namespace to query - * @return {Promise} a promise to an Object with { units: String, amount: BigInteger }, where - * .units encodes the cryptocurrency units to pay (e.g. BTC, STACKS), and - * .amount encodes the number of units, in the smallest denominiated amount - * (e.g. if .units is BTC, .amount will be satoshis; if .units is STACKS, - * .amount will be microStacks) - */ - - }, { - key: "getNamespacePrice", - value: function getNamespacePrice(namespaceID) { - var _this6 = this; - - // handle v1 or v2 - return Promise.resolve().then(function () { - return _this6.getNamespacePriceV2(namespaceID); - }).catch(function () { - return _this6.getNamespacePriceV1(namespaceID); - }); - } - /** - * How many blocks can pass between a name expiring and the name being able to be - * re-registered by a different owner? - * @param {string} fullyQualifiedName unused - * @return {Promise} a promise to the number of blocks - */ - - }, { - key: "getGracePeriod", - value: function getGracePeriod(fullyQualifiedName) { - return Promise.resolve(5000); - } - /** - * Get the names -- both on-chain and off-chain -- owned by an address. - * @param {String} address the blockchain address (the hash of the owner public key) - * @return {Promise} a promise that resolves to a list of names (Strings) - */ - - }, { - key: "getNamesOwned", - value: function getNamesOwned(address) { - var networkAddress = this.coerceAddress(address); - return fetchUtil_1.fetchPrivate("".concat(this.blockstackAPIUrl, "/v1/addresses/bitcoin/").concat(networkAddress)).then(function (resp) { - return resp.json(); - }).then(function (obj) { - return obj.names; - }); - } - /** - * Get the blockchain address to which a name's registration fee must be sent - * (the address will depend on the namespace in which it is registered.) - * @param {String} namespace the namespace ID - * @return {Promise} a promise that resolves to an address (String) - */ - - }, { - key: "getNamespaceBurnAddress", - value: function getNamespaceBurnAddress(namespace) { - var _this7 = this; - - return Promise.all([fetchUtil_1.fetchPrivate("".concat(this.blockstackAPIUrl, "/v1/namespaces/").concat(namespace)), this.getBlockHeight()]).then(function (_ref) { - var _ref2 = _slicedToArray(_ref, 2), - resp = _ref2[0], - blockHeight = _ref2[1]; - - if (resp.status === 404) { - throw new Error("No such namespace '".concat(namespace, "'")); - } else { - return Promise.all([resp.json(), blockHeight]); - } - }).then(function (_ref3) { - var _ref4 = _slicedToArray(_ref3, 2), - namespaceInfo = _ref4[0], - blockHeight = _ref4[1]; - - var address = _this7.getDefaultBurnAddress(); - - if (namespaceInfo.version === 2) { - // pay-to-namespace-creator if this namespace is less than 1 year old - if (namespaceInfo.reveal_block + 52595 >= blockHeight) { - address = namespaceInfo.address; - } - } - - return address; - }).then(function (address) { - return _this7.coerceAddress(address); - }); - } - /** - * Get WHOIS-like information for a name, including the address that owns it, - * the block at which it expires, and the zone file anchored to it (if available). - * @param {String} fullyQualifiedName the name to query. Can be on-chain of off-chain. - * @return {Promise} a promise that resolves to the WHOIS-like information - */ - - }, { - key: "getNameInfo", - value: function getNameInfo(fullyQualifiedName) { - var _this8 = this; - - logger_1.Logger.debug(this.blockstackAPIUrl); - var nameLookupURL = "".concat(this.blockstackAPIUrl, "/v1/names/").concat(fullyQualifiedName); - return fetchUtil_1.fetchPrivate(nameLookupURL).then(function (resp) { - if (resp.status === 404) { - throw new Error('Name not found'); - } else if (resp.status !== 200) { - throw new Error("Bad response status: ".concat(resp.status)); - } else { - return resp.json(); - } - }).then(function (nameInfo) { - logger_1.Logger.debug("nameInfo: ".concat(JSON.stringify(nameInfo))); // the returned address _should_ be in the correct network --- - // blockstackd gets into trouble because it tries to coerce back to mainnet - // and the regtest transaction generation libraries want to use testnet addresses - - if (nameInfo.address) { - return Object.assign({}, nameInfo, { - address: _this8.coerceAddress(nameInfo.address) - }); - } else { - return nameInfo; - } - }); - } - /** - * Get the pricing parameters and creation history of a namespace. - * @param {String} namespaceID the namespace to query - * @return {Promise} a promise that resolves to the namespace information. - */ - - }, { - key: "getNamespaceInfo", - value: function getNamespaceInfo(namespaceID) { - var _this9 = this; - - return fetchUtil_1.fetchPrivate("".concat(this.blockstackAPIUrl, "/v1/namespaces/").concat(namespaceID)).then(function (resp) { - if (resp.status === 404) { - throw new Error('Namespace not found'); - } else if (resp.status !== 200) { - throw new Error("Bad response status: ".concat(resp.status)); - } else { - return resp.json(); - } - }).then(function (namespaceInfo) { - // the returned address _should_ be in the correct network --- - // blockstackd gets into trouble because it tries to coerce back to mainnet - // and the regtest transaction generation libraries want to use testnet addresses - if (namespaceInfo.address && namespaceInfo.recipient_address) { - return Object.assign({}, namespaceInfo, { - address: _this9.coerceAddress(namespaceInfo.address), - recipient_address: _this9.coerceAddress(namespaceInfo.recipient_address) - }); - } else { - return namespaceInfo; - } - }); - } - /** - * Get a zone file, given its hash. Throws an exception if the zone file - * obtained does not match the hash. - * @param {String} zonefileHash the ripemd160(sha256) hash of the zone file - * @return {Promise} a promise that resolves to the zone file's text - */ - - }, { - key: "getZonefile", - value: function getZonefile(zonefileHash) { - return fetchUtil_1.fetchPrivate("".concat(this.blockstackAPIUrl, "/v1/zonefiles/").concat(zonefileHash)).then(function (resp) { - if (resp.status === 200) { - return resp.text().then(function (body) { - var sha256 = bitcoinjs_lib_1.crypto.sha256(Buffer.from(body)); - var h = new ripemd160_1.default().update(sha256).digest('hex'); - - if (h !== zonefileHash) { - throw new Error("Zone file contents hash to ".concat(h, ", not ").concat(zonefileHash)); - } - - return body; - }); - } else { - throw new Error("Bad response status: ".concat(resp.status)); - } - }); - } - /** - * Get the status of an account for a particular token holding. This includes its total number of - * expenditures and credits, lockup times, last txid, and so on. - * @param {String} address the account - * @param {String} tokenType the token type to query - * @return {Promise} a promise that resolves to an object representing the state of the account - * for this token - */ - - }, { - key: "getAccountStatus", - value: function getAccountStatus(address, tokenType) { - var _this10 = this; - - return fetchUtil_1.fetchPrivate("".concat(this.blockstackAPIUrl, "/v1/accounts/").concat(address, "/").concat(tokenType, "/status")).then(function (resp) { - if (resp.status === 404) { - throw new Error('Account not found'); - } else if (resp.status !== 200) { - throw new Error("Bad response status: ".concat(resp.status)); - } else { - return resp.json(); - } - }).then(function (accountStatus) { - // coerce all addresses, and convert credit/debit to biginteger - var formattedStatus = Object.assign({}, accountStatus, { - address: _this10.coerceAddress(accountStatus.address), - debit_value: new bn_js_1.default(String(accountStatus.debit_value)), - credit_value: new bn_js_1.default(String(accountStatus.credit_value)) - }); - return formattedStatus; - }); - } - /** - * Get a page of an account's transaction history. - * @param {String} address the account's address - * @param {number} page the page number. Page 0 is the most recent transactions - * @return {Promise} a promise that resolves to an Array of Objects, where each Object encodes - * states of the account at various block heights (e.g. prior balances, txids, etc) - */ - - }, { - key: "getAccountHistoryPage", - value: function getAccountHistoryPage(address, page) { - var _this11 = this; - - var url = "".concat(this.blockstackAPIUrl, "/v1/accounts/").concat(address, "/history?page=").concat(page); - return fetchUtil_1.fetchPrivate(url).then(function (resp) { - if (resp.status === 404) { - throw new Error('Account not found'); - } else if (resp.status !== 200) { - throw new Error("Bad response status: ".concat(resp.status)); - } else { - return resp.json(); - } - }).then(function (historyList) { - if (historyList.error) { - throw new Error("Unable to get account history page: ".concat(historyList.error)); - } // coerse all addresses and convert to bigint - - - return historyList.map(function (histEntry) { - histEntry.address = _this11.coerceAddress(histEntry.address); - histEntry.debit_value = new bn_js_1.default(String(histEntry.debit_value)); - histEntry.credit_value = new bn_js_1.default(String(histEntry.credit_value)); - return histEntry; - }); - }); - } - /** - * Get the state(s) of an account at a particular block height. This includes the state of the - * account beginning with this block's transactions, as well as all of the states the account - * passed through when this block was processed (if any). - * @param {String} address the account's address - * @param {Integer} blockHeight the block to query - * @return {Promise} a promise that resolves to an Array of Objects, where each Object encodes - * states of the account at this block. - */ - - }, { - key: "getAccountAt", - value: function getAccountAt(address, blockHeight) { - var _this12 = this; - - var url = "".concat(this.blockstackAPIUrl, "/v1/accounts/").concat(address, "/history/").concat(blockHeight); - return fetchUtil_1.fetchPrivate(url).then(function (resp) { - if (resp.status === 404) { - throw new Error('Account not found'); - } else if (resp.status !== 200) { - throw new Error("Bad response status: ".concat(resp.status)); - } else { - return resp.json(); - } - }).then(function (historyList) { - if (historyList.error) { - throw new Error("Unable to get historic account state: ".concat(historyList.error)); - } // coerce all addresses - - - return historyList.map(function (histEntry) { - histEntry.address = _this12.coerceAddress(histEntry.address); - histEntry.debit_value = new bn_js_1.default(String(histEntry.debit_value)); - histEntry.credit_value = new bn_js_1.default(String(histEntry.credit_value)); - return histEntry; - }); - }); - } - /** - * Get the set of token types that this account owns - * @param {String} address the account's address - * @return {Promise} a promise that resolves to an Array of Strings, where each item encodes the - * type of token this account holds (excluding the underlying blockchain's tokens) - */ - - }, { - key: "getAccountTokens", - value: function getAccountTokens(address) { - return fetchUtil_1.fetchPrivate("".concat(this.blockstackAPIUrl, "/v1/accounts/").concat(address, "/tokens")).then(function (resp) { - if (resp.status === 404) { - throw new Error('Account not found'); - } else if (resp.status !== 200) { - throw new Error("Bad response status: ".concat(resp.status)); - } else { - return resp.json(); - } - }).then(function (tokenList) { - if (tokenList.error) { - throw new Error("Unable to get token list: ".concat(tokenList.error)); - } - - return tokenList; - }); - } - /** - * Get the number of tokens owned by an account. If the account does not exist or has no - * tokens of this type, then 0 will be returned. - * @param {String} address the account's address - * @param {String} tokenType the type of token to query. - * @return {Promise} a promise that resolves to a BigInteger that encodes the number of tokens - * held by this account. - */ - - }, { - key: "getAccountBalance", - value: function getAccountBalance(address, tokenType) { - return fetchUtil_1.fetchPrivate("".concat(this.blockstackAPIUrl, "/v1/accounts/").concat(address, "/").concat(tokenType, "/balance")).then(function (resp) { - if (resp.status === 404) { - // talking to an older blockstack core node without the accounts API - return Promise.resolve().then(function () { - return new bn_js_1.default('0'); - }); - } else if (resp.status !== 200) { - throw new Error("Bad response status: ".concat(resp.status)); - } else { - return resp.json(); - } - }).then(function (tokenBalance) { - if (tokenBalance.error) { - throw new Error("Unable to get account balance: ".concat(tokenBalance.error)); - } - - var balance = '0'; - - if (tokenBalance && tokenBalance.balance) { - balance = tokenBalance.balance; - } - - return new bn_js_1.default(balance); - }); - } - /** - * Performs a POST request to the given URL - * @param {String} endpoint the name of - * @param {String} body [description] - * @return {Promise} Returns a `Promise` that resolves to the object requested. - * In the event of an error, it rejects with: - * * a `RemoteServiceError` if there is a problem - * with the transaction broadcast service - * * `MissingParameterError` if you call the function without a required - * parameter - * - * @private - */ - - }, { - key: "broadcastServiceFetchHelper", - value: function broadcastServiceFetchHelper(endpoint, body) { - var requestHeaders = { - Accept: 'application/json', - 'Content-Type': 'application/json' - }; - var options = { - method: 'POST', - headers: requestHeaders, - body: JSON.stringify(body) - }; - var url = "".concat(this.broadcastServiceUrl, "/v1/broadcast/").concat(endpoint); - return fetchUtil_1.fetchPrivate(url, options).then(function (response) { - if (response.ok) { - return response.json(); - } else { - throw new errors_1.RemoteServiceError(response); - } - }); - } - /** - * Broadcasts a signed bitcoin transaction to the network optionally waiting to broadcast the - * transaction until a second transaction has a certain number of confirmations. - * - * @param {string} transaction the hex-encoded transaction to broadcast - * @param {string} transactionToWatch the hex transaction id of the transaction to watch for - * the specified number of confirmations before broadcasting the `transaction` - * @param {number} confirmations the number of confirmations `transactionToWatch` must have - * before broadcasting `transaction`. - * @return {Promise} Returns a Promise that resolves to an object with a - * `transaction_hash` key containing the transaction hash of the broadcasted transaction. - * - * In the event of an error, it rejects with: - * * a `RemoteServiceError` if there is a problem - * with the transaction broadcast service - * * `MissingParameterError` if you call the function without a required - * parameter - * @private - */ - - }, { - key: "broadcastTransaction", - value: function broadcastTransaction(transaction) { - var transactionToWatch = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null; - var confirmations = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 6; - - if (!transaction) { - var error = new errors_1.MissingParameterError('transaction'); - return Promise.reject(error); - } - - if (!confirmations && confirmations !== 0) { - var _error = new errors_1.MissingParameterError('confirmations'); - - return Promise.reject(_error); - } - - if (transactionToWatch === null) { - return this.btc.broadcastTransaction(transaction); - } else { - /* - * POST /v1/broadcast/transaction - * Request body: - * JSON.stringify({ - * transaction, - * transactionToWatch, - * confirmations - * }) - */ - var endpoint = TX_BROADCAST_SERVICE_TX_ENDPOINT; - var requestBody = { - transaction: transaction, - transactionToWatch: transactionToWatch, - confirmations: confirmations - }; - return this.broadcastServiceFetchHelper(endpoint, requestBody); - } - } - /** - * Broadcasts a zone file to the Atlas network via the transaction broadcast service. - * - * @param {String} zoneFile the zone file to be broadcast to the Atlas network - * @param {String} transactionToWatch the hex transaction id of the transaction - * to watch for confirmation before broadcasting the zone file to the Atlas network - * @return {Promise} Returns a Promise that resolves to an object with a - * `transaction_hash` key containing the transaction hash of the broadcasted transaction. - * - * In the event of an error, it rejects with: - * * a `RemoteServiceError` if there is a problem - * with the transaction broadcast service - * * `MissingParameterError` if you call the function without a required - * parameter - * @private - */ - - }, { - key: "broadcastZoneFile", - value: function broadcastZoneFile(zoneFile) { - var transactionToWatch = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null; - - if (!zoneFile) { - return Promise.reject(new errors_1.MissingParameterError('zoneFile')); - } // TODO: validate zonefile - - - if (transactionToWatch) { - // broadcast via transaction broadcast service - - /* - * POST /v1/broadcast/zone-file - * Request body: - * JSON.stringify({ - * zoneFile, - * transactionToWatch - * }) - */ - var requestBody = { - zoneFile: zoneFile, - transactionToWatch: transactionToWatch - }; - var endpoint = TX_BROADCAST_SERVICE_ZONE_FILE_ENDPOINT; - return this.broadcastServiceFetchHelper(endpoint, requestBody); - } else { - // broadcast via core endpoint - // zone file is two words but core's api treats it as one word 'zonefile' - var _requestBody = { - zonefile: zoneFile - }; - return fetchUtil_1.fetchPrivate("".concat(this.blockstackAPIUrl, "/v1/zonefile/"), { - method: 'POST', - body: JSON.stringify(_requestBody), - headers: { - 'Content-Type': 'application/json' - } - }).then(function (resp) { - var json = resp.json(); - return json.then(function (respObj) { - if (respObj.hasOwnProperty('error')) { - throw new errors_1.RemoteServiceError(resp); - } - - return respObj.servers; - }); - }); - } - } - /** - * Sends the preorder and registration transactions and zone file - * for a Blockstack name registration - * along with the to the transaction broadcast service. - * - * The transaction broadcast: - * - * * immediately broadcasts the preorder transaction - * * broadcasts the register transactions after the preorder transaction - * has an appropriate number of confirmations - * * broadcasts the zone file to the Atlas network after the register transaction - * has an appropriate number of confirmations - * - * @param {String} preorderTransaction the hex-encoded, signed preorder transaction generated - * using the `makePreorder` function - * @param {String} registerTransaction the hex-encoded, signed register transaction generated - * using the `makeRegister` function - * @param {String} zoneFile the zone file to be broadcast to the Atlas network - * @return {Promise} Returns a Promise that resolves to an object with a - * `transaction_hash` key containing the transaction hash of the broadcasted transaction. - * - * In the event of an error, it rejects with: - * * a `RemoteServiceError` if there is a problem - * with the transaction broadcast service - * * `MissingParameterError` if you call the function without a required - * parameter - * @private - */ - - }, { - key: "broadcastNameRegistration", - value: function broadcastNameRegistration(preorderTransaction, registerTransaction, zoneFile) { - /* - * POST /v1/broadcast/registration - * Request body: - * JSON.stringify({ - * preorderTransaction, - * registerTransaction, - * zoneFile - * }) - */ - if (!preorderTransaction) { - var error = new errors_1.MissingParameterError('preorderTransaction'); - return Promise.reject(error); - } - - if (!registerTransaction) { - var _error2 = new errors_1.MissingParameterError('registerTransaction'); - - return Promise.reject(_error2); - } - - if (!zoneFile) { - var _error3 = new errors_1.MissingParameterError('zoneFile'); - - return Promise.reject(_error3); - } - - var requestBody = { - preorderTransaction: preorderTransaction, - registerTransaction: registerTransaction, - zoneFile: zoneFile - }; - var endpoint = TX_BROADCAST_SERVICE_REGISTRATION_ENDPOINT; - return this.broadcastServiceFetchHelper(endpoint, requestBody); - } - /** - * @ignore - */ - - }, { - key: "getFeeRate", - value: function getFeeRate() { - return fetchUtil_1.fetchPrivate('https://bitcoinfees.earn.com/api/v1/fees/recommended').then(function (resp) { - return resp.json(); - }).then(function (rates) { - return Math.floor(rates.fastestFee); - }); - } - /** - * @ignore - */ - - }, { - key: "countDustOutputs", - value: function countDustOutputs() { - throw new Error('Not implemented.'); - } - /** - * @ignore - */ - - }, { - key: "getUTXOs", - value: function getUTXOs(address) { - var _this13 = this; - - return this.getNetworkedUTXOs(address).then(function (networkedUTXOs) { - var returnSet = networkedUTXOs.concat(); - - if (_this13.includeUtxoMap.hasOwnProperty(address)) { - returnSet = networkedUTXOs.concat(_this13.includeUtxoMap[address]); - } // aaron: I am *well* aware this is O(n)*O(m) runtime - // however, clients should clear the exclude set periodically - - - var excludeSet = _this13.excludeUtxoSet; - returnSet = returnSet.filter(function (utxo) { - var inExcludeSet = excludeSet.reduce(function (inSet, utxoToCheck) { - return inSet || utxoToCheck.tx_hash === utxo.tx_hash && utxoToCheck.tx_output_n === utxo.tx_output_n; - }, false); - return !inExcludeSet; - }); - return returnSet; - }); - } - /** - * This will modify the network's utxo set to include UTXOs - * from the given transaction and exclude UTXOs *spent* in - * that transaction - * @param {String} txHex - the hex-encoded transaction to use - * @return {void} no return value, this modifies the UTXO config state - * @private - * @ignore - */ - - }, { - key: "modifyUTXOSetFrom", - value: function modifyUTXOSetFrom(txHex) { - var _this14 = this; - - var tx = bitcoinjs_lib_1.Transaction.fromHex(txHex); - var excludeSet = this.excludeUtxoSet.concat(); - tx.ins.forEach(function (utxoUsed) { - var reverseHash = Buffer.from(utxoUsed.hash); - reverseHash.reverse(); - excludeSet.push({ - tx_hash: reverseHash.toString('hex'), - tx_output_n: utxoUsed.index - }); - }); - this.excludeUtxoSet = excludeSet; - var txHash = Buffer.from(tx.getHash().reverse()).toString('hex'); - tx.outs.forEach(function (utxoCreated, txOutputN) { - var isNullData = function isNullData(script) { - try { - bitcoinjs_lib_1.payments.embed({ - output: script - }, { - validate: true - }); - return true; - } catch (_) { - return false; - } - }; - - if (isNullData(utxoCreated.script)) { - return; - } - - var address = bitcoinjs_lib_1.address.fromOutputScript(utxoCreated.script, _this14.layer1); - var includeSet = []; - - if (_this14.includeUtxoMap.hasOwnProperty(address)) { - includeSet = includeSet.concat(_this14.includeUtxoMap[address]); - } - - includeSet.push({ - tx_hash: txHash, - confirmations: 0, - value: utxoCreated.value, - tx_output_n: txOutputN - }); - _this14.includeUtxoMap[address] = includeSet; - }); - } - }, { - key: "resetUTXOs", - value: function resetUTXOs(address) { - delete this.includeUtxoMap[address]; - this.excludeUtxoSet = []; - } - /** - * @ignore - */ - - }, { - key: "getConsensusHash", - value: function getConsensusHash() { - return fetchUtil_1.fetchPrivate("".concat(this.blockstackAPIUrl, "/v1/blockchains/bitcoin/consensus")).then(function (resp) { - return resp.json(); - }).then(function (x) { - return x.consensus_hash; - }); - } - }, { - key: "getTransactionInfo", - value: function getTransactionInfo(txHash) { - return this.btc.getTransactionInfo(txHash); - } - /** - * @ignore - */ - - }, { - key: "getBlockHeight", - value: function getBlockHeight() { - return this.btc.getBlockHeight(); - } - }, { - key: "getNetworkedUTXOs", - value: function getNetworkedUTXOs(address) { - return this.btc.getNetworkedUTXOs(address); - } - }]); - - return BlockstackNetwork; -}(); - -exports.BlockstackNetwork = BlockstackNetwork; -/** - * @ignore - */ - -var LocalRegtest = -/*#__PURE__*/ -function (_BlockstackNetwork) { - _inherits(LocalRegtest, _BlockstackNetwork); - - function LocalRegtest(apiUrl, broadcastServiceUrl, bitcoinAPI) { - _classCallCheck(this, LocalRegtest); - - return _possibleConstructorReturn(this, _getPrototypeOf(LocalRegtest).call(this, apiUrl, broadcastServiceUrl, bitcoinAPI, bitcoinjs_lib_1.networks.testnet)); - } - - _createClass(LocalRegtest, [{ - key: "getFeeRate", - value: function getFeeRate() { - return Promise.resolve(Math.floor(0.00001000 * SATOSHIS_PER_BTC)); - } - }]); - - return LocalRegtest; -}(BlockstackNetwork); - -exports.LocalRegtest = LocalRegtest; -/** - * @ignore - */ - -var BitcoindAPI = -/*#__PURE__*/ -function (_BitcoinNetwork) { - _inherits(BitcoindAPI, _BitcoinNetwork); - - function BitcoindAPI(bitcoindUrl, bitcoindCredentials) { - var _this15; - - _classCallCheck(this, BitcoindAPI); - - _this15 = _possibleConstructorReturn(this, _getPrototypeOf(BitcoindAPI).call(this)); - _this15.bitcoindUrl = bitcoindUrl; - _this15.bitcoindCredentials = bitcoindCredentials; - _this15.importedBefore = {}; - return _this15; - } - - _createClass(BitcoindAPI, [{ - key: "broadcastTransaction", - value: function broadcastTransaction(transaction) { - var jsonRPC = { - jsonrpc: '1.0', - method: 'sendrawtransaction', - params: [transaction] - }; - var authString = Buffer.from("".concat(this.bitcoindCredentials.username, ":").concat(this.bitcoindCredentials.password)).toString('base64'); - var headers = { - Authorization: "Basic ".concat(authString) - }; - return fetchUtil_1.fetchPrivate(this.bitcoindUrl, { - method: 'POST', - body: JSON.stringify(jsonRPC), - headers: headers - }).then(function (resp) { - return resp.json(); - }).then(function (respObj) { - return respObj.result; - }); - } - }, { - key: "getBlockHeight", - value: function getBlockHeight() { - var jsonRPC = { - jsonrpc: '1.0', - method: 'getblockcount' - }; - var authString = Buffer.from("".concat(this.bitcoindCredentials.username, ":").concat(this.bitcoindCredentials.password)).toString('base64'); - var headers = { - Authorization: "Basic ".concat(authString) - }; - return fetchUtil_1.fetchPrivate(this.bitcoindUrl, { - method: 'POST', - body: JSON.stringify(jsonRPC), - headers: headers - }).then(function (resp) { - return resp.json(); - }).then(function (respObj) { - return respObj.result; - }); - } - }, { - key: "getTransactionInfo", - value: function getTransactionInfo(txHash) { - var _this16 = this; - - var jsonRPC = { - jsonrpc: '1.0', - method: 'gettransaction', - params: [txHash] - }; - var authString = Buffer.from("".concat(this.bitcoindCredentials.username, ":").concat(this.bitcoindCredentials.password)).toString('base64'); - var headers = { - Authorization: "Basic ".concat(authString) - }; - return fetchUtil_1.fetchPrivate(this.bitcoindUrl, { - method: 'POST', - body: JSON.stringify(jsonRPC), - headers: headers - }).then(function (resp) { - return resp.json(); - }).then(function (respObj) { - return respObj.result; - }).then(function (txInfo) { - return txInfo.blockhash; - }).then(function (blockhash) { - var jsonRPCBlock = { - jsonrpc: '1.0', - method: 'getblockheader', - params: [blockhash] - }; - headers.Authorization = "Basic ".concat(authString); - return fetchUtil_1.fetchPrivate(_this16.bitcoindUrl, { - method: 'POST', - body: JSON.stringify(jsonRPCBlock), - headers: headers - }); - }).then(function (resp) { - return resp.json(); - }).then(function (respObj) { - if (!respObj || !respObj.result) { - // unconfirmed - throw new Error('Unconfirmed transaction'); - } else { - return { - block_height: respObj.result.height - }; - } - }); - } - }, { - key: "getNetworkedUTXOs", - value: function getNetworkedUTXOs(address) { - var _this17 = this; - - var jsonRPCImport = { - jsonrpc: '1.0', - method: 'importaddress', - params: [address] - }; - var jsonRPCUnspent = { - jsonrpc: '1.0', - method: 'listunspent', - params: [0, 9999999, [address]] - }; - var authString = Buffer.from("".concat(this.bitcoindCredentials.username, ":").concat(this.bitcoindCredentials.password)).toString('base64'); - var headers = { - Authorization: "Basic ".concat(authString) - }; - var importPromise = this.importedBefore[address] ? Promise.resolve() : fetchUtil_1.fetchPrivate(this.bitcoindUrl, { - method: 'POST', - body: JSON.stringify(jsonRPCImport), - headers: headers - }).then(function () { - _this17.importedBefore[address] = true; - }); - return importPromise.then(function () { - return fetchUtil_1.fetchPrivate(_this17.bitcoindUrl, { - method: 'POST', - body: JSON.stringify(jsonRPCUnspent), - headers: headers - }); - }).then(function (resp) { - return resp.json(); - }).then(function (x) { - return x.result; - }).then(function (utxos) { - return utxos.map(function (x) { - return { - value: Math.round(x.amount * SATOSHIS_PER_BTC), - confirmations: x.confirmations, - tx_hash: x.txid, - tx_output_n: x.vout - }; - }); - }); - } - }]); - - return BitcoindAPI; -}(BitcoinNetwork); - -exports.BitcoindAPI = BitcoindAPI; -/** - * @ignore - */ - -var InsightClient = -/*#__PURE__*/ -function (_BitcoinNetwork2) { - _inherits(InsightClient, _BitcoinNetwork2); - - function InsightClient() { - var _this18; - - var insightUrl = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'https://utxo.technofractal.com/'; - - _classCallCheck(this, InsightClient); - - _this18 = _possibleConstructorReturn(this, _getPrototypeOf(InsightClient).call(this)); - _this18.apiUrl = insightUrl; - return _this18; - } - - _createClass(InsightClient, [{ - key: "broadcastTransaction", - value: function broadcastTransaction(transaction) { - var jsonData = { - rawtx: transaction - }; - return fetchUtil_1.fetchPrivate("".concat(this.apiUrl, "/tx/send"), { - method: 'POST', - headers: { - 'Content-Type': 'application/json' - }, - body: JSON.stringify(jsonData) - }).then(function (resp) { - return resp.json(); - }); - } - }, { - key: "getBlockHeight", - value: function getBlockHeight() { - return fetchUtil_1.fetchPrivate("".concat(this.apiUrl, "/status")).then(function (resp) { - return resp.json(); - }).then(function (status) { - return status.blocks; - }); - } - }, { - key: "getTransactionInfo", - value: function getTransactionInfo(txHash) { - var _this19 = this; - - return fetchUtil_1.fetchPrivate("".concat(this.apiUrl, "/tx/").concat(txHash)).then(function (resp) { - return resp.json(); - }).then(function (transactionInfo) { - if (transactionInfo.error) { - throw new Error("Error finding transaction: ".concat(transactionInfo.error)); - } - - return fetchUtil_1.fetchPrivate("".concat(_this19.apiUrl, "/block/").concat(transactionInfo.blockHash)); - }).then(function (resp) { - return resp.json(); - }).then(function (blockInfo) { - return { - block_height: blockInfo.height - }; - }); - } - }, { - key: "getNetworkedUTXOs", - value: function getNetworkedUTXOs(address) { - return fetchUtil_1.fetchPrivate("".concat(this.apiUrl, "/addr/").concat(address, "/utxo")).then(function (resp) { - return resp.json(); - }).then(function (utxos) { - return utxos.map(function (x) { - return { - value: x.satoshis, - confirmations: x.confirmations, - tx_hash: x.txid, - tx_output_n: x.vout - }; - }); - }); - } - }]); - - return InsightClient; -}(BitcoinNetwork); - -exports.InsightClient = InsightClient; -/** - * @ignore - */ - -var BlockchainInfoApi = -/*#__PURE__*/ -function (_BitcoinNetwork3) { - _inherits(BlockchainInfoApi, _BitcoinNetwork3); - - function BlockchainInfoApi() { - var _this20; - - var blockchainInfoUrl = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'https://blockchain.info'; - - _classCallCheck(this, BlockchainInfoApi); - - _this20 = _possibleConstructorReturn(this, _getPrototypeOf(BlockchainInfoApi).call(this)); - _this20.utxoProviderUrl = blockchainInfoUrl; - return _this20; - } - - _createClass(BlockchainInfoApi, [{ - key: "getBlockHeight", - value: function getBlockHeight() { - return fetchUtil_1.fetchPrivate("".concat(this.utxoProviderUrl, "/latestblock?cors=true")).then(function (resp) { - return resp.json(); - }).then(function (blockObj) { - return blockObj.height; - }); - } - }, { - key: "getNetworkedUTXOs", - value: function getNetworkedUTXOs(address) { - return fetchUtil_1.fetchPrivate("".concat(this.utxoProviderUrl, "/unspent?format=json&active=").concat(address, "&cors=true")).then(function (resp) { - if (resp.status === 500) { - logger_1.Logger.debug('UTXO provider 500 usually means no UTXOs: returning []'); - return { - unspent_outputs: [] - }; - } else { - return resp.json(); - } - }).then(function (utxoJSON) { - return utxoJSON.unspent_outputs; - }).then(function (utxoList) { - return utxoList.map(function (utxo) { - var utxoOut = { - value: utxo.value, - tx_output_n: utxo.tx_output_n, - confirmations: utxo.confirmations, - tx_hash: utxo.tx_hash_big_endian - }; - return utxoOut; - }); - }); - } - }, { - key: "getTransactionInfo", - value: function getTransactionInfo(txHash) { - return fetchUtil_1.fetchPrivate("".concat(this.utxoProviderUrl, "/rawtx/").concat(txHash, "?cors=true")).then(function (resp) { - if (resp.status === 200) { - return resp.json(); - } else { - throw new Error("Could not lookup transaction info for '".concat(txHash, "'. Server error.")); - } - }).then(function (respObj) { - return { - block_height: respObj.block_height - }; - }); - } - }, { - key: "broadcastTransaction", - value: function broadcastTransaction(transaction) { - var form = new form_data_1.default(); - form.append('tx', transaction); - return fetchUtil_1.fetchPrivate("".concat(this.utxoProviderUrl, "/pushtx?cors=true"), { - method: 'POST', - body: form - }).then(function (resp) { - var text = resp.text(); - return text.then(function (respText) { - if (respText.toLowerCase().indexOf('transaction submitted') >= 0) { - var txHash = Buffer.from(bitcoinjs_lib_1.Transaction.fromHex(transaction).getHash().reverse()).toString('hex'); // big_endian - - return txHash; - } else { - throw new errors_1.RemoteServiceError(resp, "Broadcast transaction failed with message: ".concat(respText)); - } - }); - }); - } - }]); - - return BlockchainInfoApi; -}(BitcoinNetwork); - -exports.BlockchainInfoApi = BlockchainInfoApi; -/** -* @ignore -*/ - -var LOCAL_REGTEST = new LocalRegtest('http://localhost:16268', 'http://localhost:16269', new BitcoindAPI('http://localhost:18332/', { - username: 'blockstack', - password: 'blockstacksystem' -})); -/** -* @ignore -*/ - -var MAINNET_DEFAULT = new BlockstackNetwork('https://core.blockstack.org', 'https://broadcast.blockstack.org', new BlockchainInfoApi()); -/** - * Get WHOIS-like information for a name, including the address that owns it, - * the block at which it expires, and the zone file anchored to it (if available). - * @param {String} fullyQualifiedName the name to query. Can be on-chain of off-chain. - * @return {Promise} a promise that resolves to the WHOIS-like information - */ - -function getNameInfo(fullyQualifiedName) { - return config_1.config.network.getNameInfo(fullyQualifiedName); -} - -exports.getNameInfo = getNameInfo; -/** -* @ignore -*/ - -exports.network = { - BlockstackNetwork: BlockstackNetwork, - LocalRegtest: LocalRegtest, - BlockchainInfoApi: BlockchainInfoApi, - BitcoindAPI: BitcoindAPI, - InsightClient: InsightClient, - defaults: { - LOCAL_REGTEST: LOCAL_REGTEST, - MAINNET_DEFAULT: MAINNET_DEFAULT - } -}; -},{"bitcoinjs-lib":"Bcue","form-data":"iC5B","bn.js":"BOxy","ripemd160":"quyi","./errors":"V7fS","./logger":"qjRs","./config":"GmrD","./fetchUtil":"bSeT","buffer":"dskh"}],"GmrD":[function(require,module,exports) { -"use strict"; - -Object.defineProperty(exports, "__esModule", { - value: true -}); - -var network_1 = require("./network"); -/** -* @ignore -*/ - - -var config = { - network: network_1.network.defaults.MAINNET_DEFAULT, - logLevel: 'debug' -}; -exports.config = config; -},{"./network":"Si1t"}],"dEjD":[function(require,module,exports) { -var Buffer = require("buffer").Buffer; -var global = arguments[3]; -"use strict"; - -var __importDefault = this && this.__importDefault || function (mod) { - return mod && mod.__esModule ? mod : { - "default": mod - }; -}; - -Object.defineProperty(exports, "__esModule", { - value: true -}); - -var url_1 = __importDefault(require("url")); - -var bitcoinjs_lib_1 = require("bitcoinjs-lib"); - -var config_1 = require("./config"); - -var logger_1 = require("./logger"); -/** - * @ignore - */ - - -exports.BLOCKSTACK_HANDLER = 'blockstack'; -/** - * Time - * @private - * @ignore - */ - -function nextYear() { - return new Date(new Date().setFullYear(new Date().getFullYear() + 1)); -} - -exports.nextYear = nextYear; -/** - * Time - * @private - * @ignore - */ - -function nextMonth() { - return new Date(new Date().setMonth(new Date().getMonth() + 1)); -} - -exports.nextMonth = nextMonth; -/** - * Time - * @private - * @ignore - */ - -function nextHour() { - return new Date(new Date().setHours(new Date().getHours() + 1)); -} - -exports.nextHour = nextHour; -/** - * Query Strings - * @private - * @ignore - */ - -function updateQueryStringParameter(uri, key, value) { - var re = new RegExp("([?&])".concat(key, "=.*?(&|$)"), 'i'); - var separator = uri.indexOf('?') !== -1 ? '&' : '?'; - - if (uri.match(re)) { - return uri.replace(re, "$1".concat(key, "=").concat(value, "$2")); - } else { - return "".concat(uri).concat(separator).concat(key, "=").concat(value); - } -} - -exports.updateQueryStringParameter = updateQueryStringParameter; -/** - * Versioning - * @param {string} v1 - the left half of the version inequality - * @param {string} v2 - right half of the version inequality - * @returns {bool} iff v1 >= v2 - * @private - * @ignore - */ - -function isLaterVersion(v1, v2) { - if (v1 === undefined) { - v1 = '0.0.0'; - } - - if (v2 === undefined) { - v2 = '0.0.0'; - } - - var v1tuple = v1.split('.').map(function (x) { - return parseInt(x, 10); - }); - var v2tuple = v2.split('.').map(function (x) { - return parseInt(x, 10); - }); - - for (var index = 0; index < v2.length; index++) { - if (index >= v1.length) { - v2tuple.push(0); - } - - if (v1tuple[index] < v2tuple[index]) { - return false; - } - } - - return true; -} - -exports.isLaterVersion = isLaterVersion; -/** - * Time - * @private - * @ignore - */ - -function hexStringToECPair(skHex) { - var ecPairOptions = { - network: config_1.config.network.layer1, - compressed: true - }; - - if (skHex.length === 66) { - if (skHex.slice(64) !== '01') { - throw new Error('Improperly formatted private-key hex string. 66-length hex usually ' + 'indicates compressed key, but last byte must be == 1'); - } - - return bitcoinjs_lib_1.ECPair.fromPrivateKey(Buffer.from(skHex.slice(0, 64), 'hex'), ecPairOptions); - } else if (skHex.length === 64) { - ecPairOptions.compressed = false; - return bitcoinjs_lib_1.ECPair.fromPrivateKey(Buffer.from(skHex, 'hex'), ecPairOptions); - } else { - throw new Error('Improperly formatted private-key hex string: length should be 64 or 66.'); - } -} - -exports.hexStringToECPair = hexStringToECPair; -/** - * - * @ignore - */ - -function ecPairToHexString(secretKey) { - var ecPointHex = secretKey.privateKey.toString('hex'); - - if (secretKey.compressed) { - return "".concat(ecPointHex, "01"); - } else { - return ecPointHex; - } -} - -exports.ecPairToHexString = ecPairToHexString; -/** - * Time - * @private - * @ignore - */ - -function ecPairToAddress(keyPair) { - return bitcoinjs_lib_1.address.toBase58Check(bitcoinjs_lib_1.crypto.hash160(keyPair.publicKey), keyPair.network.pubKeyHash); -} - -exports.ecPairToAddress = ecPairToAddress; -/** - * UUIDs - * @private - * @ignore - */ - -function makeUUID4() { - var d = new Date().getTime(); - - if (typeof performance !== 'undefined' && typeof performance.now === 'function') { - d += performance.now(); // use high-precision timer if available - } - - return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function (c) { - var r = (d + Math.random() * 16) % 16 | 0; - d = Math.floor(d / 16); - return (c === 'x' ? r : r & 0x3 | 0x8).toString(16); - }); -} - -exports.makeUUID4 = makeUUID4; -/** - * Checks if both urls pass the same origin check & are absolute - * @param {[type]} uri1 first uri to check - * @param {[type]} uri2 second uri to check - * @return {Boolean} true if they pass the same origin check - * @private - * @ignore - */ - -function isSameOriginAbsoluteUrl(uri1, uri2) { - var parsedUri1 = url_1.default.parse(uri1); - var parsedUri2 = url_1.default.parse(uri2); - var port1 = parseInt(parsedUri1.port || '0', 10) | 0 || (parsedUri1.protocol === 'https:' ? 443 : 80); - var port2 = parseInt(parsedUri2.port || '0', 10) | 0 || (parsedUri2.protocol === 'https:' ? 443 : 80); - var match = { - scheme: parsedUri1.protocol === parsedUri2.protocol, - hostname: parsedUri1.hostname === parsedUri2.hostname, - port: port1 === port2, - absolute: (uri1.includes('http://') || uri1.includes('https://')) && (uri2.includes('http://') || uri2.includes('https://')) - }; - return match.scheme && match.hostname && match.port && match.absolute; -} - -exports.isSameOriginAbsoluteUrl = isSameOriginAbsoluteUrl; -/** - * Returns the global scope `Window`, `WorkerGlobalScope`, or `NodeJS.Global` if available in the - * currently executing environment. - * @see https://developer.mozilla.org/en-US/docs/Web/API/Window/self - * @see https://developer.mozilla.org/en-US/docs/Web/API/WorkerGlobalScope/self - * @see https://developer.mozilla.org/en-US/docs/Web/API/WindowOrWorkerGlobalScope - * - * This could be switched to `globalThis` once it is standardized and widely available. - * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/globalThis - */ - -function getGlobalScope() { - if (typeof self !== 'undefined') { - return self; - } - - if (typeof window !== 'undefined') { - return window; - } // This function is meant to be called when accessing APIs that are typically only available in - // web-browser/DOM environments, but we also want to support situations where running in Node.js - // environment, and a polyfill was added to the Node.js `global` object scope without adding the - // `window` global object as well. - - - if (typeof global !== 'undefined') { - return global; - } - - throw new Error('Unexpected runtime environment - no supported global scope (`window`, `self`, `global`) available'); -} - -function getAPIUsageErrorMessage(scopeObject, apiName, usageDesc) { - if (usageDesc) { - return "Use of '".concat(usageDesc, "' requires `").concat(apiName, "` which is unavailable on the '").concat(scopeObject, "' object within the currently executing environment."); - } else { - return "`".concat(apiName, "` is unavailable on the '").concat(scopeObject, "' object within the currently executing environment."); - } -} -/** - * Returns an object from the global scope (`Window` or `WorkerGlobalScope`) if it - * is available within the currently executing environment. - * When executing within the Node.js runtime these APIs are unavailable and will be - * `undefined` unless the API is provided via polyfill. - * @see https://developer.mozilla.org/en-US/docs/Web/API/Window/self - * @ignore - */ - - -function getGlobalObject(name) { - var _ref = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}, - throwIfUnavailable = _ref.throwIfUnavailable, - usageDesc = _ref.usageDesc, - returnEmptyObject = _ref.returnEmptyObject; - - var globalScope; - - try { - globalScope = getGlobalScope(); - - if (globalScope) { - var obj = globalScope[name]; - - if (obj) { - return obj; - } - } - } catch (error) { - logger_1.Logger.error("Error getting object '".concat(name, "' from global scope '").concat(globalScope, "': ").concat(error)); - } - - if (throwIfUnavailable) { - var errMsg = getAPIUsageErrorMessage(globalScope, name, usageDesc); - logger_1.Logger.error(errMsg); - throw new Error(errMsg); - } - - if (returnEmptyObject) { - return {}; - } - - return undefined; -} - -exports.getGlobalObject = getGlobalObject; -/** - * Returns a specified subset of objects from the global scope (`Window` or `WorkerGlobalScope`) - * if they are available within the currently executing environment. - * When executing within the Node.js runtime these APIs are unavailable will be `undefined` - * unless the API is provided via polyfill. - * @see https://developer.mozilla.org/en-US/docs/Web/API/Window/self - * @ignore - */ - -function getGlobalObjects(names) { - var _ref2 = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}, - throwIfUnavailable = _ref2.throwIfUnavailable, - usageDesc = _ref2.usageDesc, - returnEmptyObject = _ref2.returnEmptyObject; - - var globalScope; - - try { - globalScope = getGlobalScope(); - } catch (error) { - logger_1.Logger.error("Error getting global scope: ".concat(error)); - - if (throwIfUnavailable) { - var errMsg = getAPIUsageErrorMessage(globalScope, names[0], usageDesc); - logger_1.Logger.error(errMsg); - throw errMsg; - } else if (returnEmptyObject) { - globalScope = {}; - } - } - - var result = {}; - - for (var i = 0; i < names.length; i++) { - var name = names[i]; - - try { - if (globalScope) { - var obj = globalScope[name]; - - if (obj) { - result[name] = obj; - } else if (throwIfUnavailable) { - var _errMsg = getAPIUsageErrorMessage(globalScope, name, usageDesc); - - logger_1.Logger.error(_errMsg); - throw new Error(_errMsg); - } else if (returnEmptyObject) { - result[name] = {}; - } - } - } catch (error) { - if (throwIfUnavailable) { - var _errMsg2 = getAPIUsageErrorMessage(globalScope, name, usageDesc); - - logger_1.Logger.error(_errMsg2); - throw new Error(_errMsg2); - } - } - } - - return result; -} - -exports.getGlobalObjects = getGlobalObjects; -},{"url":"Mej7","bitcoinjs-lib":"Bcue","./config":"GmrD","./logger":"qjRs","buffer":"dskh"}],"k09H":[function(require,module,exports) { -"use strict"; - -function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - -function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } - -function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; } - -Object.defineProperty(exports, "__esModule", { - value: true -}); - -var authConstants_1 = require("./authConstants"); - -var utils_1 = require("../utils"); -/** - * Configuration data for the current app. - * - * On browser platforms, creating an instance of this - * class without any arguments will use - * `window.location.origin` as the app domain. - * On non-browser platforms, you need to - * specify an app domain as the second argument. - * - */ - - -var AppConfig = -/*#__PURE__*/ -function () { - /** - * @param {Array} scopes - permissions this app is requesting - * @param {string} appDomain - the app domain - * @param {string} redirectPath - path on app domain to redirect users to after authentication - * @param {string} manifestPath - path relative to app domain of app's manifest file - * @param {string} coreNode - override the default or user selected core node - * @param {string} authenticatorURL - the web-based fall back authenticator - * ([[DEFAULT_BLOCKSTACK_HOST]]) - */ - function AppConfig() { - var scopes = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : authConstants_1.DEFAULT_SCOPE.slice(); - var appDomain = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : utils_1.getGlobalObject('location', { - returnEmptyObject: true - }).origin; - var redirectPath = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : ''; - var manifestPath = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : '/manifest.json'; - var coreNode = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : null; - var authenticatorURL = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : authConstants_1.DEFAULT_BLOCKSTACK_HOST; - - _classCallCheck(this, AppConfig); - - this.appDomain = appDomain; - this.scopes = scopes; - this.redirectPath = redirectPath; - this.manifestPath = manifestPath; - - if (!coreNode) { - this.coreNode = authConstants_1.DEFAULT_CORE_NODE; - } else { - this.coreNode = coreNode; - } - - this.authenticatorURL = authenticatorURL; - } - /** - * The location to which the authenticator should - * redirect the user. - * @returns {string} - URI - */ - - - _createClass(AppConfig, [{ - key: "redirectURI", - value: function redirectURI() { - return "".concat(this.appDomain).concat(this.redirectPath); - } - /** - * The location of the app's manifest file. - * @returns {string} - URI - */ - - }, { - key: "manifestURI", - value: function manifestURI() { - return "".concat(this.appDomain).concat(this.manifestPath); - } - }]); - - return AppConfig; -}(); - -exports.AppConfig = AppConfig; -},{"./authConstants":"UTxZ","../utils":"dEjD"}],"CQH0":[function(require,module,exports) { -(function(self) { - - if (self.fetch) { - return - } - - var support = { - searchParams: 'URLSearchParams' in self, - iterable: 'Symbol' in self && 'iterator' in Symbol, - blob: 'FileReader' in self && 'Blob' in self && (function() { - try { - new Blob(); - return true - } catch(e) { - return false - } - })(), - formData: 'FormData' in self, - arrayBuffer: 'ArrayBuffer' in self - }; - - if (support.arrayBuffer) { - var viewClasses = [ - '[object Int8Array]', - '[object Uint8Array]', - '[object Uint8ClampedArray]', - '[object Int16Array]', - '[object Uint16Array]', - '[object Int32Array]', - '[object Uint32Array]', - '[object Float32Array]', - '[object Float64Array]' - ]; - - var isDataView = function(obj) { - return obj && DataView.prototype.isPrototypeOf(obj) - }; - - var isArrayBufferView = ArrayBuffer.isView || function(obj) { - return obj && viewClasses.indexOf(Object.prototype.toString.call(obj)) > -1 - }; - } - - function normalizeName(name) { - if (typeof name !== 'string') { - name = String(name); - } - if (/[^a-z0-9\-#$%&'*+.\^_`|~]/i.test(name)) { - throw new TypeError('Invalid character in header field name') - } - return name.toLowerCase() - } - - function normalizeValue(value) { - if (typeof value !== 'string') { - value = String(value); - } - return value - } - - // Build a destructive iterator for the value list - function iteratorFor(items) { - var iterator = { - next: function() { - var value = items.shift(); - return {done: value === undefined, value: value} - } - }; - - if (support.iterable) { - iterator[Symbol.iterator] = function() { - return iterator - }; - } - - return iterator - } - - function Headers(headers) { - this.map = {}; - - if (headers instanceof Headers) { - headers.forEach(function(value, name) { - this.append(name, value); - }, this); - } else if (Array.isArray(headers)) { - headers.forEach(function(header) { - this.append(header[0], header[1]); - }, this); - } else if (headers) { - Object.getOwnPropertyNames(headers).forEach(function(name) { - this.append(name, headers[name]); - }, this); - } - } - - Headers.prototype.append = function(name, value) { - name = normalizeName(name); - value = normalizeValue(value); - var oldValue = this.map[name]; - this.map[name] = oldValue ? oldValue+','+value : value; - }; - - Headers.prototype['delete'] = function(name) { - delete this.map[normalizeName(name)]; - }; - - Headers.prototype.get = function(name) { - name = normalizeName(name); - return this.has(name) ? this.map[name] : null - }; - - Headers.prototype.has = function(name) { - return this.map.hasOwnProperty(normalizeName(name)) - }; - - Headers.prototype.set = function(name, value) { - this.map[normalizeName(name)] = normalizeValue(value); - }; - - Headers.prototype.forEach = function(callback, thisArg) { - for (var name in this.map) { - if (this.map.hasOwnProperty(name)) { - callback.call(thisArg, this.map[name], name, this); - } - } - }; - - Headers.prototype.keys = function() { - var items = []; - this.forEach(function(value, name) { items.push(name); }); - return iteratorFor(items) - }; - - Headers.prototype.values = function() { - var items = []; - this.forEach(function(value) { items.push(value); }); - return iteratorFor(items) - }; - - Headers.prototype.entries = function() { - var items = []; - this.forEach(function(value, name) { items.push([name, value]); }); - return iteratorFor(items) - }; - - if (support.iterable) { - Headers.prototype[Symbol.iterator] = Headers.prototype.entries; - } - - function consumed(body) { - if (body.bodyUsed) { - return Promise.reject(new TypeError('Already read')) - } - body.bodyUsed = true; - } - - function fileReaderReady(reader) { - return new Promise(function(resolve, reject) { - reader.onload = function() { - resolve(reader.result); - }; - reader.onerror = function() { - reject(reader.error); - }; - }) - } - - function readBlobAsArrayBuffer(blob) { - var reader = new FileReader(); - var promise = fileReaderReady(reader); - reader.readAsArrayBuffer(blob); - return promise - } - - function readBlobAsText(blob) { - var reader = new FileReader(); - var promise = fileReaderReady(reader); - reader.readAsText(blob); - return promise - } - - function readArrayBufferAsText(buf) { - var view = new Uint8Array(buf); - var chars = new Array(view.length); - - for (var i = 0; i < view.length; i++) { - chars[i] = String.fromCharCode(view[i]); - } - return chars.join('') - } - - function bufferClone(buf) { - if (buf.slice) { - return buf.slice(0) - } else { - var view = new Uint8Array(buf.byteLength); - view.set(new Uint8Array(buf)); - return view.buffer - } - } - - function Body() { - this.bodyUsed = false; - - this._initBody = function(body) { - this._bodyInit = body; - if (!body) { - this._bodyText = ''; - } else if (typeof body === 'string') { - this._bodyText = body; - } else if (support.blob && Blob.prototype.isPrototypeOf(body)) { - this._bodyBlob = body; - } else if (support.formData && FormData.prototype.isPrototypeOf(body)) { - this._bodyFormData = body; - } else if (support.searchParams && URLSearchParams.prototype.isPrototypeOf(body)) { - this._bodyText = body.toString(); - } else if (support.arrayBuffer && support.blob && isDataView(body)) { - this._bodyArrayBuffer = bufferClone(body.buffer); - // IE 10-11 can't handle a DataView body. - this._bodyInit = new Blob([this._bodyArrayBuffer]); - } else if (support.arrayBuffer && (ArrayBuffer.prototype.isPrototypeOf(body) || isArrayBufferView(body))) { - this._bodyArrayBuffer = bufferClone(body); - } else { - throw new Error('unsupported BodyInit type') - } - - if (!this.headers.get('content-type')) { - if (typeof body === 'string') { - this.headers.set('content-type', 'text/plain;charset=UTF-8'); - } else if (this._bodyBlob && this._bodyBlob.type) { - this.headers.set('content-type', this._bodyBlob.type); - } else if (support.searchParams && URLSearchParams.prototype.isPrototypeOf(body)) { - this.headers.set('content-type', 'application/x-www-form-urlencoded;charset=UTF-8'); - } - } - }; - - if (support.blob) { - this.blob = function() { - var rejected = consumed(this); - if (rejected) { - return rejected - } - - if (this._bodyBlob) { - return Promise.resolve(this._bodyBlob) - } else if (this._bodyArrayBuffer) { - return Promise.resolve(new Blob([this._bodyArrayBuffer])) - } else if (this._bodyFormData) { - throw new Error('could not read FormData body as blob') - } else { - return Promise.resolve(new Blob([this._bodyText])) - } - }; - - this.arrayBuffer = function() { - if (this._bodyArrayBuffer) { - return consumed(this) || Promise.resolve(this._bodyArrayBuffer) - } else { - return this.blob().then(readBlobAsArrayBuffer) - } - }; - } - - this.text = function() { - var rejected = consumed(this); - if (rejected) { - return rejected - } - - if (this._bodyBlob) { - return readBlobAsText(this._bodyBlob) - } else if (this._bodyArrayBuffer) { - return Promise.resolve(readArrayBufferAsText(this._bodyArrayBuffer)) - } else if (this._bodyFormData) { - throw new Error('could not read FormData body as text') - } else { - return Promise.resolve(this._bodyText) - } - }; - - if (support.formData) { - this.formData = function() { - return this.text().then(decode) - }; - } - - this.json = function() { - return this.text().then(JSON.parse) - }; - - return this - } - - // HTTP methods whose capitalization should be normalized - var methods = ['DELETE', 'GET', 'HEAD', 'OPTIONS', 'POST', 'PUT']; - - function normalizeMethod(method) { - var upcased = method.toUpperCase(); - return (methods.indexOf(upcased) > -1) ? upcased : method - } - - function Request(input, options) { - options = options || {}; - var body = options.body; - - if (input instanceof Request) { - if (input.bodyUsed) { - throw new TypeError('Already read') - } - this.url = input.url; - this.credentials = input.credentials; - if (!options.headers) { - this.headers = new Headers(input.headers); - } - this.method = input.method; - this.mode = input.mode; - if (!body && input._bodyInit != null) { - body = input._bodyInit; - input.bodyUsed = true; - } - } else { - this.url = String(input); - } - - this.credentials = options.credentials || this.credentials || 'omit'; - if (options.headers || !this.headers) { - this.headers = new Headers(options.headers); - } - this.method = normalizeMethod(options.method || this.method || 'GET'); - this.mode = options.mode || this.mode || null; - this.referrer = null; - - if ((this.method === 'GET' || this.method === 'HEAD') && body) { - throw new TypeError('Body not allowed for GET or HEAD requests') - } - this._initBody(body); - } - - Request.prototype.clone = function() { - return new Request(this, { body: this._bodyInit }) - }; - - function decode(body) { - var form = new FormData(); - body.trim().split('&').forEach(function(bytes) { - if (bytes) { - var split = bytes.split('='); - var name = split.shift().replace(/\+/g, ' '); - var value = split.join('=').replace(/\+/g, ' '); - form.append(decodeURIComponent(name), decodeURIComponent(value)); - } - }); - return form - } - - function parseHeaders(rawHeaders) { - var headers = new Headers(); - // Replace instances of \r\n and \n followed by at least one space or horizontal tab with a space - // https://tools.ietf.org/html/rfc7230#section-3.2 - var preProcessedHeaders = rawHeaders.replace(/\r?\n[\t ]+/g, ' '); - preProcessedHeaders.split(/\r?\n/).forEach(function(line) { - var parts = line.split(':'); - var key = parts.shift().trim(); - if (key) { - var value = parts.join(':').trim(); - headers.append(key, value); - } - }); - return headers - } - - Body.call(Request.prototype); - - function Response(bodyInit, options) { - if (!options) { - options = {}; - } - - this.type = 'default'; - this.status = options.status === undefined ? 200 : options.status; - this.ok = this.status >= 200 && this.status < 300; - this.statusText = 'statusText' in options ? options.statusText : 'OK'; - this.headers = new Headers(options.headers); - this.url = options.url || ''; - this._initBody(bodyInit); - } - - Body.call(Response.prototype); - - Response.prototype.clone = function() { - return new Response(this._bodyInit, { - status: this.status, - statusText: this.statusText, - headers: new Headers(this.headers), - url: this.url - }) - }; - - Response.error = function() { - var response = new Response(null, {status: 0, statusText: ''}); - response.type = 'error'; - return response - }; - - var redirectStatuses = [301, 302, 303, 307, 308]; - - Response.redirect = function(url, status) { - if (redirectStatuses.indexOf(status) === -1) { - throw new RangeError('Invalid status code') - } - - return new Response(null, {status: status, headers: {location: url}}) - }; - - self.Headers = Headers; - self.Request = Request; - self.Response = Response; - - self.fetch = function(input, init) { - return new Promise(function(resolve, reject) { - var request = new Request(input, init); - var xhr = new XMLHttpRequest(); - - xhr.onload = function() { - var options = { - status: xhr.status, - statusText: xhr.statusText, - headers: parseHeaders(xhr.getAllResponseHeaders() || '') - }; - options.url = 'responseURL' in xhr ? xhr.responseURL : options.headers.get('X-Request-URL'); - var body = 'response' in xhr ? xhr.response : xhr.responseText; - resolve(new Response(body, options)); - }; - - xhr.onerror = function() { - reject(new TypeError('Network request failed')); - }; - - xhr.ontimeout = function() { - reject(new TypeError('Network request failed')); - }; - - xhr.open(request.method, request.url, true); - - if (request.credentials === 'include') { - xhr.withCredentials = true; - } else if (request.credentials === 'omit') { - xhr.withCredentials = false; - } - - if ('responseType' in xhr && support.blob) { - xhr.responseType = 'blob'; - } - - request.headers.forEach(function(value, name) { - xhr.setRequestHeader(name, value); - }); - - xhr.send(typeof request._bodyInit === 'undefined' ? null : request._bodyInit); - }) - }; - self.fetch.polyfill = true; -})(typeof self !== 'undefined' ? self : this); - -},{}],"hgKi":[function(require,module,exports) { -var Buffer = require("buffer").Buffer; -"use strict"; - -Object.defineProperty(exports, "__esModule", { - value: true -}); - -function padString(input) { - var segmentLength = 4; - var stringLength = input.length; - var diff = stringLength % segmentLength; - - if (!diff) { - return input; - } - - var position = stringLength; - var padLength = segmentLength - diff; - var paddedStringLength = stringLength + padLength; - var buffer = Buffer.alloc(paddedStringLength); - buffer.write(input); - - while (padLength--) { - buffer.write("=", position++); - } - - return buffer.toString(); -} - -exports.default = padString; -},{"buffer":"dskh"}],"oNlT":[function(require,module,exports) { -var Buffer = require("buffer").Buffer; -"use strict"; - -Object.defineProperty(exports, "__esModule", { - value: true -}); - -var pad_string_1 = require("./pad-string"); - -function encode(input, encoding) { - if (encoding === void 0) { - encoding = "utf8"; - } - - if (Buffer.isBuffer(input)) { - return fromBase64(input.toString("base64")); - } - - return fromBase64(Buffer.from(input, encoding).toString("base64")); -} - -; - -function decode(base64url, encoding) { - if (encoding === void 0) { - encoding = "utf8"; - } - - return Buffer.from(toBase64(base64url), "base64").toString(encoding); -} - -function toBase64(base64url) { - base64url = base64url.toString(); - return pad_string_1.default(base64url).replace(/\-/g, "+").replace(/_/g, "/"); -} - -function fromBase64(base64) { - return base64.replace(/=/g, "").replace(/\+/g, "-").replace(/\//g, "_"); -} - -function toBuffer(base64url) { - return Buffer.from(toBase64(base64url), "base64"); -} - -var base64url = encode; -base64url.encode = encode; -base64url.decode = decode; -base64url.toBase64 = toBase64; -base64url.fromBase64 = fromBase64; -base64url.toBuffer = toBuffer; -exports.default = base64url; -},{"./pad-string":"hgKi","buffer":"dskh"}],"XVTP":[function(require,module,exports) { -module.exports = require('./dist/base64url').default; -module.exports.default = module.exports; -},{"./dist/base64url":"oNlT"}],"WoCp":[function(require,module,exports) { -module.exports = { - "sha224WithRSAEncryption": { - "sign": "rsa", - "hash": "sha224", - "id": "302d300d06096086480165030402040500041c" - }, - "RSA-SHA224": { - "sign": "ecdsa/rsa", - "hash": "sha224", - "id": "302d300d06096086480165030402040500041c" - }, - "sha256WithRSAEncryption": { - "sign": "rsa", - "hash": "sha256", - "id": "3031300d060960864801650304020105000420" - }, - "RSA-SHA256": { - "sign": "ecdsa/rsa", - "hash": "sha256", - "id": "3031300d060960864801650304020105000420" - }, - "sha384WithRSAEncryption": { - "sign": "rsa", - "hash": "sha384", - "id": "3041300d060960864801650304020205000430" - }, - "RSA-SHA384": { - "sign": "ecdsa/rsa", - "hash": "sha384", - "id": "3041300d060960864801650304020205000430" - }, - "sha512WithRSAEncryption": { - "sign": "rsa", - "hash": "sha512", - "id": "3051300d060960864801650304020305000440" - }, - "RSA-SHA512": { - "sign": "ecdsa/rsa", - "hash": "sha512", - "id": "3051300d060960864801650304020305000440" - }, - "RSA-SHA1": { - "sign": "rsa", - "hash": "sha1", - "id": "3021300906052b0e03021a05000414" - }, - "ecdsa-with-SHA1": { - "sign": "ecdsa", - "hash": "sha1", - "id": "" - }, - "sha256": { - "sign": "ecdsa", - "hash": "sha256", - "id": "" - }, - "sha224": { - "sign": "ecdsa", - "hash": "sha224", - "id": "" - }, - "sha384": { - "sign": "ecdsa", - "hash": "sha384", - "id": "" - }, - "sha512": { - "sign": "ecdsa", - "hash": "sha512", - "id": "" - }, - "DSA-SHA": { - "sign": "dsa", - "hash": "sha1", - "id": "" - }, - "DSA-SHA1": { - "sign": "dsa", - "hash": "sha1", - "id": "" - }, - "DSA": { - "sign": "dsa", - "hash": "sha1", - "id": "" - }, - "DSA-WITH-SHA224": { - "sign": "dsa", - "hash": "sha224", - "id": "" - }, - "DSA-SHA224": { - "sign": "dsa", - "hash": "sha224", - "id": "" - }, - "DSA-WITH-SHA256": { - "sign": "dsa", - "hash": "sha256", - "id": "" - }, - "DSA-SHA256": { - "sign": "dsa", - "hash": "sha256", - "id": "" - }, - "DSA-WITH-SHA384": { - "sign": "dsa", - "hash": "sha384", - "id": "" - }, - "DSA-SHA384": { - "sign": "dsa", - "hash": "sha384", - "id": "" - }, - "DSA-WITH-SHA512": { - "sign": "dsa", - "hash": "sha512", - "id": "" - }, - "DSA-SHA512": { - "sign": "dsa", - "hash": "sha512", - "id": "" - }, - "DSA-RIPEMD160": { - "sign": "dsa", - "hash": "rmd160", - "id": "" - }, - "ripemd160WithRSA": { - "sign": "rsa", - "hash": "rmd160", - "id": "3021300906052b2403020105000414" - }, - "RSA-RIPEMD160": { - "sign": "rsa", - "hash": "rmd160", - "id": "3021300906052b2403020105000414" - }, - "md5WithRSAEncryption": { - "sign": "rsa", - "hash": "md5", - "id": "3020300c06082a864886f70d020505000410" - }, - "RSA-MD5": { - "sign": "rsa", - "hash": "md5", - "id": "3020300c06082a864886f70d020505000410" - } -} -; -},{}],"YKr5":[function(require,module,exports) { -module.exports = require('./browser/algorithms.json') - -},{"./browser/algorithms.json":"WoCp"}],"Zu0X":[function(require,module,exports) { -var Buffer = require("buffer").Buffer; -var MAX_ALLOC = Math.pow(2, 30) - 1; // default in iojs - -function checkBuffer(buf, name) { - if (typeof buf !== 'string' && !Buffer.isBuffer(buf)) { - throw new TypeError(name + ' must be a buffer or string'); - } -} - -module.exports = function (password, salt, iterations, keylen) { - checkBuffer(password, 'Password'); - checkBuffer(salt, 'Salt'); - - if (typeof iterations !== 'number') { - throw new TypeError('Iterations not a number'); - } - - if (iterations < 0) { - throw new TypeError('Bad iterations'); - } - - if (typeof keylen !== 'number') { - throw new TypeError('Key length not a number'); - } - - if (keylen < 0 || keylen > MAX_ALLOC || keylen !== keylen) { - /* eslint no-self-compare: 0 */ - throw new TypeError('Bad key length'); - } -}; -},{"buffer":"dskh"}],"ATA7":[function(require,module,exports) { -var process = require("process"); -var defaultEncoding; -/* istanbul ignore next */ - -if (true) { - defaultEncoding = 'utf-8'; -} else { - var pVersionMajor = parseInt(process.version.split('.')[0].slice(1), 10); - defaultEncoding = pVersionMajor >= 6 ? 'utf-8' : 'binary'; -} - -module.exports = defaultEncoding; -},{"process":"pBGv"}],"yOuH":[function(require,module,exports) { - -var md5 = require('create-hash/md5'); - -var RIPEMD160 = require('ripemd160'); - -var sha = require('sha.js'); - -var checkParameters = require('./precondition'); - -var defaultEncoding = require('./default-encoding'); - -var Buffer = require('safe-buffer').Buffer; - -var ZEROS = Buffer.alloc(128); -var sizes = { - md5: 16, - sha1: 20, - sha224: 28, - sha256: 32, - sha384: 48, - sha512: 64, - rmd160: 20, - ripemd160: 20 -}; - -function Hmac(alg, key, saltLen) { - var hash = getDigest(alg); - var blocksize = alg === 'sha512' || alg === 'sha384' ? 128 : 64; - - if (key.length > blocksize) { - key = hash(key); - } else if (key.length < blocksize) { - key = Buffer.concat([key, ZEROS], blocksize); - } - - var ipad = Buffer.allocUnsafe(blocksize + sizes[alg]); - var opad = Buffer.allocUnsafe(blocksize + sizes[alg]); - - for (var i = 0; i < blocksize; i++) { - ipad[i] = key[i] ^ 0x36; - opad[i] = key[i] ^ 0x5C; - } - - var ipad1 = Buffer.allocUnsafe(blocksize + saltLen + 4); - ipad.copy(ipad1, 0, 0, blocksize); - this.ipad1 = ipad1; - this.ipad2 = ipad; - this.opad = opad; - this.alg = alg; - this.blocksize = blocksize; - this.hash = hash; - this.size = sizes[alg]; -} - -Hmac.prototype.run = function (data, ipad) { - data.copy(ipad, this.blocksize); - var h = this.hash(ipad); - h.copy(this.opad, this.blocksize); - return this.hash(this.opad); -}; - -function getDigest(alg) { - function shaFunc(data) { - return sha(alg).update(data).digest(); - } - - function rmd160Func(data) { - return new RIPEMD160().update(data).digest(); - } - - if (alg === 'rmd160' || alg === 'ripemd160') return rmd160Func; - if (alg === 'md5') return md5; - return shaFunc; -} - -function pbkdf2(password, salt, iterations, keylen, digest) { - checkParameters(password, salt, iterations, keylen); - if (!Buffer.isBuffer(password)) password = Buffer.from(password, defaultEncoding); - if (!Buffer.isBuffer(salt)) salt = Buffer.from(salt, defaultEncoding); - digest = digest || 'sha1'; - var hmac = new Hmac(digest, password, salt.length); - var DK = Buffer.allocUnsafe(keylen); - var block1 = Buffer.allocUnsafe(salt.length + 4); - salt.copy(block1, 0, 0, salt.length); - var destPos = 0; - var hLen = sizes[digest]; - var l = Math.ceil(keylen / hLen); - - for (var i = 1; i <= l; i++) { - block1.writeUInt32BE(i, salt.length); - var T = hmac.run(block1, hmac.ipad1); - var U = T; - - for (var j = 1; j < iterations; j++) { - U = hmac.run(U, hmac.ipad2); - - for (var k = 0; k < hLen; k++) T[k] ^= U[k]; - } - - T.copy(DK, destPos); - destPos += hLen; - } - - return DK; -} - -module.exports = pbkdf2; -},{"create-hash/md5":"Mobq","ripemd160":"quyi","sha.js":"t0b9","./precondition":"Zu0X","./default-encoding":"ATA7","safe-buffer":"Wugr"}],"Q3c6":[function(require,module,exports) { - -var global = arguments[3]; -var process = require("process"); -var checkParameters = require('./precondition'); - -var defaultEncoding = require('./default-encoding'); - -var sync = require('./sync'); - -var Buffer = require('safe-buffer').Buffer; - -var ZERO_BUF; -var subtle = global.crypto && global.crypto.subtle; -var toBrowser = { - 'sha': 'SHA-1', - 'sha-1': 'SHA-1', - 'sha1': 'SHA-1', - 'sha256': 'SHA-256', - 'sha-256': 'SHA-256', - 'sha384': 'SHA-384', - 'sha-384': 'SHA-384', - 'sha-512': 'SHA-512', - 'sha512': 'SHA-512' -}; -var checks = []; - -function checkNative(algo) { - if (global.process && !global.process.browser) { - return Promise.resolve(false); - } - - if (!subtle || !subtle.importKey || !subtle.deriveBits) { - return Promise.resolve(false); - } - - if (checks[algo] !== undefined) { - return checks[algo]; - } - - ZERO_BUF = ZERO_BUF || Buffer.alloc(8); - var prom = browserPbkdf2(ZERO_BUF, ZERO_BUF, 10, 128, algo).then(function () { - return true; - }).catch(function () { - return false; - }); - checks[algo] = prom; - return prom; -} - -function browserPbkdf2(password, salt, iterations, length, algo) { - return subtle.importKey('raw', password, { - name: 'PBKDF2' - }, false, ['deriveBits']).then(function (key) { - return subtle.deriveBits({ - name: 'PBKDF2', - salt: salt, - iterations: iterations, - hash: { - name: algo - } - }, key, length << 3); - }).then(function (res) { - return Buffer.from(res); - }); -} - -function resolvePromise(promise, callback) { - promise.then(function (out) { - process.nextTick(function () { - callback(null, out); - }); - }, function (e) { - process.nextTick(function () { - callback(e); - }); - }); -} - -module.exports = function (password, salt, iterations, keylen, digest, callback) { - if (typeof digest === 'function') { - callback = digest; - digest = undefined; - } - - digest = digest || 'sha1'; - var algo = toBrowser[digest.toLowerCase()]; - - if (!algo || typeof global.Promise !== 'function') { - return process.nextTick(function () { - var out; - - try { - out = sync(password, salt, iterations, keylen, digest); - } catch (e) { - return callback(e); - } - - callback(null, out); - }); - } - - checkParameters(password, salt, iterations, keylen); - if (typeof callback !== 'function') throw new Error('No callback provided to pbkdf2'); - if (!Buffer.isBuffer(password)) password = Buffer.from(password, defaultEncoding); - if (!Buffer.isBuffer(salt)) salt = Buffer.from(salt, defaultEncoding); - resolvePromise(checkNative(algo).then(function (resp) { - if (resp) return browserPbkdf2(password, salt, iterations, keylen, algo); - return sync(password, salt, iterations, keylen, digest); - }), callback); -}; -},{"./precondition":"Zu0X","./default-encoding":"ATA7","./sync":"yOuH","safe-buffer":"Wugr","process":"pBGv"}],"BKdu":[function(require,module,exports) { -exports.pbkdf2 = require('./lib/async'); -exports.pbkdf2Sync = require('./lib/sync'); -},{"./lib/async":"Q3c6","./lib/sync":"yOuH"}],"a957":[function(require,module,exports) { -'use strict'; - -exports.readUInt32BE = function readUInt32BE(bytes, off) { - var res = (bytes[0 + off] << 24) | - (bytes[1 + off] << 16) | - (bytes[2 + off] << 8) | - bytes[3 + off]; - return res >>> 0; -}; - -exports.writeUInt32BE = function writeUInt32BE(bytes, value, off) { - bytes[0 + off] = value >>> 24; - bytes[1 + off] = (value >>> 16) & 0xff; - bytes[2 + off] = (value >>> 8) & 0xff; - bytes[3 + off] = value & 0xff; -}; - -exports.ip = function ip(inL, inR, out, off) { - var outL = 0; - var outR = 0; - - for (var i = 6; i >= 0; i -= 2) { - for (var j = 0; j <= 24; j += 8) { - outL <<= 1; - outL |= (inR >>> (j + i)) & 1; - } - for (var j = 0; j <= 24; j += 8) { - outL <<= 1; - outL |= (inL >>> (j + i)) & 1; - } - } - - for (var i = 6; i >= 0; i -= 2) { - for (var j = 1; j <= 25; j += 8) { - outR <<= 1; - outR |= (inR >>> (j + i)) & 1; - } - for (var j = 1; j <= 25; j += 8) { - outR <<= 1; - outR |= (inL >>> (j + i)) & 1; - } - } - - out[off + 0] = outL >>> 0; - out[off + 1] = outR >>> 0; -}; - -exports.rip = function rip(inL, inR, out, off) { - var outL = 0; - var outR = 0; - - for (var i = 0; i < 4; i++) { - for (var j = 24; j >= 0; j -= 8) { - outL <<= 1; - outL |= (inR >>> (j + i)) & 1; - outL <<= 1; - outL |= (inL >>> (j + i)) & 1; - } - } - for (var i = 4; i < 8; i++) { - for (var j = 24; j >= 0; j -= 8) { - outR <<= 1; - outR |= (inR >>> (j + i)) & 1; - outR <<= 1; - outR |= (inL >>> (j + i)) & 1; - } - } - - out[off + 0] = outL >>> 0; - out[off + 1] = outR >>> 0; -}; - -exports.pc1 = function pc1(inL, inR, out, off) { - var outL = 0; - var outR = 0; - - // 7, 15, 23, 31, 39, 47, 55, 63 - // 6, 14, 22, 30, 39, 47, 55, 63 - // 5, 13, 21, 29, 39, 47, 55, 63 - // 4, 12, 20, 28 - for (var i = 7; i >= 5; i--) { - for (var j = 0; j <= 24; j += 8) { - outL <<= 1; - outL |= (inR >> (j + i)) & 1; - } - for (var j = 0; j <= 24; j += 8) { - outL <<= 1; - outL |= (inL >> (j + i)) & 1; - } - } - for (var j = 0; j <= 24; j += 8) { - outL <<= 1; - outL |= (inR >> (j + i)) & 1; - } - - // 1, 9, 17, 25, 33, 41, 49, 57 - // 2, 10, 18, 26, 34, 42, 50, 58 - // 3, 11, 19, 27, 35, 43, 51, 59 - // 36, 44, 52, 60 - for (var i = 1; i <= 3; i++) { - for (var j = 0; j <= 24; j += 8) { - outR <<= 1; - outR |= (inR >> (j + i)) & 1; - } - for (var j = 0; j <= 24; j += 8) { - outR <<= 1; - outR |= (inL >> (j + i)) & 1; - } - } - for (var j = 0; j <= 24; j += 8) { - outR <<= 1; - outR |= (inL >> (j + i)) & 1; - } - - out[off + 0] = outL >>> 0; - out[off + 1] = outR >>> 0; -}; - -exports.r28shl = function r28shl(num, shift) { - return ((num << shift) & 0xfffffff) | (num >>> (28 - shift)); -}; - -var pc2table = [ - // inL => outL - 14, 11, 17, 4, 27, 23, 25, 0, - 13, 22, 7, 18, 5, 9, 16, 24, - 2, 20, 12, 21, 1, 8, 15, 26, - - // inR => outR - 15, 4, 25, 19, 9, 1, 26, 16, - 5, 11, 23, 8, 12, 7, 17, 0, - 22, 3, 10, 14, 6, 20, 27, 24 -]; - -exports.pc2 = function pc2(inL, inR, out, off) { - var outL = 0; - var outR = 0; - - var len = pc2table.length >>> 1; - for (var i = 0; i < len; i++) { - outL <<= 1; - outL |= (inL >>> pc2table[i]) & 0x1; - } - for (var i = len; i < pc2table.length; i++) { - outR <<= 1; - outR |= (inR >>> pc2table[i]) & 0x1; - } - - out[off + 0] = outL >>> 0; - out[off + 1] = outR >>> 0; -}; - -exports.expand = function expand(r, out, off) { - var outL = 0; - var outR = 0; - - outL = ((r & 1) << 5) | (r >>> 27); - for (var i = 23; i >= 15; i -= 4) { - outL <<= 6; - outL |= (r >>> i) & 0x3f; - } - for (var i = 11; i >= 3; i -= 4) { - outR |= (r >>> i) & 0x3f; - outR <<= 6; - } - outR |= ((r & 0x1f) << 1) | (r >>> 31); - - out[off + 0] = outL >>> 0; - out[off + 1] = outR >>> 0; -}; - -var sTable = [ - 14, 0, 4, 15, 13, 7, 1, 4, 2, 14, 15, 2, 11, 13, 8, 1, - 3, 10, 10, 6, 6, 12, 12, 11, 5, 9, 9, 5, 0, 3, 7, 8, - 4, 15, 1, 12, 14, 8, 8, 2, 13, 4, 6, 9, 2, 1, 11, 7, - 15, 5, 12, 11, 9, 3, 7, 14, 3, 10, 10, 0, 5, 6, 0, 13, - - 15, 3, 1, 13, 8, 4, 14, 7, 6, 15, 11, 2, 3, 8, 4, 14, - 9, 12, 7, 0, 2, 1, 13, 10, 12, 6, 0, 9, 5, 11, 10, 5, - 0, 13, 14, 8, 7, 10, 11, 1, 10, 3, 4, 15, 13, 4, 1, 2, - 5, 11, 8, 6, 12, 7, 6, 12, 9, 0, 3, 5, 2, 14, 15, 9, - - 10, 13, 0, 7, 9, 0, 14, 9, 6, 3, 3, 4, 15, 6, 5, 10, - 1, 2, 13, 8, 12, 5, 7, 14, 11, 12, 4, 11, 2, 15, 8, 1, - 13, 1, 6, 10, 4, 13, 9, 0, 8, 6, 15, 9, 3, 8, 0, 7, - 11, 4, 1, 15, 2, 14, 12, 3, 5, 11, 10, 5, 14, 2, 7, 12, - - 7, 13, 13, 8, 14, 11, 3, 5, 0, 6, 6, 15, 9, 0, 10, 3, - 1, 4, 2, 7, 8, 2, 5, 12, 11, 1, 12, 10, 4, 14, 15, 9, - 10, 3, 6, 15, 9, 0, 0, 6, 12, 10, 11, 1, 7, 13, 13, 8, - 15, 9, 1, 4, 3, 5, 14, 11, 5, 12, 2, 7, 8, 2, 4, 14, - - 2, 14, 12, 11, 4, 2, 1, 12, 7, 4, 10, 7, 11, 13, 6, 1, - 8, 5, 5, 0, 3, 15, 15, 10, 13, 3, 0, 9, 14, 8, 9, 6, - 4, 11, 2, 8, 1, 12, 11, 7, 10, 1, 13, 14, 7, 2, 8, 13, - 15, 6, 9, 15, 12, 0, 5, 9, 6, 10, 3, 4, 0, 5, 14, 3, - - 12, 10, 1, 15, 10, 4, 15, 2, 9, 7, 2, 12, 6, 9, 8, 5, - 0, 6, 13, 1, 3, 13, 4, 14, 14, 0, 7, 11, 5, 3, 11, 8, - 9, 4, 14, 3, 15, 2, 5, 12, 2, 9, 8, 5, 12, 15, 3, 10, - 7, 11, 0, 14, 4, 1, 10, 7, 1, 6, 13, 0, 11, 8, 6, 13, - - 4, 13, 11, 0, 2, 11, 14, 7, 15, 4, 0, 9, 8, 1, 13, 10, - 3, 14, 12, 3, 9, 5, 7, 12, 5, 2, 10, 15, 6, 8, 1, 6, - 1, 6, 4, 11, 11, 13, 13, 8, 12, 1, 3, 4, 7, 10, 14, 7, - 10, 9, 15, 5, 6, 0, 8, 15, 0, 14, 5, 2, 9, 3, 2, 12, - - 13, 1, 2, 15, 8, 13, 4, 8, 6, 10, 15, 3, 11, 7, 1, 4, - 10, 12, 9, 5, 3, 6, 14, 11, 5, 0, 0, 14, 12, 9, 7, 2, - 7, 2, 11, 1, 4, 14, 1, 7, 9, 4, 12, 10, 14, 8, 2, 13, - 0, 15, 6, 12, 10, 9, 13, 0, 15, 3, 3, 5, 5, 6, 8, 11 -]; - -exports.substitute = function substitute(inL, inR) { - var out = 0; - for (var i = 0; i < 4; i++) { - var b = (inL >>> (18 - i * 6)) & 0x3f; - var sb = sTable[i * 0x40 + b]; - - out <<= 4; - out |= sb; - } - for (var i = 0; i < 4; i++) { - var b = (inR >>> (18 - i * 6)) & 0x3f; - var sb = sTable[4 * 0x40 + i * 0x40 + b]; - - out <<= 4; - out |= sb; - } - return out >>> 0; -}; - -var permuteTable = [ - 16, 25, 12, 11, 3, 20, 4, 15, 31, 17, 9, 6, 27, 14, 1, 22, - 30, 24, 8, 18, 0, 5, 29, 23, 13, 19, 2, 26, 10, 21, 28, 7 -]; - -exports.permute = function permute(num) { - var out = 0; - for (var i = 0; i < permuteTable.length; i++) { - out <<= 1; - out |= (num >>> permuteTable[i]) & 0x1; - } - return out >>> 0; -}; - -exports.padSplit = function padSplit(num, size, group) { - var str = num.toString(2); - while (str.length < size) - str = '0' + str; - - var out = []; - for (var i = 0; i < size; i += group) - out.push(str.slice(i, i + group)); - return out.join(' '); -}; - -},{}],"eTzy":[function(require,module,exports) { -'use strict'; - -var assert = require('minimalistic-assert'); - -function Cipher(options) { - this.options = options; - - this.type = this.options.type; - this.blockSize = 8; - this._init(); - - this.buffer = new Array(this.blockSize); - this.bufferOff = 0; -} -module.exports = Cipher; - -Cipher.prototype._init = function _init() { - // Might be overrided -}; - -Cipher.prototype.update = function update(data) { - if (data.length === 0) - return []; - - if (this.type === 'decrypt') - return this._updateDecrypt(data); - else - return this._updateEncrypt(data); -}; - -Cipher.prototype._buffer = function _buffer(data, off) { - // Append data to buffer - var min = Math.min(this.buffer.length - this.bufferOff, data.length - off); - for (var i = 0; i < min; i++) - this.buffer[this.bufferOff + i] = data[off + i]; - this.bufferOff += min; - - // Shift next - return min; -}; - -Cipher.prototype._flushBuffer = function _flushBuffer(out, off) { - this._update(this.buffer, 0, out, off); - this.bufferOff = 0; - return this.blockSize; -}; - -Cipher.prototype._updateEncrypt = function _updateEncrypt(data) { - var inputOff = 0; - var outputOff = 0; - - var count = ((this.bufferOff + data.length) / this.blockSize) | 0; - var out = new Array(count * this.blockSize); - - if (this.bufferOff !== 0) { - inputOff += this._buffer(data, inputOff); - - if (this.bufferOff === this.buffer.length) - outputOff += this._flushBuffer(out, outputOff); - } - - // Write blocks - var max = data.length - ((data.length - inputOff) % this.blockSize); - for (; inputOff < max; inputOff += this.blockSize) { - this._update(data, inputOff, out, outputOff); - outputOff += this.blockSize; - } - - // Queue rest - for (; inputOff < data.length; inputOff++, this.bufferOff++) - this.buffer[this.bufferOff] = data[inputOff]; - - return out; -}; - -Cipher.prototype._updateDecrypt = function _updateDecrypt(data) { - var inputOff = 0; - var outputOff = 0; - - var count = Math.ceil((this.bufferOff + data.length) / this.blockSize) - 1; - var out = new Array(count * this.blockSize); - - // TODO(indutny): optimize it, this is far from optimal - for (; count > 0; count--) { - inputOff += this._buffer(data, inputOff); - outputOff += this._flushBuffer(out, outputOff); - } - - // Buffer rest of the input - inputOff += this._buffer(data, inputOff); - - return out; -}; - -Cipher.prototype.final = function final(buffer) { - var first; - if (buffer) - first = this.update(buffer); - - var last; - if (this.type === 'encrypt') - last = this._finalEncrypt(); - else - last = this._finalDecrypt(); - - if (first) - return first.concat(last); - else - return last; -}; - -Cipher.prototype._pad = function _pad(buffer, off) { - if (off === 0) - return false; - - while (off < buffer.length) - buffer[off++] = 0; - - return true; -}; - -Cipher.prototype._finalEncrypt = function _finalEncrypt() { - if (!this._pad(this.buffer, this.bufferOff)) - return []; - - var out = new Array(this.blockSize); - this._update(this.buffer, 0, out, 0); - return out; -}; - -Cipher.prototype._unpad = function _unpad(buffer) { - return buffer; -}; - -Cipher.prototype._finalDecrypt = function _finalDecrypt() { - assert.equal(this.bufferOff, this.blockSize, 'Not enough data to decrypt'); - var out = new Array(this.blockSize); - this._flushBuffer(out, 0); - - return this._unpad(out); -}; - -},{"minimalistic-assert":"MpuC"}],"UVxA":[function(require,module,exports) { -'use strict'; - -var assert = require('minimalistic-assert'); -var inherits = require('inherits'); - -var des = require('../des'); -var utils = des.utils; -var Cipher = des.Cipher; - -function DESState() { - this.tmp = new Array(2); - this.keys = null; -} - -function DES(options) { - Cipher.call(this, options); - - var state = new DESState(); - this._desState = state; - - this.deriveKeys(state, options.key); -} -inherits(DES, Cipher); -module.exports = DES; - -DES.create = function create(options) { - return new DES(options); -}; - -var shiftTable = [ - 1, 1, 2, 2, 2, 2, 2, 2, - 1, 2, 2, 2, 2, 2, 2, 1 -]; - -DES.prototype.deriveKeys = function deriveKeys(state, key) { - state.keys = new Array(16 * 2); - - assert.equal(key.length, this.blockSize, 'Invalid key length'); - - var kL = utils.readUInt32BE(key, 0); - var kR = utils.readUInt32BE(key, 4); - - utils.pc1(kL, kR, state.tmp, 0); - kL = state.tmp[0]; - kR = state.tmp[1]; - for (var i = 0; i < state.keys.length; i += 2) { - var shift = shiftTable[i >>> 1]; - kL = utils.r28shl(kL, shift); - kR = utils.r28shl(kR, shift); - utils.pc2(kL, kR, state.keys, i); - } -}; - -DES.prototype._update = function _update(inp, inOff, out, outOff) { - var state = this._desState; - - var l = utils.readUInt32BE(inp, inOff); - var r = utils.readUInt32BE(inp, inOff + 4); - - // Initial Permutation - utils.ip(l, r, state.tmp, 0); - l = state.tmp[0]; - r = state.tmp[1]; - - if (this.type === 'encrypt') - this._encrypt(state, l, r, state.tmp, 0); - else - this._decrypt(state, l, r, state.tmp, 0); - - l = state.tmp[0]; - r = state.tmp[1]; - - utils.writeUInt32BE(out, l, outOff); - utils.writeUInt32BE(out, r, outOff + 4); -}; - -DES.prototype._pad = function _pad(buffer, off) { - var value = buffer.length - off; - for (var i = off; i < buffer.length; i++) - buffer[i] = value; - - return true; -}; - -DES.prototype._unpad = function _unpad(buffer) { - var pad = buffer[buffer.length - 1]; - for (var i = buffer.length - pad; i < buffer.length; i++) - assert.equal(buffer[i], pad); - - return buffer.slice(0, buffer.length - pad); -}; - -DES.prototype._encrypt = function _encrypt(state, lStart, rStart, out, off) { - var l = lStart; - var r = rStart; - - // Apply f() x16 times - for (var i = 0; i < state.keys.length; i += 2) { - var keyL = state.keys[i]; - var keyR = state.keys[i + 1]; - - // f(r, k) - utils.expand(r, state.tmp, 0); - - keyL ^= state.tmp[0]; - keyR ^= state.tmp[1]; - var s = utils.substitute(keyL, keyR); - var f = utils.permute(s); - - var t = r; - r = (l ^ f) >>> 0; - l = t; - } - - // Reverse Initial Permutation - utils.rip(r, l, out, off); -}; - -DES.prototype._decrypt = function _decrypt(state, lStart, rStart, out, off) { - var l = rStart; - var r = lStart; - - // Apply f() x16 times - for (var i = state.keys.length - 2; i >= 0; i -= 2) { - var keyL = state.keys[i]; - var keyR = state.keys[i + 1]; - - // f(r, k) - utils.expand(l, state.tmp, 0); - - keyL ^= state.tmp[0]; - keyR ^= state.tmp[1]; - var s = utils.substitute(keyL, keyR); - var f = utils.permute(s); - - var t = l; - l = (r ^ f) >>> 0; - r = t; - } - - // Reverse Initial Permutation - utils.rip(l, r, out, off); -}; - -},{"minimalistic-assert":"MpuC","inherits":"Bm0n","../des":"Tikc"}],"NN3V":[function(require,module,exports) { -'use strict'; - -var assert = require('minimalistic-assert'); -var inherits = require('inherits'); - -var proto = {}; - -function CBCState(iv) { - assert.equal(iv.length, 8, 'Invalid IV length'); - - this.iv = new Array(8); - for (var i = 0; i < this.iv.length; i++) - this.iv[i] = iv[i]; -} - -function instantiate(Base) { - function CBC(options) { - Base.call(this, options); - this._cbcInit(); - } - inherits(CBC, Base); - - var keys = Object.keys(proto); - for (var i = 0; i < keys.length; i++) { - var key = keys[i]; - CBC.prototype[key] = proto[key]; - } - - CBC.create = function create(options) { - return new CBC(options); - }; - - return CBC; -} - -exports.instantiate = instantiate; - -proto._cbcInit = function _cbcInit() { - var state = new CBCState(this.options.iv); - this._cbcState = state; -}; - -proto._update = function _update(inp, inOff, out, outOff) { - var state = this._cbcState; - var superProto = this.constructor.super_.prototype; - - var iv = state.iv; - if (this.type === 'encrypt') { - for (var i = 0; i < this.blockSize; i++) - iv[i] ^= inp[inOff + i]; - - superProto._update.call(this, iv, 0, out, outOff); - - for (var i = 0; i < this.blockSize; i++) - iv[i] = out[outOff + i]; - } else { - superProto._update.call(this, inp, inOff, out, outOff); - - for (var i = 0; i < this.blockSize; i++) - out[outOff + i] ^= iv[i]; - - for (var i = 0; i < this.blockSize; i++) - iv[i] = inp[inOff + i]; - } -}; - -},{"minimalistic-assert":"MpuC","inherits":"Bm0n"}],"jkwx":[function(require,module,exports) { -'use strict'; - -var assert = require('minimalistic-assert'); -var inherits = require('inherits'); - -var des = require('../des'); -var Cipher = des.Cipher; -var DES = des.DES; - -function EDEState(type, key) { - assert.equal(key.length, 24, 'Invalid key length'); - - var k1 = key.slice(0, 8); - var k2 = key.slice(8, 16); - var k3 = key.slice(16, 24); - - if (type === 'encrypt') { - this.ciphers = [ - DES.create({ type: 'encrypt', key: k1 }), - DES.create({ type: 'decrypt', key: k2 }), - DES.create({ type: 'encrypt', key: k3 }) - ]; - } else { - this.ciphers = [ - DES.create({ type: 'decrypt', key: k3 }), - DES.create({ type: 'encrypt', key: k2 }), - DES.create({ type: 'decrypt', key: k1 }) - ]; - } -} - -function EDE(options) { - Cipher.call(this, options); - - var state = new EDEState(this.type, this.options.key); - this._edeState = state; -} -inherits(EDE, Cipher); - -module.exports = EDE; - -EDE.create = function create(options) { - return new EDE(options); -}; - -EDE.prototype._update = function _update(inp, inOff, out, outOff) { - var state = this._edeState; - - state.ciphers[0]._update(inp, inOff, out, outOff); - state.ciphers[1]._update(out, outOff, out, outOff); - state.ciphers[2]._update(out, outOff, out, outOff); -}; - -EDE.prototype._pad = DES.prototype._pad; -EDE.prototype._unpad = DES.prototype._unpad; - -},{"minimalistic-assert":"MpuC","inherits":"Bm0n","../des":"Tikc"}],"Tikc":[function(require,module,exports) { -'use strict'; - -exports.utils = require('./des/utils'); -exports.Cipher = require('./des/cipher'); -exports.DES = require('./des/des'); -exports.CBC = require('./des/cbc'); -exports.EDE = require('./des/ede'); - -},{"./des/utils":"a957","./des/cipher":"eTzy","./des/des":"UVxA","./des/cbc":"NN3V","./des/ede":"jkwx"}],"sKVA":[function(require,module,exports) { - -var CipherBase = require('cipher-base') -var des = require('des.js') -var inherits = require('inherits') -var Buffer = require('safe-buffer').Buffer - -var modes = { - 'des-ede3-cbc': des.CBC.instantiate(des.EDE), - 'des-ede3': des.EDE, - 'des-ede-cbc': des.CBC.instantiate(des.EDE), - 'des-ede': des.EDE, - 'des-cbc': des.CBC.instantiate(des.DES), - 'des-ecb': des.DES -} -modes.des = modes['des-cbc'] -modes.des3 = modes['des-ede3-cbc'] -module.exports = DES -inherits(DES, CipherBase) -function DES (opts) { - CipherBase.call(this) - var modeName = opts.mode.toLowerCase() - var mode = modes[modeName] - var type - if (opts.decrypt) { - type = 'decrypt' - } else { - type = 'encrypt' - } - var key = opts.key - if (!Buffer.isBuffer(key)) { - key = Buffer.from(key) - } - if (modeName === 'des-ede' || modeName === 'des-ede-cbc') { - key = Buffer.concat([key, key.slice(0, 8)]) - } - var iv = opts.iv - if (!Buffer.isBuffer(iv)) { - iv = Buffer.from(iv) - } - this._des = mode.create({ - key: key, - iv: iv, - type: type - }) -} -DES.prototype._update = function (data) { - return Buffer.from(this._des.update(data)) -} -DES.prototype._final = function () { - return Buffer.from(this._des.final()) -} - -},{"cipher-base":"bjfr","des.js":"Tikc","inherits":"Bm0n","safe-buffer":"Wugr"}],"deTC":[function(require,module,exports) { -exports.encrypt = function (self, block) { - return self._cipher.encryptBlock(block) -} - -exports.decrypt = function (self, block) { - return self._cipher.decryptBlock(block) -} - -},{}],"Bi15":[function(require,module,exports) { -var Buffer = require("buffer").Buffer; -module.exports = function xor (a, b) { - var length = Math.min(a.length, b.length) - var buffer = new Buffer(length) - - for (var i = 0; i < length; ++i) { - buffer[i] = a[i] ^ b[i] - } - - return buffer -} - -},{"buffer":"dskh"}],"n4Db":[function(require,module,exports) { -var xor = require('buffer-xor') - -exports.encrypt = function (self, block) { - var data = xor(block, self._prev) - - self._prev = self._cipher.encryptBlock(data) - return self._prev -} - -exports.decrypt = function (self, block) { - var pad = self._prev - - self._prev = block - var out = self._cipher.decryptBlock(block) - - return xor(out, pad) -} - -},{"buffer-xor":"Bi15"}],"G0zN":[function(require,module,exports) { - -var Buffer = require('safe-buffer').Buffer -var xor = require('buffer-xor') - -function encryptStart (self, data, decrypt) { - var len = data.length - var out = xor(data, self._cache) - self._cache = self._cache.slice(len) - self._prev = Buffer.concat([self._prev, decrypt ? data : out]) - return out -} - -exports.encrypt = function (self, data, decrypt) { - var out = Buffer.allocUnsafe(0) - var len - - while (data.length) { - if (self._cache.length === 0) { - self._cache = self._cipher.encryptBlock(self._prev) - self._prev = Buffer.allocUnsafe(0) - } - - if (self._cache.length <= data.length) { - len = self._cache.length - out = Buffer.concat([out, encryptStart(self, data.slice(0, len), decrypt)]) - data = data.slice(len) - } else { - out = Buffer.concat([out, encryptStart(self, data, decrypt)]) - break - } - } - - return out -} - -},{"safe-buffer":"Wugr","buffer-xor":"Bi15"}],"GBMF":[function(require,module,exports) { - -var Buffer = require('safe-buffer').Buffer - -function encryptByte (self, byteParam, decrypt) { - var pad = self._cipher.encryptBlock(self._prev) - var out = pad[0] ^ byteParam - - self._prev = Buffer.concat([ - self._prev.slice(1), - Buffer.from([decrypt ? byteParam : out]) - ]) - - return out -} - -exports.encrypt = function (self, chunk, decrypt) { - var len = chunk.length - var out = Buffer.allocUnsafe(len) - var i = -1 - - while (++i < len) { - out[i] = encryptByte(self, chunk[i], decrypt) - } - - return out -} - -},{"safe-buffer":"Wugr"}],"JZn9":[function(require,module,exports) { - -var Buffer = require('safe-buffer').Buffer - -function encryptByte (self, byteParam, decrypt) { - var pad - var i = -1 - var len = 8 - var out = 0 - var bit, value - while (++i < len) { - pad = self._cipher.encryptBlock(self._prev) - bit = (byteParam & (1 << (7 - i))) ? 0x80 : 0 - value = pad[0] ^ bit - out += ((value & 0x80) >> (i % 8)) - self._prev = shiftIn(self._prev, decrypt ? bit : value) - } - return out -} - -function shiftIn (buffer, value) { - var len = buffer.length - var i = -1 - var out = Buffer.allocUnsafe(buffer.length) - buffer = Buffer.concat([buffer, Buffer.from([value])]) - - while (++i < len) { - out[i] = buffer[i] << 1 | buffer[i + 1] >> (7) - } - - return out -} - -exports.encrypt = function (self, chunk, decrypt) { - var len = chunk.length - var out = Buffer.allocUnsafe(len) - var i = -1 - - while (++i < len) { - out[i] = encryptByte(self, chunk[i], decrypt) - } - - return out -} - -},{"safe-buffer":"Wugr"}],"fJ7E":[function(require,module,exports) { -var Buffer = require("buffer").Buffer; -var xor = require('buffer-xor') - -function getBlock (self) { - self._prev = self._cipher.encryptBlock(self._prev) - return self._prev -} - -exports.encrypt = function (self, chunk) { - while (self._cache.length < chunk.length) { - self._cache = Buffer.concat([self._cache, getBlock(self)]) - } - - var pad = self._cache.slice(0, chunk.length) - self._cache = self._cache.slice(chunk.length) - return xor(chunk, pad) -} - -},{"buffer-xor":"Bi15","buffer":"dskh"}],"EFOV":[function(require,module,exports) { -function incr32 (iv) { - var len = iv.length - var item - while (len--) { - item = iv.readUInt8(len) - if (item === 255) { - iv.writeUInt8(0, len) - } else { - item++ - iv.writeUInt8(item, len) - break - } - } -} -module.exports = incr32 - -},{}],"Iyxz":[function(require,module,exports) { - -var xor = require('buffer-xor') -var Buffer = require('safe-buffer').Buffer -var incr32 = require('../incr32') - -function getBlock (self) { - var out = self._cipher.encryptBlockRaw(self._prev) - incr32(self._prev) - return out -} - -var blockSize = 16 -exports.encrypt = function (self, chunk) { - var chunkNum = Math.ceil(chunk.length / blockSize) - var start = self._cache.length - self._cache = Buffer.concat([ - self._cache, - Buffer.allocUnsafe(chunkNum * blockSize) - ]) - for (var i = 0; i < chunkNum; i++) { - var out = getBlock(self) - var offset = start + i * blockSize - self._cache.writeUInt32BE(out[0], offset + 0) - self._cache.writeUInt32BE(out[1], offset + 4) - self._cache.writeUInt32BE(out[2], offset + 8) - self._cache.writeUInt32BE(out[3], offset + 12) - } - var pad = self._cache.slice(0, chunk.length) - self._cache = self._cache.slice(chunk.length) - return xor(chunk, pad) -} - -},{"buffer-xor":"Bi15","safe-buffer":"Wugr","../incr32":"EFOV"}],"veqz":[function(require,module,exports) { -module.exports = { - "aes-128-ecb": { - "cipher": "AES", - "key": 128, - "iv": 0, - "mode": "ECB", - "type": "block" - }, - "aes-192-ecb": { - "cipher": "AES", - "key": 192, - "iv": 0, - "mode": "ECB", - "type": "block" - }, - "aes-256-ecb": { - "cipher": "AES", - "key": 256, - "iv": 0, - "mode": "ECB", - "type": "block" - }, - "aes-128-cbc": { - "cipher": "AES", - "key": 128, - "iv": 16, - "mode": "CBC", - "type": "block" - }, - "aes-192-cbc": { - "cipher": "AES", - "key": 192, - "iv": 16, - "mode": "CBC", - "type": "block" - }, - "aes-256-cbc": { - "cipher": "AES", - "key": 256, - "iv": 16, - "mode": "CBC", - "type": "block" - }, - "aes128": { - "cipher": "AES", - "key": 128, - "iv": 16, - "mode": "CBC", - "type": "block" - }, - "aes192": { - "cipher": "AES", - "key": 192, - "iv": 16, - "mode": "CBC", - "type": "block" - }, - "aes256": { - "cipher": "AES", - "key": 256, - "iv": 16, - "mode": "CBC", - "type": "block" - }, - "aes-128-cfb": { - "cipher": "AES", - "key": 128, - "iv": 16, - "mode": "CFB", - "type": "stream" - }, - "aes-192-cfb": { - "cipher": "AES", - "key": 192, - "iv": 16, - "mode": "CFB", - "type": "stream" - }, - "aes-256-cfb": { - "cipher": "AES", - "key": 256, - "iv": 16, - "mode": "CFB", - "type": "stream" - }, - "aes-128-cfb8": { - "cipher": "AES", - "key": 128, - "iv": 16, - "mode": "CFB8", - "type": "stream" - }, - "aes-192-cfb8": { - "cipher": "AES", - "key": 192, - "iv": 16, - "mode": "CFB8", - "type": "stream" - }, - "aes-256-cfb8": { - "cipher": "AES", - "key": 256, - "iv": 16, - "mode": "CFB8", - "type": "stream" - }, - "aes-128-cfb1": { - "cipher": "AES", - "key": 128, - "iv": 16, - "mode": "CFB1", - "type": "stream" - }, - "aes-192-cfb1": { - "cipher": "AES", - "key": 192, - "iv": 16, - "mode": "CFB1", - "type": "stream" - }, - "aes-256-cfb1": { - "cipher": "AES", - "key": 256, - "iv": 16, - "mode": "CFB1", - "type": "stream" - }, - "aes-128-ofb": { - "cipher": "AES", - "key": 128, - "iv": 16, - "mode": "OFB", - "type": "stream" - }, - "aes-192-ofb": { - "cipher": "AES", - "key": 192, - "iv": 16, - "mode": "OFB", - "type": "stream" - }, - "aes-256-ofb": { - "cipher": "AES", - "key": 256, - "iv": 16, - "mode": "OFB", - "type": "stream" - }, - "aes-128-ctr": { - "cipher": "AES", - "key": 128, - "iv": 16, - "mode": "CTR", - "type": "stream" - }, - "aes-192-ctr": { - "cipher": "AES", - "key": 192, - "iv": 16, - "mode": "CTR", - "type": "stream" - }, - "aes-256-ctr": { - "cipher": "AES", - "key": 256, - "iv": 16, - "mode": "CTR", - "type": "stream" - }, - "aes-128-gcm": { - "cipher": "AES", - "key": 128, - "iv": 12, - "mode": "GCM", - "type": "auth" - }, - "aes-192-gcm": { - "cipher": "AES", - "key": 192, - "iv": 12, - "mode": "GCM", - "type": "auth" - }, - "aes-256-gcm": { - "cipher": "AES", - "key": 256, - "iv": 12, - "mode": "GCM", - "type": "auth" - } -} -; -},{}],"zdSg":[function(require,module,exports) { -var modeModules = { - ECB: require('./ecb'), - CBC: require('./cbc'), - CFB: require('./cfb'), - CFB8: require('./cfb8'), - CFB1: require('./cfb1'), - OFB: require('./ofb'), - CTR: require('./ctr'), - GCM: require('./ctr') -} - -var modes = require('./list.json') - -for (var key in modes) { - modes[key].module = modeModules[modes[key].mode] -} - -module.exports = modes - -},{"./ecb":"deTC","./cbc":"n4Db","./cfb":"G0zN","./cfb8":"GBMF","./cfb1":"JZn9","./ofb":"fJ7E","./ctr":"Iyxz","./list.json":"veqz"}],"dNn4":[function(require,module,exports) { - -// based on the aes implimentation in triple sec -// https://github.com/keybase/triplesec -// which is in turn based on the one from crypto-js -// https://code.google.com/p/crypto-js/ - -var Buffer = require('safe-buffer').Buffer - -function asUInt32Array (buf) { - if (!Buffer.isBuffer(buf)) buf = Buffer.from(buf) - - var len = (buf.length / 4) | 0 - var out = new Array(len) - - for (var i = 0; i < len; i++) { - out[i] = buf.readUInt32BE(i * 4) - } - - return out -} - -function scrubVec (v) { - for (var i = 0; i < v.length; v++) { - v[i] = 0 - } -} - -function cryptBlock (M, keySchedule, SUB_MIX, SBOX, nRounds) { - var SUB_MIX0 = SUB_MIX[0] - var SUB_MIX1 = SUB_MIX[1] - var SUB_MIX2 = SUB_MIX[2] - var SUB_MIX3 = SUB_MIX[3] - - var s0 = M[0] ^ keySchedule[0] - var s1 = M[1] ^ keySchedule[1] - var s2 = M[2] ^ keySchedule[2] - var s3 = M[3] ^ keySchedule[3] - var t0, t1, t2, t3 - var ksRow = 4 - - for (var round = 1; round < nRounds; round++) { - t0 = SUB_MIX0[s0 >>> 24] ^ SUB_MIX1[(s1 >>> 16) & 0xff] ^ SUB_MIX2[(s2 >>> 8) & 0xff] ^ SUB_MIX3[s3 & 0xff] ^ keySchedule[ksRow++] - t1 = SUB_MIX0[s1 >>> 24] ^ SUB_MIX1[(s2 >>> 16) & 0xff] ^ SUB_MIX2[(s3 >>> 8) & 0xff] ^ SUB_MIX3[s0 & 0xff] ^ keySchedule[ksRow++] - t2 = SUB_MIX0[s2 >>> 24] ^ SUB_MIX1[(s3 >>> 16) & 0xff] ^ SUB_MIX2[(s0 >>> 8) & 0xff] ^ SUB_MIX3[s1 & 0xff] ^ keySchedule[ksRow++] - t3 = SUB_MIX0[s3 >>> 24] ^ SUB_MIX1[(s0 >>> 16) & 0xff] ^ SUB_MIX2[(s1 >>> 8) & 0xff] ^ SUB_MIX3[s2 & 0xff] ^ keySchedule[ksRow++] - s0 = t0 - s1 = t1 - s2 = t2 - s3 = t3 - } - - t0 = ((SBOX[s0 >>> 24] << 24) | (SBOX[(s1 >>> 16) & 0xff] << 16) | (SBOX[(s2 >>> 8) & 0xff] << 8) | SBOX[s3 & 0xff]) ^ keySchedule[ksRow++] - t1 = ((SBOX[s1 >>> 24] << 24) | (SBOX[(s2 >>> 16) & 0xff] << 16) | (SBOX[(s3 >>> 8) & 0xff] << 8) | SBOX[s0 & 0xff]) ^ keySchedule[ksRow++] - t2 = ((SBOX[s2 >>> 24] << 24) | (SBOX[(s3 >>> 16) & 0xff] << 16) | (SBOX[(s0 >>> 8) & 0xff] << 8) | SBOX[s1 & 0xff]) ^ keySchedule[ksRow++] - t3 = ((SBOX[s3 >>> 24] << 24) | (SBOX[(s0 >>> 16) & 0xff] << 16) | (SBOX[(s1 >>> 8) & 0xff] << 8) | SBOX[s2 & 0xff]) ^ keySchedule[ksRow++] - t0 = t0 >>> 0 - t1 = t1 >>> 0 - t2 = t2 >>> 0 - t3 = t3 >>> 0 - - return [t0, t1, t2, t3] -} - -// AES constants -var RCON = [0x00, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x1b, 0x36] -var G = (function () { - // Compute double table - var d = new Array(256) - for (var j = 0; j < 256; j++) { - if (j < 128) { - d[j] = j << 1 - } else { - d[j] = (j << 1) ^ 0x11b - } - } - - var SBOX = [] - var INV_SBOX = [] - var SUB_MIX = [[], [], [], []] - var INV_SUB_MIX = [[], [], [], []] - - // Walk GF(2^8) - var x = 0 - var xi = 0 - for (var i = 0; i < 256; ++i) { - // Compute sbox - var sx = xi ^ (xi << 1) ^ (xi << 2) ^ (xi << 3) ^ (xi << 4) - sx = (sx >>> 8) ^ (sx & 0xff) ^ 0x63 - SBOX[x] = sx - INV_SBOX[sx] = x - - // Compute multiplication - var x2 = d[x] - var x4 = d[x2] - var x8 = d[x4] - - // Compute sub bytes, mix columns tables - var t = (d[sx] * 0x101) ^ (sx * 0x1010100) - SUB_MIX[0][x] = (t << 24) | (t >>> 8) - SUB_MIX[1][x] = (t << 16) | (t >>> 16) - SUB_MIX[2][x] = (t << 8) | (t >>> 24) - SUB_MIX[3][x] = t - - // Compute inv sub bytes, inv mix columns tables - t = (x8 * 0x1010101) ^ (x4 * 0x10001) ^ (x2 * 0x101) ^ (x * 0x1010100) - INV_SUB_MIX[0][sx] = (t << 24) | (t >>> 8) - INV_SUB_MIX[1][sx] = (t << 16) | (t >>> 16) - INV_SUB_MIX[2][sx] = (t << 8) | (t >>> 24) - INV_SUB_MIX[3][sx] = t - - if (x === 0) { - x = xi = 1 - } else { - x = x2 ^ d[d[d[x8 ^ x2]]] - xi ^= d[d[xi]] - } - } - - return { - SBOX: SBOX, - INV_SBOX: INV_SBOX, - SUB_MIX: SUB_MIX, - INV_SUB_MIX: INV_SUB_MIX - } -})() - -function AES (key) { - this._key = asUInt32Array(key) - this._reset() -} - -AES.blockSize = 4 * 4 -AES.keySize = 256 / 8 -AES.prototype.blockSize = AES.blockSize -AES.prototype.keySize = AES.keySize -AES.prototype._reset = function () { - var keyWords = this._key - var keySize = keyWords.length - var nRounds = keySize + 6 - var ksRows = (nRounds + 1) * 4 - - var keySchedule = [] - for (var k = 0; k < keySize; k++) { - keySchedule[k] = keyWords[k] - } - - for (k = keySize; k < ksRows; k++) { - var t = keySchedule[k - 1] - - if (k % keySize === 0) { - t = (t << 8) | (t >>> 24) - t = - (G.SBOX[t >>> 24] << 24) | - (G.SBOX[(t >>> 16) & 0xff] << 16) | - (G.SBOX[(t >>> 8) & 0xff] << 8) | - (G.SBOX[t & 0xff]) - - t ^= RCON[(k / keySize) | 0] << 24 - } else if (keySize > 6 && k % keySize === 4) { - t = - (G.SBOX[t >>> 24] << 24) | - (G.SBOX[(t >>> 16) & 0xff] << 16) | - (G.SBOX[(t >>> 8) & 0xff] << 8) | - (G.SBOX[t & 0xff]) - } - - keySchedule[k] = keySchedule[k - keySize] ^ t - } - - var invKeySchedule = [] - for (var ik = 0; ik < ksRows; ik++) { - var ksR = ksRows - ik - var tt = keySchedule[ksR - (ik % 4 ? 0 : 4)] - - if (ik < 4 || ksR <= 4) { - invKeySchedule[ik] = tt - } else { - invKeySchedule[ik] = - G.INV_SUB_MIX[0][G.SBOX[tt >>> 24]] ^ - G.INV_SUB_MIX[1][G.SBOX[(tt >>> 16) & 0xff]] ^ - G.INV_SUB_MIX[2][G.SBOX[(tt >>> 8) & 0xff]] ^ - G.INV_SUB_MIX[3][G.SBOX[tt & 0xff]] - } - } - - this._nRounds = nRounds - this._keySchedule = keySchedule - this._invKeySchedule = invKeySchedule -} - -AES.prototype.encryptBlockRaw = function (M) { - M = asUInt32Array(M) - return cryptBlock(M, this._keySchedule, G.SUB_MIX, G.SBOX, this._nRounds) -} - -AES.prototype.encryptBlock = function (M) { - var out = this.encryptBlockRaw(M) - var buf = Buffer.allocUnsafe(16) - buf.writeUInt32BE(out[0], 0) - buf.writeUInt32BE(out[1], 4) - buf.writeUInt32BE(out[2], 8) - buf.writeUInt32BE(out[3], 12) - return buf -} - -AES.prototype.decryptBlock = function (M) { - M = asUInt32Array(M) - - // swap - var m1 = M[1] - M[1] = M[3] - M[3] = m1 - - var out = cryptBlock(M, this._invKeySchedule, G.INV_SUB_MIX, G.INV_SBOX, this._nRounds) - var buf = Buffer.allocUnsafe(16) - buf.writeUInt32BE(out[0], 0) - buf.writeUInt32BE(out[3], 4) - buf.writeUInt32BE(out[2], 8) - buf.writeUInt32BE(out[1], 12) - return buf -} - -AES.prototype.scrub = function () { - scrubVec(this._keySchedule) - scrubVec(this._invKeySchedule) - scrubVec(this._key) -} - -module.exports.AES = AES - -},{"safe-buffer":"Wugr"}],"vgFu":[function(require,module,exports) { - -var Buffer = require('safe-buffer').Buffer -var ZEROES = Buffer.alloc(16, 0) - -function toArray (buf) { - return [ - buf.readUInt32BE(0), - buf.readUInt32BE(4), - buf.readUInt32BE(8), - buf.readUInt32BE(12) - ] -} - -function fromArray (out) { - var buf = Buffer.allocUnsafe(16) - buf.writeUInt32BE(out[0] >>> 0, 0) - buf.writeUInt32BE(out[1] >>> 0, 4) - buf.writeUInt32BE(out[2] >>> 0, 8) - buf.writeUInt32BE(out[3] >>> 0, 12) - return buf -} - -function GHASH (key) { - this.h = key - this.state = Buffer.alloc(16, 0) - this.cache = Buffer.allocUnsafe(0) -} - -// from http://bitwiseshiftleft.github.io/sjcl/doc/symbols/src/core_gcm.js.html -// by Juho Vähä-Herttua -GHASH.prototype.ghash = function (block) { - var i = -1 - while (++i < block.length) { - this.state[i] ^= block[i] - } - this._multiply() -} - -GHASH.prototype._multiply = function () { - var Vi = toArray(this.h) - var Zi = [0, 0, 0, 0] - var j, xi, lsbVi - var i = -1 - while (++i < 128) { - xi = (this.state[~~(i / 8)] & (1 << (7 - (i % 8)))) !== 0 - if (xi) { - // Z_i+1 = Z_i ^ V_i - Zi[0] ^= Vi[0] - Zi[1] ^= Vi[1] - Zi[2] ^= Vi[2] - Zi[3] ^= Vi[3] - } - - // Store the value of LSB(V_i) - lsbVi = (Vi[3] & 1) !== 0 - - // V_i+1 = V_i >> 1 - for (j = 3; j > 0; j--) { - Vi[j] = (Vi[j] >>> 1) | ((Vi[j - 1] & 1) << 31) - } - Vi[0] = Vi[0] >>> 1 - - // If LSB(V_i) is 1, V_i+1 = (V_i >> 1) ^ R - if (lsbVi) { - Vi[0] = Vi[0] ^ (0xe1 << 24) - } - } - this.state = fromArray(Zi) -} - -GHASH.prototype.update = function (buf) { - this.cache = Buffer.concat([this.cache, buf]) - var chunk - while (this.cache.length >= 16) { - chunk = this.cache.slice(0, 16) - this.cache = this.cache.slice(16) - this.ghash(chunk) - } -} - -GHASH.prototype.final = function (abl, bl) { - if (this.cache.length) { - this.ghash(Buffer.concat([this.cache, ZEROES], 16)) - } - - this.ghash(fromArray([0, abl, 0, bl])) - return this.state -} - -module.exports = GHASH - -},{"safe-buffer":"Wugr"}],"KDZf":[function(require,module,exports) { - -var aes = require('./aes') -var Buffer = require('safe-buffer').Buffer -var Transform = require('cipher-base') -var inherits = require('inherits') -var GHASH = require('./ghash') -var xor = require('buffer-xor') -var incr32 = require('./incr32') - -function xorTest (a, b) { - var out = 0 - if (a.length !== b.length) out++ - - var len = Math.min(a.length, b.length) - for (var i = 0; i < len; ++i) { - out += (a[i] ^ b[i]) - } - - return out -} - -function calcIv (self, iv, ck) { - if (iv.length === 12) { - self._finID = Buffer.concat([iv, Buffer.from([0, 0, 0, 1])]) - return Buffer.concat([iv, Buffer.from([0, 0, 0, 2])]) - } - var ghash = new GHASH(ck) - var len = iv.length - var toPad = len % 16 - ghash.update(iv) - if (toPad) { - toPad = 16 - toPad - ghash.update(Buffer.alloc(toPad, 0)) - } - ghash.update(Buffer.alloc(8, 0)) - var ivBits = len * 8 - var tail = Buffer.alloc(8) - tail.writeUIntBE(ivBits, 0, 8) - ghash.update(tail) - self._finID = ghash.state - var out = Buffer.from(self._finID) - incr32(out) - return out -} -function StreamCipher (mode, key, iv, decrypt) { - Transform.call(this) - - var h = Buffer.alloc(4, 0) - - this._cipher = new aes.AES(key) - var ck = this._cipher.encryptBlock(h) - this._ghash = new GHASH(ck) - iv = calcIv(this, iv, ck) - - this._prev = Buffer.from(iv) - this._cache = Buffer.allocUnsafe(0) - this._secCache = Buffer.allocUnsafe(0) - this._decrypt = decrypt - this._alen = 0 - this._len = 0 - this._mode = mode - - this._authTag = null - this._called = false -} - -inherits(StreamCipher, Transform) - -StreamCipher.prototype._update = function (chunk) { - if (!this._called && this._alen) { - var rump = 16 - (this._alen % 16) - if (rump < 16) { - rump = Buffer.alloc(rump, 0) - this._ghash.update(rump) - } - } - - this._called = true - var out = this._mode.encrypt(this, chunk) - if (this._decrypt) { - this._ghash.update(chunk) - } else { - this._ghash.update(out) - } - this._len += chunk.length - return out -} - -StreamCipher.prototype._final = function () { - if (this._decrypt && !this._authTag) throw new Error('Unsupported state or unable to authenticate data') - - var tag = xor(this._ghash.final(this._alen * 8, this._len * 8), this._cipher.encryptBlock(this._finID)) - if (this._decrypt && xorTest(tag, this._authTag)) throw new Error('Unsupported state or unable to authenticate data') - - this._authTag = tag - this._cipher.scrub() -} - -StreamCipher.prototype.getAuthTag = function getAuthTag () { - if (this._decrypt || !Buffer.isBuffer(this._authTag)) throw new Error('Attempting to get auth tag in unsupported state') - - return this._authTag -} - -StreamCipher.prototype.setAuthTag = function setAuthTag (tag) { - if (!this._decrypt) throw new Error('Attempting to set auth tag in unsupported state') - - this._authTag = tag -} - -StreamCipher.prototype.setAAD = function setAAD (buf) { - if (this._called) throw new Error('Attempting to set AAD in unsupported state') - - this._ghash.update(buf) - this._alen += buf.length -} - -module.exports = StreamCipher - -},{"./aes":"dNn4","safe-buffer":"Wugr","cipher-base":"bjfr","inherits":"Bm0n","./ghash":"vgFu","buffer-xor":"Bi15","./incr32":"EFOV"}],"XmsB":[function(require,module,exports) { - -var aes = require('./aes') -var Buffer = require('safe-buffer').Buffer -var Transform = require('cipher-base') -var inherits = require('inherits') - -function StreamCipher (mode, key, iv, decrypt) { - Transform.call(this) - - this._cipher = new aes.AES(key) - this._prev = Buffer.from(iv) - this._cache = Buffer.allocUnsafe(0) - this._secCache = Buffer.allocUnsafe(0) - this._decrypt = decrypt - this._mode = mode -} - -inherits(StreamCipher, Transform) - -StreamCipher.prototype._update = function (chunk) { - return this._mode.encrypt(this, chunk, this._decrypt) -} - -StreamCipher.prototype._final = function () { - this._cipher.scrub() -} - -module.exports = StreamCipher - -},{"./aes":"dNn4","safe-buffer":"Wugr","cipher-base":"bjfr","inherits":"Bm0n"}],"exU6":[function(require,module,exports) { - -var Buffer = require('safe-buffer').Buffer -var MD5 = require('md5.js') - -/* eslint-disable camelcase */ -function EVP_BytesToKey (password, salt, keyBits, ivLen) { - if (!Buffer.isBuffer(password)) password = Buffer.from(password, 'binary') - if (salt) { - if (!Buffer.isBuffer(salt)) salt = Buffer.from(salt, 'binary') - if (salt.length !== 8) throw new RangeError('salt should be Buffer with 8 byte length') - } - - var keyLen = keyBits / 8 - var key = Buffer.alloc(keyLen) - var iv = Buffer.alloc(ivLen || 0) - var tmp = Buffer.alloc(0) - - while (keyLen > 0 || ivLen > 0) { - var hash = new MD5() - hash.update(tmp) - hash.update(password) - if (salt) hash.update(salt) - tmp = hash.digest() - - var used = 0 - - if (keyLen > 0) { - var keyStart = key.length - keyLen - used = Math.min(keyLen, tmp.length) - tmp.copy(key, keyStart, 0, used) - keyLen -= used - } - - if (used < tmp.length && ivLen > 0) { - var ivStart = iv.length - ivLen - var length = Math.min(ivLen, tmp.length - used) - tmp.copy(iv, ivStart, used, used + length) - ivLen -= length - } - } - - tmp.fill(0) - return { key: key, iv: iv } -} - -module.exports = EVP_BytesToKey - -},{"safe-buffer":"Wugr","md5.js":"OP64"}],"zRzx":[function(require,module,exports) { - -var MODES = require('./modes') -var AuthCipher = require('./authCipher') -var Buffer = require('safe-buffer').Buffer -var StreamCipher = require('./streamCipher') -var Transform = require('cipher-base') -var aes = require('./aes') -var ebtk = require('evp_bytestokey') -var inherits = require('inherits') - -function Cipher (mode, key, iv) { - Transform.call(this) - - this._cache = new Splitter() - this._cipher = new aes.AES(key) - this._prev = Buffer.from(iv) - this._mode = mode - this._autopadding = true -} - -inherits(Cipher, Transform) - -Cipher.prototype._update = function (data) { - this._cache.add(data) - var chunk - var thing - var out = [] - - while ((chunk = this._cache.get())) { - thing = this._mode.encrypt(this, chunk) - out.push(thing) - } - - return Buffer.concat(out) -} - -var PADDING = Buffer.alloc(16, 0x10) - -Cipher.prototype._final = function () { - var chunk = this._cache.flush() - if (this._autopadding) { - chunk = this._mode.encrypt(this, chunk) - this._cipher.scrub() - return chunk - } - - if (!chunk.equals(PADDING)) { - this._cipher.scrub() - throw new Error('data not multiple of block length') - } -} - -Cipher.prototype.setAutoPadding = function (setTo) { - this._autopadding = !!setTo - return this -} - -function Splitter () { - this.cache = Buffer.allocUnsafe(0) -} - -Splitter.prototype.add = function (data) { - this.cache = Buffer.concat([this.cache, data]) -} - -Splitter.prototype.get = function () { - if (this.cache.length > 15) { - var out = this.cache.slice(0, 16) - this.cache = this.cache.slice(16) - return out - } - return null -} - -Splitter.prototype.flush = function () { - var len = 16 - this.cache.length - var padBuff = Buffer.allocUnsafe(len) - - var i = -1 - while (++i < len) { - padBuff.writeUInt8(len, i) - } - - return Buffer.concat([this.cache, padBuff]) -} - -function createCipheriv (suite, password, iv) { - var config = MODES[suite.toLowerCase()] - if (!config) throw new TypeError('invalid suite type') - - if (typeof password === 'string') password = Buffer.from(password) - if (password.length !== config.key / 8) throw new TypeError('invalid key length ' + password.length) - - if (typeof iv === 'string') iv = Buffer.from(iv) - if (config.mode !== 'GCM' && iv.length !== config.iv) throw new TypeError('invalid iv length ' + iv.length) - - if (config.type === 'stream') { - return new StreamCipher(config.module, password, iv) - } else if (config.type === 'auth') { - return new AuthCipher(config.module, password, iv) - } - - return new Cipher(config.module, password, iv) -} - -function createCipher (suite, password) { - var config = MODES[suite.toLowerCase()] - if (!config) throw new TypeError('invalid suite type') - - var keys = ebtk(password, false, config.key, config.iv) - return createCipheriv(suite, keys.key, keys.iv) -} - -exports.createCipheriv = createCipheriv -exports.createCipher = createCipher - -},{"./modes":"zdSg","./authCipher":"KDZf","safe-buffer":"Wugr","./streamCipher":"XmsB","cipher-base":"bjfr","./aes":"dNn4","evp_bytestokey":"exU6","inherits":"Bm0n"}],"qK8d":[function(require,module,exports) { - -var AuthCipher = require('./authCipher') -var Buffer = require('safe-buffer').Buffer -var MODES = require('./modes') -var StreamCipher = require('./streamCipher') -var Transform = require('cipher-base') -var aes = require('./aes') -var ebtk = require('evp_bytestokey') -var inherits = require('inherits') - -function Decipher (mode, key, iv) { - Transform.call(this) - - this._cache = new Splitter() - this._last = void 0 - this._cipher = new aes.AES(key) - this._prev = Buffer.from(iv) - this._mode = mode - this._autopadding = true -} - -inherits(Decipher, Transform) - -Decipher.prototype._update = function (data) { - this._cache.add(data) - var chunk - var thing - var out = [] - while ((chunk = this._cache.get(this._autopadding))) { - thing = this._mode.decrypt(this, chunk) - out.push(thing) - } - return Buffer.concat(out) -} - -Decipher.prototype._final = function () { - var chunk = this._cache.flush() - if (this._autopadding) { - return unpad(this._mode.decrypt(this, chunk)) - } else if (chunk) { - throw new Error('data not multiple of block length') - } -} - -Decipher.prototype.setAutoPadding = function (setTo) { - this._autopadding = !!setTo - return this -} - -function Splitter () { - this.cache = Buffer.allocUnsafe(0) -} - -Splitter.prototype.add = function (data) { - this.cache = Buffer.concat([this.cache, data]) -} - -Splitter.prototype.get = function (autoPadding) { - var out - if (autoPadding) { - if (this.cache.length > 16) { - out = this.cache.slice(0, 16) - this.cache = this.cache.slice(16) - return out - } - } else { - if (this.cache.length >= 16) { - out = this.cache.slice(0, 16) - this.cache = this.cache.slice(16) - return out - } - } - - return null -} - -Splitter.prototype.flush = function () { - if (this.cache.length) return this.cache -} - -function unpad (last) { - var padded = last[15] - if (padded < 1 || padded > 16) { - throw new Error('unable to decrypt data') - } - var i = -1 - while (++i < padded) { - if (last[(i + (16 - padded))] !== padded) { - throw new Error('unable to decrypt data') - } - } - if (padded === 16) return - - return last.slice(0, 16 - padded) -} - -function createDecipheriv (suite, password, iv) { - var config = MODES[suite.toLowerCase()] - if (!config) throw new TypeError('invalid suite type') - - if (typeof iv === 'string') iv = Buffer.from(iv) - if (config.mode !== 'GCM' && iv.length !== config.iv) throw new TypeError('invalid iv length ' + iv.length) - - if (typeof password === 'string') password = Buffer.from(password) - if (password.length !== config.key / 8) throw new TypeError('invalid key length ' + password.length) - - if (config.type === 'stream') { - return new StreamCipher(config.module, password, iv, true) - } else if (config.type === 'auth') { - return new AuthCipher(config.module, password, iv, true) - } - - return new Decipher(config.module, password, iv) -} - -function createDecipher (suite, password) { - var config = MODES[suite.toLowerCase()] - if (!config) throw new TypeError('invalid suite type') - - var keys = ebtk(password, false, config.key, config.iv) - return createDecipheriv(suite, keys.key, keys.iv) -} - -exports.createDecipher = createDecipher -exports.createDecipheriv = createDecipheriv - -},{"./authCipher":"KDZf","safe-buffer":"Wugr","./modes":"zdSg","./streamCipher":"XmsB","cipher-base":"bjfr","./aes":"dNn4","evp_bytestokey":"exU6","inherits":"Bm0n"}],"hisC":[function(require,module,exports) { -var ciphers = require('./encrypter') -var deciphers = require('./decrypter') -var modes = require('./modes/list.json') - -function getCiphers () { - return Object.keys(modes) -} - -exports.createCipher = exports.Cipher = ciphers.createCipher -exports.createCipheriv = exports.Cipheriv = ciphers.createCipheriv -exports.createDecipher = exports.Decipher = deciphers.createDecipher -exports.createDecipheriv = exports.Decipheriv = deciphers.createDecipheriv -exports.listCiphers = exports.getCiphers = getCiphers - -},{"./encrypter":"zRzx","./decrypter":"qK8d","./modes/list.json":"veqz"}],"V0IC":[function(require,module,exports) { -exports['des-ecb'] = { - key: 8, - iv: 0 -} -exports['des-cbc'] = exports.des = { - key: 8, - iv: 8 -} -exports['des-ede3-cbc'] = exports.des3 = { - key: 24, - iv: 8 -} -exports['des-ede3'] = { - key: 24, - iv: 0 -} -exports['des-ede-cbc'] = { - key: 16, - iv: 8 -} -exports['des-ede'] = { - key: 16, - iv: 0 -} - -},{}],"KTbn":[function(require,module,exports) { -var DES = require('browserify-des') -var aes = require('browserify-aes/browser') -var aesModes = require('browserify-aes/modes') -var desModes = require('browserify-des/modes') -var ebtk = require('evp_bytestokey') - -function createCipher (suite, password) { - suite = suite.toLowerCase() - - var keyLen, ivLen - if (aesModes[suite]) { - keyLen = aesModes[suite].key - ivLen = aesModes[suite].iv - } else if (desModes[suite]) { - keyLen = desModes[suite].key * 8 - ivLen = desModes[suite].iv - } else { - throw new TypeError('invalid suite type') - } - - var keys = ebtk(password, false, keyLen, ivLen) - return createCipheriv(suite, keys.key, keys.iv) -} - -function createDecipher (suite, password) { - suite = suite.toLowerCase() - - var keyLen, ivLen - if (aesModes[suite]) { - keyLen = aesModes[suite].key - ivLen = aesModes[suite].iv - } else if (desModes[suite]) { - keyLen = desModes[suite].key * 8 - ivLen = desModes[suite].iv - } else { - throw new TypeError('invalid suite type') - } - - var keys = ebtk(password, false, keyLen, ivLen) - return createDecipheriv(suite, keys.key, keys.iv) -} - -function createCipheriv (suite, key, iv) { - suite = suite.toLowerCase() - if (aesModes[suite]) return aes.createCipheriv(suite, key, iv) - if (desModes[suite]) return new DES({ key: key, iv: iv, mode: suite }) - - throw new TypeError('invalid suite type') -} - -function createDecipheriv (suite, key, iv) { - suite = suite.toLowerCase() - if (aesModes[suite]) return aes.createDecipheriv(suite, key, iv) - if (desModes[suite]) return new DES({ key: key, iv: iv, mode: suite, decrypt: true }) - - throw new TypeError('invalid suite type') -} - -function getCiphers () { - return Object.keys(desModes).concat(aes.getCiphers()) -} - -exports.createCipher = exports.Cipher = createCipher -exports.createCipheriv = exports.Cipheriv = createCipheriv -exports.createDecipher = exports.Decipher = createDecipher -exports.createDecipheriv = exports.Decipheriv = createDecipheriv -exports.listCiphers = exports.getCiphers = getCiphers - -},{"browserify-des":"sKVA","browserify-aes/browser":"hisC","browserify-aes/modes":"zdSg","browserify-des/modes":"V0IC","evp_bytestokey":"exU6"}],"VQun":[function(require,module,exports) { -var bn = require('bn.js'); -var brorand = require('brorand'); - -function MillerRabin(rand) { - this.rand = rand || new brorand.Rand(); -} -module.exports = MillerRabin; - -MillerRabin.create = function create(rand) { - return new MillerRabin(rand); -}; - -MillerRabin.prototype._randbelow = function _randbelow(n) { - var len = n.bitLength(); - var min_bytes = Math.ceil(len / 8); - - // Generage random bytes until a number less than n is found. - // This ensures that 0..n-1 have an equal probability of being selected. - do - var a = new bn(this.rand.generate(min_bytes)); - while (a.cmp(n) >= 0); - - return a; -}; - -MillerRabin.prototype._randrange = function _randrange(start, stop) { - // Generate a random number greater than or equal to start and less than stop. - var size = stop.sub(start); - return start.add(this._randbelow(size)); -}; - -MillerRabin.prototype.test = function test(n, k, cb) { - var len = n.bitLength(); - var red = bn.mont(n); - var rone = new bn(1).toRed(red); - - if (!k) - k = Math.max(1, (len / 48) | 0); - - // Find d and s, (n - 1) = (2 ^ s) * d; - var n1 = n.subn(1); - for (var s = 0; !n1.testn(s); s++) {} - var d = n.shrn(s); - - var rn1 = n1.toRed(red); - - var prime = true; - for (; k > 0; k--) { - var a = this._randrange(new bn(2), n1); - if (cb) - cb(a); - - var x = a.toRed(red).redPow(d); - if (x.cmp(rone) === 0 || x.cmp(rn1) === 0) - continue; - - for (var i = 1; i < s; i++) { - x = x.redSqr(); - - if (x.cmp(rone) === 0) - return false; - if (x.cmp(rn1) === 0) - break; - } - - if (i === s) - return false; - } - - return prime; -}; - -MillerRabin.prototype.getDivisor = function getDivisor(n, k) { - var len = n.bitLength(); - var red = bn.mont(n); - var rone = new bn(1).toRed(red); - - if (!k) - k = Math.max(1, (len / 48) | 0); - - // Find d and s, (n - 1) = (2 ^ s) * d; - var n1 = n.subn(1); - for (var s = 0; !n1.testn(s); s++) {} - var d = n.shrn(s); - - var rn1 = n1.toRed(red); - - for (; k > 0; k--) { - var a = this._randrange(new bn(2), n1); - - var g = n.gcd(a); - if (g.cmpn(1) !== 0) - return g; - - var x = a.toRed(red).redPow(d); - if (x.cmp(rone) === 0 || x.cmp(rn1) === 0) - continue; - - for (var i = 1; i < s; i++) { - x = x.redSqr(); - - if (x.cmp(rone) === 0) - return x.fromRed().subn(1).gcd(n); - if (x.cmp(rn1) === 0) - break; - } - - if (i === s) { - x = x.redSqr(); - return x.fromRed().subn(1).gcd(n); - } - } - - return false; -}; - -},{"bn.js":"BOxy","brorand":"e03B"}],"Lj8n":[function(require,module,exports) { -var randomBytes = require('randombytes'); -module.exports = findPrime; -findPrime.simpleSieve = simpleSieve; -findPrime.fermatTest = fermatTest; -var BN = require('bn.js'); -var TWENTYFOUR = new BN(24); -var MillerRabin = require('miller-rabin'); -var millerRabin = new MillerRabin(); -var ONE = new BN(1); -var TWO = new BN(2); -var FIVE = new BN(5); -var SIXTEEN = new BN(16); -var EIGHT = new BN(8); -var TEN = new BN(10); -var THREE = new BN(3); -var SEVEN = new BN(7); -var ELEVEN = new BN(11); -var FOUR = new BN(4); -var TWELVE = new BN(12); -var primes = null; - -function _getPrimes() { - if (primes !== null) - return primes; - - var limit = 0x100000; - var res = []; - res[0] = 2; - for (var i = 1, k = 3; k < limit; k += 2) { - var sqrt = Math.ceil(Math.sqrt(k)); - for (var j = 0; j < i && res[j] <= sqrt; j++) - if (k % res[j] === 0) - break; - - if (i !== j && res[j] <= sqrt) - continue; - - res[i++] = k; - } - primes = res; - return res; -} - -function simpleSieve(p) { - var primes = _getPrimes(); - - for (var i = 0; i < primes.length; i++) - if (p.modn(primes[i]) === 0) { - if (p.cmpn(primes[i]) === 0) { - return true; - } else { - return false; - } - } - - return true; -} - -function fermatTest(p) { - var red = BN.mont(p); - return TWO.toRed(red).redPow(p.subn(1)).fromRed().cmpn(1) === 0; -} - -function findPrime(bits, gen) { - if (bits < 16) { - // this is what openssl does - if (gen === 2 || gen === 5) { - return new BN([0x8c, 0x7b]); - } else { - return new BN([0x8c, 0x27]); - } - } - gen = new BN(gen); - - var num, n2; - - while (true) { - num = new BN(randomBytes(Math.ceil(bits / 8))); - while (num.bitLength() > bits) { - num.ishrn(1); - } - if (num.isEven()) { - num.iadd(ONE); - } - if (!num.testn(1)) { - num.iadd(TWO); - } - if (!gen.cmp(TWO)) { - while (num.mod(TWENTYFOUR).cmp(ELEVEN)) { - num.iadd(FOUR); - } - } else if (!gen.cmp(FIVE)) { - while (num.mod(TEN).cmp(THREE)) { - num.iadd(FOUR); - } - } - n2 = num.shrn(1); - if (simpleSieve(n2) && simpleSieve(num) && - fermatTest(n2) && fermatTest(num) && - millerRabin.test(n2) && millerRabin.test(num)) { - return num; - } - } - -} - -},{"randombytes":"XJNj","bn.js":"BOxy","miller-rabin":"VQun"}],"nq14":[function(require,module,exports) { -module.exports = { - "modp1": { - "gen": "02", - "prime": "ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a63a3620ffffffffffffffff" - }, - "modp2": { - "gen": "02", - "prime": "ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece65381ffffffffffffffff" - }, - "modp5": { - "gen": "02", - "prime": "ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece45b3dc2007cb8a163bf0598da48361c55d39a69163fa8fd24cf5f83655d23dca3ad961c62f356208552bb9ed529077096966d670c354e4abc9804f1746c08ca237327ffffffffffffffff" - }, - "modp14": { - "gen": "02", - "prime": "ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece45b3dc2007cb8a163bf0598da48361c55d39a69163fa8fd24cf5f83655d23dca3ad961c62f356208552bb9ed529077096966d670c354e4abc9804f1746c08ca18217c32905e462e36ce3be39e772c180e86039b2783a2ec07a28fb5c55df06f4c52c9de2bcbf6955817183995497cea956ae515d2261898fa051015728e5a8aacaa68ffffffffffffffff" - }, - "modp15": { - "gen": "02", - "prime": "ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece45b3dc2007cb8a163bf0598da48361c55d39a69163fa8fd24cf5f83655d23dca3ad961c62f356208552bb9ed529077096966d670c354e4abc9804f1746c08ca18217c32905e462e36ce3be39e772c180e86039b2783a2ec07a28fb5c55df06f4c52c9de2bcbf6955817183995497cea956ae515d2261898fa051015728e5a8aaac42dad33170d04507a33a85521abdf1cba64ecfb850458dbef0a8aea71575d060c7db3970f85a6e1e4c7abf5ae8cdb0933d71e8c94e04a25619dcee3d2261ad2ee6bf12ffa06d98a0864d87602733ec86a64521f2b18177b200cbbe117577a615d6c770988c0bad946e208e24fa074e5ab3143db5bfce0fd108e4b82d120a93ad2caffffffffffffffff" - }, - "modp16": { - "gen": "02", - "prime": "ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece45b3dc2007cb8a163bf0598da48361c55d39a69163fa8fd24cf5f83655d23dca3ad961c62f356208552bb9ed529077096966d670c354e4abc9804f1746c08ca18217c32905e462e36ce3be39e772c180e86039b2783a2ec07a28fb5c55df06f4c52c9de2bcbf6955817183995497cea956ae515d2261898fa051015728e5a8aaac42dad33170d04507a33a85521abdf1cba64ecfb850458dbef0a8aea71575d060c7db3970f85a6e1e4c7abf5ae8cdb0933d71e8c94e04a25619dcee3d2261ad2ee6bf12ffa06d98a0864d87602733ec86a64521f2b18177b200cbbe117577a615d6c770988c0bad946e208e24fa074e5ab3143db5bfce0fd108e4b82d120a92108011a723c12a787e6d788719a10bdba5b2699c327186af4e23c1a946834b6150bda2583e9ca2ad44ce8dbbbc2db04de8ef92e8efc141fbecaa6287c59474e6bc05d99b2964fa090c3a2233ba186515be7ed1f612970cee2d7afb81bdd762170481cd0069127d5b05aa993b4ea988d8fddc186ffb7dc90a6c08f4df435c934063199ffffffffffffffff" - }, - "modp17": { - "gen": "02", - "prime": "ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece45b3dc2007cb8a163bf0598da48361c55d39a69163fa8fd24cf5f83655d23dca3ad961c62f356208552bb9ed529077096966d670c354e4abc9804f1746c08ca18217c32905e462e36ce3be39e772c180e86039b2783a2ec07a28fb5c55df06f4c52c9de2bcbf6955817183995497cea956ae515d2261898fa051015728e5a8aaac42dad33170d04507a33a85521abdf1cba64ecfb850458dbef0a8aea71575d060c7db3970f85a6e1e4c7abf5ae8cdb0933d71e8c94e04a25619dcee3d2261ad2ee6bf12ffa06d98a0864d87602733ec86a64521f2b18177b200cbbe117577a615d6c770988c0bad946e208e24fa074e5ab3143db5bfce0fd108e4b82d120a92108011a723c12a787e6d788719a10bdba5b2699c327186af4e23c1a946834b6150bda2583e9ca2ad44ce8dbbbc2db04de8ef92e8efc141fbecaa6287c59474e6bc05d99b2964fa090c3a2233ba186515be7ed1f612970cee2d7afb81bdd762170481cd0069127d5b05aa993b4ea988d8fddc186ffb7dc90a6c08f4df435c93402849236c3fab4d27c7026c1d4dcb2602646dec9751e763dba37bdf8ff9406ad9e530ee5db382f413001aeb06a53ed9027d831179727b0865a8918da3edbebcf9b14ed44ce6cbaced4bb1bdb7f1447e6cc254b332051512bd7af426fb8f401378cd2bf5983ca01c64b92ecf032ea15d1721d03f482d7ce6e74fef6d55e702f46980c82b5a84031900b1c9e59e7c97fbec7e8f323a97a7e36cc88be0f1d45b7ff585ac54bd407b22b4154aacc8f6d7ebf48e1d814cc5ed20f8037e0a79715eef29be32806a1d58bb7c5da76f550aa3d8a1fbff0eb19ccb1a313d55cda56c9ec2ef29632387fe8d76e3c0468043e8f663f4860ee12bf2d5b0b7474d6e694f91e6dcc4024ffffffffffffffff" - }, - "modp18": { - "gen": "02", - "prime": "ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece45b3dc2007cb8a163bf0598da48361c55d39a69163fa8fd24cf5f83655d23dca3ad961c62f356208552bb9ed529077096966d670c354e4abc9804f1746c08ca18217c32905e462e36ce3be39e772c180e86039b2783a2ec07a28fb5c55df06f4c52c9de2bcbf6955817183995497cea956ae515d2261898fa051015728e5a8aaac42dad33170d04507a33a85521abdf1cba64ecfb850458dbef0a8aea71575d060c7db3970f85a6e1e4c7abf5ae8cdb0933d71e8c94e04a25619dcee3d2261ad2ee6bf12ffa06d98a0864d87602733ec86a64521f2b18177b200cbbe117577a615d6c770988c0bad946e208e24fa074e5ab3143db5bfce0fd108e4b82d120a92108011a723c12a787e6d788719a10bdba5b2699c327186af4e23c1a946834b6150bda2583e9ca2ad44ce8dbbbc2db04de8ef92e8efc141fbecaa6287c59474e6bc05d99b2964fa090c3a2233ba186515be7ed1f612970cee2d7afb81bdd762170481cd0069127d5b05aa993b4ea988d8fddc186ffb7dc90a6c08f4df435c93402849236c3fab4d27c7026c1d4dcb2602646dec9751e763dba37bdf8ff9406ad9e530ee5db382f413001aeb06a53ed9027d831179727b0865a8918da3edbebcf9b14ed44ce6cbaced4bb1bdb7f1447e6cc254b332051512bd7af426fb8f401378cd2bf5983ca01c64b92ecf032ea15d1721d03f482d7ce6e74fef6d55e702f46980c82b5a84031900b1c9e59e7c97fbec7e8f323a97a7e36cc88be0f1d45b7ff585ac54bd407b22b4154aacc8f6d7ebf48e1d814cc5ed20f8037e0a79715eef29be32806a1d58bb7c5da76f550aa3d8a1fbff0eb19ccb1a313d55cda56c9ec2ef29632387fe8d76e3c0468043e8f663f4860ee12bf2d5b0b7474d6e694f91e6dbe115974a3926f12fee5e438777cb6a932df8cd8bec4d073b931ba3bc832b68d9dd300741fa7bf8afc47ed2576f6936ba424663aab639c5ae4f5683423b4742bf1c978238f16cbe39d652de3fdb8befc848ad922222e04a4037c0713eb57a81a23f0c73473fc646cea306b4bcbc8862f8385ddfa9d4b7fa2c087e879683303ed5bdd3a062b3cf5b3a278a66d2a13f83f44f82ddf310ee074ab6a364597e899a0255dc164f31cc50846851df9ab48195ded7ea1b1d510bd7ee74d73faf36bc31ecfa268359046f4eb879f924009438b481c6cd7889a002ed5ee382bc9190da6fc026e479558e4475677e9aa9e3050e2765694dfc81f56e880b96e7160c980dd98edd3dfffffffffffffffff" - } -}; -},{}],"SXPn":[function(require,module,exports) { -var Buffer = require("buffer").Buffer; -var BN = require('bn.js'); -var MillerRabin = require('miller-rabin'); -var millerRabin = new MillerRabin(); -var TWENTYFOUR = new BN(24); -var ELEVEN = new BN(11); -var TEN = new BN(10); -var THREE = new BN(3); -var SEVEN = new BN(7); -var primes = require('./generatePrime'); -var randomBytes = require('randombytes'); -module.exports = DH; - -function setPublicKey(pub, enc) { - enc = enc || 'utf8'; - if (!Buffer.isBuffer(pub)) { - pub = new Buffer(pub, enc); - } - this._pub = new BN(pub); - return this; -} - -function setPrivateKey(priv, enc) { - enc = enc || 'utf8'; - if (!Buffer.isBuffer(priv)) { - priv = new Buffer(priv, enc); - } - this._priv = new BN(priv); - return this; -} - -var primeCache = {}; -function checkPrime(prime, generator) { - var gen = generator.toString('hex'); - var hex = [gen, prime.toString(16)].join('_'); - if (hex in primeCache) { - return primeCache[hex]; - } - var error = 0; - - if (prime.isEven() || - !primes.simpleSieve || - !primes.fermatTest(prime) || - !millerRabin.test(prime)) { - //not a prime so +1 - error += 1; - - if (gen === '02' || gen === '05') { - // we'd be able to check the generator - // it would fail so +8 - error += 8; - } else { - //we wouldn't be able to test the generator - // so +4 - error += 4; - } - primeCache[hex] = error; - return error; - } - if (!millerRabin.test(prime.shrn(1))) { - //not a safe prime - error += 2; - } - var rem; - switch (gen) { - case '02': - if (prime.mod(TWENTYFOUR).cmp(ELEVEN)) { - // unsuidable generator - error += 8; - } - break; - case '05': - rem = prime.mod(TEN); - if (rem.cmp(THREE) && rem.cmp(SEVEN)) { - // prime mod 10 needs to equal 3 or 7 - error += 8; - } - break; - default: - error += 4; - } - primeCache[hex] = error; - return error; -} - -function DH(prime, generator, malleable) { - this.setGenerator(generator); - this.__prime = new BN(prime); - this._prime = BN.mont(this.__prime); - this._primeLen = prime.length; - this._pub = undefined; - this._priv = undefined; - this._primeCode = undefined; - if (malleable) { - this.setPublicKey = setPublicKey; - this.setPrivateKey = setPrivateKey; - } else { - this._primeCode = 8; - } -} -Object.defineProperty(DH.prototype, 'verifyError', { - enumerable: true, - get: function () { - if (typeof this._primeCode !== 'number') { - this._primeCode = checkPrime(this.__prime, this.__gen); - } - return this._primeCode; - } -}); -DH.prototype.generateKeys = function () { - if (!this._priv) { - this._priv = new BN(randomBytes(this._primeLen)); - } - this._pub = this._gen.toRed(this._prime).redPow(this._priv).fromRed(); - return this.getPublicKey(); -}; - -DH.prototype.computeSecret = function (other) { - other = new BN(other); - other = other.toRed(this._prime); - var secret = other.redPow(this._priv).fromRed(); - var out = new Buffer(secret.toArray()); - var prime = this.getPrime(); - if (out.length < prime.length) { - var front = new Buffer(prime.length - out.length); - front.fill(0); - out = Buffer.concat([front, out]); - } - return out; -}; - -DH.prototype.getPublicKey = function getPublicKey(enc) { - return formatReturnValue(this._pub, enc); -}; - -DH.prototype.getPrivateKey = function getPrivateKey(enc) { - return formatReturnValue(this._priv, enc); -}; - -DH.prototype.getPrime = function (enc) { - return formatReturnValue(this.__prime, enc); -}; - -DH.prototype.getGenerator = function (enc) { - return formatReturnValue(this._gen, enc); -}; - -DH.prototype.setGenerator = function (gen, enc) { - enc = enc || 'utf8'; - if (!Buffer.isBuffer(gen)) { - gen = new Buffer(gen, enc); - } - this.__gen = gen; - this._gen = new BN(gen); - return this; -}; - -function formatReturnValue(bn, enc) { - var buf = new Buffer(bn.toArray()); - if (!enc) { - return buf; - } else { - return buf.toString(enc); - } -} - -},{"bn.js":"BOxy","miller-rabin":"VQun","./generatePrime":"Lj8n","randombytes":"XJNj","buffer":"dskh"}],"WFL2":[function(require,module,exports) { -var Buffer = require("buffer").Buffer; -var generatePrime = require('./lib/generatePrime') -var primes = require('./lib/primes.json') - -var DH = require('./lib/dh') - -function getDiffieHellman (mod) { - var prime = new Buffer(primes[mod].prime, 'hex') - var gen = new Buffer(primes[mod].gen, 'hex') - - return new DH(prime, gen) -} - -var ENCODINGS = { - 'binary': true, 'hex': true, 'base64': true -} - -function createDiffieHellman (prime, enc, generator, genc) { - if (Buffer.isBuffer(enc) || ENCODINGS[enc] === undefined) { - return createDiffieHellman(prime, 'binary', enc, generator) - } - - enc = enc || 'binary' - genc = genc || 'binary' - generator = generator || new Buffer([2]) - - if (!Buffer.isBuffer(generator)) { - generator = new Buffer(generator, genc) - } - - if (typeof prime === 'number') { - return new DH(generatePrime(prime, generator), generator, true) - } - - if (!Buffer.isBuffer(prime)) { - prime = new Buffer(prime, enc) - } - - return new DH(prime, generator, true) -} - -exports.DiffieHellmanGroup = exports.createDiffieHellmanGroup = exports.getDiffieHellman = getDiffieHellman -exports.createDiffieHellman = exports.DiffieHellman = createDiffieHellman - -},{"./lib/generatePrime":"Lj8n","./lib/primes.json":"nq14","./lib/dh":"SXPn","buffer":"dskh"}],"Aukv":[function(require,module,exports) { -var Buffer = require("buffer").Buffer; -var bn = require('bn.js'); -var randomBytes = require('randombytes'); -module.exports = crt; -function blind(priv) { - var r = getr(priv); - var blinder = r.toRed(bn.mont(priv.modulus)) - .redPow(new bn(priv.publicExponent)).fromRed(); - return { - blinder: blinder, - unblinder:r.invm(priv.modulus) - }; -} -function crt(msg, priv) { - var blinds = blind(priv); - var len = priv.modulus.byteLength(); - var mod = bn.mont(priv.modulus); - var blinded = new bn(msg).mul(blinds.blinder).umod(priv.modulus); - var c1 = blinded.toRed(bn.mont(priv.prime1)); - var c2 = blinded.toRed(bn.mont(priv.prime2)); - var qinv = priv.coefficient; - var p = priv.prime1; - var q = priv.prime2; - var m1 = c1.redPow(priv.exponent1); - var m2 = c2.redPow(priv.exponent2); - m1 = m1.fromRed(); - m2 = m2.fromRed(); - var h = m1.isub(m2).imul(qinv).umod(p); - h.imul(q); - m2.iadd(h); - return new Buffer(m2.imul(blinds.unblinder).umod(priv.modulus).toArray(false, len)); -} -crt.getr = getr; -function getr(priv) { - var len = priv.modulus.byteLength(); - var r = new bn(randomBytes(len)); - while (r.cmp(priv.modulus) >= 0 || !r.umod(priv.prime1) || !r.umod(priv.prime2)) { - r = new bn(randomBytes(len)); - } - return r; -} - -},{"bn.js":"BOxy","randombytes":"XJNj","buffer":"dskh"}],"qy9T":[function(require,module,exports) { -var indexOf = function (xs, item) { - if (xs.indexOf) return xs.indexOf(item); - else for (var i = 0; i < xs.length; i++) { - if (xs[i] === item) return i; - } - return -1; -}; -var Object_keys = function (obj) { - if (Object.keys) return Object.keys(obj) - else { - var res = []; - for (var key in obj) res.push(key) - return res; - } -}; - -var forEach = function (xs, fn) { - if (xs.forEach) return xs.forEach(fn) - else for (var i = 0; i < xs.length; i++) { - fn(xs[i], i, xs); - } -}; - -var defineProp = (function() { - try { - Object.defineProperty({}, '_', {}); - return function(obj, name, value) { - Object.defineProperty(obj, name, { - writable: true, - enumerable: false, - configurable: true, - value: value - }) - }; - } catch(e) { - return function(obj, name, value) { - obj[name] = value; - }; - } -}()); - -var globals = ['Array', 'Boolean', 'Date', 'Error', 'EvalError', 'Function', -'Infinity', 'JSON', 'Math', 'NaN', 'Number', 'Object', 'RangeError', -'ReferenceError', 'RegExp', 'String', 'SyntaxError', 'TypeError', 'URIError', -'decodeURI', 'decodeURIComponent', 'encodeURI', 'encodeURIComponent', 'escape', -'eval', 'isFinite', 'isNaN', 'parseFloat', 'parseInt', 'undefined', 'unescape']; - -function Context() {} -Context.prototype = {}; - -var Script = exports.Script = function NodeScript (code) { - if (!(this instanceof Script)) return new Script(code); - this.code = code; -}; - -Script.prototype.runInContext = function (context) { - if (!(context instanceof Context)) { - throw new TypeError("needs a 'context' argument."); - } - - var iframe = document.createElement('iframe'); - if (!iframe.style) iframe.style = {}; - iframe.style.display = 'none'; - - document.body.appendChild(iframe); - - var win = iframe.contentWindow; - var wEval = win.eval, wExecScript = win.execScript; - - if (!wEval && wExecScript) { - // win.eval() magically appears when this is called in IE: - wExecScript.call(win, 'null'); - wEval = win.eval; - } - - forEach(Object_keys(context), function (key) { - win[key] = context[key]; - }); - forEach(globals, function (key) { - if (context[key]) { - win[key] = context[key]; - } - }); - - var winKeys = Object_keys(win); - - var res = wEval.call(win, this.code); - - forEach(Object_keys(win), function (key) { - // Avoid copying circular objects like `top` and `window` by only - // updating existing context properties or new properties in the `win` - // that was only introduced after the eval. - if (key in context || indexOf(winKeys, key) === -1) { - context[key] = win[key]; - } - }); - - forEach(globals, function (key) { - if (!(key in context)) { - defineProp(context, key, win[key]); - } - }); - - document.body.removeChild(iframe); - - return res; -}; - -Script.prototype.runInThisContext = function () { - return eval(this.code); // maybe... -}; - -Script.prototype.runInNewContext = function (context) { - var ctx = Script.createContext(context); - var res = this.runInContext(ctx); - - if (context) { - forEach(Object_keys(ctx), function (key) { - context[key] = ctx[key]; - }); - } - - return res; -}; - -forEach(Object_keys(Script.prototype), function (name) { - exports[name] = Script[name] = function (code) { - var s = Script(code); - return s[name].apply(s, [].slice.call(arguments, 1)); - }; -}); - -exports.isContext = function (context) { - return context instanceof Context; -}; - -exports.createScript = function (code) { - return exports.Script(code); -}; - -exports.createContext = Script.createContext = function (context) { - var copy = new Context(); - if(typeof context === 'object') { - forEach(Object_keys(context), function (key) { - copy[key] = context[key]; - }); - } - return copy; -}; - -},{}],"mvP6":[function(require,module,exports) { -var asn1 = require('../asn1'); -var inherits = require('inherits'); - -var api = exports; - -api.define = function define(name, body) { - return new Entity(name, body); -}; - -function Entity(name, body) { - this.name = name; - this.body = body; - - this.decoders = {}; - this.encoders = {}; -}; - -Entity.prototype._createNamed = function createNamed(base) { - var named; - try { - named = require('vm').runInThisContext( - '(function ' + this.name + '(entity) {\n' + - ' this._initNamed(entity);\n' + - '})' - ); - } catch (e) { - named = function (entity) { - this._initNamed(entity); - }; - } - inherits(named, base); - named.prototype._initNamed = function initnamed(entity) { - base.call(this, entity); - }; - - return new named(this); -}; - -Entity.prototype._getDecoder = function _getDecoder(enc) { - enc = enc || 'der'; - // Lazily create decoder - if (!this.decoders.hasOwnProperty(enc)) - this.decoders[enc] = this._createNamed(asn1.decoders[enc]); - return this.decoders[enc]; -}; - -Entity.prototype.decode = function decode(data, enc, options) { - return this._getDecoder(enc).decode(data, options); -}; - -Entity.prototype._getEncoder = function _getEncoder(enc) { - enc = enc || 'der'; - // Lazily create encoder - if (!this.encoders.hasOwnProperty(enc)) - this.encoders[enc] = this._createNamed(asn1.encoders[enc]); - return this.encoders[enc]; -}; - -Entity.prototype.encode = function encode(data, enc, /* internal */ reporter) { - return this._getEncoder(enc).encode(data, reporter); -}; - -},{"../asn1":"ZCez","inherits":"Bm0n","vm":"qy9T"}],"YMUn":[function(require,module,exports) { -var inherits = require('inherits'); - -function Reporter(options) { - this._reporterState = { - obj: null, - path: [], - options: options || {}, - errors: [] - }; -} -exports.Reporter = Reporter; - -Reporter.prototype.isError = function isError(obj) { - return obj instanceof ReporterError; -}; - -Reporter.prototype.save = function save() { - var state = this._reporterState; - - return { obj: state.obj, pathLen: state.path.length }; -}; - -Reporter.prototype.restore = function restore(data) { - var state = this._reporterState; - - state.obj = data.obj; - state.path = state.path.slice(0, data.pathLen); -}; - -Reporter.prototype.enterKey = function enterKey(key) { - return this._reporterState.path.push(key); -}; - -Reporter.prototype.exitKey = function exitKey(index) { - var state = this._reporterState; - - state.path = state.path.slice(0, index - 1); -}; - -Reporter.prototype.leaveKey = function leaveKey(index, key, value) { - var state = this._reporterState; - - this.exitKey(index); - if (state.obj !== null) - state.obj[key] = value; -}; - -Reporter.prototype.path = function path() { - return this._reporterState.path.join('/'); -}; - -Reporter.prototype.enterObject = function enterObject() { - var state = this._reporterState; - - var prev = state.obj; - state.obj = {}; - return prev; -}; - -Reporter.prototype.leaveObject = function leaveObject(prev) { - var state = this._reporterState; - - var now = state.obj; - state.obj = prev; - return now; -}; - -Reporter.prototype.error = function error(msg) { - var err; - var state = this._reporterState; - - var inherited = msg instanceof ReporterError; - if (inherited) { - err = msg; - } else { - err = new ReporterError(state.path.map(function(elem) { - return '[' + JSON.stringify(elem) + ']'; - }).join(''), msg.message || msg, msg.stack); - } - - if (!state.options.partial) - throw err; - - if (!inherited) - state.errors.push(err); - - return err; -}; - -Reporter.prototype.wrapResult = function wrapResult(result) { - var state = this._reporterState; - if (!state.options.partial) - return result; - - return { - result: this.isError(result) ? null : result, - errors: state.errors - }; -}; - -function ReporterError(path, msg) { - this.path = path; - this.rethrow(msg); -}; -inherits(ReporterError, Error); - -ReporterError.prototype.rethrow = function rethrow(msg) { - this.message = msg + ' at: ' + (this.path || '(shallow)'); - if (Error.captureStackTrace) - Error.captureStackTrace(this, ReporterError); - - if (!this.stack) { - try { - // IE only adds stack when thrown - throw new Error(this.message); - } catch (e) { - this.stack = e.stack; - } - } - return this; -}; - -},{"inherits":"Bm0n"}],"K43q":[function(require,module,exports) { - -var inherits = require('inherits'); -var Reporter = require('../base').Reporter; -var Buffer = require('buffer').Buffer; - -function DecoderBuffer(base, options) { - Reporter.call(this, options); - if (!Buffer.isBuffer(base)) { - this.error('Input not Buffer'); - return; - } - - this.base = base; - this.offset = 0; - this.length = base.length; -} -inherits(DecoderBuffer, Reporter); -exports.DecoderBuffer = DecoderBuffer; - -DecoderBuffer.prototype.save = function save() { - return { offset: this.offset, reporter: Reporter.prototype.save.call(this) }; -}; - -DecoderBuffer.prototype.restore = function restore(save) { - // Return skipped data - var res = new DecoderBuffer(this.base); - res.offset = save.offset; - res.length = this.offset; - - this.offset = save.offset; - Reporter.prototype.restore.call(this, save.reporter); - - return res; -}; - -DecoderBuffer.prototype.isEmpty = function isEmpty() { - return this.offset === this.length; -}; - -DecoderBuffer.prototype.readUInt8 = function readUInt8(fail) { - if (this.offset + 1 <= this.length) - return this.base.readUInt8(this.offset++, true); - else - return this.error(fail || 'DecoderBuffer overrun'); -} - -DecoderBuffer.prototype.skip = function skip(bytes, fail) { - if (!(this.offset + bytes <= this.length)) - return this.error(fail || 'DecoderBuffer overrun'); - - var res = new DecoderBuffer(this.base); - - // Share reporter state - res._reporterState = this._reporterState; - - res.offset = this.offset; - res.length = this.offset + bytes; - this.offset += bytes; - return res; -} - -DecoderBuffer.prototype.raw = function raw(save) { - return this.base.slice(save ? save.offset : this.offset, this.length); -} - -function EncoderBuffer(value, reporter) { - if (Array.isArray(value)) { - this.length = 0; - this.value = value.map(function(item) { - if (!(item instanceof EncoderBuffer)) - item = new EncoderBuffer(item, reporter); - this.length += item.length; - return item; - }, this); - } else if (typeof value === 'number') { - if (!(0 <= value && value <= 0xff)) - return reporter.error('non-byte EncoderBuffer value'); - this.value = value; - this.length = 1; - } else if (typeof value === 'string') { - this.value = value; - this.length = Buffer.byteLength(value); - } else if (Buffer.isBuffer(value)) { - this.value = value; - this.length = value.length; - } else { - return reporter.error('Unsupported type: ' + typeof value); - } -} -exports.EncoderBuffer = EncoderBuffer; - -EncoderBuffer.prototype.join = function join(out, offset) { - if (!out) - out = new Buffer(this.length); - if (!offset) - offset = 0; - - if (this.length === 0) - return out; - - if (Array.isArray(this.value)) { - this.value.forEach(function(item) { - item.join(out, offset); - offset += item.length; - }); - } else { - if (typeof this.value === 'number') - out[offset] = this.value; - else if (typeof this.value === 'string') - out.write(this.value, offset); - else if (Buffer.isBuffer(this.value)) - this.value.copy(out, offset); - offset += this.length; - } - - return out; -}; - -},{"inherits":"Bm0n","../base":"L0i5","buffer":"dskh"}],"trF9":[function(require,module,exports) { -var Reporter = require('../base').Reporter; -var EncoderBuffer = require('../base').EncoderBuffer; -var DecoderBuffer = require('../base').DecoderBuffer; -var assert = require('minimalistic-assert'); - -// Supported tags -var tags = [ - 'seq', 'seqof', 'set', 'setof', 'objid', 'bool', - 'gentime', 'utctime', 'null_', 'enum', 'int', 'objDesc', - 'bitstr', 'bmpstr', 'charstr', 'genstr', 'graphstr', 'ia5str', 'iso646str', - 'numstr', 'octstr', 'printstr', 't61str', 'unistr', 'utf8str', 'videostr' -]; - -// Public methods list -var methods = [ - 'key', 'obj', 'use', 'optional', 'explicit', 'implicit', 'def', 'choice', - 'any', 'contains' -].concat(tags); - -// Overrided methods list -var overrided = [ - '_peekTag', '_decodeTag', '_use', - '_decodeStr', '_decodeObjid', '_decodeTime', - '_decodeNull', '_decodeInt', '_decodeBool', '_decodeList', - - '_encodeComposite', '_encodeStr', '_encodeObjid', '_encodeTime', - '_encodeNull', '_encodeInt', '_encodeBool' -]; - -function Node(enc, parent) { - var state = {}; - this._baseState = state; - - state.enc = enc; - - state.parent = parent || null; - state.children = null; - - // State - state.tag = null; - state.args = null; - state.reverseArgs = null; - state.choice = null; - state.optional = false; - state.any = false; - state.obj = false; - state.use = null; - state.useDecoder = null; - state.key = null; - state['default'] = null; - state.explicit = null; - state.implicit = null; - state.contains = null; - - // Should create new instance on each method - if (!state.parent) { - state.children = []; - this._wrap(); - } -} -module.exports = Node; - -var stateProps = [ - 'enc', 'parent', 'children', 'tag', 'args', 'reverseArgs', 'choice', - 'optional', 'any', 'obj', 'use', 'alteredUse', 'key', 'default', 'explicit', - 'implicit', 'contains' -]; - -Node.prototype.clone = function clone() { - var state = this._baseState; - var cstate = {}; - stateProps.forEach(function(prop) { - cstate[prop] = state[prop]; - }); - var res = new this.constructor(cstate.parent); - res._baseState = cstate; - return res; -}; - -Node.prototype._wrap = function wrap() { - var state = this._baseState; - methods.forEach(function(method) { - this[method] = function _wrappedMethod() { - var clone = new this.constructor(this); - state.children.push(clone); - return clone[method].apply(clone, arguments); - }; - }, this); -}; - -Node.prototype._init = function init(body) { - var state = this._baseState; - - assert(state.parent === null); - body.call(this); - - // Filter children - state.children = state.children.filter(function(child) { - return child._baseState.parent === this; - }, this); - assert.equal(state.children.length, 1, 'Root node can have only one child'); -}; - -Node.prototype._useArgs = function useArgs(args) { - var state = this._baseState; - - // Filter children and args - var children = args.filter(function(arg) { - return arg instanceof this.constructor; - }, this); - args = args.filter(function(arg) { - return !(arg instanceof this.constructor); - }, this); - - if (children.length !== 0) { - assert(state.children === null); - state.children = children; - - // Replace parent to maintain backward link - children.forEach(function(child) { - child._baseState.parent = this; - }, this); - } - if (args.length !== 0) { - assert(state.args === null); - state.args = args; - state.reverseArgs = args.map(function(arg) { - if (typeof arg !== 'object' || arg.constructor !== Object) - return arg; - - var res = {}; - Object.keys(arg).forEach(function(key) { - if (key == (key | 0)) - key |= 0; - var value = arg[key]; - res[value] = key; - }); - return res; - }); - } -}; - -// -// Overrided methods -// - -overrided.forEach(function(method) { - Node.prototype[method] = function _overrided() { - var state = this._baseState; - throw new Error(method + ' not implemented for encoding: ' + state.enc); - }; -}); - -// -// Public methods -// - -tags.forEach(function(tag) { - Node.prototype[tag] = function _tagMethod() { - var state = this._baseState; - var args = Array.prototype.slice.call(arguments); - - assert(state.tag === null); - state.tag = tag; - - this._useArgs(args); - - return this; - }; -}); - -Node.prototype.use = function use(item) { - assert(item); - var state = this._baseState; - - assert(state.use === null); - state.use = item; - - return this; -}; - -Node.prototype.optional = function optional() { - var state = this._baseState; - - state.optional = true; - - return this; -}; - -Node.prototype.def = function def(val) { - var state = this._baseState; - - assert(state['default'] === null); - state['default'] = val; - state.optional = true; - - return this; -}; - -Node.prototype.explicit = function explicit(num) { - var state = this._baseState; - - assert(state.explicit === null && state.implicit === null); - state.explicit = num; - - return this; -}; - -Node.prototype.implicit = function implicit(num) { - var state = this._baseState; - - assert(state.explicit === null && state.implicit === null); - state.implicit = num; - - return this; -}; - -Node.prototype.obj = function obj() { - var state = this._baseState; - var args = Array.prototype.slice.call(arguments); - - state.obj = true; - - if (args.length !== 0) - this._useArgs(args); - - return this; -}; - -Node.prototype.key = function key(newKey) { - var state = this._baseState; - - assert(state.key === null); - state.key = newKey; - - return this; -}; - -Node.prototype.any = function any() { - var state = this._baseState; - - state.any = true; - - return this; -}; - -Node.prototype.choice = function choice(obj) { - var state = this._baseState; - - assert(state.choice === null); - state.choice = obj; - this._useArgs(Object.keys(obj).map(function(key) { - return obj[key]; - })); - - return this; -}; - -Node.prototype.contains = function contains(item) { - var state = this._baseState; - - assert(state.use === null); - state.contains = item; - - return this; -}; - -// -// Decoding -// - -Node.prototype._decode = function decode(input, options) { - var state = this._baseState; - - // Decode root node - if (state.parent === null) - return input.wrapResult(state.children[0]._decode(input, options)); - - var result = state['default']; - var present = true; - - var prevKey = null; - if (state.key !== null) - prevKey = input.enterKey(state.key); - - // Check if tag is there - if (state.optional) { - var tag = null; - if (state.explicit !== null) - tag = state.explicit; - else if (state.implicit !== null) - tag = state.implicit; - else if (state.tag !== null) - tag = state.tag; - - if (tag === null && !state.any) { - // Trial and Error - var save = input.save(); - try { - if (state.choice === null) - this._decodeGeneric(state.tag, input, options); - else - this._decodeChoice(input, options); - present = true; - } catch (e) { - present = false; - } - input.restore(save); - } else { - present = this._peekTag(input, tag, state.any); - - if (input.isError(present)) - return present; - } - } - - // Push object on stack - var prevObj; - if (state.obj && present) - prevObj = input.enterObject(); - - if (present) { - // Unwrap explicit values - if (state.explicit !== null) { - var explicit = this._decodeTag(input, state.explicit); - if (input.isError(explicit)) - return explicit; - input = explicit; - } - - var start = input.offset; - - // Unwrap implicit and normal values - if (state.use === null && state.choice === null) { - if (state.any) - var save = input.save(); - var body = this._decodeTag( - input, - state.implicit !== null ? state.implicit : state.tag, - state.any - ); - if (input.isError(body)) - return body; - - if (state.any) - result = input.raw(save); - else - input = body; - } - - if (options && options.track && state.tag !== null) - options.track(input.path(), start, input.length, 'tagged'); - - if (options && options.track && state.tag !== null) - options.track(input.path(), input.offset, input.length, 'content'); - - // Select proper method for tag - if (state.any) - result = result; - else if (state.choice === null) - result = this._decodeGeneric(state.tag, input, options); - else - result = this._decodeChoice(input, options); - - if (input.isError(result)) - return result; - - // Decode children - if (!state.any && state.choice === null && state.children !== null) { - state.children.forEach(function decodeChildren(child) { - // NOTE: We are ignoring errors here, to let parser continue with other - // parts of encoded data - child._decode(input, options); - }); - } - - // Decode contained/encoded by schema, only in bit or octet strings - if (state.contains && (state.tag === 'octstr' || state.tag === 'bitstr')) { - var data = new DecoderBuffer(result); - result = this._getUse(state.contains, input._reporterState.obj) - ._decode(data, options); - } - } - - // Pop object - if (state.obj && present) - result = input.leaveObject(prevObj); - - // Set key - if (state.key !== null && (result !== null || present === true)) - input.leaveKey(prevKey, state.key, result); - else if (prevKey !== null) - input.exitKey(prevKey); - - return result; -}; - -Node.prototype._decodeGeneric = function decodeGeneric(tag, input, options) { - var state = this._baseState; - - if (tag === 'seq' || tag === 'set') - return null; - if (tag === 'seqof' || tag === 'setof') - return this._decodeList(input, tag, state.args[0], options); - else if (/str$/.test(tag)) - return this._decodeStr(input, tag, options); - else if (tag === 'objid' && state.args) - return this._decodeObjid(input, state.args[0], state.args[1], options); - else if (tag === 'objid') - return this._decodeObjid(input, null, null, options); - else if (tag === 'gentime' || tag === 'utctime') - return this._decodeTime(input, tag, options); - else if (tag === 'null_') - return this._decodeNull(input, options); - else if (tag === 'bool') - return this._decodeBool(input, options); - else if (tag === 'objDesc') - return this._decodeStr(input, tag, options); - else if (tag === 'int' || tag === 'enum') - return this._decodeInt(input, state.args && state.args[0], options); - - if (state.use !== null) { - return this._getUse(state.use, input._reporterState.obj) - ._decode(input, options); - } else { - return input.error('unknown tag: ' + tag); - } -}; - -Node.prototype._getUse = function _getUse(entity, obj) { - - var state = this._baseState; - // Create altered use decoder if implicit is set - state.useDecoder = this._use(entity, obj); - assert(state.useDecoder._baseState.parent === null); - state.useDecoder = state.useDecoder._baseState.children[0]; - if (state.implicit !== state.useDecoder._baseState.implicit) { - state.useDecoder = state.useDecoder.clone(); - state.useDecoder._baseState.implicit = state.implicit; - } - return state.useDecoder; -}; - -Node.prototype._decodeChoice = function decodeChoice(input, options) { - var state = this._baseState; - var result = null; - var match = false; - - Object.keys(state.choice).some(function(key) { - var save = input.save(); - var node = state.choice[key]; - try { - var value = node._decode(input, options); - if (input.isError(value)) - return false; - - result = { type: key, value: value }; - match = true; - } catch (e) { - input.restore(save); - return false; - } - return true; - }, this); - - if (!match) - return input.error('Choice not matched'); - - return result; -}; - -// -// Encoding -// - -Node.prototype._createEncoderBuffer = function createEncoderBuffer(data) { - return new EncoderBuffer(data, this.reporter); -}; - -Node.prototype._encode = function encode(data, reporter, parent) { - var state = this._baseState; - if (state['default'] !== null && state['default'] === data) - return; - - var result = this._encodeValue(data, reporter, parent); - if (result === undefined) - return; - - if (this._skipDefault(result, reporter, parent)) - return; - - return result; -}; - -Node.prototype._encodeValue = function encode(data, reporter, parent) { - var state = this._baseState; - - // Decode root node - if (state.parent === null) - return state.children[0]._encode(data, reporter || new Reporter()); - - var result = null; - - // Set reporter to share it with a child class - this.reporter = reporter; - - // Check if data is there - if (state.optional && data === undefined) { - if (state['default'] !== null) - data = state['default'] - else - return; - } - - // Encode children first - var content = null; - var primitive = false; - if (state.any) { - // Anything that was given is translated to buffer - result = this._createEncoderBuffer(data); - } else if (state.choice) { - result = this._encodeChoice(data, reporter); - } else if (state.contains) { - content = this._getUse(state.contains, parent)._encode(data, reporter); - primitive = true; - } else if (state.children) { - content = state.children.map(function(child) { - if (child._baseState.tag === 'null_') - return child._encode(null, reporter, data); - - if (child._baseState.key === null) - return reporter.error('Child should have a key'); - var prevKey = reporter.enterKey(child._baseState.key); - - if (typeof data !== 'object') - return reporter.error('Child expected, but input is not object'); - - var res = child._encode(data[child._baseState.key], reporter, data); - reporter.leaveKey(prevKey); - - return res; - }, this).filter(function(child) { - return child; - }); - content = this._createEncoderBuffer(content); - } else { - if (state.tag === 'seqof' || state.tag === 'setof') { - // TODO(indutny): this should be thrown on DSL level - if (!(state.args && state.args.length === 1)) - return reporter.error('Too many args for : ' + state.tag); - - if (!Array.isArray(data)) - return reporter.error('seqof/setof, but data is not Array'); - - var child = this.clone(); - child._baseState.implicit = null; - content = this._createEncoderBuffer(data.map(function(item) { - var state = this._baseState; - - return this._getUse(state.args[0], data)._encode(item, reporter); - }, child)); - } else if (state.use !== null) { - result = this._getUse(state.use, parent)._encode(data, reporter); - } else { - content = this._encodePrimitive(state.tag, data); - primitive = true; - } - } - - // Encode data itself - var result; - if (!state.any && state.choice === null) { - var tag = state.implicit !== null ? state.implicit : state.tag; - var cls = state.implicit === null ? 'universal' : 'context'; - - if (tag === null) { - if (state.use === null) - reporter.error('Tag could be omitted only for .use()'); - } else { - if (state.use === null) - result = this._encodeComposite(tag, primitive, cls, content); - } - } - - // Wrap in explicit - if (state.explicit !== null) - result = this._encodeComposite(state.explicit, false, 'context', result); - - return result; -}; - -Node.prototype._encodeChoice = function encodeChoice(data, reporter) { - var state = this._baseState; - - var node = state.choice[data.type]; - if (!node) { - assert( - false, - data.type + ' not found in ' + - JSON.stringify(Object.keys(state.choice))); - } - return node._encode(data.value, reporter); -}; - -Node.prototype._encodePrimitive = function encodePrimitive(tag, data) { - var state = this._baseState; - - if (/str$/.test(tag)) - return this._encodeStr(data, tag); - else if (tag === 'objid' && state.args) - return this._encodeObjid(data, state.reverseArgs[0], state.args[1]); - else if (tag === 'objid') - return this._encodeObjid(data, null, null); - else if (tag === 'gentime' || tag === 'utctime') - return this._encodeTime(data, tag); - else if (tag === 'null_') - return this._encodeNull(); - else if (tag === 'int' || tag === 'enum') - return this._encodeInt(data, state.args && state.reverseArgs[0]); - else if (tag === 'bool') - return this._encodeBool(data); - else if (tag === 'objDesc') - return this._encodeStr(data, tag); - else - throw new Error('Unsupported tag: ' + tag); -}; - -Node.prototype._isNumstr = function isNumstr(str) { - return /^[0-9 ]*$/.test(str); -}; - -Node.prototype._isPrintstr = function isPrintstr(str) { - return /^[A-Za-z0-9 '\(\)\+,\-\.\/:=\?]*$/.test(str); -}; - -},{"../base":"L0i5","minimalistic-assert":"MpuC"}],"L0i5":[function(require,module,exports) { -var base = exports; - -base.Reporter = require('./reporter').Reporter; -base.DecoderBuffer = require('./buffer').DecoderBuffer; -base.EncoderBuffer = require('./buffer').EncoderBuffer; -base.Node = require('./node'); - -},{"./reporter":"YMUn","./buffer":"K43q","./node":"trF9"}],"AO6U":[function(require,module,exports) { -var constants = require('../constants'); - -exports.tagClass = { - 0: 'universal', - 1: 'application', - 2: 'context', - 3: 'private' -}; -exports.tagClassByName = constants._reverse(exports.tagClass); - -exports.tag = { - 0x00: 'end', - 0x01: 'bool', - 0x02: 'int', - 0x03: 'bitstr', - 0x04: 'octstr', - 0x05: 'null_', - 0x06: 'objid', - 0x07: 'objDesc', - 0x08: 'external', - 0x09: 'real', - 0x0a: 'enum', - 0x0b: 'embed', - 0x0c: 'utf8str', - 0x0d: 'relativeOid', - 0x10: 'seq', - 0x11: 'set', - 0x12: 'numstr', - 0x13: 'printstr', - 0x14: 't61str', - 0x15: 'videostr', - 0x16: 'ia5str', - 0x17: 'utctime', - 0x18: 'gentime', - 0x19: 'graphstr', - 0x1a: 'iso646str', - 0x1b: 'genstr', - 0x1c: 'unistr', - 0x1d: 'charstr', - 0x1e: 'bmpstr' -}; -exports.tagByName = constants._reverse(exports.tag); - -},{"../constants":"Wtaj"}],"Wtaj":[function(require,module,exports) { -var constants = exports; - -// Helper -constants._reverse = function reverse(map) { - var res = {}; - - Object.keys(map).forEach(function(key) { - // Convert key to integer if it is stringified - if ((key | 0) == key) - key = key | 0; - - var value = map[key]; - res[value] = key; - }); - - return res; -}; - -constants.der = require('./der'); - -},{"./der":"AO6U"}],"VcmQ":[function(require,module,exports) { -var inherits = require('inherits'); - -var asn1 = require('../../asn1'); -var base = asn1.base; -var bignum = asn1.bignum; - -// Import DER constants -var der = asn1.constants.der; - -function DERDecoder(entity) { - this.enc = 'der'; - this.name = entity.name; - this.entity = entity; - - // Construct base tree - this.tree = new DERNode(); - this.tree._init(entity.body); -}; -module.exports = DERDecoder; - -DERDecoder.prototype.decode = function decode(data, options) { - if (!(data instanceof base.DecoderBuffer)) - data = new base.DecoderBuffer(data, options); - - return this.tree._decode(data, options); -}; - -// Tree methods - -function DERNode(parent) { - base.Node.call(this, 'der', parent); -} -inherits(DERNode, base.Node); - -DERNode.prototype._peekTag = function peekTag(buffer, tag, any) { - if (buffer.isEmpty()) - return false; - - var state = buffer.save(); - var decodedTag = derDecodeTag(buffer, 'Failed to peek tag: "' + tag + '"'); - if (buffer.isError(decodedTag)) - return decodedTag; - - buffer.restore(state); - - return decodedTag.tag === tag || decodedTag.tagStr === tag || - (decodedTag.tagStr + 'of') === tag || any; -}; - -DERNode.prototype._decodeTag = function decodeTag(buffer, tag, any) { - var decodedTag = derDecodeTag(buffer, - 'Failed to decode tag of "' + tag + '"'); - if (buffer.isError(decodedTag)) - return decodedTag; - - var len = derDecodeLen(buffer, - decodedTag.primitive, - 'Failed to get length of "' + tag + '"'); - - // Failure - if (buffer.isError(len)) - return len; - - if (!any && - decodedTag.tag !== tag && - decodedTag.tagStr !== tag && - decodedTag.tagStr + 'of' !== tag) { - return buffer.error('Failed to match tag: "' + tag + '"'); - } - - if (decodedTag.primitive || len !== null) - return buffer.skip(len, 'Failed to match body of: "' + tag + '"'); - - // Indefinite length... find END tag - var state = buffer.save(); - var res = this._skipUntilEnd( - buffer, - 'Failed to skip indefinite length body: "' + this.tag + '"'); - if (buffer.isError(res)) - return res; - - len = buffer.offset - state.offset; - buffer.restore(state); - return buffer.skip(len, 'Failed to match body of: "' + tag + '"'); -}; - -DERNode.prototype._skipUntilEnd = function skipUntilEnd(buffer, fail) { - while (true) { - var tag = derDecodeTag(buffer, fail); - if (buffer.isError(tag)) - return tag; - var len = derDecodeLen(buffer, tag.primitive, fail); - if (buffer.isError(len)) - return len; - - var res; - if (tag.primitive || len !== null) - res = buffer.skip(len) - else - res = this._skipUntilEnd(buffer, fail); - - // Failure - if (buffer.isError(res)) - return res; - - if (tag.tagStr === 'end') - break; - } -}; - -DERNode.prototype._decodeList = function decodeList(buffer, tag, decoder, - options) { - var result = []; - while (!buffer.isEmpty()) { - var possibleEnd = this._peekTag(buffer, 'end'); - if (buffer.isError(possibleEnd)) - return possibleEnd; - - var res = decoder.decode(buffer, 'der', options); - if (buffer.isError(res) && possibleEnd) - break; - result.push(res); - } - return result; -}; - -DERNode.prototype._decodeStr = function decodeStr(buffer, tag) { - if (tag === 'bitstr') { - var unused = buffer.readUInt8(); - if (buffer.isError(unused)) - return unused; - return { unused: unused, data: buffer.raw() }; - } else if (tag === 'bmpstr') { - var raw = buffer.raw(); - if (raw.length % 2 === 1) - return buffer.error('Decoding of string type: bmpstr length mismatch'); - - var str = ''; - for (var i = 0; i < raw.length / 2; i++) { - str += String.fromCharCode(raw.readUInt16BE(i * 2)); - } - return str; - } else if (tag === 'numstr') { - var numstr = buffer.raw().toString('ascii'); - if (!this._isNumstr(numstr)) { - return buffer.error('Decoding of string type: ' + - 'numstr unsupported characters'); - } - return numstr; - } else if (tag === 'octstr') { - return buffer.raw(); - } else if (tag === 'objDesc') { - return buffer.raw(); - } else if (tag === 'printstr') { - var printstr = buffer.raw().toString('ascii'); - if (!this._isPrintstr(printstr)) { - return buffer.error('Decoding of string type: ' + - 'printstr unsupported characters'); - } - return printstr; - } else if (/str$/.test(tag)) { - return buffer.raw().toString(); - } else { - return buffer.error('Decoding of string type: ' + tag + ' unsupported'); - } -}; - -DERNode.prototype._decodeObjid = function decodeObjid(buffer, values, relative) { - var result; - var identifiers = []; - var ident = 0; - while (!buffer.isEmpty()) { - var subident = buffer.readUInt8(); - ident <<= 7; - ident |= subident & 0x7f; - if ((subident & 0x80) === 0) { - identifiers.push(ident); - ident = 0; - } - } - if (subident & 0x80) - identifiers.push(ident); - - var first = (identifiers[0] / 40) | 0; - var second = identifiers[0] % 40; - - if (relative) - result = identifiers; - else - result = [first, second].concat(identifiers.slice(1)); - - if (values) { - var tmp = values[result.join(' ')]; - if (tmp === undefined) - tmp = values[result.join('.')]; - if (tmp !== undefined) - result = tmp; - } - - return result; -}; - -DERNode.prototype._decodeTime = function decodeTime(buffer, tag) { - var str = buffer.raw().toString(); - if (tag === 'gentime') { - var year = str.slice(0, 4) | 0; - var mon = str.slice(4, 6) | 0; - var day = str.slice(6, 8) | 0; - var hour = str.slice(8, 10) | 0; - var min = str.slice(10, 12) | 0; - var sec = str.slice(12, 14) | 0; - } else if (tag === 'utctime') { - var year = str.slice(0, 2) | 0; - var mon = str.slice(2, 4) | 0; - var day = str.slice(4, 6) | 0; - var hour = str.slice(6, 8) | 0; - var min = str.slice(8, 10) | 0; - var sec = str.slice(10, 12) | 0; - if (year < 70) - year = 2000 + year; - else - year = 1900 + year; - } else { - return buffer.error('Decoding ' + tag + ' time is not supported yet'); - } - - return Date.UTC(year, mon - 1, day, hour, min, sec, 0); -}; - -DERNode.prototype._decodeNull = function decodeNull(buffer) { - return null; -}; - -DERNode.prototype._decodeBool = function decodeBool(buffer) { - var res = buffer.readUInt8(); - if (buffer.isError(res)) - return res; - else - return res !== 0; -}; - -DERNode.prototype._decodeInt = function decodeInt(buffer, values) { - // Bigint, return as it is (assume big endian) - var raw = buffer.raw(); - var res = new bignum(raw); - - if (values) - res = values[res.toString(10)] || res; - - return res; -}; - -DERNode.prototype._use = function use(entity, obj) { - if (typeof entity === 'function') - entity = entity(obj); - return entity._getDecoder('der').tree; -}; - -// Utility methods - -function derDecodeTag(buf, fail) { - var tag = buf.readUInt8(fail); - if (buf.isError(tag)) - return tag; - - var cls = der.tagClass[tag >> 6]; - var primitive = (tag & 0x20) === 0; - - // Multi-octet tag - load - if ((tag & 0x1f) === 0x1f) { - var oct = tag; - tag = 0; - while ((oct & 0x80) === 0x80) { - oct = buf.readUInt8(fail); - if (buf.isError(oct)) - return oct; - - tag <<= 7; - tag |= oct & 0x7f; - } - } else { - tag &= 0x1f; - } - var tagStr = der.tag[tag]; - - return { - cls: cls, - primitive: primitive, - tag: tag, - tagStr: tagStr - }; -} - -function derDecodeLen(buf, primitive, fail) { - var len = buf.readUInt8(fail); - if (buf.isError(len)) - return len; - - // Indefinite form - if (!primitive && len === 0x80) - return null; - - // Definite form - if ((len & 0x80) === 0) { - // Short form - return len; - } - - // Long form - var num = len & 0x7f; - if (num > 4) - return buf.error('length octect is too long'); - - len = 0; - for (var i = 0; i < num; i++) { - len <<= 8; - var j = buf.readUInt8(fail); - if (buf.isError(j)) - return j; - len |= j; - } - - return len; -} - -},{"inherits":"Bm0n","../../asn1":"ZCez"}],"lCPy":[function(require,module,exports) { - -var inherits = require('inherits'); -var Buffer = require('buffer').Buffer; - -var DERDecoder = require('./der'); - -function PEMDecoder(entity) { - DERDecoder.call(this, entity); - this.enc = 'pem'; -}; -inherits(PEMDecoder, DERDecoder); -module.exports = PEMDecoder; - -PEMDecoder.prototype.decode = function decode(data, options) { - var lines = data.toString().split(/[\r\n]+/g); - - var label = options.label.toUpperCase(); - - var re = /^-----(BEGIN|END) ([^-]+)-----$/; - var start = -1; - var end = -1; - for (var i = 0; i < lines.length; i++) { - var match = lines[i].match(re); - if (match === null) - continue; - - if (match[2] !== label) - continue; - - if (start === -1) { - if (match[1] !== 'BEGIN') - break; - start = i; - } else { - if (match[1] !== 'END') - break; - end = i; - break; - } - } - if (start === -1 || end === -1) - throw new Error('PEM section not found for: ' + label); - - var base64 = lines.slice(start + 1, end).join(''); - // Remove excessive symbols - base64.replace(/[^a-z0-9\+\/=]+/gi, ''); - - var input = new Buffer(base64, 'base64'); - return DERDecoder.prototype.decode.call(this, input, options); -}; - -},{"inherits":"Bm0n","buffer":"dskh","./der":"VcmQ"}],"FERm":[function(require,module,exports) { -var decoders = exports; - -decoders.der = require('./der'); -decoders.pem = require('./pem'); - -},{"./der":"VcmQ","./pem":"lCPy"}],"upsI":[function(require,module,exports) { - -var inherits = require('inherits'); -var Buffer = require('buffer').Buffer; - -var asn1 = require('../../asn1'); -var base = asn1.base; - -// Import DER constants -var der = asn1.constants.der; - -function DEREncoder(entity) { - this.enc = 'der'; - this.name = entity.name; - this.entity = entity; - - // Construct base tree - this.tree = new DERNode(); - this.tree._init(entity.body); -}; -module.exports = DEREncoder; - -DEREncoder.prototype.encode = function encode(data, reporter) { - return this.tree._encode(data, reporter).join(); -}; - -// Tree methods - -function DERNode(parent) { - base.Node.call(this, 'der', parent); -} -inherits(DERNode, base.Node); - -DERNode.prototype._encodeComposite = function encodeComposite(tag, - primitive, - cls, - content) { - var encodedTag = encodeTag(tag, primitive, cls, this.reporter); - - // Short form - if (content.length < 0x80) { - var header = new Buffer(2); - header[0] = encodedTag; - header[1] = content.length; - return this._createEncoderBuffer([ header, content ]); - } - - // Long form - // Count octets required to store length - var lenOctets = 1; - for (var i = content.length; i >= 0x100; i >>= 8) - lenOctets++; - - var header = new Buffer(1 + 1 + lenOctets); - header[0] = encodedTag; - header[1] = 0x80 | lenOctets; - - for (var i = 1 + lenOctets, j = content.length; j > 0; i--, j >>= 8) - header[i] = j & 0xff; - - return this._createEncoderBuffer([ header, content ]); -}; - -DERNode.prototype._encodeStr = function encodeStr(str, tag) { - if (tag === 'bitstr') { - return this._createEncoderBuffer([ str.unused | 0, str.data ]); - } else if (tag === 'bmpstr') { - var buf = new Buffer(str.length * 2); - for (var i = 0; i < str.length; i++) { - buf.writeUInt16BE(str.charCodeAt(i), i * 2); - } - return this._createEncoderBuffer(buf); - } else if (tag === 'numstr') { - if (!this._isNumstr(str)) { - return this.reporter.error('Encoding of string type: numstr supports ' + - 'only digits and space'); - } - return this._createEncoderBuffer(str); - } else if (tag === 'printstr') { - if (!this._isPrintstr(str)) { - return this.reporter.error('Encoding of string type: printstr supports ' + - 'only latin upper and lower case letters, ' + - 'digits, space, apostrophe, left and rigth ' + - 'parenthesis, plus sign, comma, hyphen, ' + - 'dot, slash, colon, equal sign, ' + - 'question mark'); - } - return this._createEncoderBuffer(str); - } else if (/str$/.test(tag)) { - return this._createEncoderBuffer(str); - } else if (tag === 'objDesc') { - return this._createEncoderBuffer(str); - } else { - return this.reporter.error('Encoding of string type: ' + tag + - ' unsupported'); - } -}; - -DERNode.prototype._encodeObjid = function encodeObjid(id, values, relative) { - if (typeof id === 'string') { - if (!values) - return this.reporter.error('string objid given, but no values map found'); - if (!values.hasOwnProperty(id)) - return this.reporter.error('objid not found in values map'); - id = values[id].split(/[\s\.]+/g); - for (var i = 0; i < id.length; i++) - id[i] |= 0; - } else if (Array.isArray(id)) { - id = id.slice(); - for (var i = 0; i < id.length; i++) - id[i] |= 0; - } - - if (!Array.isArray(id)) { - return this.reporter.error('objid() should be either array or string, ' + - 'got: ' + JSON.stringify(id)); - } - - if (!relative) { - if (id[1] >= 40) - return this.reporter.error('Second objid identifier OOB'); - id.splice(0, 2, id[0] * 40 + id[1]); - } - - // Count number of octets - var size = 0; - for (var i = 0; i < id.length; i++) { - var ident = id[i]; - for (size++; ident >= 0x80; ident >>= 7) - size++; - } - - var objid = new Buffer(size); - var offset = objid.length - 1; - for (var i = id.length - 1; i >= 0; i--) { - var ident = id[i]; - objid[offset--] = ident & 0x7f; - while ((ident >>= 7) > 0) - objid[offset--] = 0x80 | (ident & 0x7f); - } - - return this._createEncoderBuffer(objid); -}; - -function two(num) { - if (num < 10) - return '0' + num; - else - return num; -} - -DERNode.prototype._encodeTime = function encodeTime(time, tag) { - var str; - var date = new Date(time); - - if (tag === 'gentime') { - str = [ - two(date.getFullYear()), - two(date.getUTCMonth() + 1), - two(date.getUTCDate()), - two(date.getUTCHours()), - two(date.getUTCMinutes()), - two(date.getUTCSeconds()), - 'Z' - ].join(''); - } else if (tag === 'utctime') { - str = [ - two(date.getFullYear() % 100), - two(date.getUTCMonth() + 1), - two(date.getUTCDate()), - two(date.getUTCHours()), - two(date.getUTCMinutes()), - two(date.getUTCSeconds()), - 'Z' - ].join(''); - } else { - this.reporter.error('Encoding ' + tag + ' time is not supported yet'); - } - - return this._encodeStr(str, 'octstr'); -}; - -DERNode.prototype._encodeNull = function encodeNull() { - return this._createEncoderBuffer(''); -}; - -DERNode.prototype._encodeInt = function encodeInt(num, values) { - if (typeof num === 'string') { - if (!values) - return this.reporter.error('String int or enum given, but no values map'); - if (!values.hasOwnProperty(num)) { - return this.reporter.error('Values map doesn\'t contain: ' + - JSON.stringify(num)); - } - num = values[num]; - } - - // Bignum, assume big endian - if (typeof num !== 'number' && !Buffer.isBuffer(num)) { - var numArray = num.toArray(); - if (!num.sign && numArray[0] & 0x80) { - numArray.unshift(0); - } - num = new Buffer(numArray); - } - - if (Buffer.isBuffer(num)) { - var size = num.length; - if (num.length === 0) - size++; - - var out = new Buffer(size); - num.copy(out); - if (num.length === 0) - out[0] = 0 - return this._createEncoderBuffer(out); - } - - if (num < 0x80) - return this._createEncoderBuffer(num); - - if (num < 0x100) - return this._createEncoderBuffer([0, num]); - - var size = 1; - for (var i = num; i >= 0x100; i >>= 8) - size++; - - var out = new Array(size); - for (var i = out.length - 1; i >= 0; i--) { - out[i] = num & 0xff; - num >>= 8; - } - if(out[0] & 0x80) { - out.unshift(0); - } - - return this._createEncoderBuffer(new Buffer(out)); -}; - -DERNode.prototype._encodeBool = function encodeBool(value) { - return this._createEncoderBuffer(value ? 0xff : 0); -}; - -DERNode.prototype._use = function use(entity, obj) { - if (typeof entity === 'function') - entity = entity(obj); - return entity._getEncoder('der').tree; -}; - -DERNode.prototype._skipDefault = function skipDefault(dataBuffer, reporter, parent) { - var state = this._baseState; - var i; - if (state['default'] === null) - return false; - - var data = dataBuffer.join(); - if (state.defaultBuffer === undefined) - state.defaultBuffer = this._encodeValue(state['default'], reporter, parent).join(); - - if (data.length !== state.defaultBuffer.length) - return false; - - for (i=0; i < data.length; i++) - if (data[i] !== state.defaultBuffer[i]) - return false; - - return true; -}; - -// Utility methods - -function encodeTag(tag, primitive, cls, reporter) { - var res; - - if (tag === 'seqof') - tag = 'seq'; - else if (tag === 'setof') - tag = 'set'; - - if (der.tagByName.hasOwnProperty(tag)) - res = der.tagByName[tag]; - else if (typeof tag === 'number' && (tag | 0) === tag) - res = tag; - else - return reporter.error('Unknown tag: ' + tag); - - if (res >= 0x1f) - return reporter.error('Multi-octet tag encoding unsupported'); - - if (!primitive) - res |= 0x20; - - res |= (der.tagClassByName[cls || 'universal'] << 6); - - return res; -} - -},{"inherits":"Bm0n","buffer":"dskh","../../asn1":"ZCez"}],"kikR":[function(require,module,exports) { -var inherits = require('inherits'); - -var DEREncoder = require('./der'); - -function PEMEncoder(entity) { - DEREncoder.call(this, entity); - this.enc = 'pem'; -}; -inherits(PEMEncoder, DEREncoder); -module.exports = PEMEncoder; - -PEMEncoder.prototype.encode = function encode(data, options) { - var buf = DEREncoder.prototype.encode.call(this, data); - - var p = buf.toString('base64'); - var out = [ '-----BEGIN ' + options.label + '-----' ]; - for (var i = 0; i < p.length; i += 64) - out.push(p.slice(i, i + 64)); - out.push('-----END ' + options.label + '-----'); - return out.join('\n'); -}; - -},{"inherits":"Bm0n","./der":"upsI"}],"XNDN":[function(require,module,exports) { -var encoders = exports; - -encoders.der = require('./der'); -encoders.pem = require('./pem'); - -},{"./der":"upsI","./pem":"kikR"}],"ZCez":[function(require,module,exports) { -var asn1 = exports; - -asn1.bignum = require('bn.js'); - -asn1.define = require('./asn1/api').define; -asn1.base = require('./asn1/base'); -asn1.constants = require('./asn1/constants'); -asn1.decoders = require('./asn1/decoders'); -asn1.encoders = require('./asn1/encoders'); - -},{"bn.js":"BOxy","./asn1/api":"mvP6","./asn1/base":"L0i5","./asn1/constants":"Wtaj","./asn1/decoders":"FERm","./asn1/encoders":"XNDN"}],"XsN6":[function(require,module,exports) { -// from https://github.com/Rantanen/node-dtls/blob/25a7dc861bda38cfeac93a723500eea4f0ac2e86/Certificate.js -// thanks to @Rantanen - -'use strict' - -var asn = require('asn1.js') - -var Time = asn.define('Time', function () { - this.choice({ - utcTime: this.utctime(), - generalTime: this.gentime() - }) -}) - -var AttributeTypeValue = asn.define('AttributeTypeValue', function () { - this.seq().obj( - this.key('type').objid(), - this.key('value').any() - ) -}) - -var AlgorithmIdentifier = asn.define('AlgorithmIdentifier', function () { - this.seq().obj( - this.key('algorithm').objid(), - this.key('parameters').optional(), - this.key('curve').objid().optional() - ) -}) - -var SubjectPublicKeyInfo = asn.define('SubjectPublicKeyInfo', function () { - this.seq().obj( - this.key('algorithm').use(AlgorithmIdentifier), - this.key('subjectPublicKey').bitstr() - ) -}) - -var RelativeDistinguishedName = asn.define('RelativeDistinguishedName', function () { - this.setof(AttributeTypeValue) -}) - -var RDNSequence = asn.define('RDNSequence', function () { - this.seqof(RelativeDistinguishedName) -}) - -var Name = asn.define('Name', function () { - this.choice({ - rdnSequence: this.use(RDNSequence) - }) -}) - -var Validity = asn.define('Validity', function () { - this.seq().obj( - this.key('notBefore').use(Time), - this.key('notAfter').use(Time) - ) -}) - -var Extension = asn.define('Extension', function () { - this.seq().obj( - this.key('extnID').objid(), - this.key('critical').bool().def(false), - this.key('extnValue').octstr() - ) -}) - -var TBSCertificate = asn.define('TBSCertificate', function () { - this.seq().obj( - this.key('version').explicit(0).int().optional(), - this.key('serialNumber').int(), - this.key('signature').use(AlgorithmIdentifier), - this.key('issuer').use(Name), - this.key('validity').use(Validity), - this.key('subject').use(Name), - this.key('subjectPublicKeyInfo').use(SubjectPublicKeyInfo), - this.key('issuerUniqueID').implicit(1).bitstr().optional(), - this.key('subjectUniqueID').implicit(2).bitstr().optional(), - this.key('extensions').explicit(3).seqof(Extension).optional() - ) -}) - -var X509Certificate = asn.define('X509Certificate', function () { - this.seq().obj( - this.key('tbsCertificate').use(TBSCertificate), - this.key('signatureAlgorithm').use(AlgorithmIdentifier), - this.key('signatureValue').bitstr() - ) -}) - -module.exports = X509Certificate - -},{"asn1.js":"ZCez"}],"hfk5":[function(require,module,exports) { -// from https://github.com/indutny/self-signed/blob/gh-pages/lib/asn1.js -// Fedor, you are amazing. -'use strict' - -var asn1 = require('asn1.js') - -exports.certificate = require('./certificate') - -var RSAPrivateKey = asn1.define('RSAPrivateKey', function () { - this.seq().obj( - this.key('version').int(), - this.key('modulus').int(), - this.key('publicExponent').int(), - this.key('privateExponent').int(), - this.key('prime1').int(), - this.key('prime2').int(), - this.key('exponent1').int(), - this.key('exponent2').int(), - this.key('coefficient').int() - ) -}) -exports.RSAPrivateKey = RSAPrivateKey - -var RSAPublicKey = asn1.define('RSAPublicKey', function () { - this.seq().obj( - this.key('modulus').int(), - this.key('publicExponent').int() - ) -}) -exports.RSAPublicKey = RSAPublicKey - -var PublicKey = asn1.define('SubjectPublicKeyInfo', function () { - this.seq().obj( - this.key('algorithm').use(AlgorithmIdentifier), - this.key('subjectPublicKey').bitstr() - ) -}) -exports.PublicKey = PublicKey - -var AlgorithmIdentifier = asn1.define('AlgorithmIdentifier', function () { - this.seq().obj( - this.key('algorithm').objid(), - this.key('none').null_().optional(), - this.key('curve').objid().optional(), - this.key('params').seq().obj( - this.key('p').int(), - this.key('q').int(), - this.key('g').int() - ).optional() - ) -}) - -var PrivateKeyInfo = asn1.define('PrivateKeyInfo', function () { - this.seq().obj( - this.key('version').int(), - this.key('algorithm').use(AlgorithmIdentifier), - this.key('subjectPrivateKey').octstr() - ) -}) -exports.PrivateKey = PrivateKeyInfo -var EncryptedPrivateKeyInfo = asn1.define('EncryptedPrivateKeyInfo', function () { - this.seq().obj( - this.key('algorithm').seq().obj( - this.key('id').objid(), - this.key('decrypt').seq().obj( - this.key('kde').seq().obj( - this.key('id').objid(), - this.key('kdeparams').seq().obj( - this.key('salt').octstr(), - this.key('iters').int() - ) - ), - this.key('cipher').seq().obj( - this.key('algo').objid(), - this.key('iv').octstr() - ) - ) - ), - this.key('subjectPrivateKey').octstr() - ) -}) - -exports.EncryptedPrivateKey = EncryptedPrivateKeyInfo - -var DSAPrivateKey = asn1.define('DSAPrivateKey', function () { - this.seq().obj( - this.key('version').int(), - this.key('p').int(), - this.key('q').int(), - this.key('g').int(), - this.key('pub_key').int(), - this.key('priv_key').int() - ) -}) -exports.DSAPrivateKey = DSAPrivateKey - -exports.DSAparam = asn1.define('DSAparam', function () { - this.int() -}) - -var ECPrivateKey = asn1.define('ECPrivateKey', function () { - this.seq().obj( - this.key('version').int(), - this.key('privateKey').octstr(), - this.key('parameters').optional().explicit(0).use(ECParameters), - this.key('publicKey').optional().explicit(1).bitstr() - ) -}) -exports.ECPrivateKey = ECPrivateKey - -var ECParameters = asn1.define('ECParameters', function () { - this.choice({ - namedCurve: this.objid() - }) -}) - -exports.signature = asn1.define('signature', function () { - this.seq().obj( - this.key('r').int(), - this.key('s').int() - ) -}) - -},{"asn1.js":"ZCez","./certificate":"XsN6"}],"QyaF":[function(require,module,exports) { -module.exports = {"2.16.840.1.101.3.4.1.1": "aes-128-ecb", -"2.16.840.1.101.3.4.1.2": "aes-128-cbc", -"2.16.840.1.101.3.4.1.3": "aes-128-ofb", -"2.16.840.1.101.3.4.1.4": "aes-128-cfb", -"2.16.840.1.101.3.4.1.21": "aes-192-ecb", -"2.16.840.1.101.3.4.1.22": "aes-192-cbc", -"2.16.840.1.101.3.4.1.23": "aes-192-ofb", -"2.16.840.1.101.3.4.1.24": "aes-192-cfb", -"2.16.840.1.101.3.4.1.41": "aes-256-ecb", -"2.16.840.1.101.3.4.1.42": "aes-256-cbc", -"2.16.840.1.101.3.4.1.43": "aes-256-ofb", -"2.16.840.1.101.3.4.1.44": "aes-256-cfb" -}; -},{}],"PyvQ":[function(require,module,exports) { - -// adapted from https://github.com/apatil/pemstrip -var findProc = /Proc-Type: 4,ENCRYPTED[\n\r]+DEK-Info: AES-((?:128)|(?:192)|(?:256))-CBC,([0-9A-H]+)[\n\r]+([0-9A-z\n\r\+\/\=]+)[\n\r]+/m -var startRegex = /^-----BEGIN ((?:.*? KEY)|CERTIFICATE)-----/m -var fullRegex = /^-----BEGIN ((?:.*? KEY)|CERTIFICATE)-----([0-9A-z\n\r\+\/\=]+)-----END \1-----$/m -var evp = require('evp_bytestokey') -var ciphers = require('browserify-aes') -var Buffer = require('safe-buffer').Buffer -module.exports = function (okey, password) { - var key = okey.toString() - var match = key.match(findProc) - var decrypted - if (!match) { - var match2 = key.match(fullRegex) - decrypted = new Buffer(match2[2].replace(/[\r\n]/g, ''), 'base64') - } else { - var suite = 'aes' + match[1] - var iv = Buffer.from(match[2], 'hex') - var cipherText = Buffer.from(match[3].replace(/[\r\n]/g, ''), 'base64') - var cipherKey = evp(password, iv.slice(0, 8), parseInt(match[1], 10)).key - var out = [] - var cipher = ciphers.createDecipheriv(suite, cipherKey, iv) - out.push(cipher.update(cipherText)) - out.push(cipher.final()) - decrypted = Buffer.concat(out) - } - var tag = key.match(startRegex)[1] - return { - tag: tag, - data: decrypted - } -} - -},{"evp_bytestokey":"exU6","browserify-aes":"hisC","safe-buffer":"Wugr"}],"g6E9":[function(require,module,exports) { - -var asn1 = require('./asn1') -var aesid = require('./aesid.json') -var fixProc = require('./fixProc') -var ciphers = require('browserify-aes') -var compat = require('pbkdf2') -var Buffer = require('safe-buffer').Buffer -module.exports = parseKeys - -function parseKeys (buffer) { - var password - if (typeof buffer === 'object' && !Buffer.isBuffer(buffer)) { - password = buffer.passphrase - buffer = buffer.key - } - if (typeof buffer === 'string') { - buffer = Buffer.from(buffer) - } - - var stripped = fixProc(buffer, password) - - var type = stripped.tag - var data = stripped.data - var subtype, ndata - switch (type) { - case 'CERTIFICATE': - ndata = asn1.certificate.decode(data, 'der').tbsCertificate.subjectPublicKeyInfo - // falls through - case 'PUBLIC KEY': - if (!ndata) { - ndata = asn1.PublicKey.decode(data, 'der') - } - subtype = ndata.algorithm.algorithm.join('.') - switch (subtype) { - case '1.2.840.113549.1.1.1': - return asn1.RSAPublicKey.decode(ndata.subjectPublicKey.data, 'der') - case '1.2.840.10045.2.1': - ndata.subjectPrivateKey = ndata.subjectPublicKey - return { - type: 'ec', - data: ndata - } - case '1.2.840.10040.4.1': - ndata.algorithm.params.pub_key = asn1.DSAparam.decode(ndata.subjectPublicKey.data, 'der') - return { - type: 'dsa', - data: ndata.algorithm.params - } - default: throw new Error('unknown key id ' + subtype) - } - throw new Error('unknown key type ' + type) - case 'ENCRYPTED PRIVATE KEY': - data = asn1.EncryptedPrivateKey.decode(data, 'der') - data = decrypt(data, password) - // falls through - case 'PRIVATE KEY': - ndata = asn1.PrivateKey.decode(data, 'der') - subtype = ndata.algorithm.algorithm.join('.') - switch (subtype) { - case '1.2.840.113549.1.1.1': - return asn1.RSAPrivateKey.decode(ndata.subjectPrivateKey, 'der') - case '1.2.840.10045.2.1': - return { - curve: ndata.algorithm.curve, - privateKey: asn1.ECPrivateKey.decode(ndata.subjectPrivateKey, 'der').privateKey - } - case '1.2.840.10040.4.1': - ndata.algorithm.params.priv_key = asn1.DSAparam.decode(ndata.subjectPrivateKey, 'der') - return { - type: 'dsa', - params: ndata.algorithm.params - } - default: throw new Error('unknown key id ' + subtype) - } - throw new Error('unknown key type ' + type) - case 'RSA PUBLIC KEY': - return asn1.RSAPublicKey.decode(data, 'der') - case 'RSA PRIVATE KEY': - return asn1.RSAPrivateKey.decode(data, 'der') - case 'DSA PRIVATE KEY': - return { - type: 'dsa', - params: asn1.DSAPrivateKey.decode(data, 'der') - } - case 'EC PRIVATE KEY': - data = asn1.ECPrivateKey.decode(data, 'der') - return { - curve: data.parameters.value, - privateKey: data.privateKey - } - default: throw new Error('unknown key type ' + type) - } -} -parseKeys.signature = asn1.signature -function decrypt (data, password) { - var salt = data.algorithm.decrypt.kde.kdeparams.salt - var iters = parseInt(data.algorithm.decrypt.kde.kdeparams.iters.toString(), 10) - var algo = aesid[data.algorithm.decrypt.cipher.algo.join('.')] - var iv = data.algorithm.decrypt.cipher.iv - var cipherText = data.subjectPrivateKey - var keylen = parseInt(algo.split('-')[1], 10) / 8 - var key = compat.pbkdf2Sync(password, salt, iters, keylen, 'sha1') - var cipher = ciphers.createDecipheriv(algo, key, iv) - var out = [] - out.push(cipher.update(cipherText)) - out.push(cipher.final()) - return Buffer.concat(out) -} - -},{"./asn1":"hfk5","./aesid.json":"QyaF","./fixProc":"PyvQ","browserify-aes":"hisC","pbkdf2":"BKdu","safe-buffer":"Wugr"}],"lPVM":[function(require,module,exports) { -module.exports = { - "1.3.132.0.10": "secp256k1", - "1.3.132.0.33": "p224", - "1.2.840.10045.3.1.1": "p192", - "1.2.840.10045.3.1.7": "p256", - "1.3.132.0.34": "p384", - "1.3.132.0.35": "p521" -} -; -},{}],"oj83":[function(require,module,exports) { -var Buffer = require("buffer").Buffer; -// much of this based on https://github.com/indutny/self-signed/blob/gh-pages/lib/rsa.js -var createHmac = require('create-hmac') -var crt = require('browserify-rsa') -var EC = require('elliptic').ec -var BN = require('bn.js') -var parseKeys = require('parse-asn1') -var curves = require('./curves.json') - -function sign (hash, key, hashType, signType, tag) { - var priv = parseKeys(key) - if (priv.curve) { - // rsa keys can be interpreted as ecdsa ones in openssl - if (signType !== 'ecdsa' && signType !== 'ecdsa/rsa') throw new Error('wrong private key type') - return ecSign(hash, priv) - } else if (priv.type === 'dsa') { - if (signType !== 'dsa') throw new Error('wrong private key type') - return dsaSign(hash, priv, hashType) - } else { - if (signType !== 'rsa' && signType !== 'ecdsa/rsa') throw new Error('wrong private key type') - } - hash = Buffer.concat([tag, hash]) - var len = priv.modulus.byteLength() - var pad = [ 0, 1 ] - while (hash.length + pad.length + 1 < len) pad.push(0xff) - pad.push(0x00) - var i = -1 - while (++i < hash.length) pad.push(hash[i]) - - var out = crt(pad, priv) - return out -} - -function ecSign (hash, priv) { - var curveId = curves[priv.curve.join('.')] - if (!curveId) throw new Error('unknown curve ' + priv.curve.join('.')) - - var curve = new EC(curveId) - var key = curve.keyFromPrivate(priv.privateKey) - var out = key.sign(hash) - - return new Buffer(out.toDER()) -} - -function dsaSign (hash, priv, algo) { - var x = priv.params.priv_key - var p = priv.params.p - var q = priv.params.q - var g = priv.params.g - var r = new BN(0) - var k - var H = bits2int(hash, q).mod(q) - var s = false - var kv = getKey(x, q, hash, algo) - while (s === false) { - k = makeKey(q, kv, algo) - r = makeR(g, k, p, q) - s = k.invm(q).imul(H.add(x.mul(r))).mod(q) - if (s.cmpn(0) === 0) { - s = false - r = new BN(0) - } - } - return toDER(r, s) -} - -function toDER (r, s) { - r = r.toArray() - s = s.toArray() - - // Pad values - if (r[0] & 0x80) r = [ 0 ].concat(r) - if (s[0] & 0x80) s = [ 0 ].concat(s) - - var total = r.length + s.length + 4 - var res = [ 0x30, total, 0x02, r.length ] - res = res.concat(r, [ 0x02, s.length ], s) - return new Buffer(res) -} - -function getKey (x, q, hash, algo) { - x = new Buffer(x.toArray()) - if (x.length < q.byteLength()) { - var zeros = new Buffer(q.byteLength() - x.length) - zeros.fill(0) - x = Buffer.concat([ zeros, x ]) - } - var hlen = hash.length - var hbits = bits2octets(hash, q) - var v = new Buffer(hlen) - v.fill(1) - var k = new Buffer(hlen) - k.fill(0) - k = createHmac(algo, k).update(v).update(new Buffer([ 0 ])).update(x).update(hbits).digest() - v = createHmac(algo, k).update(v).digest() - k = createHmac(algo, k).update(v).update(new Buffer([ 1 ])).update(x).update(hbits).digest() - v = createHmac(algo, k).update(v).digest() - return { k: k, v: v } -} - -function bits2int (obits, q) { - var bits = new BN(obits) - var shift = (obits.length << 3) - q.bitLength() - if (shift > 0) bits.ishrn(shift) - return bits -} - -function bits2octets (bits, q) { - bits = bits2int(bits, q) - bits = bits.mod(q) - var out = new Buffer(bits.toArray()) - if (out.length < q.byteLength()) { - var zeros = new Buffer(q.byteLength() - out.length) - zeros.fill(0) - out = Buffer.concat([ zeros, out ]) - } - return out -} - -function makeKey (q, kv, algo) { - var t - var k - - do { - t = new Buffer(0) - - while (t.length * 8 < q.bitLength()) { - kv.v = createHmac(algo, kv.k).update(kv.v).digest() - t = Buffer.concat([ t, kv.v ]) - } - - k = bits2int(t, q) - kv.k = createHmac(algo, kv.k).update(kv.v).update(new Buffer([ 0 ])).digest() - kv.v = createHmac(algo, kv.k).update(kv.v).digest() - } while (k.cmp(q) !== -1) - - return k -} - -function makeR (g, k, p, q) { - return g.toRed(BN.mont(p)).redPow(k).fromRed().mod(q) -} - -module.exports = sign -module.exports.getKey = getKey -module.exports.makeKey = makeKey - -},{"create-hmac":"Cx6S","browserify-rsa":"Aukv","elliptic":"xha3","bn.js":"BOxy","parse-asn1":"g6E9","./curves.json":"lPVM","buffer":"dskh"}],"pXUL":[function(require,module,exports) { -var Buffer = require("buffer").Buffer; -// much of this based on https://github.com/indutny/self-signed/blob/gh-pages/lib/rsa.js -var BN = require('bn.js') -var EC = require('elliptic').ec -var parseKeys = require('parse-asn1') -var curves = require('./curves.json') - -function verify (sig, hash, key, signType, tag) { - var pub = parseKeys(key) - if (pub.type === 'ec') { - // rsa keys can be interpreted as ecdsa ones in openssl - if (signType !== 'ecdsa' && signType !== 'ecdsa/rsa') throw new Error('wrong public key type') - return ecVerify(sig, hash, pub) - } else if (pub.type === 'dsa') { - if (signType !== 'dsa') throw new Error('wrong public key type') - return dsaVerify(sig, hash, pub) - } else { - if (signType !== 'rsa' && signType !== 'ecdsa/rsa') throw new Error('wrong public key type') - } - hash = Buffer.concat([tag, hash]) - var len = pub.modulus.byteLength() - var pad = [ 1 ] - var padNum = 0 - while (hash.length + pad.length + 2 < len) { - pad.push(0xff) - padNum++ - } - pad.push(0x00) - var i = -1 - while (++i < hash.length) { - pad.push(hash[i]) - } - pad = new Buffer(pad) - var red = BN.mont(pub.modulus) - sig = new BN(sig).toRed(red) - - sig = sig.redPow(new BN(pub.publicExponent)) - sig = new Buffer(sig.fromRed().toArray()) - var out = padNum < 8 ? 1 : 0 - len = Math.min(sig.length, pad.length) - if (sig.length !== pad.length) out = 1 - - i = -1 - while (++i < len) out |= sig[i] ^ pad[i] - return out === 0 -} - -function ecVerify (sig, hash, pub) { - var curveId = curves[pub.data.algorithm.curve.join('.')] - if (!curveId) throw new Error('unknown curve ' + pub.data.algorithm.curve.join('.')) - - var curve = new EC(curveId) - var pubkey = pub.data.subjectPrivateKey.data - - return curve.verify(hash, sig, pubkey) -} - -function dsaVerify (sig, hash, pub) { - var p = pub.data.p - var q = pub.data.q - var g = pub.data.g - var y = pub.data.pub_key - var unpacked = parseKeys.signature.decode(sig, 'der') - var s = unpacked.s - var r = unpacked.r - checkValue(s, q) - checkValue(r, q) - var montp = BN.mont(p) - var w = s.invm(q) - var v = g.toRed(montp) - .redPow(new BN(hash).mul(w).mod(q)) - .fromRed() - .mul(y.toRed(montp).redPow(r.mul(w).mod(q)).fromRed()) - .mod(p) - .mod(q) - return v.cmp(r) === 0 -} - -function checkValue (b, q) { - if (b.cmpn(0) <= 0) throw new Error('invalid sig') - if (b.cmp(q) >= q) throw new Error('invalid sig') -} - -module.exports = verify - -},{"bn.js":"BOxy","elliptic":"xha3","parse-asn1":"g6E9","./curves.json":"lPVM","buffer":"dskh"}],"BAbM":[function(require,module,exports) { -var Buffer = require("buffer").Buffer; -var createHash = require('create-hash') -var stream = require('stream') -var inherits = require('inherits') -var sign = require('./sign') -var verify = require('./verify') - -var algorithms = require('./algorithms.json') -Object.keys(algorithms).forEach(function (key) { - algorithms[key].id = new Buffer(algorithms[key].id, 'hex') - algorithms[key.toLowerCase()] = algorithms[key] -}) - -function Sign (algorithm) { - stream.Writable.call(this) - - var data = algorithms[algorithm] - if (!data) throw new Error('Unknown message digest') - - this._hashType = data.hash - this._hash = createHash(data.hash) - this._tag = data.id - this._signType = data.sign -} -inherits(Sign, stream.Writable) - -Sign.prototype._write = function _write (data, _, done) { - this._hash.update(data) - done() -} - -Sign.prototype.update = function update (data, enc) { - if (typeof data === 'string') data = new Buffer(data, enc) - - this._hash.update(data) - return this -} - -Sign.prototype.sign = function signMethod (key, enc) { - this.end() - var hash = this._hash.digest() - var sig = sign(hash, key, this._hashType, this._signType, this._tag) - - return enc ? sig.toString(enc) : sig -} - -function Verify (algorithm) { - stream.Writable.call(this) - - var data = algorithms[algorithm] - if (!data) throw new Error('Unknown message digest') - - this._hash = createHash(data.hash) - this._tag = data.id - this._signType = data.sign -} -inherits(Verify, stream.Writable) - -Verify.prototype._write = function _write (data, _, done) { - this._hash.update(data) - done() -} - -Verify.prototype.update = function update (data, enc) { - if (typeof data === 'string') data = new Buffer(data, enc) - - this._hash.update(data) - return this -} - -Verify.prototype.verify = function verifyMethod (key, sig, enc) { - if (typeof sig === 'string') sig = new Buffer(sig, enc) - - this.end() - var hash = this._hash.digest() - return verify(sig, hash, key, this._signType, this._tag) -} - -function createSign (algorithm) { - return new Sign(algorithm) -} - -function createVerify (algorithm) { - return new Verify(algorithm) -} - -module.exports = { - Sign: createSign, - Verify: createVerify, - createSign: createSign, - createVerify: createVerify -} - -},{"create-hash":"LF8r","stream":"fnRj","inherits":"Bm0n","./sign":"oj83","./verify":"pXUL","./algorithms.json":"WoCp","buffer":"dskh"}],"x3tl":[function(require,module,exports) { -var Buffer = require("buffer").Buffer; -var elliptic = require('elliptic') -var BN = require('bn.js') - -module.exports = function createECDH (curve) { - return new ECDH(curve) -} - -var aliases = { - secp256k1: { - name: 'secp256k1', - byteLength: 32 - }, - secp224r1: { - name: 'p224', - byteLength: 28 - }, - prime256v1: { - name: 'p256', - byteLength: 32 - }, - prime192v1: { - name: 'p192', - byteLength: 24 - }, - ed25519: { - name: 'ed25519', - byteLength: 32 - }, - secp384r1: { - name: 'p384', - byteLength: 48 - }, - secp521r1: { - name: 'p521', - byteLength: 66 - } -} - -aliases.p224 = aliases.secp224r1 -aliases.p256 = aliases.secp256r1 = aliases.prime256v1 -aliases.p192 = aliases.secp192r1 = aliases.prime192v1 -aliases.p384 = aliases.secp384r1 -aliases.p521 = aliases.secp521r1 - -function ECDH (curve) { - this.curveType = aliases[curve] - if (!this.curveType) { - this.curveType = { - name: curve - } - } - this.curve = new elliptic.ec(this.curveType.name) // eslint-disable-line new-cap - this.keys = void 0 -} - -ECDH.prototype.generateKeys = function (enc, format) { - this.keys = this.curve.genKeyPair() - return this.getPublicKey(enc, format) -} - -ECDH.prototype.computeSecret = function (other, inenc, enc) { - inenc = inenc || 'utf8' - if (!Buffer.isBuffer(other)) { - other = new Buffer(other, inenc) - } - var otherPub = this.curve.keyFromPublic(other).getPublic() - var out = otherPub.mul(this.keys.getPrivate()).getX() - return formatReturnValue(out, enc, this.curveType.byteLength) -} - -ECDH.prototype.getPublicKey = function (enc, format) { - var key = this.keys.getPublic(format === 'compressed', true) - if (format === 'hybrid') { - if (key[key.length - 1] % 2) { - key[0] = 7 - } else { - key[0] = 6 - } - } - return formatReturnValue(key, enc) -} - -ECDH.prototype.getPrivateKey = function (enc) { - return formatReturnValue(this.keys.getPrivate(), enc) -} - -ECDH.prototype.setPublicKey = function (pub, enc) { - enc = enc || 'utf8' - if (!Buffer.isBuffer(pub)) { - pub = new Buffer(pub, enc) - } - this.keys._importPublic(pub) - return this -} - -ECDH.prototype.setPrivateKey = function (priv, enc) { - enc = enc || 'utf8' - if (!Buffer.isBuffer(priv)) { - priv = new Buffer(priv, enc) - } - - var _priv = new BN(priv) - _priv = _priv.toString(16) - this.keys = this.curve.genKeyPair() - this.keys._importPrivate(_priv) - return this -} - -function formatReturnValue (bn, enc, len) { - if (!Array.isArray(bn)) { - bn = bn.toArray() - } - var buf = new Buffer(bn) - if (len && buf.length < len) { - var zeros = new Buffer(len - buf.length) - zeros.fill(0) - buf = Buffer.concat([zeros, buf]) - } - if (!enc) { - return buf - } else { - return buf.toString(enc) - } -} - -},{"elliptic":"xha3","bn.js":"BOxy","buffer":"dskh"}],"QJXH":[function(require,module,exports) { - -var createHash = require('create-hash') -var Buffer = require('safe-buffer').Buffer - -module.exports = function (seed, len) { - var t = Buffer.alloc(0) - var i = 0 - var c - while (t.length < len) { - c = i2ops(i++) - t = Buffer.concat([t, createHash('sha1').update(seed).update(c).digest()]) - } - return t.slice(0, len) -} - -function i2ops (c) { - var out = Buffer.allocUnsafe(4) - out.writeUInt32BE(c, 0) - return out -} - -},{"create-hash":"LF8r","safe-buffer":"Wugr"}],"CItV":[function(require,module,exports) { -module.exports = function xor (a, b) { - var len = a.length - var i = -1 - while (++i < len) { - a[i] ^= b[i] - } - return a -} - -},{}],"kM9E":[function(require,module,exports) { - -var BN = require('bn.js') -var Buffer = require('safe-buffer').Buffer - -function withPublic (paddedMsg, key) { - return Buffer.from(paddedMsg - .toRed(BN.mont(key.modulus)) - .redPow(new BN(key.publicExponent)) - .fromRed() - .toArray()) -} - -module.exports = withPublic - -},{"bn.js":"BOxy","safe-buffer":"Wugr"}],"U4Qp":[function(require,module,exports) { - -var parseKeys = require('parse-asn1') -var randomBytes = require('randombytes') -var createHash = require('create-hash') -var mgf = require('./mgf') -var xor = require('./xor') -var BN = require('bn.js') -var withPublic = require('./withPublic') -var crt = require('browserify-rsa') -var Buffer = require('safe-buffer').Buffer - -module.exports = function publicEncrypt (publicKey, msg, reverse) { - var padding - if (publicKey.padding) { - padding = publicKey.padding - } else if (reverse) { - padding = 1 - } else { - padding = 4 - } - var key = parseKeys(publicKey) - var paddedMsg - if (padding === 4) { - paddedMsg = oaep(key, msg) - } else if (padding === 1) { - paddedMsg = pkcs1(key, msg, reverse) - } else if (padding === 3) { - paddedMsg = new BN(msg) - if (paddedMsg.cmp(key.modulus) >= 0) { - throw new Error('data too long for modulus') - } - } else { - throw new Error('unknown padding') - } - if (reverse) { - return crt(paddedMsg, key) - } else { - return withPublic(paddedMsg, key) - } -} - -function oaep (key, msg) { - var k = key.modulus.byteLength() - var mLen = msg.length - var iHash = createHash('sha1').update(Buffer.alloc(0)).digest() - var hLen = iHash.length - var hLen2 = 2 * hLen - if (mLen > k - hLen2 - 2) { - throw new Error('message too long') - } - var ps = Buffer.alloc(k - mLen - hLen2 - 2) - var dblen = k - hLen - 1 - var seed = randomBytes(hLen) - var maskedDb = xor(Buffer.concat([iHash, ps, Buffer.alloc(1, 1), msg], dblen), mgf(seed, dblen)) - var maskedSeed = xor(seed, mgf(maskedDb, hLen)) - return new BN(Buffer.concat([Buffer.alloc(1), maskedSeed, maskedDb], k)) -} -function pkcs1 (key, msg, reverse) { - var mLen = msg.length - var k = key.modulus.byteLength() - if (mLen > k - 11) { - throw new Error('message too long') - } - var ps - if (reverse) { - ps = Buffer.alloc(k - mLen - 3, 0xff) - } else { - ps = nonZero(k - mLen - 3) - } - return new BN(Buffer.concat([Buffer.from([0, reverse ? 1 : 2]), ps, Buffer.alloc(1), msg], k)) -} -function nonZero (len) { - var out = Buffer.allocUnsafe(len) - var i = 0 - var cache = randomBytes(len * 2) - var cur = 0 - var num - while (i < len) { - if (cur === cache.length) { - cache = randomBytes(len * 2) - cur = 0 - } - num = cache[cur++] - if (num) { - out[i++] = num - } - } - return out -} - -},{"parse-asn1":"g6E9","randombytes":"XJNj","create-hash":"LF8r","./mgf":"QJXH","./xor":"CItV","bn.js":"BOxy","./withPublic":"kM9E","browserify-rsa":"Aukv","safe-buffer":"Wugr"}],"mWkL":[function(require,module,exports) { - -var parseKeys = require('parse-asn1') -var mgf = require('./mgf') -var xor = require('./xor') -var BN = require('bn.js') -var crt = require('browserify-rsa') -var createHash = require('create-hash') -var withPublic = require('./withPublic') -var Buffer = require('safe-buffer').Buffer - -module.exports = function privateDecrypt (privateKey, enc, reverse) { - var padding - if (privateKey.padding) { - padding = privateKey.padding - } else if (reverse) { - padding = 1 - } else { - padding = 4 - } - - var key = parseKeys(privateKey) - var k = key.modulus.byteLength() - if (enc.length > k || new BN(enc).cmp(key.modulus) >= 0) { - throw new Error('decryption error') - } - var msg - if (reverse) { - msg = withPublic(new BN(enc), key) - } else { - msg = crt(enc, key) - } - var zBuffer = Buffer.alloc(k - msg.length) - msg = Buffer.concat([zBuffer, msg], k) - if (padding === 4) { - return oaep(key, msg) - } else if (padding === 1) { - return pkcs1(key, msg, reverse) - } else if (padding === 3) { - return msg - } else { - throw new Error('unknown padding') - } -} - -function oaep (key, msg) { - var k = key.modulus.byteLength() - var iHash = createHash('sha1').update(Buffer.alloc(0)).digest() - var hLen = iHash.length - if (msg[0] !== 0) { - throw new Error('decryption error') - } - var maskedSeed = msg.slice(1, hLen + 1) - var maskedDb = msg.slice(hLen + 1) - var seed = xor(maskedSeed, mgf(maskedDb, hLen)) - var db = xor(maskedDb, mgf(seed, k - hLen - 1)) - if (compare(iHash, db.slice(0, hLen))) { - throw new Error('decryption error') - } - var i = hLen - while (db[i] === 0) { - i++ - } - if (db[i++] !== 1) { - throw new Error('decryption error') - } - return db.slice(i) -} - -function pkcs1 (key, msg, reverse) { - var p1 = msg.slice(0, 2) - var i = 2 - var status = 0 - while (msg[i++] !== 0) { - if (i >= msg.length) { - status++ - break - } - } - var ps = msg.slice(2, i - 1) - - if ((p1.toString('hex') !== '0002' && !reverse) || (p1.toString('hex') !== '0001' && reverse)) { - status++ - } - if (ps.length < 8) { - status++ - } - if (status) { - throw new Error('decryption error') - } - return msg.slice(i) -} -function compare (a, b) { - a = Buffer.from(a) - b = Buffer.from(b) - var dif = 0 - var len = a.length - if (a.length !== b.length) { - dif++ - len = Math.min(a.length, b.length) - } - var i = -1 - while (++i < len) { - dif += (a[i] ^ b[i]) - } - return dif -} - -},{"parse-asn1":"g6E9","./mgf":"QJXH","./xor":"CItV","bn.js":"BOxy","browserify-rsa":"Aukv","create-hash":"LF8r","./withPublic":"kM9E","safe-buffer":"Wugr"}],"WjUF":[function(require,module,exports) { -exports.publicEncrypt = require('./publicEncrypt') -exports.privateDecrypt = require('./privateDecrypt') - -exports.privateEncrypt = function privateEncrypt (key, buf) { - return exports.publicEncrypt(key, buf, true) -} - -exports.publicDecrypt = function publicDecrypt (key, buf) { - return exports.privateDecrypt(key, buf, true) -} - -},{"./publicEncrypt":"U4Qp","./privateDecrypt":"mWkL"}],"ODza":[function(require,module,exports) { - -var global = arguments[3]; -var process = require("process"); -'use strict'; - -function oldBrowser() { - throw new Error('secure random number generation not supported by this browser\nuse chrome, FireFox or Internet Explorer 11'); -} - -var safeBuffer = require('safe-buffer'); - -var randombytes = require('randombytes'); - -var Buffer = safeBuffer.Buffer; -var kBufferMaxLength = safeBuffer.kMaxLength; -var crypto = global.crypto || global.msCrypto; -var kMaxUint32 = Math.pow(2, 32) - 1; - -function assertOffset(offset, length) { - if (typeof offset !== 'number' || offset !== offset) { - // eslint-disable-line no-self-compare - throw new TypeError('offset must be a number'); - } - - if (offset > kMaxUint32 || offset < 0) { - throw new TypeError('offset must be a uint32'); - } - - if (offset > kBufferMaxLength || offset > length) { - throw new RangeError('offset out of range'); - } -} - -function assertSize(size, offset, length) { - if (typeof size !== 'number' || size !== size) { - // eslint-disable-line no-self-compare - throw new TypeError('size must be a number'); - } - - if (size > kMaxUint32 || size < 0) { - throw new TypeError('size must be a uint32'); - } - - if (size + offset > length || size > kBufferMaxLength) { - throw new RangeError('buffer too small'); - } -} - -if (crypto && crypto.getRandomValues || !true) { - exports.randomFill = randomFill; - exports.randomFillSync = randomFillSync; -} else { - exports.randomFill = oldBrowser; - exports.randomFillSync = oldBrowser; -} - -function randomFill(buf, offset, size, cb) { - if (!Buffer.isBuffer(buf) && !(buf instanceof global.Uint8Array)) { - throw new TypeError('"buf" argument must be a Buffer or Uint8Array'); - } - - if (typeof offset === 'function') { - cb = offset; - offset = 0; - size = buf.length; - } else if (typeof size === 'function') { - cb = size; - size = buf.length - offset; - } else if (typeof cb !== 'function') { - throw new TypeError('"cb" argument must be a function'); - } - - assertOffset(offset, buf.length); - assertSize(size, offset, buf.length); - return actualFill(buf, offset, size, cb); -} - -function actualFill(buf, offset, size, cb) { - if (true) { - var ourBuf = buf.buffer; - var uint = new Uint8Array(ourBuf, offset, size); - crypto.getRandomValues(uint); - - if (cb) { - process.nextTick(function () { - cb(null, buf); - }); - return; - } - - return buf; - } - - if (cb) { - randombytes(size, function (err, bytes) { - if (err) { - return cb(err); - } - - bytes.copy(buf, offset); - cb(null, buf); - }); - return; - } - - var bytes = randombytes(size); - bytes.copy(buf, offset); - return buf; -} - -function randomFillSync(buf, offset, size) { - if (typeof offset === 'undefined') { - offset = 0; - } - - if (!Buffer.isBuffer(buf) && !(buf instanceof global.Uint8Array)) { - throw new TypeError('"buf" argument must be a Buffer or Uint8Array'); - } - - assertOffset(offset, buf.length); - if (size === undefined) size = buf.length - offset; - assertSize(size, offset, buf.length); - return actualFill(buf, offset, size); -} -},{"safe-buffer":"Wugr","randombytes":"XJNj","process":"pBGv"}],"mRF4":[function(require,module,exports) { -'use strict' - -exports.randomBytes = exports.rng = exports.pseudoRandomBytes = exports.prng = require('randombytes') -exports.createHash = exports.Hash = require('create-hash') -exports.createHmac = exports.Hmac = require('create-hmac') - -var algos = require('browserify-sign/algos') -var algoKeys = Object.keys(algos) -var hashes = ['sha1', 'sha224', 'sha256', 'sha384', 'sha512', 'md5', 'rmd160'].concat(algoKeys) -exports.getHashes = function () { - return hashes -} - -var p = require('pbkdf2') -exports.pbkdf2 = p.pbkdf2 -exports.pbkdf2Sync = p.pbkdf2Sync - -var aes = require('browserify-cipher') - -exports.Cipher = aes.Cipher -exports.createCipher = aes.createCipher -exports.Cipheriv = aes.Cipheriv -exports.createCipheriv = aes.createCipheriv -exports.Decipher = aes.Decipher -exports.createDecipher = aes.createDecipher -exports.Decipheriv = aes.Decipheriv -exports.createDecipheriv = aes.createDecipheriv -exports.getCiphers = aes.getCiphers -exports.listCiphers = aes.listCiphers - -var dh = require('diffie-hellman') - -exports.DiffieHellmanGroup = dh.DiffieHellmanGroup -exports.createDiffieHellmanGroup = dh.createDiffieHellmanGroup -exports.getDiffieHellman = dh.getDiffieHellman -exports.createDiffieHellman = dh.createDiffieHellman -exports.DiffieHellman = dh.DiffieHellman - -var sign = require('browserify-sign') - -exports.createSign = sign.createSign -exports.Sign = sign.Sign -exports.createVerify = sign.createVerify -exports.Verify = sign.Verify - -exports.createECDH = require('create-ecdh') - -var publicEncrypt = require('public-encrypt') - -exports.publicEncrypt = publicEncrypt.publicEncrypt -exports.privateEncrypt = publicEncrypt.privateEncrypt -exports.publicDecrypt = publicEncrypt.publicDecrypt -exports.privateDecrypt = publicEncrypt.privateDecrypt - -// the least I can do is make error messages for the rest of the node.js/crypto api. -// ;[ -// 'createCredentials' -// ].forEach(function (name) { -// exports[name] = function () { -// throw new Error([ -// 'sorry, ' + name + ' is not implemented yet', -// 'we accept pull requests', -// 'https://github.com/crypto-browserify/crypto-browserify' -// ].join('\n')) -// } -// }) - -var rf = require('randomfill') - -exports.randomFill = rf.randomFill -exports.randomFillSync = rf.randomFillSync - -exports.createCredentials = function () { - throw new Error([ - 'sorry, createCredentials is not implemented yet', - 'we accept pull requests', - 'https://github.com/crypto-browserify/crypto-browserify' - ].join('\n')) -} - -exports.constants = { - 'DH_CHECK_P_NOT_SAFE_PRIME': 2, - 'DH_CHECK_P_NOT_PRIME': 1, - 'DH_UNABLE_TO_CHECK_GENERATOR': 4, - 'DH_NOT_SUITABLE_GENERATOR': 8, - 'NPN_ENABLED': 1, - 'ALPN_ENABLED': 1, - 'RSA_PKCS1_PADDING': 1, - 'RSA_SSLV23_PADDING': 2, - 'RSA_NO_PADDING': 3, - 'RSA_PKCS1_OAEP_PADDING': 4, - 'RSA_X931_PADDING': 5, - 'RSA_PKCS1_PSS_PADDING': 6, - 'POINT_CONVERSION_COMPRESSED': 2, - 'POINT_CONVERSION_UNCOMPRESSED': 4, - 'POINT_CONVERSION_HYBRID': 6 -} - -},{"randombytes":"XJNj","create-hash":"LF8r","create-hmac":"Cx6S","browserify-sign/algos":"YKr5","pbkdf2":"BKdu","browserify-cipher":"KTbn","diffie-hellman":"WFL2","browserify-sign":"BAbM","create-ecdh":"x3tl","public-encrypt":"WjUF","randomfill":"ODza"}],"BhoU":[function(require,module,exports) { -'use strict'; - -const inherits = require('inherits'); - -function Reporter(options) { - this._reporterState = { - obj: null, - path: [], - options: options || {}, - errors: [] - }; -} -exports.Reporter = Reporter; - -Reporter.prototype.isError = function isError(obj) { - return obj instanceof ReporterError; -}; - -Reporter.prototype.save = function save() { - const state = this._reporterState; - - return { obj: state.obj, pathLen: state.path.length }; -}; - -Reporter.prototype.restore = function restore(data) { - const state = this._reporterState; - - state.obj = data.obj; - state.path = state.path.slice(0, data.pathLen); -}; - -Reporter.prototype.enterKey = function enterKey(key) { - return this._reporterState.path.push(key); -}; - -Reporter.prototype.exitKey = function exitKey(index) { - const state = this._reporterState; - - state.path = state.path.slice(0, index - 1); -}; - -Reporter.prototype.leaveKey = function leaveKey(index, key, value) { - const state = this._reporterState; - - this.exitKey(index); - if (state.obj !== null) - state.obj[key] = value; -}; - -Reporter.prototype.path = function path() { - return this._reporterState.path.join('/'); -}; - -Reporter.prototype.enterObject = function enterObject() { - const state = this._reporterState; - - const prev = state.obj; - state.obj = {}; - return prev; -}; - -Reporter.prototype.leaveObject = function leaveObject(prev) { - const state = this._reporterState; - - const now = state.obj; - state.obj = prev; - return now; -}; - -Reporter.prototype.error = function error(msg) { - let err; - const state = this._reporterState; - - const inherited = msg instanceof ReporterError; - if (inherited) { - err = msg; - } else { - err = new ReporterError(state.path.map(function(elem) { - return '[' + JSON.stringify(elem) + ']'; - }).join(''), msg.message || msg, msg.stack); - } - - if (!state.options.partial) - throw err; - - if (!inherited) - state.errors.push(err); - - return err; -}; - -Reporter.prototype.wrapResult = function wrapResult(result) { - const state = this._reporterState; - if (!state.options.partial) - return result; - - return { - result: this.isError(result) ? null : result, - errors: state.errors - }; -}; - -function ReporterError(path, msg) { - this.path = path; - this.rethrow(msg); -} -inherits(ReporterError, Error); - -ReporterError.prototype.rethrow = function rethrow(msg) { - this.message = msg + ' at: ' + (this.path || '(shallow)'); - if (Error.captureStackTrace) - Error.captureStackTrace(this, ReporterError); - - if (!this.stack) { - try { - // IE only adds stack when thrown - throw new Error(this.message); - } catch (e) { - this.stack = e.stack; - } - } - return this; -}; - -},{"inherits":"Bm0n"}],"JJX4":[function(require,module,exports) { - -'use strict'; - -const inherits = require('inherits'); -const Reporter = require('../base/reporter').Reporter; -const Buffer = require('buffer').Buffer; - -function DecoderBuffer(base, options) { - Reporter.call(this, options); - if (!Buffer.isBuffer(base)) { - this.error('Input not Buffer'); - return; - } - - this.base = base; - this.offset = 0; - this.length = base.length; -} -inherits(DecoderBuffer, Reporter); -exports.DecoderBuffer = DecoderBuffer; - -DecoderBuffer.isDecoderBuffer = function isDecoderBuffer(data) { - if (data instanceof DecoderBuffer) { - return true; - } - - // Or accept compatible API - const isCompatible = typeof data === 'object' && - Buffer.isBuffer(data.base) && - data.constructor.name === 'DecoderBuffer' && - typeof data.offset === 'number' && - typeof data.length === 'number' && - typeof data.save === 'function' && - typeof data.restore === 'function' && - typeof data.isEmpty === 'function' && - typeof data.readUInt8 === 'function' && - typeof data.skip === 'function' && - typeof data.raw === 'function'; - - return isCompatible; -}; - -DecoderBuffer.prototype.save = function save() { - return { offset: this.offset, reporter: Reporter.prototype.save.call(this) }; -}; - -DecoderBuffer.prototype.restore = function restore(save) { - // Return skipped data - const res = new DecoderBuffer(this.base); - res.offset = save.offset; - res.length = this.offset; - - this.offset = save.offset; - Reporter.prototype.restore.call(this, save.reporter); - - return res; -}; - -DecoderBuffer.prototype.isEmpty = function isEmpty() { - return this.offset === this.length; -}; - -DecoderBuffer.prototype.readUInt8 = function readUInt8(fail) { - if (this.offset + 1 <= this.length) - return this.base.readUInt8(this.offset++, true); - else - return this.error(fail || 'DecoderBuffer overrun'); -}; - -DecoderBuffer.prototype.skip = function skip(bytes, fail) { - if (!(this.offset + bytes <= this.length)) - return this.error(fail || 'DecoderBuffer overrun'); - - const res = new DecoderBuffer(this.base); - - // Share reporter state - res._reporterState = this._reporterState; - - res.offset = this.offset; - res.length = this.offset + bytes; - this.offset += bytes; - return res; -}; - -DecoderBuffer.prototype.raw = function raw(save) { - return this.base.slice(save ? save.offset : this.offset, this.length); -}; - -function EncoderBuffer(value, reporter) { - if (Array.isArray(value)) { - this.length = 0; - this.value = value.map(function(item) { - if (!EncoderBuffer.isEncoderBuffer(item)) - item = new EncoderBuffer(item, reporter); - this.length += item.length; - return item; - }, this); - } else if (typeof value === 'number') { - if (!(0 <= value && value <= 0xff)) - return reporter.error('non-byte EncoderBuffer value'); - this.value = value; - this.length = 1; - } else if (typeof value === 'string') { - this.value = value; - this.length = Buffer.byteLength(value); - } else if (Buffer.isBuffer(value)) { - this.value = value; - this.length = value.length; - } else { - return reporter.error('Unsupported type: ' + typeof value); - } -} -exports.EncoderBuffer = EncoderBuffer; - -EncoderBuffer.isEncoderBuffer = function isEncoderBuffer(data) { - if (data instanceof EncoderBuffer) { - return true; - } - - // Or accept compatible API - const isCompatible = typeof data === 'object' && - data.constructor.name === 'EncoderBuffer' && - typeof data.length === 'number' && - typeof data.join === 'function'; - - return isCompatible; -}; - -EncoderBuffer.prototype.join = function join(out, offset) { - if (!out) - out = new Buffer(this.length); - if (!offset) - offset = 0; - - if (this.length === 0) - return out; - - if (Array.isArray(this.value)) { - this.value.forEach(function(item) { - item.join(out, offset); - offset += item.length; - }); - } else { - if (typeof this.value === 'number') - out[offset] = this.value; - else if (typeof this.value === 'string') - out.write(this.value, offset); - else if (Buffer.isBuffer(this.value)) - this.value.copy(out, offset); - offset += this.length; - } - - return out; -}; - -},{"inherits":"Bm0n","../base/reporter":"BhoU","buffer":"dskh"}],"kZXB":[function(require,module,exports) { -'use strict'; - -const Reporter = require('../base/reporter').Reporter; -const EncoderBuffer = require('../base/buffer').EncoderBuffer; -const DecoderBuffer = require('../base/buffer').DecoderBuffer; -const assert = require('minimalistic-assert'); - -// Supported tags -const tags = [ - 'seq', 'seqof', 'set', 'setof', 'objid', 'bool', - 'gentime', 'utctime', 'null_', 'enum', 'int', 'objDesc', - 'bitstr', 'bmpstr', 'charstr', 'genstr', 'graphstr', 'ia5str', 'iso646str', - 'numstr', 'octstr', 'printstr', 't61str', 'unistr', 'utf8str', 'videostr' -]; - -// Public methods list -const methods = [ - 'key', 'obj', 'use', 'optional', 'explicit', 'implicit', 'def', 'choice', - 'any', 'contains' -].concat(tags); - -// Overrided methods list -const overrided = [ - '_peekTag', '_decodeTag', '_use', - '_decodeStr', '_decodeObjid', '_decodeTime', - '_decodeNull', '_decodeInt', '_decodeBool', '_decodeList', - - '_encodeComposite', '_encodeStr', '_encodeObjid', '_encodeTime', - '_encodeNull', '_encodeInt', '_encodeBool' -]; - -function Node(enc, parent, name) { - const state = {}; - this._baseState = state; - - state.name = name; - state.enc = enc; - - state.parent = parent || null; - state.children = null; - - // State - state.tag = null; - state.args = null; - state.reverseArgs = null; - state.choice = null; - state.optional = false; - state.any = false; - state.obj = false; - state.use = null; - state.useDecoder = null; - state.key = null; - state['default'] = null; - state.explicit = null; - state.implicit = null; - state.contains = null; - - // Should create new instance on each method - if (!state.parent) { - state.children = []; - this._wrap(); - } -} -module.exports = Node; - -const stateProps = [ - 'enc', 'parent', 'children', 'tag', 'args', 'reverseArgs', 'choice', - 'optional', 'any', 'obj', 'use', 'alteredUse', 'key', 'default', 'explicit', - 'implicit', 'contains' -]; - -Node.prototype.clone = function clone() { - const state = this._baseState; - const cstate = {}; - stateProps.forEach(function(prop) { - cstate[prop] = state[prop]; - }); - const res = new this.constructor(cstate.parent); - res._baseState = cstate; - return res; -}; - -Node.prototype._wrap = function wrap() { - const state = this._baseState; - methods.forEach(function(method) { - this[method] = function _wrappedMethod() { - const clone = new this.constructor(this); - state.children.push(clone); - return clone[method].apply(clone, arguments); - }; - }, this); -}; - -Node.prototype._init = function init(body) { - const state = this._baseState; - - assert(state.parent === null); - body.call(this); - - // Filter children - state.children = state.children.filter(function(child) { - return child._baseState.parent === this; - }, this); - assert.equal(state.children.length, 1, 'Root node can have only one child'); -}; - -Node.prototype._useArgs = function useArgs(args) { - const state = this._baseState; - - // Filter children and args - const children = args.filter(function(arg) { - return arg instanceof this.constructor; - }, this); - args = args.filter(function(arg) { - return !(arg instanceof this.constructor); - }, this); - - if (children.length !== 0) { - assert(state.children === null); - state.children = children; - - // Replace parent to maintain backward link - children.forEach(function(child) { - child._baseState.parent = this; - }, this); - } - if (args.length !== 0) { - assert(state.args === null); - state.args = args; - state.reverseArgs = args.map(function(arg) { - if (typeof arg !== 'object' || arg.constructor !== Object) - return arg; - - const res = {}; - Object.keys(arg).forEach(function(key) { - if (key == (key | 0)) - key |= 0; - const value = arg[key]; - res[value] = key; - }); - return res; - }); - } -}; - -// -// Overrided methods -// - -overrided.forEach(function(method) { - Node.prototype[method] = function _overrided() { - const state = this._baseState; - throw new Error(method + ' not implemented for encoding: ' + state.enc); - }; -}); - -// -// Public methods -// - -tags.forEach(function(tag) { - Node.prototype[tag] = function _tagMethod() { - const state = this._baseState; - const args = Array.prototype.slice.call(arguments); - - assert(state.tag === null); - state.tag = tag; - - this._useArgs(args); - - return this; - }; -}); - -Node.prototype.use = function use(item) { - assert(item); - const state = this._baseState; - - assert(state.use === null); - state.use = item; - - return this; -}; - -Node.prototype.optional = function optional() { - const state = this._baseState; - - state.optional = true; - - return this; -}; - -Node.prototype.def = function def(val) { - const state = this._baseState; - - assert(state['default'] === null); - state['default'] = val; - state.optional = true; - - return this; -}; - -Node.prototype.explicit = function explicit(num) { - const state = this._baseState; - - assert(state.explicit === null && state.implicit === null); - state.explicit = num; - - return this; -}; - -Node.prototype.implicit = function implicit(num) { - const state = this._baseState; - - assert(state.explicit === null && state.implicit === null); - state.implicit = num; - - return this; -}; - -Node.prototype.obj = function obj() { - const state = this._baseState; - const args = Array.prototype.slice.call(arguments); - - state.obj = true; - - if (args.length !== 0) - this._useArgs(args); - - return this; -}; - -Node.prototype.key = function key(newKey) { - const state = this._baseState; - - assert(state.key === null); - state.key = newKey; - - return this; -}; - -Node.prototype.any = function any() { - const state = this._baseState; - - state.any = true; - - return this; -}; - -Node.prototype.choice = function choice(obj) { - const state = this._baseState; - - assert(state.choice === null); - state.choice = obj; - this._useArgs(Object.keys(obj).map(function(key) { - return obj[key]; - })); - - return this; -}; - -Node.prototype.contains = function contains(item) { - const state = this._baseState; - - assert(state.use === null); - state.contains = item; - - return this; -}; - -// -// Decoding -// - -Node.prototype._decode = function decode(input, options) { - const state = this._baseState; - - // Decode root node - if (state.parent === null) - return input.wrapResult(state.children[0]._decode(input, options)); - - let result = state['default']; - let present = true; - - let prevKey = null; - if (state.key !== null) - prevKey = input.enterKey(state.key); - - // Check if tag is there - if (state.optional) { - let tag = null; - if (state.explicit !== null) - tag = state.explicit; - else if (state.implicit !== null) - tag = state.implicit; - else if (state.tag !== null) - tag = state.tag; - - if (tag === null && !state.any) { - // Trial and Error - const save = input.save(); - try { - if (state.choice === null) - this._decodeGeneric(state.tag, input, options); - else - this._decodeChoice(input, options); - present = true; - } catch (e) { - present = false; - } - input.restore(save); - } else { - present = this._peekTag(input, tag, state.any); - - if (input.isError(present)) - return present; - } - } - - // Push object on stack - let prevObj; - if (state.obj && present) - prevObj = input.enterObject(); - - if (present) { - // Unwrap explicit values - if (state.explicit !== null) { - const explicit = this._decodeTag(input, state.explicit); - if (input.isError(explicit)) - return explicit; - input = explicit; - } - - const start = input.offset; - - // Unwrap implicit and normal values - if (state.use === null && state.choice === null) { - let save; - if (state.any) - save = input.save(); - const body = this._decodeTag( - input, - state.implicit !== null ? state.implicit : state.tag, - state.any - ); - if (input.isError(body)) - return body; - - if (state.any) - result = input.raw(save); - else - input = body; - } - - if (options && options.track && state.tag !== null) - options.track(input.path(), start, input.length, 'tagged'); - - if (options && options.track && state.tag !== null) - options.track(input.path(), input.offset, input.length, 'content'); - - // Select proper method for tag - if (state.any) { - // no-op - } else if (state.choice === null) { - result = this._decodeGeneric(state.tag, input, options); - } else { - result = this._decodeChoice(input, options); - } - - if (input.isError(result)) - return result; - - // Decode children - if (!state.any && state.choice === null && state.children !== null) { - state.children.forEach(function decodeChildren(child) { - // NOTE: We are ignoring errors here, to let parser continue with other - // parts of encoded data - child._decode(input, options); - }); - } - - // Decode contained/encoded by schema, only in bit or octet strings - if (state.contains && (state.tag === 'octstr' || state.tag === 'bitstr')) { - const data = new DecoderBuffer(result); - result = this._getUse(state.contains, input._reporterState.obj) - ._decode(data, options); - } - } - - // Pop object - if (state.obj && present) - result = input.leaveObject(prevObj); - - // Set key - if (state.key !== null && (result !== null || present === true)) - input.leaveKey(prevKey, state.key, result); - else if (prevKey !== null) - input.exitKey(prevKey); - - return result; -}; - -Node.prototype._decodeGeneric = function decodeGeneric(tag, input, options) { - const state = this._baseState; - - if (tag === 'seq' || tag === 'set') - return null; - if (tag === 'seqof' || tag === 'setof') - return this._decodeList(input, tag, state.args[0], options); - else if (/str$/.test(tag)) - return this._decodeStr(input, tag, options); - else if (tag === 'objid' && state.args) - return this._decodeObjid(input, state.args[0], state.args[1], options); - else if (tag === 'objid') - return this._decodeObjid(input, null, null, options); - else if (tag === 'gentime' || tag === 'utctime') - return this._decodeTime(input, tag, options); - else if (tag === 'null_') - return this._decodeNull(input, options); - else if (tag === 'bool') - return this._decodeBool(input, options); - else if (tag === 'objDesc') - return this._decodeStr(input, tag, options); - else if (tag === 'int' || tag === 'enum') - return this._decodeInt(input, state.args && state.args[0], options); - - if (state.use !== null) { - return this._getUse(state.use, input._reporterState.obj) - ._decode(input, options); - } else { - return input.error('unknown tag: ' + tag); - } -}; - -Node.prototype._getUse = function _getUse(entity, obj) { - - const state = this._baseState; - // Create altered use decoder if implicit is set - state.useDecoder = this._use(entity, obj); - assert(state.useDecoder._baseState.parent === null); - state.useDecoder = state.useDecoder._baseState.children[0]; - if (state.implicit !== state.useDecoder._baseState.implicit) { - state.useDecoder = state.useDecoder.clone(); - state.useDecoder._baseState.implicit = state.implicit; - } - return state.useDecoder; -}; - -Node.prototype._decodeChoice = function decodeChoice(input, options) { - const state = this._baseState; - let result = null; - let match = false; - - Object.keys(state.choice).some(function(key) { - const save = input.save(); - const node = state.choice[key]; - try { - const value = node._decode(input, options); - if (input.isError(value)) - return false; - - result = { type: key, value: value }; - match = true; - } catch (e) { - input.restore(save); - return false; - } - return true; - }, this); - - if (!match) - return input.error('Choice not matched'); - - return result; -}; - -// -// Encoding -// - -Node.prototype._createEncoderBuffer = function createEncoderBuffer(data) { - return new EncoderBuffer(data, this.reporter); -}; - -Node.prototype._encode = function encode(data, reporter, parent) { - const state = this._baseState; - if (state['default'] !== null && state['default'] === data) - return; - - const result = this._encodeValue(data, reporter, parent); - if (result === undefined) - return; - - if (this._skipDefault(result, reporter, parent)) - return; - - return result; -}; - -Node.prototype._encodeValue = function encode(data, reporter, parent) { - const state = this._baseState; - - // Decode root node - if (state.parent === null) - return state.children[0]._encode(data, reporter || new Reporter()); - - let result = null; - - // Set reporter to share it with a child class - this.reporter = reporter; - - // Check if data is there - if (state.optional && data === undefined) { - if (state['default'] !== null) - data = state['default']; - else - return; - } - - // Encode children first - let content = null; - let primitive = false; - if (state.any) { - // Anything that was given is translated to buffer - result = this._createEncoderBuffer(data); - } else if (state.choice) { - result = this._encodeChoice(data, reporter); - } else if (state.contains) { - content = this._getUse(state.contains, parent)._encode(data, reporter); - primitive = true; - } else if (state.children) { - content = state.children.map(function(child) { - if (child._baseState.tag === 'null_') - return child._encode(null, reporter, data); - - if (child._baseState.key === null) - return reporter.error('Child should have a key'); - const prevKey = reporter.enterKey(child._baseState.key); - - if (typeof data !== 'object') - return reporter.error('Child expected, but input is not object'); - - const res = child._encode(data[child._baseState.key], reporter, data); - reporter.leaveKey(prevKey); - - return res; - }, this).filter(function(child) { - return child; - }); - content = this._createEncoderBuffer(content); - } else { - if (state.tag === 'seqof' || state.tag === 'setof') { - // TODO(indutny): this should be thrown on DSL level - if (!(state.args && state.args.length === 1)) - return reporter.error('Too many args for : ' + state.tag); - - if (!Array.isArray(data)) - return reporter.error('seqof/setof, but data is not Array'); - - const child = this.clone(); - child._baseState.implicit = null; - content = this._createEncoderBuffer(data.map(function(item) { - const state = this._baseState; - - return this._getUse(state.args[0], data)._encode(item, reporter); - }, child)); - } else if (state.use !== null) { - result = this._getUse(state.use, parent)._encode(data, reporter); - } else { - content = this._encodePrimitive(state.tag, data); - primitive = true; - } - } - - // Encode data itself - if (!state.any && state.choice === null) { - const tag = state.implicit !== null ? state.implicit : state.tag; - const cls = state.implicit === null ? 'universal' : 'context'; - - if (tag === null) { - if (state.use === null) - reporter.error('Tag could be omitted only for .use()'); - } else { - if (state.use === null) - result = this._encodeComposite(tag, primitive, cls, content); - } - } - - // Wrap in explicit - if (state.explicit !== null) - result = this._encodeComposite(state.explicit, false, 'context', result); - - return result; -}; - -Node.prototype._encodeChoice = function encodeChoice(data, reporter) { - const state = this._baseState; - - const node = state.choice[data.type]; - if (!node) { - assert( - false, - data.type + ' not found in ' + - JSON.stringify(Object.keys(state.choice))); - } - return node._encode(data.value, reporter); -}; - -Node.prototype._encodePrimitive = function encodePrimitive(tag, data) { - const state = this._baseState; - - if (/str$/.test(tag)) - return this._encodeStr(data, tag); - else if (tag === 'objid' && state.args) - return this._encodeObjid(data, state.reverseArgs[0], state.args[1]); - else if (tag === 'objid') - return this._encodeObjid(data, null, null); - else if (tag === 'gentime' || tag === 'utctime') - return this._encodeTime(data, tag); - else if (tag === 'null_') - return this._encodeNull(); - else if (tag === 'int' || tag === 'enum') - return this._encodeInt(data, state.args && state.reverseArgs[0]); - else if (tag === 'bool') - return this._encodeBool(data); - else if (tag === 'objDesc') - return this._encodeStr(data, tag); - else - throw new Error('Unsupported tag: ' + tag); -}; - -Node.prototype._isNumstr = function isNumstr(str) { - return /^[0-9 ]*$/.test(str); -}; - -Node.prototype._isPrintstr = function isPrintstr(str) { - return /^[A-Za-z0-9 '()+,-./:=?]*$/.test(str); -}; - -},{"../base/reporter":"BhoU","../base/buffer":"JJX4","minimalistic-assert":"MpuC"}],"psPF":[function(require,module,exports) { -'use strict'; - -// Helper -function reverse(map) { - const res = {}; - - Object.keys(map).forEach(function(key) { - // Convert key to integer if it is stringified - if ((key | 0) == key) - key = key | 0; - - const value = map[key]; - res[value] = key; - }); - - return res; -} - -exports.tagClass = { - 0: 'universal', - 1: 'application', - 2: 'context', - 3: 'private' -}; -exports.tagClassByName = reverse(exports.tagClass); - -exports.tag = { - 0x00: 'end', - 0x01: 'bool', - 0x02: 'int', - 0x03: 'bitstr', - 0x04: 'octstr', - 0x05: 'null_', - 0x06: 'objid', - 0x07: 'objDesc', - 0x08: 'external', - 0x09: 'real', - 0x0a: 'enum', - 0x0b: 'embed', - 0x0c: 'utf8str', - 0x0d: 'relativeOid', - 0x10: 'seq', - 0x11: 'set', - 0x12: 'numstr', - 0x13: 'printstr', - 0x14: 't61str', - 0x15: 'videostr', - 0x16: 'ia5str', - 0x17: 'utctime', - 0x18: 'gentime', - 0x19: 'graphstr', - 0x1a: 'iso646str', - 0x1b: 'genstr', - 0x1c: 'unistr', - 0x1d: 'charstr', - 0x1e: 'bmpstr' -}; -exports.tagByName = reverse(exports.tag); - -},{}],"adTp":[function(require,module,exports) { - -'use strict'; - -const inherits = require('inherits'); -const Buffer = require('buffer').Buffer; -const Node = require('../base/node'); - -// Import DER constants -const der = require('../constants/der'); - -function DEREncoder(entity) { - this.enc = 'der'; - this.name = entity.name; - this.entity = entity; - - // Construct base tree - this.tree = new DERNode(); - this.tree._init(entity.body); -} -module.exports = DEREncoder; - -DEREncoder.prototype.encode = function encode(data, reporter) { - return this.tree._encode(data, reporter).join(); -}; - -// Tree methods - -function DERNode(parent) { - Node.call(this, 'der', parent); -} -inherits(DERNode, Node); - -DERNode.prototype._encodeComposite = function encodeComposite(tag, - primitive, - cls, - content) { - const encodedTag = encodeTag(tag, primitive, cls, this.reporter); - - // Short form - if (content.length < 0x80) { - const header = new Buffer(2); - header[0] = encodedTag; - header[1] = content.length; - return this._createEncoderBuffer([ header, content ]); - } - - // Long form - // Count octets required to store length - let lenOctets = 1; - for (let i = content.length; i >= 0x100; i >>= 8) - lenOctets++; - - const header = new Buffer(1 + 1 + lenOctets); - header[0] = encodedTag; - header[1] = 0x80 | lenOctets; - - for (let i = 1 + lenOctets, j = content.length; j > 0; i--, j >>= 8) - header[i] = j & 0xff; - - return this._createEncoderBuffer([ header, content ]); -}; - -DERNode.prototype._encodeStr = function encodeStr(str, tag) { - if (tag === 'bitstr') { - return this._createEncoderBuffer([ str.unused | 0, str.data ]); - } else if (tag === 'bmpstr') { - const buf = new Buffer(str.length * 2); - for (let i = 0; i < str.length; i++) { - buf.writeUInt16BE(str.charCodeAt(i), i * 2); - } - return this._createEncoderBuffer(buf); - } else if (tag === 'numstr') { - if (!this._isNumstr(str)) { - return this.reporter.error('Encoding of string type: numstr supports ' + - 'only digits and space'); - } - return this._createEncoderBuffer(str); - } else if (tag === 'printstr') { - if (!this._isPrintstr(str)) { - return this.reporter.error('Encoding of string type: printstr supports ' + - 'only latin upper and lower case letters, ' + - 'digits, space, apostrophe, left and rigth ' + - 'parenthesis, plus sign, comma, hyphen, ' + - 'dot, slash, colon, equal sign, ' + - 'question mark'); - } - return this._createEncoderBuffer(str); - } else if (/str$/.test(tag)) { - return this._createEncoderBuffer(str); - } else if (tag === 'objDesc') { - return this._createEncoderBuffer(str); - } else { - return this.reporter.error('Encoding of string type: ' + tag + - ' unsupported'); - } -}; - -DERNode.prototype._encodeObjid = function encodeObjid(id, values, relative) { - if (typeof id === 'string') { - if (!values) - return this.reporter.error('string objid given, but no values map found'); - if (!values.hasOwnProperty(id)) - return this.reporter.error('objid not found in values map'); - id = values[id].split(/[\s.]+/g); - for (let i = 0; i < id.length; i++) - id[i] |= 0; - } else if (Array.isArray(id)) { - id = id.slice(); - for (let i = 0; i < id.length; i++) - id[i] |= 0; - } - - if (!Array.isArray(id)) { - return this.reporter.error('objid() should be either array or string, ' + - 'got: ' + JSON.stringify(id)); - } - - if (!relative) { - if (id[1] >= 40) - return this.reporter.error('Second objid identifier OOB'); - id.splice(0, 2, id[0] * 40 + id[1]); - } - - // Count number of octets - let size = 0; - for (let i = 0; i < id.length; i++) { - let ident = id[i]; - for (size++; ident >= 0x80; ident >>= 7) - size++; - } - - const objid = new Buffer(size); - let offset = objid.length - 1; - for (let i = id.length - 1; i >= 0; i--) { - let ident = id[i]; - objid[offset--] = ident & 0x7f; - while ((ident >>= 7) > 0) - objid[offset--] = 0x80 | (ident & 0x7f); - } - - return this._createEncoderBuffer(objid); -}; - -function two(num) { - if (num < 10) - return '0' + num; - else - return num; -} - -DERNode.prototype._encodeTime = function encodeTime(time, tag) { - let str; - const date = new Date(time); - - if (tag === 'gentime') { - str = [ - two(date.getUTCFullYear()), - two(date.getUTCMonth() + 1), - two(date.getUTCDate()), - two(date.getUTCHours()), - two(date.getUTCMinutes()), - two(date.getUTCSeconds()), - 'Z' - ].join(''); - } else if (tag === 'utctime') { - str = [ - two(date.getUTCFullYear() % 100), - two(date.getUTCMonth() + 1), - two(date.getUTCDate()), - two(date.getUTCHours()), - two(date.getUTCMinutes()), - two(date.getUTCSeconds()), - 'Z' - ].join(''); - } else { - this.reporter.error('Encoding ' + tag + ' time is not supported yet'); - } - - return this._encodeStr(str, 'octstr'); -}; - -DERNode.prototype._encodeNull = function encodeNull() { - return this._createEncoderBuffer(''); -}; - -DERNode.prototype._encodeInt = function encodeInt(num, values) { - if (typeof num === 'string') { - if (!values) - return this.reporter.error('String int or enum given, but no values map'); - if (!values.hasOwnProperty(num)) { - return this.reporter.error('Values map doesn\'t contain: ' + - JSON.stringify(num)); - } - num = values[num]; - } - - // Bignum, assume big endian - if (typeof num !== 'number' && !Buffer.isBuffer(num)) { - const numArray = num.toArray(); - if (!num.sign && numArray[0] & 0x80) { - numArray.unshift(0); - } - num = new Buffer(numArray); - } - - if (Buffer.isBuffer(num)) { - let size = num.length; - if (num.length === 0) - size++; - - const out = new Buffer(size); - num.copy(out); - if (num.length === 0) - out[0] = 0; - return this._createEncoderBuffer(out); - } - - if (num < 0x80) - return this._createEncoderBuffer(num); - - if (num < 0x100) - return this._createEncoderBuffer([0, num]); - - let size = 1; - for (let i = num; i >= 0x100; i >>= 8) - size++; - - const out = new Array(size); - for (let i = out.length - 1; i >= 0; i--) { - out[i] = num & 0xff; - num >>= 8; - } - if(out[0] & 0x80) { - out.unshift(0); - } - - return this._createEncoderBuffer(new Buffer(out)); -}; - -DERNode.prototype._encodeBool = function encodeBool(value) { - return this._createEncoderBuffer(value ? 0xff : 0); -}; - -DERNode.prototype._use = function use(entity, obj) { - if (typeof entity === 'function') - entity = entity(obj); - return entity._getEncoder('der').tree; -}; - -DERNode.prototype._skipDefault = function skipDefault(dataBuffer, reporter, parent) { - const state = this._baseState; - let i; - if (state['default'] === null) - return false; - - const data = dataBuffer.join(); - if (state.defaultBuffer === undefined) - state.defaultBuffer = this._encodeValue(state['default'], reporter, parent).join(); - - if (data.length !== state.defaultBuffer.length) - return false; - - for (i=0; i < data.length; i++) - if (data[i] !== state.defaultBuffer[i]) - return false; - - return true; -}; - -// Utility methods - -function encodeTag(tag, primitive, cls, reporter) { - let res; - - if (tag === 'seqof') - tag = 'seq'; - else if (tag === 'setof') - tag = 'set'; - - if (der.tagByName.hasOwnProperty(tag)) - res = der.tagByName[tag]; - else if (typeof tag === 'number' && (tag | 0) === tag) - res = tag; - else - return reporter.error('Unknown tag: ' + tag); - - if (res >= 0x1f) - return reporter.error('Multi-octet tag encoding unsupported'); - - if (!primitive) - res |= 0x20; - - res |= (der.tagClassByName[cls || 'universal'] << 6); - - return res; -} - -},{"inherits":"Bm0n","buffer":"dskh","../base/node":"kZXB","../constants/der":"psPF"}],"Yqnf":[function(require,module,exports) { -'use strict'; - -const inherits = require('inherits'); - -const DEREncoder = require('./der'); - -function PEMEncoder(entity) { - DEREncoder.call(this, entity); - this.enc = 'pem'; -} -inherits(PEMEncoder, DEREncoder); -module.exports = PEMEncoder; - -PEMEncoder.prototype.encode = function encode(data, options) { - const buf = DEREncoder.prototype.encode.call(this, data); - - const p = buf.toString('base64'); - const out = [ '-----BEGIN ' + options.label + '-----' ]; - for (let i = 0; i < p.length; i += 64) - out.push(p.slice(i, i + 64)); - out.push('-----END ' + options.label + '-----'); - return out.join('\n'); -}; - -},{"inherits":"Bm0n","./der":"adTp"}],"YGCS":[function(require,module,exports) { -'use strict'; - -const encoders = exports; - -encoders.der = require('./der'); -encoders.pem = require('./pem'); - -},{"./der":"adTp","./pem":"Yqnf"}],"Hd0I":[function(require,module,exports) { -'use strict'; - -const inherits = require('inherits'); - -const bignum = require('bn.js'); -const DecoderBuffer = require('../base/buffer').DecoderBuffer; -const Node = require('../base/node'); - -// Import DER constants -const der = require('../constants/der'); - -function DERDecoder(entity) { - this.enc = 'der'; - this.name = entity.name; - this.entity = entity; - - // Construct base tree - this.tree = new DERNode(); - this.tree._init(entity.body); -} -module.exports = DERDecoder; - -DERDecoder.prototype.decode = function decode(data, options) { - if (!DecoderBuffer.isDecoderBuffer(data)) { - data = new DecoderBuffer(data, options); - } - - return this.tree._decode(data, options); -}; - -// Tree methods - -function DERNode(parent) { - Node.call(this, 'der', parent); -} -inherits(DERNode, Node); - -DERNode.prototype._peekTag = function peekTag(buffer, tag, any) { - if (buffer.isEmpty()) - return false; - - const state = buffer.save(); - const decodedTag = derDecodeTag(buffer, 'Failed to peek tag: "' + tag + '"'); - if (buffer.isError(decodedTag)) - return decodedTag; - - buffer.restore(state); - - return decodedTag.tag === tag || decodedTag.tagStr === tag || - (decodedTag.tagStr + 'of') === tag || any; -}; - -DERNode.prototype._decodeTag = function decodeTag(buffer, tag, any) { - const decodedTag = derDecodeTag(buffer, - 'Failed to decode tag of "' + tag + '"'); - if (buffer.isError(decodedTag)) - return decodedTag; - - let len = derDecodeLen(buffer, - decodedTag.primitive, - 'Failed to get length of "' + tag + '"'); - - // Failure - if (buffer.isError(len)) - return len; - - if (!any && - decodedTag.tag !== tag && - decodedTag.tagStr !== tag && - decodedTag.tagStr + 'of' !== tag) { - return buffer.error('Failed to match tag: "' + tag + '"'); - } - - if (decodedTag.primitive || len !== null) - return buffer.skip(len, 'Failed to match body of: "' + tag + '"'); - - // Indefinite length... find END tag - const state = buffer.save(); - const res = this._skipUntilEnd( - buffer, - 'Failed to skip indefinite length body: "' + this.tag + '"'); - if (buffer.isError(res)) - return res; - - len = buffer.offset - state.offset; - buffer.restore(state); - return buffer.skip(len, 'Failed to match body of: "' + tag + '"'); -}; - -DERNode.prototype._skipUntilEnd = function skipUntilEnd(buffer, fail) { - for (;;) { - const tag = derDecodeTag(buffer, fail); - if (buffer.isError(tag)) - return tag; - const len = derDecodeLen(buffer, tag.primitive, fail); - if (buffer.isError(len)) - return len; - - let res; - if (tag.primitive || len !== null) - res = buffer.skip(len); - else - res = this._skipUntilEnd(buffer, fail); - - // Failure - if (buffer.isError(res)) - return res; - - if (tag.tagStr === 'end') - break; - } -}; - -DERNode.prototype._decodeList = function decodeList(buffer, tag, decoder, - options) { - const result = []; - while (!buffer.isEmpty()) { - const possibleEnd = this._peekTag(buffer, 'end'); - if (buffer.isError(possibleEnd)) - return possibleEnd; - - const res = decoder.decode(buffer, 'der', options); - if (buffer.isError(res) && possibleEnd) - break; - result.push(res); - } - return result; -}; - -DERNode.prototype._decodeStr = function decodeStr(buffer, tag) { - if (tag === 'bitstr') { - const unused = buffer.readUInt8(); - if (buffer.isError(unused)) - return unused; - return { unused: unused, data: buffer.raw() }; - } else if (tag === 'bmpstr') { - const raw = buffer.raw(); - if (raw.length % 2 === 1) - return buffer.error('Decoding of string type: bmpstr length mismatch'); - - let str = ''; - for (let i = 0; i < raw.length / 2; i++) { - str += String.fromCharCode(raw.readUInt16BE(i * 2)); - } - return str; - } else if (tag === 'numstr') { - const numstr = buffer.raw().toString('ascii'); - if (!this._isNumstr(numstr)) { - return buffer.error('Decoding of string type: ' + - 'numstr unsupported characters'); - } - return numstr; - } else if (tag === 'octstr') { - return buffer.raw(); - } else if (tag === 'objDesc') { - return buffer.raw(); - } else if (tag === 'printstr') { - const printstr = buffer.raw().toString('ascii'); - if (!this._isPrintstr(printstr)) { - return buffer.error('Decoding of string type: ' + - 'printstr unsupported characters'); - } - return printstr; - } else if (/str$/.test(tag)) { - return buffer.raw().toString(); - } else { - return buffer.error('Decoding of string type: ' + tag + ' unsupported'); - } -}; - -DERNode.prototype._decodeObjid = function decodeObjid(buffer, values, relative) { - let result; - const identifiers = []; - let ident = 0; - let subident = 0; - while (!buffer.isEmpty()) { - subident = buffer.readUInt8(); - ident <<= 7; - ident |= subident & 0x7f; - if ((subident & 0x80) === 0) { - identifiers.push(ident); - ident = 0; - } - } - if (subident & 0x80) - identifiers.push(ident); - - const first = (identifiers[0] / 40) | 0; - const second = identifiers[0] % 40; - - if (relative) - result = identifiers; - else - result = [first, second].concat(identifiers.slice(1)); - - if (values) { - let tmp = values[result.join(' ')]; - if (tmp === undefined) - tmp = values[result.join('.')]; - if (tmp !== undefined) - result = tmp; - } - - return result; -}; - -DERNode.prototype._decodeTime = function decodeTime(buffer, tag) { - const str = buffer.raw().toString(); - - let year; - let mon; - let day; - let hour; - let min; - let sec; - if (tag === 'gentime') { - year = str.slice(0, 4) | 0; - mon = str.slice(4, 6) | 0; - day = str.slice(6, 8) | 0; - hour = str.slice(8, 10) | 0; - min = str.slice(10, 12) | 0; - sec = str.slice(12, 14) | 0; - } else if (tag === 'utctime') { - year = str.slice(0, 2) | 0; - mon = str.slice(2, 4) | 0; - day = str.slice(4, 6) | 0; - hour = str.slice(6, 8) | 0; - min = str.slice(8, 10) | 0; - sec = str.slice(10, 12) | 0; - if (year < 70) - year = 2000 + year; - else - year = 1900 + year; - } else { - return buffer.error('Decoding ' + tag + ' time is not supported yet'); - } - - return Date.UTC(year, mon - 1, day, hour, min, sec, 0); -}; - -DERNode.prototype._decodeNull = function decodeNull() { - return null; -}; - -DERNode.prototype._decodeBool = function decodeBool(buffer) { - const res = buffer.readUInt8(); - if (buffer.isError(res)) - return res; - else - return res !== 0; -}; - -DERNode.prototype._decodeInt = function decodeInt(buffer, values) { - // Bigint, return as it is (assume big endian) - const raw = buffer.raw(); - let res = new bignum(raw); - - if (values) - res = values[res.toString(10)] || res; - - return res; -}; - -DERNode.prototype._use = function use(entity, obj) { - if (typeof entity === 'function') - entity = entity(obj); - return entity._getDecoder('der').tree; -}; - -// Utility methods - -function derDecodeTag(buf, fail) { - let tag = buf.readUInt8(fail); - if (buf.isError(tag)) - return tag; - - const cls = der.tagClass[tag >> 6]; - const primitive = (tag & 0x20) === 0; - - // Multi-octet tag - load - if ((tag & 0x1f) === 0x1f) { - let oct = tag; - tag = 0; - while ((oct & 0x80) === 0x80) { - oct = buf.readUInt8(fail); - if (buf.isError(oct)) - return oct; - - tag <<= 7; - tag |= oct & 0x7f; - } - } else { - tag &= 0x1f; - } - const tagStr = der.tag[tag]; - - return { - cls: cls, - primitive: primitive, - tag: tag, - tagStr: tagStr - }; -} - -function derDecodeLen(buf, primitive, fail) { - let len = buf.readUInt8(fail); - if (buf.isError(len)) - return len; - - // Indefinite form - if (!primitive && len === 0x80) - return null; - - // Definite form - if ((len & 0x80) === 0) { - // Short form - return len; - } - - // Long form - const num = len & 0x7f; - if (num > 4) - return buf.error('length octect is too long'); - - len = 0; - for (let i = 0; i < num; i++) { - len <<= 8; - const j = buf.readUInt8(fail); - if (buf.isError(j)) - return j; - len |= j; - } - - return len; -} - -},{"inherits":"Bm0n","bn.js":"BOxy","../base/buffer":"JJX4","../base/node":"kZXB","../constants/der":"psPF"}],"byl7":[function(require,module,exports) { - -'use strict'; - -const inherits = require('inherits'); -const Buffer = require('buffer').Buffer; - -const DERDecoder = require('./der'); - -function PEMDecoder(entity) { - DERDecoder.call(this, entity); - this.enc = 'pem'; -} -inherits(PEMDecoder, DERDecoder); -module.exports = PEMDecoder; - -PEMDecoder.prototype.decode = function decode(data, options) { - const lines = data.toString().split(/[\r\n]+/g); - - const label = options.label.toUpperCase(); - - const re = /^-----(BEGIN|END) ([^-]+)-----$/; - let start = -1; - let end = -1; - for (let i = 0; i < lines.length; i++) { - const match = lines[i].match(re); - if (match === null) - continue; - - if (match[2] !== label) - continue; - - if (start === -1) { - if (match[1] !== 'BEGIN') - break; - start = i; - } else { - if (match[1] !== 'END') - break; - end = i; - break; - } - } - if (start === -1 || end === -1) - throw new Error('PEM section not found for: ' + label); - - const base64 = lines.slice(start + 1, end).join(''); - // Remove excessive symbols - base64.replace(/[^a-z0-9+/=]+/gi, ''); - - const input = new Buffer(base64, 'base64'); - return DERDecoder.prototype.decode.call(this, input, options); -}; - -},{"inherits":"Bm0n","buffer":"dskh","./der":"Hd0I"}],"Sn5H":[function(require,module,exports) { -'use strict'; - -const decoders = exports; - -decoders.der = require('./der'); -decoders.pem = require('./pem'); - -},{"./der":"Hd0I","./pem":"byl7"}],"gOko":[function(require,module,exports) { -'use strict'; - -const encoders = require('./encoders'); -const decoders = require('./decoders'); -const inherits = require('inherits'); - -const api = exports; - -api.define = function define(name, body) { - return new Entity(name, body); -}; - -function Entity(name, body) { - this.name = name; - this.body = body; - - this.decoders = {}; - this.encoders = {}; -} - -Entity.prototype._createNamed = function createNamed(Base) { - const name = this.name; - - function Generated(entity) { - this._initNamed(entity, name); - } - inherits(Generated, Base); - Generated.prototype._initNamed = function _initNamed(entity, name) { - Base.call(this, entity, name); - }; - - return new Generated(this); -}; - -Entity.prototype._getDecoder = function _getDecoder(enc) { - enc = enc || 'der'; - // Lazily create decoder - if (!this.decoders.hasOwnProperty(enc)) - this.decoders[enc] = this._createNamed(decoders[enc]); - return this.decoders[enc]; -}; - -Entity.prototype.decode = function decode(data, enc, options) { - return this._getDecoder(enc).decode(data, options); -}; - -Entity.prototype._getEncoder = function _getEncoder(enc) { - enc = enc || 'der'; - // Lazily create encoder - if (!this.encoders.hasOwnProperty(enc)) - this.encoders[enc] = this._createNamed(encoders[enc]); - return this.encoders[enc]; -}; - -Entity.prototype.encode = function encode(data, enc, /* internal */ reporter) { - return this._getEncoder(enc).encode(data, reporter); -}; - -},{"./encoders":"YGCS","./decoders":"Sn5H","inherits":"Bm0n"}],"G4cX":[function(require,module,exports) { -'use strict'; - -const base = exports; - -base.Reporter = require('./reporter').Reporter; -base.DecoderBuffer = require('./buffer').DecoderBuffer; -base.EncoderBuffer = require('./buffer').EncoderBuffer; -base.Node = require('./node'); - -},{"./reporter":"BhoU","./buffer":"JJX4","./node":"kZXB"}],"yW9S":[function(require,module,exports) { -'use strict'; - -const constants = exports; - -// Helper -constants._reverse = function reverse(map) { - const res = {}; - - Object.keys(map).forEach(function(key) { - // Convert key to integer if it is stringified - if ((key | 0) == key) - key = key | 0; - - const value = map[key]; - res[value] = key; - }); - - return res; -}; - -constants.der = require('./der'); - -},{"./der":"psPF"}],"NNmB":[function(require,module,exports) { -'use strict'; - -const asn1 = exports; - -asn1.bignum = require('bn.js'); - -asn1.define = require('./asn1/api').define; -asn1.base = require('./asn1/base'); -asn1.constants = require('./asn1/constants'); -asn1.decoders = require('./asn1/decoders'); -asn1.encoders = require('./asn1/encoders'); - -},{"bn.js":"BOxy","./asn1/api":"gOko","./asn1/base":"G4cX","./asn1/constants":"yW9S","./asn1/decoders":"Sn5H","./asn1/encoders":"YGCS"}],"hKQx":[function(require,module,exports) { -var Buffer = require("buffer").Buffer; -'use strict' - -var asn1 = require('asn1.js'), - BN = require('bn.js'), - EC = require('elliptic').ec - -var ECPrivateKeyASN = asn1.define('ECPrivateKey', function() { - this.seq().obj( - this.key('version').int(), - this.key('privateKey').octstr(), - this.key('parameters').explicit(0).objid().optional(), - this.key('publicKey').explicit(1).bitstr().optional() - ) -}) - -var SubjectPublicKeyInfoASN = asn1.define('SubjectPublicKeyInfo', function() { - this.seq().obj( - this.key('algorithm').seq().obj( - this.key("id").objid(), - this.key("curve").objid() - ), - this.key('pub').bitstr() - ) -}) - -var curves = { - secp256k1: { - curveParameters: [1, 3, 132, 0, 10], - privatePEMOptions: {label: 'EC PRIVATE KEY'}, - publicPEMOptions: {label: 'PUBLIC KEY'}, - curve: new EC('secp256k1') - } -} - -function assert(val, msg) { - if (!val) { - throw new Error(msg || 'Assertion failed') - } -} - -function KeyEncoder(options) { - if (typeof options === 'string') { - assert(curves.hasOwnProperty(options), 'Unknown curve ' + options) - options = curves[options] - } - this.options = options - this.algorithmID = [1, 2, 840, 10045, 2, 1] -} - -KeyEncoder.ECPrivateKeyASN = ECPrivateKeyASN -KeyEncoder.SubjectPublicKeyInfoASN = SubjectPublicKeyInfoASN - -KeyEncoder.prototype.privateKeyObject = function(rawPrivateKey, rawPublicKey) { - var privateKeyObject = { - version: new BN(1), - privateKey: new Buffer(rawPrivateKey, 'hex'), - parameters: this.options.curveParameters - } - - if (rawPublicKey) { - privateKeyObject.publicKey = { - unused: 0, - data: new Buffer(rawPublicKey, 'hex') - } - } - - return privateKeyObject -} - -KeyEncoder.prototype.publicKeyObject = function(rawPublicKey) { - return { - algorithm: { - id: this.algorithmID, - curve: this.options.curveParameters - }, - pub: { - unused: 0, - data: new Buffer(rawPublicKey, 'hex') - } - } -} - -KeyEncoder.prototype.encodePrivate = function(privateKey, originalFormat, destinationFormat) { - var privateKeyObject - - /* Parse the incoming private key and convert it to a private key object */ - if (originalFormat === 'raw') { - if (!typeof privateKey === 'string') { - throw 'private key must be a string' - } - var privateKeyObject = this.options.curve.keyFromPrivate(privateKey, 'hex'), - rawPublicKey = privateKeyObject.getPublic('hex') - privateKeyObject = this.privateKeyObject(privateKey, rawPublicKey) - } else if (originalFormat === 'der') { - if (typeof privateKey === 'buffer') { - // do nothing - } else if (typeof privateKey === 'string') { - privateKey = new Buffer(privateKey, 'hex') - } else { - throw 'private key must be a buffer or a string' - } - privateKeyObject = ECPrivateKeyASN.decode(privateKey, 'der') - } else if (originalFormat === 'pem') { - if (!typeof privateKey === 'string') { - throw 'private key must be a string' - } - privateKeyObject = ECPrivateKeyASN.decode(privateKey, 'pem', this.options.privatePEMOptions) - } else { - throw 'invalid private key format' - } - - /* Export the private key object to the desired format */ - if (destinationFormat === 'raw') { - return privateKeyObject.privateKey.toString('hex') - } else if (destinationFormat === 'der') { - return ECPrivateKeyASN.encode(privateKeyObject, 'der').toString('hex') - } else if (destinationFormat === 'pem') { - return ECPrivateKeyASN.encode(privateKeyObject, 'pem', this.options.privatePEMOptions) - } else { - throw 'invalid destination format for private key' - } -} - -KeyEncoder.prototype.encodePublic = function(publicKey, originalFormat, destinationFormat) { - var publicKeyObject - - /* Parse the incoming public key and convert it to a public key object */ - if (originalFormat === 'raw') { - if (!typeof publicKey === 'string') { - throw 'public key must be a string' - } - publicKeyObject = this.publicKeyObject(publicKey) - } else if (originalFormat === 'der') { - if (typeof publicKey === 'buffer') { - // do nothing - } else if (typeof publicKey === 'string') { - publicKey = new Buffer(publicKey, 'hex') - } else { - throw 'public key must be a buffer or a string' - } - publicKeyObject = SubjectPublicKeyInfoASN.decode(publicKey, 'der') - } else if (originalFormat === 'pem') { - if (!typeof publicKey === 'string') { - throw 'public key must be a string' - } - publicKeyObject = SubjectPublicKeyInfoASN.decode(publicKey, 'pem', this.options.publicPEMOptions) - } else { - throw 'invalid public key format' - } - - /* Export the private key object to the desired format */ - if (destinationFormat === 'raw') { - return publicKeyObject.pub.data.toString('hex') - } else if (destinationFormat === 'der') { - return SubjectPublicKeyInfoASN.encode(publicKeyObject, 'der').toString('hex') - } else if (destinationFormat === 'pem') { - return SubjectPublicKeyInfoASN.encode(publicKeyObject, 'pem', this.options.publicPEMOptions) - } else { - throw 'invalid destination format for public key' - } -} - -module.exports = KeyEncoder -},{"asn1.js":"NNmB","bn.js":"BOxy","elliptic":"xha3","buffer":"dskh"}],"tVya":[function(require,module,exports) { -'use strict' - -module.exports = require('./lib/key-encoder') -},{"./lib/key-encoder":"hKQx"}],"d3m2":[function(require,module,exports) { -"use strict"; - -Object.defineProperty(exports, "__esModule", { - value: true -}); -exports.default = assertString; - -function _typeof(obj) { - if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { - _typeof = function _typeof(obj) { - return typeof obj; - }; - } else { - _typeof = function _typeof(obj) { - return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; - }; - } - - return _typeof(obj); -} - -function assertString(input) { - var isString = typeof input === 'string' || input instanceof String; - - if (!isString) { - var invalidType; - - if (input === null) { - invalidType = 'null'; - } else { - invalidType = _typeof(input); - - if (invalidType === 'object' && input.constructor && input.constructor.hasOwnProperty('name')) { - invalidType = input.constructor.name; - } else { - invalidType = "a ".concat(invalidType); - } - } - - throw new TypeError("Expected string but received ".concat(invalidType, ".")); - } -} - -module.exports = exports.default; -module.exports.default = exports.default; -},{}],"G1eO":[function(require,module,exports) { -"use strict"; - -Object.defineProperty(exports, "__esModule", { - value: true -}); -exports.default = toDate; - -var _assertString = _interopRequireDefault(require("./util/assertString")); - -function _interopRequireDefault(obj) { - return obj && obj.__esModule ? obj : { - default: obj - }; -} - -function toDate(date) { - (0, _assertString.default)(date); - date = Date.parse(date); - return !isNaN(date) ? new Date(date) : null; -} - -module.exports = exports.default; -module.exports.default = exports.default; -},{"./util/assertString":"d3m2"}],"b3Og":[function(require,module,exports) { -"use strict"; - -Object.defineProperty(exports, "__esModule", { - value: true -}); -exports.default = toFloat; - -var _assertString = _interopRequireDefault(require("./util/assertString")); - -function _interopRequireDefault(obj) { - return obj && obj.__esModule ? obj : { - default: obj - }; -} - -function toFloat(str) { - (0, _assertString.default)(str); - return parseFloat(str); -} - -module.exports = exports.default; -module.exports.default = exports.default; -},{"./util/assertString":"d3m2"}],"jURK":[function(require,module,exports) { -"use strict"; - -Object.defineProperty(exports, "__esModule", { - value: true -}); -exports.default = toInt; - -var _assertString = _interopRequireDefault(require("./util/assertString")); - -function _interopRequireDefault(obj) { - return obj && obj.__esModule ? obj : { - default: obj - }; -} - -function toInt(str, radix) { - (0, _assertString.default)(str); - return parseInt(str, radix || 10); -} - -module.exports = exports.default; -module.exports.default = exports.default; -},{"./util/assertString":"d3m2"}],"rSZP":[function(require,module,exports) { -"use strict"; - -Object.defineProperty(exports, "__esModule", { - value: true -}); -exports.default = toBoolean; - -var _assertString = _interopRequireDefault(require("./util/assertString")); - -function _interopRequireDefault(obj) { - return obj && obj.__esModule ? obj : { - default: obj - }; -} - -function toBoolean(str, strict) { - (0, _assertString.default)(str); - - if (strict) { - return str === '1' || str === 'true'; - } - - return str !== '0' && str !== 'false' && str !== ''; -} - -module.exports = exports.default; -module.exports.default = exports.default; -},{"./util/assertString":"d3m2"}],"JWD8":[function(require,module,exports) { -"use strict"; - -Object.defineProperty(exports, "__esModule", { - value: true -}); -exports.default = equals; - -var _assertString = _interopRequireDefault(require("./util/assertString")); - -function _interopRequireDefault(obj) { - return obj && obj.__esModule ? obj : { - default: obj - }; -} - -function equals(str, comparison) { - (0, _assertString.default)(str); - return str === comparison; -} - -module.exports = exports.default; -module.exports.default = exports.default; -},{"./util/assertString":"d3m2"}],"Gmuz":[function(require,module,exports) { -"use strict"; - -Object.defineProperty(exports, "__esModule", { - value: true -}); -exports.default = toString; - -function _typeof(obj) { - if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { - _typeof = function _typeof(obj) { - return typeof obj; - }; - } else { - _typeof = function _typeof(obj) { - return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; - }; - } - - return _typeof(obj); -} - -function toString(input) { - if (_typeof(input) === 'object' && input !== null) { - if (typeof input.toString === 'function') { - input = input.toString(); - } else { - input = '[object Object]'; - } - } else if (input === null || typeof input === 'undefined' || isNaN(input) && !input.length) { - input = ''; - } - - return String(input); -} - -module.exports = exports.default; -module.exports.default = exports.default; -},{}],"EKzH":[function(require,module,exports) { -"use strict"; - -Object.defineProperty(exports, "__esModule", { - value: true -}); -exports.default = contains; - -var _assertString = _interopRequireDefault(require("./util/assertString")); - -var _toString = _interopRequireDefault(require("./util/toString")); - -function _interopRequireDefault(obj) { - return obj && obj.__esModule ? obj : { - default: obj - }; -} - -function contains(str, elem) { - (0, _assertString.default)(str); - return str.indexOf((0, _toString.default)(elem)) >= 0; -} - -module.exports = exports.default; -module.exports.default = exports.default; -},{"./util/assertString":"d3m2","./util/toString":"Gmuz"}],"J5fp":[function(require,module,exports) { -"use strict"; - -Object.defineProperty(exports, "__esModule", { - value: true -}); -exports.default = matches; - -var _assertString = _interopRequireDefault(require("./util/assertString")); - -function _interopRequireDefault(obj) { - return obj && obj.__esModule ? obj : { - default: obj - }; -} - -function matches(str, pattern, modifiers) { - (0, _assertString.default)(str); - - if (Object.prototype.toString.call(pattern) !== '[object RegExp]') { - pattern = new RegExp(pattern, modifiers); - } - - return pattern.test(str); -} - -module.exports = exports.default; -module.exports.default = exports.default; -},{"./util/assertString":"d3m2"}],"hxfi":[function(require,module,exports) { -"use strict"; - -Object.defineProperty(exports, "__esModule", { - value: true -}); -exports.default = merge; - -function merge() { - var obj = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; - var defaults = arguments.length > 1 ? arguments[1] : undefined; - - for (var key in defaults) { - if (typeof obj[key] === 'undefined') { - obj[key] = defaults[key]; - } - } - - return obj; -} - -module.exports = exports.default; -module.exports.default = exports.default; -},{}],"jY1m":[function(require,module,exports) { -"use strict"; - -Object.defineProperty(exports, "__esModule", { - value: true -}); -exports.default = isByteLength; - -var _assertString = _interopRequireDefault(require("./util/assertString")); - -function _interopRequireDefault(obj) { - return obj && obj.__esModule ? obj : { - default: obj - }; -} - -function _typeof(obj) { - if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { - _typeof = function _typeof(obj) { - return typeof obj; - }; - } else { - _typeof = function _typeof(obj) { - return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; - }; - } - - return _typeof(obj); -} -/* eslint-disable prefer-rest-params */ - - -function isByteLength(str, options) { - (0, _assertString.default)(str); - var min; - var max; - - if (_typeof(options) === 'object') { - min = options.min || 0; - max = options.max; - } else { - // backwards compatibility: isByteLength(str, min [, max]) - min = arguments[1]; - max = arguments[2]; - } - - var len = encodeURI(str).split(/%..|./).length - 1; - return len >= min && (typeof max === 'undefined' || len <= max); -} - -module.exports = exports.default; -module.exports.default = exports.default; -},{"./util/assertString":"d3m2"}],"KGu6":[function(require,module,exports) { -"use strict"; - -Object.defineProperty(exports, "__esModule", { - value: true -}); -exports.default = isFQDN; - -var _assertString = _interopRequireDefault(require("./util/assertString")); - -var _merge = _interopRequireDefault(require("./util/merge")); - -function _interopRequireDefault(obj) { - return obj && obj.__esModule ? obj : { - default: obj - }; -} - -var default_fqdn_options = { - require_tld: true, - allow_underscores: false, - allow_trailing_dot: false -}; - -function isFQDN(str, options) { - (0, _assertString.default)(str); - options = (0, _merge.default)(options, default_fqdn_options); - /* Remove the optional trailing dot before checking validity */ - - if (options.allow_trailing_dot && str[str.length - 1] === '.') { - str = str.substring(0, str.length - 1); - } - - var parts = str.split('.'); - - for (var i = 0; i < parts.length; i++) { - if (parts[i].length > 63) { - return false; - } - } - - if (options.require_tld) { - var tld = parts.pop(); - - if (!parts.length || !/^([a-z\u00a1-\uffff]{2,}|xn[a-z0-9-]{2,})$/i.test(tld)) { - return false; - } // disallow spaces - - - if (/[\s\u2002-\u200B\u202F\u205F\u3000\uFEFF\uDB40\uDC20]/.test(tld)) { - return false; - } - } - - for (var part, _i = 0; _i < parts.length; _i++) { - part = parts[_i]; - - if (options.allow_underscores) { - part = part.replace(/_/g, ''); - } - - if (!/^[a-z\u00a1-\uffff0-9-]+$/i.test(part)) { - return false; - } // disallow full-width chars - - - if (/[\uff01-\uff5e]/.test(part)) { - return false; - } - - if (part[0] === '-' || part[part.length - 1] === '-') { - return false; - } - } - - return true; -} - -module.exports = exports.default; -module.exports.default = exports.default; -},{"./util/assertString":"d3m2","./util/merge":"hxfi"}],"NHAn":[function(require,module,exports) { -"use strict"; - -Object.defineProperty(exports, "__esModule", { - value: true -}); -exports.default = isIP; - -var _assertString = _interopRequireDefault(require("./util/assertString")); - -function _interopRequireDefault(obj) { - return obj && obj.__esModule ? obj : { - default: obj - }; -} - -var ipv4Maybe = /^(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})$/; -var ipv6Block = /^[0-9A-F]{1,4}$/i; - -function isIP(str) { - var version = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : ''; - (0, _assertString.default)(str); - version = String(version); - - if (!version) { - return isIP(str, 4) || isIP(str, 6); - } else if (version === '4') { - if (!ipv4Maybe.test(str)) { - return false; - } - - var parts = str.split('.').sort(function (a, b) { - return a - b; - }); - return parts[3] <= 255; - } else if (version === '6') { - var blocks = str.split(':'); - var foundOmissionBlock = false; // marker to indicate :: - // At least some OS accept the last 32 bits of an IPv6 address - // (i.e. 2 of the blocks) in IPv4 notation, and RFC 3493 says - // that '::ffff:a.b.c.d' is valid for IPv4-mapped IPv6 addresses, - // and '::a.b.c.d' is deprecated, but also valid. - - var foundIPv4TransitionBlock = isIP(blocks[blocks.length - 1], 4); - var expectedNumberOfBlocks = foundIPv4TransitionBlock ? 7 : 8; - - if (blocks.length > expectedNumberOfBlocks) { - return false; - } // initial or final :: - - - if (str === '::') { - return true; - } else if (str.substr(0, 2) === '::') { - blocks.shift(); - blocks.shift(); - foundOmissionBlock = true; - } else if (str.substr(str.length - 2) === '::') { - blocks.pop(); - blocks.pop(); - foundOmissionBlock = true; - } - - for (var i = 0; i < blocks.length; ++i) { - // test for a :: which can not be at the string start/end - // since those cases have been handled above - if (blocks[i] === '' && i > 0 && i < blocks.length - 1) { - if (foundOmissionBlock) { - return false; // multiple :: in address - } - - foundOmissionBlock = true; - } else if (foundIPv4TransitionBlock && i === blocks.length - 1) {// it has been checked before that the last - // block is a valid IPv4 address - } else if (!ipv6Block.test(blocks[i])) { - return false; - } - } - - if (foundOmissionBlock) { - return blocks.length >= 1; - } - - return blocks.length === expectedNumberOfBlocks; - } - - return false; -} - -module.exports = exports.default; -module.exports.default = exports.default; -},{"./util/assertString":"d3m2"}],"khkS":[function(require,module,exports) { -"use strict"; - -Object.defineProperty(exports, "__esModule", { - value: true -}); -exports.default = isEmail; - -var _assertString = _interopRequireDefault(require("./util/assertString")); - -var _merge = _interopRequireDefault(require("./util/merge")); - -var _isByteLength = _interopRequireDefault(require("./isByteLength")); - -var _isFQDN = _interopRequireDefault(require("./isFQDN")); - -var _isIP = _interopRequireDefault(require("./isIP")); - -function _interopRequireDefault(obj) { - return obj && obj.__esModule ? obj : { - default: obj - }; -} - -var default_email_options = { - allow_display_name: false, - require_display_name: false, - allow_utf8_local_part: true, - require_tld: true -}; -/* eslint-disable max-len */ - -/* eslint-disable no-control-regex */ - -var displayName = /^[a-z\d!#\$%&'\*\+\-\/=\?\^_`{\|}~\.\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]+[a-z\d!#\$%&'\*\+\-\/=\?\^_`{\|}~\,\.\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF\s]*<(.+)>$/i; -var emailUserPart = /^[a-z\d!#\$%&'\*\+\-\/=\?\^_`{\|}~]+$/i; -var gmailUserPart = /^[a-z\d]+$/; -var quotedEmailUser = /^([\s\x01-\x08\x0b\x0c\x0e-\x1f\x7f\x21\x23-\x5b\x5d-\x7e]|(\\[\x01-\x09\x0b\x0c\x0d-\x7f]))*$/i; -var emailUserUtf8Part = /^[a-z\d!#\$%&'\*\+\-\/=\?\^_`{\|}~\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]+$/i; -var quotedEmailUserUtf8 = /^([\s\x01-\x08\x0b\x0c\x0e-\x1f\x7f\x21\x23-\x5b\x5d-\x7e\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]|(\\[\x01-\x09\x0b\x0c\x0d-\x7f\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]))*$/i; -/* eslint-enable max-len */ - -/* eslint-enable no-control-regex */ - -function isEmail(str, options) { - (0, _assertString.default)(str); - options = (0, _merge.default)(options, default_email_options); - - if (options.require_display_name || options.allow_display_name) { - var display_email = str.match(displayName); - - if (display_email) { - str = display_email[1]; - } else if (options.require_display_name) { - return false; - } - } - - var parts = str.split('@'); - var domain = parts.pop(); - var user = parts.join('@'); - var lower_domain = domain.toLowerCase(); - - if (options.domain_specific_validation && (lower_domain === 'gmail.com' || lower_domain === 'googlemail.com')) { - /* - Previously we removed dots for gmail addresses before validating. - This was removed because it allows `multiple..dots@gmail.com` - to be reported as valid, but it is not. - Gmail only normalizes single dots, removing them from here is pointless, - should be done in normalizeEmail - */ - user = user.toLowerCase(); // Removing sub-address from username before gmail validation - - var username = user.split('+')[0]; // Dots are not included in gmail length restriction - - if (!(0, _isByteLength.default)(username.replace('.', ''), { - min: 6, - max: 30 - })) { - return false; - } - - var _user_parts = username.split('.'); - - for (var i = 0; i < _user_parts.length; i++) { - if (!gmailUserPart.test(_user_parts[i])) { - return false; - } - } - } - - if (!(0, _isByteLength.default)(user, { - max: 64 - }) || !(0, _isByteLength.default)(domain, { - max: 254 - })) { - return false; - } - - if (!(0, _isFQDN.default)(domain, { - require_tld: options.require_tld - })) { - if (!options.allow_ip_domain) { - return false; - } - - if (!(0, _isIP.default)(domain)) { - if (!domain.startsWith('[') || !domain.endsWith(']')) { - return false; - } - - var noBracketdomain = domain.substr(1, domain.length - 2); - - if (noBracketdomain.length === 0 || !(0, _isIP.default)(noBracketdomain)) { - return false; - } - } - } - - if (user[0] === '"') { - user = user.slice(1, user.length - 1); - return options.allow_utf8_local_part ? quotedEmailUserUtf8.test(user) : quotedEmailUser.test(user); - } - - var pattern = options.allow_utf8_local_part ? emailUserUtf8Part : emailUserPart; - var user_parts = user.split('.'); - - for (var _i = 0; _i < user_parts.length; _i++) { - if (!pattern.test(user_parts[_i])) { - return false; - } - } - - return true; -} - -module.exports = exports.default; -module.exports.default = exports.default; -},{"./util/assertString":"d3m2","./util/merge":"hxfi","./isByteLength":"jY1m","./isFQDN":"KGu6","./isIP":"NHAn"}],"XMVV":[function(require,module,exports) { -"use strict"; - -Object.defineProperty(exports, "__esModule", { - value: true -}); -exports.default = isURL; - -var _assertString = _interopRequireDefault(require("./util/assertString")); - -var _isFQDN = _interopRequireDefault(require("./isFQDN")); - -var _isIP = _interopRequireDefault(require("./isIP")); - -var _merge = _interopRequireDefault(require("./util/merge")); - -function _interopRequireDefault(obj) { - return obj && obj.__esModule ? obj : { - default: obj - }; -} - -var default_url_options = { - protocols: ['http', 'https', 'ftp'], - require_tld: true, - require_protocol: false, - require_host: true, - require_valid_protocol: true, - allow_underscores: false, - allow_trailing_dot: false, - allow_protocol_relative_urls: false -}; -var wrapped_ipv6 = /^\[([^\]]+)\](?::([0-9]+))?$/; - -function isRegExp(obj) { - return Object.prototype.toString.call(obj) === '[object RegExp]'; -} - -function checkHost(host, matches) { - for (var i = 0; i < matches.length; i++) { - var match = matches[i]; - - if (host === match || isRegExp(match) && match.test(host)) { - return true; - } - } - - return false; -} - -function isURL(url, options) { - (0, _assertString.default)(url); - - if (!url || url.length >= 2083 || /[\s<>]/.test(url)) { - return false; - } - - if (url.indexOf('mailto:') === 0) { - return false; - } - - options = (0, _merge.default)(options, default_url_options); - var protocol, auth, host, hostname, port, port_str, split, ipv6; - split = url.split('#'); - url = split.shift(); - split = url.split('?'); - url = split.shift(); - split = url.split('://'); - - if (split.length > 1) { - protocol = split.shift().toLowerCase(); - - if (options.require_valid_protocol && options.protocols.indexOf(protocol) === -1) { - return false; - } - } else if (options.require_protocol) { - return false; - } else if (url.substr(0, 2) === '//') { - if (!options.allow_protocol_relative_urls) { - return false; - } - - split[0] = url.substr(2); - } - - url = split.join('://'); - - if (url === '') { - return false; - } - - split = url.split('/'); - url = split.shift(); - - if (url === '' && !options.require_host) { - return true; - } - - split = url.split('@'); - - if (split.length > 1) { - if (options.disallow_auth) { - return false; - } - - auth = split.shift(); - - if (auth.indexOf(':') >= 0 && auth.split(':').length > 2) { - return false; - } - } - - hostname = split.join('@'); - port_str = null; - ipv6 = null; - var ipv6_match = hostname.match(wrapped_ipv6); - - if (ipv6_match) { - host = ''; - ipv6 = ipv6_match[1]; - port_str = ipv6_match[2] || null; - } else { - split = hostname.split(':'); - host = split.shift(); - - if (split.length) { - port_str = split.join(':'); - } - } - - if (port_str !== null) { - port = parseInt(port_str, 10); - - if (!/^[0-9]+$/.test(port_str) || port <= 0 || port > 65535) { - return false; - } - } - - if (!(0, _isIP.default)(host) && !(0, _isFQDN.default)(host, options) && (!ipv6 || !(0, _isIP.default)(ipv6, 6))) { - return false; - } - - host = host || ipv6; - - if (options.host_whitelist && !checkHost(host, options.host_whitelist)) { - return false; - } - - if (options.host_blacklist && checkHost(host, options.host_blacklist)) { - return false; - } - - return true; -} - -module.exports = exports.default; -module.exports.default = exports.default; -},{"./util/assertString":"d3m2","./isFQDN":"KGu6","./isIP":"NHAn","./util/merge":"hxfi"}],"Rpi3":[function(require,module,exports) { -"use strict"; - -Object.defineProperty(exports, "__esModule", { - value: true -}); -exports.default = isMACAddress; - -var _assertString = _interopRequireDefault(require("./util/assertString")); - -function _interopRequireDefault(obj) { - return obj && obj.__esModule ? obj : { - default: obj - }; -} - -var macAddress = /^([0-9a-fA-F][0-9a-fA-F]:){5}([0-9a-fA-F][0-9a-fA-F])$/; -var macAddressNoColons = /^([0-9a-fA-F]){12}$/; - -function isMACAddress(str, options) { - (0, _assertString.default)(str); - - if (options && options.no_colons) { - return macAddressNoColons.test(str); - } - - return macAddress.test(str); -} - -module.exports = exports.default; -module.exports.default = exports.default; -},{"./util/assertString":"d3m2"}],"fBjy":[function(require,module,exports) { -"use strict"; - -Object.defineProperty(exports, "__esModule", { - value: true -}); -exports.default = isIPRange; - -var _assertString = _interopRequireDefault(require("./util/assertString")); - -var _isIP = _interopRequireDefault(require("./isIP")); - -function _interopRequireDefault(obj) { - return obj && obj.__esModule ? obj : { - default: obj - }; -} - -var subnetMaybe = /^\d{1,2}$/; - -function isIPRange(str) { - (0, _assertString.default)(str); - var parts = str.split('/'); // parts[0] -> ip, parts[1] -> subnet - - if (parts.length !== 2) { - return false; - } - - if (!subnetMaybe.test(parts[1])) { - return false; - } // Disallow preceding 0 i.e. 01, 02, ... - - - if (parts[1].length > 1 && parts[1].startsWith('0')) { - return false; - } - - return (0, _isIP.default)(parts[0], 4) && parts[1] <= 32 && parts[1] >= 0; -} - -module.exports = exports.default; -module.exports.default = exports.default; -},{"./util/assertString":"d3m2","./isIP":"NHAn"}],"nMXH":[function(require,module,exports) { -"use strict"; - -Object.defineProperty(exports, "__esModule", { - value: true -}); -exports.default = isBoolean; - -var _assertString = _interopRequireDefault(require("./util/assertString")); - -function _interopRequireDefault(obj) { - return obj && obj.__esModule ? obj : { - default: obj - }; -} - -function isBoolean(str) { - (0, _assertString.default)(str); - return ['true', 'false', '1', '0'].indexOf(str) >= 0; -} - -module.exports = exports.default; -module.exports.default = exports.default; -},{"./util/assertString":"d3m2"}],"qIyI":[function(require,module,exports) { -"use strict"; - -Object.defineProperty(exports, "__esModule", { - value: true -}); -exports.commaDecimal = exports.dotDecimal = exports.arabicLocales = exports.englishLocales = exports.decimal = exports.alphanumeric = exports.alpha = void 0; -var alpha = { - 'en-US': /^[A-Z]+$/i, - 'bg-BG': /^[А-Я]+$/i, - 'cs-CZ': /^[A-ZÁČĎÉĚÍŇÓŘŠŤÚŮÝŽ]+$/i, - 'da-DK': /^[A-ZÆØÅ]+$/i, - 'de-DE': /^[A-ZÄÖÜß]+$/i, - 'el-GR': /^[Α-ω]+$/i, - 'es-ES': /^[A-ZÁÉÍÑÓÚÜ]+$/i, - 'fr-FR': /^[A-ZÀÂÆÇÉÈÊËÏÎÔŒÙÛÜŸ]+$/i, - 'it-IT': /^[A-ZÀÉÈÌÎÓÒÙ]+$/i, - 'nb-NO': /^[A-ZÆØÅ]+$/i, - 'nl-NL': /^[A-ZÁÉËÏÓÖÜÚ]+$/i, - 'nn-NO': /^[A-ZÆØÅ]+$/i, - 'hu-HU': /^[A-ZÁÉÍÓÖŐÚÜŰ]+$/i, - 'pl-PL': /^[A-ZĄĆĘŚŁŃÓŻŹ]+$/i, - 'pt-PT': /^[A-ZÃÁÀÂÇÉÊÍÕÓÔÚÜ]+$/i, - 'ru-RU': /^[А-ЯЁ]+$/i, - 'sl-SI': /^[A-ZČĆĐŠŽ]+$/i, - 'sk-SK': /^[A-ZÁČĎÉÍŇÓŠŤÚÝŽĹŔĽÄÔ]+$/i, - 'sr-RS@latin': /^[A-ZČĆŽŠĐ]+$/i, - 'sr-RS': /^[А-ЯЂЈЉЊЋЏ]+$/i, - 'sv-SE': /^[A-ZÅÄÖ]+$/i, - 'tr-TR': /^[A-ZÇĞİıÖŞÜ]+$/i, - 'uk-UA': /^[А-ЩЬЮЯЄIЇҐі]+$/i, - 'ku-IQ': /^[ئابپتجچحخدرڕزژسشعغفڤقکگلڵمنوۆھەیێيطؤثآإأكضصةظذ]+$/i, - ar: /^[ءآأؤإئابةتثجحخدذرزسشصضطظعغفقكلمنهوىيًٌٍَُِّْٰ]+$/ -}; -exports.alpha = alpha; -var alphanumeric = { - 'en-US': /^[0-9A-Z]+$/i, - 'bg-BG': /^[0-9А-Я]+$/i, - 'cs-CZ': /^[0-9A-ZÁČĎÉĚÍŇÓŘŠŤÚŮÝŽ]+$/i, - 'da-DK': /^[0-9A-ZÆØÅ]+$/i, - 'de-DE': /^[0-9A-ZÄÖÜß]+$/i, - 'el-GR': /^[0-9Α-ω]+$/i, - 'es-ES': /^[0-9A-ZÁÉÍÑÓÚÜ]+$/i, - 'fr-FR': /^[0-9A-ZÀÂÆÇÉÈÊËÏÎÔŒÙÛÜŸ]+$/i, - 'it-IT': /^[0-9A-ZÀÉÈÌÎÓÒÙ]+$/i, - 'hu-HU': /^[0-9A-ZÁÉÍÓÖŐÚÜŰ]+$/i, - 'nb-NO': /^[0-9A-ZÆØÅ]+$/i, - 'nl-NL': /^[0-9A-ZÁÉËÏÓÖÜÚ]+$/i, - 'nn-NO': /^[0-9A-ZÆØÅ]+$/i, - 'pl-PL': /^[0-9A-ZĄĆĘŚŁŃÓŻŹ]+$/i, - 'pt-PT': /^[0-9A-ZÃÁÀÂÇÉÊÍÕÓÔÚÜ]+$/i, - 'ru-RU': /^[0-9А-ЯЁ]+$/i, - 'sl-SI': /^[0-9A-ZČĆĐŠŽ]+$/i, - 'sk-SK': /^[0-9A-ZÁČĎÉÍŇÓŠŤÚÝŽĹŔĽÄÔ]+$/i, - 'sr-RS@latin': /^[0-9A-ZČĆŽŠĐ]+$/i, - 'sr-RS': /^[0-9А-ЯЂЈЉЊЋЏ]+$/i, - 'sv-SE': /^[0-9A-ZÅÄÖ]+$/i, - 'tr-TR': /^[0-9A-ZÇĞİıÖŞÜ]+$/i, - 'uk-UA': /^[0-9А-ЩЬЮЯЄIЇҐі]+$/i, - 'ku-IQ': /^[٠١٢٣٤٥٦٧٨٩0-9ئابپتجچحخدرڕزژسشعغفڤقکگلڵمنوۆھەیێيطؤثآإأكضصةظذ]+$/i, - ar: /^[٠١٢٣٤٥٦٧٨٩0-9ءآأؤإئابةتثجحخدذرزسشصضطظعغفقكلمنهوىيًٌٍَُِّْٰ]+$/ -}; -exports.alphanumeric = alphanumeric; -var decimal = { - 'en-US': '.', - ar: '٫' -}; -exports.decimal = decimal; -var englishLocales = ['AU', 'GB', 'HK', 'IN', 'NZ', 'ZA', 'ZM']; -exports.englishLocales = englishLocales; - -for (var locale, i = 0; i < englishLocales.length; i++) { - locale = "en-".concat(englishLocales[i]); - alpha[locale] = alpha['en-US']; - alphanumeric[locale] = alphanumeric['en-US']; - decimal[locale] = decimal['en-US']; -} // Source: http://www.localeplanet.com/java/ - - -var arabicLocales = ['AE', 'BH', 'DZ', 'EG', 'IQ', 'JO', 'KW', 'LB', 'LY', 'MA', 'QM', 'QA', 'SA', 'SD', 'SY', 'TN', 'YE']; -exports.arabicLocales = arabicLocales; - -for (var _locale, _i = 0; _i < arabicLocales.length; _i++) { - _locale = "ar-".concat(arabicLocales[_i]); - alpha[_locale] = alpha.ar; - alphanumeric[_locale] = alphanumeric.ar; - decimal[_locale] = decimal.ar; -} // Source: https://en.wikipedia.org/wiki/Decimal_mark - - -var dotDecimal = []; -exports.dotDecimal = dotDecimal; -var commaDecimal = ['bg-BG', 'cs-CZ', 'da-DK', 'de-DE', 'el-GR', 'es-ES', 'fr-FR', 'it-IT', 'ku-IQ', 'hu-HU', 'nb-NO', 'nn-NO', 'nl-NL', 'pl-PL', 'pt-PT', 'ru-RU', 'sl-SI', 'sr-RS@latin', 'sr-RS', 'sv-SE', 'tr-TR', 'uk-UA']; -exports.commaDecimal = commaDecimal; - -for (var _i2 = 0; _i2 < dotDecimal.length; _i2++) { - decimal[dotDecimal[_i2]] = decimal['en-US']; -} - -for (var _i3 = 0; _i3 < commaDecimal.length; _i3++) { - decimal[commaDecimal[_i3]] = ','; -} - -alpha['pt-BR'] = alpha['pt-PT']; -alphanumeric['pt-BR'] = alphanumeric['pt-PT']; -decimal['pt-BR'] = decimal['pt-PT']; // see #862 - -alpha['pl-Pl'] = alpha['pl-PL']; -alphanumeric['pl-Pl'] = alphanumeric['pl-PL']; -decimal['pl-Pl'] = decimal['pl-PL']; -},{}],"I8yr":[function(require,module,exports) { -"use strict"; - -Object.defineProperty(exports, "__esModule", { - value: true -}); -exports.default = isAlpha; -exports.locales = void 0; - -var _assertString = _interopRequireDefault(require("./util/assertString")); - -var _alpha = require("./alpha"); - -function _interopRequireDefault(obj) { - return obj && obj.__esModule ? obj : { - default: obj - }; -} - -function isAlpha(str) { - var locale = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'en-US'; - (0, _assertString.default)(str); - - if (locale in _alpha.alpha) { - return _alpha.alpha[locale].test(str); - } - - throw new Error("Invalid locale '".concat(locale, "'")); -} - -var locales = Object.keys(_alpha.alpha); -exports.locales = locales; -},{"./util/assertString":"d3m2","./alpha":"qIyI"}],"AlV0":[function(require,module,exports) { -"use strict"; - -Object.defineProperty(exports, "__esModule", { - value: true -}); -exports.default = isAlphanumeric; -exports.locales = void 0; - -var _assertString = _interopRequireDefault(require("./util/assertString")); - -var _alpha = require("./alpha"); - -function _interopRequireDefault(obj) { - return obj && obj.__esModule ? obj : { - default: obj - }; -} - -function isAlphanumeric(str) { - var locale = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'en-US'; - (0, _assertString.default)(str); - - if (locale in _alpha.alphanumeric) { - return _alpha.alphanumeric[locale].test(str); - } - - throw new Error("Invalid locale '".concat(locale, "'")); -} - -var locales = Object.keys(_alpha.alphanumeric); -exports.locales = locales; -},{"./util/assertString":"d3m2","./alpha":"qIyI"}],"VmGc":[function(require,module,exports) { -"use strict"; - -Object.defineProperty(exports, "__esModule", { - value: true -}); -exports.default = isNumeric; - -var _assertString = _interopRequireDefault(require("./util/assertString")); - -function _interopRequireDefault(obj) { - return obj && obj.__esModule ? obj : { - default: obj - }; -} - -var numeric = /^[+-]?([0-9]*[.])?[0-9]+$/; -var numericNoSymbols = /^[0-9]+$/; - -function isNumeric(str, options) { - (0, _assertString.default)(str); - - if (options && options.no_symbols) { - return numericNoSymbols.test(str); - } - - return numeric.test(str); -} - -module.exports = exports.default; -module.exports.default = exports.default; -},{"./util/assertString":"d3m2"}],"Nqtv":[function(require,module,exports) { -"use strict"; - -Object.defineProperty(exports, "__esModule", { - value: true -}); -exports.default = isInt; - -var _assertString = _interopRequireDefault(require("./util/assertString")); - -function _interopRequireDefault(obj) { - return obj && obj.__esModule ? obj : { - default: obj - }; -} - -var int = /^(?:[-+]?(?:0|[1-9][0-9]*))$/; -var intLeadingZeroes = /^[-+]?[0-9]+$/; - -function isInt(str, options) { - (0, _assertString.default)(str); - options = options || {}; // Get the regex to use for testing, based on whether - // leading zeroes are allowed or not. - - var regex = options.hasOwnProperty('allow_leading_zeroes') && !options.allow_leading_zeroes ? int : intLeadingZeroes; // Check min/max/lt/gt - - var minCheckPassed = !options.hasOwnProperty('min') || str >= options.min; - var maxCheckPassed = !options.hasOwnProperty('max') || str <= options.max; - var ltCheckPassed = !options.hasOwnProperty('lt') || str < options.lt; - var gtCheckPassed = !options.hasOwnProperty('gt') || str > options.gt; - return regex.test(str) && minCheckPassed && maxCheckPassed && ltCheckPassed && gtCheckPassed; -} - -module.exports = exports.default; -module.exports.default = exports.default; -},{"./util/assertString":"d3m2"}],"qa4O":[function(require,module,exports) { -"use strict"; - -Object.defineProperty(exports, "__esModule", { - value: true -}); -exports.default = isPort; - -var _isInt = _interopRequireDefault(require("./isInt")); - -function _interopRequireDefault(obj) { - return obj && obj.__esModule ? obj : { - default: obj - }; -} - -function isPort(str) { - return (0, _isInt.default)(str, { - min: 0, - max: 65535 - }); -} - -module.exports = exports.default; -module.exports.default = exports.default; -},{"./isInt":"Nqtv"}],"N5f1":[function(require,module,exports) { -"use strict"; - -Object.defineProperty(exports, "__esModule", { - value: true -}); -exports.default = isLowercase; - -var _assertString = _interopRequireDefault(require("./util/assertString")); - -function _interopRequireDefault(obj) { - return obj && obj.__esModule ? obj : { - default: obj - }; -} - -function isLowercase(str) { - (0, _assertString.default)(str); - return str === str.toLowerCase(); -} - -module.exports = exports.default; -module.exports.default = exports.default; -},{"./util/assertString":"d3m2"}],"NAqv":[function(require,module,exports) { -"use strict"; - -Object.defineProperty(exports, "__esModule", { - value: true -}); -exports.default = isUppercase; - -var _assertString = _interopRequireDefault(require("./util/assertString")); - -function _interopRequireDefault(obj) { - return obj && obj.__esModule ? obj : { - default: obj - }; -} - -function isUppercase(str) { - (0, _assertString.default)(str); - return str === str.toUpperCase(); -} - -module.exports = exports.default; -module.exports.default = exports.default; -},{"./util/assertString":"d3m2"}],"lPo8":[function(require,module,exports) { -"use strict"; - -Object.defineProperty(exports, "__esModule", { - value: true -}); -exports.default = isAscii; - -var _assertString = _interopRequireDefault(require("./util/assertString")); - -function _interopRequireDefault(obj) { - return obj && obj.__esModule ? obj : { - default: obj - }; -} -/* eslint-disable no-control-regex */ - - -var ascii = /^[\x00-\x7F]+$/; -/* eslint-enable no-control-regex */ - -function isAscii(str) { - (0, _assertString.default)(str); - return ascii.test(str); -} - -module.exports = exports.default; -module.exports.default = exports.default; -},{"./util/assertString":"d3m2"}],"XqZj":[function(require,module,exports) { -"use strict"; - -Object.defineProperty(exports, "__esModule", { - value: true -}); -exports.default = isFullWidth; -exports.fullWidth = void 0; - -var _assertString = _interopRequireDefault(require("./util/assertString")); - -function _interopRequireDefault(obj) { - return obj && obj.__esModule ? obj : { - default: obj - }; -} - -var fullWidth = /[^\u0020-\u007E\uFF61-\uFF9F\uFFA0-\uFFDC\uFFE8-\uFFEE0-9a-zA-Z]/; -exports.fullWidth = fullWidth; - -function isFullWidth(str) { - (0, _assertString.default)(str); - return fullWidth.test(str); -} -},{"./util/assertString":"d3m2"}],"aml0":[function(require,module,exports) { -"use strict"; - -Object.defineProperty(exports, "__esModule", { - value: true -}); -exports.default = isHalfWidth; -exports.halfWidth = void 0; - -var _assertString = _interopRequireDefault(require("./util/assertString")); - -function _interopRequireDefault(obj) { - return obj && obj.__esModule ? obj : { - default: obj - }; -} - -var halfWidth = /[\u0020-\u007E\uFF61-\uFF9F\uFFA0-\uFFDC\uFFE8-\uFFEE0-9a-zA-Z]/; -exports.halfWidth = halfWidth; - -function isHalfWidth(str) { - (0, _assertString.default)(str); - return halfWidth.test(str); -} -},{"./util/assertString":"d3m2"}],"Ezi8":[function(require,module,exports) { -"use strict"; - -Object.defineProperty(exports, "__esModule", { - value: true -}); -exports.default = isVariableWidth; - -var _assertString = _interopRequireDefault(require("./util/assertString")); - -var _isFullWidth = require("./isFullWidth"); - -var _isHalfWidth = require("./isHalfWidth"); - -function _interopRequireDefault(obj) { - return obj && obj.__esModule ? obj : { - default: obj - }; -} - -function isVariableWidth(str) { - (0, _assertString.default)(str); - return _isFullWidth.fullWidth.test(str) && _isHalfWidth.halfWidth.test(str); -} - -module.exports = exports.default; -module.exports.default = exports.default; -},{"./util/assertString":"d3m2","./isFullWidth":"XqZj","./isHalfWidth":"aml0"}],"hMu0":[function(require,module,exports) { -"use strict"; - -Object.defineProperty(exports, "__esModule", { - value: true -}); -exports.default = isMultibyte; - -var _assertString = _interopRequireDefault(require("./util/assertString")); - -function _interopRequireDefault(obj) { - return obj && obj.__esModule ? obj : { - default: obj - }; -} -/* eslint-disable no-control-regex */ - - -var multibyte = /[^\x00-\x7F]/; -/* eslint-enable no-control-regex */ - -function isMultibyte(str) { - (0, _assertString.default)(str); - return multibyte.test(str); -} - -module.exports = exports.default; -module.exports.default = exports.default; -},{"./util/assertString":"d3m2"}],"DgpS":[function(require,module,exports) { -"use strict"; - -Object.defineProperty(exports, "__esModule", { - value: true -}); -exports.default = isSurrogatePair; - -var _assertString = _interopRequireDefault(require("./util/assertString")); - -function _interopRequireDefault(obj) { - return obj && obj.__esModule ? obj : { - default: obj - }; -} - -var surrogatePair = /[\uD800-\uDBFF][\uDC00-\uDFFF]/; - -function isSurrogatePair(str) { - (0, _assertString.default)(str); - return surrogatePair.test(str); -} - -module.exports = exports.default; -module.exports.default = exports.default; -},{"./util/assertString":"d3m2"}],"tJ8x":[function(require,module,exports) { -"use strict"; - -Object.defineProperty(exports, "__esModule", { - value: true -}); -exports.default = isFloat; -exports.locales = void 0; - -var _assertString = _interopRequireDefault(require("./util/assertString")); - -var _alpha = require("./alpha"); - -function _interopRequireDefault(obj) { - return obj && obj.__esModule ? obj : { - default: obj - }; -} - -function isFloat(str, options) { - (0, _assertString.default)(str); - options = options || {}; - var float = new RegExp("^(?:[-+])?(?:[0-9]+)?(?:\\".concat(options.locale ? _alpha.decimal[options.locale] : '.', "[0-9]*)?(?:[eE][\\+\\-]?(?:[0-9]+))?$")); - - if (str === '' || str === '.' || str === '-' || str === '+') { - return false; - } - - var value = parseFloat(str.replace(',', '.')); - return float.test(str) && (!options.hasOwnProperty('min') || value >= options.min) && (!options.hasOwnProperty('max') || value <= options.max) && (!options.hasOwnProperty('lt') || value < options.lt) && (!options.hasOwnProperty('gt') || value > options.gt); -} - -var locales = Object.keys(_alpha.decimal); -exports.locales = locales; -},{"./util/assertString":"d3m2","./alpha":"qIyI"}],"N8iQ":[function(require,module,exports) { -"use strict"; - -Object.defineProperty(exports, "__esModule", { - value: true -}); -exports.default = void 0; - -var includes = function includes(arr, val) { - return arr.some(function (arrVal) { - return val === arrVal; - }); -}; - -var _default = includes; -exports.default = _default; -module.exports = exports.default; -module.exports.default = exports.default; -},{}],"cjZv":[function(require,module,exports) { -"use strict"; - -Object.defineProperty(exports, "__esModule", { - value: true -}); -exports.default = isDecimal; - -var _merge = _interopRequireDefault(require("./util/merge")); - -var _assertString = _interopRequireDefault(require("./util/assertString")); - -var _includes = _interopRequireDefault(require("./util/includes")); - -var _alpha = require("./alpha"); - -function _interopRequireDefault(obj) { - return obj && obj.__esModule ? obj : { - default: obj - }; -} - -function decimalRegExp(options) { - var regExp = new RegExp("^[-+]?([0-9]+)?(\\".concat(_alpha.decimal[options.locale], "[0-9]{").concat(options.decimal_digits, "})").concat(options.force_decimal ? '' : '?', "$")); - return regExp; -} - -var default_decimal_options = { - force_decimal: false, - decimal_digits: '1,', - locale: 'en-US' -}; -var blacklist = ['', '-', '+']; - -function isDecimal(str, options) { - (0, _assertString.default)(str); - options = (0, _merge.default)(options, default_decimal_options); - - if (options.locale in _alpha.decimal) { - return !(0, _includes.default)(blacklist, str.replace(/ /g, '')) && decimalRegExp(options).test(str); - } - - throw new Error("Invalid locale '".concat(options.locale, "'")); -} - -module.exports = exports.default; -module.exports.default = exports.default; -},{"./util/merge":"hxfi","./util/assertString":"d3m2","./util/includes":"N8iQ","./alpha":"qIyI"}],"DCUy":[function(require,module,exports) { -"use strict"; - -Object.defineProperty(exports, "__esModule", { - value: true -}); -exports.default = isHexadecimal; - -var _assertString = _interopRequireDefault(require("./util/assertString")); - -function _interopRequireDefault(obj) { - return obj && obj.__esModule ? obj : { - default: obj - }; -} - -var hexadecimal = /^[0-9A-F]+$/i; - -function isHexadecimal(str) { - (0, _assertString.default)(str); - return hexadecimal.test(str); -} - -module.exports = exports.default; -module.exports.default = exports.default; -},{"./util/assertString":"d3m2"}],"ZzHr":[function(require,module,exports) { -"use strict"; - -Object.defineProperty(exports, "__esModule", { - value: true -}); -exports.default = isDivisibleBy; - -var _assertString = _interopRequireDefault(require("./util/assertString")); - -var _toFloat = _interopRequireDefault(require("./toFloat")); - -function _interopRequireDefault(obj) { - return obj && obj.__esModule ? obj : { - default: obj - }; -} - -function isDivisibleBy(str, num) { - (0, _assertString.default)(str); - return (0, _toFloat.default)(str) % parseInt(num, 10) === 0; -} - -module.exports = exports.default; -module.exports.default = exports.default; -},{"./util/assertString":"d3m2","./toFloat":"b3Og"}],"cJkd":[function(require,module,exports) { -"use strict"; - -Object.defineProperty(exports, "__esModule", { - value: true -}); -exports.default = isHexColor; - -var _assertString = _interopRequireDefault(require("./util/assertString")); - -function _interopRequireDefault(obj) { - return obj && obj.__esModule ? obj : { - default: obj - }; -} - -var hexcolor = /^#?([0-9A-F]{3}|[0-9A-F]{6})$/i; - -function isHexColor(str) { - (0, _assertString.default)(str); - return hexcolor.test(str); -} - -module.exports = exports.default; -module.exports.default = exports.default; -},{"./util/assertString":"d3m2"}],"Jf2s":[function(require,module,exports) { -"use strict"; - -Object.defineProperty(exports, "__esModule", { - value: true -}); -exports.default = isISRC; - -var _assertString = _interopRequireDefault(require("./util/assertString")); - -function _interopRequireDefault(obj) { - return obj && obj.__esModule ? obj : { - default: obj - }; -} // see http://isrc.ifpi.org/en/isrc-standard/code-syntax - - -var isrc = /^[A-Z]{2}[0-9A-Z]{3}\d{2}\d{5}$/; - -function isISRC(str) { - (0, _assertString.default)(str); - return isrc.test(str); -} - -module.exports = exports.default; -module.exports.default = exports.default; -},{"./util/assertString":"d3m2"}],"idDX":[function(require,module,exports) { -"use strict"; - -Object.defineProperty(exports, "__esModule", { - value: true -}); -exports.default = isMD5; - -var _assertString = _interopRequireDefault(require("./util/assertString")); - -function _interopRequireDefault(obj) { - return obj && obj.__esModule ? obj : { - default: obj - }; -} - -var md5 = /^[a-f0-9]{32}$/; - -function isMD5(str) { - (0, _assertString.default)(str); - return md5.test(str); -} - -module.exports = exports.default; -module.exports.default = exports.default; -},{"./util/assertString":"d3m2"}],"fiG1":[function(require,module,exports) { -"use strict"; - -Object.defineProperty(exports, "__esModule", { - value: true -}); -exports.default = isHash; - -var _assertString = _interopRequireDefault(require("./util/assertString")); - -function _interopRequireDefault(obj) { - return obj && obj.__esModule ? obj : { - default: obj - }; -} - -var lengths = { - md5: 32, - md4: 32, - sha1: 40, - sha256: 64, - sha384: 96, - sha512: 128, - ripemd128: 32, - ripemd160: 40, - tiger128: 32, - tiger160: 40, - tiger192: 48, - crc32: 8, - crc32b: 8 -}; - -function isHash(str, algorithm) { - (0, _assertString.default)(str); - var hash = new RegExp("^[a-f0-9]{".concat(lengths[algorithm], "}$")); - return hash.test(str); -} - -module.exports = exports.default; -module.exports.default = exports.default; -},{"./util/assertString":"d3m2"}],"V0R0":[function(require,module,exports) { -"use strict"; - -Object.defineProperty(exports, "__esModule", { - value: true -}); -exports.default = isJWT; - -var _assertString = _interopRequireDefault(require("./util/assertString")); - -function _interopRequireDefault(obj) { - return obj && obj.__esModule ? obj : { - default: obj - }; -} - -var jwt = /^([A-Za-z0-9\-_~+\/]+[=]{0,2})\.([A-Za-z0-9\-_~+\/]+[=]{0,2})(?:\.([A-Za-z0-9\-_~+\/]+[=]{0,2}))?$/; - -function isJWT(str) { - (0, _assertString.default)(str); - return jwt.test(str); -} - -module.exports = exports.default; -module.exports.default = exports.default; -},{"./util/assertString":"d3m2"}],"Fj5V":[function(require,module,exports) { -"use strict"; - -Object.defineProperty(exports, "__esModule", { - value: true -}); -exports.default = isJSON; - -var _assertString = _interopRequireDefault(require("./util/assertString")); - -function _interopRequireDefault(obj) { - return obj && obj.__esModule ? obj : { - default: obj - }; -} - -function _typeof(obj) { - if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { - _typeof = function _typeof(obj) { - return typeof obj; - }; - } else { - _typeof = function _typeof(obj) { - return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; - }; - } - - return _typeof(obj); -} - -function isJSON(str) { - (0, _assertString.default)(str); - - try { - var obj = JSON.parse(str); - return !!obj && _typeof(obj) === 'object'; - } catch (e) { - /* ignore */ - } - - return false; -} - -module.exports = exports.default; -module.exports.default = exports.default; -},{"./util/assertString":"d3m2"}],"eubH":[function(require,module,exports) { -"use strict"; - -Object.defineProperty(exports, "__esModule", { - value: true -}); -exports.default = isEmpty; - -var _assertString = _interopRequireDefault(require("./util/assertString")); - -var _merge = _interopRequireDefault(require("./util/merge")); - -function _interopRequireDefault(obj) { - return obj && obj.__esModule ? obj : { - default: obj - }; -} - -var default_is_empty_options = { - ignore_whitespace: false -}; - -function isEmpty(str, options) { - (0, _assertString.default)(str); - options = (0, _merge.default)(options, default_is_empty_options); - return (options.ignore_whitespace ? str.trim().length : str.length) === 0; -} - -module.exports = exports.default; -module.exports.default = exports.default; -},{"./util/assertString":"d3m2","./util/merge":"hxfi"}],"ZzKw":[function(require,module,exports) { -"use strict"; - -Object.defineProperty(exports, "__esModule", { - value: true -}); -exports.default = isLength; - -var _assertString = _interopRequireDefault(require("./util/assertString")); - -function _interopRequireDefault(obj) { - return obj && obj.__esModule ? obj : { - default: obj - }; -} - -function _typeof(obj) { - if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { - _typeof = function _typeof(obj) { - return typeof obj; - }; - } else { - _typeof = function _typeof(obj) { - return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; - }; - } - - return _typeof(obj); -} -/* eslint-disable prefer-rest-params */ - - -function isLength(str, options) { - (0, _assertString.default)(str); - var min; - var max; - - if (_typeof(options) === 'object') { - min = options.min || 0; - max = options.max; - } else { - // backwards compatibility: isLength(str, min [, max]) - min = arguments[1]; - max = arguments[2]; - } - - var surrogatePairs = str.match(/[\uD800-\uDBFF][\uDC00-\uDFFF]/g) || []; - var len = str.length - surrogatePairs.length; - return len >= min && (typeof max === 'undefined' || len <= max); -} - -module.exports = exports.default; -module.exports.default = exports.default; -},{"./util/assertString":"d3m2"}],"ZKlV":[function(require,module,exports) { -"use strict"; - -Object.defineProperty(exports, "__esModule", { - value: true -}); -exports.default = isUUID; - -var _assertString = _interopRequireDefault(require("./util/assertString")); - -function _interopRequireDefault(obj) { - return obj && obj.__esModule ? obj : { - default: obj - }; -} - -var uuid = { - 3: /^[0-9A-F]{8}-[0-9A-F]{4}-3[0-9A-F]{3}-[0-9A-F]{4}-[0-9A-F]{12}$/i, - 4: /^[0-9A-F]{8}-[0-9A-F]{4}-4[0-9A-F]{3}-[89AB][0-9A-F]{3}-[0-9A-F]{12}$/i, - 5: /^[0-9A-F]{8}-[0-9A-F]{4}-5[0-9A-F]{3}-[89AB][0-9A-F]{3}-[0-9A-F]{12}$/i, - all: /^[0-9A-F]{8}-[0-9A-F]{4}-[0-9A-F]{4}-[0-9A-F]{4}-[0-9A-F]{12}$/i -}; - -function isUUID(str) { - var version = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'all'; - (0, _assertString.default)(str); - var pattern = uuid[version]; - return pattern && pattern.test(str); -} - -module.exports = exports.default; -module.exports.default = exports.default; -},{"./util/assertString":"d3m2"}],"Quad":[function(require,module,exports) { -"use strict"; - -Object.defineProperty(exports, "__esModule", { - value: true -}); -exports.default = isMongoId; - -var _assertString = _interopRequireDefault(require("./util/assertString")); - -var _isHexadecimal = _interopRequireDefault(require("./isHexadecimal")); - -function _interopRequireDefault(obj) { - return obj && obj.__esModule ? obj : { - default: obj - }; -} - -function isMongoId(str) { - (0, _assertString.default)(str); - return (0, _isHexadecimal.default)(str) && str.length === 24; -} - -module.exports = exports.default; -module.exports.default = exports.default; -},{"./util/assertString":"d3m2","./isHexadecimal":"DCUy"}],"pscr":[function(require,module,exports) { -"use strict"; - -Object.defineProperty(exports, "__esModule", { - value: true -}); -exports.default = isAfter; - -var _assertString = _interopRequireDefault(require("./util/assertString")); - -var _toDate = _interopRequireDefault(require("./toDate")); - -function _interopRequireDefault(obj) { - return obj && obj.__esModule ? obj : { - default: obj - }; -} - -function isAfter(str) { - var date = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : String(new Date()); - (0, _assertString.default)(str); - var comparison = (0, _toDate.default)(date); - var original = (0, _toDate.default)(str); - return !!(original && comparison && original > comparison); -} - -module.exports = exports.default; -module.exports.default = exports.default; -},{"./util/assertString":"d3m2","./toDate":"G1eO"}],"tWM9":[function(require,module,exports) { -"use strict"; - -Object.defineProperty(exports, "__esModule", { - value: true -}); -exports.default = isBefore; - -var _assertString = _interopRequireDefault(require("./util/assertString")); - -var _toDate = _interopRequireDefault(require("./toDate")); - -function _interopRequireDefault(obj) { - return obj && obj.__esModule ? obj : { - default: obj - }; -} - -function isBefore(str) { - var date = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : String(new Date()); - (0, _assertString.default)(str); - var comparison = (0, _toDate.default)(date); - var original = (0, _toDate.default)(str); - return !!(original && comparison && original < comparison); -} - -module.exports = exports.default; -module.exports.default = exports.default; -},{"./util/assertString":"d3m2","./toDate":"G1eO"}],"weq6":[function(require,module,exports) { -"use strict"; - -Object.defineProperty(exports, "__esModule", { - value: true -}); -exports.default = isIn; - -var _assertString = _interopRequireDefault(require("./util/assertString")); - -var _toString = _interopRequireDefault(require("./util/toString")); - -function _interopRequireDefault(obj) { - return obj && obj.__esModule ? obj : { - default: obj - }; -} - -function _typeof(obj) { - if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { - _typeof = function _typeof(obj) { - return typeof obj; - }; - } else { - _typeof = function _typeof(obj) { - return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; - }; - } - - return _typeof(obj); -} - -function isIn(str, options) { - (0, _assertString.default)(str); - var i; - - if (Object.prototype.toString.call(options) === '[object Array]') { - var array = []; - - for (i in options) { - if ({}.hasOwnProperty.call(options, i)) { - array[i] = (0, _toString.default)(options[i]); - } - } - - return array.indexOf(str) >= 0; - } else if (_typeof(options) === 'object') { - return options.hasOwnProperty(str); - } else if (options && typeof options.indexOf === 'function') { - return options.indexOf(str) >= 0; - } - - return false; -} - -module.exports = exports.default; -module.exports.default = exports.default; -},{"./util/assertString":"d3m2","./util/toString":"Gmuz"}],"Ob4A":[function(require,module,exports) { -"use strict"; - -Object.defineProperty(exports, "__esModule", { - value: true -}); -exports.default = isCreditCard; - -var _assertString = _interopRequireDefault(require("./util/assertString")); - -function _interopRequireDefault(obj) { - return obj && obj.__esModule ? obj : { - default: obj - }; -} -/* eslint-disable max-len */ - - -var creditCard = /^(?:4[0-9]{12}(?:[0-9]{3})?|5[1-5][0-9]{14}|(222[1-9]|22[3-9][0-9]|2[3-6][0-9]{2}|27[01][0-9]|2720)[0-9]{12}|6(?:011|5[0-9][0-9])[0-9]{12}|3[47][0-9]{13}|3(?:0[0-5]|[68][0-9])[0-9]{11}|(?:2131|1800|35\d{3})\d{11}|6[27][0-9]{14})$/; -/* eslint-enable max-len */ - -function isCreditCard(str) { - (0, _assertString.default)(str); - var sanitized = str.replace(/[- ]+/g, ''); - - if (!creditCard.test(sanitized)) { - return false; - } - - var sum = 0; - var digit; - var tmpNum; - var shouldDouble; - - for (var i = sanitized.length - 1; i >= 0; i--) { - digit = sanitized.substring(i, i + 1); - tmpNum = parseInt(digit, 10); - - if (shouldDouble) { - tmpNum *= 2; - - if (tmpNum >= 10) { - sum += tmpNum % 10 + 1; - } else { - sum += tmpNum; - } - } else { - sum += tmpNum; - } - - shouldDouble = !shouldDouble; - } - - return !!(sum % 10 === 0 ? sanitized : false); -} - -module.exports = exports.default; -module.exports.default = exports.default; -},{"./util/assertString":"d3m2"}],"nylB":[function(require,module,exports) { -"use strict"; - -Object.defineProperty(exports, "__esModule", { - value: true -}); -exports.default = isIdentityCard; - -var _assertString = _interopRequireDefault(require("./util/assertString")); - -function _interopRequireDefault(obj) { - return obj && obj.__esModule ? obj : { - default: obj - }; -} - -var validators = { - ES: function ES(str) { - (0, _assertString.default)(str); - var DNI = /^[0-9X-Z][0-9]{7}[TRWAGMYFPDXBNJZSQVHLCKE]$/; - var charsValue = { - X: 0, - Y: 1, - Z: 2 - }; - var controlDigits = ['T', 'R', 'W', 'A', 'G', 'M', 'Y', 'F', 'P', 'D', 'X', 'B', 'N', 'J', 'Z', 'S', 'Q', 'V', 'H', 'L', 'C', 'K', 'E']; // sanitize user input - - var sanitized = str.trim().toUpperCase(); // validate the data structure - - if (!DNI.test(sanitized)) { - return false; - } // validate the control digit - - - var number = sanitized.slice(0, -1).replace(/[X,Y,Z]/g, function (char) { - return charsValue[char]; - }); - return sanitized.endsWith(controlDigits[number % 23]); - } -}; - -function isIdentityCard(str) { - var locale = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'any'; - (0, _assertString.default)(str); - - if (locale in validators) { - return validators[locale](str); - } else if (locale === 'any') { - for (var key in validators) { - if (validators.hasOwnProperty(key)) { - var validator = validators[key]; - - if (validator(str)) { - return true; - } - } - } - - return false; - } - - throw new Error("Invalid locale '".concat(locale, "'")); -} - -module.exports = exports.default; -module.exports.default = exports.default; -},{"./util/assertString":"d3m2"}],"b1bE":[function(require,module,exports) { -"use strict"; - -Object.defineProperty(exports, "__esModule", { - value: true -}); -exports.default = isISIN; - -var _assertString = _interopRequireDefault(require("./util/assertString")); - -function _interopRequireDefault(obj) { - return obj && obj.__esModule ? obj : { - default: obj - }; -} - -var isin = /^[A-Z]{2}[0-9A-Z]{9}[0-9]$/; - -function isISIN(str) { - (0, _assertString.default)(str); - - if (!isin.test(str)) { - return false; - } - - var checksumStr = str.replace(/[A-Z]/g, function (character) { - return parseInt(character, 36); - }); - var sum = 0; - var digit; - var tmpNum; - var shouldDouble = true; - - for (var i = checksumStr.length - 2; i >= 0; i--) { - digit = checksumStr.substring(i, i + 1); - tmpNum = parseInt(digit, 10); - - if (shouldDouble) { - tmpNum *= 2; - - if (tmpNum >= 10) { - sum += tmpNum + 1; - } else { - sum += tmpNum; - } - } else { - sum += tmpNum; - } - - shouldDouble = !shouldDouble; - } - - return parseInt(str.substr(str.length - 1), 10) === (10000 - sum) % 10; -} - -module.exports = exports.default; -module.exports.default = exports.default; -},{"./util/assertString":"d3m2"}],"ajl4":[function(require,module,exports) { -"use strict"; - -Object.defineProperty(exports, "__esModule", { - value: true -}); -exports.default = isISBN; - -var _assertString = _interopRequireDefault(require("./util/assertString")); - -function _interopRequireDefault(obj) { - return obj && obj.__esModule ? obj : { - default: obj - }; -} - -var isbn10Maybe = /^(?:[0-9]{9}X|[0-9]{10})$/; -var isbn13Maybe = /^(?:[0-9]{13})$/; -var factor = [1, 3]; - -function isISBN(str) { - var version = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : ''; - (0, _assertString.default)(str); - version = String(version); - - if (!version) { - return isISBN(str, 10) || isISBN(str, 13); - } - - var sanitized = str.replace(/[\s-]+/g, ''); - var checksum = 0; - var i; - - if (version === '10') { - if (!isbn10Maybe.test(sanitized)) { - return false; - } - - for (i = 0; i < 9; i++) { - checksum += (i + 1) * sanitized.charAt(i); - } - - if (sanitized.charAt(9) === 'X') { - checksum += 10 * 10; - } else { - checksum += 10 * sanitized.charAt(9); - } - - if (checksum % 11 === 0) { - return !!sanitized; - } - } else if (version === '13') { - if (!isbn13Maybe.test(sanitized)) { - return false; - } - - for (i = 0; i < 12; i++) { - checksum += factor[i % 2] * sanitized.charAt(i); - } - - if (sanitized.charAt(12) - (10 - checksum % 10) % 10 === 0) { - return !!sanitized; - } - } - - return false; -} - -module.exports = exports.default; -module.exports.default = exports.default; -},{"./util/assertString":"d3m2"}],"k7Z3":[function(require,module,exports) { -"use strict"; - -Object.defineProperty(exports, "__esModule", { - value: true -}); -exports.default = isISSN; - -var _assertString = _interopRequireDefault(require("./util/assertString")); - -function _interopRequireDefault(obj) { - return obj && obj.__esModule ? obj : { - default: obj - }; -} - -var issn = '^\\d{4}-?\\d{3}[\\dX]$'; - -function isISSN(str) { - var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; - (0, _assertString.default)(str); - var testIssn = issn; - testIssn = options.require_hyphen ? testIssn.replace('?', '') : testIssn; - testIssn = options.case_sensitive ? new RegExp(testIssn) : new RegExp(testIssn, 'i'); - - if (!testIssn.test(str)) { - return false; - } - - var digits = str.replace('-', '').toUpperCase(); - var checksum = 0; - - for (var i = 0; i < digits.length; i++) { - var digit = digits[i]; - checksum += (digit === 'X' ? 10 : +digit) * (8 - i); - } - - return checksum % 11 === 0; -} - -module.exports = exports.default; -module.exports.default = exports.default; -},{"./util/assertString":"d3m2"}],"XWOV":[function(require,module,exports) { -"use strict"; - -Object.defineProperty(exports, "__esModule", { - value: true -}); -exports.default = isMobilePhone; -exports.locales = void 0; - -var _assertString = _interopRequireDefault(require("./util/assertString")); - -function _interopRequireDefault(obj) { - return obj && obj.__esModule ? obj : { - default: obj - }; -} -/* eslint-disable max-len */ - - -var phones = { - 'ar-AE': /^((\+?971)|0)?5[024568]\d{7}$/, - 'ar-DZ': /^(\+?213|0)(5|6|7)\d{8}$/, - 'ar-EG': /^((\+?20)|0)?1[012]\d{8}$/, - 'ar-IQ': /^(\+?964|0)?7[0-9]\d{8}$/, - 'ar-JO': /^(\+?962|0)?7[789]\d{7}$/, - 'ar-KW': /^(\+?965)[569]\d{7}$/, - 'ar-SA': /^(!?(\+?966)|0)?5\d{8}$/, - 'ar-SY': /^(!?(\+?963)|0)?9\d{8}$/, - 'ar-TN': /^(\+?216)?[2459]\d{7}$/, - 'be-BY': /^(\+?375)?(24|25|29|33|44)\d{7}$/, - 'bg-BG': /^(\+?359|0)?8[789]\d{7}$/, - 'bn-BD': /\+?(88)?0?1[356789][0-9]{8}\b/, - 'cs-CZ': /^(\+?420)? ?[1-9][0-9]{2} ?[0-9]{3} ?[0-9]{3}$/, - 'da-DK': /^(\+?45)?\s?\d{2}\s?\d{2}\s?\d{2}\s?\d{2}$/, - 'de-DE': /^(\+49)?0?1(5[0-25-9]\d|6([23]|0\d?)|7([0-57-9]|6\d))\d{7}$/, - 'el-GR': /^(\+?30|0)?(69\d{8})$/, - 'en-AU': /^(\+?61|0)4\d{8}$/, - 'en-GB': /^(\+?44|0)7\d{9}$/, - 'en-GH': /^(\+233|0)(20|50|24|54|27|57|26|56|23|28)\d{7}$/, - 'en-HK': /^(\+?852\-?)?[456789]\d{3}\-?\d{4}$/, - 'en-IE': /^(\+?353|0)8[356789]\d{7}$/, - 'en-IN': /^(\+?91|0)?[6789]\d{9}$/, - 'en-KE': /^(\+?254|0)?[7]\d{8}$/, - 'en-MU': /^(\+?230|0)?\d{8}$/, - 'en-NG': /^(\+?234|0)?[789]\d{9}$/, - 'en-NZ': /^(\+?64|0)[28]\d{7,9}$/, - 'en-PK': /^((\+92)|(0092))-{0,1}\d{3}-{0,1}\d{7}$|^\d{11}$|^\d{4}-\d{7}$/, - 'en-RW': /^(\+?250|0)?[7]\d{8}$/, - 'en-SG': /^(\+65)?[89]\d{7}$/, - 'en-TZ': /^(\+?255|0)?[67]\d{8}$/, - 'en-UG': /^(\+?256|0)?[7]\d{8}$/, - 'en-US': /^((\+1|1)?( |-)?)?(\([2-9][0-9]{2}\)|[2-9][0-9]{2})( |-)?([2-9][0-9]{2}( |-)?[0-9]{4})$/, - 'en-ZA': /^(\+?27|0)\d{9}$/, - 'en-ZM': /^(\+?26)?09[567]\d{7}$/, - 'es-ES': /^(\+?34)?(6\d{1}|7[1234])\d{7}$/, - 'es-MX': /^(\+?52)?(1|01)?\d{10,11}$/, - 'es-UY': /^(\+598|0)9[1-9][\d]{6}$/, - 'et-EE': /^(\+?372)?\s?(5|8[1-4])\s?([0-9]\s?){6,7}$/, - 'fa-IR': /^(\+?98[\-\s]?|0)9[0-39]\d[\-\s]?\d{3}[\-\s]?\d{4}$/, - 'fi-FI': /^(\+?358|0)\s?(4(0|1|2|4|5|6)?|50)\s?(\d\s?){4,8}\d$/, - 'fo-FO': /^(\+?298)?\s?\d{2}\s?\d{2}\s?\d{2}$/, - 'fr-FR': /^(\+?33|0)[67]\d{8}$/, - 'he-IL': /^(\+972|0)([23489]|5[012345689]|77)[1-9]\d{6}$/, - 'hu-HU': /^(\+?36)(20|30|70)\d{7}$/, - 'id-ID': /^(\+?62|0)8(1[123456789]|2[1238]|3[1238]|5[12356789]|7[78]|9[56789]|8[123456789])([\s?|\d]{5,11})$/, - 'it-IT': /^(\+?39)?\s?3\d{2} ?\d{6,7}$/, - 'ja-JP': /^(\+?81|0)[789]0[ \-]?[1-9]\d{2}[ \-]?\d{5}$/, - 'kk-KZ': /^(\+?7|8)?7\d{9}$/, - 'kl-GL': /^(\+?299)?\s?\d{2}\s?\d{2}\s?\d{2}$/, - 'ko-KR': /^((\+?82)[ \-]?)?0?1([0|1|6|7|8|9]{1})[ \-]?\d{3,4}[ \-]?\d{4}$/, - 'lt-LT': /^(\+370|8)\d{8}$/, - 'ms-MY': /^(\+?6?01){1}(([0145]{1}(\-|\s)?\d{7,8})|([236789]{1}(\s|\-)?\d{7}))$/, - 'nb-NO': /^(\+?47)?[49]\d{7}$/, - 'nl-BE': /^(\+?32|0)4?\d{8}$/, - 'nn-NO': /^(\+?47)?[49]\d{7}$/, - 'pl-PL': /^(\+?48)? ?[5-8]\d ?\d{3} ?\d{2} ?\d{2}$/, - 'pt-BR': /(?=^(\+?5{2}\-?|0)[1-9]{2}\-?\d{4}\-?\d{4}$)(^(\+?5{2}\-?|0)[1-9]{2}\-?[6-9]{1}\d{3}\-?\d{4}$)|(^(\+?5{2}\-?|0)[1-9]{2}\-?9[6-9]{1}\d{3}\-?\d{4}$)/, - 'pt-PT': /^(\+?351)?9[1236]\d{7}$/, - 'ro-RO': /^(\+?4?0)\s?7\d{2}(\/|\s|\.|\-)?\d{3}(\s|\.|\-)?\d{3}$/, - 'ru-RU': /^(\+?7|8)?9\d{9}$/, - 'sl-SI': /^(\+386\s?|0)(\d{1}\s?\d{3}\s?\d{2}\s?\d{2}|\d{2}\s?\d{3}\s?\d{3})$/, - 'sk-SK': /^(\+?421)? ?[1-9][0-9]{2} ?[0-9]{3} ?[0-9]{3}$/, - 'sr-RS': /^(\+3816|06)[- \d]{5,9}$/, - 'sv-SE': /^(\+?46|0)[\s\-]?7[\s\-]?[02369]([\s\-]?\d){7}$/, - 'th-TH': /^(\+66|66|0)\d{9}$/, - 'tr-TR': /^(\+?90|0)?5\d{9}$/, - 'uk-UA': /^(\+?38|8)?0\d{9}$/, - 'vi-VN': /^(\+?84|0)((3([2-9]))|(5([689]))|(7([0|6-9]))|(8([1-5]))|(9([0-9])))([0-9]{7})$/, - 'zh-CN': /^((\+|00)86)?1([358][0-9]|4[579]|66|7[0135678]|9[89])[0-9]{8}$/, - 'zh-TW': /^(\+?886\-?|0)?9\d{8}$/ -}; -/* eslint-enable max-len */ -// aliases - -phones['en-CA'] = phones['en-US']; -phones['fr-BE'] = phones['nl-BE']; -phones['zh-HK'] = phones['en-HK']; - -function isMobilePhone(str, locale, options) { - (0, _assertString.default)(str); - - if (options && options.strictMode && !str.startsWith('+')) { - return false; - } - - if (Array.isArray(locale)) { - return locale.some(function (key) { - if (phones.hasOwnProperty(key)) { - var phone = phones[key]; - - if (phone.test(str)) { - return true; - } - } - - return false; - }); - } else if (locale in phones) { - return phones[locale].test(str); // alias falsey locale as 'any' - } else if (!locale || locale === 'any') { - for (var key in phones) { - if (phones.hasOwnProperty(key)) { - var phone = phones[key]; - - if (phone.test(str)) { - return true; - } - } - } - - return false; - } - - throw new Error("Invalid locale '".concat(locale, "'")); -} - -var locales = Object.keys(phones); -exports.locales = locales; -},{"./util/assertString":"d3m2"}],"hPSN":[function(require,module,exports) { -"use strict"; - -Object.defineProperty(exports, "__esModule", { - value: true -}); -exports.default = isCurrency; - -var _merge = _interopRequireDefault(require("./util/merge")); - -var _assertString = _interopRequireDefault(require("./util/assertString")); - -function _interopRequireDefault(obj) { - return obj && obj.__esModule ? obj : { - default: obj - }; -} - -function currencyRegex(options) { - var decimal_digits = "\\d{".concat(options.digits_after_decimal[0], "}"); - options.digits_after_decimal.forEach(function (digit, index) { - if (index !== 0) decimal_digits = "".concat(decimal_digits, "|\\d{").concat(digit, "}"); - }); - var symbol = "(\\".concat(options.symbol.replace(/\./g, '\\.'), ")").concat(options.require_symbol ? '' : '?'), - negative = '-?', - whole_dollar_amount_without_sep = '[1-9]\\d*', - whole_dollar_amount_with_sep = "[1-9]\\d{0,2}(\\".concat(options.thousands_separator, "\\d{3})*"), - valid_whole_dollar_amounts = ['0', whole_dollar_amount_without_sep, whole_dollar_amount_with_sep], - whole_dollar_amount = "(".concat(valid_whole_dollar_amounts.join('|'), ")?"), - decimal_amount = "(\\".concat(options.decimal_separator, "(").concat(decimal_digits, "))").concat(options.require_decimal ? '' : '?'); - var pattern = whole_dollar_amount + (options.allow_decimal || options.require_decimal ? decimal_amount : ''); // default is negative sign before symbol, but there are two other options (besides parens) - - if (options.allow_negatives && !options.parens_for_negatives) { - if (options.negative_sign_after_digits) { - pattern += negative; - } else if (options.negative_sign_before_digits) { - pattern = negative + pattern; - } - } // South African Rand, for example, uses R 123 (space) and R-123 (no space) - - - if (options.allow_negative_sign_placeholder) { - pattern = "( (?!\\-))?".concat(pattern); - } else if (options.allow_space_after_symbol) { - pattern = " ?".concat(pattern); - } else if (options.allow_space_after_digits) { - pattern += '( (?!$))?'; - } - - if (options.symbol_after_digits) { - pattern += symbol; - } else { - pattern = symbol + pattern; - } - - if (options.allow_negatives) { - if (options.parens_for_negatives) { - pattern = "(\\(".concat(pattern, "\\)|").concat(pattern, ")"); - } else if (!(options.negative_sign_before_digits || options.negative_sign_after_digits)) { - pattern = negative + pattern; - } - } // ensure there's a dollar and/or decimal amount, and that - // it doesn't start with a space or a negative sign followed by a space - - - return new RegExp("^(?!-? )(?=.*\\d)".concat(pattern, "$")); -} - -var default_currency_options = { - symbol: '$', - require_symbol: false, - allow_space_after_symbol: false, - symbol_after_digits: false, - allow_negatives: true, - parens_for_negatives: false, - negative_sign_before_digits: false, - negative_sign_after_digits: false, - allow_negative_sign_placeholder: false, - thousands_separator: ',', - decimal_separator: '.', - allow_decimal: true, - require_decimal: false, - digits_after_decimal: [2], - allow_space_after_digits: false -}; - -function isCurrency(str, options) { - (0, _assertString.default)(str); - options = (0, _merge.default)(options, default_currency_options); - return currencyRegex(options).test(str); -} - -module.exports = exports.default; -module.exports.default = exports.default; -},{"./util/merge":"hxfi","./util/assertString":"d3m2"}],"gokW":[function(require,module,exports) { -"use strict"; - -Object.defineProperty(exports, "__esModule", { - value: true -}); -exports.default = isISO8601; - -var _assertString = _interopRequireDefault(require("./util/assertString")); - -function _interopRequireDefault(obj) { - return obj && obj.__esModule ? obj : { - default: obj - }; -} -/* eslint-disable max-len */ -// from http://goo.gl/0ejHHW - - -var iso8601 = /^([\+-]?\d{4}(?!\d{2}\b))((-?)((0[1-9]|1[0-2])(\3([12]\d|0[1-9]|3[01]))?|W([0-4]\d|5[0-3])(-?[1-7])?|(00[1-9]|0[1-9]\d|[12]\d{2}|3([0-5]\d|6[1-6])))([T\s]((([01]\d|2[0-3])((:?)[0-5]\d)?|24:?00)([\.,]\d+(?!:))?)?(\17[0-5]\d([\.,]\d+)?)?([zZ]|([\+-])([01]\d|2[0-3]):?([0-5]\d)?)?)?)?$/; -/* eslint-enable max-len */ - -var isValidDate = function isValidDate(str) { - // str must have passed the ISO8601 check - // this check is meant to catch invalid dates - // like 2009-02-31 - // first check for ordinal dates - var ordinalMatch = str.match(/^(\d{4})-?(\d{3})([ T]{1}\.*|$)/); - - if (ordinalMatch) { - var oYear = Number(ordinalMatch[1]); - var oDay = Number(ordinalMatch[2]); // if is leap year - - if (oYear % 4 === 0 && oYear % 100 !== 0) return oDay <= 366; - return oDay <= 365; - } - - var match = str.match(/(\d{4})-?(\d{0,2})-?(\d*)/).map(Number); - var year = match[1]; - var month = match[2]; - var day = match[3]; - var monthString = month ? "0".concat(month).slice(-2) : month; - var dayString = day ? "0".concat(day).slice(-2) : day; // create a date object and compare - - var d = new Date("".concat(year, "-").concat(monthString || '01', "-").concat(dayString || '01')); - if (isNaN(d.getUTCFullYear())) return false; - - if (month && day) { - return d.getUTCFullYear() === year && d.getUTCMonth() + 1 === month && d.getUTCDate() === day; - } - - return true; -}; - -function isISO8601(str, options) { - (0, _assertString.default)(str); - var check = iso8601.test(str); - if (!options) return check; - if (check && options.strict) return isValidDate(str); - return check; -} - -module.exports = exports.default; -module.exports.default = exports.default; -},{"./util/assertString":"d3m2"}],"Nogc":[function(require,module,exports) { -"use strict"; - -Object.defineProperty(exports, "__esModule", { - value: true -}); -exports.default = isRFC3339; - -var _assertString = _interopRequireDefault(require("./util/assertString")); - -function _interopRequireDefault(obj) { - return obj && obj.__esModule ? obj : { - default: obj - }; -} -/* Based on https://tools.ietf.org/html/rfc3339#section-5.6 */ - - -var dateFullYear = /[0-9]{4}/; -var dateMonth = /(0[1-9]|1[0-2])/; -var dateMDay = /([12]\d|0[1-9]|3[01])/; -var timeHour = /([01][0-9]|2[0-3])/; -var timeMinute = /[0-5][0-9]/; -var timeSecond = /([0-5][0-9]|60)/; -var timeSecFrac = /(\.[0-9]+)?/; -var timeNumOffset = new RegExp("[-+]".concat(timeHour.source, ":").concat(timeMinute.source)); -var timeOffset = new RegExp("([zZ]|".concat(timeNumOffset.source, ")")); -var partialTime = new RegExp("".concat(timeHour.source, ":").concat(timeMinute.source, ":").concat(timeSecond.source).concat(timeSecFrac.source)); -var fullDate = new RegExp("".concat(dateFullYear.source, "-").concat(dateMonth.source, "-").concat(dateMDay.source)); -var fullTime = new RegExp("".concat(partialTime.source).concat(timeOffset.source)); -var rfc3339 = new RegExp("".concat(fullDate.source, "[ tT]").concat(fullTime.source)); - -function isRFC3339(str) { - (0, _assertString.default)(str); - return rfc3339.test(str); -} - -module.exports = exports.default; -module.exports.default = exports.default; -},{"./util/assertString":"d3m2"}],"ko31":[function(require,module,exports) { -"use strict"; - -Object.defineProperty(exports, "__esModule", { - value: true -}); -exports.default = isISO31661Alpha2; - -var _assertString = _interopRequireDefault(require("./util/assertString")); - -var _includes = _interopRequireDefault(require("./util/includes")); - -function _interopRequireDefault(obj) { - return obj && obj.__esModule ? obj : { - default: obj - }; -} // from https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2 - - -var validISO31661Alpha2CountriesCodes = ['AD', 'AE', 'AF', 'AG', 'AI', 'AL', 'AM', 'AO', 'AQ', 'AR', 'AS', 'AT', 'AU', 'AW', 'AX', 'AZ', 'BA', 'BB', 'BD', 'BE', 'BF', 'BG', 'BH', 'BI', 'BJ', 'BL', 'BM', 'BN', 'BO', 'BQ', 'BR', 'BS', 'BT', 'BV', 'BW', 'BY', 'BZ', 'CA', 'CC', 'CD', 'CF', 'CG', 'CH', 'CI', 'CK', 'CL', 'CM', 'CN', 'CO', 'CR', 'CU', 'CV', 'CW', 'CX', 'CY', 'CZ', 'DE', 'DJ', 'DK', 'DM', 'DO', 'DZ', 'EC', 'EE', 'EG', 'EH', 'ER', 'ES', 'ET', 'FI', 'FJ', 'FK', 'FM', 'FO', 'FR', 'GA', 'GB', 'GD', 'GE', 'GF', 'GG', 'GH', 'GI', 'GL', 'GM', 'GN', 'GP', 'GQ', 'GR', 'GS', 'GT', 'GU', 'GW', 'GY', 'HK', 'HM', 'HN', 'HR', 'HT', 'HU', 'ID', 'IE', 'IL', 'IM', 'IN', 'IO', 'IQ', 'IR', 'IS', 'IT', 'JE', 'JM', 'JO', 'JP', 'KE', 'KG', 'KH', 'KI', 'KM', 'KN', 'KP', 'KR', 'KW', 'KY', 'KZ', 'LA', 'LB', 'LC', 'LI', 'LK', 'LR', 'LS', 'LT', 'LU', 'LV', 'LY', 'MA', 'MC', 'MD', 'ME', 'MF', 'MG', 'MH', 'MK', 'ML', 'MM', 'MN', 'MO', 'MP', 'MQ', 'MR', 'MS', 'MT', 'MU', 'MV', 'MW', 'MX', 'MY', 'MZ', 'NA', 'NC', 'NE', 'NF', 'NG', 'NI', 'NL', 'NO', 'NP', 'NR', 'NU', 'NZ', 'OM', 'PA', 'PE', 'PF', 'PG', 'PH', 'PK', 'PL', 'PM', 'PN', 'PR', 'PS', 'PT', 'PW', 'PY', 'QA', 'RE', 'RO', 'RS', 'RU', 'RW', 'SA', 'SB', 'SC', 'SD', 'SE', 'SG', 'SH', 'SI', 'SJ', 'SK', 'SL', 'SM', 'SN', 'SO', 'SR', 'SS', 'ST', 'SV', 'SX', 'SY', 'SZ', 'TC', 'TD', 'TF', 'TG', 'TH', 'TJ', 'TK', 'TL', 'TM', 'TN', 'TO', 'TR', 'TT', 'TV', 'TW', 'TZ', 'UA', 'UG', 'UM', 'US', 'UY', 'UZ', 'VA', 'VC', 'VE', 'VG', 'VI', 'VN', 'VU', 'WF', 'WS', 'YE', 'YT', 'ZA', 'ZM', 'ZW']; - -function isISO31661Alpha2(str) { - (0, _assertString.default)(str); - return (0, _includes.default)(validISO31661Alpha2CountriesCodes, str.toUpperCase()); -} - -module.exports = exports.default; -module.exports.default = exports.default; -},{"./util/assertString":"d3m2","./util/includes":"N8iQ"}],"xfuO":[function(require,module,exports) { -"use strict"; - -Object.defineProperty(exports, "__esModule", { - value: true -}); -exports.default = isISO31661Alpha3; - -var _assertString = _interopRequireDefault(require("./util/assertString")); - -var _includes = _interopRequireDefault(require("./util/includes")); - -function _interopRequireDefault(obj) { - return obj && obj.__esModule ? obj : { - default: obj - }; -} // from https://en.wikipedia.org/wiki/ISO_3166-1_alpha-3 - - -var validISO31661Alpha3CountriesCodes = ['AFG', 'ALA', 'ALB', 'DZA', 'ASM', 'AND', 'AGO', 'AIA', 'ATA', 'ATG', 'ARG', 'ARM', 'ABW', 'AUS', 'AUT', 'AZE', 'BHS', 'BHR', 'BGD', 'BRB', 'BLR', 'BEL', 'BLZ', 'BEN', 'BMU', 'BTN', 'BOL', 'BES', 'BIH', 'BWA', 'BVT', 'BRA', 'IOT', 'BRN', 'BGR', 'BFA', 'BDI', 'KHM', 'CMR', 'CAN', 'CPV', 'CYM', 'CAF', 'TCD', 'CHL', 'CHN', 'CXR', 'CCK', 'COL', 'COM', 'COG', 'COD', 'COK', 'CRI', 'CIV', 'HRV', 'CUB', 'CUW', 'CYP', 'CZE', 'DNK', 'DJI', 'DMA', 'DOM', 'ECU', 'EGY', 'SLV', 'GNQ', 'ERI', 'EST', 'ETH', 'FLK', 'FRO', 'FJI', 'FIN', 'FRA', 'GUF', 'PYF', 'ATF', 'GAB', 'GMB', 'GEO', 'DEU', 'GHA', 'GIB', 'GRC', 'GRL', 'GRD', 'GLP', 'GUM', 'GTM', 'GGY', 'GIN', 'GNB', 'GUY', 'HTI', 'HMD', 'VAT', 'HND', 'HKG', 'HUN', 'ISL', 'IND', 'IDN', 'IRN', 'IRQ', 'IRL', 'IMN', 'ISR', 'ITA', 'JAM', 'JPN', 'JEY', 'JOR', 'KAZ', 'KEN', 'KIR', 'PRK', 'KOR', 'KWT', 'KGZ', 'LAO', 'LVA', 'LBN', 'LSO', 'LBR', 'LBY', 'LIE', 'LTU', 'LUX', 'MAC', 'MKD', 'MDG', 'MWI', 'MYS', 'MDV', 'MLI', 'MLT', 'MHL', 'MTQ', 'MRT', 'MUS', 'MYT', 'MEX', 'FSM', 'MDA', 'MCO', 'MNG', 'MNE', 'MSR', 'MAR', 'MOZ', 'MMR', 'NAM', 'NRU', 'NPL', 'NLD', 'NCL', 'NZL', 'NIC', 'NER', 'NGA', 'NIU', 'NFK', 'MNP', 'NOR', 'OMN', 'PAK', 'PLW', 'PSE', 'PAN', 'PNG', 'PRY', 'PER', 'PHL', 'PCN', 'POL', 'PRT', 'PRI', 'QAT', 'REU', 'ROU', 'RUS', 'RWA', 'BLM', 'SHN', 'KNA', 'LCA', 'MAF', 'SPM', 'VCT', 'WSM', 'SMR', 'STP', 'SAU', 'SEN', 'SRB', 'SYC', 'SLE', 'SGP', 'SXM', 'SVK', 'SVN', 'SLB', 'SOM', 'ZAF', 'SGS', 'SSD', 'ESP', 'LKA', 'SDN', 'SUR', 'SJM', 'SWZ', 'SWE', 'CHE', 'SYR', 'TWN', 'TJK', 'TZA', 'THA', 'TLS', 'TGO', 'TKL', 'TON', 'TTO', 'TUN', 'TUR', 'TKM', 'TCA', 'TUV', 'UGA', 'UKR', 'ARE', 'GBR', 'USA', 'UMI', 'URY', 'UZB', 'VUT', 'VEN', 'VNM', 'VGB', 'VIR', 'WLF', 'ESH', 'YEM', 'ZMB', 'ZWE']; - -function isISO31661Alpha3(str) { - (0, _assertString.default)(str); - return (0, _includes.default)(validISO31661Alpha3CountriesCodes, str.toUpperCase()); -} - -module.exports = exports.default; -module.exports.default = exports.default; -},{"./util/assertString":"d3m2","./util/includes":"N8iQ"}],"CZZS":[function(require,module,exports) { -"use strict"; - -Object.defineProperty(exports, "__esModule", { - value: true -}); -exports.default = isBase64; - -var _assertString = _interopRequireDefault(require("./util/assertString")); - -function _interopRequireDefault(obj) { - return obj && obj.__esModule ? obj : { - default: obj - }; -} - -var notBase64 = /[^A-Z0-9+\/=]/i; - -function isBase64(str) { - (0, _assertString.default)(str); - var len = str.length; - - if (!len || len % 4 !== 0 || notBase64.test(str)) { - return false; - } - - var firstPaddingChar = str.indexOf('='); - return firstPaddingChar === -1 || firstPaddingChar === len - 1 || firstPaddingChar === len - 2 && str[len - 1] === '='; -} - -module.exports = exports.default; -module.exports.default = exports.default; -},{"./util/assertString":"d3m2"}],"seXT":[function(require,module,exports) { -"use strict"; - -Object.defineProperty(exports, "__esModule", { - value: true -}); -exports.default = isDataURI; - -var _assertString = _interopRequireDefault(require("./util/assertString")); - -function _interopRequireDefault(obj) { - return obj && obj.__esModule ? obj : { - default: obj - }; -} - -var validMediaType = /^[a-z]+\/[a-z0-9\-\+]+$/i; -var validAttribute = /^[a-z\-]+=[a-z0-9\-]+$/i; -var validData = /^[a-z0-9!\$&'\(\)\*\+,;=\-\._~:@\/\?%\s]*$/i; - -function isDataURI(str) { - (0, _assertString.default)(str); - var data = str.split(','); - - if (data.length < 2) { - return false; - } - - var attributes = data.shift().trim().split(';'); - var schemeAndMediaType = attributes.shift(); - - if (schemeAndMediaType.substr(0, 5) !== 'data:') { - return false; - } - - var mediaType = schemeAndMediaType.substr(5); - - if (mediaType !== '' && !validMediaType.test(mediaType)) { - return false; - } - - for (var i = 0; i < attributes.length; i++) { - if (i === attributes.length - 1 && attributes[i].toLowerCase() === 'base64') {// ok - } else if (!validAttribute.test(attributes[i])) { - return false; - } - } - - for (var _i = 0; _i < data.length; _i++) { - if (!validData.test(data[_i])) { - return false; - } - } - - return true; -} - -module.exports = exports.default; -module.exports.default = exports.default; -},{"./util/assertString":"d3m2"}],"k8m8":[function(require,module,exports) { -"use strict"; - -Object.defineProperty(exports, "__esModule", { - value: true -}); -exports.default = isMagnetURI; - -var _assertString = _interopRequireDefault(require("./util/assertString")); - -function _interopRequireDefault(obj) { - return obj && obj.__esModule ? obj : { - default: obj - }; -} - -var magnetURI = /^magnet:\?xt=urn:[a-z0-9]+:[a-z0-9]{32,40}&dn=.+&tr=.+$/i; - -function isMagnetURI(url) { - (0, _assertString.default)(url); - return magnetURI.test(url.trim()); -} - -module.exports = exports.default; -module.exports.default = exports.default; -},{"./util/assertString":"d3m2"}],"O3mI":[function(require,module,exports) { -"use strict"; - -Object.defineProperty(exports, "__esModule", { - value: true -}); -exports.default = isMimeType; - -var _assertString = _interopRequireDefault(require("./util/assertString")); - -function _interopRequireDefault(obj) { - return obj && obj.__esModule ? obj : { - default: obj - }; -} -/* - Checks if the provided string matches to a correct Media type format (MIME type) - - This function only checks is the string format follows the - etablished rules by the according RFC specifications. - This function supports 'charset' in textual media types - (https://tools.ietf.org/html/rfc6657). - - This function does not check against all the media types listed - by the IANA (https://www.iana.org/assignments/media-types/media-types.xhtml) - because of lightness purposes : it would require to include - all these MIME types in this librairy, which would weigh it - significantly. This kind of effort maybe is not worth for the use that - this function has in this entire librairy. - - More informations in the RFC specifications : - - https://tools.ietf.org/html/rfc2045 - - https://tools.ietf.org/html/rfc2046 - - https://tools.ietf.org/html/rfc7231#section-3.1.1.1 - - https://tools.ietf.org/html/rfc7231#section-3.1.1.5 -*/ -// Match simple MIME types -// NB : -// Subtype length must not exceed 100 characters. -// This rule does not comply to the RFC specs (what is the max length ?). - - -var mimeTypeSimple = /^(application|audio|font|image|message|model|multipart|text|video)\/[a-zA-Z0-9\.\-\+]{1,100}$/i; // eslint-disable-line max-len -// Handle "charset" in "text/*" - -var mimeTypeText = /^text\/[a-zA-Z0-9\.\-\+]{1,100};\s?charset=("[a-zA-Z0-9\.\-\+\s]{0,70}"|[a-zA-Z0-9\.\-\+]{0,70})(\s?\([a-zA-Z0-9\.\-\+\s]{1,20}\))?$/i; // eslint-disable-line max-len -// Handle "boundary" in "multipart/*" - -var mimeTypeMultipart = /^multipart\/[a-zA-Z0-9\.\-\+]{1,100}(;\s?(boundary|charset)=("[a-zA-Z0-9\.\-\+\s]{0,70}"|[a-zA-Z0-9\.\-\+]{0,70})(\s?\([a-zA-Z0-9\.\-\+\s]{1,20}\))?){0,2}$/i; // eslint-disable-line max-len - -function isMimeType(str) { - (0, _assertString.default)(str); - return mimeTypeSimple.test(str) || mimeTypeText.test(str) || mimeTypeMultipart.test(str); -} - -module.exports = exports.default; -module.exports.default = exports.default; -},{"./util/assertString":"d3m2"}],"WywA":[function(require,module,exports) { -"use strict"; - -Object.defineProperty(exports, "__esModule", { - value: true -}); -exports.default = _default; - -var _assertString = _interopRequireDefault(require("./util/assertString")); - -function _interopRequireDefault(obj) { - return obj && obj.__esModule ? obj : { - default: obj - }; -} - -var lat = /^\(?[+-]?(90(\.0+)?|[1-8]?\d(\.\d+)?)$/; -var long = /^\s?[+-]?(180(\.0+)?|1[0-7]\d(\.\d+)?|\d{1,2}(\.\d+)?)\)?$/; - -function _default(str) { - (0, _assertString.default)(str); - if (!str.includes(',')) return false; - var pair = str.split(','); - return lat.test(pair[0]) && long.test(pair[1]); -} - -module.exports = exports.default; -module.exports.default = exports.default; -},{"./util/assertString":"d3m2"}],"cS5U":[function(require,module,exports) { -"use strict"; - -Object.defineProperty(exports, "__esModule", { - value: true -}); -exports.default = _default; -exports.locales = void 0; - -var _assertString = _interopRequireDefault(require("./util/assertString")); - -function _interopRequireDefault(obj) { - return obj && obj.__esModule ? obj : { - default: obj - }; -} // common patterns - - -var threeDigit = /^\d{3}$/; -var fourDigit = /^\d{4}$/; -var fiveDigit = /^\d{5}$/; -var sixDigit = /^\d{6}$/; -var patterns = { - AD: /^AD\d{3}$/, - AT: fourDigit, - AU: fourDigit, - BE: fourDigit, - BG: fourDigit, - CA: /^[ABCEGHJKLMNPRSTVXY]\d[ABCEGHJ-NPRSTV-Z][\s\-]?\d[ABCEGHJ-NPRSTV-Z]\d$/i, - CH: fourDigit, - CZ: /^\d{3}\s?\d{2}$/, - DE: fiveDigit, - DK: fourDigit, - DZ: fiveDigit, - EE: fiveDigit, - ES: fiveDigit, - FI: fiveDigit, - FR: /^\d{2}\s?\d{3}$/, - GB: /^(gir\s?0aa|[a-z]{1,2}\d[\da-z]?\s?(\d[a-z]{2})?)$/i, - GR: /^\d{3}\s?\d{2}$/, - HR: /^([1-5]\d{4}$)/, - HU: fourDigit, - IL: fiveDigit, - IN: sixDigit, - IS: threeDigit, - IT: fiveDigit, - JP: /^\d{3}\-\d{4}$/, - KE: fiveDigit, - LI: /^(948[5-9]|949[0-7])$/, - LT: /^LT\-\d{5}$/, - LU: fourDigit, - LV: /^LV\-\d{4}$/, - MX: fiveDigit, - NL: /^\d{4}\s?[a-z]{2}$/i, - NO: fourDigit, - PL: /^\d{2}\-\d{3}$/, - PT: /^\d{4}\-\d{3}?$/, - RO: sixDigit, - RU: sixDigit, - SA: fiveDigit, - SE: /^\d{3}\s?\d{2}$/, - SI: fourDigit, - SK: /^\d{3}\s?\d{2}$/, - TN: fourDigit, - TW: /^\d{3}(\d{2})?$/, - UA: fiveDigit, - US: /^\d{5}(-\d{4})?$/, - ZA: fourDigit, - ZM: fiveDigit -}; -var locales = Object.keys(patterns); -exports.locales = locales; - -function _default(str, locale) { - (0, _assertString.default)(str); - - if (locale in patterns) { - return patterns[locale].test(str); - } else if (locale === 'any') { - for (var key in patterns) { - if (patterns.hasOwnProperty(key)) { - var pattern = patterns[key]; - - if (pattern.test(str)) { - return true; - } - } - } - - return false; - } - - throw new Error("Invalid locale '".concat(locale, "'")); -} -},{"./util/assertString":"d3m2"}],"mQ0y":[function(require,module,exports) { -"use strict"; - -Object.defineProperty(exports, "__esModule", { - value: true -}); -exports.default = ltrim; - -var _assertString = _interopRequireDefault(require("./util/assertString")); - -function _interopRequireDefault(obj) { - return obj && obj.__esModule ? obj : { - default: obj - }; -} - -function ltrim(str, chars) { - (0, _assertString.default)(str); - var pattern = chars ? new RegExp("^[".concat(chars, "]+"), 'g') : /^\s+/g; - return str.replace(pattern, ''); -} - -module.exports = exports.default; -module.exports.default = exports.default; -},{"./util/assertString":"d3m2"}],"c0Kf":[function(require,module,exports) { -"use strict"; - -Object.defineProperty(exports, "__esModule", { - value: true -}); -exports.default = rtrim; - -var _assertString = _interopRequireDefault(require("./util/assertString")); - -function _interopRequireDefault(obj) { - return obj && obj.__esModule ? obj : { - default: obj - }; -} - -function rtrim(str, chars) { - (0, _assertString.default)(str); - var pattern = chars ? new RegExp("[".concat(chars, "]")) : /\s/; - var idx = str.length - 1; - - for (; idx >= 0 && pattern.test(str[idx]); idx--) { - ; - } - - return idx < str.length ? str.substr(0, idx + 1) : str; -} - -module.exports = exports.default; -module.exports.default = exports.default; -},{"./util/assertString":"d3m2"}],"e3v3":[function(require,module,exports) { -"use strict"; - -Object.defineProperty(exports, "__esModule", { - value: true -}); -exports.default = trim; - -var _rtrim = _interopRequireDefault(require("./rtrim")); - -var _ltrim = _interopRequireDefault(require("./ltrim")); - -function _interopRequireDefault(obj) { - return obj && obj.__esModule ? obj : { - default: obj - }; -} - -function trim(str, chars) { - return (0, _rtrim.default)((0, _ltrim.default)(str, chars), chars); -} - -module.exports = exports.default; -module.exports.default = exports.default; -},{"./rtrim":"c0Kf","./ltrim":"mQ0y"}],"Acns":[function(require,module,exports) { -"use strict"; - -Object.defineProperty(exports, "__esModule", { - value: true -}); -exports.default = escape; - -var _assertString = _interopRequireDefault(require("./util/assertString")); - -function _interopRequireDefault(obj) { - return obj && obj.__esModule ? obj : { - default: obj - }; -} - -function escape(str) { - (0, _assertString.default)(str); - return str.replace(/&/g, '&').replace(/"/g, '"').replace(/'/g, ''').replace(//g, '>').replace(/\//g, '/').replace(/\\/g, '\').replace(/`/g, '`'); -} - -module.exports = exports.default; -module.exports.default = exports.default; -},{"./util/assertString":"d3m2"}],"maWm":[function(require,module,exports) { -"use strict"; - -Object.defineProperty(exports, "__esModule", { - value: true -}); -exports.default = unescape; - -var _assertString = _interopRequireDefault(require("./util/assertString")); - -function _interopRequireDefault(obj) { - return obj && obj.__esModule ? obj : { - default: obj - }; -} - -function unescape(str) { - (0, _assertString.default)(str); - return str.replace(/&/g, '&').replace(/"/g, '"').replace(/'/g, "'").replace(/</g, '<').replace(/>/g, '>').replace(///g, '/').replace(/\/g, '\\').replace(/`/g, '`'); -} - -module.exports = exports.default; -module.exports.default = exports.default; -},{"./util/assertString":"d3m2"}],"jvcA":[function(require,module,exports) { -"use strict"; - -Object.defineProperty(exports, "__esModule", { - value: true -}); -exports.default = blacklist; - -var _assertString = _interopRequireDefault(require("./util/assertString")); - -function _interopRequireDefault(obj) { - return obj && obj.__esModule ? obj : { - default: obj - }; -} - -function blacklist(str, chars) { - (0, _assertString.default)(str); - return str.replace(new RegExp("[".concat(chars, "]+"), 'g'), ''); -} - -module.exports = exports.default; -module.exports.default = exports.default; -},{"./util/assertString":"d3m2"}],"IO4v":[function(require,module,exports) { -"use strict"; - -Object.defineProperty(exports, "__esModule", { - value: true -}); -exports.default = stripLow; - -var _assertString = _interopRequireDefault(require("./util/assertString")); - -var _blacklist = _interopRequireDefault(require("./blacklist")); - -function _interopRequireDefault(obj) { - return obj && obj.__esModule ? obj : { - default: obj - }; -} - -function stripLow(str, keep_new_lines) { - (0, _assertString.default)(str); - var chars = keep_new_lines ? '\\x00-\\x09\\x0B\\x0C\\x0E-\\x1F\\x7F' : '\\x00-\\x1F\\x7F'; - return (0, _blacklist.default)(str, chars); -} - -module.exports = exports.default; -module.exports.default = exports.default; -},{"./util/assertString":"d3m2","./blacklist":"jvcA"}],"rqYK":[function(require,module,exports) { -"use strict"; - -Object.defineProperty(exports, "__esModule", { - value: true -}); -exports.default = whitelist; - -var _assertString = _interopRequireDefault(require("./util/assertString")); - -function _interopRequireDefault(obj) { - return obj && obj.__esModule ? obj : { - default: obj - }; -} - -function whitelist(str, chars) { - (0, _assertString.default)(str); - return str.replace(new RegExp("[^".concat(chars, "]+"), 'g'), ''); -} - -module.exports = exports.default; -module.exports.default = exports.default; -},{"./util/assertString":"d3m2"}],"lcAT":[function(require,module,exports) { -"use strict"; - -Object.defineProperty(exports, "__esModule", { - value: true -}); -exports.default = isWhitelisted; - -var _assertString = _interopRequireDefault(require("./util/assertString")); - -function _interopRequireDefault(obj) { - return obj && obj.__esModule ? obj : { - default: obj - }; -} - -function isWhitelisted(str, chars) { - (0, _assertString.default)(str); - - for (var i = str.length - 1; i >= 0; i--) { - if (chars.indexOf(str[i]) === -1) { - return false; - } - } - - return true; -} - -module.exports = exports.default; -module.exports.default = exports.default; -},{"./util/assertString":"d3m2"}],"Kz6v":[function(require,module,exports) { -"use strict"; - -Object.defineProperty(exports, "__esModule", { - value: true -}); -exports.default = normalizeEmail; - -var _merge = _interopRequireDefault(require("./util/merge")); - -function _interopRequireDefault(obj) { - return obj && obj.__esModule ? obj : { - default: obj - }; -} - -var default_normalize_email_options = { - // The following options apply to all email addresses - // Lowercases the local part of the email address. - // Please note this may violate RFC 5321 as per http://stackoverflow.com/a/9808332/192024). - // The domain is always lowercased, as per RFC 1035 - all_lowercase: true, - // The following conversions are specific to GMail - // Lowercases the local part of the GMail address (known to be case-insensitive) - gmail_lowercase: true, - // Removes dots from the local part of the email address, as that's ignored by GMail - gmail_remove_dots: true, - // Removes the subaddress (e.g. "+foo") from the email address - gmail_remove_subaddress: true, - // Conversts the googlemail.com domain to gmail.com - gmail_convert_googlemaildotcom: true, - // The following conversions are specific to Outlook.com / Windows Live / Hotmail - // Lowercases the local part of the Outlook.com address (known to be case-insensitive) - outlookdotcom_lowercase: true, - // Removes the subaddress (e.g. "+foo") from the email address - outlookdotcom_remove_subaddress: true, - // The following conversions are specific to Yahoo - // Lowercases the local part of the Yahoo address (known to be case-insensitive) - yahoo_lowercase: true, - // Removes the subaddress (e.g. "-foo") from the email address - yahoo_remove_subaddress: true, - // The following conversions are specific to Yandex - // Lowercases the local part of the Yandex address (known to be case-insensitive) - yandex_lowercase: true, - // The following conversions are specific to iCloud - // Lowercases the local part of the iCloud address (known to be case-insensitive) - icloud_lowercase: true, - // Removes the subaddress (e.g. "+foo") from the email address - icloud_remove_subaddress: true -}; // List of domains used by iCloud - -var icloud_domains = ['icloud.com', 'me.com']; // List of domains used by Outlook.com and its predecessors -// This list is likely incomplete. -// Partial reference: -// https://blogs.office.com/2013/04/17/outlook-com-gets-two-step-verification-sign-in-by-alias-and-new-international-domains/ - -var outlookdotcom_domains = ['hotmail.at', 'hotmail.be', 'hotmail.ca', 'hotmail.cl', 'hotmail.co.il', 'hotmail.co.nz', 'hotmail.co.th', 'hotmail.co.uk', 'hotmail.com', 'hotmail.com.ar', 'hotmail.com.au', 'hotmail.com.br', 'hotmail.com.gr', 'hotmail.com.mx', 'hotmail.com.pe', 'hotmail.com.tr', 'hotmail.com.vn', 'hotmail.cz', 'hotmail.de', 'hotmail.dk', 'hotmail.es', 'hotmail.fr', 'hotmail.hu', 'hotmail.id', 'hotmail.ie', 'hotmail.in', 'hotmail.it', 'hotmail.jp', 'hotmail.kr', 'hotmail.lv', 'hotmail.my', 'hotmail.ph', 'hotmail.pt', 'hotmail.sa', 'hotmail.sg', 'hotmail.sk', 'live.be', 'live.co.uk', 'live.com', 'live.com.ar', 'live.com.mx', 'live.de', 'live.es', 'live.eu', 'live.fr', 'live.it', 'live.nl', 'msn.com', 'outlook.at', 'outlook.be', 'outlook.cl', 'outlook.co.il', 'outlook.co.nz', 'outlook.co.th', 'outlook.com', 'outlook.com.ar', 'outlook.com.au', 'outlook.com.br', 'outlook.com.gr', 'outlook.com.pe', 'outlook.com.tr', 'outlook.com.vn', 'outlook.cz', 'outlook.de', 'outlook.dk', 'outlook.es', 'outlook.fr', 'outlook.hu', 'outlook.id', 'outlook.ie', 'outlook.in', 'outlook.it', 'outlook.jp', 'outlook.kr', 'outlook.lv', 'outlook.my', 'outlook.ph', 'outlook.pt', 'outlook.sa', 'outlook.sg', 'outlook.sk', 'passport.com']; // List of domains used by Yahoo Mail -// This list is likely incomplete - -var yahoo_domains = ['rocketmail.com', 'yahoo.ca', 'yahoo.co.uk', 'yahoo.com', 'yahoo.de', 'yahoo.fr', 'yahoo.in', 'yahoo.it', 'ymail.com']; // List of domains used by yandex.ru - -var yandex_domains = ['yandex.ru', 'yandex.ua', 'yandex.kz', 'yandex.com', 'yandex.by', 'ya.ru']; // replace single dots, but not multiple consecutive dots - -function dotsReplacer(match) { - if (match.length > 1) { - return match; - } - - return ''; -} - -function normalizeEmail(email, options) { - options = (0, _merge.default)(options, default_normalize_email_options); - var raw_parts = email.split('@'); - var domain = raw_parts.pop(); - var user = raw_parts.join('@'); - var parts = [user, domain]; // The domain is always lowercased, as it's case-insensitive per RFC 1035 - - parts[1] = parts[1].toLowerCase(); - - if (parts[1] === 'gmail.com' || parts[1] === 'googlemail.com') { - // Address is GMail - if (options.gmail_remove_subaddress) { - parts[0] = parts[0].split('+')[0]; - } - - if (options.gmail_remove_dots) { - // this does not replace consecutive dots like example..email@gmail.com - parts[0] = parts[0].replace(/\.+/g, dotsReplacer); - } - - if (!parts[0].length) { - return false; - } - - if (options.all_lowercase || options.gmail_lowercase) { - parts[0] = parts[0].toLowerCase(); - } - - parts[1] = options.gmail_convert_googlemaildotcom ? 'gmail.com' : parts[1]; - } else if (icloud_domains.indexOf(parts[1]) >= 0) { - // Address is iCloud - if (options.icloud_remove_subaddress) { - parts[0] = parts[0].split('+')[0]; - } - - if (!parts[0].length) { - return false; - } - - if (options.all_lowercase || options.icloud_lowercase) { - parts[0] = parts[0].toLowerCase(); - } - } else if (outlookdotcom_domains.indexOf(parts[1]) >= 0) { - // Address is Outlook.com - if (options.outlookdotcom_remove_subaddress) { - parts[0] = parts[0].split('+')[0]; - } - - if (!parts[0].length) { - return false; - } - - if (options.all_lowercase || options.outlookdotcom_lowercase) { - parts[0] = parts[0].toLowerCase(); - } - } else if (yahoo_domains.indexOf(parts[1]) >= 0) { - // Address is Yahoo - if (options.yahoo_remove_subaddress) { - var components = parts[0].split('-'); - parts[0] = components.length > 1 ? components.slice(0, -1).join('-') : components[0]; - } - - if (!parts[0].length) { - return false; - } - - if (options.all_lowercase || options.yahoo_lowercase) { - parts[0] = parts[0].toLowerCase(); - } - } else if (yandex_domains.indexOf(parts[1]) >= 0) { - if (options.all_lowercase || options.yandex_lowercase) { - parts[0] = parts[0].toLowerCase(); - } - - parts[1] = 'yandex.ru'; // all yandex domains are equal, 1st preffered - } else if (options.all_lowercase) { - // Any other address - parts[0] = parts[0].toLowerCase(); - } - - return parts.join('@'); -} - -module.exports = exports.default; -module.exports.default = exports.default; -},{"./util/merge":"hxfi"}],"D064":[function(require,module,exports) { -"use strict"; - -Object.defineProperty(exports, "__esModule", { - value: true -}); -exports.default = void 0; - -var _toDate = _interopRequireDefault(require("./lib/toDate")); - -var _toFloat = _interopRequireDefault(require("./lib/toFloat")); - -var _toInt = _interopRequireDefault(require("./lib/toInt")); - -var _toBoolean = _interopRequireDefault(require("./lib/toBoolean")); - -var _equals = _interopRequireDefault(require("./lib/equals")); - -var _contains = _interopRequireDefault(require("./lib/contains")); - -var _matches = _interopRequireDefault(require("./lib/matches")); - -var _isEmail = _interopRequireDefault(require("./lib/isEmail")); - -var _isURL = _interopRequireDefault(require("./lib/isURL")); - -var _isMACAddress = _interopRequireDefault(require("./lib/isMACAddress")); - -var _isIP = _interopRequireDefault(require("./lib/isIP")); - -var _isIPRange = _interopRequireDefault(require("./lib/isIPRange")); - -var _isFQDN = _interopRequireDefault(require("./lib/isFQDN")); - -var _isBoolean = _interopRequireDefault(require("./lib/isBoolean")); - -var _isAlpha = _interopRequireWildcard(require("./lib/isAlpha")); - -var _isAlphanumeric = _interopRequireWildcard(require("./lib/isAlphanumeric")); - -var _isNumeric = _interopRequireDefault(require("./lib/isNumeric")); - -var _isPort = _interopRequireDefault(require("./lib/isPort")); - -var _isLowercase = _interopRequireDefault(require("./lib/isLowercase")); - -var _isUppercase = _interopRequireDefault(require("./lib/isUppercase")); - -var _isAscii = _interopRequireDefault(require("./lib/isAscii")); - -var _isFullWidth = _interopRequireDefault(require("./lib/isFullWidth")); - -var _isHalfWidth = _interopRequireDefault(require("./lib/isHalfWidth")); - -var _isVariableWidth = _interopRequireDefault(require("./lib/isVariableWidth")); - -var _isMultibyte = _interopRequireDefault(require("./lib/isMultibyte")); - -var _isSurrogatePair = _interopRequireDefault(require("./lib/isSurrogatePair")); - -var _isInt = _interopRequireDefault(require("./lib/isInt")); - -var _isFloat = _interopRequireWildcard(require("./lib/isFloat")); - -var _isDecimal = _interopRequireDefault(require("./lib/isDecimal")); - -var _isHexadecimal = _interopRequireDefault(require("./lib/isHexadecimal")); - -var _isDivisibleBy = _interopRequireDefault(require("./lib/isDivisibleBy")); - -var _isHexColor = _interopRequireDefault(require("./lib/isHexColor")); - -var _isISRC = _interopRequireDefault(require("./lib/isISRC")); - -var _isMD = _interopRequireDefault(require("./lib/isMD5")); - -var _isHash = _interopRequireDefault(require("./lib/isHash")); - -var _isJWT = _interopRequireDefault(require("./lib/isJWT")); - -var _isJSON = _interopRequireDefault(require("./lib/isJSON")); - -var _isEmpty = _interopRequireDefault(require("./lib/isEmpty")); - -var _isLength = _interopRequireDefault(require("./lib/isLength")); - -var _isByteLength = _interopRequireDefault(require("./lib/isByteLength")); - -var _isUUID = _interopRequireDefault(require("./lib/isUUID")); - -var _isMongoId = _interopRequireDefault(require("./lib/isMongoId")); - -var _isAfter = _interopRequireDefault(require("./lib/isAfter")); - -var _isBefore = _interopRequireDefault(require("./lib/isBefore")); - -var _isIn = _interopRequireDefault(require("./lib/isIn")); - -var _isCreditCard = _interopRequireDefault(require("./lib/isCreditCard")); - -var _isIdentityCard = _interopRequireDefault(require("./lib/isIdentityCard")); - -var _isISIN = _interopRequireDefault(require("./lib/isISIN")); - -var _isISBN = _interopRequireDefault(require("./lib/isISBN")); - -var _isISSN = _interopRequireDefault(require("./lib/isISSN")); - -var _isMobilePhone = _interopRequireWildcard(require("./lib/isMobilePhone")); - -var _isCurrency = _interopRequireDefault(require("./lib/isCurrency")); - -var _isISO = _interopRequireDefault(require("./lib/isISO8601")); - -var _isRFC = _interopRequireDefault(require("./lib/isRFC3339")); - -var _isISO31661Alpha = _interopRequireDefault(require("./lib/isISO31661Alpha2")); - -var _isISO31661Alpha2 = _interopRequireDefault(require("./lib/isISO31661Alpha3")); - -var _isBase = _interopRequireDefault(require("./lib/isBase64")); - -var _isDataURI = _interopRequireDefault(require("./lib/isDataURI")); - -var _isMagnetURI = _interopRequireDefault(require("./lib/isMagnetURI")); - -var _isMimeType = _interopRequireDefault(require("./lib/isMimeType")); - -var _isLatLong = _interopRequireDefault(require("./lib/isLatLong")); - -var _isPostalCode = _interopRequireWildcard(require("./lib/isPostalCode")); - -var _ltrim = _interopRequireDefault(require("./lib/ltrim")); - -var _rtrim = _interopRequireDefault(require("./lib/rtrim")); - -var _trim = _interopRequireDefault(require("./lib/trim")); - -var _escape = _interopRequireDefault(require("./lib/escape")); - -var _unescape = _interopRequireDefault(require("./lib/unescape")); - -var _stripLow = _interopRequireDefault(require("./lib/stripLow")); - -var _whitelist = _interopRequireDefault(require("./lib/whitelist")); - -var _blacklist = _interopRequireDefault(require("./lib/blacklist")); - -var _isWhitelisted = _interopRequireDefault(require("./lib/isWhitelisted")); - -var _normalizeEmail = _interopRequireDefault(require("./lib/normalizeEmail")); - -var _toString = _interopRequireDefault(require("./lib/util/toString")); - -function _interopRequireWildcard(obj) { - if (obj && obj.__esModule) { - return obj; - } else { - var newObj = {}; - - if (obj != null) { - for (var key in obj) { - if (Object.prototype.hasOwnProperty.call(obj, key)) { - var desc = Object.defineProperty && Object.getOwnPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : {}; - - if (desc.get || desc.set) { - Object.defineProperty(newObj, key, desc); - } else { - newObj[key] = obj[key]; - } - } - } - } - - newObj.default = obj; - return newObj; - } -} - -function _interopRequireDefault(obj) { - return obj && obj.__esModule ? obj : { - default: obj - }; -} - -var version = '10.11.0'; -var validator = { - version: version, - toDate: _toDate.default, - toFloat: _toFloat.default, - toInt: _toInt.default, - toBoolean: _toBoolean.default, - equals: _equals.default, - contains: _contains.default, - matches: _matches.default, - isEmail: _isEmail.default, - isURL: _isURL.default, - isMACAddress: _isMACAddress.default, - isIP: _isIP.default, - isIPRange: _isIPRange.default, - isFQDN: _isFQDN.default, - isBoolean: _isBoolean.default, - isAlpha: _isAlpha.default, - isAlphaLocales: _isAlpha.locales, - isAlphanumeric: _isAlphanumeric.default, - isAlphanumericLocales: _isAlphanumeric.locales, - isNumeric: _isNumeric.default, - isPort: _isPort.default, - isLowercase: _isLowercase.default, - isUppercase: _isUppercase.default, - isAscii: _isAscii.default, - isFullWidth: _isFullWidth.default, - isHalfWidth: _isHalfWidth.default, - isVariableWidth: _isVariableWidth.default, - isMultibyte: _isMultibyte.default, - isSurrogatePair: _isSurrogatePair.default, - isInt: _isInt.default, - isFloat: _isFloat.default, - isFloatLocales: _isFloat.locales, - isDecimal: _isDecimal.default, - isHexadecimal: _isHexadecimal.default, - isDivisibleBy: _isDivisibleBy.default, - isHexColor: _isHexColor.default, - isISRC: _isISRC.default, - isMD5: _isMD.default, - isHash: _isHash.default, - isJWT: _isJWT.default, - isJSON: _isJSON.default, - isEmpty: _isEmpty.default, - isLength: _isLength.default, - isByteLength: _isByteLength.default, - isUUID: _isUUID.default, - isMongoId: _isMongoId.default, - isAfter: _isAfter.default, - isBefore: _isBefore.default, - isIn: _isIn.default, - isCreditCard: _isCreditCard.default, - isIdentityCard: _isIdentityCard.default, - isISIN: _isISIN.default, - isISBN: _isISBN.default, - isISSN: _isISSN.default, - isMobilePhone: _isMobilePhone.default, - isMobilePhoneLocales: _isMobilePhone.locales, - isPostalCode: _isPostalCode.default, - isPostalCodeLocales: _isPostalCode.locales, - isCurrency: _isCurrency.default, - isISO8601: _isISO.default, - isRFC3339: _isRFC.default, - isISO31661Alpha2: _isISO31661Alpha.default, - isISO31661Alpha3: _isISO31661Alpha2.default, - isBase64: _isBase.default, - isDataURI: _isDataURI.default, - isMagnetURI: _isMagnetURI.default, - isMimeType: _isMimeType.default, - isLatLong: _isLatLong.default, - ltrim: _ltrim.default, - rtrim: _rtrim.default, - trim: _trim.default, - escape: _escape.default, - unescape: _unescape.default, - stripLow: _stripLow.default, - whitelist: _whitelist.default, - blacklist: _blacklist.default, - isWhitelisted: _isWhitelisted.default, - normalizeEmail: _normalizeEmail.default, - toString: _toString.default -}; -var _default = validator; -exports.default = _default; -module.exports = exports.default; -module.exports.default = exports.default; -},{"./lib/toDate":"G1eO","./lib/toFloat":"b3Og","./lib/toInt":"jURK","./lib/toBoolean":"rSZP","./lib/equals":"JWD8","./lib/contains":"EKzH","./lib/matches":"J5fp","./lib/isEmail":"khkS","./lib/isURL":"XMVV","./lib/isMACAddress":"Rpi3","./lib/isIP":"NHAn","./lib/isIPRange":"fBjy","./lib/isFQDN":"KGu6","./lib/isBoolean":"nMXH","./lib/isAlpha":"I8yr","./lib/isAlphanumeric":"AlV0","./lib/isNumeric":"VmGc","./lib/isPort":"qa4O","./lib/isLowercase":"N5f1","./lib/isUppercase":"NAqv","./lib/isAscii":"lPo8","./lib/isFullWidth":"XqZj","./lib/isHalfWidth":"aml0","./lib/isVariableWidth":"Ezi8","./lib/isMultibyte":"hMu0","./lib/isSurrogatePair":"DgpS","./lib/isInt":"Nqtv","./lib/isFloat":"tJ8x","./lib/isDecimal":"cjZv","./lib/isHexadecimal":"DCUy","./lib/isDivisibleBy":"ZzHr","./lib/isHexColor":"cJkd","./lib/isISRC":"Jf2s","./lib/isMD5":"idDX","./lib/isHash":"fiG1","./lib/isJWT":"V0R0","./lib/isJSON":"Fj5V","./lib/isEmpty":"eubH","./lib/isLength":"ZzKw","./lib/isByteLength":"jY1m","./lib/isUUID":"ZKlV","./lib/isMongoId":"Quad","./lib/isAfter":"pscr","./lib/isBefore":"tWM9","./lib/isIn":"weq6","./lib/isCreditCard":"Ob4A","./lib/isIdentityCard":"nylB","./lib/isISIN":"b1bE","./lib/isISBN":"ajl4","./lib/isISSN":"k7Z3","./lib/isMobilePhone":"XWOV","./lib/isCurrency":"hPSN","./lib/isISO8601":"gokW","./lib/isRFC3339":"Nogc","./lib/isISO31661Alpha2":"ko31","./lib/isISO31661Alpha3":"xfuO","./lib/isBase64":"CZZS","./lib/isDataURI":"seXT","./lib/isMagnetURI":"k8m8","./lib/isMimeType":"O3mI","./lib/isLatLong":"WywA","./lib/isPostalCode":"cS5U","./lib/ltrim":"mQ0y","./lib/rtrim":"c0Kf","./lib/trim":"e3v3","./lib/escape":"Acns","./lib/unescape":"maWm","./lib/stripLow":"IO4v","./lib/whitelist":"rqYK","./lib/blacklist":"jvcA","./lib/isWhitelisted":"lcAT","./lib/normalizeEmail":"Kz6v","./lib/util/toString":"Gmuz"}],"Hhf9":[function(require,module,exports) { -var Buffer = require("buffer").Buffer; -/* - * This code is taken from https://github.com/Brightspace/node-ecdsa-sig-formatter - * which is licensed under the Apache 2.0 license. - * - * It got copied over here to make some adjustments for being compatible with browserify. - * Going forward would be either simplifying this code (as we only need 256 bit signatures), - * or moving back to the direct dependency; both is future work(TM) for some other day. - */ - -'use strict'; - -Object.defineProperty(exports, "__esModule", { - value: true -}); -exports.derToJose = derToJose; -exports.joseToDer = joseToDer; -var asn1 = require('asn1.js'); - -function base64UrlEscape(str) { - return str.replace(/\+/g, '-').replace(/\//g, '_').replace(/=/g, ''); -} - -var ECDSASigValue = asn1.define('ECDSASigValue', function () { - this.seq().obj(this.key('r').int(), this.key('s').int()); -}); - -var seq = 0x10, - int = 0x02; - -function getParamSize(keySize) { - var result = (keySize / 8 | 0) + (keySize % 8 === 0 ? 0 : 1); - return result; -} - -var paramBytesForAlg = { - ES256: getParamSize(256), - ES384: getParamSize(384), - ES512: getParamSize(512) -}; - -function getParamBytesForAlg(alg) { - var paramBytes = paramBytesForAlg[alg]; - if (paramBytes) { - return paramBytes; - } - - throw new Error('Unknown algorithm "' + alg + '"'); -} - -function bignumToBuf(bn, numBytes) { - var buf = Buffer.from(bn.toString('hex', numBytes), 'hex'); - return buf; -} - -function signatureAsBuffer(signature) { - if (Buffer.isBuffer(signature)) { - return Buffer.from(signature); - } else if ('string' === typeof signature) { - return Buffer.from(signature, 'base64'); - } - - throw new TypeError('ECDSA signature must be a Base64 string or a Buffer'); -} - -function reduceBuffer(buf) { - var padding = 0; - for (var n = buf.length; padding < n && buf[padding] === 0;) { - ++padding; - } - - var needsSign = buf[padding] >= 0x80; - if (needsSign) { - --padding; - - if (padding < 0) { - var old = buf; - buf = Buffer.alloc(1 + buf.length); - buf[0] = 0; - old.copy(buf, 1); - - return buf; - } - } - - if (padding === 0) { - return buf; - } - - buf = buf.slice(padding); - return buf; -} - -function derToJose(signature, alg) { - signature = signatureAsBuffer(signature); - var paramBytes = getParamBytesForAlg(alg); - - signature = ECDSASigValue.decode(signature, 'der'); - - var r = bignumToBuf(signature.r, paramBytes); - var s = bignumToBuf(signature.s, paramBytes); - - signature = Buffer.concat([r, s], r.length + s.length); - signature = signature.toString('base64'); - signature = base64UrlEscape(signature); - - return signature; -} - -function joseToDer(signature, alg) { - signature = signatureAsBuffer(signature); - var paramBytes = getParamBytesForAlg(alg); - - var signatureBytes = signature.length; - if (signatureBytes !== paramBytes * 2) { - throw new TypeError('"' + alg + '" signatures must be "' + paramBytes * 2 + '" bytes, saw "' + signatureBytes + '"'); - } - - var r = reduceBuffer(signature.slice(0, paramBytes)); - var s = reduceBuffer(signature.slice(paramBytes)); - - var rsBytes = 1 + 1 + r.length + 1 + 1 + s.length; - - var oneByteLength = rsBytes < 0x80; - - signature = Buffer.alloc((oneByteLength ? 2 : 3) + rsBytes); - - var offset = 0; - signature[offset++] = seq | 0x20 | 0 << 6; - if (oneByteLength) { - signature[offset++] = rsBytes; - } else { - signature[offset++] = 0x80 | 1; - signature[offset++] = rsBytes & 0xff; - } - signature[offset++] = int | 0 << 6; - signature[offset++] = r.length; - r.copy(signature, offset); - offset += r.length; - signature[offset++] = int | 0 << 6; - signature[offset++] = s.length; - s.copy(signature, offset); - - return signature; -} -},{"asn1.js":"NNmB","buffer":"dskh"}],"qPXI":[function(require,module,exports) { -'use strict'; - -Object.defineProperty(exports, "__esModule", { - value: true -}); - -function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - -function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } - -function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } - -var MissingParametersError = exports.MissingParametersError = function (_Error) { - _inherits(MissingParametersError, _Error); - - function MissingParametersError(message) { - _classCallCheck(this, MissingParametersError); - - var _this = _possibleConstructorReturn(this, (MissingParametersError.__proto__ || Object.getPrototypeOf(MissingParametersError)).call(this)); - - _this.name = 'MissingParametersError'; - _this.message = message || ''; - return _this; - } - - return MissingParametersError; -}(Error); - -var InvalidTokenError = exports.InvalidTokenError = function (_Error2) { - _inherits(InvalidTokenError, _Error2); - - function InvalidTokenError(message) { - _classCallCheck(this, InvalidTokenError); - - var _this2 = _possibleConstructorReturn(this, (InvalidTokenError.__proto__ || Object.getPrototypeOf(InvalidTokenError)).call(this)); - - _this2.name = 'InvalidTokenError'; - _this2.message = message || ''; - return _this2; - } - - return InvalidTokenError; -}(Error); -},{}],"k6ui":[function(require,module,exports) { -var Buffer = require("buffer").Buffer; -'use strict'; - -Object.defineProperty(exports, "__esModule", { - value: true -}); -exports.SECP256K1Client = undefined; - -var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); - -var _elliptic = require('elliptic'); - -var _crypto = require('crypto'); - -var _keyEncoder = require('key-encoder'); - -var _keyEncoder2 = _interopRequireDefault(_keyEncoder); - -var _validator = require('validator'); - -var _ecdsaSigFormatter = require('./ecdsaSigFormatter'); - -var _errors = require('../errors'); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - -var SECP256K1Client = exports.SECP256K1Client = function () { - function SECP256K1Client() { - _classCallCheck(this, SECP256K1Client); - } - - _createClass(SECP256K1Client, null, [{ - key: 'createHash', - value: function createHash(signingInput) { - return (0, _crypto.createHash)('sha256').update(signingInput).digest(); - } - }, { - key: 'loadPrivateKey', - value: function loadPrivateKey(rawPrivateKey) { - if (rawPrivateKey.length === 66) { - rawPrivateKey = rawPrivateKey.slice(0, 64); - } - return SECP256K1Client.ec.keyFromPrivate(rawPrivateKey); - } - }, { - key: 'loadPublicKey', - value: function loadPublicKey(rawPublicKey) { - return SECP256K1Client.ec.keyFromPublic(rawPublicKey, 'hex'); - } - }, { - key: 'encodePublicKey', - value: function encodePublicKey(publicKey, originalFormat, destinationFormat) { - return SECP256K1Client.keyEncoder.encodePublic(publicKey, originalFormat, destinationFormat); - } - }, { - key: 'derivePublicKey', - value: function derivePublicKey(privateKey, compressed) { - if (typeof privateKey !== 'string') { - throw Error('private key must be a string'); - } - if (!(0, _validator.isHexadecimal)(privateKey)) { - throw Error('private key must be a hex string'); - } - if (privateKey.length == 66) { - privateKey = privateKey.slice(0, 64); - } else if (privateKey.length <= 64) { - // do nothing - } else { - throw Error('private key must be 66 characters or less'); - } - if (compressed === undefined) { - compressed = true; - } - var keypair = SECP256K1Client.ec.keyFromPrivate(privateKey); - return keypair.getPublic(compressed, 'hex'); - } - }, { - key: 'signHash', - value: function signHash(signingInputHash, rawPrivateKey) { - var format = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 'jose'; - - // make sure the required parameters are provided - if (!(signingInputHash && rawPrivateKey)) { - throw new _errors.MissingParametersError('a signing input hash and private key are all required'); - } - // prepare the private key - var privateKeyObject = SECP256K1Client.loadPrivateKey(rawPrivateKey); - // calculate the signature - var signatureObject = privateKeyObject.sign(signingInputHash); - var derSignature = Buffer.from(signatureObject.toDER()); - - if (format === 'der') { - return derSignature.toString('hex'); - } else if (format === 'jose') { - // return the JOSE-formatted signature - return (0, _ecdsaSigFormatter.derToJose)(derSignature, 'ES256'); - } else { - throw Error('Invalid signature format'); - } - } - }, { - key: 'loadSignature', - value: function loadSignature(joseSignature) { - // create and return the DER-formatted signature buffer - return (0, _ecdsaSigFormatter.joseToDer)(joseSignature, 'ES256'); - } - }, { - key: 'verifyHash', - value: function verifyHash(signingInputHash, derSignatureBuffer, rawPublicKey) { - // make sure the required parameters are provided - if (!(signingInputHash && derSignatureBuffer && rawPublicKey)) { - throw new _errors.MissingParametersError('a signing input hash, der signature, and public key are all required'); - } - // prepare the public key - var publicKeyObject = SECP256K1Client.loadPublicKey(rawPublicKey); - // verify the token - return publicKeyObject.verify(signingInputHash, derSignatureBuffer); - } - }]); - - return SECP256K1Client; -}(); - -SECP256K1Client.algorithmName = 'ES256K'; -SECP256K1Client.ec = new _elliptic.ec('secp256k1'); -SECP256K1Client.keyEncoder = new _keyEncoder2.default({ - curveParameters: [1, 3, 132, 0, 10], - privatePEMOptions: { label: 'EC PRIVATE KEY' }, - publicPEMOptions: { label: 'PUBLIC KEY' }, - curve: SECP256K1Client.ec -}); -},{"elliptic":"xha3","crypto":"mRF4","key-encoder":"tVya","validator":"D064","./ecdsaSigFormatter":"Hhf9","../errors":"qPXI","buffer":"dskh"}],"tUD2":[function(require,module,exports) { -'use strict'; - -Object.defineProperty(exports, "__esModule", { - value: true -}); -exports.cryptoClients = exports.SECP256K1Client = undefined; - -var _secp256k = require('./secp256k1'); - -var cryptoClients = { - ES256K: _secp256k.SECP256K1Client -}; - -exports.SECP256K1Client = _secp256k.SECP256K1Client; -exports.cryptoClients = cryptoClients; -},{"./secp256k1":"k6ui"}],"dUFA":[function(require,module,exports) { -'use strict'; - -Object.defineProperty(exports, "__esModule", { - value: true -}); -exports.TokenSigner = undefined; - -var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); - -exports.createUnsecuredToken = createUnsecuredToken; - -var _base64url = require('base64url'); - -var _base64url2 = _interopRequireDefault(_base64url); - -var _cryptoClients = require('./cryptoClients'); - -var _errors = require('./errors'); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - -function createSigningInput(payload, header) { - var tokenParts = []; - - // add in the header - var encodedHeader = _base64url2.default.encode(JSON.stringify(header)); - tokenParts.push(encodedHeader); - - // add in the payload - var encodedPayload = _base64url2.default.encode(JSON.stringify(payload)); - tokenParts.push(encodedPayload); - - // prepare the message - var signingInput = tokenParts.join('.'); - - // return the signing input - return signingInput; -} - -function createUnsecuredToken(payload) { - var header = { typ: 'JWT', alg: 'none' }; - return createSigningInput(payload, header) + '.'; -} - -var TokenSigner = function () { - function TokenSigner(signingAlgorithm, rawPrivateKey) { - _classCallCheck(this, TokenSigner); - - if (!(signingAlgorithm && rawPrivateKey)) { - throw new _errors.MissingParametersError('a signing algorithm and private key are required'); - } - if (typeof signingAlgorithm !== 'string') { - throw 'signing algorithm parameter must be a string'; - } - signingAlgorithm = signingAlgorithm.toUpperCase(); - if (!_cryptoClients.cryptoClients.hasOwnProperty(signingAlgorithm)) { - throw 'invalid signing algorithm'; - } - this.tokenType = 'JWT'; - this.cryptoClient = _cryptoClients.cryptoClients[signingAlgorithm]; - this.rawPrivateKey = rawPrivateKey; - } - - _createClass(TokenSigner, [{ - key: 'header', - value: function header() { - var _header = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; - - var defaultHeader = { typ: this.tokenType, - alg: this.cryptoClient.algorithmName }; - return Object.assign({}, defaultHeader, _header); - } - }, { - key: 'sign', - value: function sign(payload) { - var expanded = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false; - var customHeader = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {}; - - // generate the token header - var header = this.header(customHeader); - - // prepare the message to be signed - var signingInput = createSigningInput(payload, header); - var signingInputHash = this.cryptoClient.createHash(signingInput); - - // sign the message and add in the signature - var signature = this.cryptoClient.signHash(signingInputHash, this.rawPrivateKey); - - if (expanded) { - return { - 'header': [_base64url2.default.encode(JSON.stringify(header))], - 'payload': JSON.stringify(payload), - 'signature': [signature] - }; - } else { - return [signingInput, signature].join('.'); - } - } - }]); - - return TokenSigner; -}(); - -exports.TokenSigner = TokenSigner; -},{"base64url":"XVTP","./cryptoClients":"tUD2","./errors":"qPXI"}],"sBaF":[function(require,module,exports) { -'use strict'; - -Object.defineProperty(exports, "__esModule", { - value: true -}); -exports.TokenVerifier = undefined; - -var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; - -var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); - -var _base64url = require('base64url'); - -var _base64url2 = _interopRequireDefault(_base64url); - -var _cryptoClients = require('./cryptoClients'); - -var _errors = require('./errors'); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - -var TokenVerifier = exports.TokenVerifier = function () { - function TokenVerifier(signingAlgorithm, rawPublicKey) { - _classCallCheck(this, TokenVerifier); - - if (!(signingAlgorithm && rawPublicKey)) { - throw new _errors.MissingParametersError('a signing algorithm and public key are required'); - } - if (typeof signingAlgorithm !== 'string') { - throw 'signing algorithm parameter must be a string'; - } - signingAlgorithm = signingAlgorithm.toUpperCase(); - if (!_cryptoClients.cryptoClients.hasOwnProperty(signingAlgorithm)) { - throw 'invalid signing algorithm'; - } - this.tokenType = 'JWT'; - this.cryptoClient = _cryptoClients.cryptoClients[signingAlgorithm]; - this.rawPublicKey = rawPublicKey; - } - - _createClass(TokenVerifier, [{ - key: 'verify', - value: function verify(token) { - if (typeof token === 'string') { - return this.verifyCompact(token); - } else if ((typeof token === 'undefined' ? 'undefined' : _typeof(token)) === 'object') { - return this.verifyExpanded(token); - } else { - return false; - } - } - }, { - key: 'verifyCompact', - value: function verifyCompact(token) { - // decompose the token into parts - var tokenParts = token.split('.'); - - // calculate the signing input hash - var signingInput = tokenParts[0] + '.' + tokenParts[1]; - var signingInputHash = this.cryptoClient.createHash(signingInput); - - // extract the signature as a DER array - var derSignatureBuffer = this.cryptoClient.loadSignature(tokenParts[2]); - - // verify the signed hash - return this.cryptoClient.verifyHash(signingInputHash, derSignatureBuffer, this.rawPublicKey); - } - }, { - key: 'verifyExpanded', - value: function verifyExpanded(token) { - var _this = this; - - var signingInput = [token['header'].join('.'), _base64url2.default.encode(token['payload'])].join('.'); - var signingInputHash = this.cryptoClient.createHash(signingInput); - - var verified = true; - - token['signature'].map(function (signature) { - var derSignatureBuffer = _this.cryptoClient.loadSignature(signature); - var signatureVerified = _this.cryptoClient.verifyHash(signingInputHash, derSignatureBuffer, _this.rawPublicKey); - if (!signatureVerified) { - verified = false; - } - }); - - return verified; - } - }]); - - return TokenVerifier; -}(); -},{"base64url":"XVTP","./cryptoClients":"tUD2","./errors":"qPXI"}],"KH2R":[function(require,module,exports) { -'use strict'; - -Object.defineProperty(exports, "__esModule", { - value: true -}); - -var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; - -exports.decodeToken = decodeToken; - -var _base64url = require('base64url'); - -var _base64url2 = _interopRequireDefault(_base64url); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -function decodeToken(token) { - if (typeof token === 'string') { - // decompose the token into parts - var tokenParts = token.split('.'); - var header = JSON.parse(_base64url2.default.decode(tokenParts[0])); - var payload = JSON.parse(_base64url2.default.decode(tokenParts[1])); - var signature = tokenParts[2]; - - // return the token object - return { - header: header, - payload: payload, - signature: signature - }; - } else if ((typeof token === 'undefined' ? 'undefined' : _typeof(token)) === 'object') { - var _payload = token.payload; - if (token.payload[0] !== '{') { - _payload = _base64url2.default.decode(_payload); - } - - var allHeaders = []; - token.header.map(function (headerValue) { - var header = JSON.parse(_base64url2.default.decode(headerValue)); - allHeaders.push(header); - }); - - return { - header: allHeaders, - payload: JSON.parse(_payload), - signature: token.signature - }; - } -} -},{"base64url":"XVTP"}],"bYjQ":[function(require,module,exports) { -'use strict'; - -Object.defineProperty(exports, "__esModule", { - value: true -}); - -var _signer = require('./signer'); - -Object.defineProperty(exports, 'TokenSigner', { - enumerable: true, - get: function get() { - return _signer.TokenSigner; - } -}); -Object.defineProperty(exports, 'createUnsecuredToken', { - enumerable: true, - get: function get() { - return _signer.createUnsecuredToken; - } -}); - -var _verifier = require('./verifier'); - -Object.defineProperty(exports, 'TokenVerifier', { - enumerable: true, - get: function get() { - return _verifier.TokenVerifier; - } -}); - -var _decode = require('./decode'); - -Object.defineProperty(exports, 'decodeToken', { - enumerable: true, - get: function get() { - return _decode.decodeToken; - } -}); - -var _errors = require('./errors'); - -Object.defineProperty(exports, 'MissingParametersError', { - enumerable: true, - get: function get() { - return _errors.MissingParametersError; - } -}); -Object.defineProperty(exports, 'InvalidTokenError', { - enumerable: true, - get: function get() { - return _errors.InvalidTokenError; - } -}); - -var _cryptoClients = require('./cryptoClients'); - -Object.defineProperty(exports, 'SECP256K1Client', { - enumerable: true, - get: function get() { - return _cryptoClients.SECP256K1Client; - } -}); -Object.defineProperty(exports, 'cryptoClients', { - enumerable: true, - get: function get() { - return _cryptoClients.cryptoClients; - } -}); -},{"./signer":"dUFA","./verifier":"sBaF","./decode":"KH2R","./errors":"qPXI","./cryptoClients":"tUD2"}],"qabb":[function(require,module,exports) { -var Buffer = require("buffer").Buffer; -"use strict"; - -Object.defineProperty(exports, "__esModule", { - value: true -}); - -var crypto_1 = require("crypto"); - -var bitcoinjs_lib_1 = require("bitcoinjs-lib"); -/** - * - * @param numberOfBytes - * - * @ignore - */ - - -function getEntropy(arg) { - if (!arg) { - arg = 32; - } - - if (typeof arg === 'number') { - return crypto_1.randomBytes(arg); - } else { - return crypto_1.randomFillSync(arg); - } -} - -exports.getEntropy = getEntropy; -/** -* @ignore -*/ - -function makeECPrivateKey() { - var keyPair = bitcoinjs_lib_1.ECPair.makeRandom({ - rng: getEntropy - }); - return keyPair.privateKey.toString('hex'); -} - -exports.makeECPrivateKey = makeECPrivateKey; -/** -* @ignore -*/ - -function publicKeyToAddress(publicKey) { - var publicKeyBuffer = Buffer.from(publicKey, 'hex'); - var publicKeyHash160 = bitcoinjs_lib_1.crypto.hash160(publicKeyBuffer); - var address = bitcoinjs_lib_1.address.toBase58Check(publicKeyHash160, 0x00); - return address; -} - -exports.publicKeyToAddress = publicKeyToAddress; -/** -* @ignore -*/ - -function getPublicKeyFromPrivate(privateKey) { - var keyPair = bitcoinjs_lib_1.ECPair.fromPrivateKey(Buffer.from(privateKey, 'hex')); - return keyPair.publicKey.toString('hex'); -} - -exports.getPublicKeyFromPrivate = getPublicKeyFromPrivate; -},{"crypto":"mRF4","bitcoinjs-lib":"Bcue","buffer":"dskh"}],"oZHr":[function(require,module,exports) { -"use strict"; - -Object.defineProperty(exports, "__esModule", { - value: true -}); - -var errors_1 = require("./errors"); -/** -* @ignore -*/ - - -function makeDIDFromAddress(address) { - return "did:btc-addr:".concat(address); -} - -exports.makeDIDFromAddress = makeDIDFromAddress; -/** -* @ignore -*/ - -function makeDIDFromPublicKey(publicKey) { - return "did:ecdsa-pub:".concat(publicKey); -} - -exports.makeDIDFromPublicKey = makeDIDFromPublicKey; -/** -* @ignore -*/ - -function getDIDType(decentralizedID) { - var didParts = decentralizedID.split(':'); - - if (didParts.length !== 3) { - throw new errors_1.InvalidDIDError('Decentralized IDs must have 3 parts'); - } - - if (didParts[0].toLowerCase() !== 'did') { - throw new errors_1.InvalidDIDError('Decentralized IDs must start with "did"'); - } - - return didParts[1].toLowerCase(); -} - -exports.getDIDType = getDIDType; -/** -* @ignore -*/ - -function getAddressFromDID(decentralizedID) { - var didType = getDIDType(decentralizedID); - - if (didType === 'btc-addr') { - return decentralizedID.split(':')[2]; - } else { - return null; - } -} - -exports.getAddressFromDID = getAddressFromDID; -/* -export function getPublicKeyOrAddressFromDID(decentralizedID) { - const didParts = decentralizedID.split(':') - - if (didParts.length !== 3) { - throw new InvalidDIDError('Decentralized IDs must have 3 parts') - } - - if (didParts[0].toLowerCase() !== 'did') { - throw new InvalidDIDError('Decentralized IDs must start with "did"') - } - - if (didParts[1].toLowerCase() === 'ecdsa-pub') { - return didParts[2] - } else if (didParts[1].toLowerCase() === 'btc-addr') { - return didParts[2] - } else { - throw new InvalidDIDError('Decentralized ID format not supported') - } -} -*/ -},{"./errors":"V7fS"}],"pXJD":[function(require,module,exports) { -var Buffer = require("buffer").Buffer; -"use strict"; - -var __importDefault = this && this.__importDefault || function (mod) { - return mod && mod.__esModule ? mod : { - "default": mod - }; -}; - -Object.defineProperty(exports, "__esModule", { - value: true -}); - -var elliptic_1 = require("elliptic"); - -var crypto_1 = __importDefault(require("crypto")); - -var keys_1 = require("../keys"); - -var ecurve = new elliptic_1.ec('secp256k1'); -/** -* @ignore -*/ - -function aes256CbcEncrypt(iv, key, plaintext) { - var cipher = crypto_1.default.createCipheriv('aes-256-cbc', key, iv); - return Buffer.concat([cipher.update(plaintext), cipher.final()]); -} -/** -* @ignore -*/ - - -function aes256CbcDecrypt(iv, key, ciphertext) { - var cipher = crypto_1.default.createDecipheriv('aes-256-cbc', key, iv); - return Buffer.concat([cipher.update(ciphertext), cipher.final()]); -} -/** -* @ignore -*/ - - -function hmacSha256(key, content) { - return crypto_1.default.createHmac('sha256', key).update(content).digest(); -} -/** -* @ignore -*/ - - -function equalConstTime(b1, b2) { - if (b1.length !== b2.length) { - return false; - } - - var res = 0; - - for (var i = 0; i < b1.length; i++) { - res |= b1[i] ^ b2[i]; // jshint ignore:line - } - - return res === 0; -} -/** -* @ignore -*/ - - -function sharedSecretToKeys(sharedSecret) { - // generate mac and encryption key from shared secret - var hashedSecret = crypto_1.default.createHash('sha512').update(sharedSecret).digest(); - return { - encryptionKey: hashedSecret.slice(0, 32), - hmacKey: hashedSecret.slice(32) - }; -} -/** -* @ignore -*/ - - -function getHexFromBN(bnInput) { - var hexOut = bnInput.toString('hex'); - - if (hexOut.length === 64) { - return hexOut; - } else if (hexOut.length < 64) { - // pad with leading zeros - // the padStart function would require node 9 - var padding = '0'.repeat(64 - hexOut.length); - return "".concat(padding).concat(hexOut); - } else { - throw new Error('Generated a > 32-byte BN for encryption. Failing.'); - } -} - -exports.getHexFromBN = getHexFromBN; -/** - * Encrypt content to elliptic curve publicKey using ECIES - * @param {String} publicKey - secp256k1 public key hex string - * @param {String | Buffer} content - content to encrypt - * @return {Object} Object containing (hex encoded): - * iv (initialization vector), cipherText (cipher text), - * mac (message authentication code), ephemeral public key - * wasString (boolean indicating with or not to return a buffer or string on decrypt) - * - * @private - * @ignore - */ - -function encryptECIES(publicKey, content) { - var isString = typeof content === 'string'; // always copy to buffer - - var plainText = content instanceof Buffer ? Buffer.from(content) : Buffer.from(content); - var ecPK = ecurve.keyFromPublic(publicKey, 'hex').getPublic(); - var ephemeralSK = ecurve.genKeyPair(); - var ephemeralPK = ephemeralSK.getPublic(); - var sharedSecret = ephemeralSK.derive(ecPK); - var sharedSecretHex = getHexFromBN(sharedSecret); - var sharedKeys = sharedSecretToKeys(Buffer.from(sharedSecretHex, 'hex')); - var initializationVector = crypto_1.default.randomBytes(16); - var cipherText = aes256CbcEncrypt(initializationVector, sharedKeys.encryptionKey, plainText); - var macData = Buffer.concat([initializationVector, Buffer.from(ephemeralPK.encodeCompressed()), cipherText]); - var mac = hmacSha256(sharedKeys.hmacKey, macData); - return { - iv: initializationVector.toString('hex'), - ephemeralPK: ephemeralPK.encodeCompressed('hex'), - cipherText: cipherText.toString('hex'), - mac: mac.toString('hex'), - wasString: isString - }; -} - -exports.encryptECIES = encryptECIES; -/** - * Decrypt content encrypted using ECIES - * @param {String} privateKey - secp256k1 private key hex string - * @param {Object} cipherObject - object to decrypt, should contain: - * iv (initialization vector), cipherText (cipher text), - * mac (message authentication code), ephemeralPublicKey - * wasString (boolean indicating with or not to return a buffer or string on decrypt) - * @return {Buffer} plaintext - * @throws {Error} if unable to decrypt - * @private - * @ignore - */ - -function decryptECIES(privateKey, cipherObject) { - var ecSK = ecurve.keyFromPrivate(privateKey, 'hex'); - var ephemeralPK = ecurve.keyFromPublic(cipherObject.ephemeralPK, 'hex').getPublic(); - var sharedSecret = ecSK.derive(ephemeralPK); - var sharedSecretBuffer = Buffer.from(getHexFromBN(sharedSecret), 'hex'); - var sharedKeys = sharedSecretToKeys(sharedSecretBuffer); - var ivBuffer = Buffer.from(cipherObject.iv, 'hex'); - var cipherTextBuffer = Buffer.from(cipherObject.cipherText, 'hex'); - var macData = Buffer.concat([ivBuffer, Buffer.from(ephemeralPK.encodeCompressed()), cipherTextBuffer]); - var actualMac = hmacSha256(sharedKeys.hmacKey, macData); - var expectedMac = Buffer.from(cipherObject.mac, 'hex'); - - if (!equalConstTime(expectedMac, actualMac)) { - throw new Error('Decryption failed: failure in MAC check'); - } - - var plainText = aes256CbcDecrypt(ivBuffer, sharedKeys.encryptionKey, cipherTextBuffer); - - if (cipherObject.wasString) { - return plainText.toString(); - } else { - return plainText; - } -} - -exports.decryptECIES = decryptECIES; -/** - * Sign content using ECDSA - * - * @param {String} privateKey - secp256k1 private key hex string - * @param {Object} content - content to sign - * @return {Object} contains: - * signature - Hex encoded DER signature - * public key - Hex encoded private string taken from privateKey - * @private - * @ignore - */ - -function signECDSA(privateKey, content) { - var contentBuffer = content instanceof Buffer ? content : Buffer.from(content); - var ecPrivate = ecurve.keyFromPrivate(privateKey, 'hex'); - var publicKey = keys_1.getPublicKeyFromPrivate(privateKey); - var contentHash = crypto_1.default.createHash('sha256').update(contentBuffer).digest(); - var signature = ecPrivate.sign(contentHash); - var signatureString = signature.toDER('hex'); - return { - signature: signatureString, - publicKey: publicKey - }; -} - -exports.signECDSA = signECDSA; -/** -* @ignore -*/ - -function getBuffer(content) { - if (content instanceof Buffer) return content;else if (content instanceof ArrayBuffer) return Buffer.from(content);else return Buffer.from(content); -} -/** - * Verify content using ECDSA - * @param {String | Buffer} content - Content to verify was signed - * @param {String} publicKey - secp256k1 private key hex string - * @param {String} signature - Hex encoded DER signature - * @return {Boolean} returns true when signature matches publickey + content, false if not - * @private - * @ignore - */ - - -function verifyECDSA(content, publicKey, signature) { - var contentBuffer = getBuffer(content); - var ecPublic = ecurve.keyFromPublic(publicKey, 'hex'); - var contentHash = crypto_1.default.createHash('sha256').update(contentBuffer).digest(); - return ecPublic.verify(contentHash, signature); -} - -exports.verifyECDSA = verifyECDSA; -},{"elliptic":"xha3","crypto":"mRF4","../keys":"qabb","buffer":"dskh"}],"Ifs7":[function(require,module,exports) { -"use strict"; - -function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - -function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } - -function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; } - -Object.defineProperty(exports, "__esModule", { - value: true -}); - -var errors_1 = require("../errors"); - -var SESSION_VERSION = '1.0.0'; -/** - * @ignore - */ - -var SessionData = -/*#__PURE__*/ -function () { - function SessionData(options) { - _classCallCheck(this, SessionData); - - this.version = SESSION_VERSION; - this.appPrivateKey = options.appPrivateKey; - this.identityAddress = options.identityAddress; - this.username = options.username; - this.coreNode = options.coreNode; - this.hubUrl = options.hubUrl; - this.userData = options.userData; - this.transitKey = options.transitKey; - } - - _createClass(SessionData, [{ - key: "getGaiaHubConfig", - value: function getGaiaHubConfig() { - return this.userData && this.userData.gaiaHubConfig; - } - }, { - key: "setGaiaHubConfig", - value: function setGaiaHubConfig(config) { - this.userData.gaiaHubConfig = config; - } - }, { - key: "toString", - value: function toString() { - return JSON.stringify(this); - } - }], [{ - key: "fromJSON", - value: function fromJSON(json) { - if (json.version !== SESSION_VERSION) { - throw new errors_1.InvalidStateError("JSON data version ".concat(json.version, " not supported by SessionData")); - } - - var options = { - appPrivateKey: json.appPrivateKey, - identityAddress: json.identityAddress, - username: json.username, - coreNode: json.coreNode, - hubUrl: json.hubUrl, - userData: json.userData, - transitKey: json.transitKey - }; - return new SessionData(options); - } - }]); - - return SessionData; -}(); - -exports.SessionData = SessionData; -},{"../errors":"V7fS"}],"Tg89":[function(require,module,exports) { -"use strict"; - -function _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } - -function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); } - -function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; } - -function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); } - -function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); } - -function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); } - -function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - -function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } - -function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; } - -Object.defineProperty(exports, "__esModule", { - value: true -}); - -var sessionData_1 = require("./sessionData"); // import { BLOCKSTACK_GAIA_HUB_LABEL } from '../storage/hub' - - -var authConstants_1 = require("./authConstants"); - -var errors_1 = require("../errors"); // import { Logger } from '../logger' - -/** - * An abstract class representing the SessionDataStore interface. - - */ - - -var SessionDataStore = -/*#__PURE__*/ -function () { - function SessionDataStore(sessionOptions) { - _classCallCheck(this, SessionDataStore); - - if (sessionOptions) { - var newSessionData = new sessionData_1.SessionData(sessionOptions); - this.setSessionData(newSessionData); - } - } - - _createClass(SessionDataStore, [{ - key: "getSessionData", - value: function getSessionData() { - throw new Error('Abstract class'); - } - /* eslint-disable */ - - }, { - key: "setSessionData", - value: function setSessionData(session) { - throw new Error('Abstract class'); - } - }, { - key: "deleteSessionData", - value: function deleteSessionData() { - throw new Error('Abstract class'); - } - }]); - - return SessionDataStore; -}(); - -exports.SessionDataStore = SessionDataStore; -/** - * Stores session data in the instance of this class. - * @ignore - */ - -var InstanceDataStore = -/*#__PURE__*/ -function (_SessionDataStore) { - _inherits(InstanceDataStore, _SessionDataStore); - - function InstanceDataStore(sessionOptions) { - var _this; - - _classCallCheck(this, InstanceDataStore); - - _this = _possibleConstructorReturn(this, _getPrototypeOf(InstanceDataStore).call(this, sessionOptions)); - - if (!_this.sessionData) { - _this.setSessionData(new sessionData_1.SessionData({})); - } - - return _this; - } - - _createClass(InstanceDataStore, [{ - key: "getSessionData", - value: function getSessionData() { - if (!this.sessionData) { - throw new errors_1.NoSessionDataError('No session data was found.'); - } - - return this.sessionData; - } - }, { - key: "setSessionData", - value: function setSessionData(session) { - this.sessionData = session; - return true; - } - }, { - key: "deleteSessionData", - value: function deleteSessionData() { - this.setSessionData(new sessionData_1.SessionData({})); - return true; - } - }]); - - return InstanceDataStore; -}(SessionDataStore); - -exports.InstanceDataStore = InstanceDataStore; -/** - * Stores session data in browser a localStorage entry. - * @ignore - */ - -var LocalStorageStore = -/*#__PURE__*/ -function (_SessionDataStore2) { - _inherits(LocalStorageStore, _SessionDataStore2); - - function LocalStorageStore(sessionOptions) { - var _this2; - - _classCallCheck(this, LocalStorageStore); - - _this2 = _possibleConstructorReturn(this, _getPrototypeOf(LocalStorageStore).call(this, sessionOptions)); - - if (sessionOptions && sessionOptions.storeOptions && sessionOptions.storeOptions.localStorageKey && typeof sessionOptions.storeOptions.localStorageKey === 'string') { - _this2.key = sessionOptions.storeOptions.localStorageKey; - } else { - _this2.key = authConstants_1.LOCALSTORAGE_SESSION_KEY; - } - - var data = localStorage.getItem(_this2.key); - - if (!data) { - var sessionData = new sessionData_1.SessionData({}); - - _this2.setSessionData(sessionData); - } - - return _this2; - } - - _createClass(LocalStorageStore, [{ - key: "getSessionData", - value: function getSessionData() { - var data = localStorage.getItem(this.key); - - if (!data) { - throw new errors_1.NoSessionDataError('No session data was found in localStorage'); - } - - var dataJSON = JSON.parse(data); - return sessionData_1.SessionData.fromJSON(dataJSON); - } - }, { - key: "setSessionData", - value: function setSessionData(session) { - localStorage.setItem(this.key, session.toString()); - return true; - } - }, { - key: "deleteSessionData", - value: function deleteSessionData() { - localStorage.removeItem(this.key); - this.setSessionData(new sessionData_1.SessionData({})); - return true; - } - }]); - - return LocalStorageStore; -}(SessionDataStore); - -exports.LocalStorageStore = LocalStorageStore; -},{"./sessionData":"Ifs7","./authConstants":"UTxZ","../errors":"V7fS"}],"A2is":[function(require,module,exports) { -'use strict'; - -module.exports = str => encodeURIComponent(str).replace(/[!'()*]/g, x => "%".concat(x.charCodeAt(0).toString(16).toUpperCase())); -},{}],"pWxZ":[function(require,module,exports) { -'use strict'; - -var token = '%[a-f0-9]{2}'; -var singleMatcher = new RegExp(token, 'gi'); -var multiMatcher = new RegExp('(' + token + ')+', 'gi'); - -function decodeComponents(components, split) { - try { - // Try to decode the entire string first - return decodeURIComponent(components.join('')); - } catch (err) {// Do nothing - } - - if (components.length === 1) { - return components; - } - - split = split || 1; // Split the array in 2 parts - - var left = components.slice(0, split); - var right = components.slice(split); - return Array.prototype.concat.call([], decodeComponents(left), decodeComponents(right)); -} - -function decode(input) { - try { - return decodeURIComponent(input); - } catch (err) { - var tokens = input.match(singleMatcher); - - for (var i = 1; i < tokens.length; i++) { - input = decodeComponents(tokens, i).join(''); - tokens = input.match(singleMatcher); - } - - return input; - } -} - -function customDecodeURIComponent(input) { - // Keep track of all the replacements and prefill the map with the `BOM` - var replaceMap = { - '%FE%FF': '\uFFFD\uFFFD', - '%FF%FE': '\uFFFD\uFFFD' - }; - var match = multiMatcher.exec(input); - - while (match) { - try { - // Decode as big chunks as possible - replaceMap[match[0]] = decodeURIComponent(match[0]); - } catch (err) { - var result = decode(match[0]); - - if (result !== match[0]) { - replaceMap[match[0]] = result; - } - } - - match = multiMatcher.exec(input); - } // Add `%C2` at the end of the map to make sure it does not replace the combinator before everything else - - - replaceMap['%C2'] = '\uFFFD'; - var entries = Object.keys(replaceMap); - - for (var i = 0; i < entries.length; i++) { - // Replace all decoded components - var key = entries[i]; - input = input.replace(new RegExp(key, 'g'), replaceMap[key]); - } - - return input; -} - -module.exports = function (encodedURI) { - if (typeof encodedURI !== 'string') { - throw new TypeError('Expected `encodedURI` to be of type `string`, got `' + typeof encodedURI + '`'); - } - - try { - encodedURI = encodedURI.replace(/\+/g, ' '); // Try the built in decoder first - - return decodeURIComponent(encodedURI); - } catch (err) { - // Fallback to a more advanced decoder - return customDecodeURIComponent(encodedURI); - } -}; -},{}],"t7Jq":[function(require,module,exports) { -'use strict'; - -module.exports = function (string, separator) { - if (!(typeof string === 'string' && typeof separator === 'string')) { - throw new TypeError('Expected the arguments to be of type `string`'); - } - - if (separator === '') { - return [string]; - } - - var separatorIndex = string.indexOf(separator); - - if (separatorIndex === -1) { - return [string]; - } - - return [string.slice(0, separatorIndex), string.slice(separatorIndex + separator.length)]; -}; -},{}],"FvpG":[function(require,module,exports) { -'use strict'; - -function _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function (obj) { return typeof obj; }; } else { _typeof = function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } - -function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _nonIterableSpread(); } - -function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance"); } - -function _iterableToArray(iter) { if (Symbol.iterator in Object(iter) || Object.prototype.toString.call(iter) === "[object Arguments]") return Array.from(iter); } - -function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = new Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } } - -var strictUriEncode = require('strict-uri-encode'); - -var decodeComponent = require('decode-uri-component'); - -var splitOnFirst = require('split-on-first'); - -function encoderForArrayFormat(options) { - switch (options.arrayFormat) { - case 'index': - return function (key) { - return function (result, value) { - var index = result.length; - - if (value === undefined) { - return result; - } - - if (value === null) { - return [].concat(_toConsumableArray(result), [[encode(key, options), '[', index, ']'].join('')]); - } - - return [].concat(_toConsumableArray(result), [[encode(key, options), '[', encode(index, options), ']=', encode(value, options)].join('')]); - }; - }; - - case 'bracket': - return function (key) { - return function (result, value) { - if (value === undefined) { - return result; - } - - if (value === null) { - return [].concat(_toConsumableArray(result), [[encode(key, options), '[]'].join('')]); - } - - return [].concat(_toConsumableArray(result), [[encode(key, options), '[]=', encode(value, options)].join('')]); - }; - }; - - case 'comma': - return function (key) { - return function (result, value, index) { - if (value === null || value === undefined || value.length === 0) { - return result; - } - - if (index === 0) { - return [[encode(key, options), '=', encode(value, options)].join('')]; - } - - return [[result, encode(value, options)].join(',')]; - }; - }; - - default: - return function (key) { - return function (result, value) { - if (value === undefined) { - return result; - } - - if (value === null) { - return [].concat(_toConsumableArray(result), [encode(key, options)]); - } - - return [].concat(_toConsumableArray(result), [[encode(key, options), '=', encode(value, options)].join('')]); - }; - }; - } -} - -function parserForArrayFormat(options) { - var result; - - switch (options.arrayFormat) { - case 'index': - return function (key, value, accumulator) { - result = /\[(\d*)\]$/.exec(key); - key = key.replace(/\[\d*\]$/, ''); - - if (!result) { - accumulator[key] = value; - return; - } - - if (accumulator[key] === undefined) { - accumulator[key] = {}; - } - - accumulator[key][result[1]] = value; - }; - - case 'bracket': - return function (key, value, accumulator) { - result = /(\[\])$/.exec(key); - key = key.replace(/\[\]$/, ''); - - if (!result) { - accumulator[key] = value; - return; - } - - if (accumulator[key] === undefined) { - accumulator[key] = [value]; - return; - } - - accumulator[key] = [].concat(accumulator[key], value); - }; - - case 'comma': - return function (key, value, accumulator) { - var isArray = typeof value === 'string' && value.split('').indexOf(',') > -1; - var newValue = isArray ? value.split(',') : value; - accumulator[key] = newValue; - }; - - default: - return function (key, value, accumulator) { - if (accumulator[key] === undefined) { - accumulator[key] = value; - return; - } - - accumulator[key] = [].concat(accumulator[key], value); - }; - } -} - -function encode(value, options) { - if (options.encode) { - return options.strict ? strictUriEncode(value) : encodeURIComponent(value); - } - - return value; -} - -function decode(value, options) { - if (options.decode) { - return decodeComponent(value); - } - - return value; -} - -function keysSorter(input) { - if (Array.isArray(input)) { - return input.sort(); - } - - if (_typeof(input) === 'object') { - return keysSorter(Object.keys(input)).sort(function (a, b) { - return Number(a) - Number(b); - }).map(function (key) { - return input[key]; - }); - } - - return input; -} - -function removeHash(input) { - var hashStart = input.indexOf('#'); - - if (hashStart !== -1) { - input = input.slice(0, hashStart); - } - - return input; -} - -function extract(input) { - input = removeHash(input); - var queryStart = input.indexOf('?'); - - if (queryStart === -1) { - return ''; - } - - return input.slice(queryStart + 1); -} - -function parse(input, options) { - options = Object.assign({ - decode: true, - sort: true, - arrayFormat: 'none', - parseNumbers: false, - parseBooleans: false - }, options); - var formatter = parserForArrayFormat(options); // Create an object with no prototype - - var ret = Object.create(null); - - if (typeof input !== 'string') { - return ret; - } - - input = input.trim().replace(/^[?#&]/, ''); - - if (!input) { - return ret; - } - - for (var param of input.split('&')) { - var [key, value] = splitOnFirst(param.replace(/\+/g, ' '), '='); // Missing `=` should be `null`: - // http://w3.org/TR/2012/WD-url-20120524/#collect-url-parameters - - value = value === undefined ? null : decode(value, options); - - if (options.parseNumbers && !Number.isNaN(Number(value)) && typeof value === 'string' && value.trim() !== '') { - value = Number(value); - } else if (options.parseBooleans && value !== null && (value.toLowerCase() === 'true' || value.toLowerCase() === 'false')) { - value = value.toLowerCase() === 'true'; - } - - formatter(decode(key, options), value, ret); - } - - if (options.sort === false) { - return ret; - } - - return (options.sort === true ? Object.keys(ret).sort() : Object.keys(ret).sort(options.sort)).reduce(function (result, key) { - var value = ret[key]; - - if (Boolean(value) && _typeof(value) === 'object' && !Array.isArray(value)) { - // Sort object keys, not values - result[key] = keysSorter(value); - } else { - result[key] = value; - } - - return result; - }, Object.create(null)); -} - -exports.extract = extract; -exports.parse = parse; - -exports.stringify = function (object, options) { - if (!object) { - return ''; - } - - options = Object.assign({ - encode: true, - strict: true, - arrayFormat: 'none' - }, options); - var formatter = encoderForArrayFormat(options); - var keys = Object.keys(object); - - if (options.sort !== false) { - keys.sort(options.sort); - } - - return keys.map(function (key) { - var value = object[key]; - - if (value === undefined) { - return ''; - } - - if (value === null) { - return encode(key, options); - } - - if (Array.isArray(value)) { - return value.reduce(formatter(key), []).join('&'); - } - - return encode(key, options) + '=' + encode(value, options); - }).filter(function (x) { - return x.length > 0; - }).join('&'); -}; - -exports.parseUrl = function (input, options) { - return { - url: removeHash(input).split('?')[0] || '', - query: parse(extract(input), options) - }; -}; -},{"strict-uri-encode":"A2is","decode-uri-component":"pWxZ","split-on-first":"t7Jq"}],"ZtGn":[function(require,module,exports) { -"use strict"; - -var __importDefault = this && this.__importDefault || function (mod) { - return mod && mod.__esModule ? mod : { - "default": mod - }; -}; - -Object.defineProperty(exports, "__esModule", { - value: true -}); - -var query_string_1 = __importDefault(require("query-string")); // @ts-ignore: Could not find a declaration file for module - - -var jsontokens_1 = require("jsontokens"); - -var utils_1 = require("../utils"); - -var fetchUtil_1 = require("../fetchUtil"); - -var logger_1 = require("../logger"); -/** - * Retrieves the authentication request from the query string - * @return {String|null} the authentication request or `null` if - * the query string parameter `authRequest` is not found - * @private - * @ignore - */ - - -function getAuthRequestFromURL() { - var location = utils_1.getGlobalObject('location', { - throwIfUnavailable: true, - usageDesc: 'getAuthRequestFromURL' - }); - var queryDict = query_string_1.default.parse(location.search); - - if (queryDict.authRequest) { - return queryDict.authRequest.split("".concat(utils_1.BLOCKSTACK_HANDLER, ":")).join(''); - } else { - return null; - } -} - -exports.getAuthRequestFromURL = getAuthRequestFromURL; -/** - * Fetches the contents of the manifest file specified in the authentication request - * - * @param {String} authRequest encoded and signed authentication request - * @return {Promise} Returns a `Promise` that resolves to the JSON - * object manifest file unless there's an error in which case rejects with an error - * message. - * @private - * @ignore - */ - -function fetchAppManifest(authRequest) { - return new Promise(function (resolve, reject) { - if (!authRequest) { - reject('Invalid auth request'); - } else { - var payload = jsontokens_1.decodeToken(authRequest).payload; - var manifestURI = payload.manifest_uri; - - try { - logger_1.Logger.debug("Fetching manifest from ".concat(manifestURI)); - fetchUtil_1.fetchPrivate(manifestURI).then(function (response) { - return response.text(); - }).then(function (responseText) { - return JSON.parse(responseText); - }).then(function (responseJSON) { - resolve(Object.assign({}, responseJSON, { - manifestURI: manifestURI - })); - }).catch(function (e) { - logger_1.Logger.debug(e.stack); - reject('Could not fetch manifest.json'); - }); - } catch (e) { - logger_1.Logger.debug(e.stack); - reject('Could not fetch manifest.json'); - } - } - }); -} - -exports.fetchAppManifest = fetchAppManifest; -/** - * Redirect the user's browser to the app using the `redirect_uri` - * specified in the authentication request, passing the authentication - * response token as a query parameter. - * - * @param {String} authRequest encoded and signed authentication request token - * @param {String} authResponse encoded and signed authentication response token - * @return {void} - * @throws {Error} if there is no redirect uri - * @private - * @ignore - */ - -function redirectUserToApp(authRequest, authResponse) { - var payload = jsontokens_1.decodeToken(authRequest).payload; - var redirectURI = payload.redirect_uri; - logger_1.Logger.debug(redirectURI); - - if (redirectURI) { - redirectURI = utils_1.updateQueryStringParameter(redirectURI, 'authResponse', authResponse); - } else { - throw new Error('Invalid redirect URI'); - } - - var location = utils_1.getGlobalObject('location', { - throwIfUnavailable: true, - usageDesc: 'redirectUserToApp' - }); - location.href = redirectURI; -} - -exports.redirectUserToApp = redirectUserToApp; -},{"query-string":"FvpG","jsontokens":"bYjQ","../utils":"dEjD","../fetchUtil":"bSeT","../logger":"qjRs"}],"wlOj":[function(require,module,exports) { -"use strict"; - -Object.defineProperty(exports, "__esModule", { - value: true -}); // @ts-ignore: Could not find a declaration file for module - -var jsontokens_1 = require("jsontokens"); - -var dids_1 = require("../dids"); - -var keys_1 = require("../keys"); - -var utils_1 = require("../utils"); - -var fetchUtil_1 = require("../fetchUtil"); - -var authProvider_1 = require("./authProvider"); -/** - * Checks if the ES256k signature on passed `token` match the claimed public key - * in the payload key `public_keys`. - * - * @param {String} token encoded and signed authentication token - * @return {Boolean} Returns `true` if the signature matches the claimed public key - * @throws {Error} if `token` contains multiple public keys - * @private - * @ignore - */ - - -function doSignaturesMatchPublicKeys(token) { - var payload = jsontokens_1.decodeToken(token).payload; - var publicKeys = payload.public_keys; - - if (publicKeys.length === 1) { - var publicKey = publicKeys[0]; - - try { - var tokenVerifier = new jsontokens_1.TokenVerifier('ES256k', publicKey); - var signatureVerified = tokenVerifier.verify(token); - - if (signatureVerified) { - return true; - } else { - return false; - } - } catch (e) { - return false; - } - } else { - throw new Error('Multiple public keys are not supported'); - } -} - -exports.doSignaturesMatchPublicKeys = doSignaturesMatchPublicKeys; -/** - * Makes sure that the identity address portion of - * the decentralized identifier passed in the issuer `iss` - * key of the token matches the public key - * - * @param {String} token encoded and signed authentication token - * @return {Boolean} if the identity address and public keys match - * @throws {Error} if ` token` has multiple public keys - * @private - * @ignore - */ - -function doPublicKeysMatchIssuer(token) { - var payload = jsontokens_1.decodeToken(token).payload; - var publicKeys = payload.public_keys; - var addressFromIssuer = dids_1.getAddressFromDID(payload.iss); - - if (publicKeys.length === 1) { - var addressFromPublicKeys = keys_1.publicKeyToAddress(publicKeys[0]); - - if (addressFromPublicKeys === addressFromIssuer) { - return true; - } - } else { - throw new Error('Multiple public keys are not supported'); - } - - return false; -} - -exports.doPublicKeysMatchIssuer = doPublicKeysMatchIssuer; -/** - * Looks up the identity address that owns the claimed username - * in `token` using the lookup endpoint provided in `nameLookupURL` - * to determine if the username is owned by the identity address - * that matches the claimed public key - * - * @param {String} token encoded and signed authentication token - * @param {String} nameLookupURL a URL to the name lookup endpoint of the Blockstack Core API - * @return {Promise} returns a `Promise` that resolves to - * `true` if the username is owned by the public key, otherwise the - * `Promise` resolves to `false` - * @private - * @ignore - */ - -function doPublicKeysMatchUsername(token, nameLookupURL) { - return Promise.resolve().then(function () { - var payload = jsontokens_1.decodeToken(token).payload; - - if (!payload.username) { - return true; - } - - if (payload.username === null) { - return true; - } - - if (nameLookupURL === null) { - return false; - } - - var username = payload.username; - var url = "".concat(nameLookupURL.replace(/\/$/, ''), "/").concat(username); - return fetchUtil_1.fetchPrivate(url).then(function (response) { - return response.text(); - }).then(function (responseText) { - var responseJSON = JSON.parse(responseText); - - if (responseJSON.hasOwnProperty('address')) { - var nameOwningAddress = responseJSON.address; - var addressFromIssuer = dids_1.getAddressFromDID(payload.iss); - - if (nameOwningAddress === addressFromIssuer) { - return true; - } else { - return false; - } - } else { - return false; - } - }); - }).catch(function () { - return false; - }); -} - -exports.doPublicKeysMatchUsername = doPublicKeysMatchUsername; -/** - * Checks if the if the token issuance time and date is after the - * current time and date. - * - * @param {String} token encoded and signed authentication token - * @return {Boolean} `true` if the token was issued after the current time, - * otherwise returns `false` - * @private - * @ignore - */ - -function isIssuanceDateValid(token) { - var payload = jsontokens_1.decodeToken(token).payload; - - if (payload.iat) { - if (typeof payload.iat !== 'number') { - return false; - } - - var issuedAt = new Date(payload.iat * 1000); // JWT times are in seconds - - if (new Date().getTime() < issuedAt.getTime()) { - return false; - } else { - return true; - } - } else { - return true; - } -} - -exports.isIssuanceDateValid = isIssuanceDateValid; -/** - * Checks if the expiration date of the `token` is before the current time - * @param {String} token encoded and signed authentication token - * @return {Boolean} `true` if the `token` has not yet expired, `false` - * if the `token` has expired - * - * @private - * @ignore - */ - -function isExpirationDateValid(token) { - var payload = jsontokens_1.decodeToken(token).payload; - - if (payload.exp) { - if (typeof payload.exp !== 'number') { - return false; - } - - var expiresAt = new Date(payload.exp * 1000); // JWT times are in seconds - - if (new Date().getTime() > expiresAt.getTime()) { - return false; - } else { - return true; - } - } else { - return true; - } -} - -exports.isExpirationDateValid = isExpirationDateValid; -/** - * Makes sure the `manifest_uri` is a same origin absolute URL. - * @param {String} token encoded and signed authentication token - * @return {Boolean} `true` if valid, otherwise `false` - * @private - * @ignore - */ - -function isManifestUriValid(token) { - var payload = jsontokens_1.decodeToken(token).payload; - return utils_1.isSameOriginAbsoluteUrl(payload.domain_name, payload.manifest_uri); -} - -exports.isManifestUriValid = isManifestUriValid; -/** - * Makes sure the `redirect_uri` is a same origin absolute URL. - * @param {String} token encoded and signed authentication token - * @return {Boolean} `true` if valid, otherwise `false` - * @private - * @ignore - */ - -function isRedirectUriValid(token) { - var payload = jsontokens_1.decodeToken(token).payload; - return utils_1.isSameOriginAbsoluteUrl(payload.domain_name, payload.redirect_uri); -} - -exports.isRedirectUriValid = isRedirectUriValid; -/** - * Verify authentication request is valid. This function performs a number - * of checks on the authentication request token: - * * Checks that `token` has a valid issuance date & is not expired - * * Checks that `token` has a valid signature that matches the public key it claims - * * Checks that both the manifest and redirect URLs are absolute and conform to - * the same origin policy - * - * @param {String} token encoded and signed authentication request token - * @return {Promise} that resolves to true if the auth request - * is valid and false if it does not. It rejects with a String if the - * token is not signed - * @private - * @ignore - */ - -function verifyAuthRequest(token) { - return Promise.resolve().then(function () { - if (jsontokens_1.decodeToken(token).header.alg === 'none') { - throw new Error('Token must be signed in order to be verified'); - } - }).then(function () { - return Promise.all([isExpirationDateValid(token), isIssuanceDateValid(token), doSignaturesMatchPublicKeys(token), doPublicKeysMatchIssuer(token), isManifestUriValid(token), isRedirectUriValid(token)]); - }).then(function (values) { - if (values.every(Boolean)) { - return true; - } else { - return false; - } - }); -} - -exports.verifyAuthRequest = verifyAuthRequest; -/** - * Verify the authentication request is valid and - * fetch the app manifest file if valid. Otherwise, reject the promise. - * @param {String} token encoded and signed authentication request token - * @return {Promise} that resolves to the app manifest file in JSON format - * or rejects if the auth request or app manifest file is invalid - * @private - * @ignore - */ - -function verifyAuthRequestAndLoadManifest(token) { - return Promise.resolve().then(function () { - return verifyAuthRequest(token).then(function (valid) { - if (valid) { - return authProvider_1.fetchAppManifest(token); - } else { - return Promise.reject(); - } - }); - }); -} - -exports.verifyAuthRequestAndLoadManifest = verifyAuthRequestAndLoadManifest; -/** - * Verify the authentication response is valid - * @param {String} token the authentication response token - * @param {String} nameLookupURL the url use to verify owner of a username - * @return {Promise} that resolves to true if auth response - * is valid and false if it does not - * @private - * @ignore - */ - -function verifyAuthResponse(token, nameLookupURL) { - return Promise.all([isExpirationDateValid(token), isIssuanceDateValid(token), doSignaturesMatchPublicKeys(token), doPublicKeysMatchIssuer(token), doPublicKeysMatchUsername(token, nameLookupURL)]).then(function (values) { - if (values.every(Boolean)) { - return true; - } else { - return false; - } - }); -} - -exports.verifyAuthResponse = verifyAuthResponse; -},{"jsontokens":"bYjQ","../dids":"oZHr","../keys":"qabb","../utils":"dEjD","../fetchUtil":"bSeT","./authProvider":"ZtGn"}],"bYSw":[function(require,module,exports) { -var Buffer = require("buffer").Buffer; -"use strict"; - -Object.defineProperty(exports, "__esModule", { - value: true -}); - -var bitcoinjs_lib_1 = require("bitcoinjs-lib"); // @ts-ignore: Could not find a declaration file for module - - -var jsontokens_1 = require("jsontokens"); - -var utils_1 = require("../utils"); -/** - * Signs a profile token - * @param {Object} profile - the JSON of the profile to be signed - * @param {String} privateKey - the signing private key - * @param {Object} subject - the entity that the information is about - * @param {Object} issuer - the entity that is issuing the token - * @param {String} signingAlgorithm - the signing algorithm to use - * @param {Date} issuedAt - the time of issuance of the token - * @param {Date} expiresAt - the time of expiration of the token - * @returns {Object} - the signed profile token - * - */ - - -function signProfileToken(profile, privateKey, subject, issuer) { - var signingAlgorithm = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : 'ES256K'; - var issuedAt = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : new Date(); - var expiresAt = arguments.length > 6 && arguments[6] !== undefined ? arguments[6] : utils_1.nextYear(); - - if (signingAlgorithm !== 'ES256K') { - throw new Error('Signing algorithm not supported'); - } - - var publicKey = jsontokens_1.SECP256K1Client.derivePublicKey(privateKey); - - if (!subject) { - subject = { - publicKey: publicKey - }; - } - - if (!issuer) { - issuer = { - publicKey: publicKey - }; - } - - var tokenSigner = new jsontokens_1.TokenSigner(signingAlgorithm, privateKey); - var payload = { - jti: utils_1.makeUUID4(), - iat: issuedAt.toISOString(), - exp: expiresAt.toISOString(), - subject: subject, - issuer: issuer, - claim: profile - }; - return tokenSigner.sign(payload); -} - -exports.signProfileToken = signProfileToken; -/** - * Wraps a token for a profile token file - * @param {String} token - the token to be wrapped - * @returns {Object} - including `token` and `decodedToken` - */ - -function wrapProfileToken(token) { - return { - token: token, - decodedToken: jsontokens_1.decodeToken(token) - }; -} - -exports.wrapProfileToken = wrapProfileToken; -/** - * Verifies a profile token - * @param {String} token - the token to be verified - * @param {String} publicKeyOrAddress - the public key or address of the - * keypair that is thought to have signed the token - * @returns {Object} - the verified, decoded profile token - * @throws {Error} - throws an error if token verification fails - */ - -function verifyProfileToken(token, publicKeyOrAddress) { - var decodedToken = jsontokens_1.decodeToken(token); - var payload = decodedToken.payload; // Inspect and verify the subject - - if (payload.hasOwnProperty('subject')) { - if (!payload.subject.hasOwnProperty('publicKey')) { - throw new Error('Token doesn\'t have a subject public key'); - } - } else { - throw new Error('Token doesn\'t have a subject'); - } // Inspect and verify the issuer - - - if (payload.hasOwnProperty('issuer')) { - if (!payload.issuer.hasOwnProperty('publicKey')) { - throw new Error('Token doesn\'t have an issuer public key'); - } - } else { - throw new Error('Token doesn\'t have an issuer'); - } // Inspect and verify the claim - - - if (!payload.hasOwnProperty('claim')) { - throw new Error('Token doesn\'t have a claim'); - } - - var issuerPublicKey = payload.issuer.publicKey; - var publicKeyBuffer = Buffer.from(issuerPublicKey, 'hex'); - var compressedKeyPair = bitcoinjs_lib_1.ECPair.fromPublicKey(publicKeyBuffer, { - compressed: true - }); - var compressedAddress = utils_1.ecPairToAddress(compressedKeyPair); - var uncompressedKeyPair = bitcoinjs_lib_1.ECPair.fromPublicKey(publicKeyBuffer, { - compressed: false - }); - var uncompressedAddress = utils_1.ecPairToAddress(uncompressedKeyPair); - - if (publicKeyOrAddress === issuerPublicKey) {// pass - } else if (publicKeyOrAddress === compressedAddress) {// pass - } else if (publicKeyOrAddress === uncompressedAddress) {// pass - } else { - throw new Error('Token issuer public key does not match the verifying value'); - } - - var tokenVerifier = new jsontokens_1.TokenVerifier(decodedToken.header.alg, issuerPublicKey); - - if (!tokenVerifier) { - throw new Error('Invalid token verifier'); - } - - var tokenVerified = tokenVerifier.verify(token); - - if (!tokenVerified) { - throw new Error('Token verification failed'); - } - - return decodedToken; -} - -exports.verifyProfileToken = verifyProfileToken; -/** - * Extracts a profile from an encoded token and optionally verifies it, - * if `publicKeyOrAddress` is provided. - * @param {String} token - the token to be extracted - * @param {String} publicKeyOrAddress - the public key or address of the - * keypair that is thought to have signed the token - * @returns {Object} - the profile extracted from the encoded token - * @throws {Error} - if the token isn't signed by the provided `publicKeyOrAddress` - */ - -function extractProfile(token) { - var publicKeyOrAddress = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null; - var decodedToken; - - if (publicKeyOrAddress) { - decodedToken = verifyProfileToken(token, publicKeyOrAddress); - } else { - decodedToken = jsontokens_1.decodeToken(token); - } - - var profile = {}; - - if (decodedToken.hasOwnProperty('payload')) { - var payload = decodedToken.payload; - - if (payload.hasOwnProperty('claim')) { - profile = decodedToken.payload.claim; - } - } - - return profile; -} - -exports.extractProfile = extractProfile; -},{"bitcoinjs-lib":"Bcue","jsontokens":"bYjQ","../utils":"dEjD","buffer":"dskh"}],"OJUd":[function(require,module,exports) { -"use strict"; - -Object.defineProperty(exports, "__esModule", { - value: true -}); - -var utils_1 = require("../utils"); - -var logger_1 = require("../logger"); -/** - * Detects if the native auth-browser is installed and is successfully - * launched via a custom protocol URI. - * @param {String} authRequest - * The encoded authRequest to be used as a query param in the custom URI. - * @param {String} successCallback - * The callback that is invoked when the protocol handler was detected. - * @param {String} failCallback - * The callback that is invoked when the protocol handler was not detected. - * @return {void} - */ - - -function launchCustomProtocol(authRequest, successCallback, failCallback) { - // Create a unique ID used for this protocol detection attempt. - var echoReplyID = Math.random().toString(36).substr(2, 9); - var echoReplyKeyPrefix = 'echo-reply-'; - var echoReplyKey = "".concat(echoReplyKeyPrefix).concat(echoReplyID); - - var _utils_1$getGlobalObj = utils_1.getGlobalObjects(['localStorage', 'document', 'setTimeout', 'clearTimeout', 'addEventListener', 'removeEventListener'], { - throwIfUnavailable: true, - usageDesc: 'detectProtocolLaunch' - }), - localStorage = _utils_1$getGlobalObj.localStorage, - document = _utils_1$getGlobalObj.document, - setTimeout = _utils_1$getGlobalObj.setTimeout, - clearTimeout = _utils_1$getGlobalObj.clearTimeout, - addEventListener = _utils_1$getGlobalObj.addEventListener, - removeEventListener = _utils_1$getGlobalObj.removeEventListener; // Use localStorage as a reliable cross-window communication method. - // Create the storage entry to signal a protocol detection attempt for the - // next browser window to check. - - - localStorage.setItem(echoReplyKey, Date.now().toString()); - - var cleanUpLocalStorage = function cleanUpLocalStorage() { - try { - localStorage.removeItem(echoReplyKey); // Also clear out any stale echo-reply keys older than 1 hour. - - for (var i = 0; i < localStorage.length; i++) { - var storageKey = localStorage.key(i); - - if (storageKey && storageKey.startsWith(echoReplyKeyPrefix)) { - var storageValue = localStorage.getItem(storageKey); - - if (storageValue === 'success' || Date.now() - parseInt(storageValue, 10) > 3600000) { - localStorage.removeItem(storageKey); - } - } - } - } catch (err) { - logger_1.Logger.error('Exception cleaning up echo-reply entries in localStorage'); - logger_1.Logger.error(err); - } - }; - - var detectionTimeout = 1000; - var redirectToWebAuthTimer = 0; - - var cancelWebAuthRedirectTimer = function cancelWebAuthRedirectTimer() { - if (redirectToWebAuthTimer) { - clearTimeout(redirectToWebAuthTimer); - redirectToWebAuthTimer = 0; - } - }; - - var startWebAuthRedirectTimer = function startWebAuthRedirectTimer() { - var timeout = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : detectionTimeout; - cancelWebAuthRedirectTimer(); - redirectToWebAuthTimer = setTimeout(function () { - if (redirectToWebAuthTimer) { - cancelWebAuthRedirectTimer(); - var nextFunc; - - if (localStorage.getItem(echoReplyKey) === 'success') { - logger_1.Logger.info('Protocol echo reply detected.'); - nextFunc = successCallback; - } else { - logger_1.Logger.info('Protocol handler not detected.'); - nextFunc = failCallback; - } - - failCallback = function failCallback() {}; - - successCallback = function successCallback() {}; - - cleanUpLocalStorage(); // Briefly wait since localStorage changes can - // sometimes be ignored when immediately redirected. - - setTimeout(function () { - return nextFunc(); - }, 100); - } - }, timeout); - }; - - startWebAuthRedirectTimer(); - var inputPromptTracker = document.createElement('input'); - inputPromptTracker.type = 'text'; // Setting display:none on an element prevents them from being focused/blurred. - // So we hide using 0 width/height/opacity, and set position:fixed so that the - // page does not scroll when the element is focused. - - var hiddenCssStyle = 'all: initial; position: fixed; top: 0; height: 0; width: 0; opacity: 0;'; - inputPromptTracker.style.cssText = hiddenCssStyle; // If the the focus of a page element is immediately changed then this likely indicates - // the protocol handler is installed, and the browser is prompting the user if they want - // to open the application. - - var inputBlurredFunc = function inputBlurredFunc() { - // Use a timeout of 100ms to ignore instant toggles between blur and focus. - // Browsers often perform an instant blur & focus when the protocol handler is working - // but not showing any browser prompts, so we want to ignore those instances. - var isRefocused = false; - inputPromptTracker.addEventListener('focus', function () { - isRefocused = true; - }, { - once: true, - capture: true - }); - setTimeout(function () { - if (redirectToWebAuthTimer && !isRefocused) { - logger_1.Logger.info('Detected possible browser prompt for opening the protocol handler app.'); - clearTimeout(redirectToWebAuthTimer); - inputPromptTracker.addEventListener('focus', function () { - if (redirectToWebAuthTimer) { - logger_1.Logger.info('Possible browser prompt closed, restarting auth redirect timeout.'); - startWebAuthRedirectTimer(); - } - }, { - once: true, - capture: true - }); - } - }, 100); - }; - - inputPromptTracker.addEventListener('blur', inputBlurredFunc, { - once: true, - capture: true - }); - setTimeout(function () { - return inputPromptTracker.removeEventListener('blur', inputBlurredFunc); - }, 200); - document.body.appendChild(inputPromptTracker); - inputPromptTracker.focus(); // Detect if document.visibility is immediately changed which is a strong - // indication that the protocol handler is working. We don't know for sure and - // can't predict future browser changes, so only increase the redirect timeout. - // This reduces the probability of a false-negative (where local auth works, but - // the original page was redirect to web auth because something took too long), - - var pageVisibilityChanged = function pageVisibilityChanged() { - if (document.hidden && redirectToWebAuthTimer) { - logger_1.Logger.info('Detected immediate page visibility change (protocol handler probably working).'); - startWebAuthRedirectTimer(3000); - } - }; - - document.addEventListener('visibilitychange', pageVisibilityChanged, { - once: true, - capture: true - }); - setTimeout(function () { - return document.removeEventListener('visibilitychange', pageVisibilityChanged); - }, 500); // Listen for the custom protocol echo reply via localStorage update event. - - addEventListener('storage', function replyEventListener(event) { - if (event.key === echoReplyKey && localStorage.getItem(echoReplyKey) === 'success') { - // Custom protocol worked, cancel the web auth redirect timer. - cancelWebAuthRedirectTimer(); - inputPromptTracker.removeEventListener('blur', inputBlurredFunc); - logger_1.Logger.info('Protocol echo reply detected from localStorage event.'); // Clean up event listener and localStorage. - - removeEventListener('storage', replyEventListener); - var nextFunc = successCallback; - - successCallback = function successCallback() {}; - - failCallback = function failCallback() {}; - - cleanUpLocalStorage(); // Briefly wait since localStorage changes can sometimes - // be ignored when immediately redirected. - - setTimeout(function () { - return nextFunc(); - }, 100); - } - }, false); // Use iframe technique for launching the protocol URI rather than setting `window.location`. - // This method prevents browsers like Safari, Opera, Firefox from showing error prompts - // about unknown protocol handler when app is not installed, and avoids an empty - // browser tab when the app is installed. - - logger_1.Logger.info('Attempting protocol launch via iframe injection.'); - var locationSrc = "".concat(utils_1.BLOCKSTACK_HANDLER, ":").concat(authRequest, "&echo=").concat(echoReplyID); - var iframe = document.createElement('iframe'); - var iframeStyle = 'all: initial; display: none; position: fixed; top: 0; height: 0; width: 0; opacity: 0;'; - iframe.style.cssText = iframeStyle; - iframe.src = locationSrc; - document.body.appendChild(iframe); -} - -exports.launchCustomProtocol = launchCustomProtocol; -},{"../utils":"dEjD","../logger":"qjRs"}],"kACS":[function(require,module,exports) { -"use strict"; - -var __awaiter = this && this.__awaiter || function (thisArg, _arguments, P, generator) { - return new (P || (P = Promise))(function (resolve, reject) { - function fulfilled(value) { - try { - step(generator.next(value)); - } catch (e) { - reject(e); - } - } - - function rejected(value) { - try { - step(generator["throw"](value)); - } catch (e) { - reject(e); - } - } - - function step(result) { - result.done ? resolve(result.value) : new P(function (resolve) { - resolve(result.value); - }).then(fulfilled, rejected); - } - - step((generator = generator.apply(thisArg, _arguments || [])).next()); - }); -}; - -var __importDefault = this && this.__importDefault || function (mod) { - return mod && mod.__esModule ? mod : { - "default": mod - }; -}; - -Object.defineProperty(exports, "__esModule", { - value: true -}); - -var query_string_1 = __importDefault(require("query-string")); // @ts-ignore: Could not find a declaration file for module - - -var jsontokens_1 = require("jsontokens"); - -var authVerification_1 = require("./authVerification"); - -var utils_1 = require("../utils"); - -var fetchUtil_1 = require("../fetchUtil"); - -var dids_1 = require("../dids"); - -var errors_1 = require("../errors"); - -var authMessages_1 = require("./authMessages"); - -var authConstants_1 = require("./authConstants"); - -var profileTokens_1 = require("../profiles/profileTokens"); - -var userSession_1 = require("./userSession"); - -var config_1 = require("../config"); - -var logger_1 = require("../logger"); - -var protocolEchoDetection_1 = require("./protocolEchoDetection"); - -var protocolLaunch_1 = require("./protocolLaunch"); - -var DEFAULT_PROFILE = { - '@type': 'Person', - '@context': 'http://schema.org' -}; -/** - * @deprecated - * #### v19 Use [[UserSession.isUserSignedIn]] instead. - * - * Check if a user is currently signed in. - * @return {Boolean} `true` if the user is signed in, `false` if not. - */ - -function isUserSignedIn() { - console.warn('DEPRECATION WARNING: The static isUserSignedIn() function will be deprecated in ' + 'the next major release of blockstack.js. Create an instance of UserSession and call the ' + 'instance method isUserSignedIn().'); - var userSession = new userSession_1.UserSession(); - return userSession.isUserSignedIn(); -} - -exports.isUserSignedIn = isUserSignedIn; -/** - * - * - * @deprecated - * #### v19 Use [[UserSession.isUserSignedIn]] instead. - * - * Generates an authentication request and redirects the user to the Blockstack - * browser to approve the sign in request. - * - * Please note that this requires that the web browser properly handles the - * `blockstack:` URL protocol handler. - * - * Most applications should use this - * method for sign in unless they require more fine grained control over how the - * authentication request is generated. If your app falls into this category, - * use `makeAuthRequest` and `redirectToSignInWithAuthRequest` to build your own sign in process. - * - * @param {String} [redirectURI=`${window.location.origin}/`] - * The location to which the identity provider will redirect the user after - * the user approves sign in. - * @param {String} [manifestURI=`${window.location.origin}/manifest.json`] - * Location of the manifest file. - * @param {Array} [scopes=DEFAULT_SCOPE] Defaults to requesting write access to - * this app's data store. - * An array of strings indicating which permissions this app is requesting. - * @return {void} - */ - -function redirectToSignIn(redirectURI, manifestURI, scopes) { - console.warn('DEPRECATION WARNING: The static redirectToSignIn() function will be deprecated in the ' + 'next major release of blockstack.js. Create an instance of UserSession and call the ' + 'instance method redirectToSignIn().'); - var authRequest = authMessages_1.makeAuthRequest(null, redirectURI, manifestURI, scopes); - redirectToSignInWithAuthRequest(authRequest); -} - -exports.redirectToSignIn = redirectToSignIn; -/** - * @deprecated - * #### v19 Use [[UserSession.isSignInPending]] instead. - * - * Check if there is a authentication request that hasn't been handled. - * - * Also checks for a protocol echo reply (which if detected then the page - * will be automatically redirected after this call). - * - * @return {Boolean} `true` if there is a pending sign in, otherwise `false` - */ - -function isSignInPending() { - try { - var isProtocolEcho = protocolEchoDetection_1.protocolEchoReplyDetection(); - - if (isProtocolEcho) { - logger_1.Logger.info('protocolEchoReply detected from isSignInPending call, the page is about to redirect.'); - return true; - } - } catch (error) { - logger_1.Logger.error("Error checking for protocol echo reply isSignInPending: ".concat(error)); - } - - return !!getAuthResponseToken(); -} - -exports.isSignInPending = isSignInPending; -/** - * @deprecated - * #### v19 Use [[UserSession.getAuthResponseToken]] instead. - * - * Retrieve the authentication token from the URL query - * @return {String} the authentication token if it exists otherwise `null` - */ - -function getAuthResponseToken() { - var search = utils_1.getGlobalObject('location', { - throwIfUnavailable: true, - usageDesc: 'getAuthResponseToken' - }).search; - var queryDict = query_string_1.default.parse(search); - return queryDict.authResponse ? queryDict.authResponse : ''; -} - -exports.getAuthResponseToken = getAuthResponseToken; -/** - * @deprecated - * #### v19 Use [[UserSession.loadUserData]] instead. - * - * Retrieves the user data object. The user's profile is stored in the key `profile`. - * @return {Object} User data object. -*/ - -function loadUserData() { - console.warn('DEPRECATION WARNING: The static loadUserData() function will be deprecated in the ' + 'next major release of blockstack.js. Create an instance of UserSession and call the ' + 'instance method loadUserData().'); - var userSession = new userSession_1.UserSession(); - return userSession.loadUserData(); -} - -exports.loadUserData = loadUserData; -/** - * @deprecated - * #### v19 Use [[UserSession.signUserOut]] instead. - * - * Sign the user out and optionally redirect to given location. - * @param redirectURL - * Location to redirect user to after sign out. - * Only used in environments with `window` available - */ - -function signUserOut(redirectURL, caller) { - var userSession = caller || new userSession_1.UserSession(); - userSession.store.deleteSessionData(); - - if (redirectURL) { - utils_1.getGlobalObject('location', { - throwIfUnavailable: true, - usageDesc: 'signUserOut' - }).href = redirectURL; - } -} - -exports.signUserOut = signUserOut; -/** - * @deprecated - * #### v19 Use [[UserSession.redirectToSignInWithAuthRequest]] instead. - * - * Redirects the user to the Blockstack browser to approve the sign in request - * given. - * - * The user is redirected to the `blockstackIDHost` if the `blockstack:` - * protocol handler is not detected. Please note that the protocol handler detection - * does not work on all browsers. - * @param {String} authRequest - the authentication request generated by `makeAuthRequest` - * @param {String} blockstackIDHost - the URL to redirect the user to if the blockstack - * protocol handler is not detected - * @return {void} - */ - -function redirectToSignInWithAuthRequest(authRequest) { - var blockstackIDHost = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : authConstants_1.DEFAULT_BLOCKSTACK_HOST; - authRequest = authRequest || authMessages_1.makeAuthRequest(); - var httpsURI = "".concat(blockstackIDHost, "?authRequest=").concat(authRequest); - - var _utils_1$getGlobalObj = utils_1.getGlobalObjects(['navigator', 'location'], { - throwIfUnavailable: true, - usageDesc: 'redirectToSignInWithAuthRequest' - }), - navigator = _utils_1$getGlobalObj.navigator, - location = _utils_1$getGlobalObj.location; // If they're on a mobile OS, always redirect them to HTTPS site - - - if (/Android|webOS|iPhone|iPad|iPod|Opera Mini/i.test(navigator.userAgent)) { - logger_1.Logger.info('detected mobile OS, sending to https'); - location.href = httpsURI; - return; - } - - function successCallback() { - logger_1.Logger.info('protocol handler detected'); // The detection function should open the link for us - } - - function failCallback() { - logger_1.Logger.warn('protocol handler not detected'); - location.href = httpsURI; - } - - protocolLaunch_1.launchCustomProtocol(authRequest, successCallback, failCallback); -} - -exports.redirectToSignInWithAuthRequest = redirectToSignInWithAuthRequest; -/** - * @deprecated - * #### v19 Use [[UserSession.handlePendingSignIn]] instead. - * - * Try to process any pending sign in request by returning a `Promise` that resolves - * to the user data object if the sign in succeeds. - * - * @param {String} nameLookupURL - the endpoint against which to verify public - * keys match claimed username - * @param {String} authResponseToken - the signed authentication response token - * @param {String} transitKey - the transit private key that corresponds to the transit public key - * that was provided in the authentication request - * @return {Promise} that resolves to the user data object if successful and rejects - * if handling the sign in request fails or there was no pending sign in request. - */ - -function handlePendingSignIn() { - var nameLookupURL = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : ''; - var authResponseToken = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : getAuthResponseToken(); - var transitKey = arguments.length > 2 ? arguments[2] : undefined; - var caller = arguments.length > 3 ? arguments[3] : undefined; - return __awaiter(this, void 0, void 0, - /*#__PURE__*/ - regeneratorRuntime.mark(function _callee() { - var isProtocolEcho, msg, _tokenPayload, isValid, tokenPayload, appPrivateKey, coreSessionToken, hubUrl, gaiaAssociationToken, userData, profileURL, response, responseText, wrappedProfile, profile, sessionData; - - return regeneratorRuntime.wrap(function _callee$(_context) { - while (1) { - switch (_context.prev = _context.next) { - case 0: - _context.prev = 0; - isProtocolEcho = protocolEchoDetection_1.protocolEchoReplyDetection(); - - if (!isProtocolEcho) { - _context.next = 6; - break; - } - - msg = 'handlePendingSignIn called while protocolEchoReply was detected, and ' + 'the page is about to redirect. This function will resolve with an error after ' + 'several seconds, if the page was not redirected for some reason.'; - logger_1.Logger.info(msg); - return _context.abrupt("return", new Promise(function (_resolve, reject) { - setTimeout(function () { - logger_1.Logger.error('Page should have redirected by now. handlePendingSignIn will now throw.'); - reject(msg); - }, 3000); - })); - - case 6: - _context.next = 11; - break; - - case 8: - _context.prev = 8; - _context.t0 = _context["catch"](0); - logger_1.Logger.error("Error checking for protocol echo reply handlePendingSignIn: ".concat(_context.t0)); - - case 11: - if (!caller) { - caller = new userSession_1.UserSession(); - } - - if (!transitKey) { - transitKey = caller.store.getSessionData().transitKey; - } - - if (!nameLookupURL) { - _tokenPayload = jsontokens_1.decodeToken(authResponseToken).payload; - - if (utils_1.isLaterVersion(_tokenPayload.version, '1.3.0') && _tokenPayload.blockstackAPIUrl !== null && _tokenPayload.blockstackAPIUrl !== undefined) { - // override globally - logger_1.Logger.info("Overriding ".concat(config_1.config.network.blockstackAPIUrl, " ") + "with ".concat(_tokenPayload.blockstackAPIUrl)); - config_1.config.network.blockstackAPIUrl = _tokenPayload.blockstackAPIUrl; - } - - nameLookupURL = "".concat(config_1.config.network.blockstackAPIUrl).concat(authConstants_1.NAME_LOOKUP_PATH); - } - - _context.next = 16; - return authVerification_1.verifyAuthResponse(authResponseToken, nameLookupURL); - - case 16: - isValid = _context.sent; - - if (isValid) { - _context.next = 19; - break; - } - - throw new errors_1.LoginFailedError('Invalid authentication response.'); - - case 19: - tokenPayload = jsontokens_1.decodeToken(authResponseToken).payload; // TODO: real version handling - - appPrivateKey = tokenPayload.private_key; - coreSessionToken = tokenPayload.core_token; - - if (!utils_1.isLaterVersion(tokenPayload.version, '1.1.0')) { - _context.next = 43; - break; - } - - if (!(transitKey !== undefined && transitKey != null)) { - _context.next = 42; - break; - } - - if (!(tokenPayload.private_key !== undefined && tokenPayload.private_key !== null)) { - _context.next = 39; - break; - } - - _context.prev = 25; - appPrivateKey = authMessages_1.decryptPrivateKey(transitKey, tokenPayload.private_key); - _context.next = 39; - break; - - case 29: - _context.prev = 29; - _context.t1 = _context["catch"](25); - logger_1.Logger.warn('Failed decryption of appPrivateKey, will try to use as given'); - _context.prev = 32; - utils_1.hexStringToECPair(tokenPayload.private_key); - _context.next = 39; - break; - - case 36: - _context.prev = 36; - _context.t2 = _context["catch"](32); - throw new errors_1.LoginFailedError('Failed decrypting appPrivateKey. Usually means' + ' that the transit key has changed during login.'); - - case 39: - if (coreSessionToken !== undefined && coreSessionToken !== null) { - try { - coreSessionToken = authMessages_1.decryptPrivateKey(transitKey, coreSessionToken); - } catch (e) { - logger_1.Logger.info('Failed decryption of coreSessionToken, will try to use as given'); - } - } - - _context.next = 43; - break; - - case 42: - throw new errors_1.LoginFailedError('Authenticating with protocol > 1.1.0 requires transit' + ' key, and none found.'); - - case 43: - hubUrl = authConstants_1.BLOCKSTACK_DEFAULT_GAIA_HUB_URL; - - if (utils_1.isLaterVersion(tokenPayload.version, '1.2.0') && tokenPayload.hubUrl !== null && tokenPayload.hubUrl !== undefined) { - hubUrl = tokenPayload.hubUrl; - } - - if (utils_1.isLaterVersion(tokenPayload.version, '1.3.0') && tokenPayload.associationToken !== null && tokenPayload.associationToken !== undefined) { - gaiaAssociationToken = tokenPayload.associationToken; - } - - userData = { - username: tokenPayload.username, - profile: tokenPayload.profile, - email: tokenPayload.email, - decentralizedID: tokenPayload.iss, - identityAddress: dids_1.getAddressFromDID(tokenPayload.iss), - appPrivateKey: appPrivateKey, - coreSessionToken: coreSessionToken, - authResponseToken: authResponseToken, - hubUrl: hubUrl, - gaiaAssociationToken: gaiaAssociationToken - }; - profileURL = tokenPayload.profile_url; - - if (!(!userData.profile && profileURL)) { - _context.next = 64; - break; - } - - _context.next = 51; - return fetchUtil_1.fetchPrivate(profileURL); - - case 51: - response = _context.sent; - - if (response.ok) { - _context.next = 56; - break; - } - - // return blank profile if we fail to fetch - userData.profile = Object.assign({}, DEFAULT_PROFILE); - _context.next = 62; - break; - - case 56: - _context.next = 58; - return response.text(); - - case 58: - responseText = _context.sent; - wrappedProfile = JSON.parse(responseText); - profile = profileTokens_1.extractProfile(wrappedProfile[0].token); - userData.profile = profile; - - case 62: - _context.next = 65; - break; - - case 64: - userData.profile = tokenPayload.profile; - - case 65: - sessionData = caller.store.getSessionData(); - sessionData.userData = userData; - caller.store.setSessionData(sessionData); - return _context.abrupt("return", userData); - - case 69: - case "end": - return _context.stop(); - } - } - }, _callee, null, [[0, 8], [25, 29], [32, 36]]); - })); -} - -exports.handlePendingSignIn = handlePendingSignIn; -},{"query-string":"FvpG","jsontokens":"bYjQ","./authVerification":"wlOj","../utils":"dEjD","../fetchUtil":"bSeT","../dids":"oZHr","../errors":"V7fS","./authMessages":"u2eb","./authConstants":"UTxZ","../profiles/profileTokens":"bYSw","./userSession":"rsLE","../config":"GmrD","../logger":"qjRs","./protocolEchoDetection":"ou4A","./protocolLaunch":"OJUd"}],"hGa9":[function(require,module,exports) { -var Buffer = require("buffer").Buffer; -"use strict"; - -var __awaiter = this && this.__awaiter || function (thisArg, _arguments, P, generator) { - return new (P || (P = Promise))(function (resolve, reject) { - function fulfilled(value) { - try { - step(generator.next(value)); - } catch (e) { - reject(e); - } - } - - function rejected(value) { - try { - step(generator["throw"](value)); - } catch (e) { - reject(e); - } - } - - function step(result) { - result.done ? resolve(result.value) : new P(function (resolve) { - resolve(result.value); - }).then(fulfilled, rejected); - } - - step((generator = generator.apply(thisArg, _arguments || [])).next()); - }); -}; - -var __importDefault = this && this.__importDefault || function (mod) { - return mod && mod.__esModule ? mod : { - "default": mod - }; -}; - -Object.defineProperty(exports, "__esModule", { - value: true -}); - -var bitcoinjs_lib_1 = require("bitcoinjs-lib"); - -var crypto_1 = __importDefault(require("crypto")); // @ts-ignore: Could not find a declaration file for module - - -var jsontokens_1 = require("jsontokens"); - -var utils_1 = require("../utils"); - -var fetchUtil_1 = require("../fetchUtil"); - -var keys_1 = require("../keys"); - -var logger_1 = require("../logger"); - -var errors_1 = require("../errors"); -/** - * @ignore - */ - - -exports.BLOCKSTACK_GAIA_HUB_LABEL = 'blockstack-gaia-hub-config'; -/** - * - * @param filename - * @param contents - * @param hubConfig - * @param contentType - * - * @ignore - */ - -function uploadToGaiaHub(filename, contents, hubConfig) { - var contentType = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 'application/octet-stream'; - return __awaiter(this, void 0, void 0, - /*#__PURE__*/ - regeneratorRuntime.mark(function _callee() { - var response, responseText, responseJSON; - return regeneratorRuntime.wrap(function _callee$(_context) { - while (1) { - switch (_context.prev = _context.next) { - case 0: - logger_1.Logger.debug("uploadToGaiaHub: uploading ".concat(filename, " to ").concat(hubConfig.server)); - _context.next = 3; - return fetchUtil_1.fetchPrivate("".concat(hubConfig.server, "/store/").concat(hubConfig.address, "/").concat(filename), { - method: 'POST', - headers: { - 'Content-Type': contentType, - Authorization: "bearer ".concat(hubConfig.token) - }, - body: contents - }); - - case 3: - response = _context.sent; - - if (response.ok) { - _context.next = 6; - break; - } - - throw new Error('Error when uploading to Gaia hub'); - - case 6: - _context.next = 8; - return response.text(); - - case 8: - responseText = _context.sent; - responseJSON = JSON.parse(responseText); - return _context.abrupt("return", responseJSON.publicURL); - - case 11: - case "end": - return _context.stop(); - } - } - }, _callee); - })); -} - -exports.uploadToGaiaHub = uploadToGaiaHub; - -function deleteFromGaiaHub(filename, hubConfig) { - return __awaiter(this, void 0, void 0, - /*#__PURE__*/ - regeneratorRuntime.mark(function _callee2() { - var response, responseMsg, errorMsg; - return regeneratorRuntime.wrap(function _callee2$(_context2) { - while (1) { - switch (_context2.prev = _context2.next) { - case 0: - logger_1.Logger.debug("deleteFromGaiaHub: deleting ".concat(filename, " from ").concat(hubConfig.server)); - _context2.next = 3; - return fetch("".concat(hubConfig.server, "/delete/").concat(hubConfig.address, "/").concat(filename), { - method: 'DELETE', - headers: { - Authorization: "bearer ".concat(hubConfig.token) - } - }); - - case 3: - response = _context2.sent; - - if (response.ok) { - _context2.next = 22; - break; - } - - responseMsg = ''; - _context2.prev = 6; - _context2.next = 9; - return response.text(); - - case 9: - responseMsg = _context2.sent; - _context2.next = 15; - break; - - case 12: - _context2.prev = 12; - _context2.t0 = _context2["catch"](6); - logger_1.Logger.debug("Error getting bad http response text: ".concat(_context2.t0)); - - case 15: - errorMsg = 'Error deleting file from Gaia hub: ' + "".concat(response.status, " ").concat(response.statusText, ": ").concat(responseMsg); - logger_1.Logger.error(errorMsg); - - if (!(response.status === 404)) { - _context2.next = 21; - break; - } - - throw new errors_1.FileNotFound(errorMsg); - - case 21: - throw new Error(errorMsg); - - case 22: - case "end": - return _context2.stop(); - } - } - }, _callee2, null, [[6, 12]]); - })); -} - -exports.deleteFromGaiaHub = deleteFromGaiaHub; -/** - * - * @param filename - * @param hubConfig - * - * @ignore - */ - -function getFullReadUrl(filename, hubConfig) { - return Promise.resolve("".concat(hubConfig.url_prefix).concat(hubConfig.address, "/").concat(filename)); -} - -exports.getFullReadUrl = getFullReadUrl; -/** - * - * @param challengeText - * @param signerKeyHex - * - * @ignore - */ - -function makeLegacyAuthToken(challengeText, signerKeyHex) { - // only sign specific legacy auth challenges. - var parsedChallenge; - - try { - parsedChallenge = JSON.parse(challengeText); - } catch (err) { - throw new Error('Failed in parsing legacy challenge text from the gaia hub.'); - } - - if (parsedChallenge[0] === 'gaiahub' && parsedChallenge[3] === 'blockstack_storage_please_sign') { - var signer = utils_1.hexStringToECPair(signerKeyHex + (signerKeyHex.length === 64 ? '01' : '')); - var digest = bitcoinjs_lib_1.crypto.sha256(Buffer.from(challengeText)); - var signatureBuffer = signer.sign(digest); - var signatureWithHash = bitcoinjs_lib_1.script.signature.encode(signatureBuffer, bitcoinjs_lib_1.Transaction.SIGHASH_NONE); // We only want the DER encoding so remove the sighash version byte at the end. - // See: https://github.com/bitcoinjs/bitcoinjs-lib/issues/1241#issuecomment-428062912 - - var signature = signatureWithHash.toString('hex').slice(0, -2); - var publickey = keys_1.getPublicKeyFromPrivate(signerKeyHex); - var token = Buffer.from(JSON.stringify({ - publickey: publickey, - signature: signature - })).toString('base64'); - return token; - } else { - throw new Error('Failed to connect to legacy gaia hub. If you operate this hub, please update.'); - } -} -/** - * - * @param hubInfo - * @param signerKeyHex - * @param hubUrl - * @param associationToken - * - * @ignore - */ - - -function makeV1GaiaAuthToken(hubInfo, signerKeyHex, hubUrl, associationToken) { - var challengeText = hubInfo.challenge_text; - var handlesV1Auth = hubInfo.latest_auth_version && parseInt(hubInfo.latest_auth_version.slice(1), 10) >= 1; - var iss = keys_1.getPublicKeyFromPrivate(signerKeyHex); - - if (!handlesV1Auth) { - return makeLegacyAuthToken(challengeText, signerKeyHex); - } - - var salt = crypto_1.default.randomBytes(16).toString('hex'); - var payload = { - gaiaChallenge: challengeText, - hubUrl: hubUrl, - iss: iss, - salt: salt, - associationToken: associationToken - }; - var token = new jsontokens_1.TokenSigner('ES256K', signerKeyHex).sign(payload); - return "v1:".concat(token); -} -/** - * - * @ignore - */ - - -function connectToGaiaHub(gaiaHubUrl, challengeSignerHex, associationToken) { - return __awaiter(this, void 0, void 0, - /*#__PURE__*/ - regeneratorRuntime.mark(function _callee3() { - var response, hubInfo, readURL, token, address; - return regeneratorRuntime.wrap(function _callee3$(_context3) { - while (1) { - switch (_context3.prev = _context3.next) { - case 0: - logger_1.Logger.debug("connectToGaiaHub: ".concat(gaiaHubUrl, "/hub_info")); - _context3.next = 3; - return fetchUtil_1.fetchPrivate("".concat(gaiaHubUrl, "/hub_info")); - - case 3: - response = _context3.sent; - _context3.next = 6; - return response.json(); - - case 6: - hubInfo = _context3.sent; - readURL = hubInfo.read_url_prefix; - token = makeV1GaiaAuthToken(hubInfo, challengeSignerHex, gaiaHubUrl, associationToken); - address = utils_1.ecPairToAddress(utils_1.hexStringToECPair(challengeSignerHex + (challengeSignerHex.length === 64 ? '01' : ''))); - return _context3.abrupt("return", { - url_prefix: readURL, - address: address, - token: token, - server: gaiaHubUrl - }); - - case 11: - case "end": - return _context3.stop(); - } - } - }, _callee3); - })); -} - -exports.connectToGaiaHub = connectToGaiaHub; -/** - * - * @param gaiaHubUrl - * @param appPrivateKey - * - * @ignore - */ - -function getBucketUrl(gaiaHubUrl, appPrivateKey) { - return __awaiter(this, void 0, void 0, - /*#__PURE__*/ - regeneratorRuntime.mark(function _callee4() { - var challengeSigner, response, responseText, responseJSON, readURL, address, bucketUrl; - return regeneratorRuntime.wrap(function _callee4$(_context4) { - while (1) { - switch (_context4.prev = _context4.next) { - case 0: - challengeSigner = bitcoinjs_lib_1.ECPair.fromPrivateKey(Buffer.from(appPrivateKey, 'hex')); - _context4.next = 3; - return fetchUtil_1.fetchPrivate("".concat(gaiaHubUrl, "/hub_info")); - - case 3: - response = _context4.sent; - _context4.next = 6; - return response.text(); - - case 6: - responseText = _context4.sent; - responseJSON = JSON.parse(responseText); - readURL = responseJSON.read_url_prefix; - address = utils_1.ecPairToAddress(challengeSigner); - bucketUrl = "".concat(readURL).concat(address, "/"); - return _context4.abrupt("return", bucketUrl); - - case 12: - case "end": - return _context4.stop(); - } - } - }, _callee4); - })); -} - -exports.getBucketUrl = getBucketUrl; -},{"bitcoinjs-lib":"Bcue","crypto":"mRF4","jsontokens":"bYjQ","../utils":"dEjD","../fetchUtil":"bSeT","../keys":"qabb","../logger":"qjRs","../errors":"V7fS","buffer":"dskh"}],"iZFk":[function(require,module,exports) { -'use strict'; - -Object.defineProperty(exports, "__esModule", { - value: true -}); -exports.getZoneFileTemplate = getZoneFileTemplate; - -function getZoneFileTemplate() { - return '{$origin}\n\ -{$ttl}\n\ -\n\ -; SOA Record\n\ -{name} {ttl} IN SOA {mname}{rname}(\n\ -{serial} ;serial\n\ -{refresh} ;refresh\n\ -{retry} ;retry\n\ -{expire} ;expire\n\ -{minimum} ;minimum ttl\n\ -)\n\ -\n\ -; NS Records\n\ -{ns}\n\ -\n\ -; MX Records\n\ -{mx}\n\ -\n\ -; A Records\n\ -{a}\n\ -\n\ -; AAAA Records\n\ -{aaaa}\n\ -\n\ -; CNAME Records\n\ -{cname}\n\ -\n\ -; PTR Records\n\ -{ptr}\n\ -\n\ -; TXT Records\n\ -{txt}\n\ -\n\ -; SRV Records\n\ -{srv}\n\ -\n\ -; SPF Records\n\ -{spf}\n\ -\n\ -; URI Records\n\ -{uri}\n\ -'; -} -},{}],"NxOW":[function(require,module,exports) { -'use strict'; - -Object.defineProperty(exports, "__esModule", { - value: true -}); -exports.makeZoneFile = makeZoneFile; - -var _zoneFileTemplate = require("./zoneFileTemplate"); - -function makeZoneFile(jsonZoneFile, template = (0, _zoneFileTemplate.getZoneFileTemplate)()) { - template = processOrigin(jsonZoneFile['$origin'], template); - template = processTTL(jsonZoneFile['$ttl'], template); - template = processSOA(jsonZoneFile['soa'], template); - template = processNS(jsonZoneFile['ns'], template); - template = processA(jsonZoneFile['a'], template); - template = processAAAA(jsonZoneFile['aaaa'], template); - template = processCNAME(jsonZoneFile['cname'], template); - template = processMX(jsonZoneFile['mx'], template); - template = processPTR(jsonZoneFile['ptr'], template); - template = processTXT(jsonZoneFile['txt'], template); - template = processSRV(jsonZoneFile['srv'], template); - template = processSPF(jsonZoneFile['spf'], template); - template = processURI(jsonZoneFile['uri'], template); - template = processValues(jsonZoneFile, template); - return template.replace(/\n{2,}/gim, '\n\n'); -} - -; - -function processOrigin(data, template) { - let ret = ''; - - if (typeof data !== 'undefined') { - ret += '$ORIGIN ' + data; - } - - return template.replace('{$origin}', ret); -} - -; - -function processTTL(data, template) { - let ret = ''; - - if (typeof data !== 'undefined') { - ret += '$TTL ' + data; - } - - return template.replace('{$ttl}', ret); -} - -; - -function processSOA(data, template) { - let ret = template; - - if (typeof data !== 'undefined') { - data.name = data.name || '@'; - data.ttl = data.ttl || ''; - - for (const key in data) { - const value = data[key]; - ret = ret.replace('{' + key + '}', value + '\t'); - } - } - - return ret; -} - -; - -function processNS(data, template) { - let ret = ''; - - if (data) { - for (const record of data) { - ret += (record.name || '@') + '\t'; - if (record.ttl) ret += record.ttl + '\t'; - ret += 'IN\tNS\t' + record.host + '\n'; - } - } - - return template.replace('{ns}', ret); -} - -; - -function processA(data, template) { - let ret = ''; - - if (data) { - for (const record of data) { - ret += (record.name || '@') + '\t'; - if (record.ttl) ret += record.ttl + '\t'; - ret += 'IN\tA\t' + record.ip + '\n'; - } - } - - return template.replace('{a}', ret); -} - -; - -function processAAAA(data, template) { - let ret = ''; - - if (data) { - for (const record of data) { - ret += (record.name || '@') + '\t'; - if (record.ttl) ret += record.ttl + '\t'; - ret += 'IN\tAAAA\t' + record.ip + '\n'; - } - } - - return template.replace('{aaaa}', ret); -} - -; - -function processCNAME(data, template) { - let ret = ''; - - if (data) { - for (const record of data) { - ret += (record.name || '@') + '\t'; - if (record.ttl) ret += record.ttl + '\t'; - ret += 'IN\tCNAME\t' + record.alias + '\n'; - } - } - - return template.replace('{cname}', ret); -} - -; - -function processMX(data, template) { - let ret = ''; - - if (data) { - for (const record of data) { - ret += (record.name || '@') + '\t'; - if (record.ttl) ret += record.ttl + '\t'; - ret += 'IN\tMX\t' + record.preference + '\t' + record.host + '\n'; - } - } - - return template.replace('{mx}', ret); -} - -; - -function processPTR(data, template) { - let ret = ''; - - if (data) { - for (const record of data) { - ret += (record.name || '@') + '\t'; - if (record.ttl) ret += record.ttl + '\t'; - ret += 'IN\tPTR\t' + record.host + '\n'; - } - } - - return template.replace('{ptr}', ret); -} - -; - -function processTXT(data, template) { - let ret = ''; - - if (data) { - for (const record of data) { - ret += (record.name || '@') + '\t'; - if (record.ttl) ret += record.ttl + '\t'; - ret += 'IN\tTXT\t'; - const txtData = record.txt; - - if (typeof txtData === 'string') { - ret += '"' + txtData + '"'; - } else if (txtData instanceof Array) { - ret += txtData.map(function (datum) { - return '"' + datum + '"'; - }).join(' '); - } - - ret += '\n'; - } - } - - return template.replace('{txt}', ret); -} - -; - -function processSRV(data, template) { - let ret = ''; - - if (data) { - for (const record of data) { - ret += (record.name || '@') + '\t'; - if (record.ttl) ret += record.ttl + '\t'; - ret += 'IN\tSRV\t' + record.priority + '\t'; - ret += record.weight + '\t'; - ret += record.port + '\t'; - ret += record.target + '\n'; - } - } - - return template.replace('{srv}', ret); -} - -; - -function processSPF(data, template) { - let ret = ''; - - if (data) { - for (const record of data) { - ret += (record.name || '@') + '\t'; - if (record.ttl) ret += record.ttl + '\t'; - ret += 'IN\tSPF\t' + record.data + '\n'; - } - } - - return template.replace('{spf}', ret); -} - -; - -function processURI(data, template) { - let ret = ''; - - if (data) { - for (const record of data) { - ret += (record.name || '@') + '\t'; - if (record.ttl) ret += record.ttl + '\t'; - ret += 'IN\tURI\t' + record.priority + '\t'; - ret += record.weight + '\t'; - ret += '"' + record.target + '"\n'; - } - } - - return template.replace('{uri}', ret); -} - -; - -function processValues(jsonZoneFile, template) { - template = template.replace('{zone}', jsonZoneFile['$origin'] || (jsonZoneFile['soa'] ? jsonZoneFile['soa']['name'] : false) || ''); - template = template.replace('{datetime}', new Date().toISOString()); - const time = Math.round(Date.now() / 1000); - return template.replace('{time}', `${time}`); -} - -; -},{"./zoneFileTemplate":"iZFk"}],"hORT":[function(require,module,exports) { -'use strict'; - -Object.defineProperty(exports, "__esModule", { - value: true -}); -exports.parseZoneFile = parseZoneFile; - -function parseZoneFile(text) { - text = removeComments(text); - text = flatten(text); - return parseRRs(text); -} - -; - -function removeComments(text) { - const re = /(^|[^\\]);.*/g; - return text.replace(re, function (m, g1) { - return g1 ? g1 : ''; // if g1 is set/matched, re-insert it, else remove - }); -} - -function flatten(text) { - const captured = []; - const re = /\([\s\S]*?\)/gim; - let match = re.exec(text); - - while (match !== null) { - const replacement = match[0].replace(/\s+/gm, ' '); - captured.push({ - match, - replacement - }); // captured Text, index, input - - match = re.exec(text); - } - - const arrText = text.split(''); - - for (const cur of captured) { - const { - match, - replacement - } = cur; - arrText.splice(match.index, match[0].length, replacement); - } - - return arrText.join('').replace(/\(|\)/gim, ' '); -} - -function parseRRs(text) { - const ret = {}; - const rrs = text.split('\n'); - - for (const rr of rrs) { - if (!rr || !rr.trim()) { - continue; - } - - const uRR = rr.toUpperCase(); - - if (/\s+TXT\s+/.test(uRR)) { - ret.txt = ret.txt || []; - ret.txt.push(parseTXT(rr)); - } else if (uRR.indexOf('$ORIGIN') === 0) { - ret.$origin = rr.split(/\s+/g)[1]; - } else if (uRR.indexOf('$TTL') === 0) { - ret.$ttl = parseInt(rr.split(/\s+/g)[1], 10); - } else if (/\s+SOA\s+/.test(uRR)) { - ret.soa = parseSOA(rr); - } else if (/\s+NS\s+/.test(uRR)) { - ret.ns = ret.ns || []; - ret.ns.push(parseNS(rr)); - } else if (/\s+A\s+/.test(uRR)) { - ret.a = ret.a || []; - ret.a.push(parseA(rr, ret.a)); - } else if (/\s+AAAA\s+/.test(uRR)) { - ret.aaaa = ret.aaaa || []; - ret.aaaa.push(parseAAAA(rr)); - } else if (/\s+CNAME\s+/.test(uRR)) { - ret.cname = ret.cname || []; - ret.cname.push(parseCNAME(rr)); - } else if (/\s+MX\s+/.test(uRR)) { - ret.mx = ret.mx || []; - ret.mx.push(parseMX(rr)); - } else if (/\s+PTR\s+/.test(uRR)) { - ret.ptr = ret.ptr || []; - ret.ptr.push(parsePTR(rr, ret.ptr, ret.$origin)); - } else if (/\s+SRV\s+/.test(uRR)) { - ret.srv = ret.srv || []; - ret.srv.push(parseSRV(rr)); - } else if (/\s+SPF\s+/.test(uRR)) { - ret.spf = ret.spf || []; - ret.spf.push(parseSPF(rr)); - } else if (/\s+URI\s+/.test(uRR)) { - ret.uri = ret.uri || []; - ret.uri.push(parseURI(rr)); - } - } - - return ret; -} - -function parseSOA(rr) { - const soa = {}; - const rrTokens = rr.trim().split(/\s+/g); - const l = rrTokens.length; - soa.name = rrTokens[0]; - soa.minimum = parseInt(rrTokens[l - 1], 10); - soa.expire = parseInt(rrTokens[l - 2], 10); - soa.retry = parseInt(rrTokens[l - 3], 10); - soa.refresh = parseInt(rrTokens[l - 4], 10); - soa.serial = parseInt(rrTokens[l - 5], 10); - soa.rname = rrTokens[l - 6]; - soa.mname = rrTokens[l - 7]; - if (!isNaN(rrTokens[1])) soa.ttl = parseInt(rrTokens[1], 10); - return soa; -} - -function parseNS(rr) { - const rrTokens = rr.trim().split(/\s+/g); - const l = rrTokens.length; - const result = { - name: rrTokens[0], - host: rrTokens[l - 1] - }; - if (!isNaN(rrTokens[1])) result.ttl = parseInt(rrTokens[1], 10); - return result; -} - -function parseA(rr, recordsSoFar) { - const rrTokens = rr.trim().split(/\s+/g); - const urrTokens = rr.trim().toUpperCase().split(/\s+/g); - const l = rrTokens.length; - const result = { - name: rrTokens[0], - ip: rrTokens[l - 1] - }; - - if (urrTokens.lastIndexOf('A') === 0) { - if (recordsSoFar.length) { - result.name = recordsSoFar[recordsSoFar.length - 1].name; - } else { - result.name = '@'; - } - } - - if (!isNaN(rrTokens[1])) result.ttl = parseInt(rrTokens[1], 10); - return result; -} - -function parseAAAA(rr) { - const rrTokens = rr.trim().split(/\s+/g); - const l = rrTokens.length; - const result = { - name: rrTokens[0], - ip: rrTokens[l - 1] - }; - if (!isNaN(rrTokens[1])) result.ttl = parseInt(rrTokens[1], 10); - return result; -} - -function parseCNAME(rr) { - const rrTokens = rr.trim().split(/\s+/g); - const l = rrTokens.length; - const result = { - name: rrTokens[0], - alias: rrTokens[l - 1] - }; - if (!isNaN(rrTokens[1])) result.ttl = parseInt(rrTokens[1], 10); - return result; -} - -function parseMX(rr) { - const rrTokens = rr.trim().split(/\s+/g); - const l = rrTokens.length; - const result = { - name: rrTokens[0], - preference: parseInt(rrTokens[l - 2], 10), - host: rrTokens[l - 1] - }; - if (!isNaN(rrTokens[1])) result.ttl = parseInt(rrTokens[1], 10); - return result; -} - -function parseTXT(rr) { - const rrTokens = rr.trim().match(/[^\s\"']+|\"[^\"]*\"|'[^']*'/g); - if (!rrTokens) throw new Error('Failure to tokenize TXT record'); - const l = rrTokens.length; - const indexTXT = rrTokens.indexOf('TXT'); - - function stripText(txt) { - if (txt.indexOf('\"') > -1) { - txt = txt.split('\"')[1]; - } - - if (txt.indexOf('"') > -1) { - txt = txt.split('"')[1]; - } - - return txt; - } - - let tokenTxt; - - if (l - indexTXT - 1 > 1) { - tokenTxt = rrTokens.slice(indexTXT + 1).map(stripText); - } else { - tokenTxt = stripText(rrTokens[l - 1]); - } - - const result = { - name: rrTokens[0], - txt: tokenTxt - }; - if (!isNaN(rrTokens[1])) result.ttl = parseInt(rrTokens[1], 10); - return result; -} - -function parsePTR(rr, recordsSoFar, currentOrigin) { - const rrTokens = rr.trim().split(/\s+/g); - const urrTokens = rr.trim().toUpperCase().split(/\s+/g); - - if (urrTokens.lastIndexOf('PTR') === 0 && recordsSoFar[recordsSoFar.length - 1]) { - rrTokens.unshift(recordsSoFar[recordsSoFar.length - 1].name); - } - - const l = rrTokens.length; - const result = { - name: rrTokens[0], - fullname: rrTokens[0] + '.' + currentOrigin, - host: rrTokens[l - 1] - }; - if (!isNaN(rrTokens[1])) result.ttl = parseInt(rrTokens[1], 10); - return result; -} - -function parseSRV(rr) { - const rrTokens = rr.trim().split(/\s+/g); - const l = rrTokens.length; - const result = { - name: rrTokens[0], - target: rrTokens[l - 1], - priority: parseInt(rrTokens[l - 4], 10), - weight: parseInt(rrTokens[l - 3], 10), - port: parseInt(rrTokens[l - 2], 10) - }; - if (!isNaN(rrTokens[1])) result.ttl = parseInt(rrTokens[1], 10); - return result; -} - -function parseSPF(rr) { - const rrTokens = rr.trim().split(/\s+/g); - const result = { - name: rrTokens[0], - data: '' - }; - let l = rrTokens.length; - - while (l-- > 4) { - result.data = rrTokens[l] + ' ' + result.data.trim(); - } - - if (!isNaN(rrTokens[1])) result.ttl = parseInt(rrTokens[1], 10); - return result; -} - -function parseURI(rr) { - const rrTokens = rr.trim().split(/\s+/g); - const l = rrTokens.length; - const result = { - name: rrTokens[0], - target: rrTokens[l - 1].replace(/"/g, ''), - priority: parseInt(rrTokens[l - 3], 10), - weight: parseInt(rrTokens[l - 2], 10) - }; - if (!isNaN(rrTokens[1])) result.ttl = parseInt(rrTokens[1], 10); - return result; -} -},{}],"pQTi":[function(require,module,exports) { -"use strict"; - -Object.defineProperty(exports, "__esModule", { - value: true -}); -exports.ZoneFile = void 0; - -var _makeZoneFile = require("./makeZoneFile"); - -var _parseZoneFile = require("./parseZoneFile"); - -class ZoneFile { - constructor(zoneFile) { - if (typeof zoneFile === 'object') { - this.jsonZoneFile = JSON.parse(JSON.stringify(zoneFile)); - } else if (typeof zoneFile === 'string') { - this.jsonZoneFile = (0, _parseZoneFile.parseZoneFile)(zoneFile); - } - } - - toJSON() { - return this.jsonZoneFile; - } - - toString() { - return (0, _makeZoneFile.makeZoneFile)(this.toJSON()); - } - -} - -exports.ZoneFile = ZoneFile; -},{"./makeZoneFile":"NxOW","./parseZoneFile":"hORT"}],"jTHD":[function(require,module,exports) { -'use strict'; - -Object.defineProperty(exports, "__esModule", { - value: true -}); -Object.defineProperty(exports, "makeZoneFile", { - enumerable: true, - get: function () { - return _makeZoneFile.makeZoneFile; - } -}); -Object.defineProperty(exports, "parseZoneFile", { - enumerable: true, - get: function () { - return _parseZoneFile.parseZoneFile; - } -}); -Object.defineProperty(exports, "ZoneFile", { - enumerable: true, - get: function () { - return _zoneFile.ZoneFile; - } -}); - -var _makeZoneFile = require("./makeZoneFile"); - -var _parseZoneFile = require("./parseZoneFile"); - -var _zoneFile = require("./zoneFile"); -},{"./makeZoneFile":"NxOW","./parseZoneFile":"hORT","./zoneFile":"pQTi"}],"cxOY":[function(require,module,exports) { -var global = arguments[3]; -var process = require("process"); -var define; -/*! - * async - * https://github.com/caolan/async - * - * Copyright 2010-2014 Caolan McMahon - * Released under the MIT license - */ -(function () { - - var async = {}; - function noop() {} - function identity(v) { - return v; - } - function toBool(v) { - return !!v; - } - function notId(v) { - return !v; - } - - // global on the server, window in the browser - var previous_async; - - // Establish the root object, `window` (`self`) in the browser, `global` - // on the server, or `this` in some virtual machines. We use `self` - // instead of `window` for `WebWorker` support. - var root = typeof self === 'object' && self.self === self && self || - typeof global === 'object' && global.global === global && global || - this; - - if (root != null) { - previous_async = root.async; - } - - async.noConflict = function () { - root.async = previous_async; - return async; - }; - - function only_once(fn) { - return function() { - if (fn === null) throw new Error("Callback was already called."); - fn.apply(this, arguments); - fn = null; - }; - } - - function _once(fn) { - return function() { - if (fn === null) return; - fn.apply(this, arguments); - fn = null; - }; - } - - //// cross-browser compatiblity functions //// - - var _toString = Object.prototype.toString; - - var _isArray = Array.isArray || function (obj) { - return _toString.call(obj) === '[object Array]'; - }; - - // Ported from underscore.js isObject - var _isObject = function(obj) { - var type = typeof obj; - return type === 'function' || type === 'object' && !!obj; - }; - - function _isArrayLike(arr) { - return _isArray(arr) || ( - // has a positive integer length property - typeof arr.length === "number" && - arr.length >= 0 && - arr.length % 1 === 0 - ); - } - - function _arrayEach(arr, iterator) { - var index = -1, - length = arr.length; - - while (++index < length) { - iterator(arr[index], index, arr); - } - } - - function _map(arr, iterator) { - var index = -1, - length = arr.length, - result = Array(length); - - while (++index < length) { - result[index] = iterator(arr[index], index, arr); - } - return result; - } - - function _range(count) { - return _map(Array(count), function (v, i) { return i; }); - } - - function _reduce(arr, iterator, memo) { - _arrayEach(arr, function (x, i, a) { - memo = iterator(memo, x, i, a); - }); - return memo; - } - - function _forEachOf(object, iterator) { - _arrayEach(_keys(object), function (key) { - iterator(object[key], key); - }); - } - - function _indexOf(arr, item) { - for (var i = 0; i < arr.length; i++) { - if (arr[i] === item) return i; - } - return -1; - } - - var _keys = Object.keys || function (obj) { - var keys = []; - for (var k in obj) { - if (obj.hasOwnProperty(k)) { - keys.push(k); - } - } - return keys; - }; - - function _keyIterator(coll) { - var i = -1; - var len; - var keys; - if (_isArrayLike(coll)) { - len = coll.length; - return function next() { - i++; - return i < len ? i : null; - }; - } else { - keys = _keys(coll); - len = keys.length; - return function next() { - i++; - return i < len ? keys[i] : null; - }; - } - } - - // Similar to ES6's rest param (http://ariya.ofilabs.com/2013/03/es6-and-rest-parameter.html) - // This accumulates the arguments passed into an array, after a given index. - // From underscore.js (https://github.com/jashkenas/underscore/pull/2140). - function _restParam(func, startIndex) { - startIndex = startIndex == null ? func.length - 1 : +startIndex; - return function() { - var length = Math.max(arguments.length - startIndex, 0); - var rest = Array(length); - for (var index = 0; index < length; index++) { - rest[index] = arguments[index + startIndex]; - } - switch (startIndex) { - case 0: return func.call(this, rest); - case 1: return func.call(this, arguments[0], rest); - } - // Currently unused but handle cases outside of the switch statement: - // var args = Array(startIndex + 1); - // for (index = 0; index < startIndex; index++) { - // args[index] = arguments[index]; - // } - // args[startIndex] = rest; - // return func.apply(this, args); - }; - } - - function _withoutIndex(iterator) { - return function (value, index, callback) { - return iterator(value, callback); - }; - } - - //// exported async module functions //// - - //// nextTick implementation with browser-compatible fallback //// - - // capture the global reference to guard against fakeTimer mocks - var _setImmediate = typeof setImmediate === 'function' && setImmediate; - - var _delay = _setImmediate ? function(fn) { - // not a direct alias for IE10 compatibility - _setImmediate(fn); - } : function(fn) { - setTimeout(fn, 0); - }; - - if (typeof process === 'object' && typeof process.nextTick === 'function') { - async.nextTick = process.nextTick; - } else { - async.nextTick = _delay; - } - async.setImmediate = _setImmediate ? _delay : async.nextTick; - - - async.forEach = - async.each = function (arr, iterator, callback) { - return async.eachOf(arr, _withoutIndex(iterator), callback); - }; - - async.forEachSeries = - async.eachSeries = function (arr, iterator, callback) { - return async.eachOfSeries(arr, _withoutIndex(iterator), callback); - }; - - - async.forEachLimit = - async.eachLimit = function (arr, limit, iterator, callback) { - return _eachOfLimit(limit)(arr, _withoutIndex(iterator), callback); - }; - - async.forEachOf = - async.eachOf = function (object, iterator, callback) { - callback = _once(callback || noop); - object = object || []; - - var iter = _keyIterator(object); - var key, completed = 0; - - while ((key = iter()) != null) { - completed += 1; - iterator(object[key], key, only_once(done)); - } - - if (completed === 0) callback(null); - - function done(err) { - completed--; - if (err) { - callback(err); - } - // Check key is null in case iterator isn't exhausted - // and done resolved synchronously. - else if (key === null && completed <= 0) { - callback(null); - } - } - }; - - async.forEachOfSeries = - async.eachOfSeries = function (obj, iterator, callback) { - callback = _once(callback || noop); - obj = obj || []; - var nextKey = _keyIterator(obj); - var key = nextKey(); - function iterate() { - var sync = true; - if (key === null) { - return callback(null); - } - iterator(obj[key], key, only_once(function (err) { - if (err) { - callback(err); - } - else { - key = nextKey(); - if (key === null) { - return callback(null); - } else { - if (sync) { - async.setImmediate(iterate); - } else { - iterate(); - } - } - } - })); - sync = false; - } - iterate(); - }; - - - - async.forEachOfLimit = - async.eachOfLimit = function (obj, limit, iterator, callback) { - _eachOfLimit(limit)(obj, iterator, callback); - }; - - function _eachOfLimit(limit) { - - return function (obj, iterator, callback) { - callback = _once(callback || noop); - obj = obj || []; - var nextKey = _keyIterator(obj); - if (limit <= 0) { - return callback(null); - } - var done = false; - var running = 0; - var errored = false; - - (function replenish () { - if (done && running <= 0) { - return callback(null); - } - - while (running < limit && !errored) { - var key = nextKey(); - if (key === null) { - done = true; - if (running <= 0) { - callback(null); - } - return; - } - running += 1; - iterator(obj[key], key, only_once(function (err) { - running -= 1; - if (err) { - callback(err); - errored = true; - } - else { - replenish(); - } - })); - } - })(); - }; - } - - - function doParallel(fn) { - return function (obj, iterator, callback) { - return fn(async.eachOf, obj, iterator, callback); - }; - } - function doParallelLimit(fn) { - return function (obj, limit, iterator, callback) { - return fn(_eachOfLimit(limit), obj, iterator, callback); - }; - } - function doSeries(fn) { - return function (obj, iterator, callback) { - return fn(async.eachOfSeries, obj, iterator, callback); - }; - } - - function _asyncMap(eachfn, arr, iterator, callback) { - callback = _once(callback || noop); - arr = arr || []; - var results = _isArrayLike(arr) ? [] : {}; - eachfn(arr, function (value, index, callback) { - iterator(value, function (err, v) { - results[index] = v; - callback(err); - }); - }, function (err) { - callback(err, results); - }); - } - - async.map = doParallel(_asyncMap); - async.mapSeries = doSeries(_asyncMap); - async.mapLimit = doParallelLimit(_asyncMap); - - // reduce only has a series version, as doing reduce in parallel won't - // work in many situations. - async.inject = - async.foldl = - async.reduce = function (arr, memo, iterator, callback) { - async.eachOfSeries(arr, function (x, i, callback) { - iterator(memo, x, function (err, v) { - memo = v; - callback(err); - }); - }, function (err) { - callback(err, memo); - }); - }; - - async.foldr = - async.reduceRight = function (arr, memo, iterator, callback) { - var reversed = _map(arr, identity).reverse(); - async.reduce(reversed, memo, iterator, callback); - }; - - async.transform = function (arr, memo, iterator, callback) { - if (arguments.length === 3) { - callback = iterator; - iterator = memo; - memo = _isArray(arr) ? [] : {}; - } - - async.eachOf(arr, function(v, k, cb) { - iterator(memo, v, k, cb); - }, function(err) { - callback(err, memo); - }); - }; - - function _filter(eachfn, arr, iterator, callback) { - var results = []; - eachfn(arr, function (x, index, callback) { - iterator(x, function (v) { - if (v) { - results.push({index: index, value: x}); - } - callback(); - }); - }, function () { - callback(_map(results.sort(function (a, b) { - return a.index - b.index; - }), function (x) { - return x.value; - })); - }); - } - - async.select = - async.filter = doParallel(_filter); - - async.selectLimit = - async.filterLimit = doParallelLimit(_filter); - - async.selectSeries = - async.filterSeries = doSeries(_filter); - - function _reject(eachfn, arr, iterator, callback) { - _filter(eachfn, arr, function(value, cb) { - iterator(value, function(v) { - cb(!v); - }); - }, callback); - } - async.reject = doParallel(_reject); - async.rejectLimit = doParallelLimit(_reject); - async.rejectSeries = doSeries(_reject); - - function _createTester(eachfn, check, getResult) { - return function(arr, limit, iterator, cb) { - function done() { - if (cb) cb(getResult(false, void 0)); - } - function iteratee(x, _, callback) { - if (!cb) return callback(); - iterator(x, function (v) { - if (cb && check(v)) { - cb(getResult(true, x)); - cb = iterator = false; - } - callback(); - }); - } - if (arguments.length > 3) { - eachfn(arr, limit, iteratee, done); - } else { - cb = iterator; - iterator = limit; - eachfn(arr, iteratee, done); - } - }; - } - - async.any = - async.some = _createTester(async.eachOf, toBool, identity); - - async.someLimit = _createTester(async.eachOfLimit, toBool, identity); - - async.all = - async.every = _createTester(async.eachOf, notId, notId); - - async.everyLimit = _createTester(async.eachOfLimit, notId, notId); - - function _findGetResult(v, x) { - return x; - } - async.detect = _createTester(async.eachOf, identity, _findGetResult); - async.detectSeries = _createTester(async.eachOfSeries, identity, _findGetResult); - async.detectLimit = _createTester(async.eachOfLimit, identity, _findGetResult); - - async.sortBy = function (arr, iterator, callback) { - async.map(arr, function (x, callback) { - iterator(x, function (err, criteria) { - if (err) { - callback(err); - } - else { - callback(null, {value: x, criteria: criteria}); - } - }); - }, function (err, results) { - if (err) { - return callback(err); - } - else { - callback(null, _map(results.sort(comparator), function (x) { - return x.value; - })); - } - - }); - - function comparator(left, right) { - var a = left.criteria, b = right.criteria; - return a < b ? -1 : a > b ? 1 : 0; - } - }; - - async.auto = function (tasks, concurrency, callback) { - if (typeof arguments[1] === 'function') { - // concurrency is optional, shift the args. - callback = concurrency; - concurrency = null; - } - callback = _once(callback || noop); - var keys = _keys(tasks); - var remainingTasks = keys.length; - if (!remainingTasks) { - return callback(null); - } - if (!concurrency) { - concurrency = remainingTasks; - } - - var results = {}; - var runningTasks = 0; - - var hasError = false; - - var listeners = []; - function addListener(fn) { - listeners.unshift(fn); - } - function removeListener(fn) { - var idx = _indexOf(listeners, fn); - if (idx >= 0) listeners.splice(idx, 1); - } - function taskComplete() { - remainingTasks--; - _arrayEach(listeners.slice(0), function (fn) { - fn(); - }); - } - - addListener(function () { - if (!remainingTasks) { - callback(null, results); - } - }); - - _arrayEach(keys, function (k) { - if (hasError) return; - var task = _isArray(tasks[k]) ? tasks[k]: [tasks[k]]; - var taskCallback = _restParam(function(err, args) { - runningTasks--; - if (args.length <= 1) { - args = args[0]; - } - if (err) { - var safeResults = {}; - _forEachOf(results, function(val, rkey) { - safeResults[rkey] = val; - }); - safeResults[k] = args; - hasError = true; - - callback(err, safeResults); - } - else { - results[k] = args; - async.setImmediate(taskComplete); - } - }); - var requires = task.slice(0, task.length - 1); - // prevent dead-locks - var len = requires.length; - var dep; - while (len--) { - if (!(dep = tasks[requires[len]])) { - throw new Error('Has nonexistent dependency in ' + requires.join(', ')); - } - if (_isArray(dep) && _indexOf(dep, k) >= 0) { - throw new Error('Has cyclic dependencies'); - } - } - function ready() { - return runningTasks < concurrency && _reduce(requires, function (a, x) { - return (a && results.hasOwnProperty(x)); - }, true) && !results.hasOwnProperty(k); - } - if (ready()) { - runningTasks++; - task[task.length - 1](taskCallback, results); - } - else { - addListener(listener); - } - function listener() { - if (ready()) { - runningTasks++; - removeListener(listener); - task[task.length - 1](taskCallback, results); - } - } - }); - }; - - - - async.retry = function(times, task, callback) { - var DEFAULT_TIMES = 5; - var DEFAULT_INTERVAL = 0; - - var attempts = []; - - var opts = { - times: DEFAULT_TIMES, - interval: DEFAULT_INTERVAL - }; - - function parseTimes(acc, t){ - if(typeof t === 'number'){ - acc.times = parseInt(t, 10) || DEFAULT_TIMES; - } else if(typeof t === 'object'){ - acc.times = parseInt(t.times, 10) || DEFAULT_TIMES; - acc.interval = parseInt(t.interval, 10) || DEFAULT_INTERVAL; - } else { - throw new Error('Unsupported argument type for \'times\': ' + typeof t); - } - } - - var length = arguments.length; - if (length < 1 || length > 3) { - throw new Error('Invalid arguments - must be either (task), (task, callback), (times, task) or (times, task, callback)'); - } else if (length <= 2 && typeof times === 'function') { - callback = task; - task = times; - } - if (typeof times !== 'function') { - parseTimes(opts, times); - } - opts.callback = callback; - opts.task = task; - - function wrappedTask(wrappedCallback, wrappedResults) { - function retryAttempt(task, finalAttempt) { - return function(seriesCallback) { - task(function(err, result){ - seriesCallback(!err || finalAttempt, {err: err, result: result}); - }, wrappedResults); - }; - } - - function retryInterval(interval){ - return function(seriesCallback){ - setTimeout(function(){ - seriesCallback(null); - }, interval); - }; - } - - while (opts.times) { - - var finalAttempt = !(opts.times-=1); - attempts.push(retryAttempt(opts.task, finalAttempt)); - if(!finalAttempt && opts.interval > 0){ - attempts.push(retryInterval(opts.interval)); - } - } - - async.series(attempts, function(done, data){ - data = data[data.length - 1]; - (wrappedCallback || opts.callback)(data.err, data.result); - }); - } - - // If a callback is passed, run this as a controll flow - return opts.callback ? wrappedTask() : wrappedTask; - }; - - async.waterfall = function (tasks, callback) { - callback = _once(callback || noop); - if (!_isArray(tasks)) { - var err = new Error('First argument to waterfall must be an array of functions'); - return callback(err); - } - if (!tasks.length) { - return callback(); - } - function wrapIterator(iterator) { - return _restParam(function (err, args) { - if (err) { - callback.apply(null, [err].concat(args)); - } - else { - var next = iterator.next(); - if (next) { - args.push(wrapIterator(next)); - } - else { - args.push(callback); - } - ensureAsync(iterator).apply(null, args); - } - }); - } - wrapIterator(async.iterator(tasks))(); - }; - - function _parallel(eachfn, tasks, callback) { - callback = callback || noop; - var results = _isArrayLike(tasks) ? [] : {}; - - eachfn(tasks, function (task, key, callback) { - task(_restParam(function (err, args) { - if (args.length <= 1) { - args = args[0]; - } - results[key] = args; - callback(err); - })); - }, function (err) { - callback(err, results); - }); - } - - async.parallel = function (tasks, callback) { - _parallel(async.eachOf, tasks, callback); - }; - - async.parallelLimit = function(tasks, limit, callback) { - _parallel(_eachOfLimit(limit), tasks, callback); - }; - - async.series = function(tasks, callback) { - _parallel(async.eachOfSeries, tasks, callback); - }; - - async.iterator = function (tasks) { - function makeCallback(index) { - function fn() { - if (tasks.length) { - tasks[index].apply(null, arguments); - } - return fn.next(); - } - fn.next = function () { - return (index < tasks.length - 1) ? makeCallback(index + 1): null; - }; - return fn; - } - return makeCallback(0); - }; - - async.apply = _restParam(function (fn, args) { - return _restParam(function (callArgs) { - return fn.apply( - null, args.concat(callArgs) - ); - }); - }); - - function _concat(eachfn, arr, fn, callback) { - var result = []; - eachfn(arr, function (x, index, cb) { - fn(x, function (err, y) { - result = result.concat(y || []); - cb(err); - }); - }, function (err) { - callback(err, result); - }); - } - async.concat = doParallel(_concat); - async.concatSeries = doSeries(_concat); - - async.whilst = function (test, iterator, callback) { - callback = callback || noop; - if (test()) { - var next = _restParam(function(err, args) { - if (err) { - callback(err); - } else if (test.apply(this, args)) { - iterator(next); - } else { - callback.apply(null, [null].concat(args)); - } - }); - iterator(next); - } else { - callback(null); - } - }; - - async.doWhilst = function (iterator, test, callback) { - var calls = 0; - return async.whilst(function() { - return ++calls <= 1 || test.apply(this, arguments); - }, iterator, callback); - }; - - async.until = function (test, iterator, callback) { - return async.whilst(function() { - return !test.apply(this, arguments); - }, iterator, callback); - }; - - async.doUntil = function (iterator, test, callback) { - return async.doWhilst(iterator, function() { - return !test.apply(this, arguments); - }, callback); - }; - - async.during = function (test, iterator, callback) { - callback = callback || noop; - - var next = _restParam(function(err, args) { - if (err) { - callback(err); - } else { - args.push(check); - test.apply(this, args); - } - }); - - var check = function(err, truth) { - if (err) { - callback(err); - } else if (truth) { - iterator(next); - } else { - callback(null); - } - }; - - test(check); - }; - - async.doDuring = function (iterator, test, callback) { - var calls = 0; - async.during(function(next) { - if (calls++ < 1) { - next(null, true); - } else { - test.apply(this, arguments); - } - }, iterator, callback); - }; - - function _queue(worker, concurrency, payload) { - if (concurrency == null) { - concurrency = 1; - } - else if(concurrency === 0) { - throw new Error('Concurrency must not be zero'); - } - function _insert(q, data, pos, callback) { - if (callback != null && typeof callback !== "function") { - throw new Error("task callback must be a function"); - } - q.started = true; - if (!_isArray(data)) { - data = [data]; - } - if(data.length === 0 && q.idle()) { - // call drain immediately if there are no tasks - return async.setImmediate(function() { - q.drain(); - }); - } - _arrayEach(data, function(task) { - var item = { - data: task, - callback: callback || noop - }; - - if (pos) { - q.tasks.unshift(item); - } else { - q.tasks.push(item); - } - - if (q.tasks.length === q.concurrency) { - q.saturated(); - } - }); - async.setImmediate(q.process); - } - function _next(q, tasks) { - return function(){ - workers -= 1; - - var removed = false; - var args = arguments; - _arrayEach(tasks, function (task) { - _arrayEach(workersList, function (worker, index) { - if (worker === task && !removed) { - workersList.splice(index, 1); - removed = true; - } - }); - - task.callback.apply(task, args); - }); - if (q.tasks.length + workers === 0) { - q.drain(); - } - q.process(); - }; - } - - var workers = 0; - var workersList = []; - var q = { - tasks: [], - concurrency: concurrency, - payload: payload, - saturated: noop, - empty: noop, - drain: noop, - started: false, - paused: false, - push: function (data, callback) { - _insert(q, data, false, callback); - }, - kill: function () { - q.drain = noop; - q.tasks = []; - }, - unshift: function (data, callback) { - _insert(q, data, true, callback); - }, - process: function () { - while(!q.paused && workers < q.concurrency && q.tasks.length){ - - var tasks = q.payload ? - q.tasks.splice(0, q.payload) : - q.tasks.splice(0, q.tasks.length); - - var data = _map(tasks, function (task) { - return task.data; - }); - - if (q.tasks.length === 0) { - q.empty(); - } - workers += 1; - workersList.push(tasks[0]); - var cb = only_once(_next(q, tasks)); - worker(data, cb); - } - }, - length: function () { - return q.tasks.length; - }, - running: function () { - return workers; - }, - workersList: function () { - return workersList; - }, - idle: function() { - return q.tasks.length + workers === 0; - }, - pause: function () { - q.paused = true; - }, - resume: function () { - if (q.paused === false) { return; } - q.paused = false; - var resumeCount = Math.min(q.concurrency, q.tasks.length); - // Need to call q.process once per concurrent - // worker to preserve full concurrency after pause - for (var w = 1; w <= resumeCount; w++) { - async.setImmediate(q.process); - } - } - }; - return q; - } - - async.queue = function (worker, concurrency) { - var q = _queue(function (items, cb) { - worker(items[0], cb); - }, concurrency, 1); - - return q; - }; - - async.priorityQueue = function (worker, concurrency) { - - function _compareTasks(a, b){ - return a.priority - b.priority; - } - - function _binarySearch(sequence, item, compare) { - var beg = -1, - end = sequence.length - 1; - while (beg < end) { - var mid = beg + ((end - beg + 1) >>> 1); - if (compare(item, sequence[mid]) >= 0) { - beg = mid; - } else { - end = mid - 1; - } - } - return beg; - } - - function _insert(q, data, priority, callback) { - if (callback != null && typeof callback !== "function") { - throw new Error("task callback must be a function"); - } - q.started = true; - if (!_isArray(data)) { - data = [data]; - } - if(data.length === 0) { - // call drain immediately if there are no tasks - return async.setImmediate(function() { - q.drain(); - }); - } - _arrayEach(data, function(task) { - var item = { - data: task, - priority: priority, - callback: typeof callback === 'function' ? callback : noop - }; - - q.tasks.splice(_binarySearch(q.tasks, item, _compareTasks) + 1, 0, item); - - if (q.tasks.length === q.concurrency) { - q.saturated(); - } - async.setImmediate(q.process); - }); - } - - // Start with a normal queue - var q = async.queue(worker, concurrency); - - // Override push to accept second parameter representing priority - q.push = function (data, priority, callback) { - _insert(q, data, priority, callback); - }; - - // Remove unshift function - delete q.unshift; - - return q; - }; - - async.cargo = function (worker, payload) { - return _queue(worker, 1, payload); - }; - - function _console_fn(name) { - return _restParam(function (fn, args) { - fn.apply(null, args.concat([_restParam(function (err, args) { - if (typeof console === 'object') { - if (err) { - if (console.error) { - console.error(err); - } - } - else if (console[name]) { - _arrayEach(args, function (x) { - console[name](x); - }); - } - } - })])); - }); - } - async.log = _console_fn('log'); - async.dir = _console_fn('dir'); - /*async.info = _console_fn('info'); - async.warn = _console_fn('warn'); - async.error = _console_fn('error');*/ - - async.memoize = function (fn, hasher) { - var memo = {}; - var queues = {}; - var has = Object.prototype.hasOwnProperty; - hasher = hasher || identity; - var memoized = _restParam(function memoized(args) { - var callback = args.pop(); - var key = hasher.apply(null, args); - if (has.call(memo, key)) { - async.setImmediate(function () { - callback.apply(null, memo[key]); - }); - } - else if (has.call(queues, key)) { - queues[key].push(callback); - } - else { - queues[key] = [callback]; - fn.apply(null, args.concat([_restParam(function (args) { - memo[key] = args; - var q = queues[key]; - delete queues[key]; - for (var i = 0, l = q.length; i < l; i++) { - q[i].apply(null, args); - } - })])); - } - }); - memoized.memo = memo; - memoized.unmemoized = fn; - return memoized; - }; - - async.unmemoize = function (fn) { - return function () { - return (fn.unmemoized || fn).apply(null, arguments); - }; - }; - - function _times(mapper) { - return function (count, iterator, callback) { - mapper(_range(count), iterator, callback); - }; - } - - async.times = _times(async.map); - async.timesSeries = _times(async.mapSeries); - async.timesLimit = function (count, limit, iterator, callback) { - return async.mapLimit(_range(count), limit, iterator, callback); - }; - - async.seq = function (/* functions... */) { - var fns = arguments; - return _restParam(function (args) { - var that = this; - - var callback = args[args.length - 1]; - if (typeof callback == 'function') { - args.pop(); - } else { - callback = noop; - } - - async.reduce(fns, args, function (newargs, fn, cb) { - fn.apply(that, newargs.concat([_restParam(function (err, nextargs) { - cb(err, nextargs); - })])); - }, - function (err, results) { - callback.apply(that, [err].concat(results)); - }); - }); - }; - - async.compose = function (/* functions... */) { - return async.seq.apply(null, Array.prototype.reverse.call(arguments)); - }; - - - function _applyEach(eachfn) { - return _restParam(function(fns, args) { - var go = _restParam(function(args) { - var that = this; - var callback = args.pop(); - return eachfn(fns, function (fn, _, cb) { - fn.apply(that, args.concat([cb])); - }, - callback); - }); - if (args.length) { - return go.apply(this, args); - } - else { - return go; - } - }); - } - - async.applyEach = _applyEach(async.eachOf); - async.applyEachSeries = _applyEach(async.eachOfSeries); - - - async.forever = function (fn, callback) { - var done = only_once(callback || noop); - var task = ensureAsync(fn); - function next(err) { - if (err) { - return done(err); - } - task(next); - } - next(); - }; - - function ensureAsync(fn) { - return _restParam(function (args) { - var callback = args.pop(); - args.push(function () { - var innerArgs = arguments; - if (sync) { - async.setImmediate(function () { - callback.apply(null, innerArgs); - }); - } else { - callback.apply(null, innerArgs); - } - }); - var sync = true; - fn.apply(this, args); - sync = false; - }); - } - - async.ensureAsync = ensureAsync; - - async.constant = _restParam(function(values) { - var args = [null].concat(values); - return function (callback) { - return callback.apply(this, args); - }; - }); - - async.wrapSync = - async.asyncify = function asyncify(func) { - return _restParam(function (args) { - var callback = args.pop(); - var result; - try { - result = func.apply(this, args); - } catch (e) { - return callback(e); - } - // if result is Promise object - if (_isObject(result) && typeof result.then === "function") { - result.then(function(value) { - callback(null, value); - })["catch"](function(err) { - callback(err.message ? err : new Error(err)); - }); - } else { - callback(null, result); - } - }); - }; - - // Node.js - if (typeof module === 'object' && module.exports) { - module.exports = async; - } - // AMD / RequireJS - else if (typeof define === 'function' && define.amd) { - define([], function () { - return async; - }); - } - // included directly via