{"version":3,"file":"JSEncryptRSAKey.mjs","sources":["../../../../../packages/utils/jsencrypt/JSEncryptRSAKey.js"],"sourcesContent":["/* eslint-disable */\nvar __extends = (function () {\n\tvar extendStatics = function (d, b) {\n\t\textendStatics =\n\t\t\tObject.setPrototypeOf ||\n\t\t\tfunction (d, b) {\n\t\t\t\td.__proto__ = b\n\t\t\t} ||\n\t\t\tfunction (d, b) {\n\t\t\t\tfor (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]\n\t\t\t}\n\t\treturn extendStatics(d, b)\n\t}\n\treturn function (d, b) {\n\t\tif (typeof b !== 'function' && b !== null) {\n\t\t\tthrow new TypeError('Class extends value ' + String(b) + ' is not a constructor or null')\n\t\t}\n\t\textendStatics(d, b)\n\t\tfunction __() {\n\t\t\tthis.constructor = d\n\t\t}\n\t\td.prototype = b === null ? Object.create(b) : ((__.prototype = b.prototype), new __())\n\t}\n})()\n\nimport { hex2b64 } from './jselib/jsbn/base64'\nimport { Hex } from './jselib/asn1js/hex'\nimport { Base64 } from './jselib/asn1js/base64'\nimport { ASN1 } from './jselib/asn1js/asn1'\nimport { RSAKey } from './jselib/jsbn/rsa'\nimport { parseBigInt } from './jselib/jsbn/jsbn'\nimport { KJUR } from './jselib/jsrsasign/asn1-1.0'\n/**\n * Create a new JSEncryptRSAKey that extends Tom Wu's RSA key object.\n * This object is just a decorator for parsing the key parameter\n * @param {string|Object} key - The key in string format, or an object containing\n * the parameters needed to build a RSAKey object.\n * @constructor\n */\nvar JSEncryptRSAKey = /** @class */ (function (_super) {\n\t__extends(JSEncryptRSAKey, _super)\n\tfunction JSEncryptRSAKey(key) {\n\t\tvar _this = _super.call(this) || this\n\t\t// Call the super constructor.\n\t\t//  RSAKey.call(this);\n\t\t// If a key key was provided.\n\t\tif (key) {\n\t\t\t// If this is a string...\n\t\t\tif (typeof key === 'string') {\n\t\t\t\t_this.parseKey(key)\n\t\t\t} else if (JSEncryptRSAKey.hasPrivateKeyProperty(key) || JSEncryptRSAKey.hasPublicKeyProperty(key)) {\n\t\t\t\t// Set the values for the key.\n\t\t\t\t_this.parsePropertiesFrom(key)\n\t\t\t}\n\t\t}\n\t\treturn _this\n\t}\n\t/**\n\t * Method to parse a pem encoded string containing both a public or private key.\n\t * The method will translate the pem encoded string in a der encoded string and\n\t * will parse private key and public key parameters. This method accepts public key\n\t * in the rsaencryption pkcs #1 format (oid: 1.2.840.113549.1.1.1).\n\t *\n\t * @todo Check how many rsa formats use the same format of pkcs #1.\n\t *\n\t * The format is defined as:\n\t * PublicKeyInfo ::= SEQUENCE {\n\t *   algorithm       AlgorithmIdentifier,\n\t *   PublicKey       BIT STRING\n\t * }\n\t * Where AlgorithmIdentifier is:\n\t * AlgorithmIdentifier ::= SEQUENCE {\n\t *   algorithm       OBJECT IDENTIFIER,     the OID of the enc algorithm\n\t *   parameters      ANY DEFINED BY algorithm OPTIONAL (NULL for PKCS #1)\n\t * }\n\t * and PublicKey is a SEQUENCE encapsulated in a BIT STRING\n\t * RSAPublicKey ::= SEQUENCE {\n\t *   modulus           INTEGER,  -- n\n\t *   publicExponent    INTEGER   -- e\n\t * }\n\t * it's possible to examine the structure of the keys obtained from openssl using\n\t * an asn.1 dumper as the one used here to parse the components: http://lapo.it/asn1js/\n\t * @argument {string} pem the pem encoded string, can include the BEGIN/END header/footer\n\t * @private\n\t */\n\tJSEncryptRSAKey.prototype.parseKey = function (pem) {\n\t\ttry {\n\t\t\tvar modulus = 0\n\t\t\tvar public_exponent = 0\n\t\t\tvar reHex = /^\\s*(?:[0-9A-Fa-f][0-9A-Fa-f]\\s*)+$/\n\t\t\tvar der = reHex.test(pem) ? Hex.decode(pem) : Base64.unarmor(pem)\n\t\t\tvar asn1 = ASN1.decode(der)\n\t\t\t// Fixes a bug with OpenSSL 1.0+ private keys\n\t\t\tif (asn1.sub.length === 3) {\n\t\t\t\tasn1 = asn1.sub[2].sub[0]\n\t\t\t}\n\t\t\tif (asn1.sub.length === 9) {\n\t\t\t\t// Parse the private key.\n\t\t\t\tmodulus = asn1.sub[1].getHexStringValue() // bigint\n\t\t\t\tthis.n = parseBigInt(modulus, 16)\n\t\t\t\tpublic_exponent = asn1.sub[2].getHexStringValue() // int\n\t\t\t\tthis.e = parseInt(public_exponent, 16)\n\t\t\t\tvar private_exponent = asn1.sub[3].getHexStringValue() // bigint\n\t\t\t\tthis.d = parseBigInt(private_exponent, 16)\n\t\t\t\tvar prime1 = asn1.sub[4].getHexStringValue() // bigint\n\t\t\t\tthis.p = parseBigInt(prime1, 16)\n\t\t\t\tvar prime2 = asn1.sub[5].getHexStringValue() // bigint\n\t\t\t\tthis.q = parseBigInt(prime2, 16)\n\t\t\t\tvar exponent1 = asn1.sub[6].getHexStringValue() // bigint\n\t\t\t\tthis.dmp1 = parseBigInt(exponent1, 16)\n\t\t\t\tvar exponent2 = asn1.sub[7].getHexStringValue() // bigint\n\t\t\t\tthis.dmq1 = parseBigInt(exponent2, 16)\n\t\t\t\tvar coefficient = asn1.sub[8].getHexStringValue() // bigint\n\t\t\t\tthis.coeff = parseBigInt(coefficient, 16)\n\t\t\t} else if (asn1.sub.length === 2) {\n\t\t\t\tif (asn1.sub[0].sub) {\n\t\t\t\t\t// Parse ASN.1 SubjectPublicKeyInfo type as defined by X.509\n\t\t\t\t\tvar bit_string = asn1.sub[1]\n\t\t\t\t\tvar sequence = bit_string.sub[0]\n\t\t\t\t\tmodulus = sequence.sub[0].getHexStringValue()\n\t\t\t\t\tthis.n = parseBigInt(modulus, 16)\n\t\t\t\t\tpublic_exponent = sequence.sub[1].getHexStringValue()\n\t\t\t\t\tthis.e = parseInt(public_exponent, 16)\n\t\t\t\t} else {\n\t\t\t\t\t// Parse ASN.1 RSAPublicKey type as defined by PKCS #1\n\t\t\t\t\tmodulus = asn1.sub[0].getHexStringValue()\n\t\t\t\t\tthis.n = parseBigInt(modulus, 16)\n\t\t\t\t\tpublic_exponent = asn1.sub[1].getHexStringValue()\n\t\t\t\t\tthis.e = parseInt(public_exponent, 16)\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\treturn false\n\t\t\t}\n\t\t\treturn true\n\t\t} catch (ex) {\n\t\t\treturn false\n\t\t}\n\t}\n\t/**\n\t * Translate rsa parameters in a hex encoded string representing the rsa key.\n\t *\n\t * The translation follow the ASN.1 notation :\n\t * RSAPrivateKey ::= SEQUENCE {\n\t *   version           Version,\n\t *   modulus           INTEGER,  -- n\n\t *   publicExponent    INTEGER,  -- e\n\t *   privateExponent   INTEGER,  -- d\n\t *   prime1            INTEGER,  -- p\n\t *   prime2            INTEGER,  -- q\n\t *   exponent1         INTEGER,  -- d mod (p1)\n\t *   exponent2         INTEGER,  -- d mod (q-1)\n\t *   coefficient       INTEGER,  -- (inverse of q) mod p\n\t * }\n\t * @returns {string}  DER Encoded String representing the rsa private key\n\t * @private\n\t */\n\tJSEncryptRSAKey.prototype.getPrivateBaseKey = function () {\n\t\tvar options = {\n\t\t\tarray: [new KJUR.asn1.DERInteger({ int: 0 }), new KJUR.asn1.DERInteger({ bigint: this.n }), new KJUR.asn1.DERInteger({ int: this.e }), new KJUR.asn1.DERInteger({ bigint: this.d }), new KJUR.asn1.DERInteger({ bigint: this.p }), new KJUR.asn1.DERInteger({ bigint: this.q }), new KJUR.asn1.DERInteger({ bigint: this.dmp1 }), new KJUR.asn1.DERInteger({ bigint: this.dmq1 }), new KJUR.asn1.DERInteger({ bigint: this.coeff })]\n\t\t}\n\t\tvar seq = new KJUR.asn1.DERSequence(options)\n\t\treturn seq.getEncodedHex()\n\t}\n\t/**\n\t * base64 (pem) encoded version of the DER encoded representation\n\t * @returns {string} pem encoded representation without header and footer\n\t * @public\n\t */\n\tJSEncryptRSAKey.prototype.getPrivateBaseKeyB64 = function () {\n\t\treturn hex2b64(this.getPrivateBaseKey())\n\t}\n\t/**\n\t * Translate rsa parameters in a hex encoded string representing the rsa public key.\n\t * The representation follow the ASN.1 notation :\n\t * PublicKeyInfo ::= SEQUENCE {\n\t *   algorithm       AlgorithmIdentifier,\n\t *   PublicKey       BIT STRING\n\t * }\n\t * Where AlgorithmIdentifier is:\n\t * AlgorithmIdentifier ::= SEQUENCE {\n\t *   algorithm       OBJECT IDENTIFIER,     the OID of the enc algorithm\n\t *   parameters      ANY DEFINED BY algorithm OPTIONAL (NULL for PKCS #1)\n\t * }\n\t * and PublicKey is a SEQUENCE encapsulated in a BIT STRING\n\t * RSAPublicKey ::= SEQUENCE {\n\t *   modulus           INTEGER,  -- n\n\t *   publicExponent    INTEGER   -- e\n\t * }\n\t * @returns {string} DER Encoded String representing the rsa public key\n\t * @private\n\t */\n\tJSEncryptRSAKey.prototype.getPublicBaseKey = function () {\n\t\tvar first_sequence = new KJUR.asn1.DERSequence({\n\t\t\tarray: [new KJUR.asn1.DERObjectIdentifier({ oid: '1.2.840.113549.1.1.1' }), new KJUR.asn1.DERNull()]\n\t\t})\n\t\tvar second_sequence = new KJUR.asn1.DERSequence({\n\t\t\tarray: [new KJUR.asn1.DERInteger({ bigint: this.n }), new KJUR.asn1.DERInteger({ int: this.e })]\n\t\t})\n\t\tvar bit_string = new KJUR.asn1.DERBitString({\n\t\t\thex: '00' + second_sequence.getEncodedHex()\n\t\t})\n\t\tvar seq = new KJUR.asn1.DERSequence({\n\t\t\tarray: [first_sequence, bit_string]\n\t\t})\n\t\treturn seq.getEncodedHex()\n\t}\n\t/**\n\t * base64 (pem) encoded version of the DER encoded representation\n\t * @returns {string} pem encoded representation without header and footer\n\t * @public\n\t */\n\tJSEncryptRSAKey.prototype.getPublicBaseKeyB64 = function () {\n\t\treturn hex2b64(this.getPublicBaseKey())\n\t}\n\t/**\n\t * wrap the string in block of width chars. The default value for rsa keys is 64\n\t * characters.\n\t * @param {string} str the pem encoded string without header and footer\n\t * @param {Number} [width=64] - the length the string has to be wrapped at\n\t * @returns {string}\n\t * @private\n\t */\n\tJSEncryptRSAKey.wordwrap = function (str, width) {\n\t\twidth = width || 64\n\t\tif (!str) {\n\t\t\treturn str\n\t\t}\n\t\tvar regex = '(.{1,' + width + '})( +|$\\n?)|(.{1,' + width + '})'\n\t\treturn str.match(RegExp(regex, 'g')).join('\\n')\n\t}\n\t/**\n\t * Retrieve the pem encoded private key\n\t * @returns {string} the pem encoded private key with header/footer\n\t * @public\n\t */\n\tJSEncryptRSAKey.prototype.getPrivateKey = function () {\n\t\tvar key = '-----BEGIN RSA PRIVATE KEY-----\\n'\n\t\tkey += JSEncryptRSAKey.wordwrap(this.getPrivateBaseKeyB64()) + '\\n'\n\t\tkey += '-----END RSA PRIVATE KEY-----'\n\t\treturn key\n\t}\n\t/**\n\t * Retrieve the pem encoded public key\n\t * @returns {string} the pem encoded public key with header/footer\n\t * @public\n\t */\n\tJSEncryptRSAKey.prototype.getPublicKey = function () {\n\t\tvar key = '-----BEGIN PUBLIC KEY-----\\n'\n\t\tkey += JSEncryptRSAKey.wordwrap(this.getPublicBaseKeyB64()) + '\\n'\n\t\tkey += '-----END PUBLIC KEY-----'\n\t\treturn key\n\t}\n\t/**\n\t * Check if the object contains the necessary parameters to populate the rsa modulus\n\t * and public exponent parameters.\n\t * @param {Object} [obj={}] - An object that may contain the two public key\n\t * parameters\n\t * @returns {boolean} true if the object contains both the modulus and the public exponent\n\t * properties (n and e)\n\t * @todo check for types of n and e. N should be a parseable bigInt object, E should\n\t * be a parseable integer number\n\t * @private\n\t */\n\tJSEncryptRSAKey.hasPublicKeyProperty = function (obj) {\n\t\tobj = obj || {}\n\t\treturn obj.hasOwnProperty('n') && obj.hasOwnProperty('e')\n\t}\n\t/**\n\t * Check if the object contains ALL the parameters of an RSA key.\n\t * @param {Object} [obj={}] - An object that may contain nine rsa key\n\t * parameters\n\t * @returns {boolean} true if the object contains all the parameters needed\n\t * @todo check for types of the parameters all the parameters but the public exponent\n\t * should be parseable bigint objects, the public exponent should be a parseable integer number\n\t * @private\n\t */\n\tJSEncryptRSAKey.hasPrivateKeyProperty = function (obj) {\n\t\tobj = obj || {}\n\t\treturn obj.hasOwnProperty('n') && obj.hasOwnProperty('e') && obj.hasOwnProperty('d') && obj.hasOwnProperty('p') && obj.hasOwnProperty('q') && obj.hasOwnProperty('dmp1') && obj.hasOwnProperty('dmq1') && obj.hasOwnProperty('coeff')\n\t}\n\t/**\n\t * Parse the properties of obj in the current rsa object. Obj should AT LEAST\n\t * include the modulus and public exponent (n, e) parameters.\n\t * @param {Object} obj - the object containing rsa parameters\n\t * @private\n\t */\n\tJSEncryptRSAKey.prototype.parsePropertiesFrom = function (obj) {\n\t\tthis.n = obj.n\n\t\tthis.e = obj.e\n\t\tif (obj.hasOwnProperty('d')) {\n\t\t\tthis.d = obj.d\n\t\t\tthis.p = obj.p\n\t\t\tthis.q = obj.q\n\t\t\tthis.dmp1 = obj.dmp1\n\t\t\tthis.dmq1 = obj.dmq1\n\t\t\tthis.coeff = obj.coeff\n\t\t}\n\t}\n\treturn JSEncryptRSAKey\n})(RSAKey)\nexport { JSEncryptRSAKey }\n"],"names":["d","b","JSEncryptRSAKey"],"mappings":"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"}