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 }