<?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-rfc2629 version 1.5.24 -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-secure-credential-transfer-03" category="std" consensus="true" tocInclude="true" sortRefs="true" symRefs="true" obsoletes="" updates="" submissionType="IETF" xml:lang="en" version="3">
  <!-- xml2rfc v2v3 conversion 3.12.0 -->
  <front>
    <title abbrev="Secure Credential Transfer">Secure Credential Transfer</title>
    <seriesInfo name="Internet-Draft" value="draft-secure-credential-transfer-03"/>
    <author initials="D." surname="Vinokurov" fullname="Dmitry Vinokurov">
      <organization>Apple Inc</organization>
      <address>
        <email>dvinokurov@apple.com</email>
      </address>
    </author>
    <author initials="M." surname="Byington" fullname="Matt Byington">
      <organization>Apple Inc</organization>
      <address>
        <email>mbyington@apple.com</email>
      </address>
    </author>
    <author initials="M." surname="Lerch" fullname="Matthias Lerch">
      <organization>Apple Inc</organization>
      <address>
        <email>mlerch@apple.com</email>
      </address>
    </author>
    <author initials="A." surname="Pelletier" fullname="Alex Pelletier">
      <organization>Apple Inc</organization>
      <address>
        <email>a_pelletier@apple.com</email>
      </address>
    </author>
    <author initials="N." surname="Sha" fullname="Nick Sha">
      <organization>Alphabet Inc</organization>
      <address>
        <email>nicksha@google.com</email>
      </address>
    </author>
    <date year="2022" month="January" day="07"/>
    <area>TODO</area>
    <workgroup>TODO Working Group</workgroup>
    <keyword>Internet-Draft</keyword>
    <abstract>
      <t>This document describes a mechanism to transfer digital credentials securely between two devices.
Secure credentials may represent a digital key to a hotel room, a digital key to a door lock in a house 
or a digital key to a car. Devices that share credentials may belong to the same or two different platforms (e.g. iOS and Android).
Secure transfer may include one or more write and read operations.
Credential transfer needs to be performed securely due to the sensitive nature of the information.</t>
    </abstract>
    <note removeInRFC="true">
      <name>Discussion Venues</name>
      <t>Source for this draft and an issue tracker can be found at
    <eref target="https://github.com/dimmyvi/secure-credential-transfer"/>.</t>
    </note>
  </front>
  <middle>
    <section anchor="introduction" numbered="true" toc="default">
      <name>Introduction</name>
      <t>Today, there is no standard way of transferring digital credentials securely between two devices 
belonging to the same platform or two different platforms. This document proposes a solution to this problem 
by introducing a Relay server which allows two devices to exchange encrypted Provisioning Information securely.
The Relay server solves this problem by creating and managing temporary mailbox storage.</t>
      <t>Each mailbox can be referenced by devices using a unique mailbox identifier in a URL.
The URL pointing to encrypted Provisioning Information is to be passed between devices directly 
over various channels (e.g. SMS, email, messaging applications).
The Security Considerations section provides recommendations on passing the URL and the Secret securely.</t>
      <t>This document describes a Hypertext (HTTP) Application Programming Interface (API) that allows 
Sender and Receiver devices to interact with a Relay server in order to perform secure credential transfer.</t>
    </section>
    <section anchor="terminology" numbered="true" toc="default">
      <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" format="default"/> <xref target="RFC8174" format="default"/> when, and only when, they
appear in all capitals, as shown here.</t>
      <t>General terms:</t>
      <ul spacing="normal">
        <li>Relay Server - Web application exposing Secure Credential Transfer API to devices. It serves to securely transfer Provisioning Information between two devices (Sender and Receiver).</li>
        <li>Sender device - a device initiating a transfer of Provisioning Information to a Receiver device so that Receiver can register or provision this credential.</li>
        <li>Receiver device - a device that receives Provisioning Information from Sender device and uses it to register or provision Credential Information.</li>
        <li>Provisioning Partner - an entity which facilitates Credential Information lifecycle on a device. Lifecycle may include provisioning of credential, credential termination, credential update. API to Provisioning Partner is out of scope for this document.</li>
        <li>Provisioning Information - a set of data fields, allowing a device to generate Credential Information or receive it from Provisioning Partner and install it locally. The entire content of Provisioning Information is encrypted by Sender or Receiver device. Therefore, it is not visible to the Relay Server.
The structure of Provisioning Information is specific to Provisioning Partner or type of Credential and out of the scope of this document.</li>
        <li>Credential Information - a set of data fields used to facilitate registration or provisioning of Credential Information on the Receiver's device.</li>
        <li>Secret - a symmetric encryption key shared by a pair of Sender and Receiver devices, used to encrypt Provisioning Information stored on the Relay server. Secret stays the same for the entire credential transfer flow (one Secret per complete transfer). Provisioning Information stored on Relay server is always encrypted using the Secret. In Stateful flow all information exchanged by Sender and Receiver devices through Relay server is encrypted with the same Secret. Thus, effectively, Secret has a one-to-one relation with the mailbox.</li>
        <li>Credential Vertical - The broad industry vertical that the credential belongs to. For example, the credential could belong to the car or home vertical.</li>
      </ul>
      <t>API parameters:</t>
      <ul spacing="normal">
        <li>Device Claim - a unique token allowing the caller to read from / write data to the mailbox. Exactly one Sender device and one Receiver device <bcp14>SHOULD</bcp14> be able to read from / write secure payload to the mailbox. Sender device provides a Device Claim in order to create a mailbox. When the Relay server, having received a request from the Sender device, creates a mailbox, it binds this Sender's Device Claim to the mailbox. When the Receiver device first reads data from the mailbox it presents its Device Claim to the Relay Server, which binds the mailbox to the given Receiver device. Thus, both Sender and Receiver devices are bound to the mailbox (allowed to read from / write to it). Only Sender and Receiver devices that present valid Device Claims are allowed to send subsequent read/update/delete calls to the mailbox. The value <bcp14>SHALL</bcp14> be a UUID <xref target="RFC4122" format="default"/>.</li>
        <li>Notification Token - a short or long-lived unique token stored by the Sender or Receiver device in a mailbox on the Relay server, which allows Relay server to send a push notification to the Sender or Receiver device, informing them of updates in the mailbox.</li>
        <li>MailboxIdentifier - a unique identifier for the given mailbox, generated by the Relay server at the time of mailbox creation. The value \ be a UUID <xref target="RFC4122" format="default"/>.</li>
      </ul>
    </section>
    <section anchor="credential-transfer-workflows" numbered="true" toc="default">
      <name>Credential transfer workflows</name>
      <t>We define two flows for credential transfer: 1. Stateless (Relay server facilitates a single credential data transfer: Sender -&gt; Relay -&gt; Receiver) and 2. Stateful (Relay server facilitates additional data transfers - there are multiple data transfers in this flow to prepare credential data for registering or provisioning by Receiver). Relay server does not limit the number of such data tranfsfers between Sender and Receiver devices. The details are provided below.</t>
      <t>Both stateless and stateful share the following common steps.
The processes start with a Sender device composing a set of Provisioning Information, encrypting it with a Secret and storing encrypted Provisioning Information on a Relay server in a mailbox. A unique Mailbox Identifier is generated by the Relay server as a part of CreateMailbox call, created using a good source of entropy (preferably hardware-based entropy). Sender device generates a unique token - a Sender Device Claim - and stores it to the mailbox. Device Claim allows the Sender device presenting it to read and write data to / from the mailbox, thus binding it to the mailbox.</t>
      <t>Sender device calls CreateMailbox API endpoint on a Relay server in order to create a mailbox.
Once a mailbox is created, it has limited time to live. When expired, the mailbox <bcp14>SHALL</bcp14> be deleted - refer to DeleteMailbox endpoint. TimeToLive mailbox configuration in the request is required to use with the CreateMailbox call (refer to mailboxConfiguration request parameter). Relay server is responsible to periodically check for mailboxes with expired TimeToLive and delete them.</t>
      <t>Relay server builds a unique URL link to a mailbox (for example, "http://relayserver.com/m/1234567890") and returns it to the Sender device, which sends the link directly to the Receiver device over communication channel (e.g. SMS, email, iMessage).
Please refer to section "Security Considerations" for more details.</t>
      <t>Receiver device, having obtained both the URL link and the Secret, generates a unique token - a Receiver Device Claim - and passes it to the Relay server in order to read the encrypted Provisioning Information from the mailbox.</t>
      <t>Relay server now binds a given pair of Sender and Receiver devices to the mailbox by provided Sender and Receiver Device Claims. Only bound devices are allowed to read or write data to the mailbox or to delete the mailbox.</t>
      <section anchor="stateless-workflow" numbered="true" toc="default">
        <name>Stateless workflow</name>
        <t>The stateless workflow completes the common steps described in "Credential transfer workflows" section, then finishes the transfer completing the following steps.
Receiver device, having read the encrypted Provisioning Information from the Relay mailbox, decrypts it with the Secret received from the Sender and starts credential registering or provisioning process on the device. Once the Receiver device has successfully provisioned credentials, it deletes the mailbox by sending a DeleteMailbox call to the Relay server.</t>
        <figure anchor="stateless-flow-image">
          <name>Sample stateless workflow</name>
          <artwork name="" type="" align="left" alt=""><![CDATA[
                      Sender              Relay                          Receiver
                        |                   |                               |
    Create mailbox w    | CreateMailbox     |                               |
    Provisioning Info   |——---------------->|                               |
    encrypted w Secret  |<<-.-.-.-.-.-.-.-.-|                               |
                        |URL link to mailbox|                               |
                        |                   |                               | 
    Send URL link to    |                   |     URL link and Secret       |
    mailbox and Secret  |-------------------------------------------------->|
                        |                   |                               | 
                        |                   | ReadSecureContentFromMailbox  |
                        |                   |<------------------------------| 
                        |                   |-.-.-.-.-.-.-.-.-.-.-.-.-.-.->>| Decrypt w Secret to get Prov Info
                        |                   |         encrypted info        |
                        |                   |                               | 
                        |                   |         DeleteMailbox         |
                        |                   |<------------------------------| Provision or Register credentials
                        |                   |-.-.-.-.-.-.-.-.-.-.-.-.-.-.->>| 
                        |                   |              OK               |
]]></artwork>
        </figure>
      </section>
      <section anchor="stateful-workflow" numbered="true" toc="default">
        <name>Stateful workflow</name>
        <t>The stateful workflow completes the common steps described in "Credential transfer workflows" section, then finishes the transfer completing the following steps.</t>
        <t>Then the Receiver device, having downloaded the encrypted Provisioning Information from the mailbox by URL and decrypted it with the Secret, generates a new structure of Provisioning Information, e.g. a digital key, and encrypts it with the same Secret, received from the Sender device. It then stores the payload in the same mailbox on the Relay server. In addition to the encrypted payload, Receiver stores a Receiver Notification Token in the given mailbox.</t>
        <t>Having received the encrypted Provisioning Information, the Relay server sends a Notification to the Sender device using the Sender Notification Token.</t>
        <t>Sender device, having received the notification from the Relay server, reads secure content from the mailbox and decrypts all using the same Secret. Sender device generates new Provisioning Information, encrypts all fields using the Secret and stores all data in the same  mailbox on the Relay server.</t>
        <t>Relay server, having stored the data above, sends a notification to the Receiver device using Receiver Notification Token. Receiver device, having received the notification, reads the encrypted Provisioning Information, decrypts the data using the same Secret and uses this data to finalize credential registration or provisioning on device.</t>
        <t>Once the Receiver device has successfully registered or provisioned credentials, it deletes the mailbox by sending a DeleteMailbox call to the Relay server.
