Files
2025-08-02 15:20:14 -05:00

127 lines
3.1 KiB
Go

// Copyright © 2019 Binance
//
// This file is part of Binance. The full Binance copyright notice, including
// terms governing use, modification, and redistribution, is contained in the
// file LICENSE at the root of the source code distribution tree.
package keygen
import (
"crypto/elliptic"
"math/big"
"github.com/luxfi/tss/v2/common"
"github.com/luxfi/tss/v2/crypto"
cmt "github.com/luxfi/tss/v2/crypto/commitments"
"github.com/luxfi/tss/v2/crypto/schnorr"
"github.com/luxfi/tss/v2/crypto/vss"
"github.com/luxfi/tss/v2/tss"
)
// These messages were generated from Protocol Buffers definitions into eddsa-keygen.pb.go
// The following messages are registered on the Protocol Buffers "wire"
var (
// Ensure that keygen messages implement ValidateBasic
_ = []tss.MessageContent{
(*KGRound1Message)(nil),
(*KGRound2Message1)(nil),
(*KGRound2Message2)(nil),
}
)
// ----- //
func NewKGRound1Message(from *tss.PartyID, ct cmt.HashCommitment) tss.ParsedMessage {
meta := tss.MessageRouting{
From: from,
IsBroadcast: true,
}
content := &KGRound1Message{
Commitment: ct.Bytes(),
}
msg := tss.NewMessageWrapper(meta, content)
return tss.NewMessage(meta, content, msg)
}
func (m *KGRound1Message) ValidateBasic() bool {
return m != nil && common.NonEmptyBytes(m.GetCommitment())
}
func (m *KGRound1Message) UnmarshalCommitment() *big.Int {
return new(big.Int).SetBytes(m.GetCommitment())
}
// ----- //
func NewKGRound2Message1(
to, from *tss.PartyID,
share *vss.Share,
) tss.ParsedMessage {
meta := tss.MessageRouting{
From: from,
To: []*tss.PartyID{to},
IsBroadcast: false,
}
content := &KGRound2Message1{
Share: share.Share.Bytes(),
}
msg := tss.NewMessageWrapper(meta, content)
return tss.NewMessage(meta, content, msg)
}
func (m *KGRound2Message1) ValidateBasic() bool {
return m != nil &&
common.NonEmptyBytes(m.GetShare())
}
func (m *KGRound2Message1) UnmarshalShare() *big.Int {
return new(big.Int).SetBytes(m.Share)
}
// ----- //
func NewKGRound2Message2(
from *tss.PartyID,
deCommitment cmt.HashDeCommitment,
proof *schnorr.ZKProof,
) tss.ParsedMessage {
meta := tss.MessageRouting{
From: from,
IsBroadcast: true,
}
dcBzs := common.BigIntsToBytes(deCommitment)
content := &KGRound2Message2{
DeCommitment: dcBzs,
ProofAlphaX: proof.Alpha.X().Bytes(),
ProofAlphaY: proof.Alpha.Y().Bytes(),
ProofT: proof.T.Bytes(),
}
msg := tss.NewMessageWrapper(meta, content)
return tss.NewMessage(meta, content, msg)
}
func (m *KGRound2Message2) ValidateBasic() bool {
return m != nil &&
common.NonEmptyMultiBytes(m.GetDeCommitment())
}
func (m *KGRound2Message2) UnmarshalDeCommitment() []*big.Int {
deComBzs := m.GetDeCommitment()
return cmt.NewHashDeCommitmentFromBytes(deComBzs)
}
func (m *KGRound2Message2) UnmarshalZKProof(ec elliptic.Curve) (*schnorr.ZKProof, error) {
point, err := crypto.NewECPoint(
ec,
new(big.Int).SetBytes(m.GetProofAlphaX()),
new(big.Int).SetBytes(m.GetProofAlphaY()))
if err != nil {
return nil, err
}
return &schnorr.ZKProof{
Alpha: point,
T: new(big.Int).SetBytes(m.GetProofT()),
}, nil
}