Address pull request comments; key header and hex encoding

* Remove key header from unencrypted key file format and replace
  it with a version field
* Change encoding of bytes in key files from base64 to hex
This commit is contained in:
Gustav Simonsson
2015-04-21 17:00:30 +02:00
parent 313eec33ad
commit f98e002d98
3 changed files with 67 additions and 31 deletions

View File

@ -68,6 +68,7 @@ import (
"bytes"
"crypto/aes"
"crypto/cipher"
"encoding/hex"
"encoding/json"
"errors"
"io"
@ -164,15 +165,16 @@ func (ks keyStorePassphrase) StoreKey(key *Key, auth string) (err error) {
mac := Sha3(keyHeaderJSONStr, derivedKey[16:32], cipherText)
cipherStruct := cipherJSON{
mac,
salt,
iv,
hex.EncodeToString(mac),
hex.EncodeToString(salt),
hex.EncodeToString(iv),
keyHeaderJSON,
cipherText,
hex.EncodeToString(cipherText),
}
keyStruct := encryptedKeyJSON{
key.Id,
key.Address.Bytes(),
version,
key.Id.String(),
hex.EncodeToString(key.Address[:]),
cipherStruct,
}
keyJSON, err := json.Marshal(keyStruct)
@ -190,7 +192,7 @@ func (ks keyStorePassphrase) DeleteKey(keyAddr common.Address, auth string) (err
return err
}
keyDirPath := filepath.Join(ks.keysDirPath, keyAddr.Hex())
keyDirPath := filepath.Join(ks.keysDirPath, hex.EncodeToString(keyAddr[:]))
return os.RemoveAll(keyDirPath)
}
@ -203,12 +205,28 @@ func DecryptKey(ks keyStorePassphrase, keyAddr common.Address, auth string) (key
keyProtected := new(encryptedKeyJSON)
err = json.Unmarshal(fileContent, keyProtected)
keyId = keyProtected.Id
mac := keyProtected.Crypto.MAC
salt := keyProtected.Crypto.Salt
iv := keyProtected.Crypto.IV
keyId = uuid.Parse(keyProtected.Id)
mac, err := hex.DecodeString(keyProtected.Crypto.MAC)
if err != nil {
return nil, nil, err
}
salt, err := hex.DecodeString(keyProtected.Crypto.Salt)
if err != nil {
return nil, nil, err
}
iv, err := hex.DecodeString(keyProtected.Crypto.IV)
if err != nil {
return nil, nil, err
}
keyHeader := keyProtected.Crypto.KeyHeader
cipherText := keyProtected.Crypto.CipherText
cipherText, err := hex.DecodeString(keyProtected.Crypto.CipherText)
if err != nil {
return nil, nil, err
}
// used in MAC
keyHeaderJSONStr, err := json.Marshal(keyHeader)