<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE rfc [
  <!ENTITY nbsp    "&#160;">
  <!ENTITY zwsp   "&#8203;">
  <!ENTITY nbhy   "&#8209;">
  <!ENTITY wj     "&#8288;">
]>
<?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?>
<!-- generated by https://github.com/cabo/kramdown-rfc version 1.7.19 (Ruby 3.3.4) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-mahy-vcon-mimi-messages-01" category="info" consensus="true" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.23.2 -->
  <front>
    <title abbrev="VCON for MIMI">VCON for MIMI Messages</title>
    <seriesInfo name="Internet-Draft" value="draft-mahy-vcon-mimi-messages-01"/>
    <author fullname="Rohan Mahy">
      <organization>Rohan Mahy Consulting Services</organization>
      <address>
        <email>rohan.ietf@gmail.com</email>
      </address>
    </author>
    <date year="2024" month="November" day="04"/>
    <area>Applications and Real-Time</area>
    <workgroup>Virtualized Conversations</workgroup>
    <keyword>instant messaging</keyword>
    <keyword>message history</keyword>
    <abstract>
      <?line 36?>

<t>This document describes extensions to the Virtualized Conversation (VCON)
syntax for instant messaging systems using the More Instant Messaging
Interoperability (MIMI) content format.</t>
    </abstract>
    <note removeInRFC="true">
      <name>About This Document</name>
      <t>
        The latest revision of this draft can be found at <eref target="https://rohanmahy.github.io/vcon-mimi-messages/draft-mahy-vcon-mimi-messages.html"/>.
        Status information for this document may be found at <eref target="https://datatracker.ietf.org/doc/draft-mahy-vcon-mimi-messages/"/>.
      </t>
      <t>
        Discussion of this document takes place on the
        Virtualized Conversations Working Group mailing list (<eref target="mailto:vcon@ietf.org"/>),
        which is archived at <eref target="https://mailarchive.ietf.org/arch/browse/vcon/"/>.
        Subscribe at <eref target="https://www.ietf.org/mailman/listinfo/vcon/"/>.
      </t>
      <t>Source for this draft and an issue tracker can be found at
        <eref target="https://github.com/rohanmahy/vcon-mimi-messages"/>.</t>
    </note>
  </front>
  <middle>
    <?line 43?>

<section anchor="introduction">
      <name>Introduction</name>
      <t>VCON <xref target="I-D.ietf-vcon-vcon-container"/> is a format for recording and
transmitting conversations. MIMI content <xref target="I-D.ietf-mimi-content"/>
is a format for conveying Instant Messages in an interoperable way
when end-to-end encrypted. This document describes a way to translate
a set of MIMI messages in a conversation or part of a conversation into
a VCON.</t>
    </section>
    <section anchor="conventions-and-definitions">
      <name>Conventions and Definitions</name>
      <t>The key words "<bcp14>MUST</bcp14>", "<bcp14>MUST NOT</bcp14>", "<bcp14>REQUIRED</bcp14>", "<bcp14>SHALL</bcp14>", "<bcp14>SHALL
NOT</bcp14>", "<bcp14>SHOULD</bcp14>", "<bcp14>SHOULD NOT</bcp14>", "<bcp14>RECOMMENDED</bcp14>", "<bcp14>NOT RECOMMENDED</bcp14>",
"<bcp14>MAY</bcp14>", and "<bcp14>OPTIONAL</bcp14>" in this document are to be interpreted as
described in BCP 14 <xref target="RFC2119"/> <xref target="RFC8174"/> when, and only when, they
appear in all capitals, as shown here.</t>
      <?line -18?>

</section>
    <section anchor="syntax">
      <name>Syntax</name>
      <t>A MIMI conversation (or portion thereof) is represented in VCON with
a mandatory list of parties and dialogs, a new top-level room object,
and optionally attachment objects.</t>
      <section anchor="room-information">
        <name>Room information</name>
        <t>This document adds a top-level <tt>room</tt> object. It contains metadata
known about the room at the start of the VCON period.</t>
        <ul spacing="normal">
          <li>
            <t><tt>id</tt> is the MIMI room ID URL. It is mandatory.</t>
          </li>
          <li>
            <t><tt>name</tt> is the textual name of the room. It is optional.</t>
          </li>
        </ul>
      </section>
      <section anchor="parties">
        <name>Parties</name>
        <t>The <tt>parties</tt> array <bcp14>MUST</bcp14> contain all the
