Documentation
¶
Index ¶
- Constants
- Variables
- func CreateHDPath(account uint32, index uint32) *hd.BIP44Params
- func CreateHDPathEx(cointype, account, index uint32) *hd.BIP44Params
- func IsSupportedAlgorithm(supported []SigningAlgo, algo SigningAlgo) bool
- func RegisterCodec(cdc *codec.Codec)
- func SecpDeriveKey(mnemonic string, bip39Passphrase, hdPath string) ([]byte, error)
- func SecpPrivKeyGen(bz []byte) tmcrypto.PrivKey
- func StdDeriveKey(mnemonic string, bip39Passphrase, hdPath string, algo SigningAlgo) ([]byte, error)
- func StdPrivKeyGen(bz []byte, algo SigningAlgo) (tmcrypto.PrivKey, error)
- type DeriveKeyFunc
- type Info
- type KeyOutput
- type KeyType
- type Keybase
- type KeybaseOption
- type Language
- type PrivKeyGenFunc
- type SigningAlgo
Examples ¶
Constants ¶
const ( BackendFile = "file" BackendFileForRPC = "file4rpc" BackendOS = "os" BackendKWallet = "kwallet" BackendPass = "pass" BackendTest = "test" BackendMemory = "memory" )
const ( // MultiAlgo implies that a pubkey is a multisignature MultiAlgo = SigningAlgo("multi") // Secp256k1 uses the Bitcoin secp256k1 ECDSA parameters. Secp256k1 = SigningAlgo("secp256k1") // Ed25519 represents the Ed25519 signature system. // It is currently not supported for end-user keys (wallets/ledgers). Ed25519 = SigningAlgo("ed25519") // Sr25519 represents the Sr25519 signature system. Sr25519 = SigningAlgo("sr25519") )
const (
// used for deriving seed from mnemonic
DefaultBIP39Passphrase = ""
)
Variables ¶
var ( // ErrUnsupportedSigningAlgo is raised when the caller tries to use a // different signing scheme than secp256k1. ErrUnsupportedSigningAlgo = errors.New("unsupported signing algo") // ErrUnsupportedLanguage is raised when the caller tries to use a // different language than english for creating a mnemonic sentence. ErrUnsupportedLanguage = errors.New("unsupported language: only english is supported") )
var CryptoCdc *codec.Codec
CryptoCdc defines the codec required for keys and info
Functions ¶
func CreateHDPath ¶
func CreateHDPath(account uint32, index uint32) *hd.BIP44Params
CreateHDPath returns BIP 44 object from account and index parameters.
func CreateHDPathEx ¶
func CreateHDPathEx(cointype, account, index uint32) *hd.BIP44Params
CreateHDPath returns BIP 44 object from account and index parameters.
func IsSupportedAlgorithm ¶
func IsSupportedAlgorithm(supported []SigningAlgo, algo SigningAlgo) bool
IsSupportedAlgorithm returns whether the signing algorithm is in the passed-in list of supported algorithms.
func RegisterCodec ¶
RegisterCodec registers concrete types and interfaces on the given codec.
func SecpDeriveKey ¶
SecpDeriveKey derives and returns the secp256k1 private key for the given seed and HD path.
func SecpPrivKeyGen ¶
SecpPrivKeyGen generates a secp256k1 private key from the given bytes
func StdDeriveKey ¶
func StdDeriveKey(mnemonic string, bip39Passphrase, hdPath string, algo SigningAlgo) ([]byte, error)
StdDeriveKey is the default DeriveKey function in the keybase. For now, it only supports Secp256k1
func StdPrivKeyGen ¶
func StdPrivKeyGen(bz []byte, algo SigningAlgo) (tmcrypto.PrivKey, error)
StdPrivKeyGen is the default PrivKeyGen function in the keybase. For now, it only supports Secp256k1
Types ¶
type DeriveKeyFunc ¶
type DeriveKeyFunc func(mnemonic string, bip39Passphrase, hdPath string, algo SigningAlgo) ([]byte, error)
DeriveKeyFunc defines the function to derive a new key from a seed and hd path
type Info ¶
type Info interface {
// Human-readable type for key listing
GetType() KeyType
// Name of the key
GetName() string
// Public key
GetPubKey() crypto.PubKey
// Address
GetAddress() types.AccAddress
// Bip44 Path
GetPath() (*hd.BIP44Params, error)
// Algo
GetAlgo() SigningAlgo
}
Info is the publicly exposed information about a keypair
type KeyOutput ¶
type KeyOutput struct {
Name string `json:"name" yaml:"name"`
Type string `json:"type" yaml:"type"`
Address string `json:"address" yaml:"address"`
EthAddress string `json:"eth_address" yaml:"eth_address"`
OperAddress string `json:"oper_address" yaml:"oper_address"`
PubKey string `json:"pubkey" yaml:"pubkey"`
Mnemonic string `json:"mnemonic,omitempty" yaml:"mnemonic"`
Threshold uint `json:"threshold,omitempty" yaml:"threshold"`
PubKeys []multisigPubKeyOutput `json:"pubkeys,omitempty" yaml:"pubkeys"`
}
KeyOutput defines a structure wrapping around an Info object used for output functionality.
func Bech32ConsKeyOutput ¶
Bech32ConsKeyOutput create a KeyOutput in with "cons" Bech32 prefixes.
func Bech32KeyOutput ¶
Bech32KeyOutput create a KeyOutput in with "acc" Bech32 prefixes. If the public key is a multisig public key, then the threshold and constituent public keys will be added.
func Bech32KeysOutput ¶
Bech32KeysOutput returns a slice of KeyOutput objects, each with the "acc" Bech32 prefixes, given a slice of Info objects. It returns an error if any call to Bech32KeyOutput fails.
func Bech32ValKeyOutput ¶
Bech32ValKeyOutput create a KeyOutput in with "val" Bech32 prefixes.
func NewKeyOutput ¶
NewKeyOutput creates a default KeyOutput instance without Mnemonic, Threshold and PubKeys
type KeyType ¶
type KeyType uint
KeyType reflects a human-readable type for key listing.
type Keybase ¶
type Keybase interface {
// CRUD on the keystore
List() ([]Info, error)
// Get returns the public information about one key.
Get(name string) (Info, error)
// Get performs a by-address lookup and returns the public
// information about one key if there's any.
GetByAddress(address types.AccAddress) (Info, error)
// Delete removes a key.
Delete(name, passphrase string, skipPass bool) error
// Sign bytes, looking up the private key to use.
Sign(name, passphrase string, msg []byte) ([]byte, crypto.PubKey, error)
// CreateMnemonic generates a new mnemonic, derives a hierarchical deterministic
// key from that. and persists it to storage, encrypted using the provided password.
// It returns the generated mnemonic and the key Info. It returns an error if it fails to
// generate a key for the given algo type, or if another key is already stored under the
// same name.
CreateMnemonic(name string, language Language, passwd string, algo SigningAlgo, mnemonic string) (info Info, seed string, err error)
// CreateAccount converts a mnemonic to a private key and BIP 32 HD Path
// and persists it, encrypted with the given password.
CreateAccount(name, mnemonic, bip39Passwd, encryptPasswd, hdPath string, algo SigningAlgo) (Info, error)
// CreateLedger creates, stores, and returns a new Ledger key reference
CreateLedger(name string, algo SigningAlgo, hrp string, account, index uint32) (info Info, err error)
// CreateOffline creates, stores, and returns a new offline key reference
CreateOffline(name string, pubkey crypto.PubKey, algo SigningAlgo) (info Info, err error)
// CreateMulti creates, stores, and returns a new multsig (offline) key reference
CreateMulti(name string, pubkey crypto.PubKey) (info Info, err error)
// The following operations will *only* work on locally-stored keys
Update(name, oldpass string, getNewpass func() (string, error)) error
// Import imports ASCII armored Info objects.
Import(name string, armor string) (err error)
// ImportPrivKey imports a private key in ASCII armor format.
// It returns an error if a key with the same name exists or a wrong encryption passphrase is
// supplied.
ImportPrivKey(name, armor, passphrase string) error
// ImportPubKey imports ASCII-armored public keys.
// Store a new Info object holding a public key only, i.e. it will
// not be possible to sign with it as it lacks the secret key.
ImportPubKey(name string, armor string) (err error)
// Export exports an Info object in ASCII armored format.
Export(name string) (armor string, err error)
// ExportPubKey returns public keys in ASCII armored format.
// Retrieve a Info object by its name and return the public key in
// a portable format.
ExportPubKey(name string) (armor string, err error)
// ExportPrivKey returns a private key in ASCII armored format.
// It returns an error if the key does not exist or a wrong encryption passphrase is supplied.
ExportPrivKey(name, decryptPassphrase, encryptPassphrase string) (armor string, err error)
// ExportPrivateKeyObject *only* works on locally-stored keys. Temporary method until we redo the exporting API
ExportPrivateKeyObject(name string, passphrase string) (crypto.PrivKey, error)
// SupportedAlgos returns a list of signing algorithms supported by the keybase
SupportedAlgos() []SigningAlgo
// SupportedAlgosLedger returns a list of signing algorithms supported by the keybase's ledger integration
SupportedAlgosLedger() []SigningAlgo
// CloseDB closes the database.
CloseDB()
//FileDir show where keybase storage a new key
FileDir() (string, error)
}
Keybase exposes operations on a generic keystore
func New ¶
func New(name, dir string, opts ...KeybaseOption) Keybase
New creates a new instance of a lazy keybase.
Example ¶
// Select the encryption and storage for your cryptostore
customKeyGenFunc := func(bz []byte, algo SigningAlgo) (crypto.PrivKey, error) {
var bzArr [32]byte
copy(bzArr[:], bz)
return secp256k1.PrivKeySecp256k1(bzArr), nil
}
cstore := NewInMemory(WithKeygenFunc(customKeyGenFunc))
sec := Secp256k1
// Add keys and see they return in alphabetical order
bob, _, err := cstore.CreateMnemonic("Bob", English, "friend", sec, "")
if err != nil {
// this should never happen
fmt.Println(err)
} else {
// return info here just like in List
fmt.Println(bob.GetName())
}
_, _, _ = cstore.CreateMnemonic("Alice", English, "secret", sec, "")
_, _, _ = cstore.CreateMnemonic("Carl", English, "mitm", sec, "")
info, _ := cstore.List()
for _, i := range info {
fmt.Println(i.GetName())
}
// We need to use passphrase to generate a signature
tx := []byte("deadbeef")
sig, pub, err := cstore.Sign("Bob", "friend", tx)
if err != nil {
fmt.Println("don't accept real passphrase")
}
// and we can validate the signature with publicly available info
binfo, _ := cstore.Get("Bob")
if !binfo.GetPubKey().Equals(bob.GetPubKey()) {
fmt.Println("Get and Create return different keys")
}
if pub.Equals(binfo.GetPubKey()) {
fmt.Println("signed by Bob")
}
if !pub.VerifyBytes(tx, sig) {
fmt.Println("invalid signature")
}
Output: Bob Alice Bob Carl signed by Bob
func NewInMemory ¶
func NewInMemory(opts ...KeybaseOption) Keybase
NewInMemory creates a transient keybase on top of in-memory storage instance useful for testing purposes and on-the-fly key generation. Keybase options can be applied when generating this new Keybase.
func NewKeyring ¶
func NewKeyring( appName, backend, rootDir string, userInput io.Reader, opts ...KeybaseOption, ) (Keybase, error)
NewKeyring creates a new instance of a keyring. Keybase options can be applied when generating this new Keybase. Available backends are "os", "file", "test".
type KeybaseOption ¶
type KeybaseOption func(*kbOptions)
KeybaseOption overrides options for the db
func WithDeriveFunc ¶
func WithDeriveFunc(f DeriveKeyFunc) KeybaseOption
WithDeriveFunc applies an overridden key derivation function to generate the private key.
func WithKeygenFunc ¶
func WithKeygenFunc(f PrivKeyGenFunc) KeybaseOption
WithKeygenFunc applies an overridden key generation function to generate the private key.
func WithSupportedAlgos ¶
func WithSupportedAlgos(algos []SigningAlgo) KeybaseOption
WithSupportedAlgos defines the list of accepted SigningAlgos.
func WithSupportedAlgosLedger ¶
func WithSupportedAlgosLedger(algos []SigningAlgo) KeybaseOption
WithSupportedAlgosLedger defines the list of accepted SigningAlgos compatible with Ledger.
type Language ¶
type Language int
Language is a language to create the BIP 39 mnemonic in. Currently, only english is supported though. Find a list of all supported languages in the BIP 39 spec (word lists).
const ( // English is the default language to create a mnemonic. // It is the only supported language by this package. English Language = iota + 1 // Japanese is currently not supported. Japanese // Korean is currently not supported. Korean // Spanish is currently not supported. Spanish // ChineseSimplified is currently not supported. ChineseSimplified // ChineseTraditional is currently not supported. ChineseTraditional // French is currently not supported. French // Italian is currently not supported. Italian )
noinspection ALL
type PrivKeyGenFunc ¶
type PrivKeyGenFunc func(bz []byte, algo SigningAlgo) (crypto.PrivKey, error)
PrivKeyGenFunc defines the function to convert derived key bytes to a tendermint private key
type SigningAlgo ¶
type SigningAlgo string
SigningAlgo defines an algorithm to derive key-pairs which can be used for cryptographic signing.