Skip to content

Commit 03e2e68

Browse files
authored
Merge pull request #6 from corestario/feat/random-seed
random seed
2 parents e794ff9 + ccb207b commit 03e2e68

File tree

7 files changed

+90
-44
lines changed

7 files changed

+90
-44
lines changed

go.mod

+1
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ require (
77
go.dedis.ch/protobuf v1.0.11
88
golang.org/x/crypto v0.0.0-20190123085648-057139ce5d2b
99
golang.org/x/sys v0.0.0-20191025090151-53bf42e6b339
10+
lukechampine.com/frand v1.3.0
1011
)
1112

1213
go 1.12

pairing/bls12381/bls_groups_test.go

+8-6
Original file line numberDiff line numberDiff line change
@@ -248,8 +248,10 @@ func TestKyberGT(t *testing.T) {
248248
GroupTest(t, NewGroupGT())
249249
}
250250

251+
const SEED = "somestandart_seed_with_32_length"
252+
251253
func TestKyberPairingG2(t *testing.T) {
252-
s := NewBLS12381Suite().(*Suite)
254+
s := NewBLS12381Suite([]byte(SEED)).(*Suite)
253255
a := s.G1().Scalar().Pick(s.RandomStream())
254256
b := s.G2().Scalar().Pick(s.RandomStream())
255257
aG := s.G1().Point().Mul(a, nil)
@@ -270,7 +272,7 @@ func TestKyberPairingG2(t *testing.T) {
270272
}
271273

272274
func BenchmarkPairingSeparate(bb *testing.B) {
273-
s := NewBLS12381Suite().(*Suite)
275+
s := NewBLS12381Suite([]byte(SEED)).(*Suite)
274276
a := s.G1().Scalar().Pick(s.RandomStream())
275277
b := s.G2().Scalar().Pick(s.RandomStream())
276278
aG := s.G1().Point().Mul(a, nil)
@@ -291,7 +293,7 @@ func BenchmarkPairingSeparate(bb *testing.B) {
291293
}
292294

293295
func BenchmarkPairingInv(bb *testing.B) {
294-
s := NewBLS12381Suite().(*Suite)
296+
s := NewBLS12381Suite([]byte(SEED)).(*Suite)
295297
a := s.G1().Scalar().Pick(s.RandomStream())
296298
b := s.G2().Scalar().Pick(s.RandomStream())
297299
aG := s.G1().Point().Mul(a, nil)
@@ -307,9 +309,9 @@ func BenchmarkPairingInv(bb *testing.B) {
307309
}
308310

309311
func TestIsValidGroup(t *testing.T) {
310-
suite := NewBLS12381Suite()
311-
p1 := suite.G1().Point().Pick(random.New())
312-
p2 := suite.G1().Point().Pick(random.New())
312+
suite := NewBLS12381Suite([]byte(SEED))
313+
p1 := suite.Point().Pick(random.New())
314+
p2 := suite.Point().Pick(random.New())
313315

314316
require.True(t, p1.(GroupChecker).IsInCorrectGroup())
315317
require.True(t, p2.(GroupChecker).IsInCorrectGroup())

pairing/bls12381/suite.go

+16-6
Original file line numberDiff line numberDiff line change
@@ -3,16 +3,16 @@ package bls12381
33
import (
44
"crypto/cipher"
55
"crypto/sha256"
6+
vss "github.com/corestario/kyber/share/vss/pedersen"
67
"hash"
78
"io"
89
"reflect"
910

10-
pairing "github.com/corestario/kyber/pairing"
11-
1211
"github.com/corestario/kyber"
1312
"github.com/corestario/kyber/util/random"
1413
"github.com/corestario/kyber/xof/blake2xb"
1514
bls "github.com/kilic/bls12-381"
15+
"lukechampine.com/frand"
1616
)
1717

1818
// GroupChecker allows to verify if a Point is in the correct group or not. For
@@ -94,7 +94,8 @@ func NewGroupGT() kyber.Group {
9494
}
9595

9696
type Suite struct {
97-
e *bls.Engine
97+
e *bls.Engine
98+
stream cipher.Stream
9899
}
99100

100101
func (s *Suite) String() string {
@@ -117,8 +118,17 @@ func (s *Suite) Point() kyber.Point {
117118
return s.G1().Point()
118119
}
119120

120-
func NewBLS12381Suite() pairing.Suite {
121-
return &Suite{e: bls.NewEngine()}
121+
func NewBLS12381Suite(seed []byte) vss.Suite {
122+
var stream cipher.Stream
123+
if len(seed) > 0 {
124+
stream = random.New(
125+
frand.NewCustom(seed, 32, 20),
126+
)
127+
} else {
128+
stream = random.New()
129+
}
130+
131+
return &Suite{e: bls.NewEngine(), stream: stream}
122132
}
123133

124134
func (s *Suite) G1() kyber.Group {
@@ -175,5 +185,5 @@ func (s *Suite) XOF(seed []byte) kyber.XOF {
175185
// RandomStream returns a cipher.Stream which corresponds to a key stream from
176186
// crypto/rand.
177187
func (s *Suite) RandomStream() cipher.Stream {
178-
return random.New()
188+
return s.stream
179189
}

share/dkg/pedersen/dkg_test.go

+30-10
Original file line numberDiff line numberDiff line change
@@ -3,15 +3,16 @@ package dkg
33
import (
44
"crypto/rand"
55
"fmt"
6+
"lukechampine.com/frand"
67
mathRand "math/rand"
78
"strings"
89
"testing"
910

10-
"github.com/stretchr/testify/require"
1111
"github.com/corestario/kyber"
1212
"github.com/corestario/kyber/group/edwards25519"
1313
"github.com/corestario/kyber/share"
1414
vss "github.com/corestario/kyber/share/vss/pedersen"
15+
"github.com/stretchr/testify/require"
1516
)
1617

1718
var suite = edwards25519.NewBlakeSHA256Ed25519()
@@ -20,6 +21,8 @@ const defaultN = 5
2021

2122
var defaultT = vss.MinimumT(defaultN)
2223

24+
const SEED = "somestandart_seed_with_32_length"
25+
2326
func generate(n, t int) (partPubs []kyber.Point, partSec []kyber.Scalar, dkgs []*DistKeyGenerator) {
2427
partPubs = make([]kyber.Point, n)
2528
partSec = make([]kyber.Scalar, n)
@@ -29,8 +32,9 @@ func generate(n, t int) (partPubs []kyber.Point, partSec []kyber.Scalar, dkgs []
2932
partSec[i] = sec
3033
}
3134
dkgs = make([]*DistKeyGenerator, n)
35+
reader := frand.NewCustom([]byte(SEED), 32, 20)
3236
for i := 0; i < n; i++ {
33-
dkg, err := NewDistKeyGenerator(suite, partSec[i], partPubs, t)
37+
dkg, err := NewDistKeyGenerator(suite, partSec[i], partPubs, t, reader)
3438
if err != nil {
3539
panic(err)
3640
}
@@ -43,7 +47,8 @@ func TestDKGNewDistKeyGenerator(t *testing.T) {
4347
partPubs, partSec, _ := generate(defaultN, defaultT)
4448

4549
long := partSec[0]
46-
dkg, err := NewDistKeyGenerator(suite, long, partPubs, defaultT)
50+
reader := frand.NewCustom([]byte(SEED), 32, 20)
51+
dkg, err := NewDistKeyGenerator(suite, long, partPubs, defaultT, reader)
4752
require.Nil(t, err)
4853
require.NotNil(t, dkg.dealer)
4954
require.True(t, dkg.canIssue)
@@ -55,7 +60,7 @@ func TestDKGNewDistKeyGenerator(t *testing.T) {
5560
require.False(t, dkg.isResharing)
5661

5762
sec, _ := genPair()
58-
_, err = NewDistKeyGenerator(suite, sec, partPubs, defaultT)
63+
_, err = NewDistKeyGenerator(suite, sec, partPubs, defaultT, reader)
5964
require.Error(t, err)
6065
}
6166

@@ -265,6 +270,7 @@ func TestDKGResharingThreshold(t *testing.T) {
265270
newPubs[len(dkgs)] = newPub
266271
newDkgs := make([]*DistKeyGenerator, newN)
267272
var err error
273+
reader := frand.NewCustom([]byte(SEED), 32, 20)
268274
for i := range dkgs {
269275
c := &Config{
270276
Suite: suite,
@@ -274,6 +280,7 @@ func TestDKGResharingThreshold(t *testing.T) {
274280
Share: shares[i],
275281
Threshold: newT,
276282
OldThreshold: oldT,
283+
Reader: reader,
277284
}
278285
newDkgs[i], err = NewDistKeyHandler(c)
279286
require.NoError(t, err)
@@ -407,8 +414,9 @@ func TestDKGThreshold(t *testing.T) {
407414
publics[i] = pub
408415
}
409416

417+
reader := frand.NewCustom([]byte(SEED), 32, 20)
410418
for i := 0; i < n; i++ {
411-
dkg, err := NewDistKeyGenerator(suite, privates[i], publics, newTotal)
419+
dkg, err := NewDistKeyGenerator(suite, privates[i], publics, newTotal, reader)
412420
if err != nil {
413421
panic(err)
414422
}
@@ -624,6 +632,7 @@ func TestDKGResharing(t *testing.T) {
624632
// start resharing within the same group
625633
newDkgs := make([]*DistKeyGenerator, len(dkgs))
626634
var err error
635+
reader := frand.NewCustom([]byte(SEED), 32, 20)
627636
for i := range dkgs {
628637
c := &Config{
629638
Suite: suite,
@@ -632,6 +641,7 @@ func TestDKGResharing(t *testing.T) {
632641
NewNodes: publics,
633642
Share: shares[i],
634643
OldThreshold: oldT,
644+
Reader: reader,
635645
}
636646
newDkgs[i], err = NewDistKeyHandler(c)
637647
require.NoError(t, err)
@@ -682,6 +692,7 @@ func TestDKGResharingRemoveNode(t *testing.T) {
682692
// start resharing within the same group
683693
newDkgs := make([]*DistKeyGenerator, len(dkgs))
684694
var err error
695+
reader := frand.NewCustom([]byte(SEED), 32, 20)
685696
for i := range dkgs {
686697
c := &Config{
687698
Suite: suite,
@@ -690,6 +701,7 @@ func TestDKGResharingRemoveNode(t *testing.T) {
690701
NewNodes: publics[:newN],
691702
Share: shares[i],
692703
OldThreshold: oldT,
704+
Reader: reader,
693705
}
694706
newDkgs[i], err = NewDistKeyHandler(c)
695707
require.NoError(t, err)
@@ -753,6 +765,7 @@ func TestDKGResharingNewNodesThreshold(t *testing.T) {
753765
oldDkgs := make([]*DistKeyGenerator, oldN)
754766
newDkgs := make([]*DistKeyGenerator, newN)
755767
var err error
768+
reader := frand.NewCustom([]byte(SEED), 32, 20)
756769
for i := 0; i < oldN; i++ {
757770
c := &Config{
758771
Suite: suite,
@@ -762,6 +775,7 @@ func TestDKGResharingNewNodesThreshold(t *testing.T) {
762775
Share: shares[i],
763776
Threshold: newT,
764777
OldThreshold: oldT,
778+
Reader: reader,
765779
}
766780
oldDkgs[i], err = NewDistKeyHandler(c)
767781
require.NoError(t, err)
@@ -781,6 +795,7 @@ func TestDKGResharingNewNodesThreshold(t *testing.T) {
781795
PublicCoeffs: shares[0].Commits,
782796
Threshold: newT,
783797
OldThreshold: oldT,
798+
Reader: reader,
784799
}
785800
newDkgs[i], err = NewDistKeyHandler(c)
786801
require.NoError(t, err)
@@ -921,6 +936,7 @@ func TestDKGResharingNewNodes(t *testing.T) {
921936
oldDkgs := make([]*DistKeyGenerator, oldN)
922937
newDkgs := make([]*DistKeyGenerator, newN)
923938
var err error
939+
reader := frand.NewCustom([]byte(SEED), 32, 20)
924940
for i := 0; i < oldN; i++ {
925941
c := &Config{
926942
Suite: suite,
@@ -930,6 +946,7 @@ func TestDKGResharingNewNodes(t *testing.T) {
930946
Share: shares[i],
931947
Threshold: newT,
932948
OldThreshold: oldT,
949+
Reader: reader,
933950
}
934951
oldDkgs[i], err = NewDistKeyHandler(c)
935952
require.NoError(t, err)
@@ -959,6 +976,7 @@ func TestDKGResharingNewNodes(t *testing.T) {
959976
PublicCoeffs: shares[0].Commits,
960977
Threshold: newT,
961978
OldThreshold: oldT,
979+
Reader: reader,
962980
}
963981
newDkgs[i], err = NewDistKeyHandler(c)
964982
require.NoError(t, err)
@@ -1105,6 +1123,7 @@ func TestDKGResharingPartialNewNodes(t *testing.T) {
11051123
// creating all dkgs
11061124
totalDkgs := make([]*DistKeyGenerator, total)
11071125
var err error
1126+
reader := frand.NewCustom([]byte(SEED), 32, 20)
11081127
for i := 0; i < oldN; i++ {
11091128
c := &Config{
11101129
Suite: suite,
@@ -1114,6 +1133,7 @@ func TestDKGResharingPartialNewNodes(t *testing.T) {
11141133
Share: shares[i],
11151134
Threshold: newT,
11161135
OldThreshold: oldT,
1136+
Reader: reader,
11171137
}
11181138
totalDkgs[i], err = NewDistKeyHandler(c)
11191139
require.NoError(t, err)
@@ -1143,6 +1163,7 @@ func TestDKGResharingPartialNewNodes(t *testing.T) {
11431163
PublicCoeffs: shares[0].Commits,
11441164
Threshold: newT,
11451165
OldThreshold: oldT,
1166+
Reader: reader,
11461167
}
11471168
totalDkgs[i], err = NewDistKeyHandler(c)
11481169
require.NoError(t, err)
@@ -1261,30 +1282,29 @@ func TestReaderMixedEntropy(t *testing.T) {
12611282
}
12621283

12631284
func TestUserOnlyFlagTrueBehavior(t *testing.T) {
1264-
seed := "String to test reproducibility with"
12651285
partPubs, partSec, _ := generate(defaultN, defaultT)
12661286
long := partSec[0]
12671287

1268-
r1 := strings.NewReader(seed)
1288+
reader := frand.NewCustom([]byte(SEED), 32, 20)
12691289
c1 := &Config{
12701290
Suite: suite,
12711291
Longterm: long,
12721292
NewNodes: partPubs,
12731293
Threshold: defaultT,
1274-
Reader: r1,
1294+
Reader: reader,
12751295
UserReaderOnly: true,
12761296
}
12771297
dkg1, err := NewDistKeyHandler(c1)
12781298
require.Nil(t, err)
12791299
require.NotNil(t, dkg1.dealer)
12801300

1281-
r2 := strings.NewReader(seed)
1301+
reader1 := frand.NewCustom([]byte(SEED), 32, 20)
12821302
c2 := &Config{
12831303
Suite: suite,
12841304
Longterm: long,
12851305
NewNodes: partPubs,
12861306
Threshold: defaultT,
1287-
Reader: r2,
1307+
Reader: reader1,
12881308
UserReaderOnly: true,
12891309
}
12901310
dkg2, err := NewDistKeyHandler(c2)

share/vss/pedersen/vss_test.go

+13-6
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,17 @@
11
package vss
22

33
import (
4+
"github.com/corestario/kyber/util/random"
5+
"lukechampine.com/frand"
46
"math/rand"
57
"testing"
68

7-
"github.com/stretchr/testify/assert"
8-
"github.com/stretchr/testify/require"
99
"github.com/corestario/kyber"
1010
"github.com/corestario/kyber/group/edwards25519"
1111
"github.com/corestario/kyber/sign/schnorr"
1212
"github.com/corestario/kyber/xof/blake2xb"
13+
"github.com/stretchr/testify/assert"
14+
"github.com/stretchr/testify/require"
1315
"go.dedis.ch/protobuf"
1416
)
1517

@@ -29,6 +31,8 @@ var dealerSec kyber.Scalar
2931

3032
var secret kyber.Scalar
3133

34+
const SEED = "somestandart_seed_with_32_length"
35+
3236
func init() {
3337
verifiersSec, verifiersPub = genCommits(nbVerifiers)
3438
dealerSec, dealerPub = genPair()
@@ -88,12 +92,13 @@ func TestVSSWhole(t *testing.T) {
8892

8993
func TestVSSDealerNew(t *testing.T) {
9094
goodT := MinimumT(nbVerifiers)
91-
dealer, err := NewDealer(suite, dealerSec, secret, verifiersPub, goodT)
95+
reader := frand.NewCustom([]byte(SEED), 32, 20)
96+
dealer, err := NewDealer(suite, dealerSec, secret, verifiersPub, goodT, random.New(reader))
9297
require.NoError(t, err)
9398
require.NotNil(t, dealer.secretPoly)
9499

95100
for _, badT := range []int{0, 1, -4} {
96-
_, err = NewDealer(suite, dealerSec, secret, verifiersPub, badT)
101+
_, err = NewDealer(suite, dealerSec, secret, verifiersPub, badT, random.New(reader))
97102
assert.Error(t, err)
98103
}
99104

@@ -531,7 +536,8 @@ func TestVSSAggregatorAddComplaint(t *testing.T) {
531536
}
532537

533538
func TestVSSSessionID(t *testing.T) {
534-
dealer, _ := NewDealer(suite, dealerSec, secret, verifiersPub, vssThreshold)
539+
reader := frand.NewCustom([]byte(SEED), 32, 20)
540+
dealer, _ := NewDealer(suite, dealerSec, secret, verifiersPub, vssThreshold, random.New(reader))
535541
commitments := dealer.deals[0].Commitments
536542
sid, err := sessionID(suite, dealerPub, verifiersPub, commitments, dealer.t)
537543
assert.NoError(t, err)
@@ -585,7 +591,8 @@ func genCommits(n int) ([]kyber.Scalar, []kyber.Point) {
585591
}
586592

587593
func genDealer() *Dealer {
588-
d, _ := NewDealer(suite, dealerSec, secret, verifiersPub, vssThreshold)
594+
reader := frand.NewCustom([]byte(SEED), 32, 20)
595+
d, _ := NewDealer(suite, dealerSec, secret, verifiersPub, vssThreshold, random.New(reader))
589596
return d
590597
}
591598

0 commit comments

Comments
 (0)