Damir Jelić
09a7858702
crypto: Initial support for the longer to-device verification flow
2021-05-13 11:15:56 +02:00
Damir Jelić
ec55258be9
crypto: Handle decrypted to-device events as well
...
Usually only room keys and forwarded room keys are sent as encrypted
to-device events, those are specially handled to avoid accepting room
keys coming in unencrypted.
Some clients might send out other events encrypted which might lower
metadata leakage and the spec doesn't disallow it.
This patch handles decrypted events the same way as non-encrypted ones,
we're still special casing the decryption handling to avoid decryption
loops/bombs (i.e. events that are encrypted multiple times).
2021-05-13 11:08:13 +02:00
Devin Ragotzy
5f09d091cb
Add cargo fmt to ci using nightly
2021-05-12 15:38:59 -04:00
Devin Ragotzy
2ef0c2959c
Add use_small_heuristics option and run fmt
2021-05-12 15:37:29 -04:00
Devin Ragotzy
c85f4d4f0c
Add rustfmt config file and run over workspace
2021-05-12 15:36:52 -04:00
Damir Jelić
4f7902d6f0
crypto: Add a method to check it the SAS flow supports emoji
2021-05-12 20:09:02 +02:00
Damir Jelić
77c2a4ed4f
matrix-sdk: Bump ruma
2021-05-12 19:19:42 +02:00
Damir Jelić
1bda3659ce
sas: Allow to just get the emoji index instead of the emoji and descryption
2021-05-07 17:04:27 +02:00
Damir Jelić
80d01b23c4
sas: Return an array of seven emojis instead of a vector
2021-05-07 17:01:53 +02:00
Kévin Commaille
b8017b1fb0
bump ruma to 24154195a00390a33542603b968e94022487587c
2021-05-07 13:22:32 +02:00
Damir Jelić
43b7072609
matrix-sdk: Fix some newly introduced clippy warnings
2021-05-06 20:42:27 +02:00
poljar
6048a1a507
crypto: Fix a typo
...
Co-authored-by: Jonas Platte <jplatte@users.noreply.github.com>
2021-04-29 15:34:53 +02:00
Damir Jelić
cff90b1480
matrix-sdk: Add encryption info to our sync events.
2021-04-29 10:35:54 +02:00
Damir Jelić
324a0aafca
Merge branch 'key-share-improvements'
2021-04-21 13:47:02 +02:00
Damir Jelić
bfc7434f7e
crypto: Move the outbound session filter logic into the group session cache
2021-04-20 13:35:47 +02:00
poljar
e15f7264dc
crypto: Don't borrow inside a format unnecessarily
...
Co-authored-by: Jonas Platte <jplatte@users.noreply.github.com>
2021-04-20 12:27:56 +02:00
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