diff --git a/Makefile b/Makefile index f5b2c46aa..3e9a7747e 100644 --- a/Makefile +++ b/Makefile @@ -25,3 +25,6 @@ coverage: tidy # pushing code check: lint vet test echo "check done" + +fuzz: tidy + go test -fuzz ./.. -fuzztime 30s diff --git a/sign/tbls/tbls_test.go b/sign/tbls/tbls_test.go index 5254bb7f6..c1fdb360a 100644 --- a/sign/tbls/tbls_test.go +++ b/sign/tbls/tbls_test.go @@ -10,22 +10,39 @@ import ( ) func TestTBLS(test *testing.T) { - var err error - msg := []byte("Hello threshold Boneh-Lynn-Shacham") + BLSRoutine(test, []byte("Hello threshold Boneh-Lynn-Shacham"), 10) +} + +func FuzzBLS(f *testing.F) { + f.Fuzz(func(t *testing.T, msg []byte, n int) { + if (n < 1) || (n > 100) { + t.Skip("n must be between 1 and 100") + } + if (len(msg) < 1) || (len(msg) > 1000) { + t.Skip("msg must have byte length between 1 and 1000") + } + BLSRoutine(t, msg, n) + }) +} + +func BLSRoutine(test *testing.T, msg []byte, n int) { suite := bn256.NewSuite() - n := 10 - t := n/2 + 1 + th := n/2 + 1 + secret := suite.G1().Scalar().Pick(suite.RandomStream()) - priPoly := share.NewPriPoly(suite.G2(), t, secret, suite.RandomStream()) + priPoly := share.NewPriPoly(suite.G2(), th, secret, suite.RandomStream()) pubPoly := priPoly.Commit(suite.G2().Point().Base()) sigShares := make([][]byte, 0) + for _, x := range priPoly.Shares(n) { sig, err := Sign(suite, x, msg) require.Nil(test, err) sigShares = append(sigShares, sig) } - sig, err := Recover(suite, pubPoly, msg, sigShares, t, n) + + sig, err := Recover(suite, pubPoly, msg, sigShares, th, n) require.Nil(test, err) + err = bls.Verify(suite, pubPoly.Commit(), msg, sig) require.Nil(test, err) }