<?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.4 (Ruby 3.2.2) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-steele-spice-cryptovolense-00" category="info" consensus="true" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.19.0 -->
  <front>
    <title abbrev="cryptovolense">Cryptovolense</title>
    <seriesInfo name="Internet-Draft" value="draft-steele-spice-cryptovolense-00"/>
    <author fullname="Orie Steele">
      <organization>Transmute</organization>
      <address>
        <email>orie@transmute.industries</email>
      </address>
    </author>
    <date year="2024" month="January" day="02"/>
    <area>Security</area>
    <workgroup>Secure Patterns for Internet CrEdentials</workgroup>
    <keyword>fountain codes</keyword>
    <keyword>animated qr codes</keyword>
    <keyword>digital presentations</keyword>
    <keyword>hpke</keyword>
    <abstract>
      <?line 49?>

<t>Digital presentations enable a holder of digital credentials to present proofs to a verifier.
Using QR Codes for digital presentations introduces challenges regarding maximum transmission size, error correction and confidentiality.
This document describes a generic optical transmission protocol suitable for digital credential presentations.</t>
    </abstract>
    <note removeInRFC="true">
      <name>About This Document</name>
      <t>
        The latest revision of this draft can be found at <eref target="https://OR13.github.io/draft-steele-spice-cryptovolense/draft-steele-spice-cryptovolense.html"/>.
        Status information for this document may be found at <eref target="https://datatracker.ietf.org/doc/draft-steele-spice-cryptovolense/"/>.
      </t>
      <t>
        Discussion of this document takes place on the
        Secure Patterns for Internet CrEdentials Working Group mailing list (<eref target="mailto:spice@ietf.org"/>),
        which is archived at <eref target="https://mailarchive.ietf.org/arch/browse/spice/"/>.
        Subscribe at <eref target="https://www.ietf.org/mailman/listinfo/spice/"/>.
      </t>
      <t>Source for this draft and an issue tracker can be found at
        <eref target="https://github.com/OR13/draft-steele-spice-cryptovolense"/>.</t>
    </note>
  </front>
  <middle>
    <?line 55?>

