Skip to content
Snippets Groups Projects
Unverified Commit 79185faa authored by Wolfgang Welz's avatar Wolfgang Welz Committed by GitHub
Browse files

Upgrade drand (#402)

* upgrade drand version

* enable drng tests

* fix go.sum

* :white_check_mark: fix drng tests

* :bone:

 fix watchdog warnings

Co-authored-by: default avatarcapossele <angelocapossele@gmail.com>
parent 8125d129
No related branches found
No related tags found
No related merge requests found
......@@ -18,4 +18,4 @@ jobs:
uses: actions/checkout@v2
- name: Run Tests
run: go test $(go list ./... | grep -v drng)
run: go test ./...
......@@ -6,9 +6,10 @@ require (
github.com/coreos/bbolt v1.3.3 // indirect
github.com/dgraph-io/badger/v2 v2.0.2
github.com/dgrijalva/jwt-go v3.2.0+incompatible
github.com/drand/drand v0.5.4
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.4
github.com/golang/protobuf v1.3.5
github.com/gorilla/websocket v1.4.1
github.com/iotaledger/hive.go v0.0.0-20200430073924-0e16f8c3a522
github.com/iotaledger/iota.go v1.0.0-beta.14
......@@ -25,8 +26,8 @@ require (
go.dedis.ch/kyber/v3 v3.0.12
go.uber.org/atomic v1.6.0
go.uber.org/zap v1.14.0
golang.org/x/crypto v0.0.0-20200302210943-78000ba7a073
golang.org/x/net v0.0.0-20200301022130-244492dfa37a
golang.org/x/crypto v0.0.0-20200429183012-4b2356b1ed79
golang.org/x/net v0.0.0-20200425230154-ff2c4b7c35a0
golang.org/x/tools v0.0.0-20200330040139-fa3cc9eebcfe // indirect
google.golang.org/grpc v1.28.1
gopkg.in/src-d/go-git.v4 v4.13.1
......
This diff is collapsed.
......@@ -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)
......
......@@ -100,7 +100,7 @@ func verifySignature(data *events.CollectiveBeaconEvent) error {
return err
}
msg := beacon.Message(data.PrevSignature, data.Round)
msg := beacon.Message(data.Round, data.PrevSignature)
if err := key.Scheme.VerifyRecovered(dpk, msg, data.Signature); err != nil {
return err
......
......@@ -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 commitments
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)
_, commits := pubPoly.Info()
dkgShares := make([]*key.Share, 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)
// 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)
}
This diff is collapsed.
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