diff --git a/api/client.go b/api/client.go index 012e980a5d946c5dd632b896a9d26037d9b308bd..bd30a8bae5abb633f64956143edf38edf20036c2 100644 --- a/api/client.go +++ b/api/client.go @@ -13,12 +13,14 @@ import ( "gitlab.com/elixxir/client/auth" "gitlab.com/elixxir/client/interfaces" "gitlab.com/elixxir/client/interfaces/params" + "gitlab.com/elixxir/client/interfaces/preimage" "gitlab.com/elixxir/client/interfaces/user" "gitlab.com/elixxir/client/keyExchange" "gitlab.com/elixxir/client/network" "gitlab.com/elixxir/client/registration" "gitlab.com/elixxir/client/stoppable" "gitlab.com/elixxir/client/storage" + "gitlab.com/elixxir/client/storage/edge" "gitlab.com/elixxir/client/switchboard" "gitlab.com/elixxir/comms/client" "gitlab.com/elixxir/crypto/cyclic" @@ -555,13 +557,45 @@ func (c *Client) GetNodeRegistrationStatus() (int, int, error) { // DeleteContact is a function which removes a partner from Client's storage func (c *Client) DeleteContact(partnerId *id.ID) error { jww.DEBUG.Printf("Deleting contact with ID %s", partnerId) - if err := c.storage.E2e().DeletePartner(partnerId); err != nil { + //get the partner so they can be removed from preiamge store + partner, err := c.storage.E2e().GetPartner(partnerId) + if err!=nil{ + return errors.WithMessagef(err,"Could not delete %s because " + + "they could not be found", partnerId) + } + e2ePreimage := partner.GetE2EPreimage() + rekeyPreimage:= partner.GetRekeyPreimage() + + //delete the partner + if err = c.storage.E2e().DeletePartner(partnerId); err != nil { return err } - if err := c.storage.Auth().Delete(partnerId); err != nil { + //delete the preimages + if err = c.storage.GetEdge().Remove(edge.Preimage{ + Data: e2ePreimage, + Type: preimage.E2e, + Source: partnerId[:], + }, c.storage.GetUser().ReceptionID); err!=nil{ + jww.WARN.Printf("Failed delete the preimage for e2e " + + "from %s on contact deletion: %+v", partnerId, err) + } + + if err = c.storage.GetEdge().Remove(edge.Preimage{ + Data: rekeyPreimage, + Type: preimage.Rekey, + Source: partnerId[:], + }, c.storage.GetUser().ReceptionID); err!=nil{ + jww.WARN.Printf("Failed delete the preimage for rekey " + + "from %s on contact deletion: %+v", partnerId, err) + } + + if err = c.storage.Auth().Delete(partnerId); err != nil { return err } + + //delete conversations c.storage.Conversations().Delete(partnerId) + return nil } @@ -694,6 +728,13 @@ func checkVersionAndSetupStorage(def *ndf.NetworkDefinition, storageDir string, err = storageSess.ForwardRegistrationStatus(storage.PermissioningComplete) } + //add the request preiamge + storageSess.GetEdge().Add(edge.Preimage{ + Data: preimage.GenerateRequest(protoUser.ReceptionID), + Type: preimage.Request, + Source: protoUser.ReceptionID[:], + },protoUser.ReceptionID) + if err != nil { return errors.WithMessage(err, "Failed to denote state "+ "change in session") diff --git a/auth/callback.go b/auth/callback.go index 4a5fba05b7e74335fd71bac6685db01126ae2527..31028bea0a2189597885cbd32d7b1d3384747890 100644 --- a/auth/callback.go +++ b/auth/callback.go @@ -13,8 +13,10 @@ import ( jww "github.com/spf13/jwalterweatherman" "gitlab.com/elixxir/client/interfaces" "gitlab.com/elixxir/client/interfaces/message" + "gitlab.com/elixxir/client/interfaces/preimage" "gitlab.com/elixxir/client/stoppable" "gitlab.com/elixxir/client/storage/auth" + "gitlab.com/elixxir/client/storage/edge" "gitlab.com/elixxir/crypto/contact" "gitlab.com/elixxir/crypto/cyclic" "gitlab.com/elixxir/crypto/diffieHellman" @@ -313,6 +315,39 @@ func (m *Manager) doConfirm(sr *auth.SentRequest, grp *cyclic.Group, sr.GetPartner(), err) } + + //remove the confirm fingerprint + fp:= sr.GetFingerprint() + if err := m.storage.GetEdge().Remove(edge.Preimage{ + Data: preimage.Generate(fp[:],preimage.Confirm), + Type: preimage.Confirm, + Source: sr.GetPartner()[:], + }, m.storage.GetUser().ReceptionID); err!=nil{ + jww.WARN.Printf("Failed delete the preimage for confirm from %s: %+v", + sr.GetPartner(), err) + } + + //add the e2e and rekey firngeprints + //e2e + sessionPartner, err := m.storage.E2e().GetPartner(sr.GetPartner()) + if err!=nil{ + jww.FATAL.Panicf("Cannot find %s right after creating: %+v", sr.GetPartner(), err) + } + me := m.storage.GetUser().ReceptionID + + m.storage.GetEdge().Add(edge.Preimage{ + Data: sessionPartner.GetE2EPreimage(), + Type: preimage.E2e, + Source: sr.GetPartner()[:], + }, me) + + //rekey + m.storage.GetEdge().Add(edge.Preimage{ + Data: sessionPartner.GetRekeyPreimage(), + Type: preimage.Rekey, + Source: sr.GetPartner()[:], + }, me) + // delete the in progress negotiation // this undoes the request lock if err := m.storage.Auth().Delete(sr.GetPartner()); err != nil { diff --git a/auth/confirm.go b/auth/confirm.go index f13d3871d9669b52c66924cfb7e4f17bc89b080c..a8c622832d39caae61e5081087f3524b90d41b30 100644 --- a/auth/confirm.go +++ b/auth/confirm.go @@ -13,7 +13,9 @@ import ( jww "github.com/spf13/jwalterweatherman" "gitlab.com/elixxir/client/interfaces" "gitlab.com/elixxir/client/interfaces/params" + "gitlab.com/elixxir/client/interfaces/preimage" "gitlab.com/elixxir/client/storage" + "gitlab.com/elixxir/client/storage/edge" "gitlab.com/elixxir/crypto/contact" "gitlab.com/elixxir/crypto/diffieHellman" cAuth "gitlab.com/elixxir/crypto/e2e/auth" @@ -87,6 +89,7 @@ func ConfirmRequestAuth(partner contact.Contact, rng io.Reader, //get the fingerprint from the old ownership proof fp := cAuth.MakeOwnershipProofFP(storedContact.OwnershipProof) + preimg := preimage.Generate(fp[:],preimage.Confirm) //final construction baseFmt.SetEcrPayload(ecrPayload) @@ -114,6 +117,27 @@ func ConfirmRequestAuth(partner contact.Contact, rng io.Reader, events.Report(10, "Auth", "SendConfirmError", em) } + //add the preimages + sessionPartner, err := storage.E2e().GetPartner(partner.ID) + if err!=nil{ + jww.FATAL.Panicf("Cannot find %s right after creating: %+v", partner.ID, err) + } + me := storage.GetUser().ReceptionID + + //e2e + storage.GetEdge().Add(edge.Preimage{ + Data: sessionPartner.GetE2EPreimage(), + Type: preimage.E2e, + Source: partner.ID[:], + }, me) + + //rekey + storage.GetEdge().Add(edge.Preimage{ + Data: sessionPartner.GetRekeyPreimage(), + Type: preimage.Rekey, + Source: partner.ID[:], + }, me) + // delete the in progress negotiation // this unlocks the request lock //fixme - do these deletes at a later date @@ -126,8 +150,10 @@ func ConfirmRequestAuth(partner contact.Contact, rng io.Reader, jww.INFO.Printf("Confirming Auth with %s, msgDigest: %s", partner.ID, cmixMsg.Digest()) + param := params.GetDefaultCMIX() + param.IdentityPreimage = preimg /*send message*/ - round, _, err := net.SendCMIX(cmixMsg, partner.ID, params.GetDefaultCMIX()) + round, _, err := net.SendCMIX(cmixMsg, partner.ID, param) if err != nil { // if the send fails just set it to failed, it will but automatically // retried diff --git a/auth/request.go b/auth/request.go index 1be24089150fd7ef7dcce0c6ffaaffb1324bab2e..cbf4b36a5830243fa57122134da9727a5fd62bd4 100644 --- a/auth/request.go +++ b/auth/request.go @@ -13,9 +13,11 @@ import ( jww "github.com/spf13/jwalterweatherman" "gitlab.com/elixxir/client/interfaces" "gitlab.com/elixxir/client/interfaces/params" + "gitlab.com/elixxir/client/interfaces/preimage" "gitlab.com/elixxir/client/storage" "gitlab.com/elixxir/client/storage/auth" "gitlab.com/elixxir/client/storage/e2e" + "gitlab.com/elixxir/client/storage/edge" "gitlab.com/elixxir/crypto/contact" "gitlab.com/elixxir/crypto/cyclic" "gitlab.com/elixxir/crypto/diffieHellman" @@ -141,6 +143,12 @@ func RequestAuth(partner, me contact.Contact, message string, rng io.Reader, cmixMsg.SetMac(mac) cmixMsg.SetContents(baseFmt.Marshal()) + storage.GetEdge().Add(edge.Preimage{ + Data: preimage.Generate(confirmFp[:],preimage.Confirm), + Type: preimage.Confirm, + Source: partner.ID[:], + },me.ID) + jww.TRACE.Printf("RequestAuth SALT: %v", salt) jww.TRACE.Printf("RequestAuth ECRPAYLOAD: %v", baseFmt.GetEcrPayload()) jww.TRACE.Printf("RequestAuth MAC: %v", mac) @@ -160,8 +168,9 @@ func RequestAuth(partner, me contact.Contact, message string, rng io.Reader, partner.ID, cmixMsg.Digest()) /*send message*/ - round, _, err := net.SendCMIX(cmixMsg, partner.ID, - params.GetDefaultCMIX()) + p := params.GetDefaultCMIX() + p.IdentityPreimage = preimage.GenerateRequest(partner.ID) + round, _, err := net.SendCMIX(cmixMsg, partner.ID, p) if err != nil { // if the send fails just set it to failed, it will // but automatically retried diff --git a/auth/verify.go b/auth/verify.go index 66a86df6f125bb0abe7c28be4ecbb408603b0a98..1798e42be0781f19a1da2d9be1c9673c0d28f36d 100644 --- a/auth/verify.go +++ b/auth/verify.go @@ -18,3 +18,6 @@ func VerifyOwnership(received, verified contact.Contact, storage *storage.Sessio return cAuth.VerifyOwnershipProof(myHistoricalPrivKey, verified.DhPubKey, storage.E2e().GetGroup(), received.OwnershipProof) } + + + diff --git a/dummy/send.go b/dummy/send.go index 6cde639e97f776b485d599d5a2659771751e487f..96e9274cf84d8f9ad65faa3aa46dbe26df8568cc 100644 --- a/dummy/send.go +++ b/dummy/send.go @@ -70,7 +70,16 @@ func (m *Manager) sendMessages(msgs map[id.ID]format.Message) error { wg.Add(1) go func(i int64, recipient id.ID, msg format.Message) { - _, _, err := m.net.SendCMIX(msg, &recipient, params.GetDefaultCMIX()) + //fill the preiamge with random data to ensure it isnt repeatable + p := params.GetDefaultCMIX() + p.IdentityPreimage = make([]byte, 32) + rng := m.rng.GetStream() + if _, err := rng.Read(p.IdentityPreimage); err!=nil{ + jww.FATAL.Panicf("Failed to generate data for random " + + "identity preimage in e2e send: %+v", err) + } + rng.Close() + _, _, err := m.net.SendCMIX(msg, &recipient, p) if err != nil { jww.WARN.Printf("failed to send dummy message %d/%d: %+v", i, len(msgs), err) diff --git a/groupChat/makeGroup.go b/groupChat/makeGroup.go index e5137f56fd0bc45c8752c96f8244aaebe25fb365..a8f7773f9dc57feef95a5316fa193b7b83de799d 100644 --- a/groupChat/makeGroup.go +++ b/groupChat/makeGroup.go @@ -11,6 +11,7 @@ import ( "github.com/pkg/errors" jww "github.com/spf13/jwalterweatherman" gs "gitlab.com/elixxir/client/groupChat/groupStore" + "gitlab.com/elixxir/client/interfaces/preimage" "gitlab.com/elixxir/client/storage/edge" "gitlab.com/elixxir/crypto/contact" "gitlab.com/elixxir/crypto/fastRNG" @@ -92,7 +93,7 @@ func (m Manager) MakeGroup(membership []*id.ID, name, msg []byte) (gs.Group, edgeStore := m.store.GetEdge() edgeStore.Add(edge.Preimage{ Data: g.ID[:], - Type: "group", + Type: preimage.Group, Source: g.ID[:], }, m.store.GetUser().ReceptionID) } diff --git a/groupChat/manager.go b/groupChat/manager.go index 9c2f83249d9100f8433f7b9373b5d39897b575b2..7fffb109d44dadc435383d65424ac1b55b0f41b3 100644 --- a/groupChat/manager.go +++ b/groupChat/manager.go @@ -14,6 +14,7 @@ import ( gs "gitlab.com/elixxir/client/groupChat/groupStore" "gitlab.com/elixxir/client/interfaces" "gitlab.com/elixxir/client/interfaces/message" + "gitlab.com/elixxir/client/interfaces/preimage" "gitlab.com/elixxir/client/stoppable" "gitlab.com/elixxir/client/storage" "gitlab.com/elixxir/client/storage/edge" @@ -133,7 +134,7 @@ func (m Manager) JoinGroup(g gs.Group) error { edgeStore := m.store.GetEdge() edgeStore.Add(edge.Preimage{ Data: g.ID[:], - Type: "group", + Type: preimage.Group, Source: g.ID[:], }, m.store.GetUser().ReceptionID) @@ -151,7 +152,7 @@ func (m Manager) LeaveGroup(groupID *id.ID) error { edgeStore := m.store.GetEdge() err := edgeStore.Remove(edge.Preimage{ Data: groupID[:], - Type: "group", + Type: preimage.Group, Source: groupID[:], }, m.store.GetUser().ReceptionID) diff --git a/interfaces/preimage/generate.go b/interfaces/preimage/generate.go new file mode 100644 index 0000000000000000000000000000000000000000..a372f02c4c50fa32d72c4d1e394fef7b5d37662b --- /dev/null +++ b/interfaces/preimage/generate.go @@ -0,0 +1,28 @@ +package preimage + +import ( + "gitlab.com/xx_network/primitives/id" + "golang.org/x/crypto/blake2b" +) + +func Generate(data []byte, t string) []byte { + // Hash fingerprints + h, _ := blake2b.New256(nil) + h.Write(data) + h.Write([]byte(t)) + + // Base 64 encode hash and truncate + return h.Sum(nil) +} + + +func GenerateRequest(recipient *id.ID) []byte { + // Hash fingerprints + h, _ := blake2b.New256(nil) + h.Write(recipient[:]) + h.Write([]byte(Request)) + + // Base 64 encode hash and truncate + return h.Sum(nil) +} + diff --git a/interfaces/preimage/request.go b/interfaces/preimage/request.go new file mode 100644 index 0000000000000000000000000000000000000000..00a29f7384f4b864b14f323a319b49e184cc7934 --- /dev/null +++ b/interfaces/preimage/request.go @@ -0,0 +1,24 @@ +package preimage + +import ( + "gitlab.com/xx_network/primitives/id" + "golang.org/x/crypto/blake2b" +) + +func MakeRequest(uid *id.ID)[]byte{ + h, _ := blake2b.New256(nil) + h.Write(uid[:]) + h.Write([]byte(Request)) + + // Base 64 encode hash and truncate + return h.Sum(nil) +} + +func MakeDefault(uid *id.ID)[]byte{ + h, _ := blake2b.New256(nil) + h.Write(uid[:]) + h.Write([]byte(Default)) + + // Base 64 encode hash and truncate + return h.Sum(nil) +} diff --git a/interfaces/preimage/types.go b/interfaces/preimage/types.go new file mode 100644 index 0000000000000000000000000000000000000000..9688251fbbe1c4fe0240f67339b0ef75c78b8aa0 --- /dev/null +++ b/interfaces/preimage/types.go @@ -0,0 +1,14 @@ +package preimage + +const( + Default = "default" + Request = "request" + Confirm = "confirm" + Rekey = "rekey" + E2e = "e2e" + Group = "group" + +) + + + diff --git a/keyExchange/rekey.go b/keyExchange/rekey.go index 5acc9ba71f383b5e8ae15966421ecd227ed7f6e7..f549d7a57a69674565618048828b3a8586a42717 100644 --- a/keyExchange/rekey.go +++ b/keyExchange/rekey.go @@ -62,8 +62,10 @@ func trigger(instance *network.Instance, sendE2E interfaces.SendE2E, "negotiating status: %s", session, session.NegotiationStatus()) } + rekeyPreimage := manager.GetRekeyPreimage() + // send the rekey notification to the partner - err := negotiate(instance, sendE2E, sess, negotiatingSession, sendTimeout, stop) + err := negotiate(instance, sendE2E, sess, negotiatingSession, sendTimeout, rekeyPreimage, stop) // if sending the negotiation fails, revert the state of the session to // unconfirmed so it will be triggered in the future if err != nil { @@ -74,7 +76,7 @@ func trigger(instance *network.Instance, sendE2E interfaces.SendE2E, func negotiate(instance *network.Instance, sendE2E interfaces.SendE2E, sess *storage.Session, session *e2e.Session, sendTimeout time.Duration, - stop *stoppable.Single) error { + rekeyPreimage []byte, stop *stoppable.Single) error { e2eStore := sess.E2e() //generate public key @@ -103,6 +105,7 @@ func negotiate(instance *network.Instance, sendE2E interfaces.SendE2E, //send the message under the key exchange e2eParams := params.GetDefaultE2E() e2eParams.Type = params.KeyExchange + e2eParams.IdentityPreimage = rekeyPreimage rounds, _, _, err := sendE2E(m, e2eParams, stop) // If the send fails, returns the error so it can be handled. The caller diff --git a/keyExchange/trigger.go b/keyExchange/trigger.go index 0bdcbcc6e6ca80a28b58f53bbf32f22a2b0d0d41..b4f6eb69c95707e1d330b255d10df6d3f6ae83e5 100644 --- a/keyExchange/trigger.go +++ b/keyExchange/trigger.go @@ -122,6 +122,7 @@ func handleTrigger(sess *storage.Session, net interfaces.NetworkManager, //send the message under the key exchange e2eParams := params.GetDefaultE2E() + e2eParams.IdentityPreimage = partner.GetRekeyPreimage() // store in critical messages buffer first to ensure it is resent if the // send fails diff --git a/network/message/sendE2E.go b/network/message/sendE2E.go index 5f42729f651de44afa707d10b52d2d5c83caf428..f0d20c0687abceb72ecdc57aa31b7c3848168dac 100644 --- a/network/message/sendE2E.go +++ b/network/message/sendE2E.go @@ -93,6 +93,11 @@ func (m *Manager) SendE2E(msg message.Send, param params.E2E, jww.INFO.Printf("E2E sending %d/%d to %s with msgDigest: %s, key fp: %s", i+i, len(partitions), msg.Recipient, msgEnc.Digest(), key.Fingerprint()) + //set the preimage to the default e2e one if it is not already set + if param.IdentityPreimage==nil{ + param.IdentityPreimage = partner.GetE2EPreimage() + } + //send the cmix message, each partition in its own thread wg.Add(1) go func(i int) { diff --git a/storage/e2e/manager.go b/storage/e2e/manager.go index a978beeae77c2fffa723c15f495ebf1fa4925c5c..b601640ea2e5774a48e1d7d7794f7adb5952b913 100644 --- a/storage/e2e/manager.go +++ b/storage/e2e/manager.go @@ -14,13 +14,13 @@ import ( "github.com/pkg/errors" jww "github.com/spf13/jwalterweatherman" "gitlab.com/elixxir/client/interfaces/params" + "gitlab.com/elixxir/client/interfaces/preimage" "gitlab.com/elixxir/client/storage/utility" "gitlab.com/elixxir/client/storage/versioned" "gitlab.com/elixxir/crypto/cyclic" dh "gitlab.com/elixxir/crypto/diffieHellman" "gitlab.com/xx_network/primitives/id" "golang.org/x/crypto/blake2b" - "sort" ) const managerPrefix = "Manager{partner:%s}" @@ -229,9 +229,37 @@ const relationshipFpLength = 15 // relationship fingerprints truncated to 15 characters. func (m *Manager) GetRelationshipFingerprint() string { // Sort fingerprints - fps := [][]byte{m.receive.fingerprint, m.send.fingerprint} - less := func(i, j int) bool { return bytes.Compare(fps[i], fps[j]) == -1 } - sort.Slice(fps, less) + var fps [][]byte + + + if bytes.Compare(m.receive.fingerprint, m.send.fingerprint)==1{ + fps = [][]byte{m.receive.fingerprint,m.send.fingerprint} + }else{ + fps = [][]byte{m.receive.fingerprint,m.send.fingerprint} + } + + // Hash fingerprints + h, _ := blake2b.New256(nil) + for _, fp := range fps { + h.Write(fp) + } + + // Base 64 encode hash and truncate + return base64.StdEncoding.EncodeToString(m.GetRelationshipFingerprintBytes())[:relationshipFpLength] +} + +// GetRelationshipFingerprintBytes returns a unique fingerprint for an E2E +// relationship. used for the e2e preimage. +func (m *Manager) GetRelationshipFingerprintBytes() []byte { + // Sort fingerprints + var fps [][]byte + + + if bytes.Compare(m.receive.fingerprint, m.send.fingerprint)==1{ + fps = [][]byte{m.receive.fingerprint,m.send.fingerprint} + }else{ + fps = [][]byte{m.receive.fingerprint,m.send.fingerprint} + } // Hash fingerprints h, _ := blake2b.New256(nil) @@ -240,5 +268,18 @@ func (m *Manager) GetRelationshipFingerprint() string { } // Base 64 encode hash and truncate - return base64.StdEncoding.EncodeToString(h.Sum(nil))[:relationshipFpLength] + return h.Sum(nil) } + +// GetE2EPreimage returns a hash of the unique +// fingerprint for an E2E relationship message. +func (m *Manager) GetE2EPreimage() []byte { + return preimage.Generate(m.GetRelationshipFingerprintBytes(), preimage.E2e) +} + +// GetRekeyPreimage returns a hash of the unique +// fingerprint for an E2E rekey message. +func (m *Manager) GetRekeyPreimage() []byte { + return preimage.Generate(m.GetRelationshipFingerprintBytes(), preimage.Rekey) +} + diff --git a/storage/edge/edge_test.go b/storage/edge/edge_test.go index 91bc215696b611ab0ea8c79df9d217cbd9c58c26..b03e3240601b95184e5976c70a789de9e8910be6 100644 --- a/storage/edge/edge_test.go +++ b/storage/edge/edge_test.go @@ -16,6 +16,7 @@ package edge import ( "encoding/json" + "gitlab.com/elixxir/client/interfaces/preimage" "gitlab.com/elixxir/client/storage/versioned" "gitlab.com/elixxir/ekv" "gitlab.com/xx_network/primitives/id" @@ -147,7 +148,7 @@ func TestStore_Add(t *testing.T) { "\nexpected: %d\nreceived: %d", identities[0], 3, len(pis)) } - expected := Preimage{identities[0].Bytes(), "default", identities[0].Bytes()} + expected := Preimage{identities[0].Bytes(), preimage.Default, identities[0].Bytes()} if !reflect.DeepEqual(pis[expected.key()], expected) { t.Errorf("First Preimage of first Preimages does not match expected."+ "\nexpected: %+v\nreceived: %+v", expected, pis[expected.key()]) @@ -172,7 +173,7 @@ func TestStore_Add(t *testing.T) { "\nexpected: %d\nreceived: %d", identities[1], 2, len(pis)) } - expected = Preimage{identities[1].Bytes(), "default", identities[1].Bytes()} + expected = Preimage{identities[1].Bytes(), preimage.Default, identities[1].Bytes()} if !reflect.DeepEqual(pis[expected.key()], expected) { t.Errorf("First Preimage of second Preimages does not match expected."+ "\nexpected: %+v\nreceived: %+v", expected, pis[expected.key()]) @@ -347,7 +348,7 @@ func TestStore_Get(t *testing.T) { } expected := Preimages{ - identities[0].String(): Preimage{identities[0].Bytes(), "default", identities[0].Bytes()}, + identities[0].String(): Preimage{identities[0].Bytes(), preimage.Default, identities[0].Bytes()}, preimages[0].key(): preimages[0], preimages[2].key(): preimages[2], } @@ -363,7 +364,7 @@ func TestStore_Get(t *testing.T) { } expected = Preimages{ - identities[1].String(): Preimage{identities[1].Bytes(), "default", identities[1].Bytes()}, + identities[1].String(): Preimage{identities[1].Bytes(), preimage.Default, identities[1].Bytes()}, preimages[1].key(): preimages[1], } @@ -453,12 +454,12 @@ func TestLoadStore(t *testing.T) { expectedPis := []Preimages{ { - identities[0].String(): Preimage{identities[0].Bytes(), "default", identities[0].Bytes()}, + identities[0].String(): Preimage{identities[0].Bytes(), preimage.Default, identities[0].Bytes()}, preimages[0].key(): preimages[0], preimages[2].key(): preimages[2], }, { - identities[1].String(): Preimage{identities[1].Bytes(), "default", identities[1].Bytes()}, + identities[1].String(): Preimage{identities[1].Bytes(), preimage.Default, identities[1].Bytes()}, preimages[1].key(): preimages[1], }, } diff --git a/storage/edge/preimage.go b/storage/edge/preimage.go index f9e63a6417c5c8f81f7fc8cdffd237ee8885d923..0a10b1e6c17fb25891fbb37aa1e5cf3924213217 100644 --- a/storage/edge/preimage.go +++ b/storage/edge/preimage.go @@ -4,6 +4,7 @@ import ( "encoding/base64" "encoding/json" "github.com/pkg/errors" + "gitlab.com/elixxir/client/interfaces/preimage" "gitlab.com/elixxir/client/storage/versioned" "gitlab.com/xx_network/primitives/id" "gitlab.com/xx_network/primitives/netTime" @@ -33,8 +34,8 @@ type Preimages map[string]Preimage func newPreimages(identity *id.ID) Preimages { pis := Preimages{ identity.String(): { - Data: identity[:], - Type: "default", + Data: preimage.MakeDefault(identity), + Type: preimage.Default, Source: identity[:], }, } diff --git a/storage/edge/preimage_test.go b/storage/edge/preimage_test.go index c70d449f2e7be43bfa0cbebdbb0466baa61d83cf..b4f3c7ee781ff0b8ecf04b7b3e699bf19c9f9d37 100644 --- a/storage/edge/preimage_test.go +++ b/storage/edge/preimage_test.go @@ -10,6 +10,7 @@ package edge import ( "bytes" "encoding/json" + "gitlab.com/elixxir/client/interfaces/preimage" "gitlab.com/elixxir/client/storage/versioned" "gitlab.com/elixxir/ekv" "gitlab.com/xx_network/primitives/id" @@ -22,7 +23,7 @@ func Test_newPreimages(t *testing.T) { identity := id.NewIdFromString("identity", id.User, t) expected := Preimages{ identity.String(): { - Data: identity.Bytes(), + Data: preimage.MakeDefault(identity), Type: "default", Source: identity.Bytes(), }, @@ -42,17 +43,17 @@ func TestPreimages_add(t *testing.T) { identity1 := id.NewIdFromString("identity1", id.User, t) identity2 := id.NewIdFromString("identity3", id.User, t) expected := Preimages{ - identity0.String(): {identity0.Bytes(), "default", identity0.Bytes()}, - identity1.String(): {identity1.Bytes(), "group", identity1.Bytes()}, - identity2.String(): {identity2.Bytes(), "default", identity2.Bytes()}, + identity0.String(): {identity0.Bytes(), preimage.Default, preimage.MakeDefault(identity0)}, + identity1.String(): {identity1.Bytes(), preimage.Group, identity1.Bytes()}, + identity2.String(): {identity2.Bytes(), preimage.Default, identity2.Bytes()}, } pis := newPreimages(identity0) - exists := pis.add(Preimage{identity1.Bytes(), "group", identity1.Bytes()}) + exists := pis.add(Preimage{identity1.Bytes(), preimage.Group, identity1.Bytes()}) if !exists { t.Errorf("Failed to add idenetity.") } - exists = pis.add(Preimage{identity2.Bytes(), "default", identity2.Bytes()}) + exists = pis.add(Preimage{identity2.Bytes(), preimage.Default, identity2.Bytes()}) if !exists { t.Errorf("Failed to add idenetity.") } @@ -82,9 +83,9 @@ func TestPreimages_remove(t *testing.T) { // Add 10 Preimage to the list for i := 0; i < 10; i++ { identity := id.NewIdFromUInt(uint64(i), id.User, t) - pisType := "default" + pisType := preimage.Default if i%2 == 0 { - pisType = "group" + pisType = preimage.Group } exists := pis.add(Preimage{identity.Bytes(), pisType, identity.Bytes()})