Wrap code into promises to globally catch errors
This commit is contained in:
parent
453a9cee07
commit
1e3d6468d6
15
src/key.js
15
src/key.js
|
@ -933,24 +933,21 @@ export function readArmored(armoredText) {
|
|||
*/
|
||||
export function generate(options) {
|
||||
var packetlist, secretKeyPacket, userIdPacket, dataToSign, signaturePacket, secretSubkeyPacket, subkeySignaturePacket;
|
||||
|
||||
return new Promise(resolve => resolve()).then(() => {
|
||||
options.keyType = options.keyType || enums.publicKey.rsa_encrypt_sign;
|
||||
// RSA Encrypt-Only and RSA Sign-Only are deprecated and SHOULD NOT be generated
|
||||
if (options.keyType !== enums.publicKey.rsa_encrypt_sign) {
|
||||
if (options.keyType !== enums.publicKey.rsa_encrypt_sign) { // RSA Encrypt-Only and RSA Sign-Only are deprecated and SHOULD NOT be generated
|
||||
throw new Error('Only RSA Encrypt or Sign supported');
|
||||
}
|
||||
// Key without passphrase is unlocked by definition
|
||||
if (!options.passphrase) {
|
||||
|
||||
if (!options.passphrase) { // Key without passphrase is unlocked by definition
|
||||
options.unlocked = true;
|
||||
}
|
||||
if (String.prototype.isPrototypeOf(options.userIds) || typeof options.userIds === 'string') {
|
||||
options.userIds = [options.userIds];
|
||||
}
|
||||
|
||||
// generate
|
||||
var genSecretKey = generateSecretKey();
|
||||
var genSecretSubkey = generateSecretSubkey();
|
||||
return Promise.all([genSecretKey, genSecretSubkey]).then(wrapKeyObject);
|
||||
return Promise.all([generateSecretKey(), generateSecretSubkey()]).then(wrapKeyObject);
|
||||
});
|
||||
|
||||
function generateSecretKey() {
|
||||
secretKeyPacket = new packet.SecretKey();
|
||||
|
|
|
@ -92,26 +92,29 @@ Message.prototype.getSigningKeyIds = function() {
|
|||
* @return {Message} new message with decrypted content
|
||||
*/
|
||||
Message.prototype.decrypt = function(privateKey, sessionKey, password) {
|
||||
var keyObj = sessionKey || this.decryptSessionKey(privateKey, password);
|
||||
return new Promise(resolve => resolve()).then(() => {
|
||||
const keyObj = sessionKey || this.decryptSessionKey(privateKey, password);
|
||||
if (!keyObj || !util.isUint8Array(keyObj.data) || !util.isString(keyObj.algorithm)) {
|
||||
throw new Error('Invalid session key for decryption.');
|
||||
}
|
||||
|
||||
var symEncryptedPacketlist = this.packets.filterByTag(
|
||||
const symEncryptedPacketlist = this.packets.filterByTag(
|
||||
enums.packet.symmetricallyEncrypted,
|
||||
enums.packet.symEncryptedIntegrityProtected,
|
||||
enums.packet.symEncryptedAEADProtected
|
||||
);
|
||||
|
||||
if (symEncryptedPacketlist.length !== 0) {
|
||||
var symEncryptedPacket = symEncryptedPacketlist[0];
|
||||
if (symEncryptedPacketlist.length === 0) {
|
||||
return;
|
||||
}
|
||||
|
||||
const symEncryptedPacket = symEncryptedPacketlist[0];
|
||||
return symEncryptedPacket.decrypt(keyObj.algorithm, keyObj.data).then(() => {
|
||||
var resultMsg = new Message(symEncryptedPacket.packets);
|
||||
const resultMsg = new Message(symEncryptedPacket.packets);
|
||||
symEncryptedPacket.packets = new packet.List(); // remove packets after decryption
|
||||
return resultMsg;
|
||||
});
|
||||
}
|
||||
return Promise.resolve();
|
||||
});
|
||||
};
|
||||
|
||||
/**
|
||||
|
@ -212,7 +215,8 @@ Message.prototype.getText = function() {
|
|||
* @return {Message} new message with encrypted content
|
||||
*/
|
||||
Message.prototype.encrypt = function(keys, passwords) {
|
||||
var symAlgo;
|
||||
let symAlgo, msg, symEncryptedPacket;
|
||||
return new Promise(resolve => resolve()).then(() => {
|
||||
if (keys) {
|
||||
symAlgo = keyModule.getPreferredSymAlgo(keys);
|
||||
} else if (passwords) {
|
||||
|
@ -221,10 +225,9 @@ Message.prototype.encrypt = function(keys, passwords) {
|
|||
throw new Error('No keys or passwords');
|
||||
}
|
||||
|
||||
var sessionKey = crypto.generateSessionKey(enums.read(enums.symmetric, symAlgo));
|
||||
var msg = encryptSessionKey(sessionKey, enums.read(enums.symmetric, symAlgo), keys, passwords);
|
||||
let sessionKey = crypto.generateSessionKey(enums.read(enums.symmetric, symAlgo));
|
||||
msg = encryptSessionKey(sessionKey, enums.read(enums.symmetric, symAlgo), keys, passwords);
|
||||
|
||||
var symEncryptedPacket;
|
||||
if (config.aead_protect) {
|
||||
symEncryptedPacket = new packet.SymEncryptedAEADProtected();
|
||||
} else if (config.integrity_protect) {
|
||||
|
@ -234,7 +237,9 @@ Message.prototype.encrypt = function(keys, passwords) {
|
|||
}
|
||||
symEncryptedPacket.packets = this.packets;
|
||||
|
||||
return symEncryptedPacket.encrypt(enums.read(enums.symmetric, symAlgo), sessionKey).then(() => {
|
||||
return symEncryptedPacket.encrypt(enums.read(enums.symmetric, symAlgo), sessionKey);
|
||||
|
||||
}).then(() => {
|
||||
msg.packets.push(symEncryptedPacket);
|
||||
symEncryptedPacket.packets = new packet.List(); // remove packets after encryption
|
||||
return msg;
|
||||
|
|
Loading…
Reference in New Issue
Block a user