<?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.8 (Ruby 3.2.2) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-ralston-mimi-policy-01" category="std" consensus="true" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.20.1 -->
  <front>
    <title abbrev="MIMI Policy">More Instant Messaging Interoperability (MIMI) Policy</title>
    <seriesInfo name="Internet-Draft" value="draft-ralston-mimi-policy-01"/>
    <author fullname="Travis Ralston">
      <organization>The Matrix.org Foundation C.I.C.</organization>
      <address>
        <email>travisr@matrix.org</email>
      </address>
    </author>
    <author fullname="Matthew Hodgson">
      <organization>The Matrix.org Foundation C.I.C.</organization>
      <address>
        <email>matthew@matrix.org</email>
      </address>
    </author>
    <date year="2024" month="March" day="22"/>
    <area>Applications and Real-Time</area>
    <workgroup>More Instant Messaging Interoperability</workgroup>
    <keyword>mimi</keyword>
    <keyword>policy</keyword>
    <keyword>envelope</keyword>
    <keyword>messaging</keyword>
    <abstract>
      <?line 43?>

<t>This document specifies an authorization policy framework for the More Instant
Messaging Interoperability (MIMI) working group's transport protocol. It makes
use of a Role-Based Access Control (RBAC) mechanism to grant/deny permissions
to users, clients, and servers.</t>
    </abstract>
    <note removeInRFC="true">
      <name>About This Document</name>
      <t>
        The latest revision of this draft can be found at <eref target="https://turt2live.github.io/ietf-mimi-policy/draft-ralston-mimi-policy.html"/>.
        Status information for this document may be found at <eref target="https://datatracker.ietf.org/doc/draft-ralston-mimi-policy/"/>.
      </t>
      <t>
        Discussion of this document takes place on the
        More Instant Messaging Interoperability Working Group mailing list (<eref target="mailto:mimi@ietf.org"/>),
        which is archived at <eref target="https://mailarchive.ietf.org/arch/browse/mimi/"/>.
        Subscribe at <eref target="https://www.ietf.org/mailman/listinfo/mimi/"/>.
      </t>
      <t>Source for this draft and an issue tracker can be found at
        <eref target="https://github.com/turt2live/ietf-mimi-policy"/>.</t>
    </note>
  </front>
  <middle>
    <?line 50?>

<section anchor="introduction">
      <name>Introduction</name>
      <t>This document relies on the concepts described by <xref target="I-D.barnes-mimi-arch"/> and
<xref target="I-D.ralston-mimi-protocol"/>.</t>
      <t>Policy within MIMI defines who or what is allowed to take a certain action, and
what the allowable actions are. Some examples include whether a given user is
able to send messages or promote/demote other users within the room. This
document outlines the minimum permissions required for interoperability, and how
the Role-Based Access Control (RBAC) mechanism works.</t>
      <t>Some actions are enforceable by the hub server or local follower server in a
room, however other actions can only be handled by end clients. Whether a server
can enforce the policy largely depends on the server's visibility of the message
being checked: MLS Private Messages cannot be inspected, and therefore cannot
have policy applied to them by the server. Such messages will need to be checked
by the clients instead.</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?>

<t>Terms from <xref target="I-D.barnes-mimi-arch"/>, <xref target="I-D.ralston-mimi-terminology"/>, and
<xref target="I-D.ralston-mimi-protocol"/> are used throughout this document.
<xref target="I-D.barnes-mimi-arch"/> takes precedence where there's conflict.</t>
      <t>Other terms include:</t>
      <t><em>Rejected</em>: The action being performed ceases to continue through the remainder
of the send/rendering steps. For a hub server, this means the event being sent
is not added to the room and is not sent to any other server. For a client, this
equates to not rendering or respecting the action.</t>
      <t><em>Allowed</em>: The opposite of Rejected. The action is expressly permitted to occur.</t>
      <t><em>"Engaging with the room"</em>: The user is able to take some actions and send
messages in the room, provided the remainder of the policy allows them to do
that. The encryption/security layer <bcp14>MAY</bcp14> further restrict a user's ability to
take action. For example, the user might need 1 or more clients to be able to
successfully send a message.</t>
      <section anchor="permissions-definitions">
        <name>Permissions Definitions</name>
        <t><em>Action</em>: Something a user does in the context of a room. For example, invite
another user or send a message to the room.</t>
        <t><em>Permission</em>: A flag which allows (or rejects) execution of an action.</t>
        <t><em>Role</em>: A user-defined set of permissions. Users are added to roles to gain the
