keys

package
v0.0.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jan 7, 2025 License: UNKNOWN, Apache-2.0, UNKNOWN not legal advice Imports: 0 Imported by: 0

Documentation

Index

Constants

View Source
const (
	// 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")
)

Variables

View Source
var (
	// ErrUnsupportedSigningAlgo is raised when the caller tries to use a
	// different signing scheme than secp256k1.
	ErrUnsupportedSigningAlgo = errors.New("unsupported signing algo: only secp256k1 is supported")

	// 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")
)
View Source
var Package = amino.RegisterPackage(amino.NewPackage(
	"github.com/gnolang/gno/tm2/pkg/crypto/keys",
	"tm.keys",
	amino.GetCallersDirname(),
).WithDependencies().WithTypes(
	localInfo{}, "LocalInfo",
	ledgerInfo{}, "LedgerInfo",
	offlineInfo{}, "OfflineInfo",
	multiInfo{}, "MultiInfo",
))

Functions

func ValidateMultisigThreshold

func ValidateMultisigThreshold(k, nKeys int) error

Types

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() crypto.Address
	// Bip44 Path
	GetPath() (*hd.BIP44Params, error)
}

Info is the publicly exposed information about a keypair

func NewMultiInfo

func NewMultiInfo(name string, pub crypto.PubKey) Info

NewMultiInfo creates a new multiInfo instance

type KeyType

type KeyType uint

KeyType reflects a human-readable type for key listing.

const (
	TypeLocal   KeyType = 0
	TypeLedger  KeyType = 1
	TypeOffline KeyType = 2
	TypeMulti   KeyType = 3
)

Info KeyTypes

func (KeyType) String

func (kt KeyType) String() string

String implements the stringer interface for KeyType.

type Keybase

type Keybase interface {
	// CRUD on the keystore
	List() ([]Info, error)
	HasByNameOrAddress(nameOrBech32 string) (bool, error)
	HasByName(name string) (bool, error)
	HasByAddress(address crypto.Address) (bool, error)
	GetByNameOrAddress(nameOrBech32 string) (Info, error)
	GetByName(name string) (Info, error)
	GetByAddress(address crypto.Address) (Info, error)
	Delete(name, passphrase string, skipPass bool) error

	// Sign some bytes, looking up the private key to use
	Sign(name, passphrase string, msg []byte) ([]byte, crypto.PubKey, error)
	Verify(name string, msg, sig []byte) error

	// CreateAccount creates an account based using the BIP44 path (44'/118'/{account}'/0/{index}
	// Encrypt the key to disk using encryptPasswd.
	// If an account exists with the same address but a different name, it is replaced by the new name.
	// See https://github.com/tendermint/classic/sdk/issues/2095
	CreateAccount(name, mnemonic, bip39Passwd, encryptPasswd string, account uint32, index uint32) (Info, error)

	// Like CreateAccount but from general bip44 params.
	// If an account exists with the same address but a different name, it is replaced by the new name.
	CreateAccountBip44(name, mnemonic, bip39Passwd, encryptPasswd string, params hd.BIP44Params) (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) (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)

	// Rotate replaces the encryption password for a given key
	Rotate(name, oldpass string, getNewpass func() (string, error)) error

	// ImportPrivKey imports the given private key into the keybase.
	// In all import operations, if an account exists with the same address but a different name, it is replaced by the new name
	ImportPrivKey(name string, key crypto.PrivKey, encryptPass string) error

	// ExportPrivKey exports the private key from the keybase. It *only* works on locally-stored keys
	ExportPrivKey(name string, decryptPass string) (crypto.PrivKey, error)

	// CloseDB closes the database.
	CloseDB()
}

Keybase exposes operations on a generic keystore

func NewDBKeybase

func NewDBKeybase(db dbm.DB) Keybase

NewDBKeybase creates a new keybase instance using the passed DB for reading and writing keys.

func NewInMemory

func NewInMemory() Keybase

NewInMemory creates a transient keybase on top of in-memory storage instance useful for testing purposes and on-the-fly key generation.

func NewKeyBaseFromDir

func NewKeyBaseFromDir(rootDir string) (Keybase, error)

NewKeyBaseFromDir initializes a keybase at a particular dir.

func NewLazyDBKeybase

func NewLazyDBKeybase(name, dir string) Keybase

New creates a new instance of a lazy keybase.

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 SigningAlgo

type SigningAlgo string

SigningAlgo defines an algorithm to derive key-pairs which can be used for cryptographic signing.

Directories

Path Synopsis

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL