Commit Graph

710 Commits (db0843a47abd794f272a0d9fc220402d8e2264e2)

Author SHA1 Message Date
Damir Jelić 4a7be13961 crypto: Only send out automatic key requests if we have a verified device
Sending out automatic key requests is a bit spammy for new logins,
they'll likely have many undecryptable events upon an initial sync.

It's unlikely that anyone will respond to such a key request since keys are
shared only with verified devices between devices of the same user or if
the key owner knows that the device should have received the key.

Upon initial sync it's unlikely that we have been verified and the key
owner likely did not intend to send us the key since we just created the
new device.
2021-04-20 11:47:11 +02:00
Damir Jelić 78b7dcac61 crypto: Add a public method to request and re-request keys. 2021-04-19 15:00:21 +02:00
Johannes Becker 3414a59b91 chore: bump ruma 2021-04-16 12:45:21 +02:00
Damir Jelić 8c007510cd crypto: Only load the outgoing key requests when we want to send them out 2021-04-15 19:40:24 +02:00
Damir Jelić f9d290746c crypto: Load unsent outgoing key requests when we open a store 2021-04-15 17:48:37 +02:00
Damir Jelić d4c56cc5b3 crypto: Refactor the outobund group session storing
This introduces a group session cache struct that can be shared between
components that need to access the currently active group session.
2021-04-15 15:19:21 +02:00
Damir Jelić 9e817a623b crypto: Fix an invalid assert in the crypto bench 2021-04-15 15:01:56 +02:00
Damir Jelić 02331fa325 crypto: Add specialized methods to store outgoing key requests 2021-04-15 13:28:50 +02:00
Damir Jelić 5637ca3080 crypto: Simplify the should_share_session method 2021-04-15 13:28:50 +02:00
Damir Jelić 975f9a0b41 crypto: Improve the way we decide if we honor room key requests
This improves two things, use the correct outbound session to check if
the session should be shared.

Check first if the session has been shared if there isn't a session or
it hasn't been shared check if the request is comming from our own user.
2021-04-14 14:30:53 +02:00
Damir Jelić 4713af6aac crypto: Fix a typo 2021-04-14 11:14:59 +02:00
Damir Jelić ba81c2460c crypto: Ignore key requests from ourselves 2021-04-13 17:17:09 +02:00
Damir Jelić 5132971558 crypto: Add a progress listener for key imports 2021-04-13 12:47:22 +02:00
Damir Jelić 893a5109ce crypto: Remove some unneeded parenthesis 2021-04-12 19:11:03 +02:00
Damir Jelić b4b897dd51 crypto: Await the group session invalidation 2021-04-12 15:19:30 +02:00
Damir Jelić cb58c499b3 crypto: Store that our outbound session was invalidated 2021-04-12 13:47:38 +02:00
Kévin Commaille dadd2fa68c
Bump ruma to e2728a70812412aade9322f6ad832731978a4240 2021-04-11 12:04:53 +02:00
Damir Jelić fdb1e3482e Merge branch 'bump-ruma' 2021-04-06 12:44:33 +02:00
Kévin Commaille 7c34ac4e82
Bump ruma to 2f1b9f097930bf7908ca539f2ab7bb0ccf5d8b25
Use MxcUri instead of String for media URLs.

Fix wrong MXC URIs in tests.

Remove method parse_mxc no longer useful.

Apply new non-exhaustive types: CrossSigningKey, OneTimeKey and SignedKey.

Apply endpoint name change: send_state_event_for_key to send_state_event
2021-04-05 19:49:55 +02:00
Jonas Platte 79eb07f717
Allow Result aliases to be used with two type parameters 2021-04-01 19:35:09 +02:00
Damir Jelić ff683602f2 crypto: Export the KeysExport error 2021-03-30 13:52:57 +02:00
Damir Jelić 02b44ca9ba matrix-sdk: Fix or silence a bunch of new clippy warnings 2021-03-30 13:05:13 +02:00
Damir Jelić 15d5b234ed Merge branch 'multithreaded-crypto' 2021-03-23 11:34:07 +01:00
Damir Jelić bbe812f1d9 common: Add a executor abstraction so we can spawn tasks under WASM 2021-03-23 10:18:55 +01:00
Damir Jelić 75ac29540d crypto: Simplify counting the number of messages a to-device request has 2021-03-13 11:50:05 +01:00
Damir Jelić 880818a588 crypto: Send bigger sendToDevice requests out that carry our room keys 2021-03-12 16:33:35 +01:00
Damir Jelić e09a155cfc crypto: Fix a completely wrong application of extend()
We were merging the to-device messages using the extend() method while
our data has the shape of BTreeMap<UserId, BTreeMap<_, _>>, extending
such a map would mean that the inner BTreeMap would get dropped if both
maps contain the same UserId.

