diff --git a/src/packet/secret_key.js b/src/packet/secret_key.js index 737b2a82..ddddae5f 100644 --- a/src/packet/secret_key.js +++ b/src/packet/secret_key.js @@ -568,6 +568,12 @@ class SecretKeyPacket extends PublicKeyPacket { * @returns encryption key */ async function produceEncryptionKey(keyVersion, s2k, passphrase, cipherAlgo, aeadMode, serializedPacketTag, isLegacyAEAD) { + if (s2k.type === 'argon2' && !aeadMode) { + throw new Error('Using Argon2 S2K without AEAD is not allowed'); + } + if (s2k.type === 'simple' && keyVersion === 6) { + throw new Error('Using Simple S2K with version 6 keys is not allowed'); + } const { keySize } = crypto.getCipherParams(cipherAlgo); const derivedKey = await s2k.produceKey(passphrase, keySize); if (!aeadMode || keyVersion === 5 || isLegacyAEAD) { diff --git a/test/general/openpgp.js b/test/general/openpgp.js index d6d1df92..e6f5bbca 100644 --- a/test/general/openpgp.js +++ b/test/general/openpgp.js @@ -1416,7 +1416,10 @@ VFBLG8uc9IiaKann/DYBAJcZNZHRSfpDoV2pUA5EAEi2MdjxkRysFQnYPRAu const locked = await openpgp.encryptKey({ privateKey: key, passphrase: passphrase, - config: { s2kType: openpgp.enums.s2k.argon2 } + config: { + s2kType: openpgp.enums.s2k.argon2, + aeadProtect: true + } }); expect(key.isDecrypted()).to.be.true; expect(locked.isDecrypted()).to.be.false;