Skip to content

Commit

Permalink
improve loading keygen data from file
Browse files Browse the repository at this point in the history
  • Loading branch information
zargarzadehm committed Jan 1, 2025
1 parent 54dd132 commit 3484619
Show file tree
Hide file tree
Showing 6 changed files with 147 additions and 107 deletions.
8 changes: 4 additions & 4 deletions services/tss-api/app/rosenTss.go
Original file line number Diff line number Diff line change
Expand Up @@ -202,25 +202,25 @@ func (r *rosenTss) StartNewSign(signMessage models.SignMessage) error {
func (r *rosenTss) GetPublicKey(pkData models.GetPublicKey) (string, error) {
switch pkData.Crypto {
case models.EDDSA:
tssConfigEDDSA, _, err := r.GetStorage().LoadEDDSAKeygen(r.GetPeerHome(), r.GetP2pId())
eddsaKeygenData, err := r.GetStorage().LoadEDDSAKeygen(r.GetPeerHome(), r.GetP2pId())
if err != nil {
logging.Error(err)
return "", err
}
pub := tssConfigEDDSA.KeygenData.EDDSAPub
pub := eddsaKeygenData.TssConfig.KeygenData.EDDSAPub
compressedPublicKey := utils.GetPKFromEDDSAPub(pub.X(), pub.Y())
encodedPK := hex.EncodeToString(compressedPublicKey)
return encodedPK, nil
case models.ECDSA:
if len(pkData.DerivationPath) == 0 {
return "", fmt.Errorf(models.WrongDerivationPathError)
}
tssConfigECDSA, _, err := r.GetStorage().LoadECDSAKeygen(r.GetPeerHome(), r.GetP2pId())
ecdsaKeygenData, err := r.GetStorage().LoadECDSAKeygen(r.GetPeerHome(), r.GetP2pId())
if err != nil {
logging.Error(err)
return "", err
}
_, extendedChildPk, err := ecdsaSign.DerivingPubkeyFromPath(tssConfigECDSA.KeygenData.ECDSAPub, []byte(pkData.ChainCode), pkData.DerivationPath, tss.S256())
_, extendedChildPk, err := ecdsaSign.DerivingPubkeyFromPath(ecdsaKeygenData.TssConfig.KeygenData.ECDSAPub, []byte(pkData.ChainCode), pkData.DerivationPath, tss.S256())
if err != nil {
return "", err
}
Expand Down
10 changes: 5 additions & 5 deletions services/tss-api/app/sign/ecdsa/ecdsa.go
Original file line number Diff line number Diff line change
Expand Up @@ -245,18 +245,18 @@ func (h *handler) StartParty(
func (h *handler) LoadData(rosenTss _interface.RosenTss) (*tss.PartyID, error) {
_, err1 := rosenTss.GetMetaData(models.ECDSA)
if h.savedData.ShareID == nil || (err1 != nil && err1.Error() == models.ECDSANoMetaDataFoundError) {
data, pID, err := rosenTss.GetStorage().LoadECDSAKeygen(rosenTss.GetPeerHome(), rosenTss.GetP2pId())
data, err := rosenTss.GetStorage().LoadECDSAKeygen(rosenTss.GetPeerHome(), rosenTss.GetP2pId())
if err != nil {
logging.Error(err)
return nil, err
}
if pID == nil {
if data.PartyID == nil {
logging.Error("pID is nil")
return nil, fmt.Errorf("pID is nil")
}
h.savedData = data.KeygenData
h.pID = pID
err = rosenTss.SetMetaData(data.MetaData, models.ECDSA)
h.savedData = data.TssConfig.KeygenData
h.pID = data.PartyID
err = rosenTss.SetMetaData(data.TssConfig.MetaData, models.ECDSA)
if err != nil {
return nil, err
}
Expand Down
10 changes: 5 additions & 5 deletions services/tss-api/app/sign/eddsa/eddsa.go
Original file line number Diff line number Diff line change
Expand Up @@ -215,18 +215,18 @@ func (h *handler) StartParty(
func (h *handler) LoadData(rosenTss _interface.RosenTss) (*tss.PartyID, error) {
_, err1 := rosenTss.GetMetaData(models.EDDSA)
if h.savedData.ShareID == nil || (err1 != nil && err1.Error() == models.EDDSANoMetaDataFoundError) {
data, pID, err := rosenTss.GetStorage().LoadEDDSAKeygen(rosenTss.GetPeerHome(), rosenTss.GetP2pId())
data, err := rosenTss.GetStorage().LoadEDDSAKeygen(rosenTss.GetPeerHome(), rosenTss.GetP2pId())
if err != nil {
logging.Error(err)
return nil, err
}
if pID == nil {
if data.PartyID == nil {
logging.Error("pID is nil")
return nil, fmt.Errorf("pID is nil")
}
h.savedData = data.KeygenData
h.pID = pID
err = rosenTss.SetMetaData(data.MetaData, models.EDDSA)
h.savedData = data.TssConfig.KeygenData
h.pID = data.PartyID
err = rosenTss.SetMetaData(data.TssConfig.MetaData, models.EDDSA)
if err != nil {
return nil, err
}
Expand Down
8 changes: 4 additions & 4 deletions services/tss-api/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -99,23 +99,23 @@ func main() {
}

// setting up meta data if exist for eddsa
eddsaMetaData, _, err := tss.GetStorage().LoadEDDSAKeygen(tss.GetPeerHome(), tss.GetP2pId())
eddsaKeygenData, err := tss.GetStorage().LoadEDDSAKeygen(tss.GetPeerHome(), tss.GetP2pId())
if err != nil {
logging.Warn(err)
}

err = tss.SetMetaData(eddsaMetaData.MetaData, models.EDDSA)
err = tss.SetMetaData(eddsaKeygenData.TssConfig.MetaData, models.EDDSA)
if err != nil {
logging.Warn(models.EDDSANoMetaDataFoundError)
}

// setting up meta data if exist for ecdsa
ecdsaMetaData, _, err := tss.GetStorage().LoadECDSAKeygen(tss.GetPeerHome(), tss.GetP2pId())
ecdsaKeygenData, err := tss.GetStorage().LoadECDSAKeygen(tss.GetPeerHome(), tss.GetP2pId())
if err != nil {
logging.Warn(err)
}

err = tss.SetMetaData(ecdsaMetaData.MetaData, models.ECDSA)
err = tss.SetMetaData(ecdsaKeygenData.TssConfig.MetaData, models.ECDSA)
if err != nil {
logging.Warn(models.ECDSANoMetaDataFoundError)
}
Expand Down
22 changes: 22 additions & 0 deletions services/tss-api/models/models.go
Original file line number Diff line number Diff line change
Expand Up @@ -98,11 +98,33 @@ type TssConfigEDDSA struct {
KeygenData eddsaKeygen.LocalPartySaveData `json:"keygenData"`
}

type EDDSAKeygenData struct {
TssConfig TssConfigEDDSA
PartyID *tss.PartyID
}

func (d EDDSAKeygenData) IsEmpty() bool {
return d.TssConfig.MetaData.PeersCount == 0 &&
d.TssConfig.MetaData.Threshold == 0 &&
d.PartyID == nil
}

type TssConfigECDSA struct {
MetaData MetaData `json:"metaData"`
KeygenData ecdsaKeygen.LocalPartySaveData `json:"keygenData"`
}

type ECDSAKeygenData struct {
TssConfig TssConfigECDSA
PartyID *tss.PartyID
}

func (d ECDSAKeygenData) IsEmpty() bool {
return d.TssConfig.MetaData.PeersCount == 0 &&
d.TssConfig.MetaData.Threshold == 0 &&
d.PartyID == nil
}

type TssData struct {
PartyID *tss.PartyID
Params *tss.Parameters
Expand Down
196 changes: 107 additions & 89 deletions services/tss-api/storage/storage.go
Original file line number Diff line number Diff line change
Expand Up @@ -18,11 +18,14 @@ import (
type Storage interface {
makefilePath(peerHome string, protocol string) string
WriteData(data interface{}, peerHome string, fileFormat string, protocol string) error
LoadEDDSAKeygen(peerHome string, p2pId string) (models.TssConfigEDDSA, *tss.PartyID, error)
LoadECDSAKeygen(peerHome string, p2pId string) (models.TssConfigECDSA, *tss.PartyID, error)
LoadEDDSAKeygen(peerHome string, p2pId string) (models.EDDSAKeygenData, error)
LoadECDSAKeygen(peerHome string, p2pId string) (models.ECDSAKeygenData, error)
}

type storage struct{}
type storage struct {
ecdsaKeygenData models.ECDSAKeygenData
eddsaKeygenData models.EDDSAKeygenData
}

var logging *zap.SugaredLogger

Expand Down Expand Up @@ -75,103 +78,118 @@ func (f *storage) WriteData(data interface{}, peerHome string, fileFormat string
}

// Loads the EDDSA keygen data from the file
func (f *storage) LoadEDDSAKeygen(peerHome string, p2pId string) (models.TssConfigEDDSA, *tss.PartyID, error) {
// locating file
var keygenFile string

filePath := f.makefilePath(peerHome, models.EDDSA)
files, err := ioutil.ReadDir(filePath)
if err != nil || len(files) == 0 {
logging.Warnf("couldn't find eddsa keygen %v", err)
return models.TssConfigEDDSA{}, nil, errors.New(models.EDDSANoKeygenDataFoundError)
}
func (f *storage) LoadEDDSAKeygen(peerHome string, p2pId string) (models.EDDSAKeygenData, error) {
if !f.eddsaKeygenData.IsEmpty() {
return f.eddsaKeygenData, nil
} else {
// locating file
var keygenFile string

filePath := f.makefilePath(peerHome, models.EDDSA)
files, err := ioutil.ReadDir(filePath)
if err != nil || len(files) == 0 {
logging.Warnf("couldn't find eddsa keygen %v", err)
return models.EDDSAKeygenData{}, errors.New(models.EDDSANoKeygenDataFoundError)
}

for _, File := range files {
if strings.Contains(File.Name(), "keygen") {
keygenFile = File.Name()
for _, File := range files {
if strings.Contains(File.Name(), "keygen") {
keygenFile = File.Name()
}
}
}
keyFilePath := filepath.Join(filePath, keygenFile)
logging.Debugf("key file path: %v", keyFilePath)
keyFilePath := filepath.Join(filePath, keygenFile)
logging.Debugf("key file path: %v", keyFilePath)

// reading file
bz, err := ioutil.ReadFile(keyFilePath)
if err != nil {
return models.TssConfigEDDSA{}, nil, errors.Wrapf(
err,
"could not open the file for party in the expected location: %s. run keygen first.", keyFilePath,
)
}
var tssConfig models.TssConfigEDDSA
if err = json.Unmarshal(bz, &tssConfig); err != nil {
return models.TssConfigEDDSA{}, nil, errors.Wrapf(
err,
"could not unmarshal data for party located at: %s", keyFilePath,
)
}
// reading file
bz, err := ioutil.ReadFile(keyFilePath)
if err != nil {
return models.EDDSAKeygenData{}, errors.Wrapf(
err,
"could not open the file for party in the expected location: %s. run keygen first.", keyFilePath,
)
}
var tssConfig models.TssConfigEDDSA
if err = json.Unmarshal(bz, &tssConfig); err != nil {
return models.EDDSAKeygenData{}, errors.Wrapf(
err,
"could not unmarshal data for party located at: %s", keyFilePath,
)
}

//creating data from file
for _, kbxj := range tssConfig.KeygenData.BigXj {
kbxj.SetCurve(tss.Edwards())
//creating data from file
for _, kbxj := range tssConfig.KeygenData.BigXj {
kbxj.SetCurve(tss.Edwards())
}
tssConfig.KeygenData.EDDSAPub.SetCurve(tss.Edwards())
id := p2pId
pMoniker := fmt.Sprintf("tssPeer/%s", p2pId)
partyID := tss.NewPartyID(id, pMoniker, tssConfig.KeygenData.ShareID)

var parties tss.UnSortedPartyIDs
parties = append(parties, partyID)
sortedPIDs := tss.SortPartyIDs(parties)
f.eddsaKeygenData = models.EDDSAKeygenData{
TssConfig: tssConfig, PartyID: sortedPIDs[0],
}
return f.eddsaKeygenData, nil
}
tssConfig.KeygenData.EDDSAPub.SetCurve(tss.Edwards())
id := p2pId
pMoniker := fmt.Sprintf("tssPeer/%s", p2pId)
partyID := tss.NewPartyID(id, pMoniker, tssConfig.KeygenData.ShareID)

var parties tss.UnSortedPartyIDs
parties = append(parties, partyID)
sortedPIDs := tss.SortPartyIDs(parties)
return tssConfig, sortedPIDs[0], nil
}

// Loads the ECDSA keygen data from the file
func (f *storage) LoadECDSAKeygen(peerHome string, p2pId string) (models.TssConfigECDSA, *tss.PartyID, error) {
// locating file
var keygenFile string

filePath := f.makefilePath(peerHome, models.ECDSA)
files, err := ioutil.ReadDir(filePath)
if err != nil || len(files) == 0 {
logging.Warnf("couldn't find ecdsa keygen %v", err)
return models.TssConfigECDSA{}, nil, errors.New(models.ECDSANoKeygenDataFoundError)
}
func (f *storage) LoadECDSAKeygen(peerHome string, p2pId string) (models.ECDSAKeygenData, error) {

if !f.ecdsaKeygenData.IsEmpty() {
return f.ecdsaKeygenData, nil
} else {
// locating file
var keygenFile string

filePath := f.makefilePath(peerHome, models.ECDSA)
files, err := ioutil.ReadDir(filePath)
if err != nil || len(files) == 0 {
logging.Warnf("couldn't find ecdsa keygen %v", err)
return models.ECDSAKeygenData{}, errors.New(models.ECDSANoKeygenDataFoundError)
}

for _, File := range files {
if strings.Contains(File.Name(), "keygen") {
keygenFile = File.Name()
for _, File := range files {
if strings.Contains(File.Name(), "keygen") {
keygenFile = File.Name()
}
}
}
keyFilePath := filepath.Join(filePath, keygenFile)
logging.Debugf("key file path: %v", keyFilePath)
keyFilePath := filepath.Join(filePath, keygenFile)
logging.Debugf("key file path: %v", keyFilePath)

// reading file
bz, err := ioutil.ReadFile(keyFilePath)
if err != nil {
return models.TssConfigECDSA{}, nil, errors.Wrapf(
err,
"could not open the file for party in the expected location: %s. run keygen first.", keyFilePath,
)
}
var tssConfig models.TssConfigECDSA
if err = json.Unmarshal(bz, &tssConfig); err != nil {
return models.TssConfigECDSA{}, nil, errors.Wrapf(
err,
"could not unmarshal data for party located at: %s", keyFilePath,
)
}
// reading file
bz, err := ioutil.ReadFile(keyFilePath)
if err != nil {
return models.ECDSAKeygenData{}, errors.Wrapf(
err,
"could not open the file for party in the expected location: %s. run keygen first.", keyFilePath,
)
}
var tssConfig models.TssConfigECDSA
if err = json.Unmarshal(bz, &tssConfig); err != nil {
return models.ECDSAKeygenData{}, errors.Wrapf(
err,
"could not unmarshal data for party located at: %s", keyFilePath,
)
}

//creating data from file
for _, kbxj := range tssConfig.KeygenData.BigXj {
kbxj.SetCurve(tss.S256())
//creating data from file
for _, kbxj := range tssConfig.KeygenData.BigXj {
kbxj.SetCurve(tss.S256())
}
tssConfig.KeygenData.ECDSAPub.SetCurve(tss.S256())
id := p2pId
pMoniker := fmt.Sprintf("tssPeer/%s", p2pId)
partyID := tss.NewPartyID(id, pMoniker, tssConfig.KeygenData.ShareID)

var parties tss.UnSortedPartyIDs
parties = append(parties, partyID)
sortedPIDs := tss.SortPartyIDs(parties)
f.ecdsaKeygenData = models.ECDSAKeygenData{
TssConfig: tssConfig, PartyID: sortedPIDs[0],
}
return f.ecdsaKeygenData, nil
}
tssConfig.KeygenData.ECDSAPub.SetCurve(tss.S256())
id := p2pId
pMoniker := fmt.Sprintf("tssPeer/%s", p2pId)
partyID := tss.NewPartyID(id, pMoniker, tssConfig.KeygenData.ShareID)

var parties tss.UnSortedPartyIDs
parties = append(parties, partyID)
sortedPIDs := tss.SortPartyIDs(parties)
return tssConfig, sortedPIDs[0], nil
}

0 comments on commit 3484619

Please sign in to comment.