From 8e01d3f90fa561c6798282ef7087fc66df79a7e0 Mon Sep 17 00:00:00 2001 From: Facundo Medica <14063057+facundomedica@users.noreply.github.com> Date: Fri, 24 Feb 2023 14:52:05 -0300 Subject: [PATCH] refactor: remove one usage of our bcrypt fork (#15154) --- crypto/keyring/keyring.go | 7 +++---- crypto/keyring/keyring_test.go | 29 +++++++++++++++++++++++++++++ 2 files changed, 32 insertions(+), 4 deletions(-) diff --git a/crypto/keyring/keyring.go b/crypto/keyring/keyring.go index 59e672ec0e..a1e09ae4c9 100644 --- a/crypto/keyring/keyring.go +++ b/crypto/keyring/keyring.go @@ -12,17 +12,17 @@ import ( "github.com/99designs/keyring" "github.com/cockroachdb/errors" - cmtcrypto "github.com/cometbft/cometbft/crypto" "github.com/cosmos/go-bip39" errorsmod "cosmossdk.io/errors" + "golang.org/x/crypto/bcrypt" + "github.com/cosmos/cosmos-sdk/client/input" "github.com/cosmos/cosmos-sdk/codec" "github.com/cosmos/cosmos-sdk/crypto" "github.com/cosmos/cosmos-sdk/crypto/hd" - "github.com/cosmos/cosmos-sdk/crypto/keys/bcrypt" "github.com/cosmos/cosmos-sdk/crypto/ledger" "github.com/cosmos/cosmos-sdk/crypto/types" sdk "github.com/cosmos/cosmos-sdk/types" @@ -751,8 +751,7 @@ func newRealPrompt(dir string, buf io.Reader) func(string) (string, error) { continue } - saltBytes := cmtcrypto.CRandBytes(16) - passwordHash, err := bcrypt.GenerateFromPassword(saltBytes, []byte(pass), 2) + passwordHash, err := bcrypt.GenerateFromPassword([]byte(pass), 2) if err != nil { fmt.Fprintln(os.Stderr, err) continue diff --git a/crypto/keyring/keyring_test.go b/crypto/keyring/keyring_test.go index a1e42900dc..451e900f0b 100644 --- a/crypto/keyring/keyring_test.go +++ b/crypto/keyring/keyring_test.go @@ -12,13 +12,16 @@ import ( "testing" "github.com/99designs/keyring" + cmtcrypto "github.com/cometbft/cometbft/crypto" "github.com/stretchr/testify/require" + "golang.org/x/crypto/bcrypt" "github.com/cosmos/cosmos-sdk/codec" codectypes "github.com/cosmos/cosmos-sdk/codec/types" "github.com/cosmos/cosmos-sdk/crypto" cryptocodec "github.com/cosmos/cosmos-sdk/crypto/codec" "github.com/cosmos/cosmos-sdk/crypto/hd" + cosmosbcrypt "github.com/cosmos/cosmos-sdk/crypto/keys/bcrypt" "github.com/cosmos/cosmos-sdk/crypto/keys/ed25519" "github.com/cosmos/cosmos-sdk/crypto/keys/multisig" "github.com/cosmos/cosmos-sdk/crypto/keys/secp256k1" @@ -1949,6 +1952,32 @@ func TestRenameKey(t *testing.T) { } } +// TestChangeBcrypt tests the compatibility from upstream Bcrypt and our own +func TestChangeBcrypt(t *testing.T) { + pw := []byte("somepasswword!") + + saltBytes := cmtcrypto.CRandBytes(16) + cosmosHash, err := cosmosbcrypt.GenerateFromPassword(saltBytes, pw, 2) + require.NoError(t, err) + + bcryptHash, err := bcrypt.GenerateFromPassword(pw, 2) + require.NoError(t, err) + + // Check the new hash with the old bcrypt, vice-versa and with the same + // bcrypt version just because. + err = cosmosbcrypt.CompareHashAndPassword(bcryptHash, pw) + require.NoError(t, err) + + err = cosmosbcrypt.CompareHashAndPassword(cosmosHash, pw) + require.NoError(t, err) + + err = bcrypt.CompareHashAndPassword(cosmosHash, pw) + require.NoError(t, err) + + err = bcrypt.CompareHashAndPassword(bcryptHash, pw) + require.NoError(t, err) +} + func requireEqualRenamedKey(t *testing.T, key *Record, mnemonic *Record, nameMatch bool) { if nameMatch { require.Equal(t, key.Name, mnemonic.Name)