Immutable Properties (Property Type 0xB) contain a sequence of Key-Value-Pairs (see Figure 2) which are also Track or Object Properties.
Immutable Extensions {
Type (0xB),
Length (vi64),
Key-Value-Pair (..) ...
}
This Property can be added by the Original Publisher, but MUST NOT be added by Relays. This Property MUST NOT be modified or removed and the serialization (e.g. variable-length integer encodings) of the Key-Value-Pairs MUST NOT change). Like other Properties, Relays MUST cache Immutable Properties if the Object or Track are cached and MUST forward it. Relays MAY decode and view the Properties in the Key-Value-Pairs.
Unless specified by a particular Property specification, Properties MAY appear either in the mutable extension list or inside Immutable Properties. When looking for the value of a property, processors MUST search both the mutable properties and the contents of Immutable Extensions.
If a Property allows multiple values, the same Property Type MAY appear in both the mutable list and inside Immutable Extensions, unless prohibited by the Property specification.
A Track is considered malformed (see Section 2.4.2) if any of the following conditions are detected:
-
An Object contains an Immutable Properties property that contains another Immutable Properties key.
-
A Key-Value-Pair cannot be parsed.
The following figure shows an example Object structure with a combination of mutable and immutable properties and end to end encrypted metadata in the Object payload.
Object Header Object Payload
<------------------------------------------------> <------------------->
+--------+-------+------------+-------+-----------+--------------------+
| Object | Ext 1 | Immutable | Ext N | [Payload] | Private Properties |
| Fields | | Properties | | [Length] | App Payload |
+--------+-------+------------+-------+-----------+--------------------+
xxxxxxxxxxxx xxxxxxxxxxxxxxxxxxxx
yyyyyyyyyyyyyyyyyyyy
x = e2e Authenticated Data
y = e2e Encrypted Data
EXT 1 and EXT N can be modified or removed by Relays
An Object MUST NOT contain more than one instance of this property.