forked from cosmos/cosmos-sdk
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge PR cosmos#2090: Improve crypto/keys and add
keys mnemonic
and…
… `keys new` commands * crypto/keys/hd: use btcec to remove dep on tendermint * crypto/keys/bcrypt: improve comment about fork * crypto/keys/bip39 -> crypto/keys/bip39/fundraiser * crypto/keys/bip39: bring in fork of tyler-smith * crypto/keys/hd: update dep * crypto/keys: update deps * crypto/keys: move mintkey.go into new crypto/keys/mintkey * crypto/keys/hd: NewParamsFromPath * crypto/keys: keybase.Derive takes a bip39 passphrase too * crypto/keys/hd: BIP44Params.DerivationPath * gaiacli keys: add commands new and mnemonic * fix lints * minor fixes from review * update Gopkg.toml * add tendermint fork of golang.org/x/crypto * pin some transitive deps * crypto/keys/bcrypt: remove * remove in favour of fork of golang.org/x/crypto/bcrypt at github.com/tendermint/crypto/bcrypt * crypto/keys/bip39: remove completely * use fork cosmos/go-bip39 instead * Gopkg.toml: dont use master * Pull in changes from my PR * fixes from review * enforce min len for --unsafe-entropy * lint fix * feedback from review * fix dep
- Loading branch information
1 parent
c961a68
commit 1ee8dee
Showing
18 changed files
with
573 additions
and
501 deletions.
There are no files selected for viewing
Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.
Oops, something went wrong.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,78 @@ | ||
package keys | ||
|
||
import ( | ||
"crypto/sha256" | ||
"fmt" | ||
|
||
"github.com/cosmos/cosmos-sdk/client" | ||
"github.com/spf13/cobra" | ||
|
||
bip39 "github.com/bartekn/go-bip39" | ||
) | ||
|
||
const ( | ||
flagUserEntropy = "unsafe-entropy" | ||
|
||
mnemonicEntropySize = 256 | ||
) | ||
|
||
func mnemonicKeyCommand() *cobra.Command { | ||
cmd := &cobra.Command{ | ||
Use: "mnemonic", | ||
Short: "Compute the bip39 mnemonic for some input entropy", | ||
Long: "Create a bip39 mnemonic, sometimes called a seed phrase, by reading from the system entropy. To pass your own entropy, use --unsafe-entropy", | ||
RunE: runMnemonicCmd, | ||
} | ||
cmd.Flags().Bool(flagUserEntropy, false, "Prompt the user to supply their own entropy, instead of relying on the system") | ||
return cmd | ||
} | ||
|
||
func runMnemonicCmd(cmd *cobra.Command, args []string) error { | ||
flags := cmd.Flags() | ||
|
||
userEntropy, _ := flags.GetBool(flagUserEntropy) | ||
|
||
var entropySeed []byte | ||
|
||
if userEntropy { | ||
// prompt the user to enter some entropy | ||
buf := client.BufferStdin() | ||
inputEntropy, err := client.GetString("> WARNING: Generate at least 256-bits of entropy and enter the results here:", buf) | ||
if err != nil { | ||
return err | ||
} | ||
if len(inputEntropy) < 43 { | ||
return fmt.Errorf("256-bits is 43 characters in Base-64, and 100 in Base-6. You entered %v, and probably want more", len(inputEntropy)) | ||
} | ||
conf, err := client.GetConfirmation( | ||
fmt.Sprintf("> Input length: %d", len(inputEntropy)), | ||
buf) | ||
if err != nil { | ||
return err | ||
} | ||
if !conf { | ||
return nil | ||
} | ||
|
||
// hash input entropy to get entropy seed | ||
hashedEntropy := sha256.Sum256([]byte(inputEntropy)) | ||
entropySeed = hashedEntropy[:] | ||
printStep() | ||
} else { | ||
// read entropy seed straight from crypto.Rand | ||
var err error | ||
entropySeed, err = bip39.NewEntropy(mnemonicEntropySize) | ||
if err != nil { | ||
return err | ||
} | ||
} | ||
|
||
mnemonic, err := bip39.NewMnemonic(entropySeed[:]) | ||
if err != nil { | ||
return err | ||
} | ||
|
||
fmt.Println(mnemonic) | ||
|
||
return nil | ||
} |
Oops, something went wrong.