Sender device may terminate the secure credential transfer by deleting the mailbox it created at any time. Deletion of the mailbox on the Relay server stops any on-going credential transfer process.</t>
        <figure anchor="stateful-flow-image">
          <name>Sample stateful workflow</name>
          <artwork name="" type="" align="left" alt=""><![CDATA[
                     Sender                       Relay                         Receiver
                       |                             |                             |
    Create and encrypt |       CreateMailbox         |                             |
    Provisioning Info 1|---------------------------->|                             |
    encrypted w Secret |<<-.-.-.-.-.-.-.-.-.-.-.-.-.-|                             |
                       |    URL link to mailbox      |                             |
                       |                             |                             |
                       |                             |    URL link and Secret      |
    Send URL link to   |---------------------------------------------------------->|
    mailbox and Secret |                             |                             |
                       |                             |ReadSecureContentFromMailbox |
                       |                             |<----------------------------|
                       |                             |-.-.-.-.-.-.-.-.-.-.-.-.-.->>| Decrypt w Secret for ProvInfo1
                       |                             |       encrypted info        |
                       |                             |                             | 
                       |                             |UpdateMailbox(encrypted info)| Update with ProvInfo2
                       |                             |<----------------------------| encrypted with Secret
                       |                             |-.-.-.-.-.-.-.-.-.-.-.-.-.->>| ProvInfo2 = new Provisioning Info
                       |                             |             OK              |
                       |ReadSecureContentFromMailbox |                             |
                       |---------------------------->|                             |
   Decrypt w Secret to |<<-.-.-.-.-.-.-.-.-.-.-.-.-.-|                             |
   get ProvInfo2       |       encrypted info        |                             |
                       |                             |                             |
                       |UpdateMailbox(encrypted info)|                             |
   Update w ProvInfo3  |—-----------—--------------->|                             |
   encrypted w Secret  |<<-.-.-.-.-.-.-.-.-.-.-.-.-.-|ReadSecureContentFromMailbox |
   ProvInfo3 = new     |             OK              |<----------------------------|
   Provisioning Info   |                             |-.-.-.-.-.-.-.-.-.-.-.-.-.->>| Decrypt w Secret for ProvInfo3
                       |                             |        encrypted info       |
                       |                             |                             |
                       |                             |        DeleteMailbox        |
                       |                             |<----------------------------| Provision or Register credentials 
                       |                             |-.-.-.-.-.-.-.-.-.-.-.-.-.->>|
                       |                             |             OK              |
]]></artwork>
        </figure>
      </section>
      <section anchor="provisioning-information-structure" numbered="true" toc="default">
        <name>Provisioning Information Structure</name>
        <t>The Provisioning Information is the data transfered via the Relay Server between the Sender device and Receiver device. Each use case defines its own specalized Provisioning Information format, but all formats must at least adhear to the following structure. Formats are free to define new top level keys, so clients shouldn't be surprised if a message of an unexpected format has specalized top level keys.</t>
        <table align="center">
          <thead>
            <tr>
              <th align="left">Key</th>
              <th align="left">Type</th>
              <th align="left">Description</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">format</td>
              <td align="left">String</td>
              <td align="left">The Provisioning Information format that the message follows. This is used by the Sender device and Receiver device to know how to parse the message.</td>
            </tr>
            <tr>
              <td align="left">genericData</td>
              <td align="left">Dictionary</td>
              <td align="left">A dictionary of generic sharing data that can be used for cross platform credential transfers. See each format's specification for exact fields.</td>
            </tr>
          </tbody>
        </table>
        <section anchor="provisioning-information-format" numbered="true" toc="default">
          <name>Provisioning Information Format</name>
          <t>Each Provisioning Information format must have the message structure defined in an external specification.</t>
          <table align="center">
            <thead>
              <tr>
                <th align="left">Format Type</th>
                <th align="left">Spec Link</th>
                <th align="left">Description</th>
              </tr>
            </thead>
            <tbody>
              <tr>
                <td align="left">digitalwallet.carkey.ccc</td>
                <td align="left">
                  <xref target="CCC-Digital-Key-30" format="default"/></td>
                <td align="left">A digital wallet Provisioning Information for sharing a car key that follows the Car Connectivity Consortium specification.</td>
              </tr>
              <tr>
                <td align="left">digitalwallet.authorizationToken</td>
                <td align="left">
                  <xref target="ISO-18013-5" format="default"/></td>
                <td align="left">A digital wallet Provisioning Information for sharing a generic pass that relies solely on an authorization token.</td>
              </tr>
            </tbody>
          </table>
          <figure anchor="provisioning-info-format">
            <name>Provisioning Information format</name>
            <artwork name="" type="" align="left" alt=""><![CDATA[
{
    "format" : "digitalwallet.carkey.ccc",
    // Additional use case specific fields
}
]]></artwork>
          </figure>
        </section>
        <section anchor="provisioning-information-encryption" numbered="true" toc="default">
          <name>Provisioning Information Encryption</name>
          <t>Provisioning Information will be stored on the Relay Server encrypted. The Secret used to encrypt the Provisioning Information should given to the Receiver Device via a "Share URL" (a URL link to a mailbox). The encrypted payload should be a data structure having the following key-value pairs:</t>
          <ul spacing="normal">
            <li>"type" (String, Required) - the encryption algorithm and mode used.</li>
            <li>"data" (String, Required) - Base64 encoded binary value of the encrypted Provisioning Information, aka the ciphertext.</li>
          </ul>
          <t>Please refer to <xref target="RFC5116" format="default"/> for the details of the encryption algorithm.</t>
          <t>The following algorithms and modes are mandatory to implement:</t>
          <ul spacing="normal">
            <li>"AEAD_AES_128_GCM": AES symmetric encryption algorithm with key length 128 bits, in GCM mode with no padding.  Initialization Vector (IV) has the length of 96 bits randomly generated and tag length of 128 bits.</li>
            <li>"AEAD_AES_256_GCM": AES symmetric encryption algorithm with key length 256 bits, in GCM mode with no padding.  Initialization Vector (IV) has the length of 96 bits randomly generated and tag length of 128 bits.</li>
          </ul>
          <figure anchor="secure-payload-format">
            <name>Secure Payload Format example</name>
            <artwork name="" type="" align="left" alt=""><![CDATA[
{
    "type" : "AEAD_AES_128_GCM",
    "data" : "IV  ciphertext  tag"
}
]]></artwork>
          </figure>
        </section>
      </section>
      <section anchor="share-url" numbered="true" toc="default">
        <name>Share URL</name>
        <t>A "Share URL" is the url a Sender device sends to the Receiver device allowing them to retreive the Provisioning Information stored on the Relay Server. A Share URL is made up of the following fields:</t>
        <figure anchor="share-url-example">
          <name>Share URL example</name>
          <artwork name="" type="" align="left" alt=""><![CDATA[
http://{RelayServerHost}/v{ApiVersion}/m/{MailboxIdentifier}?v={CredentialVertical}#{Secret}
]]></artwork>
        </figure>
        <table align="center">
          <thead>
            <tr>
              <th align="left">Field</th>
              <th align="left">Location</th>
              <th align="left">Required</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">RelayServerHost</td>
              <td align="left">URL Host</td>
              <td align="left">Yes</td>
            </tr>
            <tr>
              <td align="left">ApiVersion</td>
              <td align="left">URI Path Parameter</td>
              <td align="left">Yes</td>
            </tr>
            <tr>
              <td align="left">MailboxIdentifier</td>
              <td align="left">URI Path Parameter</td>
              <td align="left">Yes</td>
            </tr>
            <tr>
              <td align="left">CredentialVertical</td>
              <td align="left">Query Parameter</td>
              <td align="left">No</td>
            </tr>
            <tr>
              <td align="left">Secret</td>
              <td align="left">Fragment</td>
              <td align="left">No</td>
            </tr>
          </tbody>
        </table>
        <section anchor="credential-vertical-in-share-url" numbered="true" toc="default">
          <name>Credential Vertical in Share URL</name>
          <t>When a user interacts with a share URL on a Receiver device it can be helpful to know what Credential Vertical this share is for. This is particularly important if the Receiver device has multiple applications that can handle a share URL. For example, a Receiver device might want to handle a general access share in their wallet app, but handle car key shares in a specific car application.</t>
          <t>To properly route a share URL, the sender can include the Credential Vertical in the share URL as a query parameter. The Credential Vertical can't be included in the encrypted payload because the Receiver device might need to open the right application before retrieving the secure payload. The Credential Vertical query parameter uses the "v" key and supports the below types. If no Credential Vertical is provided it will be assumed that this is a general access share URL.</t>
          <table align="center">
            <thead>
              <tr>
                <th align="left">Vertical</th>
                <th align="left">Value</th>
              </tr>
            </thead>
            <tbody>
              <tr>
                <td align="left">General Access</td>
                <td align="left">a or <em>None</em></td>
              </tr>
              <tr>
                <td align="left">Home Key</td>
                <td align="left">h</td>
              </tr>
              <tr>
                <td align="left">Car Key</td>
                <td align="left">c</td>
              </tr>
            </tbody>
          </table>
          <figure anchor="car-key-share-url-example">
            <name>Car Key Share URL example</name>
            <artwork name="" type="" align="left" alt=""><![CDATA[
http://relayserver.com/v1/m/2bba630e-519b-11ec-bf63-0242ac130002?v=c#hXlr6aRC7KgJpOLTNZaLsw==
]]></artwork>
          </figure>
          <t>The Credential Vertical query parameter can be added to the share URL by the Sender device when constructing the full share URL that is going to be sent to the Receiver device.</t>
        </section>
      </section>
    </section>
    <section anchor="api-connection-details" numbered="true" toc="default">
      <name>API connection details</name>
      <t>The Relay server API endpoint <bcp14>MUST</bcp14> be accessed over HTTP using an https URI <xref target="RFC2818" format="default"/> and <bcp14>SHOULD</bcp14> use the default https port. 
Request and response bodies <bcp14>SHALL</bcp14> be formatted as either JSON or HTML (based on the API endpoint). The communication protocol used for all interfaces <bcp14>SHALL</bcp14> be HTTPs.
All Strings <bcp14>SHOULD</bcp14> be UTF-8 encoded (Unicode Normalization Form C (NFC)).
An API version <bcp14>SHOULD</bcp14> be included in the URI for all interfaces. The version at the time of this document's latest update is v1. The version <bcp14>SHALL</bcp14> be incremented by 1 for major API changes or backward incompatible iterations on existing APIs.</t>
    </section>
    <section anchor="http-headers-mailbox-request-id" numbered="true" toc="default">
      <name>HTTP Headers: Mailbox-Request-ID</name>
      <t>All requests to and from Relay server will have an HTTP header "Mailbox-Request-ID". The corresponding response to the API will have the same HTTP header, which <bcp14>SHALL</bcp14> echo the value in the request header. This is used to identify the request associated to the response for a particular API request and response pair. The value <bcp14>SHOULD</bcp14> be a UUID <xref target="RFC4122" format="default"/>.
