Skip to content

Commit f4fa0d4

Browse files
committed
Moved keyring to ethutil & removed old methods. Implements ethereum#20
1 parent 0512113 commit f4fa0d4

File tree

9 files changed

+122
-118
lines changed

9 files changed

+122
-118
lines changed

ethchain/keypair.go

-87
This file was deleted.

ethdb/database.go

+2
Original file line numberDiff line numberDiff line change
@@ -54,11 +54,13 @@ func (db *LDBDatabase) LastKnownTD() []byte {
5454
return data
5555
}
5656

57+
/*
5758
func (db *LDBDatabase) GetKeys() []*ethutil.Key {
5859
data, _ := db.Get([]byte("KeyRing"))
5960
6061
return []*ethutil.Key{ethutil.NewKeyFromBytes(data)}
6162
}
63+
*/
6264

6365
func (db *LDBDatabase) Close() {
6466
// Close the leveldb database

ethdb/memory_database.go

+2
Original file line numberDiff line numberDiff line change
@@ -26,11 +26,13 @@ func (db *MemDatabase) Get(key []byte) ([]byte, error) {
2626
return db.db[string(key)], nil
2727
}
2828

29+
/*
2930
func (db *MemDatabase) GetKeys() []*ethutil.Key {
3031
data, _ := db.Get([]byte("KeyRing"))
3132
3233
return []*ethutil.Key{ethutil.NewKeyFromBytes(data)}
3334
}
35+
*/
3436

3537
func (db *MemDatabase) Delete(key []byte) error {
3638
delete(db.db, string(key))

ethpub/pub.go

+5-8
Original file line numberDiff line numberDiff line change
@@ -39,10 +39,7 @@ func (lib *PEthereum) GetBlock(hexHash string) *PBlock {
3939
}
4040

4141
func (lib *PEthereum) GetKey() *PKey {
42-
keyPair, err := ethchain.NewKeyPairFromSec(ethutil.Config.Db.GetKeys()[0].PrivateKey)
43-
if err != nil {
44-
return nil
45-
}
42+
keyPair := ethutil.GetKeyRing().Get(0)
4643

4744
return NewPKey(keyPair)
4845
}
@@ -90,7 +87,7 @@ func (lib *PEthereum) IsContract(address string) bool {
9087
}
9188

9289
func (lib *PEthereum) SecretToAddress(key string) string {
93-
pair, err := ethchain.NewKeyPairFromSec(ethutil.FromHex(key))
90+
pair, err := ethutil.NewKeyPairFromSec(ethutil.FromHex(key))
9491
if err != nil {
9592
return ""
9693
}
@@ -115,12 +112,12 @@ func (lib *PEthereum) createTx(key, recipient, valueStr, gasStr, gasPriceStr, in
115112
hash = ethutil.FromHex(recipient)
116113
}
117114

118-
var keyPair *ethchain.KeyPair
115+
var keyPair *ethutil.KeyPair
119116
var err error
120117
if key[0:2] == "0x" {
121-
keyPair, err = ethchain.NewKeyPairFromSec([]byte(ethutil.FromHex(key[0:2])))
118+
keyPair, err = ethutil.NewKeyPairFromSec([]byte(ethutil.FromHex(key[0:2])))
122119
} else {
123-
keyPair, err = ethchain.NewKeyPairFromSec([]byte(ethutil.FromHex(key)))
120+
keyPair, err = ethutil.NewKeyPairFromSec([]byte(ethutil.FromHex(key)))
124121
}
125122

126123
if err != nil {

ethpub/types.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ type PKey struct {
3939
PublicKey string `json:"publicKey"`
4040
}
4141

42-
func NewPKey(key *ethchain.KeyPair) *PKey {
42+
func NewPKey(key *ethutil.KeyPair) *PKey {
4343
return &PKey{ethutil.Hex(key.Address()), ethutil.Hex(key.PrivateKey), ethutil.Hex(key.PublicKey)}
4444
}
4545

ethutil/db.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ package ethutil
44
type Database interface {
55
Put(key []byte, value []byte)
66
Get(key []byte) ([]byte, error)
7-
GetKeys() []*Key
7+
//GetKeys() []*Key
88
Delete(key []byte) error
99
LastKnownTD() []byte
1010
Close()

ethutil/key.go

-19
This file was deleted.

ethutil/keypair.go

+109
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,109 @@
1+
package ethutil
2+
3+
import (
4+
"github.com/obscuren/secp256k1-go"
5+
)
6+
7+
type KeyPair struct {
8+
PrivateKey []byte
9+
PublicKey []byte
10+
11+
// The associated account
12+
account *StateObject
13+
}
14+
15+
func NewKeyPairFromSec(seckey []byte) (*KeyPair, error) {
16+
pubkey, err := secp256k1.GeneratePubKey(seckey)
17+
if err != nil {
18+
return nil, err
19+
}
20+
21+
return &KeyPair{PrivateKey: seckey, PublicKey: pubkey}, nil
22+
}
23+
24+
func NewKeyPairFromValue(val *Value) *KeyPair {
25+
v, _ := NewKeyPairFromSec(val.Bytes())
26+
27+
return v
28+
}
29+
30+
func (k *KeyPair) Address() []byte {
31+
return Sha3Bin(k.PublicKey[1:])[12:]
32+
}
33+
34+
func (k *KeyPair) RlpEncode() []byte {
35+
return k.RlpValue().Encode()
36+
}
37+
38+
func (k *KeyPair) RlpValue() *Value {
39+
return NewValue(k.PrivateKey)
40+
}
41+
42+
type KeyRing struct {
43+
keys []*KeyPair
44+
}
45+
46+
func (k *KeyRing) Add(pair *KeyPair) {
47+
k.keys = append(k.keys, pair)
48+
}
49+
50+
func (k *KeyRing) Get(i int) *KeyPair {
51+
if len(k.keys) > i {
52+
return k.keys[i]
53+
}
54+
55+
return nil
56+
}
57+
58+
func (k *KeyRing) Len() int {
59+
return len(k.keys)
60+
}
61+
62+
func (k *KeyRing) NewKeyPair(sec []byte) (*KeyPair, error) {
63+
keyPair, err := NewKeyPairFromSec(sec)
64+
if err != nil {
65+
return nil, err
66+
}
67+
68+
k.Add(keyPair)
69+
Config.Db.Put([]byte("KeyRing"), k.RlpValue().Encode())
70+
71+
return keyPair, nil
72+
}
73+
74+
func (k *KeyRing) Reset() {
75+
Config.Db.Put([]byte("KeyRing"), nil)
76+
k.keys = nil
77+
}
78+
79+
func (k *KeyRing) RlpValue() *Value {
80+
v := EmptyValue()
81+
for _, keyPair := range k.keys {
82+
v.Append(keyPair.RlpValue())
83+
}
84+
85+
return v
86+
}
87+
88+
// The public "singleton" keyring
89+
var keyRing *KeyRing
90+
91+
func GetKeyRing() *KeyRing {
92+
if keyRing == nil {
93+
keyRing = &KeyRing{}
94+
95+
data, _ := Config.Db.Get([]byte("KeyRing"))
96+
it := NewValueFromBytes(data).NewIterator()
97+
for it.Next() {
98+
v := it.Value()
99+
100+
key, err := NewKeyPairFromSec(v.Bytes())
101+
if err != nil {
102+
panic(err)
103+
}
104+
keyRing.Add(key)
105+
}
106+
}
107+
108+
return keyRing
109+
}

peer.go

+2-2
Original file line numberDiff line numberDiff line change
@@ -581,8 +581,8 @@ func (p *Peer) handleHandshake(msg *ethwire.Msg) {
581581
p.port = uint16(c.Get(4).Uint())
582582

583583
// Self connect detection
584-
key := ethutil.Config.Db.GetKeys()[0]
585-
if bytes.Compare(key.PublicKey, p.pubkey) == 0 {
584+
keyPair := ethutil.GetKeyRing().Get(0)
585+
if bytes.Compare(keyPair.PublicKey, p.pubkey) == 0 {
586586
p.Stop()
587587

588588
return

0 commit comments

Comments
 (0)