{"version":3,"sources":["webpack:///./node_modules/elliptic/lib/elliptic/curves.js","webpack:///./node_modules/elliptic/lib/elliptic/curve/short.js","webpack:///./node_modules/elliptic/lib/elliptic/curve/mont.js"],"names":["pre","curves","exports","hash","curve","assert","PresetCurve","options","type","this","short","edwards","mont","g","n","validate","mul","isInfinity","defineCurve","name","Object","defineProperty","configurable","enumerable","get","value","prime","p","a","b","sha256","gRed","sha384","sha512","c","d","e","undefined","h","beta","lambda","basis","utils","BN","inherits","Base","ShortCurve","conf","call","toRed","red","tinv","two","redInvm","zeroA","fromRed","cmpn","threeA","sub","endo","_getEndomorphism","_endoWnafT1","Array","_endoWnafT2","Point","x","y","isRed","BasePoint","inf","forceRed","JPoint","z","one","zOne","module","prototype","modn","betas","_getEndoRoots","cmp","lambdas","redMul","map","vec","_getEndoBasis","num","ntinv","redNeg","s","redSqrt","redAdd","redSub","a0","b0","a1","b1","a2","b2","prevR","r","aprxSqrt","ushrn","Math","floor","bitLength","u","v","clone","x1","y1","x2","y2","i","q","div","neg","len1","sqr","add","negative","_endoSplit","k","v1","v2","c1","divRound","c2","p1","p2","q1","q2","k1","k2","pointFromX","odd","redSqr","redIAdd","zero","Error","isOdd","point","ax","rhs","redISub","_endoWnafMulAdd","points","coeffs","jacobianResult","npoints","ncoeffs","length","split","_getBeta","ineg","res","_wnafMulAdd","j","pointFromJSON","obj","fromJSON","precomputed","endoMul","naf","wnd","doubles","step","toJSON","slice","JSON","parse","obj2point","concat","inspect","toString","eq","dbl","nx","ny","ys1","dyinv","getX","getY","_hasDoubles","_fixedNafMul","_wnafMul","mulAdd","jmulAdd","_precompute","negate","toJ","jpoint","toP","zinv","zinv2","ay","pz2","z2","u1","u2","s1","s2","h2","h3","nz","mixedAdd","dblp","pow","jx","jy","jz","jz4","jyd","jx2","jyd2","jyd4","t1","t2","dny","_zeroDbl","_threeDbl","_dbl","xx","yy","yyyy","m","t","yyyy8","f","c8","delta","gamma","alpha","beta4","beta8","ggamma8","jy2","jxd4","jyd8","trpl","zz","mm","ee","yyu4","kbase","z3","pz3","eqXToP","zs","rx","xc","redN","iadd","MontCurve","i4","a24","normalize","decodePoint","bytes","enc","toArray","precompute","_encode","byteLength","aa","bb","diffAdd","diff","da","cb","bits","iushrn","push","andln","jumlAdd","other"],"mappings":"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","file":"vendor.elliptic~66ac750a.b58fa173fe85c645b547.chunk.js","sourcesContent":["'use strict';\n\nvar curves = exports;\n\nvar hash = require('hash.js');\nvar curve = require('./curve');\nvar utils = require('./utils');\n\nvar assert = utils.assert;\n\nfunction PresetCurve(options) {\n if (options.type === 'short')\n this.curve = new curve.short(options);\n else if (options.type === 'edwards')\n this.curve = new curve.edwards(options);\n else\n this.curve = new curve.mont(options);\n this.g = this.curve.g;\n this.n = this.curve.n;\n this.hash = options.hash;\n\n assert(this.g.validate(), 'Invalid curve');\n assert(this.g.mul(this.n).isInfinity(), 'Invalid curve, G*N != O');\n}\ncurves.PresetCurve = PresetCurve;\n\nfunction defineCurve(name, options) {\n Object.defineProperty(curves, name, {\n configurable: true,\n enumerable: true,\n get: function() {\n var curve = new PresetCurve(options);\n Object.defineProperty(curves, name, {\n configurable: true,\n enumerable: true,\n value: curve\n });\n return curve;\n }\n });\n}\n\ndefineCurve('p192', {\n type: 'short',\n prime: 'p192',\n p: 'ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff',\n a: 'ffffffff ffffffff ffffffff fffffffe ffffffff fffffffc',\n b: '64210519 e59c80e7 0fa7e9ab 72243049 feb8deec c146b9b1',\n n: 'ffffffff ffffffff ffffffff 99def836 146bc9b1 b4d22831',\n hash: hash.sha256,\n gRed: false,\n g: [\n '188da80e b03090f6 7cbf20eb 43a18800 f4ff0afd 82ff1012',\n '07192b95 ffc8da78 631011ed 6b24cdd5 73f977a1 1e794811'\n ]\n});\n\ndefineCurve('p224', {\n type: 'short',\n prime: 'p224',\n p: 'ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001',\n a: 'ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff fffffffe',\n b: 'b4050a85 0c04b3ab f5413256 5044b0b7 d7bfd8ba 270b3943 2355ffb4',\n n: 'ffffffff ffffffff ffffffff ffff16a2 e0b8f03e 13dd2945 5c5c2a3d',\n hash: hash.sha256,\n gRed: false,\n g: [\n 'b70e0cbd 6bb4bf7f 321390b9 4a03c1d3 56c21122 343280d6 115c1d21',\n 'bd376388 b5f723fb 4c22dfe6 cd4375a0 5a074764 44d58199 85007e34'\n ]\n});\n\ndefineCurve('p256', {\n type: 'short',\n prime: null,\n p: 'ffffffff 00000001 00000000 00000000 00000000 ffffffff ffffffff ffffffff',\n a: 'ffffffff 00000001 00000000 00000000 00000000 ffffffff ffffffff fffffffc',\n b: '5ac635d8 aa3a93e7 b3ebbd55 769886bc 651d06b0 cc53b0f6 3bce3c3e 27d2604b',\n n: 'ffffffff 00000000 ffffffff ffffffff bce6faad a7179e84 f3b9cac2 fc632551',\n hash: hash.sha256,\n gRed: false,\n g: [\n '6b17d1f2 e12c4247 f8bce6e5 63a440f2 77037d81 2deb33a0 f4a13945 d898c296',\n '4fe342e2 fe1a7f9b 8ee7eb4a 7c0f9e16 2bce3357 6b315ece cbb64068 37bf51f5'\n ]\n});\n\ndefineCurve('p384', {\n type: 'short',\n prime: null,\n p: 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ' +\n 'fffffffe ffffffff 00000000 00000000 ffffffff',\n a: 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ' +\n 'fffffffe ffffffff 00000000 00000000 fffffffc',\n b: 'b3312fa7 e23ee7e4 988e056b e3f82d19 181d9c6e fe814112 0314088f ' +\n '5013875a c656398d 8a2ed19d 2a85c8ed d3ec2aef',\n n: 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff c7634d81 ' +\n 'f4372ddf 581a0db2 48b0a77a ecec196a ccc52973',\n hash: hash.sha384,\n gRed: false,\n g: [\n 'aa87ca22 be8b0537 8eb1c71e f320ad74 6e1d3b62 8ba79b98 59f741e0 82542a38 ' +\n '5502f25d bf55296c 3a545e38 72760ab7',\n '3617de4a 96262c6f 5d9e98bf 9292dc29 f8f41dbd 289a147c e9da3113 b5f0b8c0 ' +\n '0a60b1ce 1d7e819d 7a431d7c 90ea0e5f'\n ]\n});\n\ndefineCurve('p521', {\n type: 'short',\n prime: null,\n p: '000001ff ffffffff ffffffff ffffffff ffffffff ffffffff ' +\n 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ' +\n 'ffffffff ffffffff ffffffff ffffffff ffffffff',\n a: '000001ff ffffffff ffffffff ffffffff ffffffff ffffffff ' +\n 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ' +\n 'ffffffff ffffffff ffffffff ffffffff fffffffc',\n b: '00000051 953eb961 8e1c9a1f 929a21a0 b68540ee a2da725b ' +\n '99b315f3 b8b48991 8ef109e1 56193951 ec7e937b 1652c0bd ' +\n '3bb1bf07 3573df88 3d2c34f1 ef451fd4 6b503f00',\n n: '000001ff ffffffff ffffffff ffffffff ffffffff ffffffff ' +\n 'ffffffff ffffffff fffffffa 51868783 bf2f966b 7fcc0148 ' +\n 'f709a5d0 3bb5c9b8 899c47ae bb6fb71e 91386409',\n hash: hash.sha512,\n gRed: false,\n g: [\n '000000c6 858e06b7 0404e9cd 9e3ecb66 2395b442 9c648139 ' +\n '053fb521 f828af60 6b4d3dba a14b5e77 efe75928 fe1dc127 ' +\n 'a2ffa8de 3348b3c1 856a429b f97e7e31 c2e5bd66',\n '00000118 39296a78 9a3bc004 5c8a5fb4 2c7d1bd9 98f54449 ' +\n '579b4468 17afbd17 273e662c 97ee7299 5ef42640 c550b901 ' +\n '3fad0761 353c7086 a272c240 88be9476 9fd16650'\n ]\n});\n\ndefineCurve('curve25519', {\n type: 'mont',\n prime: 'p25519',\n p: '7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed',\n a: '76d06',\n b: '1',\n n: '1000000000000000 0000000000000000 14def9dea2f79cd6 5812631a5cf5d3ed',\n hash: hash.sha256,\n gRed: false,\n g: [\n '9'\n ]\n});\n\ndefineCurve('ed25519', {\n type: 'edwards',\n prime: 'p25519',\n p: '7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed',\n a: '-1',\n c: '1',\n // -121665 * (121666^(-1)) (mod P)\n d: '52036cee2b6ffe73 8cc740797779e898 00700a4d4141d8ab 75eb4dca135978a3',\n n: '1000000000000000 0000000000000000 14def9dea2f79cd6 5812631a5cf5d3ed',\n hash: hash.sha256,\n gRed: false,\n g: [\n '216936d3cd6e53fec0a4e231fdd6dc5c692cc7609525a7b2c9562d608f25d51a',\n\n // 4/5\n '6666666666666666666666666666666666666666666666666666666666666658'\n ]\n});\n\nvar pre;\ntry {\n pre = require('./precomputed/secp256k1');\n} catch (e) {\n pre = undefined;\n}\n\ndefineCurve('secp256k1', {\n type: 'short',\n prime: 'k256',\n p: 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f',\n a: '0',\n b: '7',\n n: 'ffffffff ffffffff ffffffff fffffffe baaedce6 af48a03b bfd25e8c d0364141',\n h: '1',\n hash: hash.sha256,\n\n // Precomputed endomorphism\n beta: '7ae96a2b657c07106e64479eac3434e99cf0497512f58995c1396c28719501ee',\n lambda: '5363ad4cc05c30e0a5261c028812645a122e22ea20816678df02967c1b23bd72',\n basis: [\n {\n a: '3086d221a7d46bcde86c90e49284eb15',\n b: '-e4437ed6010e88286f547fa90abfe4c3'\n },\n {\n a: '114ca50f7a8e2f3f657c1108d9d44cfd8',\n b: '3086d221a7d46bcde86c90e49284eb15'\n }\n ],\n\n gRed: false,\n g: [\n '79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798',\n '483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b8',\n pre\n ]\n});\n","'use strict';\n\nvar utils = require('../utils');\nvar BN = require('bn.js');\nvar inherits = require('inherits');\nvar Base = require('./base');\n\nvar assert = utils.assert;\n\nfunction ShortCurve(conf) {\n Base.call(this, 'short', conf);\n\n this.a = new BN(conf.a, 16).toRed(this.red);\n this.b = new BN(conf.b, 16).toRed(this.red);\n this.tinv = this.two.redInvm();\n\n this.zeroA = this.a.fromRed().cmpn(0) === 0;\n this.threeA = this.a.fromRed().sub(this.p).cmpn(-3) === 0;\n\n // If the curve is endomorphic, precalculate beta and lambda\n this.endo = this._getEndomorphism(conf);\n this._endoWnafT1 = new Array(4);\n this._endoWnafT2 = new Array(4);\n}\ninherits(ShortCurve, Base);\nmodule.exports = ShortCurve;\n\nShortCurve.prototype._getEndomorphism = function _getEndomorphism(conf) {\n // No efficient endomorphism\n if (!this.zeroA || !this.g || !this.n || this.p.modn(3) !== 1)\n return;\n\n // Compute beta and lambda, that lambda * P = (beta * Px; Py)\n var beta;\n var lambda;\n if (conf.beta) {\n beta = new BN(conf.beta, 16).toRed(this.red);\n } else {\n var betas = this._getEndoRoots(this.p);\n // Choose the smallest beta\n beta = betas[0].cmp(betas[1]) < 0 ? betas[0] : betas[1];\n beta = beta.toRed(this.red);\n }\n if (conf.lambda) {\n lambda = new BN(conf.lambda, 16);\n } else {\n // Choose the lambda that is matching selected beta\n var lambdas = this._getEndoRoots(this.n);\n if (this.g.mul(lambdas[0]).x.cmp(this.g.x.redMul(beta)) === 0) {\n lambda = lambdas[0];\n } else {\n lambda = lambdas[1];\n assert(this.g.mul(lambda).x.cmp(this.g.x.redMul(beta)) === 0);\n }\n }\n\n // Get basis vectors, used for balanced length-two representation\n var basis;\n if (conf.basis) {\n basis = conf.basis.map(function(vec) {\n return {\n a: new BN(vec.a, 16),\n b: new BN(vec.b, 16)\n };\n });\n } else {\n basis = this._getEndoBasis(lambda);\n }\n\n return {\n beta: beta,\n lambda: lambda,\n basis: basis\n };\n};\n\nShortCurve.prototype._getEndoRoots = function _getEndoRoots(num) {\n // Find roots of for x^2 + x + 1 in F\n // Root = (-1 +- Sqrt(-3)) / 2\n //\n var red = num === this.p ? this.red : BN.mont(num);\n var tinv = new BN(2).toRed(red).redInvm();\n var ntinv = tinv.redNeg();\n\n var s = new BN(3).toRed(red).redNeg().redSqrt().redMul(tinv);\n\n var l1 = ntinv.redAdd(s).fromRed();\n var l2 = ntinv.redSub(s).fromRed();\n return [ l1, l2 ];\n};\n\nShortCurve.prototype._getEndoBasis = function _getEndoBasis(lambda) {\n // aprxSqrt >= sqrt(this.n)\n var aprxSqrt = this.n.ushrn(Math.floor(this.n.bitLength() / 2));\n\n // 3.74\n // Run EGCD, until r(L + 1) < aprxSqrt\n var u = lambda;\n var v = this.n.clone();\n var x1 = new BN(1);\n var y1 = new BN(0);\n var x2 = new BN(0);\n var y2 = new BN(1);\n\n // NOTE: all vectors are roots of: a + b * lambda = 0 (mod n)\n var a0;\n var b0;\n // First vector\n var a1;\n var b1;\n // Second vector\n var a2;\n var b2;\n\n var prevR;\n var i = 0;\n var r;\n var x;\n while (u.cmpn(0) !== 0) {\n var q = v.div(u);\n r = v.sub(q.mul(u));\n x = x2.sub(q.mul(x1));\n var y = y2.sub(q.mul(y1));\n\n if (!a1 && r.cmp(aprxSqrt) < 0) {\n a0 = prevR.neg();\n b0 = x1;\n a1 = r.neg();\n b1 = x;\n } else if (a1 && ++i === 2) {\n break;\n }\n prevR = r;\n\n v = u;\n u = r;\n x2 = x1;\n x1 = x;\n y2 = y1;\n y1 = y;\n }\n a2 = r.neg();\n b2 = x;\n\n var len1 = a1.sqr().add(b1.sqr());\n var len2 = a2.sqr().add(b2.sqr());\n if (len2.cmp(len1) >= 0) {\n a2 = a0;\n b2 = b0;\n }\n\n // Normalize signs\n if (a1.negative) {\n a1 = a1.neg();\n b1 = b1.neg();\n }\n if (a2.negative) {\n a2 = a2.neg();\n b2 = b2.neg();\n }\n\n return [\n { a: a1, b: b1 },\n { a: a2, b: b2 }\n ];\n};\n\nShortCurve.prototype._endoSplit = function _endoSplit(k) {\n var basis = this.endo.basis;\n var v1 = basis[0];\n var v2 = basis[1];\n\n var c1 = v2.b.mul(k).divRound(this.n);\n var c2 = v1.b.neg().mul(k).divRound(this.n);\n\n var p1 = c1.mul(v1.a);\n var p2 = c2.mul(v2.a);\n var q1 = c1.mul(v1.b);\n var q2 = c2.mul(v2.b);\n\n // Calculate answer\n var k1 = k.sub(p1).sub(p2);\n var k2 = q1.add(q2).neg();\n return { k1: k1, k2: k2 };\n};\n\nShortCurve.prototype.pointFromX = function pointFromX(x, odd) {\n x = new BN(x, 16);\n if (!x.red)\n x = x.toRed(this.red);\n\n var y2 = x.redSqr().redMul(x).redIAdd(x.redMul(this.a)).redIAdd(this.b);\n var y = y2.redSqrt();\n if (y.redSqr().redSub(y2).cmp(this.zero) !== 0)\n throw new Error('invalid point');\n\n // XXX Is there any way to tell if the number is odd without converting it\n // to non-red form?\n var isOdd = y.fromRed().isOdd();\n if (odd && !isOdd || !odd && isOdd)\n y = y.redNeg();\n\n return this.point(x, y);\n};\n\nShortCurve.prototype.validate = function validate(point) {\n if (point.inf)\n return true;\n\n var x = point.x;\n var y = point.y;\n\n var ax = this.a.redMul(x);\n var rhs = x.redSqr().redMul(x).redIAdd(ax).redIAdd(this.b);\n return y.redSqr().redISub(rhs).cmpn(0) === 0;\n};\n\nShortCurve.prototype._endoWnafMulAdd =\n function _endoWnafMulAdd(points, coeffs, jacobianResult) {\n var npoints = this._endoWnafT1;\n var ncoeffs = this._endoWnafT2;\n for (var i = 0; i < points.length; i++) {\n var split = this._endoSplit(coeffs[i]);\n var p = points[i];\n var beta = p._getBeta();\n\n if (split.k1.negative) {\n split.k1.ineg();\n p = p.neg(true);\n }\n if (split.k2.negative) {\n split.k2.ineg();\n beta = beta.neg(true);\n }\n\n npoints[i * 2] = p;\n npoints[i * 2 + 1] = beta;\n ncoeffs[i * 2] = split.k1;\n ncoeffs[i * 2 + 1] = split.k2;\n }\n var res = this._wnafMulAdd(1, npoints, ncoeffs, i * 2, jacobianResult);\n\n // Clean-up references to points and coefficients\n for (var j = 0; j < i * 2; j++) {\n npoints[j] = null;\n ncoeffs[j] = null;\n }\n return res;\n};\n\nfunction Point(curve, x, y, isRed) {\n Base.BasePoint.call(this, curve, 'affine');\n if (x === null && y === null) {\n this.x = null;\n this.y = null;\n this.inf = true;\n } else {\n this.x = new BN(x, 16);\n this.y = new BN(y, 16);\n // Force redgomery representation when loading from JSON\n if (isRed) {\n this.x.forceRed(this.curve.red);\n this.y.forceRed(this.curve.red);\n }\n if (!this.x.red)\n this.x = this.x.toRed(this.curve.red);\n if (!this.y.red)\n this.y = this.y.toRed(this.curve.red);\n this.inf = false;\n }\n}\ninherits(Point, Base.BasePoint);\n\nShortCurve.prototype.point = function point(x, y, isRed) {\n return new Point(this, x, y, isRed);\n};\n\nShortCurve.prototype.pointFromJSON = function pointFromJSON(obj, red) {\n return Point.fromJSON(this, obj, red);\n};\n\nPoint.prototype._getBeta = function _getBeta() {\n if (!this.curve.endo)\n return;\n\n var pre = this.precomputed;\n if (pre && pre.beta)\n return pre.beta;\n\n var beta = this.curve.point(this.x.redMul(this.curve.endo.beta), this.y);\n if (pre) {\n var curve = this.curve;\n var endoMul = function(p) {\n return curve.point(p.x.redMul(curve.endo.beta), p.y);\n };\n pre.beta = beta;\n beta.precomputed = {\n beta: null,\n naf: pre.naf && {\n wnd: pre.naf.wnd,\n points: pre.naf.points.map(endoMul)\n },\n doubles: pre.doubles && {\n step: pre.doubles.step,\n points: pre.doubles.points.map(endoMul)\n }\n };\n }\n return beta;\n};\n\nPoint.prototype.toJSON = function toJSON() {\n if (!this.precomputed)\n return [ this.x, this.y ];\n\n return [ this.x, this.y, this.precomputed && {\n doubles: this.precomputed.doubles && {\n step: this.precomputed.doubles.step,\n points: this.precomputed.doubles.points.slice(1)\n },\n naf: this.precomputed.naf && {\n wnd: this.precomputed.naf.wnd,\n points: this.precomputed.naf.points.slice(1)\n }\n } ];\n};\n\nPoint.fromJSON = function fromJSON(curve, obj, red) {\n if (typeof obj === 'string')\n obj = JSON.parse(obj);\n var res = curve.point(obj[0], obj[1], red);\n if (!obj[2])\n return res;\n\n function obj2point(obj) {\n return curve.point(obj[0], obj[1], red);\n }\n\n var pre = obj[2];\n res.precomputed = {\n beta: null,\n doubles: pre.doubles && {\n step: pre.doubles.step,\n points: [ res ].concat(pre.doubles.points.map(obj2point))\n },\n naf: pre.naf && {\n wnd: pre.naf.wnd,\n points: [ res ].concat(pre.naf.points.map(obj2point))\n }\n };\n return res;\n};\n\nPoint.prototype.inspect = function inspect() {\n if (this.isInfinity())\n return '';\n return '';\n};\n\nPoint.prototype.isInfinity = function isInfinity() {\n return this.inf;\n};\n\nPoint.prototype.add = function add(p) {\n // O + P = P\n if (this.inf)\n return p;\n\n // P + O = P\n if (p.inf)\n return this;\n\n // P + P = 2P\n if (this.eq(p))\n return this.dbl();\n\n // P + (-P) = O\n if (this.neg().eq(p))\n return this.curve.point(null, null);\n\n // P + Q = O\n if (this.x.cmp(p.x) === 0)\n return this.curve.point(null, null);\n\n var c = this.y.redSub(p.y);\n if (c.cmpn(0) !== 0)\n c = c.redMul(this.x.redSub(p.x).redInvm());\n var nx = c.redSqr().redISub(this.x).redISub(p.x);\n var ny = c.redMul(this.x.redSub(nx)).redISub(this.y);\n return this.curve.point(nx, ny);\n};\n\nPoint.prototype.dbl = function dbl() {\n if (this.inf)\n return this;\n\n // 2P = O\n var ys1 = this.y.redAdd(this.y);\n if (ys1.cmpn(0) === 0)\n return this.curve.point(null, null);\n\n var a = this.curve.a;\n\n var x2 = this.x.redSqr();\n var dyinv = ys1.redInvm();\n var c = x2.redAdd(x2).redIAdd(x2).redIAdd(a).redMul(dyinv);\n\n var nx = c.redSqr().redISub(this.x.redAdd(this.x));\n var ny = c.redMul(this.x.redSub(nx)).redISub(this.y);\n return this.curve.point(nx, ny);\n};\n\nPoint.prototype.getX = function getX() {\n return this.x.fromRed();\n};\n\nPoint.prototype.getY = function getY() {\n return this.y.fromRed();\n};\n\nPoint.prototype.mul = function mul(k) {\n k = new BN(k, 16);\n if (this.isInfinity())\n return this;\n else if (this._hasDoubles(k))\n return this.curve._fixedNafMul(this, k);\n else if (this.curve.endo)\n return this.curve._endoWnafMulAdd([ this ], [ k ]);\n else\n return this.curve._wnafMul(this, k);\n};\n\nPoint.prototype.mulAdd = function mulAdd(k1, p2, k2) {\n var points = [ this, p2 ];\n var coeffs = [ k1, k2 ];\n if (this.curve.endo)\n return this.curve._endoWnafMulAdd(points, coeffs);\n else\n return this.curve._wnafMulAdd(1, points, coeffs, 2);\n};\n\nPoint.prototype.jmulAdd = function jmulAdd(k1, p2, k2) {\n var points = [ this, p2 ];\n var coeffs = [ k1, k2 ];\n if (this.curve.endo)\n return this.curve._endoWnafMulAdd(points, coeffs, true);\n else\n return this.curve._wnafMulAdd(1, points, coeffs, 2, true);\n};\n\nPoint.prototype.eq = function eq(p) {\n return this === p ||\n this.inf === p.inf &&\n (this.inf || this.x.cmp(p.x) === 0 && this.y.cmp(p.y) === 0);\n};\n\nPoint.prototype.neg = function neg(_precompute) {\n if (this.inf)\n return this;\n\n var res = this.curve.point(this.x, this.y.redNeg());\n if (_precompute && this.precomputed) {\n var pre = this.precomputed;\n var negate = function(p) {\n return p.neg();\n };\n res.precomputed = {\n naf: pre.naf && {\n wnd: pre.naf.wnd,\n points: pre.naf.points.map(negate)\n },\n doubles: pre.doubles && {\n step: pre.doubles.step,\n points: pre.doubles.points.map(negate)\n }\n };\n }\n return res;\n};\n\nPoint.prototype.toJ = function toJ() {\n if (this.inf)\n return this.curve.jpoint(null, null, null);\n\n var res = this.curve.jpoint(this.x, this.y, this.curve.one);\n return res;\n};\n\nfunction JPoint(curve, x, y, z) {\n Base.BasePoint.call(this, curve, 'jacobian');\n if (x === null && y === null && z === null) {\n this.x = this.curve.one;\n this.y = this.curve.one;\n this.z = new BN(0);\n } else {\n this.x = new BN(x, 16);\n this.y = new BN(y, 16);\n this.z = new BN(z, 16);\n }\n if (!this.x.red)\n this.x = this.x.toRed(this.curve.red);\n if (!this.y.red)\n this.y = this.y.toRed(this.curve.red);\n if (!this.z.red)\n this.z = this.z.toRed(this.curve.red);\n\n this.zOne = this.z === this.curve.one;\n}\ninherits(JPoint, Base.BasePoint);\n\nShortCurve.prototype.jpoint = function jpoint(x, y, z) {\n return new JPoint(this, x, y, z);\n};\n\nJPoint.prototype.toP = function toP() {\n if (this.isInfinity())\n return this.curve.point(null, null);\n\n var zinv = this.z.redInvm();\n var zinv2 = zinv.redSqr();\n var ax = this.x.redMul(zinv2);\n var ay = this.y.redMul(zinv2).redMul(zinv);\n\n return this.curve.point(ax, ay);\n};\n\nJPoint.prototype.neg = function neg() {\n return this.curve.jpoint(this.x, this.y.redNeg(), this.z);\n};\n\nJPoint.prototype.add = function add(p) {\n // O + P = P\n if (this.isInfinity())\n return p;\n\n // P + O = P\n if (p.isInfinity())\n return this;\n\n // 12M + 4S + 7A\n var pz2 = p.z.redSqr();\n var z2 = this.z.redSqr();\n var u1 = this.x.redMul(pz2);\n var u2 = p.x.redMul(z2);\n var s1 = this.y.redMul(pz2.redMul(p.z));\n var s2 = p.y.redMul(z2.redMul(this.z));\n\n var h = u1.redSub(u2);\n var r = s1.redSub(s2);\n if (h.cmpn(0) === 0) {\n if (r.cmpn(0) !== 0)\n return this.curve.jpoint(null, null, null);\n else\n return this.dbl();\n }\n\n var h2 = h.redSqr();\n var h3 = h2.redMul(h);\n var v = u1.redMul(h2);\n\n var nx = r.redSqr().redIAdd(h3).redISub(v).redISub(v);\n var ny = r.redMul(v.redISub(nx)).redISub(s1.redMul(h3));\n var nz = this.z.redMul(p.z).redMul(h);\n\n return this.curve.jpoint(nx, ny, nz);\n};\n\nJPoint.prototype.mixedAdd = function mixedAdd(p) {\n // O + P = P\n if (this.isInfinity())\n return p.toJ();\n\n // P + O = P\n if (p.isInfinity())\n return this;\n\n // 8M + 3S + 7A\n var z2 = this.z.redSqr();\n var u1 = this.x;\n var u2 = p.x.redMul(z2);\n var s1 = this.y;\n var s2 = p.y.redMul(z2).redMul(this.z);\n\n var h = u1.redSub(u2);\n var r = s1.redSub(s2);\n if (h.cmpn(0) === 0) {\n if (r.cmpn(0) !== 0)\n return this.curve.jpoint(null, null, null);\n else\n return this.dbl();\n }\n\n var h2 = h.redSqr();\n var h3 = h2.redMul(h);\n var v = u1.redMul(h2);\n\n var nx = r.redSqr().redIAdd(h3).redISub(v).redISub(v);\n var ny = r.redMul(v.redISub(nx)).redISub(s1.redMul(h3));\n var nz = this.z.redMul(h);\n\n return this.curve.jpoint(nx, ny, nz);\n};\n\nJPoint.prototype.dblp = function dblp(pow) {\n if (pow === 0)\n return this;\n if (this.isInfinity())\n return this;\n if (!pow)\n return this.dbl();\n\n if (this.curve.zeroA || this.curve.threeA) {\n var r = this;\n for (var i = 0; i < pow; i++)\n r = r.dbl();\n return r;\n }\n\n // 1M + 2S + 1A + N * (4S + 5M + 8A)\n // N = 1 => 6M + 6S + 9A\n var a = this.curve.a;\n var tinv = this.curve.tinv;\n\n var jx = this.x;\n var jy = this.y;\n var jz = this.z;\n var jz4 = jz.redSqr().redSqr();\n\n // Reuse results\n var jyd = jy.redAdd(jy);\n for (var i = 0; i < pow; i++) {\n var jx2 = jx.redSqr();\n var jyd2 = jyd.redSqr();\n var jyd4 = jyd2.redSqr();\n var c = jx2.redAdd(jx2).redIAdd(jx2).redIAdd(a.redMul(jz4));\n\n var t1 = jx.redMul(jyd2);\n var nx = c.redSqr().redISub(t1.redAdd(t1));\n var t2 = t1.redISub(nx);\n var dny = c.redMul(t2);\n dny = dny.redIAdd(dny).redISub(jyd4);\n var nz = jyd.redMul(jz);\n if (i + 1 < pow)\n jz4 = jz4.redMul(jyd4);\n\n jx = nx;\n jz = nz;\n jyd = dny;\n }\n\n return this.curve.jpoint(jx, jyd.redMul(tinv), jz);\n};\n\nJPoint.prototype.dbl = function dbl() {\n if (this.isInfinity())\n return this;\n\n if (this.curve.zeroA)\n return this._zeroDbl();\n else if (this.curve.threeA)\n return this._threeDbl();\n else\n return this._dbl();\n};\n\nJPoint.prototype._zeroDbl = function _zeroDbl() {\n var nx;\n var ny;\n var nz;\n // Z = 1\n if (this.zOne) {\n // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-0.html\n // #doubling-mdbl-2007-bl\n // 1M + 5S + 14A\n\n // XX = X1^2\n var xx = this.x.redSqr();\n // YY = Y1^2\n var yy = this.y.redSqr();\n // YYYY = YY^2\n var yyyy = yy.redSqr();\n // S = 2 * ((X1 + YY)^2 - XX - YYYY)\n var s = this.x.redAdd(yy).redSqr().redISub(xx).redISub(yyyy);\n s = s.redIAdd(s);\n // M = 3 * XX + a; a = 0\n var m = xx.redAdd(xx).redIAdd(xx);\n // T = M ^ 2 - 2*S\n var t = m.redSqr().redISub(s).redISub(s);\n\n // 8 * YYYY\n var yyyy8 = yyyy.redIAdd(yyyy);\n yyyy8 = yyyy8.redIAdd(yyyy8);\n yyyy8 = yyyy8.redIAdd(yyyy8);\n\n // X3 = T\n nx = t;\n // Y3 = M * (S - T) - 8 * YYYY\n ny = m.redMul(s.redISub(t)).redISub(yyyy8);\n // Z3 = 2*Y1\n nz = this.y.redAdd(this.y);\n } else {\n // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-0.html\n // #doubling-dbl-2009-l\n // 2M + 5S + 13A\n\n // A = X1^2\n var a = this.x.redSqr();\n // B = Y1^2\n var b = this.y.redSqr();\n // C = B^2\n var c = b.redSqr();\n // D = 2 * ((X1 + B)^2 - A - C)\n var d = this.x.redAdd(b).redSqr().redISub(a).redISub(c);\n d = d.redIAdd(d);\n // E = 3 * A\n var e = a.redAdd(a).redIAdd(a);\n // F = E^2\n var f = e.redSqr();\n\n // 8 * C\n var c8 = c.redIAdd(c);\n c8 = c8.redIAdd(c8);\n c8 = c8.redIAdd(c8);\n\n // X3 = F - 2 * D\n nx = f.redISub(d).redISub(d);\n // Y3 = E * (D - X3) - 8 * C\n ny = e.redMul(d.redISub(nx)).redISub(c8);\n // Z3 = 2 * Y1 * Z1\n nz = this.y.redMul(this.z);\n nz = nz.redIAdd(nz);\n }\n\n return this.curve.jpoint(nx, ny, nz);\n};\n\nJPoint.prototype._threeDbl = function _threeDbl() {\n var nx;\n var ny;\n var nz;\n // Z = 1\n if (this.zOne) {\n // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-3.html\n // #doubling-mdbl-2007-bl\n // 1M + 5S + 15A\n\n // XX = X1^2\n var xx = this.x.redSqr();\n // YY = Y1^2\n var yy = this.y.redSqr();\n // YYYY = YY^2\n var yyyy = yy.redSqr();\n // S = 2 * ((X1 + YY)^2 - XX - YYYY)\n var s = this.x.redAdd(yy).redSqr().redISub(xx).redISub(yyyy);\n s = s.redIAdd(s);\n // M = 3 * XX + a\n var m = xx.redAdd(xx).redIAdd(xx).redIAdd(this.curve.a);\n // T = M^2 - 2 * S\n var t = m.redSqr().redISub(s).redISub(s);\n // X3 = T\n nx = t;\n // Y3 = M * (S - T) - 8 * YYYY\n var yyyy8 = yyyy.redIAdd(yyyy);\n yyyy8 = yyyy8.redIAdd(yyyy8);\n yyyy8 = yyyy8.redIAdd(yyyy8);\n ny = m.redMul(s.redISub(t)).redISub(yyyy8);\n // Z3 = 2 * Y1\n nz = this.y.redAdd(this.y);\n } else {\n // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-3.html#doubling-dbl-2001-b\n // 3M + 5S\n\n // delta = Z1^2\n var delta = this.z.redSqr();\n // gamma = Y1^2\n var gamma = this.y.redSqr();\n // beta = X1 * gamma\n var beta = this.x.redMul(gamma);\n // alpha = 3 * (X1 - delta) * (X1 + delta)\n var alpha = this.x.redSub(delta).redMul(this.x.redAdd(delta));\n alpha = alpha.redAdd(alpha).redIAdd(alpha);\n // X3 = alpha^2 - 8 * beta\n var beta4 = beta.redIAdd(beta);\n beta4 = beta4.redIAdd(beta4);\n var beta8 = beta4.redAdd(beta4);\n nx = alpha.redSqr().redISub(beta8);\n // Z3 = (Y1 + Z1)^2 - gamma - delta\n nz = this.y.redAdd(this.z).redSqr().redISub(gamma).redISub(delta);\n // Y3 = alpha * (4 * beta - X3) - 8 * gamma^2\n var ggamma8 = gamma.redSqr();\n ggamma8 = ggamma8.redIAdd(ggamma8);\n ggamma8 = ggamma8.redIAdd(ggamma8);\n ggamma8 = ggamma8.redIAdd(ggamma8);\n ny = alpha.redMul(beta4.redISub(nx)).redISub(ggamma8);\n }\n\n return this.curve.jpoint(nx, ny, nz);\n};\n\nJPoint.prototype._dbl = function _dbl() {\n var a = this.curve.a;\n\n // 4M + 6S + 10A\n var jx = this.x;\n var jy = this.y;\n var jz = this.z;\n var jz4 = jz.redSqr().redSqr();\n\n var jx2 = jx.redSqr();\n var jy2 = jy.redSqr();\n\n var c = jx2.redAdd(jx2).redIAdd(jx2).redIAdd(a.redMul(jz4));\n\n var jxd4 = jx.redAdd(jx);\n jxd4 = jxd4.redIAdd(jxd4);\n var t1 = jxd4.redMul(jy2);\n var nx = c.redSqr().redISub(t1.redAdd(t1));\n var t2 = t1.redISub(nx);\n\n var jyd8 = jy2.redSqr();\n jyd8 = jyd8.redIAdd(jyd8);\n jyd8 = jyd8.redIAdd(jyd8);\n jyd8 = jyd8.redIAdd(jyd8);\n var ny = c.redMul(t2).redISub(jyd8);\n var nz = jy.redAdd(jy).redMul(jz);\n\n return this.curve.jpoint(nx, ny, nz);\n};\n\nJPoint.prototype.trpl = function trpl() {\n if (!this.curve.zeroA)\n return this.dbl().add(this);\n\n // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-0.html#tripling-tpl-2007-bl\n // 5M + 10S + ...\n\n // XX = X1^2\n var xx = this.x.redSqr();\n // YY = Y1^2\n var yy = this.y.redSqr();\n // ZZ = Z1^2\n var zz = this.z.redSqr();\n // YYYY = YY^2\n var yyyy = yy.redSqr();\n // M = 3 * XX + a * ZZ2; a = 0\n var m = xx.redAdd(xx).redIAdd(xx);\n // MM = M^2\n var mm = m.redSqr();\n // E = 6 * ((X1 + YY)^2 - XX - YYYY) - MM\n var e = this.x.redAdd(yy).redSqr().redISub(xx).redISub(yyyy);\n e = e.redIAdd(e);\n e = e.redAdd(e).redIAdd(e);\n e = e.redISub(mm);\n // EE = E^2\n var ee = e.redSqr();\n // T = 16*YYYY\n var t = yyyy.redIAdd(yyyy);\n t = t.redIAdd(t);\n t = t.redIAdd(t);\n t = t.redIAdd(t);\n // U = (M + E)^2 - MM - EE - T\n var u = m.redIAdd(e).redSqr().redISub(mm).redISub(ee).redISub(t);\n // X3 = 4 * (X1 * EE - 4 * YY * U)\n var yyu4 = yy.redMul(u);\n yyu4 = yyu4.redIAdd(yyu4);\n yyu4 = yyu4.redIAdd(yyu4);\n var nx = this.x.redMul(ee).redISub(yyu4);\n nx = nx.redIAdd(nx);\n nx = nx.redIAdd(nx);\n // Y3 = 8 * Y1 * (U * (T - U) - E * EE)\n var ny = this.y.redMul(u.redMul(t.redISub(u)).redISub(e.redMul(ee)));\n ny = ny.redIAdd(ny);\n ny = ny.redIAdd(ny);\n ny = ny.redIAdd(ny);\n // Z3 = (Z1 + E)^2 - ZZ - EE\n var nz = this.z.redAdd(e).redSqr().redISub(zz).redISub(ee);\n\n return this.curve.jpoint(nx, ny, nz);\n};\n\nJPoint.prototype.mul = function mul(k, kbase) {\n k = new BN(k, kbase);\n\n return this.curve._wnafMul(this, k);\n};\n\nJPoint.prototype.eq = function eq(p) {\n if (p.type === 'affine')\n return this.eq(p.toJ());\n\n if (this === p)\n return true;\n\n // x1 * z2^2 == x2 * z1^2\n var z2 = this.z.redSqr();\n var pz2 = p.z.redSqr();\n if (this.x.redMul(pz2).redISub(p.x.redMul(z2)).cmpn(0) !== 0)\n return false;\n\n // y1 * z2^3 == y2 * z1^3\n var z3 = z2.redMul(this.z);\n var pz3 = pz2.redMul(p.z);\n return this.y.redMul(pz3).redISub(p.y.redMul(z3)).cmpn(0) === 0;\n};\n\nJPoint.prototype.eqXToP = function eqXToP(x) {\n var zs = this.z.redSqr();\n var rx = x.toRed(this.curve.red).redMul(zs);\n if (this.x.cmp(rx) === 0)\n return true;\n\n var xc = x.clone();\n var t = this.curve.redN.redMul(zs);\n for (;;) {\n xc.iadd(this.curve.n);\n if (xc.cmp(this.curve.p) >= 0)\n return false;\n\n rx.redIAdd(t);\n if (this.x.cmp(rx) === 0)\n return true;\n }\n};\n\nJPoint.prototype.inspect = function inspect() {\n if (this.isInfinity())\n return '';\n return '';\n};\n\nJPoint.prototype.isInfinity = function isInfinity() {\n // XXX This code assumes that zero is always zero in red\n return this.z.cmpn(0) === 0;\n};\n","'use strict';\n\nvar BN = require('bn.js');\nvar inherits = require('inherits');\nvar Base = require('./base');\n\nvar utils = require('../utils');\n\nfunction MontCurve(conf) {\n Base.call(this, 'mont', conf);\n\n this.a = new BN(conf.a, 16).toRed(this.red);\n this.b = new BN(conf.b, 16).toRed(this.red);\n this.i4 = new BN(4).toRed(this.red).redInvm();\n this.two = new BN(2).toRed(this.red);\n this.a24 = this.i4.redMul(this.a.redAdd(this.two));\n}\ninherits(MontCurve, Base);\nmodule.exports = MontCurve;\n\nMontCurve.prototype.validate = function validate(point) {\n var x = point.normalize().x;\n var x2 = x.redSqr();\n var rhs = x2.redMul(x).redAdd(x2.redMul(this.a)).redAdd(x);\n var y = rhs.redSqrt();\n\n return y.redSqr().cmp(rhs) === 0;\n};\n\nfunction Point(curve, x, z) {\n Base.BasePoint.call(this, curve, 'projective');\n if (x === null && z === null) {\n this.x = this.curve.one;\n this.z = this.curve.zero;\n } else {\n this.x = new BN(x, 16);\n this.z = new BN(z, 16);\n if (!this.x.red)\n this.x = this.x.toRed(this.curve.red);\n if (!this.z.red)\n this.z = this.z.toRed(this.curve.red);\n }\n}\ninherits(Point, Base.BasePoint);\n\nMontCurve.prototype.decodePoint = function decodePoint(bytes, enc) {\n return this.point(utils.toArray(bytes, enc), 1);\n};\n\nMontCurve.prototype.point = function point(x, z) {\n return new Point(this, x, z);\n};\n\nMontCurve.prototype.pointFromJSON = function pointFromJSON(obj) {\n return Point.fromJSON(this, obj);\n};\n\nPoint.prototype.precompute = function precompute() {\n // No-op\n};\n\nPoint.prototype._encode = function _encode() {\n return this.getX().toArray('be', this.curve.p.byteLength());\n};\n\nPoint.fromJSON = function fromJSON(curve, obj) {\n return new Point(curve, obj[0], obj[1] || curve.one);\n};\n\nPoint.prototype.inspect = function inspect() {\n if (this.isInfinity())\n return '';\n return '';\n};\n\nPoint.prototype.isInfinity = function isInfinity() {\n // XXX This code assumes that zero is always zero in red\n return this.z.cmpn(0) === 0;\n};\n\nPoint.prototype.dbl = function dbl() {\n // http://hyperelliptic.org/EFD/g1p/auto-montgom-xz.html#doubling-dbl-1987-m-3\n // 2M + 2S + 4A\n\n // A = X1 + Z1\n var a = this.x.redAdd(this.z);\n // AA = A^2\n var aa = a.redSqr();\n // B = X1 - Z1\n var b = this.x.redSub(this.z);\n // BB = B^2\n var bb = b.redSqr();\n // C = AA - BB\n var c = aa.redSub(bb);\n // X3 = AA * BB\n var nx = aa.redMul(bb);\n // Z3 = C * (BB + A24 * C)\n var nz = c.redMul(bb.redAdd(this.curve.a24.redMul(c)));\n return this.curve.point(nx, nz);\n};\n\nPoint.prototype.add = function add() {\n throw new Error('Not supported on Montgomery curve');\n};\n\nPoint.prototype.diffAdd = function diffAdd(p, diff) {\n // http://hyperelliptic.org/EFD/g1p/auto-montgom-xz.html#diffadd-dadd-1987-m-3\n // 4M + 2S + 6A\n\n // A = X2 + Z2\n var a = this.x.redAdd(this.z);\n // B = X2 - Z2\n var b = this.x.redSub(this.z);\n // C = X3 + Z3\n var c = p.x.redAdd(p.z);\n // D = X3 - Z3\n var d = p.x.redSub(p.z);\n // DA = D * A\n var da = d.redMul(a);\n // CB = C * B\n var cb = c.redMul(b);\n // X5 = Z1 * (DA + CB)^2\n var nx = diff.z.redMul(da.redAdd(cb).redSqr());\n // Z5 = X1 * (DA - CB)^2\n var nz = diff.x.redMul(da.redISub(cb).redSqr());\n return this.curve.point(nx, nz);\n};\n\nPoint.prototype.mul = function mul(k) {\n var t = k.clone();\n var a = this; // (N / 2) * Q + Q\n var b = this.curve.point(null, null); // (N / 2) * Q\n var c = this; // Q\n\n for (var bits = []; t.cmpn(0) !== 0; t.iushrn(1))\n bits.push(t.andln(1));\n\n for (var i = bits.length - 1; i >= 0; i--) {\n if (bits[i] === 0) {\n // N * Q + Q = ((N / 2) * Q + Q)) + (N / 2) * Q\n a = a.diffAdd(b, c);\n // N * Q = 2 * ((N / 2) * Q + Q))\n b = b.dbl();\n } else {\n // N * Q = ((N / 2) * Q + Q) + ((N / 2) * Q)\n b = a.diffAdd(b, c);\n // N * Q + Q = 2 * ((N / 2) * Q + Q)\n a = a.dbl();\n }\n }\n return b;\n};\n\nPoint.prototype.mulAdd = function mulAdd() {\n throw new Error('Not supported on Montgomery curve');\n};\n\nPoint.prototype.jumlAdd = function jumlAdd() {\n throw new Error('Not supported on Montgomery curve');\n};\n\nPoint.prototype.eq = function eq(other) {\n return this.getX().cmp(other.getX()) === 0;\n};\n\nPoint.prototype.normalize = function normalize() {\n this.x = this.x.redMul(this.z.redInvm());\n this.z = this.curve.one;\n return this;\n};\n\nPoint.prototype.getX = function getX() {\n // Normalize coordinates\n this.normalize();\n\n return this.x.fromRed();\n};\n"],"sourceRoot":""}