The request originator <bcp14>SHALL</bcp14> match the value of this header in the response with the one sent in the request. If response is not received, caller may retry sending the request with the same value of "Mailbox-Request-ID".
Relay server <bcp14>SHOULD</bcp14> store the value of the last successfully processed "Mailbox-Request-ID" for each device based on the caller's Device Claim.
A key-value pair of "Device Claim" to "Mailbox-Request-ID" is suggested to store the last successfully processed request for each device. 
In case of receiving a request with duplicated "Mailbox-Request-ID", Relay <bcp14>SHOULD</bcp14> respond to the caller with status code 201, ignoring the duplicate request body content.</t>
    </section>
    <section anchor="http-access-methods" numbered="true" toc="default">
      <name>HTTP access methods</name>
      <section anchor="createmailbox" numbered="true" toc="default">
        <name>CreateMailbox</name>
        <t>An application running on a remote device can invoke this API on Relay Server to create a mailbox and store secure data content to it (encrypted data specific to a provisioning partner). MailboxIdentifier is created by the Relay server as an UUID <xref target="RFC4122" format="default"/>, using cryptographic entropy. A URL to the created mailbox to be returned to the caller in the response.</t>
        <section anchor="endpoint" numbered="true" toc="default">
          <name>Endpoint</name>
          <t>POST  /{version}/m</t>
        </section>
        <section anchor="request-parameters" numbered="true" toc="default">
          <name>Request Parameters:</name>
          <t>Path parameters</t>
          <ul spacing="normal">
            <li>version (String, Required) - the version of the API. At the time of writing this document, "v1".</li>
          </ul>
          <t>Header parameters</t>
          <ul spacing="normal">
            <li>deviceAttestation (String, Optional) - optional remote OEM device proprietary attestation data.</li>
            <li>deviceClaim (String, UUID, Required) - Device Claim (refer to Terminology).</li>
          </ul>
        </section>
        <section anchor="consumes" numbered="true" toc="default">
          <name>Consumes</name>
          <t>This API call consumes the following media types via the Content-Type request header: <tt>application/json</tt></t>
        </section>
        <section anchor="produces" numbered="true" toc="default">
          <name>Produces</name>
          <t>This API call produces the following media types via the Content-Type response header: <tt>application/json</tt></t>
        </section>
        <section anchor="request-body" numbered="true" toc="default">
          <name>Request body</name>
          <t>Request body is a complex structure, including the following fields:</t>
          <ul spacing="normal">
            <li>
              <t>payload (Object, Required) - for the purposes of Secure Credential Transfer API, this is a data structure, describing Provisioning Information specific to Credential Provider. It consists of the following 2 key-value pairs:
              </t>
              <ol spacing="normal" type="1"><li>"type": "AEAD_AES_128_GCM" (refer to Encryption Format section).</li>
                <li>"data": BASE64-encoded binary value of ciphertext.</li>
              </ol>
            </li>
            <li>
              <t>displayInformation (String, Required) - for the purposes of the Secure Credential Transfer API, this is a JSON data blob. It allows an application running on a receiving device to build a visual representation of the credential to show to user. 
The data structure contains the following fields:
              </t>
              <ol spacing="normal" type="1"><li>title (String, Required) - the title of the credential (e.g. "Car Key")</li>
                <li>description (String, Required) - a brief description of the credential (e.g. "a key to my personal car")</li>
                <li>imageURL (String, Required) - a link to a picture representing the credential visually.</li>
              </ol>
            </li>
            <li>
              <t>notificationToken (Object, Optional) - optional notification token used to notify an appropriate remote device that the mailbox data has been updated. Data structure includes the following (if notificationToken is provided it should include both fields):
              </t>
              <ol spacing="normal" type="1"><li>type (String, Required) - notification token name. Used to define which Push Notification System to be used to notify appropriate remote device of a mailbox data update. (E.g. "com.apple.apns" for APNS)</li>
                <li>tokenData (String, Required) - notification token data (Hex or Base64 encoded based on the concrete implementation) - application-specific - refer to appropriate Push Notification System specification.</li>
              </ol>
            </li>
            <li>
              <t>mailboxConfiguration (Object, Optional) - optional mailbox configuration, defines access rights to the mailbox, mailbox expirationTime. Required at the time of the mailbox creation. OEM device may provide this data in the request, Relay server shall define a default configuration, if it is not provided in the incoming request. Data structure includes the following:
              </t>
              <ol spacing="normal" type="1"><li>accessRights (String, Optional) - optional access rights to the mailbox for Sender and  Receiver devices. Default access to the mailbox is Read and Delete. 
Value is defined as a combination of the following values: "R" - for read access, "W" - for write access, "D" - for delete access. Example" "RD" - allows to read from the mailbox and delete it.</li>
                <li>timeToLive (String, required) - Mailbox time to live in seconds. E.g. "8640" for 24 hours. Mailbox has a limited time to live. Once expired, it <bcp14>SHALL</bcp14> be deleted - refer to DeleteMailbox endpoint. Relay server <bcp14>SHOULD</bcp14> periodically check for expired mailboxes and delete them.</li>
              </ol>
            </li>
          </ul>
          <figure anchor="apple-push-token">
            <name>Apple Push Token Example</name>
            <artwork name="" type="" align="left" alt=""><![CDATA[
{
   "notificationToken": {
        "type":"com.apple.apns",
        "tokenData":"APNS1234...QW"
    }
}
]]></artwork>
          </figure>
          <figure anchor="create-mailbox-request">
            <name>Create Mailbox Request Example</name>
            <artwork name="" type="" align="left" alt=""><![CDATA[
{
    "displayInformation" : {
        "title" : "Hotel Pass",
        "description" : "Some Hotel Pass",
        "imageURL" : "https://hotel.com/sharingImage" 
    },
    "payload" : {
        "type": "AEAD_AES_128_GCM",
        "data": "FDEC...987654321"
    },
    "notificationToken" : {
        "type" : "com.apple.apns",
        "tokenData" : “APNS...1234"
    },
    "mailboxConfiguration" : {
        "accessRights" : "RWD",
        "timeToLive" : "8640”
    }
}
]]></artwork>
          </figure>
        </section>
        <section anchor="responses" numbered="true" toc="default">
          <name>Responses</name>
          <t><tt>200</tt>
Status: "200" (OK)</t>
          <t>ResponseBody:</t>
          <ul spacing="normal">
            <li>urlLink (String, Required) - a full URL link to the mailbox including fully qualified domain name and mailbox Identifier.</li>
            <li>isPushNotificationSupported (boolean, Required) - indicates whether push notification is supported or not. The device uses this field to decide whether it should listen on the push topic or do long-polling.</li>
          </ul>
          <figure anchor="create-mailbox-response">
            <name>Create Mailbox Response Example</name>
            <artwork name="" type="" align="left" alt=""><![CDATA[
{
    "urlLink":"relayserver.com/m/12345678-9...A-BCD",
    "isPushNotificationSupported":true
}
]]></artwork>
          </figure>
          <t><tt>201</tt>
Status: "201" (Created) - response to a duplicated request (duplicated "Mailbox-Request-Id"). Relay server <bcp14>SHALL</bcp14> respond to duplicated requests with 201 without creating a new mailbox. "Mailbox-Request-Id" passed in the first CreateMailbox request's header <bcp14>SHOULD</bcp14> be stored by the Relay server and compared to the same value in the subsequent requests to identify duplicated requests. If duplicate is found, Relay <bcp14>SHALL</bcp14> not create a new mailbox, but respond with 201 instead. The value of "Mailbox-Request-Id" of the last successfully completed request <bcp14>SHOULD</bcp14> be stored based on the Device Claim passed by the caller.</t>
          <t><tt>400</tt>
Bad Request - invalid request has been passed (can not parse or required fields missing).</t>
          <t><tt>401</tt>
Unauthorized - calling device is not authorized to create a mailbox. E.g. a device presented the incorrect deviceClaim or mailbox with the provided mailboxIdentifier already exists.</t>
        </section>
      </section>
      <section anchor="updatemailbox" numbered="true" toc="default">
        <name>UpdateMailbox</name>
        <t>An application running on a remote device can invoke this API on Relay Server to update secure data content in an existing mailbox (encrypted data specific to a Provisioning Partner). The update effectively overwrites the secure payload previously stored in the mailbox.</t>
        <section anchor="endpoint-1" numbered="true" toc="default">
          <name>Endpoint</name>
          <t>PUT  /{version}/m/{mailboxIdentifier}</t>
        </section>
        <section anchor="request-parameters-1" numbered="true" toc="default">
          <name>Request Parameters</name>
          <t>Path parameters:</t>
          <ul spacing="normal">
            <li>version (String, Required) - the version of the API. At the time of writing this document, "v1".</li>
            <li>mailboxIdentifier(String, Required) - MailboxIdentifier (refer to Terminology).</li>
          </ul>
          <t>Header parameters:</t>
          <ul spacing="normal">
            <li>deviceAttestation (String, Optional) - optional remote OEM device proprietary attestation data.</li>
            <li>deviceClaim (String, UUID, Required) - Device Claim (refer to Terminology).</li>
          </ul>
        </section>
        <section anchor="consumes-1" numbered="true" toc="default">
          <name>Consumes</name>
          <t>This API call consumes the following media types via the Content-Type request header: <tt>application/json</tt></t>
        </section>
        <section anchor="produces-1" numbered="true" toc="default">
          <name>Produces</name>
          <t>This API call produces a response with empty body, no content type is required</t>
        </section>
        <section anchor="request-body-1" numbered="true" toc="default">
          <name>Request body</name>
          <t>Request body is a complex structure, including the following fields:</t>
          <ul spacing="normal">
            <li>
              <t>payload (Object, Required) - for the purposes of Secure Credential Transfer API, this is a data structure, describing Provisioning Information specific to Credential Provider. It consists of the following 2 key-value pairs:
              </t>
              <ol spacing="normal" type="1"><li>"type": "AEAD_AES_128_GCM" (refer to Encryption Format section).</li>
                <li>"data": BASE64-encoded binary value of ciphertext.</li>
              </ol>
            </li>
            <li>
              <t>notificationToken (Object, Optional) - optional notification token used to notify an appropriate remote device that the mailbox data has been updated. Data structure includes the following (if notificationToken is provided it should include both fields):
              </t>
              <ol spacing="normal" type="1"><li>type (String, Required) - notification token name. Used to define which Push Notification System to be used to notify appropriate remote device of a mailbox data update. (E.g. "com.apple.apns" for APNS)</li>
                <li>tokenData (String, Required) - notification token data (Hex or Base64 encoded based on the concrete implementation) - application-specific - refer to appropriate Push Notification System specification.</li>
              </ol>
            </li>
          </ul>
          <figure anchor="update-mailbox-request">
            <name>Update Mailbox Request Example</name>
            <artwork name="" type="" align="left" alt=""><![CDATA[
{
     "payload" : {
        "type": "AEAD_AES_128_GCM",
        "data": "FDEC...987654321"
    },
    "notificationToken":{
        "type" : "com.apple.apns",
        "tokenData" : “APNS...1234"
    }
}
]]></artwork>
          </figure>
        </section>
        <section anchor="responses-1" numbered="true" toc="default">
          <name>Responses</name>
          <t>ResponseBody:</t>
          <ul spacing="normal">
            <li>isPushNotificationSupported (boolean, Required) - indicates whether push notification is supported or not. The device uses this field to decide whether it should listen on the push topic or do long-polling.</li>
          </ul>
          <figure anchor="update-mailbox-response">
            <name>Create Mailbox Response Example</name>
            <artwork name="" type="" align="left" alt=""><![CDATA[
{
    "isPushNotificationSupported":true
}
]]></artwork>
          </figure>
          <t><tt>200 </tt>
Status: "200" (OK)</t>
          <t><tt>201</tt>
Status: "201" (Created) - response to a duplicate request (duplicate "Mailbox-Request-Id"). Relay server <bcp14>SHALL</bcp14> respond to duplicate requests with 201 without performing mailbox update. "Mailbox-Request-Id" passed in the first UpdateMailbox request's header <bcp14>SHALL</bcp14> be stored by the Relay server and compared to the same value in the subsequent requests to identify duplicate requests. If duplicate is found, Relay <bcp14>SHALL</bcp14> not perform mailbox update, but respond with 201 instead.
The value of "Mailbox-Request-Id" of the last successfully completed request <bcp14>SHALL</bcp14> be stored based on the Device Claim passed by the caller.</t>
          <t><tt>400</tt>
Bad Request - invalid request has been passed (can not parse or required fields missing).</t>
          <t><tt>401</tt>
