1 line
14 KiB
JSON
1 line
14 KiB
JSON
{"ast":null,"code":"var BN = require('bn.js');\n\nvar MillerRabin = require('miller-rabin');\n\nvar millerRabin = new MillerRabin();\nvar TWENTYFOUR = new BN(24);\nvar ELEVEN = new BN(11);\nvar TEN = new BN(10);\nvar THREE = new BN(3);\nvar SEVEN = new BN(7);\n\nvar primes = require('./generatePrime');\n\nvar randomBytes = require('randombytes');\n\nmodule.exports = DH;\n\nfunction setPublicKey(pub, enc) {\n enc = enc || 'utf8';\n\n if (!Buffer.isBuffer(pub)) {\n pub = new Buffer(pub, enc);\n }\n\n this._pub = new BN(pub);\n return this;\n}\n\nfunction setPrivateKey(priv, enc) {\n enc = enc || 'utf8';\n\n if (!Buffer.isBuffer(priv)) {\n priv = new Buffer(priv, enc);\n }\n\n this._priv = new BN(priv);\n return this;\n}\n\nvar primeCache = {};\n\nfunction checkPrime(prime, generator) {\n var gen = generator.toString('hex');\n var hex = [gen, prime.toString(16)].join('_');\n\n if (hex in primeCache) {\n return primeCache[hex];\n }\n\n var error = 0;\n\n if (prime.isEven() || !primes.simpleSieve || !primes.fermatTest(prime) || !millerRabin.test(prime)) {\n //not a prime so +1\n error += 1;\n\n if (gen === '02' || gen === '05') {\n // we'd be able to check the generator\n // it would fail so +8\n error += 8;\n } else {\n //we wouldn't be able to test the generator\n // so +4\n error += 4;\n }\n\n primeCache[hex] = error;\n return error;\n }\n\n if (!millerRabin.test(prime.shrn(1))) {\n //not a safe prime\n error += 2;\n }\n\n var rem;\n\n switch (gen) {\n case '02':\n if (prime.mod(TWENTYFOUR).cmp(ELEVEN)) {\n // unsuidable generator\n error += 8;\n }\n\n break;\n\n case '05':\n rem = prime.mod(TEN);\n\n if (rem.cmp(THREE) && rem.cmp(SEVEN)) {\n // prime mod 10 needs to equal 3 or 7\n error += 8;\n }\n\n break;\n\n default:\n error += 4;\n }\n\n primeCache[hex] = error;\n return error;\n}\n\nfunction DH(prime, generator, malleable) {\n this.setGenerator(generator);\n this.__prime = new BN(prime);\n this._prime = BN.mont(this.__prime);\n this._primeLen = prime.length;\n this._pub = undefined;\n this._priv = undefined;\n this._primeCode = undefined;\n\n if (malleable) {\n this.setPublicKey = setPublicKey;\n this.setPrivateKey = setPrivateKey;\n } else {\n this._primeCode = 8;\n }\n}\n\nObject.defineProperty(DH.prototype, 'verifyError', {\n enumerable: true,\n get: function () {\n if (typeof this._primeCode !== 'number') {\n this._primeCode = checkPrime(this.__prime, this.__gen);\n }\n\n return this._primeCode;\n }\n});\n\nDH.prototype.generateKeys = function () {\n if (!this._priv) {\n this._priv = new BN(randomBytes(this._primeLen));\n }\n\n this._pub = this._gen.toRed(this._prime).redPow(this._priv).fromRed();\n return this.getPublicKey();\n};\n\nDH.prototype.computeSecret = function (other) {\n other = new BN(other);\n other = other.toRed(this._prime);\n var secret = other.redPow(this._priv).fromRed();\n var out = new Buffer(secret.toArray());\n var prime = this.getPrime();\n\n if (out.length < prime.length) {\n var front = new Buffer(prime.length - out.length);\n front.fill(0);\n out = Buffer.concat([front, out]);\n }\n\n return out;\n};\n\nDH.prototype.getPublicKey = function getPublicKey(enc) {\n return formatReturnValue(this._pub, enc);\n};\n\nDH.prototype.getPrivateKey = function getPrivateKey(enc) {\n return formatReturnValue(this._priv, enc);\n};\n\nDH.prototype.getPrime = function (enc) {\n return formatReturnValue(this.__prime, enc);\n};\n\nDH.prototype.getGenerator = function (enc) {\n return formatReturnValue(this._gen, enc);\n};\n\nDH.prototype.setGenerator = function (gen, enc) {\n enc = enc || 'utf8';\n\n if (!Buffer.isBuffer(gen)) {\n gen = new Buffer(gen, enc);\n }\n\n this.__gen = gen;\n this._gen = new BN(gen);\n return this;\n};\n\nfunction formatReturnValue(bn, enc) {\n var buf = new Buffer(bn.toArray());\n\n if (!enc) {\n return buf;\n } else {\n return buf.toString(enc);\n }\n}","map":{"version":3,"sources":["/Users/tylerkoenig/Code/personal/react-scss2/node_modules/diffie-hellman/lib/dh.js"],"names":["BN","require","MillerRabin","millerRabin","TWENTYFOUR","ELEVEN","TEN","THREE","SEVEN","primes","randomBytes","module","exports","DH","setPublicKey","pub","enc","Buffer","isBuffer","_pub","setPrivateKey","priv","_priv","primeCache","checkPrime","prime","generator","gen","toString","hex","join","error","isEven","simpleSieve","fermatTest","test","shrn","rem","mod","cmp","malleable","setGenerator","__prime","_prime","mont","_primeLen","length","undefined","_primeCode","Object","defineProperty","prototype","enumerable","get","__gen","generateKeys","_gen","toRed","redPow","fromRed","getPublicKey","computeSecret","other","secret","out","toArray","getPrime","front","fill","concat","formatReturnValue","getPrivateKey","getGenerator","bn","buf"],"mappings":"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","sourcesContent":["var BN = require('bn.js');\nvar MillerRabin = require('miller-rabin');\nvar millerRabin = new MillerRabin();\nvar TWENTYFOUR = new BN(24);\nvar ELEVEN = new BN(11);\nvar TEN = new BN(10);\nvar THREE = new BN(3);\nvar SEVEN = new BN(7);\nvar primes = require('./generatePrime');\nvar randomBytes = require('randombytes');\nmodule.exports = DH;\n\nfunction setPublicKey(pub, enc) {\n enc = enc || 'utf8';\n if (!Buffer.isBuffer(pub)) {\n pub = new Buffer(pub, enc);\n }\n this._pub = new BN(pub);\n return this;\n}\n\nfunction setPrivateKey(priv, enc) {\n enc = enc || 'utf8';\n if (!Buffer.isBuffer(priv)) {\n priv = new Buffer(priv, enc);\n }\n this._priv = new BN(priv);\n return this;\n}\n\nvar primeCache = {};\nfunction checkPrime(prime, generator) {\n var gen = generator.toString('hex');\n var hex = [gen, prime.toString(16)].join('_');\n if (hex in primeCache) {\n return primeCache[hex];\n }\n var error = 0;\n\n if (prime.isEven() ||\n !primes.simpleSieve ||\n !primes.fermatTest(prime) ||\n !millerRabin.test(prime)) {\n //not a prime so +1\n error += 1;\n\n if (gen === '02' || gen === '05') {\n // we'd be able to check the generator\n // it would fail so +8\n error += 8;\n } else {\n //we wouldn't be able to test the generator\n // so +4\n error += 4;\n }\n primeCache[hex] = error;\n return error;\n }\n if (!millerRabin.test(prime.shrn(1))) {\n //not a safe prime\n error += 2;\n }\n var rem;\n switch (gen) {\n case '02':\n if (prime.mod(TWENTYFOUR).cmp(ELEVEN)) {\n // unsuidable generator\n error += 8;\n }\n break;\n case '05':\n rem = prime.mod(TEN);\n if (rem.cmp(THREE) && rem.cmp(SEVEN)) {\n // prime mod 10 needs to equal 3 or 7\n error += 8;\n }\n break;\n default:\n error += 4;\n }\n primeCache[hex] = error;\n return error;\n}\n\nfunction DH(prime, generator, malleable) {\n this.setGenerator(generator);\n this.__prime = new BN(prime);\n this._prime = BN.mont(this.__prime);\n this._primeLen = prime.length;\n this._pub = undefined;\n this._priv = undefined;\n this._primeCode = undefined;\n if (malleable) {\n this.setPublicKey = setPublicKey;\n this.setPrivateKey = setPrivateKey;\n } else {\n this._primeCode = 8;\n }\n}\nObject.defineProperty(DH.prototype, 'verifyError', {\n enumerable: true,\n get: function () {\n if (typeof this._primeCode !== 'number') {\n this._primeCode = checkPrime(this.__prime, this.__gen);\n }\n return this._primeCode;\n }\n});\nDH.prototype.generateKeys = function () {\n if (!this._priv) {\n this._priv = new BN(randomBytes(this._primeLen));\n }\n this._pub = this._gen.toRed(this._prime).redPow(this._priv).fromRed();\n return this.getPublicKey();\n};\n\nDH.prototype.computeSecret = function (other) {\n other = new BN(other);\n other = other.toRed(this._prime);\n var secret = other.redPow(this._priv).fromRed();\n var out = new Buffer(secret.toArray());\n var prime = this.getPrime();\n if (out.length < prime.length) {\n var front = new Buffer(prime.length - out.length);\n front.fill(0);\n out = Buffer.concat([front, out]);\n }\n return out;\n};\n\nDH.prototype.getPublicKey = function getPublicKey(enc) {\n return formatReturnValue(this._pub, enc);\n};\n\nDH.prototype.getPrivateKey = function getPrivateKey(enc) {\n return formatReturnValue(this._priv, enc);\n};\n\nDH.prototype.getPrime = function (enc) {\n return formatReturnValue(this.__prime, enc);\n};\n\nDH.prototype.getGenerator = function (enc) {\n return formatReturnValue(this._gen, enc);\n};\n\nDH.prototype.setGenerator = function (gen, enc) {\n enc = enc || 'utf8';\n if (!Buffer.isBuffer(gen)) {\n gen = new Buffer(gen, enc);\n }\n this.__gen = gen;\n this._gen = new BN(gen);\n return this;\n};\n\nfunction formatReturnValue(bn, enc) {\n var buf = new Buffer(bn.toArray());\n if (!enc) {\n return buf;\n } else {\n return buf.toString(enc);\n }\n}\n"]},"metadata":{},"sourceType":"script"} |