From 99bc44cf526b2b9692b230308f3b940e782eea7b Mon Sep 17 00:00:00 2001
From: Felix Lange <fjl@twurst.com>
Date: Wed, 11 Mar 2015 13:56:02 +0100
Subject: [PATCH] cmd/ethereum: add a flag to switch to unencrytped keystore

This is mostly for automated tests. The tests can use the following
commands to start the node:

    ethereum --unencrypted-keys account new
    ...
    ethereum --unencrypted-keys
---
 cmd/ethereum/main.go | 31 ++++++++++++++++++-------------
 cmd/utils/flags.go   | 11 ++++++++++-
 2 files changed, 28 insertions(+), 14 deletions(-)

diff --git a/cmd/ethereum/main.go b/cmd/ethereum/main.go
index 7b912cf6e..89e19e47f 100644
--- a/cmd/ethereum/main.go
+++ b/cmd/ethereum/main.go
@@ -127,6 +127,7 @@ runtime will execute the file and exit.
 		utils.RPCEnabledFlag,
 		utils.RPCListenAddrFlag,
 		utils.RPCPortFlag,
+		utils.UnencryptedKeysFlag,
 		utils.VMDebugFlag,
 		//utils.VMTypeFlag,
 	}
@@ -213,20 +214,24 @@ func accountList(ctx *cli.Context) {
 
 func accountCreate(ctx *cli.Context) {
 	am := utils.GetAccountManager(ctx)
-	fmt.Println("The new account will be encrypted with a passphrase.")
-	fmt.Println("Please enter a passphrase now.")
-	auth, err := readPassword("Passphrase: ", true)
-	if err != nil {
-		utils.Fatalf("%v", err)
-	}
-	confirm, err := readPassword("Repeat Passphrase: ", false)
-	if err != nil {
-		utils.Fatalf("%v", err)
-	}
-	if auth != confirm {
-		utils.Fatalf("Passphrases did not match.")
+	passphrase := ""
+	if !ctx.GlobalBool(utils.UnencryptedKeysFlag.Name) {
+		fmt.Println("The new account will be encrypted with a passphrase.")
+		fmt.Println("Please enter a passphrase now.")
+		auth, err := readPassword("Passphrase: ", true)
+		if err != nil {
+			utils.Fatalf("%v", err)
+		}
+		confirm, err := readPassword("Repeat Passphrase: ", false)
+		if err != nil {
+			utils.Fatalf("%v", err)
+		}
+		if auth != confirm {
+			utils.Fatalf("Passphrases did not match.")
+		}
+		passphrase = auth
 	}
-	acct, err := am.NewAccount(auth)
+	acct, err := am.NewAccount(passphrase)
 	if err != nil {
 		utils.Fatalf("Could not create the account: %v", err)
 	}
diff --git a/cmd/utils/flags.go b/cmd/utils/flags.go
index e945a32ee..d8b554278 100644
--- a/cmd/utils/flags.go
+++ b/cmd/utils/flags.go
@@ -95,6 +95,10 @@ var (
 		Name:  "mine",
 		Usage: "Enable mining",
 	}
+	UnencryptedKeysFlag = cli.BoolFlag{
+		Name:  "unencrypted-keys",
+		Usage: "disable private key disk encryption (for testing)",
+	}
 
 	LogFileFlag = cli.StringFlag{
 		Name:  "logfile",
@@ -220,7 +224,12 @@ func GetChain(ctx *cli.Context) (*core.ChainManager, ethutil.Database, ethutil.D
 
 func GetAccountManager(ctx *cli.Context) *accounts.Manager {
 	dataDir := ctx.GlobalString(DataDirFlag.Name)
-	ks := crypto.NewKeyStorePassphrase(path.Join(dataDir, "keys"))
+	var ks crypto.KeyStore2
+	if ctx.GlobalBool(UnencryptedKeysFlag.Name) {
+		ks = crypto.NewKeyStorePlain(path.Join(dataDir, "plainkeys"))
+	} else {
+		ks = crypto.NewKeyStorePassphrase(path.Join(dataDir, "keys"))
+	}
 	return accounts.NewManager(ks)
 }
 
-- 
GitLab