Unauthorized - calling device is not authorized to update the mailbox. E.g. a device presented the incorrect deviceClaim.</t>
          <t><tt>404</tt>
Not Found - mailbox with provided mailboxIdentifier not found.</t>
        </section>
      </section>
      <section anchor="deletemailbox" numbered="true" toc="default">
        <name>DeleteMailbox</name>
        <t>An application running on a remote device can invoke this API on Relay Server to close the existing mailbox after it served its purpose. Receiver or Sender device needs to present a deviceClaim in order to close the mailbox.</t>
        <section anchor="endpoint-2" numbered="true" toc="default">
          <name>Endpoint</name>
          <t>DELETE /{version}/m/{mailboxIdentifier}</t>
        </section>
        <section anchor="request-parameters-2" numbered="true" toc="default">
          <name>Request Parameters</name>
          <t>Path parameters:</t>
          <ul spacing="normal">
            <li>version (String, Required) - the version of the API. At the time of writing this document, "v1".</li>
            <li>mailboxIdentifier(String, Required) - MailboxIdentifier (refer to Terminology).</li>
          </ul>
          <t>Header parameters:</t>
          <ul spacing="normal">
            <li>deviceAttestation (String, Optional) - optional remote OEM device proprietary attestation data.</li>
            <li>deviceClaim (String, UUID, Required) - Device Claim (refer to Terminology).</li>
          </ul>
        </section>
        <section anchor="responses-2" numbered="true" toc="default">
          <name>Responses</name>
          <t><tt>200</tt>
Status: "200" (OK)</t>
          <t><tt>401</tt>
Unauthorized - calling device is not authorized to delete a mailbox. E.g. a device presented the incorrect deviceClaim.</t>
          <t><tt>404</tt>
