<?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.38 (Ruby 3.4.4) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-mahy-cbor-edn-for-tls-00" category="info" consensus="true" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.33.0 -->
  <front>
    <title abbrev="EDN for TLS Presentation Language">Extended Diagnostic Notation (EDN) Use with Transport Layer Security (TLS) Presentation Language (PL) Objects</title>
    <seriesInfo name="Internet-Draft" value="draft-mahy-cbor-edn-for-tls-00"/>
    <author fullname="Rohan Mahy">
      <organization/>
      <address>
        <email>rohan.ietf@gmail.com</email>
      </address>
    </author>
    <date year="2026" month="May" day="05"/>
    <keyword>TLS PL</keyword>
    <keyword>TLS Presentation Language</keyword>
    <abstract>
      <?line 36?>

<t>Extended Diagnostic Notation was designed as a superset of JSON to represent CBOR instance documents in human-readable format.
This document describes how it can be used to represent instances encoded using the TLS Presentation Language.</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/cbor-edn-for-tls/draft-mahy-cbor-edn-for-tls.html"/>.
        Status information for this document may be found at <eref target="https://datatracker.ietf.org/doc/draft-mahy-cbor-edn-for-tls/"/>.
      </t>
      <t>Source for this draft and an issue tracker can be found at
        <eref target="https://github.com/rohanmahy/cbor-edn-for-tls"/>.</t>
    </note>
  </front>
  <middle>
    <?line 42?>

<section anchor="introduction">
      <name>Introduction</name>
      <t>Extended Diagnostic Notation (EDN) <xref target="I-D.ietf-cbor-edn-literals"/> is a text format, that was originally described to represent CBOR messages as diagnostic notation in <xref target="RFC7094"/> and then expanded in <xref target="RFC8949"/>.
It is a superset of JSON (all valid JSON is valid EDN) that can natively represent binary content, non-finite floating point values, and additional data types (tags and simple values).
Since then it has been used to represent YAML messages, especially those that contain binary content or tags.</t>
      <t>This document defines a convention to represent instances of binary sequences--encoded using the TLS Presentation Language (TLS PL) defined in <xref section="3" sectionFormat="of" target="RFC8446"/>--using EDN.
TLS encoding is used in several other protocols, for example in the Messaging Layer Security (MLS) protocol <xref target="RFC9420"/> and the MIMI protocol <xref target="I-D.ietf-mimi-protocol"/>.</t>
      <t>TLS PL has a very limited set of patterns.
It deals primarily with structs and enums.
As a result, it is relatively straightforward to represent TLS encoded data if the TLS PL definitions are available.</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="representation-of-tls-pl-in-edn">
      <name>Representation of TLS PL in EDN</name>
      <t>EDN Representations of TLS-encoded instance data always start with the following comment line: <tt># ~~~ tls </tt> followed by the struct name, and end with the following comment line: <tt># ~~~</tt>.
This allows a processor that knows TLS to convert an EDN document back into TLS-encoded binary data.</t>
      <t>Instances of TLS-encoded structs are represented in EDN as maps with the keys equal to the names of the members.</t>
      <t>If an enum appears that contains only the values <tt>false (0)</tt> and <tt>true (1)</tt>, its values are represented in EDN as the simple values <tt>false</tt> and <tt>true</tt>.</t>
      <t>Instances of other TLS-encoded enums are represented as their decimal integer values with an EDN end-of-line comment naming the enum name and the item name.</t>
      <t>Instances of the following predefined TLS numeric types: uint16, uint32, uint64, plus any variable-length integers (widely used, for example in MLS <xref section="2.1.2" sectionFormat="of" target="RFC9420"/>) are represented as unsigned decimal integers in EDN.
Likewise a single instance of uint8 is represented as an unsigned decimal integer in EDN.</t>
      <t>Vectors of uint8 (or the <tt>opaque</tt> type) are represented by single quoted strings in EDN.
