Compare commits

..

4 commits

Author SHA1 Message Date
Patrick Cloke 5bb777284e
Merge e92c5ca539 into 4c2bb5aae1 2026-07-17 16:45:10 -04:00
networkException 4c2bb5aae1
Clarify user avatar_urls to always use MXC URIs (#2422)
Some checks failed
Spec / 🔎 Validate OpenAPI specifications (push) Has been cancelled
Spec / 🔎 Check Event schema examples (push) Has been cancelled
Spec / 🔎 Check OpenAPI definitions examples (push) Has been cancelled
Spec / 🔎 Check JSON Schemas inline examples (push) Has been cancelled
Spec / ⚙️ Calculate baseURL for later jobs (push) Has been cancelled
Spec / 📢 Run towncrier for changelog (push) Has been cancelled
Spell Check / Spell Check with Typos (push) Has been cancelled
Spec / 🐍 Build OpenAPI definitions (push) Has been cancelled
Spec / 📖 Build the spec (push) Has been cancelled
Spec / 🔎 Validate generated HTML (push) Has been cancelled
Spec / 📖 Build the historical backup spec (push) Has been cancelled
Spec / Create release (push) Has been cancelled
Previously the spec would use a mix of `string`, `URI`
and `MXC URI` for values of a user's `avatar_url` in
different apis (like `m.room.member`, `m.presence`,
CS profile endpoints).

This clarification updates all occurances to be MXC URIs,
prompted by https URIs `m.room.member#avatar_url` events
in the wild.

Signed-off-by: networkException <git@nwex.de>
2026-07-17 13:27:19 +02:00
gewitternacht f9dec5dc92
Fix typesetting of symbols in Olm/Megolm spec (#2421)
Some checks are pending
Spec / 🔎 Validate OpenAPI specifications (push) Waiting to run
Spec / 🔎 Check Event schema examples (push) Waiting to run
Spec / 🔎 Check OpenAPI definitions examples (push) Waiting to run
Spec / 🔎 Check JSON Schemas inline examples (push) Waiting to run
Spec / ⚙️ Calculate baseURL for later jobs (push) Waiting to run
Spec / 🐍 Build OpenAPI definitions (push) Blocked by required conditions
Spec / 📢 Run towncrier for changelog (push) Waiting to run
Spec / 📖 Build the spec (push) Blocked by required conditions
Spec / 🔎 Validate generated HTML (push) Blocked by required conditions
Spec / 📖 Build the historical backup spec (push) Blocked by required conditions
Spec / Create release (push) Blocked by required conditions
Spell Check / Spell Check with Typos (push) Waiting to run
* properly typeset symbols in Olm/Megolm message format tables

Signed-off-by: Johanna Stuber <johannas@element.io>

* use \mathit in Olm spec analogously to Megolm spec

Signed-off-by: Johanna Stuber <johannas@element.io>

* add newsfragment

Signed-off-by: Johanna Stuber <johannas@element.io>

* fix typo

Signed-off-by: Johanna Stuber <johannas@element.io>

---------

Signed-off-by: Johanna Stuber <johannas@element.io>
2026-07-16 11:55:30 -04:00
Johannes Marbach 16b04f9d6c
Add further normative language in mutual rooms server behaviour (#2407)
* Add further normative language in mutual rooms server behaviour

Signed-off-by: Johannes Marbach <n0-0ne+github@mailbox.org>

* Avoid superfluous MUST

Co-authored-by: Hubert Chathi <hubertc@matrix.org>

---------

Signed-off-by: Johannes Marbach <n0-0ne+github@mailbox.org>
Co-authored-by: Hubert Chathi <hubertc@matrix.org>
2026-07-16 11:18:09 -04:00
13 changed files with 35 additions and 23 deletions

View file

@ -0,0 +1 @@
Add further normative language in mutual rooms server behaviour.

View file

@ -0,0 +1 @@
Use MXC URI type for all user `avatar_url` fields. Contributed by @networkException.

View file

@ -0,0 +1 @@
Fix typesetting of some symbols in the Olm/Megolm spec.

View file

@ -6,9 +6,9 @@
#### Server behaviour
The server may decide that the response to this endpoint is too large, and only return a
subset of the results. In this case, the server should populate the optional field `next_batch`
with an [opaque identifier](/appendices/#opaque-identifiers). The client may then supply
The server MAY decide that the response to this endpoint is too large, and only return a
subset of the results. In this case, the server populates the optional field `next_batch`
with an [opaque identifier](/appendices/#opaque-identifiers). The client can then supply
the identifier as the `from` query parameter in a subsequent request, along with the original
`user_id`, to fetch the next batch of responses. This will continue until the server no longer
inserts `next_batch`, meaning there are no further results.

View file

@ -257,8 +257,8 @@ consists of the following key-value pairs:
**Name**|**Tag**|**Type**|**Meaning**
:-----:|:-----:|:-----:|:-----:
Message-Index|0x08|Integer|The index of the ratchet, i
Cipher-Text|0x12|String|The cipher-text, Xi, of the message
Message-Index|0x08|Integer|The index of the ratchet, \(i\).
Cipher-Text|0x12|String|The cipher-text of the message, \(X_i\).
Within the payload, integers are encoded using a variable length encoding. Each
integer is encoded as a sequence of bytes with the high bit set followed by a

View file

@ -17,12 +17,12 @@ side of an \(=\) it means that the output is split.
When this document uses \(\operatorname{ECDH}\left(K_A,K_B\right)\) it means
that each party computes a Diffie-Hellman agreement using their private key
and the remote party's public key.
So party \(A\) computes \(\operatorname{ECDH}\left(K_B^{public},K_A^{private}\right)\)
and party \(B\) computes \(\operatorname{ECDH}\left(K_A^{public},K_B^{private}\right)\).
So party \(A\) computes \(\operatorname{ECDH}\left(K_B^{\mathit{public}},K_A^{\mathit{private}}\right)\)
and party \(B\) computes \(\operatorname{ECDH}\left(K_A^{\mathit{public}},K_B^{\mathit{private}}\right)\).
Where this document uses \(\operatorname{HKDF}\left(salt,IKM,info,L\right)\) it
Where this document uses \(\operatorname{HKDF}\left(\mathit{salt},\mathit{IKM},\mathit{info},L\right)\) it
refers to the [HMAC-based key derivation function][] with a salt value of
\(salt\), input key material of \(IKM\), context string \(info\),
\(\mathit{salt}\), input key material of \(\mathit{IKM}\), context string \(\mathit{info}\),
and output keying material length of \(L\) bytes.
## The Olm Algorithm
@ -226,9 +226,9 @@ significant bits are stored in the first byte.
**Name**|**Tag**|**Type**|**Meaning**
:-----:|:-----:|:-----:|:-----:
Ratchet-Key|0x0A|String|The public part of the ratchet key, Ti, of the message
Chain-Index|0x10|Integer|The chain index, j, of the message
Cipher-Text|0x22|String|The cipher-text, Xi,j, of the message
Ratchet-Key|0x0A|String|The public part of the ratchet key of the message, \(T_i\).
Chain-Index|0x10|Integer|The chain index of the message, \(j\).
Cipher-Text|0x22|String|The cipher-text of the message, \(X_{i,j}\).
The length of the MAC is determined by the authenticated encryption algorithm
being used. (Olm version 1 uses [HMAC-SHA-256][], truncated to 8 bytes). The
@ -251,9 +251,9 @@ The payload uses the same key-value format as for normal messages.
**Name**|**Tag**|**Type**|**Meaning**
:-----:|:-----:|:-----:|:-----:
One-Time-Key|0x0A|String|The public part of Bob's single-use key, Eb.
Base-Key|0x12|String|The public part of Alice's single-use key, Ea.
Identity-Key|0x1A|String|The public part of Alice's identity key, Ia.
One-Time-Key|0x0A|String|The public part of Bob's single-use key, \(E_B\).
Base-Key|0x12|String|The public part of Alice's single-use key, \(E_A\).
Identity-Key|0x1A|String|The public part of Alice's identity key, \(I_A\).
Message|0x22|String|An embedded Olm message with its own version and MAC.
## Olm Authenticated Encryption
@ -268,13 +268,13 @@ message key using [HKDF-SHA-256][] using the default salt and an info of
\[
\begin{aligned}
AES\_KEY_{i,j}\;\parallel\;HMAC\_KEY_{i,j}\;\parallel\;AES\_IV_{i,j}
\mathit{AES\_KEY}_{i,j}\;\parallel\;\mathit{HMAC\_KEY}_{i,j}\;\parallel\;\mathit{AES\_IV}_{i,j}
&= \operatorname{HKDF}\left(0,M_{i,j},\text{``OLM\_KEYS"},80\right)
\end{aligned}
\]
The plain-text is encrypted with AES-256, using the key \(AES\_KEY_{i,j}\)
and the IV \(AES\_IV_{i,j}\) to give the cipher-text, \(X_{i,j}\).
The plain-text is encrypted with AES-256, using the key \(\mathit{AES\_KEY}_{i,j}\)
and the IV \(\mathit{AES\_IV}_{i,j}\) to give the cipher-text, \(X_{i,j}\).
Then the entire message (including the Version Byte and all Payload Bytes) are
passed through [HMAC-SHA-256][]. The first 8 bytes of the MAC are appended to the message.

View file

@ -54,7 +54,8 @@ properties:
example: true
avatar_url:
type: string
format: uri
format: mx-mxc-uri
pattern: "^mxc:\\/\\/"
description: The URL for the room's avatar, if one is set.
example: "mxc://example.org/abcdef"
join_rule:

View file

@ -335,7 +335,8 @@ paths:
description: The display name of the user this object is representing.
avatar_url:
type: string
format: uri
format: mx-mxc-uri
pattern: "^mxc:\\/\\/"
description: The avatar of the user this object is representing, as an [`mxc://`
URI](/client-server-api/#matrix-content-mxc-uris).
description: A map from user ID to a RoomMember object.

View file

@ -237,7 +237,8 @@ paths:
title: Display name
avatar_url:
type: string
format: uri
format: mx-mxc-uri
pattern: "^mxc:\\/\\/"
title: Avatar Url
events_before:
type: array

View file

@ -89,7 +89,8 @@ paths:
description: The display name of the user, if one exists.
avatar_url:
type: string
format: uri
format: mx-mxc-uri
pattern: "^mxc:\\/\\/"
example: mxc://bar.com/foo
description: The avatar url, as an [`mxc://`
URI](/client-server-api/#matrix-content-mxc-uris),

View file

@ -172,6 +172,8 @@ paths:
example: John Doe
avatar_url:
type: string
format: mx-mxc-uri
pattern: "^mxc:\\/\\/"
description: |-
The avatar URL for the user's avatar. MUST either be omitted or set to
`null` if the user does not have an avatar set.

View file

@ -12,6 +12,8 @@
"properties": {
"avatar_url": {
"type": "string",
"format": "mx-mxc-uri",
"pattern": "^mxc:\\/\\/",
"description": "The current avatar URL for this user, if any."
},
"displayname": {

View file

@ -53,7 +53,8 @@ properties:
avatar_url:
description: 'The avatar URL for this user, if any.'
type: string
format: uri
format: mx-mxc-uri
pattern: "^mxc:\\/\\/"
displayname:
description: 'The display name for this user, if any.'
type: