You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							192 lines
						
					
					
						
							7.3 KiB
						
					
					
				
			
		
		
		
			
			
			
				
					
				
				
					
				
			
		
		
	
	
							192 lines
						
					
					
						
							7.3 KiB
						
					
					
				
								var _a;
							 | 
						|
								import { b64tohex, hex2b64 } from "./lib/jsbn/base64";
							 | 
						|
								import { JSEncryptRSAKey } from "./JSEncryptRSAKey";
							 | 
						|
								var version = typeof process !== 'undefined'
							 | 
						|
								    ? (_a = process.env) === null || _a === void 0 ? void 0 : _a.npm_package_version
							 | 
						|
								    : undefined;
							 | 
						|
								/**
							 | 
						|
								 *
							 | 
						|
								 * @param {Object} [options = {}] - An object to customize JSEncrypt behaviour
							 | 
						|
								 * possible parameters are:
							 | 
						|
								 * - default_key_size        {number}  default: 1024 the key size in bit
							 | 
						|
								 * - default_public_exponent {string}  default: '010001' the hexadecimal representation of the public exponent
							 | 
						|
								 * - log                     {boolean} default: false whether log warn/error or not
							 | 
						|
								 * @constructor
							 | 
						|
								 */
							 | 
						|
								var JSEncrypt = /** @class */ (function () {
							 | 
						|
								    function JSEncrypt(options) {
							 | 
						|
								        if (options === void 0) { options = {}; }
							 | 
						|
								        options = options || {};
							 | 
						|
								        this.default_key_size = options.default_key_size
							 | 
						|
								            ? parseInt(options.default_key_size, 10)
							 | 
						|
								            : 1024;
							 | 
						|
								        this.default_public_exponent = options.default_public_exponent || "010001"; // 65537 default openssl public exponent for rsa key type
							 | 
						|
								        this.log = options.log || false;
							 | 
						|
								        // The private and public key.
							 | 
						|
								        this.key = null;
							 | 
						|
								    }
							 | 
						|
								    /**
							 | 
						|
								     * Method to set the rsa key parameter (one method is enough to set both the public
							 | 
						|
								     * and the private key, since the private key contains the public key paramenters)
							 | 
						|
								     * Log a warning if logs are enabled
							 | 
						|
								     * @param {Object|string} key the pem encoded string or an object (with or without header/footer)
							 | 
						|
								     * @public
							 | 
						|
								     */
							 | 
						|
								    JSEncrypt.prototype.setKey = function (key) {
							 | 
						|
								        if (this.log && this.key) {
							 | 
						|
								            console.warn("A key was already set, overriding existing.");
							 | 
						|
								        }
							 | 
						|
								        this.key = new JSEncryptRSAKey(key);
							 | 
						|
								    };
							 | 
						|
								    /**
							 | 
						|
								     * Proxy method for setKey, for api compatibility
							 | 
						|
								     * @see setKey
							 | 
						|
								     * @public
							 | 
						|
								     */
							 | 
						|
								    JSEncrypt.prototype.setPrivateKey = function (privkey) {
							 | 
						|
								        // Create the key.
							 | 
						|
								        this.setKey(privkey);
							 | 
						|
								    };
							 | 
						|
								    /**
							 | 
						|
								     * Proxy method for setKey, for api compatibility
							 | 
						|
								     * @see setKey
							 | 
						|
								     * @public
							 | 
						|
								     */
							 | 
						|
								    JSEncrypt.prototype.setPublicKey = function (pubkey) {
							 | 
						|
								        // Sets the public key.
							 | 
						|
								        this.setKey(pubkey);
							 | 
						|
								    };
							 | 
						|
								    /**
							 | 
						|
								     * Proxy method for RSAKey object's decrypt, decrypt the string using the private
							 | 
						|
								     * components of the rsa key object. Note that if the object was not set will be created
							 | 
						|
								     * on the fly (by the getKey method) using the parameters passed in the JSEncrypt constructor
							 | 
						|
								     * @param {string} str base64 encoded crypted string to decrypt
							 | 
						|
								     * @return {string} the decrypted string
							 | 
						|
								     * @public
							 | 
						|
								     */
							 | 
						|
								    JSEncrypt.prototype.decrypt = function (str) {
							 | 
						|
								        // Return the decrypted string.
							 | 
						|
								        try {
							 | 
						|
								            return this.getKey().decrypt(b64tohex(str));
							 | 
						|
								        }
							 | 
						|
								        catch (ex) {
							 | 
						|
								            return false;
							 | 
						|
								        }
							 | 
						|
								    };
							 | 
						|
								    /**
							 | 
						|
								     * Proxy method for RSAKey object's encrypt, encrypt the string using the public
							 | 
						|
								     * components of the rsa key object. Note that if the object was not set will be created
							 | 
						|
								     * on the fly (by the getKey method) using the parameters passed in the JSEncrypt constructor
							 | 
						|
								     * @param {string} str the string to encrypt
							 | 
						|
								     * @return {string} the encrypted string encoded in base64
							 | 
						|
								     * @public
							 | 
						|
								     */
							 | 
						|
								    JSEncrypt.prototype.encrypt = function (str) {
							 | 
						|
								        // Return the encrypted string.
							 | 
						|
								        try {
							 | 
						|
								            return hex2b64(this.getKey().encrypt(str));
							 | 
						|
								        }
							 | 
						|
								        catch (ex) {
							 | 
						|
								            return false;
							 | 
						|
								        }
							 | 
						|
								    };
							 | 
						|
								    /**
							 | 
						|
								     * Proxy method for RSAKey object's sign.
							 | 
						|
								     * @param {string} str the string to sign
							 | 
						|
								     * @param {function} digestMethod hash method
							 | 
						|
								     * @param {string} digestName the name of the hash algorithm
							 | 
						|
								     * @return {string} the signature encoded in base64
							 | 
						|
								     * @public
							 | 
						|
								     */
							 | 
						|
								    JSEncrypt.prototype.sign = function (str, digestMethod, digestName) {
							 | 
						|
								        // return the RSA signature of 'str' in 'hex' format.
							 | 
						|
								        try {
							 | 
						|
								            return hex2b64(this.getKey().sign(str, digestMethod, digestName));
							 | 
						|
								        }
							 | 
						|
								        catch (ex) {
							 | 
						|
								            return false;
							 | 
						|
								        }
							 | 
						|
								    };
							 | 
						|
								    /**
							 | 
						|
								     * Proxy method for RSAKey object's verify.
							 | 
						|
								     * @param {string} str the string to verify
							 | 
						|
								     * @param {string} signature the signature encoded in base64 to compare the string to
							 | 
						|
								     * @param {function} digestMethod hash method
							 | 
						|
								     * @return {boolean} whether the data and signature match
							 | 
						|
								     * @public
							 | 
						|
								     */
							 | 
						|
								    JSEncrypt.prototype.verify = function (str, signature, digestMethod) {
							 | 
						|
								        // Return the decrypted 'digest' of the signature.
							 | 
						|
								        try {
							 | 
						|
								            return this.getKey().verify(str, b64tohex(signature), digestMethod);
							 | 
						|
								        }
							 | 
						|
								        catch (ex) {
							 | 
						|
								            return false;
							 | 
						|
								        }
							 | 
						|
								    };
							 | 
						|
								    /**
							 | 
						|
								     * Getter for the current JSEncryptRSAKey object. If it doesn't exists a new object
							 | 
						|
								     * will be created and returned
							 | 
						|
								     * @param {callback} [cb] the callback to be called if we want the key to be generated
							 | 
						|
								     * in an async fashion
							 | 
						|
								     * @returns {JSEncryptRSAKey} the JSEncryptRSAKey object
							 | 
						|
								     * @public
							 | 
						|
								     */
							 | 
						|
								    JSEncrypt.prototype.getKey = function (cb) {
							 | 
						|
								        // Only create new if it does not exist.
							 | 
						|
								        if (!this.key) {
							 | 
						|
								            // Get a new private key.
							 | 
						|
								            this.key = new JSEncryptRSAKey();
							 | 
						|
								            if (cb && {}.toString.call(cb) === "[object Function]") {
							 | 
						|
								                this.key.generateAsync(this.default_key_size, this.default_public_exponent, cb);
							 | 
						|
								                return;
							 | 
						|
								            }
							 | 
						|
								            // Generate the key.
							 | 
						|
								            this.key.generate(this.default_key_size, this.default_public_exponent);
							 | 
						|
								        }
							 | 
						|
								        return this.key;
							 | 
						|
								    };
							 | 
						|
								    /**
							 | 
						|
								     * Returns the pem encoded representation of the private key
							 | 
						|
								     * If the key doesn't exists a new key will be created
							 | 
						|
								     * @returns {string} pem encoded representation of the private key WITH header and footer
							 | 
						|
								     * @public
							 | 
						|
								     */
							 | 
						|
								    JSEncrypt.prototype.getPrivateKey = function () {
							 | 
						|
								        // Return the private representation of this key.
							 | 
						|
								        return this.getKey().getPrivateKey();
							 | 
						|
								    };
							 | 
						|
								    /**
							 | 
						|
								     * Returns the pem encoded representation of the private key
							 | 
						|
								     * If the key doesn't exists a new key will be created
							 | 
						|
								     * @returns {string} pem encoded representation of the private key WITHOUT header and footer
							 | 
						|
								     * @public
							 | 
						|
								     */
							 | 
						|
								    JSEncrypt.prototype.getPrivateKeyB64 = function () {
							 | 
						|
								        // Return the private representation of this key.
							 | 
						|
								        return this.getKey().getPrivateBaseKeyB64();
							 | 
						|
								    };
							 | 
						|
								    /**
							 | 
						|
								     * Returns the pem encoded representation of the public key
							 | 
						|
								     * If the key doesn't exists a new key will be created
							 | 
						|
								     * @returns {string} pem encoded representation of the public key WITH header and footer
							 | 
						|
								     * @public
							 | 
						|
								     */
							 | 
						|
								    JSEncrypt.prototype.getPublicKey = function () {
							 | 
						|
								        // Return the private representation of this key.
							 | 
						|
								        return this.getKey().getPublicKey();
							 | 
						|
								    };
							 | 
						|
								    /**
							 | 
						|
								     * Returns the pem encoded representation of the public key
							 | 
						|
								     * If the key doesn't exists a new key will be created
							 | 
						|
								     * @returns {string} pem encoded representation of the public key WITHOUT header and footer
							 | 
						|
								     * @public
							 | 
						|
								     */
							 | 
						|
								    JSEncrypt.prototype.getPublicKeyB64 = function () {
							 | 
						|
								        // Return the private representation of this key.
							 | 
						|
								        return this.getKey().getPublicBaseKeyB64();
							 | 
						|
								    };
							 | 
						|
								    JSEncrypt.version = version;
							 | 
						|
								    return JSEncrypt;
							 | 
						|
								}());
							 | 
						|
								export { JSEncrypt };
							 | 
						|
								
							 |