dione/types/keystore.go

69 lines
1.4 KiB
Go

package types
import (
"encoding/json"
"fmt"
"github.com/sirupsen/logrus"
)
var (
ErrKeyInfoNotFound = fmt.Errorf("key info not found")
ErrKeyExists = fmt.Errorf("key already exists")
)
// KeyType defines a type of a key
type KeyType string
const (
KTEd25519 KeyType = "ed25519"
)
func (kt *KeyType) UnmarshalJSON(bb []byte) error {
{
// first option, try unmarshaling as string
var s string
err := json.Unmarshal(bb, &s)
if err == nil {
*kt = KeyType(s)
return nil
}
}
{
var b byte
err := json.Unmarshal(bb, &b)
if err != nil {
return fmt.Errorf("could not unmarshal KeyType either as string nor integer: %w", err)
}
bst := SigType(b)
switch bst {
case SigTypeEd25519:
*kt = KTEd25519
default:
return fmt.Errorf("unknown sigtype: %d", bst)
}
logrus.Warn("deprecation: integer style 'KeyType' is deprecated, switch to string style")
return nil
}
}
// KeyInfo is used for storing keys in KeyStore
type KeyInfo struct {
Type KeyType
PrivateKey []byte
}
// KeyStore is used for storing secret keys
type KeyStore interface {
// List lists all the keys stored in the KeyStore
List() ([]string, error)
// Get gets a key out of keystore and returns KeyInfo corresponding to named key
Get(string) (KeyInfo, error)
// Put saves a key info under given name
Put(string, KeyInfo) error
// Delete removes a key from keystore
Delete(string) error
}