Likewise fixed-length arrays of uint8 are represented by single quoted strings in EDN.
By default, they are presented as hex-encoded single-quoted strings.
If such sequences consist primarily of printable characters</t>
      <t>Vectors of any other type are represented by an array of that type.</t>
      <t>For example given the FooBar struct defined below:</t>
      <sourcecode type="tls"><![CDATA[
enum {
  false(0),
  true(1),
  (255)
} Bool;

enum {
  red(1),
  yellow(2),
  green(3)
  (255)
} Color;

struct {
  uint16 id;
  uint8[16] nonce;
  Bool active;
  Color traffic_light_color;
  uint32 divisible_by<V>;
  opaque reason;
} FooBar;
]]></sourcecode>
      <t>an instance of that struct could be represented as follows in EDN:</t>
      <sourcecode type="cbor-diag"><![CDATA[
# ~~~ tls FooBar
{
  "id": 16798,
  "nonce": h'f6bafb33a535d1fd05bef225d2ac8f35',
  "active": true,
  "traffic_light_color": 3,   # Color green
  "divisible_by": [3, 5, 11],
  "reason": 'server down'
}
# ~~~
]]></sourcecode>
      <section anchor="representation-of-variants">
        <name>Representation of Variants</name>
        <t>The <tt>optional</tt> keyword (<xref section="2.1.1" sectionFormat="of" target="RFC9420"/>) is represented as a struct.
For example given the following structs:</t>
        <sourcecode type="tls"><![CDATA[
struct {
  uint16 component_id;
  opaque data;
} Component;

struct {
  uint64 epoch;
  optional<Component> component;
} Foo;
]]></sourcecode>
        <t>An instance of Foo which has an optional Component would be represented by the following snippet of EDN:</t>
        <artwork><![CDATA[
{
  "epoch": 42,
  "component": {
    "present": true,
    "value": {
      "component_id": 0xBABA,
      "data": h''
    }
  }
}
]]></artwork>
        <t>When absent it would be represented as:</t>
        <sourcecode type="cbor-diag"><![CDATA[
{
  "epoch": 42,
  "component": {
    "present": false
  }
}
]]></sourcecode>
        <t>In general, the presence of a <tt>select</tt> construction in TLS PL indicates the conditional presence of additional values in the struct.
For example, the struct below:</t>
        <sourcecode type="tls"><![CDATA[
{
  LeafNodeSource leaf_node_source;
  select (LeafNode.leaf_node_source) {
    case key_package:
      Lifetime lifetime;
    case update:
      struct{};
    case commit:
      opaque parent_hash<V>;
    };
  Extension extensions<V>;
} PartialLeafNode;
~~

would be represented as follows in EDN:

~~~ cbor-diag
{
  "leaf_node_source": 1, # enum LeafNodeSource.key_package
  "lifetime": {
    "not_before": 1777979674, # 05-May-2026T13:14:34Z
    "not_after":  1780312474  # 05-Jun-2026T13:14:34Z
  },
  "extensions": []
}
]]></sourcecode>
        <t>The notation <tt>struct {}</tt> in TLS PL refers to the absense of a value.
It is ignored in the representation of an EDN instance.</t>
      </section>
    </section>
    <section anchor="examples">
      <name>Examples</name>
      <section anchor="mls-leafnode">
        <name>MLS LeafNode</name>
        <t>The following detailed example represents the LeafNode struct from <xref section="7.2" sectionFormat="of" target="RFC9420"/> and embedded structs.
