This commit is contained in:
programmer10110 2020-11-02 16:17:01 +03:00
parent 0528c779d7
commit ee888aad2b
11 changed files with 18 additions and 18 deletions

View File

@ -107,6 +107,7 @@ func (am *Machine) reconstructThresholdSignature(o *client.Operation) error {
} }
response := client.ReconstructedSignature{ response := client.ReconstructedSignature{
SigningID: payload.SigningId,
SrcPayload: payload.SrcPayload, SrcPayload: payload.SrcPayload,
Signature: reconstructedSignature, Signature: reconstructedSignature,
DKGRoundID: o.DKGIdentifier, DKGRoundID: o.DKGIdentifier,

View File

@ -152,6 +152,7 @@ func (c *BaseClient) processSignature(message storage.Message) error {
} }
func (c *BaseClient) ProcessMessage(message storage.Message) error { func (c *BaseClient) ProcessMessage(message storage.Message) error {
// save broadcasted reconstructed signature
if fsm.Event(message.Event) == types.SignatureReconstructed { if fsm.Event(message.Event) == types.SignatureReconstructed {
if err := c.processSignature(message); err != nil { if err := c.processSignature(message); err != nil {
return fmt.Errorf("failed to process signature: %w", err) return fmt.Errorf("failed to process signature: %w", err)
@ -161,6 +162,9 @@ func (c *BaseClient) ProcessMessage(message storage.Message) error {
} }
return nil return nil
} }
// save signing data to the same storage as we save signatures
// This allows easy to view signing data by CLI-command
if fsm.Event(message.Event) == sipf.EventSigningStart { if fsm.Event(message.Event) == sipf.EventSigningStart {
if err := c.processSignature(message); err != nil { if err := c.processSignature(message); err != nil {
return fmt.Errorf("failed to process signature: %w", err) return fmt.Errorf("failed to process signature: %w", err)

View File

@ -143,7 +143,7 @@ func RemoveContents(dir, mask string) error {
func TestFullFlow(t *testing.T) { func TestFullFlow(t *testing.T) {
_ = RemoveContents("/tmp", "dc4bc_*") _ = RemoveContents("/tmp", "dc4bc_*")
//defer func() { _ = RemoveContents("/tmp", "dc4bc_*") }() defer func() { _ = RemoveContents("/tmp", "dc4bc_*") }()
var numNodes = 4 var numNodes = 4
var threshold = 2 var threshold = 2

View File

@ -363,6 +363,7 @@ func (c *BaseClient) proposeSignDataHandler(w http.ResponseWriter, r *http.Reque
} }
messageDataSign := requests.SigningProposalStartRequest{ messageDataSign := requests.SigningProposalStartRequest{
SigningID: uuid.New().String(),
ParticipantId: participantID, ParticipantId: participantID,
SrcPayload: req["data"], SrcPayload: req["data"],
CreatedAt: time.Now(), CreatedAt: time.Now(),

View File

@ -1,9 +1,7 @@
package client package client
import ( import (
"crypto/md5"
"encoding/binary" "encoding/binary"
"encoding/hex"
"encoding/json" "encoding/json"
"errors" "errors"
"fmt" "fmt"
@ -340,11 +338,9 @@ func (s *LevelDBState) SaveSignature(signature types.ReconstructedSignature) err
signatures = make(map[string][]types.ReconstructedSignature) signatures = make(map[string][]types.ReconstructedSignature)
} }
dataHash := md5.Sum(signature.SrcPayload) sig := signatures[signature.SigningID]
dataHashString := hex.EncodeToString(dataHash[:])
sig := signatures[dataHashString]
sig = append(sig, signature) sig = append(sig, signature)
signatures[dataHashString] = sig signatures[signature.SigningID] = sig
signaturesJSON, err := json.Marshal(signatures) signaturesJSON, err := json.Marshal(signatures)
if err != nil { if err != nil {

View File

@ -23,6 +23,7 @@ const (
) )
type ReconstructedSignature struct { type ReconstructedSignature struct {
SigningID string
SrcPayload []byte SrcPayload []byte
Signature []byte Signature []byte
Username string Username string

View File

@ -121,7 +121,8 @@ func getOperationsCommand() *cobra.Command {
return fmt.Errorf("failed to unmarshal operation payload") return fmt.Errorf("failed to unmarshal operation payload")
} }
msgHash := md5.Sum(payload.SrcPayload) msgHash := md5.Sum(payload.SrcPayload)
fmt.Printf("Hash of the message to sign - %s\n", hex.EncodeToString(msgHash[:])) fmt.Printf("Hash of the data to sign - %s\n", hex.EncodeToString(msgHash[:]))
fmt.Printf("Signing ID: %s\n", payload.SigningId)
} }
fmt.Println("-----------------------------------------------------") fmt.Println("-----------------------------------------------------")
} }
@ -165,8 +166,8 @@ func getSignaturesCommand() *cobra.Command {
if signatures.ErrorMessage != "" { if signatures.ErrorMessage != "" {
return fmt.Errorf("failed to get signatures: %s", signatures.ErrorMessage) return fmt.Errorf("failed to get signatures: %s", signatures.ErrorMessage)
} }
for dataHash, signature := range signatures.Result { for sigID, signature := range signatures.Result {
fmt.Printf("Hash of the signing data: %s\n", dataHash) fmt.Printf("Signing ID: %s\n", sigID)
for _, participantSig := range signature { for _, participantSig := range signature {
fmt.Printf("\tDKG round ID: %s\n", participantSig.DKGRoundID) fmt.Printf("\tDKG round ID: %s\n", participantSig.DKGRoundID)
fmt.Printf("\tParticipant: %s\n", participantSig.Username) fmt.Printf("\tParticipant: %s\n", participantSig.Username)

View File

@ -182,8 +182,7 @@ func startClientCommand() *cobra.Command {
log.Fatalf("Failed to init state client: %v", err) log.Fatalf("Failed to init state client: %v", err)
} }
stg, err := storage.NewFileStorage("/tmp/dc4bc_storage") stg, err := storage.NewKafkaStorage(ctx, cfg.StorageDBDSN, cfg.StorageTopic)
//stg, err := storage.NewKafkaStorage(ctx, cfg.StorageDBDSN, cfg.StorageTopic)
if err != nil { if err != nil {
log.Fatalf("Failed to init storage client: %v", err) log.Fatalf("Failed to init storage client: %v", err)
} }

View File

@ -897,6 +897,7 @@ func Test_SigningProposal_EventSigningStart(t *testing.T) {
compareState(t, sif.StateSigningIdle, inState) compareState(t, sif.StateSigningIdle, inState)
fsmResponse, testFSMDump[sif.StateSigningAwaitConfirmations], err = testFSMInstance.Do(sif.EventSigningStart, requests.SigningProposalStartRequest{ fsmResponse, testFSMDump[sif.StateSigningAwaitConfirmations], err = testFSMInstance.Do(sif.EventSigningStart, requests.SigningProposalStartRequest{
SigningID: "test-signing-id",
ParticipantId: 1, ParticipantId: 1,
SrcPayload: []byte("message to sign"), SrcPayload: []byte("message to sign"),
CreatedAt: time.Now(), CreatedAt: time.Now(),

View File

@ -60,12 +60,7 @@ func (m *SigningProposalFSM) actionStartSigningProposal(inEvent fsm.Event, args
return return
} }
m.payload.SigningProposalPayload.SigningId, err = generateSigningId() m.payload.SigningProposalPayload.SigningId = request.SigningID
if err != nil {
err = errors.New("cannot generate {SigningId}")
return
}
m.payload.SigningProposalPayload.InitiatorId = request.ParticipantId m.payload.SigningProposalPayload.InitiatorId = request.ParticipantId
m.payload.SigningProposalPayload.SrcPayload = request.SrcPayload m.payload.SigningProposalPayload.SrcPayload = request.SrcPayload

View File

@ -5,6 +5,7 @@ import "time"
// States: "stage_signing_idle" // States: "stage_signing_idle"
// Events: "event_signing_start" // Events: "event_signing_start"
type SigningProposalStartRequest struct { type SigningProposalStartRequest struct {
SigningID string
ParticipantId int ParticipantId int
SrcPayload []byte SrcPayload []byte
CreatedAt time.Time CreatedAt time.Time