github.com/line/ostracon@v1.0.10-0.20230328032236-7f20145f065d/crypto/vrf/compatibility_vrf_test.go (about)

     1  //go:build libsodium
     2  // +build libsodium
     3  
     4  package vrf
     5  
     6  import (
     7  	"crypto/ed25519"
     8  	"testing"
     9  
    10  	"github.com/stretchr/testify/require"
    11  
    12  	r2ishiguro "github.com/r2ishiguro/vrf/go/vrf_ed25519"
    13  )
    14  
    15  func TestProveAndVerifyCompatibility(t *testing.T) {
    16  	privateKey := ed25519.NewKeyFromSeed(secret[:])
    17  	publicKey := privateKey.Public().(ed25519.PublicKey)
    18  
    19  	sk := make([]byte, ed25519.PrivateKeySize)
    20  	copy(sk, privateKey[:])
    21  	pk := make([]byte, ed25519.PublicKeySize)
    22  	copy(pk, publicKey[:])
    23  
    24  	libsodiumImpl := newVrfEd25519libsodium()
    25  
    26  	t.Run("libsodium.Prove and r2ishiguro.Verify have NOT compatibility", func(t *testing.T) {
    27  		proof, err := libsodiumImpl.Prove(sk, message)
    28  		require.NoError(t, err)
    29  		require.NotNil(t, proof)
    30  
    31  		valid, err := r2ishiguro.ECVRF_verify(pk, proof, message)
    32  		require.Error(t, err)
    33  		require.False(t, valid)
    34  	})
    35  	t.Run("r2ishiguro.Prove and libsodium.Verify have NOT compatibility", func(t *testing.T) {
    36  		proof, err := r2ishiguro.ECVRF_prove(pk, sk, message)
    37  		require.NoError(t, err)
    38  		require.NotNil(t, proof)
    39  
    40  		valid, err := libsodiumImpl.Verify(pk, proof, message)
    41  		require.Error(t, err)
    42  		require.False(t, valid)
    43  	})
    44  }