Skip to content

Commit f832a2f

Browse files
Add more threshold test cases
Signed-off-by: Marcus Brandenburger <[email protected]>
1 parent def1082 commit f832a2f

File tree

1 file changed

+107
-5
lines changed

1 file changed

+107
-5
lines changed

test/tbls/tbls_test.go

Lines changed: 107 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,7 @@ func TestThresholdBLS(t *testing.T) {
5353
}
5454
}()
5555

56-
shares, start := keygen(t, parties, n)
56+
shares, start := keygen(t, parties, n, n-1)
5757

5858
elapsed := time.Since(start)
5959
t.Log("DKG elapsed", elapsed)
@@ -115,6 +115,108 @@ func TestThresholdBLS(t *testing.T) {
115115
}
116116
}
117117

118+
func TestThresholdBLSVarThreshold(t *testing.T) {
119+
var tests = []struct {
120+
n, threshold, k int
121+
}{
122+
{3, 1, 2},
123+
{3, 2, 3},
124+
{5, 2, 3},
125+
{7, 5, 6},
126+
{15, 10, 11},
127+
{31, 21, 22},
128+
}
129+
130+
for _, tt := range tests {
131+
testname := fmt.Sprintf("n=%d,t=%d,k=%d", tt.n, tt.threshold, tt.k)
132+
t.Run(testname, func(t *testing.T) {
133+
testThresholdBLSVarThreshold(t, tt.n, tt.threshold, tt.k)
134+
})
135+
}
136+
}
137+
138+
func testThresholdBLSVarThreshold(t *testing.T, n, threshold, k int) {
139+
var commParties []*comm.Party
140+
var signers []*tlsgen.CertKeyPair
141+
var loggers []*commLogger
142+
var listeners []net.Listener
143+
var stopFuncs []func()
144+
145+
members, certPool, loggers, signers, listeners, commParties, membershipFunc, parties, kgf := setup(t, n, loggers, signers, listeners, commParties)
146+
147+
for id := 1; id <= n; id++ {
148+
stop, s := createParty(id, kgf, signers[id-1], n, certPool, listeners, loggers, commParties, membershipFunc)
149+
parties = append(parties, s)
150+
stopFuncs = append(stopFuncs, stop)
151+
}
152+
153+
defer func() {
154+
for _, stop := range stopFuncs {
155+
stop()
156+
}
157+
}()
158+
159+
shares, start := keygen(t, parties, n, threshold)
160+
161+
elapsed := time.Since(start)
162+
t.Log("DKG elapsed", elapsed)
163+
164+
// Create the threshold signers.
165+
thresholdSigners := make([]*bls.TBLS, n)
166+
for id := 1; id <= n; id++ {
167+
thresholdSigners[id-1] = &bls.TBLS{
168+
Logger: logger(id, t.Name()),
169+
Party: uint16(id),
170+
}
171+
}
172+
173+
// Initialize them with a nil send function
174+
for i, signer := range thresholdSigners {
175+
signer.Init(members, threshold, nil)
176+
signer.SetShareData(shares[i])
177+
}
178+
179+
var signatures [][]byte
180+
181+
// Sign a message
182+
msg := []byte("Three can keep a secret, if two of them are dead.")
183+
digest := sha256Digest(msg)
184+
for _, signer := range thresholdSigners {
185+
sig, err := signer.Sign(nil, digest)
186+
assert.NoError(t, err)
187+
signatures = append(signatures, sig)
188+
}
189+
190+
// check that all signers return the same pk?!
191+
var pk []byte
192+
for _, signer := range thresholdSigners {
193+
pki, err := signer.ThresholdPK()
194+
assert.NoError(t, err)
195+
if pk == nil {
196+
pk = pki
197+
} else {
198+
assert.Equal(t, pk, pki)
199+
}
200+
}
201+
202+
// create a verifier
203+
var v bls.Verifier
204+
err := v.Init(pk)
205+
assert.NoError(t, err)
206+
207+
// aggregate k signatures using
208+
var sig []byte
209+
for i := 0; i < k; i++ {
210+
for j := i + 1; j < k; j++ {
211+
sig, err = v.AggregateSignatures([][]byte{signatures[i], signatures[j]}, []uint16{uint16(i + 1), uint16(j + 1)})
212+
assert.NoError(t, err)
213+
}
214+
}
215+
216+
err = v.Verify(digest, sig)
217+
assert.NoError(t, err)
218+
}
219+
118220
func TestBenchmark(t *testing.T) {
119221
var commParties []*comm.Party
120222
var signers []*tlsgen.CertKeyPair
@@ -138,7 +240,7 @@ func TestBenchmark(t *testing.T) {
138240
}
139241
}()
140242

141-
shares, start := keygen(t, parties, n)
243+
shares, start := keygen(t, parties, n, n-1)
142244

143245
elapsed := time.Since(start)
144246
t.Log("DKG elapsed", elapsed)
@@ -264,7 +366,7 @@ func BenchmarkParallelInvocation(b *testing.B) {
264366
}
265367
}()
266368

267-
shares, start := keygen(b, parties, n)
369+
shares, start := keygen(b, parties, n, n-1)
268370

269371
elapsed := time.Since(start)
270372
b.Log("DKG elapsed", elapsed)
@@ -351,7 +453,7 @@ func BenchmarkParallelInvocation(b *testing.B) {
351453
var gsig []byte
352454
var gerr error
353455

354-
func keygen(t TestingT, parties []MpcParty, n int) ([][]byte, time.Time) {
456+
func keygen(t TestingT, parties []MpcParty, n int, threshold int) ([][]byte, time.Time) {
355457
var wg sync.WaitGroup
356458
wg.Add(len(parties))
357459

@@ -362,7 +464,7 @@ func keygen(t TestingT, parties []MpcParty, n int) ([][]byte, time.Time) {
362464
for i, p := range parties {
363465
go func(i int, p MpcParty) {
364466
defer wg.Done()
365-
secretShareData, err := p.KeyGen(ctx, len(parties), n-1)
467+
secretShareData, err := p.KeyGen(ctx, len(parties), threshold)
366468
shares[i] = secretShareData
367469
assert.NoError(t, err)
368470
assert.NotNil(t, secretShareData)

0 commit comments

Comments
 (0)