From a6c349b6f091afdfb94220c051c790fdb812aabb Mon Sep 17 00:00:00 2001 From: vyzo Date: Sun, 26 Aug 2018 13:26:44 +0300 Subject: [PATCH] sign messages when a signing key is present --- package.json | 6 ++++++ pubsub.go | 20 +++++++++++++------- sign.go | 4 +++- 3 files changed, 22 insertions(+), 8 deletions(-) diff --git a/package.json b/package.json index 395fd86..5801742 100644 --- a/package.json +++ b/package.json @@ -65,6 +65,12 @@ "hash": "QmdxUuburamoF6zF9qjeQC4WYcWGbWuRmdLacMEsW8ioD8", "name": "gogo-protobuf", "version": "0.0.0" + }, + { + "author": "whyrusleeping", + "hash": "QmPvyPwuCgJ7pDmrKDxRtsScJgBaM5h4EpRL2qQJsmXf4n", + "name": "go-libp2p-crypto", + "version": "2.0.1" } ], "gxVersion": "0.9.0", diff --git a/pubsub.go b/pubsub.go index 4ec5a3c..fd89dc9 100644 --- a/pubsub.go +++ b/pubsub.go @@ -11,6 +11,7 @@ import ( pb "github.com/libp2p/go-floodsub/pb" logging "github.com/ipfs/go-log" + crypto "github.com/libp2p/go-libp2p-crypto" host "github.com/libp2p/go-libp2p-host" inet "github.com/libp2p/go-libp2p-net" peer "github.com/libp2p/go-libp2p-peer" @@ -89,6 +90,9 @@ type PubSub struct { peers map[peer.ID]chan *RPC seenMessages *timecache.TimeCache + // key for signing messages; nil when signing is disabled (default for now) + signKey crypto.PrivKey + ctx context.Context } @@ -646,14 +650,16 @@ func (p *PubSub) GetTopics() []string { // Publish publishes data under the given topic func (p *PubSub) Publish(topic string, data []byte) error { seqno := p.nextSeqno() - p.publish <- &Message{ - &pb.Message{ - Data: data, - TopicIDs: []string{topic}, - From: []byte(p.host.ID()), - Seqno: seqno, - }, + m := &pb.Message{ + Data: data, + TopicIDs: []string{topic}, + From: []byte(p.host.ID()), + Seqno: seqno, } + if p.signKey != nil { + signMessage(p.signKey, m) + } + p.publish <- &Message{m} return nil } diff --git a/sign.go b/sign.go index 14eb2cc..5b55aad 100644 --- a/sign.go +++ b/sign.go @@ -2,12 +2,14 @@ package floodsub import ( pb "github.com/libp2p/go-floodsub/pb" + + crypto "github.com/libp2p/go-libp2p-crypto" ) func verifyMessageSignature(m *pb.Message) error { return nil } -func signMessage(m *pb.Message) { +func signMessage(key crypto.PrivKey, m *pb.Message) { }