Lux Docs
Threshold

Threshold API Reference

RegisterScheme, GetScheme, SchemeAdapter, and QuickSign helpers

Registry Functions

RegisterScheme

func RegisterScheme(scheme Scheme)

Registers a threshold scheme. Call from init() in scheme packages. Panics if the scheme ID is already registered.

GetScheme

func GetScheme(id SchemeID) (Scheme, error)

Returns a registered scheme by ID. Returns ErrSchemeNotFound if not registered.

MustGetScheme

func MustGetScheme(id SchemeID) Scheme

Like GetScheme but panics on error. Use in initialization code where missing schemes are fatal.

ListSchemes

func ListSchemes() []SchemeID

Returns all registered scheme IDs.

HasScheme

func HasScheme(id SchemeID) bool

Returns true if the scheme is registered.

SchemeAdapter

Convenience wrapper that creates a Signer, Aggregator, and Verifier from a single KeyShare.

adapter, err := threshold.NewAdapter(keyShare)

// Sign
share, err := adapter.SignShare(ctx, message, signerIndices)

// Aggregate
sig, err := adapter.Aggregate(ctx, message, shares)

// Verify
valid := adapter.Verify(message, sig)

// Metadata
adapter.Index()       // Party index
adapter.Threshold()   // Signing threshold
adapter.SchemeID()    // Scheme identifier
adapter.GroupKey()    // Group public key

QuickSign

One-shot helper for when all signers are local (testing, single-machine setups).

qs, err := threshold.NewQuickSign(schemeID, groupKey, t)

// Sign with local signers and aggregate in one call
sig, err := qs.SignAndAggregate(ctx, message, signers)

// Verify
valid := qs.Verify(message, sig)

SignAndAggregate returns ErrInsufficientShares if fewer than t+1 signers are provided.

SchemeInfo

info, err := threshold.GetSchemeInfo(schemeID)

Returns metadata about a registered scheme:

FieldTypeDescription
IDSchemeIDScheme identifier
NamestringHuman-readable name
PostQuantumboolWhether scheme is quantum-resistant
NonInteractiveboolWhether aggregation needs no extra rounds
KeyShareSizeintSerialized key share size in bytes
SignatureSizeintFinal signature size in bytes

Errors

ErrorDescription
ErrSchemeNotFoundScheme ID not in registry
ErrInvalidThresholdThreshold less than 1
ErrInvalidPartyCountFewer than 2 parties
ErrThresholdTooHighThreshold >= total parties
ErrInvalidPartyIndexParty index out of range
ErrInsufficientSharesNot enough shares to aggregate

On this page