{"id":"node_modules/elliptic/lib/elliptic/ec/index.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":"bn.js","loc":{"line":3,"column":17},"parent":"/www/ml-classifier/example/node_modules/elliptic/lib/elliptic/ec/index.js","resolved":"/www/ml-classifier/example/node_modules/bn.js/lib/bn.js"},{"name":"hmac-drbg","loc":{"line":4,"column":23},"parent":"/www/ml-classifier/example/node_modules/elliptic/lib/elliptic/ec/index.js","resolved":"/www/ml-classifier/example/node_modules/hmac-drbg/lib/hmac-drbg.js"},{"name":"../../elliptic","loc":{"line":5,"column":23},"parent":"/www/ml-classifier/example/node_modules/elliptic/lib/elliptic/ec/index.js","resolved":"/www/ml-classifier/example/node_modules/elliptic/lib/elliptic.js"},{"name":"./key","loc":{"line":9,"column":22},"parent":"/www/ml-classifier/example/node_modules/elliptic/lib/elliptic/ec/index.js","resolved":"/www/ml-classifier/example/node_modules/elliptic/lib/elliptic/ec/key.js"},{"name":"./signature","loc":{"line":10,"column":24},"parent":"/www/ml-classifier/example/node_modules/elliptic/lib/elliptic/ec/index.js","resolved":"/www/ml-classifier/example/node_modules/elliptic/lib/elliptic/ec/signature.js"}],"generated":{"js":"'use strict';\n\nvar BN = require('bn.js');\nvar HmacDRBG = require('hmac-drbg');\nvar elliptic = require('../../elliptic');\nvar utils = elliptic.utils;\nvar assert = utils.assert;\n\nvar KeyPair = require('./key');\nvar Signature = require('./signature');\n\nfunction EC(options) {\n  if (!(this instanceof EC))\n    return new EC(options);\n\n  // Shortcut `elliptic.ec(curve-name)`\n  if (typeof options === 'string') {\n    assert(elliptic.curves.hasOwnProperty(options), 'Unknown curve ' + options);\n\n    options = elliptic.curves[options];\n  }\n\n  // Shortcut for `elliptic.ec(elliptic.curves.curveName)`\n  if (options instanceof elliptic.curves.PresetCurve)\n    options = { curve: options };\n\n  this.curve = options.curve.curve;\n  this.n = this.curve.n;\n  this.nh = this.n.ushrn(1);\n  this.g = this.curve.g;\n\n  // Point on curve\n  this.g = options.curve.g;\n  this.g.precompute(options.curve.n.bitLength() + 1);\n\n  // Hash for function for DRBG\n  this.hash = options.hash || options.curve.hash;\n}\nmodule.exports = EC;\n\nEC.prototype.keyPair = function keyPair(options) {\n  return new KeyPair(this, options);\n};\n\nEC.prototype.keyFromPrivate = function keyFromPrivate(priv, enc) {\n  return KeyPair.fromPrivate(this, priv, enc);\n};\n\nEC.prototype.keyFromPublic = function keyFromPublic(pub, enc) {\n  return KeyPair.fromPublic(this, pub, enc);\n};\n\nEC.prototype.genKeyPair = function genKeyPair(options) {\n  if (!options)\n    options = {};\n\n  // Instantiate Hmac_DRBG\n  var drbg = new HmacDRBG({\n    hash: this.hash,\n    pers: options.pers,\n    persEnc: options.persEnc || 'utf8',\n    entropy: options.entropy || elliptic.rand(this.hash.hmacStrength),\n    entropyEnc: options.entropy && options.entropyEnc || 'utf8',\n    nonce: this.n.toArray()\n  });\n\n  var bytes = this.n.byteLength();\n  var ns2 = this.n.sub(new BN(2));\n  do {\n    var priv = new BN(drbg.generate(bytes));\n    if (priv.cmp(ns2) > 0)\n      continue;\n\n    priv.iaddn(1);\n    return this.keyFromPrivate(priv);\n  } while (true);\n};\n\nEC.prototype._truncateToN = function truncateToN(msg, truncOnly) {\n  var delta = msg.byteLength() * 8 - this.n.bitLength();\n  if (delta > 0)\n    msg = msg.ushrn(delta);\n  if (!truncOnly && msg.cmp(this.n) >= 0)\n    return msg.sub(this.n);\n  else\n    return msg;\n};\n\nEC.prototype.sign = function sign(msg, key, enc, options) {\n  if (typeof enc === 'object') {\n    options = enc;\n    enc = null;\n  }\n  if (!options)\n    options = {};\n\n  key = this.keyFromPrivate(key, enc);\n  msg = this._truncateToN(new BN(msg, 16));\n\n  // Zero-extend key to provide enough entropy\n  var bytes = this.n.byteLength();\n  var bkey = key.getPrivate().toArray('be', bytes);\n\n  // Zero-extend nonce to have the same byte size as N\n  var nonce = msg.toArray('be', bytes);\n\n  // Instantiate Hmac_DRBG\n  var drbg = new HmacDRBG({\n    hash: this.hash,\n    entropy: bkey,\n    nonce: nonce,\n    pers: options.pers,\n    persEnc: options.persEnc || 'utf8'\n  });\n\n  // Number of bytes to generate\n  var ns1 = this.n.sub(new BN(1));\n\n  for (var iter = 0; true; iter++) {\n    var k = options.k ?\n        options.k(iter) :\n        new BN(drbg.generate(this.n.byteLength()));\n    k = this._truncateToN(k, true);\n    if (k.cmpn(1) <= 0 || k.cmp(ns1) >= 0)\n      continue;\n\n    var kp = this.g.mul(k);\n    if (kp.isInfinity())\n      continue;\n\n    var kpX = kp.getX();\n    var r = kpX.umod(this.n);\n    if (r.cmpn(0) === 0)\n      continue;\n\n    var s = k.invm(this.n).mul(r.mul(key.getPrivate()).iadd(msg));\n    s = s.umod(this.n);\n    if (s.cmpn(0) === 0)\n      continue;\n\n    var recoveryParam = (kp.getY().isOdd() ? 1 : 0) |\n                        (kpX.cmp(r) !== 0 ? 2 : 0);\n\n    // Use complement of `s`, if it is > `n / 2`\n    if (options.canonical && s.cmp(this.nh) > 0) {\n      s = this.n.sub(s);\n      recoveryParam ^= 1;\n    }\n\n    return new Signature({ r: r, s: s, recoveryParam: recoveryParam });\n  }\n};\n\nEC.prototype.verify = function verify(msg, signature, key, enc) {\n  msg = this._truncateToN(new BN(msg, 16));\n  key = this.keyFromPublic(key, enc);\n  signature = new Signature(signature, 'hex');\n\n  // Perform primitive values validation\n  var r = signature.r;\n  var s = signature.s;\n  if (r.cmpn(1) < 0 || r.cmp(this.n) >= 0)\n    return false;\n  if (s.cmpn(1) < 0 || s.cmp(this.n) >= 0)\n    return false;\n\n  // Validate signature\n  var sinv = s.invm(this.n);\n  var u1 = sinv.mul(msg).umod(this.n);\n  var u2 = sinv.mul(r).umod(this.n);\n\n  if (!this.curve._maxwellTrick) {\n    var p = this.g.mulAdd(u1, key.getPublic(), u2);\n    if (p.isInfinity())\n      return false;\n\n    return p.getX().umod(this.n).cmp(r) === 0;\n  }\n\n  // NOTE: Greg Maxwell's trick, inspired by:\n  // https://git.io/vad3K\n\n  var p = this.g.jmulAdd(u1, key.getPublic(), u2);\n  if (p.isInfinity())\n    return false;\n\n  // Compare `p.x` of Jacobian point with `r`,\n  // this will do `p.x == r * p.z^2` instead of multiplying `p.x` by the\n  // inverse of `p.z^2`\n  return p.eqXToP(r);\n};\n\nEC.prototype.recoverPubKey = function(msg, signature, j, enc) {\n  assert((3 & j) === j, 'The recovery param is more than two bits');\n  signature = new Signature(signature, enc);\n\n  var n = this.n;\n  var e = new BN(msg);\n  var r = signature.r;\n  var s = signature.s;\n\n  // A set LSB signifies that the y-coordinate is odd\n  var isYOdd = j & 1;\n  var isSecondKey = j >> 1;\n  if (r.cmp(this.curve.p.umod(this.curve.n)) >= 0 && isSecondKey)\n    throw new Error('Unable to find sencond key candinate');\n\n  // 1.1. Let x = r + jn.\n  if (isSecondKey)\n    r = this.curve.pointFromX(r.add(this.curve.n), isYOdd);\n  else\n    r = this.curve.pointFromX(r, isYOdd);\n\n  var rInv = signature.r.invm(n);\n  var s1 = n.sub(e).mul(rInv).umod(n);\n  var s2 = s.mul(rInv).umod(n);\n\n  // 1.6.1 Compute Q = r^-1 (sR -  eG)\n  //               Q = r^-1 (sR + -eG)\n  return this.g.mulAdd(s1, r, s2);\n};\n\nEC.prototype.getKeyRecoveryParam = function(e, signature, Q, enc) {\n  signature = new Signature(signature, enc);\n  if (signature.recoveryParam !== null)\n    return signature.recoveryParam;\n\n  for (var i = 0; i < 4; i++) {\n    var Qprime;\n    try {\n      Qprime = this.recoverPubKey(e, signature, i);\n    } catch (e) {\n      continue;\n    }\n\n    if (Qprime.eq(Q))\n      return i;\n  }\n  throw new Error('Unable to find valid recovery factor');\n};\n","map":{"mappings":[{"source":"node_modules/elliptic/lib/elliptic/ec/index.js","original":{"line":1,"column":0},"generated":{"line":1,"column":0}},{"source":"node_modules/elliptic/lib/elliptic/ec/index.js","original":{"line":2,"column":0},"generated":{"line":2,"column":0}},{"source":"node_modules/elliptic/lib/elliptic/ec/index.js","original":{"line":3,"column":0},"generated":{"line":3,"column":0}},{"source":"node_modules/elliptic/lib/elliptic/ec/index.js","original":{"line":4,"column":0},"generated":{"line":4,"column":0}},{"source":"node_modules/elliptic/lib/elliptic/ec/index.js","original":{"line":5,"column":0},"generated":{"line":5,"column":0}},{"source":"node_modules/elliptic/lib/elliptic/ec/index.js","original":{"line":6,"column":0},"generated":{"line":6,"column":0}},{"source":"node_modules/elliptic/lib/elliptic/ec/index.js","original":{"line":7,"column":0},"generated":{"line":7,"column":0}},{"source":"node_modules/elliptic/lib/elliptic/ec/index.js","original":{"line":8,"column":0},"generated":{"line":8,"column":0}},{"source":"node_modules/elliptic/lib/elliptic/ec/index.js","original":{"line":9,"column":0},"generated":{"line":9,"column":0}},{"source":"node_modules/elliptic/lib/elliptic/ec/index.js","original":{"line":10,"column":0},"generated":{"line":10,"column":0}},{"source":"node_modules/elliptic/lib/elliptic/ec/index.js","original":{"line":11,"column":0},"generated":{"line":11,"column":0}},{"source":"node_modules/elliptic/lib/elliptic/ec/index.js","original":{"line":12,"column":0},"generated":{"line":12,"column":0}},{"source":"node_modules/elliptic/lib/elliptic/ec/index.js","original":{"line":13,"column":0},"generated":{"line":13,"column":0}},{"source":"node_modules/elliptic/lib/elliptic/ec/index.js","original":{"line":14,"column":0},"generated":{"line":14,"column":0}},{"source":"node_modules/elliptic/lib/elliptic/ec/index.js","original":{"line":15,"column":0},"generated":{"line":15,"column":0}},{"source":"node_modules/elliptic/lib/elliptic/ec/index.js","original":{"line":16,"column":0},"generated":{"line":16,"column":0}},{"source":"node_modules/elliptic/lib/elliptic/ec/index.js","original":{"line":17,"column":0},"generated":{"line":17,"column":0}},{"source":"node_modules/elliptic/lib/elliptic/ec/index.js","original":{"line":18,"column":0},"generated":{"line":18,"column":0}},{"source":"node_modules/elliptic/lib/elliptic/ec/index.js","original":{"line":19,"column":0},"generated":{"line":19,"column":0}},{"source":"node_modules/elliptic/lib/elliptic/ec/index.js","original":{"line":20,"column":0},"generated":{"line":20,"column":0}},{"source":"node_modules/elliptic/lib/elliptic/ec/index.js","original":{"line":21,"column":0},"generated":{"line":21,"column":0}},{"source":"node_modules/elliptic/lib/elliptic/ec/index.js","original":{"line":22,"column":0},"generated":{"line":22,"column":0}},{"source":"node_modules/elliptic/lib/elliptic/ec/index.js","original":{"line":23,"column":0},"generated":{"line":23,"column":0}},{"source":"node_modules/elliptic/lib/elliptic/ec/index.js","original":{"line":24,"column":0},"generated":{"line":24,"column":0}},{"source":"node_modules/elliptic/lib/elliptic/ec/index.js","original":{"line":25,"column":0},"generated":{"line":25,"column":0}},{"source":"node_modules/elliptic/lib/elliptic/ec/index.js","original":{"line":26,"column":0},"generated":{"line":26,"column":0}},{"source":"node_modules/elliptic/lib/elliptic/ec/index.js","original":{"line":27,"column":0},"generated":{"line":27,"column":0}},{"source":"node_modules/elliptic/lib/elliptic/ec/index.js","original":{"line":28,"column":0},"generated":{"line":28,"column":0}},{"source":"node_modules/elliptic/lib/elliptic/ec/index.js","original":{"line":29,"column":0},"generated":{"line":29,"column":0}},{"source":"node_modules/elliptic/lib/elliptic/ec/index.js","original":{"line":30,"column":0},"generated":{"line":30,"column":0}},{"source":"node_modules/elliptic/lib/elliptic/ec/index.js","original":{"line":31,"column":0},"generated":{"line":31,"column":0}},{"source":"node_modules/elliptic/lib/elliptic/ec/index.js","original":{"line":32,"column":0},"generated":{"line":32,"column":0}},{"source":"node_modules/elliptic/lib/elliptic/ec/index.js","original":{"line":33,"column":0},"generated":{"line":33,"column":0}},{"source":"node_modules/elliptic/lib/elliptic/ec/index.js","original":{"line":34,"column":0},"generated":{"line":34,"column":0}},{"source":"node_modules/elliptic/lib/elliptic/ec/index.js","original":{"line":35,"column":0},"generated":{"line":35,"column":0}},{"source":"node_modules/elliptic/lib/elliptic/ec/index.js","original":{"line":36,"column":0},"generated":{"line":36,"column":0}},{"source":"node_modules/elliptic/lib/elliptic/ec/index.js","original":{"line":37,"column":0},"generated":{"line":37,"column":0}},{"source":"node_modules/elliptic/lib/elliptic/ec/index.js","original":{"line":38,"column":0},"generated":{"line":38,"column":0}},{"source":"node_modules/elliptic/lib/elliptic/ec/index.js","original":{"line":39,"column":0},"generated":{"line":39,"column":0}},{"source":"node_modules/elliptic/lib/elliptic/ec/index.js","original":{"line":40,"column":0},"generated":{"line":40,"column":0}},{"source":"node_modules/elliptic/lib/elliptic/ec/index.js","original":{"line":41,"column":0},"generated":{"line":41,"column":0}},{"source":"node_modules/elliptic/lib/elliptic/ec/index.js","original":{"line":42,"column":0},"generated":{"line":42,"column":0}},{"source":"node_modules/elliptic/lib/elliptic/ec/index.js","original":{"line":43,"column":0},"generated":{"line":43,"column":0}},{"source":"node_modules/elliptic/lib/elliptic/ec/index.js","original":{"line":44,"column":0},"generated":{"line":44,"column":0}},{"source":"node_modules/elliptic/lib/elliptic/ec/index.js","original":{"line":45,"column":0},"generated":{"line":45,"column":0}},{"source":"node_modules/elliptic/lib/elliptic/ec/index.js","original":{"line":46,"column":0},"generated":{"line":46,"column":0}},{"source":"node_modules/elliptic/lib/elliptic/ec/index.js","original":{"line":47,"column":0},"generated":{"line":47,"column":0}},{"source":"node_modules/elliptic/lib/elliptic/ec/index.js","original":{"line":48,"column":0},"generated":{"line":48,"column":0}},{"source":"node_modules/elliptic/lib/elliptic/ec/index.js","original":{"line":49,"column":0},"generated":{"line":49,"column":0}},{"source":"node_modules/elliptic/lib/elliptic/ec/index.js","original":{"line":50,"column":0},"generated":{"line":50,"column":0}},{"source":"node_modules/elliptic/lib/elliptic/ec/index.js","original":{"line":51,"column":0},"generated":{"line":51,"column":0}},{"source":"node_modules/elliptic/lib/elliptic/ec/index.js","original":{"line":52,"column":0},"generated":{"line":52,"column":0}},{"source":"node_modules/elliptic/lib/elliptic/ec/index.js","original":{"line":53,"column":0},"generated":{"line":53,"column":0}},{"source":"node_modules/elliptic/lib/elliptic/ec/index.js","original":{"line":54,"column":0},"generated":{"line":54,"column":0}},{"source":"node_modules/elliptic/lib/elliptic/ec/index.js","original":{"line":55,"column":0},"generated":{"line":55,"column":0}},{"source":"node_modules/elliptic/lib/elliptic/ec/index.js","original":{"line":56,"column":0},"generated":{"line":56,"column":0}},{"source":"node_modules/elliptic/lib/elliptic/ec/index.js","original":{"line":57,"column":0},"generated":{"line":57,"column":0}},{"source":"node_modules/elliptic/lib/elliptic/ec/index.js","original":{"line":58,"column":0},"generated":{"line":58,"column":0}},{"source":"node_modules/elliptic/lib/elliptic/ec/index.js","original":{"line":59,"column":0},"generated":{"line":59,"column":0}},{"source":"node_modules/elliptic/lib/elliptic/ec/index.js","original":{"line":60,"column":0},"generated":{"line":60,"column":0}},{"source":"node_modules/elliptic/lib/elliptic/ec/index.js","original":{"line":61,"column":0},"generated":{"line":61,"column":0}},{"source":"node_modules/elliptic/lib/elliptic/ec/index.js","original":{"line":62,"column":0},"generated":{"line":62,"column":0}},{"source":"node_modules/elliptic/lib/elliptic/ec/index.js","original":{"line":63,"column":0},"generated":{"line":63,"column":0}},{"source":"node_modules/elliptic/lib/elliptic/ec/index.js","original":{"line":64,"column":0},"generated":{"line":64,"column":0}},{"source":"node_modules/elliptic/lib/elliptic/ec/index.js","original":{"line":65,"column":0},"generated":{"line":65,"column":0}},{"source":"node_modules/elliptic/lib/elliptic/ec/index.js","original":{"line":66,"column":0},"generated":{"line":66,"column":0}},{"source":"node_modules/elliptic/lib/elliptic/ec/index.js","original":{"line":67,"column":0},"generated":{"line":67,"column":0}},{"source":"node_modules/elliptic/lib/elliptic/ec/index.js","original":{"line":68,"column":0},"generated":{"line":68,"column":0}},{"source":"node_modules/elliptic/lib/elliptic/ec/index.js","original":{"line":69,"column":0},"generated":{"line":69,"column":0}},{"source":"node_modules/elliptic/lib/elliptic/ec/index.js","original":{"line":70,"column":0},"generated":{"line":70,"column":0}},{"source":"node_modules/elliptic/lib/elliptic/ec/index.js","original":{"line":71,"column":0},"generated":{"line":71,"column":0}},{"source":"node_modules/elliptic/lib/elliptic/ec/index.js","original":{"line":72,"column":0},"generated":{"line":72,"column":0}},{"source":"node_modules/elliptic/lib/elliptic/ec/index.js","original":{"line":73,"column":0},"generated":{"line":73,"column":0}},{"source":"node_modules/elliptic/lib/elliptic/ec/index.js","original":{"line":74,"column":0},"generated":{"line":74,"column":0}},{"source":"node_modules/elliptic/lib/elliptic/ec/index.js","original":{"line":75,"column":0},"generated":{"line":75,"column":0}},{"source":"node_modules/elliptic/lib/elliptic/ec/index.js","original":{"line":76,"column":0},"generated":{"line":76,"column":0}},{"source":"node_modules/elliptic/lib/elliptic/ec/index.js","original":{"line":77,"column":0},"generated":{"line":77,"column":0}},{"source":"node_modules/elliptic/lib/elliptic/ec/index.js","original":{"line":78,"column":0},"generated":{"line":78,"column":0}},{"source":"node_modules/elliptic/lib/elliptic/ec/index.js","original":{"line":79,"column":0},"generated":{"line":79,"column":0}},{"source":"node_modules/elliptic/lib/elliptic/ec/index.js","original":{"line":80,"column":0},"generated":{"line":80,"column":0}},{"source":"node_modules/elliptic/lib/elliptic/ec/index.js","original":{"line":81,"column":0},"generated":{"line":81,"column":0}},{"source":"node_modules/elliptic/lib/elliptic/ec/index.js","original":{"line":82,"column":0},"generated":{"line":82,"column":0}},{"source":"node_modules/elliptic/lib/elliptic/ec/index.js","original":{"line":83,"column":0},"generated":{"line":83,"column":0}},{"source":"node_modules/elliptic/lib/elliptic/ec/index.js","original":{"line":84,"column":0},"generated":{"line":84,"column":0}},{"source":"node_modules/elliptic/lib/elliptic/ec/index.js","original":{"line":85,"column":0},"generated":{"line":85,"column":0}},{"source":"node_modules/elliptic/lib/elliptic/ec/index.js","original":{"line":86,"column":0},"generated":{"line":86,"column":0}},{"source":"node_modules/elliptic/lib/elliptic/ec/index.js","original":{"line":87,"column":0},"generated":{"line":87,"column":0}},{"source":"node_modules/elliptic/lib/elliptic/ec/index.js","original":{"line":88,"column":0},"generated":{"line":88,"column":0}},{"source":"node_modules/elliptic/lib/elliptic/ec/index.js","original":{"line":89,"column":0},"generated":{"line":89,"column":0}},{"source":"node_modules/elliptic/lib/elliptic/ec/index.js","original":{"line":90,"column":0},"generated":{"line":90,"column":0}},{"source":"node_modules/elliptic/lib/elliptic/ec/index.js","original":{"line":91,"column":0},"generated":{"line":91,"column":0}},{"source":"node_modules/elliptic/lib/elliptic/ec/index.js","original":{"line":92,"column":0},"generated":{"line":92,"column":0}},{"source":"node_modules/elliptic/lib/elliptic/ec/index.js","original":{"line":93,"column":0},"generated":{"line":93,"column":0}},{"source":"node_modules/elliptic/lib/elliptic/ec/index.js","original":{"line":94,"column":0},"generated":{"line":94,"column":0}},{"source":"node_modules/elliptic/lib/elliptic/ec/index.js","original":{"line":95,"column":0},"generated":{"line":95,"column":0}},{"source":"node_modules/elliptic/lib/elliptic/ec/index.js","original":{"line":96,"column":0},"generated":{"line":96,"column":0}},{"source":"node_modules/elliptic/lib/elliptic/ec/index.js","original":{"line":97,"column":0},"generated":{"line":97,"column":0}},{"source":"node_modules/elliptic/lib/elliptic/ec/index.js","original":{"line":98,"column":0},"generated":{"line":98,"column":0}},{"source":"node_modules/elliptic/lib/elliptic/ec/index.js","original":{"line":99,"column":0},"generated":{"line":99,"column":0}},{"source":"node_modules/elliptic/lib/elliptic/ec/index.js","original":{"line":100,"column":0},"generated":{"line":100,"column":0}},{"source":"node_modules/elliptic/lib/elliptic/ec/index.js","original":{"line":101,"column":0},"generated":{"line":101,"column":0}},{"source":"node_modules/elliptic/lib/elliptic/ec/index.js","original":{"line":102,"column":0},"generated":{"line":102,"column":0}},{"source":"node_modules/elliptic/lib/elliptic/ec/index.js","original":{"line":103,"column":0},"generated":{"line":103,"column":0}},{"source":"node_modules/elliptic/lib/elliptic/ec/index.js","original":{"line":104,"column":0},"generated":{"line":104,"column":0}},{"source":"node_modules/elliptic/lib/elliptic/ec/index.js","original":{"line":105,"column":0},"generated":{"line":105,"column":0}},{"source":"node_modules/elliptic/lib/elliptic/ec/index.js","original":{"line":106,"column":0},"generated":{"line":106,"column":0}},{"source":"node_modules/elliptic/lib/elliptic/ec/index.js","original":{"line":107,"column":0},"generated":{"line":107,"column":0}},{"source":"node_modules/elliptic/lib/elliptic/ec/index.js","original":{"line":108,"column":0},"generated":{"line":108,"column":0}},{"source":"node_modules/elliptic/lib/elliptic/ec/index.js","original":{"line":109,"column":0},"generated":{"line":109,"column":0}},{"source":"node_modules/elliptic/lib/elliptic/ec/index.js","original":{"line":110,"column":0},"generated":{"line":110,"column":0}},{"source":"node_modules/elliptic/lib/elliptic/ec/index.js","original":{"line":111,"column":0},"generated":{"line":111,"column":0}},{"source":"node_modules/elliptic/lib/elliptic/ec/index.js","original":{"line":112,"column":0},"generated":{"line":112,"column":0}},{"source":"node_modules/elliptic/lib/elliptic/ec/index.js","original":{"line":113,"column":0},"generated":{"line":113,"column":0}},{"source":"node_modules/elliptic/lib/elliptic/ec/index.js","original":{"line":114,"column":0},"generated":{"line":114,"column":0}},{"source":"node_modules/elliptic/lib/elliptic/ec/index.js","original":{"line":115,"column":0},"generated":{"line":115,"column":0}},{"source":"node_modules/elliptic/lib/elliptic/ec/index.js","original":{"line":116,"column":0},"generated":{"line":116,"column":0}},{"source":"node_modules/elliptic/lib/elliptic/ec/index.js","original":{"line":117,"column":0},"generated":{"line":117,"column":0}},{"source":"node_modules/elliptic/lib/elliptic/ec/index.js","original":{"line":118,"column":0},"generated":{"line":118,"column":0}},{"source":"node_modules/elliptic/lib/elliptic/ec/index.js","original":{"line":119,"column":0},"generated":{"line":119,"column":0}},{"source":"node_modules/elliptic/lib/elliptic/ec/index.js","original":{"line":120,"column":0},"generated":{"line":120,"column":0}},{"source":"node_modules/elliptic/lib/elliptic/ec/index.js","original":{"line":121,"column":0},"generated":{"line":121,"column":0}},{"source":"node_modules/elliptic/lib/elliptic/ec/index.js","original":{"line":122,"column":0},"generated":{"line":122,"column":0}},{"source":"node_modules/elliptic/lib/elliptic/ec/index.js","original":{"line":123,"column":0},"generated":{"line":123,"column":0}},{"source":"node_modules/elliptic/lib/elliptic/ec/index.js","original":{"line":124,"column":0},"generated":{"line":124,"column":0}},{"source":"node_modules/elliptic/lib/elliptic/ec/index.js","original":{"line":125,"column":0},"generated":{"line":125,"column":0}},{"source":"node_modules/elliptic/lib/elliptic/ec/index.js","original":{"line":126,"column":0},"generated":{"line":126,"column":0}},{"source":"node_modules/elliptic/lib/elliptic/ec/index.js","original":{"line":127,"column":0},"generated":{"line":127,"column":0}},{"source":"node_modules/elliptic/lib/elliptic/ec/index.js","original":{"line":128,"column":0},"generated":{"line":128,"column":0}},{"source":"node_modules/elliptic/lib/elliptic/ec/index.js","original":{"line":129,"column":0},"generated":{"line":129,"column":0}},{"source":"node_modules/elliptic/lib/elliptic/ec/index.js","original":{"line":130,"column":0},"generated":{"line":130,"column":0}},{"source":"node_modules/elliptic/lib/elliptic/ec/index.js","original":{"line":131,"column":0},"generated":{"line":131,"column":0}},{"source":"node_modules/elliptic/lib/elliptic/ec/index.js","original":{"line":132,"column":0},"generated":{"line":132,"column":0}},{"source":"node_modules/elliptic/lib/elliptic/ec/index.js","original":{"line":133,"column":0},"generated":{"line":133,"column":0}},{"source":"node_modules/elliptic/lib/elliptic/ec/index.js","original":{"line":134,"column":0},"generated":{"line":134,"column":0}},{"source":"node_modules/elliptic/lib/elliptic/ec/index.js","original":{"line":135,"column":0},"generated":{"line":135,"column":0}},{"source":"node_modules/elliptic/lib/elliptic/ec/index.js","original":{"line":136,"column":0},"generated":{"line":136,"column":0}},{"source":"node_modules/elliptic/lib/elliptic/ec/index.js","original":{"line":137,"column":0},"generated":{"line":137,"column":0}},{"source":"node_modules/elliptic/lib/elliptic/ec/index.js","original":{"line":138,"column":0},"generated":{"line":138,"column":0}},{"source":"node_modules/elliptic/lib/elliptic/ec/index.js","original":{"line":139,"column":0},"generated":{"line":139,"column":0}},{"source":"node_modules/elliptic/lib/elliptic/ec/index.js","original":{"line":140,"column":0},"generated":{"line":140,"column":0}},{"source":"node_modules/elliptic/lib/elliptic/ec/index.js","original":{"line":141,"column":0},"generated":{"line":141,"column":0}},{"source":"node_modules/elliptic/lib/elliptic/ec/index.js","original":{"line":142,"column":0},"generated":{"line":142,"column":0}},{"source":"node_modules/elliptic/lib/elliptic/ec/index.js","original":{"line":143,"column":0},"generated":{"line":143,"column":0}},{"source":"node_modules/elliptic/lib/elliptic/ec/index.js","original":{"line":144,"column":0},"generated":{"line":144,"column":0}},{"source":"node_modules/elliptic/lib/elliptic/ec/index.js","original":{"line":145,"column":0},"generated":{"line":145,"column":0}},{"source":"node_modules/elliptic/lib/elliptic/ec/index.js","original":{"line":146,"column":0},"generated":{"line":146,"column":0}},{"source":"node_modules/elliptic/lib/elliptic/ec/index.js","original":{"line":147,"column":0},"generated":{"line":147,"column":0}},{"source":"node_modules/elliptic/lib/elliptic/ec/index.js","original":{"line":148,"column":0},"generated":{"line":148,"column":0}},{"source":"node_modules/elliptic/lib/elliptic/ec/index.js","original":{"line":149,"column":0},"generated":{"line":149,"column":0}},{"source":"node_modules/elliptic/lib/elliptic/ec/index.js","original":{"line":150,"column":0},"generated":{"line":150,"column":0}},{"source":"node_modules/elliptic/lib/elliptic/ec/index.js","original":{"line":151,"column":0},"generated":{"line":151,"column":0}},{"source":"node_modules/elliptic/lib/elliptic/ec/index.js","original":{"line":152,"column":0},"generated":{"line":152,"column":0}},{"source":"node_modules/elliptic/lib/elliptic/ec/index.js","original":{"line":153,"column":0},"generated":{"line":153,"column":0}},{"source":"node_modules/elliptic/lib/elliptic/ec/index.js","original":{"line":154,"column":0},"generated":{"line":154,"column":0}},{"source":"node_modules/elliptic/lib/elliptic/ec/index.js","original":{"line":155,"column":0},"generated":{"line":155,"column":0}},{"source":"node_modules/elliptic/lib/elliptic/ec/index.js","original":{"line":156,"column":0},"generated":{"line":156,"column":0}},{"source":"node_modules/elliptic/lib/elliptic/ec/index.js","original":{"line":157,"column":0},"generated":{"line":157,"column":0}},{"source":"node_modules/elliptic/lib/elliptic/ec/index.js","original":{"line":158,"column":0},"generated":{"line":158,"column":0}},{"source":"node_modules/elliptic/lib/elliptic/ec/index.js","original":{"line":159,"column":0},"generated":{"line":159,"column":0}},{"source":"node_modules/elliptic/lib/elliptic/ec/index.js","original":{"line":160,"column":0},"generated":{"line":160,"column":0}},{"source":"node_modules/elliptic/lib/elliptic/ec/index.js","original":{"line":161,"column":0},"generated":{"line":161,"column":0}},{"source":"node_modules/elliptic/lib/elliptic/ec/index.js","original":{"line":162,"column":0},"generated":{"line":162,"column":0}},{"source":"node_modules/elliptic/lib/elliptic/ec/index.js","original":{"line":163,"column":0},"generated":{"line":163,"column":0}},{"source":"node_modules/elliptic/lib/elliptic/ec/index.js","original":{"line":164,"column":0},"generated":{"line":164,"column":0}},{"source":"node_modules/elliptic/lib/elliptic/ec/index.js","original":{"line":165,"column":0},"generated":{"line":165,"column":0}},{"source":"node_modules/elliptic/lib/elliptic/ec/index.js","original":{"line":166,"column":0},"generated":{"line":166,"column":0}},{"source":"node_modules/elliptic/lib/elliptic/ec/index.js","original":{"line":167,"column":0},"generated":{"line":167,"column":0}},{"source":"node_modules/elliptic/lib/elliptic/ec/index.js","original":{"line":168,"column":0},"generated":{"line":168,"column":0}},{"source":"node_modules/elliptic/lib/elliptic/ec/index.js","original":{"line":169,"column":0},"generated":{"line":169,"column":0}},{"source":"node_modules/elliptic/lib/elliptic/ec/index.js","original":{"line":170,"column":0},"generated":{"line":170,"column":0}},{"source":"node_modules/elliptic/lib/elliptic/ec/index.js","original":{"line":171,"column":0},"generated":{"line":171,"column":0}},{"source":"node_modules/elliptic/lib/elliptic/ec/index.js","original":{"line":172,"column":0},"generated":{"line":172,"column":0}},{"source":"node_modules/elliptic/lib/elliptic/ec/index.js","original":{"line":173,"column":0},"generated":{"line":173,"column":0}},{"source":"node_modules/elliptic/lib/elliptic/ec/index.js","original":{"line":174,"column":0},"generated":{"line":174,"column":0}},{"source":"node_modules/elliptic/lib/elliptic/ec/index.js","original":{"line":175,"column":0},"generated":{"line":175,"column":0}},{"source":"node_modules/elliptic/lib/elliptic/ec/index.js","original":{"line":176,"column":0},"generated":{"line":176,"column":0}},{"source":"node_modules/elliptic/lib/elliptic/ec/index.js","original":{"line":177,"column":0},"generated":{"line":177,"column":0}},{"source":"node_modules/elliptic/lib/elliptic/ec/index.js","original":{"line":178,"column":0},"generated":{"line":178,"column":0}},{"source":"node_modules/elliptic/lib/elliptic/ec/index.js","original":{"line":179,"column":0},"generated":{"line":179,"column":0}},{"source":"node_modules/elliptic/lib/elliptic/ec/index.js","original":{"line":180,"column":0},"generated":{"line":180,"column":0}},{"source":"node_modules/elliptic/lib/elliptic/ec/index.js","original":{"line":181,"column":0},"generated":{"line":181,"column":0}},{"source":"node_modules/elliptic/lib/elliptic/ec/index.js","original":{"line":182,"column":0},"generated":{"line":182,"column":0}},{"source":"node_modules/elliptic/lib/elliptic/ec/index.js","original":{"line":183,"column":0},"generated":{"line":183,"column":0}},{"source":"node_modules/elliptic/lib/elliptic/ec/index.js","original":{"line":184,"column":0},"generated":{"line":184,"column":0}},{"source":"node_modules/elliptic/lib/elliptic/ec/index.js","original":{"line":185,"column":0},"generated":{"line":185,"column":0}},{"source":"node_modules/elliptic/lib/elliptic/ec/index.js","original":{"line":186,"column":0},"generated":{"line":186,"column":0}},{"source":"node_modules/elliptic/lib/elliptic/ec/index.js","original":{"line":187,"column":0},"generated":{"line":187,"column":0}},{"source":"node_modules/elliptic/lib/elliptic/ec/index.js","original":{"line":188,"column":0},"generated":{"line":188,"column":0}},{"source":"node_modules/elliptic/lib/elliptic/ec/index.js","original":{"line":189,"column":0},"generated":{"line":189,"column":0}},{"source":"node_modules/elliptic/lib/elliptic/ec/index.js","original":{"line":190,"column":0},"generated":{"line":190,"column":0}},{"source":"node_modules/elliptic/lib/elliptic/ec/index.js","original":{"line":191,"column":0},"generated":{"line":191,"column":0}},{"source":"node_modules/elliptic/lib/elliptic/ec/index.js","original":{"line":192,"column":0},"generated":{"line":192,"column":0}},{"source":"node_modules/elliptic/lib/elliptic/ec/index.js","original":{"line":193,"column":0},"generated":{"line":193,"column":0}},{"source":"node_modules/elliptic/lib/elliptic/ec/index.js","original":{"line":194,"column":0},"generated":{"line":194,"column":0}},{"source":"node_modules/elliptic/lib/elliptic/ec/index.js","original":{"line":195,"column":0},"generated":{"line":195,"column":0}},{"source":"node_modules/elliptic/lib/elliptic/ec/index.js","original":{"line":196,"column":0},"generated":{"line":196,"column":0}},{"source":"node_modules/elliptic/lib/elliptic/ec/index.js","original":{"line":197,"column":0},"generated":{"line":197,"column":0}},{"source":"node_modules/elliptic/lib/elliptic/ec/index.js","original":{"line":198,"column":0},"generated":{"line":198,"column":0}},{"source":"node_modules/elliptic/lib/elliptic/ec/index.js","original":{"line":199,"column":0},"generated":{"line":199,"column":0}},{"source":"node_modules/elliptic/lib/elliptic/ec/index.js","original":{"line":200,"column":0},"generated":{"line":200,"column":0}},{"source":"node_modules/elliptic/lib/elliptic/ec/index.js","original":{"line":201,"column":0},"generated":{"line":201,"column":0}},{"source":"node_modules/elliptic/lib/elliptic/ec/index.js","original":{"line":202,"column":0},"generated":{"line":202,"column":0}},{"source":"node_modules/elliptic/lib/elliptic/ec/index.js","original":{"line":203,"column":0},"generated":{"line":203,"column":0}},{"source":"node_modules/elliptic/lib/elliptic/ec/index.js","original":{"line":204,"column":0},"generated":{"line":204,"column":0}},{"source":"node_modules/elliptic/lib/elliptic/ec/index.js","original":{"line":205,"column":0},"generated":{"line":205,"column":0}},{"source":"node_modules/elliptic/lib/elliptic/ec/index.js","original":{"line":206,"column":0},"generated":{"line":206,"column":0}},{"source":"node_modules/elliptic/lib/elliptic/ec/index.js","original":{"line":207,"column":0},"generated":{"line":207,"column":0}},{"source":"node_modules/elliptic/lib/elliptic/ec/index.js","original":{"line":208,"column":0},"generated":{"line":208,"column":0}},{"source":"node_modules/elliptic/lib/elliptic/ec/index.js","original":{"line":209,"column":0},"generated":{"line":209,"column":0}},{"source":"node_modules/elliptic/lib/elliptic/ec/index.js","original":{"line":210,"column":0},"generated":{"line":210,"column":0}},{"source":"node_modules/elliptic/lib/elliptic/ec/index.js","original":{"line":211,"column":0},"generated":{"line":211,"column":0}},{"source":"node_modules/elliptic/lib/elliptic/ec/index.js","original":{"line":212,"column":0},"generated":{"line":212,"column":0}},{"source":"node_modules/elliptic/lib/elliptic/ec/index.js","original":{"line":213,"column":0},"generated":{"line":213,"column":0}},{"source":"node_modules/elliptic/lib/elliptic/ec/index.js","original":{"line":214,"column":0},"generated":{"line":214,"column":0}},{"source":"node_modules/elliptic/lib/elliptic/ec/index.js","original":{"line":215,"column":0},"generated":{"line":215,"column":0}},{"source":"node_modules/elliptic/lib/elliptic/ec/index.js","original":{"line":216,"column":0},"generated":{"line":216,"column":0}},{"source":"node_modules/elliptic/lib/elliptic/ec/index.js","original":{"line":217,"column":0},"generated":{"line":217,"column":0}},{"source":"node_modules/elliptic/lib/elliptic/ec/index.js","original":{"line":218,"column":0},"generated":{"line":218,"column":0}},{"source":"node_modules/elliptic/lib/elliptic/ec/index.js","original":{"line":219,"column":0},"generated":{"line":219,"column":0}},{"source":"node_modules/elliptic/lib/elliptic/ec/index.js","original":{"line":220,"column":0},"generated":{"line":220,"column":0}},{"source":"node_modules/elliptic/lib/elliptic/ec/index.js","original":{"line":221,"column":0},"generated":{"line":221,"column":0}},{"source":"node_modules/elliptic/lib/elliptic/ec/index.js","original":{"line":222,"column":0},"generated":{"line":222,"column":0}},{"source":"node_modules/elliptic/lib/elliptic/ec/index.js","original":{"line":223,"column":0},"generated":{"line":223,"column":0}},{"source":"node_modules/elliptic/lib/elliptic/ec/index.js","original":{"line":224,"column":0},"generated":{"line":224,"column":0}},{"source":"node_modules/elliptic/lib/elliptic/ec/index.js","original":{"line":225,"column":0},"generated":{"line":225,"column":0}},{"source":"node_modules/elliptic/lib/elliptic/ec/index.js","original":{"line":226,"column":0},"generated":{"line":226,"column":0}},{"source":"node_modules/elliptic/lib/elliptic/ec/index.js","original":{"line":227,"column":0},"generated":{"line":227,"column":0}},{"source":"node_modules/elliptic/lib/elliptic/ec/index.js","original":{"line":228,"column":0},"generated":{"line":228,"column":0}},{"source":"node_modules/elliptic/lib/elliptic/ec/index.js","original":{"line":229,"column":0},"generated":{"line":229,"column":0}},{"source":"node_modules/elliptic/lib/elliptic/ec/index.js","original":{"line":230,"column":0},"generated":{"line":230,"column":0}},{"source":"node_modules/elliptic/lib/elliptic/ec/index.js","original":{"line":231,"column":0},"generated":{"line":231,"column":0}},{"source":"node_modules/elliptic/lib/elliptic/ec/index.js","original":{"line":232,"column":0},"generated":{"line":232,"column":0}},{"source":"node_modules/elliptic/lib/elliptic/ec/index.js","original":{"line":233,"column":0},"generated":{"line":233,"column":0}},{"source":"node_modules/elliptic/lib/elliptic/ec/index.js","original":{"line":234,"column":0},"generated":{"line":234,"column":0}},{"source":"node_modules/elliptic/lib/elliptic/ec/index.js","original":{"line":235,"column":0},"generated":{"line":235,"column":0}},{"source":"node_modules/elliptic/lib/elliptic/ec/index.js","original":{"line":236,"column":0},"generated":{"line":236,"column":0}},{"source":"node_modules/elliptic/lib/elliptic/ec/index.js","original":{"line":237,"column":0},"generated":{"line":237,"column":0}},{"source":"node_modules/elliptic/lib/elliptic/ec/index.js","original":{"line":238,"column":0},"generated":{"line":238,"column":0}},{"source":"node_modules/elliptic/lib/elliptic/ec/index.js","original":{"line":239,"column":0},"generated":{"line":239,"column":0}},{"source":"node_modules/elliptic/lib/elliptic/ec/index.js","original":{"line":240,"column":0},"generated":{"line":240,"column":0}},{"source":"node_modules/elliptic/lib/elliptic/ec/index.js","original":{"line":241,"column":0},"generated":{"line":241,"column":0}}],"sources":{"node_modules/elliptic/lib/elliptic/ec/index.js":"'use strict';\n\nvar BN = require('bn.js');\nvar HmacDRBG = require('hmac-drbg');\nvar elliptic = require('../../elliptic');\nvar utils = elliptic.utils;\nvar assert = utils.assert;\n\nvar KeyPair = require('./key');\nvar Signature = require('./signature');\n\nfunction EC(options) {\n  if (!(this instanceof EC))\n    return new EC(options);\n\n  // Shortcut `elliptic.ec(curve-name)`\n  if (typeof options === 'string') {\n    assert(elliptic.curves.hasOwnProperty(options), 'Unknown curve ' + options);\n\n    options = elliptic.curves[options];\n  }\n\n  // Shortcut for `elliptic.ec(elliptic.curves.curveName)`\n  if (options instanceof elliptic.curves.PresetCurve)\n    options = { curve: options };\n\n  this.curve = options.curve.curve;\n  this.n = this.curve.n;\n  this.nh = this.n.ushrn(1);\n  this.g = this.curve.g;\n\n  // Point on curve\n  this.g = options.curve.g;\n  this.g.precompute(options.curve.n.bitLength() + 1);\n\n  // Hash for function for DRBG\n  this.hash = options.hash || options.curve.hash;\n}\nmodule.exports = EC;\n\nEC.prototype.keyPair = function keyPair(options) {\n  return new KeyPair(this, options);\n};\n\nEC.prototype.keyFromPrivate = function keyFromPrivate(priv, enc) {\n  return KeyPair.fromPrivate(this, priv, enc);\n};\n\nEC.prototype.keyFromPublic = function keyFromPublic(pub, enc) {\n  return KeyPair.fromPublic(this, pub, enc);\n};\n\nEC.prototype.genKeyPair = function genKeyPair(options) {\n  if (!options)\n    options = {};\n\n  // Instantiate Hmac_DRBG\n  var drbg = new HmacDRBG({\n    hash: this.hash,\n    pers: options.pers,\n    persEnc: options.persEnc || 'utf8',\n    entropy: options.entropy || elliptic.rand(this.hash.hmacStrength),\n    entropyEnc: options.entropy && options.entropyEnc || 'utf8',\n    nonce: this.n.toArray()\n  });\n\n  var bytes = this.n.byteLength();\n  var ns2 = this.n.sub(new BN(2));\n  do {\n    var priv = new BN(drbg.generate(bytes));\n    if (priv.cmp(ns2) > 0)\n      continue;\n\n    priv.iaddn(1);\n    return this.keyFromPrivate(priv);\n  } while (true);\n};\n\nEC.prototype._truncateToN = function truncateToN(msg, truncOnly) {\n  var delta = msg.byteLength() * 8 - this.n.bitLength();\n  if (delta > 0)\n    msg = msg.ushrn(delta);\n  if (!truncOnly && msg.cmp(this.n) >= 0)\n    return msg.sub(this.n);\n  else\n    return msg;\n};\n\nEC.prototype.sign = function sign(msg, key, enc, options) {\n  if (typeof enc === 'object') {\n    options = enc;\n    enc = null;\n  }\n  if (!options)\n    options = {};\n\n  key = this.keyFromPrivate(key, enc);\n  msg = this._truncateToN(new BN(msg, 16));\n\n  // Zero-extend key to provide enough entropy\n  var bytes = this.n.byteLength();\n  var bkey = key.getPrivate().toArray('be', bytes);\n\n  // Zero-extend nonce to have the same byte size as N\n  var nonce = msg.toArray('be', bytes);\n\n  // Instantiate Hmac_DRBG\n  var drbg = new HmacDRBG({\n    hash: this.hash,\n    entropy: bkey,\n    nonce: nonce,\n    pers: options.pers,\n    persEnc: options.persEnc || 'utf8'\n  });\n\n  // Number of bytes to generate\n  var ns1 = this.n.sub(new BN(1));\n\n  for (var iter = 0; true; iter++) {\n    var k = options.k ?\n        options.k(iter) :\n        new BN(drbg.generate(this.n.byteLength()));\n    k = this._truncateToN(k, true);\n    if (k.cmpn(1) <= 0 || k.cmp(ns1) >= 0)\n      continue;\n\n    var kp = this.g.mul(k);\n    if (kp.isInfinity())\n      continue;\n\n    var kpX = kp.getX();\n    var r = kpX.umod(this.n);\n    if (r.cmpn(0) === 0)\n      continue;\n\n    var s = k.invm(this.n).mul(r.mul(key.getPrivate()).iadd(msg));\n    s = s.umod(this.n);\n    if (s.cmpn(0) === 0)\n      continue;\n\n    var recoveryParam = (kp.getY().isOdd() ? 1 : 0) |\n                        (kpX.cmp(r) !== 0 ? 2 : 0);\n\n    // Use complement of `s`, if it is > `n / 2`\n    if (options.canonical && s.cmp(this.nh) > 0) {\n      s = this.n.sub(s);\n      recoveryParam ^= 1;\n    }\n\n    return new Signature({ r: r, s: s, recoveryParam: recoveryParam });\n  }\n};\n\nEC.prototype.verify = function verify(msg, signature, key, enc) {\n  msg = this._truncateToN(new BN(msg, 16));\n  key = this.keyFromPublic(key, enc);\n  signature = new Signature(signature, 'hex');\n\n  // Perform primitive values validation\n  var r = signature.r;\n  var s = signature.s;\n  if (r.cmpn(1) < 0 || r.cmp(this.n) >= 0)\n    return false;\n  if (s.cmpn(1) < 0 || s.cmp(this.n) >= 0)\n    return false;\n\n  // Validate signature\n  var sinv = s.invm(this.n);\n  var u1 = sinv.mul(msg).umod(this.n);\n  var u2 = sinv.mul(r).umod(this.n);\n\n  if (!this.curve._maxwellTrick) {\n    var p = this.g.mulAdd(u1, key.getPublic(), u2);\n    if (p.isInfinity())\n      return false;\n\n    return p.getX().umod(this.n).cmp(r) === 0;\n  }\n\n  // NOTE: Greg Maxwell's trick, inspired by:\n  // https://git.io/vad3K\n\n  var p = this.g.jmulAdd(u1, key.getPublic(), u2);\n  if (p.isInfinity())\n    return false;\n\n  // Compare `p.x` of Jacobian point with `r`,\n  // this will do `p.x == r * p.z^2` instead of multiplying `p.x` by the\n  // inverse of `p.z^2`\n  return p.eqXToP(r);\n};\n\nEC.prototype.recoverPubKey = function(msg, signature, j, enc) {\n  assert((3 & j) === j, 'The recovery param is more than two bits');\n  signature = new Signature(signature, enc);\n\n  var n = this.n;\n  var e = new BN(msg);\n  var r = signature.r;\n  var s = signature.s;\n\n  // A set LSB signifies that the y-coordinate is odd\n  var isYOdd = j & 1;\n  var isSecondKey = j >> 1;\n  if (r.cmp(this.curve.p.umod(this.curve.n)) >= 0 && isSecondKey)\n    throw new Error('Unable to find sencond key candinate');\n\n  // 1.1. Let x = r + jn.\n  if (isSecondKey)\n    r = this.curve.pointFromX(r.add(this.curve.n), isYOdd);\n  else\n    r = this.curve.pointFromX(r, isYOdd);\n\n  var rInv = signature.r.invm(n);\n  var s1 = n.sub(e).mul(rInv).umod(n);\n  var s2 = s.mul(rInv).umod(n);\n\n  // 1.6.1 Compute Q = r^-1 (sR -  eG)\n  //               Q = r^-1 (sR + -eG)\n  return this.g.mulAdd(s1, r, s2);\n};\n\nEC.prototype.getKeyRecoveryParam = function(e, signature, Q, enc) {\n  signature = new Signature(signature, enc);\n  if (signature.recoveryParam !== null)\n    return signature.recoveryParam;\n\n  for (var i = 0; i < 4; i++) {\n    var Qprime;\n    try {\n      Qprime = this.recoverPubKey(e, signature, i);\n    } catch (e) {\n      continue;\n    }\n\n    if (Qprime.eq(Q))\n      return i;\n  }\n  throw new Error('Unable to find valid recovery factor');\n};\n"},"lineCount":241}},"hash":"b53baae62d983ffe6a5ec33678c45919","cacheData":{"env":{}}}