From 955177360745f450f59fff3ac4130934d360cb82 Mon Sep 17 00:00:00 2001 From: Florian Duros Date: Thu, 16 Jan 2025 19:06:31 +0100 Subject: [PATCH] Use SyncCryptoCallback api instead of legacy crypto in sliding sync --- spec/integ/sliding-sync-sdk.spec.ts | 17 ++++++++++------- src/sliding-sync-sdk.ts | 7 +++---- 2 files changed, 13 insertions(+), 11 deletions(-) diff --git a/spec/integ/sliding-sync-sdk.spec.ts b/spec/integ/sliding-sync-sdk.spec.ts index 643f4f7e1ba..b0cce0e161f 100644 --- a/spec/integ/sliding-sync-sdk.spec.ts +++ b/spec/integ/sliding-sync-sdk.spec.ts @@ -44,6 +44,7 @@ import { logger } from "../../src/logger"; import { emitPromise } from "../test-utils/test-utils"; import { defer } from "../../src/utils"; import { KnownMembership } from "../../src/@types/membership"; +import { SyncCryptoCallbacks } from "../../src/common-crypto/CryptoBackend"; declare module "../../src/@types/event" { interface AccountDataEvents { @@ -57,6 +58,7 @@ describe("SlidingSyncSdk", () => { let httpBackend: MockHttpBackend | undefined; let sdk: SlidingSyncSdk | undefined; let mockSlidingSync: SlidingSync | undefined; + let syncCryptoCallback: SyncCryptoCallbacks | undefined; const selfUserId = "@alice:localhost"; const selfAccessToken = "aseukfgwef"; @@ -126,8 +128,9 @@ describe("SlidingSyncSdk", () => { mockSlidingSync = mockifySlidingSync(new SlidingSync("", new Map(), {}, client, 0)); if (testOpts.withCrypto) { httpBackend!.when("GET", "/room_keys/version").respond(404, {}); - await client!.initLegacyCrypto(); - syncOpts.cryptoCallbacks = syncOpts.crypto = client!.crypto; + await client!.initRustCrypto({ useIndexedDB: false }); + syncCryptoCallback = client!.getCrypto() as unknown as SyncCryptoCallbacks; + syncOpts.cryptoCallbacks = syncCryptoCallback; } httpBackend!.when("GET", "/_matrix/client/v3/pushrules").respond(200, {}); sdk = new SlidingSyncSdk(mockSlidingSync, client, testOpts, syncOpts); @@ -644,7 +647,7 @@ describe("SlidingSyncSdk", () => { // needed else we do some async operations in the background which can cause Jest to whine: // "Cannot log after tests are done. Did you forget to wait for something async in your test?" // Attempted to log "Saving device tracking data null"." - client!.crypto!.stop(); + client!.stopClient(); }); it("gets enabled on the initial request only", () => { @@ -655,28 +658,28 @@ describe("SlidingSyncSdk", () => { }); it("can update device lists", () => { - client!.crypto!.processDeviceLists = jest.fn(); + syncCryptoCallback!.processDeviceLists = jest.fn(); ext.onResponse({ device_lists: { changed: ["@alice:localhost"], left: ["@bob:localhost"], }, }); - expect(client!.crypto!.processDeviceLists).toHaveBeenCalledWith({ + expect(syncCryptoCallback!.processDeviceLists).toHaveBeenCalledWith({ changed: ["@alice:localhost"], left: ["@bob:localhost"], }); }); it("can update OTK counts and unused fallback keys", () => { - client!.crypto!.processKeyCounts = jest.fn(); + syncCryptoCallback!.processKeyCounts = jest.fn(); ext.onResponse({ device_one_time_keys_count: { signed_curve25519: 42, }, device_unused_fallback_key_types: ["signed_curve25519"], }); - expect(client!.crypto!.processKeyCounts).toHaveBeenCalledWith({ signed_curve25519: 42 }, [ + expect(syncCryptoCallback!.processKeyCounts).toHaveBeenCalledWith({ signed_curve25519: 42 }, [ "signed_curve25519", ]); }); diff --git a/src/sliding-sync-sdk.ts b/src/sliding-sync-sdk.ts index 8d63e749c6f..abc81cad3c5 100644 --- a/src/sliding-sync-sdk.ts +++ b/src/sliding-sync-sdk.ts @@ -30,7 +30,6 @@ import { SetPresence, } from "./sync.ts"; import { MatrixEvent } from "./models/event.ts"; -import { Crypto } from "./crypto/index.ts"; import { IMinimalEvent, IRoomEvent, IStateEvent, IStrippedState, ISyncResponse } from "./sync-accumulator.ts"; import { MatrixError } from "./http-api/index.ts"; import { @@ -66,7 +65,7 @@ type ExtensionE2EEResponse = Pick< >; class ExtensionE2EE implements Extension { - public constructor(private readonly crypto: Crypto) {} + public constructor(private readonly crypto: SyncCryptoCallbacks) {} public name(): string { return "e2ee"; @@ -373,8 +372,8 @@ export class SlidingSyncSdk { new ExtensionTyping(this.client), new ExtensionReceipts(this.client), ]; - if (this.syncOpts.crypto) { - extensions.push(new ExtensionE2EE(this.syncOpts.crypto)); + if (this.syncOpts.cryptoCallbacks) { + extensions.push(new ExtensionE2EE(this.syncOpts.cryptoCallbacks)); } extensions.forEach((ext) => { this.slidingSync.registerExtension(ext);