<section anchor="introduction">
      <name>Introduction</name>
      <t>The data density limitations of a single QR Code can be overcome through the use of animated QR Codes, where each frame of the animation is a valid QR Code.</t>
      <t>Because QR Codes were originally developed to support transmission of text, not binary, it is desirable to apply specific base encoding, compression and forward error correction, to provide a generic binary content transmission capability through animated qr codes.</t>
      <t><xref target="RFC6330"/> describes a fully specified error correction scheme, <xref target="RFC9285"/> describes an optimal base encoding for QR Codes, and <xref target="RFC2397"/> describes a content identifier scheme suitable for encoding binary data of a known content type.</t>
      <t>This document describes how to use these ingredients to transmit arbitrary content of a known type from a sender to a receiver through the presentation of an animated QR Code by the sender to the receiver.</t>
      <artset>
        <artwork type="svg"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="560" width="432" viewBox="0 0 432 560" class="diagram" text-anchor="middle" font-family="monospace" font-size="13px" stroke-linecap="round">
            <path d="M 184,64 L 184,104" fill="none" stroke="black"/>
            <path d="M 184,144 L 184,184" fill="none" stroke="black"/>
            <path d="M 184,224 L 184,264" fill="none" stroke="black"/>
            <path d="M 184,304 L 184,344" fill="none" stroke="black"/>
            <path d="M 184,384 L 184,424" fill="none" stroke="black"/>
            <path d="M 184,464 L 184,504" fill="none" stroke="black"/>
            <path d="M 152,32 L 224,32" fill="none" stroke="black"/>
            <path d="M 80,48 L 96,48" fill="none" stroke="black"/>
            <path d="M 152,64 L 224,64" fill="none" stroke="black"/>
            <path d="M 144,112 L 248,112" fill="none" stroke="black"/>
            <path d="M 128,144 L 232,144" fill="none" stroke="black"/>
            <path d="M 152,192 L 224,192" fill="none" stroke="black"/>
            <path d="M 152,224 L 224,224" fill="none" stroke="black"/>
            <path d="M 144,272 L 280,272" fill="none" stroke="black"/>
            <path d="M 128,304 L 264,304" fill="none" stroke="black"/>
            <path d="M 144,352 L 256,352" fill="none" stroke="black"/>
            <path d="M 128,384 L 240,384" fill="none" stroke="black"/>
            <path d="M 144,432 L 232,432" fill="none" stroke="black"/>
            <path d="M 128,464 L 216,464" fill="none" stroke="black"/>
            <path d="M 152,512 L 288,512" fill="none" stroke="black"/>
            <path d="M 328,528 L 344,528" fill="none" stroke="black"/>
            <path d="M 152,544 L 288,544" fill="none" stroke="black"/>
            <path d="M 128,144 L 144,112" fill="none" stroke="black"/>
            <path d="M 128,304 L 144,272" fill="none" stroke="black"/>
            <path d="M 232,144 L 248,112" fill="none" stroke="black"/>
            <path d="M 128,384 L 144,352" fill="none" stroke="black"/>
            <path d="M 128,464 L 144,432" fill="none" stroke="black"/>
            <path d="M 264,304 L 280,272" fill="none" stroke="black"/>
            <path d="M 240,384 L 256,352" fill="none" stroke="black"/>
            <path d="M 216,464 L 232,432" fill="none" stroke="black"/>
            <path d="M 152,32 C 143.16936,32 136,39.16936 136,48" fill="none" stroke="black"/>
            <path d="M 224,32 C 232.83064,32 240,39.16936 240,48" fill="none" stroke="black"/>
            <path d="M 152,64 C 143.16936,64 136,56.83064 136,48" fill="none" stroke="black"/>
            <path d="M 224,64 C 232.83064,64 240,56.83064 240,48" fill="none" stroke="black"/>
            <path d="M 152,192 C 143.16936,192 136,199.16936 136,208" fill="none" stroke="black"/>
            <path d="M 224,192 C 232.83064,192 240,199.16936 240,208" fill="none" stroke="black"/>
            <path d="M 152,224 C 143.16936,224 136,216.83064 136,208" fill="none" stroke="black"/>
            <path d="M 224,224 C 232.83064,224 240,216.83064 240,208" fill="none" stroke="black"/>
            <path d="M 152,512 C 143.16936,512 136,519.16936 136,528" fill="none" stroke="black"/>
            <path d="M 288,512 C 296.83064,512 304,519.16936 304,528" fill="none" stroke="black"/>
            <path d="M 152,544 C 143.16936,544 136,536.83064 136,528" fill="none" stroke="black"/>
            <path d="M 288,544 C 296.83064,544 304,536.83064 304,528" fill="none" stroke="black"/>
            <polygon class="arrowhead" points="352,528 340,522.4 340,533.6" fill="black" transform="rotate(0,344,528)"/>
            <polygon class="arrowhead" points="192,504 180,498.4 180,509.6" fill="black" transform="rotate(90,184,504)"/>
            <polygon class="arrowhead" points="192,424 180,418.4 180,429.6" fill="black" transform="rotate(90,184,424)"/>
            <polygon class="arrowhead" points="192,344 180,338.4 180,349.6" fill="black" transform="rotate(90,184,344)"/>
            <polygon class="arrowhead" points="192,264 180,258.4 180,269.6" fill="black" transform="rotate(90,184,264)"/>
            <polygon class="arrowhead" points="192,184 180,178.4 180,189.6" fill="black" transform="rotate(90,184,184)"/>
            <polygon class="arrowhead" points="192,104 180,98.4 180,109.6" fill="black" transform="rotate(90,184,104)"/>
            <polygon class="arrowhead" points="104,48 92,42.4 92,53.6" fill="black" transform="rotate(0,96,48)"/>
            <g class="text">
              <text x="28" y="52">holder</text>
              <text x="184" y="52">Content</text>
              <text x="188" y="132">Encryption</text>
              <text x="172" y="212">Data</text>
              <text x="208" y="212">URL</text>
              <text x="180" y="292">Fountain</text>
              <text x="240" y="292">Codes</text>
              <text x="192" y="372">Compression</text>
              <text x="172" y="452">Base45</text>
              <text x="188" y="532">Animated</text>
              <text x="236" y="532">QR</text>
              <text x="268" y="532">Code</text>
              <text x="396" y="532">verifier</text>
            </g>
          </svg>
        </artwork>
        <artwork type="ascii-art"><![CDATA[
                 .----------.
holder   -->    |  Content   |
                 '----+-----'
                      |
                      v
                 .----+-------.
                / Encryption /
               '------+-----'
                      |
                      v
                 .----+-----.
                |  Data URL  |
                 '----+-----'
                      |
                      v
                 .----+-----------.
                / Fountain Codes /
               '------+---------'
                      |
                      v
                 .----+--------.
                / Compression /
               '------+------'
                      |
                      v
                 .----+-----.
                / Base45   /
               '------+---'
                      |
                      v
                 .----+-------------.
                |  Animated QR Code  |  -->  verifier
                 '------------------'
]]></artwork>
      </artset>
    </section>
    <section anchor="terminology">
      <name>Terminology</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?>