Not Found - mailbox with provided mailboxIdentifier not found. Relay server may respond with 404 if the Mailbox Identifier passed by the caller is invalid or mailbox has already been deleted (as a result of duplicate DeleteMailbox request).</t>
        </section>
      </section>
      <section anchor="readdisplayinformationfrommailbox" numbered="true" toc="default">
        <name>ReadDisplayInformationFromMailbox</name>
        <t>An application running on a remote device can invoke this API on Relay Server to retrieve public display information content from a mailbox. Display Information shall be returned in OpenGraph format (please refer to https://ogp.me for details).
OpenGraph-formatted display information is required to display a preview of credential in a messaging application, e.g. iMessage or WhatsApp.</t>
        <section anchor="endpoint-3" numbered="true" toc="default">
          <name>Endpoint</name>
          <t>GET /{version}/m/{mailboxIdentifier}</t>
        </section>
        <section anchor="request-parameters-3" numbered="true" toc="default">
          <name>Request Parameters</name>
          <t>Path parameters:</t>
          <ul spacing="normal">
            <li>version (String, Required)- the version of the API. At the time of writing this document, "v1".</li>
            <li>mailboxIdentifier(String, Required) - MailboxIdentifier (refer to Terminology).</li>
          </ul>
        </section>
        <section anchor="produces-2" numbered="true" toc="default">
          <name>Produces</name>
          <t>This API call produces the following media types via the Content-Type response header: <tt>text/html</tt></t>
        </section>
        <section anchor="responses-3" numbered="true" toc="default">
          <name>Responses</name>
          <t><tt>200</tt>
Status: "200" (OK)</t>
          <t>ResponseBody :</t>
          <ul spacing="normal">
            <li>displayInformation (String, Required) - visual representation of digital credential in OpenGraph format (please refer to https://ogp.me for details).</li>
          </ul>
          <figure anchor="read-display-information-response">
            <name>Read Display Information Response Example</name>
            <artwork name="" type="" align="left" alt=""><![CDATA[
    "<html prefix="og: https://ogp.me/ns#">
     <head>
     <title>Hotel Pass</title>
     <meta property="og:title" content="Hotel Pass" />
     <meta property="og:type" content="image/jpeg" />
     <meta property="og:description" content="Some Hotel Pass" />
     <meta property="og:url" content="share://" />
     <meta property="og:image" content="https://website.com/photos/photo.jpg" />
     <meta property="og:image:width" content="612" />
     <meta property="og:image:height" content="408" /></head>
     </html>"
]]></artwork>
          </figure>
          <t><tt>404</tt>
Not Found - mailbox with provided mailboxIdentifier not found.</t>
        </section>
      </section>
      <section anchor="readsecurecontentfrommailbox" numbered="true" toc="default">
        <name>ReadSecureContentFromMailbox</name>
        <t>An application running on a remote device can invoke this API on Relay Server to retrieve secure payload content from a mailbox (encrypted data specific to a Provisioning Information Provider).</t>
        <section anchor="endpoint-4" numbered="true" toc="default">
          <name>Endpoint</name>
          <t>POST /{version}/m/{mailboxIdentifier}</t>
        </section>
        <section anchor="request-parameters-4" numbered="true" toc="default">
          <name>Request Parameters</name>
          <t>Path parameters:</t>
          <ul spacing="normal">
            <li>version (String, Required) - the version of the API. At the time of writing this document, "v1".</li>
            <li>mailboxIdentifier(String, Required) - MailboxIdentifier (refer to Terminology).</li>
          </ul>
          <t>Header parameters:</t>
          <ul spacing="normal">
            <li>deviceAttestation (String, Optional) - optional remote OEM device proprietary attestation data.</li>
            <li>deviceClaim (String, UUID, Required) - Device Claim (refer to Terminology).</li>
          </ul>
        </section>
        <section anchor="produces-3" numbered="true" toc="default">
          <name>Produces</name>
          <t>This API call produces the following media types via the Content-Type response header: <tt>application/json</tt></t>
        </section>
        <section anchor="responses-4" numbered="true" toc="default">
          <name>Responses</name>
          <t><tt>200</tt>
Status: "200" (OK)</t>
          <t>ResponseBody :</t>
          <ul spacing="normal">
            <li>payload (String, Required) - for the purposes of Secure Credential Transfer API, this is a JSON metadata blob, describing Provisioning Information specific to Credential Provider.</li>
            <li>displayInformation (String, Required) - for the purposes of the Secure Credential Transfer API, this is a JSON data blob. It allows an application running on a receiving device to build a visual representation of the credential to show to user. Specific to Credential Provider.</li>
            <li>expiration (String, Required) - the date that the mailbox will expire. The mailbox expiration is set during mailbox creation. This expiration should be a complete <xref target="RFC3339" format="default"/> date string, and can be used to allow receiving clients to show when a share will expire.</li>
          </ul>
          <figure anchor="read-secure-content-response">
            <name>Read Secure Content Response Example</name>
            <artwork name="" type="" align="left" alt=""><![CDATA[
{
    “displayInformation" : {
        "title" : "Hotel Pass",
        "description" : "Some Hotel Pass",
        "imageURL" : "https://hotel.com/sharingImage"
    },
    "payload" : {
        "type": "AEAD_AES_128_GCM",
        "data": "FDEC...987654321"
    },
    "expiration": "2021-11-03T20:32:34+0000"
}
]]></artwork>
          </figure>
          <t><tt>401</tt>
Unauthorized - calling device is not authorized to read the secure content of the mailbox. E.g. a device presented the incorrect deviceClaim.</t>
          <t><tt>404</tt>
Not Found - mailbox with provided mailboxIdentifier not found.</t>
        </section>
      </section>
      <section anchor="relinquishmailbox" numbered="true" toc="default">
        <name>RelinquishMailbox</name>
        <t>An application running on a remote device can invoke this API on Relay Server to relinquish their ownership of the mailbox. Receiver device needs to present the currently established Receiver deviceClaim in order to relinquish their ownership of the mailbox. Once relinquished, the mailbox can be bound to a different Receiver device that presents its deviceClaim in a ReadSecureContentFromMailbox call.</t>
        <section anchor="endpoint-5" numbered="true" toc="default">
          <name>Endpoint</name>
          <t>PATCH /{version}/m/{mailboxIdentifier}</t>
        </section>
        <section anchor="request-parameters-5" numbered="true" toc="default">
          <name>Request Parameters</name>
          <t>Path parameters:</t>
          <ul spacing="normal">
            <li>version (String, Required) - the version of the API. At the time of writing this document, "v1".</li>
            <li>mailboxIdentifier(String, Required) - MailboxIdentifier (refer to Terminology).</li>
          </ul>
          <t>Header parameters:</t>
          <ul spacing="normal">
            <li>deviceAttestation (String, Optional) - optional remote OEM device proprietary attestation data.</li>
            <li>deviceClaim (String, UUID, Required) - Device Claim (refer to Terminology).</li>
          </ul>
        </section>
        <section anchor="responses-5" numbered="true" toc="default">
          <name>Responses</name>
          <t><tt>200</tt>
Status: "200" (OK)</t>
          <t><tt>201</tt>
Status: "201" (Created) - response to a duplicate request (duplicate "Mailbox-Request-Id"). Relay server <bcp14>SHALL</bcp14> respond to duplicate requests with 201 without performing mailbox relinquish. "Mailbox-Request-Id" passed in the first RelinquishMailbox request's header <bcp14>SHALL</bcp14> be stored by the Relay server and compared to the same value in the subsequent requests to identify duplicate requests. If duplicate is found, Relay <bcp14>SHALL</bcp14> not perform mailbox relinquish, but respond with 201 instead.
The value of "Mailbox-Request-Id" of the last successfully completed request <bcp14>SHALL</bcp14> be stored based on the Device Claim passed by the caller.</t>
          <t><tt>401</tt>
Unauthorized - calling device is not authorized to relinquish a mailbox. E.g. a device presented the incorrect deviceClaim, or the device is not bound to the mailbox.</t>
          <t><tt>404</tt>
Not Found - mailbox with provided mailboxIdentifier not found. Relay server may respond with 404 if the Mailbox Identifier passed by the caller is invalid.</t>
        </section>
      </section>
    </section>
    <section anchor="security-considerations" numbered="true" toc="default">
      <name>Security Considerations</name>
      <t>The following threats and mitigations have been considered:</t>
      <ul spacing="normal">
        <li>
          <t>Sender shares with the wrong receiver
          </t>
          <ul spacing="normal">
            <li>Sender <bcp14>SHOULD</bcp14> be encouraged to share Secret over a channel allowing authentication of the receiver (e.g. voice).</li>
            <li>Provisioning Partners <bcp14>SHALL</bcp14> allow senders to cancel existing shares.</li>
          </ul>
        </li>
        <li>
          <t>Malicious receiver forwards the share to 3rd party without redeeming it or the Receiver's device is compromised.
          </t>
          <ul spacing="normal">
            <li>No mitigation, the Sender <bcp14>SHOULD</bcp14> only share with receivers they trust.</li>
          </ul>
        </li>
        <li>
          <t>Malicious receiver attempts re-use share
          </t>
          <ul spacing="normal">
            <li>Provisioning Partners <bcp14>SHALL</bcp14> ensure that the Provisioning Information of a share can only be redeemed once.</li>
          </ul>
        </li>
        <li>
          <t>Share URL accidental disclosure. (e.g. share URL sent as a message which gets displayed on a locked screen)
          </t>
          <ul spacing="normal">
            <li>Knowledge of Secret is required to access Provisioning Information and it <bcp14>SHOULD</bcp14> have been sent in a separate channel.</li>
            <li>Device Claim is required (if sender and receiver have already both contacted the Relay server)</li>
          </ul>
        </li>
        <li>
          <t>Network attacks
          </t>
          <ul spacing="normal">
            <li>Machine-in-the-middle:
Relay server <bcp14>SHALL</bcp14> only allow TLS connections.
URLs displayed to user <bcp14>SHOULD</bcp14> include the https scheme.</li>
            <li>MailboxIdentifier guessing:
the MailboxIdentifier is a version 4 UUID <xref target="RFC4122" format="default"/> which <bcp14>SHOULD</bcp14> contain 122-bits of cryptographic entropy, making brute-force attacks impractical</li>
          </ul>
        </li>
      </ul>
      <section anchor="senderreceiver-privacy" numbered="true" toc="default">
        <name>Sender/Receiver privacy</name>
        <ul spacing="normal">
          <li>At no time Relay server <bcp14>SHALL</bcp14> store or track the identities of both Sender and Receiver devices.</li>
          <li>The value of the Notification Token shall not contain information allowing the identification of the device providing it. It <bcp14>SHOULD</bcp14> also be different for every new share to prevent the Relay server from correlating different sharing.</li>
          <li>Notification token <bcp14>SHOULD</bcp14> only inform the corresponding device that there has been a data update on the mailbox associated to it (by Device Claim). Each device <bcp14>SHOULD</bcp14> keep track of all mailboxes associated with it and make read calls to appropriate mailboxes.</li>
          <li>Both Sender and Receiver devices <bcp14>SHOULD</bcp14> store the URL of the Relay server they use for an active act of credential transfer.</li>
          <li>The value of DeviceAttestation header parameter <bcp14>SHALL</bcp14> not contain information allowing the identification of the device providing it. It <bcp14>SHOULD</bcp14> also be different for every new share to prevent the Relay server from correlating different sharing.</li>
          <li>Display Information is not encrypted, therefore, it <bcp14>SHOULD</bcp14> not contain any information allowing to identify Sender or Receiver devices.</li>
        </ul>
      </section>
      <section anchor="credentials-confidentiality-and-integrity" numbered="true" toc="default">
        <name>Credential's confidentiality and integrity</name>
        <ul spacing="normal">
          <li>Content of the mailbox <bcp14>SHALL</bcp14> be only visible to devices having Secret.</li>
          <li>It is recommended to send URL to the mailbox and the Secret over different channels (out-of-band) from Sender device to Receiver device (e.g. send URL over SMS and Secret over iMessage).</li>
          <li>Relay server <bcp14>MUST</bcp14> not receive the Secret with the MailboxIdentifier at any time.</li>
          <li>Content of the mailbox <bcp14>MUST</bcp14> guaranty it's integrity with cryptographic checksum (e.g. MAC, AES-GCM tag).</li>
          <li>Relay server <bcp14>SHALL</bcp14> periodically check and delete expired mailboxes ( refer to timeToLive parameter in the CreateMailbox request).</li>
          <li>If the Sender device sends both URL and the Secret over the same channel as a single URL,
the Sender <bcp14>MUST</bcp14> append the Secret as URI fragment <xref target="RFC3986" format="default"/>, so that the resulting URL shall look as in the example below. Receiver device, upon receipt of such URL, <bcp14>MUST</bcp14> remove the Fragment (Secret) before calling the Relay server API.</li>
        </ul>
        <figure anchor="link-with-fragment">
          <name>Example of URL with Secret as URI Fragment</name>
          <artwork name="" type="" align="left" alt=""><![CDATA[
“http://relayserver.com/v1/m/{mailboxIdentifier}#{Secret}”
]]></artwork>
        </figure>
      </section>
      <section anchor="second-factor-authentication-for-receiver-credential-provisioning" numbered="true" toc="default">
        <name>Second factor authentication for Receiver credential provisioning</name>
        <ul spacing="normal">
          <li>Provisioning Partner shall require an additional security confirmation (PIN code) from Receiver Device at the time of credential provisioning.</li>
          <li>PIN code shall be generated by the Sender Device at the time when it creates a new Mailbox with Provisioning Information on a Relay Server.</li>
          <li>PIN code shall be sent from Sender device to Receiver device in a secure way (preferrably over encrypted channel) out-of-band with the Mailbox URL and Secret</li>
          <li>If Sender device can not send the PIN code over secure channel, it may include it into encrypted Payload stored on the relay server so that Receiver device can decrypt it and use to get Provisioning Information from Provisioning Partner.</li>
          <li>Provisioning Partner shall limit the number of PIN code entry attempts at the time when Receiver device calls it in order to receive Provisioning Information.</li>
          <li>The way PIN code is transferred between Sender device and Receiver device is defined by specific implementation and out of scope of this document.</li>
        </ul>
      </section>
    </section>
    <section anchor="iana-considerations" numbered="true" toc="default">
      <name>IANA Considerations</name>
      <t>This document registers a new header, "Mailbox-Request-ID",
in the "Permanent Message Header Field Names" &lt;<eref target="https://www.iana.org/assignments/message-headers"/>&gt;.</t>
      <figure anchor="iana-header-type-table">
        <name>Registered HTTP Header</name>
        <artwork name="" type="" align="left" alt=""><![CDATA[
    +--------------------+----------+--------+---------------+
    | Header Field Name  | Protocol | Status |   Reference   |
    +--------------------+----------+--------+---------------+
    | Mailbox-Request-ID |   http   |  std   | This document |
    +--------------------+----------+--------+---------------+
]]></artwork>
      </figure>
    </section>
  </middle>
  <back>
    <references>
      <name>References</name>
      <references>
        <name>Normative References</name>
        <reference anchor="CCC-Digital-Key-30" target="https://global-carconnectivity.org/wp-content/uploads/2021/11/CCC_Digital_Key_Whitepaper_Approved.pdf">
          <front>
            <title>Digital Key – The Future of Vehicle Access</title>
            <author>
              <organization>Car Connectivity Consortium</organization>
            </author>
            <date year="2021" month="November"/>
          </front>
        </reference>
        <reference anchor="ISO-18013-5" target="https://www.iso.org/standard/69084.html">
          <front>
            <title>Personal identification — ISO-compliant driving licence — Part 5: Mobile driving licence (mDL) application</title>
            <author>
              <organization>Cards and security devices for personal identification</organization>
            </author>
            <date year="2021" month="September"/>
          </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">
              <organization/>
            </author>
            <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">
              <organization/>
            </author>
            <date month="May" year="2017"/>
            <abstract>
              <t>RFC 2119 specifies common key words that may be used in protocol  specifications.  This document aims to reduce the ambiguity by clarifying that only UPPERCASE usage of the key words have the  defined special meanings.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="8174"/>
          <seriesInfo name="DOI" value="10.17487/RFC8174"/>
        </reference>
        <reference anchor="RFC4122">
          <front>
            <title>A Universally Unique IDentifier (UUID) URN Namespace</title>
            <author fullname="P. Leach" initials="P." surname="Leach">
              <organization/>
            </author>
            <author fullname="M. Mealling" initials="M." surname="Mealling">
              <organization/>
            </author>
            <author fullname="R. Salz" initials="R." surname="Salz">
              <organization/>
            </author>
            <date month="July" year="2005"/>
            <abstract>
              <t>This specification defines a Uniform Resource Name namespace for UUIDs (Universally Unique IDentifier), also known as GUIDs (Globally Unique IDentifier).  A UUID is 128 bits long, and can guarantee uniqueness across space and time.  UUIDs were originally used in the Apollo Network Computing System and later in the Open Software Foundation\'s (OSF) Distributed Computing Environment (DCE), and then in Microsoft Windows platforms.</t>
              <t>This specification is derived from the DCE specification with the kind permission of the OSF (now known as The Open Group).  Information from earlier versions of the DCE specification have been incorporated into this document.  [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="4122"/>
          <seriesInfo name="DOI" value="10.17487/RFC4122"/>
        </reference>
        <reference anchor="RFC5116">
          <front>
            <title>An Interface and Algorithms for Authenticated Encryption</title>
            <author fullname="D. McGrew" initials="D." surname="McGrew">
              <organization/>
            </author>
            <date month="January" year="2008"/>
            <abstract>
              <t>This document defines algorithms for Authenticated Encryption with Associated Data (AEAD), and defines a uniform interface and a registry for such algorithms.  The interface and registry can be used as an application-independent set of cryptoalgorithm suites.  This approach provides advantages in efficiency and security, and promotes the reuse of crypto implementations.  [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="5116"/>
          <seriesInfo name="DOI" value="10.17487/RFC5116"/>
        </reference>
        <reference anchor="RFC3339">
          <front>
            <title>Date and Time on the Internet: Timestamps</title>
            <author fullname="G. Klyne" initials="G." surname="Klyne">
              <organization/>
            </author>
            <author fullname="C. Newman" initials="C." surname="Newman">
              <organization/>
            </author>
            <date month="July" year="2002"/>
            <abstract>
              <t>This document defines a date and time format for use in Internet protocols that is a profile of the ISO 8601 standard for representation of dates and times using the Gregorian calendar.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="3339"/>
          <seriesInfo name="DOI" value="10.17487/RFC3339"/>
        </reference>
        <reference anchor="RFC3986">
          <front>
            <title>Uniform Resource Identifier (URI): Generic Syntax</title>
            <author fullname="T. Berners-Lee" initials="T." surname="Berners-Lee">
              <organization/>
            </author>
            <author fullname="R. Fielding" initials="R." surname="Fielding">
              <organization/>
            </author>
            <author fullname="L. Masinter" initials="L." surname="Masinter">
              <organization/>
            </author>
            <date month="January" year="2005"/>
            <abstract>
              <t>A Uniform Resource Identifier (URI) is a compact sequence of characters that identifies an abstract or physical resource.  This specification defines the generic URI syntax and a process for resolving URI references that might be in relative form, along with guidelines and security considerations for the use of URIs on the Internet.  The URI syntax defines a grammar that is a superset of all valid URIs, allowing an implementation to parse the common components of a URI reference without knowing the scheme-specific requirements of every possible identifier.  This specification does not define a generative grammar for URIs; that task is performed by the individual specifications of each URI scheme.  [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="STD" value="66"/>
          <seriesInfo name="RFC" value="3986"/>
          <seriesInfo name="DOI" value="10.17487/RFC3986"/>
        </reference>
      </references>
      <references>
        <name>Informative References</name>
        <reference anchor="RFC2818">
          <front>
            <title>HTTP Over TLS</title>
            <author fullname="E. Rescorla" initials="E." surname="Rescorla">
              <organization/>
            </author>
            <date month="May" year="2000"/>
            <abstract>
              <t>This memo describes how to use Transport Layer Security (TLS) to secure Hypertext Transfer Protocol (HTTP) connections over the Internet.  This memo provides information for the Internet community.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="2818"/>
          <seriesInfo name="DOI" value="10.17487/RFC2818"/>
        </reference>
      </references>
    </references>
    <section anchor="contributors" numbered="true" toc="default">
      <name>Contributors</name>
      <t>The following people provided substantive contributions to this document:</t>
      <ul spacing="normal">
        <li>Ben Chester</li>
        <li>Casey Astiz</li>
        <li>Jean-Luc Giraud</li>
        <li>Yogesh Karandikar</li>
        <li>Alexey Bulgakov</li>
        <li>Tommy Pauly</li>
        <li>Crystal Qin</li>
        <li>Adam Bar-Niv</li>
        <li>Manuel Gerster</li>
      </ul>
    </section>
    <section anchor="acknowledgments" numbered="true" toc="default">
      <name>Acknowledgments</name>
      <t>TODO acknowledge.</t>
    </section>
  </back>
  <!-- ##markdown-source:
H4sIAB7O2GEAA+1923YbR5LgO74iF3ow2Y0CL5LVEo/sGYqkLbYlki1S9vZ2
95ELQAIos1CFrgsptKQ+/oedx5lz5lvmU/wlG7fMyqwLSEmW7fZaPWcMVlVm
RkZExi0jI4Mg6BVREes91T/X4zLT6iDTE50UURiriyxM8qnO+r1wNMr01Q0f
TdJxEi6gq0kWTosgp0+Dsf00KOTTYPtubxwWepZmqz2VF5NeL1pme6rIyrzY
3d5+uL3bCzMd7qmL08PT3nWaXc6ytFzy3+ob+DtKZupLfNa71Cv4YLKnjpNC
Z4kugkMcvtfLizCZvAzjNAGQVjrv5YswK17+vUwLne+pJO0toz31lyIdD1Se
ZkWmpzn8Wi3wx996vbAs5mm211NBT8G/KIFGh0P1dZSkl2WWXtFTnvDhIiqy
Ve1Vms3CJPpHWERpsqf2l8tYA4xjeqcXYRQDoq5Mi38P8f1wnC688Z4N1eMV
zLVIE2e4Z2FR+M9vMdZiJA26h3qqs/G8Ns48CnPnxW0GivHrjlH2h+pMx7Eu
Ip05I+3H+lXtxS1GCl8uTZOO4U6G6nweOgOdRONL+6g2RLychyNd1EdJoEk+
D/99lqYzHgLe0Qf8/5I0W0AXVxpYRR0cHASH0SwqgN2/0qvg7vYefWWZScnA
e+ogzNRBmiR6DI2jYoV/IB9G5YI+M+tSulPQnfrh+/+rLuZafVEWuAzTqfpa
z6MxoGZ/PNZ53qeWE1hbe2p3e3cn2NnhvsJspos9NS+KZb63tTWL0xFAOA6z
sQPBEODaul4G8KyAJbtVLuM0nORb2NPWzs4WTO6lQPMSoHn5zTwq9DJc6uwl
0Ae4WE+Gy8mU59jrwcjH56fBzoPtnbvBp+vwMMkVrFVFEgMxMdFXEUxHTdNM
Qe95msD8IxIj02hM9PJQdNb+DaDrPwgEoNkyjsKkANEEMwXZEUP/yVjTF2cg
FtSnwO7pKAJM1j/ZWBw+3VTIX9JtA8nbD1uRfH19PYzylLBKwggmunX/4faD
e8N5sYgBQVEyrZin1wuCQIWjHMTkGOTXxTzKFcjUcqERcJ2Ps2gESAnVQo/n
wLj5QhWpMkJVTYRPKoGbM0Z1vFLA19daJ6q4Tg12hz0R5m6DRbhSmV5mOsdB
Q9spSFkcLFRzkJ6xytJ0MWh7PUmBZHEKiyxK6Osy16oHz1q+Be4bqkMhdTEP
CwXLrAWekQYZPqO5AuvnsI6BcXgm0RRmjpAu47BAXOZqQw9nQxWdnhNL7SeT
LI0mm3ayFl3Yc5SM43IC3SXU5SKFD66BAzW1BQ00USnwH1Ed8OVoPdtNojVw
L8A20siqCIOeVHiflNoCrpM8QlKDKDKrF59bJkiTIfPAIppMYt3r3UGdlqWT
ckwc37tIJ+FqgI2gNTBHkirDV+oapoMdClwZcvC7coTqMaqjGrYNctegfah8
dgVpsExz4tY8jUtajdQlfATvRrFewGhIAZ4gDhmq5zqGaeQ6uwLMXoNgm6sw
jtPr3IMS+tGvcAXMtIIVmq2WBaD8DORPlMM42NVxhVM742EPJac3BIB2Rbzn
QAVAAb6gKUIEXLAIk5AxohfLNAtBz6NeGKWvAPnw90wD1Y5CANU8HocJcgOY
EYikMcA2qkRamfNUyyT6O/CGaWMEFwBFC+fF86cML/xQyxTQJES5xYQjy49h
nuPoQmkDwiTKQOIDC/RSRMJVmEWwTBViNNGxWUHnz84HrAIHIHDynJHgiMF8
kyE8N1Ib9RfMQ5YL4p3AQcUAj3NACMhh4I6JfIDvAEKamMwUEV5wnxlo4op0
a6ThkxWsu0K/KtTGk4uLs02yFYwGACTNsnCxYByBgTgNUaTvnx1vssgR/gLx
kADoBMBzPdYRYsZhuAjbglhW11Exr3MqUAwsUPgBH4oMENCdpWeXJkwGVvaF
zgCoNE5nqx6hEcUiGrK56j97cX7RH/B/1ckp/X5+9KcXx8+PDvH3+ZP9p0/t
j558cf7k9MXTw+pX1fLg9Nmzo5NDbgxPlfeo13+2/2d4g1Pvn55dHJ+e7D/t
46QKD+compmvCBmgI5ALw7xniDHBNo8Pzv7nv3fuqdev/9fzLw52d3Yevn0r
fzzY+cM9+ON6rhMeLU2ACflPIPqqB8ylQ14AMUitcInSC2xysEDzeXqdKBR8
gL7f/QUx87c99Wg0Xu7c+1we4IS9hwZn3kPCWfNJozEjseVRyzAWm97zGqZ9
ePf/7P1t8O487PW+1AkwHXAO8EoOBkIgbHfObBeob/TIXZEgFkHoIqt3u2kK
WB/JaIwAdVwwGxObW+1g9VunlGnTHxstq2gTlZqSF/whQB6an1ECOlGkbTUq
aLLOgcl2qK1RkOS8nO1zFMKZnkV5gd1lLIVyao9cXa3LIePV784BkLrN+H3e
DdU0A7/AnyVioUQdGBUIdDs0DomOfUPAHwuN1ISIDhPDBsVKNCRItCiGlQJe
bUdvYMpO9XiFbkKa2JmBv2cfu8bQ0h0WCFGhauCJMxJg1L/3vFyiZTw0fNY6
CSBAWhbYeT4GA4vsfE/YNOfvTgepk2tqD2OFCtRmPEE5gbKcOckQL1UzWkSF
7sINDC3URToRGVthRmqCT1mgaIIPwcaFX6shuWPYLQp79pvWci9MslLho5Vh
GYCixoPUM9gQYJMOcECy9wqFvYKdYuwzVyCwOgb3AexFsS/XgZEv9RhdpU4q
IVFAt2I/Du5IcDPxyEAkAtIfdfp1ILyderhSJghKxc6yYjJLpzpndlE0EdQw
Pj/JDUZZEJFlQUCswBopMsCAUAQboxomN4SoE4KFEpE4WmMfDCzs0s8aWxQs
Rj2pIKyMiKG1eYpwlVe2Ny+NisVaXJApcL3aQB9Gulii/EOXFzS0/WxzeBuw
fLsGzKv4GsGpWLa09hoPBgokUedIrmkZMyi0QpzejbHu8nu7nTXP0nI2bwBR
jU7Wl8WNgeBiXgIRNDglGMgA9TUwmJiHaCECaoIiDRBDoNwYKNuTWOB1jv0a
bEpQqzFwCq6qUZaGuP4nZY6RvivzlrQDduMQhp0o1KdD9QWQT78KkRaD+nfj
tIwnNe8WfGLk9HkK0zODAGgoTJchGLJA0YxNAXac1UEcRgtiZ/EoivRSJ5Uo
5E7jmK1TcmlJxm2Jo0tLUAY3qFBHr0JyEJin6joNn9YVpphGYByGIp2aQ4lJ
vAxXGFZqDOoPZL2G0J+pa2uTn6YxIGL6+Gaum0trAGxAER2R82C0wk/AVS7y
nrnZGX0gXedV3ySDR8AA4i7y9yBbPOjqc3Lg8fE1jbK8IBzlIgUNINYjRCea
wjBoQLSP40r/gZgDBsaqJ/l4BuMnbVoGF88oheWwbm2i9T9Ky6RON7VBrMby
r0lzdJ0KED2naOqvX/uhnTC4pHE08WbMADhDwXcTlZejHAmZMCq32PbYmmiS
fMj2eYMkuJqh/xJ5Fu1+ZFn14sXxoXgp93Z2d9++HfYUrLGT1AkmXtDCIsUx
T7NCUaArmQUxsZS3+kSegrhzWKup4tnVN4hsUQoDPwjiyUWDA1BRZT5H26AC
VebcOfBA5LMIiAUqOMZdzn6fLxaf8e/jKkbhyBsncmF0FXOaXTjGArMI8eYh
8rOIFmRG2CAKxWDAEnYI9tdOYoFD3Racw50jVEl5r/cNiDo9jUB0ocNCDwne
FoW6p3aGrNJinYNT44HrWtvACYDB2BPqLE9tT0KC4HOZNP0Qx4gWwu6w0p5r
RppMIsRGfYAcKMHhQFweizIuItwnqX1jXHnSzhijyPTSD7SKDCJbmL0UMrFq
JheQr/LqfCpOUs32aRwtIqZoUi5G7MrlJfCwhWnKQBn/cY1QYNpPdAE8wQJA
tAJrzWug+2OUW7mlFe0iGHRyNBlBmaZGHWIEigwevczZXoYucecEwIeGmQ3w
+NoIralUIndiu3YZUwNrTcLzyOmPDBIGMCX03iKUR+5aPdbk6Lt9swpliSpn
jQLBb1h5Odm3WSG2NHz4zIYw49gowYmNWc7SFKBPy2xMS1Vj7Ha5UhtLCnWC
4l+Bps0m14D2YBSiTSyfbNa1uwEsr9stQYX6uoEjmLP+tCfVvY9NzLiu1o1+
EcoYhYU9+8bQVkMdo/FW5qRcq9a+nKxxDCkfH6toxcFHFM5tJ223adM7xb2o
SltwDAPJQ5YJGrq09FA7oiiFPlAxiQmiXy3Be5gMPM1t9R/rywkgmQiJbQ/p
kQHcAA0LEvq+SJ+it2wldZpMo1kpbpqoD2NfRTn9xMGxW9wNspZ3k+XUhgVA
ej/wOje9WlO4LoZouHyJgWgxQ8EXitJJRM66Gs/1+JLEnHQPzETgCH7c6SFX
iCGBKhII7I00KiP0Wi37YvQ6jpJLDk9Z42jq2v8/fP+fuDe4t7WFbshKHD+Q
LVuLrZ3du/c+vf+HBw+3f/j+vzZl/wnc+MRl95qRysYBWgHM7DS+je5bG9G3
OSjmj2IQABdzQSL/LYH/6BlF/vXmsHcWa1jSFYeY8H6/I/7fZzzjlppIcEJh
zQ4RyzwdwRcJyqlUmMPi098SGKwXHbb/FuFBuyEuNjsXH0kFdrpvlNB1QTFU
NUZJQOeyTR6KYXSLkELdyAbxbVVfWzPPVBZrm611136vW+pAn04nkKI/qbMC
HEl3545jHhkbqyfRp/pzG4lgHnUVsPJ2DvprLbi+YTiSYYD3KInyuXRqP5ex
jONb6X1R+F38914UZzJbBTHR1DS3St/ZyLKeZ93fFIMlK9yQ9FojTOwV4y4Y
N47UQ9t6R80ABhi2AaMoXlW9ATjOzjCpESZ3Xuc9FDFsAvh6gWR2y2oCHvnn
P/8pSR71fzJz7x837vxn5tTRo1JvbvnMe0+9sRKyk73mlr5qun1vDabBNz98
/x/wf0Ht3+e369GJfRlmUm8ePQqGtf/drrfWN67qEjx8QG+3fOa/p+6QMTw9
urY7T0EYzDjAGYq6r9/UiXDzv88/ylRv391zkEy8m3fAuwtfgASxjPmOwD1a
P9d3Ba7BhO7/PgcGP2SRWLEu7cdwfJyWx3vitloUEa8xfv/zUsr880XkewJ3
I6WspOHwjmwtOvL8Ryblh+D29Kv6e1IPr/fUHWsvBKjlg2gBxian9X3WPyez
ucWk6L+tbBB09FtMEPfxL8oCQRBbQ8LWFpmk1wkGyPV726Cosk02jVglOMGG
WeIb04m+vt3mIXgH6Cd4GX2c0CGw+iaQs1Uz6DaEjB1zXDB2xdXHL8yGgbiW
1N+aoCntSJmAmbFOKixKb4MK/zKU4z20xH1lcC+0CdR8UttZuB3FBk3/g724
0B+6ze3zduDoeRNadEJqvmJ9C4QidG7DmllrAtC8RWGymWSDu8FwDqfltP9X
Aent1HVFgZD3bgyocc92u9jfh3TjQ/gZuTQux6xlGd9ns9iSOD7Z2dhfOALv
eWBp1RZzr5vfDOcazhp2CoJOWhmq3JbZLGXsRFrJUyWs8F6+OIUg58I4+odu
OihdO/OJXc293u39EuP06InX48f0Unx2xCQYk9WiJWW3K4mPUzodQe9s25mw
KWYXJisKxw0ZJMLW1Hezm9yIbLfMqW2aBLOU4tYtIIgnuM7ZavO17L/1TtdN
Ptd6++mGt67r5SgO26zpf92206YHtrPW6r/BDet0wtp8sNt6Y522IDVrccdu
P/2uTrubfbROOx20N13e3nu4ZxUZu5y+n2P6a5229+10rUvwvp2+qwOHMV1c
Yriydj6M497RifsgOna6Lze0e0Gb4kK5DR/izTeKX7Opa7Cy+1HIW8+BYnJ8
HKLbmajP2g2zH4NEdZ+wm+7rF9P6ITs7XS9Lbu60LbLxwSrBhEYY+fJC/tux
Wt5z+uubvWenNyyWGzs1q8ni4C4HTx3SNOOotyHWbWOoDrFuluAVkLxKmphr
sPjNErw1frx+gh8iwe9+IIO0MuUvzhDBf61BuY+jiW8Ozb2vNlpP6o8jlb1A
HThqN8Tp3LibhOk6w1bnJtjEcbu159nmtaQmYLmrKGwkQVanUhphk5Zt1qGi
c3uYlDDGvW1OEON0SzxuhBny5Pqui73Rr4EalQWHJ+jvXC3KvEAPEHfN4cdk
jiebxAl1g4KCAsoUpoa4UTvNtObdV8pYQ/ECLiH0daUp2oZ1ClI1jiPKDs3n
mEicfFJgLkdeZssswtybaEpHhWn/Hr3OMFFlol/BnHDBMpzshVfT9EcBz/IN
HTt32eUCjwSYPw4pfMqZ8/Atr4Dq28Yf8I0MbB8DFyAmpPN1fCAtbcq1mRuj
0xxBjeQogZ982c0EiOdL3KSfS3JcmOXa7X8IQFOkKhofIgvSvCOKBONh0Ddq
X02qPwHR8jHln1FAlxgXoZaToQQfJx+meV4dr21x8nOMmWmlkU95/p9UJzcs
WjDFZFxIaIw26O+sW3jManJq9SZ0EyPPwysPJ06gmHmUorN4MukVFuGACXgw
EiPxqC7/NETROTRST9EfrL9pZbTuf6rzE34DXUjw+hpz44vhOMyA44fj8dgZ
9PXrZjmHt2+VkJxj39x+LRYtI9CRdz7/jtwgfMu5UN3FIOqorIPOJRWkjAUH
qxF0p/QCwmwn9b6gG67GNBolh+JAAOV4iFrTWQGkvwcMJ+ZIfOo16ac+d99X
e6rfRYH+gD7d2lL7VdqrFdL22BJze++tVVFuEDJAgyQwEoP11A2cjuqqt3bd
HNljQr1e50fXURyTIG456iNKyppNnOAqhln9EFGxThayzJftiHroWbKBUEGG
qn9OabAvnj/tq42wPU9t0xxjq22SmGEo7ZrEWLXuJUjt6zOgYMC52pjkxAdV
+niIDMZmQY/7LpwPuMm5y+7hqzCeAfMU8wWfvE8nLCuH2AsO39HLY+CL+/ew
o5RygyOSxAyHhFtvEyYPL9mgGEfLOZ8oB9atp71x3vmnOzv3YVWZhHeTouwP
5s2Id/4cVNk3uZ0sK/8FVnQA5qEMvghNKzxRx6jcP9o/fLl/dP5yZ/fByy8P
nvX3FPzVfpKtQiZFDFDsxDqZwU9oDEgqMJieKOiFMU1fJagAJxhGHyrADp7N
jc1q/hqEE0x44/jrTbIbKOWQe4SJP7xPfSpQXJN0AQKhSj6mFL5w5nxsIBj6
s9r99P77zwoa/3Jm5Ug8Zv+9FuKxnBPOhg+Ov1YO82FBmVnfkW9SUEvWZk24
yYnvM1m4omwl9dRsmBtJ0Ovte3JBLOwyixuZ75Jd2r655Z4yW3BaYZHRUdr1
wqtTNGJGu4ULwVqEKAOWZmVVy4el/x5jWrJqX1NX3NOTNC/ebl293l9GX4MZ
BcO+3VpsvW4cZXn7b1efva72/c2xv7d3XrNYdtCPcAWAo0CwalFvAXbQjQYP
glg3ZJ6mYra5D40wA3+rxXBRrdaM85Ca1ebOHSNQ5i872p9B0Ih3B+aAxY/z
xYvnx8BJGNQ0idb1Zs0jQTc3Q8OtiWl4/qdSg7SrGtHHJ1U84Y2f32W6+yIL
Z1SZwn3oNCNl3nakE+SDsxQoQR63RCkLmMt85ObYRm5pK/n6tQNc1qaf63iJ
zq/xJq7RQmobnPZWuduIjiBVfguexYjGZRxmIGgirDZTYM2qaNq5gWpP/Lh1
WSpfYw4yCl9W06idSG3OaBHN5gWYhgmFNG0HMylFEdKGrYGfFnCUGUsSgGBH
WJoZa5e+zvnoijXf8KUDNerHlMoGaZx9lpaFB/hANmRJNuHcTLkCOUnQRmRq
YQlIx13+Tqxmzw+w3dPWHIZgh1rGseknTSNpBO5zmbfvcjM6sUgUohMmJ8cj
6LFbumNEJ/1JgEbaWlb+kdluaGvTMrv4WvWv+kQCyo4ol8hS/IIOUNH5fqwB
MkUV2YrFvEo8p6QeNm7BBygXlJlAvjizbweXUCkjWMO2T7NUvyYDrVrklbyT
DzxpBx+Yeihc6w4+CDHC9ruTNNG/ow+e4LHpKmDxRs1d2YDiB5jOCWi8UWPv
A1eZ1I9oXO2A/tgdjcL7d7d18OnOw1Gws6PHwWh6/26wvXtvNxzv3N3e3t4F
hTK+M//fcXY/fH7wh69mf1yePr04+T/h0/z6s8+sNgH2D9Ba7tQqBtRW7XJb
PhDhBLaPtgd3qxXRGiLBejyY6MOWvjXxyzh2WhLd8YBZKmWpRrQ2iw5DgUse
4fEnU26QckTIaO41y3J556Sosg/OgYiOZgN+gpWezLm0hCvukfp5/frfsOzQ
g50HYJ7TLjAfTDfrc6KnIchMaYHLYah6z+VYER+6oeNDeNh5gt6tPSTF5guX
PFIatANA8cfz0xNkwScXz56qDT7yJlaNOwdxr/xDN7CsinScxlU0iOsmSI0q
Z2ScK9iU+/CavZ/cOW7/4uKL4IF1fTZeQP9o9p4gtNbGRWtQHaiNky8ONjeh
p4TAuxK9X3VWl3WI0SZkciRXWtfO73plQD7JVYz5XYWcLkaWudrx29tpwuAZ
uTocvNuRc1rfpcwQXEMiR3SPwvHlNRa9gybpYglzxMNeUWFLj1HRiSgn7oW2
FBJjlnmiwaDMsNwpGzCB0D44PuwRhuWIGZm8yA+U6ubXpUMZSAEx4DzqdE6d
qn6zz76hfMZ8NeG8LmExWSw4u6pTm5TldG2OejGu9HjODdnDrZ244xa1YCh6
kmyqrbyPQY6n44jcGQHGAkd0d0wSAjNrWyno6vvn6m0tiLaz2hfO+ODKzTDd
CsbiucESG8+dyRmOEhTbucrQNskUa1KQAPKxQarNfi0ldExe3cAUxuCil1jX
w6SQuTjyE1ktWK3U9o9+CSLI3anPCZxM3Bion8wRGdfWOQd6MWQrktqTNzyV
Wj0KWOq1kAxB7n7SR8K3DodmajmDJSfcUU1jHeS2sIYPLEjZ44QDeOlUKMBx
RQ/Nk5Itog4UDIyzyIiVNVXVTiFqUke4GYU1DVEW7m7vDFQ0S/jUNWkBM4wd
HaT9yqS3srai5SeGDCjTeTrJyYn2UtN6KEtdMy4rE5MDiVNbpIU5oiVG61V6
qZmlcT3ZijvntqhD/eRvldhqrEEKxJlUXCqwoZzddg7TObWdwtr5Ma7uBDqp
6cNVh4o7D4wnzSU9EEVMEGC5xeWcYjZ09Bs9erIYhEbSvVObhEpl4klXXadk
bbXzxoY6Eq3a652dgmmgtl5fWQefvzD6/MytmEOOaVVDBwNPRgV1hibNB7Ji
gWIwHV/f4QFKZitH79FR36udH77/L0wRZ9HlD808sV+gcmTOsUCcLjnkjUCk
8tuw0unRM6dAzhJchQJDnaHTD9J/aEfgA7C2b6SdP03voGx1/NopT7kpeMcd
CZhdLrU4SSdTnUZ5XgvQgHuAG7ToYNitWsmlCGgPyFdYe+pbZx1tfZenybc2
HD8px81xl/L83ccVdXDTwM9d2dDreX+Su8NnPV5VQfGBWFDNwLgNVwXWbdw4
HX0HprBPDhNRXpYZ18+lc8LrijkOHP/LD9EPzOkWKurWGYxzRIUzxBl7fRmd
yEASR2gUNcJwu82QP7pSYONx3FPCnn/FuOdfbeDTYbRqT8XELOWUDbAd9rQ7
lADpnnq8f350/17QFeZ3w/bA/lG+BNHlzrR1mbchXE4V3BLp5AQQ5kdxOiJ8
SQGKcK1uMCqw2oammgLwDghV0pqXehWhmzjubhKnVBdVCisAqci2qu3ToKII
o6S+TAxDCrXI6ewWhPy6CQFXDDC+an/TkGzibNe2dgrIAuE19T7s7D40NcMX
q6ocPDjQMt7doaJ8FFQzHYNVO17LiNFikWuLpFXDMv6x7HDgnbvgzVW7blsF
de1MCDYwFji9WglXkPRmC8Q1EqrkBlGQRE0M9Y0wrYXdqMlQHfpEFsetTuSN
aNoygVpMR/b4TDyNKjAwd2xW7IGCsxW3LfPFmxaG6oXMWnJY2IE5w1JV3hmY
8xXYlwuxA+qY6kRTOnUMJD7RImVHN46IZUA0D/lKiHBpalHsn52cWw4lUAmL
t50WDbPxRFNphPqWo2eKp+jJordrNu+oG+LEShwEVvA6ZVfcGXfiqpYPELTX
SlnPpq3FWwY2A0rsXgpT1otRDGxjqprCjEVnXOw2RiMm4FSLsXW9HFsGHTBh
Sefske/KDXxbNJ/TKS9mrtDGdWrzAf6vSqdWTM8dU/SAHXJxFm+1quyiYCQ9
ZxytN9/W4ZN40ykH0VIG61BmJ93U2kc5nRKnxpznCJqAg6uISsnPCcViGUnR
3qYuJ02ag8Z+3hfFyOWRaNCB6n9jHssVCeb5oXkuxUL4BVWRpHgldEifmLJM
bp1Adx5OxZ2osNq/qEryWBxnzko1OZ1u1SOkMJgR4BsiGCQQHty/t81iYPce
XkuBmVWmKVcJbS+fROfXbPkkYKb3qZrUFhXoKExkKhFVBYqahYjs5nK/IdzB
THptE0HFBKsLw4HzgZGC8BWKR6xCNBwO//QN33Hy1tl9pg4CrDUYsDyUODXf
zEPCitXLURWmdnbBm/YYbnm7sGJ3tA3+hK4YOQtzD1THUqCvzjHW3/6psQbo
O3MbC11cQpF8yWk6xq/6nIv7VrbixTavg+ZYsi0b+Awe26j9Lw6PDgCDDx/8
4f6n9+7u7vS9/pv0ahkJob4NyeA7cDORbDAgUs4fq00r1IZzJRgN+/ybQ28s
u/boLa4h8GkbrMFOfSADBsaxMxsZHNAwq8K4UUduagI6W+yVgZv37e729re9
c4rg0BThbxgWNNpXm+iG8YePwQ0jf6rMYkoZ7DD9aOfCzXryRKd11ziO9Xew
+zAUAisuhW/YlpFrQOoF9lDzRjkyvqukz3mTDWPxozSNdZj4AGEBuTGdeb6e
a9pEaJbvpMib6SbFElKFKYUoZ4rNGV2y09jKGqPyNH1WZl2M2ee2JjaNVaRg
BGO/k5QrmC5BBWBujLdgBa0gGLqLlQUPgfP2g8cHhmv6axDS3wPFqtexjQmL
d/CNvHYYBzhlp8YpO8Qp3JYQ7kbbQzfAaNh0Y23QcdKv15hjBeDEHpt9SvoA
QEM/sFx6dacMpXPbamFtI5qLW8RO4VrB/pFYGegTGxmvgu5+8Vk/gAcA045J
5mwHVlFts2XuVtWtdkPsBkLLfCnOXkVVKbGhTCZVvBZRhjaYjW46SOCcAYNQ
izkstq/NpveasDvgqzOibip/VNRu4sk13b1omLk+Z+XEJGGNfHsPxdPjcGJF
Ga5qLllsY1rGYZM+NjD4SzYoZZeTaSW2stQzWER0E84mDwBc/SIxubRkY+Dw
TrRATFrnk9Z62EdSqMMrfykVBdD8zbBWoBcqrGojVhsf1nBeNCLGYYy23Iq3
23KKnN9R3kGwjxAil83EtnC4yUKXzT9bh3FtfLzt9gPZs5WhnNrytP9MFnDe
kqKBOL7C65TgQ2GwRkHlWhD7RS2GvfW6gea3XXHtRlh77yeLawdNbmgdr7nL
0BllbkTK934Llf+4ofKwtnWqF8tiRRHtAWYA2U0lHNQp3fpbPPxfPB7+WyDz
t0DmLz6Q6XgfP4cnvvdj++GOq8NE7fKQ5eD77T3khg/8K/ZD38WjbKD5fTzK
bdUdfPgAh7PF3/xAd3ONtym3ULomsJErt3Y4PSu+zeGUOOhP52++u7tpbuP0
kXCDw9n7kR3OGp5+Pf6mOEeud/PuHicDcO/bHixxMHmwZnngu6Br3E+EiUgv
nqcXgP8YyVlxKonEDRcznBYi8PDrCRUREKvVKfFXbfXIwPb+aOfObccd8e6E
sIN3+ZKHR0+PLo5+8yZ/Xd7krUPj772Qzcbdz7+Mff3BibmOmIYRzHGolhtv
2gQoTthISye2RVt+Ersa8eXYLLY3QvGScb81dbWMv7knkndTBA9uwB42tric
okEfQRjJWSG0pkbQrUl58u5e9Cq2OvQVWGtnykM+3WPTMUH6nC518iWmdJp6
EBvL2olos8GWzpZDubBSjnYAcmzzoDo/0QZn7Z4Y80nI8TR97V9EK7cgtd1K
LsWJzcUlSPNvwBXN95fLhrj88ujiJ5OVv2hR+dOkWWIoYmteLOJvP2DLT7EU
v2V2X2cmnamB4fPUBzK7rcPaf4TTRN6dRq8+66ezvVrDrSS/0/+cnclHiCDz
mzyVz6tt7Udb/EReA6uFckiyWFHHsm0u6/wzd/Ncba1pRg6ubUU75lvfLfVs
bStvD942ru/Er+uhzGKnJR0oA6SsbRLxPr1tZDB5rUd5BB4Nbkku52mR5vyf
4XfL9bOgDveuo0kxd7q9v7N7i1ZzjZvlTrN72w+w2aMtl4rE5Z/3rV+KeiYQ
ng0csdfwUCmPp002t/qqP5rZvK7a3cdUXLW9k3Zl9S6bNy7KTMR2s/3cwG9G
8q/KSP4ZTwm8lxZT3tbHbTPT3zErHaWYzUz/cbY//n9NrT+/GS9VOmy3GJCA
SW1vhE5/cuYfB1ibGbYUjNXgcpWZG3Vwr8nFm9Kr793STfYyeD62dffu3Ydv
3zIsuQBKoTqnPB3KVkS1g01Tb9Dg5poLZ/CpcHcKbvwWVsEvNfXvJ838qyiD
3+5u7+4EOzvB9t2L3e29u7t7d+/9fhv+ueV+yGiQmj+iGdvtBbOeRHt2mArv
FxmwF+PVbgDxs7p/7rAfGBhRAgstn39Mo8WMgZPCk7TXCejLebRsIKNeBKQR
4yNhUwJOEryoE5UjOPD5XDeKUzaDgO8ABqUuV9/Xr3+V1W4vdcf7fKZYWpV4
qFYj07mdneuj1uAL19qQxGpNM2z/4uDJb3bYr8sOu32w8l93K61aU++wndaQ
Ub+SLbUKGf9y22rvqxKtBP6QgPlA2eKR7lhWHPv7PL/02DpVWOm4Cbpe+bKY
4wqXspcgamdStYXKn1Awfizt9YTEoOyYSRkxm5Z6naXVLVl8T5H9tkrzxcyW
MgN7j4tYkLEq5eSoklBor7+21QyR3jjxsecdmIHkVOpVClSTpKygNYXUlPBh
O5pLl9EyBM071nG1hcgTQ3H8DHA5xvTRajRYbFjrRpJNCXzo4m42oUoOKyun
0CfRJKaiwrCWUeOf5A6X4VoC1Yw1wodKwD9JHUoMxEtzEZnijdLG0gf8G/AI
LOCJrMyLjgmg2lng7WNY5yqXOdwCbTrJy8xxljpdVsqhYtjQpiFQaRcDEUJC
AStQBU4lrXA8JlEIKhOcE9xXpRLsTNiqyhXvx+ZOGXVO/pppNIDYq2GhE6o4
HV/Cb3BUgIE3ZXpfJel1rCdcf12YrrbTIUf6OieHiySyaevVEjHFbmDmGq0G
kNnCx4YlPSHojorJdHl13tASimsamU0xzJ6js+NjI8Zc8bEJ+DzRBZb6RwKH
48tchn0WjudRooMoCaBRsIgmk1jvibvUoo6JXLxELp6eOwXC8qE0AlK46BaX
3KDErQPIVb3y8RzoPrTw1CXiDBRIbg9yKlfi+bVQQmst3mtWPbElmQgKOWWv
4FVABWNpv6qlHgqenr1EIo+ystC4K4Z1VBmDmGeH1SfxUCAXbCUqbVlrHEy5
q3C8QpkINmuSssnaglSuF4NSAPq7ZCVEUysijsMQeddcQI/rxdPX2EXLtZi8
Z0gnOwQD7q6eWx/WGB81qVrZqaDAWHpRnEfwGsY5JVRWrgkdkrzCMnd0YakR
iLhPaFwrDyEUTCb9G/MBnKoriQaAFAzq927i3FzRx7OSrEi3mFct3TXTVS5O
6CZ0GtPEpot4lbewhA+oVnfJbsrtFDKAAHOp9VKIimIvtie5Mbm76pJkdFTI
ybVLzX48au28np1p2yPJH9/AFs2SVlQaddpEO6mF0tQRA2TQ8Qn8T20r19x0
QFTwWO6w4f3Ma16Se7DoX5j9cOZtmz5iEtrtjwFzGBYKHThKwZ0+XhrZjgLH
+hcC0+009WXf82rmfpLziXr5E207Ukhg2s7Q0kNJdNAaEqoMdFo/qNywSB8l
mzArSQF5uRoWOjoW5Yh1EhFCNtjMNYG1k5tUfXvum3IVakUV5moDTKMgnQYj
+H6TieHnX0G39WCHmAFmYOr6/Nm5e6kgPTM5BpsIvEd0qlnplJpzIbXma1Pl
uBeGdiOWOp+VsAYSIEeE/qOlB/fuKx46W56XC5nXs/2DAZZXD7BEehHOmtAz
5VrOpzsn0ZvH1DeqTXLnyH61VMUzbT3GSDAcT1270ys/TtrK3Ghdp7r1gK0d
j5obFXzMlYN7TreEPBB/2u8o5OqhU1NRWuLkDx/cx/JmeVpZoZwZhIxLFiKp
vzhNL7ELUyFYCrlSid2W633LJQYk8emSiAue7pxLHBN0GMQRlrEVrjcYzk1T
Jtj4qQ1xg/EsDr//8P1/rqtk2xJpsyXP8Yy3iULjqekAuSqwyJHYs4SXcQaI
CudaQoNOA74pP08VGdQ0pIL7NSdr6kojRz24tetQ2rR5DEIGMXBJ21QXh+TG
KSVBZjeszo5PqDrgpqnw6d+dUatg0gEQsq3pqEqfqq4I8AvstnRNWyj2ymBz
C/sz17Xvdns46uoUz2+FJrc76jcKPnEnKNB/Dd1uLGlJZ+FIjj06xa9lsW0q
R8A2ZJtds3JdJS1yHwyTqJybFWlnkPK16LztwKOR1ltQ6hgb/VjcJanuTAG4
zAUI/h0DmVc6RpZzffoIilyVbWynkmOPs7XX5CBu29hyuJ5dqd4IQZeUi5Gm
0px28ugtrCrXucEzTdjRtCN0uHsFrH26QDdGPtLajox3QYhJRnE1uVDt5nu0
nFozeBm32S/1zw5RSwxXoNwbp8tmzWCuvnm8f7LfEkZyvlPmvnCzakyp3NbC
oT2Rzf0zDZNPsL3JEJTQO9/WcAKKJO+rR3/524bNM7q+HkZhEg7TbLYFNnY0
S3D8fEuCAgEPnG9+7mSA/b7t7qnft/ysf/h7av6mCRU+PDM1o/HaNCpw+oac
arJ6xlhL/c2PM3oThTQSooTew/KaKL6wzSXJB49utA7iW/Aa4B5sgDtkzq6n
vSneKepMt25AL1QeGnkI7acsGpUgCRoxyKVOUXfZuCkGzPGyBVwuY9OOopJk
dzqTpIjkY1gRB3MsjZuhoRbm4Ozs50X0D/jrjzpMgqflWH0ZZWE5gSd/Tmc6
n6uv0GSbRJchttmP9Sto9LiMZ+FleoUrEcxevAWjjFfYZ7bKMT71pyjBryfh
Qj0Os+AkuqIoW1KCofMlcB1CgLXVx5cSayLehOmeHp6Ct2WegkH5/wDpLkL6
7LEAAA==

-->

</rfc>
