diff --git a/accounts/account_manager.go b/accounts/account_manager.go index da0bd89004..d6f0705dfb 100644 --- a/accounts/account_manager.go +++ b/accounts/account_manager.go @@ -76,6 +76,10 @@ func (am AccountManager) NewAccount(auth string) (*Account, error) { return ua, err } +func (am AccountManager) DeleteAccount(address []byte, auth string) error { + return am.keyStore.DeleteKey(address, auth) +} + // set of accounts == set of keys in given key store // TODO: do we need persistence of accounts as well? func (am *AccountManager) Accounts() ([]Account, error) { diff --git a/accounts/accounts_test.go b/accounts/accounts_test.go index 30e8c62855..5c02e50c89 100644 --- a/accounts/accounts_test.go +++ b/accounts/accounts_test.go @@ -8,13 +8,31 @@ import ( ) func TestAccountManager(t *testing.T) { - ks := crypto.NewKeyStorePlain(crypto.DefaultDataDir()) + + // Get AccountManager + ks := crypto.NewKeyStorePlain(crypto.DefaultDataDir() + "/testaccounts") am := NewAccountManager(ks) + + // Create a new account pass := "" // not used but required by API a1, err := am.NewAccount(pass) + + // Sign junk toSign := randentropy.GetEntropyCSPRNG(32) _, err = am.Sign(a1, pass, toSign) if err != nil { t.Fatal(err) } + + // Cleanup + accounts, err := am.Accounts() + if err != nil { + t.Fatal(err) + } + for _, account := range accounts { + err := am.DeleteAccount(account.Address, pass) + if err != nil { + t.Fatal(err) + } + } } diff --git a/crypto/key_store_plain.go b/crypto/key_store_plain.go index 6b76962a0b..4feb686ad9 100644 --- a/crypto/key_store_plain.go +++ b/crypto/key_store_plain.go @@ -126,8 +126,11 @@ func GetKeyAddresses(keysDirPath string) (addresses [][]byte, err error) { } addresses = make([][]byte, len(fileInfos)) for i, fileInfo := range fileInfos { - addresses[i] = make([]byte, 40) - addresses[i] = []byte(fileInfo.Name()) + address, err := hex.DecodeString(fileInfo.Name()) + if err != nil { + continue + } + addresses[i] = address } return addresses, err }