57 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			TypeScript
		
	
	
			
		
		
	
	
			57 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			TypeScript
		
	
	
/*
 | 
						|
Copyright 2024 New Vector Ltd.
 | 
						|
 | 
						|
SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only
 | 
						|
Please see LICENSE files in the repository root for full details.
 | 
						|
*/
 | 
						|
 | 
						|
import { expect, test } from "../../element-web-test";
 | 
						|
import { autoJoin, createSecondBotDevice, createSharedRoomWithUser, verify } from "./utils";
 | 
						|
import { bootstrapCrossSigningForClient } from "../../pages/client.ts";
 | 
						|
 | 
						|
/** Tests for the "invisible crypto" behaviour -- i.e., when the "exclude insecure devices" setting is enabled */
 | 
						|
test.describe("Invisible cryptography", () => {
 | 
						|
    test.use({
 | 
						|
        displayName: "Alice",
 | 
						|
        botCreateOpts: { displayName: "Bob" },
 | 
						|
        labsFlags: ["feature_exclude_insecure_devices"],
 | 
						|
    });
 | 
						|
 | 
						|
    test("Messages fail to decrypt when sender is previously verified", async ({
 | 
						|
        page,
 | 
						|
        bot: bob,
 | 
						|
        user: aliceCredentials,
 | 
						|
        app,
 | 
						|
        homeserver,
 | 
						|
    }) => {
 | 
						|
        await app.client.bootstrapCrossSigning(aliceCredentials);
 | 
						|
        await autoJoin(bob);
 | 
						|
 | 
						|
        // create an encrypted room
 | 
						|
        const testRoomId = await createSharedRoomWithUser(app, bob.credentials.userId, {
 | 
						|
            name: "TestRoom",
 | 
						|
            initial_state: [
 | 
						|
                {
 | 
						|
                    type: "m.room.encryption",
 | 
						|
                    state_key: "",
 | 
						|
                    content: {
 | 
						|
                        algorithm: "m.megolm.v1.aes-sha2",
 | 
						|
                    },
 | 
						|
                },
 | 
						|
            ],
 | 
						|
        });
 | 
						|
 | 
						|
        // Verify Bob
 | 
						|
        await verify(app, bob);
 | 
						|
 | 
						|
        // Bob logs in a new device and resets cross-signing
 | 
						|
        const bobSecondDevice = await createSecondBotDevice(page, homeserver, bob);
 | 
						|
        await bootstrapCrossSigningForClient(await bobSecondDevice.prepareClient(), bob.credentials, true);
 | 
						|
 | 
						|
        /* should show an error for a message from a previously verified device */
 | 
						|
        await bobSecondDevice.sendMessage(testRoomId, "test encrypted from user that was previously verified");
 | 
						|
        const lastTile = page.locator(".mx_EventTile_last");
 | 
						|
        await expect(lastTile).toContainText("Sender's verified identity has changed");
 | 
						|
    });
 | 
						|
});
 |