github.com/fibonacci-chain/fbc@v0.0.0-20231124064014-c7636198c1e9/app/crypto/ethsecp256k1/ethsecp256k1_test.go (about) 1 package ethsecp256k1 2 3 import ( 4 "testing" 5 6 "github.com/stretchr/testify/require" 7 8 ethcrypto "github.com/ethereum/go-ethereum/crypto" 9 ethsecp256k1 "github.com/ethereum/go-ethereum/crypto/secp256k1" 10 11 tmcrypto "github.com/fibonacci-chain/fbc/libs/tendermint/crypto" 12 ) 13 14 func TestPrivKeyPrivKey(t *testing.T) { 15 // validate type and equality 16 privKey, err := GenerateKey() 17 require.NoError(t, err) 18 require.True(t, privKey.Equals(privKey)) 19 require.Implements(t, (*tmcrypto.PrivKey)(nil), privKey) 20 21 // validate inequality 22 privKey2, err := GenerateKey() 23 require.NoError(t, err) 24 require.False(t, privKey.Equals(privKey2)) 25 26 // validate Ethereum address equality 27 addr := privKey.PubKey().Address() 28 expectedAddr := ethcrypto.PubkeyToAddress(privKey.ToECDSA().PublicKey) 29 require.Equal(t, expectedAddr.Bytes(), addr.Bytes()) 30 31 // validate we can sign some bytes 32 msg := []byte("hello world") 33 sigHash := ethcrypto.Keccak256Hash(msg) 34 expectedSig, _ := ethsecp256k1.Sign(sigHash.Bytes(), privKey) 35 36 sig, err := privKey.Sign(msg) 37 require.NoError(t, err) 38 require.Equal(t, expectedSig, sig) 39 } 40 41 func TestPrivKeyPubKey(t *testing.T) { 42 privKey, err := GenerateKey() 43 require.NoError(t, err) 44 45 // validate type and equality 46 pubKey := privKey.PubKey().(PubKey) 47 require.Implements(t, (*tmcrypto.PubKey)(nil), pubKey) 48 49 // validate inequality 50 privKey2, err := GenerateKey() 51 require.NoError(t, err) 52 require.False(t, pubKey.Equals(privKey2.PubKey())) 53 54 // validate signature 55 msg := []byte("hello world") 56 sig, err := privKey.Sign(msg) 57 require.NoError(t, err) 58 59 res := pubKey.VerifyBytes(msg, sig) 60 require.True(t, res) 61 }