193 lines
7.3 KiB
JavaScript
193 lines
7.3 KiB
JavaScript
|
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 };
|