included permissions.</t>
      </section>
      <section anchor="participation-definitions">
        <name>Participation Definitions</name>
        <t><em>Target</em>: The user affected by a participation state.</t>
        <t><em>Sender</em>: The user affecting a target user with a participation state.</t>
        <t><em>Invited</em>: The target is given the choice to accept the invite (join the room)
or decline (leave the room).</t>
        <t><em>Joined</em>: The target is capable of engaging with the room.</t>
        <t><em>Left</em>: The target has either voluntarily chosen to leave the room, or has been
removed with a kick.</t>
        <t><em>Banned</em>: The target is kicked and cannot be invited, joined, or knock on the
room until unbanned.</t>
        <t><em>Knocking</em>: The sender is requesting an invite into the room. They can either
be welcomed in (invited) or declined (kicked).</t>
        <t><em>Kicked</em>: Involuntary leave. The target and sender are not the same user.</t>
      </section>
    </section>
    <section anchor="types-of-senders">
      <name>Types of Senders</name>
      <ul empty="true">
        <li>
          <t><strong>TODO</strong>: Figure out non-user permission structures. https://github.com/turt2live/ietf-mimi-policy/issues/2</t>
        </li>
      </ul>
    </section>
    <section anchor="int-permissions">
      <name>Permissions</name>
      <t>Groups of permissions are known as roles. These roles are then assigned to a
user or server as needed. Permissions cannot be assigned without being part of a
role.</t>
      <t>Roles do not currently carry aesthetic characteristics, such as a name, badge
color, or avatar.</t>
      <t>Roles, and their assignees, are persisted through the AppSync MLS extension.
Changes are proposed with MLS Proposals, and confirmed with MLS Commits. This
uses the <tt>mimiRoomPolicy</tt> <tt>applicationId</tt> defined by <xref target="I-D.ralston-mimi-protocol"/>.</t>
      <ul empty="true">
        <li>
          <t><strong>TODO</strong>: Define actual example/schema once AppSync is more reviewed by the MLS
working group. Initial indications are unclear if a diff or "irreducible" blob
is preferred.</t>
        </li>
      </ul>
      <t>A role <em>notionally</em> looks like the following:</t>
      <artwork><![CDATA[
enum {
   /* Iterated later in the document. */
} Permission;

struct {
   select (Permission) {
      /* cases defined later in the document. */
   } permission;
} PermissionValue;

struct {
   PermissionValue permissions<V>;
   IdentifierUri assignees<V>;
   int order;
} Role;
]]></artwork>
      <t><tt>IdentifierUri</tt> is as defined by <xref section="5.2" sectionFormat="of" target="I-D.ralston-mimi-protocol"/>.</t>
      <section anchor="int-calc-permissions">
        <name>Calculating Permissions</name>
        <t>An entity's permissions is the sum of the permissions described by their assigned
roles. When two roles define the same permission (but with different values),
the higher <tt>order</tt> role takes precedence.</t>
        <t>For example, if given the following role structure...</t>
        <ul spacing="normal">
          <li>
            <t>Role A, order 1.
            </t>
            <ul spacing="normal">
              <li>
                <t>Permission A = true</t>
              </li>
              <li>
                <t>Permission B = false</t>
              </li>
            </ul>
          </li>
          <li>
            <t>Role B, order 2.
            </t>
            <ul spacing="normal">
              <li>
                <t>Permission A = false</t>
              </li>
              <li>
                <t>Permission C = false</t>
              </li>
            </ul>
          </li>
          <li>
            <t>Role C, order 3.
            </t>
            <ul spacing="normal">
              <li>
                <t>Permission B = true</t>
              </li>
              <li>
                <t>Permission C = false</t>
              </li>
            </ul>
          </li>
        </ul>
        <t>... and a user assigned all three roles, the user's resolved set of permissions
