diff --git a/src/message.js b/src/message.js index 4195063f..4fda26e1 100644 --- a/src/message.js +++ b/src/message.js @@ -86,11 +86,13 @@ Message.prototype.getSigningKeyIds = function() { /** * Decrypt the message - * @param {module:key~Key|String} privateKey private key with decrypted secret data, password or session key + * @param {module:key~Key} privateKey private key with decrypted secret data + * @param {String} sessionKey session key as a binary string + * @param {String} password password used to decrypt * @return {Array} new message with decrypted content */ -Message.prototype.decrypt = function(privateKey) { - var keyObj = this.decryptSessionKey(privateKey); +Message.prototype.decrypt = function(privateKey, sessionKey, password) { + var keyObj = this.decryptSessionKey(privateKey, sessionKey, password); if (!keyObj) { // nothing to decrypt return unmodified message return this; @@ -108,18 +110,20 @@ Message.prototype.decrypt = function(privateKey) { /** * Decrypt session key - * @param {module:key~Key|String} privateKey private key with decrypted secret data or password + * @param {module:key~Key} privateKey private key with decrypted secret data + * @param {String} sessionKey session key as a binary string + * @param {String} password password used to decrypt * @return {Object} object with sessionKey, algo */ -Message.prototype.decryptSessionKey = function(privateKey) { +Message.prototype.decryptSessionKey = function(privateKey, sessionKey, password) { var keyPacket; - if (String.prototype.isPrototypeOf(privateKey) || typeof privateKey === 'string') { + if (sessionKey || password) { var symEncryptedSessionKeyPacketlist = this.packets.filterByTag(enums.packet.symEncryptedSessionKey); var symLength = symEncryptedSessionKeyPacketlist.length; for (var i = 0; i < symLength; i++) { keyPacket = symEncryptedSessionKeyPacketlist[i]; try { - keyPacket.decrypt(privateKey); + keyPacket.decrypt(sessionKey || password); break; } catch(err) { @@ -132,7 +136,7 @@ Message.prototype.decryptSessionKey = function(privateKey) { throw new Error('No symmetrically encrypted session key packet found.'); } - } else { + } else if (privateKey) { var encryptionKeyIds = this.getEncryptionKeyIds(); if (!encryptionKeyIds.length) { // nothing to decrypt @@ -150,6 +154,9 @@ Message.prototype.decryptSessionKey = function(privateKey) { break; } } + + } else { + throw new Error('No key or password specified.'); } if (keyPacket) {