Commit Graph

13223 Commits

Author SHA1 Message Date
Ivan Enderlin 39a6a2eb8c chore(sdk): Rename Update::PushItems::position_hint to …::at. 2024-05-23 13:40:08 +02:00
Benjamin Bouvier 13ceb3e745 sdk: make use of the WeakClient in the encryption/ directory too 2024-05-23 12:20:17 +02:00
Benjamin Bouvier 6250677493 sdk: move the WeakRoom into room/mod.rs
This moves code around, and tweaks the behavior:

- `WeakRoom::get()` returns an `Option`, that will be None if the client
is missing or the room is missing.
- `PaginableRoom` for `WeakRoom` will now return a default response if
the room could not be reconstructed from the weak room. It's fine to do
so because we're in a shutdown context.
2024-05-23 12:20:17 +02:00
Benjamin Bouvier f1dcfd6332 event cache: keep a weak link to the room when paginating 2024-05-23 12:20:17 +02:00
Benjamin Bouvier c40b3e768e sdk: add failing test for the strong Client <-> EventCache cycle 2024-05-23 12:20:17 +02:00
Benjamin Bouvier 3eaac27789 sdk: introduce a WeakClient data structure 2024-05-23 12:20:17 +02:00
Benjamin Bouvier affb5d195e day dividers: remove all the trailing day dividers if needs be
multipletrailing
2024-05-23 12:19:07 +02:00
Benjamin Bouvier 7995c046b4 day dividers: tweak invariant
It's possible the timeline starts with a read marker, in which case the
first item won't be a day divider; in that case, check for the next
item, if present.

test_start_with_read_marker
2024-05-23 12:19:07 +02:00
Benjamin Bouvier 612ed3b603 day dividers: don't remove the final entry if it was already scheduled for removal 2024-05-23 12:19:07 +02:00
Ivan Enderlin ba1c797db4 chore(sdk): Rename Updates to ObservableUpdates. 2024-05-23 11:45:34 +02:00
Ivan Enderlin e3fdf19843 doc(sdk): Improve the documentation of AsVector. 2024-05-23 10:43:13 +02:00
Ivan Enderlin c1061150a9 chore(sdk): derive(Clone) is implemented if all parameters are Clone. 2024-05-23 10:06:18 +02:00
Ivan Enderlin c5f4168dd6 Merge pull request #3442 from matrix-org/rav/no_device_update_on_unchanged
crypto: emit no `identities_stream` items on no-op changes
2024-05-23 09:31:15 +02:00
Ivan Enderlin 7ea804bd2a Merge pull request #3443 from matrix-org/valere/apple_binding_update_podspec
Apple Bindings | Update SDKCrypto podspec files
2024-05-23 09:23:55 +02:00
Valere 748c3d514a Apple Bindings | Update SDKCrypto podspec files 2024-05-22 19:50:37 +02:00
Richard van der Hoff 818778cdf3 Add a test for invalid responses
This was untested before, and it seems the coverage gate is now sad.
2024-05-22 17:23:11 +01:00
Richard van der Hoff 2a605deaa5 changelog 2024-05-22 13:42:57 +01:00
Richard van der Hoff a154cd4640 crypto: emit no stream update for unchanged devices
There is no need to emit a notification from `identities_stream` when all
devices are unchanged since last time.
2024-05-22 13:42:57 +01:00
Richard van der Hoff eee0dc4e87 crypto: indicate when a device was updated
update `ReadOnlyDevice::update_device` to return a bool indicating whether
anything is changing.
2024-05-22 13:42:57 +01:00
Ivan Enderlin 28a8ce1732 chore(sdk): Make explicit a hidden lifetime. 2024-05-22 13:59:39 +02:00
Ivan Enderlin 3d3639a923 chore(sdk): Replace into_iter by iter. 2024-05-22 13:55:03 +02:00
Ivan Enderlin 57d454c557 chore(sdk): pin-project-lite is no longer required. 2024-05-22 13:54:00 +02:00
Ivan Enderlin 94fe6a9876 test(sdk): More tests for AsVector.
This patch adds another check to ensure `AsVector` generates
`VectorDiff`s that, once combined, produce an expected `Vector`. It
avoids errors when unit testing `VectorDiff` alone.
2024-05-22 13:28:29 +02:00
Ivan Enderlin c9086a436b fix(sdk): Ensure an underflow is not possible.
This patch ensures that an underflow is not possible when the length
of `chunks` is 0. In practise, it's not possible because there is
_always_ one chunk inside `LinkedChunk`, but it's better to have good
code habits.
2024-05-22 12:15:48 +02:00
Ivan Enderlin 87370abea4 chore(sdk): Remove a useless Option. 2024-05-22 12:15:00 +02:00
Ivan Enderlin fa554455b7 Merge pull request #3334 from matrix-org/valere/fix_crypto_binding_apple_script
crypto: Apple Crypto Bindings | Fix crypto xcframework script
matrix-sdk-crypto-ffi-0.4.1
2024-05-22 11:43:47 +02:00
Valere b430d95c0a Workflow | only add the needed target for script 2024-05-22 11:29:01 +02:00
Ivan Enderlin b4b2ee4716 chore(sdk): Move code inside the same module. 2024-05-22 10:24:36 +02:00
Ivan Enderlin ea6e15086e feat(sdk): as_vectors are no longer unsafe.
This patch removes the `unsafe` part of `as_vector`. The idea is to
pass `Iter` (the forward iterator of `Chunk`) to `AsVector` so that it
internally computes `initial_chunk_lengths`. The shape of this data must
no longer be guaranteed by the caller.

