You've already forked matrix-js-sdk
mirror of
https://github.com/matrix-org/matrix-js-sdk.git
synced 2025-07-31 15:24:23 +03:00
Update matrix-sdk-crypto-wasm to 11.0.0 (#4566)
* Update matrix-sdk-crypto-wasm to 11.0.0 * use `backend` variable to test for rust crypto * apply changes from review
This commit is contained in:
@ -50,7 +50,7 @@
|
|||||||
],
|
],
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@babel/runtime": "^7.12.5",
|
"@babel/runtime": "^7.12.5",
|
||||||
"@matrix-org/matrix-sdk-crypto-wasm": "^9.0.0",
|
"@matrix-org/matrix-sdk-crypto-wasm": "^11.0.0",
|
||||||
"@matrix-org/olm": "3.2.15",
|
"@matrix-org/olm": "3.2.15",
|
||||||
"another-json": "^0.2.0",
|
"another-json": "^0.2.0",
|
||||||
"bs58": "^6.0.0",
|
"bs58": "^6.0.0",
|
||||||
|
@ -78,6 +78,7 @@ import {
|
|||||||
encryptGroupSessionKey,
|
encryptGroupSessionKey,
|
||||||
encryptMegolmEvent,
|
encryptMegolmEvent,
|
||||||
encryptSecretSend,
|
encryptSecretSend,
|
||||||
|
getTestOlmAccountKeys,
|
||||||
ToDeviceEvent,
|
ToDeviceEvent,
|
||||||
} from "./olm-utils";
|
} from "./olm-utils";
|
||||||
import { KeyBackupInfo } from "../../../src/crypto-api";
|
import { KeyBackupInfo } from "../../../src/crypto-api";
|
||||||
@ -992,6 +993,18 @@ describe.each(Object.entries(CRYPTO_BACKENDS))("verification (%s)", (backend: st
|
|||||||
aliceClient.setGlobalErrorOnUnknownDevices(false);
|
aliceClient.setGlobalErrorOnUnknownDevices(false);
|
||||||
syncResponder.sendOrQueueSyncResponse(getSyncResponse([BOB_TEST_USER_ID]));
|
syncResponder.sendOrQueueSyncResponse(getSyncResponse([BOB_TEST_USER_ID]));
|
||||||
await syncPromise(aliceClient);
|
await syncPromise(aliceClient);
|
||||||
|
|
||||||
|
// Rust crypto requires the sender's device keys before it accepts a
|
||||||
|
// verification request.
|
||||||
|
if (backend === "rust-sdk") {
|
||||||
|
const crypto = aliceClient.getCrypto()!;
|
||||||
|
|
||||||
|
const bobDeviceKeys = getTestOlmAccountKeys(testOlmAccount, BOB_TEST_USER_ID, "BobDevice");
|
||||||
|
e2eKeyResponder.addDeviceKeys(bobDeviceKeys);
|
||||||
|
syncResponder.sendOrQueueSyncResponse({ device_lists: { changed: [BOB_TEST_USER_ID] } });
|
||||||
|
await syncPromise(aliceClient);
|
||||||
|
await crypto.getUserDeviceInfo([BOB_TEST_USER_ID]);
|
||||||
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -572,15 +572,37 @@ describe("RustCrypto", () => {
|
|||||||
});
|
});
|
||||||
|
|
||||||
it("emits VerificationRequestReceived on incoming m.key.verification.request", async () => {
|
it("emits VerificationRequestReceived on incoming m.key.verification.request", async () => {
|
||||||
|
rustCrypto = await makeTestRustCrypto(
|
||||||
|
new MatrixHttpApi(new TypedEventEmitter<HttpApiEvent, HttpApiEventHandlerMap>(), {
|
||||||
|
baseUrl: "http://server/",
|
||||||
|
prefix: "",
|
||||||
|
onlyData: true,
|
||||||
|
}),
|
||||||
|
testData.TEST_USER_ID,
|
||||||
|
);
|
||||||
|
|
||||||
|
fetchMock.post("path:/_matrix/client/v3/keys/upload", { one_time_key_counts: {} });
|
||||||
|
fetchMock.post("path:/_matrix/client/v3/keys/query", {
|
||||||
|
device_keys: {
|
||||||
|
[testData.TEST_USER_ID]: {
|
||||||
|
[testData.TEST_DEVICE_ID]: testData.SIGNED_TEST_DEVICE_DATA,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
});
|
||||||
|
|
||||||
|
// wait until we know about the other device
|
||||||
|
rustCrypto.onSyncCompleted({});
|
||||||
|
await rustCrypto.getUserDeviceInfo([testData.TEST_USER_ID]);
|
||||||
|
|
||||||
const toDeviceEvent = {
|
const toDeviceEvent = {
|
||||||
type: "m.key.verification.request",
|
type: "m.key.verification.request",
|
||||||
content: {
|
content: {
|
||||||
from_device: "testDeviceId",
|
from_device: testData.TEST_DEVICE_ID,
|
||||||
methods: ["m.sas.v1"],
|
methods: ["m.sas.v1"],
|
||||||
transaction_id: "testTxn",
|
transaction_id: "testTxn",
|
||||||
timestamp: Date.now() - 1000,
|
timestamp: Date.now() - 1000,
|
||||||
},
|
},
|
||||||
sender: "@user:id",
|
sender: testData.TEST_USER_ID,
|
||||||
};
|
};
|
||||||
|
|
||||||
const onEvent = jest.fn();
|
const onEvent = jest.fn();
|
||||||
@ -1015,7 +1037,7 @@ describe("RustCrypto", () => {
|
|||||||
["Not encrypted.", RustSdkCryptoJs.ShieldStateCode.SentInClear, EventShieldReason.SENT_IN_CLEAR],
|
["Not encrypted.", RustSdkCryptoJs.ShieldStateCode.SentInClear, EventShieldReason.SENT_IN_CLEAR],
|
||||||
[
|
[
|
||||||
"Encrypted by a previously-verified user who is no longer verified.",
|
"Encrypted by a previously-verified user who is no longer verified.",
|
||||||
RustSdkCryptoJs.ShieldStateCode.PreviouslyVerified,
|
RustSdkCryptoJs.ShieldStateCode.VerificationViolation,
|
||||||
EventShieldReason.VERIFICATION_VIOLATION,
|
EventShieldReason.VERIFICATION_VIOLATION,
|
||||||
],
|
],
|
||||||
])("gets the right shield reason (%s)", async (rustReason, rustCode, expectedReason) => {
|
])("gets the right shield reason (%s)", async (rustReason, rustCode, expectedReason) => {
|
||||||
|
@ -653,7 +653,7 @@ export class RustCrypto extends TypedEventEmitter<RustCryptoEvents, CryptoEventH
|
|||||||
* Implementation of {@link CryptoApi#getUserVerificationStatus}.
|
* Implementation of {@link CryptoApi#getUserVerificationStatus}.
|
||||||
*/
|
*/
|
||||||
public async getUserVerificationStatus(userId: string): Promise<UserVerificationStatus> {
|
public async getUserVerificationStatus(userId: string): Promise<UserVerificationStatus> {
|
||||||
const userIdentity: RustSdkCryptoJs.UserIdentity | RustSdkCryptoJs.OwnUserIdentity | undefined =
|
const userIdentity: RustSdkCryptoJs.OtherUserIdentity | RustSdkCryptoJs.OwnUserIdentity | undefined =
|
||||||
await this.getOlmMachineOrThrow().getIdentity(new RustSdkCryptoJs.UserId(userId));
|
await this.getOlmMachineOrThrow().getIdentity(new RustSdkCryptoJs.UserId(userId));
|
||||||
if (userIdentity === undefined) {
|
if (userIdentity === undefined) {
|
||||||
return new UserVerificationStatus(false, false, false);
|
return new UserVerificationStatus(false, false, false);
|
||||||
@ -662,7 +662,9 @@ export class RustCrypto extends TypedEventEmitter<RustCryptoEvents, CryptoEventH
|
|||||||
const verified = userIdentity.isVerified();
|
const verified = userIdentity.isVerified();
|
||||||
const wasVerified = userIdentity.wasPreviouslyVerified();
|
const wasVerified = userIdentity.wasPreviouslyVerified();
|
||||||
const needsUserApproval =
|
const needsUserApproval =
|
||||||
userIdentity instanceof RustSdkCryptoJs.UserIdentity ? userIdentity.identityNeedsUserApproval() : false;
|
userIdentity instanceof RustSdkCryptoJs.OtherUserIdentity
|
||||||
|
? userIdentity.identityNeedsUserApproval()
|
||||||
|
: false;
|
||||||
userIdentity.free();
|
userIdentity.free();
|
||||||
return new UserVerificationStatus(verified, wasVerified, false, needsUserApproval);
|
return new UserVerificationStatus(verified, wasVerified, false, needsUserApproval);
|
||||||
}
|
}
|
||||||
@ -671,7 +673,7 @@ export class RustCrypto extends TypedEventEmitter<RustCryptoEvents, CryptoEventH
|
|||||||
* Implementation of {@link CryptoApi#pinCurrentUserIdentity}.
|
* Implementation of {@link CryptoApi#pinCurrentUserIdentity}.
|
||||||
*/
|
*/
|
||||||
public async pinCurrentUserIdentity(userId: string): Promise<void> {
|
public async pinCurrentUserIdentity(userId: string): Promise<void> {
|
||||||
const userIdentity: RustSdkCryptoJs.UserIdentity | RustSdkCryptoJs.OwnUserIdentity | undefined =
|
const userIdentity: RustSdkCryptoJs.OtherUserIdentity | RustSdkCryptoJs.OwnUserIdentity | undefined =
|
||||||
await this.getOlmMachineOrThrow().getIdentity(new RustSdkCryptoJs.UserId(userId));
|
await this.getOlmMachineOrThrow().getIdentity(new RustSdkCryptoJs.UserId(userId));
|
||||||
|
|
||||||
if (userIdentity === undefined) {
|
if (userIdentity === undefined) {
|
||||||
@ -1020,7 +1022,7 @@ export class RustCrypto extends TypedEventEmitter<RustCryptoEvents, CryptoEventH
|
|||||||
* Implementation of {@link CryptoApi#requestVerificationDM}
|
* Implementation of {@link CryptoApi#requestVerificationDM}
|
||||||
*/
|
*/
|
||||||
public async requestVerificationDM(userId: string, roomId: string): Promise<VerificationRequest> {
|
public async requestVerificationDM(userId: string, roomId: string): Promise<VerificationRequest> {
|
||||||
const userIdentity: RustSdkCryptoJs.UserIdentity | undefined = await this.olmMachine.getIdentity(
|
const userIdentity: RustSdkCryptoJs.OtherUserIdentity | undefined = await this.olmMachine.getIdentity(
|
||||||
new RustSdkCryptoJs.UserId(userId),
|
new RustSdkCryptoJs.UserId(userId),
|
||||||
);
|
);
|
||||||
|
|
||||||
@ -2035,7 +2037,7 @@ class EventDecryptor {
|
|||||||
errorDetails,
|
errorDetails,
|
||||||
);
|
);
|
||||||
|
|
||||||
case RustSdkCryptoJs.DecryptionErrorCode.SenderIdentityPreviouslyVerified:
|
case RustSdkCryptoJs.DecryptionErrorCode.SenderIdentityVerificationViolation:
|
||||||
// We're refusing to decrypt due to not trusting the sender,
|
// We're refusing to decrypt due to not trusting the sender,
|
||||||
// rather than failing to decrypt due to lack of keys, so we
|
// rather than failing to decrypt due to lack of keys, so we
|
||||||
// don't need to keep it on the pending list.
|
// don't need to keep it on the pending list.
|
||||||
@ -2200,7 +2202,7 @@ function rustEncryptionInfoToJsEncryptionInfo(
|
|||||||
case RustSdkCryptoJs.ShieldStateCode.SentInClear:
|
case RustSdkCryptoJs.ShieldStateCode.SentInClear:
|
||||||
shieldReason = EventShieldReason.SENT_IN_CLEAR;
|
shieldReason = EventShieldReason.SENT_IN_CLEAR;
|
||||||
break;
|
break;
|
||||||
case RustSdkCryptoJs.ShieldStateCode.PreviouslyVerified:
|
case RustSdkCryptoJs.ShieldStateCode.VerificationViolation:
|
||||||
shieldReason = EventShieldReason.VERIFICATION_VIOLATION;
|
shieldReason = EventShieldReason.VERIFICATION_VIOLATION;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
30
yarn.lock
30
yarn.lock
@ -1477,10 +1477,10 @@
|
|||||||
"@jridgewell/resolve-uri" "^3.1.0"
|
"@jridgewell/resolve-uri" "^3.1.0"
|
||||||
"@jridgewell/sourcemap-codec" "^1.4.14"
|
"@jridgewell/sourcemap-codec" "^1.4.14"
|
||||||
|
|
||||||
"@matrix-org/matrix-sdk-crypto-wasm@^9.0.0":
|
"@matrix-org/matrix-sdk-crypto-wasm@^11.0.0":
|
||||||
version "9.1.0"
|
version "11.0.0"
|
||||||
resolved "https://registry.yarnpkg.com/@matrix-org/matrix-sdk-crypto-wasm/-/matrix-sdk-crypto-wasm-9.1.0.tgz#f889653eb4fafaad2a963654d586bd34de62acd5"
|
resolved "https://registry.yarnpkg.com/@matrix-org/matrix-sdk-crypto-wasm/-/matrix-sdk-crypto-wasm-11.0.0.tgz#c49a1a0d1e367d3c00a2144a4ab23caee0b1eec2"
|
||||||
integrity sha512-CtPoNcoRW6ehwxpRQAksG3tR+NJ7k4DV02nMFYTDwQtie1V4R8OTY77BjEIs97NOblhtS26jU8m1lWsOBEz0Og==
|
integrity sha512-a7NUH8Kjc8hwzNCPpkOGXoceFqWJiWvA8OskXeDrKyODJuDz4yKrZ/nvgaVRfQe45Ab5UC1ZXYqaME+ChlJuqg==
|
||||||
|
|
||||||
"@matrix-org/olm@3.2.15":
|
"@matrix-org/olm@3.2.15":
|
||||||
version "3.2.15"
|
version "3.2.15"
|
||||||
@ -5846,16 +5846,7 @@ string-length@^4.0.1:
|
|||||||
char-regex "^1.0.2"
|
char-regex "^1.0.2"
|
||||||
strip-ansi "^6.0.0"
|
strip-ansi "^6.0.0"
|
||||||
|
|
||||||
"string-width-cjs@npm:string-width@^4.2.0":
|
"string-width-cjs@npm:string-width@^4.2.0", string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3:
|
||||||
version "4.2.3"
|
|
||||||
resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010"
|
|
||||||
integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==
|
|
||||||
dependencies:
|
|
||||||
emoji-regex "^8.0.0"
|
|
||||||
is-fullwidth-code-point "^3.0.0"
|
|
||||||
strip-ansi "^6.0.1"
|
|
||||||
|
|
||||||
string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3:
|
|
||||||
version "4.2.3"
|
version "4.2.3"
|
||||||
resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010"
|
resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010"
|
||||||
integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==
|
integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==
|
||||||
@ -6454,16 +6445,7 @@ word-wrap@^1.2.5:
|
|||||||
resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.5.tgz#d2c45c6dd4fbce621a66f136cbe328afd0410b34"
|
resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.5.tgz#d2c45c6dd4fbce621a66f136cbe328afd0410b34"
|
||||||
integrity sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==
|
integrity sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==
|
||||||
|
|
||||||
"wrap-ansi-cjs@npm:wrap-ansi@^7.0.0":
|
"wrap-ansi-cjs@npm:wrap-ansi@^7.0.0", wrap-ansi@^7.0.0:
|
||||||
version "7.0.0"
|
|
||||||
resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43"
|
|
||||||
integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==
|
|
||||||
dependencies:
|
|
||||||
ansi-styles "^4.0.0"
|
|
||||||
string-width "^4.1.0"
|
|
||||||
strip-ansi "^6.0.0"
|
|
||||||
|
|
||||||
wrap-ansi@^7.0.0:
|
|
||||||
version "7.0.0"
|
version "7.0.0"
|
||||||
resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43"
|
resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43"
|
||||||
integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==
|
integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==
|
||||||
|
Reference in New Issue
Block a user