Documentation ¶
Index ¶
- Constants
- Variables
- func CreateHDPath(account uint32, 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" BackendOS = "os" BackendKWallet = "kwallet" BackendPass = "pass" BackendTest = "test" )
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 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"` 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) (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() }
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.