key

package
v1.21.35 Latest Latest
Warning

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

Go to latest
Published: Dec 12, 2025 License: BSD-3-Clause Imports: 30 Imported by: 0

Documentation

Overview

Package key provides hierarchical deterministic key derivation for all key types used in the Lux network: secp256k1 (EC), BLS, Ringtail, and ML-DSA.

Package key implements key manager and helper functions.

Index

Constants

View Source
const (
	// Key type subdirectories
	ECKeyDir       = "ec"    // secp256k1 keys for transaction signing
	BLSKeyDir      = "bls"   // BLS keys for consensus
	RingtailKeyDir = "rt"    // Ringtail keys for ring signatures
	MLDSAKeyDir    = "mldsa" // ML-DSA keys for post-quantum signatures

	// Key file names
	PrivateKeyFile = "private.key"
	PublicKeyFile  = "public.key"
	MnemonicFile   = "mnemonic.txt"

	// Domain separation strings for HKDF
	DomainEC       = "lux-ec-key"
	DomainBLS      = "lux-bls-key"
	DomainRingtail = "lux-ringtail-key"
	DomainMLDSA    = "lux-mldsa-key"
)
View Source
const (

	// LocalKeyName is the name of the local development key file
	LocalKeyName = "local-key"
	// LocalKeyPath is the path where the local key is stored
	LocalKeyPath = "~/.lux/keys/" + LocalKeyName + ".pk"

	EwoqPrivateKey = privKeyEncPfx + rawEwoqPk
)

Variables

View Source
var (
	ErrInvalidType = errors.New("invalid type")
	ErrCantSpend   = errors.New("can't spend")
)
View Source
var (
	ErrInvalidPrivateKey         = errors.New("invalid private key")
	ErrInvalidPrivateKeyLen      = errors.New("invalid private key length (expect 64 bytes in hex)")
	ErrInvalidPrivateKeyEnding   = errors.New("invalid private key ending")
	ErrInvalidPrivateKeyEncoding = errors.New("invalid private key encoding")
)

Functions

func DeleteKeySet added in v1.9.11

func DeleteKeySet(name string) error

DeleteKeySet removes a key set from the filesystem

func GenerateMnemonic added in v1.9.11

func GenerateMnemonic() (string, error)

GenerateMnemonic generates a new BIP39 mnemonic phrase

func GetHRP

func GetHRP(networkID uint32) string

func GetKeysDir added in v1.9.11

func GetKeysDir() (string, error)

GetKeysDir returns the base directory for all keys

func GetLocalKeyPath added in v1.9.8

func GetLocalKeyPath() string

GetLocalKeyPath returns the expanded path to the local key file

func GetLocalPrivateKey added in v1.9.8

func GetLocalPrivateKey() (*secp256k1.PrivateKey, error)

GetLocalPrivateKey returns the secp256k1 private key for local development. It loads from ~/.lux/keys/local-key.pk, generating a new key if needed.

func ListKeySets added in v1.9.11

func ListKeySets() ([]string, error)

ListKeySets lists all available key sets

func SaveKeySet added in v1.9.11

func SaveKeySet(keySet *HDKeySet) error

SaveKeySet saves all keys to the filesystem in organized subdirectories Structure: ~/.lux/keys/<name>/{ec,bls,rt,mldsa}/{private.key,public.key}

func SortTransferableInputsWithSigners

func SortTransferableInputsWithSigners(ins []*lux.TransferableInput, signers [][]ids.ShortID)

SortTransferableInputsWithSigners sorts the inputs and signers based on the input's utxo ID.

This is based off of (generics?): https://github.com/luxfi/node/blob/224c9fd23d41839201dd0275ac864a845de6e93e/vms/components/lux/transferables.go#L202

func ValidateMnemonic added in v1.9.11

func ValidateMnemonic(mnemonic string) bool

ValidateMnemonic validates a BIP39 mnemonic phrase

Types

type HDKeySet added in v1.9.11

type HDKeySet struct {
	Name     string
	Mnemonic string

	// secp256k1 (EC) keys
	ECPrivateKey []byte
	ECPublicKey  []byte
	ECAddress    string // Ethereum-style address (0x...)

	// BLS keys
	BLSPrivateKey []byte
	BLSPublicKey  []byte
	BLSPoP        []byte

	// Ringtail keys
	RingtailPrivateKey []byte
	RingtailPublicKey  []byte

	// ML-DSA keys
	MLDSAPrivateKey []byte
	MLDSAPublicKey  []byte
}

HDKeySet represents a complete set of keys derived from a single seed

func DeriveAllKeys added in v1.9.11

func DeriveAllKeys(name, mnemonic string) (*HDKeySet, error)

