Compare commits

..

3 commits

Author SHA1 Message Date
HarHarLinks a4607b35dd add newsfragment
Signed-off-by: HarHarLinks <2803622+HarHarLinks@users.noreply.github.com>
2026-07-14 13:25:23 +02:00
HarHarLinks b5de7d3804 reference source for key withholding codes
Signed-off-by: HarHarLinks <2803622+HarHarLinks@users.noreply.github.com>
2026-07-14 13:23:25 +02:00
HarHarLinks c3758791dc clarify wording around history sharing exception
Signed-off-by: HarHarLinks <2803622+HarHarLinks@users.noreply.github.com>
2026-07-14 13:05:29 +02:00
3 changed files with 22 additions and 12 deletions

View file

@ -0,0 +1 @@
Clarify history key sharing requirements. Contributed by @HarHarLinks and Matrix Stammtisch Aachen.

View file

@ -1551,12 +1551,9 @@ objects described as follows:
{{% added-in v="1.19" %}} {{% added-in v="1.19" %}}
When Alice invites Bob to an encrypted room, that room might be set up for When Alice invites Bob to an encrypted room, she likely wants Bob to have access
Bob to have access to messages that were previously sent in that room, to messages that were previously sent in that room, subject to the [history
subject to the [history visibility](#room-history-visibility) setting of the room. visibility](#room-history-visibility) setting of the room.
Because the key material is not available on the server,
Alice MUST share the decryption keys of messages visible according to
the history visibility setting so Bob can read the message history.
Alice does this by constructing an [encrypted key Alice does this by constructing an [encrypted key
bundle](#construction-and-sharing-of-the-key-bundle) and sharing it with Bob bundle](#construction-and-sharing-of-the-key-bundle) and sharing it with Bob
@ -1613,12 +1610,22 @@ room.
##### Construction and sharing of the key bundle ##### Construction and sharing of the key bundle
Alice's client MAY choose not to share any room history (even messages sent when the Marking keys as [shareable](#shareable-encryption-sessions) essentially serves as
history visibility setting would allow sharing) if the current history precomputation of which keys Bob needs to decrypt all messages he can see, as
visibility setting does not allow sharing (i.e. if `history_visibility` is defined by the room's history visibility.
set to `invited` or `joined`).
Otherwise, before inviting Bob to a room, Alice's client constructs and sends a key bundle as follows: History visibility mechanics prevent changing the visibility of events in
hindsight. It is thus possible for a room timeline to have "gappy" visibility,
i.e. events sent during `shared` visibility in the past are visible, but events
more recently sent during `joined` visibility and before joining are not visible.
In such cases where the current history visibility setting does not allow sharing
(i.e. if `history_visibility` is set to `invited` or `joined`), Alice's client
MAY choose not to share *any* room history, even messages sent when the
history visibility setting would allow sharing.
In all other cases, Alice's client MUST share all available shareable keys.
Before inviting Bob to a room, Alice's client constructs and sends a key bundle as follows:
1. Alice's client SHOULD ensure that it has downloaded all keys relevant to the room 1. Alice's client SHOULD ensure that it has downloaded all keys relevant to the room
from [server-side key backup](#server-side-key-backups), if she is using it. from [server-side key backup](#server-side-key-backups), if she is using it.

View file

@ -33,7 +33,9 @@ properties:
- m.no_olm - m.no_olm
- m.history_not_shared - m.history_not_shared
description: |- description: |-
A machine-readable code for why the key was not sent. Codes beginning A machine-readable code for why the key was not sent, as defined by
[Reporting that decryption keys are withheld](#reporting-that-decryption-keys-are-withheld).
Codes beginning
with `m.` are reserved for codes defined in the Matrix with `m.` are reserved for codes defined in the Matrix
specification. Custom codes must use the Java package naming specification. Custom codes must use the Java package naming
convention. convention.