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
This commit is contained in:
@ -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
|
||||
|
Reference in New Issue
Block a user