{"version":3,"sources":["webpack:///./node_modules/ecurve/lib/names.js","webpack:///./node_modules/ecurve/lib/point.js","webpack:///./node_modules/ecurve/lib/curve.js","webpack:///./node_modules/ecurve/lib/index.js"],"names":["BigInteger","curves","Curve","module","exports","name","curve","p","a","b","n","h","Gx","Gy","assert","Buffer","THREE","valueOf","Point","x","y","z","notStrictEqual","undefined","this","_zInv","compressed","Object","defineProperty","prototype","get","modInverse","multiply","zInv","mod","fromAffine","ONE","equals","other","isInfinity","subtract","signum","negate","add","x1","y1","x2","u","v","twice","infinity","v2","square","v3","x1v2","zu2","x3","shiftLeft","y3","z3","y1z1","y1sqz1","w","pow","k","e","neg","R","i","bitLength","hBit","testBit","eBit","multiplyTwo","j","Math","max","both","jBit","kBit","getEncoded","alloc","buffer","affineX","affineY","byteLength","pLength","allocUnsafe","writeUInt8","isEven","toBuffer","copy","decodeFrom","Q","type","readUInt8","floor","fromBuffer","slice","equal","length","isOdd","pointFromX","toString","G","ZERO","pOverFour","shiftRight","beta","modPow","isOnCurve","compareTo","lhs","rhs","validate","nQ","getCurveByName"],"mappings":"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","file":"vendor.ecurve~5881c2a3.8526e4c1337932c78ace.chunk.js","sourcesContent":["var BigInteger = require('bigi')\n\nvar curves = require('./curves.json')\nvar Curve = require('./curve')\n\nfunction getCurveByName (name) {\n var curve = curves[name]\n if (!curve) return null\n\n var p = new BigInteger(curve.p, 16)\n var a = new BigInteger(curve.a, 16)\n var b = new BigInteger(curve.b, 16)\n var n = new BigInteger(curve.n, 16)\n var h = new BigInteger(curve.h, 16)\n var Gx = new BigInteger(curve.Gx, 16)\n var Gy = new BigInteger(curve.Gy, 16)\n\n return new Curve(p, a, b, Gx, Gy, n, h)\n}\n\nmodule.exports = getCurveByName\n","var assert = require('assert')\nvar Buffer = require('safe-buffer').Buffer\nvar BigInteger = require('bigi')\n\nvar THREE = BigInteger.valueOf(3)\n\nfunction Point (curve, x, y, z) {\n assert.notStrictEqual(z, undefined, 'Missing Z coordinate')\n\n this.curve = curve\n this.x = x\n this.y = y\n this.z = z\n this._zInv = null\n\n this.compressed = true\n}\n\nObject.defineProperty(Point.prototype, 'zInv', {\n get: function () {\n if (this._zInv === null) {\n this._zInv = this.z.modInverse(this.curve.p)\n }\n\n return this._zInv\n }\n})\n\nObject.defineProperty(Point.prototype, 'affineX', {\n get: function () {\n return this.x.multiply(this.zInv).mod(this.curve.p)\n }\n})\n\nObject.defineProperty(Point.prototype, 'affineY', {\n get: function () {\n return this.y.multiply(this.zInv).mod(this.curve.p)\n }\n})\n\nPoint.fromAffine = function (curve, x, y) {\n return new Point(curve, x, y, BigInteger.ONE)\n}\n\nPoint.prototype.equals = function (other) {\n if (other === this) return true\n if (this.curve.isInfinity(this)) return this.curve.isInfinity(other)\n if (this.curve.isInfinity(other)) return this.curve.isInfinity(this)\n\n // u = Y2 * Z1 - Y1 * Z2\n var u = other.y.multiply(this.z).subtract(this.y.multiply(other.z)).mod(this.curve.p)\n\n if (u.signum() !== 0) return false\n\n // v = X2 * Z1 - X1 * Z2\n var v = other.x.multiply(this.z).subtract(this.x.multiply(other.z)).mod(this.curve.p)\n\n return v.signum() === 0\n}\n\nPoint.prototype.negate = function () {\n var y = this.curve.p.subtract(this.y)\n\n return new Point(this.curve, this.x, y, this.z)\n}\n\nPoint.prototype.add = function (b) {\n if (this.curve.isInfinity(this)) return b\n if (this.curve.isInfinity(b)) return this\n\n var x1 = this.x\n var y1 = this.y\n var x2 = b.x\n var y2 = b.y\n\n // u = Y2 * Z1 - Y1 * Z2\n var u = y2.multiply(this.z).subtract(y1.multiply(b.z)).mod(this.curve.p)\n // v = X2 * Z1 - X1 * Z2\n var v = x2.multiply(this.z).subtract(x1.multiply(b.z)).mod(this.curve.p)\n\n if (v.signum() === 0) {\n if (u.signum() === 0) {\n return this.twice() // this == b, so double\n }\n\n return this.curve.infinity // this = -b, so infinity\n }\n\n var v2 = v.square()\n var v3 = v2.multiply(v)\n var x1v2 = x1.multiply(v2)\n var zu2 = u.square().multiply(this.z)\n\n // x3 = v * (z2 * (z1 * u^2 - 2 * x1 * v^2) - v^3)\n var x3 = zu2.subtract(x1v2.shiftLeft(1)).multiply(b.z).subtract(v3).multiply(v).mod(this.curve.p)\n // y3 = z2 * (3 * x1 * u * v^2 - y1 * v^3 - z1 * u^3) + u * v^3\n var y3 = x1v2.multiply(THREE).multiply(u).subtract(y1.multiply(v3)).subtract(zu2.multiply(u)).multiply(b.z).add(u.multiply(v3)).mod(this.curve.p)\n // z3 = v^3 * z1 * z2\n var z3 = v3.multiply(this.z).multiply(b.z).mod(this.curve.p)\n\n return new Point(this.curve, x3, y3, z3)\n}\n\nPoint.prototype.twice = function () {\n if (this.curve.isInfinity(this)) return this\n if (this.y.signum() === 0) return this.curve.infinity\n\n var x1 = this.x\n var y1 = this.y\n\n var y1z1 = y1.multiply(this.z).mod(this.curve.p)\n var y1sqz1 = y1z1.multiply(y1).mod(this.curve.p)\n var a = this.curve.a\n\n // w = 3 * x1^2 + a * z1^2\n var w = x1.square().multiply(THREE)\n\n if (a.signum() !== 0) {\n w = w.add(this.z.square().multiply(a))\n }\n\n w = w.mod(this.curve.p)\n // x3 = 2 * y1 * z1 * (w^2 - 8 * x1 * y1^2 * z1)\n var x3 = w.square().subtract(x1.shiftLeft(3).multiply(y1sqz1)).shiftLeft(1).multiply(y1z1).mod(this.curve.p)\n // y3 = 4 * y1^2 * z1 * (3 * w * x1 - 2 * y1^2 * z1) - w^3\n var y3 = w.multiply(THREE).multiply(x1).subtract(y1sqz1.shiftLeft(1)).shiftLeft(2).multiply(y1sqz1).subtract(w.pow(3)).mod(this.curve.p)\n // z3 = 8 * (y1 * z1)^3\n var z3 = y1z1.pow(3).shiftLeft(3).mod(this.curve.p)\n\n return new Point(this.curve, x3, y3, z3)\n}\n\n// Simple NAF (Non-Adjacent Form) multiplication algorithm\n// TODO: modularize the multiplication algorithm\nPoint.prototype.multiply = function (k) {\n if (this.curve.isInfinity(this)) return this\n if (k.signum() === 0) return this.curve.infinity\n\n var e = k\n var h = e.multiply(THREE)\n\n var neg = this.negate()\n var R = this\n\n for (var i = h.bitLength() - 2; i > 0; --i) {\n var hBit = h.testBit(i)\n var eBit = e.testBit(i)\n\n R = R.twice()\n\n if (hBit !== eBit) {\n R = R.add(hBit ? this : neg)\n }\n }\n\n return R\n}\n\n// Compute this*j + x*k (simultaneous multiplication)\nPoint.prototype.multiplyTwo = function (j, x, k) {\n var i = Math.max(j.bitLength(), k.bitLength()) - 1\n var R = this.curve.infinity\n var both = this.add(x)\n\n while (i >= 0) {\n var jBit = j.testBit(i)\n var kBit = k.testBit(i)\n\n R = R.twice()\n\n if (jBit) {\n if (kBit) {\n R = R.add(both)\n } else {\n R = R.add(this)\n }\n } else if (kBit) {\n R = R.add(x)\n }\n --i\n }\n\n return R\n}\n\nPoint.prototype.getEncoded = function (compressed) {\n if (compressed == null) compressed = this.compressed\n if (this.curve.isInfinity(this)) return Buffer.alloc(1, 0) // Infinity point encoded is simply '00'\n\n var x = this.affineX\n var y = this.affineY\n var byteLength = this.curve.pLength\n var buffer\n\n // 0x02/0x03 | X\n if (compressed) {\n buffer = Buffer.allocUnsafe(1 + byteLength)\n buffer.writeUInt8(y.isEven() ? 0x02 : 0x03, 0)\n\n // 0x04 | X | Y\n } else {\n buffer = Buffer.allocUnsafe(1 + byteLength + byteLength)\n buffer.writeUInt8(0x04, 0)\n\n y.toBuffer(byteLength).copy(buffer, 1 + byteLength)\n }\n\n x.toBuffer(byteLength).copy(buffer, 1)\n\n return buffer\n}\n\nPoint.decodeFrom = function (curve, buffer) {\n var type = buffer.readUInt8(0)\n var compressed = (type !== 4)\n\n var byteLength = Math.floor((curve.p.bitLength() + 7) / 8)\n var x = BigInteger.fromBuffer(buffer.slice(1, 1 + byteLength))\n\n var Q\n if (compressed) {\n assert.equal(buffer.length, byteLength + 1, 'Invalid sequence length')\n assert(type === 0x02 || type === 0x03, 'Invalid sequence tag')\n\n var isOdd = (type === 0x03)\n Q = curve.pointFromX(isOdd, x)\n } else {\n assert.equal(buffer.length, 1 + byteLength + byteLength, 'Invalid sequence length')\n\n var y = BigInteger.fromBuffer(buffer.slice(1 + byteLength))\n Q = Point.fromAffine(curve, x, y)\n }\n\n Q.compressed = compressed\n return Q\n}\n\nPoint.prototype.toString = function () {\n if (this.curve.isInfinity(this)) return '(INFINITY)'\n\n return '(' + this.affineX.toString() + ',' + this.affineY.toString() + ')'\n}\n\nmodule.exports = Point\n","var assert = require('assert')\nvar BigInteger = require('bigi')\n\nvar Point = require('./point')\n\nfunction Curve (p, a, b, Gx, Gy, n, h) {\n this.p = p\n this.a = a\n this.b = b\n this.G = Point.fromAffine(this, Gx, Gy)\n this.n = n\n this.h = h\n\n this.infinity = new Point(this, null, null, BigInteger.ZERO)\n\n // result caching\n this.pOverFour = p.add(BigInteger.ONE).shiftRight(2)\n\n // determine size of p in bytes\n this.pLength = Math.floor((this.p.bitLength() + 7) / 8)\n}\n\nCurve.prototype.pointFromX = function (isOdd, x) {\n var alpha = x.pow(3).add(this.a.multiply(x)).add(this.b).mod(this.p)\n var beta = alpha.modPow(this.pOverFour, this.p) // XXX: not compatible with all curves\n\n var y = beta\n if (beta.isEven() ^ !isOdd) {\n y = this.p.subtract(y) // -y % p\n }\n\n return Point.fromAffine(this, x, y)\n}\n\nCurve.prototype.isInfinity = function (Q) {\n if (Q === this.infinity) return true\n\n return Q.z.signum() === 0 && Q.y.signum() !== 0\n}\n\nCurve.prototype.isOnCurve = function (Q) {\n if (this.isInfinity(Q)) return true\n\n var x = Q.affineX\n var y = Q.affineY\n var a = this.a\n var b = this.b\n var p = this.p\n\n // Check that xQ and yQ are integers in the interval [0, p - 1]\n if (x.signum() < 0 || x.compareTo(p) >= 0) return false\n if (y.signum() < 0 || y.compareTo(p) >= 0) return false\n\n // and check that y^2 = x^3 + ax + b (mod p)\n var lhs = y.square().mod(p)\n var rhs = x.pow(3).add(a.multiply(x)).add(b).mod(p)\n return lhs.equals(rhs)\n}\n\n/**\n * Validate an elliptic curve point.\n *\n * See SEC 1, section 3.2.2.1: Elliptic Curve Public Key Validation Primitive\n */\nCurve.prototype.validate = function (Q) {\n // Check Q != O\n assert(!this.isInfinity(Q), 'Point is at infinity')\n assert(this.isOnCurve(Q), 'Point is not on the curve')\n\n // Check nQ = O (where Q is a scalar multiple of G)\n var nQ = Q.multiply(this.n)\n assert(this.isInfinity(nQ), 'Point is not a scalar multiple of G')\n\n return true\n}\n\nmodule.exports = Curve\n","var Point = require('./point')\nvar Curve = require('./curve')\n\nvar getCurveByName = require('./names')\n\nmodule.exports = {\n Curve: Curve,\n Point: Point,\n getCurveByName: getCurveByName\n}\n"],"sourceRoot":""}