diff --git a/src/crypto/signature.js b/src/crypto/signature.js index da7a8df4..133b58b8 100644 --- a/src/crypto/signature.js +++ b/src/crypto/signature.js @@ -1,6 +1,7 @@ /** * @fileoverview Provides functions for asymmetric signing and signature verification * @requires bn.js + * @requires crypto/crypto * @requires crypto/public_key * @requires crypto/pkcs1 * @requires enums @@ -9,6 +10,7 @@ */ import BN from 'bn.js'; +import crypto from './crypto'; import publicKey from './public_key'; import pkcs1 from './pkcs1'; import enums from '../enums'; @@ -30,6 +32,10 @@ export default { * @async */ verify: async function(algo, hash_algo, msg_MPIs, pub_MPIs, data, hashed) { + const types = crypto.getPubKeyParamTypes(algo); + if (pub_MPIs.length < types.length) { + throw new Error('Missing public key parameters'); + } switch (algo) { case enums.publicKey.rsa_encrypt_sign: case enums.publicKey.rsa_encrypt: @@ -83,6 +89,10 @@ export default { * @async */ sign: async function(algo, hash_algo, key_params, data, hashed) { + const types = [].concat(crypto.getPubKeyParamTypes(algo), crypto.getPrivKeyParamTypes(algo)); + if (key_params.length < types.length) { + throw new Error('Missing private key parameters'); + } switch (algo) { case enums.publicKey.rsa_encrypt_sign: case enums.publicKey.rsa_encrypt: diff --git a/test/general/signature.js b/test/general/signature.js index 85cfa501..dd9df9c6 100644 --- a/test/general/signature.js +++ b/test/general/signature.js @@ -494,6 +494,8 @@ describe("Signature", function() { expect(msg.signatures).to.have.length(1); expect(msg.signatures[0].valid).to.be.true; expect(msg.signatures[0].signature.packets.length).to.equal(1); + await expect(openpgp.sign({ message: openpgp.message.fromText('test'), privateKeys: [priv_key_gnupg_ext] })).to.eventually.be.rejectedWith('Missing private key parameters'); + await expect(openpgp.reformatKey({ userIds: { name: 'test' }, privateKey: priv_key_gnupg_ext })).to.eventually.be.rejectedWith('Missing private key parameters'); await priv_key_gnupg_ext.encrypt("abcd"); expect(priv_key_gnupg_ext.isDecrypted()).to.be.false; const primaryKey_packet2 = priv_key_gnupg_ext.primaryKey.write();