DeriveAllKeys derives all key types from a mnemonic phrase

func LoadKeySet added in v1.9.11

func LoadKeySet(name string) (*HDKeySet, error)

LoadKeySet loads all keys from the filesystem

type Key

type Key interface {
	// P returns all formatted P-Chain addresses.
	P() []string
	// C returns the C-Chain address in Ethereum format
	C() string
	// Addresses returns the all raw ids.ShortID address.
	Addresses() []ids.ShortID
	// Match attempts to match a list of addresses up to the provided threshold.
	Match(owners *secp256k1fx.OutputOwners, time uint64) ([]uint32, []ids.ShortID, bool)
	// Spend attempts to spend all specified UTXOs (outputs)
	// and returns the new UTXO inputs.
	//
	// If target amount is specified, it only uses the
	// outputs until the total spending is below the target
	// amount.
	Spends(outputs []*lux.UTXO, opts ...OpOption) (
		totalBalanceToSpend uint64,
		inputs []*lux.TransferableInput,
		signers [][]ids.ShortID,
	)
	// Sign generates [numSigs] signatures and attaches them to [pTx].
	Sign(pTx *txs.Tx, signers [][]ids.ShortID) error
}

Key defines methods for key manager interface.

type Op

type Op struct {
	// contains filtered or unexported fields
}

type OpOption

type OpOption func(*Op)

func WithFeeDeduct

func WithFeeDeduct(fee uint64) OpOption

To deduct transfer fee from total spend (output). e.g., "units.MilliLux" for X/P-Chain transfer.

func WithTargetAmount

func WithTargetAmount(ta uint64) OpOption

func WithTime

func WithTime(t uint64) OpOption

type SOp

type SOp struct {
	// contains filtered or unexported fields
}

type SOpOption

type SOpOption func(*SOp)

func WithPrivateKey

func WithPrivateKey(privKey *secp256k1.PrivateKey) SOpOption

To create a new key SoftKey with a pre-loaded private key.

func WithPrivateKeyEncoded

func WithPrivateKeyEncoded(privKey string) SOpOption

To create a new key SoftKey with a pre-defined private key.

type SoftKey

type SoftKey struct {
	// contains filtered or unexported fields
}

func GetOrCreateLocalKey added in v1.9.8

func GetOrCreateLocalKey(networkID uint32) (*SoftKey, error)

GetOrCreateLocalKey loads the local development key from ~/.lux/keys/local-key.pk, generating a new one if it doesn't exist. This is the secure replacement for the hardcoded EWOQ key.

func LoadSoft

func LoadSoft(networkID uint32, keyPath string) (*SoftKey, error)

LoadSoft loads the private key from disk and creates the corresponding SoftKey.

func NewSoft

func NewSoft(networkID uint32, opts ...SOpOption) (*SoftKey, error)

func (*SoftKey) Addresses

func (m *SoftKey) Addresses() []ids.ShortID

func (*SoftKey) C

func (m *SoftKey) C() string

func (*SoftKey) Encode

func (m *SoftKey) Encode() string

Returns the private key encoded in CB58 and "PrivateKey-" prefix.

func (*SoftKey) Key

func (m *SoftKey) Key() *secp256k1.PrivateKey

Returns the private key.

func (*SoftKey) KeyChain

func (m *SoftKey) KeyChain() *secp256k1fx.Keychain

Returns the KeyChain

func (*SoftKey) Match

func (m *SoftKey) Match(owners *secp256k1fx.OutputOwners, time uint64) ([]uint32, []ids.ShortID, bool)

func (*SoftKey) P

func (m *SoftKey) P() []string

func (*SoftKey) PrivKeyHex

func (m *SoftKey) PrivKeyHex() string

func (*SoftKey) PrivateKeyRaw

func (m *SoftKey) PrivateKeyRaw() string

PrivateKeyRaw returns the private key in hex format

func (*SoftKey) Raw

func (m *SoftKey) Raw() []byte

Returns the private key in raw bytes.

func (*SoftKey) Save

func (m *SoftKey) Save(p string) error

Saves the private key to disk with hex encoding.

func (*SoftKey) Sign

func (m *SoftKey) Sign(pTx *txs.Tx, signers [][]ids.ShortID) error

func (*SoftKey) Spends

func (m *SoftKey) Spends(outputs []*lux.UTXO, opts ...OpOption) (
	totalBalanceToSpend uint64,
	inputs []*lux.TransferableInput,
	signers [][]ids.ShortID,
)

func (*SoftKey) X

func (m *SoftKey) X() []string

X returns the X-Chain addresses (as a slice for compatibility)

Jump to

Keyboard shortcuts

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