{"id":"node_modules/elliptic/lib/elliptic/curve/mont.js","dependencies":[{"name":"/www/ml-classifier/example/package.json","includedInParent":true,"mtime":1551949031632},{"name":"/www/ml-classifier/example/.babelrc","includedInParent":true,"mtime":1551703756168},{"name":"/www/ml-classifier/example/node_modules/elliptic/package.json","includedInParent":true,"mtime":1542583799903},{"name":"../curve","loc":{"line":3,"column":20},"parent":"/www/ml-classifier/example/node_modules/elliptic/lib/elliptic/curve/mont.js","resolved":"/www/ml-classifier/example/node_modules/elliptic/lib/elliptic/curve/index.js"},{"name":"bn.js","loc":{"line":4,"column":17},"parent":"/www/ml-classifier/example/node_modules/elliptic/lib/elliptic/curve/mont.js","resolved":"/www/ml-classifier/example/node_modules/bn.js/lib/bn.js"},{"name":"inherits","loc":{"line":5,"column":23},"parent":"/www/ml-classifier/example/node_modules/elliptic/lib/elliptic/curve/mont.js","resolved":"/www/ml-classifier/example/node_modules/inherits/inherits_browser.js"},{"name":"../../elliptic","loc":{"line":8,"column":23},"parent":"/www/ml-classifier/example/node_modules/elliptic/lib/elliptic/curve/mont.js","resolved":"/www/ml-classifier/example/node_modules/elliptic/lib/elliptic.js"}],"generated":{"js":"'use strict';\n\nvar curve = require('../curve');\nvar BN = require('bn.js');\nvar inherits = require('inherits');\nvar Base = curve.base;\n\nvar elliptic = require('../../elliptic');\nvar utils = elliptic.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 '<EC Point Infinity>';\n  return '<EC Point x: ' + this.x.fromRed().toString(16, 2) +\n      ' z: ' + this.z.fromRed().toString(16, 2) + '>';\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","map":{"mappings":[{"source":"node_modules/elliptic/lib/elliptic/curve/mont.js","original":{"line":1,"column":0},"generated":{"line":1,"column":0}},{"source":"node_modules/elliptic/lib/elliptic/curve/mont.js","original":{"line":2,"column":0},"generated":{"line":2,"column":0}},{"source":"node_modules/elliptic/lib/elliptic/curve/mont.js","original":{"line":3,"column":0},"generated":{"line":3,"column":0}},{"source":"node_modules/elliptic/lib/elliptic/curve/mont.js","original":{"line":4,"column":0},"generated":{"line":4,"column":0}},{"source":"node_modules/elliptic/lib/elliptic/curve/mont.js","original":{"line":5,"column":0},"generated":{"line":5,"column":0}},{"source":"node_modules/elliptic/lib/elliptic/curve/mont.js","original":{"line":6,"column":0},"generated":{"line":6,"column":0}},{"source":"node_modules/elliptic/lib/elliptic/curve/mont.js","original":{"line":7,"column":0},"generated":{"line":7,"column":0}},{"source":"node_modules/elliptic/lib/elliptic/curve/mont.js","original":{"line":8,"column":0},"generated":{"line":8,"column":0}},{"source":"node_modules/elliptic/lib/elliptic/curve/mont.js","original":{"line":9,"column":0},"generated":{"line":9,"column":0}},{"source":"node_modules/elliptic/lib/elliptic/curve/mont.js","original":{"line":10,"column":0},"generated":{"line":10,"column":0}},{"source":"node_modules/elliptic/lib/elliptic/curve/mont.js","original":{"line":11,"column":0},"generated":{"line":11,"column":0}},{"source":"node_modules/elliptic/lib/elliptic/curve/mont.js","original":{"line":12,"column":0},"generated":{"line":12,"column":0}},{"source":"node_modules/elliptic/lib/elliptic/curve/mont.js","original":{"line":13,"column":0},"generated":{"line":13,"column":0}},{"source":"node_modules/elliptic/lib/elliptic/curve/mont.js","original":{"line":14,"column":0},"generated":{"line":14,"column":0}},{"source":"node_modules/elliptic/lib/elliptic/curve/mont.js","original":{"line":15,"column":0},"generated":{"line":15,"column":0}},{"source":"node_modules/elliptic/lib/elliptic/curve/mont.js","original":{"line":16,"column":0},"generated":{"line":16,"column":0}},{"source":"node_modules/elliptic/lib/elliptic/curve/mont.js","original":{"line":17,"column":0},"generated":{"line":17,"column":0}},{"source":"node_modules/elliptic/lib/elliptic/curve/mont.js","original":{"line":18,"column":0},"generated":{"line":18,"column":0}},{"source":"node_modules/elliptic/lib/elliptic/curve/mont.js","original":{"line":19,"column":0},"generated":{"line":19,"column":0}},{"source":"node_modules/elliptic/lib/elliptic/curve/mont.js","original":{"line":20,"column":0},"generated":{"line":20,"column":0}},{"source":"node_modules/elliptic/lib/elliptic/curve/mont.js","original":{"line":21,"column":0},"generated":{"line":21,"column":0}},{"source":"node_modules/elliptic/lib/elliptic/curve/mont.js","original":{"line":22,"column":0},"generated":{"line":22,"column":0}},{"source":"node_modules/elliptic/lib/elliptic/curve/mont.js","original":{"line":23,"column":0},"generated":{"line":23,"column":0}},{"source":"node_modules/elliptic/lib/elliptic/curve/mont.js","original":{"line":24,"column":0},"generated":{"line":24,"column":0}},{"source":"node_modules/elliptic/lib/elliptic/curve/mont.js","original":{"line":25,"column":0},"generated":{"line":25,"column":0}},{"source":"node_modules/elliptic/lib/elliptic/curve/mont.js","original":{"line":26,"column":0},"generated":{"line":26,"column":0}},{"source":"node_modules/elliptic/lib/elliptic/curve/mont.js","original":{"line":27,"column":0},"generated":{"line":27,"column":0}},{"source":"node_modules/elliptic/lib/elliptic/curve/mont.js","original":{"line":28,"column":0},"generated":{"line":28,"column":0}},{"source":"node_modules/elliptic/lib/elliptic/curve/mont.js","original":{"line":29,"column":0},"generated":{"line":29,"column":0}},{"source":"node_modules/elliptic/lib/elliptic/curve/mont.js","original":{"line":30,"column":0},"generated":{"line":30,"column":0}},{"source":"node_modules/elliptic/lib/elliptic/curve/mont.js","original":{"line":31,"column":0},"generated":{"line":31,"column":0}},{"source":"node_modules/elliptic/lib/elliptic/curve/mont.js","original":{"line":32,"column":0},"generated":{"line":32,"column":0}},{"source":"node_modules/elliptic/lib/elliptic/curve/mont.js","original":{"line":33,"column":0},"generated":{"line":33,"column":0}},{"source":"node_modules/elliptic/lib/elliptic/curve/mont.js","original":{"line":34,"column":0},"generated":{"line":34,"column":0}},{"source":"node_modules/elliptic/lib/elliptic/curve/mont.js","original":{"line":35,"column":0},"generated":{"line":35,"column":0}},{"source":"node_modules/elliptic/lib/elliptic/curve/mont.js","original":{"line":36,"column":0},"generated":{"line":36,"column":0}},{"source":"node_modules/elliptic/lib/elliptic/curve/mont.js","original":{"line":37,"column":0},"generated":{"line":37,"column":0}},{"source":"node_modules/elliptic/lib/elliptic/curve/mont.js","original":{"line":38,"column":0},"generated":{"line":38,"column":0}},{"source":"node_modules/elliptic/lib/elliptic/curve/mont.js","original":{"line":39,"column":0},"generated":{"line":39,"column":0}},{"source":"node_modules/elliptic/lib/elliptic/curve/mont.js","original":{"line":40,"column":0},"generated":{"line":40,"column":0}},{"source":"node_modules/elliptic/lib/elliptic/curve/mont.js","original":{"line":41,"column":0},"generated":{"line":41,"column":0}},{"source":"node_modules/elliptic/lib/elliptic/curve/mont.js","original":{"line":42,"column":0},"generated":{"line":42,"column":0}},{"source":"node_modules/elliptic/lib/elliptic/curve/mont.js","original":{"line":43,"column":0},"generated":{"line":43,"column":0}},{"source":"node_modules/elliptic/lib/elliptic/curve/mont.js","original":{"line":44,"column":0},"generated":{"line":44,"column":0}},{"source":"node_modules/elliptic/lib/elliptic/curve/mont.js","original":{"line":45,"column":0},"generated":{"line":45,"column":0}},{"source":"node_modules/elliptic/lib/elliptic/curve/mont.js","original":{"line":46,"column":0},"generated":{"line":46,"column":0}},{"source":"node_modules/elliptic/lib/elliptic/curve/mont.js","original":{"line":47,"column":0},"generated":{"line":47,"column":0}},{"source":"node_modules/elliptic/lib/elliptic/curve/mont.js","original":{"line":48,"column":0},"generated":{"line":48,"column":0}},{"source":"node_modules/elliptic/lib/elliptic/curve/mont.js","original":{"line":49,"column":0},"generated":{"line":49,"column":0}},{"source":"node_modules/elliptic/lib/elliptic/curve/mont.js","original":{"line":50,"column":0},"generated":{"line":50,"column":0}},{"source":"node_modules/elliptic/lib/elliptic/curve/mont.js","original":{"line":51,"column":0},"generated":{"line":51,"column":0}},{"source":"node_modules/elliptic/lib/elliptic/curve/mont.js","original":{"line":52,"column":0},"generated":{"line":52,"column":0}},{"source":"node_modules/elliptic/lib/elliptic/curve/mont.js","original":{"line":53,"column":0},"generated":{"line":53,"column":0}},{"source":"node_modules/elliptic/lib/elliptic/curve/mont.js","original":{"line":54,"column":0},"generated":{"line":54,"column":0}},{"source":"node_modules/elliptic/lib/elliptic/curve/mont.js","original":{"line":55,"column":0},"generated":{"line":55,"column":0}},{"source":"node_modules/elliptic/lib/elliptic/curve/mont.js","original":{"line":56,"column":0},"generated":{"line":56,"column":0}},{"source":"node_modules/elliptic/lib/elliptic/curve/mont.js","original":{"line":57,"column":0},"generated":{"line":57,"column":0}},{"source":"node_modules/elliptic/lib/elliptic/curve/mont.js","original":{"line":58,"column":0},"generated":{"line":58,"column":0}},{"source":"node_modules/elliptic/lib/elliptic/curve/mont.js","original":{"line":59,"column":0},"generated":{"line":59,"column":0}},{"source":"node_modules/elliptic/lib/elliptic/curve/mont.js","original":{"line":60,"column":0},"generated":{"line":60,"column":0}},{"source":"node_modules/elliptic/lib/elliptic/curve/mont.js","original":{"line":61,"column":0},"generated":{"line":61,"column":0}},{"source":"node_modules/elliptic/lib/elliptic/curve/mont.js","original":{"line":62,"column":0},"generated":{"line":62,"column":0}},{"source":"node_modules/elliptic/lib/elliptic/curve/mont.js","original":{"line":63,"column":0},"generated":{"line":63,"column":0}},{"source":"node_modules/elliptic/lib/elliptic/curve/mont.js","original":{"line":64,"column":0},"generated":{"line":64,"column":0}},{"source":"node_modules/elliptic/lib/elliptic/curve/mont.js","original":{"line":65,"column":0},"generated":{"line":65,"column":0}},{"source":"node_modules/elliptic/lib/elliptic/curve/mont.js","original":{"line":66,"column":0},"generated":{"line":66,"column":0}},{"source":"node_modules/elliptic/lib/elliptic/curve/mont.js","original":{"line":67,"column":0},"generated":{"line":67,"column":0}},{"source":"node_modules/elliptic/lib/elliptic/curve/mont.js","original":{"line":68,"column":0},"generated":{"line":68,"column":0}},{"source":"node_modules/elliptic/lib/elliptic/curve/mont.js","original":{"line":69,"column":0},"generated":{"line":69,"column":0}},{"source":"node_modules/elliptic/lib/elliptic/curve/mont.js","original":{"line":70,"column":0},"generated":{"line":70,"column":0}},{"source":"node_modules/elliptic/lib/elliptic/curve/mont.js","original":{"line":71,"column":0},"generated":{"line":71,"column":0}},{"source":"node_modules/elliptic/lib/elliptic/curve/mont.js","original":{"line":72,"column":0},"generated":{"line":72,"column":0}},{"source":"node_modules/elliptic/lib/elliptic/curve/mont.js","original":{"line":73,"column":0},"generated":{"line":73,"column":0}},{"source":"node_modules/elliptic/lib/elliptic/curve/mont.js","original":{"line":74,"column":0},"generated":{"line":74,"column":0}},{"source":"node_modules/elliptic/lib/elliptic/curve/mont.js","original":{"line":75,"column":0},"generated":{"line":75,"column":0}},{"source":"node_modules/elliptic/lib/elliptic/curve/mont.js","original":{"line":76,"column":0},"generated":{"line":76,"column":0}},{"source":"node_modules/elliptic/lib/elliptic/curve/mont.js","original":{"line":77,"column":0},"generated":{"line":77,"column":0}},{"source":"node_modules/elliptic/lib/elliptic/curve/mont.js","original":{"line":78,"column":0},"generated":{"line":78,"column":0}},{"source":"node_modules/elliptic/lib/elliptic/curve/mont.js","original":{"line":79,"column":0},"generated":{"line":79,"column":0}},{"source":"node_modules/elliptic/lib/elliptic/curve/mont.js","original":{"line":80,"column":0},"generated":{"line":80,"column":0}},{"source":"node_modules/elliptic/lib/elliptic/curve/mont.js","original":{"line":81,"column":0},"generated":{"line":81,"column":0}},{"source":"node_modules/elliptic/lib/elliptic/curve/mont.js","original":{"line":82,"column":0},"generated":{"line":82,"column":0}},{"source":"node_modules/elliptic/lib/elliptic/curve/mont.js","original":{"line":83,"column":0},"generated":{"line":83,"column":0}},{"source":"node_modules/elliptic/lib/elliptic/curve/mont.js","original":{"line":84,"column":0},"generated":{"line":84,"column":0}},{"source":"node_modules/elliptic/lib/elliptic/curve/mont.js","original":{"line":85,"column":0},"generated":{"line":85,"column":0}},{"source":"node_modules/elliptic/lib/elliptic/curve/mont.js","original":{"line":86,"column":0},"generated":{"line":86,"column":0}},{"source":"node_modules/elliptic/lib/elliptic/curve/mont.js","original":{"line":87,"column":0},"generated":{"line":87,"column":0}},{"source":"node_modules/elliptic/lib/elliptic/curve/mont.js","original":{"line":88,"column":0},"generated":{"line":88,"column":0}},{"source":"node_modules/elliptic/lib/elliptic/curve/mont.js","original":{"line":89,"column":0},"generated":{"line":89,"column":0}},{"source":"node_modules/elliptic/lib/elliptic/curve/mont.js","original":{"line":90,"column":0},"generated":{"line":90,"column":0}},{"source":"node_modules/elliptic/lib/elliptic/curve/mont.js","original":{"line":91,"column":0},"generated":{"line":91,"column":0}},{"source":"node_modules/elliptic/lib/elliptic/curve/mont.js","original":{"line":92,"column":0},"generated":{"line":92,"column":0}},{"source":"node_modules/elliptic/lib/elliptic/curve/mont.js","original":{"line":93,"column":0},"generated":{"line":93,"column":0}},{"source":"node_modules/elliptic/lib/elliptic/curve/mont.js","original":{"line":94,"column":0},"generated":{"line":94,"column":0}},{"source":"node_modules/elliptic/lib/elliptic/curve/mont.js","original":{"line":95,"column":0},"generated":{"line":95,"column":0}},{"source":"node_modules/elliptic/lib/elliptic/curve/mont.js","original":{"line":96,"column":0},"generated":{"line":96,"column":0}},{"source":"node_modules/elliptic/lib/elliptic/curve/mont.js","original":{"line":97,"column":0},"generated":{"line":97,"column":0}},{"source":"node_modules/elliptic/lib/elliptic/curve/mont.js","original":{"line":98,"column":0},"generated":{"line":98,"column":0}},{"source":"node_modules/elliptic/lib/elliptic/curve/mont.js","original":{"line":99,"column":0},"generated":{"line":99,"column":0}},{"source":"node_modules/elliptic/lib/elliptic/curve/mont.js","original":{"line":100,"column":0},"generated":{"line":100,"column":0}},{"source":"node_modules/elliptic/lib/elliptic/curve/mont.js","original":{"line":101,"column":0},"generated":{"line":101,"column":0}},{"source":"node_modules/elliptic/lib/elliptic/curve/mont.js","original":{"line":102,"column":0},"generated":{"line":102,"column":0}},{"source":"node_modules/elliptic/lib/elliptic/curve/mont.js","original":{"line":103,"column":0},"generated":{"line":103,"column":0}},{"source":"node_modules/elliptic/lib/elliptic/curve/mont.js","original":{"line":104,"column":0},"generated":{"line":104,"column":0}},{"source":"node_modules/elliptic/lib/elliptic/curve/mont.js","original":{"line":105,"column":0},"generated":{"line":105,"column":0}},{"source":"node_modules/elliptic/lib/elliptic/curve/mont.js","original":{"line":106,"column":0},"generated":{"line":106,"column":0}},{"source":"node_modules/elliptic/lib/elliptic/curve/mont.js","original":{"line":107,"column":0},"generated":{"line":107,"column":0}},{"source":"node_modules/elliptic/lib/elliptic/curve/mont.js","original":{"line":108,"column":0},"generated":{"line":108,"column":0}},{"source":"node_modules/elliptic/lib/elliptic/curve/mont.js","original":{"line":109,"column":0},"generated":{"line":109,"column":0}},{"source":"node_modules/elliptic/lib/elliptic/curve/mont.js","original":{"line":110,"column":0},"generated":{"line":110,"column":0}},{"source":"node_modules/elliptic/lib/elliptic/curve/mont.js","original":{"line":111,"column":0},"generated":{"line":111,"column":0}},{"source":"node_modules/elliptic/lib/elliptic/curve/mont.js","original":{"line":112,"column":0},"generated":{"line":112,"column":0}},{"source":"node_modules/elliptic/lib/elliptic/curve/mont.js","original":{"line":113,"column":0},"generated":{"line":113,"column":0}},{"source":"node_modules/elliptic/lib/elliptic/curve/mont.js","original":{"line":114,"column":0},"generated":{"line":114,"column":0}},{"source":"node_modules/elliptic/lib/elliptic/curve/mont.js","original":{"line":115,"column":0},"generated":{"line":115,"column":0}},{"source":"node_modules/elliptic/lib/elliptic/curve/mont.js","original":{"line":116,"column":0},"generated":{"line":116,"column":0}},{"source":"node_modules/elliptic/lib/elliptic/curve/mont.js","original":{"line":117,"column":0},"generated":{"line":117,"column":0}},{"source":"node_modules/elliptic/lib/elliptic/curve/mont.js","original":{"line":118,"column":0},"generated":{"line":118,"column":0}},{"source":"node_modules/elliptic/lib/elliptic/curve/mont.js","original":{"line":119,"column":0},"generated":{"line":119,"column":0}},{"source":"node_modules/elliptic/lib/elliptic/curve/mont.js","original":{"line":120,"column":0},"generated":{"line":120,"column":0}},{"source":"node_modules/elliptic/lib/elliptic/curve/mont.js","original":{"line":121,"column":0},"generated":{"line":121,"column":0}},{"source":"node_modules/elliptic/lib/elliptic/curve/mont.js","original":{"line":122,"column":0},"generated":{"line":122,"column":0}},{"source":"node_modules/elliptic/lib/elliptic/curve/mont.js","original":{"line":123,"column":0},"generated":{"line":123,"column":0}},{"source":"node_modules/elliptic/lib/elliptic/curve/mont.js","original":{"line":124,"column":0},"generated":{"line":124,"column":0}},{"source":"node_modules/elliptic/lib/elliptic/curve/mont.js","original":{"line":125,"column":0},"generated":{"line":125,"column":0}},{"source":"node_modules/elliptic/lib/elliptic/curve/mont.js","original":{"line":126,"column":0},"generated":{"line":126,"column":0}},{"source":"node_modules/elliptic/lib/elliptic/curve/mont.js","original":{"line":127,"column":0},"generated":{"line":127,"column":0}},{"source":"node_modules/elliptic/lib/elliptic/curve/mont.js","original":{"line":128,"column":0},"generated":{"line":128,"column":0}},{"source":"node_modules/elliptic/lib/elliptic/curve/mont.js","original":{"line":129,"column":0},"generated":{"line":129,"column":0}},{"source":"node_modules/elliptic/lib/elliptic/curve/mont.js","original":{"line":130,"column":0},"generated":{"line":130,"column":0}},{"source":"node_modules/elliptic/lib/elliptic/curve/mont.js","original":{"line":131,"column":0},"generated":{"line":131,"column":0}},{"source":"node_modules/elliptic/lib/elliptic/curve/mont.js","original":{"line":132,"column":0},"generated":{"line":132,"column":0}},{"source":"node_modules/elliptic/lib/elliptic/curve/mont.js","original":{"line":133,"column":0},"generated":{"line":133,"column":0}},{"source":"node_modules/elliptic/lib/elliptic/curve/mont.js","original":{"line":134,"column":0},"generated":{"line":134,"column":0}},{"source":"node_modules/elliptic/lib/elliptic/curve/mont.js","original":{"line":135,"column":0},"generated":{"line":135,"column":0}},{"source":"node_modules/elliptic/lib/elliptic/curve/mont.js","original":{"line":136,"column":0},"generated":{"line":136,"column":0}},{"source":"node_modules/elliptic/lib/elliptic/curve/mont.js","original":{"line":137,"column":0},"generated":{"line":137,"column":0}},{"source":"node_modules/elliptic/lib/elliptic/curve/mont.js","original":{"line":138,"column":0},"generated":{"line":138,"column":0}},{"source":"node_modules/elliptic/lib/elliptic/curve/mont.js","original":{"line":139,"column":0},"generated":{"line":139,"column":0}},{"source":"node_modules/elliptic/lib/elliptic/curve/mont.js","original":{"line":140,"column":0},"generated":{"line":140,"column":0}},{"source":"node_modules/elliptic/lib/elliptic/curve/mont.js","original":{"line":141,"column":0},"generated":{"line":141,"column":0}},{"source":"node_modules/elliptic/lib/elliptic/curve/mont.js","original":{"line":142,"column":0},"generated":{"line":142,"column":0}},{"source":"node_modules/elliptic/lib/elliptic/curve/mont.js","original":{"line":143,"column":0},"generated":{"line":143,"column":0}},{"source":"node_modules/elliptic/lib/elliptic/curve/mont.js","original":{"line":144,"column":0},"generated":{"line":144,"column":0}},{"source":"node_modules/elliptic/lib/elliptic/curve/mont.js","original":{"line":145,"column":0},"generated":{"line":145,"column":0}},{"source":"node_modules/elliptic/lib/elliptic/curve/mont.js","original":{"line":146,"column":0},"generated":{"line":146,"column":0}},{"source":"node_modules/elliptic/lib/elliptic/curve/mont.js","original":{"line":147,"column":0},"generated":{"line":147,"column":0}},{"source":"node_modules/elliptic/lib/elliptic/curve/mont.js","original":{"line":148,"column":0},"generated":{"line":148,"column":0}},{"source":"node_modules/elliptic/lib/elliptic/curve/mont.js","original":{"line":149,"column":0},"generated":{"line":149,"column":0}},{"source":"node_modules/elliptic/lib/elliptic/curve/mont.js","original":{"line":150,"column":0},"generated":{"line":150,"column":0}},{"source":"node_modules/elliptic/lib/elliptic/curve/mont.js","original":{"line":151,"column":0},"generated":{"line":151,"column":0}},{"source":"node_modules/elliptic/lib/elliptic/curve/mont.js","original":{"line":152,"column":0},"generated":{"line":152,"column":0}},{"source":"node_modules/elliptic/lib/elliptic/curve/mont.js","original":{"line":153,"column":0},"generated":{"line":153,"column":0}},{"source":"node_modules/elliptic/lib/elliptic/curve/mont.js","original":{"line":154,"column":0},"generated":{"line":154,"column":0}},{"source":"node_modules/elliptic/lib/elliptic/curve/mont.js","original":{"line":155,"column":0},"generated":{"line":155,"column":0}},{"source":"node_modules/elliptic/lib/elliptic/curve/mont.js","original":{"line":156,"column":0},"generated":{"line":156,"column":0}},{"source":"node_modules/elliptic/lib/elliptic/curve/mont.js","original":{"line":157,"column":0},"generated":{"line":157,"column":0}},{"source":"node_modules/elliptic/lib/elliptic/curve/mont.js","original":{"line":158,"column":0},"generated":{"line":158,"column":0}},{"source":"node_modules/elliptic/lib/elliptic/curve/mont.js","original":{"line":159,"column":0},"generated":{"line":159,"column":0}},{"source":"node_modules/elliptic/lib/elliptic/curve/mont.js","original":{"line":160,"column":0},"generated":{"line":160,"column":0}},{"source":"node_modules/elliptic/lib/elliptic/curve/mont.js","original":{"line":161,"column":0},"generated":{"line":161,"column":0}},{"source":"node_modules/elliptic/lib/elliptic/curve/mont.js","original":{"line":162,"column":0},"generated":{"line":162,"column":0}},{"source":"node_modules/elliptic/lib/elliptic/curve/mont.js","original":{"line":163,"column":0},"generated":{"line":163,"column":0}},{"source":"node_modules/elliptic/lib/elliptic/curve/mont.js","original":{"line":164,"column":0},"generated":{"line":164,"column":0}},{"source":"node_modules/elliptic/lib/elliptic/curve/mont.js","original":{"line":165,"column":0},"generated":{"line":165,"column":0}},{"source":"node_modules/elliptic/lib/elliptic/curve/mont.js","original":{"line":166,"column":0},"generated":{"line":166,"column":0}},{"source":"node_modules/elliptic/lib/elliptic/curve/mont.js","original":{"line":167,"column":0},"generated":{"line":167,"column":0}},{"source":"node_modules/elliptic/lib/elliptic/curve/mont.js","original":{"line":168,"column":0},"generated":{"line":168,"column":0}},{"source":"node_modules/elliptic/lib/elliptic/curve/mont.js","original":{"line":169,"column":0},"generated":{"line":169,"column":0}},{"source":"node_modules/elliptic/lib/elliptic/curve/mont.js","original":{"line":170,"column":0},"generated":{"line":170,"column":0}},{"source":"node_modules/elliptic/lib/elliptic/curve/mont.js","original":{"line":171,"column":0},"generated":{"line":171,"column":0}},{"source":"node_modules/elliptic/lib/elliptic/curve/mont.js","original":{"line":172,"column":0},"generated":{"line":172,"column":0}},{"source":"node_modules/elliptic/lib/elliptic/curve/mont.js","original":{"line":173,"column":0},"generated":{"line":173,"column":0}},{"source":"node_modules/elliptic/lib/elliptic/curve/mont.js","original":{"line":174,"column":0},"generated":{"line":174,"column":0}},{"source":"node_modules/elliptic/lib/elliptic/curve/mont.js","original":{"line":175,"column":0},"generated":{"line":175,"column":0}},{"source":"node_modules/elliptic/lib/elliptic/curve/mont.js","original":{"line":176,"column":0},"generated":{"line":176,"column":0}},{"source":"node_modules/elliptic/lib/elliptic/curve/mont.js","original":{"line":177,"column":0},"generated":{"line":177,"column":0}},{"source":"node_modules/elliptic/lib/elliptic/curve/mont.js","original":{"line":178,"column":0},"generated":{"line":178,"column":0}},{"source":"node_modules/elliptic/lib/elliptic/curve/mont.js","original":{"line":179,"column":0},"generated":{"line":179,"column":0}},{"source":"node_modules/elliptic/lib/elliptic/curve/mont.js","original":{"line":180,"column":0},"generated":{"line":180,"column":0}},{"source":"node_modules/elliptic/lib/elliptic/curve/mont.js","original":{"line":181,"column":0},"generated":{"line":181,"column":0}}],"sources":{"node_modules/elliptic/lib/elliptic/curve/mont.js":"'use strict';\n\nvar curve = require('../curve');\nvar BN = require('bn.js');\nvar inherits = require('inherits');\nvar Base = curve.base;\n\nvar elliptic = require('../../elliptic');\nvar utils = elliptic.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 '<EC Point Infinity>';\n  return '<EC Point x: ' + this.x.fromRed().toString(16, 2) +\n      ' z: ' + this.z.fromRed().toString(16, 2) + '>';\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"},"lineCount":181}},"hash":"16006ddb3bdaa4f054f4d1fd55724c8b","cacheData":{"env":{}}}