diff --git a/broadcast/client.go b/broadcast/client.go index 1b4891a00bdf4d8ae9ce6bf31c2b020b356fa114..678c7e9dccf7ef0322aea6369a92d6dcfde032ca 100644 --- a/broadcast/client.go +++ b/broadcast/client.go @@ -42,7 +42,8 @@ func NewBroadcastChannel(channel *crypto.Channel, net Client, } // Add channel's identity - net.AddIdentity(channel.ReceptionID, identity.Forever, true) + net.AddIdentityWithHistory(channel.ReceptionID, identity.Forever, + channel.Created, true) jww.INFO.Printf("New broadcast channel client created for channel %q (%s)", channel.Name, channel.ReceptionID) diff --git a/broadcast/interface.go b/broadcast/interface.go index 3c674c0db3438862296e8980afcb8177eb3d2a9a..4c390995abaf0b942e5d17ae03b14064fd7fac0d 100644 --- a/broadcast/interface.go +++ b/broadcast/interface.go @@ -92,7 +92,7 @@ type Client interface { SendWithAssembler(recipient *id.ID, assembler cmix.MessageAssembler, cmixParams cmix.CMIXParams) (rounds.Round, ephemeral.Id, error) IsHealthy() bool - AddIdentity(id *id.ID, validUntil time.Time, persistent bool) + AddIdentityWithHistory(id *id.ID, validUntil, beginning time.Time, persistent bool) AddService(clientID *id.ID, newService message.Service, response message.Processor) DeleteClientService(clientID *id.ID) diff --git a/broadcast/utils_test.go b/broadcast/utils_test.go index ee1dfebc264c208e037bcbd45385bac6160fa154..299a2f663d387ea0f911f58bf2a18623e1d7f8c2 100644 --- a/broadcast/utils_test.go +++ b/broadcast/utils_test.go @@ -110,6 +110,17 @@ func (m *mockCmix) AddIdentity(id *id.ID, _ time.Time, _ bool) { m.handler.processorMap[*id] = make(map[string][]message.Processor) } +func (m *mockCmix) AddIdentityWithHistory(id *id.ID, _, _ time.Time, _ bool) { + m.handler.Lock() + defer m.handler.Unlock() + + if _, exists := m.handler.processorMap[*id]; exists { + return + } + + m.handler.processorMap[*id] = make(map[string][]message.Processor) +} + func (m *mockCmix) AddService(clientID *id.ID, newService message.Service, response message.Processor) { m.handler.Lock() diff --git a/channels/joinedChannel_test.go b/channels/joinedChannel_test.go index ca0ba9ba8319bb246c05f33e816bfbbb9f8b8b39..5b77b6a0114cfcf715e98b9cb071ef746efb5dd1 100644 --- a/channels/joinedChannel_test.go +++ b/channels/joinedChannel_test.go @@ -11,6 +11,13 @@ import ( "bytes" "crypto/ed25519" "encoding/binary" + "math/rand" + "reflect" + "sort" + "strconv" + "testing" + "time" + "gitlab.com/elixxir/client/broadcast" clientCmix "gitlab.com/elixxir/client/cmix" "gitlab.com/elixxir/client/cmix/message" @@ -24,12 +31,6 @@ import ( "gitlab.com/xx_network/crypto/csprng" "gitlab.com/xx_network/primitives/id" "gitlab.com/xx_network/primitives/id/ephemeral" - "math/rand" - "reflect" - "sort" - "strconv" - "testing" - "time" ) // Tests that manager.store stores the channel list in the ekv. @@ -143,9 +144,19 @@ func Test_manager_loadChannels(t *testing.T) { t.Errorf("Channel %s does not exist.", &chID) } - if !reflect.DeepEqual(ch.broadcast, loadedCh.broadcast) { + expected := ch.broadcast.Get() + received := loadedCh.broadcast.Get() + + // NOTE: Times don't compare properly after + // marshalling due to the monotonic counter + if expected.Created.Equal(received.Created) { + expected.Created = received.Created + } + + if !reflect.DeepEqual(expected, received) { t.Errorf("Channel %s does not match loaded channel."+ - "\nexpected: %+v\nreceived: %+v", &chID, ch.broadcast, loadedCh.broadcast) + "\nexpected: %+v\nreceived: %+v", &chID, + expected, received) } } } @@ -507,9 +518,17 @@ func Test_loadJoinedChannel(t *testing.T) { t.Errorf("Failed to load joinedChannel: %+v", err) } - if !reflect.DeepEqual(ch, loadedJc.broadcast.Get()) { + expected := *ch + received := *loadedJc.broadcast.Get() + // NOTE: Times don't compare properly after marshalling due to the + // monotonic counter + if expected.Created.Equal(received.Created) { + expected.Created = received.Created + } + + if !reflect.DeepEqual(expected, received) { t.Errorf("Loaded joinedChannel does not match original."+ - "\nexpected: %+v\nreceived: %+v", ch, loadedJc.broadcast.Get()) + "\nexpected: %+v\nreceived: %+v", expected, received) } } @@ -580,7 +599,7 @@ func newTestChannel(name, description string, rng csprng.Source, level cryptoBroadcast.PrivacyLevel) ( *cryptoBroadcast.Channel, rsa.PrivateKey, error) { c, pk, err := cryptoBroadcast.NewChannelVariableKeyUnsafe( - name, description, level, 1000, 512, rng) + name, description, level, time.Now(), 1000, 512, rng) return c, pk, err } @@ -599,8 +618,10 @@ func (m *mockBroadcastClient) SendWithAssembler(*id.ID, return rounds.Round{ID: id.Round(567)}, ephemeral.Id{}, nil } -func (m *mockBroadcastClient) IsHealthy() bool { return true } -func (m *mockBroadcastClient) AddIdentity(*id.ID, time.Time, bool) {} +func (m *mockBroadcastClient) IsHealthy() bool { return true } +func (m *mockBroadcastClient) AddIdentity(*id.ID, time.Time, bool) {} +func (m *mockBroadcastClient) AddIdentityWithHistory(id *id.ID, validUntil, beginning time.Time, persistent bool) { +} func (m *mockBroadcastClient) AddService(*id.ID, message.Service, message.Processor) {} func (m *mockBroadcastClient) DeleteClientService(*id.ID) {} func (m *mockBroadcastClient) RemoveIdentity(*id.ID) {} diff --git a/channels/manager.go b/channels/manager.go index b6a474e2fff2f874a12fbbcb2d6333f3eeb4db9e..56926aa1a474c992b48eae10cccedb9a1fd3bb6b 100644 --- a/channels/manager.go +++ b/channels/manager.go @@ -67,6 +67,7 @@ type Client interface { cmixParams cmix.CMIXParams) (rounds.Round, ephemeral.Id, error) IsHealthy() bool AddIdentity(id *id.ID, validUntil time.Time, persistent bool) + AddIdentityWithHistory(id *id.ID, validUntil, beginning time.Time, persistent bool) AddService(clientID *id.ID, newService message.Service, response message.Processor) DeleteClientService(clientID *id.ID) diff --git a/channels/sendTracker_test.go b/channels/sendTracker_test.go index 6948df3beee69e5ffeed5a119bda3a9240972131..2f564b88cd7f0d2468f1009c2f478de0c2f6a277 100644 --- a/channels/sendTracker_test.go +++ b/channels/sendTracker_test.go @@ -31,6 +31,8 @@ func (mc *mockClient) IsHealthy() bool { return true } func (mc *mockClient) AddIdentity(id *id.ID, validUntil time.Time, persistent bool) {} +func (mc *mockClient) AddIdentityWithHistory(id *id.ID, validUntil, beginning time.Time, persistent bool) { +} func (mc *mockClient) AddService(clientID *id.ID, newService message.Service, response message.Processor) { } diff --git a/cmix/identity/receptionID/fake_test.go b/cmix/identity/receptionID/fake_test.go index 14940f7f60c8e057273f2f2559e346505fe89690..dcc5ba2d654b2bd72375129f55df0c880e37df62 100644 --- a/cmix/identity/receptionID/fake_test.go +++ b/cmix/identity/receptionID/fake_test.go @@ -31,7 +31,7 @@ func Test_generateFakeIdentity(t *testing.T) { `"End":` + string(end) + `,"ExtraChecks":0,` + `"StartValid":` + string(startValid) + `,` + `"EndValid":` + string(endValid) + `,` + - `"Ephemeral":true,` + + `"Ephemeral":true,"ProcessNext":null,` + `"Fake":true,"UR":null,"ER":null,"CR":null}` timestamp := time.Date(2009, 11, 17, 20, 34, 58, 651387237, time.UTC) diff --git a/cmix/identity/receptionID/identity.go b/cmix/identity/receptionID/identity.go index bba7823789480636710b520d79d4deeadbfa1dbd..e8126015c290ab86ef44bc317b5bf65d727c0ddd 100644 --- a/cmix/identity/receptionID/identity.go +++ b/cmix/identity/receptionID/identity.go @@ -48,6 +48,11 @@ type Identity struct { // Makes the identity not store on disk Ephemeral bool + + // When this identity expired, it will auto add processNext to the identity list + // to be processed. In practice this is a reverse ordered list and is added whenever + // many identities are added at once in order to pick up sequentially + ProcessNext *Identity } func loadIdentity(kv *versioned.KV) (Identity, error) { diff --git a/cmix/identity/receptionID/store.go b/cmix/identity/receptionID/store.go index 967c22e034270d726b2c4e216d460dc767e0dbd2..bfd11eece56e01726cfed7bbbfa33e80ab03053f 100644 --- a/cmix/identity/receptionID/store.go +++ b/cmix/identity/receptionID/store.go @@ -203,9 +203,29 @@ func (s *Store) ForEach(n int, rng io.Reader, } func (s *Store) AddIdentity(identity Identity) error { - idH := makeIdHash(identity.EphId, identity.Source) + s.mux.Lock() defer s.mux.Unlock() + return s.addIdentity(identity) +} + +func (s *Store) addIdentity(identity Identity) error { + err := s.addIdentityNoSave(identity) + if err != nil { + return err + } + if !identity.Ephemeral { + if err = s.save(); err != nil { + jww.FATAL.Panicf("Failed to save reception store after identity "+ + "addition: %+v", err) + } + } + + return nil +} + +func (s *Store) addIdentityNoSave(identity Identity) error { + idH := makeIdHash(identity.EphId, identity.Source) // Do not make duplicates of IDs if _, ok := s.present[idH]; ok { @@ -228,13 +248,6 @@ func (s *Store) AddIdentity(identity Identity) error { s.active = append(s.active, reg) s.present[idH] = struct{}{} - if !identity.Ephemeral { - if err = s.save(); err != nil { - jww.FATAL.Panicf("Failed to save reception store after identity "+ - "addition: %+v", err) - } - } - return nil } @@ -313,12 +326,18 @@ func (s *Store) SetToExpire(addressSize uint8) { } func (s *Store) prune(now time.Time) { - lengthBefore := len(s.active) - var pruned []int64 + pruned := make([]int64, 0, len(s.active)) + added := make([]int64, 0, len(s.active)) // Prune the list + toAdd := make([]Identity, 0, len(s.active)) for i := 0; i < len(s.active); i++ { inQuestion := s.active[i] if now.After(inQuestion.End) && inQuestion.ExtraChecks == 0 { + if inQuestion.ProcessNext != nil { + toAdd = append(toAdd, *inQuestion.ProcessNext) + added = append(added, inQuestion.ProcessNext.EphId.Int64()) + + } if err := inQuestion.Delete(); err != nil { jww.ERROR.Printf("Failed to delete Identity for %s: %+v", inQuestion, err) @@ -331,11 +350,20 @@ func (s *Store) prune(now time.Time) { i-- } } + for i := range toAdd { + next := toAdd[i] + if err := s.addIdentityNoSave(next); err != nil { + jww.ERROR.Printf("Failed to add identity to process next "+ + "for %d(%s). The identity chain may be lost", + next.EphId.Int64(), next.Source) + } + } // Save the list if it changed - if lengthBefore != len(s.active) { + if len(added) > 0 || len(pruned) > 0 { jww.INFO.Printf( - "Pruned %d identities [%+v]", lengthBefore-len(s.active), pruned) + "Pruned %d identities [%+v], added %d [%+v]", len(pruned), pruned, + len(added), added) if err := s.save(); err != nil { jww.FATAL.Panicf("Failed to store reception storage: %+v", err) } diff --git a/cmix/identity/tracker.go b/cmix/identity/tracker.go index 7ab08da034fbdd1dbbbfd35ff54b7fc72c273929..a292711b7fad381838b82584fa30ee8afe0ba0f8 100644 --- a/cmix/identity/tracker.go +++ b/cmix/identity/tracker.go @@ -42,12 +42,22 @@ const ( // DefaultExtraChecks is the default value for ExtraChecks // on receptionID.Identity. - DefaultExtraChecks = 10 + DefaultExtraChecks = 5 + + // NetworkRetention is how long messages are + // retained on the network + NetworkRetention = 500 * time.Hour + + // GenerationDelta is how far into the past + // to go in order to ensure all relevant + // ephemeral identities are generated + GenerationDelta = time.Duration(ephemeral.Period) + (5 * time.Second) ) type Tracker interface { StartProcesses() stoppable.Stoppable AddIdentity(id *id.ID, validUntil time.Time, persistent bool) + AddIdentityWithHistory(id *id.ID, validUntil, beginning time.Time, persistent bool) RemoveIdentity(id *id.ID) ForEach(n int, rng io.Reader, addressSize uint8, operator func([]receptionID.IdentityUse) error) error @@ -73,7 +83,7 @@ type TrackedID struct { Creation time.Time } -func NewOrLoadTracker(session storage.Session, addrSpace address.Space) *manager { +func NewOrLoadTracker(session storage.Session, addrSpace address.Space) Tracker { // Initialization t := &manager{ tracked: make([]*TrackedID, 0), @@ -128,9 +138,32 @@ func (t *manager) StartProcesses() stoppable.Stoppable { // AddIdentity adds an identity to be tracked. func (t *manager) AddIdentity(id *id.ID, validUntil time.Time, persistent bool) { + lastGeneration := netTime.Now().Add(-GenerationDelta) + t.newIdentity <- TrackedID{ + NextGeneration: netTime.Now().Add(-time.Second), + LastGeneration: lastGeneration, + Source: id, + ValidUntil: validUntil, + Persistent: persistent, + Creation: netTime.Now(), + } +} + +// AddIdentityWithHistory adds an identity to be tracked which will slowly pick up history. +func (t *manager) AddIdentityWithHistory(id *id.ID, validUntil, historicalBeginning time.Time, persistent bool) { + retention := netTime.Now().Add(-NetworkRetention) + if historicalBeginning.Before(retention) { + historicalBeginning = retention + } + + if now := time.Now(); historicalBeginning.After(now) || + now.Sub(historicalBeginning) < GenerationDelta { + historicalBeginning = now.Add(-GenerationDelta) + } + t.newIdentity <- TrackedID{ NextGeneration: netTime.Now().Add(-time.Second), - LastGeneration: netTime.Now().Add(-time.Duration(ephemeral.Period)), + LastGeneration: historicalBeginning, Source: id, ValidUntil: validUntil, Persistent: persistent, @@ -331,9 +364,14 @@ func (t *manager) generateIdentitiesOverRange(inQuestion *TrackedID, jww.FATAL.Panicf("Could not generate upcoming IDs: %+v", err) } + identitiesToAdd := make([]receptionID.Identity, 0, len(protoIds)) + identitiesToChain := make([]receptionID.Identity, 0, len(protoIds)) + // Add identities for every address ID lastIdentityEnd := time.Time{} - for i, eid := range protoIds { + var NewestIdentity receptionID.Identity + for i, _ := range protoIds { + eid := protoIds[i] // Expand the grace period for both start and end newIdentity := receptionID.Identity{ EphemeralIdentity: receptionID.EphemeralIdentity{ @@ -355,25 +393,51 @@ func (t *manager) generateIdentitiesOverRange(inQuestion *TrackedID, } newIdentity.Ephemeral = !inQuestion.Persistent - if err := t.ephemeral.AddIdentity(newIdentity); err != nil { - jww.FATAL.Panicf("Could not insert identity: %+v", err) + + // If the identity expired before the current time, we know it + // is no longer valid and should be added to the chain + if netTime.Now().After(newIdentity.EndValid) { + identitiesToChain = append(identitiesToChain, newIdentity) + } else { + identitiesToAdd = append(identitiesToAdd, newIdentity) } - // Print debug information and set return value - if isLastIdentity := i == len(protoIds)-1; isLastIdentity { - jww.INFO.Printf("Current Identity: %d (source: %s), Start: %s, "+ - "End: %s, addrSize: %d", - newIdentity.EphId.Int64(), - newIdentity.Source, - newIdentity.StartValid, - newIdentity.EndValid, - addressSize) + if newIdentity.End.After(lastIdentityEnd) { lastIdentityEnd = newIdentity.End + NewestIdentity = newIdentity + } + } + + //link the chain + if len(identitiesToChain) > 0 { + firstLink := &identitiesToChain[len(identitiesToChain)-1] + currentLink := firstLink + if len(identitiesToChain) > 1 { + for i := len(identitiesToChain) - 1; i >= 0; i-- { + currentLink.ProcessNext = &identitiesToChain[i] + currentLink = currentLink.ProcessNext + } } + identitiesToAdd = append(identitiesToAdd, *firstLink) } + //add the identities + for i := 0; i < len(identitiesToAdd); i++ { + if err = t.ephemeral.AddIdentity(identitiesToAdd[i]); err != nil { + jww.FATAL.Panicf("Could not insert identity: %+v", err) + } + } + + jww.INFO.Printf("Current Identity: %d (source: %s), Start: %s, "+ + "End: %s, addrSize: %d", + NewestIdentity.EphId.Int64(), + NewestIdentity.Source, + NewestIdentity.StartValid, + NewestIdentity.EndValid, + addressSize) + jww.INFO.Printf("Number of identities generated: %d", len(protoIds)) - return lastIdentityEnd + return NewestIdentity.End } // save persistent TrackedID to storage diff --git a/cmix/interface.go b/cmix/interface.go index f6572fb1dbdf6811052cb5d541e05286288c20cb..1d0bfdaeb09c25ab4b26018233ab0b8b52e93964 100644 --- a/cmix/interface.go +++ b/cmix/interface.go @@ -116,6 +116,13 @@ type Client interface { // the identity will not be stored to disk and will be dropped on reload. AddIdentity(id *id.ID, validUntil time.Time, persistent bool) + // AddIdentityWithHistory adds an identity to be tracked. If persistent is + // false, the identity will not be stored to disk and will be dropped on + // reload. It will pickup messages slowly back in the history or up back + // until beginning or the start of message retention, which should be ~500 + // houses back + AddIdentityWithHistory(id *id.ID, validUntil, beginning time.Time, persistent bool) + // RemoveIdentity removes a currently tracked identity. RemoveIdentity(id *id.ID) diff --git a/connect/utils_test.go b/connect/utils_test.go index 86f190808b95d44e80cff854d87be643339f2f0c..3aab375cca15e1385a2fa7c621751a0ab508d0cf 100644 --- a/connect/utils_test.go +++ b/connect/utils_test.go @@ -172,8 +172,9 @@ func (m *mockCmix) SendWithAssembler(recipient *id.ID, assembler cmix.MessageAss func (m *mockCmix) SendMany([]cmix.TargetedCmixMessage, cmix.CMIXParams) (rounds.Round, []ephemeral.Id, error) { return rounds.Round{}, []ephemeral.Id{}, nil } -func (m *mockCmix) AddIdentity(*id.ID, time.Time, bool) {} -func (m *mockCmix) RemoveIdentity(*id.ID) {} +func (m *mockCmix) AddIdentity(*id.ID, time.Time, bool) {} +func (m *mockCmix) AddIdentityWithHistory(*id.ID, time.Time, time.Time, bool) {} +func (m *mockCmix) RemoveIdentity(*id.ID) {} func (m *mockCmix) GetIdentity(*id.ID) (identity.TrackedID, error) { return identity.TrackedID{Creation: netTime.Now().Add(-time.Minute)}, nil diff --git a/dummy/mockCmix_test.go b/dummy/mockCmix_test.go index 2aca679d0702225c69d01e7449c028ddd57cd7ee..75cdee581be7e2b08de783f8e27d9d58de078093 100644 --- a/dummy/mockCmix_test.go +++ b/dummy/mockCmix_test.go @@ -86,6 +86,11 @@ func (m *mockCmix) SendMany(messages []cmix.TargetedCmixMessage, p cmix.CMIXPara panic("implement me") } +func (m *mockCmix) AddIdentityWithHistory(id *id.ID, validUntil, beginning time.Time, persistent bool) { + //TODO implement me + panic("implement me") +} + func (m *mockCmix) AddIdentity(id *id.ID, validUntil time.Time, persistent bool) { //TODO implement me panic("implement me") diff --git a/e2e/fpGenerator_test.go b/e2e/fpGenerator_test.go index 249dc5bba79fc07fb38439a64b4266a658215ee0..657fc16462548659dcd8e409c5acb6da928ffeef 100644 --- a/e2e/fpGenerator_test.go +++ b/e2e/fpGenerator_test.go @@ -129,7 +129,9 @@ func (m *mockFpgCmix) SendMany([]cmix.TargetedCmixMessage, cmix.CMIXParams) (rou return rounds.Round{}, nil, nil } func (m *mockFpgCmix) AddIdentity(*id.ID, time.Time, bool) {} -func (m *mockFpgCmix) RemoveIdentity(*id.ID) {} +func (m *mockFpgCmix) AddIdentityWithHistory(id *id.ID, validUntil, beginning time.Time, persistent bool) { +} +func (m *mockFpgCmix) RemoveIdentity(*id.ID) {} func (m *mockFpgCmix) GetIdentity(*id.ID) (identity.TrackedID, error) { return identity.TrackedID{}, nil } diff --git a/e2e/rekey/utils_test.go b/e2e/rekey/utils_test.go index 0b9fd388668ff77f9cbfed8bc7dc6dc6572d3eeb..aeccacbe316832b436901c654981a6d6fc1138e5 100644 --- a/e2e/rekey/utils_test.go +++ b/e2e/rekey/utils_test.go @@ -252,6 +252,9 @@ func (m *mockNetManager) SendMany(messages []cmix.TargetedCmixMessage, p cmix.CM func (m *mockNetManager) AddIdentity(id *id.ID, validUntil time.Time, persistent bool) {} +func (m *mockNetManager) AddIdentityWithHistory(id *id.ID, validUntil, beginning time.Time, persistent bool) { +} + func (m *mockNetManager) RemoveIdentity(id *id.ID) {} func (m *mockNetManager) AddFingerprint(identity *id.ID, fingerprint format.Fingerprint, diff --git a/e2e/utils_test.go b/e2e/utils_test.go index 6d8835b8c51edaf47ca2821521e9e55de95f5db3..78a0eaa7c57a7cd0520f42c260e3968fdbf6ff6a 100644 --- a/e2e/utils_test.go +++ b/e2e/utils_test.go @@ -214,7 +214,9 @@ func (m *mockCmix) SendWithAssembler(recipient *id.ID, assembler cmix.MessageAss func (m *mockCmix) SendMany([]cmix.TargetedCmixMessage, cmix.CMIXParams) (rounds.Round, []ephemeral.Id, error) { return rounds.Round{}, nil, nil } -func (m *mockCmix) AddIdentity(*id.ID, time.Time, bool) {} +func (m *mockCmix) AddIdentity(*id.ID, time.Time, bool) {} +func (m *mockCmix) AddIdentityWithHistory(id *id.ID, validUntil, beginning time.Time, persistent bool) { +} func (m *mockCmix) RemoveIdentity(*id.ID) {} func (m *mockCmix) GetIdentity(*id.ID) (identity.TrackedID, error) { return identity.TrackedID{}, nil } diff --git a/fileTransfer/connect/utils_test.go b/fileTransfer/connect/utils_test.go index 6c9de504f42e812ec9bfc7c2c9925667241daa71..5910ac657f1262c741c64d7acd42155885c23452 100644 --- a/fileTransfer/connect/utils_test.go +++ b/fileTransfer/connect/utils_test.go @@ -140,7 +140,10 @@ func (m *mockCmix) SendWithAssembler(*id.ID, cmix.MessageAssembler, panic("implement me") } -func (m *mockCmix) AddIdentity(*id.ID, time.Time, bool) { panic("implement me") } +func (m *mockCmix) AddIdentity(*id.ID, time.Time, bool) { panic("implement me") } +func (m *mockCmix) AddIdentityWithHistory(id *id.ID, validUntil, beginning time.Time, persistent bool) { + panic("implement me") +} func (m *mockCmix) RemoveIdentity(*id.ID) { panic("implement me") } func (m *mockCmix) GetIdentity(*id.ID) (identity.TrackedID, error) { panic("implement me") } diff --git a/fileTransfer/e2e/utils_test.go b/fileTransfer/e2e/utils_test.go index 7de4bba2c25ddb23103da9f04c4a6eac8898984c..1c33203a16665ed99d99560477b1ca5f06c78a5e 100644 --- a/fileTransfer/e2e/utils_test.go +++ b/fileTransfer/e2e/utils_test.go @@ -142,7 +142,10 @@ func (m *mockCmix) SendWithAssembler(*id.ID, cmix.MessageAssembler, panic("implement me") } -func (m *mockCmix) AddIdentity(*id.ID, time.Time, bool) { panic("implement me") } +func (m *mockCmix) AddIdentity(*id.ID, time.Time, bool) { panic("implement me") } +func (m *mockCmix) AddIdentityWithHistory(id *id.ID, validUntil, beginning time.Time, persistent bool) { + panic("implement me") +} func (m *mockCmix) RemoveIdentity(*id.ID) { panic("implement me") } func (m *mockCmix) GetIdentity(*id.ID) (identity.TrackedID, error) { panic("implement me") } diff --git a/fileTransfer/groupChat/utils_test.go b/fileTransfer/groupChat/utils_test.go index 61dd18006d7d80b35712cc938267a2f5bd2ae4f7..b1f5f18d4e37d8a638caafb87aa739f9ee1aa337 100644 --- a/fileTransfer/groupChat/utils_test.go +++ b/fileTransfer/groupChat/utils_test.go @@ -137,7 +137,10 @@ func (m *mockCmix) SendWithAssembler(*id.ID, cmix.MessageAssembler, panic("implement me") } -func (m *mockCmix) AddIdentity(*id.ID, time.Time, bool) { panic("implement me") } +func (m *mockCmix) AddIdentity(*id.ID, time.Time, bool) { panic("implement me") } +func (m *mockCmix) AddIdentityWithHistory(id *id.ID, validUntil, beginning time.Time, persistent bool) { + panic("implement me") +} func (m *mockCmix) RemoveIdentity(*id.ID) { panic("implement me") } func (m *mockCmix) GetIdentity(*id.ID) (identity.TrackedID, error) { panic("implement me") } diff --git a/fileTransfer/utils_test.go b/fileTransfer/utils_test.go index ff7750fcbce0c8d99f260ffdd2c48bb6d64d14a7..a885e4d82139d363ebce7db8051325e642de2220 100644 --- a/fileTransfer/utils_test.go +++ b/fileTransfer/utils_test.go @@ -193,7 +193,10 @@ func (m *mockCmix) SendWithAssembler(*id.ID, cmix.MessageAssembler, panic("implement me") } -func (m *mockCmix) AddIdentity(*id.ID, time.Time, bool) { panic("implement me") } +func (m *mockCmix) AddIdentity(*id.ID, time.Time, bool) { panic("implement me") } +func (m *mockCmix) AddIdentityWithHistory(id *id.ID, validUntil, beginning time.Time, persistent bool) { + panic("implement me") +} func (m *mockCmix) RemoveIdentity(*id.ID) { panic("implement me") } func (m *mockCmix) GetIdentity(*id.ID) (identity.TrackedID, error) { panic("implement me") } diff --git a/go.mod b/go.mod index 86c8bb0e613356f1acab4c51d235bd4a8e450ac4..ff2b199186dfd6f5aa81b91170d59f903d06be25 100644 --- a/go.mod +++ b/go.mod @@ -15,7 +15,7 @@ require ( github.com/stretchr/testify v1.8.0 gitlab.com/elixxir/bloomfilter v0.0.0-20211222005329-7d931ceead6f gitlab.com/elixxir/comms v0.0.4-0.20221025020711-eba3adc4eb06 - gitlab.com/elixxir/crypto v0.0.7-0.20221025020525-985806badd65 + gitlab.com/elixxir/crypto v0.0.7-0.20221025180839-3d8948607447 gitlab.com/elixxir/ekv v0.2.1 gitlab.com/elixxir/primitives v0.0.3-0.20221025020430-f5d2eb330fbc gitlab.com/xx_network/comms v0.0.4-0.20221025020408-9b62d4c2e700 diff --git a/go.sum b/go.sum index 9ad9976a69f119bc27c6ec2cfc6d4c1ed2ce000c..2597a5c1231516e046c341ee927ae87b85c59f53 100644 --- a/go.sum +++ b/go.sum @@ -512,6 +512,8 @@ gitlab.com/elixxir/crypto v0.0.0-20200804182833-984246dea2c4/go.mod h1:ucm9SFKJo gitlab.com/elixxir/crypto v0.0.3/go.mod h1:ZNgBOblhYToR4m8tj4cMvJ9UsJAUKq+p0gCp07WQmhA= gitlab.com/elixxir/crypto v0.0.7-0.20221025020525-985806badd65 h1:CWBU/BFw0II7q4ZKkLUVMSCzn2sRVCbbEiN4EJJ/vu0= gitlab.com/elixxir/crypto v0.0.7-0.20221025020525-985806badd65/go.mod h1:NImDa7951+jSolkYN/BBUm6qG6f+k0hsFZOCIxBlLhE= +gitlab.com/elixxir/crypto v0.0.7-0.20221025180839-3d8948607447 h1:hFOOOGiVB9XtzSM//aClSJ+5nf4JSmmCkoWcc635W8I= +gitlab.com/elixxir/crypto v0.0.7-0.20221025180839-3d8948607447/go.mod h1:NImDa7951+jSolkYN/BBUm6qG6f+k0hsFZOCIxBlLhE= 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= diff --git a/groupChat/networkManager_test.go b/groupChat/networkManager_test.go index e87b3f655bca1e2d5ccbf3d6547a25c1b1ac471d..934744be0b08341ba95cc8e4e4af25bbcb5bae0d 100644 --- a/groupChat/networkManager_test.go +++ b/groupChat/networkManager_test.go @@ -95,6 +95,11 @@ func (tnm *testNetworkManager) AddIdentity(id *id.ID, validUntil time.Time, pers panic("implement me") } +func (tnm *testNetworkManager) AddIdentityWithHistory(id *id.ID, validUntil, beginning time.Time, persistent bool) { + //TODO implement me + panic("implement me") +} + func (tnm *testNetworkManager) RemoveIdentity(id *id.ID) { //TODO implement me panic("implement me") diff --git a/ud/networkManager_test.go b/ud/networkManager_test.go index bd3630ebf9016e37535dbba6ea332c5676da4a1a..e58b3cf1fe3ef539e4c19bcb8ca2f95e24a15901 100644 --- a/ud/networkManager_test.go +++ b/ud/networkManager_test.go @@ -127,6 +127,10 @@ func (tnm *testNetworkManager) AddIdentity(id *id.ID, validUntil time.Time, pers return } +func (tnm *testNetworkManager) AddIdentityWithHistory(id *id.ID, validUntil, beginning time.Time, persistent bool) { + return +} + func (tnm *testNetworkManager) DeleteClientFingerprints(identity *id.ID) { return } diff --git a/xxdk/utilsInterfaces_test.go b/xxdk/utilsInterfaces_test.go index 4fbf3852387c7c095934c2fbf65f388cfa046e2f..a6be0ca8d7143ed748efe04058930a47392aa08c 100644 --- a/xxdk/utilsInterfaces_test.go +++ b/xxdk/utilsInterfaces_test.go @@ -160,6 +160,10 @@ func (t *testNetworkManagerGeneric) AddHealthCallback(f func(bool)) uint64 { func (t *testNetworkManagerGeneric) AddIdentity(id *id.ID, validUntil time.Time, persistent bool) { } +func (t *testNetworkManagerGeneric) AddIdentityWithHistory(id *id.ID, validUntil, + beginning time.Time, persistent bool) { +} + func (t *testNetworkManagerGeneric) RemoveIdentity(id *id.ID) {} func (t *testNetworkManagerGeneric) AddService(clientID *id.ID, newService message.Service, response message.Processor) {