It includes additional types from <xref target="I-D.ietf-mls-extensions"/>, <xref target="I-D.ietf-mimi-room-policy"/>, and <xref target="I-D.mahy-mls-sd-cwt-credential"/>.</t>
        <t>Given the following TLS structures:</t>
        <sourcecode type="tls"><![CDATA[
struct {
    HPKEPublicKey encryption_key;
    SignaturePublicKey signature_key;
    Credential credential;
    Capabilities capabilities;
    LeafNodeSource leaf_node_source;
    select (LeafNode.leaf_node_source) {
        case key_package:
            Lifetime lifetime;
        case update:
            struct{};
        case commit:
            opaque parent_hash<V>;
    };
    Extension extensions<V>;
    /* SignWithLabel(., "LeafNodeTBS", LeafNodeTBS) */
    opaque signature<V>;
} LeafNode;

enum {
    reserved(0),
    key_package(1),
    update(2),
    commit(3),
    (255)
} LeafNodeSource;

struct {
    ProtocolVersion versions<V>;
    CipherSuite cipher_suites<V>;
    ExtensionType extensions<V>;
    ProposalType proposals<V>;
    CredentialType credentials<V>;
} Capabilities;

struct {
    uint64 not_before;
    uint64 not_after;
} Lifetime;


struct {
    ExtensionType extension_type;
    opaque extension_data<V>;
} Extension;

struct {
  CredentialType credential_type;
  select (Credential.credential_type) {
...
    case sd_jwt:
      SdJwt sd_jwt;
    };
} Credential;

struct {
    Bool compacted;
    select (compacted) {
        case true:
            opaque protected<V>;
            opaque payload<V>;
            opaque signature<V>;
            SdJwtDisclosure disclosures<V>;
            opaque sd_jwt_key_binding<V>;
        case false:
            opaque sd_jwt_kb<V>;
    };
} SdJwt;

enum {
  false(0),
  true(1)
} Bool;

struct {
    ComponentID component_id;
    opaque data<V>;
} ComponentData;

struct {
    ComponentData component_data<V>;
} AppDataDictionary;
AppDataDictionary app_data_dictionary;

opaque HPKEPublicKey<V>;
opaque SignaturePublicKey<V>;

/* See the "Messaging Layer Security (MLS)" IANA registries for values */
uint16 CipherSuite;
uint16 ExtensionType;
uint16 ProposalType;
uint16 CredentialType;
uint16 ComponentID;
]]></sourcecode>
        <t>below is an example instance represented in EDN:</t>
        <sourcecode type="cbor-diag"><![CDATA[
# ~~~ tls LeafNode
{
  "encryption_key": h'41542cd14e930f0d6db59743e2a27974
                      4d774ddc9d53679e78741787be96e832',
  "signature_key":  h'2d13ead305b4fbae97a9677a7fc04d2a
                      1778ef843121f8ffdb46c7389578768d',
  "credential": {
    "credential_type": 0x0006,  # JWT Credential Type
    "compacted": true,
    "protected": '{
      "alg": "ES256",
      "kid": "https://provider.example/jwk"
    }',
    "payload": '{
      "iss": "https://provider.example",
      "sub": "mimi://provider.example/u/alice",
      "aud": "mimi://hub.example/r/clubhouse",
      "exp": 1780312474,
      "cnf": {"jkt": "kPrK_qmxVWaYVA9wwBF6Iuo3vVzz7TxHCTwXBygrS4k"}
    }',
    "signature": h''
    "disclosures": [],
    "sd_jwt_key_binding": h'cac12ac8b387035dbdbeeed8b085d0f1
                            79f12cb1fa81218432268de12365c86c'
  },
  "capabilities": {
    "versions": [1], # ProtocolVersion mls10
    "cipher_suites": [1, 2, 3, 7],
    "extensions": [
      0x0006,   # app_data_dictionary
      0x0007,   # supported_wire_formats
      0x0008    # required_wire_formats
    ],
    "proposals": [0x0008, 0x0009, 0x000A],
    credentials: [0x0006]
  },
  "leaf_node_source": 1, # enum LeafNodeSource.key_package
  "lifetime": {
    "not_before": 1777979674, # 05-May-2026T13:14:34Z
    "not_after":  1780312474  # 05-Jun-2026T13:14:34Z
  },
  "extensions": [
    {
      "extension_type": 0x0006,  # app_data_dictionary extension
      "extension_data": [
        {
          "component_id": 0x0001, # app_components extension
          "data": [
            0x0022,   # participant_list component
            0x0024,   # mls_operational_policy component
            0x0025,   # roles-list component
            0x0027    # base_room_policy component
          ]
        },
        {
          "component_id": 0x0003, # content_media_types extension
          "data": ["application/mimi-content"]
        }
      ]
    },
    {
      "extension_type": 0xBABA.  # GREASE extension
      "extension_data": h''
    },
    {
      "extension_type": 0xDADA.  # GREASE extension
      "extension_data": h''
    }
  ],
  "signature": h'88ad994cabf15c4e90d0a4af214b1d75
                 7aecef23efffbd9d8e468866cccebac4'
}
]]></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-combined-references">
      <name>References</name>
      <references anchor="sec-normative-references">
        <name>Normative References</name>
        <reference anchor="I-D.ietf-cbor-edn-literals">
          <front>
            <title>CBOR Extended Diagnostic Notation (EDN)</title>
            <author fullname="Carsten Bormann" initials="C." surname="Bormann">
              <organization>Universität Bremen TZI</organization>
            </author>
            <date day="29" month="April" year="2026"/>
            <abstract>
              <t>   This document formalizes and consolidates the definition of the
   Extended Diagnostic Notation (EDN) of the Concise Binary Object
   Representation (CBOR), addressing implementer experience.

   Replacing EDN's previous informal descriptions, it updates RFC 8949,
   obsoleting its Section 8, and RFC 8610, obsoleting its Appendix G.

   It also specifies registry-based extension points and uses them to
   support text representations such as of epoch-based dates/times and
   of IP addresses and prefixes.


   // (This cref will be removed by the RFC editor:) The present -23 is
   // intended as reference material during the 2026-04-29 CBOR interim,
   // a complete specification that reacts to discussion on previous
   // draft revisions and that can be used to confirm the results in a
   // WGLC.  Among other concerns, the discussion revealed that some
   // additional editorial content was required; the attempt was to
   // address this need without making technical changes.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-cbor-edn-literals-23"/>
        </reference>
        <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="RFC2119" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.2119.xml">
          <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" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8174.xml">
          <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>
      <references anchor="sec-informative-references">
        <name>Informative References</name>
        <reference anchor="RFC7094">
          <front>
            <title>Architectural Considerations of IP Anycast</title>
            <author fullname="D. McPherson" initials="D." surname="McPherson"/>
            <author fullname="D. Oran" initials="D." surname="Oran"/>
            <author fullname="D. Thaler" initials="D." surname="Thaler"/>
            <author fullname="E. Osterweil" initials="E." surname="Osterweil"/>
            <date month="January" year="2014"/>
            <abstract>
              <t>This memo discusses architectural implications of IP anycast and provides some historical analysis of anycast use by various IETF protocols.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7094"/>
          <seriesInfo name="DOI" value="10.17487/RFC7094"/>
        </reference>
        <reference anchor="RFC8949" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8949.xml">
          <front>
            <title>Concise Binary Object Representation (CBOR)</title>
            <author fullname="C. Bormann" initials="C." surname="Bormann"/>
            <author fullname="P. Hoffman" initials="P." surname="Hoffman"/>
            <date month="December" year="2020"/>
            <abstract>
              <t>The Concise Binary Object Representation (CBOR) is a data format whose design goals include the possibility of extremely small code size, fairly small message size, and extensibility without the need for version negotiation. These design goals make it different from earlier binary serializations such as ASN.1 and MessagePack.</t>
              <t>This document obsoletes RFC 7049, providing editorial improvements, new details, and errata fixes while keeping full compatibility with the interchange format of RFC 7049. It does not create a new version of the format.</t>
            </abstract>
          </front>
          <seriesInfo name="STD" value="94"/>
          <seriesInfo name="RFC" value="8949"/>
          <seriesInfo name="DOI" value="10.17487/RFC8949"/>
        </reference>
        <reference anchor="RFC9420" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.9420.xml">
          <front>
            <title>The Messaging Layer Security (MLS) Protocol</title>
            <author fullname="R. Barnes" initials="R." surname="Barnes"/>
            <author fullname="B. Beurdouche" initials="B." surname="Beurdouche"/>
            <author fullname="R. Robert" initials="R." surname="Robert"/>
            <author fullname="J. Millican" initials="J." surname="Millican"/>
            <author fullname="E. Omara" initials="E." surname="Omara"/>
            <author fullname="K. Cohn-Gordon" initials="K." surname="Cohn-Gordon"/>
            <date month="July" year="2023"/>
            <abstract>
              <t>Messaging applications are increasingly making use of end-to-end security mechanisms to ensure that messages are only accessible to the communicating endpoints, and not to any servers involved in delivering messages. Establishing keys to provide such protections is challenging for group chat settings, in which more than two clients need to agree on a key but may not be online at the same time. In this document, we specify a key establishment protocol that provides efficient asynchronous group key establishment with forward secrecy (FS) and post-compromise security (PCS) for groups in size ranging from two to thousands.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9420"/>
          <seriesInfo name="DOI" value="10.17487/RFC9420"/>
        </reference>
        <reference anchor="I-D.ietf-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>Rohan Mahy Consulting Services</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="25" month="April" year="2026"/>
            <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-ietf-mimi-protocol-06"/>
        </reference>
        <reference anchor="I-D.ietf-mls-extensions">
          <front>
            <title>The Messaging Layer Security (MLS) Extensions</title>
            <author fullname="Raphael Robert" initials="R." surname="Robert">
              <organization>Phoenix R&amp;D</organization>
            </author>
            <date day="2" month="March" year="2026"/>
            <abstract>
              <t>   The Messaging Layer Security (MLS) protocol is an asynchronous group
   authenticated key exchange protocol.  MLS provides a number of
   capabilities to applications, as well as several extension points
   internal to the protocol.  This document provides a consolidated
   application API, guidance for how the protocol's extension points
   should be used, and a few concrete examples of both core protocol
   extensions and uses of the application API.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-mls-extensions-09"/>
        </reference>
        <reference anchor="I-D.ietf-mimi-room-policy">
          <front>
            <title>Room Policy for the More Instant Messaging Interoperability (MIMI) Protocol</title>
            <author fullname="Rohan Mahy" initials="R." surname="Mahy">
              <organization>Rohan Mahy Consulting Services</organization>
            </author>
            <date day="18" month="December" year="2025"/>
            <abstract>
              <t>   This document describes a set of concrete room policies for the More
   Instant Messaging Interoperability (MIMI) Working Group.  It
   describes several independent properties and policy attributes which
   can be combined to model a wide range of chat and multimedia
   conference types.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-mimi-room-policy-03"/>
        </reference>
        <reference anchor="I-D.mahy-mls-sd-cwt-credential">
          <front>
            <title>Messaging Layer Security Credentials using Selective Disclosure JSON and CBOR Web Tokens</title>
            <author fullname="Rohan Mahy" initials="R." surname="Mahy">
              <organization>Rohan Mahy Consulting Services</organization>
            </author>
            <date day="20" month="October" year="2025"/>
            <abstract>
              <t>   The Messaging Layer Security (MLS) protocol contains Credentials used
   to authenticate an MLS client with a signature key pair.  Selective
   Disclosure CBOR Web Tokens (SD-CWT) and Selective Disclosure JSON Web
   Tokens (SD-JWT) define token formats where the holder can selectively
   reveal claims about itself with strong integrity protection and
   cryptographic binding to the holder's key.  This document defines MLS
   credentials for both these token types.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-mahy-mls-sd-cwt-credential-01"/>
        </reference>
      </references>
    </references>
    <?line 413?>

