{"version":3,"file":"rsa.mjs","sources":["../../../../../../../packages/utils/jsencrypt/jselib/jsbn/rsa.js"],"sourcesContent":["// Depends on jsbn.js and rng.js\n// Version 1.1: support utf-8 encoding in pkcs1pad2\n// convert a (hex) string to a bignum object\n/* eslint-disable */\nimport { BigInteger, nbi, parseBigInt } from './jsbn'\nimport { SecureRandom } from './rng'\n// function linebrk(s,n) {\n//   var ret = \"\";\n//   var i = 0;\n//   while(i + n < s.length) {\n//     ret += s.substring(i,i+n) + \"\\n\";\n//     i += n;\n//   }\n//   return ret + s.substring(i,s.length);\n// }\n// function byte2Hex(b) {\n//   if(b < 0x10)\n//     return \"0\" + b.toString(16);\n//   else\n//     return b.toString(16);\n// }\nfunction pkcs1pad1(s, n) {\n\tif (n < s.length + 22) {\n\t\tconsole.error('Message too long for RSA')\n\t\treturn null\n\t}\n\tvar len = n - s.length - 6\n\tvar filler = ''\n\tfor (var f = 0; f < len; f += 2) {\n\t\tfiller += 'ff'\n\t}\n\tvar m = '0001' + filler + '00' + s\n\treturn parseBigInt(m, 16)\n}\n// PKCS#1 (type 2, random) pad input string s to n bytes, and return a bigint\nfunction pkcs1pad2(s, n) {\n\tif (n < s.length + 11) {\n\t\t// TODO: fix for utf-8\n\t\tconsole.error('Message too long for RSA')\n\t\treturn null\n\t}\n\tvar ba = []\n\tvar i = s.length - 1\n\twhile (i >= 0 && n > 0) {\n\t\tvar c = s.charCodeAt(i--)\n\t\tif (c < 128) {\n\t\t\t// encode using utf-8\n\t\t\tba[--n] = c\n\t\t} else if (c > 127 && c < 2048) {\n\t\t\tba[--n] = (c & 63) | 128\n\t\t\tba[--n] = (c >> 6) | 192\n\t\t} else {\n\t\t\tba[--n] = (c & 63) | 128\n\t\t\tba[--n] = ((c >> 6) & 63) | 128\n\t\t\tba[--n] = (c >> 12) | 224\n\t\t}\n\t}\n\tba[--n] = 0\n\tvar rng = new SecureRandom()\n\tvar x = []\n\twhile (n > 2) {\n\t\t// random non-zero pad\n\t\tx[0] = 0\n\t\twhile (x[0] == 0) {\n\t\t\trng.nextBytes(x)\n\t\t}\n\t\tba[--n] = x[0]\n\t}\n\tba[--n] = 2\n\tba[--n] = 0\n\treturn new BigInteger(ba)\n}\n// \"empty\" RSA key constructor\nvar RSAKey = /** @class */ (function () {\n\tfunction RSAKey() {\n\t\tthis.n = null\n\t\tthis.e = 0\n\t\tthis.d = null\n\t\tthis.p = null\n\t\tthis.q = null\n\t\tthis.dmp1 = null\n\t\tthis.dmq1 = null\n\t\tthis.coeff = null\n\t}\n\t//#region PROTECTED\n\t// protected\n\t// RSAKey.prototype.doPublic = RSADoPublic;\n\t// Perform raw public operation on \"x\": return x^e (mod n)\n\tRSAKey.prototype.doPublic = function (x) {\n\t\treturn x.modPowInt(this.e, this.n)\n\t}\n\t// RSAKey.prototype.doPrivate = RSADoPrivate;\n\t// Perform raw private operation on \"x\": return x^d (mod n)\n\tRSAKey.prototype.doPrivate = function (x) {\n\t\tif (this.p == null || this.q == null) {\n\t\t\treturn x.modPow(this.d, this.n)\n\t\t}\n\t\t// TODO: re-calculate any missing CRT params\n\t\tvar xp = x.mod(this.p).modPow(this.dmp1, this.p)\n\t\tvar xq = x.mod(this.q).modPow(this.dmq1, this.q)\n\t\twhile (xp.compareTo(xq) < 0) {\n\t\t\txp = xp.add(this.p)\n\t\t}\n\t\treturn xp.subtract(xq).multiply(this.coeff).mod(this.p).multiply(this.q).add(xq)\n\t}\n\t//#endregion PROTECTED\n\t//#region PUBLIC\n\t// RSAKey.prototype.setPublic = RSASetPublic;\n\t// Set the public key fields N and e from hex strings\n\tRSAKey.prototype.setPublic = function (N, E) {\n\t\tif (N != null && E != null && N.length > 0 && E.length > 0) {\n\t\t\tthis.n = parseBigInt(N, 16)\n\t\t\tthis.e = parseInt(E, 16)\n\t\t} else {\n\t\t\tconsole.error('Invalid RSA public key')\n\t\t}\n\t}\n\t// RSAKey.prototype.encrypt = RSAEncrypt;\n\t// Return the PKCS#1 RSA encryption of \"text\" as an even-length hex string\n\tRSAKey.prototype.encrypt = function (text) {\n\t\tvar maxLength = (this.n.bitLength() + 7) >> 3\n\t\tvar m = pkcs1pad2(text, maxLength)\n\t\tif (m == null) {\n\t\t\treturn null\n\t\t}\n\t\tvar c = this.doPublic(m)\n\t\tif (c == null) {\n\t\t\treturn null\n\t\t}\n\t\tvar h = c.toString(16)\n\t\tvar length = h.length\n\t\t// fix zero before result\n\t\tfor (var i = 0; i < maxLength * 2 - length; i++) {\n\t\t\th = '0' + h\n\t\t}\n\t\treturn h\n\t}\n\t// RSAKey.prototype.setPrivate = RSASetPrivate;\n\t// Set the private key fields N, e, and d from hex strings\n\tRSAKey.prototype.setPrivate = function (N, E, D) {\n\t\tif (N != null && E != null && N.length > 0 && E.length > 0) {\n\t\t\tthis.n = parseBigInt(N, 16)\n\t\t\tthis.e = parseInt(E, 16)\n\t\t\tthis.d = parseBigInt(D, 16)\n\t\t} else {\n\t\t\tconsole.error('Invalid RSA private key')\n\t\t}\n\t}\n\t// RSAKey.prototype.setPrivateEx = RSASetPrivateEx;\n\t// Set the private key fields N, e, d and CRT params from hex strings\n\tRSAKey.prototype.setPrivateEx = function (N, E, D, P, Q, DP, DQ, C) {\n\t\tif (N != null && E != null && N.length > 0 && E.length > 0) {\n\t\t\tthis.n = parseBigInt(N, 16)\n\t\t\tthis.e = parseInt(E, 16)\n\t\t\tthis.d = parseBigInt(D, 16)\n\t\t\tthis.p = parseBigInt(P, 16)\n\t\t\tthis.q = parseBigInt(Q, 16)\n\t\t\tthis.dmp1 = parseBigInt(DP, 16)\n\t\t\tthis.dmq1 = parseBigInt(DQ, 16)\n\t\t\tthis.coeff = parseBigInt(C, 16)\n\t\t} else {\n\t\t\tconsole.error('Invalid RSA private key')\n\t\t}\n\t}\n\t// RSAKey.prototype.generate = RSAGenerate;\n\t// Generate a new random private key B bits long, using public expt E\n\tRSAKey.prototype.generate = function (B, E) {\n\t\tvar rng = new SecureRandom()\n\t\tvar qs = B >> 1\n\t\tthis.e = parseInt(E, 16)\n\t\tvar ee = new BigInteger(E, 16)\n\t\tfor (;;) {\n\t\t\tfor (;;) {\n\t\t\t\tthis.p = new BigInteger(B - qs, 1, rng)\n\t\t\t\tif (\n\t\t\t\t\tthis.p.subtract(BigInteger.ONE).gcd(ee).compareTo(BigInteger.ONE) == 0 &&\n\t\t\t\t\tthis.p.isProbablePrime(10)\n\t\t\t\t) {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t\tfor (;;) {\n\t\t\t\tthis.q = new BigInteger(qs, 1, rng)\n\t\t\t\tif (\n\t\t\t\t\tthis.q.subtract(BigInteger.ONE).gcd(ee).compareTo(BigInteger.ONE) == 0 &&\n\t\t\t\t\tthis.q.isProbablePrime(10)\n\t\t\t\t) {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (this.p.compareTo(this.q) <= 0) {\n\t\t\t\tvar t = this.p\n\t\t\t\tthis.p = this.q\n\t\t\t\tthis.q = t\n\t\t\t}\n\t\t\tvar p1 = this.p.subtract(BigInteger.ONE)\n\t\t\tvar q1 = this.q.subtract(BigInteger.ONE)\n\t\t\tvar phi = p1.multiply(q1)\n\t\t\tif (phi.gcd(ee).compareTo(BigInteger.ONE) == 0) {\n\t\t\t\tthis.n = this.p.multiply(this.q)\n\t\t\t\tthis.d = ee.modInverse(phi)\n\t\t\t\tthis.dmp1 = this.d.mod(p1)\n\t\t\t\tthis.dmq1 = this.d.mod(q1)\n\t\t\t\tthis.coeff = this.q.modInverse(this.p)\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t}\n\t// RSAKey.prototype.decrypt = RSADecrypt;\n\t// Return the PKCS#1 RSA decryption of \"ctext\".\n\t// \"ctext\" is an even-length hex string and the output is a plain string.\n\tRSAKey.prototype.decrypt = function (ctext) {\n\t\tvar c = parseBigInt(ctext, 16)\n\t\tvar m = this.doPrivate(c)\n\t\tif (m == null) {\n\t\t\treturn null\n\t\t}\n\t\treturn pkcs1unpad2(m, (this.n.bitLength() + 7) >> 3)\n\t}\n\t// Generate a new random private key B bits long, using public expt E\n\tRSAKey.prototype.generateAsync = function (B, E, callback) {\n\t\tvar rng = new SecureRandom()\n\t\tvar qs = B >> 1\n\t\tthis.e = parseInt(E, 16)\n\t\tvar ee = new BigInteger(E, 16)\n\t\tvar rsa = this\n\t\t// These functions have non-descript names because they were originally for(;;) loops.\n\t\t// I don't know about cryptography to give them better names than loop1-4.\n\t\tvar loop1 = function () {\n\t\t\tvar loop4 = function () {\n\t\t\t\tif (rsa.p.compareTo(rsa.q) <= 0) {\n\t\t\t\t\tvar t = rsa.p\n\t\t\t\t\trsa.p = rsa.q\n\t\t\t\t\trsa.q = t\n\t\t\t\t}\n\t\t\t\tvar p1 = rsa.p.subtract(BigInteger.ONE)\n\t\t\t\tvar q1 = rsa.q.subtract(BigInteger.ONE)\n\t\t\t\tvar phi = p1.multiply(q1)\n\t\t\t\tif (phi.gcd(ee).compareTo(BigInteger.ONE) == 0) {\n\t\t\t\t\trsa.n = rsa.p.multiply(rsa.q)\n\t\t\t\t\trsa.d = ee.modInverse(phi)\n\t\t\t\t\trsa.dmp1 = rsa.d.mod(p1)\n\t\t\t\t\trsa.dmq1 = rsa.d.mod(q1)\n\t\t\t\t\trsa.coeff = rsa.q.modInverse(rsa.p)\n\t\t\t\t\tsetTimeout(function () {\n\t\t\t\t\t\tcallback()\n\t\t\t\t\t}, 0) // escape\n\t\t\t\t} else {\n\t\t\t\t\tsetTimeout(loop1, 0)\n\t\t\t\t}\n\t\t\t}\n\t\t\tvar loop3 = function () {\n\t\t\t\trsa.q = nbi()\n\t\t\t\trsa.q.fromNumberAsync(qs, 1, rng, function () {\n\t\t\t\t\trsa.q.subtract(BigInteger.ONE).gcda(ee, function (r) {\n\t\t\t\t\t\tif (r.compareTo(BigInteger.ONE) == 0 && rsa.q.isProbablePrime(10)) {\n\t\t\t\t\t\t\tsetTimeout(loop4, 0)\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tsetTimeout(loop3, 0)\n\t\t\t\t\t\t}\n\t\t\t\t\t})\n\t\t\t\t})\n\t\t\t}\n\t\t\tvar loop2 = function () {\n\t\t\t\trsa.p = nbi()\n\t\t\t\trsa.p.fromNumberAsync(B - qs, 1, rng, function () {\n\t\t\t\t\trsa.p.subtract(BigInteger.ONE).gcda(ee, function (r) {\n\t\t\t\t\t\tif (r.compareTo(BigInteger.ONE) == 0 && rsa.p.isProbablePrime(10)) {\n\t\t\t\t\t\t\tsetTimeout(loop3, 0)\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tsetTimeout(loop2, 0)\n\t\t\t\t\t\t}\n\t\t\t\t\t})\n\t\t\t\t})\n\t\t\t}\n\t\t\tsetTimeout(loop2, 0)\n\t\t}\n\t\tsetTimeout(loop1, 0)\n\t}\n\tRSAKey.prototype.sign = function (text, digestMethod, digestName) {\n\t\tvar header = getDigestHeader(digestName)\n\t\tvar digest = header + digestMethod(text).toString()\n\t\tvar m = pkcs1pad1(digest, this.n.bitLength() / 4)\n\t\tif (m == null) {\n\t\t\treturn null\n\t\t}\n\t\tvar c = this.doPrivate(m)\n\t\tif (c == null) {\n\t\t\treturn null\n\t\t}\n\t\tvar h = c.toString(16)\n\t\tif ((h.length & 1) == 0) {\n\t\t\treturn h\n\t\t} else {\n\t\t\treturn '0' + h\n\t\t}\n\t}\n\tRSAKey.prototype.verify = function (text, signature, digestMethod) {\n\t\tvar c = parseBigInt(signature, 16)\n\t\tvar m = this.doPublic(c)\n\t\tif (m == null) {\n\t\t\treturn null\n\t\t}\n\t\tvar unpadded = m.toString(16).replace(/^1f+00/, '')\n\t\tvar digest = removeDigestHeader(unpadded)\n\t\treturn digest == digestMethod(text).toString()\n\t}\n\treturn RSAKey\n})()\nexport { RSAKey }\n// Undo PKCS#1 (type 2, random) padding and, if valid, return the plaintext\nfunction pkcs1unpad2(d, n) {\n\tvar b = d.toByteArray()\n\tvar i = 0\n\twhile (i < b.length && b[i] == 0) {\n\t\t++i\n\t}\n\tif (b.length - i != n - 1 || b[i] != 2) {\n\t\treturn null\n\t}\n\t++i\n\twhile (b[i] != 0) {\n\t\tif (++i >= b.length) {\n\t\t\treturn null\n\t\t}\n\t}\n\tvar ret = ''\n\twhile (++i < b.length) {\n\t\tvar c = b[i] & 255\n\t\tif (c < 128) {\n\t\t\t// utf-8 decode\n\t\t\tret += String.fromCharCode(c)\n\t\t} else if (c > 191 && c < 224) {\n\t\t\tret += String.fromCharCode(((c & 31) << 6) | (b[i + 1] & 63))\n\t\t\t++i\n\t\t} else {\n\t\t\tret += String.fromCharCode(((c & 15) << 12) | ((b[i + 1] & 63) << 6) | (b[i + 2] & 63))\n\t\t\ti += 2\n\t\t}\n\t}\n\treturn ret\n}\n// https://tools.ietf.org/html/rfc3447#page-43\nvar DIGEST_HEADERS = {\n\tmd2: '3020300c06082a864886f70d020205000410',\n\tmd5: '3020300c06082a864886f70d020505000410',\n\tsha1: '3021300906052b0e03021a05000414',\n\tsha224: '302d300d06096086480165030402040500041c',\n\tsha256: '3031300d060960864801650304020105000420',\n\tsha384: '3041300d060960864801650304020205000430',\n\tsha512: '3051300d060960864801650304020305000440',\n\tripemd160: '3021300906052b2403020105000414',\n}\nfunction getDigestHeader(name) {\n\treturn DIGEST_HEADERS[name] || ''\n}\nfunction removeDigestHeader(str) {\n\tfor (var name_1 in DIGEST_HEADERS) {\n\t\tif (DIGEST_HEADERS.hasOwnProperty(name_1)) {\n\t\t\tvar header = DIGEST_HEADERS[name_1]\n\t\t\tvar len = header.length\n\t\t\tif (str.substr(0, len) == header) {\n\t\t\t\treturn str.substr(len)\n\t\t\t}\n\t\t}\n\t}\n\treturn str\n}\n// Return the PKCS#1 RSA encryption of \"text\" as a Base64-encoded string\n// function RSAEncryptB64(text) {\n//  var h = this.encrypt(text);\n//  if(h) return hex2b64(h); else return null;\n// }\n// public\n// RSAKey.prototype.encrypt_b64 = RSAEncryptB64;\n"],"names":["RSAKey"],"mappings":"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"}