* Support stable identifier m.room_key_bundle
* Support stable identifier m.shared_history
* Test that checks isRoomKeyBundleMessage works for stable and unstable identifiers
* Replace similar tests with use of it.each
* push backup key to other verified devices when we reset backup
* handle receiving pushed backup keys
- make sure that backup gets enabled after we receive a pushed key that
matches the current, valid backup
* apply requested changes from review
* Store rooms pending key bundles in the CryptoStore
Replace the in-memory storage of which rooms are waiting for a key bundle with
permanent storage in the crypto store.
* Clear pending-key-bundle flag on malformed bundles
If we cannot import the key bundle, there is no point trying again another
time: we may as well clear the flag either way.
* Factor out some helpers in history sharing integ test
* Do not accept key bundles for rooms we joined more than 24h ago
Per discussion in crypto-internal.
* Clear pending key bundle data when we leave a room
* Resume key-bundle import on restart
* Clear pending-key-bundle flag on rooms that we joined ages ago
* fixup! Clear pending-key-bundle flag on malformed bundles
* Update dependency @matrix-org/matrix-sdk-crypto-wasm to v18
* Adapt to breaking changes in rust-sdk wasm bindings
* more types fixes
* types fixes for tests
---------
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: Richard van der Hoff <richard@matrix.org>
* Skip unwritten tests
Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>
* Tidy jest fake timers
Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>
* Remove unnecessary sessionStorage mock
Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>
* Improve types
Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>
* Improve async assertions
Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>
* Improve error assertions
Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>
* Improve object assertions
Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>
* Remove assertion testing unclear mock
This test failed when ran individually, same as after the clearAllMocks call
Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>
* Avoid awaiting non-thenables
Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>
* Pass nop function when stubbing out console, vitest won't accept it any other way
Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>
* Remove unnecessary mock which causes tests to fail after updating fetch-mock & fix typo
Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>
* Fix mistaken assertions not testing all values in array
Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>
* Fix hidden non-running tests in room.spec.ts
Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>
* Update fetch-mock-jest to @fetch-mock/jest
Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>
* Delint
Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>
* Make knip happier
Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>
* Make knip happier 2.0
Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>
* Delint
Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>
* Switch from Jest to Vitest
Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>
* Iterate
Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>
* Delint
Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>
* Fix CI
Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>
* Remove unnecessary fake timers
Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>
* Update vite
Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>
* Revert irrelevant changes
Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>
* Fix coverage spec paths
Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>
* Fix slow test reporter
Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>
* Fix bad merge conflict resolution
Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>
* Fix babel config
Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>
---------
Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>
* Skip unwritten tests
Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>
* Tidy jest fake timers
Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>
* Remove unnecessary sessionStorage mock
Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>
* Improve types
Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>
* Improve async assertions
Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>
* Improve error assertions
Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>
* Improve object assertions
Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>
* Remove assertion testing unclear mock
This test failed when ran individually, same as after the clearAllMocks call
Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>
* Avoid awaiting non-thenables
Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>
* Pass nop function when stubbing out console, vitest won't accept it any other way
Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>
* Remove unnecessary mock which causes tests to fail after updating fetch-mock & fix typo
Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>
* Fix mistaken assertions not testing all values in array
Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>
* Fix hidden non-running tests in room.spec.ts
Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>
* Update fetch-mock-jest to @fetch-mock/jest
Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>
* Delint
Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>
* Make knip happier
Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>
* Make knip happier 2.0
Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>
* Delint
Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>
* Iterate
Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>
* Delint
Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>
* Iterate
Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>
---------
Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>
* Skip unwritten tests
Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>
* Tidy jest fake timers
Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>
* Remove unnecessary sessionStorage mock
Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>
* Improve types
Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>
* Improve async assertions
Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>
* Improve error assertions
Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>
* Improve object assertions
Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>
* Remove assertion testing unclear mock
This test failed when ran individually, same as after the clearAllMocks call
Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>
* Avoid awaiting non-thenables
Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>
* Pass nop function when stubbing out console, vitest won't accept it any other way
Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>
* Remove unnecessary mock which causes tests to fail after updating fetch-mock & fix typo
Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>
* Fix mistaken assertions not testing all values in array
Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>
* Fix hidden non-running tests in room.spec.ts
Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>
---------
Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>
* Update dependency @matrix-org/matrix-sdk-crypto-wasm to v17
* Remove references to `ShieldStateCode.SentInClear`
This was never used, and is no longer exported, by rust-sdk-crypto-wasm, so we
need to remove references to it.
---------
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: Richard van der Hoff <richard@matrix.org>
* Update jest to v30
* Update snapshots & imports
Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>
* Make jest happier
Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>
* Fix tests
Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>
---------
Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: Michael Telatynski <7t3chguy@gmail.com>
* Add `CryptoApi.getSecretStorageStatus`
`isSecretStorageReady` is a bit of a blunt instrument: it's hard to see from
logs *why* the secret storage isn't ready.
Add a new method which returns a bit more data.
* Update src/rust-crypto/rust-crypto.ts
Co-authored-by: Andy Balaam <andy.balaam@matrix.org>
---------
Co-authored-by: Andy Balaam <andy.balaam@matrix.org>
* Use checked way to get OlmMachine
* Factor out two variables in onKeyVerificationEvent
* Make sure verification test waits for the request to be processed
* Fetch the user's device info before processing a verification request
If we don't have the device info for a user when we receive their
verification request, we ignore it. This change gives us the best
possible chance of having the right device data before we try to process
the verification.
Fixes#30693Fixes#27819
* Update matrix-sdk-crypto-wasm to 15.2.0
Most relevant changes:
- History sharing: improve efficiency of building key bundle
([matrix-rust-sdk#5513](https://github.com/matrix-org/matrix-rust-sdk/issues/5513))
* Work around matrix-rust-sdk#5643
Modify the message content coming from Rust API to include the missing
property `msgtype: m.key.verification.request`
* tests: Cross-signing keys support in `E2EKeyReceiver`
Have `E2EKeyReceiver` collect uploaded cross-signing keys, so that they can be
returned by `E2EKeyResponder`.
* tests: Signature upload support in `E2EKeyReceiver`
Have `E2EKeyReceiver` collect uploaded device signatures, so that they can be
returned by `E2EKeyResponder`.
* tests: Implement `E2EOTKClaimResponder` class
A new test helper, which intercepts `/keys/claim`, allowing clients under test
to claim OTKs uploaded by other devices.
* Expose experimental settings for encrypted history sharing
Add options to `MatrixClient.invite` and `MatrixClient.joinRoom` to share and
accept encrypted history on invite, per MSC4268.
* Clarify pre-join-membership logic
* Improve tests
* Update spec/integ/crypto/cross-signing.spec.ts
Co-authored-by: Hubert Chathi <hubertc@matrix.org>
---------
Co-authored-by: Hubert Chathi <hubertc@matrix.org>
* test: add a flushPromises
this seems to be needed because `initRustCrypto` now ends up doing slightly
less awaiting
* Support new `ShieldStateCode.MismatchedSender`
* Update to matrix-sdk-crypto-wasm 15.1.0
* Add `waitFor` and use it instead of `flushPromises`
* minor lints and fixes
* another lint fix
* Add `DebugLogger` type for logging matrix-js-sdk to `debug`
* unit tests for DebugLogger
* Use `DebugLogger` in some tests
* Use `DebugLogger` in rust-crypto.spec
* test-utils: silence some logging
* Use client logger for `RustBackupManager`
* use client logger in `CrossSigningIdentity`
* use client logger in `OutgoingRequestProcessor`
* RoomEncryptor: use correct logger for logDuration
use the logger for this specific event, rather than the more general one for the room
* Use client logger in `RoomEncryptor`
* crypto: Add new ClientEvent.ReceivedToDeviceMessage
refactor rename ProcessedToDeviceEvent to ReceivedToDeviceEvent
* fix: Restore legacy isEncrypted() for to-device messages
* Update test for new preprocessToDeviceMessages API
* quick fix on doc
* quick update docs and renaming
* review: Better doc and names for OlmEncryptionInfo
* review: Remove IToDeviceMessage alias and only keep IToDeviceEvent
* review: improve comments of processToDeviceMessages
* review: pass up encrypted event when no crypto callbacks
* review: use single payload for ReceivedToDeviceMessage
* fix linter
* review: minor comment update
* Switch from defer to Promise.withResolvers
As supported by the outgoing LTS version (v22) which has 99% support of ES2024
Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>
* delint
Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>
* Deprecate defer instead of killing it
Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>
* Knip
Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>
* Iterate based on review
Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>
* Iterate based on review
Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>
* Iterate based on review
Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>
* Improve coverage
Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>
---------
Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>
* Add disableKeyStorage() to crypto API
As an all-in-one method for deleting all server side key storage on
the user's account (as the doc hopefully explains).
* Add test
* const
* Can't be disabled here
* Bump rust sdk to 14.0.0
* Remove duplicate type declarations
These now match the types in the underlying library, so can be removed.
* bump to 14.0.1
* Use new `OutgoingRequest` type from wasm library
* fix types
* update lockfile
* Simplify bootstrapSecretStorage logic
might as well just export the keys immediately, rather than having multiple
tests.
* Clean up typescript types related to rust crypto
A forthcoming release of matrix-rust-sdk-crypto-wasm tightens up a number of
typescript types. In preparation, we need to get our house in order too.
* Remove deprecated calls in `webrtc/call.ts`
* Throw error when legacy call was used
* Remove `MatrixClient.initLegacyCrypto` (#4620)
* Remove `MatrixClient.initLegacyCrypto`
* Remove `MatrixClient.initLegacyCrypto` in README.md
* Remove tests using `MatrixClient.initLegacyCrypto`
* Remove legacy crypto support in `sync` api (#4622)
* Remove deprecated `DeviceInfo` in `webrtc/call.ts` (#4654)
* chore(legacy call): Remove `DeviceInfo` usage
* refactor(legacy call): throw `GroupCallUnknownDeviceError` at the end of `initOpponentCrypto`
* Remove deprecated methods and attributes of `MatrixClient` (#4659)
* feat(legacy crypto)!: remove deprecated methods of `MatrixClient`
* test(legacy crypto): update existing tests to not use legacy crypto
- `Embedded.spec.ts`: casting since `encryptAndSendToDevices` is removed from `MatrixClient`.
- `room.spec.ts`: remove deprecated usage of `MatrixClient.crypto`
- `matrix-client.spec.ts` & `matrix-client-methods.spec.ts`: remove calls of deprecated methods of `MatrixClient`
* test(legacy crypto): remove test files using `MatrixClient` deprecated methods
* test(legacy crypto): update existing integ tests to run successfully
* feat(legacy crypto!): remove `ICreateClientOpts.deviceToImport`.
`ICreateClientOpts.deviceToImport` was used in the legacy cryto. The rust crypto doesn't support to import devices in this way.
* feat(legacy crypto!): remove `{get,set}GlobalErrorOnUnknownDevices`
`globalErrorOnUnknownDevices` is not used in the rust-crypto. The API is marked as unstable, we can remove it.
* Remove usage of legacy crypto in `event.ts` (#4666)
* feat(legacy crypto!): remove legacy crypto usage in `event.ts`
* test(legacy crypto): update event.spec.ts to not use legacy crypto types
* Remove legacy crypto export in `matrix.ts` (#4667)
* feat(legacy crypto!): remove legacy crypto export in `matrix.ts`
* test(legacy crypto): update `megolm-backup.spec.ts` to import directly `CryptoApi`
* Remove usage of legacy crypto in integ tests (#4669)
* Clean up legacy stores (#4663)
* feat(legacy crypto!): keep legacy methods used in lib olm migration
The rust cryto needs these legacy stores in order to do the migration from the legacy crypto to the rust crypto. We keep the following methods of the stores:
- Used in `libolm_migration.ts`.
- Needed in the legacy store tests.
- Needed in the rust crypto test migration.
* feat(legacy crypto): extract legacy crypto types in legacy stores
In order to be able to delete the legacy crypto, these stores shouldn't rely on the legacy crypto. We need to extract the used types.
* feat(crypto store): remove `CryptoStore` functions used only by tests
* test(crypto store): use legacy `MemoryStore` type
* Remove deprecated methods of `CryptoBackend` (#4671)
* feat(CryptoBackend)!: remove deprecated methods
* feat(rust-crypto)!: remove deprecated methods of `CryptoBackend`
* test(rust-crypto): remove tests of deprecated methods of `CryptoBackend`
* Remove usage of legacy crypto in `embedded.ts` (#4668)
The interface of `encryptAndSendToDevices` changes because `DeviceInfo` is from the legacy crypto. In fact `encryptAndSendToDevices` only need pairs of userId and deviceId.
* Remove legacy crypto files (#4672)
* fix(legacy store): fix legacy store typing
In https://github.com/matrix-org/matrix-js-sdk/pull/4663, the storeXXX methods were removed of the CryptoStore interface but they are used internally by IndexedDBCryptoStore.
* feat(legacy crypto)!: remove content of `crypto/*` except legacy stores
* test(legacy crypto): remove `spec/unit/crypto/*` except legacy store tests
* refactor: remove unused types
* doc: fix broken link
* doc: remove link tag when typedoc is unable to find the CryptoApi
* Clean up integ test after legacy crypto removal (#4682)
* test(crypto): remove `newBackendOnly` test closure
* test(crypto): fix duplicate test name
* test(crypto): remove `oldBackendOnly` test closure
* test(crypto): remove `rust-sdk` comparison
* test(crypto): remove iteration on `CRYPTO_BACKEND`
* test(crypto): remove old legacy comments and tests
* test(crypto): fix documentations and removed unused expect
* Restore broken link to `CryptoApi` (#4692)
* chore: fix linting and formatting due to merge
* Remove unused crypto type and missing doc (#4696)
* chore(crypto): remove unused types
* doc(crypto): add missing link
* test(call): add test when crypto is enabled
* fix(crypto): `resetEncryption` remove secrets in 4S
Remove the cross signing keys and the backup decryption key of the 4S when calling `resetEncryption`
* test(crypto): expect secrets to be deleted in 4S when `resetEncryption` is called
* test(secret storage): add test case when the secret is set at null
* fix(crypto): remove default key in 4S
* test(crypto): default key should be removed from 4S
* feat(dehydrated): Use the dehydrated key cache API
* feat(dehydrated): Add signalling to device dehydration manager
* feat(dehydrated): fix unneeded call getCachedKey
* Upgrade to `matrix-sdk-crypto-wasm` v13.0.0
* review: quick fix and doc
* apply changes from review
* apply changes from review
* fix comment
* add some tests and emit an event on rehydration failure
* factor out event counter into a test util, since it may be useful elsewhere
* adjust test to cover a few more lines
* fix documentation
* Apply suggestions from code review
Co-authored-by: Richard van der Hoff <1389908+richvdh@users.noreply.github.com>
* fix missing bracket
* add test for getting the dehydration key from SSSS
---------
Co-authored-by: Hubert Chathi <hubertc@matrix.org>
Co-authored-by: Richard van der Hoff <1389908+richvdh@users.noreply.github.com>
* Save the key backup key to secret storage
When setting up secret storage, if we have a key backup key in cache
(like we do for the cross signing secrets).
* Add test
* Get the key directly from the olmMachine
saves converting it needlessly into a buffer to turn it back into
a base64 string
* Overwrite backup keyin storage if different
* Fix test
* Add integ test
* Test failure case for sonar
* Unused import
* Missed return
* Also check active backup version
* Update src with globalThis
* Update spec with globalThis
* Replace in more spec/ places
* More changes to src/
* Add a linter rule for global
* Prettify
* lint