From cd88295f5ac360aaaf63be94ae09f202a4b8630f Mon Sep 17 00:00:00 2001 From: Gustav Simonsson Date: Wed, 15 Apr 2015 15:47:00 +0200 Subject: [PATCH] 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: ¶msJSON, } 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