1 line
8.7 KiB
JSON
1 line
8.7 KiB
JSON
{"ast":null,"code":"var randomBytes = require('randombytes');\n\nmodule.exports = findPrime;\nfindPrime.simpleSieve = simpleSieve;\nfindPrime.fermatTest = fermatTest;\n\nvar BN = require('bn.js');\n\nvar TWENTYFOUR = new BN(24);\n\nvar MillerRabin = require('miller-rabin');\n\nvar millerRabin = new MillerRabin();\nvar ONE = new BN(1);\nvar TWO = new BN(2);\nvar FIVE = new BN(5);\nvar SIXTEEN = new BN(16);\nvar EIGHT = new BN(8);\nvar TEN = new BN(10);\nvar THREE = new BN(3);\nvar SEVEN = new BN(7);\nvar ELEVEN = new BN(11);\nvar FOUR = new BN(4);\nvar TWELVE = new BN(12);\nvar primes = null;\n\nfunction _getPrimes() {\n if (primes !== null) return primes;\n var limit = 0x100000;\n var res = [];\n res[0] = 2;\n\n for (var i = 1, k = 3; k < limit; k += 2) {\n var sqrt = Math.ceil(Math.sqrt(k));\n\n for (var j = 0; j < i && res[j] <= sqrt; j++) if (k % res[j] === 0) break;\n\n if (i !== j && res[j] <= sqrt) continue;\n res[i++] = k;\n }\n\n primes = res;\n return res;\n}\n\nfunction simpleSieve(p) {\n var primes = _getPrimes();\n\n for (var i = 0; i < primes.length; i++) if (p.modn(primes[i]) === 0) {\n if (p.cmpn(primes[i]) === 0) {\n return true;\n } else {\n return false;\n }\n }\n\n return true;\n}\n\nfunction fermatTest(p) {\n var red = BN.mont(p);\n return TWO.toRed(red).redPow(p.subn(1)).fromRed().cmpn(1) === 0;\n}\n\nfunction findPrime(bits, gen) {\n if (bits < 16) {\n // this is what openssl does\n if (gen === 2 || gen === 5) {\n return new BN([0x8c, 0x7b]);\n } else {\n return new BN([0x8c, 0x27]);\n }\n }\n\n gen = new BN(gen);\n var num, n2;\n\n while (true) {\n num = new BN(randomBytes(Math.ceil(bits / 8)));\n\n while (num.bitLength() > bits) {\n num.ishrn(1);\n }\n\n if (num.isEven()) {\n num.iadd(ONE);\n }\n\n if (!num.testn(1)) {\n num.iadd(TWO);\n }\n\n if (!gen.cmp(TWO)) {\n while (num.mod(TWENTYFOUR).cmp(ELEVEN)) {\n num.iadd(FOUR);\n }\n } else if (!gen.cmp(FIVE)) {\n while (num.mod(TEN).cmp(THREE)) {\n num.iadd(FOUR);\n }\n }\n\n n2 = num.shrn(1);\n\n if (simpleSieve(n2) && simpleSieve(num) && fermatTest(n2) && fermatTest(num) && millerRabin.test(n2) && millerRabin.test(num)) {\n return num;\n }\n }\n}","map":{"version":3,"sources":["/Users/tylerkoenig/Code/personal/react-scss2/node_modules/diffie-hellman/lib/generatePrime.js"],"names":["randomBytes","require","module","exports","findPrime","simpleSieve","fermatTest","BN","TWENTYFOUR","MillerRabin","millerRabin","ONE","TWO","FIVE","SIXTEEN","EIGHT","TEN","THREE","SEVEN","ELEVEN","FOUR","TWELVE","primes","_getPrimes","limit","res","i","k","sqrt","Math","ceil","j","p","length","modn","cmpn","red","mont","toRed","redPow","subn","fromRed","bits","gen","num","n2","bitLength","ishrn","isEven","iadd","testn","cmp","mod","shrn","test"],"mappings":"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","sourcesContent":["var randomBytes = require('randombytes');\nmodule.exports = findPrime;\nfindPrime.simpleSieve = simpleSieve;\nfindPrime.fermatTest = fermatTest;\nvar BN = require('bn.js');\nvar TWENTYFOUR = new BN(24);\nvar MillerRabin = require('miller-rabin');\nvar millerRabin = new MillerRabin();\nvar ONE = new BN(1);\nvar TWO = new BN(2);\nvar FIVE = new BN(5);\nvar SIXTEEN = new BN(16);\nvar EIGHT = new BN(8);\nvar TEN = new BN(10);\nvar THREE = new BN(3);\nvar SEVEN = new BN(7);\nvar ELEVEN = new BN(11);\nvar FOUR = new BN(4);\nvar TWELVE = new BN(12);\nvar primes = null;\n\nfunction _getPrimes() {\n if (primes !== null)\n return primes;\n\n var limit = 0x100000;\n var res = [];\n res[0] = 2;\n for (var i = 1, k = 3; k < limit; k += 2) {\n var sqrt = Math.ceil(Math.sqrt(k));\n for (var j = 0; j < i && res[j] <= sqrt; j++)\n if (k % res[j] === 0)\n break;\n\n if (i !== j && res[j] <= sqrt)\n continue;\n\n res[i++] = k;\n }\n primes = res;\n return res;\n}\n\nfunction simpleSieve(p) {\n var primes = _getPrimes();\n\n for (var i = 0; i < primes.length; i++)\n if (p.modn(primes[i]) === 0) {\n if (p.cmpn(primes[i]) === 0) {\n return true;\n } else {\n return false;\n }\n }\n\n return true;\n}\n\nfunction fermatTest(p) {\n var red = BN.mont(p);\n return TWO.toRed(red).redPow(p.subn(1)).fromRed().cmpn(1) === 0;\n}\n\nfunction findPrime(bits, gen) {\n if (bits < 16) {\n // this is what openssl does\n if (gen === 2 || gen === 5) {\n return new BN([0x8c, 0x7b]);\n } else {\n return new BN([0x8c, 0x27]);\n }\n }\n gen = new BN(gen);\n\n var num, n2;\n\n while (true) {\n num = new BN(randomBytes(Math.ceil(bits / 8)));\n while (num.bitLength() > bits) {\n num.ishrn(1);\n }\n if (num.isEven()) {\n num.iadd(ONE);\n }\n if (!num.testn(1)) {\n num.iadd(TWO);\n }\n if (!gen.cmp(TWO)) {\n while (num.mod(TWENTYFOUR).cmp(ELEVEN)) {\n num.iadd(FOUR);\n }\n } else if (!gen.cmp(FIVE)) {\n while (num.mod(TEN).cmp(THREE)) {\n num.iadd(FOUR);\n }\n }\n n2 = num.shrn(1);\n if (simpleSieve(n2) && simpleSieve(num) &&\n fermatTest(n2) && fermatTest(num) &&\n millerRabin.test(n2) && millerRabin.test(num)) {\n return num;\n }\n }\n\n}\n"]},"metadata":{},"sourceType":"script"} |