signer
Package signer
import "github.com/luxfi/node/vms/platformvm/signer"Types
Empty
func (*Empty) Key() *bls.PublicKeyfunc (*Empty) Verify() errorHybridProofOfPossession
HybridProofOfPossession combines BLS and Corona proofs of possession. This is REQUIRED for all Q-Chain validators to bind both classical and post-quantum keys to their validator identity.
Wire format:
- BLS PublicKey: 48 bytes (compressed)
- BLS ProofOfPossession: 96 bytes
- RT PublicKey: 1952 bytes (ML-DSA-65)
- RT ProofOfPossession: 3309 bytes (ML-DSA-65 signature)
func NewHybridProofOfPossession(
blsSigner bls.Signer,
rtPublicKey []byte,
rtSign func(msg []byte) ([]byte, error),
) (*HybridProofOfPossession, error)func (h *HybridProofOfPossession) HasRT() boolfunc (h *HybridProofOfPossession) Key() *bls.PublicKeyfunc (h *HybridProofOfPossession) MarshalJSON() ([]byte, error)func (h *HybridProofOfPossession) RTKey() []bytefunc (h *HybridProofOfPossession) UnmarshalJSON(b []byte) errorfunc (h *HybridProofOfPossession) ValidateForQChain() errorfunc (h *HybridProofOfPossession) Verify() errorHybridSigner
HybridSigner extends Signer with post-quantum Corona key support. This is the key material binding interface for Q-Chain validators.
NodeID X corresponds to:
- TLS pubkey A (staking certificate) - established during TLS handshake
- BLS pubkey B (aggregate signatures) - from ProofOfPossession
- RT pubkey C (post-quantum security) - from RTProofOfPossession
All three keys must be bound to the same validator identity for Q-Chain consensus to be secure against both classical and quantum attacks.
ProofOfPossession
func NewProofOfPossession(sk bls.Signer) (*ProofOfPossession, error)func (p *ProofOfPossession) Key() *bls.PublicKeyfunc (p *ProofOfPossession) MarshalJSON() ([]byte, error)func (p *ProofOfPossession) UnmarshalJSON(b []byte) errorfunc (p *ProofOfPossession) Verify() errorRTProofOfPossession
RTProofOfPossession proves ownership of a Corona (ML-DSA) keypair. This is REQUIRED for all Q-Chain validators.
Key material binding: NodeID X corresponds to:
- TLS pubkey A (staking certificate)
- BLS pubkey B (aggregate signatures)
- RT pubkey C (post-quantum security)
The RTProofOfPossession binds the RT public key to the validator identity by requiring a signature over the public key itself.
func NewRTProofOfPossession(publicKey []byte, sign func(msg []byte) ([]byte, error)) (*RTProofOfPossession, error)func (p *RTProofOfPossession) MarshalJSON() ([]byte, error)func (p *RTProofOfPossession) RTKey() []bytefunc (p *RTProofOfPossession) UnmarshalJSON(b []byte) errorfunc (p *RTProofOfPossession) Verify() errorRTSigner
RTSigner interface for Corona proof of possession