From 0e9a6bf509645d166dd3f7b0a5945ae3d22bf4fc Mon Sep 17 00:00:00 2001 From: Joemar Taganna Date: Mon, 22 Jan 2018 07:12:04 +0800 Subject: [PATCH 1/2] Add option to spit key pair in stdout This adds an option to just write the key pair in stdout and not write it out into a file. This is more convenient if we're calling this from a script in another runtime (e.g. Shell or Python) because we don't have to write to file and read from it just to get the address and private key. --- README.md | 3 ++- main.go | 40 +++++++++++++++++++++++++--------------- 2 files changed, 27 insertions(+), 16 deletions(-) diff --git a/README.md b/README.md index 827a910..5ea826a 100644 --- a/README.md +++ b/README.md @@ -75,7 +75,7 @@ go build ## Usage ``` -Usage: dcraddrgen [-testnet] [-simnet] [-regtest] [-noseed] [-h] filename +Usage: dcraddrgen [-testnet] [-simnet] [-regtest] [-noseed] [-nofile] [-h] filename Generate a Decred private and public key or wallet seed. These are output to the file 'filename'. @@ -84,5 +84,6 @@ These are output to the file 'filename'. -simnet Generate a simnet key instead of mainnet -regtest Generate a regtest key instead of mainnet -noseed Generate a single keypair instead of a seed + -nofile Write the key pair in stdout, not in 'filename' -verify Verify a seed by generating the first address ``` diff --git a/main.go b/main.go index da4b1e5..1f9a30a 100644 --- a/main.go +++ b/main.go @@ -67,6 +67,7 @@ var noseed = flag.Bool("noseed", false, "Generate a single keypair instead of "+ "an HD extended seed") var verify = flag.Bool("verify", false, "Verify a seed by generating the first "+ "address") +var noFile = flag.Bool("nofile", false, "Write the key pair in stdout, not in 'filename'") func setupFlags(msg func(), f *flag.FlagSet) { f.Usage = msg @@ -95,8 +96,8 @@ func writeNewFile(filename string, data []byte, perm os.FileMode) error { return f.Close() } -// generateKeyPair generates and stores a secp256k1 keypair in a file. -func generateKeyPair(filename string) error { +// generateKeyPair generates and stores a secp256k1 keypair in a file or writes to stdout. +func generateKeyPair(writeToFile bool, filename string) error { key, err := ecdsa.GenerateKey(curve, rand.Reader) if err != nil { return err @@ -124,15 +125,21 @@ func generateKeyPair(filename string) error { return err } - var buf bytes.Buffer - buf.WriteString("Address: ") - buf.WriteString(addr.EncodeAddress()) - buf.WriteString(newLine) - buf.WriteString("Private key: ") - buf.WriteString(privWif.String()) - buf.WriteString(newLine) + if writeToFile { + var buf bytes.Buffer + buf.WriteString("Address: ") + buf.WriteString(addr.EncodeAddress()) + buf.WriteString(newLine) + buf.WriteString("Private key: ") + buf.WriteString(privWif.String()) + buf.WriteString(newLine) - return writeNewFile(filename, buf.Bytes(), 0600) + return writeNewFile(filename, buf.Bytes(), 0600) + } else { + fmt.Println("Address: ", addr.EncodeAddress()) + fmt.Println("Private key: ", privWif.String()) + return nil + } } // deriveCoinTypeKey derives the cointype key which can be used to derive the @@ -477,6 +484,7 @@ func main() { fmt.Println(" -testnet \tGenerate a testnet key instead of mainnet") fmt.Println(" -simnet \tGenerate a simnet key instead of mainnet") fmt.Println(" -noseed \tGenerate a single keypair instead of a seed") + fmt.Println(" -nofile \tWrite the key pair in stdout, not in 'filename'") fmt.Println(" -verify \tVerify a seed by generating the first address") } @@ -518,15 +526,17 @@ func main() { // Single keypair generation. if *noseed { - err := generateKeyPair(fn) + err := generateKeyPair(!*noFile, fn) if err != nil { fmt.Printf("Error generating key pair: %v\n", err.Error()) return } - fmt.Printf("Successfully generated keypair and stored it in %v.\n", - fn) - fmt.Printf("Your private key is used to spend your funds. Do not " + - "reveal it to anyone.\n") + if !*noFile { + fmt.Printf("Successfully generated keypair and stored it in %v.\n", + fn) + fmt.Printf("Your private key is used to spend your funds. Do not " + + "reveal it to anyone.\n") + } return } From 94b0dab8fe6e7df60860cafe79418c062741508c Mon Sep 17 00:00:00 2001 From: Joemar Taganna Date: Mon, 22 Jan 2018 08:03:19 +0800 Subject: [PATCH 2/2] Update README.md --- README.md | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/README.md b/README.md index 5ea826a..e689ba4 100644 --- a/README.md +++ b/README.md @@ -79,11 +79,11 @@ Usage: dcraddrgen [-testnet] [-simnet] [-regtest] [-noseed] [-nofile] [-h] filen Generate a Decred private and public key or wallet seed. These are output to the file 'filename'. - -h Print this message - -testnet Generate a testnet key instead of mainnet - -simnet Generate a simnet key instead of mainnet - -regtest Generate a regtest key instead of mainnet - -noseed Generate a single keypair instead of a seed - -nofile Write the key pair in stdout, not in 'filename' - -verify Verify a seed by generating the first address + -h Print this message + -testnet Generate a testnet key instead of mainnet + -simnet Generate a simnet key instead of mainnet + -regtest Generate a regtest key instead of mainnet + -noseed Generate a single keypair instead of a seed + -nofile Write the key pair in stdout, not in 'filename' + -verify Verify a seed by generating the first address ```