<section numbered="false" anchor="acknowledgments">
      <name>Acknowledgments</name>
      <t>TODO acknowledge.</t>
    </section>
  </back>
  <!-- ##markdown-source:
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
1v5myaq6NGhUWKkDUr4Ejp8y7DKKvFMXcFpn6eLGF/Uisut1bftaJw7DRT0K
fc9Z4XtcVcvIC27UIFjdWSZ1B0v7ACErr4A+7DhwcEuUqSn4vvvcIeTH65/P
rlMblvwZCklgkXglOX8KoFSpcwubRVFHISayoULqJDeIFLbpVzSitudDeLDI
LD2o119BMn+BZt6imjcJ5xXS2UU9r9DP15HQGzSELw+/lQH/BO3hOQVO3m/U
iJl5fXd8a9ZI6emAfHtolFbNN0bTWsFnRQmMRbAsnJgum0k5Vro6JjoMuj4m
2lUokdVjViVXN69alxByra8pPwIpoL9P6m/h7YkXQedwm+IVtyM/TwU+FBJ5
sO6wu9gRMFgjCgX15ftIP5RWyMEoBQpsZsx/UgFk1X5dWRX0e7Q5LPlVRjoH
04aOVxyYIksclfeueIXFi7Yun1017VWvcrVZwhSSjQ0pzBj87ipHs2DTz8sc
zbfsp2Wix3L4rksrbwZLdj9YEGGTyKppmw9vpSmWeLsTCLDDcUq+lVsZtvJD
+urraiqUBaRnp55w/FDAe+jBso/iVWUyDMh2UxvrsGBWkZSeyHJvpyvZbLvM
BGtlRzkzd/SyRQtbiXVejk9Ot5qGStuQgTyTOZWtxCvK8GVJXWn+OIrw5akn
D0gaA+lvDeGtnZwzZSUxQxtTOWekVv1i+3iRbw0kQi6/pyLm21+lmGQyvhwD
q808vN3AszfM79mAH3VzVeKao2yskpz5aJlS8sFqyhXDxU7onkoW0vK7waB0
L6abrO2LyDf68by8Ua1H5WyWzY3V6lpth7UsPuw03SbrMbs77Fsd3qZtqBGt
ChiLfxbr9y3GnCHrdqDD5/1B34L6sG/zYY8POm3VwlcOeSwh53tt1upwyjrQ
81uuTfmwT6EO7dO+6zQt1qavrAcV64C7Awvqz5Y7cF1mWz2n3xkMu7Bob8DU
egU9FYXvBmXJPq/ZbPZqWMT+9OmuXHbgtuhZGdtUW8icUfDqIO8jqT8z8dci
t+1uz8z7x0fZVOY/RYCpTx7jcUNv6OHn5aOpMnkv067oqKLbE+ItLcVyIrVR
EIvAXaulhxRSoyRPU1aSx99GZKLxIRSk9jxMRUmcP0eycchagPyFE7gYbPPz
Izas5uN1/PP0y+L54yf668fxcLk8ft+bpGHn6ePvv/fvnn88uVv+83g1i2+t
R3NddT9HS6nrNkvMKjuJTHaLTeUkhzotvESyO4N+s9NlNrM552xgNwdd1nRb
r6BL/esP3VbbsVsuHQDKAGvtNiCLt9qdXtcZ9Jy9vLspV6AF0rLSBO1s3WNn
tVm8QPXdamqAlUsVOaNG2jW8zOpnPlZ7KG16Dl78rdA2W5al+kpKpBH+HIqz
6dKDTFS/fxBlwQGRgjH/koLEDrn7Av6qNkKD1NSaUjHUf8datFQkZaK9+zx+
/z+drVT2UiRJuTSrUs2OzSrqtW0F+vbptxyxLyXsbt9cwTIygrhK/lJsLaBS
alN1BoR2WyEmwpsMACgF/T5e5+cat6dYagogexpGPKaqgZ2qDvStiV01MQ6h
G6//2Sp9hVAbiqQpdrhv6b/PP69rXx+9DkZP//RkuuBwjE5VE/5mCE2It49X
avD+UPbfWoVZssIo26VtegsyeAvZQHc/3JyNb8++AiX5HeWfKz8dn/6vyg1N
BBtEPRhQNhxaDrXdVteBOqLJmtSibrtl2S3W725zbp9yh7vtDndd12ZDNuBW
bzDo9RzH4TZ1rL3suuhdUaad4DdLTAMMr9+vTq/yt/JqR1ZwW2KVX1XglXQQ
Kkkqs1Bkvz3DL7RRy9jB7799zmbyJ3LGy0j9vJKzv5myuIZTSy1Oc0neMP4L
4RjvhK4qAAA=

-->

</rfc>
