From 4b5ff706db6b73c7aa5fcc4b92fa3eb426e6587e Mon Sep 17 00:00:00 2001 From: capossele <angelocapossele@gmail.com> Date: Mon, 4 May 2020 09:59:19 +0100 Subject: [PATCH] :white_check_mark: fix drng tests --- go.mod | 1 + packages/binary/drng/dispatcher_test.go | 6 +- .../collective_beacon_test.go | 87 ++++++++++++++++++- 3 files changed, 88 insertions(+), 6 deletions(-) diff --git a/go.mod b/go.mod index 789033dd..b10574b1 100644 --- a/go.mod +++ b/go.mod @@ -7,6 +7,7 @@ require ( github.com/dgraph-io/badger/v2 v2.0.2 github.com/dgrijalva/jwt-go v3.2.0+incompatible github.com/drand/drand v0.8.1 + github.com/drand/kyber v1.0.1-0.20200331114745-30e90cc60f99 github.com/gobuffalo/packr/v2 v2.7.1 github.com/golang/protobuf v1.3.5 github.com/gorilla/websocket v1.4.1 diff --git a/packages/binary/drng/dispatcher_test.go b/packages/binary/drng/dispatcher_test.go index 80ad29b6..bef89e1c 100644 --- a/packages/binary/drng/dispatcher_test.go +++ b/packages/binary/drng/dispatcher_test.go @@ -26,9 +26,9 @@ var ( ) func init() { - prevSignatureTest, _ = hex.DecodeString("ae9ba6d1445bffea8e66cb7d28fe5924e0a8d31b11b62a8710204e56e1ba84bc3694a3033e5793fcee6e75e956e5da3016cd0e22aa46fa419cd06343a7ff9d1e9c5c08f660f0bdec099e97ef99f470bb8c607ce9667a165e9caa474710f62ffd") - signatureTest, _ = hex.DecodeString("8dee56fae60dcad960f7176d0813d5415b930cf6e20c299ec2c2dfc5f2ad4903916fd462ba1abf5c32a5bfd94dcc8eba062d011a548d99df7fa1e3bbbc9a0455663d60f6ccc736c1d5b6de727dbe4427e21fb660925518be386265913f447c94") - dpkTest, _ = hex.DecodeString("a02fcd15edd52c8e134027491a43b597505b466d1679e88f70f927e57c45a93ae0765ff02fc2d015e3a02fd8748e2103") + prevSignatureTest, _ = hex.DecodeString("962c0f195e8a4b281d73952aed13b754e8d0e6be1e0fd0ab0eae76db8cf038d3ec7c82c0f7348f124c2e56df11c7283012758bda8fed44d8fa26ad69781e5853b9b187db878dedd84903584fb168f1287741fae29fe9a4b76a267ae7e0812072") + signatureTest, _ = hex.DecodeString("94ff0de5d59c87d73e75baf87b084096e4044036bf33c23357c0d5947d3dc876f87a260ce2a53243cd6e627b4771cbdc12c5751b70e885d533831f2b9e83df242dceee54f466537e75fdb7870622345b136c7f5944f84b1278fe83f6d5311d6b") + dpkTest, _ = hex.DecodeString("80b319dbf164d852cdac3d86f0b362e0131ddeae3d87f6c3c5e3b6a9de384093b983db88f70e2008b0e945657d5980e2") timestampTest = time.Now() rand, _ := collectiveBeacon.ExtractRandomness(signatureTest) diff --git a/packages/binary/drng/subtypes/collectiveBeacon/collective_beacon_test.go b/packages/binary/drng/subtypes/collectiveBeacon/collective_beacon_test.go index 4aaae36f..caa6d5be 100644 --- a/packages/binary/drng/subtypes/collectiveBeacon/collective_beacon_test.go +++ b/packages/binary/drng/subtypes/collectiveBeacon/collective_beacon_test.go @@ -2,10 +2,16 @@ package collectiveBeacon import ( "encoding/hex" + "log" "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/state" "github.com/iotaledger/goshimmer/packages/binary/drng/subtypes/collectiveBeacon/events" + "github.com/iotaledger/goshimmer/packages/binary/drng/subtypes/collectiveBeacon/payload" "github.com/iotaledger/hive.go/crypto/ed25519" "github.com/stretchr/testify/require" ) @@ -20,9 +26,10 @@ var ( ) func init() { - prevSignatureTest, _ = hex.DecodeString("ae9ba6d1445bffea8e66cb7d28fe5924e0a8d31b11b62a8710204e56e1ba84bc3694a3033e5793fcee6e75e956e5da3016cd0e22aa46fa419cd06343a7ff9d1e9c5c08f660f0bdec099e97ef99f470bb8c607ce9667a165e9caa474710f62ffd") - signatureTest, _ = hex.DecodeString("8dee56fae60dcad960f7176d0813d5415b930cf6e20c299ec2c2dfc5f2ad4903916fd462ba1abf5c32a5bfd94dcc8eba062d011a548d99df7fa1e3bbbc9a0455663d60f6ccc736c1d5b6de727dbe4427e21fb660925518be386265913f447c94") - dpkTest, _ = hex.DecodeString("a02fcd15edd52c8e134027491a43b597505b466d1679e88f70f927e57c45a93ae0765ff02fc2d015e3a02fd8748e2103") + prevSignatureTest, _ = hex.DecodeString("962c0f195e8a4b281d73952aed13b754e8d0e6be1e0fd0ab0eae76db8cf038d3ec7c82c0f7348f124c2e56df11c7283012758bda8fed44d8fa26ad69781e5853b9b187db878dedd84903584fb168f1287741fae29fe9a4b76a267ae7e0812072") + signatureTest, _ = hex.DecodeString("94ff0de5d59c87d73e75baf87b084096e4044036bf33c23357c0d5947d3dc876f87a260ce2a53243cd6e627b4771cbdc12c5751b70e885d533831f2b9e83df242dceee54f466537e75fdb7870622345b136c7f5944f84b1278fe83f6d5311d6b") + dpkTest, _ = hex.DecodeString("80b319dbf164d852cdac3d86f0b362e0131ddeae3d87f6c3c5e3b6a9de384093b983db88f70e2008b0e945657d5980e2") + kp := ed25519.GenerateKeyPair() issuerPK = kp.PublicKey @@ -58,3 +65,77 @@ func TestProcessBeacon(t *testing.T) { err := ProcessBeacon(stateTest, eventTest) require.NoError(t, err) } + +func TestDkgShares(t *testing.T) { + dkgShares(t, 5, 3) +} + +func dkgShares(t *testing.T, n, threshold int) *payload.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) + + // verify signature against distributed public key + err = key.Scheme.VerifyRecovered(pubPoly.Commit(), msg, sig) + require.NoError(t, err) + + msg = beacon.Message(1, sig) + 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) + + log.Println(hex.EncodeToString(sig)) + log.Println(hex.EncodeToString(newSig)) + log.Println(hex.EncodeToString(dpk)) + + return payload.New(1, 1, sig, newSig, dpk) +} -- GitLab