From 278a61adaba8b8245b308be4cf021da4969bb8bf Mon Sep 17 00:00:00 2001 From: larabr <7375870+larabr@users.noreply.github.com> Date: Mon, 28 Aug 2023 15:31:00 +0200 Subject: [PATCH] Add SEIP.fromObject To avoid defaulting to v1 --- src/message.js | 10 ++++------ .../sym_encrypted_integrity_protected_data.js | 16 +++++++++++++++- test/general/packet.js | 2 ++ 3 files changed, 21 insertions(+), 7 deletions(-) diff --git a/src/message.js b/src/message.js index 7afb2fd9..8e5c725f 100644 --- a/src/message.js +++ b/src/message.js @@ -397,12 +397,10 @@ export class Message { const msg = await Message.encryptSessionKey(sessionKeyData, algorithmName, aeadAlgorithmName, encryptionKeys, passwords, wildcard, encryptionKeyIDs, date, userIDs, config); - const symEncryptedPacket = new SymEncryptedIntegrityProtectedDataPacket(); - if (aeadAlgorithmName) { - symEncryptedPacket.version = 2; - symEncryptedPacket.aeadAlgorithm = enums.write(enums.aead, aeadAlgorithmName); - } - + const symEncryptedPacket = SymEncryptedIntegrityProtectedDataPacket.fromObject({ + version: aeadAlgorithmName ? 2 : 1, + aeadAlgorithm: aeadAlgorithmName ? enums.write(enums.aead, aeadAlgorithmName) : null + }); symEncryptedPacket.packets = this.packets; const algorithm = enums.write(enums.symmetric, algorithmName); diff --git a/src/packet/sym_encrypted_integrity_protected_data.js b/src/packet/sym_encrypted_integrity_protected_data.js index 8aedf18d..f7c70646 100644 --- a/src/packet/sym_encrypted_integrity_protected_data.js +++ b/src/packet/sym_encrypted_integrity_protected_data.js @@ -52,8 +52,22 @@ class SymEncryptedIntegrityProtectedDataPacket { return enums.packet.symEncryptedIntegrityProtectedData; } + static fromObject({ version, aeadAlgorithm }) { + if (version !== 1 && version !== 2) { + throw new Error('Unsupported SEIPD version'); + } + + const seip = new SymEncryptedIntegrityProtectedDataPacket(); + seip.version = version; + if (version === 2) { + seip.aeadAlgorithm = aeadAlgorithm; + } + + return seip; + } + constructor() { - this.version = 1; + this.version = null; // The following 4 fields are for V2 only. /** @type {enums.symmetric} */ diff --git a/test/general/packet.js b/test/general/packet.js index 696d2846..f3a4e9b7 100644 --- a/test/general/packet.js +++ b/test/general/packet.js @@ -137,6 +137,7 @@ export default () => describe('Packet', function() { const literal = new openpgp.LiteralDataPacket(); const enc = new openpgp.SymEncryptedIntegrityProtectedDataPacket(); + enc.version = 1; enc.packets = new openpgp.PacketList(); enc.packets.push(literal); const msg = new openpgp.PacketList(); @@ -616,6 +617,7 @@ export default () => describe('Packet', function() { literal.setText(testText); const skesk = new openpgp.SymEncryptedSessionKeyPacket(); const seip = new openpgp.SymEncryptedIntegrityProtectedDataPacket(); + seip.version = 1; seip.packets = new openpgp.PacketList(); seip.packets.push(literal); const msg = new openpgp.PacketList();