pub struct DeviceTracker;Expand description
Device-list tracking: outdated bookkeeping, /keys/query request
building, and validating /keys/query responses. See the module doc for
the security invariants this type enforces. Carries no state of its own
– every method reads/writes through the caller’s CryptoStore.
Implementations§
Source§impl DeviceTracker
impl DeviceTracker
Sourcepub fn on_device_lists<S: CryptoStore>(
store: &mut S,
changed: &[UserId],
left: &[UserId],
) -> Result<(), MessengerError>
pub fn on_device_lists<S: CryptoStore>( store: &mut S, changed: &[UserId], left: &[UserId], ) -> Result<(), MessengerError>
Applies /sync’s device_lists.changed/device_lists.left (plan
§3, research doc §3.2). See the module doc for what happens to a
left user.
Sourcepub fn keys_query_request<S: CryptoStore>(
store: &S,
id: RequestId,
) -> Result<Option<OutgoingRequest>, MessengerError>
pub fn keys_query_request<S: CryptoStore>( store: &S, id: RequestId, ) -> Result<Option<OutgoingRequest>, MessengerError>
Builds a POST /keys/query request for every currently-outdated
tracked user, or None if none are outdated.
Sourcepub fn devices_for_user<S: CryptoStore>(
store: &S,
user_id: &UserId,
) -> Result<Vec<StoredDevice>, MessengerError>
pub fn devices_for_user<S: CryptoStore>( store: &S, user_id: &UserId, ) -> Result<Vec<StoredDevice>, MessengerError>
Every device this store currently has stored for user_id, or an
empty list if none.
Sourcepub fn on_keys_query_response<S: CryptoStore>(
store: &mut S,
body: &[u8],
) -> Result<KeysQueryOutcome, MessengerError>
pub fn on_keys_query_response<S: CryptoStore>( store: &mut S, body: &[u8], ) -> Result<KeysQueryOutcome, MessengerError>
Applies a /keys/query response body (plan §3): verifies each
device’s self-signature over canonical JSON with its OWN claimed
Ed25519 key, drops anything that doesn’t check out, applies a key
change on an already-known device id (clears verified, keeps
blocked, emits DeviceKeyChanged), and persists the resulting
per-user device lists. Marks every user present in device_keys
(even with zero devices) not-outdated.