/
cmp_config.go
61 lines (54 loc) · 1.86 KB
/
cmp_config.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
package test
import (
"io"
"github.com/taurusgroup/multi-party-sig/internal/types"
"github.com/taurusgroup/multi-party-sig/pkg/math/curve"
"github.com/taurusgroup/multi-party-sig/pkg/math/polynomial"
"github.com/taurusgroup/multi-party-sig/pkg/math/sample"
"github.com/taurusgroup/multi-party-sig/pkg/paillier"
"github.com/taurusgroup/multi-party-sig/pkg/party"
"github.com/taurusgroup/multi-party-sig/pkg/pedersen"
"github.com/taurusgroup/multi-party-sig/pkg/pool"
"github.com/taurusgroup/multi-party-sig/protocols/cmp/config"
)
// GenerateConfig creates some random configuration for N parties with set threshold T over the group.
func GenerateConfig(group curve.Curve, N, T int, source io.Reader, pl *pool.Pool) (map[party.ID]*config.Config, party.IDSlice) {
partyIDs := PartyIDs(N)
configs := make(map[party.ID]*config.Config, N)
public := make(map[party.ID]*config.Public, N)
f := polynomial.NewPolynomial(group, T, sample.Scalar(source, group))
rid, err := types.NewRID(source)
if err != nil {
panic(err)
}
chainKey, err := types.NewRID(source)
if err != nil {
panic(err)
}
for _, pid := range partyIDs {
paillierSecret := paillier.NewSecretKey(pl)
s, t, _ := sample.Pedersen(source, paillierSecret.Phi(), paillierSecret.N())
pedersenPublic := pedersen.New(paillierSecret.Modulus(), s, t)
elGamalSecret := sample.Scalar(source, group)
ecdsaSecret := f.Evaluate(pid.Scalar(group))
configs[pid] = &config.Config{
Group: group,
ID: pid,
Threshold: T,
ECDSA: ecdsaSecret,
ElGamal: elGamalSecret,
Paillier: paillierSecret,
RID: rid.Copy(),
ChainKey: chainKey.Copy(),
Public: public,
}
X := ecdsaSecret.ActOnBase()
public[pid] = &config.Public{
ECDSA: X,
ElGamal: elGamalSecret.ActOnBase(),
Paillier: paillierSecret.PublicKey,
Pedersen: pedersenPublic,
}
}
return configs, partyIDs
}