commit
38ad1dc914
11
src/key.js
11
src/key.js
|
@ -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;
|
||||||
|
|
|
@ -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;
|
||||||
};
|
};
|
||||||
|
|
|
@ -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',
|
||||||
|
|
|
@ -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) {
|
||||||
|
|
Loading…
Reference in New Issue
Block a user