Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Add E2EE for embedded mode of Element Call (#3667)
* WIP refactor for removing m.call events * Always remember rtcsessions since we need to only have one instance * Fix tests * Fix import loop * Fix more cyclic imports & tests * Test session joining * Attempt to make tests happy * Always leave calls in the tests to clean up * comment + desperate attempt to work out what's failing * More test debugging * Okay, so these ones are fine? * Stop more timers and hopefully have happy tests * Test no rejoin * Test malformed m.call.member events * Test event emitting and also move some code to a more sensible place in the file * Test getActiveFoci() * Test event emitting (and also fix it) * Test membership updating & pruning on join * Test getOldestMembership() * Test member event renewal * Don't start the rtc manager until the client has synced Then we can initialise from the state once it's completed. * Fix type * Remove listeners added in constructor * Stop the client here too * Stop the client here also also * ARGH. Disable tests to work out which one is causing the exception * Disable everything * Re-jig to avoid setting listeners in the constructor and re-enable tests * No need to rename this anymore * argh, remove the right listener * Is it this test??? * Re-enable some tests * Try mocking getRooms to return something valid * Re-enable other tests * Give up trying to get the tests to work sensibly and deal with getRooms() returning nothing * Oops, don't enable the ones that were skipped before * One more try at the sensible way * Didn't work, go back to the hack way. * Log when we manage to send the member event update * Support `getOpenIdToken()` in embedded mode (#3676) * Call `sendContentLoaded()` (#3677) * Start MatrixRTC in embedded mode (#3679) * Reschedule the membership event check * Bump widget api version * Add mock for sendContentLoaded() * Embeded mode pre-requisites Signed-off-by: Šimon Brandner <simon.bra.ag@gmail.com> * Embeded mode E2EE Signed-off-by: Šimon Brandner <simon.bra.ag@gmail.com> * Encryption condition Signed-off-by: Šimon Brandner <simon.bra.ag@gmail.com> * Revert "Embeded mode pre-requisites" This reverts commit 8cd7370. * Get back event type Signed-off-by: Šimon Brandner <simon.bra.ag@gmail.com> fds Signed-off-by: Šimon Brandner <simon.bra.ag@gmail.com> * Change embedded E2EE implementation Signed-off-by: Šimon Brandner <simon.bra.ag@gmail.com> * More log detail * Fix tests and also better assert because the tests were passing undefined which was considered fine because we were only checking for null. * Simplify updateCallMembershipEvent a bit * Split up updateCallMembershipEvent some more * Use `crypto.getRandomValues()` Signed-off-by: Šimon Brandner <simon.bra.ag@gmail.com> * Rename to `membershipToUserAndDeviceId()` Signed-off-by: Šimon Brandner <simon.bra.ag@gmail.com> * Better error Signed-off-by: Šimon Brandner <simon.bra.ag@gmail.com> * Add log line Signed-off-by: Šimon Brandner <simon.bra.ag@gmail.com> * Add comment Signed-off-by: Šimon Brandner <simon.bra.ag@gmail.com> * Send call ID in enc events (also a small refactor) Signed-off-by: Šimon Brandner <simon.bra.ag@gmail.com> * Revert making `joinRoomSession()` async Signed-off-by: Šimon Brandner <simon.bra.ag@gmail.com> * Make `client` `private` again Signed-off-by: Šimon Brandner <simon.bra.ag@gmail.com> * Just use `toString()` Signed-off-by: Šimon Brandner <simon.bra.ag@gmail.com> * Fix `callId` check Signed-off-by: Šimon Brandner <simon.bra.ag@gmail.com> * Fix map Signed-off-by: Šimon Brandner <simon.bra.ag@gmail.com> * Fix map compare Signed-off-by: Šimon Brandner <simon.bra.ag@gmail.com> * Fix emitting Signed-off-by: Šimon Brandner <simon.bra.ag@gmail.com> * Explicit logging Signed-off-by: Šimon Brandner <simon.bra.ag@gmail.com> * Refactor Signed-off-by: Šimon Brandner <simon.bra.ag@gmail.com> * Make `updateEncryptionKeyEvent()` public Signed-off-by: Šimon Brandner <simon.bra.ag@gmail.com> * Only update keys based on others Signed-off-by: Šimon Brandner <simon.bra.ag@gmail.com> * Fix call order Signed-off-by: Šimon Brandner <simon.bra.ag@gmail.com> * Improve logging Signed-off-by: Šimon Brandner <simon.bra.ag@gmail.com> * Avoid races Signed-off-by: Šimon Brandner <simon.bra.ag@gmail.com> * Revert "Avoid races" This reverts commit f65ed72. * Add try-catch Signed-off-by: Šimon Brandner <simon.bra.ag@gmail.com> * Make `updateEncryptionKeyEvent()` private Signed-off-by: Šimon Brandner <simon.bra.ag@gmail.com> * Handle indices and throttling Signed-off-by: Šimon Brandner <simon.bra.ag@gmail.com> * Fix merge mistakes Signed-off-by: Šimon Brandner <simon.bra.ag@gmail.com> * Mort post-merge fixes Signed-off-by: Šimon Brandner <simon.bra.ag@gmail.com> * Split out key generation from key sending And send all keys in a key event (changes the format of the key event) rather than just the one we just generated. * Remember and clear the timeout for the send key event So we don't schedule more key updates if one is already pending. Also don't update the last sent time when we didn't actually send the keys. * Make key event resends more robust * Attempt to make tests pass * crypto wasn't defined at all * Hopefully get interface right * Fix key format on the wire to base64 * Add comment * More standard method order * Rename encryptMedia The js-sdk doesn't do media and therefore doesn't do media encryption * Stop logging encryption keys now * Use regular base64 It's not going in a URL, so no need * Re-add base64url randomstring was using it. Also give it a test. * Add tests for randomstring * Switch between either browser or node crypto Let's see if this will work... * Obviously crypto has already solved this * Some tests for MatrixRTCSession key stuff * Test keys object contents * Change keys event format To move away from m. keys * Test key event retries * Test onCallEncryption * Test event sending & spam prevention * Test event cancelation * Test onCallEncryption called * Some errors didn't have data * Fix binary key comparison & add log line * Fix compare function with undefined values * Remove more key logging * Check content.keys is an array * Check key index & key * Better function name * Tests too --------- Signed-off-by: Šimon Brandner <simon.bra.ag@gmail.com> Co-authored-by: David Baker <dave@matrix.org> Co-authored-by: David Baker <dbkr@users.noreply.github.com>
- Loading branch information