OSDN Git Service

new repo
[bytom/vapor.git] / vendor / github.com / tendermint / go-crypto / keys / cryptostore / enc_storage.go
1 package cryptostore
2
3 import (
4         crypto "github.com/tendermint/go-crypto"
5         keys "github.com/tendermint/go-crypto/keys"
6 )
7
8 // encryptedStorage needs passphrase to get private keys
9 type encryptedStorage struct {
10         coder Encoder
11         store keys.Storage
12 }
13
14 func (es encryptedStorage) Put(name, pass string, key crypto.PrivKey) error {
15         secret, err := es.coder.Encrypt(key, pass)
16         if err != nil {
17                 return err
18         }
19
20         ki := info(name, key)
21         return es.store.Put(name, secret, ki)
22 }
23
24 func (es encryptedStorage) Get(name, pass string) (crypto.PrivKey, keys.Info, error) {
25         secret, info, err := es.store.Get(name)
26         if err != nil {
27                 return crypto.PrivKey{}, info, err
28         }
29         key, err := es.coder.Decrypt(secret, pass)
30         return key, info, err
31 }
32
33 func (es encryptedStorage) List() (keys.Infos, error) {
34         return es.store.List()
35 }
36
37 func (es encryptedStorage) Delete(name string) error {
38         return es.store.Delete(name)
39 }
40
41 // info hardcodes the encoding of keys
42 func info(name string, key crypto.PrivKey) keys.Info {
43         pub := key.PubKey()
44         return keys.Info{
45                 Name:    name,
46                 Address: pub.Address(),
47                 PubKey:  pub,
48         }
49 }