From da4a0e05555fdcbf3e561b4c7bb93964f7d417f3 Mon Sep 17 00:00:00 2001 From: Felix Lange Date: Sun, 19 Apr 2015 01:28:41 +0200 Subject: [PATCH 1/2] eth: fix node key persistence crypto.LoadECDSA has been modified to expect hex data. The key was being saved as raw bytes, causing the file to be rewritten on every start. --- eth/backend.go | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/eth/backend.go b/eth/backend.go index 7799326fe2..264753aba8 100644 --- a/eth/backend.go +++ b/eth/backend.go @@ -3,7 +3,6 @@ package eth import ( "crypto/ecdsa" "fmt" - "io/ioutil" "math" "path" "strings" @@ -110,7 +109,7 @@ func (cfg *Config) nodeKey() (*ecdsa.PrivateKey, error) { if key, err = crypto.GenerateKey(); err != nil { return nil, fmt.Errorf("could not generate server key: %v", err) } - if err := ioutil.WriteFile(keyfile, crypto.FromECDSA(key), 0600); err != nil { + if err := crypto.SaveECDSA(keyfile, key); err != nil { glog.V(logger.Error).Infoln("could not persist nodekey: ", err) } return key, nil @@ -223,12 +222,10 @@ func New(config *Config) (*Ethereum, error) { if err != nil { return nil, err } - protocols := []p2p.Protocol{eth.protocolManager.SubProtocol} if config.Shh { protocols = append(protocols, eth.whisper.Protocol()) } - eth.net = &p2p.Server{ PrivateKey: netprv, Name: config.Name, From 4907d28967a890628f4dd014be2e7e1fbd8f4d04 Mon Sep 17 00:00:00 2001 From: Felix Lange Date: Sun, 19 Apr 2015 01:33:00 +0200 Subject: [PATCH 2/2] crypto: update {Load,Save}ECDSA comments to mention hex encoding --- crypto/crypto.go | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/crypto/crypto.go b/crypto/crypto.go index 9865c87c4e..89423e0c43 100644 --- a/crypto/crypto.go +++ b/crypto/crypto.go @@ -120,6 +120,7 @@ func HexToECDSA(hexkey string) (*ecdsa.PrivateKey, error) { } // LoadECDSA loads a secp256k1 private key from the given file. +// The key data is expected to be hex-encoded. func LoadECDSA(file string) (*ecdsa.PrivateKey, error) { buf := make([]byte, 64) fd, err := os.Open(file) @@ -139,8 +140,8 @@ func LoadECDSA(file string) (*ecdsa.PrivateKey, error) { return ToECDSA(key), nil } -// SaveECDSA saves a secp256k1 private key to the given file with restrictive -// permissions +// SaveECDSA saves a secp256k1 private key to the given file with +// restrictive permissions. The key data is saved hex-encoded. func SaveECDSA(file string, key *ecdsa.PrivateKey) error { k := hex.EncodeToString(FromECDSA(key)) return ioutil.WriteFile(file, []byte(k), 0600)