43 Commits

Author SHA1 Message Date
Patryk Osmaczko
bafb0a71d0 fix: prevent panic: send on closed channel 2024-02-27 11:00:29 +01:00
Andrea Maria Piana
605fe40e32 Fix encryption metadata issues #4613
This commit fixes a few issues with communities encryption:

Key distribution was disconnected from the community description, this created a case where the key would arrive after the community description and that would result in the client thinking that it was kicked.
To overcome this, we added a message that signals the user that is kicked. Also, we distribute the key with the community description so that there's no more issues with timing.
This is a bit expensive for large communities, and it will require some further optimizations.

Key distribution is now also connected to the request to join response, so there are no timing issues.

Fixes an issue with key distribution (race condition) where the community would be modified before being compared, resulting in a comparison of two identical communities, which would result in no key being distributed. This commit only partially address the issue.
2024-02-07 10:25:41 +00:00
Andrea Maria Piana
e65760ca85 Add basic peersyncing
This commit adds basic syncing capabilities with peers if they are both
online.

It updates the work done on MVDS, but I decided to create the code in
status-go instead, since it's very tight to the application (similarly
the code that was the inspiration for mvds, bramble, is all tight
together at the database level).

I reused parts of the protobufs.

The flow is:

1) An OFFER message is sent periodically with a bunch of message-ids and
   group-ids.
2) Anyone can REQUEST some of those messages if not present in their
   database.

3) The peer will then send over those messages.

It's disabled by default, but I am planning to add a way to set up the
flags.
2024-01-23 12:46:17 +00:00
Michal Iskierko
3d7ab79d91 fix: execute BeforeDispatch only once
Issue #4557
2024-01-15 17:03:33 +01:00
Andrea Maria Piana
88fd1ce942 Surface acks, offers, requests to messenger 2023-12-18 10:33:05 +00:00
Patryk Osmaczko
d73d1e2488 chore_: adapt tracking for segmented messages
closes: #4310
2023-11-24 17:41:52 +01:00
Patryk Osmaczko
bddc48f265 fix: allocate space for hashes instead of creation
Otherwise hashes would be twice in size and messages tracking
wouldn't work.
2023-11-20 21:26:19 +01:00
Patryk Osmaczko
4a9220bf96 refactor: eliminate datasync initialization logic duplication 2023-11-18 15:37:54 +01:00
Patryk Osmaczko
7b3013a010 chore: remove message chunking from datasync
It was redundant to recently introduced messages segmentation layer.
2023-11-18 15:37:54 +01:00
Vitaly Vlasov
1794b93c16 Always set PubsubTopic in filters 2023-11-18 02:26:34 +02:00
Patryk Osmaczko
d04f99d56d chore: cleanup message segments
closes: #4297
2023-11-15 16:52:35 +01:00
Patryk Osmaczko
de29ec71ae feat: enable messages segmentation
closes: status-im/status-desktop#12188
2023-11-13 17:32:00 +01:00
Patryk Osmaczko
6bb806caad feat: introduce messages segmentation 2023-11-13 17:32:00 +01:00
Patryk Osmaczko
fa44e03ac2 refactor: eliminate logic duplication in MessageSender.HandleMessages 2023-11-13 17:32:00 +01:00
richΛrd
2c954d42cf
feat: replace DefaultPubsubTopic by Shard 32 (#4161) 2023-11-09 20:29:15 -04:00
Patryk Osmaczko
f7042e4b9e refactor: extract layers in StatusMessage
Extracted:
- TransportLayer
- EncryptionLayer
- ApplicationLayer
2023-11-08 21:46:22 +01:00
Andrea Maria Piana
85f8c92cde Delete processed messages & add tests
This commit adds a test for out of order messages, which were only
implicitly tested.
It also deletes them after being processed, otherwise they would be
reproceessed each time a message was sent
2023-10-30 14:11:29 +00:00
Andrea Maria Piana
360c2d50d4 Fix issues with out of order encryption and batched messages
This commit fixes 3 issues:

1) In some cases, the hash ratchet was not correctly found
2) Out of order messages were not processed correctly as the wrong error
   was returned
3) Batched non datasync messages were not processed correctly

Fixes: #4170
2023-10-30 10:11:32 +00:00
Andrea Maria Piana
23f71c1125 Fix encryption id && rekey with a single message
This commit changes the format of the encryption id to be based off 3
things:

1) The group id
2) The timestamp
3) The actual key

Previously this was solely based on the timestamp and the group id, but
this might lead to conflicts. Moreover the format of the key was an
uint32 and so it would wrap periodically.

The migration is a bit tricky, so first we cleared the cache of keys,
that's easier than migrating, and second we set the new field hash_id to
the concatenation of group_id / key_id.
This might lead on some duplication in case keys are re-received, but it
should not have an impact on the correctness of the code.

