github.com/platonnetwork/platon-go@v0.7.6/crypto/vrf/vrf.go (about) 1 package vrf 2 3 import ( 4 "crypto/ecdsa" 5 "errors" 6 ) 7 8 var ( 9 NotSupportKey = errors.New("Unsupported key type") 10 ) 11 12 func Prove(key *ecdsa.PrivateKey, data []byte) ([]byte, error) { 13 pk := ECP2OS(key.X, key.Y) 14 sk := make([]byte, 32) 15 blob := key.D.Bytes() 16 copy(sk[32-len(blob):], blob) 17 if pi, err := eCVRF_prove(pk, sk, data[:]); err != nil { 18 return nil, err 19 } else { 20 return pi, nil 21 } 22 } 23 24 func Verify(key *ecdsa.PublicKey, pi []byte, data []byte) (bool, error) { 25 if res, err := eCVRF_verify(ECP2OS(key.X, key.Y), pi, data[:]); err != nil { 26 return false, err 27 } else { 28 return res, nil 29 } 30 } 31 32 func ProofToHash(pi []byte) []byte { 33 return eCVRF_proof2hash(pi) 34 }