Merge PR #3593: hide dbKeybase's constructor
This commit is contained in:
parent
9c23fe68ee
commit
fe548c0829
@ -9,6 +9,11 @@ BREAKING CHANGES
|
||||
* Gaia
|
||||
|
||||
* SDK
|
||||
* \#3592 Drop deprecated keybase implementation's
|
||||
New constructor in favor of a new
|
||||
crypto/keys.New(string, string) implementation that
|
||||
returns a lazy keybase instance. Remove client.MockKeyBase,
|
||||
superseded by crypto/keys.NewInMemory()
|
||||
|
||||
* Tendermint
|
||||
|
||||
|
||||
@ -1,14 +0,0 @@
|
||||
package client
|
||||
|
||||
import (
|
||||
dbm "github.com/tendermint/tendermint/libs/db"
|
||||
|
||||
"github.com/cosmos/cosmos-sdk/crypto/keys"
|
||||
)
|
||||
|
||||
// MockKeyBase generates an in-memory keybase that will be discarded
|
||||
// useful for --dry-run to generate a seed phrase without
|
||||
// storing the key
|
||||
func MockKeyBase() keys.Keybase {
|
||||
return keys.New(dbm.NewMemDB())
|
||||
}
|
||||
@ -104,7 +104,7 @@ func runAddCmd(_ *cobra.Command, args []string) error {
|
||||
if viper.GetBool(flagDryRun) {
|
||||
// we throw this away, so don't enforce args,
|
||||
// we want to get a new random seed phrase quickly
|
||||
kb = client.MockKeyBase()
|
||||
kb = keys.NewInMemory()
|
||||
encryptPassword = app.DefaultKeyPass
|
||||
} else {
|
||||
kb, err = NewKeyBaseFromHomeFlag()
|
||||
@ -309,7 +309,7 @@ func printCreate(info keys.Info, showMnemonic bool, mnemonic string) error {
|
||||
|
||||
// function to just create a new seed to display in the UI before actually persisting it in the keybase
|
||||
func generateMnemonic(algo keys.SigningAlgo) string {
|
||||
kb := client.MockKeyBase()
|
||||
kb := keys.NewInMemory()
|
||||
pass := app.DefaultKeyPass
|
||||
name := "inmemorykey"
|
||||
_, seed, _ := kb.CreateMnemonic(name, keys.English, pass, algo)
|
||||
|
||||
@ -14,11 +14,13 @@ import (
|
||||
sdk "github.com/cosmos/cosmos-sdk/types"
|
||||
)
|
||||
|
||||
// KeyDBName is the directory under root where we store the keys
|
||||
// available output formats.
|
||||
const (
|
||||
KeyDBName = "keys"
|
||||
OutputFormatText = "text"
|
||||
OutputFormatJSON = "json"
|
||||
|
||||
// defaultKeyDBName is the client's subdirectory where keys are stored.
|
||||
defaultKeyDBName = "keys"
|
||||
)
|
||||
|
||||
type bechKeyOutFn func(keyInfo keys.Info) (KeyOutput, error)
|
||||
@ -87,7 +89,7 @@ func NewKeyBaseFromDir(rootDir string) (keys.Keybase, error) {
|
||||
func NewInMemoryKeyBase() keys.Keybase { return keys.NewInMemory() }
|
||||
|
||||
func getLazyKeyBaseFromDir(rootDir string) (keys.Keybase, error) {
|
||||
return keys.NewLazyKeybase(KeyDBName, filepath.Join(rootDir, "keys")), nil
|
||||
return keys.New(defaultKeyDBName, filepath.Join(rootDir, "keys")), nil
|
||||
}
|
||||
|
||||
// create a list of KeyOutput in bech32 format
|
||||
|
||||
@ -682,7 +682,7 @@ func doTransferWithGas(
|
||||
) (res *http.Response, body string, receiveAddr sdk.AccAddress) {
|
||||
|
||||
// create receive address
|
||||
kb := client.MockKeyBase()
|
||||
kb := crkeys.NewInMemory()
|
||||
|
||||
receiveInfo, _, err := kb.CreateMnemonic(
|
||||
"receive_address", crkeys.English, gapp.DefaultKeyPass, crkeys.SigningAlgo("secp256k1"),
|
||||
@ -724,7 +724,7 @@ func doTransferWithGasAccAuto(
|
||||
) (res *http.Response, body string, receiveAddr sdk.AccAddress) {
|
||||
|
||||
// create receive address
|
||||
kb := client.MockKeyBase()
|
||||
kb := crkeys.NewInMemory()
|
||||
|
||||
receiveInfo, _, err := kb.CreateMnemonic(
|
||||
"receive_address", crkeys.English, gapp.DefaultKeyPass, crkeys.SigningAlgo("secp256k1"),
|
||||
|
||||
@ -77,14 +77,15 @@ type dbKeybase struct {
|
||||
db dbm.DB
|
||||
}
|
||||
|
||||
// New creates a new keybase instance using the passed DB for reading and writing keys.
|
||||
func New(db dbm.DB) Keybase {
|
||||
// newDbKeybase creates a new keybase instance using the passed DB for reading and writing keys.
|
||||
func newDbKeybase(db dbm.DB) Keybase {
|
||||
return dbKeybase{
|
||||
db: db,
|
||||
}
|
||||
}
|
||||
|
||||
// NewInMemory creates a new keybase on top of in-memory storage instance.
|
||||
// NewInMemory creates a transient keybase on top of in-memory storage
|
||||
// instance useful for testing purposes and on-the-fly key generation.
|
||||
func NewInMemory() Keybase { return dbKeybase{dbm.NewMemDB()} }
|
||||
|
||||
// CreateMnemonic generates a new key and persists it to storage, encrypted
|
||||
|
||||
@ -1,51 +1,34 @@
|
||||
package keys
|
||||
package keys_test
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"io/ioutil"
|
||||
"testing"
|
||||
|
||||
"github.com/stretchr/testify/assert"
|
||||
"github.com/stretchr/testify/require"
|
||||
|
||||
. "github.com/cosmos/cosmos-sdk/crypto/keys"
|
||||
"github.com/cosmos/cosmos-sdk/crypto/keys/hd"
|
||||
"github.com/cosmos/cosmos-sdk/crypto/keys/mintkey"
|
||||
"github.com/cosmos/cosmos-sdk/types"
|
||||
sdk "github.com/cosmos/cosmos-sdk/types"
|
||||
"github.com/tendermint/tendermint/crypto"
|
||||
"github.com/tendermint/tendermint/crypto/ed25519"
|
||||
dbm "github.com/tendermint/tendermint/libs/db"
|
||||
)
|
||||
|
||||
func init() {
|
||||
mintkey.BcryptSecurityParameter = 1
|
||||
}
|
||||
|
||||
func TestKeybaseOpenClose(t *testing.T) {
|
||||
dir, err := ioutil.TempDir("", "TestKeybaseOpenClose")
|
||||
assert.Nil(t, err)
|
||||
|
||||
kb := New(dbm.NewDB("TestKeybaseOpenClose", dbm.LevelDBBackend, dir))
|
||||
kb.CloseDB()
|
||||
|
||||
// The DB has been closed. At the moment, the expected behaviour is to panic
|
||||
assert.Panics(t, func() {
|
||||
_, _ = kb.CreateAccount(
|
||||
"some_account",
|
||||
"key pair crucial catch public canyon evil outer stage ten gym tornado",
|
||||
"", "", 0, 1)
|
||||
})
|
||||
}
|
||||
|
||||
func TestLanguage(t *testing.T) {
|
||||
kb := New(dbm.NewMemDB())
|
||||
kb := NewInMemory()
|
||||
_, _, err := kb.CreateMnemonic("something", Japanese, "no_pass", Secp256k1)
|
||||
assert.Error(t, err)
|
||||
assert.Equal(t, "unsupported language: only english is supported", err.Error())
|
||||
}
|
||||
|
||||
func TestCreateAccountInvalidMnemonic(t *testing.T) {
|
||||
kb := New(dbm.NewMemDB())
|
||||
kb := NewInMemory()
|
||||
_, err := kb.CreateAccount(
|
||||
"some_account",
|
||||
"malarkey pair crucial catch public canyon evil outer stage ten gym tornado",
|
||||
@ -55,14 +38,14 @@ func TestCreateAccountInvalidMnemonic(t *testing.T) {
|
||||
}
|
||||
|
||||
func TestCreateLedgerUnsupportedAlgo(t *testing.T) {
|
||||
kb := New(dbm.NewMemDB())
|
||||
kb := NewInMemory()
|
||||
_, err := kb.CreateLedger("some_account", Ed25519, 0, 1)
|
||||
assert.Error(t, err)
|
||||
assert.Equal(t, "unsupported signing algo: only secp256k1 is supported", err.Error())
|
||||
}
|
||||
|
||||
func TestCreateLedger(t *testing.T) {
|
||||
kb := New(dbm.NewMemDB())
|
||||
kb := NewInMemory()
|
||||
|
||||
// test_cover and test_unit will result in different answers
|
||||
// test_cover does not compile some dependencies so ledger is disabled
|
||||
@ -101,8 +84,7 @@ func TestCreateLedger(t *testing.T) {
|
||||
// TestKeyManagement makes sure we can manipulate these keys well
|
||||
func TestKeyManagement(t *testing.T) {
|
||||
// make the storage with reasonable defaults
|
||||
db := dbm.NewMemDB()
|
||||
cstore := New(db)
|
||||
cstore := NewInMemory()
|
||||
|
||||
algo := Secp256k1
|
||||
n1, n2, n3 := "personal", "business", "other"
|
||||
@ -180,13 +162,12 @@ func TestKeyManagement(t *testing.T) {
|
||||
// addr cache gets nuked - and test skip flag
|
||||
err = cstore.Delete(n2, "", true)
|
||||
require.NoError(t, err)
|
||||
require.False(t, db.Has(addrKey(i2.GetAddress())))
|
||||
}
|
||||
|
||||
// TestSignVerify does some detailed checks on how we sign and validate
|
||||
// signatures
|
||||
func TestSignVerify(t *testing.T) {
|
||||
cstore := New(dbm.NewMemDB())
|
||||
cstore := NewInMemory()
|
||||
algo := Secp256k1
|
||||
|
||||
n1, n2, n3 := "some dude", "a dudette", "dude-ish"
|
||||
@ -268,12 +249,8 @@ func assertPassword(t *testing.T, cstore Keybase, name, pass, badpass string) {
|
||||
|
||||
// TestExportImport tests exporting and importing
|
||||
func TestExportImport(t *testing.T) {
|
||||
|
||||
// make the storage with reasonable defaults
|
||||
db := dbm.NewMemDB()
|
||||
cstore := New(
|
||||
db,
|
||||
)
|
||||
cstore := NewInMemory()
|
||||
|
||||
info, _, err := cstore.CreateMnemonic("john", English, "secretcpw", Secp256k1)
|
||||
require.NoError(t, err)
|
||||
@ -301,10 +278,7 @@ func TestExportImport(t *testing.T) {
|
||||
//
|
||||
func TestExportImportPubKey(t *testing.T) {
|
||||
// make the storage with reasonable defaults
|
||||
db := dbm.NewMemDB()
|
||||
cstore := New(
|
||||
db,
|
||||
)
|
||||
cstore := NewInMemory()
|
||||
|
||||
// CreateMnemonic a private-public key pair and ensure consistency
|
||||
notPasswd := "n9y25ah7"
|
||||
@ -342,11 +316,8 @@ func TestExportImportPubKey(t *testing.T) {
|
||||
|
||||
// TestAdvancedKeyManagement verifies update, import, export functionality
|
||||
func TestAdvancedKeyManagement(t *testing.T) {
|
||||
|
||||
// make the storage with reasonable defaults
|
||||
cstore := New(
|
||||
dbm.NewMemDB(),
|
||||
)
|
||||
cstore := NewInMemory()
|
||||
|
||||
algo := Secp256k1
|
||||
n1, n2 := "old-name", "new name"
|
||||
@ -394,9 +365,7 @@ func TestAdvancedKeyManagement(t *testing.T) {
|
||||
func TestSeedPhrase(t *testing.T) {
|
||||
|
||||
// make the storage with reasonable defaults
|
||||
cstore := New(
|
||||
dbm.NewMemDB(),
|
||||
)
|
||||
cstore := NewInMemory()
|
||||
|
||||
algo := Secp256k1
|
||||
n1, n2 := "lost-key", "found-again"
|
||||
@ -425,9 +394,7 @@ func TestSeedPhrase(t *testing.T) {
|
||||
|
||||
func ExampleNew() {
|
||||
// Select the encryption and storage for your cryptostore
|
||||
cstore := New(
|
||||
dbm.NewMemDB(),
|
||||
)
|
||||
cstore := NewInMemory()
|
||||
|
||||
sec := Secp256k1
|
||||
|
||||
|
||||
@ -15,7 +15,8 @@ type lazyKeybase struct {
|
||||
dir string
|
||||
}
|
||||
|
||||
func NewLazyKeybase(name, dir string) Keybase {
|
||||
// New creates a new instance of a lazy keybase.
|
||||
func New(name, dir string) Keybase {
|
||||
return lazyKeybase{name: name, dir: dir}
|
||||
}
|
||||
|
||||
@ -25,7 +26,7 @@ func (lkb lazyKeybase) List() ([]Info, error) {
|
||||
return nil, err
|
||||
}
|
||||
defer db.Close()
|
||||
return New(db).List()
|
||||
return newDbKeybase(db).List()
|
||||
}
|
||||
|
||||
func (lkb lazyKeybase) Get(name string) (Info, error) {
|
||||
@ -34,7 +35,7 @@ func (lkb lazyKeybase) Get(name string) (Info, error) {
|
||||
return nil, err
|
||||
}
|
||||
defer db.Close()
|
||||
return New(db).Get(name)
|
||||
return newDbKeybase(db).Get(name)
|
||||
}
|
||||
|
||||
func (lkb lazyKeybase) GetByAddress(address types.AccAddress) (Info, error) {
|
||||
@ -43,7 +44,7 @@ func (lkb lazyKeybase) GetByAddress(address types.AccAddress) (Info, error) {
|
||||
return nil, err
|
||||
}
|
||||
defer db.Close()
|
||||
return New(db).GetByAddress(address)
|
||||
return newDbKeybase(db).GetByAddress(address)
|
||||
}
|
||||
|
||||
func (lkb lazyKeybase) Delete(name, passphrase string, skipPass bool) error {
|
||||
@ -52,7 +53,7 @@ func (lkb lazyKeybase) Delete(name, passphrase string, skipPass bool) error {
|
||||
return err
|
||||
}
|
||||
defer db.Close()
|
||||
return New(db).Delete(name, passphrase, skipPass)
|
||||
return newDbKeybase(db).Delete(name, passphrase, skipPass)
|
||||
}
|
||||
|
||||
func (lkb lazyKeybase) Sign(name, passphrase string, msg []byte) ([]byte, crypto.PubKey, error) {
|
||||
@ -61,7 +62,7 @@ func (lkb lazyKeybase) Sign(name, passphrase string, msg []byte) ([]byte, crypto
|
||||
return nil, nil, err
|
||||
}
|
||||
defer db.Close()
|
||||
return New(db).Sign(name, passphrase, msg)
|
||||
return newDbKeybase(db).Sign(name, passphrase, msg)
|
||||
}
|
||||
|
||||
func (lkb lazyKeybase) CreateMnemonic(name string, language Language, passwd string, algo SigningAlgo) (info Info, seed string, err error) {
|
||||
@ -70,7 +71,7 @@ func (lkb lazyKeybase) CreateMnemonic(name string, language Language, passwd str
|
||||
return nil, "", err
|
||||
}
|
||||
defer db.Close()
|
||||
return New(db).CreateMnemonic(name, language, passwd, algo)
|
||||
return newDbKeybase(db).CreateMnemonic(name, language, passwd, algo)
|
||||
}
|
||||
|
||||
func (lkb lazyKeybase) CreateAccount(name, mnemonic, bip39Passwd, encryptPasswd string, account uint32, index uint32) (Info, error) {
|
||||
@ -79,7 +80,7 @@ func (lkb lazyKeybase) CreateAccount(name, mnemonic, bip39Passwd, encryptPasswd
|
||||
return nil, err
|
||||
}
|
||||
defer db.Close()
|
||||
return New(db).CreateAccount(name, mnemonic, bip39Passwd, encryptPasswd, account, index)
|
||||
return newDbKeybase(db).CreateAccount(name, mnemonic, bip39Passwd, encryptPasswd, account, index)
|
||||
}
|
||||
|
||||
func (lkb lazyKeybase) Derive(name, mnemonic, bip39Passwd, encryptPasswd string, params hd.BIP44Params) (Info, error) {
|
||||
@ -88,7 +89,7 @@ func (lkb lazyKeybase) Derive(name, mnemonic, bip39Passwd, encryptPasswd string,
|
||||
return nil, err
|
||||
}
|
||||
defer db.Close()
|
||||
return New(db).Derive(name, mnemonic, bip39Passwd, encryptPasswd, params)
|
||||
return newDbKeybase(db).Derive(name, mnemonic, bip39Passwd, encryptPasswd, params)
|
||||
}
|
||||
|
||||
func (lkb lazyKeybase) CreateLedger(name string, algo SigningAlgo, account uint32, index uint32) (info Info, err error) {
|
||||
@ -97,7 +98,7 @@ func (lkb lazyKeybase) CreateLedger(name string, algo SigningAlgo, account uint3
|
||||
return nil, err
|
||||
}
|
||||
defer db.Close()
|
||||
return New(db).CreateLedger(name, algo, account, index)
|
||||
return newDbKeybase(db).CreateLedger(name, algo, account, index)
|
||||
}
|
||||
|
||||
func (lkb lazyKeybase) CreateOffline(name string, pubkey crypto.PubKey) (info Info, err error) {
|
||||
@ -106,7 +107,7 @@ func (lkb lazyKeybase) CreateOffline(name string, pubkey crypto.PubKey) (info In
|
||||
return nil, err
|
||||
}
|
||||
defer db.Close()
|
||||
return New(db).CreateOffline(name, pubkey)
|
||||
return newDbKeybase(db).CreateOffline(name, pubkey)
|
||||
}
|
||||
|
||||
func (lkb lazyKeybase) Update(name, oldpass string, getNewpass func() (string, error)) error {
|
||||
@ -115,7 +116,7 @@ func (lkb lazyKeybase) Update(name, oldpass string, getNewpass func() (string, e
|
||||
return err
|
||||
}
|
||||
defer db.Close()
|
||||
return New(db).Update(name, oldpass, getNewpass)
|
||||
return newDbKeybase(db).Update(name, oldpass, getNewpass)
|
||||
}
|
||||
|
||||
func (lkb lazyKeybase) Import(name string, armor string) (err error) {
|
||||
@ -124,7 +125,7 @@ func (lkb lazyKeybase) Import(name string, armor string) (err error) {
|
||||
return err
|
||||
}
|
||||
defer db.Close()
|
||||
return New(db).Import(name, armor)
|
||||
return newDbKeybase(db).Import(name, armor)
|
||||
}
|
||||
|
||||
func (lkb lazyKeybase) ImportPubKey(name string, armor string) (err error) {
|
||||
@ -133,7 +134,7 @@ func (lkb lazyKeybase) ImportPubKey(name string, armor string) (err error) {
|
||||
return err
|
||||
}
|
||||
defer db.Close()
|
||||
return New(db).ImportPubKey(name, armor)
|
||||
return newDbKeybase(db).ImportPubKey(name, armor)
|
||||
}
|
||||
|
||||
func (lkb lazyKeybase) Export(name string) (armor string, err error) {
|
||||
@ -142,7 +143,7 @@ func (lkb lazyKeybase) Export(name string) (armor string, err error) {
|
||||
return "", err
|
||||
}
|
||||
defer db.Close()
|
||||
return New(db).Export(name)
|
||||
return newDbKeybase(db).Export(name)
|
||||
}
|
||||
|
||||
func (lkb lazyKeybase) ExportPubKey(name string) (armor string, err error) {
|
||||
@ -151,7 +152,7 @@ func (lkb lazyKeybase) ExportPubKey(name string) (armor string, err error) {
|
||||
return "", err
|
||||
}
|
||||
defer db.Close()
|
||||
return New(db).ExportPubKey(name)
|
||||
return newDbKeybase(db).ExportPubKey(name)
|
||||
}
|
||||
|
||||
func (lkb lazyKeybase) ExportPrivateKeyObject(name string, passphrase string) (crypto.PrivKey, error) {
|
||||
@ -160,7 +161,7 @@ func (lkb lazyKeybase) ExportPrivateKeyObject(name string, passphrase string) (c
|
||||
return nil, err
|
||||
}
|
||||
defer db.Close()
|
||||
return New(db).ExportPrivateKeyObject(name, passphrase)
|
||||
return newDbKeybase(db).ExportPrivateKeyObject(name, passphrase)
|
||||
}
|
||||
|
||||
func (lkb lazyKeybase) CloseDB() {}
|
||||
|
||||
Loading…
Reference in New Issue
Block a user