Files
tss-lib/eddsa/keygen/save_data.go
2021-12-14 07:54:27 +00:00

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
}