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  }