aboutsummaryrefslogtreecommitdiffstats
path: root/crypto/key.go
diff options
context:
space:
mode:
authorGustav Simonsson <gustav.simonsson@gmail.com>2015-04-21 23:00:30 +0800
committerGustav Simonsson <gustav.simonsson@gmail.com>2015-05-12 23:22:17 +0800
commitf98e002d9851b8df53a09a0e3189f2e8fdec48df (patch)
tree611b0f65f80cee91c62716ae18f43aaaed61bc96 /crypto/key.go
parent313eec33ad7add82bfdd00e3a076091fa990c799 (diff)
downloaddexon-f98e002d9851b8df53a09a0e3189f2e8fdec48df.tar.gz
dexon-f98e002d9851b8df53a09a0e3189f2e8fdec48df.tar.zst
dexon-f98e002d9851b8df53a09a0e3189f2e8fdec48df.zip
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
Diffstat (limited to 'crypto/key.go')
-rw-r--r--crypto/key.go52
1 files changed, 35 insertions, 17 deletions
diff --git a/crypto/key.go b/crypto/key.go
index 067a5a294..1af69d795 100644
--- a/crypto/key.go
+++ b/crypto/key.go
@@ -26,6 +26,7 @@ package crypto
import (
"bytes"
"crypto/ecdsa"
+ "encoding/hex"
"encoding/json"
"io"
@@ -33,6 +34,10 @@ import (
"github.com/ethereum/go-ethereum/common"
)
+const (
+ version = "1"
+)
+
type Key struct {
Id uuid.UUID // Version 4 "random" for unique id not derived from key data
// to simplify lookups we also store the address
@@ -43,29 +48,31 @@ type Key struct {
}
type plainKeyJSON struct {
- Id []byte
- Address []byte
- PrivateKey []byte
+ Version string
+ Id string
+ Address string
+ PrivateKey string
}
type encryptedKeyJSON struct {
- Id []byte
- Address []byte
+ Version string
+ Id string
+ Address string
Crypto cipherJSON
}
type cipherJSON struct {
- MAC []byte
- Salt []byte
- IV []byte
+ MAC string
+ Salt string
+ IV string
KeyHeader keyHeaderJSON
- CipherText []byte
+ CipherText string
}
type keyHeaderJSON struct {
Version string
Kdf string
- KdfParams scryptParamsJSON // TODO: make more generic?
+ KdfParams scryptParamsJSON
}
type scryptParamsJSON struct {
@@ -78,9 +85,10 @@ type scryptParamsJSON struct {
func (k *Key) MarshalJSON() (j []byte, err error) {
jStruct := plainKeyJSON{
- k.Id,
- k.Address.Bytes(),
- FromECDSA(k.PrivateKey),
+ version,
+ k.Id.String(),
+ hex.EncodeToString(k.Address[:]),
+ hex.EncodeToString(FromECDSA(k.PrivateKey)),
}
j, err = json.Marshal(jStruct)
return j, err
@@ -94,12 +102,22 @@ func (k *Key) UnmarshalJSON(j []byte) (err error) {
}
u := new(uuid.UUID)
- *u = keyJSON.Id
+ *u = uuid.Parse(keyJSON.Id)
k.Id = *u
- k.Address = common.BytesToAddress(keyJSON.Address)
- k.PrivateKey = ToECDSA(keyJSON.PrivateKey)
+ addr, err := hex.DecodeString(keyJSON.Address)
+ if err != nil {
+ return err
+ }
+
+ privkey, err := hex.DecodeString(keyJSON.PrivateKey)
+ if err != nil {
+ return err
+ }
+
+ k.Address = common.BytesToAddress(addr)
+ k.PrivateKey = ToECDSA(privkey)
- return err
+ return nil
}
func NewKeyFromECDSA(privateKeyECDSA *ecdsa.PrivateKey) *Key {