participants who were in the conversation at any point in time during the
period represented by the VCON.</t>
        <t>This document adds a new party_object_type: <tt>imUri</tt>. It is mandatory.
The <tt>name</tt> field is optional. The <tt>role</tt> indicates the MIMI role and is
optional. The document also adds a <tt>thumbprint</tt> party_object_type, which is
the JWK thumbprint of the public key of the party. If there are multiple
parties (clients) with the same <tt>imUri</tt> then the thumbprint is required,
otherwise it is optional.</t>
      </section>
      <section anchor="extensions-to-the-dialog-object">
        <name>Extensions to the dialog object</name>
        <t>The dialog object consists of an array of instant messages of type "text".
The start time is set to the hub received timestamp when available.
The duration is zero. The parties array consist of the party indexes of those who were active participants when the message was sent.
The originator is set to the parties index of the sender of the message.</t>
        <ul spacing="normal">
          <li>
            <t><tt>messageId</tt> is the base64url encoding of the MIMI content messageId. It is mandatory.</t>
          </li>
          <li>
            <t><tt>replaces</tt> is the base64url encoding of the MIMI content messageId of the message this message replaces. It is optional if empty.</t>
          </li>
          <li>
            <t><tt>topicId</tt> is the base64url encoding of the MIMI topicId. It is optional if empty.</t>
          </li>
          <li>
            <t><tt>expires</tt> is the expiration date/time of the message expressed as a VCON
(text) date_type. It is optional if empty.</t>
          </li>
          <li>
            <t><tt>inReplyTo</tt> is an array of three values: the base64url encoding of the MIMI content messageId of the message to which this message is replying (or reacting), the hash algorithm expressed as an integer (SHA-256 is 1), and the base64url hash of the decrypted mimi-content. It is optional if empty.</t>
          </li>
          <li>
            <t><tt>lastSeen</tt> is an array of base64url-encoded message ids. It is mandatory.</t>
          </li>
          <li>
            <t><tt>mimiExtensions</tt> is a object (map) containing MIMI extensions. It is optional.</t>
          </li>
        </ul>
        <t>VCON typically expresses content using the body, encoding, and mimetype
fields. In order to preserve this convention we use these fields directly
for a MIMI SinglePart structure, but use new MultiPart and ExternalPart
structure for those MIMI structures. For a SinglePart these two fields could
be present.</t>
        <ul spacing="normal">
          <li>
            <t><tt>disposition</tt> - optional if set to the default value ("render")</t>
          </li>
          <li>
            <t><tt>language</tt> - optional if absent</t>
          </li>
        </ul>
        <t>If there is only a single part its "partIndex" is 0.</t>
      </section>
      <section anchor="multipart">
        <name>MultiPart</name>
        <ul spacing="normal">
          <li>
            <t><tt>partSemantics</tt> is one of "chooseOne", "singleUnit", or "processAll". It is mandatory.</t>
          </li>
          <li>
            <t><tt>parts</tt> is an array of <tt>Part</tt>s. It is mandatory.</t>
          </li>
        </ul>
      </section>
      <section anchor="part">
        <name>Part</name>
        <ul spacing="normal">
          <li>
            <t><tt>disposition</tt> - optional if set to the default value ("render")</t>
          </li>
          <li>
            <t><tt>language</tt> - optional if absent</t>
          </li>
          <li>
            <t><tt>partIndex</tt> is an unsigned integer. It is mandatory in a Part object.</t>
          </li>
          <li>
            <t><tt>cardinality</tt> is one of "nullpart", "single", "external", or "multi". mandatory.</t>
          </li>
        </ul>
        <t>if cardinality is "single" or "external", then body, encoding, and mimetype
fields are included directly in the Part object.</t>
      </section>
      <section anchor="externalpart">
        <name>ExternalPart</name>
        <ul spacing="normal">
          <li>
            <t>mimetype (contentType in MIMI). optional but recommended.</t>
          </li>
          <li>
            <t>url is the URL of the content as a text string. mandatory</t>
          </li>
          <li>
            <t>expires is a date_type (text) date. optional.</t>
          </li>
          <li>
            <t>size is an integer number of octets. optional.</t>
          </li>
          <li>
            <t>description is a text string. optional.</t>
          </li>
          <li>
            <t>filename is a text string. optional.</t>
          </li>
          <li>
            <t>cached is a boolean. It is mandatory if it is true, which means that a
