Files
portfolio/node_modules/.cache/babel-loader/0d82c205f44aec8d1b16bd76f90d13fb.json
2021-09-20 16:54:47 -04:00

1 line
17 KiB
JSON

{"ast":null,"code":"'use strict';\n\nvar BN = require('bn.js');\n\nvar inherits = require('inherits');\n\nvar Base = require('./base');\n\nvar utils = require('../utils');\n\nfunction MontCurve(conf) {\n Base.call(this, 'mont', conf);\n this.a = new BN(conf.a, 16).toRed(this.red);\n this.b = new BN(conf.b, 16).toRed(this.red);\n this.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}\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 return y.redSqr().cmp(rhs) === 0;\n};\n\nfunction Point(curve, x, z) {\n Base.BasePoint.call(this, curve, 'projective');\n\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) this.x = this.x.toRed(this.curve.red);\n if (!this.z.red) this.z = this.z.toRed(this.curve.red);\n }\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() {// 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()) return '<EC Point Infinity>';\n return '<EC Point x: ' + this.x.fromRed().toString(16, 2) + ' 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 // A = X1 + Z1\n var a = this.x.redAdd(this.z); // AA = A^2\n\n var aa = a.redSqr(); // B = X1 - Z1\n\n var b = this.x.redSub(this.z); // BB = B^2\n\n var bb = b.redSqr(); // C = AA - BB\n\n var c = aa.redSub(bb); // X3 = AA * BB\n\n var nx = aa.redMul(bb); // Z3 = C * (BB + A24 * C)\n\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 // A = X2 + Z2\n var a = this.x.redAdd(this.z); // B = X2 - Z2\n\n var b = this.x.redSub(this.z); // C = X3 + Z3\n\n var c = p.x.redAdd(p.z); // D = X3 - Z3\n\n var d = p.x.redSub(p.z); // DA = D * A\n\n var da = d.redMul(a); // CB = C * B\n\n var cb = c.redMul(b); // X5 = Z1 * (DA + CB)^2\n\n var nx = diff.z.redMul(da.redAdd(cb).redSqr()); // Z5 = X1 * (DA - CB)^2\n\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\n var b = this.curve.point(null, null); // (N / 2) * Q\n\n var c = this; // Q\n\n for (var bits = []; t.cmpn(0) !== 0; t.iushrn(1)) 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 * Q = 2 * ((N / 2) * Q + Q))\n\n b = b.dbl();\n } else {\n // N * Q = ((N / 2) * Q + Q) + ((N / 2) * Q)\n b = a.diffAdd(b, c); // N * Q + Q = 2 * ((N / 2) * Q + Q)\n\n a = a.dbl();\n }\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 return this.x.fromRed();\n};","map":{"version":3,"sources":["/Users/tylerkoenig/Code/personal/react-scss2/node_modules/elliptic/lib/elliptic/curve/mont.js"],"names":["BN","require","inherits","Base","utils","MontCurve","conf","call","a","toRed","red","b","i4","redInvm","two","a24","redMul","redAdd","module","exports","prototype","validate","point","x","normalize","x2","redSqr","rhs","y","redSqrt","cmp","Point","curve","z","BasePoint","one","zero","decodePoint","bytes","enc","toArray","pointFromJSON","obj","fromJSON","precompute","_encode","getX","p","byteLength","inspect","isInfinity","fromRed","toString","cmpn","dbl","aa","redSub","bb","c","nx","nz","add","Error","diffAdd","diff","d","da","cb","redISub","mul","k","t","clone","bits","iushrn","push","andln","i","length","mulAdd","jumlAdd","eq","other"],"mappings":"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","sourcesContent":["'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 '<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"]},"metadata":{},"sourceType":"script"}