Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
15 changes: 8 additions & 7 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -75,14 +75,15 @@ 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'.

-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
-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
```
40 changes: 25 additions & 15 deletions main.go
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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
Expand Down Expand Up @@ -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
Expand Down Expand Up @@ -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")
}

Expand Down Expand Up @@ -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
}

Expand Down