From 71cfd9aaaa8d01489090d0c7e4379eb781faf73d Mon Sep 17 00:00:00 2001 From: Sydney Anne Erickson <sydney@elixxir.io> Date: Tue, 10 Nov 2020 08:35:08 -0800 Subject: [PATCH] removeFact --- .../message/parse/firstMessagePart_test.go | 34 +++++++++ ud/manager.go | 10 +-- ud/remove.go | 63 ++++++++++++---- ud/remove_test.go | 74 +++++++++++++++++++ 4 files changed, 162 insertions(+), 19 deletions(-) create mode 100644 network/message/parse/firstMessagePart_test.go create mode 100644 ud/remove_test.go diff --git a/network/message/parse/firstMessagePart_test.go b/network/message/parse/firstMessagePart_test.go new file mode 100644 index 000000000..e1e7e6926 --- /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 3dcb624ca..e89be0fd8 100644 --- a/ud/manager.go +++ b/ud/manager.go @@ -3,11 +3,11 @@ 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 - privKey * +type Manager struct { + comms *client.Comms + host *connect.Host + privKey *rsa.PrivateKey } - diff --git a/ud/remove.go b/ud/remove.go index 0cee8b7a6..a3895ae0a 100644 --- a/ud/remove.go +++ b/ud/remove.go @@ -1,35 +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/client" + "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 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 000000000..060e63960 --- /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, 256) + 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) + } +} -- GitLab