mirror of
https://github.com/SwingbyProtocol/tss-lib.git
synced 2026-01-11 06:48:22 -05:00
63 lines
1.8 KiB
Go
63 lines
1.8 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 (
|
|
"encoding/hex"
|
|
"math/big"
|
|
|
|
"github.com/binance-chain/tss-lib/crypto"
|
|
"github.com/binance-chain/tss-lib/tss"
|
|
)
|
|
|
|
type (
|
|
LocalSecrets struct {
|
|
// secret fields (not shared, but stored locally)
|
|
Xi, ShareID *big.Int // xi, kj
|
|
}
|
|
|
|
// Everything in LocalPartySaveData is saved locally to user's HD when done
|
|
LocalPartySaveData struct {
|
|
LocalSecrets
|
|
|
|
// original indexes (ki in signing preparation phase)
|
|
Ks []*big.Int
|
|
|
|
// public keys (Xj = uj*G for each Pj)
|
|
BigXj []*crypto.ECPoint // Xj
|
|
|
|
// the EdDSA public key
|
|
EDDSAPub *crypto.ECPoint // y
|
|
}
|
|
)
|
|
|
|
func NewLocalPartySaveData(partyCount int) (saveData LocalPartySaveData) {
|
|
saveData.Ks = make([]*big.Int, partyCount)
|
|
saveData.BigXj = make([]*crypto.ECPoint, partyCount)
|
|
return
|
|
}
|
|
|
|
// BuildLocalSaveDataSubset re-creates the LocalPartySaveData to contain data for only the list of signing parties.
|
|
func BuildLocalSaveDataSubset(sourceData LocalPartySaveData, sortedIDs tss.SortedPartyIDs) LocalPartySaveData {
|
|
keysToIndices := make(map[string]int, len(sourceData.Ks))
|
|
for j, kj := range sourceData.Ks {
|
|
keysToIndices[hex.EncodeToString(kj.Bytes())] = j
|
|
}
|
|
newData := NewLocalPartySaveData(sortedIDs.Len())
|
|
newData.LocalSecrets = sourceData.LocalSecrets
|
|
newData.EDDSAPub = sourceData.EDDSAPub
|
|
for j, id := range sortedIDs {
|
|
savedIdx, ok := keysToIndices[hex.EncodeToString(id.Key)]
|
|
if !ok {
|
|
panic("BuildLocalSaveDataSubset: unable to find a signer party in the local save data")
|
|
}
|
|
newData.Ks[j] = sourceData.Ks[savedIdx]
|
|
newData.BigXj[j] = sourceData.BigXj[savedIdx]
|
|
}
|
|
return newData
|
|
}
|