Fix multisig PubKey VerifyMultisignature (#7377)

* Fix VerifyMultisignature method

* Remove unrelevant test

* Remove empty line

* Fix verify test

Co-authored-by: Robert Zaremba <robert@zaremba.ch>
Co-authored-by: Aleksandr Bezobchuk <alexanderbez@users.noreply.github.com>
Co-authored-by: mergify[bot] <37929162+mergify[bot]@users.noreply.github.com>
This commit is contained in:
Marie Gauthier 2020-09-24 17:40:38 +02:00 committed by GitHub
parent 7ea6b2c5e6
commit fb0f6d6167
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 18 additions and 39 deletions

View File

@ -72,7 +72,7 @@ func (m *LegacyAminoPubKey) VerifyMultisignature(getSignBytes multisigtypes.GetS
return err
}
if !pubKeys[i].VerifySignature(msg, si.Signature) {
return err
return fmt.Errorf("unable to verify signature at index %d", i)
}
case *signing.MultiSignatureData:
nestedMultisigPk, ok := pubKeys[i].(multisigtypes.PubKey)

View File

@ -160,42 +160,6 @@ func TestVerifyMultisignature(t *testing.T) {
pk.VerifyMultisignature(signBytesFn, sig),
"multisig failed after k good signatures",
)
for i := k + 1; i < len(signingIndices); i++ {
signingIndex := signingIndices[i]
require.NoError(
t,
multisig.AddSignatureFromPubKey(
sig,
sigs[signingIndex],
pubKeys[signingIndex],
pubKeys,
),
)
require.Equal(
t,
false,
pk.VerifyMultisignature(func(mode signing.SignMode) ([]byte, error) {
return msg, nil
}, sig),
"multisig didn't verify as expected after k sigs, i %d", i,
)
require.NoError(
t,
multisig.AddSignatureFromPubKey(
sig,
sigs[signingIndex],
pubKeys[signingIndex],
pubKeys),
)
require.Equal(
t,
i+1,
len(sig.Signatures),
"adding a signature for the same pubkey twice increased signature count by 2",
)
}
},
true,
},
@ -213,6 +177,18 @@ func TestVerifyMultisignature(t *testing.T) {
},
false,
},
{
"unable to verify signature",
func() {
pubKeys, _ := generatePubKeysAndSignatures(2, msg)
_, sigs := generatePubKeysAndSignatures(2, msg)
pk = kmultisig.NewLegacyAminoPubKey(2, pubKeys)
sig = multisig.NewMultisig(2)
multisig.AddSignatureFromPubKey(sig, sigs[0], pubKeys[0], pubKeys)
multisig.AddSignatureFromPubKey(sig, sigs[1], pubKeys[1], pubKeys)
},
false,
},
}
for _, tc := range testCases {
@ -259,10 +235,10 @@ func TestMultiSigMigration(t *testing.T) {
cdc := codec.NewLegacyAmino()
err := multisig.AddSignatureFromPubKey(multisignature, sigs[0], pkSet[0], pkSet)
require.NoError(t, multisig.AddSignatureFromPubKey(multisignature, sigs[0], pkSet[0], pkSet))
// create a StdSignature for msg, and convert it to sigV2
sig := legacytx.StdSignature{PubKey: pkSet[1], Signature: msg}
sig := legacytx.StdSignature{PubKey: pkSet[1], Signature: sigs[1].(*signing.SingleSignatureData).Signature}
sigV2, err := legacytx.StdSignatureToSignatureV2(cdc, sig)
require.NoError(t, multisig.AddSignatureV2(multisignature, sigV2, pkSet))

View File

@ -88,6 +88,9 @@ func TestVerifySignature(t *testing.T) {
err = multisig.AddSignatureFromPubKey(multisignature, sig2V2.Data, pkSet[1], pkSet)
require.NoError(t, err)
stdTx = legacytx.NewStdTx(msgs, fee, []legacytx.StdSignature{stdSig1, stdSig2}, memo)
stdTx.TimeoutHeight = 10
err = signing.VerifySignature(multisigKey, signerData, multisignature, handler, stdTx)
require.NoError(t, err)
}