diff --git a/bindings/channels.go b/bindings/channels.go index 8fc4fd24fd0c8644df7a75098619bf24e3cb5f60..0a6014332ec077516bc7e57d7ae36a2c58bc2f23 100644 --- a/bindings/channels.go +++ b/bindings/channels.go @@ -11,6 +11,9 @@ import ( "crypto/ed25519" "encoding/base64" "encoding/json" + "sync" + "time" + "github.com/pkg/errors" "gitlab.com/elixxir/client/channels" "gitlab.com/elixxir/client/cmix/rounds" @@ -23,8 +26,6 @@ import ( "gitlab.com/xx_network/primitives/id" "gitlab.com/xx_network/primitives/id/ephemeral" "gitlab.com/xx_network/primitives/netTime" - "sync" - "time" ) //////////////////////////////////////////////////////////////////////////////// @@ -843,10 +844,12 @@ func (cm *ChannelsManager) SendGeneric(marshalledChanId []byte, return nil, err } + msgTy := channels.MessageType(messageType) + // Send message chanMsgId, rnd, ephId, err := cm.api.SendGeneric(chanId, - channels.MessageType(messageType), message, - time.Duration(leaseTimeMS), params.CMIX) + msgTy, message, time.Duration(leaseTimeMS), + params.CMIX) if err != nil { return nil, err } @@ -897,10 +900,12 @@ func (cm *ChannelsManager) SendAdminGeneric(adminPrivateKey, return nil, err } + msgTy := channels.MessageType(messageType) + // Send admin message chanMsgId, rnd, ephId, err := cm.api.SendAdminGeneric(rsaPrivKey, - chanId, channels.MessageType(messageType), message, - time.Duration(leaseTimeMS), params.CMIX) + chanId, msgTy, message, time.Duration(leaseTimeMS), + params.CMIX) // Construct send report return constructChannelSendReport(chanMsgId, rnd.ID, ephId) diff --git a/channels/eventModel.go b/channels/eventModel.go index 05e31b5366c5a5adfba730381eedbe16a8fd1f04..153a6bd68df07144219fc249332c5c3f0f316db2 100644 --- a/channels/eventModel.go +++ b/channels/eventModel.go @@ -9,6 +9,7 @@ package channels import ( "crypto/ed25519" + "encoding/base64" "errors" "fmt" "github.com/golang/protobuf/proto" @@ -297,6 +298,11 @@ func (e *events) receiveTextMessage(channelID *id.ID, if len(txt.ReplyMessageID) == cryptoChannel.MessageIDLen { var replyTo cryptoChannel.MessageID copy(replyTo[:], txt.ReplyMessageID) + tag := makeChaDebugTag(channelID, pubKey, content, SendReplyTag) + jww.INFO.Printf("[%s]Channels - Received reply from %s "+ + "to %s on %s", tag, base64.StdEncoding.EncodeToString(pubKey), + base64.StdEncoding.EncodeToString(txt.ReplyMessageID), + channelID) return e.model.ReceiveReply(channelID, messageID, replyTo, nickname, txt.Text, pubKey, codeset, timestamp, lease, round, Text, status) @@ -311,6 +317,12 @@ func (e *events) receiveTextMessage(channelID *id.ID, } } + tag := makeChaDebugTag(channelID, pubKey, content, SendMessageTag) + jww.INFO.Printf("[%s]Channels - Received message from %s "+ + "to %s on %s", tag, base64.StdEncoding.EncodeToString(pubKey), + base64.StdEncoding.EncodeToString(txt.ReplyMessageID), + channelID) + return e.model.ReceiveMessage(channelID, messageID, nickname, txt.Text, pubKey, codeset, timestamp, lease, round, Text, status) } @@ -349,6 +361,13 @@ func (e *events) receiveReaction(channelID *id.ID, if react.ReactionMessageID != nil && len(react.ReactionMessageID) == cryptoChannel.MessageIDLen { var reactTo cryptoChannel.MessageID copy(reactTo[:], react.ReactionMessageID) + + tag := makeChaDebugTag(channelID, pubKey, content, SendReactionTag) + jww.INFO.Printf("[%s]Channels - Received reaction from %s "+ + "to %s on %s", tag, base64.StdEncoding.EncodeToString(pubKey), + base64.StdEncoding.EncodeToString(react.ReactionMessageID), + channelID) + return e.model.ReceiveReaction(channelID, messageID, reactTo, nickname, react.Reaction, pubKey, codeset, timestamp, lease, round, Reaction, status) } else { diff --git a/channels/interface.go b/channels/interface.go index b7def830340c4eea3aff959d0909f9f7b21962b5..b7d5445ced2690ef80a77ca0b30f087f814de43f 100644 --- a/channels/interface.go +++ b/channels/interface.go @@ -8,6 +8,9 @@ package channels import ( + "math" + "time" + "gitlab.com/elixxir/client/cmix" "gitlab.com/elixxir/client/cmix/rounds" cryptoBroadcast "gitlab.com/elixxir/crypto/broadcast" @@ -15,8 +18,6 @@ import ( "gitlab.com/elixxir/crypto/rsa" "gitlab.com/xx_network/primitives/id" "gitlab.com/xx_network/primitives/id/ephemeral" - "math" - "time" ) // ValidForever is used as a validUntil lease when sending to denote the @@ -64,8 +65,8 @@ type Manager interface { // return an error. The message must be at most 510 bytes long. SendAdminGeneric(privKey rsa.PrivateKey, channelID *id.ID, messageType MessageType, msg []byte, validUntil time.Duration, - params cmix.CMIXParams) (cryptoChannel.MessageID, rounds.Round, - ephemeral.Id, error) + params cmix.CMIXParams) (cryptoChannel.MessageID, + rounds.Round, ephemeral.Id, error) // SendMessage is used to send a formatted message over a channel. // Due to the underlying encoding using compression, it isn't diff --git a/channels/manager.go b/channels/manager.go index 5517ffa9bb147bb403a8b6a02e9afe3ed2e35fb7..b6a474e2fff2f874a12fbbcb2d6333f3eeb4db9e 100644 --- a/channels/manager.go +++ b/channels/manager.go @@ -89,6 +89,8 @@ func NewManager(identity cryptoChannel.PrivateIdentity, kv *versioned.KV, // Prefix the kv with the username so multiple can be run storageTag := getStorageTag(identity.PubKey) + jww.INFO.Printf("NewManager(ID:%s-%s, tag:%s)", identity.Codename, + identity.PubKey, storageTag) kv = kv.Prefix(storageTag) if err := storeIdentity(kv, identity); err != nil { @@ -110,6 +112,8 @@ func NewManager(identity cryptoChannel.PrivateIdentity, kv *versioned.KV, func LoadManager(storageTag string, kv *versioned.KV, net Client, rng *fastRNG.StreamGenerator, modelBuilder EventModelBuilder) (Manager, error) { + jww.INFO.Printf("LoadManager(tag:%s)", storageTag) + // Prefix the kv with the username so multiple can be run kv = kv.Prefix(storageTag) @@ -155,6 +159,7 @@ func setupManager(identity cryptoChannel.PrivateIdentity, kv *versioned.KV, // JoinChannel joins the given channel. It will fail if the channel has already // been joined. func (m *manager) JoinChannel(channel *cryptoBroadcast.Channel) error { + jww.INFO.Printf("JoinChannel(%s[%s])", channel.Name, channel.ReceptionID) err := m.addChannel(channel) if err != nil { return err @@ -168,6 +173,7 @@ func (m *manager) JoinChannel(channel *cryptoBroadcast.Channel) error { // LeaveChannel leaves the given channel. It will return an error if the channel // was not previously joined. func (m *manager) LeaveChannel(channelID *id.ID) error { + jww.INFO.Printf("LeaveChannel(%s)", channelID) err := m.removeChannel(channelID) if err != nil { return err @@ -181,6 +187,7 @@ func (m *manager) LeaveChannel(channelID *id.ID) error { // GetChannels returns the IDs of all channels that have been joined. Use // getChannelsUnsafe if you already have taken the mux. func (m *manager) GetChannels() []*id.ID { + jww.INFO.Printf("GetChannels") m.mux.Lock() defer m.mux.Unlock() return m.getChannelsUnsafe() @@ -188,6 +195,7 @@ func (m *manager) GetChannels() []*id.ID { // GetChannel returns the underlying cryptographic structure for a given channel. func (m *manager) GetChannel(chID *id.ID) (*cryptoBroadcast.Channel, error) { + jww.INFO.Printf("GetChannel(%s)", chID) jc, err := m.getChannel(chID) if err != nil { return nil, err @@ -202,7 +210,7 @@ func (m *manager) GetChannel(chID *id.ID) (*cryptoBroadcast.Channel, error) { // underlying state tracking for message pickup for the channel, causing all // messages to be re-retrieved from the network func (m *manager) ReplayChannel(chID *id.ID) error { - jww.INFO.Printf("Replaying messages on channel %s", chID) + jww.INFO.Printf("ReplayChannel(%s)", chID) m.mux.RLock() defer m.mux.RUnlock() @@ -243,6 +251,7 @@ func (m *manager) GetIdentity() cryptoChannel.Identity { // ExportPrivateIdentity encrypts and exports the private identity to a portable // string. func (m *manager) ExportPrivateIdentity(password string) ([]byte, error) { + jww.INFO.Printf("ExportPrivateIdentity()") rng := m.rng.GetStream() defer rng.Close() return m.me.Export(password, rng) diff --git a/channels/send.go b/channels/send.go index 0f8cfd7d5e4bab5a355732bb80f6e908c79e8219..0e508d4cc6d6c952554d90849541ba6514f46463 100644 --- a/channels/send.go +++ b/channels/send.go @@ -9,6 +9,10 @@ package channels import ( "crypto/ed25519" + "encoding/base64" + "fmt" + "time" + "github.com/pkg/errors" jww "github.com/spf13/jwalterweatherman" "gitlab.com/elixxir/client/cmix" @@ -18,13 +22,16 @@ import ( "gitlab.com/xx_network/primitives/id" "gitlab.com/xx_network/primitives/id/ephemeral" "gitlab.com/xx_network/primitives/netTime" + "golang.org/x/crypto/blake2b" "google.golang.org/protobuf/proto" - "time" ) const ( cmixChannelTextVersion = 0 cmixChannelReactionVersion = 0 + SendMessageTag = "ChMessage" + SendReplyTag = "ChReply" + SendReactionTag = "ChReaction" ) // The size of the nonce used in the message ID. @@ -40,13 +47,21 @@ func (m *manager) SendGeneric(channelID *id.ID, messageType MessageType, msg []byte, validUntil time.Duration, params cmix.CMIXParams) ( cryptoChannel.MessageID, rounds.Round, ephemeral.Id, error) { + // Note: We log sends on exit, and append what happened to the message + // this cuts down on clutter in the log. + sendPrint := fmt.Sprintf("[%s] Sending ch %s type %d at %s", + params.DebugTag, channelID, messageType, + netTime.Now()) + defer jww.INFO.Println(sendPrint) + //find the channel ch, err := m.getChannel(channelID) if err != nil { - return cryptoChannel.MessageID{}, rounds.Round{}, ephemeral.Id{}, err + return cryptoChannel.MessageID{}, rounds.Round{}, + ephemeral.Id{}, err } - nickname, _ := m.nicknameManager.GetNickname(channelID) + nickname, _ := m.GetNickname(channelID) var msgId cryptoChannel.MessageID @@ -59,18 +74,25 @@ func (m *manager) SendGeneric(channelID *id.ID, messageType MessageType, LocalTimestamp: netTime.Now().UnixNano(), } - // Generate random nonce to be used for message ID generation. This makes it - // so two identical messages sent on the same round have different message IDs + // Generate random nonce to be used for message ID + // generation. This makes it so two identical messages sent on + // the same round have different message IDs rng := m.rng.GetStream() n, err := rng.Read(chMsg.Nonce) rng.Close() if err != nil { - return cryptoChannel.MessageID{}, rounds.Round{}, ephemeral.Id{}, + sendPrint += fmt.Sprintf(", failed to generate nonce: %+v", err) + return cryptoChannel.MessageID{}, rounds.Round{}, + ephemeral.Id{}, errors.Errorf("Failed to generate nonce: %+v", err) } else if n != messageNonceSize { - return cryptoChannel.MessageID{}, rounds.Round{}, ephemeral.Id{}, + sendPrint += fmt.Sprintf(", got %d bytes for %d-byte nonce", n, + messageNonceSize) + return cryptoChannel.MessageID{}, rounds.Round{}, + ephemeral.Id{}, errors.Errorf( - "Generated %d bytes for %-byte nonce", n, messageNonceSize) + "Generated %d bytes for %d-byte nonce", n, + messageNonceSize) } usrMsg := &UserMessage{ @@ -110,22 +132,38 @@ func (m *manager) SendGeneric(channelID *id.ID, messageType MessageType, return usrMsgSerial, nil } + sendPrint += fmt.Sprintf(", pending send %s", netTime.Now()) uuid, err := m.st.denotePendingSend(channelID, &userMessageInternal{ userMessage: usrMsg, channelMessage: chMsg, messageID: msgId, }) + if err != nil { + sendPrint += fmt.Sprintf(", pending send failed %s", + err.Error()) + return cryptoChannel.MessageID{}, rounds.Round{}, + ephemeral.Id{}, err + } + sendPrint += fmt.Sprintf(", broadcasting message %s", netTime.Now()) r, ephid, err := ch.broadcast.BroadcastWithAssembler(assemble, params) if err != nil { + sendPrint += fmt.Sprintf(", broadcast failed %s, %s", + netTime.Now(), err.Error()) errDenote := m.st.failedSend(uuid) if errDenote != nil { - jww.ERROR.Printf("Failed to update for a failed send to "+ - "%s: %+v", channelID, err) + sendPrint += fmt.Sprintf(", failed to denote failed "+ + "broadcast: %s", err.Error()) } - return cryptoChannel.MessageID{}, rounds.Round{}, ephemeral.Id{}, err + return cryptoChannel.MessageID{}, rounds.Round{}, + ephemeral.Id{}, err } + sendPrint += fmt.Sprintf(", broadcast succeeded %s, success!", + netTime.Now()) err = m.st.send(uuid, msgId, r) + if err != nil { + sendPrint += fmt.Sprintf(", broadcast failed: %s ", err.Error()) + } return msgId, r, ephid, err } @@ -136,8 +174,15 @@ func (m *manager) SendGeneric(channelID *id.ID, messageType MessageType, // return an error. The message must be at most 510 bytes long. func (m *manager) SendAdminGeneric(privKey rsa.PrivateKey, channelID *id.ID, messageType MessageType, msg []byte, validUntil time.Duration, - params cmix.CMIXParams) (cryptoChannel.MessageID, rounds.Round, ephemeral.Id, - error) { + params cmix.CMIXParams) (cryptoChannel.MessageID, rounds.Round, + ephemeral.Id, error) { + + // Note: We log sends on exit, and append what happened to the message + // this cuts down on clutter in the log. + sendPrint := fmt.Sprintf("[%s] Admin sending ch %s type %d at %s", + params.DebugTag, channelID, messageType, + netTime.Now()) + defer jww.INFO.Println(sendPrint) //find the channel ch, err := m.getChannel(channelID) @@ -194,25 +239,34 @@ func (m *manager) SendAdminGeneric(privKey rsa.PrivateKey, channelID *id.ID, return chMsgSerial, nil } + sendPrint += fmt.Sprintf(", pending send %s", netTime.Now()) uuid, err := m.st.denotePendingAdminSend(channelID, chMsg) if err != nil { + sendPrint += fmt.Sprintf(", pending send failed %s", + err.Error()) return cryptoChannel.MessageID{}, rounds.Round{}, ephemeral.Id{}, err } + sendPrint += fmt.Sprintf(", broadcasting message %s", netTime.Now()) r, ephid, err := ch.broadcast.BroadcastRSAToPublicWithAssembler(privKey, assemble, params) if err != nil { + sendPrint += fmt.Sprintf(", broadcast failed %s, %s", + netTime.Now(), err.Error()) errDenote := m.st.failedSend(uuid) if errDenote != nil { + sendPrint += fmt.Sprintf(", failed to denote failed "+ + "broadcast: %s", err.Error()) jww.ERROR.Printf("Failed to update for a failed send to "+ "%s: %+v", channelID, err) } return cryptoChannel.MessageID{}, rounds.Round{}, ephemeral.Id{}, err } - + sendPrint += fmt.Sprintf(", broadcast succeeded %s, success!", + netTime.Now()) err = m.st.send(uuid, msgId, r) if err != nil { - return cryptoChannel.MessageID{}, rounds.Round{}, ephemeral.Id{}, err + sendPrint += fmt.Sprintf(", broadcast failed: %s ", err.Error()) } return msgId, r, ephid, err } @@ -224,18 +278,24 @@ func (m *manager) SendAdminGeneric(privKey rsa.PrivateKey, channelID *id.ID, func (m *manager) SendMessage(channelID *id.ID, msg string, validUntil time.Duration, params cmix.CMIXParams) ( cryptoChannel.MessageID, rounds.Round, ephemeral.Id, error) { + tag := makeChaDebugTag(channelID, m.me.PubKey, []byte(msg), SendMessageTag) + jww.INFO.Printf("[%s]SendMessage(%s)", tag, channelID) + txt := &CMIXChannelText{ Version: cmixChannelTextVersion, Text: msg, ReplyMessageID: nil, } + params = params.SetDebugTag(tag) + txtMarshaled, err := proto.Marshal(txt) if err != nil { return cryptoChannel.MessageID{}, rounds.Round{}, ephemeral.Id{}, err } - return m.SendGeneric(channelID, Text, txtMarshaled, validUntil, params) + return m.SendGeneric(channelID, Text, txtMarshaled, validUntil, + params) } // SendReply is used to send a formatted message over a channel. @@ -248,18 +308,23 @@ func (m *manager) SendReply(channelID *id.ID, msg string, replyTo cryptoChannel.MessageID, validUntil time.Duration, params cmix.CMIXParams) (cryptoChannel.MessageID, rounds.Round, ephemeral.Id, error) { + tag := makeChaDebugTag(channelID, m.me.PubKey, []byte(msg), SendReplyTag) + jww.INFO.Printf("[%s]SendReply(%s, to %s)", tag, channelID, replyTo) txt := &CMIXChannelText{ Version: cmixChannelTextVersion, Text: msg, ReplyMessageID: replyTo[:], } + params = params.SetDebugTag(tag) + txtMarshaled, err := proto.Marshal(txt) if err != nil { return cryptoChannel.MessageID{}, rounds.Round{}, ephemeral.Id{}, err } - return m.SendGeneric(channelID, Text, txtMarshaled, validUntil, params) + return m.SendGeneric(channelID, Text, txtMarshaled, validUntil, + params) } // SendReaction is used to send a reaction to a message over a channel. @@ -269,6 +334,8 @@ func (m *manager) SendReply(channelID *id.ID, msg string, func (m *manager) SendReaction(channelID *id.ID, reaction string, reactTo cryptoChannel.MessageID, params cmix.CMIXParams) ( cryptoChannel.MessageID, rounds.Round, ephemeral.Id, error) { + tag := makeChaDebugTag(channelID, m.me.PubKey, []byte(reaction), SendReactionTag) + jww.INFO.Printf("[%s]SendReply(%s, to %s)", tag, channelID, reactTo) if err := ValidateReaction(reaction); err != nil { return cryptoChannel.MessageID{}, rounds.Round{}, ephemeral.Id{}, err @@ -280,6 +347,8 @@ func (m *manager) SendReaction(channelID *id.ID, reaction string, ReactionMessageID: reactTo[:], } + params = params.SetDebugTag(tag) + reactMarshaled, err := proto.Marshal(react) if err != nil { return cryptoChannel.MessageID{}, rounds.Round{}, ephemeral.Id{}, err @@ -288,3 +357,18 @@ func (m *manager) SendReaction(channelID *id.ID, reaction string, return m.SendGeneric(channelID, Reaction, reactMarshaled, ValidForever, params) } + +// makeChaDebugTag is a debug helper that creates non-unique msg identifier +// This is set as the debug tag on messages and enables some level +// of tracing a message (if it's contents/chan/type are unique) +func makeChaDebugTag(channelID *id.ID, id ed25519.PublicKey, + msg []byte, baseTag string) string { + + h, _ := blake2b.New256(nil) + h.Write(channelID[:]) + h.Write(msg) + h.Write(id) + + tripcode := base64.RawStdEncoding.EncodeToString(h.Sum(nil))[:12] + return fmt.Sprintf("%s-%s", baseTag, tripcode) +} diff --git a/channels/send_test.go b/channels/send_test.go index 6886519a42dbd95431dcb927ada369c46bb7c94a..7c3205115a1947cf3f5a20b81d79f794959d57dd 100644 --- a/channels/send_test.go +++ b/channels/send_test.go @@ -10,6 +10,11 @@ package channels import ( "bytes" "crypto/ed25519" + "math/rand" + "sync" + "testing" + "time" + "github.com/golang/protobuf/proto" "gitlab.com/elixxir/client/cmix/identity/receptionID" "gitlab.com/elixxir/client/cmix/rounds" @@ -20,10 +25,6 @@ import ( "gitlab.com/elixxir/ekv" "gitlab.com/xx_network/crypto/csprng" "gitlab.com/xx_network/primitives/netTime" - "math/rand" - "sync" - "testing" - "time" "gitlab.com/xx_network/primitives/id" "gitlab.com/xx_network/primitives/id/ephemeral" @@ -285,7 +286,8 @@ func TestAdminGeneric(t *testing.T) { } messageId, roundId, ephemeralId, err := m.SendAdminGeneric(priv, - ch.ReceptionID, messageType, msg, validUntil, cmix.GetDefaultCMIXParams()) + ch.ReceptionID, messageType, msg, validUntil, + cmix.GetDefaultCMIXParams()) if err != nil { t.Fatalf("Failed to SendAdminGeneric: %v", err) } diff --git a/cmix/follow.go b/cmix/follow.go index 8e4dd03080c757aeca1d482d0e34660b65ab7924..051438d4f5e5456bce0f3338169ac855b99a3f29 100644 --- a/cmix/follow.go +++ b/cmix/follow.go @@ -115,7 +115,10 @@ func (c *client) followNetwork(report ClientErrorReport, return nil } - // get the list of identities to track + //denote the execution + atomic.AddUint64(c.tracker, 1) + + // track the message on every identity stream := c.rng.GetStream() err := c.Tracker.ForEach( int(c.param.MaxParallelIdentityTracks), @@ -174,8 +177,6 @@ func (c *client) follow(identity receptionID.IdentityUse, identity.ER = fakeEr } - atomic.AddUint64(c.tracker, 1) - // Get client version for poll version := c.session.GetClientVersion() diff --git a/cmix/params.go b/cmix/params.go index ff6418328203b2b728b62c0a96bf4101e9b6d686..3ef813f0d9ca6e7903696f83cb6fea72e62a7962 100644 --- a/cmix/params.go +++ b/cmix/params.go @@ -10,6 +10,7 @@ package cmix import ( "encoding/base64" "encoding/json" + "fmt" "time" "gitlab.com/elixxir/client/cmix/message" @@ -300,6 +301,18 @@ func (p *CMIXParams) UnmarshalJSON(data []byte) error { return nil } +// SetDebugTag appends the debug tag if one already exists, +// otherwise it just used the new debug tag +func (p CMIXParams) SetDebugTag(newTag string) CMIXParams { + if p.DebugTag != DefaultDebugTag { + p.DebugTag = fmt.Sprintf("%s-%s", p.DebugTag, newTag) + } else { + p.DebugTag = newTag + } + + return p +} + // NodeMap represents a map of nodes and whether they have been // blacklisted. This is designed for use with CMIXParams.BlacklistedNodes type NodeMap map[id.ID]bool diff --git a/go.mod b/go.mod index 84763a587f505360a7d5060638c6d864861a030d..13f55b334e9e8a2f31d1bcc842f14bc4140a548f 100644 --- a/go.mod +++ b/go.mod @@ -14,8 +14,8 @@ require ( github.com/spf13/viper v1.12.0 github.com/stretchr/testify v1.8.0 gitlab.com/elixxir/bloomfilter v0.0.0-20211222005329-7d931ceead6f - gitlab.com/elixxir/comms v0.0.4-0.20221024050701-bced94c1b026 - gitlab.com/elixxir/crypto v0.0.7-0.20221024012326-cf941c375c1f + gitlab.com/elixxir/comms v0.0.4-0.20221024232930-61a6369c1f68 + gitlab.com/elixxir/crypto v0.0.7-0.20221024215625-33315c3de43e gitlab.com/elixxir/ekv v0.2.1 gitlab.com/elixxir/primitives v0.0.3-0.20221017172918-6176818d1aba gitlab.com/xx_network/comms v0.0.4-0.20221017172508-09e33697dc15 diff --git a/go.sum b/go.sum index 87c84117eb84016d562b5d837059578cec993216..31dcefda3e6f7209aa7a43976c0c2c65890427bd 100644 --- a/go.sum +++ b/go.sum @@ -643,6 +643,8 @@ gitlab.com/elixxir/comms v0.0.4-0.20221024012811-e6754f7740db h1:LQUde8pjIfQpVdg gitlab.com/elixxir/comms v0.0.4-0.20221024012811-e6754f7740db/go.mod h1:NevrBdsi5wJvitUeMsid3xI1FrzzuzfxKy4Bapnhzao= gitlab.com/elixxir/comms v0.0.4-0.20221024050701-bced94c1b026 h1:CdqvzyM91wN6u4MmGj0n+gKO/0tJabWPN3EQ4SFsZsg= gitlab.com/elixxir/comms v0.0.4-0.20221024050701-bced94c1b026/go.mod h1:NevrBdsi5wJvitUeMsid3xI1FrzzuzfxKy4Bapnhzao= +gitlab.com/elixxir/comms v0.0.4-0.20221024232930-61a6369c1f68 h1:DKsCIo15pFed5QGVIw/sJ+5bwoR4Tyaq//hBiJUOWfs= +gitlab.com/elixxir/comms v0.0.4-0.20221024232930-61a6369c1f68/go.mod h1:NevrBdsi5wJvitUeMsid3xI1FrzzuzfxKy4Bapnhzao= gitlab.com/elixxir/crypto v0.0.0-20200804182833-984246dea2c4/go.mod h1:ucm9SFKJo+K0N2GwRRpaNr+tKXMIOVWzmyUD0SbOu2c= gitlab.com/elixxir/crypto v0.0.3/go.mod h1:ZNgBOblhYToR4m8tj4cMvJ9UsJAUKq+p0gCp07WQmhA= gitlab.com/elixxir/crypto v0.0.7-0.20221017173452-565da4101a3b/go.mod h1:1rftbwSVdy49LkBIkPr+w+P2mDOerYeBKoZuB3r0yqI= @@ -650,6 +652,8 @@ gitlab.com/elixxir/crypto v0.0.7-0.20221022003355-d8a6158b32a7 h1:+8DHBxZxJcmJSm gitlab.com/elixxir/crypto v0.0.7-0.20221022003355-d8a6158b32a7/go.mod h1:P/S3pEPYl7fuHQ1m4mL2pIaCxAjYIXrJml/pnfofI+U= gitlab.com/elixxir/crypto v0.0.7-0.20221024012326-cf941c375c1f h1:ku5gWZnvgs8TPHfGIOfKO5QPnRJl5fsSAic5H1Y/QRg= gitlab.com/elixxir/crypto v0.0.7-0.20221024012326-cf941c375c1f/go.mod h1:P/S3pEPYl7fuHQ1m4mL2pIaCxAjYIXrJml/pnfofI+U= +gitlab.com/elixxir/crypto v0.0.7-0.20221024215625-33315c3de43e h1:CIb5XdBTSUf9U/MDWv9DrjRicSYPDLudETMUkxzNVjQ= +gitlab.com/elixxir/crypto v0.0.7-0.20221024215625-33315c3de43e/go.mod h1:P/S3pEPYl7fuHQ1m4mL2pIaCxAjYIXrJml/pnfofI+U= gitlab.com/elixxir/ekv v0.2.1 h1:dtwbt6KmAXG2Tik5d60iDz2fLhoFBgWwST03p7T+9Is= gitlab.com/elixxir/ekv v0.2.1/go.mod h1:USLD7xeDnuZEavygdrgzNEwZXeLQJK/w1a+htpN+JEU= gitlab.com/elixxir/primitives v0.0.0-20200731184040-494269b53b4d/go.mod h1:OQgUZq7SjnE0b+8+iIAT2eqQF+2IFHn73tOo+aV11mg=