<dl>
        <dt><tt>message</tt>:</dt>
        <dd>
          <t>The data (bytes / octets) to be transmitted.</t>
        </dd>
        <dt><tt>message data url</tt>:</dt>
        <dd>
          <t>The <tt>message</tt> encoded as a data URL, including its content type.</t>
        </dd>
        <dt><tt>transmission configuration</tt>:</dt>
        <dd>
          <t>The raptor q details necessary to recover the <tt>message data url</tt> from a series of raptor q packets.</t>
        </dd>
        <dt><tt>transmission packets</tt>:</dt>
        <dd>
          <t>The raptor q packets produced from the <tt>message data url</tt> interpretted as bytes.</t>
        </dd>
        <dt><tt>compressed transmission packets</tt>:</dt>
        <dd>
          <t>The <tt>transmission packets</tt> compressed by a protocol parameter "compression algorithm".</t>
        </dd>
        <dt><tt>base encoded transmission configuration</tt>:</dt>
        <dd>
          <t>The base45 encoded <tt>transmission configuration</tt> (without compression).</t>
        </dd>
        <dt><tt>base encoded transmission packets</tt>:</dt>
        <dd>
          <t>The base45 encoded <tt>compressed transmission packets</tt>.</t>
        </dd>
        <dt><tt>qr encoded transmission configuration</tt>:</dt>
        <dd>
          <t>The <tt>base encoded transmission configuration</tt> expressed as an image, for example <tt>image/svg+xml</tt> or <tt>image/jpeg</tt>.</t>
        </dd>
        <dt><tt>qr encoded transmission packets</tt>:</dt>
        <dd>
          <t>The <tt>base encoded transmission packets</tt> expressed as images, for example <tt>image/svg+xml</tt> or <tt>image/jpeg</tt>.</t>
        </dd>
        <dt><tt>transmission images</tt>:</dt>
        <dd>
          <t>The unordered set of images composed of <tt>qr encoded transmission configuration</tt> and <tt>qr encoded transmission packets</tt>.</t>
        </dd>
        <dt><tt>animated transmission image</tt>:</dt>
        <dd>
          <t>An animated image, constructed from a frame and duration for each of the <tt>transmission images</tt>, represented for example as <tt>image/gif</tt>, or <tt>image/webp</tt>.</t>
        </dd>
      </dl>
    </section>
    <section anchor="usage">
      <name>Usage</name>
      <t>Although this document describes a generic data transmission capability, the primary motivating use case for developing this approach is transmission of large encrypted credential presentations, post quantum capable public keys, and hybrid public keys.</t>
      <t>Large binary data can quickly exceed the limitations of single QR Code presentations, motivating a need for animated qr codes and forward error correction capabilities.</t>
    </section>
    <section anchor="transmission">
      <name>Transmission</name>
      <t>The sender <bcp14>MUST</bcp14> prepare their <tt>message</tt> for transmission by first encoding their data as a <tt>message data url</tt> according to the process described in <xref target="RFC2397"/>.</t>
      <t>Next, the <tt>message data url</tt> <bcp14>MUST</bcp14> be converted to bytes, and the Raptor Q encoding algorithm described in <xref target="RFC6330"/> must be applied.</t>
      <t>The result is <tt>transmission configuration</tt> as bytes, and <tt>transmission packets</tt> as bytes.</t>
      <t>Edtiors note: We might need to define a content type for <tt>transmission configuration</tt>, ending in <tt>+json</tt> or <tt>+cbor</tt>.</t>
      <t>In cases where this protocol is used with static <tt>transmission configuration</tt>, those details may be hard coded or discovered through some reliable out of band mechansism.</t>
      <t>Editors note: We may want to define fountain code agility, such that coding schemes other than RaptorQ can be used.</t>
      <t>Next, the packet bytes produced by <xref target="RFC6330"/> are compressed using gzip as described in <xref target="RFC1952"/> or zstd as described in <xref target="RFC8878"/>.</t>
      <t>Edtior note: Need to decide if compression agility is valuable, how to signal it, or which compression scheme to require.</t>
      <t>Next, the <tt>transmission configuration</tt> and <tt>compressed transmission packets</tt> are encoded using <xref target="RFC9285"/>.</t>
      <t>Finally, the <tt>base encoded transmission configuration</tt> and <tt>base encoded transmission packets</tt> are converted to QR Codes, and each of the <tt>transmission images</tt> is used as a frame in the resulting animated QR Code.</t>
    </section>
    <section anchor="recovery">
      <name>Recovery</name>
      <t>The receiver <bcp14>MUST</bcp14> read the frames of the <tt>animated transmission image</tt>, storing each unique base45 encoded text string.</t>
      <t>Once the <tt>transmission configuration</tt> has been recovered, the recovery of the original <tt>message data url</tt> can be attempted using <xref target="RFC6330"/>.</t>
      <t>The recovery process ends when either:</t>
      <ol spacing="normal" type="1"><li>
          <t>a timeout set by the verifier is reached, a failure result indicated by a null / nil <bcp14>MUST</bcp14> be returned.</t>
        </li>
        <li>
          <t>a data url is recovered successfully, a valid Data URL <bcp14>MUST</bcp14> be returned.</t>
        </li>
      </ol>
    </section>
    <section anchor="profile-discovery">
      <name>Profile Discovery</name>
      <t>The <tt>transmission configuration</tt> <bcp14>MAY</bcp14> include additional data elements, for example the compression algorithm, or public key discovery related meta data in the case that authenticated encryption capable content types are transmitted, for example auth mode hpke as described in <xref target="I-D.draft-rha-jose-hpke-encrypt"/> or <xref target="I-D.draft-ietf-cose-hpke"/>.</t>
      <t>In the case the <tt>transmission configuration</tt> contains parameters beyond what are required by <xref target="RFC6330"/>, it should be encoded as a data url, with a content type expressing the serialization of the parameters, for example <tt>appliation/json</tt> or <tt>application/cbor</tt>.</t>
      <figure anchor="encrypted-data-uri-example">
        <name>Example Encrypted Data URL</name>
        <artwork align="left"><![CDATA[
data:application/cose;base64,SGVsb...xkIQ==
]]></artwork>
      </figure>
      <t>The transmission configuration, and other protocol parameters, such as supported compression or encryption algorithms <bcp14>MAY</bcp14> be discovered out of band.</t>
    </section>
    <section anchor="implementation-status">
      <name>Implementation Status</name>
      <t>Note to RFC Editor: Please remove this section as well as references to <xref target="BCP205"/> before AUTH48.</t>
      <t>This section records the status of known implementations of the protocol defined by this specification at the time of posting of this Internet-Draft, and is based on a proposal described in <xref target="BCP205"/>.