copy of the external content is available in a vcon attachment object
(see {#attachments}).</t>
          </li>
          <li>
            <t>contentHash is the base64url encoded string of the hash of the external
content, prefixed with the name of the hash algorithm and a colon (for
example "sha256:"). contentHash is optional unless the external content has
been included in a vcon attachment object.</t>
          </li>
        </ul>
        <t>ExternalPart has several fields for the decryption of the
referenced content. These can be omitted once the content has been
downloaded, decrypted, verified, and included in the VCON attachments array.
All of them are base64url encoded strings. Otherwise they are mandatory if
present in the MIMI content.</t>
        <ul spacing="normal">
          <li>
            <t>encAlg</t>
          </li>
          <li>
            <t>key</t>
          </li>
          <li>
            <t>nonce</t>
          </li>
          <li>
            <t>aad</t>
          </li>
        </ul>
      </section>
      <section anchor="changes-to-the-room">
        <name>Changes to the room</name>
        <t>Changes to the room metadata or participation should be accompanied by
a new dialog type:</t>
        <ul spacing="normal">
          <li>
            <t>room metadata changes</t>
          </li>
          <li>
            <t>participant identity change</t>
          </li>
          <li>
            <t>participants joining and leaving</t>
          </li>
          <li>
            <t>participants adding new clients</t>
          </li>
          <li>
            <t>moderation events?</t>
          </li>
        </ul>
        <t><strong>TODO</strong> add additional fields</t>
      </section>
      <section anchor="partyeventtype-events">
        <name>party_event_type events</name>
        <t>When there is a change to the parties represented in a room, the
<tt>party_event_type.event</tt> is added.</t>
        <artwork><![CDATA[
party_event_type.event /= "add" / "welcome" / "leave" / "remove" / "ban"
]]></artwork>
        <ul spacing="normal">
          <li>
            <t>add: user added herself directly</t>
          </li>
          <li>
            <t>welcome: user added by someone else</t>
          </li>
          <li>
            <t>leave: user leaves of their own accord</t>
          </li>
          <li>
            <t>remove: user is removed by another user</t>
          </li>
          <li>
            <t>ban: user is banned from the group</t>
          </li>
        </ul>
      </section>
    </section>
    <section anchor="attachments">
      <name>Attachments</name>
      <t>An attachment consists of the following fields:</t>
      <ul spacing="normal">
        <li>
          <t>start: is the time when the attachment was downloaded. it is mandatory.</t>
        </li>
        <li>
          <t>party: is the party that downloaded the attachment. it is mandatory.</t>
        </li>
        <li>
          <t>contentHash: is the base64url encoded hash using the hash name prefixed with a colon before the hash (ex: "sha256:"). It is mandatory.</t>
        </li>
        <li>
          <t>dialogObjectRed is a string consisting of: "mid:" (representing the message ID URI), the messageId of the message in the dialog object, a colon, the partIndex of the Part (or "0" if the ExternalPart is at the top level), and the string "@anonymous.invalid"</t>
        </li>
      </ul>
      <t>mimetype, filename, encoding, and body are as defined in vcon and are all mandatory.</t>
    </section>
    <section anchor="examples">
      <name>Examples</name>
      <section anchor="mimi-examples-as-a-vcon">
        <name>MIMI examples as a VCON</name>
        <t>The example vcon consists of the example messages from Section 5 of the MIMI content specification plus a single multipart message.</t>
        <sourcecode type="json"><![CDATA[
{
  "vcon": "0.0.1",
  "room": {
    "id": "mimi://example.com/r/engineering_team",
    "name": "Engineering Team",
  }
  "parties": [
    {
      "imUri": "mimi://example.com/u/alice-smith",
      "name": "Alice Smith",
      "role": "moderator",
      "thumbprint": "TODOFIXDZXCog_FfQp-xLemZkD5GKB9H7Z-Y41O4jEw"
    },
    {
      "imUri": "mimi://example.com/u/bob-jones",
      "name": "Bob Jones",
      "role": "member",
      "thumbprint": "TODOFIXYUFE7bV9pXAHZHi5bwSWzLJqjncevs9aLKDg"
    },
    {
      "imUri": "mimi://example.com/u/cathy-washington",
      "name": "Cathy Washington",
      "role": "member",
      "thumbprint": "TODOFIXzH3EeOGbI0-oiDGTXlgKmkMzQyQ2W_Y-TB1U"
    }
  ],
  "dialog": [
    {
      "type": "text",
      "start": "2022-02-08T22:13:45.019-00:00",
      "duration": 0,
      "parties": [
        0, 1, 2
      ],
      "originator": 0,
      "messageId": "yjetjodyYNLBto8YDnwLkEc89W09rOuEivbnxKGfHLQ",
      "lastSeen": [],
      "mimetype": "text/markdown;variant=GFM",
      "encoding": "none"
      "body":
        "Hi everyone, we just shipped release 2.0. __Good work__!",
    },

    {
      "type": "text",
      "start": "2022-02-08T22:13:57.492-00:00",
      "duration": 0,
      "parties": [
        0, 1, 2
      ],
      "originator": 1,
      "messageId": "Ygye96VUeBhTO6U3D0ZllYsSwSdKB3SiRJgxAb3cdAo",
      "inReplyTo": [
        "yjetjodyYNLBto8YDnwLkEc89W09rOuEivbnxKGfHLQ",
        1,
        "6MaXLsvHITc8xzIQp8BRz_7w_UNQL1n7a6DWysTW5T0"
      ],
      "lastSeen": [
        "yjetjodyYNLBto8YDnwLkEc89W09rOuEivbnxKGfHLQ"
      ],
      "mimetype": "text/markdown;variant=GFM",
      "encoding": "none"
      "body": "Right on! _Congratulations_ \'all!",
    },

    {
      "type": "text",
      "start": "2022-02-08T22:13:57.728-00:00",
      "duration": 0,
      "parties": [
        0, 1, 2
      ],
      "originator": 2,
      "messageId": "2YF0k6blW9ZbJ8sgXJgMCTJOlofazdKwVRvf6ZUORFA",
      "inReplyTo": [
        "yjetjodyYNLBto8YDnwLkEc89W09rOuEivbnxKGfHLQ",
        1,
        "6MaXLsvHITc8xzIQp8BRz_7w_UNQL1n7a6DWysTW5T0"
      ],
      "lastSeen": [
        "Ygye96VUeBhTO6U3D0ZllYsSwSdKB3SiRJgxAb3cdAo"
      ],
      "disposition": "reaction",
      "mimetype": "text/plain;charset=utf-8",
      "encoding": "none"
      "body": "❤",
    },

    {
      "type": "text",
      "start": "2022-02-08T22:14:03.008-00:00",
      "duration": 0,
      "parties": [
        0, 1, 2
      ],
      "originator": 2,
      "messageId": "rF4iS5BcJ-aFfisoFDCrnTE9pZZBGCxGCoXGJ9VXnck",
      "lastSeen": [
        "2YF0k6blW9ZbJ8sgXJgMCTJOlofazdKwVRvf6ZUORFA"
      ],
      "mimetype": "text/markdown;variant=GFM",
      "encoding": "none"
      "body":
        "Kudos to [@Alice Smith](mimi://example.com/alice-smith) for
making the release happen!",
    },

    {
      "type": "text",
      "start": "2022-02-08T22:14:08.621-00:00",
      "duration": 0,
      "parties": [
        0, 1, 2
      ],
      "originator": 1,
      "messageId": "-GqJXuoaJu1Xosu-N8nt6NWzA2RLmIRY0q9jf_kvWkM",
      "replaces": "Ygye96VUeBhTO6U3D0ZllYsSwSdKB3SiRJgxAb3cdAo",
      "inReplyTo": [
        "yjetjodyYNLBto8YDnwLkEc89W09rOuEivbnxKGfHLQ",
        1,
        "6MaXLsvHITc8xzIQp8BRz_7w_UNQL1n7a6DWysTW5T0"
      ],
      "lastSeen": [
        "2YF0k6blW9ZbJ8sgXJgMCTJOlofazdKwVRvf6ZUORFA",
        "rF4iS5BcJ-aFfisoFDCrnTE9pZZBGCxGCoXGJ9VXnck"
      ],
      "mimetype": "text/markdown;variant=GFM",
      "encoding": "none"
      "body": "Right on! _Congratulations_ y'all"
    },

    {
      "type": "text",
      "start": "2022-02-08T22:14:08.621-00:00",
      "duration": 0,
      "parties": [
        0, 1, 2
      ],
      "originator": 1,
      "messageId": "8cqo1B9IA6nnB63oPEnmWxIqr7uk7WvQTBgVVlD_Q2c",
      "replaces": "Ygye96VUeBhTO6U3D0ZllYsSwSdKB3SiRJgxAb3cdAo",
      "inReplyTo": [
        "yjetjodyYNLBto8YDnwLkEc89W09rOuEivbnxKGfHLQ",
        1,
        "6MaXLsvHITc8xzIQp8BRz_7w_UNQL1n7a6DWysTW5T0"
      ],
      "lastSeen": [
        "-GqJXuoaJu1Xosu-N8nt6NWzA2RLmIRY0q9jf_kvWkM"
      ]
    },

    {
      "type": "text",
      "start": "2022-02-08T22:14:10.389-00:00",
      "duration": 0,
      "parties": [
        0, 1, 2
      ],
      "originator": 2,
      "messageId": "bYZ2NHaryq0WS2pq5IE9fMc4zltUyE6WrKJ7bNB5tMc",
      "replaces": "Ygye96VUeBhTO6U3D0ZllYsSwSdKB3SiRJgxAb3cdAo",
      "inReplyTo": [
        "yjetjodyYNLBto8YDnwLkEc89W09rOuEivbnxKGfHLQ",
        1,
        "6MaXLsvHITc8xzIQp8BRz_7w_UNQL1n7a6DWysTW5T0"
      ],
      "lastSeen": [
        "8cqo1B9IA6nnB63oPEnmWxIqr7uk7WvQTBgVVlD_Q2c"
      ],
      "disposition": "reaction"
    },

    {
      "type": "text",
      "start": "2022-02-08T22:49:06.227-00:00",
      "duration": 0,
      "parties": [
        0, 1, 2
      ],
      "originator": 0,
      "messageId": "GkblzkXJxyar0lTgkfcMQ0wo8qpbcU0MqtTg-gM1FiY",
      "expiring": "2022-02-08T22:59:06.227-00:00"
      "lastSeen": [
        "bYZ2NHaryq0WS2pq5IE9fMc4zltUyE6WrKJ7bNB5tMc"
      ],
      "status": "expired"
    },

    {
      "type": "text",
      "start": "2022-02-08T22:53:41.134-00:00",
      "duration": 0,
      "parties": [
        0, 1, 2
      ],
      "originator": 1,
      "messageId": "Tdt8UCUl1ugSLRmuObvib_4bvu_Hz3NSwaYuy-TtET4",
      "lastSeen": [
        "GkblzkXJxyar0lTgkfcMQ0wo8qpbcU0MqtTg-gM1FiY"
      ],
      "disposition": "attachment",
      "language": "en",
      "ExternalPart": {
        "mimetype": "video/mp4",
        "url": "https://example.com/storage/8ksB4bSrrRE.mp4",
        "size": 708234961,
        "description": "2 hours of key signing video",
        "filename": "bigfile.mp4",
        "contentHash": "sha256:OczZYpW_L0B1DsMSLJqL2jTRJKoj7fTUJ2jhnX70-00",

        "encAlg": 1,
        "key": "aZISOs306M7n_3csR-J1cw",
        "nonce": "5VM0QcZI3PNmnquV6CUgxg",
        "aad": ""
      }
    },

    {
      "type": "text",
      "start": "2022-02-08T22:54:09.972-00:00",
      "duration": 0,
      "parties": [
        0, 1, 2
      ],
      "originator": 2,
      "messageId": "KgDTc29ZP4YyYmXtaYyxpZNrnigjvCjrCYuLTz19zWc",
      "lastSeen": [
        "Tdt8UCUl1ugSLRmuObvib_4bvu_Hz3NSwaYuy-TtET4"
      ],
      "disposition": "session",
      "ExternalPart": {
        "url": "https://example.com/join/12345",
        "description": "Join the Foo 118 conference"
      }
    },

    {
      "type": "text",
      "start": "2022-02-08T22:57:14.084-00:00",
      "duration": 0,
      "parties": [
        0, 1, 2
      ],
      "originator": 0,
      "messageId": "sD19bKRmu4mA9SHznfQOLQQzKnx1Q4mEtSNQhvzqCZw",
      "lastSeen": [
        "KgDTc29ZP4YyYmXtaYyxpZNrnigjvCjrCYuLTz19zWc"
      ],
      "disposition": "render",
      "partIndex": 0,
      "MultiPart": {
        "partSemantics": "chooseOne",
        "parts": [
          "Part": {
            "disposition": "render",
            "language": "en",
            "partIndex": 1,
            "mimetype": "text/markdown;variant=GFM",
            "encoding": "none"
            "body": "Hello!"
          },
          "Part": {
            "disposition": "render",
            "language": "fr",
            "partIndex": 2,
            "mimetype": "text/markdown;variant=GFM",
            "encoding": "none"
            "body": "Bonjour!"
          }
        ]
      }
    }
  ]
}
]]></sourcecode>
      </section>
      <section anchor="mimi-vcon-with-an-attachment">
        <name>MIMI VCON with an Attachment</name>
        <t>This example vcon consists of a single message in a dialog which references
an attachment.</t>
        <sourcecode type="json"><![CDATA[
{
  "vcon": "0.0.1",
  "room": {
    "id": "mimi://example.com/r/engineering_team",
    "name": "Engineering Team",
  }
  "parties": [
    {
      "imUri": "mimi://example.com/u/alice-smith",
      "name": "Alice Smith",
      "role": "moderator",
      "thumbprint": "TODOFIXDZXCog_FfQp-xLemZkD5GKB9H7Z-Y41O4jEw"
    },
    {
      "imUri": "mimi://example.com/u/bob-jones",
      "name": "Bob Jones",
      "role": "member",
      "thumbprint": "TODOFIXYUFE7bV9pXAHZHi5bwSWzLJqjncevs9aLKDg"
    },
    {
      "imUri": "mimi://example.com/u/cathy-washington",
      "name": "Cathy Washington",
      "role": "member",
      "thumbprint": "TODOFIXzH3EeOGbI0-oiDGTXlgKmkMzQyQ2W_Y-TB1U"
    }
  ],
  "dialog": [
    {
      "type": "text",
      "start": "2022-02-08T22:53:41.134-00:00",
      "duration": 0,
      "parties": [
        0, 1, 2
      ],
      "originator": 1,
      "messageId": "Tdt8UCUl1ugSLRmuObvib_4bvu_Hz3NSwaYuy-TtET4",
      "lastSeen": [
        "GkblzkXJxyar0lTgkfcMQ0wo8qpbcU0MqtTg-gM1FiY"
      ],
      "disposition": "attachment",
      "language": "en",
      "ExternalPart": {
        "mimetype": "video/mp4",
        "url": "https://example.com/storage/8ksB4bSrrRE.mp4",
        "size": 708234961,
        "description": "2 hours of key signing video",
        "filename": "bigfile.mp4",
        "contentHash": "sha256:OczZYpW_L0B1DsMSLJqL2jTRJKoj7fTUJ2jhnX70-00",
        "cached": true
      }
    },
  ],
  "attachments": [
    {
      "start": "2022-02-08T22:53:41.134-00:00",
      "party": 1,
      "contentHash": "sha256:OczZYpW_L0B1DsMSLJqL2jTRJKoj7fTUJ2jhnX70-00",
      "dialogObjectRef":
  "mid:Tdt8UCUl1ugSLRmuObvib_4bvu_Hz3NSwaYuy-TtET4:0@anonymous.invalid",
      "mimetype": "video/mp4",
      "filename": "bigfile.mp4",
      "encoding": "base64url",
      "body": "Ma0hHSr0f_iUk_RSShTgtY...nSQbZEip5danJYQqsvwWQ"
    }
  ]
}
]]></sourcecode>
      </section>
    </section>
    <section anchor="security-considerations">
      <name>Security Considerations</name>
      <t>TODO Security</t>
    </section>
    <section anchor="iana-considerations">
      <name>IANA Considerations</name>
      <t>This document has no IANA actions.</t>
    </section>
  </middle>
  <back>
    <references anchor="sec-normative-references">
      <name>Normative References</name>
      <reference anchor="I-D.ietf-vcon-vcon-container">
        <front>
          <title>The JSON format for vCon - Conversation Data Container</title>
          <author fullname="Daniel Petrie" initials="D." surname="Petrie">
            <organization>SIPez LLC</organization>
          </author>
          <author fullname="Thomas McCarthy-Howe" initials="T." surname="McCarthy-Howe">
            <organization>Strolid</organization>
          </author>
          <date day="20" month="October" year="2024"/>
          <abstract>
            <t>   A vCon is the container for data and information relating to a real-
   time, human conversation.  It is analogous to a [vCard] which enables
   the definition, interchange and storage of an individual's various
   points of contact.  The data contained in a vCon may be derived from
   any multimedia session, traditional phone call, video conference, SMS
   or MMS message exchange, webchat or email thread.  The data in the
   container relating to the conversation may include Call Detail
   Records (CDR), call meta data, participant identity information (e.g.
   STIR PASSporT), the actual conversational data exchanged (e.g. audio,
   video, text), realtime or post conversational analysis and
   attachments of files exchanged during the conversation.  A
   standardized conversation container enables many applications,
   establishes a common method of storage and interchange, and supports
   identity, privacy and security efforts (see [vCon-white-paper])

            </t>
          </abstract>
        </front>
        <seriesInfo name="Internet-Draft" value="draft-ietf-vcon-vcon-container-01"/>
      </reference>
      <reference anchor="I-D.ietf-mimi-content">
        <front>
          <title>More Instant Messaging Interoperability (MIMI) message content</title>
          <author fullname="Rohan Mahy" initials="R." surname="Mahy">
            <organization>Rohan Mahy Consulting Services</organization>
          </author>
          <date day="10" month="June" year="2024"/>
          <abstract>
            <t>   This document describes content semantics common in Instant Messaging
   (IM) systems and describes a profile suitable for instant messaging
   interoperability of messages end-to-end encrypted inside the MLS
   (Message Layer Security) Protocol.

            </t>
          </abstract>
        </front>
        <seriesInfo name="Internet-Draft" value="draft-ietf-mimi-content-04"/>
      </reference>
      <reference anchor="RFC2119">
        <front>
          <title>Key words for use in RFCs to Indicate Requirement Levels</title>
          <author fullname="S. Bradner" initials="S." surname="Bradner"/>
          <date month="March" year="1997"/>
          <abstract>
            <t>In many standards track documents several words are used to signify the requirements in the specification. These words are often capitalized. This document defines these words as they should be interpreted in IETF documents. This document specifies an Internet Best Current Practices for the Internet Community, and requests discussion and suggestions for improvements.</t>
          </abstract>
        </front>
        <seriesInfo name="BCP" value="14"/>
        <seriesInfo name="RFC" value="2119"/>
        <seriesInfo name="DOI" value="10.17487/RFC2119"/>
      </reference>
      <reference anchor="RFC8174">
        <front>
          <title>Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words</title>
          <author fullname="B. Leiba" initials="B." surname="Leiba"/>
          <date month="May" year="2017"/>
          <abstract>
            <t>RFC 2119 specifies common key words that may be used in protocol specifications. This document aims to reduce the ambiguity by clarifying that only UPPERCASE usage of the key words have the defined special meanings.</t>
          </abstract>
        </front>
        <seriesInfo name="BCP" value="14"/>
        <seriesInfo name="RFC" value="8174"/>
        <seriesInfo name="DOI" value="10.17487/RFC8174"/>
      </reference>
    </references>
    <?line 581?>

<section anchor="cddl-changes">
      <name>CDDL changes</name>
      <t><strong>TODO</strong></t>
    </section>
    <section numbered="false" anchor="acknowledgments">
      <name>Acknowledgments</name>
      <t>TODO acknowledge.</t>
    </section>
  </back>
  <!-- ##markdown-source:
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
5LUGnoPc3h5ybuFZ7MPt7XfxVIC3/5921jfL9Ubt22qnulg718Mpa2x8vGA7
o35342Jtr3LjONeiN+lZJztrPfv8ePi0bayZ1jbPOEv3WQts/C5Nk4wxoLDR
oVdtMT5q9c2tp+fWmb+1c/58uzm5vTg9a1e9TbqxdzkV/cv1fkWfW24eM7+P
qTmS7ws4op/bwxGUg9535HaXe0PQb+SoixC35D//A+Lte0Jqs7b1bSFVWwyp
2vVB5WHDcC4bN8bxlhheHQ87u/3jrsMH9Nk6mXw8Hw82bi665wfb/56QeovN
zJHM7TOisNQBQT6mzGHOd6jt/Q0qM6hwwh+jcFDaegPk/vef//0+mKo3K2vl
SuWPwVRwULd76zvmcYkeDGzBD/Z2A6+/3/BvbnYOd58Od/nV4XHj45VnPiwO
Ipn23gLPb+wQMqZOIovL3Ypffs7ld78uLchYcsnhMm4YaS59SKqWJFaN8LaM
907OBBS/Vd6oVf+Q+FQ6fDy+ijg9jqpXXESl0y0v3Di9fN6unbfd1vl15bFx
P7h9GF8+5MSenHv+KQLc73G35G0W9YfGxSnGRf3fHshb5iOv7jRa2xuet7Ox
xj/se+7lU+sx2IweNi/HZ/2d4cePzt7tWc38kwL5LaaekHwfWFQr5bWtb1wd
vRLYjOub2ukRDaaPlctezX9cb+03Bh2z/uyEF9P9jcvg5HjTON1ZDzt/Vli8
xXC+Ott6B9zUG83KRrlW2/xDqurDB8N5frg6fprSoOL0hw8Ds3NWmfCtR98w
Lyqdx7A/LA071QP7OueH8XAz9sPFxazPLObzKnkLaOdWB+IMIwldddZqvYcy
1tea9Wq5ulb/Q3x73wq3LnYvnGo07LXP3ahrjG3jtm6Mo9uj57XT3oReR9NS
P9zv17+Unb5Fr19Ce7Zfn59VXVKQ8s9VHfmd53RTVK00F+vHtsX4quvX85lE
FDh67icf+VwVf9UCk61uPYidutELgvP98sxoPECH4ZuVrdpavbGRdya5o3Kp
cTLiUSD3kPGCJt6cwLxX8pSnmGx5S/dqD/F1dtLcUYWeHSd0zeeba//ytl3Z
qe6JTq99/Niu3ffPj0/4/eagf3Fcux95V5uVkgRYRk0dUObhAY3AotTBTavX
FWuVjc6md7tmivPScdWc5HmR55nYdf1jp3Jm3rTWPpy63mP0cWP3Yvg0zHel
VMItUfzLexgOJEWNcmPzG+8+vRL9ToZ7fbPWuPlQv55eu1chvZ4++TengWcP
78e798HuddTuP1cbz5fmlwznLTb4JcMRTP7Y7Gus4zPgxzPe1Sqgel1/HdTH
PD47OuCcVKtbeNwRn/S/q5o3Ic8pV7a+sX98JViJvWrDOAGl1N3tRu/o2Ruc
ddtnZ88n3lP1rO7uh73Ts9H4+XH3ZvIlNb8FMV/OBuTlrcKy1eW1/ErSy2tF
xRdusSG13OW1Yq+iHKFxjthXMJcKZaH7XrCA6sy3t5Vs8aDXCrf4c1K+HTHH
4d/lP76sfIMFD+a+5hdc+xcueId79xCLiktOn38tGq6GLS/q4kJyapr+1gYv
jmU3AeJfXbx6dpodeGYHzzQ5dlaXutKLQkKj+UsFf52Ipp/+OhH9s5+I/lUu
kL/KhXjYv6hcyIjJ+7p6/F8cUI0vmZUqlOduXM5D/a2glje6CnB8vwXpxctW
A3moIW9VvQHlzcqCW0wLN5vnEfVF/RVienofLfucxPQOrYyOekFlcGtfPNye
93qj/jC8LpfLXu/MuNm3/XWLesfXZ49iPLk8y7mlNLbjBaYowEuf+F8asJOb
mvj7TvB36Vd5kaq1fbo9363wk0u8uOtx1VNtW4nk1/oGNR/kD8f39trpBdT0
Iqi8XWjiT2AdZg3VDcNPTXUtnVk/6gPqCKa/xGzRtCcra/8HlB58huBDAAA=

-->

</rfc>
