diff --git a/src/keyring/localstore.js b/src/keyring/localstore.js index 3a34a250..9fcc98e1 100644 --- a/src/keyring/localstore.js +++ b/src/keyring/localstore.js @@ -97,8 +97,12 @@ LocalStore.prototype.storePrivate = function (keys) { function storeKeys(storage, itemname, keys) { var armoredKeys = []; - for (var i = 0; i < keys.length; i++) { - armoredKeys.push(keys[i].armor()); + if (keys.length) { + for (var i = 0; i < keys.length; i++) { + armoredKeys.push(keys[i].armor()); + } + storage.setItem(itemname, JSON.stringify(armoredKeys)); + } else { + storage.removeItem(itemname); } - storage.setItem(itemname, JSON.stringify(armoredKeys)); } diff --git a/test/general/keyring.js b/test/general/keyring.js index b4e03241..38826a92 100644 --- a/test/general/keyring.js +++ b/test/general/keyring.js @@ -248,6 +248,21 @@ describe("Keyring", function() { expect(localstore3.loadPublic()).to.have.length(0); }); + it('emptying keyring and storing removes keys', function() { + var key = openpgp.key.readArmored(pubkey).keys[0]; + + var localstore = new openpgp.Keyring.localstore('remove-prefix-'); + + localstore.storePublic([]); + expect(localstore.storage.getItem('remove-prefix-public-keys')).to.be.null; + + localstore.storePublic([key]); + expect(localstore.storage.getItem('remove-prefix-public-keys')).to.be.not.null; + + localstore.storePublic([]); + expect(localstore.storage.getItem('remove-prefix-public-keys')).to.be.null; + }) + it('removeKeysForId() - unknown id', function() { keyring.publicKeys.importKey(pubkey); keyring.publicKeys.importKey(pubkey2);