{"ast":null,"code":"'use strict';\n\nvar BN = require('bn.js');\n\nvar utils = require('../utils');\n\nvar assert = utils.assert;\n\nfunction KeyPair(ec, options) {\n this.ec = ec;\n this.priv = null;\n this.pub = null; // KeyPair(ec, { priv: ..., pub: ... })\n\n if (options.priv) this._importPrivate(options.priv, options.privEnc);\n if (options.pub) this._importPublic(options.pub, options.pubEnc);\n}\n\nmodule.exports = KeyPair;\n\nKeyPair.fromPublic = function fromPublic(ec, pub, enc) {\n if (pub instanceof KeyPair) return pub;\n return new KeyPair(ec, {\n pub: pub,\n pubEnc: enc\n });\n};\n\nKeyPair.fromPrivate = function fromPrivate(ec, priv, enc) {\n if (priv instanceof KeyPair) return priv;\n return new KeyPair(ec, {\n priv: priv,\n privEnc: enc\n });\n};\n\nKeyPair.prototype.validate = function validate() {\n var pub = this.getPublic();\n if (pub.isInfinity()) return {\n result: false,\n reason: 'Invalid public key'\n };\n if (!pub.validate()) return {\n result: false,\n reason: 'Public key is not a point'\n };\n if (!pub.mul(this.ec.curve.n).isInfinity()) return {\n result: false,\n reason: 'Public key * N != O'\n };\n return {\n result: true,\n reason: null\n };\n};\n\nKeyPair.prototype.getPublic = function getPublic(compact, enc) {\n // compact is optional argument\n if (typeof compact === 'string') {\n enc = compact;\n compact = null;\n }\n\n if (!this.pub) this.pub = this.ec.g.mul(this.priv);\n if (!enc) return this.pub;\n return this.pub.encode(enc, compact);\n};\n\nKeyPair.prototype.getPrivate = function getPrivate(enc) {\n if (enc === 'hex') return this.priv.toString(16, 2);else return this.priv;\n};\n\nKeyPair.prototype._importPrivate = function _importPrivate(key, enc) {\n this.priv = new BN(key, enc || 16); // Ensure that the priv won't be bigger than n, otherwise we may fail\n // in fixed multiplication method\n\n this.priv = this.priv.umod(this.ec.curve.n);\n};\n\nKeyPair.prototype._importPublic = function _importPublic(key, enc) {\n if (key.x || key.y) {\n // Montgomery points only have an `x` coordinate.\n // Weierstrass/Edwards points on the other hand have both `x` and\n // `y` coordinates.\n if (this.ec.curve.type === 'mont') {\n assert(key.x, 'Need x coordinate');\n } else if (this.ec.curve.type === 'short' || this.ec.curve.type === 'edwards') {\n assert(key.x && key.y, 'Need both x and y coordinate');\n }\n\n this.pub = this.ec.curve.point(key.x, key.y);\n return;\n }\n\n this.pub = this.ec.curve.decodePoint(key, enc);\n}; // ECDH\n\n\nKeyPair.prototype.derive = function derive(pub) {\n if (!pub.validate()) {\n assert(pub.validate(), 'public point not validated');\n }\n\n return pub.mul(this.priv).getX();\n}; // ECDSA\n\n\nKeyPair.prototype.sign = function sign(msg, enc, options) {\n return this.ec.sign(msg, this, enc, options);\n};\n\nKeyPair.prototype.verify = function verify(msg, signature) {\n return this.ec.verify(msg, signature, this);\n};\n\nKeyPair.prototype.inspect = function inspect() {\n return '';\n};","map":{"version":3,"sources":["/Users/tylerkoenig/Code/personal/react-scss2/node_modules/elliptic/lib/elliptic/ec/key.js"],"names":["BN","require","utils","assert","KeyPair","ec","options","priv","pub","_importPrivate","privEnc","_importPublic","pubEnc","module","exports","fromPublic","enc","fromPrivate","prototype","validate","getPublic","isInfinity","result","reason","mul","curve","n","compact","g","encode","getPrivate","toString","key","umod","x","y","type","point","decodePoint","derive","getX","sign","msg","verify","signature","inspect"],"mappings":"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","sourcesContent":["'use strict';\n\nvar BN = require('bn.js');\nvar utils = require('../utils');\nvar assert = utils.assert;\n\nfunction KeyPair(ec, options) {\n this.ec = ec;\n this.priv = null;\n this.pub = null;\n\n // KeyPair(ec, { priv: ..., pub: ... })\n if (options.priv)\n this._importPrivate(options.priv, options.privEnc);\n if (options.pub)\n this._importPublic(options.pub, options.pubEnc);\n}\nmodule.exports = KeyPair;\n\nKeyPair.fromPublic = function fromPublic(ec, pub, enc) {\n if (pub instanceof KeyPair)\n return pub;\n\n return new KeyPair(ec, {\n pub: pub,\n pubEnc: enc,\n });\n};\n\nKeyPair.fromPrivate = function fromPrivate(ec, priv, enc) {\n if (priv instanceof KeyPair)\n return priv;\n\n return new KeyPair(ec, {\n priv: priv,\n privEnc: enc,\n });\n};\n\nKeyPair.prototype.validate = function validate() {\n var pub = this.getPublic();\n\n if (pub.isInfinity())\n return { result: false, reason: 'Invalid public key' };\n if (!pub.validate())\n return { result: false, reason: 'Public key is not a point' };\n if (!pub.mul(this.ec.curve.n).isInfinity())\n return { result: false, reason: 'Public key * N != O' };\n\n return { result: true, reason: null };\n};\n\nKeyPair.prototype.getPublic = function getPublic(compact, enc) {\n // compact is optional argument\n if (typeof compact === 'string') {\n enc = compact;\n compact = null;\n }\n\n if (!this.pub)\n this.pub = this.ec.g.mul(this.priv);\n\n if (!enc)\n return this.pub;\n\n return this.pub.encode(enc, compact);\n};\n\nKeyPair.prototype.getPrivate = function getPrivate(enc) {\n if (enc === 'hex')\n return this.priv.toString(16, 2);\n else\n return this.priv;\n};\n\nKeyPair.prototype._importPrivate = function _importPrivate(key, enc) {\n this.priv = new BN(key, enc || 16);\n\n // Ensure that the priv won't be bigger than n, otherwise we may fail\n // in fixed multiplication method\n this.priv = this.priv.umod(this.ec.curve.n);\n};\n\nKeyPair.prototype._importPublic = function _importPublic(key, enc) {\n if (key.x || key.y) {\n // Montgomery points only have an `x` coordinate.\n // Weierstrass/Edwards points on the other hand have both `x` and\n // `y` coordinates.\n if (this.ec.curve.type === 'mont') {\n assert(key.x, 'Need x coordinate');\n } else if (this.ec.curve.type === 'short' ||\n this.ec.curve.type === 'edwards') {\n assert(key.x && key.y, 'Need both x and y coordinate');\n }\n this.pub = this.ec.curve.point(key.x, key.y);\n return;\n }\n this.pub = this.ec.curve.decodePoint(key, enc);\n};\n\n// ECDH\nKeyPair.prototype.derive = function derive(pub) {\n if(!pub.validate()) {\n assert(pub.validate(), 'public point not validated');\n }\n return pub.mul(this.priv).getX();\n};\n\n// ECDSA\nKeyPair.prototype.sign = function sign(msg, enc, options) {\n return this.ec.sign(msg, this, enc, options);\n};\n\nKeyPair.prototype.verify = function verify(msg, signature) {\n return this.ec.verify(msg, signature, this);\n};\n\nKeyPair.prototype.inspect = function inspect() {\n return '';\n};\n"]},"metadata":{},"sourceType":"script"}