Cleanup and linting on all *.js
This commit is contained in:
parent
4d325ca65c
commit
00ea3918c5
|
@ -105,14 +105,14 @@ module.exports = function(grunt) {
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
jshint: {
|
jshint: {
|
||||||
src: ['src/**/*.js'],
|
src: ['src/*.js'], // add more over time ... goal should be 100% coverage
|
||||||
build: ['Gruntfile.js', '*.json'],
|
build: ['Gruntfile.js', '*.json'],
|
||||||
options: {
|
options: {
|
||||||
jshintrc: '.jshintrc'
|
jshintrc: '.jshintrc'
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
jscs: {
|
jscs: {
|
||||||
src: ['src/**/*.js'],
|
src: ['src/*.js'], // add more over time ... goal should be 100% coverage
|
||||||
build: ['Gruntfile.js'],
|
build: ['Gruntfile.js'],
|
||||||
options: {
|
options: {
|
||||||
config: ".jscsrc",
|
config: ".jscsrc",
|
||||||
|
@ -246,7 +246,7 @@ module.exports = function(grunt) {
|
||||||
grunt.registerTask('documentation', ['jsdoc']);
|
grunt.registerTask('documentation', ['jsdoc']);
|
||||||
|
|
||||||
// Test/Dev tasks
|
// Test/Dev tasks
|
||||||
grunt.registerTask('test', ['jshint:build', 'jscs:build', 'copy:zlib', 'mochaTest']);
|
grunt.registerTask('test', ['jshint', 'jscs', 'copy:zlib', 'mochaTest']);
|
||||||
grunt.registerTask('coverage', ['copy:zlib', 'mocha_istanbul:coverage']);
|
grunt.registerTask('coverage', ['copy:zlib', 'mocha_istanbul:coverage']);
|
||||||
grunt.registerTask('saucelabs', ['default', 'copy:browsertest', 'connect', 'saucelabs-mocha']);
|
grunt.registerTask('saucelabs', ['default', 'copy:browsertest', 'connect', 'saucelabs-mocha']);
|
||||||
};
|
};
|
||||||
|
|
|
@ -78,7 +78,9 @@ CleartextMessage.prototype.sign = function(privateKeys) {
|
||||||
signaturePacket.hashAlgorithm = config.prefer_hash_algorithm;
|
signaturePacket.hashAlgorithm = config.prefer_hash_algorithm;
|
||||||
var signingKeyPacket = privateKeys[i].getSigningKeyPacket();
|
var signingKeyPacket = privateKeys[i].getSigningKeyPacket();
|
||||||
signaturePacket.publicKeyAlgorithm = signingKeyPacket.algorithm;
|
signaturePacket.publicKeyAlgorithm = signingKeyPacket.algorithm;
|
||||||
if (!signingKeyPacket.isDecrypted) throw new Error('Private key is not decrypted.');
|
if (!signingKeyPacket.isDecrypted) {
|
||||||
|
throw new Error('Private key is not decrypted.');
|
||||||
|
}
|
||||||
signaturePacket.sign(signingKeyPacket, literalDataPacket);
|
signaturePacket.sign(signingKeyPacket, literalDataPacket);
|
||||||
packetlist.push(signaturePacket);
|
packetlist.push(signaturePacket);
|
||||||
}
|
}
|
||||||
|
@ -167,11 +169,11 @@ function readArmored(armoredText) {
|
||||||
*/
|
*/
|
||||||
function verifyHeaders(headers, packetlist) {
|
function verifyHeaders(headers, packetlist) {
|
||||||
var checkHashAlgos = function(hashAlgos) {
|
var checkHashAlgos = function(hashAlgos) {
|
||||||
|
function check(algo) {
|
||||||
|
return packetlist[i].hashAlgorithm === algo;
|
||||||
|
}
|
||||||
for (var i = 0; i < packetlist.length; i++) {
|
for (var i = 0; i < packetlist.length; i++) {
|
||||||
if (packetlist[i].tag === enums.packet.signature &&
|
if (packetlist[i].tag === enums.packet.signature && !hashAlgos.some(check)) {
|
||||||
!hashAlgos.some(function(algo) {
|
|
||||||
return packetlist[i].hashAlgorithm === algo;
|
|
||||||
})) {
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -179,8 +181,8 @@ function verifyHeaders(headers, packetlist) {
|
||||||
};
|
};
|
||||||
var oneHeader = null;
|
var oneHeader = null;
|
||||||
var hashAlgos = [];
|
var hashAlgos = [];
|
||||||
for (var i = 0; i < headers.length; i++) {
|
headers.forEach(function(header) {
|
||||||
oneHeader = headers[i].match(/Hash: (.+)/); // get header value
|
oneHeader = header.match(/Hash: (.+)/); // get header value
|
||||||
if (oneHeader) {
|
if (oneHeader) {
|
||||||
oneHeader = oneHeader[1].replace(/\s/g, ''); // remove whitespace
|
oneHeader = oneHeader[1].replace(/\s/g, ''); // remove whitespace
|
||||||
oneHeader = oneHeader.split(',');
|
oneHeader = oneHeader.split(',');
|
||||||
|
@ -196,7 +198,7 @@ function verifyHeaders(headers, packetlist) {
|
||||||
} else {
|
} else {
|
||||||
throw new Error('Only "Hash" header allowed in cleartext signed message');
|
throw new Error('Only "Hash" header allowed in cleartext signed message');
|
||||||
}
|
}
|
||||||
}
|
});
|
||||||
if (!hashAlgos.length && !checkHashAlgos([enums.hash.md5])) {
|
if (!hashAlgos.length && !checkHashAlgos([enums.hash.md5])) {
|
||||||
throw new Error('If no "Hash" header in cleartext signed message, then only MD5 signatures allowed');
|
throw new Error('If no "Hash" header in cleartext signed message, then only MD5 signatures allowed');
|
||||||
} else if (!checkHashAlgos(hashAlgos)) {
|
} else if (!checkHashAlgos(hashAlgos)) {
|
||||||
|
|
15
src/enums.js
15
src/enums.js
|
@ -301,19 +301,26 @@ module.exports = {
|
||||||
|
|
||||||
/** Asserts validity and converts from string/integer to integer. */
|
/** Asserts validity and converts from string/integer to integer. */
|
||||||
write: function(type, e) {
|
write: function(type, e) {
|
||||||
if (typeof e == 'number') {
|
if (typeof e === 'number') {
|
||||||
e = this.read(type, e);
|
e = this.read(type, e);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (type[e] !== undefined) {
|
if (type[e] !== undefined) {
|
||||||
return type[e];
|
return type[e];
|
||||||
} else throw new Error('Invalid enum value.');
|
} else {
|
||||||
|
throw new Error('Invalid enum value.');
|
||||||
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
/** Converts from an integer to string. */
|
/** Converts from an integer to string. */
|
||||||
read: function(type, e) {
|
read: function(type, e) {
|
||||||
for (var i in type)
|
for (var i in type) {
|
||||||
if (type[i] == e) return i;
|
if (type[i] === parseInt(e)) {
|
||||||
|
return i;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
throw new Error('Invalid enum value.');
|
throw new Error('Invalid enum value.');
|
||||||
}
|
}
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
94
src/key.js
94
src/key.js
|
@ -70,13 +70,17 @@ Key.prototype.packetlist2structure = function(packetlist) {
|
||||||
case enums.packet.userid:
|
case enums.packet.userid:
|
||||||
case enums.packet.userAttribute:
|
case enums.packet.userAttribute:
|
||||||
user = new User(packetlist[i]);
|
user = new User(packetlist[i]);
|
||||||
if (!this.users) this.users = [];
|
if (!this.users) {
|
||||||
|
this.users = [];
|
||||||
|
}
|
||||||
this.users.push(user);
|
this.users.push(user);
|
||||||
break;
|
break;
|
||||||
case enums.packet.publicSubkey:
|
case enums.packet.publicSubkey:
|
||||||
case enums.packet.secretSubkey:
|
case enums.packet.secretSubkey:
|
||||||
user = null;
|
user = null;
|
||||||
if (!this.subKeys) this.subKeys = [];
|
if (!this.subKeys) {
|
||||||
|
this.subKeys = [];
|
||||||
|
}
|
||||||
subKey = new SubKey(packetlist[i]);
|
subKey = new SubKey(packetlist[i]);
|
||||||
this.subKeys.push(subKey);
|
this.subKeys.push(subKey);
|
||||||
break;
|
break;
|
||||||
|
@ -91,24 +95,34 @@ Key.prototype.packetlist2structure = function(packetlist) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
if (packetlist[i].issuerKeyId.equals(primaryKeyId)) {
|
if (packetlist[i].issuerKeyId.equals(primaryKeyId)) {
|
||||||
if (!user.selfCertifications) user.selfCertifications = [];
|
if (!user.selfCertifications) {
|
||||||
|
user.selfCertifications = [];
|
||||||
|
}
|
||||||
user.selfCertifications.push(packetlist[i]);
|
user.selfCertifications.push(packetlist[i]);
|
||||||
} else {
|
} else {
|
||||||
if (!user.otherCertifications) user.otherCertifications = [];
|
if (!user.otherCertifications) {
|
||||||
|
user.otherCertifications = [];
|
||||||
|
}
|
||||||
user.otherCertifications.push(packetlist[i]);
|
user.otherCertifications.push(packetlist[i]);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case enums.signature.cert_revocation:
|
case enums.signature.cert_revocation:
|
||||||
if (user) {
|
if (user) {
|
||||||
if (!user.revocationCertifications) user.revocationCertifications = [];
|
if (!user.revocationCertifications) {
|
||||||
|
user.revocationCertifications = [];
|
||||||
|
}
|
||||||
user.revocationCertifications.push(packetlist[i]);
|
user.revocationCertifications.push(packetlist[i]);
|
||||||
} else {
|
} else {
|
||||||
if (!this.directSignatures) this.directSignatures = [];
|
if (!this.directSignatures) {
|
||||||
|
this.directSignatures = [];
|
||||||
|
}
|
||||||
this.directSignatures.push(packetlist[i]);
|
this.directSignatures.push(packetlist[i]);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case enums.signature.key:
|
case enums.signature.key:
|
||||||
if (!this.directSignatures) this.directSignatures = [];
|
if (!this.directSignatures) {
|
||||||
|
this.directSignatures = [];
|
||||||
|
}
|
||||||
this.directSignatures.push(packetlist[i]);
|
this.directSignatures.push(packetlist[i]);
|
||||||
break;
|
break;
|
||||||
case enums.signature.subkey_binding:
|
case enums.signature.subkey_binding:
|
||||||
|
@ -228,7 +242,7 @@ Key.prototype.getUserIds = function() {
|
||||||
* @return {Boolean}
|
* @return {Boolean}
|
||||||
*/
|
*/
|
||||||
Key.prototype.isPublic = function() {
|
Key.prototype.isPublic = function() {
|
||||||
return this.primaryKey.tag == enums.packet.publicKey;
|
return this.primaryKey.tag === enums.packet.publicKey;
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -236,7 +250,7 @@ Key.prototype.isPublic = function() {
|
||||||
* @return {Boolean}
|
* @return {Boolean}
|
||||||
*/
|
*/
|
||||||
Key.prototype.isPrivate = function() {
|
Key.prototype.isPrivate = function() {
|
||||||
return this.primaryKey.tag == enums.packet.secretKey;
|
return this.primaryKey.tag === enums.packet.secretKey;
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -321,9 +335,9 @@ function isValidEncryptionKeyPacket(keyPacket, signature) {
|
||||||
}
|
}
|
||||||
|
|
||||||
function isValidSigningKeyPacket(keyPacket, signature) {
|
function isValidSigningKeyPacket(keyPacket, signature) {
|
||||||
return (keyPacket.algorithm == enums.read(enums.publicKey, enums.publicKey.dsa) ||
|
return (keyPacket.algorithm === enums.read(enums.publicKey, enums.publicKey.dsa) ||
|
||||||
keyPacket.algorithm == enums.read(enums.publicKey, enums.publicKey.rsa_sign) ||
|
keyPacket.algorithm === enums.read(enums.publicKey, enums.publicKey.rsa_sign) ||
|
||||||
keyPacket.algorithm == enums.read(enums.publicKey, enums.publicKey.rsa_encrypt_sign)) &&
|
keyPacket.algorithm === enums.read(enums.publicKey, enums.publicKey.rsa_encrypt_sign)) &&
|
||||||
(!signature.keyFlags ||
|
(!signature.keyFlags ||
|
||||||
(signature.keyFlags[0] & enums.keyFlags.sign_data) !== 0);
|
(signature.keyFlags[0] & enums.keyFlags.sign_data) !== 0);
|
||||||
}
|
}
|
||||||
|
@ -361,7 +375,9 @@ Key.prototype.decrypt = function(passphrase) {
|
||||||
var keys = this.getAllKeyPackets();
|
var keys = this.getAllKeyPackets();
|
||||||
for (var i = 0; i < keys.length; i++) {
|
for (var i = 0; i < keys.length; i++) {
|
||||||
var success = keys[i].decrypt(passphrase);
|
var success = keys[i].decrypt(passphrase);
|
||||||
if (!success) return false;
|
if (!success) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
throw new Error("Nothing to decrypt in a public key");
|
throw new Error("Nothing to decrypt in a public key");
|
||||||
|
@ -383,7 +399,9 @@ Key.prototype.decryptKeyPacket = function(keyIds, passphrase) {
|
||||||
for (var j = 0; j < keyIds.length; j++) {
|
for (var j = 0; j < keyIds.length; j++) {
|
||||||
if (keyId.equals(keyIds[j])) {
|
if (keyId.equals(keyIds[j])) {
|
||||||
var success = keys[i].decrypt(passphrase);
|
var success = keys[i].decrypt(passphrase);
|
||||||
if (!success) return false;
|
if (!success) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -406,7 +424,7 @@ Key.prototype.verifyPrimaryKey = function() {
|
||||||
return enums.keyStatus.revoked;
|
return enums.keyStatus.revoked;
|
||||||
}
|
}
|
||||||
// check V3 expiration time
|
// check V3 expiration time
|
||||||
if (this.primaryKey.version == 3 && this.primaryKey.expirationTimeV3 !== 0 &&
|
if (this.primaryKey.version === 3 && this.primaryKey.expirationTimeV3 !== 0 &&
|
||||||
Date.now() > (this.primaryKey.created.getTime() + this.primaryKey.expirationTimeV3*24*3600*1000)) {
|
Date.now() > (this.primaryKey.created.getTime() + this.primaryKey.expirationTimeV3*24*3600*1000)) {
|
||||||
return enums.keyStatus.expired;
|
return enums.keyStatus.expired;
|
||||||
}
|
}
|
||||||
|
@ -427,7 +445,7 @@ Key.prototype.verifyPrimaryKey = function() {
|
||||||
return enums.keyStatus.invalid;
|
return enums.keyStatus.invalid;
|
||||||
}
|
}
|
||||||
// check V4 expiration time
|
// check V4 expiration time
|
||||||
if (this.primaryKey.version == 4 && primaryUser.selfCertificate.keyNeverExpires === false &&
|
if (this.primaryKey.version === 4 && primaryUser.selfCertificate.keyNeverExpires === false &&
|
||||||
Date.now() > (this.primaryKey.created.getTime() + primaryUser.selfCertificate.keyExpirationTime*1000)) {
|
Date.now() > (this.primaryKey.created.getTime() + primaryUser.selfCertificate.keyExpirationTime*1000)) {
|
||||||
return enums.keyStatus.expired;
|
return enums.keyStatus.expired;
|
||||||
}
|
}
|
||||||
|
@ -439,10 +457,10 @@ Key.prototype.verifyPrimaryKey = function() {
|
||||||
* @return {Date|null}
|
* @return {Date|null}
|
||||||
*/
|
*/
|
||||||
Key.prototype.getExpirationTime = function() {
|
Key.prototype.getExpirationTime = function() {
|
||||||
if (this.primaryKey.version == 3) {
|
if (this.primaryKey.version === 3) {
|
||||||
return getExpirationTime(this.primaryKey);
|
return getExpirationTime(this.primaryKey);
|
||||||
}
|
}
|
||||||
if (this.primaryKey.version == 4) {
|
if (this.primaryKey.version === 4) {
|
||||||
var primaryUser = this.getPrimaryUser();
|
var primaryUser = this.getPrimaryUser();
|
||||||
if (!primaryUser) {
|
if (!primaryUser) {
|
||||||
return null;
|
return null;
|
||||||
|
@ -454,11 +472,11 @@ Key.prototype.getExpirationTime = function() {
|
||||||
|
|
||||||
function getExpirationTime(keyPacket, selfCertificate) {
|
function getExpirationTime(keyPacket, selfCertificate) {
|
||||||
// check V3 expiration time
|
// check V3 expiration time
|
||||||
if (keyPacket.version == 3 && keyPacket.expirationTimeV3 !== 0) {
|
if (keyPacket.version === 3 && keyPacket.expirationTimeV3 !== 0) {
|
||||||
return new Date(keyPacket.created.getTime() + keyPacket.expirationTimeV3*24*3600*1000);
|
return new Date(keyPacket.created.getTime() + keyPacket.expirationTimeV3*24*3600*1000);
|
||||||
}
|
}
|
||||||
// check V4 expiration time
|
// check V4 expiration time
|
||||||
if (keyPacket.version == 4 && selfCertificate.keyNeverExpires === false) {
|
if (keyPacket.version === 4 && selfCertificate.keyNeverExpires === false) {
|
||||||
return new Date(keyPacket.created.getTime() + selfCertificate.keyExpirationTime*1000);
|
return new Date(keyPacket.created.getTime() + selfCertificate.keyExpirationTime*1000);
|
||||||
}
|
}
|
||||||
return null;
|
return null;
|
||||||
|
@ -495,9 +513,9 @@ Key.prototype.getPrimaryUser = function() {
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
// return first valid
|
// return first valid
|
||||||
for (var i = 0; i < primUser.length; i++) {
|
for (var k = 0; k < primUser.length; k++) {
|
||||||
if (primUser[i].user.isValidSelfCertificate(this.primaryKey, primUser[i].selfCertificate)) {
|
if (primUser[k].user.isValidSelfCertificate(this.primaryKey, primUser[k].selfCertificate)) {
|
||||||
return primUser[i];
|
return primUser[k];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return null;
|
return null;
|
||||||
|
@ -612,8 +630,8 @@ function User(userPacket) {
|
||||||
if (!(this instanceof User)) {
|
if (!(this instanceof User)) {
|
||||||
return new User(userPacket);
|
return new User(userPacket);
|
||||||
}
|
}
|
||||||
this.userId = userPacket.tag == enums.packet.userid ? userPacket : null;
|
this.userId = userPacket.tag === enums.packet.userid ? userPacket : null;
|
||||||
this.userAttribute = userPacket.tag == enums.packet.userAttribute ? userPacket : null;
|
this.userAttribute = userPacket.tag === enums.packet.userAttribute ? userPacket : null;
|
||||||
this.selfCertifications = null;
|
this.selfCertifications = null;
|
||||||
this.otherCertifications = null;
|
this.otherCertifications = null;
|
||||||
this.revocationCertifications = null;
|
this.revocationCertifications = null;
|
||||||
|
@ -642,11 +660,11 @@ User.prototype.isRevoked = function(certificate, primaryKey) {
|
||||||
if (this.revocationCertifications) {
|
if (this.revocationCertifications) {
|
||||||
var that = this;
|
var that = this;
|
||||||
return this.revocationCertifications.some(function(revCert) {
|
return this.revocationCertifications.some(function(revCert) {
|
||||||
return revCert.issuerKeyId.equals(certificate.issuerKeyId) &&
|
return revCert.issuerKeyId.equals(certificate.issuerKeyId) &&
|
||||||
!revCert.isExpired() &&
|
!revCert.isExpired() &&
|
||||||
(revCert.verified ||
|
(revCert.verified ||
|
||||||
revCert.verify(primaryKey, {userid: that.userId || that.userAttribute, key: primaryKey}));
|
revCert.verify(primaryKey, {userid: that.userId || that.userAttribute, key: primaryKey}));
|
||||||
});
|
});
|
||||||
} else {
|
} else {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
@ -773,7 +791,7 @@ SubKey.prototype.toPacketlist = function() {
|
||||||
* @return {Boolean}
|
* @return {Boolean}
|
||||||
*/
|
*/
|
||||||
SubKey.prototype.isValidEncryptionKey = function(primaryKey) {
|
SubKey.prototype.isValidEncryptionKey = function(primaryKey) {
|
||||||
return this.verify(primaryKey) == enums.keyStatus.valid &&
|
return this.verify(primaryKey) === enums.keyStatus.valid &&
|
||||||
isValidEncryptionKeyPacket(this.subKey, this.bindingSignature);
|
isValidEncryptionKeyPacket(this.subKey, this.bindingSignature);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -783,7 +801,7 @@ SubKey.prototype.isValidEncryptionKey = function(primaryKey) {
|
||||||
* @return {Boolean}
|
* @return {Boolean}
|
||||||
*/
|
*/
|
||||||
SubKey.prototype.isValidSigningKey = function(primaryKey) {
|
SubKey.prototype.isValidSigningKey = function(primaryKey) {
|
||||||
return this.verify(primaryKey) == enums.keyStatus.valid &&
|
return this.verify(primaryKey) === enums.keyStatus.valid &&
|
||||||
isValidSigningKeyPacket(this.subKey, this.bindingSignature);
|
isValidSigningKeyPacket(this.subKey, this.bindingSignature);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -800,7 +818,7 @@ SubKey.prototype.verify = function(primaryKey) {
|
||||||
return enums.keyStatus.revoked;
|
return enums.keyStatus.revoked;
|
||||||
}
|
}
|
||||||
// check V3 expiration time
|
// check V3 expiration time
|
||||||
if (this.subKey.version == 3 && this.subKey.expirationTimeV3 !== 0 &&
|
if (this.subKey.version === 3 && this.subKey.expirationTimeV3 !== 0 &&
|
||||||
Date.now() > (this.subKey.created.getTime() + this.subKey.expirationTimeV3*24*3600*1000)) {
|
Date.now() > (this.subKey.created.getTime() + this.subKey.expirationTimeV3*24*3600*1000)) {
|
||||||
return enums.keyStatus.expired;
|
return enums.keyStatus.expired;
|
||||||
}
|
}
|
||||||
|
@ -816,7 +834,7 @@ SubKey.prototype.verify = function(primaryKey) {
|
||||||
return enums.keyStatus.invalid;
|
return enums.keyStatus.invalid;
|
||||||
}
|
}
|
||||||
// check V4 expiration time
|
// check V4 expiration time
|
||||||
if (this.subKey.version == 4 &&
|
if (this.subKey.version === 4 &&
|
||||||
this.bindingSignature.keyNeverExpires === false &&
|
this.bindingSignature.keyNeverExpires === false &&
|
||||||
Date.now() > (this.subKey.created.getTime() + this.bindingSignature.keyExpirationTime*1000)) {
|
Date.now() > (this.subKey.created.getTime() + this.bindingSignature.keyExpirationTime*1000)) {
|
||||||
return enums.keyStatus.expired;
|
return enums.keyStatus.expired;
|
||||||
|
@ -874,7 +892,7 @@ function readArmored(armoredText) {
|
||||||
result.keys = [];
|
result.keys = [];
|
||||||
try {
|
try {
|
||||||
var input = armor.decode(armoredText);
|
var input = armor.decode(armoredText);
|
||||||
if (!(input.type == enums.armor.public_key || input.type == enums.armor.private_key)) {
|
if (!(input.type === enums.armor.public_key || input.type === enums.armor.private_key)) {
|
||||||
throw new Error('Armored text not of type key');
|
throw new Error('Armored text not of type key');
|
||||||
}
|
}
|
||||||
var packetlist = new packet.List();
|
var packetlist = new packet.List();
|
||||||
|
@ -1026,8 +1044,8 @@ function generate(options) {
|
||||||
*/
|
*/
|
||||||
function getPreferredSymAlgo(keys) {
|
function getPreferredSymAlgo(keys) {
|
||||||
var prioMap = {};
|
var prioMap = {};
|
||||||
for (var i = 0; i < keys.length; i++) {
|
keys.forEach(function(key) {
|
||||||
var primaryUser = keys[i].getPrimaryUser();
|
var primaryUser = key.getPrimaryUser();
|
||||||
if (!primaryUser || !primaryUser.selfCertificate.preferredSymmetricAlgorithms) {
|
if (!primaryUser || !primaryUser.selfCertificate.preferredSymmetricAlgorithms) {
|
||||||
return config.encryption_cipher;
|
return config.encryption_cipher;
|
||||||
}
|
}
|
||||||
|
@ -1036,7 +1054,7 @@ function getPreferredSymAlgo(keys) {
|
||||||
entry.prio += 64 >> index;
|
entry.prio += 64 >> index;
|
||||||
entry.count++;
|
entry.count++;
|
||||||
});
|
});
|
||||||
}
|
});
|
||||||
var prefAlgo = {prio: 0, algo: config.encryption_cipher};
|
var prefAlgo = {prio: 0, algo: config.encryption_cipher};
|
||||||
for (var algo in prioMap) {
|
for (var algo in prioMap) {
|
||||||
try {
|
try {
|
||||||
|
|
|
@ -146,11 +146,13 @@ Message.prototype.decryptSessionKey = function(privateKey) {
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
var privateKeyPacket = privateKey.getKeyPacket(encryptionKeyIds);
|
var privateKeyPacket = privateKey.getKeyPacket(encryptionKeyIds);
|
||||||
if (!privateKeyPacket.isDecrypted) throw new Error('Private key is not decrypted.');
|
if (!privateKeyPacket.isDecrypted) {
|
||||||
|
throw new Error('Private key is not decrypted.');
|
||||||
|
}
|
||||||
var pkESKeyPacketlist = this.packets.filterByTag(enums.packet.publicKeyEncryptedSessionKey);
|
var pkESKeyPacketlist = this.packets.filterByTag(enums.packet.publicKeyEncryptedSessionKey);
|
||||||
for (var i = 0; i < pkESKeyPacketlist.length; i++) {
|
for (var j = 0; j < pkESKeyPacketlist.length; j++) {
|
||||||
if (pkESKeyPacketlist[i].publicKeyId.equals(privateKeyPacket.getKeyId())) {
|
if (pkESKeyPacketlist[j].publicKeyId.equals(privateKeyPacket.getKeyId())) {
|
||||||
keyPacket = pkESKeyPacketlist[i];
|
keyPacket = pkESKeyPacketlist[j];
|
||||||
keyPacket.decrypt(privateKeyPacket);
|
keyPacket.decrypt(privateKeyPacket);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -244,10 +246,10 @@ function encryptSessionKey(sessionKey, symAlgo, keys, passwords) {
|
||||||
|
|
||||||
/** Convert to arrays if necessary */
|
/** Convert to arrays if necessary */
|
||||||
if(keys && !Array.prototype.isPrototypeOf(keys)) {
|
if(keys && !Array.prototype.isPrototypeOf(keys)) {
|
||||||
keys = [keys]
|
keys = [keys];
|
||||||
}
|
}
|
||||||
if(passwords && !Array.prototype.isPrototypeOf(passwords)) {
|
if(passwords && !Array.prototype.isPrototypeOf(passwords)) {
|
||||||
passwords = [passwords]
|
passwords = [passwords];
|
||||||
}
|
}
|
||||||
|
|
||||||
var packetlist = new packet.List();
|
var packetlist = new packet.List();
|
||||||
|
@ -278,7 +280,7 @@ function encryptSessionKey(sessionKey, symAlgo, keys, passwords) {
|
||||||
}
|
}
|
||||||
|
|
||||||
return new Message(packetlist);
|
return new Message(packetlist);
|
||||||
};
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Encrypt the message symmetrically using a passphrase.
|
* Encrypt the message symmetrically using a passphrase.
|
||||||
|
@ -344,10 +346,12 @@ Message.prototype.sign = function(privateKeys) {
|
||||||
var packetlist = new packet.List();
|
var packetlist = new packet.List();
|
||||||
|
|
||||||
var literalDataPacket = this.packets.findPacket(enums.packet.literal);
|
var literalDataPacket = this.packets.findPacket(enums.packet.literal);
|
||||||
if (!literalDataPacket) throw new Error('No literal data packet to sign.');
|
if (!literalDataPacket) {
|
||||||
|
throw new Error('No literal data packet to sign.');
|
||||||
|
}
|
||||||
|
|
||||||
var literalFormat = enums.write(enums.literal, literalDataPacket.format);
|
var literalFormat = enums.write(enums.literal, literalDataPacket.format);
|
||||||
var signatureType = literalFormat == enums.literal.binary ?
|
var signatureType = literalFormat === enums.literal.binary ?
|
||||||
enums.signature.binary : enums.signature.text;
|
enums.signature.binary : enums.signature.text;
|
||||||
var i, signingKeyPacket;
|
var i, signingKeyPacket;
|
||||||
for (i = 0; i < privateKeys.length; i++) {
|
for (i = 0; i < privateKeys.length; i++) {
|
||||||
|
@ -374,7 +378,9 @@ Message.prototype.sign = function(privateKeys) {
|
||||||
signaturePacket.signatureType = signatureType;
|
signaturePacket.signatureType = signatureType;
|
||||||
signaturePacket.hashAlgorithm = config.prefer_hash_algorithm;
|
signaturePacket.hashAlgorithm = config.prefer_hash_algorithm;
|
||||||
signaturePacket.publicKeyAlgorithm = signingKeyPacket.algorithm;
|
signaturePacket.publicKeyAlgorithm = signingKeyPacket.algorithm;
|
||||||
if (!signingKeyPacket.isDecrypted) throw new Error('Private key is not decrypted.');
|
if (!signingKeyPacket.isDecrypted) {
|
||||||
|
throw new Error('Private key is not decrypted.');
|
||||||
|
}
|
||||||
signaturePacket.sign(signingKeyPacket, literalDataPacket);
|
signaturePacket.sign(signingKeyPacket, literalDataPacket);
|
||||||
packetlist.push(signaturePacket);
|
packetlist.push(signaturePacket);
|
||||||
}
|
}
|
||||||
|
@ -391,7 +397,9 @@ Message.prototype.verify = function(keys) {
|
||||||
var result = [];
|
var result = [];
|
||||||
var msg = this.unwrapCompressed();
|
var msg = this.unwrapCompressed();
|
||||||
var literalDataList = msg.packets.filterByTag(enums.packet.literal);
|
var literalDataList = msg.packets.filterByTag(enums.packet.literal);
|
||||||
if (literalDataList.length !== 1) throw new Error('Can only verify message with one literal data packet.');
|
if (literalDataList.length !== 1) {
|
||||||
|
throw new Error('Can only verify message with one literal data packet.');
|
||||||
|
}
|
||||||
var signatureList = msg.packets.filterByTag(enums.packet.signature);
|
var signatureList = msg.packets.filterByTag(enums.packet.signature);
|
||||||
for (var i = 0; i < signatureList.length; i++) {
|
for (var i = 0; i < signatureList.length; i++) {
|
||||||
var keyPacket = null;
|
var keyPacket = null;
|
||||||
|
|
|
@ -37,6 +37,7 @@ var armor = require('./encoding/armor.js'),
|
||||||
enums = require('./enums.js'),
|
enums = require('./enums.js'),
|
||||||
message = require('./message.js'),
|
message = require('./message.js'),
|
||||||
cleartext = require('./cleartext.js'),
|
cleartext = require('./cleartext.js'),
|
||||||
|
config = require('./config/config.js'),
|
||||||
key = require('./key.js'),
|
key = require('./key.js'),
|
||||||
util = require('./util'),
|
util = require('./util'),
|
||||||
AsyncProxy = require('./worker/async_proxy.js');
|
AsyncProxy = require('./worker/async_proxy.js');
|
||||||
|
@ -55,7 +56,7 @@ var asyncProxy = null; // instance of the asyncproxy
|
||||||
function initWorker(path, options) {
|
function initWorker(path, options) {
|
||||||
if (options && options.worker || typeof window !== 'undefined' && window.Worker) {
|
if (options && options.worker || typeof window !== 'undefined' && window.Worker) {
|
||||||
options = options || {};
|
options = options || {};
|
||||||
options.config = this.config;
|
options.config = config;
|
||||||
asyncProxy = new AsyncProxy(path, options);
|
asyncProxy = new AsyncProxy(path, options);
|
||||||
return true;
|
return true;
|
||||||
} else {
|
} else {
|
||||||
|
@ -87,14 +88,14 @@ function encryptMessage(keys, data, passwords, params) {
|
||||||
return asyncProxy.encryptMessage(keys, data, passwords, params);
|
return asyncProxy.encryptMessage(keys, data, passwords, params);
|
||||||
}
|
}
|
||||||
|
|
||||||
var filename, binary, packets;
|
var filename, packets;
|
||||||
if(params) {
|
if(params) {
|
||||||
filename = params.filename;
|
filename = params.filename;
|
||||||
packets = params.packets;
|
packets = params.packets;
|
||||||
}
|
}
|
||||||
|
|
||||||
return execute(function() {
|
return execute(function() {
|
||||||
var msg, armored;
|
var msg;
|
||||||
if(data instanceof Uint8Array) {
|
if(data instanceof Uint8Array) {
|
||||||
msg = message.fromBinary(data, filename);
|
msg = message.fromBinary(data, filename);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue
Block a user