The description of implementations in this section is intended to assist the IETF in its decision processes in progressing drafts to RFCs.
Please note that the listing of any individual implementation here does not imply endorsement by the IETF.
Furthermore, no effort has been spent to verify the information presented here that was supplied by IETF contributors.
This is not intended as, and must not be construed to be, a catalog of available implementations or their features.
Readers are advised to note that other implementations may exist.</t>
      <t>According to <xref target="BCP205"/>, "this will allow reviewers and working groups to assign due consideration to documents that have the benefit of running code, which may serve as evidence of valuable experimentation and feedback that have made the implemented protocols more mature. It is up to the individual working groups to use this information as they see fit".</t>
      <section anchor="transmutecodes">
        <name>transmute.codes</name>
        <t>An open-source implementation was initiated and is maintained by the Transmute Industries Inc. - Transmute, and is available at:</t>
        <ul spacing="normal">
          <li>
            <t><eref target="https://github.com/transmute-industries/transmute.codes">transmute-industries/transmute.codes</eref></t>
          </li>
        </ul>
        <t>An application demonstrating these concepts is available at <eref target="https://transmute.codes">https://transmute.codes</eref>.</t>
        <t>The code's level of maturity is considered to be "prototype".</t>
        <t>The current version ('main') implements the transmission and recovery algorithms of this draft.</t>
        <t>The project and all corresponding code and data maintained on GitHub are provided under the Apache License, version 2.</t>
        <t>The implementation uses a wasm module, built from this rust implementation of RaptorQ <xref target="RFC6330"/>, maintained at:
