OSDN Git Service

new repo
[bytom/vapor.git] / vendor / github.com / tendermint / go-crypto / keys / storage / memstorage / main.go
1 /*
2 package memstorage provides a simple in-memory key store designed for
3 use in test cases, particularly to isolate them from the filesystem,
4 concurrency, and cleanup issues.
5 */
6 package memstorage
7
8 import (
9         "github.com/pkg/errors"
10         keys "github.com/tendermint/go-crypto/keys"
11 )
12
13 type data struct {
14         info keys.Info
15         key  []byte
16 }
17
18 type MemStore map[string]data
19
20 // New creates an instance of file-based key storage with tight permissions
21 func New() MemStore {
22         return MemStore{}
23 }
24
25 // assert MemStore satisfies keys.Storage
26 var _ keys.Storage = MemStore{}
27
28 // Put adds the given key, returns an error if it another key
29 // is already stored under this name
30 func (s MemStore) Put(name string, key []byte, info keys.Info) error {
31         if _, ok := s[name]; ok {
32                 return errors.Errorf("Key named '%s' already exists", name)
33         }
34         s[name] = data{info, key}
35         return nil
36 }
37
38 // Get returns the key stored under the name, or returns an error if not present
39 func (s MemStore) Get(name string) ([]byte, keys.Info, error) {
40         var err error
41         d, ok := s[name]
42         if !ok {
43                 err = errors.Errorf("Key named '%s' doesn't exist", name)
44         }
45         return d.key, d.info.Format(), err
46 }
47
48 // List returns the public info of all keys in the MemStore in unsorted order
49 func (s MemStore) List() (keys.Infos, error) {
50         res := make([]keys.Info, len(s))
51         i := 0
52         for _, d := range s {
53                 res[i] = d.info.Format()
54                 i++
55         }
56         return res, nil
57 }
58
59 // Delete removes the named key from the MemStore, raising an error if it
60 // wasn't present yet.
61 func (s MemStore) Delete(name string) error {
62         _, ok := s[name]
63         if !ok {
64                 return errors.Errorf("Key named '%s' doesn't exist", name)
65         }
66         delete(s, name)
67         return nil
68 }