Skip to content
Snippets Groups Projects
Commit 4b5ff706 authored by capossele's avatar capossele
Browse files

:white_check_mark: fix drng tests

parent b44cc586
No related branches found
No related tags found
No related merge requests found
......@@ -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
......
......@@ -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)
......
......@@ -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)
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment