github.com/gnolang/gno@v0.0.0-20240520182011-228e9d0192ce/tm2/pkg/crypto/bech32_test.go (about) 1 package crypto_test 2 3 import ( 4 "math/rand" 5 "testing" 6 7 "github.com/stretchr/testify/require" 8 9 "github.com/gnolang/gno/tm2/pkg/amino" 10 "github.com/gnolang/gno/tm2/pkg/crypto" 11 "github.com/gnolang/gno/tm2/pkg/crypto/ed25519" 12 ) 13 14 var invalidStrs = []string{ 15 crypto.Bech32AddrPrefix + "AB0C", 16 crypto.Bech32AddrPrefix + "1234", 17 crypto.Bech32AddrPrefix + "5678", 18 crypto.Bech32AddrPrefix + "BBAB", 19 crypto.Bech32AddrPrefix + "FF04", 20 crypto.Bech32AddrPrefix + "6789", 21 } 22 23 func TestEmptyAddresses(t *testing.T) { 24 t.Parallel() 25 26 require.Equal(t, (crypto.Address{}).String(), "g1qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqluuxe") 27 28 addr := crypto.AddressFromBytes(make([]byte, 20)) 29 require.True(t, addr.IsZero()) 30 31 addr, err := crypto.AddressFromBech32("") 32 require.True(t, addr.IsZero()) 33 require.NotNil(t, err) 34 35 addr, err = crypto.AddressFromBech32("g1qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqluuxe") 36 require.True(t, addr.IsZero()) 37 require.Nil(t, err) 38 } 39 40 func testMarshal(t *testing.T, addr crypto.Address, marshal func(orig interface{}) ([]byte, error), unmarshal func(bz []byte, ptr interface{}) error) { 41 t.Helper() 42 43 bz, err := marshal(addr) 44 require.Nil(t, err) 45 res := crypto.Address{} 46 err = unmarshal(bz, &res) 47 require.Nil(t, err) 48 require.Equal(t, addr, res) 49 } 50 51 func TestRandBech32AddrConsistency(t *testing.T) { 52 t.Parallel() 53 54 var pub ed25519.PubKeyEd25519 55 56 for i := 0; i < 1000; i++ { 57 rand.Read(pub[:]) 58 59 addr := crypto.AddressFromBytes(pub.Address().Bytes()) 60 testMarshal(t, addr, amino.Marshal, amino.Unmarshal) 61 testMarshal(t, addr, amino.MarshalJSON, amino.UnmarshalJSON) 62 63 str := addr.String() 64 res, err := crypto.AddressFromBech32(str) 65 require.Nil(t, err) 66 require.Equal(t, addr, res) 67 } 68 69 for _, str := range invalidStrs { 70 _, err := crypto.AddressFromBech32(str) 71 require.NotNil(t, err) 72 } 73 }