github.com/Finschia/ostracon@v1.1.5/crypto/ed25519/ed25519_test.go (about)

     1  package ed25519_test
     2  
     3  import (
     4  	"encoding/hex"
     5  	"testing"
     6  
     7  	"github.com/stretchr/testify/assert"
     8  	"github.com/stretchr/testify/require"
     9  
    10  	"github.com/Finschia/ostracon/crypto"
    11  	"github.com/Finschia/ostracon/crypto/ed25519"
    12  )
    13  
    14  func TestSignAndValidateEd25519(t *testing.T) {
    15  
    16  	privKey := ed25519.GenPrivKey()
    17  	pubKey := privKey.PubKey()
    18  
    19  	msg := crypto.CRandBytes(128)
    20  	sig, err := privKey.Sign(msg)
    21  	require.Nil(t, err)
    22  
    23  	// Test the signature
    24  	assert.True(t, pubKey.VerifySignature(msg, sig))
    25  
    26  	// Mutate the signature, just one bit.
    27  	// TODO: Replace this with a much better fuzzer, tendermint/ed25519/issues/10
    28  	sig[7] ^= byte(0x01)
    29  
    30  	assert.False(t, pubKey.VerifySignature(msg, sig))
    31  }
    32  
    33  func TestVRFProveAndVRFVerify(t *testing.T) {
    34  
    35  	privKey := ed25519.GenPrivKey()
    36  	pubKey := privKey.PubKey()
    37  	message, _ := hex.DecodeString("0000000000000000000000000000000000000000000000000000000000000000")
    38  	proof, err := privKey.VRFProve(message)
    39  	assert.Nil(t, err)
    40  	assert.NotNil(t, proof)
    41  
    42  	output, err := pubKey.VRFVerify(proof, message)
    43  	assert.Nil(t, err)
    44  	assert.NotNil(t, output)
    45  
    46  	// *** If the combination of (pubkey, message, proof) is incorrect ***
    47  	// invalid message
    48  	inValidMessage, _ := hex.DecodeString("0000000000000000000000000000000000000000000000000000000000000001")
    49  	_, err1 := pubKey.VRFVerify(proof, inValidMessage)
    50  	assert.Error(t, err1)
    51  
    52  	// invalid pubkey
    53  	invalidPrivKey := ed25519.GenPrivKey()
    54  	invalidPubkey := invalidPrivKey.PubKey()
    55  	_, err2 := invalidPubkey.VRFVerify(proof, message)
    56  	assert.Error(t, err2)
    57  
    58  	// invalid proof
    59  	invalidProof, _ := invalidPrivKey.VRFProve(message)
    60  	_, err3 := pubKey.VRFVerify(invalidProof, message)
    61  	assert.Error(t, err3)
    62  }