Merge pull request #238 from openpgpjs/no-passphrase

No passphrase
This commit is contained in:
Tankred Hase 2014-07-01 16:27:43 +02:00
commit 38ad1dc914
4 changed files with 28 additions and 20 deletions

View File

@ -916,16 +916,15 @@ function generate(options) {
if (options.keyType !== enums.publicKey.rsa_encrypt_sign) { if (options.keyType !== enums.publicKey.rsa_encrypt_sign) {
throw new Error('Only RSA Encrypt or Sign supported'); throw new Error('Only RSA Encrypt or Sign supported');
} }
if (!options.passphrase) {
throw new Error('Parameter options.passphrase required');
}
var packetlist = new packet.List(); var packetlist = new packet.List();
var secretKeyPacket = new packet.SecretKey(); var secretKeyPacket = new packet.SecretKey();
secretKeyPacket.algorithm = enums.read(enums.publicKey, options.keyType); secretKeyPacket.algorithm = enums.read(enums.publicKey, options.keyType);
secretKeyPacket.generate(options.numBits); secretKeyPacket.generate(options.numBits);
secretKeyPacket.encrypt(options.passphrase); if (options.passphrase) {
secretKeyPacket.encrypt(options.passphrase);
}
var userIdPacket = new packet.Userid(); var userIdPacket = new packet.Userid();
userIdPacket.read(options.userId); userIdPacket.read(options.userId);
@ -960,7 +959,9 @@ function generate(options) {
var secretSubkeyPacket = new packet.SecretSubkey(); var secretSubkeyPacket = new packet.SecretSubkey();
secretSubkeyPacket.algorithm = enums.read(enums.publicKey, options.keyType); secretSubkeyPacket.algorithm = enums.read(enums.publicKey, options.keyType);
secretSubkeyPacket.generate(options.numBits); secretSubkeyPacket.generate(options.numBits);
secretSubkeyPacket.encrypt(options.passphrase); if (options.passphrase) {
secretSubkeyPacket.encrypt(options.passphrase);
}
dataToSign = {}; dataToSign = {};
dataToSign.key = secretKeyPacket; dataToSign.key = secretKeyPacket;

View File

@ -236,16 +236,18 @@ Message.prototype.verify = function(keys) {
for (var i = 0; i < signatureList.length; i++) { for (var i = 0; i < signatureList.length; i++) {
keyPacket = key.getKeyPacket([signatureList[i].issuerKeyId]); keyPacket = key.getKeyPacket([signatureList[i].issuerKeyId]);
if (keyPacket) { if (keyPacket) {
var verifiedSig = {};
verifiedSig.keyid = signatureList[i].issuerKeyId;
verifiedSig.valid = signatureList[i].verify(keyPacket, literalDataList[0]);
result.push(verifiedSig);
break; break;
} }
} }
if (!keyPacket) { var verifiedSig = {};
throw new Error('No matching signature found for specified keys.'); if (keyPacket) {
verifiedSig.keyid = signatureList[i].issuerKeyId;
verifiedSig.valid = signatureList[i].verify(keyPacket, literalDataList[0]);
} else {
verifiedSig.keyid = key.primaryKey.keyid;
verifiedSig.valid = null;
} }
result.push(verifiedSig);
}); });
return result; return result;
}; };

View File

@ -170,10 +170,18 @@ SecretKey.prototype.write = function () {
/** Encrypt the payload. By default, we use aes256 and iterated, salted string /** Encrypt the payload. By default, we use aes256 and iterated, salted string
* to key specifier * to key specifier. If the key is in a decrypted state (isDecrypted == true)
* and the passphrase is empty or undefined, the key will be set as not encrypted.
* This can be used to remove passphrase protection after calling decrypt().
* @param {String} passphrase * @param {String} passphrase
*/ */
SecretKey.prototype.encrypt = function (passphrase) { SecretKey.prototype.encrypt = function (passphrase) {
if (this.isDecrypted && !passphrase) {
this.encrypted = null;
return;
} else if (!passphrase) {
throw new Error('The key must be decrypted before removing passphrase protection.');
}
var s2k = new type_s2k(), var s2k = new type_s2k(),
symmetric = 'aes256', symmetric = 'aes256',

View File

@ -84,14 +84,11 @@ describe('Basic', function() {
var anotherKey = openpgp.generateKeyPair({numBits: 512, userId: userid, passphrase: passphrase}); var anotherKey = openpgp.generateKeyPair({numBits: 512, userId: userid, passphrase: passphrase});
var anotherPubKey = openpgp.key.readArmored(anotherKey.publicKeyArmored).keys[0]; var anotherPubKey = openpgp.key.readArmored(anotherKey.publicKeyArmored).keys[0];
var decrypted; var decrypted = openpgp.decryptAndVerifyMessage(privKey, [anotherPubKey], msg);
try { expect(decrypted).to.exist;
decrypted = openpgp.decryptAndVerifyMessage(privKey, [anotherPubKey], msg); expect(decrypted.signatures[0].valid).to.be.null;
} catch(e) { expect(decrypted.text).to.equal(message);
expect(e).to.exist; done();
expect(decrypted).to.not.exist;
done();
}
}); });
it('Performance test', function (done) { it('Performance test', function (done) {