{"version":3,"sources":["webpack:///./node_modules/elliptic/lib/elliptic/curves.js","webpack:///./node_modules/elliptic/lib/elliptic/curve/short.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"],"mappings":"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","file":"js/index~66ac750a-e219785fb56be4ca4e8e.chunk.js","sourcesContent":["'use strict';\n\nvar curves = exports;\nvar hash = require('hash.js');\nvar curve = require('./curve');\nvar utils = require('./utils');\nvar assert = utils.assert;\nfunction PresetCurve(options) {\n 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);\n this.g = this.curve.g;\n this.n = this.curve.n;\n this.hash = options.hash;\n assert(this.g.validate(), 'Invalid curve');\n assert(this.g.mul(this.n).isInfinity(), 'Invalid curve, G*N != O');\n}\ncurves.PresetCurve = PresetCurve;\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}\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: ['188da80e b03090f6 7cbf20eb 43a18800 f4ff0afd 82ff1012', '07192b95 ffc8da78 631011ed 6b24cdd5 73f977a1 1e794811']\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: ['b70e0cbd 6bb4bf7f 321390b9 4a03c1d3 56c21122 343280d6 115c1d21', 'bd376388 b5f723fb 4c22dfe6 cd4375a0 5a074764 44d58199 85007e34']\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: ['6b17d1f2 e12c4247 f8bce6e5 63a440f2 77037d81 2deb33a0 f4a13945 d898c296', '4fe342e2 fe1a7f9b 8ee7eb4a 7c0f9e16 2bce3357 6b315ece cbb64068 37bf51f5']\n});\ndefineCurve('p384', {\n type: 'short',\n prime: null,\n p: 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ' + 'fffffffe ffffffff 00000000 00000000 ffffffff',\n a: 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ' + 'fffffffe ffffffff 00000000 00000000 fffffffc',\n b: 'b3312fa7 e23ee7e4 988e056b e3f82d19 181d9c6e fe814112 0314088f ' + '5013875a c656398d 8a2ed19d 2a85c8ed d3ec2aef',\n n: 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff c7634d81 ' + 'f4372ddf 581a0db2 48b0a77a ecec196a ccc52973',\n hash: hash.sha384,\n gRed: false,\n 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']\n});\ndefineCurve('p521', {\n type: 'short',\n prime: null,\n p: '000001ff ffffffff ffffffff ffffffff ffffffff ffffffff ' + 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ' + 'ffffffff ffffffff ffffffff ffffffff ffffffff',\n a: '000001ff ffffffff ffffffff ffffffff ffffffff ffffffff ' + 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ' + 'ffffffff ffffffff ffffffff ffffffff fffffffc',\n b: '00000051 953eb961 8e1c9a1f 929a21a0 b68540ee a2da725b ' + '99b315f3 b8b48991 8ef109e1 56193951 ec7e937b 1652c0bd ' + '3bb1bf07 3573df88 3d2c34f1 ef451fd4 6b503f00',\n n: '000001ff ffffffff ffffffff ffffffff ffffffff ffffffff ' + 'ffffffff ffffffff fffffffa 51868783 bf2f966b 7fcc0148 ' + 'f709a5d0 3bb5c9b8 899c47ae bb6fb71e 91386409',\n hash: hash.sha512,\n gRed: false,\n 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']\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: ['9']\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: ['216936d3cd6e53fec0a4e231fdd6dc5c692cc7609525a7b2c9562d608f25d51a',\n // 4/5\n '6666666666666666666666666666666666666666666666666666666666666658']\n});\nvar pre;\ntry {\n pre = require('./precomputed/secp256k1');\n} catch (e) {\n pre = undefined;\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 // Precomputed endomorphism\n beta: '7ae96a2b657c07106e64479eac3434e99cf0497512f58995c1396c28719501ee',\n lambda: '5363ad4cc05c30e0a5261c028812645a122e22ea20816678df02967c1b23bd72',\n basis: [{\n a: '3086d221a7d46bcde86c90e49284eb15',\n b: '-e4437ed6010e88286f547fa90abfe4c3'\n }, {\n a: '114ca50f7a8e2f3f657c1108d9d44cfd8',\n b: '3086d221a7d46bcde86c90e49284eb15'\n }],\n gRed: false,\n g: ['79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798', '483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b8', pre]\n});","'use strict';\n\nvar utils = require('../utils');\nvar BN = require('bn.js');\nvar inherits = require('inherits');\nvar Base = require('./base');\nvar assert = utils.assert;\nfunction ShortCurve(conf) {\n Base.call(this, 'short', conf);\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 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;\nShortCurve.prototype._getEndomorphism = function _getEndomorphism(conf) {\n // No efficient endomorphism\n if (!this.zeroA || !this.g || !this.n || this.p.modn(3) !== 1) 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 return {\n beta: beta,\n lambda: lambda,\n basis: basis\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 var s = new BN(3).toRed(red).redNeg().redSqrt().redMul(tinv);\n var l1 = ntinv.redAdd(s).fromRed();\n var l2 = ntinv.redSub(s).fromRed();\n return [l1, l2];\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 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 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 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 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 return [{\n a: a1,\n b: b1\n }, {\n a: a2,\n b: b2\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 var c1 = v2.b.mul(k).divRound(this.n);\n var c2 = v1.b.neg().mul(k).divRound(this.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 {\n k1: k1,\n k2: k2\n };\n};\nShortCurve.prototype.pointFromX = function pointFromX(x, odd) {\n x = new BN(x, 16);\n if (!x.red) x = x.toRed(this.red);\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) 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) y = y.redNeg();\n return this.point(x, y);\n};\nShortCurve.prototype.validate = function validate(point) {\n if (point.inf) return true;\n var x = point.x;\n var y = point.y;\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};\nShortCurve.prototype._endoWnafMulAdd = 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 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 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};\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) this.x = this.x.toRed(this.curve.red);\n if (!this.y.red) this.y = this.y.toRed(this.curve.red);\n this.inf = false;\n }\n}\ninherits(Point, Base.BasePoint);\nShortCurve.prototype.point = function point(x, y, isRed) {\n return new Point(this, x, y, isRed);\n};\nShortCurve.prototype.pointFromJSON = function pointFromJSON(obj, red) {\n return Point.fromJSON(this, obj, red);\n};\nPoint.prototype._getBeta = function _getBeta() {\n if (!this.curve.endo) return;\n var pre = this.precomputed;\n if (pre && pre.beta) return pre.beta;\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};\nPoint.prototype.toJSON = function toJSON() {\n if (!this.precomputed) return [this.x, this.y];\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};\nPoint.fromJSON = function fromJSON(curve, obj, red) {\n if (typeof obj === 'string') obj = JSON.parse(obj);\n var res = curve.point(obj[0], obj[1], red);\n if (!obj[2]) return res;\n function obj2point(obj) {\n return curve.point(obj[0], obj[1], red);\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};\nPoint.prototype.inspect = function inspect() {\n if (this.isInfinity()) return '';\n return '';\n};\nPoint.prototype.isInfinity = function isInfinity() {\n return this.inf;\n};\nPoint.prototype.add = function add(p) {\n // O + P = P\n if (this.inf) return p;\n\n // P + O = P\n if (p.inf) return this;\n\n // P + P = 2P\n if (this.eq(p)) return this.dbl();\n\n // P + (-P) = O\n if (this.neg().eq(p)) return this.curve.point(null, null);\n\n // P + Q = O\n if (this.x.cmp(p.x) === 0) return this.curve.point(null, null);\n var c = this.y.redSub(p.y);\n if (c.cmpn(0) !== 0) 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};\nPoint.prototype.dbl = function dbl() {\n if (this.inf) return this;\n\n // 2P = O\n var ys1 = this.y.redAdd(this.y);\n if (ys1.cmpn(0) === 0) return this.curve.point(null, null);\n var a = this.curve.a;\n var x2 = this.x.redSqr();\n var dyinv = ys1.redInvm();\n var c = x2.redAdd(x2).redIAdd(x2).redIAdd(a).redMul(dyinv);\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};\nPoint.prototype.getX = function getX() {\n return this.x.fromRed();\n};\nPoint.prototype.getY = function getY() {\n return this.y.fromRed();\n};\nPoint.prototype.mul = function mul(k) {\n k = new BN(k, 16);\n if (this.isInfinity()) return this;else 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);\n};\nPoint.prototype.mulAdd = function mulAdd(k1, p2, k2) {\n var points = [this, p2];\n var coeffs = [k1, k2];\n if (this.curve.endo) return this.curve._endoWnafMulAdd(points, coeffs);else return this.curve._wnafMulAdd(1, points, coeffs, 2);\n};\nPoint.prototype.jmulAdd = function jmulAdd(k1, p2, k2) {\n var points = [this, p2];\n var coeffs = [k1, k2];\n if (this.curve.endo) return this.curve._endoWnafMulAdd(points, coeffs, true);else return this.curve._wnafMulAdd(1, points, coeffs, 2, true);\n};\nPoint.prototype.eq = function eq(p) {\n return this === p || this.inf === p.inf && (this.inf || this.x.cmp(p.x) === 0 && this.y.cmp(p.y) === 0);\n};\nPoint.prototype.neg = function neg(_precompute) {\n if (this.inf) return this;\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};\nPoint.prototype.toJ = function toJ() {\n if (this.inf) return this.curve.jpoint(null, null, null);\n var res = this.curve.jpoint(this.x, this.y, this.curve.one);\n return res;\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) this.x = this.x.toRed(this.curve.red);\n if (!this.y.red) this.y = this.y.toRed(this.curve.red);\n if (!this.z.red) this.z = this.z.toRed(this.curve.red);\n this.zOne = this.z === this.curve.one;\n}\ninherits(JPoint, Base.BasePoint);\nShortCurve.prototype.jpoint = function jpoint(x, y, z) {\n return new JPoint(this, x, y, z);\n};\nJPoint.prototype.toP = function toP() {\n if (this.isInfinity()) return this.curve.point(null, null);\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 return this.curve.point(ax, ay);\n};\nJPoint.prototype.neg = function neg() {\n return this.curve.jpoint(this.x, this.y.redNeg(), this.z);\n};\nJPoint.prototype.add = function add(p) {\n // O + P = P\n if (this.isInfinity()) return p;\n\n // P + O = P\n if (p.isInfinity()) 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 var h = u1.redSub(u2);\n var r = s1.redSub(s2);\n if (h.cmpn(0) === 0) {\n if (r.cmpn(0) !== 0) return this.curve.jpoint(null, null, null);else return this.dbl();\n }\n var h2 = h.redSqr();\n var h3 = h2.redMul(h);\n var v = u1.redMul(h2);\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 return this.curve.jpoint(nx, ny, nz);\n};\nJPoint.prototype.mixedAdd = function mixedAdd(p) {\n // O + P = P\n if (this.isInfinity()) return p.toJ();\n\n // P + O = P\n if (p.isInfinity()) 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 var h = u1.redSub(u2);\n var r = s1.redSub(s2);\n if (h.cmpn(0) === 0) {\n if (r.cmpn(0) !== 0) return this.curve.jpoint(null, null, null);else return this.dbl();\n }\n var h2 = h.redSqr();\n var h3 = h2.redMul(h);\n var v = u1.redMul(h2);\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 return this.curve.jpoint(nx, ny, nz);\n};\nJPoint.prototype.dblp = function dblp(pow) {\n if (pow === 0) return this;\n if (this.isInfinity()) return this;\n if (!pow) return this.dbl();\n var i;\n if (this.curve.zeroA || this.curve.threeA) {\n var r = this;\n for (i = 0; i < pow; i++) 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 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 (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 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) jz4 = jz4.redMul(jyd4);\n jx = nx;\n jz = nz;\n jyd = dny;\n }\n return this.curve.jpoint(jx, jyd.redMul(tinv), jz);\n};\nJPoint.prototype.dbl = function dbl() {\n if (this.isInfinity()) return this;\n if (this.curve.zeroA) return this._zeroDbl();else if (this.curve.threeA) return this._threeDbl();else return this._dbl();\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 return this.curve.jpoint(nx, ny, nz);\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 return this.curve.jpoint(nx, ny, nz);\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 var jx2 = jx.redSqr();\n var jy2 = jy.redSqr();\n var c = jx2.redAdd(jx2).redIAdd(jx2).redIAdd(a.redMul(jz4));\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 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 return this.curve.jpoint(nx, ny, nz);\n};\nJPoint.prototype.trpl = function trpl() {\n if (!this.curve.zeroA) 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 return this.curve.jpoint(nx, ny, nz);\n};\nJPoint.prototype.mul = function mul(k, kbase) {\n k = new BN(k, kbase);\n return this.curve._wnafMul(this, k);\n};\nJPoint.prototype.eq = function eq(p) {\n if (p.type === 'affine') return this.eq(p.toJ());\n if (this === p) 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) 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};\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) return true;\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) return false;\n rx.redIAdd(t);\n if (this.x.cmp(rx) === 0) return true;\n }\n};\nJPoint.prototype.inspect = function inspect() {\n if (this.isInfinity()) return '';\n return '';\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};"],"sourceRoot":""}