mirror of
https://github.com/luxfi/tss.git
synced 2026-10-30 15:14:51 +00:00
171 lines
3.9 KiB
Go
171 lines
3.9 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 resharing
|
|
|
|
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/vss"
|
|
"github.com/luxfi/tss/v2/tss"
|
|
)
|
|
|
|
// These messages were generated from Protocol Buffers definitions into eddsa-resharing.pb.go
|
|
|
|
var (
|
|
// Ensure that signing messages implement ValidateBasic
|
|
_ = []tss.MessageContent{
|
|
(*DGRound1Message)(nil),
|
|
(*DGRound2Message)(nil),
|
|
(*DGRound3Message1)(nil),
|
|
(*DGRound3Message2)(nil),
|
|
(*DGRound4Message)(nil),
|
|
}
|
|
)
|
|
|
|
// ----- //
|
|
|
|
func NewDGRound1Message(
|
|
to []*tss.PartyID,
|
|
from *tss.PartyID,
|
|
eddsaPub *crypto.ECPoint,
|
|
vct cmt.HashCommitment,
|
|
) tss.ParsedMessage {
|
|
meta := tss.MessageRouting{
|
|
From: from,
|
|
To: to,
|
|
IsBroadcast: true,
|
|
IsToOldCommittee: false,
|
|
}
|
|
content := &DGRound1Message{
|
|
EddsaPubX: eddsaPub.X().Bytes(),
|
|
EddsaPubY: eddsaPub.Y().Bytes(),
|
|
VCommitment: vct.Bytes(),
|
|
}
|
|
msg := tss.NewMessageWrapper(meta, content)
|
|
return tss.NewMessage(meta, content, msg)
|
|
}
|
|
|
|
func (m *DGRound1Message) ValidateBasic() bool {
|
|
return m != nil &&
|
|
common.NonEmptyBytes(m.EddsaPubX) &&
|
|
common.NonEmptyBytes(m.EddsaPubY) &&
|
|
common.NonEmptyBytes(m.VCommitment)
|
|
}
|
|
|
|
func (m *DGRound1Message) UnmarshalEDDSAPub(ec elliptic.Curve) (*crypto.ECPoint, error) {
|
|
return crypto.NewECPoint(
|
|
ec,
|
|
new(big.Int).SetBytes(m.EddsaPubX),
|
|
new(big.Int).SetBytes(m.EddsaPubY))
|
|
}
|
|
|
|
func (m *DGRound1Message) UnmarshalVCommitment() *big.Int {
|
|
return new(big.Int).SetBytes(m.GetVCommitment())
|
|
}
|
|
|
|
// ----- //
|
|
|
|
func NewDGRound2Message(
|
|
to []*tss.PartyID,
|
|
from *tss.PartyID,
|
|
) tss.ParsedMessage {
|
|
meta := tss.MessageRouting{
|
|
From: from,
|
|
To: to,
|
|
IsBroadcast: true,
|
|
IsToOldCommittee: true,
|
|
}
|
|
content := &DGRound2Message{}
|
|
msg := tss.NewMessageWrapper(meta, content)
|
|
return tss.NewMessage(meta, content, msg)
|
|
}
|
|
|
|
func (m *DGRound2Message) ValidateBasic() bool {
|
|
return true
|
|
}
|
|
|
|
// ----- //
|
|
|
|
func NewDGRound3Message1(
|
|
to *tss.PartyID,
|
|
from *tss.PartyID,
|
|
share *vss.Share,
|
|
) tss.ParsedMessage {
|
|
meta := tss.MessageRouting{
|
|
From: from,
|
|
To: []*tss.PartyID{to},
|
|
IsBroadcast: false,
|
|
IsToOldCommittee: false,
|
|
}
|
|
content := &DGRound3Message1{
|
|
Share: share.Share.Bytes(),
|
|
}
|
|
msg := tss.NewMessageWrapper(meta, content)
|
|
return tss.NewMessage(meta, content, msg)
|
|
}
|
|
|
|
func (m *DGRound3Message1) ValidateBasic() bool {
|
|
return m != nil &&
|
|
common.NonEmptyBytes(m.Share)
|
|
}
|
|
|
|
// ----- //
|
|
|
|
func NewDGRound3Message2(
|
|
to []*tss.PartyID,
|
|
from *tss.PartyID,
|
|
vdct cmt.HashDeCommitment,
|
|
) tss.ParsedMessage {
|
|
meta := tss.MessageRouting{
|
|
From: from,
|
|
To: to,
|
|
IsBroadcast: true,
|
|
IsToOldCommittee: false,
|
|
}
|
|
vDctBzs := common.BigIntsToBytes(vdct)
|
|
content := &DGRound3Message2{
|
|
VDecommitment: vDctBzs,
|
|
}
|
|
msg := tss.NewMessageWrapper(meta, content)
|
|
return tss.NewMessage(meta, content, msg)
|
|
}
|
|
|
|
func (m *DGRound3Message2) ValidateBasic() bool {
|
|
return m != nil &&
|
|
common.NonEmptyMultiBytes(m.VDecommitment)
|
|
}
|
|
|
|
func (m *DGRound3Message2) UnmarshalVDeCommitment() cmt.HashDeCommitment {
|
|
deComBzs := m.GetVDecommitment()
|
|
return cmt.NewHashDeCommitmentFromBytes(deComBzs)
|
|
}
|
|
|
|
// ----- //
|
|
|
|
func NewDGRound4Message(
|
|
to []*tss.PartyID,
|
|
from *tss.PartyID,
|
|
) tss.ParsedMessage {
|
|
meta := tss.MessageRouting{
|
|
From: from,
|
|
To: to,
|
|
IsBroadcast: true,
|
|
IsToOldAndNewCommittees: true,
|
|
}
|
|
content := &DGRound4Message{}
|
|
msg := tss.NewMessageWrapper(meta, content)
|
|
return tss.NewMessage(meta, content, msg)
|
|
}
|
|
|
|
func (m *DGRound4Message) ValidateBasic() bool {
|
|
return true
|
|
}
|