<?xml version='1.0' encoding='utf-8'?>
<?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?>
<!-- generated by https://github.com/cabo/kramdown-rfc version 1.6.35 (Ruby 2.5.1) -->
<!DOCTYPE rfc SYSTEM "rfc2629-xhtml.ent">
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-ietf-scitt-scrapi-00" category="std" consensus="true" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 2.46.0 -->
  <front>
    <title abbrev="SCRAPI">SCITT Reference APIs</title>
    <seriesInfo name="Internet-Draft" value="draft-ietf-scitt-scrapi-00"/>
    <author initials="H." surname="Birkholz" fullname="Henk Birkholz">
      <organization abbrev="Fraunhofer SIT">Fraunhofer SIT</organization>
      <address>
        <postal>
          <street>Rheinstrasse 75</street>
          <city>Darmstadt</city>
          <code>64295</code>
          <country>Germany</country>
        </postal>
        <email>henk.birkholz@sit.fraunhofer.de</email>
      </address>
    </author>
    <author initials="O." surname="Steele" fullname="Orie Steele">
      <organization>Transmute</organization>
      <address>
        <email>orie@transmute.industries</email>
      </address>
    </author>
    <author initials="J." surname="Geater" fullname="Jon Geater">
      <organization>DataTrails Inc.</organization>
      <address>
        <postal>
          <country>United States</country>
        </postal>
        <email>jon.geater@datatrails.ai</email>
      </address>
    </author>
    <date year="2024" month="January" day="25"/>
    <area>Security</area>
    <workgroup>SCITT</workgroup>
    <keyword>Internet-Draft</keyword>
    <abstract>
      <?line 62?>

<t>This document defines the SCITT REST API,
an http interface to transparency services,
supporting the primary operations needed to implement the SCITT Architecture <xref target="I-D.draft-ietf-scitt-architecture"/>.</t>
    </abstract>
    <note removeInRFC="true">
      <name>About This Document</name>
      <t>
        Status information for this document may be found at <eref target="https://datatracker.ietf.org/doc/draft-ietf-scitt-scrapi/"/>.
      </t>
      <t>
        Discussion of this document takes place on the
        SCITT Working Group mailing list (<eref target="mailto:scitt@ietf.org"/>),
        which is archived at <eref target="https://mailarchive.ietf.org/arch/browse/scitt/"/>.
        Subscribe at <eref target="https://www.ietf.org/mailman/listinfo/scitt/"/>.
      </t>
      <t>Source for this draft and an issue tracker can be found at
        <eref target="https://github.com/ietf-wg-scitt/draft-ietf-scitt-scrapi"/>.</t>
    </note>
  </front>
  <middle>
    <?line 68?>

<section anchor="sec-introduction">
      <name>Introduction</name>
      <t>This API definition <bcp14>MAY</bcp14> be exposed externally as part of a suite of APIs,
or be encapsulated internally and exposed indirectly via proprietary APIs.</t>
      <section anchor="sec-requirements-notation">
        <name>Requirements Notation</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&nbsp;14 <xref target="RFC2119"/> <xref target="RFC8174"/> when, and only when, they
appear in all capitals, as shown here.</t>
        <?line -18?>

