diff options
author | Gustav Simonsson <gustav.simonsson@gmail.com> | 2015-01-25 09:07:20 +0800 |
---|---|---|
committer | Gustav Simonsson <gustav.simonsson@gmail.com> | 2015-01-26 11:30:17 +0800 |
commit | 512ffa2bf4308b44aa6f43f25238b375b58d7dbc (patch) | |
tree | 40cc0f2aa3eda21eb7039b128d27bdab94d883be /crypto/key.go | |
parent | d792e95c214c8352e6b23b798101e90844eaa7a3 (diff) | |
download | go-tangerine-512ffa2bf4308b44aa6f43f25238b375b58d7dbc.tar go-tangerine-512ffa2bf4308b44aa6f43f25238b375b58d7dbc.tar.gz go-tangerine-512ffa2bf4308b44aa6f43f25238b375b58d7dbc.tar.bz2 go-tangerine-512ffa2bf4308b44aa6f43f25238b375b58d7dbc.tar.lz go-tangerine-512ffa2bf4308b44aa6f43f25238b375b58d7dbc.tar.xz go-tangerine-512ffa2bf4308b44aa6f43f25238b375b58d7dbc.tar.zst go-tangerine-512ffa2bf4308b44aa6f43f25238b375b58d7dbc.zip |
Add accounts package and refactor key stores
* Add initial UserAccount and AccountManager structs
* Add NewAccount, Sign and Accounts functions
* Refactor key stores to use key address as main identifier
while keeping the UUID.
* Use key address as file/dir names instead of UUID
Diffstat (limited to 'crypto/key.go')
-rw-r--r-- | crypto/key.go | 25 |
1 files changed, 13 insertions, 12 deletions
diff --git a/crypto/key.go b/crypto/key.go index ca29b691f..f8f64c35c 100644 --- a/crypto/key.go +++ b/crypto/key.go @@ -33,7 +33,9 @@ import ( ) type Key struct { - Id *uuid.UUID // Version 4 "random" for unique id not derived from key data + Id uuid.UUID // Version 4 "random" for unique id not derived from key data + // to simplify lookups we also store the address + Address []byte // we only store privkey as pubkey/address can be derived from it // privkey in this struct is always in plaintext PrivateKey *ecdsa.PrivateKey @@ -41,6 +43,7 @@ type Key struct { type plainKeyJSON struct { Id []byte + Address []byte PrivateKey []byte } @@ -51,18 +54,15 @@ type cipherJSON struct { } type encryptedKeyJSON struct { - Id []byte - Crypto cipherJSON -} - -func (k *Key) Address() []byte { - pubBytes := FromECDSAPub(&k.PrivateKey.PublicKey) - return Sha3(pubBytes[1:])[12:] + Id []byte + Address []byte + Crypto cipherJSON } func (k *Key) MarshalJSON() (j []byte, err error) { jStruct := plainKeyJSON{ - *k.Id, + k.Id, + k.Address, FromECDSA(k.PrivateKey), } j, err = json.Marshal(jStruct) @@ -78,8 +78,8 @@ func (k *Key) UnmarshalJSON(j []byte) (err error) { u := new(uuid.UUID) *u = keyJSON.Id - k.Id = u - + k.Id = *u + k.Address = keyJSON.Address k.PrivateKey = ToECDSA(keyJSON.PrivateKey) return err @@ -101,7 +101,8 @@ func NewKey(rand io.Reader) *Key { id := uuid.NewRandom() key := &Key{ - Id: &id, + Id: id, + Address: pubkeyToAddress(privateKeyECDSA.PublicKey), PrivateKey: privateKeyECDSA, } return key |