would be:</t>
        <ul spacing="normal">
          <li>
            <t>Permission A = false (takes Role B's value)</t>
          </li>
          <li>
            <t>Permission B = true (takes Role C's value)</t>
          </li>
          <li>
            <t>Permission C = false (defined by Role B, no conflict with Role C)</t>
          </li>
        </ul>
        <t>These permissions are then used to define whether a user can perform the action.</t>
      </section>
      <section anchor="int-effective-power">
        <name>Effective Power Level</name>
        <t>In some cases it is required to know the "power level" for a user to solve
tiebreaks. The power level of a user is the highest <tt>order</tt> role they are
assigned with the desired permission set, regardless of value for that
permission.</t>
        <t>Using the example from <xref target="int-calc-permissions"/>, a user with all three roles
would have the following effective power levels for each permission in question:</t>
        <ul spacing="normal">
          <li>
            <t>Permission A = 2</t>
          </li>
          <li>
            <t>Permission B = 3</t>
          </li>
          <li>
            <t>Permission C = 3</t>
          </li>
        </ul>
      </section>
      <section anchor="list-of-permissions">
        <name>List of Permissions</name>
        <t>The full definitions for <tt>Permission</tt> and <tt>PermissionValue</tt> in
<xref target="int-permissions"/> is:</t>
        <artwork><![CDATA[
enum {
   // Whether other users can be added to the room by the role.
   // Default: false.
   add(1),

   // Whether other users can be kicked from the room by the role.
   // Default: false.
   kick(2),

   // Whether other users can be banned from the room by the role.
   // Default: false.
   ban(3),

   // Whether another user's events can be redacted by the role.
   // Senders can always redact their own events regardless of this permission.
   // Default: false.
   redact(4), // TODO(TR): Do we need this one?

   // The actions this role can take against roles. For example, adding or
   // removing permissions.
   // Default: None.
   roles(5),

   // Whether the assigned entities can send messages to the room.
   // Default: true.
   sendMessages(6), // TODO(TR): This likely needs breaking out.
} Permission;

struct {
   select (Permission) {
      case invite: BooleanPermission;
      case kick: BooleanPermission;
      case ban: BooleanPermission;
      case redact: BooleanPermission;
      case roles: RolePermission;
      case sendMessages: BooleanPermission;
   } permission;
} PermissionValue;

struct {
   // When false, the permission is explicitly not granted.
   byte granted;
} BooleanPermission;

struct {
   // The role IDs that can be affected by this role. This includes adding,
   // removing, and changing permissions.
   // TODO(TR): We might want something more comprehensive.
   opaque affectRoleId[];
} RolePermission;
]]></artwork>
        <ul empty="true">
          <li>
            <t><strong>TODO</strong>: Determine which permissions are needed to fulfill <xref target="I-D.ietf-mimi-content"/>.</t>
          </li>
        </ul>
      </section>
      <section anchor="role-changes">
        <name>Role Changes</name>
        <ul empty="true">
          <li>
            <t><strong>TODO</strong>: I believe we need words to describe how to use the role permissions
described above. Probably something using effective power levels and talking
about what "add", "remove", and "change" actually mean.</t>
          </li>
        </ul>
        <ul empty="true">
          <li>
            <t><strong>TODO</strong>: We also need to specify that the creator has superuser permissions
until a role is defined/assigned.</t>
          </li>
        </ul>
      </section>
    </section>
    <section anchor="int-user-participation">
      <name>User Participation</name>
      <ul empty="true">
        <li>
          <t><strong>TODO</strong>: Needs updating considering participation state changes are proposed
through AppSync now. The concepts around the rules of state changes still apply.</t>
        </li>
      </ul>
      <ul empty="true">
        <li>
          <t><strong>TODO</strong>: "Invite" likely needs swapping for "Add".</t>
        </li>
      </ul>
      <t>User participation is tracked as <tt>m.room.user</tt> state events. The <tt>content</tt> for
such an event has the following structure in TLS presentation language format
(<xref section="3" sectionFormat="of" target="RFC8446"/>):</t>
      <artwork><![CDATA[
enum {
   invite,  // "Invited" state.
   join,    // "Joined" state.
   leave,   // "Left" state (including Kicked).
   ban,     // "Banned" state.
   knock    // "Knocking" state.
} ParticipationState;

struct {
   ParticipationState participation;
   opaque reason;  // optional reason for the participation state
} MRoomUserEventContent;
]]></artwork>
      <t>A user is considered to be "joined" to a room if they have a participation state
of <tt>join</tt>. All servers with users in the joined state are considered to be "in"
the room.</t>
      <t>Servers which are in the room can send events for their users directly. The
signaling protocol is able to assist servers (and therefore users) in sending
the appropriate participation events until they are able complete the join
process.</t>
      <section anchor="general-conditions">
        <name>General Conditions</name>
        <ul empty="true">
          <li>
            <t><strong>TODO</strong>: This is where we'd put server ACLs - https://github.com/turt2live/ietf-mimi-policy/issues/3</t>
          </li>
        </ul>
      </section>
      <section anchor="invite-conditions">
        <name>Invite Conditions</name>
        <t>The target user for an invite <bcp14>MUST</bcp14>:</t>
        <ul spacing="normal">
          <li>
            <t>NOT already be in the banned state.</t>
          </li>
          <li>
            <t>NOT already be in the joined state.</t>
          </li>
        </ul>
        <t>The sender for an invite <bcp14>MUST</bcp14>:</t>
        <ul spacing="normal">
          <li>
            <t>Already be in the joined state.</t>
          </li>
          <li>
            <t>Have permission (<xref target="int-calc-permissions"/>) to invite users.</t>
          </li>
        </ul>
        <t>Otherwise, reject.</t>
      </section>
      <section anchor="join-conditions">
        <name>Join Conditions</name>
        <t>The target and sender of a join <bcp14>MUST</bcp14> be the same.</t>
        <t>Whether a user can join without invite is dependent on the join rules
(<xref target="int-join-rules"/>).</t>
        <t>If the join rule is <tt>invite</tt> or <tt>knock</tt>, the user <bcp14>MUST</bcp14> already be in the joined
or invite state.</t>
        <t>If the join rule is <tt>public</tt>, the user <bcp14>MUST NOT</bcp14> already be in the banned state.</t>
        <t>Otherwise, reject.</t>
      </section>
      <section anchor="knock-conditions">
        <name>Knock Conditions</name>
        <t>The target and sender of a knock <bcp14>MUST</bcp14> be the same.</t>
        <t>If the current join rule (<xref target="int-join-rules"/>) for the room is <tt>knock</tt>, the
user <bcp14>MUST NOT</bcp14> already be in the banned or joined state.</t>
        <t>Otherwise, reject.</t>
      </section>
      <section anchor="ban-conditions">
        <name>Ban Conditions</name>
        <t>The sender for a ban <bcp14>MUST</bcp14>:</t>
        <ul spacing="normal">
          <li>
            <t>Already be in the joined state.</t>
          </li>
          <li>
            <t>Have permission (<xref target="int-calc-permissions"/>) to ban users.</t>
          </li>
        </ul>
        <t>Otherwise, reject.</t>
        <t>Note that a ban implies kick.</t>
      </section>
      <section anchor="leave-conditions">
        <name>Leave Conditions</name>
        <t>Leaves in a room come in two varieties: voluntary and kicks. Voluntary leaves
are when the user no longer wishes to be an active participant in the room. A
kick is done to remove a user forcefully.</t>
        <t>When the target and sender of a leave is the same, it is a voluntary leave.</t>
        <section anchor="voluntary">
          <name>Voluntary</name>
          <t>The user <bcp14>MUST</bcp14> be in the invited, joined, or knocking state.</t>
          <t>Otherwise, reject.</t>
        </section>
        <section anchor="kicks">
          <name>Kicks</name>
          <t>The target user for a kick <bcp14>MUST</bcp14>:</t>
          <ul spacing="normal">
            <li>
              <t>Already be in the joined state.</t>
            </li>
          </ul>
          <t>The sender for a kick <bcp14>MUST</bcp14>:</t>
          <ul spacing="normal">
            <li>
              <t>Already be in the joined state.</t>
            </li>
            <li>
              <t>Have permission (<xref target="int-calc-permissions"/>) to kick users.</t>
            </li>
            <li>
              <t>Have a higher (and NOT equal to) effective power level with respect to the
kick permission (<xref target="int-effective-power"/>) than the target user.</t>
            </li>
          </ul>
          <t>If the target user is in the banned state, the sender requires permission to
ban users instead (as to ban means to unban as well). This additionally extends
to the effective power level check.</t>
          <t>Otherwise, reject.</t>
        </section>
      </section>
      <section anchor="int-join-rules">
        <name>Join Rules</name>
        <ul empty="true">
          <li>
            <t><strong>TODO</strong>: Convert to an AppSync-style policy flag. It will need an associated
permission.</t>
          </li>
        </ul>
        <artwork><![CDATA[
enum {
   invite,
   knock,
   public,
} JoinRule;

struct {
  // The current join rule for the room. Defaults to `invite` if no join rules
  // event is in the room.
  JoinRule rule;
} PolicyJoinRule;
]]></artwork>
      </section>
    </section>
    <section anchor="security-considerations">
      <name>Security Considerations</name>
      <ul empty="true">
        <li>
          <t><strong>TODO</strong>: Verbosely describe the security considerations throughout the doc.</t>
        </li>
      </ul>
    </section>
    <section anchor="iana-considerations">
      <name>IANA Considerations</name>
      <t>None.</t>
    </section>
  </middle>
  <back>
    <references>
      <name>References</name>
      <references anchor="sec-normative-references">
        <name>Normative References</name>
        <reference anchor="I-D.barnes-mimi-arch">
          <front>
            <title>An Architecture for More Instant Messaging Interoperability (MIMI)</title>
            <author fullname="Richard Barnes" initials="R." surname="Barnes">
              <organization>Cisco</organization>
            </author>
            <date day="4" month="March" year="2024"/>
            <abstract>
              <t>   The More Instant Messaging Interoperability (MIMI) working group is
   defining a suite of protocols that allow messaging providers to
   interoperate with one another.  This document lays out an overall
   architecture enumerating the MIMI protocols and how they work
   together to enable an overall messaging experience.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-barnes-mimi-arch-03"/>
        </reference>
        <reference anchor="I-D.ralston-mimi-protocol">
          <front>
            <title>More Instant Messaging Interoperability (MIMI) using HTTPS and MLS</title>
            <author fullname="Richard Barnes" initials="R." surname="Barnes">
              <organization>Cisco</organization>
            </author>
            <author fullname="Matthew Hodgson" initials="M." surname="Hodgson">
              <organization>The Matrix.org Foundation C.I.C.</organization>
            </author>
            <author fullname="Konrad Kohbrok" initials="K." surname="Kohbrok">
              <organization>Phoenix R&amp;D</organization>
            </author>
            <author fullname="Rohan Mahy" initials="R." surname="Mahy">
              <organization>Unaffiliated</organization>
            </author>
            <author fullname="Travis Ralston" initials="T." surname="Ralston">
              <organization>The Matrix.org Foundation C.I.C.</organization>
            </author>
            <author fullname="Raphael Robert" initials="R." surname="Robert">
              <organization>Phoenix R&amp;D</organization>
            </author>
            <date day="4" month="March" year="2024"/>
            <abstract>
              <t>   This document specifies the More Instant Messaging Interoperability
   (MIMI) transport protocol, which allows users of different messaging
   providers to interoperate in group chats (rooms), including to send
   and receive messages, share room policy, and add participants to and
   remove participants from rooms.  MIMI describes messages between
   providers, leaving most aspects of the provider-internal client-
   server communication up to the provider.  MIMI integrates the
   Messaging Layer Security (MLS) protocol to provide end-to-end
   security assurances, including authentication of protocol
   participants, confidentiality of messages exchanged within a room,
   and agreement on the state of the room.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ralston-mimi-protocol-02"/>
        </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>
        <reference anchor="I-D.ralston-mimi-terminology">
          <front>
            <title>MIMI Terminology</title>
            <author fullname="Travis Ralston" initials="T." surname="Ralston">
              <organization>The Matrix.org Foundation C.I.C.</organization>
            </author>
            <date day="23" month="October" year="2023"/>
            <abstract>
              <t>   This document introduces a set of terminology to use when discussing
   or describing concepts within MIMI.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ralston-mimi-terminology-03"/>
        </reference>
      </references>
      <references anchor="sec-informative-references">
        <name>Informative References</name>
        <reference anchor="RFC8446">
          <front>
            <title>The Transport Layer Security (TLS) Protocol Version 1.3</title>
            <author fullname="E. Rescorla" initials="E." surname="Rescorla"/>
            <date month="August" year="2018"/>
            <abstract>
              <t>This document specifies version 1.3 of the Transport Layer Security (TLS) protocol. TLS allows client/server applications to communicate over the Internet in a way that is designed to prevent eavesdropping, tampering, and message forgery.</t>
              <t>This document updates RFCs 5705 and 6066, and obsoletes RFCs 5077, 5246, and 6961. This document also specifies new requirements for TLS 1.2 implementations.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8446"/>
          <seriesInfo name="DOI" value="10.17487/RFC8446"/>
        </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>Unaffiliated</organization>
            </author>
            <date day="4" month="March" 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-02"/>
        </reference>
      </references>
    </references>
  </back>
  <!-- ##markdown-source:
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
w7fDnW2k2cdP2yeo79T/AqaN6+y9MwAA

-->

</rfc>