</section>
    </section>
    <section anchor="sec-relation-to-identity">
      <name>Relation to Identity</name>
      <t>The SCITT REST API is designed to support identifier systems that are currently relevant to supply chains, including DID, x509 and PGP.</t>
      <t>In order to support these systems, the API must be aware of specific header parameters, in particular, <tt>kid</tt>, <tt>x5u</tt> and <tt>x5c</tt>.</t>
      <t>The API enables implementers to deploy interoperable URIs for disclosing information feeds related to supply chain actors, and artifacts accessible via transparency services.</t>
      <section anchor="sec-authenticating-clients">
        <name>Authenticating Clients</name>
        <t>TBD (comments on OAuth / Client Attestation).</t>
      </section>
      <section anchor="sec-discovering-federation">
        <name>Discovering Federation</name>
        <t>TBD (comments on GAIN / OIDC).</t>
      </section>
      <section anchor="sec-discovering-feeds">
        <name>Discovering Feeds</name>
        <t>TBD (comments on URLs / QR Codes).</t>
      </section>
    </section>
    <section anchor="sec-scitt-reference-rest-api">
      <name>SCITT Reference REST API</name>
      <section anchor="sec-key-binding-confirmation">
        <name>Key Binding Confirmation</name>
        <t>In cases where a signed statement is issued by one party and registered by another, there is a need to prove possession of key material and detect tampering while authenticating both parties.</t>
        <t>Typically a nonce would be chosen by the transparency service and the second party would sign over the nonce, when registering the first issuer's signed statement.</t>
        <t>In order to avoid interactivity and improve interoperability, document describes a non-exclusive, but mandatory to support, confirmation scheme</t>
        <t>In this scheme the verifier's challenge is a recent Unix timestamp, the presenting party need not request this information from the transparency service.</t>
        <t>Here is an example key binding token that can be paired with the confirmation claim in a signed statement:</t>
        <sourcecode type="json">
{
  "iat": 1698077790,
  "aud": "https://transparency.example",
  "nonce": "1698077790"
}
</sourcecode>
        <t>When applying registration policies to signed statements with confirmation, the transparency service acts as a verifier, and performs the following checks:</t>
        <ol spacing="normal" type="1">
          <li>verify the integrity of the issuer's signed statement</li>
          <li>confirm the verified content meets the registration policy for the transparency service.</li>
          <li>verify the key binding token, using the confirmation claim in the verified issuer signed statement</li>
          <li>ensure the key binding token has a nonce that is a string representation of a recent Unix timestamp</li>
        </ol>
        <t>The exact window of validity for proving possession is a configuration detail of the transparency service.
Unix timestamps are used so that only a losely synchronised notion of time need be assumed and there is no requirement to account for timezones.</t>
        <t>If the confirmation key is stolen, the attacker can produce key binding tokens from that point forward in time.
In an interactive confirmation schema, the transparency service can force the confirmation key holder to produce a signature over a nonce that is not guessable, and this prevents certain attacks related to the duration of access to a signing capability and other timing details.
However, the cost of coordinating with the transparency service, coupled with the purpose of registering with a transparency service (to obtain a receipt, proving a signed statement was acceptable at a point in time) justify specifying the recent timestamp nonce as a mandatory to implement context binding.</t>
        <t>In the case that a SCITT transparency service wants to support challenges (nonces) that are context binding, the transparency service can expose a "challenge token endpoint".</t>
        <t>This endpoint can process request parameters, and issuer a challenge token, that future registrations can use to bind to the original request.
This interaction model works well for scenarios where requirements for a given registration might change over time, but it is important for the registering party to commit to acceptable values at the time that a signed statement is registered. These endpoints are optional to implement.</t>
        <section anchor="sec-challenge-endpoint">
          <name>Challenge Endpoint</name>
          <section anchor="sec-request">
            <name>Request</name>
            <sourcecode type="http">
GET https://transparency.example/registration/challenge
</sourcecode>
          </section>
          <section anchor="sec-response">
            <name>Response</name>
            <ul spacing="normal">
              <li>Header: <tt>Content-Type: application/json</tt></li>
              <li>(Optional) Header: <tt>Retry-After: &lt;seconds&gt;</tt></li>
              <li>Query: <tt>?intention={todo}</tt></li>
              <li>Body: <tt>{ "token": "JWT | SD-JWT | base64url( CWT | SD-CWT )&gt;" }</tt></li>
            </ul>
          </section>
        </section>
        <section anchor="sec-registration-endpoint">
          <name>Registration Endpoint</name>
          <section anchor="sec-request-1">
            <name>Request</name>
            <sourcecode type="http">