- <eref target="https://github.com/cberner/raptorq">cberner/raptorq</eref></t>
        <t>Several other dependencies are used, but the RaptorQ implementation is the most relevant.</t>
      </section>
    </section>
    <section anchor="security-considerations">
      <name>Security Considerations</name>
      <t>TODO Security</t>
      <section anchor="public-key-discovery">
        <name>Public Key Discovery</name>
        <t>When encrypting data to a public key, it is important that the sender believe the corrosponding private key is under exclusive control of the receiver.
There are many different mechanisms for delivering a public key to a sender, such that the sender can be assured of this property.
A detailed analysis of identifier to public key binding, and recommendations suitable for use cases is outside the scope of this document.</t>
      </section>
      <section anchor="encryption">
        <name>Encryption</name>
        <t>Note that <xref target="RFC6330"/> and <xref target="RFC9285"/> and Base64 as used in <xref target="RFC2397"/> are encoding schemes, NOT encryption schemes, and they provide no confidentiality.</t>
        <t>Because the data that is encoded within QR Codes is visible to any system that can see the images, any sensitive data should be encrypted before transmission.</t>
        <t>In the context of this specification, this means the <tt>message data url</tt> <bcp14>MUST</bcp14> include a content type for an encryption envelope, suitable for the confientiality requirements of the use case.</t>
        <t>In the case that an encrypted message is transmitted as a Data URL, the content type of the message <bcp14>MUST</bcp14> be registered <xref target="IANA.media-types"/>, for example <tt>application/jose</tt> might be used to transmit a JSON Web Encryption as described in <xref target="RFC7516"/>, and <tt>application/cose</tt> might be used to transmit a cose encrypt envelope as described in <xref target="RFC9053"/>.</t>
      </section>
      <section anchor="context-binding">
        <name>Context Binding</name>
        <t>It is recommended that encryption envelopes supporting multiple key agreement and content encryption schemes ensure that ciphertexts commit to the specific keys and algorithms used.</t>
        <t>Additional context binding such as external aad in HPKE might be useful to achieve this.</t>
      </section>
      <section anchor="browser-apis">
        <name>Browser APIs</name>
        <t><eref target="https://github.com/WICG/identity-credential">WICG/identity-credential</eref> discusses a similar proposal related to invoking a presentation from a mobile device running a mobile operating system, to a browser requesting a presentation on behalf of a web origin.</t>
        <t>It is possible that some content types could be shared between this browser API use case, and the QR Code transport use case.</t>
      </section>
      <section anchor="proximal-and-remote-presentations">
        <name>Proximal and Remote Presentations</name>
        <t>It is possible to transmit animated QR Codes from a holder's handheld device to a verifier's camera / scanner, and to transmit animated QR Codes over an established video channel.
