mirror of
https://github.com/nspcc-dev/neo-go.git
synced 2024-12-11 15:30:07 +00:00
28908aa3cf
Signed-off-by: Elizaveta Chichindaeva <elizaveta@nspcc.ru>
45 lines
1.7 KiB
Go
45 lines
1.7 KiB
Go
/*
|
|
Package crypto provides interface to CryptoLib native contract.
|
|
It implements some cryptographic functions.
|
|
*/
|
|
package crypto
|
|
|
|
import (
|
|
"github.com/nspcc-dev/neo-go/pkg/interop"
|
|
"github.com/nspcc-dev/neo-go/pkg/interop/contract"
|
|
"github.com/nspcc-dev/neo-go/pkg/interop/neogointernal"
|
|
)
|
|
|
|
// Hash represents CryptoLib contract hash.
|
|
const Hash = "\x1b\xf5\x75\xab\x11\x89\x68\x84\x13\x61\x0a\x35\xa1\x28\x86\xcd\xe0\xb6\x6c\x72"
|
|
|
|
// NamedCurve represents a named elliptic curve.
|
|
type NamedCurve byte
|
|
|
|
// Various named elliptic curves.
|
|
const (
|
|
Secp256k1 NamedCurve = 22
|
|
Secp256r1 NamedCurve = 23
|
|
)
|
|
|
|
// Sha256 calls `sha256` method of native CryptoLib contract and computes SHA256 hash of b.
|
|
func Sha256(b []byte) interop.Hash256 {
|
|
return neogointernal.CallWithToken(Hash, "sha256", int(contract.NoneFlag), b).(interop.Hash256)
|
|
}
|
|
|
|
// Ripemd160 calls `ripemd160` method of native CryptoLib contract and computes RIPEMD160 hash of b.
|
|
func Ripemd160(b []byte) interop.Hash160 {
|
|
return neogointernal.CallWithToken(Hash, "ripemd160", int(contract.NoneFlag), b).(interop.Hash160)
|
|
}
|
|
|
|
// Murmur32 calls `murmur32` method of native CryptoLib contract and computes Murmur32 hash of b
|
|
// using the given seed.
|
|
func Murmur32(b []byte, seed int) []byte {
|
|
return neogointernal.CallWithToken(Hash, "murmur32", int(contract.NoneFlag), b, seed).([]byte)
|
|
}
|
|
|
|
// VerifyWithECDsa calls `verifyWithECDsa` method of native CryptoLib contract and checks that sig is
|
|
// a correct msg's signature for the given pub (serialized public key on the given curve).
|
|
func VerifyWithECDsa(msg []byte, pub interop.PublicKey, sig interop.Signature, curve NamedCurve) bool {
|
|
return neogointernal.CallWithToken(Hash, "verifyWithECDsa", int(contract.NoneFlag), msg, pub, sig, curve).(bool)
|
|
}
|