aboutsummaryrefslogtreecommitdiffstats
path: root/accounts
diff options
context:
space:
mode:
Diffstat (limited to 'accounts')
-rw-r--r--accounts/account_manager.go19
-rw-r--r--accounts/accounts_test.go8
2 files changed, 14 insertions, 13 deletions
diff --git a/accounts/account_manager.go b/accounts/account_manager.go
index 86f9c5916..f87cce65f 100644
--- a/accounts/account_manager.go
+++ b/accounts/account_manager.go
@@ -33,6 +33,7 @@ and accounts persistence is derived from stored keys' addresses
package accounts
import (
+ "crypto/ecdsa"
crand "crypto/rand"
"errors"
@@ -52,17 +53,17 @@ type Account struct {
}
type AccountManager struct {
- keyStore crypto.KeyStore2
- unlockedKeys map[string]crypto.Key
- unlockMilliseconds time.Duration
- mutex sync.RWMutex
+ keyStore crypto.KeyStore2
+ unlockedKeys map[string]crypto.Key
+ unlockTime time.Duration
+ mutex sync.RWMutex
}
-func NewAccountManager(keyStore crypto.KeyStore2, unlockMilliseconds time.Duration) *AccountManager {
+func NewAccountManager(keyStore crypto.KeyStore2, unlockTime time.Duration) *AccountManager {
return &AccountManager{
- keyStore: keyStore,
- unlockedKeys: make(map[string]crypto.Key),
- unlockMilliseconds: unlockMilliseconds,
+ keyStore: keyStore,
+ unlockedKeys: make(map[string]crypto.Key),
+ unlockTime: unlockTime,
}
}
@@ -144,7 +145,7 @@ func (am *AccountManager) Accounts() ([]Account, error) {
func unlockLater(am *AccountManager, addr []byte) {
select {
- case <-time.After(time.Millisecond * am.unlockMilliseconds):
+ case <-time.After(am.unlockTime):
}
am.mutex.RLock()
// TODO: how do we know the key is actually gone from memory?
diff --git a/accounts/accounts_test.go b/accounts/accounts_test.go
index d8187220a..30e0b011a 100644
--- a/accounts/accounts_test.go
+++ b/accounts/accounts_test.go
@@ -12,7 +12,7 @@ import (
func TestAccountManager(t *testing.T) {
ks := crypto.NewKeyStorePlain(ethutil.DefaultDataDir() + "/testaccounts")
- am := NewAccountManager(ks, 100)
+ am := NewAccountManager(ks, 100*time.Millisecond)
pass := "" // not used but required by API
a1, err := am.NewAccount(pass)
toSign := randentropy.GetEntropyCSPRNG(32)
@@ -22,7 +22,7 @@ func TestAccountManager(t *testing.T) {
}
// Cleanup
- time.Sleep(time.Millisecond * 150) // wait for locking
+ time.Sleep(150 * time.Millisecond) // wait for locking
accounts, err := am.Accounts()
if err != nil {
@@ -38,7 +38,7 @@ func TestAccountManager(t *testing.T) {
func TestAccountManagerLocking(t *testing.T) {
ks := crypto.NewKeyStorePassphrase(ethutil.DefaultDataDir() + "/testaccounts")
- am := NewAccountManager(ks, 200)
+ am := NewAccountManager(ks, 200*time.Millisecond)
pass := "foo"
a1, err := am.NewAccount(pass)
toSign := randentropy.GetEntropyCSPRNG(32)
@@ -62,7 +62,7 @@ func TestAccountManagerLocking(t *testing.T) {
}
// Signing without passphrase fails after automatic locking
- time.Sleep(time.Millisecond * time.Duration(250))
+ time.Sleep(250 * time.Millisecond)
_, err = am.Sign(a1, toSign)
if err != ErrLocked {