diff --git a/go.mod b/go.mod
index 789033dd6ec7b9353eec39c2515134f0beed7532..b10574b1bbd1af504bbcfec12c4e1cccc9d29a07 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 80ad29b61ec1dda6061839f49f7a1b077f57f78f..bef89e1c38367216081d971603eae6a7bbf85c4d 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 4aaae36f4fa6c4786f3284e9ae745f725b4834d0..caa6d5be2436761b9ce4f5f949599a62fec1bc87 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)
+}