We need to extend the inner maps, those are guaranteed to contain unique
device ids.
2021-03-12 16:33:26 +01:00
Jan Veen 42c8c42150 crypto: Improve doc of SAS accept settings
Document arguments explicitly.

Adapt to changed implementation.

Provide example call.
2021-03-12 15:45:58 +01:00
Jan Veen 587c09e700 crypto: Prohibit extending verification methods
Intersect the allowed methods passed from the user with the methods
supported by the other party. If the user added new methods to the
request, the remote party would cancel the verification.
2021-03-12 14:43:59 +01:00
Jan Veen e9be23f853 crypto: Add settings to customize SAS accepting
Offer specifying settings to SAS accept() requests to limit the allowed
verification methods.
2021-03-11 21:10:26 +01:00
Damir Jelić 7465574bdc crypto: Fix a clippy warning 2021-03-11 20:06:51 +01:00
Damir Jelić 593b5e55cb crypto: Don't load the account every time we load sessions in the sled store
This removes a massive performance issue since getting sessions is part
of every message send cycle.

Namely every time we check that all our devices inside a certain room
have established 1 to 1 Olm sessions we load the account from the store.

This means we go through an account unpickling phase which contains AES
decryption every time we load sessions.

Cache instead the account info that we're going to attach to sessions
when we initially save or load the account.
2021-03-11 19:49:32 +01:00
Damir Jelić d4e847f02f benches: Add a benchmark for the missing session collecting 2021-03-11 13:30:19 +01:00
Damir Jelić a32f9187e6 benches: Fix the key claiming bench, it needs to run under tokio now 2021-03-11 13:28:22 +01:00
Damir Jelić daf313e358 crypto: Go through the user device keys in parallel 2021-03-10 14:08:45 +01:00
Damir Jelić 570bd2e358 crypto: Move the tracked users marking out of the device key handling method 2021-03-10 12:20:03 +01:00
Damir Jelić c8d4cd0a5b crypto: Calculate the device changes for a given user in parallel 2021-03-10 12:05:21 +01:00
Damir Jelić 0c5d13cb91 crypto: Remove some stale TODO comments 2021-03-10 10:03:54 +01:00
Damir Jelić aff5cddb68 crypto: Remove an unneeded import. 2021-03-10 09:58:30 +01:00
poljar 4a8c30527d
crypto: Fix a typo.
Co-authored-by: Jonas Platte <jplatte@users.noreply.github.com>
2021-03-10 09:54:33 +01:00
Damir Jelić 560aa5b0a9 crypto: Encrypt the share group session requests in parallel. 2021-03-09 15:09:59 +01:00
Damir Jelić a8bc619dca crypto: Encrypt room keys for a room key share request in parallel 2021-03-09 14:30:28 +01:00
Damir Jelić 91c326e970 benches: Run the async benches on a tokio runtime. 2021-03-09 14:24:16 +01:00
Damir Jelić 61167fab15 crypto: Make restored outbound sessions wait for requests if they have some 2021-03-05 17:12:32 +01:00
Damir Jelić c5241af675 crypto: Expose the crypto store error pulicly 2021-03-04 17:46:18 +01:00
Damir Jelić 93e5c34670 crypto: Add a bit more info to the room key sharing logic logging 2021-03-02 17:15:10 +01:00
Damir Jelić 6597948564 crypto: Add a TODO item for m.room_key.withheld messages 2021-03-02 16:27:24 +01:00
Damir Jelić 693a0337a2 crypto: Don't log the devices that receive an outbound session twice 2021-03-02 16:26:58 +01:00
Damir Jelić 7729e2b11f matrix-sdk: Add some custom debug implementations
This should avoid polluting the logs with sled trees and a lot of
redundant info in a device if a device or store ends up in the
structured logs.
2021-03-02 16:22:38 +01:00
Damir Jelić 00df34ed59 Merge branch 'more-benchmarks' 2021-03-02 15:03:24 +01:00
Damir Jelić 123772c524 crypto: More logs for the group session sharing logic 2021-03-02 14:54:56 +01:00
Damir Jelić bb358909ef crypto: Fix a typo and improve some logs in the session sharing logic. 2021-03-02 12:54:22 +01:00
Denis Kasak 3f7eae8633 cargo fmt 2021-03-02 12:20:09 +01:00
Denis Kasak 2b5e1744ee More refactoring of the group session sharing code for clarity. 2021-03-02 12:20:09 +01:00
Denis Kasak df8c489304 Fix typo: visiblity -> visibility 2021-03-02 12:20:09 +01:00
Denis Kasak aa16a7e291 crypto: Refactor the group session rotation code some more for clarity. 2021-03-02 12:20:09 +01:00
Denis Kasak 70ecf269d0 Improve docstring of GroupSessionManager::collect_session_recipients. 2021-03-02 12:20:09 +01:00
Damir Jelić 4ccb5a1cb9 benches: Benchmark the sled store as well in the key query/claim benches 2021-03-02 11:18:10 +01:00
Damir Jelić 48903a24d2 benches: Benchmark our key sharing throughput 2021-03-02 11:17:38 +01:00
Damir Jelić e6f6665fa0 Merge branch 'master' into history-visiblity-session-share 2021-03-01 20:47:31 +01:00
Damir Jelić 2e659afd26 crypto: Make it clearer that the deleted flag can only be set to true 2021-03-01 20:34:29 +01:00
Damir Jelić 9893ddba74 crypto: Use Default to create some test data 2021-03-01 19:41:39 +01:00
Damir Jelić 1f5cad136e matrix-sdk: Bump Ruma 2021-03-01 19:20:07 +01:00
Damir Jelić e1d4fe533d crypto: Make pprof a Linux specific dependency 2021-03-01 11:46:28 +01:00
Damir Jelić fc6ff4288e benches: Add support to generate flamegraphs when we profile our benchmarks 2021-02-28 11:28:10 +01:00
Damir Jelić c64567ba9b crypto: Add a bench for the key claiming process 2021-02-27 18:40:58 +01:00
Damir Jelić 6e168051b6 crypto: Chunk out key query requests. 2021-02-26 16:48:42 +01:00
Damir Jelić 2a09e588f3 crypto: Log when we receive room keys 2021-02-17 16:01:51 +01:00
Damir Jelić 5ca40b9893 crypto: Be more forgiving when updating one-time key counts 2021-02-17 15:24:46 +01:00
Damir Jelić 6cc03d1c19 crypto: Improve the logging for deserialization failures 2021-02-17 15:23:26 +01:00
Damir Jelić 544881f11c crypto: Fix a clippy warning 2021-02-16 10:52:19 +01:00
Damir Jelić ef5d7ca579 crypto: Add missing flush calls to the sled crypto store 2021-02-16 10:29:10 +01:00
Damir Jelić 1db89741bc matrix-sdk: Re-export the EncryptionInfo struct 2021-02-16 09:42:23 +01:00
Damir Jelić c39fa6543f crypto: Expose the EncryptionInfo struct publicly 2021-02-15 15:19:48 +01:00
Damir Jelić 2811c490a0 matrix-sdk: Fix some new clippy warnings 2021-02-12 12:59:53 +01:00
Damir Jelić c34f69f8a3 crypto: Don't receive the whole sync response, only what we need.
This makes it clearer what the crypto layer is doing, this also makes it
clearer for people that will use the crypto layer over FFI that they
don't need to go through a serialize/deserialize cycle for the whole
sync response.
2021-02-10 15:42:55 +01:00
Damir Jelić 1799721a5f crypto: Store the history visibility with inbound group sessions
This can be useful to share the room history with new room members.
2021-02-03 16:59:34 +01:00
Damir Jelić 9e83eaf2f5 crypto: Store the history visiblity with the outbound session 2021-02-03 16:01:58 +01:00
Damir Jelić 10da61c567 crypto: Answer key reshare requests only at the originally shared message index 2021-01-28 14:07:51 +01:00
Damir Jelić bf4f32eccf crypto: Remove the sqlite store for now 2021-01-27 15:29:42 +01:00
Damir Jelić bc3ba3fab0 crypto: Add tests for the sled cryptostore 2021-01-27 15:19:32 +01:00
Damir Jelić d6c5a4d8aa crypto: Add a missing encode call in the sled store 2021-01-27 15:15:45 +01:00
Damir Jelić 71a087c379 crypto: Encode our keys in the sled cryptostore as well 2021-01-26 14:22:03 +01:00
Damir Jelić 6cb2c8b468 crypto: Store and restore outbound group sessions 2021-01-25 17:14:13 +01:00
Damir Jelić ac6dad3f35 matrix-sdk: Bump our deps 2021-01-25 15:47:51 +01:00
Damir Jelić c1f9d3bc39 crypto: Add a bench for our key query response handling 2021-01-25 10:13:08 +01:00
Damir Jelić 077050efb4 crypto: Add a hack so e2ee support works under WASM again 2021-01-22 18:40:08 +01:00
Damir Jelić c034de470b base: Allow using the same sled database for the state and cryptostore 2021-01-22 11:33:06 +01:00
Damir Jelić 1483c22171 crypto: Don't send out empty to-device reuqests when sharing sessions
An empty to-device request can happen if we're trying to re-share a
session with devices that are we're missing an olm session with so don't
send them out.
2021-01-21 14:04:31 +01:00
Damir Jelić ef2f20eb97 crypto: Rotate the megolm session if a device gets blacklisted 2021-01-21 12:19:02 +01:00
Damir Jelić de4df4e50a base: Re-introduce a state store trait. 2021-01-21 12:08:16 +01:00
Damir Jelić 4a06c9e82d base: Initial support for an encrypted sled store. 2021-01-20 15:57:23 +01:00
Damir Jelić 06a973a1b8 crypto: Don't use the full PBKDF rounds when testing 2021-01-20 14:10:57 +01:00
Damir Jelić 17f3dbb0a0 crypto: Return a deserialized ToDevice struct when we receive a sync 2021-01-19 12:59:31 +01:00
Damir Jelić 6a30514d40 base: Move the deserialized responses types into the common crate 2021-01-19 12:30:58 +01:00
Damir Jelić 4f4ba831c1 crypto: Bump the PBKDF rounds for the pickle key derivation 2021-01-19 12:05:30 +01:00
Damir Jelić b8fcc003ea base: Finish up the error handling for the new stores 2021-01-19 12:03:46 +01:00
Damir Jelić ef95d9b539 crypto: Fix a misleading comment about the outbound session rotation period 2021-01-19 10:21:12 +01:00
Damir Jelić 377b8ea75a crypto: Use consistent ordering for the group session sharing log line 2021-01-19 10:19:15 +01:00
Damir Jelić 4af9b74776 crypto: Properly clamp the rotation period of the outbound session 2021-01-18 20:46:34 +01:00
Damir Jelić e5ba0298d0 crypto: Refactor and document the share group session method a bit better 2021-01-18 15:21:54 +01:00
Damir Jelić 4eb504d000 crypto: Improve the log line when we share group sessions 2021-01-18 14:15:31 +01:00
Damir Jelić 436530e874 crypto: Fix a couple clippy warnings 2021-01-18 13:50:59 +01:00
Damir Jelić 1746690eda crypto: Add a sled cryptostore 2021-01-18 13:38:00 +01:00
Damir Jelić 629a8ee84f crypto: Add getters for the sender key in our sessions 2021-01-18 13:28:09 +01:00
Damir Jelić 5418c88775 crypto: Add some more serialize/deserialize implementations 2021-01-18 13:21:30 +01:00
Damir Jelić 14575892bd crypto: Implement serialize/deserialize for devices. 2021-01-18 13:19:13 +01:00
Damir Jelić 43a74524c5 crypto: Add a pending requests method for the outbound group session 2021-01-18 12:44:19 +01:00
Damir Jelić bab8fde0ac crypto: Change the way we share group sessions
This patch removes the need to ask if a group session needs to be shared
it also adapts the method so it re-shares sessions if new users or
devices join the group.
2021-01-15 18:04:45 +01:00
Damir Jelić 43ea9a16a0 crypto: Use the chain method to get the sha hash of the content 2021-01-14 13:34:12 +01:00
Damir Jelić 3f3ae794a4 crypto: Don't log an error for the commitment calculation since it isn't one 2021-01-14 13:32:39 +01:00
Damir Jelić 643526987f Merge branch 'master' into new-state-store 2021-01-05 21:40:39 +01:00
Damir Jelić b311a31c9e matrix-sdk: Bump our tokio and reqwest versions. 2021-01-05 21:39:52 +01:00
Damir Jelić ccd8a4d602 Merge branch 'master' into new-state-store 2021-01-05 17:03:24 +01:00
Damir Jelić 4f2cad8f62 matrix-sdk: Bump our versions 2021-01-05 11:23:18 +01:00
Damir Jelić 8924865c9c crypto: Fix a couple of new clippy warnings. 2021-01-04 17:39:40 +01:00
Damir Jelić c6a80dc921 Merge branch 'master' into new-state-store 2021-01-04 17:34:33 +01:00
Damir Jelić 60950044f2 matrix-sdk: Bump our deps. 2021-01-04 17:22:09 +01:00
Damir Jelić 4c6c1d2107 matrix-sdk: Get rid of the common macros crate
This crate was used to support different trait bounds on WASM vs other
targets, since we only define async traits in a couple of places having
a whole crate to support this feels a bit excessive.

