mirror of
https://source.quilibrium.com/quilibrium/ceremonyclient.git
synced 2024-12-27 00:55:17 +00:00
87 lines
2.0 KiB
Go
87 lines
2.0 KiB
Go
|
//
|
||
|
// Copyright Coinbase, Inc. All Rights Reserved.
|
||
|
//
|
||
|
// SPDX-License-Identifier: Apache-2.0
|
||
|
//
|
||
|
|
||
|
package main
|
||
|
|
||
|
import (
|
||
|
"encoding/json"
|
||
|
"log"
|
||
|
"os"
|
||
|
|
||
|
"github.com/pkg/errors"
|
||
|
|
||
|
dkg "source.quilibrium.com/quilibrium/monorepo/nekryptology/pkg/dkg/gennaro2p"
|
||
|
)
|
||
|
|
||
|
type server struct {
|
||
|
p *dkg.Participant
|
||
|
l *log.Logger
|
||
|
}
|
||
|
|
||
|
type phase1Response struct {
|
||
|
R1 dkg.Round1Message `json:"r1"`
|
||
|
R2 dkg.Round2Message `json:"r2"`
|
||
|
}
|
||
|
|
||
|
// Runs server's R1 and R2
|
||
|
func (s *server) phase1(in *dkg.Round1Message) (*dkg.Round1Message, *dkg.Round2Message) {
|
||
|
// Setup logger
|
||
|
s.l = log.New(os.Stdout, "[server] ", log.Lshortfile|log.Lmsgprefix)
|
||
|
|
||
|
s.l.Println("Initializing server")
|
||
|
var err error
|
||
|
s.p, err = dkg.NewParticipant(serverSageSsid, clientSsid, in.Blind, curveScalar, curve)
|
||
|
dieOnError(err)
|
||
|
|
||
|
// DKG Round 1
|
||
|
s.l.Println("Running DKG round 1")
|
||
|
r1Out, err := s.p.Round1(nil)
|
||
|
dieOnError(err)
|
||
|
|
||
|
s.l.Printf("r1Out=%#v", r1Out)
|
||
|
|
||
|
// DKG Round 2
|
||
|
s.l.Println("Running DKG round 2")
|
||
|
r2out, err := s.p.Round2(in)
|
||
|
dieOnError(err)
|
||
|
s.l.Printf("r2out=%#v", r2out)
|
||
|
return r1Out, r2out
|
||
|
}
|
||
|
|
||
|
// Runs server's finalize
|
||
|
func (s *server) phase2(in *dkg.Round2Message) {
|
||
|
// DKG finalize
|
||
|
s.l.Println("Finalize DKG")
|
||
|
result, err := s.p.Finalize(in)
|
||
|
dieOnError(err)
|
||
|
s.l.Printf("result=%#v", result)
|
||
|
}
|
||
|
|
||
|
// Runs server's R1 and R2 with in/out in JSON
|
||
|
func (s *server) phase1Json(req []byte) []byte {
|
||
|
// Deserialize the Round1 input
|
||
|
in := &dkg.Round1Message{}
|
||
|
err := json.Unmarshal(req, &in)
|
||
|
dieOnError(errors.Wrapf(err, "unmarshaling Round1Message from req=%v", string(req)))
|
||
|
|
||
|
// Run phase 1 and marshal
|
||
|
r1, r2 := s.phase1(in)
|
||
|
out, err := json.Marshal(&phase1Response{*r1, *r2})
|
||
|
dieOnError(errors.Wrap(err, "marshaling phase1 response"))
|
||
|
return out
|
||
|
}
|
||
|
|
||
|
// Runs server's Finalize with in/out in JSON
|
||
|
func (s *server) phase2Json(req []byte) {
|
||
|
// Deserialize the Round2 input
|
||
|
in := &dkg.Round2Message{}
|
||
|
err := json.Unmarshal(req, &in)
|
||
|
dieOnError(errors.Wrapf(err, "unmarshaling Round2Message from req=%v", string(req)))
|
||
|
|
||
|
// Run finalize
|
||
|
s.phase2(in)
|
||
|
}
|