diff --git a/src/cleartext.js b/src/cleartext.js index d84da8d5..712ce83b 100644 --- a/src/cleartext.js +++ b/src/cleartext.js @@ -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 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; }