From cd88295f5ac360aaaf63be94ae09f202a4b8630f Mon Sep 17 00:00:00 2001
From: Gustav Simonsson <gustav.simonsson@gmail.com>
Date: Wed, 15 Apr 2015 15:47:00 +0200
Subject: Add key header to unencrypted key file

---
 crypto/key.go                  | 17 ++++++++++++-----
 crypto/key_store_passphrase.go |  7 ++++---
 2 files changed, 16 insertions(+), 8 deletions(-)

diff --git a/crypto/key.go b/crypto/key.go
index 067a5a294..0f36a7f6b 100644
--- a/crypto/key.go
+++ b/crypto/key.go
@@ -45,27 +45,28 @@ type Key struct {
 type plainKeyJSON struct {
 	Id         []byte
 	Address    []byte
+	KeyHeader  keyHeaderJSON
 	PrivateKey []byte
 }
 
 type encryptedKeyJSON struct {
-	Id      []byte
-	Address []byte
-	Crypto  cipherJSON
+	Id        []byte
+	Address   []byte
+	KeyHeader keyHeaderJSON
+	Crypto    cipherJSON
 }
 
 type cipherJSON struct {
 	MAC        []byte
 	Salt       []byte
 	IV         []byte
-	KeyHeader  keyHeaderJSON
 	CipherText []byte
 }
 
 type keyHeaderJSON struct {
 	Version   string
 	Kdf       string
-	KdfParams scryptParamsJSON // TODO: make more generic?
+	KdfParams *scryptParamsJSON // TODO: make more generic?
 }
 
 type scryptParamsJSON struct {
@@ -77,9 +78,15 @@ type scryptParamsJSON struct {
 }
 
 func (k *Key) MarshalJSON() (j []byte, err error) {
+	keyHeader := keyHeaderJSON{
+		Version:   "1",
+		Kdf:       "",
+		KdfParams: nil,
+	}
 	jStruct := plainKeyJSON{
 		k.Id,
 		k.Address.Bytes(),
+		keyHeader,
 		FromECDSA(k.PrivateKey),
 	}
 	j, err = json.Marshal(jStruct)
diff --git a/crypto/key_store_passphrase.go b/crypto/key_store_passphrase.go
index 00717b5d1..96227e4d1 100644
--- a/crypto/key_store_passphrase.go
+++ b/crypto/key_store_passphrase.go
@@ -153,7 +153,7 @@ func (ks keyStorePassphrase) StoreKey(key *Key, auth string) (err error) {
 	keyHeaderJSON := keyHeaderJSON{
 		Version:   keyHeaderVersion,
 		Kdf:       keyHeaderKDF,
-		KdfParams: paramsJSON,
+		KdfParams: &paramsJSON,
 	}
 
 	keyHeaderJSONStr, err := json.Marshal(keyHeaderJSON)
@@ -167,12 +167,12 @@ func (ks keyStorePassphrase) StoreKey(key *Key, auth string) (err error) {
 		mac,
 		salt,
 		iv,
-		keyHeaderJSON,
 		cipherText,
 	}
 	keyStruct := encryptedKeyJSON{
 		key.Id,
 		key.Address.Bytes(),
+		keyHeaderJSON,
 		cipherStruct,
 	}
 	keyJSON, err := json.Marshal(keyStruct)
@@ -204,10 +204,11 @@ func DecryptKey(ks keyStorePassphrase, keyAddr common.Address, auth string) (key
 	err = json.Unmarshal(fileContent, keyProtected)
 
 	keyId = keyProtected.Id
+	keyHeader := keyProtected.KeyHeader
+
 	mac := keyProtected.Crypto.MAC
 	salt := keyProtected.Crypto.Salt
 	iv := keyProtected.Crypto.IV
-	keyHeader := keyProtected.Crypto.KeyHeader
 	cipherText := keyProtected.Crypto.CipherText
 
 	// used in MAC
-- 
cgit v1.2.3