Merge pull request #446 from openpgpjs/issue/443

Implement feature #443
This commit is contained in:
Thomas Oberndörfer 2016-05-03 10:01:48 +02:00
commit 9c76df73ff
2 changed files with 39 additions and 0 deletions

View File

@ -365,6 +365,22 @@ Key.prototype.getEncryptionKeyPacket = function() {
return null; return null;
}; };
/**
* Encrypts all secret key and subkey packets
* @param {String} passphrase
*/
Key.prototype.encrypt = function(passphrase) {
if (!this.isPrivate()) {
throw new Error("Nothing to encrypt in a public key");
}
var keys = this.getAllKeyPackets();
for (var i = 0; i < keys.length; i++) {
keys[i].encrypt(passphrase);
keys[i].clearPrivateMPIs();
}
};
/** /**
* Decrypts all secret key and subkey packets * Decrypts all secret key and subkey packets
* @param {String} passphrase * @param {String} passphrase

View File

@ -706,5 +706,28 @@ var pgp_desktop_priv =
}).catch(done); }).catch(done);
}); });
it('Encrypt key with new passphrase', function(done) {
var userId = 'test <a@b.com>';
var opt = {numBits: 512, userIds: userId, passphrase: 'passphrase'};
if (openpgp.util.getWebCryptoAll()) { opt.numBits = 2048; } // webkit webcrypto accepts minimum 2048 bit keys
openpgp.generateKey(opt).then(function(key) {
key = key.key;
var armor1 = key.armor();
var armor2 = key.armor();
expect(armor1).to.equal(armor2);
expect(key.decrypt('passphrase')).to.be.true;
expect(key.primaryKey.isDecrypted).to.be.true;
key.encrypt('new_passphrase');
expect(key.primaryKey.isDecrypted).to.be.false;
expect(key.decrypt('passphrase')).to.be.false;
expect(key.primaryKey.isDecrypted).to.be.false;
expect(key.decrypt('new_passphrase')).to.be.true;
expect(key.primaryKey.isDecrypted).to.be.true;
var armor3 = key.armor();
expect(armor3).to.not.equal(armor1);
done();
}).catch(done);
});
}); });