68 lines
1.4 KiB
Go
68 lines
1.4 KiB
Go
|
package keystore
|
||
|
|
||
|
import ci "gx/ipfs/QmTW4SdgBWq9GjsBsHeUx8WuGxzhgzAf88UMH2w62PC8yK/go-libp2p-crypto"
|
||
|
|
||
|
// MemKeystore is an in memory keystore implementation that is not persisted to
|
||
|
// any backing storage.
|
||
|
type MemKeystore struct {
|
||
|
keys map[string]ci.PrivKey
|
||
|
}
|
||
|
|
||
|
func NewMemKeystore() *MemKeystore {
|
||
|
return &MemKeystore{make(map[string]ci.PrivKey)}
|
||
|
}
|
||
|
|
||
|
// Has return whether or not a key exist in the Keystore
|
||
|
func (mk *MemKeystore) Has(name string) (bool, error) {
|
||
|
_, ok := mk.keys[name]
|
||
|
return ok, nil
|
||
|
}
|
||
|
|
||
|
// Put store a key in the Keystore
|
||
|
func (mk *MemKeystore) Put(name string, k ci.PrivKey) error {
|
||
|
if err := validateName(name); err != nil {
|
||
|
return err
|
||
|
}
|
||
|
|
||
|
_, ok := mk.keys[name]
|
||
|
if ok {
|
||
|
return ErrKeyExists
|
||
|
}
|
||
|
|
||
|
mk.keys[name] = k
|
||
|
return nil
|
||
|
}
|
||
|
|
||
|
// Get retrieve a key from the Keystore
|
||
|
func (mk *MemKeystore) Get(name string) (ci.PrivKey, error) {
|
||
|
if err := validateName(name); err != nil {
|
||
|
return nil, err
|
||
|
}
|
||
|
|
||
|
k, ok := mk.keys[name]
|
||
|
if !ok {
|
||
|
return nil, ErrNoSuchKey
|
||
|
}
|
||
|
|
||
|
return k, nil
|
||
|
}
|
||
|
|
||
|
// Delete remove a key from the Keystore
|
||
|
func (mk *MemKeystore) Delete(name string) error {
|
||
|
if err := validateName(name); err != nil {
|
||
|
return err
|
||
|
}
|
||
|
|
||
|
delete(mk.keys, name)
|
||
|
return nil
|
||
|
}
|
||
|
|
||
|
// List return a list of key identifier
|
||
|
func (mk *MemKeystore) List() ([]string, error) {
|
||
|
out := make([]string, 0, len(mk.keys))
|
||
|
for k := range mk.keys {
|
||
|
out = append(out, k)
|
||
|
}
|
||
|
return out, nil
|
||
|
}
|