(squash this) squashed bug with multiple signatures at same index.
This commit is contained in:
parent
67b6d51ff4
commit
4e7bf10b59
|
@ -34,7 +34,7 @@ func (pk *ThresholdMultiSignaturePubKey) VerifyBytes(msg []byte, marshalledSig [
|
|||
return false
|
||||
}
|
||||
size := sig.BitArray.Size()
|
||||
if len(sig.Sigs) < int(pk.K) || len(pk.Pubkeys) != size {
|
||||
if len(sig.Sigs) < int(pk.K) || len(pk.Pubkeys) != size || sig.BitArray.NumOfTrueBitsBefore(size) < int(pk.K) {
|
||||
return false
|
||||
}
|
||||
// index in the list of signatures which we are concerned with.
|
||||
|
|
|
@ -19,9 +19,9 @@ func TestThresholdMultisig(t *testing.T) {
|
|||
require.False(t, multisigKey.VerifyBytes(msg, multisignature.Marshal()))
|
||||
multisignature.AddSignatureFromPubkey(sigs[0], pubkeys[0], pubkeys)
|
||||
require.False(t, multisigKey.VerifyBytes(msg, multisignature.Marshal()))
|
||||
// Make sure adding the same signature twice doesn't make the signature pass
|
||||
// Make sure adding the same signature twice doesn't increase number of signatures
|
||||
multisignature.AddSignatureFromPubkey(sigs[0], pubkeys[0], pubkeys)
|
||||
require.False(t, multisigKey.VerifyBytes(msg, multisignature.Marshal()))
|
||||
require.Equal(t, 1, len(multisignature.Sigs))
|
||||
|
||||
// Adding two signatures should make it pass, as k = 2
|
||||
multisignature.AddSignatureFromPubkey(sigs[3], pubkeys[3], pubkeys)
|
||||
|
@ -39,6 +39,18 @@ func TestThresholdMultisig(t *testing.T) {
|
|||
require.False(t, multisigKey.VerifyBytes(msg, multisignature.Marshal()))
|
||||
}
|
||||
|
||||
func TestThresholdMultisigDuplicateSignatures(t *testing.T) {
|
||||
msg := []byte{1, 2, 3, 4, 5}
|
||||
pubkeys, sigs := generatePubKeysAndSignatures(5, msg)
|
||||
multisigKey := NewThresholdMultiSignaturePubKey(2, pubkeys)
|
||||
multisignature := NewMultisig(5)
|
||||
require.False(t, multisigKey.VerifyBytes(msg, multisignature.Marshal()))
|
||||
multisignature.AddSignatureFromPubkey(sigs[0], pubkeys[0], pubkeys)
|
||||
// Add second signature manually
|
||||
multisignature.Sigs = append(multisignature.Sigs, sigs[0])
|
||||
require.False(t, multisigKey.VerifyBytes(msg, multisignature.Marshal()))
|
||||
}
|
||||
|
||||
func TestMultiSigPubkeyEquality(t *testing.T) {
|
||||
msg := []byte{1, 2, 3, 4}
|
||||
pubkeys, _ := generatePubKeysAndSignatures(5, msg)
|
||||
|
|
Loading…
Reference in New Issue