diff --git a/globals/version_vars.go b/globals/version_vars.go index 0dfeae1a2d0a9b61489927fc03909225057c4d4e..2d5f5965e131c99b9dd84f10c73c7307f8f88741 100644 --- a/globals/version_vars.go +++ b/globals/version_vars.go @@ -1,9 +1,9 @@ // Code generated by go generate; DO NOT EDIT. // This file was generated by robots at -// 2020-09-25 11:48:25.820720385 -0700 PDT m=+0.003677797 +// 2020-11-09 13:57:29.571995 -0800 PST m=+0.022551937 package globals -const GITVERSION = `a6830b5 Fix import issue` +const GITVERSION = `4adb5fe made skeleton for remove fact` const SEMVER = "1.4.0" const DEPENDENCIES = `module gitlab.com/elixxir/client @@ -11,20 +11,29 @@ go 1.13 require ( github.com/golang-collections/collections v0.0.0-20130729185459-604e922904d3 - github.com/golang/protobuf v1.4.2 + github.com/golang/protobuf v1.4.3 + github.com/gopherjs/gopherjs v0.0.0-20200217142428-fce0ec30dd00 // indirect + github.com/magiconair/properties v1.8.4 // indirect + github.com/mitchellh/mapstructure v1.3.3 // indirect + github.com/pelletier/go-toml v1.8.1 // indirect github.com/pkg/errors v0.9.1 + github.com/smartystreets/assertions v1.0.1 // indirect + github.com/spf13/afero v1.4.0 // indirect + github.com/spf13/cast v1.3.1 // indirect github.com/spf13/cobra v1.0.0 github.com/spf13/jwalterweatherman v1.1.0 - github.com/spf13/viper v1.6.2 - gitlab.com/elixxir/comms v0.0.0-20200925154004-716284cff8cb - gitlab.com/elixxir/crypto v0.0.0-20200921195205-bca0178268ec - gitlab.com/elixxir/ekv v0.1.2-0.20200917221437-9f9630da030a - gitlab.com/elixxir/primitives v0.0.0-20200915190719-f4586ec93f50 - gitlab.com/xx_network/comms v0.0.0-20200925163950-5686bc0f8ab0 - gitlab.com/xx_network/crypto v0.0.0-20200812183430-c77a5281c686 - gitlab.com/xx_network/primitives v0.0.0-20200812183720-516a65a4a9b2 - golang.org/x/sys v0.0.0-20200918174421-af09f7315aff // indirect + github.com/spf13/pflag v1.0.5 // indirect + github.com/spf13/viper v1.7.1 + gitlab.com/elixxir/comms v0.0.4-0.20201103220934-c476c9282f30 + gitlab.com/elixxir/crypto v0.0.5-0.20201109203841-ba162a25be6e + gitlab.com/elixxir/ekv v0.1.3 + gitlab.com/elixxir/primitives v0.0.2 + gitlab.com/xx_network/comms v0.0.3 + gitlab.com/xx_network/crypto v0.0.4 + gitlab.com/xx_network/primitives v0.0.2 + golang.org/x/crypto v0.0.0-20201016220609-9e8e0b390897 google.golang.org/protobuf v1.25.0 + gopkg.in/ini.v1 v1.61.0 // indirect ) replace google.golang.org/grpc => github.com/grpc/grpc-go v1.27.1 diff --git a/go.mod b/go.mod index 1177dcbb6658f3da6581743754b578ed32ec1353..dc769078af0a2987c147efb427caa1459c8935a6 100644 --- a/go.mod +++ b/go.mod @@ -17,8 +17,8 @@ require ( github.com/spf13/jwalterweatherman v1.1.0 github.com/spf13/pflag v1.0.5 // indirect github.com/spf13/viper v1.7.1 - gitlab.com/elixxir/comms v0.0.3 - gitlab.com/elixxir/crypto v0.0.4 + gitlab.com/elixxir/comms v0.0.4-0.20201103220934-c476c9282f30 + gitlab.com/elixxir/crypto v0.0.5-0.20201109203841-ba162a25be6e gitlab.com/elixxir/ekv v0.1.3 gitlab.com/elixxir/primitives v0.0.2 gitlab.com/xx_network/comms v0.0.3 diff --git a/go.sum b/go.sum index cd8869a5b9d411cf1dd2f18b80a8e62273872a87..d9ae59910cd23ec3a10019a0dc42c501e1cd8164 100644 --- a/go.sum +++ b/go.sum @@ -250,14 +250,16 @@ github.com/zeebo/pcg v0.0.0-20181207190024-3cdc6b625a05 h1:4pW5fMvVkrgkMXdvIsVRR github.com/zeebo/pcg v0.0.0-20181207190024-3cdc6b625a05/go.mod h1:Gr+78ptB0MwXxm//LBaEvBiaXY7hXJ6KGe2V32X2F6E= github.com/zeebo/pcg v1.0.0 h1:dt+dx+HvX8g7Un32rY9XWoYnd0NmKmrIzpHF7qiTDj0= github.com/zeebo/pcg v1.0.0/go.mod h1:09F0S9iiKrwn9rlI5yjLkmrug154/YRW6KnnXVDM/l4= -gitlab.com/elixxir/comms v0.0.3 h1:7cFvBZddX/8JSY5MvfPpg21niV88IpeqQkoKs15erZM= -gitlab.com/elixxir/comms v0.0.3/go.mod h1:5p7oz4yFrK037rPap6ooaWrloJrzuVZ4jnzOdvgyqnU= +gitlab.com/elixxir/comms v0.0.4-0.20201103220934-c476c9282f30 h1:9q+xVbu5m7XDvT1CVz8s1S/SOVpasWJOx7V/3rAY/pE= +gitlab.com/elixxir/comms v0.0.4-0.20201103220934-c476c9282f30/go.mod h1:5p7oz4yFrK037rPap6ooaWrloJrzuVZ4jnzOdvgyqnU= gitlab.com/elixxir/crypto v0.0.0-20200804182833-984246dea2c4 h1:28ftZDeYEko7xptCZzeFWS1Iam95dj46TWFVVlKmw6A= gitlab.com/elixxir/crypto v0.0.0-20200804182833-984246dea2c4/go.mod h1:ucm9SFKJo+K0N2GwRRpaNr+tKXMIOVWzmyUD0SbOu2c= gitlab.com/elixxir/crypto v0.0.3 h1:znCt/x2bL4y8czTPaaFkwzdgSgW3BJc/1+dxyf1jqVw= gitlab.com/elixxir/crypto v0.0.3/go.mod h1:ZNgBOblhYToR4m8tj4cMvJ9UsJAUKq+p0gCp07WQmhA= gitlab.com/elixxir/crypto v0.0.4 h1:8eWjvUepCU2PiqZM2NFYo6rFg1w8KWO1hMDwMNFEqoI= gitlab.com/elixxir/crypto v0.0.4/go.mod h1:ZNgBOblhYToR4m8tj4cMvJ9UsJAUKq+p0gCp07WQmhA= +gitlab.com/elixxir/crypto v0.0.5-0.20201109203841-ba162a25be6e h1:rkT8Pzjgo9oF3uS8ExHGNUQoJX/22qK3lU+vU8QsOCY= +gitlab.com/elixxir/crypto v0.0.5-0.20201109203841-ba162a25be6e/go.mod h1:ZNgBOblhYToR4m8tj4cMvJ9UsJAUKq+p0gCp07WQmhA= gitlab.com/elixxir/ekv v0.1.3 h1:OE+LBMIhjGUMwc6hHJzYvEPNJQV7t1vMnJyIgxUMUo8= gitlab.com/elixxir/ekv v0.1.3/go.mod h1:e6WPUt97taFZe5PFLPb1Dupk7tqmDCTQu1kkstqJvw4= gitlab.com/elixxir/primitives v0.0.0-20200731184040-494269b53b4d/go.mod h1:OQgUZq7SjnE0b+8+iIAT2eqQF+2IFHn73tOo+aV11mg= diff --git a/network/message/parse/firstMessagePart_test.go b/network/message/parse/firstMessagePart_test.go new file mode 100644 index 0000000000000000000000000000000000000000..e1e7e692621e7251703695ac7c37861dfc18c830 --- /dev/null +++ b/network/message/parse/firstMessagePart_test.go @@ -0,0 +1,34 @@ +package parse + +import ( + "bytes" + "gitlab.com/elixxir/client/interfaces/message" + "testing" + "time" +) + +func TestnewFirstMessagePart(t *testing.T) { + now := time.Now() + fmp := newFirstMessagePart(message.Text, uint32(6), uint8(2), now, + []byte{'t', 'e', 's', 't', 'i', 'n', 'g'}) + + if fmp.GetType() != message.Text { + + } + + if fmp.GetNumParts() != uint8(2) { + + } + + recorded_now, err := fmp.GetTimestamp() + if err != nil { + t.Fatal(err) + } + if recorded_now != now { + + } + + if !bytes.Equal(fmp.Bytes(), []byte{'t', 'e', 's', 't', 'i', 'n', 'g'}) { + + } +} diff --git a/ud/manager.go b/ud/manager.go index 60084fc28f278f4cfb9baeb21afe5a7da152ffa2..697d229dd965aa9662afbc70ee7ac9747852f8d3 100644 --- a/ud/manager.go +++ b/ud/manager.go @@ -3,11 +3,12 @@ package ud import ( "gitlab.com/elixxir/comms/client" "gitlab.com/xx_network/comms/connect" + "gitlab.com/xx_network/crypto/signature/rsa" ) -type Manager struct{ - comms *client.Comms - host *connect.Host +type Manager struct { + comms *client.Comms + host *connect.Host + privKey *rsa.PrivateKey } - diff --git a/ud/remove.go b/ud/remove.go index c4ce15cfc31ec88c8b5a271811ffabd3bde3a624..a3895ae0a4e68ce0c4ae70ed78b7cdc9dd97cb8c 100644 --- a/ud/remove.go +++ b/ud/remove.go @@ -1,33 +1,70 @@ package ud import ( + "crypto/rand" + "github.com/golang/protobuf/proto" + "github.com/golang/protobuf/ptypes/any" "gitlab.com/elixxir/client/interfaces/contact" + "gitlab.com/elixxir/comms/mixmessages" + "gitlab.com/elixxir/crypto/hash" "gitlab.com/xx_network/comms/connect" "gitlab.com/xx_network/comms/messages" + "gitlab.com/xx_network/crypto/signature/rsa" ) - -type removeFactComms interface{ - SendDeleteMessage(host *connect.Host, message *messages.AuthenticatedMessage)(*messages.Ack, error) +type removeFactComms interface { + SendDeleteMessage(host *connect.Host, message *messages.AuthenticatedMessage) (*messages.Ack, error) } -func (m *Manager)RemoveFact(fact contact.Fact)error{ - return nil//m.removeFact(fact,m.comms) +func (m *Manager) RemoveFact(fact contact.Fact) error { + return m.removeFact(fact, m.comms) } -func (m *Manager)removeFact(fact contact.Fact, SendDeleteMessage removeFactComms)error { - //digest the fact - fact.Stringify() - //sign the fact - //rsa.Sign() +func (m *Manager) removeFact(fact contact.Fact, rFC removeFactComms) error { + // Construct the message to send + // Convert our Fact to a mixmessages Fact for sending + mmFact := mixmessages.Fact{ + Fact: fact.Fact, + FactType: uint32(fact.T), + } - //constuct the message + // Sign the fact + signedFact, err := rsa.Sign(rand.Reader, m.privKey, hash.CMixHash, mmFact.Digest(), rsa.NewDefaultOptions()) + if err != nil { + return err + } + // Create our Fact Removal Request message data + remFactMsg := mixmessages.FactRemovalRequest{ + UID: m.host.GetId().Marshal(), + RemovalData: &mmFact, + } - //send the message + // Marshal it to bytes for sending over the wire + remFactMsgMarshalled, err := proto.Marshal(&remFactMsg) + if err != nil { + return err + } - //return the error + // Convert our marshalled Fact Removal Request to an Any + // object for sending in an authed message + remFactMsgAny := any.Any{ + TypeUrl: "gitlab.com/elixxir/client/interfaces/contact.Fact", + Value: remFactMsgMarshalled, + } + // Create our AuthenticatedMessage so we can send the data over + msg := messages.AuthenticatedMessage{ + ID: nil, + Signature: signedFact, + Token: nil, + Client: nil, + Message: &remFactMsgAny, + } + // Send the message + _, err = rFC.SendDeleteMessage(m.host, &msg) + // Return the error + return err } diff --git a/ud/remove_test.go b/ud/remove_test.go new file mode 100644 index 0000000000000000000000000000000000000000..7ec08c4e28542cb036e2e9c78afe6e5d39314b39 --- /dev/null +++ b/ud/remove_test.go @@ -0,0 +1,74 @@ +package ud + +import ( + "gitlab.com/elixxir/client/interfaces/contact" + "gitlab.com/elixxir/comms/client" + "gitlab.com/elixxir/crypto/cyclic" + "gitlab.com/xx_network/comms/connect" + "gitlab.com/xx_network/comms/messages" + "gitlab.com/xx_network/crypto/csprng" + "gitlab.com/xx_network/crypto/large" + "gitlab.com/xx_network/crypto/signature/rsa" + "gitlab.com/xx_network/primitives/id" + "testing" +) + +var genericGroup = cyclic.NewGroup( + large.NewIntFromString("9DB6FB5951B66BB6FE1E140F1D2CE5502374161FD6538DF1648218642F0B5C48"+ + "C8F7A41AADFA187324B87674FA1822B00F1ECF8136943D7C55757264E5A1A44F"+ + "FE012E9936E00C1D3E9310B01C7D179805D3058B2A9F4BB6F9716BFE6117C6B5"+ + "B3CC4D9BE341104AD4A80AD6C94E005F4B993E14F091EB51743BF33050C38DE2"+ + "35567E1B34C3D6A5C0CEAA1A0F368213C3D19843D0B4B09DCB9FC72D39C8DE41"+ + "F1BF14D4BB4563CA28371621CAD3324B6A2D392145BEBFAC748805236F5CA2FE"+ + "92B871CD8F9C36D3292B5509CA8CAA77A2ADFC7BFD77DDA6F71125A7456FEA15"+ + "3E433256A2261C6A06ED3693797E7995FAD5AABBCFBE3EDA2741E375404AE25B", 16), + large.NewIntFromString("5C7FF6B06F8F143FE8288433493E4769C4D988ACE5BE25A0E24809670716C613"+ + "D7B0CEE6932F8FAA7C44D2CB24523DA53FBE4F6EC3595892D1AA58C4328A06C4"+ + "6A15662E7EAA703A1DECF8BBB2D05DBE2EB956C142A338661D10461C0D135472"+ + "085057F3494309FFA73C611F78B32ADBB5740C361C9F35BE90997DB2014E2EF5"+ + "AA61782F52ABEB8BD6432C4DD097BC5423B285DAFB60DC364E8161F4A2A35ACA"+ + "3A10B1C4D203CC76A470A33AFDCBDD92959859ABD8B56E1725252D78EAC66E71"+ + "BA9AE3F1DD2487199874393CD4D832186800654760E1E34C09E4D155179F9EC0"+ + "DC4473F996BDCE6EED1CABED8B6F116F7AD9CF505DF0F998E34AB27514B0FFE7", 16)) + +type testRFC struct{} + +func (rFC *testRFC) SendDeleteMessage(host *connect.Host, message *messages.AuthenticatedMessage) (*messages.Ack, error) { + return &messages.Ack{}, nil +} + +func TestRemoveFact(t *testing.T) { + c, err := client.NewClientComms(&id.DummyUser, nil, nil, nil) + if err != nil { + t.Fatal(err) + } + + h, err := connect.NewHost(&id.DummyUser, "address", nil, connect.GetDefaultHostParams()) + if err != nil { + t.Fatal(err) + } + + rng := csprng.NewSystemRNG() + cpk, err := rsa.GenerateKey(rng, 2048) + if err != nil { + t.Fatal(err) + } + + m := Manager{ + comms: c, + host: h, + privKey: cpk, + } + + f := contact.Fact{ + Fact: "testing", + T: 2, + } + + trfc := testRFC{} + + err = m.removeFact(f, &trfc) + if err != nil { + t.Fatal(err) + } +}