This patch goes a bit further: `UpdateToVectorDiff` has
a new constructor which consumes this `Iter` and builds
`initial_chunk_lengths` itself. Even better!

Finally, `Updates::as_vector` is removed. It's clearly no longer
necessary and it was creating borrowing issues anyway with the new code
structure.
2024-05-22 10:16:02 +02:00
Richard van der Hoff d7a887766c indexeddb: expose new method IndexeddbCryptoStore::open_with_key (#3423)
Allow applications to skip the PBKDF2 operation if they already have a cryptographically secure key,
instead using a simple HKDF to derive a key.

In order to maintain compatibility for existing element-web sessions, if we discover that we have an
existing store that was encrypted with a key derived from PBKDF2, then we reconstruct what
element-web used to do: specifically, we base64-encode the key to obtain the "passphrase" that
was previously passed in. If that matches, we know we've got the right key, and can update the
meta store accordingly.

Part of a resolution to element-hq/element-web#26821.

Signed-off-by: Richard van der Hoff <1389908+richvdh@users.noreply.github.com>
Co-authored-by: Damir Jelić <poljar@termina.org.uk>
2024-05-22 09:07:45 +01:00
Valere ee040aba60 split for do in several lines 2024-05-22 09:55:25 +02:00
Valere f7e06d0c20 Generate ffi files only using aarch64-apple-ios 2024-05-22 09:55:25 +02:00
Valere d2ecf461d0 fix script 2024-05-22 09:55:25 +02:00
Valere a1bbe9d810 reduce build time of CI check 2024-05-22 09:55:25 +02:00
Valere 20ada4014d fix target name 2024-05-22 09:55:24 +02:00
Valere 604190d3ca CI: Test CrypoFFI XCFramework generation 2024-05-22 09:55:24 +02:00
Valere 6ad26fff5c remove unneeded \ at end of script 2024-05-22 09:54:43 +02:00
Valere de989b2c51 fmt 2024-05-22 09:54:43 +02:00
Valere ea4737269f Fix crypto xcframework apple bindings 2024-05-22 09:54:43 +02:00
Ivan Enderlin bf39976d21 doc(sdk): Add a useful inline documentation. 2024-05-22 09:36:15 +02:00
Ivan Enderlin ad9c2acef1 chore(sdk): Rename ReattachItems and ReattachItemsDone.
This patch renames `ReattachItems` to `StartReattachItems` and
`ReattachItemsDone` to `EndReattachItems`. This naming conveys better
the idea of a _state transition_.
2024-05-22 09:33:36 +02:00
Ivan Enderlin 5ac5e04fb8 doc(sdk): Fix or add missing documentation. 2024-05-22 09:23:42 +02:00
Kegan Dougal 794b11a0ce ci: Add a step running complement crypto (#3400)
Add a CI step running complement crypto, automatically matching the complement-crypto branch name based on the current branch name, if needs be.

Signed-off-by: Kegan Dougal <7190048+kegsay@users.noreply.github.com>
2024-05-21 16:34:39 +02:00
Benjamin Bouvier dba7cf39e6 day dividers: record the insert position when applying an operation based on the previous item
We could end up, like in the regression test, with a sequence of
operations like that:

- remove day divider @ i+1 (because it's redundant with one @ i)
- remove day divider @ i (because it's useless, since the event before
the day divider and after the day divider use the same date).

In that case, it would break the non-decreasing invariant: we'd apply an
operation on the array @ i+1, then @ i, which troubles the offset
computation.

Instead, when doing an operation based on the "prev_item" (now with a
small helper struct, to facilitate understanding of each field), we also
record the insertion order for the operation itself: it's always "at the
end of the operation order, at the time we're looking at it", so
equivalent to a "push_back" if there's no operation in between; but that
ensures that we'll do the operation in a non-decreasing order. For
instance in the above test case, the Remove(i) is now inserted before
the Remove(i+1), instead of after.
2024-05-21 12:45:59 +02:00
Benjamin Bouvier 1a872ac383 day dividers: only run the poisoning check for DayDividerAdjuster::drop if we're not already panicking 2024-05-21 12:45:59 +02:00
Andy Balaam 7bce12ca70 Merge pull request #3320 from matrix-org/andybalaam/fast-backup-reset-in-memorystore2
crypto: MemoryStore uses backup versions to track which sessions are backed up
2024-05-21 09:57:26 +01:00
Andy Balaam 2652b77a1b crypto: MemoryStore uses backup versions to track which sessions are backed up 2024-05-21 09:44:39 +01:00
Andy Balaam f310db44a3 crypto: Test for resetting backups by asking for new version 2024-05-21 09:43:40 +01:00
Benjamin Bouvier 5df53d7338 timeline queue refactoring: address review comments 2024-05-20 11:18:43 +02:00
Benjamin Bouvier 9575ee92d4 timeline queue: unify updating event send state into a single place 2024-05-20 11:18:43 +02:00