I have added 2 tests covering compatibility between old/new clients, as
this should not be a breaking change.

It also adds a new message to rekey in a single go, instead of having to
send multiple messages
2023-10-24 20:48:54 +01:00
richΛrd
ba5ed725ce
waku2: static shards (#3944)
- use protected topics for communities
- associate chats to pubsub topics and populate these depending if the chat belongs to a community or not
- mailserver functions should be aware of pubsub topics
- generate private key for pubsub topic protection when creating a community
- add shard cluster and index to communities
- setup shards for existing communities
- distribute pubsubtopic password
- fix: do not send the requests to join and cancel in the protected topic
- fix: undefined shard values for backward compatibility
- refactor: use shard message in protobuffers
2023-10-12 15:21:49 -04:00
Richard Ramos
d900974519 fix: code review 2023-08-23 13:56:00 -04:00
Richard Ramos
f9ec588c4e feat: use protected topics for communities
refactor: associate chats to pubsub topics and populate these depending if the chat belongs to a community or not
refactor: add pubsub topic to mailserver batches
chore: ensure default relay messages continue working as they should
refactor: mailserver functions should be aware of pubsub topics
fix: use []byte for communityIDs
2023-08-23 13:56:00 -04:00
Andrea Maria Piana
8dd1b66d69 Always use protobufs by reference & generate handlers 2023-08-22 12:08:54 +01:00
Patryk Osmaczko
367b7722d1 feat: introduce channel-level encryption
- distribute ratchet keys at both community and channel levels
- use explicit `HashRatchetGroupID` in ecryption layer, instead of
  inheriting `groupID` from `CommunityID`
- populate `HashRatchetGroupID` with `CommunityID+ChannelID` for
  channels, and `CommunityID` for whole community
- hydrate channels with members; channel members are now subset of
  community members
- include channel permissions in periodic permissions check

closes: status-im/status-desktop#10998
2023-07-27 11:35:59 +02:00
Samuel Hawksby-Robinson
d60beb2283 refactor to remove rekeyedAt and use group current key 2023-07-24 17:18:42 +01:00
Samuel Hawksby-Robinson
2536d9c8ba Implemented testing to check rekeying is happening 2023-07-24 17:18:42 +01:00
Patryk Osmaczko
2613064356 chore: remove unused applicationLayer parameter of HandleMessages 2023-07-07 16:33:44 +02:00
Patryk Osmaczko
5bb787fadb chore: rename RawMessage.SkipEncryption->SkipProtocolLayer
`SkipEncryption` was misleading, as it wasn't really always related with
encryption.
2023-07-07 10:30:50 +02:00
Andrea Maria Piana
d91d11a01c Call before dispatch for group chat messages 2023-06-29 13:04:49 +01:00
Andrea Maria Piana
efad2ef6a2 Add BeforeDispatch callback 2023-06-26 13:36:20 +01:00
Jonathan Rainville
4a0eb56574 fix: fix special messages not being received because not encrypted 2022-12-15 10:48:41 -05:00
Andrea Maria Piana
9b670ff453 Correctly abridge events after changes in joined users 2022-11-18 11:43:23 +00:00
Richard Ramos
0f7c9f52d8 feat: mark automatic status updates as ephemeral 2022-11-09 15:49:26 +03:00
Andrea Maria Piana
bef211b5d6 Send all encryption keys 2022-10-20 12:19:44 +01:00
Andrea Maria Piana
a182f3e699 Fix bug with tracking & merge community changes 2022-09-16 22:45:29 +01:00
Andrea Maria Piana
d689b337c9 Return ID and use chat topic when sending community message 2022-09-15 09:44:56 +01:00
Andrea Maria Piana
897bd0f58f Dont send notification to our own devices 2022-07-18 17:17:20 +01:00
Vitaliy Vlasov
4f722b6fe8 Communities encryption integration 2022-06-17 21:24:39 +03:00
Vitaliy Vlasov
e6dffe8d8d Communities encryption 2021-11-30 20:52:47 +02:00
Roman Volosovskyi
53bbfb3f08
Allow sending messages offline 2021-11-11 19:12:31 +02:00
Andrea Maria Piana
2d13fa1e25 Add logging of message-id 2021-11-01 11:53:08 +00:00
Andrea Maria Piana
4e33e46795 Fix race condition with PNs
Sometimes the message scheduled & message sent notifications are
received out of order.
Now we use a single channel for both so order is maintained.
This was causing the tests to be flaky and it might have happened in
production as well.
2021-10-07 12:47:40 +01:00
Volodymyr Kozieiev
0e538c0a95
Rename MessageProcessor to MessageSender (#2264) 2021-06-23 17:13:48 +03:00