73 lines
1.5 KiB
Go
73 lines
1.5 KiB
Go
package types
|
|
|
|
import (
|
|
"encoding/json"
|
|
"fmt"
|
|
|
|
"github.com/filecoin-project/go-state-types/crypto"
|
|
"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 (
|
|
KTBLS KeyType = "bls"
|
|
KTSecp256k1 KeyType = "secp256k1"
|
|
)
|
|
|
|
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 := crypto.SigType(b)
|
|
|
|
switch bst {
|
|
case crypto.SigTypeBLS:
|
|
*kt = KTBLS
|
|
case crypto.SigTypeSecp256k1:
|
|
*kt = KTSecp256k1
|
|
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
|
|
}
|