forked from TrueCloudLab/neoneo-go
vm: dont use SetCheckedHash outside of vm
package
This commit is contained in:
parent
941410a840
commit
4740d937aa
2 changed files with 7 additions and 8 deletions
|
@ -43,8 +43,7 @@ func ECDSACheckMultisig(ic *interop.Context, v *vm.VM) error {
|
|||
if len(pkeys) < len(sigs) {
|
||||
return errors.New("more signatures than there are keys")
|
||||
}
|
||||
v.SetCheckedHash(hashToCheck)
|
||||
sigok := vm.CheckMultisigPar(v, pkeys, sigs)
|
||||
sigok := vm.CheckMultisigPar(v, hashToCheck, pkeys, sigs)
|
||||
v.Estack().PushVal(sigok)
|
||||
return nil
|
||||
}
|
||||
|
|
12
pkg/vm/vm.go
12
pkg/vm/vm.go
|
@ -1232,7 +1232,7 @@ func (v *VM) execute(ctx *Context, op opcode.Opcode, parameter []byte) (err erro
|
|||
panic("VM is not set up properly for signature checks")
|
||||
}
|
||||
|
||||
sigok := CheckMultisigPar(v, pkeys, sigs)
|
||||
sigok := CheckMultisigPar(v, v.checkhash, pkeys, sigs)
|
||||
v.estack.PushVal(sigok)
|
||||
|
||||
case opcode.NEWMAP:
|
||||
|
@ -1419,9 +1419,9 @@ func (v *VM) getJumpOffset(ctx *Context, parameter []byte, mod int) int {
|
|||
}
|
||||
|
||||
// CheckMultisigPar checks if sigs contains sufficient valid signatures.
|
||||
func CheckMultisigPar(v *VM, pkeys [][]byte, sigs [][]byte) bool {
|
||||
func CheckMultisigPar(v *VM, h []byte, pkeys [][]byte, sigs [][]byte) bool {
|
||||
if len(sigs) == 1 {
|
||||
return checkMultisig1(v, pkeys, sigs[0])
|
||||
return checkMultisig1(v, h, pkeys, sigs[0])
|
||||
}
|
||||
|
||||
k1, k2 := 0, len(pkeys)-1
|
||||
|
@ -1446,7 +1446,7 @@ func CheckMultisigPar(v *VM, pkeys [][]byte, sigs [][]byte) bool {
|
|||
|
||||
result <- verify{
|
||||
signum: t.signum,
|
||||
ok: t.pub.Verify(sigs[t.signum], v.checkhash),
|
||||
ok: t.pub.Verify(sigs[t.signum], h),
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -1511,10 +1511,10 @@ loop:
|
|||
return sigok
|
||||
}
|
||||
|
||||
func checkMultisig1(v *VM, pkeys [][]byte, sig []byte) bool {
|
||||
func checkMultisig1(v *VM, h []byte, pkeys [][]byte, sig []byte) bool {
|
||||
for i := range pkeys {
|
||||
pkey := v.bytesToPublicKey(pkeys[i])
|
||||
if pkey.Verify(sig, v.checkhash) {
|
||||
if pkey.Verify(sig, h) {
|
||||
return true
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue