(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
|
return false
|
||||||
}
|
}
|
||||||
size := sig.BitArray.Size()
|
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
|
return false
|
||||||
}
|
}
|
||||||
// index in the list of signatures which we are concerned with.
|
// 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()))
|
require.False(t, multisigKey.VerifyBytes(msg, multisignature.Marshal()))
|
||||||
multisignature.AddSignatureFromPubkey(sigs[0], pubkeys[0], pubkeys)
|
multisignature.AddSignatureFromPubkey(sigs[0], pubkeys[0], pubkeys)
|
||||||
require.False(t, multisigKey.VerifyBytes(msg, multisignature.Marshal()))
|
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)
|
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
|
// Adding two signatures should make it pass, as k = 2
|
||||||
multisignature.AddSignatureFromPubkey(sigs[3], pubkeys[3], pubkeys)
|
multisignature.AddSignatureFromPubkey(sigs[3], pubkeys[3], pubkeys)
|
||||||
|
@ -39,6 +39,18 @@ func TestThresholdMultisig(t *testing.T) {
|
||||||
require.False(t, multisigKey.VerifyBytes(msg, multisignature.Marshal()))
|
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) {
|
func TestMultiSigPubkeyEquality(t *testing.T) {
|
||||||
msg := []byte{1, 2, 3, 4}
|
msg := []byte{1, 2, 3, 4}
|
||||||
pubkeys, _ := generatePubKeysAndSignatures(5, msg)
|
pubkeys, _ := generatePubKeysAndSignatures(5, msg)
|
||||||
|
|
Loading…
Reference in New Issue