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