POST https://transparency.example/registration
</sourcecode>
            <t>Headers:</t>
            <ul spacing="normal">
              <li>
                <tt>Content-Type: application/cose</tt></li>
            </ul>
            <t>Body: SCITT COSE_Sign1 message</t>
            <t>Note: that the challenge token <bcp14>MUST</bcp14> be present and integrity protected when submitting signed statements to this endpoint.
Note: this endpoint is a duplicate of <tt>POST https://transparency.example/entries</tt></t>
          </section>
        </section>
      </section>
      <section anchor="sec-messages">
        <name>Messages</name>
        <t>All messages are sent as HTTP GET or POST requests.</t>
        <t>If the Transparency Service cannot process a client's request, it <bcp14>MUST</bcp14> return an HTTP 4xx or 5xx status code, and the body <bcp14>SHOULD</bcp14> be a JSON problem details object (<xref target="RFC7807"/>) containing:</t>
        <ul spacing="normal">
          <li>type: A URI reference identifying the problem.
To facilitate automated response to errors, this document defines a set of standard tokens for use in the type field within the URN namespace of: "urn:ietf:params:scitt:error:".</li>
          <li>detail: A human-readable string describing the error that prevented the Transparency Service from processing the request, ideally with sufficient detail to enable the error to be rectified.</li>
        </ul>
        <t>Error responses <bcp14>SHOULD</bcp14> be sent with the <tt>Content-Type: application/problem+json</tt> HTTP header.</t>
        <t>As an example, submitting a Signed Statement with an unsupported signature algorithm would return a <tt>400 Bad Request</tt> status code and the following body:</t>
        <sourcecode type="json">
{
  "type": "urn:ietf:params:scitt:error:badSignatureAlgorithm",
  "detail": "Signing algorithm not support"
}
</sourcecode>
        <t>Most error types are specific to the type of request and are defined in the respective subsections below.
The one exception is the "malformed" error type, which indicates that the Transparency Service could not parse the client's request because it did not comply with this document:</t>
        <ul spacing="normal">
          <li>Error code: <tt>malformed</tt> (The request could not be parsed).</li>
        </ul>
        <t>Clients <bcp14>SHOULD</bcp14> treat 500 and 503 HTTP status code responses as transient failures and <bcp14>MAY</bcp14> retry the same request without modification at a later date.
Note that in the case of a 503 response, the Transparency Service <bcp14>MAY</bcp14> include a <tt>Retry-After</tt> header field per <xref target="RFC7231"/> in order to request a minimum time for the client to wait before retrying the request.
In the absence of this header field, this document does not specify a minimum.</t>
        <section anchor="sec-register-signed-statement">
          <name>Register Signed Statement</name>
          <section anchor="sec-request-2">
            <name>Request</name>
            <sourcecode type="http">
POST https://transparency.example/entries
</sourcecode>
            <t>Headers:</t>
            <ul spacing="normal">
              <li>
                <tt>Content-Type: application/cose</tt></li>
            </ul>
            <t>Body: SCITT COSE_Sign1 message</t>
          </section>
          <section anchor="sec-response-1">
            <name>Response</name>
            <t>One of the following:</t>
            <ul spacing="normal">
              <li>
                <t>Status 201 - Registration is successful.
                </t>
                <ul spacing="normal">
                  <li>Header <tt>Location: &lt;Base URL&gt;/entries/&lt;Entry ID&gt;</tt></li>
                  <li>Header <tt>Content-Type: application/json</tt></li>
                  <li>Body <tt>{ "entryId": "&lt;Entry ID"&gt; }</tt></li>
                </ul>
              </li>
              <li>
                <t>Status 202 - Registration is running.
                </t>
                <ul spacing="normal">
                  <li>Header <tt>Location: &lt;Base URL&gt;/operations/&lt;Operation ID&gt;</tt></li>
                  <li>Header <tt>Content-Type: application/json</tt></li>
                  <li>(Optional) Header: <tt>Retry-After: &lt;seconds&gt;</tt></li>
                  <li>Body <tt>{ "operationId": "&lt;Operation ID&gt;", "status": "running" }</tt></li>
                </ul>
              </li>
              <li>
                <t>Status 400 - Registration was unsuccessful due to invalid input.
                </t>
                <ul spacing="normal">
                  <li>Error code <tt>badSignatureAlgorithm</tt></li>
                  <li>TBD: more error codes to be defined</li>
                </ul>
              </li>
            </ul>
            <t>If 202 is returned, then clients should wait until Registration succeeded or failed by polling the Registration status using the Operation ID returned in the response.
Clients should always obtain a Receipt as a proof that Registration has succeeded.</t>
          </section>
        </section>
        <section anchor="sec-retrieve-operation-status">
          <name>Retrieve Operation Status</name>
          <section anchor="sec-request-3">
            <name>Request</name>
            <sourcecode type="http">
GET https://transparency.example/operations/{operation_id}
</sourcecode>
          </section>
          <section anchor="sec-response-2">
            <name>Response</name>
            <t>One of the following:</t>
            <ul spacing="normal">
              <li>
                <t>Status 200 - Registration is running
                </t>
                <ul spacing="normal">
                  <li>Header: <tt>Content-Type: application/json</tt></li>
                  <li>(Optional) Header: <tt>Retry-After: &lt;seconds&gt;</tt></li>
                  <li>Body: <tt>{ "operationId": "&lt;Operation ID&gt;", "status": "running" }</tt></li>
                </ul>
              </li>
              <li>
                <t>Status 200 - Registration was successful
                </t>
                <ul spacing="normal">
                  <li>Header: <tt>Location: &lt;Base URL&gt;/entries/&lt;Entry ID&gt;</tt></li>
                  <li>Header: <tt>Content-Type: application/json</tt></li>
                  <li>Body: <tt>{ "operationId": "&lt;Operation ID&gt;", "status": "succeeded", "entryId": "&lt;Entry ID&gt;" }</tt></li>
                </ul>
              </li>
              <li>
                <t>Status 200 - Registration failed
                </t>
                <ul spacing="normal">
                  <li>Header <tt>Content-Type: application/json</tt></li>
                  <li>Body: <tt>{ "operationId": "&lt;Operation ID&gt;", "status": "failed", "error": { "type": "&lt;type&gt;", "detail": "&lt;detail&gt;" } }</tt></li>
                  <li>Error code: <tt>badSignatureAlgorithm</tt></li>
                  <li/>
                </ul>
              </li>
              <li>
                <t>Status 404 - Unknown Operation ID
                </t>
                <ul spacing="normal">
                  <li>Error code: <tt>operationNotFound</tt></li>
                  <li>This can happen if the operation ID has expired and been deleted.</li>
                </ul>
              </li>
            </ul>
            <t>If an operation failed, then error details <bcp14>SHOULD</bcp14> be embedded as a JSON problem details object in the <tt>"error"</tt> field.</t>
            <t>If an operation ID is invalid (i.e., it does not correspond to any submit operation), a service may return either a 404 or a <tt>running</tt> status.
This is because differentiating between the two may not be possible in an eventually consistent system.</t>
          </section>
        </section>
        <section anchor="sec-retrieve-signed-statement">
          <name>Retrieve Signed Statement</name>
          <section anchor="sec-request-4">
            <name>Request</name>
            <sourcecode type="http">
GET https://transparency.example/entries/{entry_id}
</sourcecode>
            <t>Query parameters:</t>
            <ul spacing="normal">
              <li>(Optional) <tt>embedReceipt=true</tt></li>
            </ul>
            <t>If the query parameter <tt>embedReceipt=true</tt> is provided, then the Signed Statement is returned with the corresponding Registration Receipt embedded in the COSE unprotected header.</t>
          </section>
          <section anchor="sec-response-3">
            <name>Response</name>
            <t>One of the following:</t>
            <ul spacing="normal">
              <li>
                <t>Status 200.
                </t>
                <ul spacing="normal">
                  <li>Header: <tt>Content-Type: application/cose</tt></li>
                  <li>Body: COSE_Sign1</li>
                </ul>
              </li>
              <li>
                <t>Status 404 - Entry not found.
                </t>
                <ul spacing="normal">
                  <li>Error code: <tt>entryNotFound</tt></li>
                </ul>
              </li>
            </ul>
          </section>
        </section>
        <section anchor="sec-retrieve-registration-receipt">
          <name>Retrieve Registration Receipt</name>
          <section anchor="sec-request-5">
            <name>Request</name>
            <sourcecode type="http">
GET https://transparency.example/entries/{entry_id}/receipt
</sourcecode>
          </section>
          <section anchor="sec-response-4">
            <name>Response</name>
            <t>One of the following:</t>
            <ul spacing="normal">
              <li>
                <t>Status 200.
                </t>
                <ul spacing="normal">
                  <li>Header: <tt>Content-Type: application/cbor</tt></li>
                  <li>Body: SCITT_Receipt</li>
                </ul>
              </li>
              <li>
                <t>Status 404 - Entry not found.
                </t>
                <ul spacing="normal">
                  <li>Error code: <tt>entryNotFound</tt></li>
                </ul>
              </li>
            </ul>
            <t>The retrieved Receipt may be embedded in the corresponding COSE_Sign1 document in the unprotected header.</t>
          </section>
        </section>
      </section>
    </section>
    <section anchor="sec-privacy-considerations">
      <name>Privacy Considerations</name>
      <t>TODO</t>
    </section>
    <section anchor="sec-security-considerations">
      <name>Security Considerations</name>
      <t>TODO</t>
    </section>
    <section anchor="sec-iana-considerations">
      <name>IANA Considerations</name>
      <section anchor="sec-urn-sub-namespace-for-scitt-urnietfparamsscitt">
        <name>URN Sub-namespace for SCITT (urn:ietf:params:scitt)</name>
        <t>IANA is requested to register the URN sub-namespace <tt>urn:ietf:params:scitt</tt>
in the "IETF URN Sub-namespace for Registered Protocol Parameter Identifiers"
Registry <xref target="IANA.params"/>, following the template in <xref target="RFC3553"/>:</t>
        <sourcecode type="output">
   Registry name:  scitt

   Specification:  [RFCthis]

   Repository:  http://www.iana.org/assignments/scitt

   Index value:  No transformation needed.
</sourcecode>
      </section>
      <section anchor="sec-media-types">
        <name>Media Types</name>
        <t>TODO: Register them from here.</t>
      </section>
      <section anchor="sec-well-known-uris">
        <name>Well Known URIs</name>
        <t>For discovering scitt configuration.</t>
        <t>TODO: Register them from here.</t>
      </section>
      <section anchor="sec-media-type-registration">
        <name>Media Type Registration</name>
        <t>This section requests registration of the "application/receipt+cose" media type <xref target="RFC2046"/> in the "Media Types" registry in the manner described in <xref target="RFC6838"/>.</t>
        <t>TODO: Consider negotiation for receipt as "JSON" or "YAML".
TODO: Consider impact of media type on "Data URIs" and QR Codes.</t>
        <t>To indicate that the content is a SCITT Receipt:</t>
        <ul spacing="normal">
          <li>Type name: application</li>
          <li>Subtype name: receipt+cose</li>
          <li>Required parameters: n/a</li>
          <li>Optional parameters: n/a</li>
          <li>Encoding considerations: TODO</li>
          <li>Security considerations: TODO</li>
          <li>Interoperability considerations: n/a</li>
          <li>Published specification: this specification</li>
          <li>Applications that use this media type: TBD</li>
          <li>Fragment identifier considerations: n/a</li>
          <li>
            <t>Additional information:
            </t>
            <ul spacing="normal">
              <li>Magic number(s): n/a</li>
              <li>File extension(s): n/a</li>
              <li>Macintosh file type code(s): n/a</li>
            </ul>
          </li>
          <li>Person &amp; email address to contact for further information: TODO</li>
          <li>Intended usage: COMMON</li>
          <li>Restrictions on usage: none</li>
          <li>Author: TODO</li>
          <li>Change Controller: IESG</li>
          <li>Provisional registration?  No</li>
        </ul>
      </section>
    </section>
  </middle>
  <back>
    <references>
      <name>References</name>
      <references>
        <name>Normative References</name>
        <reference anchor="RFC7807">
          <front>
            <title>Problem Details for HTTP APIs</title>
            <seriesInfo name="DOI" value="10.17487/RFC7807"/>
            <seriesInfo name="RFC" value="7807"/>
            <author fullname="M. Nottingham" initials="M." surname="Nottingham"/>
            <author fullname="E. Wilde" initials="E." surname="Wilde"/>
            <date month="March" year="2016"/>
            <abstract>
              <t>This document defines a "problem detail" as a way to carry machine- readable details of errors in a HTTP response to avoid the need to define new error response formats for HTTP APIs.</t>
            </abstract>
          </front>
        </reference>
        <reference anchor="RFC7231">
          <front>
            <title>Hypertext Transfer Protocol (HTTP/1.1): Semantics and Content</title>
            <seriesInfo name="DOI" value="10.17487/RFC7231"/>
            <seriesInfo name="RFC" value="7231"/>
            <author fullname="R. Fielding" initials="R." role="editor" surname="Fielding"/>
            <author fullname="J. Reschke" initials="J." role="editor" surname="Reschke"/>
            <date month="June" year="2014"/>
            <abstract>
              <t>The Hypertext Transfer Protocol (HTTP) is a stateless \%application- level protocol for distributed, collaborative, hypertext information systems. This document defines the semantics of HTTP/1.1 messages, as expressed by request methods, request header fields, response status codes, and response header fields, along with the payload of messages (metadata and body content) and mechanisms for content negotiation.</t>
            </abstract>
          </front>
        </reference>
        <reference anchor="RFC3553">
          <front>
            <title>An IETF URN Sub-namespace for Registered Protocol Parameters</title>
            <seriesInfo name="DOI" value="10.17487/RFC3553"/>
            <seriesInfo name="RFC" value="3553"/>
            <seriesInfo name="BCP" value="73"/>
            <author fullname="M. Mealling" initials="M." surname="Mealling"/>
            <author fullname="L. Masinter" initials="L." surname="Masinter"/>
            <author fullname="T. Hardie" initials="T." surname="Hardie"/>
            <author fullname="G. Klyne" initials="G." surname="Klyne"/>
            <date month="June" year="2003"/>
            <abstract>
              <t>This document describes a new sub-delegation for the 'ietf' URN namespace for registered protocol items. The 'ietf' URN namespace is defined in RFC 2648 as a root for persistent URIs that refer to IETF- defined resources. This document specifies an Internet Best Current Practices for the Internet Community, and requests discussion and suggestions for improvements.</t>
            </abstract>
          </front>
        </reference>
        <reference anchor="IANA.params" target="https://www.iana.org/assignments/params">
          <front>
            <title>Uniform Resource Name (URN) Namespace for IETF Use</title>
            <author>
              <organization>IANA</organization>
            </author>
          </front>
        </reference>
        <reference anchor="I-D.draft-ietf-scitt-architecture">
          <front>
            <title>An Architecture for Trustworthy and Transparent Digital Supply Chains</title>
            <seriesInfo name="Internet-Draft" value="draft-ietf-scitt-architecture-04"/>
            <author fullname="Henk Birkholz" initials="H." surname="Birkholz">
              <organization>Fraunhofer SIT</organization>
            </author>
            <author fullname="Antoine Delignat-Lavaud" initials="A." surname="Delignat-Lavaud">
              <organization>Microsoft Research</organization>
            </author>
            <author fullname="Cedric Fournet" initials="C." surname="Fournet">
              <organization>Microsoft Research</organization>
            </author>
            <author fullname="Yogesh Deshpande" initials="Y." surname="Deshpande">
              <organization>ARM</organization>
            </author>
            <author fullname="Steve Lasker" initials="S." surname="Lasker">
              <organization>RKVST</organization>
            </author>
            <date day="23" month="October" year="2023"/>
            <abstract>
              <t>   Traceability of physical and digital Artifacts in supply chains is a
   long-standing, but increasingly serious security concern.  The rise
   in popularity of verifiable data structures as a mechanism to make
   actors more accountable for breaching their compliance promises has
   found some successful applications to specific use cases (such as the
   supply chain for digital certificates), but lacks a generic and
   scalable architecture that can address a wider range of use cases.

   This document defines a generic, interoperable and scalable
   architecture to enable transparency across any supply chain with
   minimum adoption barriers.  It provides flexibility, enabling
   interoperability across different implementations of Transparency
   Services with various auditing and compliance requirements.  Issuers
   can register their Signed Statements on any Transparency Service,
   with the guarantee that all Consumers will be able to verify them.

   Within the SCITT Architecture, a producer is known as an Issuer, and
   a consumer is known as a Verifier.

              </t>
            </abstract>
          </front>
        </reference>
        <reference anchor="RFC2119">
          <front>
            <title>Key words for use in RFCs to Indicate Requirement Levels</title>
            <seriesInfo name="DOI" value="10.17487/RFC2119"/>
            <seriesInfo name="RFC" value="2119"/>
            <seriesInfo name="BCP" value="14"/>
            <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>
        </reference>
        <reference anchor="RFC8174">
          <front>
            <title>Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words</title>
            <seriesInfo name="DOI" value="10.17487/RFC8174"/>
            <seriesInfo name="RFC" value="8174"/>
            <seriesInfo name="BCP" value="14"/>
            <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>
        </reference>
      </references>
      <references>
        <name>Informative References</name>
        <reference anchor="RFC2046">
          <front>
            <title>Multipurpose Internet Mail Extensions (MIME) Part Two: Media Types</title>
            <seriesInfo name="DOI" value="10.17487/RFC2046"/>
            <seriesInfo name="RFC" value="2046"/>
            <author fullname="N. Freed" initials="N." surname="Freed"/>
            <author fullname="N. Borenstein" initials="N." surname="Borenstein"/>
            <date month="November" year="1996"/>
            <abstract>
              <t>This second document defines the general structure of the MIME media typing system and defines an initial set of media types. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
        </reference>
        <reference anchor="RFC6838">
          <front>
            <title>Media Type Specifications and Registration Procedures</title>
            <seriesInfo name="DOI" value="10.17487/RFC6838"/>
            <seriesInfo name="RFC" value="6838"/>
            <seriesInfo name="BCP" value="13"/>
            <author fullname="N. Freed" initials="N." surname="Freed"/>
            <author fullname="J. Klensin" initials="J." surname="Klensin"/>
            <author fullname="T. Hansen" initials="T." surname="Hansen"/>
            <date month="January" year="2013"/>
            <abstract>
              <t>This document defines procedures for the specification and registration of media types for use in HTTP, MIME, and other Internet protocols. This memo documents an Internet Best Current Practice.</t>
            </abstract>
          </front>
        </reference>
      </references>
    </references>
    <?line 409?>

<section anchor="sec-attic">
      <name>Attic</name>
      <t>Not ready to throw texts blocks here into the trash bin yet.</t>
    </section>
  </back>
  <!-- ##markdown-source:
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
rZwsNNgLDQVNEJYrU/aj/wXlK8eiMzQAAA==

-->

</rfc>