This patch defines a target specific super trait instead, this lowers
the compile time a couple of seconds.
2021-01-04 16:34:14 +01:00
Damir Jelić 2e3b6fba7d common: Use the re-exported versions of js_int and assign 2021-01-04 15:29:49 +01:00
Damir Jelić 108d4ebffe Merge branch 'master' into new-state-store 2021-01-04 14:16:15 +01:00
Damir Jelić d84a852ae9 matrix-sdk: Bump ruma to a released version. 2021-01-04 14:06:07 +01:00
Damir Jelić 807c58649d Merge branch 'crypto-improvements' into new-state-store 2021-01-02 13:49:20 +01:00
Damir Jelić bafe9a0f61 crypto: Fix a couple of clippy warnings. 2021-01-02 13:47:53 +01:00
Damir Jelić f1140fec8b Merge branch 'crypto-improvements' into new-state-store 2021-01-02 13:17:25 +01:00
Damir Jelić 0d99d8cc23 crypto: Test verification request starting up to SAS. 2020-12-24 15:22:51 +01:00
Damir Jelić 8857335a7d Merge branch 'crypto-improvements' into new-state-store 2020-12-22 16:18:46 +01:00
Damir Jelić 007e452d39 Merge branch 'master' into crypto-improvements 2020-12-22 15:53:08 +01:00
Damir Jelić 9245b2a89a crypto: Properly canonicalize the json when verifying signatures as well. 2020-12-22 15:45:42 +01:00
Damir Jelić d39e3141fc crypto: Use CanonicalJsonValue for all the signature calculations. 2020-12-22 14:12:57 +01:00
Damir Jelić e25441babc base: Create a store wrapp and move store methods under it. 2020-12-20 16:27:29 +01:00
Damir Jelić b119b30939 crypto: Clippy warnings. 2020-12-18 19:26:51 +01:00
Damir Jelić 55436c6514 crypto: Add a test for verification request flows. 2020-12-18 18:23:42 +01:00
Damir Jelić ec863a928d crypto: More clippy warnings. 2020-12-18 13:57:57 +01:00
Damir Jelić 1fd8c2052e crypto: Fix a bunch of clippy warnings. 2020-12-18 13:50:02 +01:00
Damir Jelić 897c6abe92 crypto: Fix our tests now that we support in-room verifications. 2020-12-18 12:55:06 +01:00
Damir Jelić f735107caf crypto: Remove an unused argument. 2020-12-17 17:03:42 +01:00
Damir Jelić 48f43a4af1 crypto: Remove some unused imports. 2020-12-17 16:28:12 +01:00
Damir Jelić 4ad4ad1e94 crypto: Send out done events for in-room verifications. 2020-12-17 15:50:13 +01:00
Damir Jelić 79102b3390 crypto: Make the cancelations output only CancelContents. 2020-12-17 12:15:11 +01:00
Damir Jelić b6e28e2280 crypto: WIP more work on in-room verifications now up to accepting them. 2020-12-15 16:35:54 +01:00
Damir Jelić 5105629c08 crypto: WIP handle in-room start events. 2020-12-11 16:13:58 +01:00
Damir Jelić 7570cf5ac2 crypto: WIP genrealize the sas so it can handle in-room and to-device events. 2020-12-11 15:42:49 +01:00
Damir Jelić b0ac9d3320 crypto: WIP change the types of the sas sturcts to allow in-room verifications. 2020-12-10 17:49:28 +01:00
Damir Jelić 1bb5b42b1d crypto: Prepare the sas structs to handle in-room verifications. 2020-12-10 15:18:28 +01:00
Damir Jelić b9ddbb11af crypto: Move the inner sas struct into a separate module. 2020-12-10 14:07:47 +01:00
Damir Jelić 7198b0daba crypto: WIP key verification request handling. 2020-12-09 17:18:23 +01:00
Damir Jelić 5babd71341 crypto: Copy the relates to field to the unencrypted content when encrypting 2020-12-09 17:16:03 +01:00
Damir Jelić d9e5a17ab0 crypto: Use a native Rust sha2 implementation to calculate the commitment 2020-12-08 16:21:29 +01:00
Damir Jelić b5c61af472 crypto: Move the base64 helpers into a common module. 2020-12-08 16:21:29 +01:00