Additional security guidance is required regarding replay attack and proxy attacks on in person and remote presentations, that is beyond the scope of this document.</t>
      </section>
    </section>
    <section anchor="iana-considerations">
      <name>IANA Considerations</name>
      <t>This document has no IANA actions.</t>
    </section>
  </middle>
  <back>
    <references>
      <name>References</name>
      <references anchor="sec-normative-references">
        <name>Normative References</name>
        <reference anchor="RFC2397">
          <front>
            <title>The "data" URL scheme</title>
            <author fullname="L. Masinter" initials="L." surname="Masinter"/>
            <date month="August" year="1998"/>
            <abstract>
              <t>A new URL scheme, "data", is defined. It allows inclusion of small data items as "immediate" data, as if it had been included externally. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="2397"/>
          <seriesInfo name="DOI" value="10.17487/RFC2397"/>
        </reference>
        <reference anchor="RFC6330">
          <front>
            <title>RaptorQ Forward Error Correction Scheme for Object Delivery</title>
            <author fullname="M. Luby" initials="M." surname="Luby"/>
            <author fullname="A. Shokrollahi" initials="A." surname="Shokrollahi"/>
            <author fullname="M. Watson" initials="M." surname="Watson"/>
            <author fullname="T. Stockhammer" initials="T." surname="Stockhammer"/>
            <author fullname="L. Minder" initials="L." surname="Minder"/>
            <date month="August" year="2011"/>
            <abstract>
              <t>This document describes a Fully-Specified Forward Error Correction (FEC) scheme, corresponding to FEC Encoding ID 6, for the RaptorQ FEC code and its application to reliable delivery of data objects.</t>
              <t>RaptorQ codes are a new family of codes that provide superior flexibility, support for larger source block sizes, and better coding efficiency than Raptor codes in RFC 5053. RaptorQ is also a fountain code, i.e., as many encoding symbols as needed can be generated on the fly by the encoder from the source symbols of a source block of data. The decoder is able to recover the source block from almost any set of encoding symbols of sufficient cardinality -- in most cases, a set of cardinality equal to the number of source symbols is sufficient; in rare cases, a set of cardinality slightly more than the number of source symbols is required.</t>
              <t>The RaptorQ code described here is a systematic code, meaning that all the source symbols are among the encoding symbols that can be generated. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="6330"/>
          <seriesInfo name="DOI" value="10.17487/RFC6330"/>
        </reference>
        <reference anchor="RFC9285">
          <front>
            <title>The Base45 Data Encoding</title>
            <author fullname="P. Fältström" initials="P." surname="Fältström"/>
            <author fullname="F. Ljunggren" initials="F." surname="Ljunggren"/>
            <author fullname="D.W. van Gulik" initials="D.W." surname="van Gulik"/>
            <date month="August" year="2022"/>
            <abstract>
              <t>This document describes the Base45 encoding scheme, which is built upon the Base64, Base32, and Base16 encoding schemes.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9285"/>
          <seriesInfo name="DOI" value="10.17487/RFC9285"/>
        </reference>
        <reference anchor="RFC1952">
          <front>
            <title>GZIP file format specification version 4.3</title>
            <author fullname="P. Deutsch" initials="P." surname="Deutsch"/>
            <date month="May" year="1996"/>
            <abstract>
              <t>This specification defines a lossless compressed data format that is compatible with the widely used GZIP utility. This memo provides information for the Internet community. This memo does not specify an Internet standard of any kind.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="1952"/>
          <seriesInfo name="DOI" value="10.17487/RFC1952"/>
        </reference>
        <reference anchor="RFC8878">
          <front>
            <title>Zstandard Compression and the 'application/zstd' Media Type</title>
            <author fullname="Y. Collet" initials="Y." surname="Collet"/>
            <author fullname="M. Kucherawy" initials="M." role="editor" surname="Kucherawy"/>
            <date month="February" year="2021"/>
            <abstract>
              <t>Zstandard, or "zstd" (pronounced "zee standard"), is a lossless data compression mechanism. This document describes the mechanism and registers a media type, content encoding, and a structured syntax suffix to be used when transporting zstd-compressed content via MIME.</t>
              <t>Despite use of the word "standard" as part of Zstandard, readers are advised that this document is not an Internet Standards Track specification; it is being published for informational purposes only.</t>
              <t>This document replaces and obsoletes RFC 8478.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8878"/>
          <seriesInfo name="DOI" value="10.17487/RFC8878"/>
        </reference>
        <reference anchor="IANA.media-types" target="http://www.iana.org/assignments/media-types">
          <front>
            <title>Media Types</title>
            <author>
              <organization>IANA</organization>
            </author>
          </front>
        </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>
      <references anchor="sec-informative-references">
        <name>Informative References</name>
        <reference anchor="RFC7516">
          <front>
            <title>JSON Web Encryption (JWE)</title>
            <author fullname="M. Jones" initials="M." surname="Jones"/>
            <author fullname="J. Hildebrand" initials="J." surname="Hildebrand"/>
            <date month="May" year="2015"/>
            <abstract>
              <t>JSON Web Encryption (JWE) represents encrypted content using JSON-based data structures. Cryptographic algorithms and identifiers for use with this specification are described in the separate JSON Web Algorithms (JWA) specification and IANA registries defined by that specification. Related digital signature and Message Authentication Code (MAC) capabilities are described in the separate JSON Web Signature (JWS) specification.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7516"/>
          <seriesInfo name="DOI" value="10.17487/RFC7516"/>
        </reference>
        <reference anchor="RFC9053">
          <front>
            <title>CBOR Object Signing and Encryption (COSE): Initial Algorithms</title>
            <author fullname="J. Schaad" initials="J." surname="Schaad"/>
            <date month="August" year="2022"/>
            <abstract>
              <t>Concise Binary Object Representation (CBOR) is a data format designed for small code size and small message size. There is a need to be able to define basic security services for this data format. This document defines a set of algorithms that can be used with the CBOR Object Signing and Encryption (COSE) protocol (RFC 9052).</t>
              <t>This document, along with RFC 9052, obsoletes RFC 8152.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9053"/>
          <seriesInfo name="DOI" value="10.17487/RFC9053"/>
        </reference>
        <reference anchor="BCP205">
          <front>
            <title>Improving Awareness of Running Code: The Implementation Status Section</title>
            <author fullname="Y. Sheffer" initials="Y." surname="Sheffer"/>
            <author fullname="A. Farrel" initials="A." surname="Farrel"/>
            <date month="July" year="2016"/>
            <abstract>
              <t>This document describes a simple process that allows authors of Internet-Drafts to record the status of known implementations by including an Implementation Status section. This will allow reviewers and working groups to assign due consideration to documents that have the benefit of running code, which may serve as evidence of valuable experimentation and feedback that have made the implemented protocols more mature.</t>
              <t>This process is not mandatory. Authors of Internet-Drafts are encouraged to consider using the process for their documents, and working groups are invited to think about applying the process to all of their protocol specifications. This document obsoletes RFC 6982, advancing it to a Best Current Practice.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="205"/>
          <seriesInfo name="RFC" value="7942"/>
          <seriesInfo name="DOI" value="10.17487/RFC7942"/>
        </reference>
        <reference anchor="I-D.draft-ietf-cose-hpke">
          <front>
            <title>Use of Hybrid Public-Key Encryption (HPKE) with CBOR Object Signing and Encryption (COSE)</title>
            <author fullname="Hannes Tschofenig" initials="H." surname="Tschofenig">
         </author>
            <author fullname="Orie Steele" initials="O." surname="Steele">
              <organization>Transmute</organization>
            </author>
            <author fullname="Ajitomi, Daisuke" initials="A." surname="Daisuke">
         </author>
            <author fullname="Laurence Lundblade" initials="L." surname="Lundblade">
              <organization>Security Theory LLC</organization>
            </author>
            <date day="22" month="October" year="2023"/>
            <abstract>
              <t>   This specification defines hybrid public-key encryption (HPKE) for
   use with CBOR Object Signing and Encryption (COSE).  HPKE offers a
   variant of public-key encryption of arbitrary-sized plaintexts for a
   recipient public key.

   HPKE works for any combination of an asymmetric key encapsulation
   mechanism (KEM), key derivation function (KDF), and authenticated
   encryption with additional data (AEAD) function.  Authentication for
   HPKE in COSE is provided by COSE-native security mechanisms or by one
   of the authenticated variants of HPKE.

   This document defines the use of the HPKE with COSE.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-cose-hpke-07"/>
        </reference>
        <reference anchor="I-D.draft-rha-jose-hpke-encrypt">
          <front>
            <title>Use of Hybrid Public-Key Encryption (HPKE) with Javascript Object Signing and Encryption (JOSE)</title>
            <author fullname="Tirumaleswar Reddy.K" initials="T." surname="Reddy.K">
              <organization>Nokia</organization>
            </author>
            <author fullname="Hannes Tschofenig" initials="H." surname="Tschofenig">
         </author>
            <author fullname="Aritra Banerjee" initials="A." surname="Banerjee">
              <organization>Nokia</organization>
            </author>
            <author fullname="Orie Steele" initials="O." surname="Steele">
              <organization>Transmute</organization>
            </author>
            <author fullname="Michael B. Jones" initials="M. B." surname="Jones">
              <organization>independent</organization>
            </author>
            <date day="20" month="October" year="2023"/>
            <abstract>
              <t>   This specification defines Hybrid public-key encryption (HPKE) for
   use with Javascript Object Signing and Encryption (JOSE).  HPKE
   offers a variant of public-key encryption of arbitrary-sized
   plaintexts for a recipient public key.

   HPKE works for any combination of an asymmetric key encapsulation
   mechanism (KEM), key derivation function (KDF), and authenticated
   encryption with additional data (AEAD) function.  Authentication for
   HPKE in JOSE is provided by JOSE-native security mechanisms or by one
   of the authenticated variants of HPKE.

   This document defines the use of the HPKE with JOSE.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-rha-jose-hpke-encrypt-01"/>
        </reference>
      </references>
    </references>
    <?line 284?>

<section numbered="false" anchor="acknowledgments">
      <name>Acknowledgments</name>
      <t>TODO acknowledge.</t>
    </section>
  </back>
  <!-- ##markdown-source:
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
Ffe8COjJ5k3o//8APRbIBpczAAA=

-->

</rfc>
