Skip to content
Snippets Groups Projects
Commit 3c682999 authored by capossele's avatar capossele
Browse files

:recycle: improves tests

parent 69f9de30
No related branches found
No related tags found
No related merge requests found
package drng
import (
"encoding/hex"
"testing"
"github.com/drand/drand/beacon"
"github.com/drand/drand/key"
"github.com/drand/kyber/share"
"github.com/drand/kyber/util/random"
"github.com/iotaledger/goshimmer/packages/binary/drng/payload/collectiveBeacon"
"github.com/stretchr/testify/require"
)
var (
payloadTest *collectiveBeacon.Payload
prevSignatureTest []byte
signatureTest []byte
dpkTest []byte
)
func init() {
prevSignatureTest, _ = hex.DecodeString("ae9ba6d1445bffea8e66cb7d28fe5924e0a8d31b11b62a8710204e56e1ba84bc3694a3033e5793fcee6e75e956e5da3016cd0e22aa46fa419cd06343a7ff9d1e9c5c08f660f0bdec099e97ef99f470bb8c607ce9667a165e9caa474710f62ffd")
signatureTest, _ = hex.DecodeString("8dee56fae60dcad960f7176d0813d5415b930cf6e20c299ec2c2dfc5f2ad4903916fd462ba1abf5c32a5bfd94dcc8eba062d011a548d99df7fa1e3bbbc9a0455663d60f6ccc736c1d5b6de727dbe4427e21fb660925518be386265913f447c94")
dpkTest, _ = hex.DecodeString("a02fcd15edd52c8e134027491a43b597505b466d1679e88f70f927e57c45a93ae0765ff02fc2d015e3a02fd8748e2103")
payloadTest = collectiveBeacon.New(1, 1, prevSignatureTest, signatureTest, dpkTest)
}
func TestVerifyCollectiveBeacon(t *testing.T) {
payload := dkgShares(t, 5, 3)
err := VerifyCollectiveBeacon(payload)
//payload := dkgShares(t, 5, 3)
err := VerifyCollectiveBeacon(payloadTest)
require.NoError(t, err)
}
func TestGetRandomness(t *testing.T) {
payload := dkgShares(t, 5, 3)
_, err := GetRandomness(payload.Signature())
//payload := dkgShares(t, 5, 3)
_, err := GetRandomness(payloadTest.Signature())
require.NoError(t, err)
}
func dkgShares(t *testing.T, n, threshold int) *collectiveBeacon.Payload {
var priPoly *share.PriPoly
var pubPoly *share.PubPoly
var err error
// create shares and committments
for i := 0; i < n; i++ {
pri := share.NewPriPoly(key.KeyGroup, threshold, key.KeyGroup.Scalar().Pick(random.New()), random.New())
pub := pri.Commit(key.KeyGroup.Point().Base())
if priPoly == nil {
priPoly = pri
pubPoly = pub
continue
}
priPoly, err = priPoly.Add(pri)
require.NoError(t, err)
pubPoly, err = pubPoly.Add(pub)
require.NoError(t, err)
}
shares := priPoly.Shares(n)
secret, err := share.RecoverSecret(key.KeyGroup, shares, threshold, n)
require.NoError(t, err)
require.True(t, secret.Equal(priPoly.Secret()))
msg := []byte("first message")
sigs := make([][]byte, n, n)
_, commits := pubPoly.Info()
dkgShares := make([]*key.Share, n, n)
// partial signatures
for i := 0; i < n; i++ {
sigs[i], err = key.Scheme.Sign(shares[i], msg)
require.NoError(t, err)
dkgShares[i] = &key.Share{
Share: shares[i],
Commits: commits,
}
}
// reconstruct collective signature
sig, err := key.Scheme.Recover(pubPoly, msg, sigs, threshold, n)
require.NoError(t, err)
// func dkgShares(t *testing.T, n, threshold int) *collectiveBeacon.Payload {
// var priPoly *share.PriPoly
// var pubPoly *share.PubPoly
// var err error
// // create shares and committments
// for i := 0; i < n; i++ {
// pri := share.NewPriPoly(key.KeyGroup, threshold, key.KeyGroup.Scalar().Pick(random.New()), random.New())
// pub := pri.Commit(key.KeyGroup.Point().Base())
// if priPoly == nil {
// priPoly = pri
// pubPoly = pub
// continue
// }
// priPoly, err = priPoly.Add(pri)
// require.NoError(t, err)
// verify signature against distributed public key
err = key.Scheme.VerifyRecovered(pubPoly.Commit(), msg, sig)
require.NoError(t, err)
// pubPoly, err = pubPoly.Add(pub)
// require.NoError(t, err)
// }
// shares := priPoly.Shares(n)
// secret, err := share.RecoverSecret(key.KeyGroup, shares, threshold, n)
// require.NoError(t, err)
// require.True(t, secret.Equal(priPoly.Secret()))
msg = beacon.Message(sig, 1)
sigs = make([][]byte, n, n)
// partial signatures
for i := 0; i < n; i++ {
sigs[i], err = key.Scheme.Sign(shares[i], msg)
require.NoError(t, err)
}
// msg := []byte("first message")
// sigs := make([][]byte, n, n)
// _, commits := pubPoly.Info()
// dkgShares := make([]*key.Share, n, n)
// reconstruct collective signature
newSig, err := key.Scheme.Recover(pubPoly, msg, sigs, threshold, n)
require.NoError(t, err)
// // partial signatures
// for i := 0; i < n; i++ {
// sigs[i], err = key.Scheme.Sign(shares[i], msg)
// require.NoError(t, err)
dpk, err := pubPoly.Commit().MarshalBinary()
require.NoError(t, err)
// dkgShares[i] = &key.Share{
// Share: shares[i],
// Commits: commits,
// }
// }
return collectiveBeacon.New(1, 1, sig, newSig, dpk)
}
// // reconstruct collective signature
// sig, err := key.Scheme.Recover(pubPoly, msg, sigs, threshold, n)
// require.NoError(t, err)
// // verify signature against distributed public key
// err = key.Scheme.VerifyRecovered(pubPoly.Commit(), msg, sig)
// require.NoError(t, err)
// msg = beacon.Message(sig, 1)
// sigs = make([][]byte, n, n)
// // partial signatures
// for i := 0; i < n; i++ {
// sigs[i], err = key.Scheme.Sign(shares[i], msg)
// require.NoError(t, err)
// }
// // reconstruct collective signature
// newSig, err := key.Scheme.Recover(pubPoly, msg, sigs, threshold, n)
// require.NoError(t, err)
// dpk, err := pubPoly.Commit().MarshalBinary()
// require.NoError(t, err)
// return collectiveBeacon.New(1, 1, sig, newSig, dpk)
// }
......@@ -166,8 +166,8 @@ func (payload *Payload) Bytes() (bytes []byte) {
func (payload *Payload) String() string {
return stringify.Struct("Payload",
stringify.StructField("type", payload.SubType()),
stringify.StructField("instance", payload.Instance()),
stringify.StructField("type", uint64(payload.SubType())),
stringify.StructField("instance", uint64(payload.Instance())),
stringify.StructField("round", payload.Round()),
stringify.StructField("prevSignature", payload.PrevSignature()),
stringify.StructField("signature", payload.Signature()),
......
......@@ -8,13 +8,17 @@ import (
"github.com/stretchr/testify/require"
)
func TestParse(t *testing.T) {
func dummyPayload() *Payload {
header := header.New(header.CollectiveBeaconType(), 0)
payload := New(header.Instance(),
return New(header.Instance(),
0,
[]byte("AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"), // prevSignature
[]byte("BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB"), // signature
[]byte("CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC")) // distributed PK
}
func TestParse(t *testing.T) {
payload := dummyPayload()
bytes := payload.Bytes()
marshalUtil := marshalutil.New(bytes)
......@@ -28,3 +32,8 @@ func TestParse(t *testing.T) {
require.Equal(t, payload.Signature(), parsedPayload.Signature())
require.Equal(t, payload.DistributedPK(), parsedPayload.DistributedPK())
}
func TestString(t *testing.T) {
payload := dummyPayload()
_ = payload.String()
}
......@@ -122,8 +122,8 @@ func (payload *Payload) Bytes() (bytes []byte) {
func (payload *Payload) String() string {
return stringify.Struct("Payload",
stringify.StructField("type", payload.SubType()),
stringify.StructField("instance", payload.Instance()),
stringify.StructField("type", uint64(payload.SubType())),
stringify.StructField("instance", uint64(payload.Instance())),
stringify.StructField("data", payload.Data()),
)
}
......
......@@ -8,10 +8,14 @@ import (
"github.com/stretchr/testify/require"
)
func TestParse(t *testing.T) {
func dummyPayload() *Payload {
header := header.New(header.CollectiveBeaconType(), 0)
data := []byte("test")
payload := New(header, data)
return New(header, data)
}
func TestParse(t *testing.T) {
payload := dummyPayload()
bytes := payload.Bytes()
marshalUtil := marshalutil.New(bytes)
......@@ -22,3 +26,8 @@ func TestParse(t *testing.T) {
require.Equal(t, payload.Instance(), parsedPayload.Instance())
require.Equal(t, payload.Data(), parsedPayload.Data())
}
func TestString(t *testing.T) {
payload := dummyPayload()
_ = payload.String()
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment