refactor cleartext message to use signature object instead of packetlist

This commit is contained in:
Sanjana Rajan 2017-03-06 13:20:58 -08:00
parent 4ed7f25836
commit 4fd4c13ddd

View File

@ -29,23 +29,26 @@ import config from './config';
import packet from './packet';
import enums from './enums.js';
import armor from './encoding/armor.js';
import * as sigModule from './signature.js';
/**
* @class
* @classdesc Class that represents an OpenPGP cleartext signed message.
* See {@link http://tools.ietf.org/html/rfc4880#section-7}
* @param {String} text The cleartext of the signed message
* @param {module:packet/packetlist} packetlist The packetlist with signature packets or undefined
* if message not yet signed
* @param {module:Signature} signature The detached signature or an empty signature if message not yet signed
*/
export function CleartextMessage(text, packetlist) {
export function CleartextMessage(text, signature) {
if (!(this instanceof CleartextMessage)) {
return new CleartextMessage(text, packetlist);
return new CleartextMessage(text, signature);
}
// normalize EOL to canonical form <CR><LF>
this.text = text.replace(/\r/g, '').replace(/[\t ]+\n/g, "\n").replace(/\n/g,"\r\n");
this.packets = packetlist || new packet.List();
if (signature && !(signature instanceof sigModule.Signature)) {
throw new Error('Invalid signature input');
}
this.signature = signature || new sigModule.Signature([]);
}
/**
@ -54,7 +57,7 @@ export function CleartextMessage(text, packetlist) {
*/
CleartextMessage.prototype.getSigningKeyIds = function() {
var keyIds = [];
var signatureList = this.packets.filterByTag(enums.packet.signature);
var signatureList = this.signature.packets;
signatureList.forEach(function(packet) {
keyIds.push(packet.issuerKeyId);
});
@ -84,7 +87,7 @@ CleartextMessage.prototype.sign = function(privateKeys) {
signaturePacket.sign(signingKeyPacket, literalDataPacket);
packetlist.push(signaturePacket);
}
this.packets = packetlist;
this.signature = new sigModule.Signature(packetlist);
};
/**
@ -94,7 +97,7 @@ CleartextMessage.prototype.sign = function(privateKeys) {
*/
CleartextMessage.prototype.verify = function(keys) {
var result = [];
var signatureList = this.packets.filterByTag(enums.packet.signature);
var signatureList = this.signature.packets;
var literalDataPacket = new packet.Literal();
// we assume that cleartext signature is generated based on UTF8 cleartext
literalDataPacket.setText(this.text);
@ -137,7 +140,7 @@ CleartextMessage.prototype.armor = function() {
var body = {
hash: enums.read(enums.hash, config.prefer_hash_algorithm).toUpperCase(),
text: this.text,
data: this.packets.write()
data: this.signature.packets.write()
};
return armor.encode(enums.armor.signed, body);
};
@ -157,7 +160,8 @@ export function readArmored(armoredText) {
var packetlist = new packet.List();
packetlist.read(input.data);
verifyHeaders(input.headers, packetlist);
var newMessage = new CleartextMessage(input.text, packetlist);
var signature = new sigModule.Signature(packetlist);
var newMessage = new CleartextMessage(input.text, signature);
return newMessage;
}