docs/signer/keys/key_db.go

63 lines
1.4 KiB
Go

package keys
import (
pb "github.com/docker/notary/proto"
"github.com/endophage/gotuf/data"
)
// KeyDB represents an in-memory key keystore
type KeyDB struct {
keys map[string]data.Key
}
// CreateKey is needed to implement KeyManager. Returns an empty key.
func (db *KeyDB) CreateKey() (*pb.PublicKey, error) {
k := &pb.PublicKey{}
return k, nil
}
// AddKey Adds a new key to the database
func (db *KeyDB) AddKey(key data.Key) error {
if _, ok := db.keys[key.ID()]; ok {
return ErrExists
}
db.keys[key.ID()] = key
return nil
}
// GetKey returns the private bits of a key
func (db *KeyDB) GetKey(keyID *pb.KeyID) (data.Key, error) {
if key, ok := db.keys[keyID.ID]; ok {
return key, nil
}
return nil, ErrInvalidKeyID
}
// DeleteKey deletes the keyID from the database
func (db *KeyDB) DeleteKey(keyID *pb.KeyID) (*pb.Void, error) {
_, err := db.GetKey(keyID)
if err != nil {
return nil, err
}
delete(db.keys, keyID.ID)
return nil, nil
}
// KeyInfo returns the public bits of a key, given a specific keyID
func (db *KeyDB) KeyInfo(keyID *pb.KeyID) (*pb.PublicKey, error) {
key, err := db.GetKey(keyID)
if err != nil {
return nil, err
}
return &pb.PublicKey{KeyInfo: &pb.KeyInfo{KeyID: keyID, Algorithm: &pb.Algorithm{Algorithm: key.Algorithm().String()}}, PublicKey: key.Public()}, nil
}
// NewKeyDB returns an instance of KeyDB
func NewKeyDB() *KeyDB {
return &KeyDB{
keys: make(map[string]data.Key),
}
}