From cfb681462aedb40b75e72062839ba9058486b5dd Mon Sep 17 00:00:00 2001 From: p4u Date: Mon, 25 Feb 2019 13:52:45 +0100 Subject: [PATCH] Testing asymetric messages --- net/swarm/swarm.go | 27 ++++++++++++++++++++++----- 1 file changed, 22 insertions(+), 5 deletions(-) diff --git a/net/swarm/swarm.go b/net/swarm/swarm.go index 0099054..b9e4e79 100644 --- a/net/swarm/swarm.go +++ b/net/swarm/swarm.go @@ -3,10 +3,10 @@ package swarm import ( "context" "crypto/ecdsa" - "encoding/hex" "fmt" "os" "os/user" + "strings" "time" "github.com/ethereum/go-ethereum/common/hexutil" @@ -300,14 +300,31 @@ func (sn *SwarmNet) PssPub(subType, key, topic, msg, address string) error { err = sn.Pss.SendRaw(hexutil.Bytes(dstAddr), dstTopic, hexutil.Bytes(msg)) } if subType == "asym" { - pubKeyBytes, err := hex.DecodeString(key) - if err != nil { - return err + if hasHexPrefix := strings.HasPrefix(key, "0x"); !hasHexPrefix { + key = "0x" + key } - err = sn.Pss.SetPeerPublicKey(pubKeyBytes, dstTopic, dstAddr) + topics, addresses, err := sn.Pss.GetPublickeyPeers(key) if err != nil { return err } + topicFound := false + for i, t := range topics { + if dstTopic == t && fmt.Sprintf("%x", addresses[i]) == fmt.Sprintf("%x", dstAddr) { + topicFound = true + break + } + } + if !topicFound { + pubKeyBytes, err := hexutil.Decode(key) + if err != nil { + return err + } + err = sn.Pss.SetPeerPublicKey(pubKeyBytes, dstTopic, dstAddr) + if err != nil { + return err + } + } + err = sn.Pss.SendAsym(key, dstTopic, hexutil.Bytes(msg)) } return err