github.com/okex/exchain@v1.8.0/libs/tendermint/crypto/ed25519/ed25519_test.go (about)

     1  package ed25519_test
     2  
     3  import (
     4  	"github.com/ethereum/go-ethereum/common/hexutil"
     5  	"testing"
     6  
     7  	"github.com/stretchr/testify/assert"
     8  	"github.com/stretchr/testify/require"
     9  
    10  	"github.com/okex/exchain/libs/tendermint/crypto"
    11  	"github.com/okex/exchain/libs/tendermint/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.VerifyBytes(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.VerifyBytes(msg, sig))
    31  
    32  	bytes := pubKey.Bytes()
    33  	var recoverPubKey ed25519.PubKeyEd25519
    34  	recoverPubKey.UnmarshalFromAmino(bytes)
    35  	assert.Equal(t, bytes, recoverPubKey.Bytes())
    36  }
    37  
    38  func genPubkey(hex string) ed25519.PubKeyEd25519 {
    39  	bytes := hexutil.MustDecode(hex)
    40  	var recoverPubKey ed25519.PubKeyEd25519
    41  	recoverPubKey.UnmarshalFromAmino(bytes)
    42  	return recoverPubKey
    43  }