{"version":3,"sources":["../node_modules/elliptic/lib/elliptic/curve/base.js","../node_modules/elliptic/lib/elliptic.js","../node_modules/elliptic/lib/elliptic/curves.js","../node_modules/elliptic/lib/elliptic/curve/index.js","../node_modules/elliptic/lib/elliptic/curve/short.js","../node_modules/elliptic/lib/elliptic/curve/mont.js","../node_modules/elliptic/lib/elliptic/curve/edwards.js"],"names":["BN","require","utils","getNAF","getJSF","assert","BaseCurve","type","conf","this","p","red","prime","mont","zero","toRed","one","two","n","g","pointFromJSON","gRed","_wnafT1","Array","_wnafT2","_wnafT3","_wnafT4","_bitLength","bitLength","adjustCount","div","cmpn","redN","_maxwellTrick","BasePoint","curve","precomputed","module","exports","prototype","point","Error","validate","_fixedNafMul","k","doubles","_getDoubles","naf","I","step","j","nafW","repr","length","l","push","a","jpoint","b","i","mixedAdd","points","neg","add","toP","_wnafMul","w","nafPoints","_getNAFPoints","wnd","acc","dblp","z","_wnafMulAdd","defW","coeffs","len","jacobianResult","wndWidth","max","comb","y","cmp","toJ","redNeg","index","jsf","Math","ja","jb","tmp","eq","decodePoint","bytes","enc","toArray","byteLength","slice","pointFromX","encodeCompressed","encode","_encode","compact","x","getX","getY","isEven","concat","precompute","power","beta","_getBeta","_hasDoubles","ceil","dbl","res","r","elliptic","version","rand","curves","ec","eddsa","pre","hash","PresetCurve","options","short","edwards","mul","isInfinity","defineCurve","name","Object","defineProperty","configurable","enumerable","get","value","sha256","sha384","sha512","c","d","e","undefined","h","lambda","basis","base","inherits","Base","ShortCurve","call","tinv","redInvm","zeroA","fromRed","threeA","sub","endo","_getEndomorphism","_endoWnafT1","_endoWnafT2","Point","isRed","inf","forceRed","JPoint","zOne","modn","betas","_getEndoRoots","lambdas","redMul","map","vec","_getEndoBasis","num","ntinv","s","redSqrt","redAdd","redSub","a0","b0","a1","b1","a2","b2","prevR","aprxSqrt","ushrn","floor","u","v","clone","x1","y1","x2","y2","q","len1","sqr","negative","_endoSplit","v1","v2","c1","divRound","c2","p1","p2","q1","q2","k1","k2","odd","redSqr","redIAdd","isOdd","ax","rhs","redISub","_endoWnafMulAdd","npoints","ncoeffs","split","ineg","obj","fromJSON","endoMul","toJSON","JSON","parse","obj2point","inspect","toString","nx","ny","ys1","dyinv","mulAdd","jmulAdd","_precompute","negate","zinv","zinv2","ay","pz2","z2","u1","u2","s1","s2","h2","h3","nz","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","iadd","MontCurve","i4","a24","normalize","aa","bb","diffAdd","diff","da","cb","bits","iushrn","andln","jumlAdd","other","EdwardsCurve","twisted","mOneA","extended","umod","dd","oneC","_mulA","_mulC","lhs","pointFromY","_extDbl","nt","_projDbl","_extAdd","_projAdd","zi"],"mappings":"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","file":"static/js/main~19e3614f.da67b366.chunk.js","sourcesContent":["'use strict';\n\nvar BN = require('bn.js');\nvar utils = require('../utils');\nvar getNAF = utils.getNAF;\nvar getJSF = utils.getJSF;\nvar assert = utils.assert;\n\nfunction BaseCurve(type, conf) {\n this.type = type;\n this.p = new BN(conf.p, 16);\n\n // Use Montgomery, when there is no fast reduction for the prime\n this.red = conf.prime ? BN.red(conf.prime) : BN.mont(this.p);\n\n // Useful for many curves\n this.zero = new BN(0).toRed(this.red);\n this.one = new BN(1).toRed(this.red);\n this.two = new BN(2).toRed(this.red);\n\n // Curve configuration, optional\n this.n = conf.n && new BN(conf.n, 16);\n this.g = conf.g && this.pointFromJSON(conf.g, conf.gRed);\n\n // Temporary arrays\n this._wnafT1 = new Array(4);\n this._wnafT2 = new Array(4);\n this._wnafT3 = new Array(4);\n this._wnafT4 = new Array(4);\n\n this._bitLength = this.n ? this.n.bitLength() : 0;\n\n // Generalized Greg Maxwell's trick\n var adjustCount = this.n && this.p.div(this.n);\n if (!adjustCount || adjustCount.cmpn(100) > 0) {\n this.redN = null;\n } else {\n this._maxwellTrick = true;\n this.redN = this.n.toRed(this.red);\n }\n}\nmodule.exports = BaseCurve;\n\nBaseCurve.prototype.point = function point() {\n throw new Error('Not implemented');\n};\n\nBaseCurve.prototype.validate = function validate() {\n throw new Error('Not implemented');\n};\n\nBaseCurve.prototype._fixedNafMul = function _fixedNafMul(p, k) {\n assert(p.precomputed);\n var doubles = p._getDoubles();\n\n var naf = getNAF(k, 1, this._bitLength);\n var I = (1 << (doubles.step + 1)) - (doubles.step % 2 === 0 ? 2 : 1);\n I /= 3;\n\n // Translate into more windowed form\n var repr = [];\n var j;\n var nafW;\n for (j = 0; j < naf.length; j += doubles.step) {\n nafW = 0;\n for (var l = j + doubles.step - 1; l >= j; l--)\n nafW = (nafW << 1) + naf[l];\n repr.push(nafW);\n }\n\n var a = this.jpoint(null, null, null);\n var b = this.jpoint(null, null, null);\n for (var i = I; i > 0; i--) {\n for (j = 0; j < repr.length; j++) {\n nafW = repr[j];\n if (nafW === i)\n b = b.mixedAdd(doubles.points[j]);\n else if (nafW === -i)\n b = b.mixedAdd(doubles.points[j].neg());\n }\n a = a.add(b);\n }\n return a.toP();\n};\n\nBaseCurve.prototype._wnafMul = function _wnafMul(p, k) {\n var w = 4;\n\n // Precompute window\n var nafPoints = p._getNAFPoints(w);\n w = nafPoints.wnd;\n var wnd = nafPoints.points;\n\n // Get NAF form\n var naf = getNAF(k, w, this._bitLength);\n\n // Add `this`*(N+1) for every w-NAF index\n var acc = this.jpoint(null, null, null);\n for (var i = naf.length - 1; i >= 0; i--) {\n // Count zeroes\n for (var l = 0; i >= 0 && naf[i] === 0; i--)\n l++;\n if (i >= 0)\n l++;\n acc = acc.dblp(l);\n\n if (i < 0)\n break;\n var z = naf[i];\n assert(z !== 0);\n if (p.type === 'affine') {\n // J +- P\n if (z > 0)\n acc = acc.mixedAdd(wnd[(z - 1) >> 1]);\n else\n acc = acc.mixedAdd(wnd[(-z - 1) >> 1].neg());\n } else {\n // J +- J\n if (z > 0)\n acc = acc.add(wnd[(z - 1) >> 1]);\n else\n acc = acc.add(wnd[(-z - 1) >> 1].neg());\n }\n }\n return p.type === 'affine' ? acc.toP() : acc;\n};\n\nBaseCurve.prototype._wnafMulAdd = function _wnafMulAdd(defW,\n points,\n coeffs,\n len,\n jacobianResult) {\n var wndWidth = this._wnafT1;\n var wnd = this._wnafT2;\n var naf = this._wnafT3;\n\n // Fill all arrays\n var max = 0;\n var i;\n var j;\n var p;\n for (i = 0; i < len; i++) {\n p = points[i];\n var nafPoints = p._getNAFPoints(defW);\n wndWidth[i] = nafPoints.wnd;\n wnd[i] = nafPoints.points;\n }\n\n // Comb small window NAFs\n for (i = len - 1; i >= 1; i -= 2) {\n var a = i - 1;\n var b = i;\n if (wndWidth[a] !== 1 || wndWidth[b] !== 1) {\n naf[a] = getNAF(coeffs[a], wndWidth[a], this._bitLength);\n naf[b] = getNAF(coeffs[b], wndWidth[b], this._bitLength);\n max = Math.max(naf[a].length, max);\n max = Math.max(naf[b].length, max);\n continue;\n }\n\n var comb = [\n points[a], /* 1 */\n null, /* 3 */\n null, /* 5 */\n points[b], /* 7 */\n ];\n\n // Try to avoid Projective points, if possible\n if (points[a].y.cmp(points[b].y) === 0) {\n comb[1] = points[a].add(points[b]);\n comb[2] = points[a].toJ().mixedAdd(points[b].neg());\n } else if (points[a].y.cmp(points[b].y.redNeg()) === 0) {\n comb[1] = points[a].toJ().mixedAdd(points[b]);\n comb[2] = points[a].add(points[b].neg());\n } else {\n comb[1] = points[a].toJ().mixedAdd(points[b]);\n comb[2] = points[a].toJ().mixedAdd(points[b].neg());\n }\n\n var index = [\n -3, /* -1 -1 */\n -1, /* -1 0 */\n -5, /* -1 1 */\n -7, /* 0 -1 */\n 0, /* 0 0 */\n 7, /* 0 1 */\n 5, /* 1 -1 */\n 1, /* 1 0 */\n 3, /* 1 1 */\n ];\n\n var jsf = getJSF(coeffs[a], coeffs[b]);\n max = Math.max(jsf[0].length, max);\n naf[a] = new Array(max);\n naf[b] = new Array(max);\n for (j = 0; j < max; j++) {\n var ja = jsf[0][j] | 0;\n var jb = jsf[1][j] | 0;\n\n naf[a][j] = index[(ja + 1) * 3 + (jb + 1)];\n naf[b][j] = 0;\n wnd[a] = comb;\n }\n }\n\n var acc = this.jpoint(null, null, null);\n var tmp = this._wnafT4;\n for (i = max; i >= 0; i--) {\n var k = 0;\n\n while (i >= 0) {\n var zero = true;\n for (j = 0; j < len; j++) {\n tmp[j] = naf[j][i] | 0;\n if (tmp[j] !== 0)\n zero = false;\n }\n if (!zero)\n break;\n k++;\n i--;\n }\n if (i >= 0)\n k++;\n acc = acc.dblp(k);\n if (i < 0)\n break;\n\n for (j = 0; j < len; j++) {\n var z = tmp[j];\n p;\n if (z === 0)\n continue;\n else if (z > 0)\n p = wnd[j][(z - 1) >> 1];\n else if (z < 0)\n p = wnd[j][(-z - 1) >> 1].neg();\n\n if (p.type === 'affine')\n acc = acc.mixedAdd(p);\n else\n acc = acc.add(p);\n }\n }\n // Zeroify references\n for (i = 0; i < len; i++)\n wnd[i] = null;\n\n if (jacobianResult)\n return acc;\n else\n return acc.toP();\n};\n\nfunction BasePoint(curve, type) {\n this.curve = curve;\n this.type = type;\n this.precomputed = null;\n}\nBaseCurve.BasePoint = BasePoint;\n\nBasePoint.prototype.eq = function eq(/*other*/) {\n throw new Error('Not implemented');\n};\n\nBasePoint.prototype.validate = function validate() {\n return this.curve.validate(this);\n};\n\nBaseCurve.prototype.decodePoint = function decodePoint(bytes, enc) {\n bytes = utils.toArray(bytes, enc);\n\n var len = this.p.byteLength();\n\n // uncompressed, hybrid-odd, hybrid-even\n if ((bytes[0] === 0x04 || bytes[0] === 0x06 || bytes[0] === 0x07) &&\n bytes.length - 1 === 2 * len) {\n if (bytes[0] === 0x06)\n assert(bytes[bytes.length - 1] % 2 === 0);\n else if (bytes[0] === 0x07)\n assert(bytes[bytes.length - 1] % 2 === 1);\n\n var res = this.point(bytes.slice(1, 1 + len),\n bytes.slice(1 + len, 1 + 2 * len));\n\n return res;\n } else if ((bytes[0] === 0x02 || bytes[0] === 0x03) &&\n bytes.length - 1 === len) {\n return this.pointFromX(bytes.slice(1, 1 + len), bytes[0] === 0x03);\n }\n throw new Error('Unknown point format');\n};\n\nBasePoint.prototype.encodeCompressed = function encodeCompressed(enc) {\n return this.encode(enc, true);\n};\n\nBasePoint.prototype._encode = function _encode(compact) {\n var len = this.curve.p.byteLength();\n var x = this.getX().toArray('be', len);\n\n if (compact)\n return [ this.getY().isEven() ? 0x02 : 0x03 ].concat(x);\n\n return [ 0x04 ].concat(x, this.getY().toArray('be', len));\n};\n\nBasePoint.prototype.encode = function encode(enc, compact) {\n return utils.encode(this._encode(compact), enc);\n};\n\nBasePoint.prototype.precompute = function precompute(power) {\n if (this.precomputed)\n return this;\n\n var precomputed = {\n doubles: null,\n naf: null,\n beta: null,\n };\n precomputed.naf = this._getNAFPoints(8);\n precomputed.doubles = this._getDoubles(4, power);\n precomputed.beta = this._getBeta();\n this.precomputed = precomputed;\n\n return this;\n};\n\nBasePoint.prototype._hasDoubles = function _hasDoubles(k) {\n if (!this.precomputed)\n return false;\n\n var doubles = this.precomputed.doubles;\n if (!doubles)\n return false;\n\n return doubles.points.length >= Math.ceil((k.bitLength() + 1) / doubles.step);\n};\n\nBasePoint.prototype._getDoubles = function _getDoubles(step, power) {\n if (this.precomputed && this.precomputed.doubles)\n return this.precomputed.doubles;\n\n var doubles = [ this ];\n var acc = this;\n for (var i = 0; i < power; i += step) {\n for (var j = 0; j < step; j++)\n acc = acc.dbl();\n doubles.push(acc);\n }\n return {\n step: step,\n points: doubles,\n };\n};\n\nBasePoint.prototype._getNAFPoints = function _getNAFPoints(wnd) {\n if (this.precomputed && this.precomputed.naf)\n return this.precomputed.naf;\n\n var res = [ this ];\n var max = (1 << wnd) - 1;\n var dbl = max === 1 ? null : this.dbl();\n for (var i = 1; i < max; i++)\n res[i] = res[i - 1].add(dbl);\n return {\n wnd: wnd,\n points: res,\n };\n};\n\nBasePoint.prototype._getBeta = function _getBeta() {\n return null;\n};\n\nBasePoint.prototype.dblp = function dblp(k) {\n var r = this;\n for (var i = 0; i < k; i++)\n r = r.dbl();\n return r;\n};\n","'use strict';\n\nvar elliptic = exports;\n\nelliptic.version = require('../package.json').version;\nelliptic.utils = require('./elliptic/utils');\nelliptic.rand = require('brorand');\nelliptic.curve = require('./elliptic/curve');\nelliptic.curves = require('./elliptic/curves');\n\n// Protocols\nelliptic.ec = require('./elliptic/ec');\nelliptic.eddsa = require('./elliptic/eddsa');\n","'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 curve = exports;\n\ncurve.base = require('./base');\ncurve.short = require('./short');\ncurve.mont = require('./mont');\ncurve.edwards = require('./edwards');\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 var i;\n if (this.curve.zeroA || this.curve.threeA) {\n var r = this;\n for (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 (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","'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 EdwardsCurve(conf) {\n // NOTE: Important as we are creating point in Base.call()\n this.twisted = (conf.a | 0) !== 1;\n this.mOneA = this.twisted && (conf.a | 0) === -1;\n this.extended = this.mOneA;\n\n Base.call(this, 'edwards', conf);\n\n this.a = new BN(conf.a, 16).umod(this.red.m);\n this.a = this.a.toRed(this.red);\n this.c = new BN(conf.c, 16).toRed(this.red);\n this.c2 = this.c.redSqr();\n this.d = new BN(conf.d, 16).toRed(this.red);\n this.dd = this.d.redAdd(this.d);\n\n assert(!this.twisted || this.c.fromRed().cmpn(1) === 0);\n this.oneC = (conf.c | 0) === 1;\n}\ninherits(EdwardsCurve, Base);\nmodule.exports = EdwardsCurve;\n\nEdwardsCurve.prototype._mulA = function _mulA(num) {\n if (this.mOneA)\n return num.redNeg();\n else\n return this.a.redMul(num);\n};\n\nEdwardsCurve.prototype._mulC = function _mulC(num) {\n if (this.oneC)\n return num;\n else\n return this.c.redMul(num);\n};\n\n// Just for compatibility with Short curve\nEdwardsCurve.prototype.jpoint = function jpoint(x, y, z, t) {\n return this.point(x, y, z, t);\n};\n\nEdwardsCurve.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 x2 = x.redSqr();\n var rhs = this.c2.redSub(this.a.redMul(x2));\n var lhs = this.one.redSub(this.c2.redMul(this.d).redMul(x2));\n\n var y2 = rhs.redMul(lhs.redInvm());\n var y = y2.redSqrt();\n if (y.redSqr().redSub(y2).cmp(this.zero) !== 0)\n throw new Error('invalid point');\n\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\nEdwardsCurve.prototype.pointFromY = function pointFromY(y, odd) {\n y = new BN(y, 16);\n if (!y.red)\n y = y.toRed(this.red);\n\n // x^2 = (y^2 - c^2) / (c^2 d y^2 - a)\n var y2 = y.redSqr();\n var lhs = y2.redSub(this.c2);\n var rhs = y2.redMul(this.d).redMul(this.c2).redSub(this.a);\n var x2 = lhs.redMul(rhs.redInvm());\n\n if (x2.cmp(this.zero) === 0) {\n if (odd)\n throw new Error('invalid point');\n else\n return this.point(this.zero, y);\n }\n\n var x = x2.redSqrt();\n if (x.redSqr().redSub(x2).cmp(this.zero) !== 0)\n throw new Error('invalid point');\n\n if (x.fromRed().isOdd() !== odd)\n x = x.redNeg();\n\n return this.point(x, y);\n};\n\nEdwardsCurve.prototype.validate = function validate(point) {\n if (point.isInfinity())\n return true;\n\n // Curve: A * X^2 + Y^2 = C^2 * (1 + D * X^2 * Y^2)\n point.normalize();\n\n var x2 = point.x.redSqr();\n var y2 = point.y.redSqr();\n var lhs = x2.redMul(this.a).redAdd(y2);\n var rhs = this.c2.redMul(this.one.redAdd(this.d.redMul(x2).redMul(y2)));\n\n return lhs.cmp(rhs) === 0;\n};\n\nfunction Point(curve, x, y, z, t) {\n Base.BasePoint.call(this, curve, 'projective');\n if (x === null && y === null && z === null) {\n this.x = this.curve.zero;\n this.y = this.curve.one;\n this.z = this.curve.one;\n this.t = this.curve.zero;\n this.zOne = true;\n } else {\n this.x = new BN(x, 16);\n this.y = new BN(y, 16);\n this.z = z ? new BN(z, 16) : this.curve.one;\n this.t = t && new BN(t, 16);\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 if (this.t && !this.t.red)\n this.t = this.t.toRed(this.curve.red);\n this.zOne = this.z === this.curve.one;\n\n // Use extended coordinates\n if (this.curve.extended && !this.t) {\n this.t = this.x.redMul(this.y);\n if (!this.zOne)\n this.t = this.t.redMul(this.z.redInvm());\n }\n }\n}\ninherits(Point, Base.BasePoint);\n\nEdwardsCurve.prototype.pointFromJSON = function pointFromJSON(obj) {\n return Point.fromJSON(this, obj);\n};\n\nEdwardsCurve.prototype.point = function point(x, y, z, t) {\n return new Point(this, x, y, z, t);\n};\n\nPoint.fromJSON = function fromJSON(curve, obj) {\n return new Point(curve, obj[0], obj[1], obj[2]);\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.x.cmpn(0) === 0 &&\n (this.y.cmp(this.z) === 0 ||\n (this.zOne && this.y.cmp(this.curve.c) === 0));\n};\n\nPoint.prototype._extDbl = function _extDbl() {\n // hyperelliptic.org/EFD/g1p/auto-twisted-extended-1.html\n // #doubling-dbl-2008-hwcd\n // 4M + 4S\n\n // A = X1^2\n var a = this.x.redSqr();\n // B = Y1^2\n var b = this.y.redSqr();\n // C = 2 * Z1^2\n var c = this.z.redSqr();\n c = c.redIAdd(c);\n // D = a * A\n var d = this.curve._mulA(a);\n // E = (X1 + Y1)^2 - A - B\n var e = this.x.redAdd(this.y).redSqr().redISub(a).redISub(b);\n // G = D + B\n var g = d.redAdd(b);\n // F = G - C\n var f = g.redSub(c);\n // H = D - B\n var h = d.redSub(b);\n // X3 = E * F\n var nx = e.redMul(f);\n // Y3 = G * H\n var ny = g.redMul(h);\n // T3 = E * H\n var nt = e.redMul(h);\n // Z3 = F * G\n var nz = f.redMul(g);\n return this.curve.point(nx, ny, nz, nt);\n};\n\nPoint.prototype._projDbl = function _projDbl() {\n // hyperelliptic.org/EFD/g1p/auto-twisted-projective.html\n // #doubling-dbl-2008-bbjlp\n // #doubling-dbl-2007-bl\n // and others\n // Generally 3M + 4S or 2M + 4S\n\n // B = (X1 + Y1)^2\n var b = this.x.redAdd(this.y).redSqr();\n // C = X1^2\n var c = this.x.redSqr();\n // D = Y1^2\n var d = this.y.redSqr();\n\n var nx;\n var ny;\n var nz;\n var e;\n var h;\n var j;\n if (this.curve.twisted) {\n // E = a * C\n e = this.curve._mulA(c);\n // F = E + D\n var f = e.redAdd(d);\n if (this.zOne) {\n // X3 = (B - C - D) * (F - 2)\n nx = b.redSub(c).redSub(d).redMul(f.redSub(this.curve.two));\n // Y3 = F * (E - D)\n ny = f.redMul(e.redSub(d));\n // Z3 = F^2 - 2 * F\n nz = f.redSqr().redSub(f).redSub(f);\n } else {\n // H = Z1^2\n h = this.z.redSqr();\n // J = F - 2 * H\n j = f.redSub(h).redISub(h);\n // X3 = (B-C-D)*J\n nx = b.redSub(c).redISub(d).redMul(j);\n // Y3 = F * (E - D)\n ny = f.redMul(e.redSub(d));\n // Z3 = F * J\n nz = f.redMul(j);\n }\n } else {\n // E = C + D\n e = c.redAdd(d);\n // H = (c * Z1)^2\n h = this.curve._mulC(this.z).redSqr();\n // J = E - 2 * H\n j = e.redSub(h).redSub(h);\n // X3 = c * (B - E) * J\n nx = this.curve._mulC(b.redISub(e)).redMul(j);\n // Y3 = c * E * (C - D)\n ny = this.curve._mulC(e).redMul(c.redISub(d));\n // Z3 = E * J\n nz = e.redMul(j);\n }\n return this.curve.point(nx, ny, nz);\n};\n\nPoint.prototype.dbl = function dbl() {\n if (this.isInfinity())\n return this;\n\n // Double in extended coordinates\n if (this.curve.extended)\n return this._extDbl();\n else\n return this._projDbl();\n};\n\nPoint.prototype._extAdd = function _extAdd(p) {\n // hyperelliptic.org/EFD/g1p/auto-twisted-extended-1.html\n // #addition-add-2008-hwcd-3\n // 8M\n\n // A = (Y1 - X1) * (Y2 - X2)\n var a = this.y.redSub(this.x).redMul(p.y.redSub(p.x));\n // B = (Y1 + X1) * (Y2 + X2)\n var b = this.y.redAdd(this.x).redMul(p.y.redAdd(p.x));\n // C = T1 * k * T2\n var c = this.t.redMul(this.curve.dd).redMul(p.t);\n // D = Z1 * 2 * Z2\n var d = this.z.redMul(p.z.redAdd(p.z));\n // E = B - A\n var e = b.redSub(a);\n // F = D - C\n var f = d.redSub(c);\n // G = D + C\n var g = d.redAdd(c);\n // H = B + A\n var h = b.redAdd(a);\n // X3 = E * F\n var nx = e.redMul(f);\n // Y3 = G * H\n var ny = g.redMul(h);\n // T3 = E * H\n var nt = e.redMul(h);\n // Z3 = F * G\n var nz = f.redMul(g);\n return this.curve.point(nx, ny, nz, nt);\n};\n\nPoint.prototype._projAdd = function _projAdd(p) {\n // hyperelliptic.org/EFD/g1p/auto-twisted-projective.html\n // #addition-add-2008-bbjlp\n // #addition-add-2007-bl\n // 10M + 1S\n\n // A = Z1 * Z2\n var a = this.z.redMul(p.z);\n // B = A^2\n var b = a.redSqr();\n // C = X1 * X2\n var c = this.x.redMul(p.x);\n // D = Y1 * Y2\n var d = this.y.redMul(p.y);\n // E = d * C * D\n var e = this.curve.d.redMul(c).redMul(d);\n // F = B - E\n var f = b.redSub(e);\n // G = B + E\n var g = b.redAdd(e);\n // X3 = A * F * ((X1 + Y1) * (X2 + Y2) - C - D)\n var tmp = this.x.redAdd(this.y).redMul(p.x.redAdd(p.y)).redISub(c).redISub(d);\n var nx = a.redMul(f).redMul(tmp);\n var ny;\n var nz;\n if (this.curve.twisted) {\n // Y3 = A * G * (D - a * C)\n ny = a.redMul(g).redMul(d.redSub(this.curve._mulA(c)));\n // Z3 = F * G\n nz = f.redMul(g);\n } else {\n // Y3 = A * G * (D - C)\n ny = a.redMul(g).redMul(d.redSub(c));\n // Z3 = c * F * G\n nz = this.curve._mulC(f).redMul(g);\n }\n return this.curve.point(nx, ny, nz);\n};\n\nPoint.prototype.add = function add(p) {\n if (this.isInfinity())\n return p;\n if (p.isInfinity())\n return this;\n\n if (this.curve.extended)\n return this._extAdd(p);\n else\n return this._projAdd(p);\n};\n\nPoint.prototype.mul = function mul(k) {\n if (this._hasDoubles(k))\n return this.curve._fixedNafMul(this, k);\n else\n return this.curve._wnafMul(this, k);\n};\n\nPoint.prototype.mulAdd = function mulAdd(k1, p, k2) {\n return this.curve._wnafMulAdd(1, [ this, p ], [ k1, k2 ], 2, false);\n};\n\nPoint.prototype.jmulAdd = function jmulAdd(k1, p, k2) {\n return this.curve._wnafMulAdd(1, [ this, p ], [ k1, k2 ], 2, true);\n};\n\nPoint.prototype.normalize = function normalize() {\n if (this.zOne)\n return this;\n\n // Normalize coordinates\n var zi = this.z.redInvm();\n this.x = this.x.redMul(zi);\n this.y = this.y.redMul(zi);\n if (this.t)\n this.t = this.t.redMul(zi);\n this.z = this.curve.one;\n this.zOne = true;\n return this;\n};\n\nPoint.prototype.neg = function neg() {\n return this.curve.point(this.x.redNeg(),\n this.y,\n this.z,\n this.t && this.t.redNeg());\n};\n\nPoint.prototype.getX = function getX() {\n this.normalize();\n return this.x.fromRed();\n};\n\nPoint.prototype.getY = function getY() {\n this.normalize();\n return this.y.fromRed();\n};\n\nPoint.prototype.eq = function eq(other) {\n return this === other ||\n this.getX().cmp(other.getX()) === 0 &&\n this.getY().cmp(other.getY()) === 0;\n};\n\nPoint.prototype.eqXToP = function eqXToP(x) {\n var rx = x.toRed(this.curve.red).redMul(this.z);\n if (this.x.cmp(rx) === 0)\n return true;\n\n var xc = x.clone();\n var t = this.curve.redN.redMul(this.z);\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\n// Compatibility with BaseCurve\nPoint.prototype.toP = Point.prototype.normalize;\nPoint.prototype.mixedAdd = Point.prototype.add;\n"],"sourceRoot":""}