diff --git a/pkg/crypto/keys/publickey.go b/pkg/crypto/keys/publickey.go index 56c3f4a48..b1e3748c2 100644 --- a/pkg/crypto/keys/publickey.go +++ b/pkg/crypto/keys/publickey.go @@ -12,7 +12,6 @@ import ( "github.com/btcsuite/btcd/btcec" lru "github.com/hashicorp/golang-lru" - "github.com/nspcc-dev/neo-go/pkg/core/interop/interopnames" "github.com/nspcc-dev/neo-go/pkg/crypto/hash" "github.com/nspcc-dev/neo-go/pkg/encoding/address" "github.com/nspcc-dev/neo-go/pkg/io" @@ -319,8 +318,7 @@ func (p *PublicKey) GetVerificationScript() []byte { buf.WriteB(0xAC) // CHECKSIG return buf.Bytes() } - emit.Bytes(buf.BinWriter, b) - emit.Syscall(buf.BinWriter, interopnames.SystemCryptoCheckSig) + emit.CheckSig(buf.BinWriter, b) return buf.Bytes() } diff --git a/pkg/vm/emit/emit.go b/pkg/vm/emit/emit.go index bff6807fd..1a8450f3f 100644 --- a/pkg/vm/emit/emit.go +++ b/pkg/vm/emit/emit.go @@ -219,6 +219,14 @@ func AppCall(w *io.BinWriter, scriptHash util.Uint160, operation string, f callf AppCallNoArgs(w, scriptHash, operation, f) } +// CheckSig emits a single-key verification script using given []bytes as a key. +// It does not check for key correctness, so you can get an invalid script if the +// data passed is not really a public key. +func CheckSig(w *io.BinWriter, key []byte) { + Bytes(w, key) + Syscall(w, interopnames.SystemCryptoCheckSig) +} + func isInstructionJmp(op opcode.Opcode) bool { return opcode.JMP <= op && op <= opcode.CALLL || op == opcode.ENDTRYL }