Documentation
¶
Overview ¶
Package ringtail provides post-quantum threshold signatures using Ring-LWE.
Signing is a 2-round protocol:
- Round 1: Each party broadcasts D matrix + MACs
- Round 2: Each party broadcasts z share
- Finalize: Any party aggregates into final signature
Fresh keygen runs each epoch when validator set changes.
Index ¶
Constants ¶
This section is empty.
Variables ¶
View Source
var ( ErrInvalidThreshold = errors.New("threshold must be > 0 and < total parties") ErrInvalidPartyCount = errors.New("need at least 2 parties") ErrInvalidPartyIndex = errors.New("party index out of range") ErrMACVerifyFailed = errors.New("MAC verification failed") ErrFullRankFailed = errors.New("full rank check failed") ErrInsufficientData = errors.New("insufficient round data") )
Functions ¶
func GenerateKeys ¶
GenerateKeys generates threshold key shares for n parties with threshold t. This runs once per epoch when the validator set changes.
Types ¶
type GroupKey ¶
type GroupKey struct {
A structs.Matrix[ring.Poly] // Public matrix
BTilde structs.Vector[ring.Poly] // Rounded public key
Params *Params
}
GroupKey holds the public parameters for the threshold group.
type Params ¶
type Params struct {
R *ring.Ring // Main ring with prime Q
RXi *ring.Ring // Rounding ring with QXi
RNu *ring.Ring // Rounding ring with QNu
}
Params holds ring parameters for the protocol.
type Round1Data ¶
Round1Data holds a party's Round 1 output.
type Round2Data ¶
Round2Data holds a party's Round 2 output.
type Signer ¶
type Signer struct {
// contains filtered or unexported fields
}
Signer handles threshold signing for a single party.
func (*Signer) Finalize ¶
func (s *Signer) Finalize(round2Data map[int]*Round2Data) (*Signature, error)
Finalize aggregates z shares into the final signature. Any party can call this with the collected Round 2 data.
Click to show internal directories.
Click to hide internal directories.