rwadurian/backend/mpc-system/services/server-party/domain/entities/key_share.go

57 lines
1.2 KiB
Go

package entities
import (
"time"
"github.com/google/uuid"
)
// PartyKeyShare represents the server's key share
type PartyKeyShare struct {
ID uuid.UUID
PartyID string
PartyIndex int
SessionID uuid.UUID // Keygen session ID
ThresholdN int
ThresholdT int
ShareData []byte // Encrypted tss-lib LocalPartySaveData
PublicKey []byte // Group public key
CreatedAt time.Time
LastUsedAt *time.Time
}
// NewPartyKeyShare creates a new party key share
func NewPartyKeyShare(
partyID string,
partyIndex int,
sessionID uuid.UUID,
thresholdN, thresholdT int,
shareData, publicKey []byte,
) *PartyKeyShare {
return &PartyKeyShare{
ID: uuid.New(),
PartyID: partyID,
PartyIndex: partyIndex,
SessionID: sessionID,
ThresholdN: thresholdN,
ThresholdT: thresholdT,
ShareData: shareData,
PublicKey: publicKey,
CreatedAt: time.Now().UTC(),
}
}
// MarkUsed updates the last used timestamp
func (k *PartyKeyShare) MarkUsed() {
now := time.Now().UTC()
k.LastUsedAt = &now
}
// IsValid checks if the key share is valid
func (k *PartyKeyShare) IsValid() bool {
return k.ID != uuid.Nil &&
k.PartyID != "" &&
len(k.ShareData) > 0 &&
len(k.PublicKey) > 0
}