<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE rfc [
  <!ENTITY nbsp    "&#160;">
  <!ENTITY zwsp   "&#8203;">
  <!ENTITY nbhy   "&#8209;">
  <!ENTITY wj     "&#8288;">
]>
<?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?>
<!-- generated by https://github.com/cabo/kramdown-rfc version 1.7.19 (Ruby 3.3.3) -->
<?rfc rfcedstyle="yes"?>
<?rfc tocindent="yes"?>
<?rfc strict="yes"?>
<?rfc comments="yes"?>
<?rfc inline="yes"?>
<?rfc text-list-symbols="o-*+"?>
<?rfc compact="yes"?>
<?rfc subcompact="no"?>
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-ietf-satp-core-06" category="info" consensus="true" submissionType="IETF" tocDepth="4" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.23.2 -->
  <front>
    <title abbrev="SATP Core">Secure Asset Transfer Protocol (SATP) Core</title>
    <seriesInfo name="Internet-Draft" value="draft-ietf-satp-core-06"/>
    <author initials="M." surname="Hargreaves" fullname="Martin Hargreaves">
      <organization>Quant Network</organization>
      <address>
        <email>martin.hargreaves@quant.network</email>
      </address>
    </author>
    <author initials="T." surname="Hardjono" fullname="Thomas Hardjono">
      <organization>MIT</organization>
      <address>
        <email>hardjono@mit.edu</email>
      </address>
    </author>
    <author initials="R." surname="Belchior" fullname="Rafael Belchior">
      <organization>INESC-ID, Técnico Lisboa, Blockdaemon</organization>
      <address>
        <email>rafael.belchior@tecnico.ulisboa.pt</email>
      </address>
    </author>
    <author initials="V." surname="Ramakrishna" fullname="Venkatraman Ramakrishna">
      <organization>IBM</organization>
      <address>
        <email>vramakr2@in.ibm.com</email>
      </address>
    </author>
    <date year="2024" month="October" day="04"/>
    <area>Applications and Real-Time</area>
    <workgroup>Secure Asset Transfer Protocol</workgroup>
    <keyword>Internet-Draft</keyword>
    <abstract>
      <?line 112?>

<t>This memo describes the Secure Asset Transfer (SAT) Protocol for digital assets. SAT is a protocol operating between two gateways that conducts the transfer of a digital asset from one gateway to another, each representing their corresponding digital asset networks. The protocol establishes a secure channel between the endpoints and implements a 2-phase commit (2PC) to ensure the properties of transfer atomicity, consistency, isolation and durability.</t>
    </abstract>
    <note removeInRFC="true">
      <name>About This Document</name>
      <t>
        The latest revision of this draft can be found at <eref target="https://ietf-satp.github.io/draft-ietf-satp-core/draft-ietf-satp-core.html"/>.
        Status information for this document may be found at <eref target="https://datatracker.ietf.org/doc/draft-ietf-satp-core/"/>.
      </t>
      <t>
        Discussion of this document takes place on the
        Secure Asset Transfer Protocol Working Group mailing list (<eref target="mailto:sat@ietf.org"/>),
        which is archived at <eref target="https://mailarchive.ietf.org/arch/browse/sat/"/>.
        Subscribe at <eref target="https://www.ietf.org/mailman/listinfo/sat/"/>.
      </t>
      <t>Source for this draft and an issue tracker can be found at
        <eref target="https://github.com/ietf-satp/draft-ietf-satp-core"/>.</t>
    </note>
  </front>
  <middle>
    <?line 116?>

<section anchor="introduction">
      <name>Introduction</name>
      <t anchor="introduction-doc">This memo proposes a secure asset transfer protocol (SATP) that is intended to be deployed between two gateway endpoints to transfer a digital asset from an origin asset network to a destination asset network.
Readers are directed first to <xref target="ARCH"/> for a description of the architecture underlying the current protocol.</t>
      <t>Both the origin and destination asset networks are assumed to be opaque
in the sense that the interior construct of a given network
is not read/write accessible to unauthorized entities.</t>
      <t>The protocol utilizes the asset burn-and-mint paradigm whereby the asset
to be transferred is permanently disabled or destroyed (burned)
at the origin asset network and is re-generated (minted) at the destination asset network.
This is achieved through the coordinated actions of the peer gateways
handling the unidirectional transfer at the respective networks.</t>
      <t>A gateway is assumed to be trusted to perform the tasks involved in the asset transfer.</t>
      <t>The overall aim of the protocol is to ensure that the state of assets
in the origin and destination networks remain consistent,
and that asset movements into (out of) networks via gateways can be accounted for.</t>
      <t>There are several desirable technical properties of the protocol.
The protocol must ensure that the properties of atomicity, consistency,
isolation, and durability (ACID) are satisfied.</t>
      <t>The requirement of consistency implies that the
asset transfer protocol always leaves both asset networks
in a consistent state (that the asset is located in
one system/network only at any time).</t>
      <t>Atomicity means that the protocol must guarantee
that either the transfer commits (completes) or entirely fails,
where failure is taken to mean there is no change to the
state of the asset in the origin (sender) asset network.</t>
      <t>The property of isolation means that while a transfer
is occurring to a digital asset from an origin network,
no other state changes can occur to the asset.</t>
      <t>The property of durability means that once
the transfer has been committed by both gateways,
that this commitment must hold regardless of subsequent
unavailability (e.g. crash) of the gateways implementing the SAT protocol.</t>
      <t>All messages exchanged between gateways are assumed to run over TLS1.2,
and the endpoints at the respective gateways are associated with
a certificate indicating the legal owner (or operator) of the gateway.</t>
    </section>
    <section anchor="conventions-used-in-this-document">
      <name>Conventions used in this document</name>
      <t anchor="conventions">The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT",
"SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL"
in this document are to be interpreted as described in RFC 2119 <xref target="REQ-LEVEL"/>.</t>
      <t>In this document, these words will appear with that interpretation
only when in ALL CAPS. Lower case uses of these words are not to be
interpreted as carrying significance described in RFC 2119.</t>
    </section>
    <section anchor="terminology">
      <name>Terminology</name>
      <t anchor="terminology-doc">The following are some terminology used in the current document, some borrowed from <xref target="NIST"/>:</t>
      <ul spacing="normal">
        <li>
          <t>Digital asset: digital representation of a value or of a right that is able to be
transferred and stored electronically using distributed ledger technology or similar technology <xref target="MICA"/>.</t>
        </li>
        <li>
          <t>Asset network: A monolithic system or a set of distributed systems that manage digital assets.</t>
        </li>
        <li>
          <t>Client application: This is the application employed by a user
to interact with a gateway.</t>
        </li>
        <li>
          <t>Gateway: The computer system functionally capable of acting
as a gateway in an asset transfer.</t>
        </li>
        <li>
          <t>Sender gateway: The gateway that initiates a unidirectional asset transfer.</t>
        </li>
        <li>
          <t>Recipient gateway: The gateway that is the recipient side of
a unidirectional asset transfer.</t>
        </li>
        <li>
          <t>Claim: An assertion made by an Entity <xref target="JWT"/>.</t>
        </li>
        <li>
          <t>Claim Type: Syntax used for representing a Claim Value <xref target="JWT"/>.</t>
        </li>
        <li>
          <t>Gateway Claim: An assertion made by a Gateway regarding the status or
condition of resources (e.g. assets, public keys, etc.)
accessible to that gateway (e.g. within its asset network or system).</t>
        </li>
      </ul>
      <t>In the remainder of this document, for brevity of description the term “asset network” will often be shorted to "network".</t>
    </section>
    <section anchor="the-secure-asset-transfer-protocol">
      <name>The Secure Asset Transfer Protocol</name>
      <section anchor="satp-protocol">
        <name>Overview</name>
        <t anchor="satp-overview">The Secure Asset Transfer Protocol (SATP) is a gateway-to-gateway protocol used by a sender gateway with a recipient gateway to perform a unidirectional transfer of a digital asset.</t>
        <t>The protocol defines a number of API endpoints, resources and identifier definitions, and message flows corresponding to the asset transfer between the two gateways.</t>
        <t>The current document pertains to the interaction between gateways through API2 [SATP-ARCH].</t>
        <t><tt>
                 +----------+                +----------+
                 |  Client  |                | Off-net  |
          ------ |   (App)  |                | Resource |
          |      +----------+                +----------+
          |           |                      |   API3   |
          |           |                      +----------+
          |           |                           ^
          |           V                           |
          |      +---------+                      |
          V      |   API1  |                      |
       +-----+   +---------+----+        +----+---------+   +-----+
       |     |   |         |    |        |    |         |   |     |
       | Net.|   | Gateway |API2|        |API2| Gateway |   | Net.|
       | NW1 |---|    G1   |    |&lt;------&gt;|    |    G2   |---| NW2 |
       |     |   |         |    |        |    |         |   |     |
       +-----+   +---------+----+        +----+---------+   +-----+
</tt></t>
      </section>
      <section anchor="satp-fig-overview">
        <name>SAT Model</name>
        <t anchor="satp-model">The model for SATP is shown in Figure 1 [SATP-ARCH].
The Client (application) interacts with its local gateway (G1) over an interface (API1) in order to provide instructions to the gateway with regards to actions to assets and related resources located in the local system or network (NW1).</t>
        <t>Gateways interact with each other over a gateway interface (API2). A given gateway may be required to access resources that are not located in network NW1 or network NW2. Access to these types of resources are performed over an off-network interface (API3).</t>
      </section>
      <section anchor="stages-of-the-protocol">
        <name>Stages of the Protocol</name>
        <t anchor="satp-flowtypes">The SAT protocol defines three (3) stages for a unidirectional asset transfer. These stages occur following the transfer set-up.</t>
        <ul spacing="normal">
          <li>
            <t>Transfer Initiation stage (Stage-1):
These flows deal with commencing a transfer from one gateway to another. Several tasks are involved, including (but not limited to):
(i) gateway identification and mutual authentication;
(ii) exchange of asset type (definition) information;
(iii) verification of the asset definition, and others.</t>
          </li>
          <li>
            <t>Lock-Assertion stage (Stage-2):
These flows deal with the conveyance of signed assertions from the sender gateway to the receiver gateway
regarding the locked status of an asset at the origin asset network.</t>
          </li>
          <li>
            <t>Commitment Preparation and Finalization stage (Stage-3):
These flows deal with the asset transfer and commitment establishment between two gateways.</t>
          </li>
        </ul>
        <t>In order to clarify discussion, the interactions between the peer gateways prior to transfer initiation stage is referred to as the setup stage (Stage-0), which is outside the scope of the current specification.</t>
        <t>The Stage-1, Stage-2 and Stage-3 flows will be discussed below.</t>
      </section>
      <section anchor="gateway-cryptographic-keys">
        <name>Gateway Cryptographic Keys</name>
        <t>SATP recognizes the following cryptographic keys which are intended for distinct purposes within the different stages of the protocol.</t>
        <ul spacing="normal">
          <li>
            <t>Gateway signature public key-pair: This is the key-pair utilized by a gateway to digitally sign assertions and receipts.</t>
          </li>
          <li>
            <t>Gateway secure channel establishment public key-pair: This is the key-pair utilized by peer gateways to establish a secure channel (e.g. TLS) for a transfer session.</t>
          </li>
          <li>
            <t>Gateway device-identity public key pair: This is the key-pair that identifies the unique hardware device underlying a gateway.</t>
          </li>
          <li>
            <t>Gateway owner-identity public key pair: This is the key-pair that identifies the owner (e.g. legal entity) who is the legal owner of a gateway.</t>
          </li>
        </ul>
      </section>
    </section>
    <section anchor="satp-message-format-identifiers-and-descriptors">
      <name>SATP Message Format, identifiers and Descriptors</name>
      <section anchor="satp-messages-identifiers">
        <name>Overview</name>
        <t anchor="satp-message-identifier-overview">This section describes the SATP message-types, the format of the messages exchanged between two gateways, the format for resource descriptors and other related parameters.</t>
        <t>The mandatory fields are determined by the message type exchanged between the two gateways (see Section 7).</t>
      </section>
      <section anchor="satp-message-format-and-payloads">
        <name>SATP Message Format and Payloads</name>
        <t anchor="satp-message-format">SATP messages are exchanged between peer gateways, where depending on the message type one gateway may act as a client of the other (and vice versa).</t>
        <section anchor="protocol-version">
          <name>Protocol version</name>
          <t>This refers to SATP protocol Version, encoded as "major.minor" (separated by a period symbol).</t>
        </section>
        <section anchor="message-type">
          <name>Message Type</name>
          <t>This refers to the type of request or response to be conveyed in the message.</t>
          <t>The possible values are:</t>
          <ul spacing="normal">
            <li>
              <t>transfer-proposal-msg: This is the transfer proposal message from the sender gateway carrying the set of proposed parameters for the transfer.</t>
            </li>
            <li>
              <t>proposal-receipt-msg: This is the signed receipt message indicating acceptance of the proposal by the receiver gateway.</t>
            </li>
            <li>
              <t>proposal-reject-msg: This is an explicit reject message from the receiver gateway, indicating a rejection of the proposal and an immediate session termination.</t>
            </li>
            <li>
              <t>transfer-commence-msg: Request to begin the commencement of the asset transfer.</t>
            </li>
            <li>
              <t>ack-commence-msg: Response to accept to the commencement of the asset transfer.</t>
            </li>
            <li>
              <t>lock-assert-msg: Sender gateway has performed the lock of the asset in the origin network.</t>
            </li>
            <li>
              <t>assertion-receipt-msg: Receiver gateway acknowledges receiving of the signed lock-assert-msg.</t>
            </li>
            <li>
              <t>commit-prepare-msg: Sender gateway requests the start of the commitment stage.</t>
            </li>
            <li>
              <t>ack-prepare-msg: Receiver gateway acknowledges receiving the previous commit-prepare-msg and agrees to start the commitment stage.</t>
            </li>
            <li>
              <t>commit-final-msg: Sender gateway has performed the extinguishment (burn) of the asset in the origin network.</t>
            </li>
            <li>
              <t>ack-commit-final-msg: Receiver gateway acknowledges receiving of the signed commit-final-msg and has performed the asset creation and assignment in the destination network.</t>
            </li>
            <li>
              <t>commit-transfer-complete-msg: Sender gateway indicates closure of the current transfer session.</t>
            </li>
          </ul>
        </section>
        <section anchor="digital-asset-identifier">
          <name>Digital Asset Identifier</name>
          <t>This is the unique identifier (e.g. UUIDv4) that uniquely identifies the digital asset in the origin network which is to be transferred to the destination network.</t>
          <t>The digital asset identifier is a value that is derived by the applications utilized by the originator and the beneficiary prior to starting the asset transfer.</t>
          <t>The mechanism used to derive the digital asset identifier is outside the scope of the current document.</t>
        </section>
        <section anchor="transfer-context-id">
          <name>Transfer-Context ID:</name>
          <t>This is the unique immutable identifier (e.g. UUIDv4) representing the application layer context of a single unidirectional transfer. The method to generate the transfer-context ID is outside the scope of the current document.</t>
          <t>The transfer-context may be a complex data structure that contains all information related to a SATP execution instance. Examples of information contained in a transfer-context may include identifiers of sessions, gateways, networks or assets related to the specific SATP execution instance.</t>
        </section>
        <section anchor="session-id">
          <name>Session ID:</name>
          <t>This is the unique identifier (e.g. UUIDv4) representing a session between two gateways handling a single unidirectional transfer. This may be derived from the Transfer-Context ID at the application level. There may be several session IDs related to a SATP execution instance. Only one Session ID may be active for a given SATP execution instance. Session IDs may be stored in the transfer-context for audit trail purposes.</t>
        </section>
        <section anchor="sequence-number">
          <name>Sequence Number:</name>
          <t>This is a monotonically increasing counter value uniquely representing a message from a session. This can be utilized to assist the peer gateways when they are processing multiple simultaneous unrelated transfers.</t>
        </section>
        <section anchor="gateway-credential-type">
          <name>Gateway Credential Type</name>
          <t>This is the type of authentication mechanism supported by the gateway (e.g. SAML, OAuth, X.509)</t>
        </section>
        <section anchor="gateway-credential">
          <name>Gateway Credential</name>
          <t>This payload is the actual credential of the gateway (token, certificate, string, etc.).</t>
        </section>
        <section anchor="payload-hash">
          <name>Payload Hash</name>
          <t>This is the hash of the current message payload.</t>
        </section>
        <section anchor="signature-algorithms-supported">
          <name>Signature Algorithms Supported</name>
          <t>This is the list of digital signature algorithm supported by a gateway, with the base default being the NIST ECDSA standard.</t>
        </section>
        <section anchor="message-signature">
          <name>Message Signature</name>
          <t>This payload is the actual the ECDSA signature portion over a message.</t>
        </section>
        <section anchor="lock-assertion-claims-and-format">
          <name>Lock assertion Claims and Format</name>
          <t>This is the format of the set of claims regarding the state of the asset in the origin network.
The claims are network-dependent in the sense that different asset networks or systems may utilize a different asset locking (disablement) mechanism.</t>
        </section>
      </section>
      <section anchor="negotiation-of-security-protocols-and-parameters">
        <name>Negotiation of Security Protocols and Parameters</name>
        <t anchor="satp-negotiation-params-sec">The peer gateways in SATP must establish a TLS session between them prior to starting the transfer initiation stage (Stage-0). The TLS session continues until the transfer is completed at the end of the commitment establishment stage (Stage-3).</t>
        <t>In the following, the sender gateway is referred to as the client while the received gateway as the server.</t>
        <section anchor="tls-secure-channel-establishment">
          <name>TLS Secure Channel Establishment</name>
          <t anchor="satp-tls-Established-sec">TLS 1.2 or higher MUST be implemented to protect gateway communications. TLS 1.3 or higher SHOULD be implemented where both gateways support TLS 1.3 or higher.</t>
        </section>
        <section anchor="client-offers-supported-credential-schemes">
          <name>Client offers supported credential schemes</name>
          <t anchor="satp-client-offers-sec">The client sends a JSON block containing the supported credential schemes, such as OAuth2.0 or SAML, in the "Credential Scheme" field of the SATP message.</t>
        </section>
        <section anchor="server-selects-supported-credential-scheme">
          <name>Server selects supported credential scheme</name>
          <t anchor="satp-server-selects-sec">The server (recipient Gateway) selects one acceptable credential scheme from the offered schemes, returning the selection in the "Credential Scheme" field of the SATP message. If no acceptable credential scheme was offered, an HTTP 511 "Network Authentication Required" error is returned.</t>
        </section>
        <section anchor="client-asserts-or-proves-identity">
          <name>Client asserts or proves identity</name>
          <t anchor="client-procedure-sec">The details of the assertion/verification step are specific to the chosen credential scheme and are outside the scope of this document.</t>
        </section>
        <section anchor="sequence-numbers-initialized">
          <name>Sequence numbers initialized</name>
          <t anchor="sequence-numbers-sec">Sequence numbers are used to allow the server to correctly order operations from the client. Some operations may be asynchronous, synchronous, or idempotent with duplicate requests handled differently according to the use case. The initial sequence number is proposed by the client (sender gateway) after credential verification is finalized. The server (receiver gateway) MUST respond with the same sequence number to indicate acceptance. The client increments the sequence number with each new request. Sequence numbers can be reused for retries in the event of a gateway timeout.</t>
        </section>
        <section anchor="messages-can-now-be-exchanged">
          <name>Messages can now be exchanged</name>
          <t anchor="satp-msg-exchnge-sec">Handshaking is complete at this point, and the client can send SAT messages to perform actions on resources, which MAY reference the SAT Payload field.</t>
        </section>
      </section>
      <section anchor="asset-profile-identification">
        <name>Asset Profile Identification</name>
        <t anchor="satp-asset-profile-negotiation">The client and server must mutually agree on the asset type or profile that is the subject of the current transfer. The client provides the server with the asset identification number, or the server may provide the client with the asset identification numbers for the digital asset it supports. Formal specification of asset identification is outside the scope of this document. Globally numbering digital asset types or profiles is expected to be performed by a legally recognized entity.</t>
      </section>
    </section>
    <section anchor="overview-of-message-flows">
      <name>Overview of Message Flows</name>
      <t anchor="satp-flows-overview-section">The SATP message flows are logically divided into three (3) stages <xref target="ARCH"/>, with the preparatory stage denoted as Stage-0. How the tasks are achieved in Stage-0 is out of scope for the current specification.</t>
      <t>The Stage-1 flows pertains to the initialization of the transfer between the two gateways.</t>
      <t>After both gateways agree to commence the transfer at the start of Stage-2, the sender gateway G1 must deliver a signed assertion that it has performed the correct lock (burn) on the asset in origin network (NW1).</t>
      <t>If that assertion is accepted by gateway G2, it must in return transmit a signed receipt to gateway G1 that it has created (minted) a temporary asset in destination network (NW2).</t>
      <t>The Stage-3 flows commits gateways G1 and G2 to the burn and mint in Stage-2. The sender gateway G1 must make the lock on the asset in origin network NW1 to be permanent (burn). The receiver gateway G2 must assign (mint) the asset in the destination network NW2 to the correct beneficiary.</t>
      <t>The reader is directed to <xref target="ARCH"/> for further discussion of this model.</t>
      <t><tt>
       App1  NW1          G1                     G2          NW2    App2
      ..|.....|............|......................|............|.....|..
        |     |            |       Stage 1        |            |     |
        |     |            |                      |            |     |
        |     |       (1.1)|--Transf. Proposal --&gt;|            |     |
        |     |            |                      |            |     |
        |     |            |&lt;--Proposal Receipt---|(1.2)       |     |
        |     |            |                      |            |     |
        |     |       (1.3)|&lt;--Transf. Commence--&gt;|            |     |
        |     |            |                      |            |     |
        |     |            |&lt;--- ACK Commence ---&gt;|(1.4)       |     |
        |     |            |                      |            |     |
      ..|.....|............|......................|............|.....|..
        |     |            |       Stage 2        |            |     |
        |     |            |                      |            |     |
        |     |&lt;---Lock----|(2.1)                 |            |     |
        |     |            |                      |            |     |
        |     |       (2.2)|--- Lock-Assertion---&gt;|            |     |
        |     |            |                      |            |     |
        |     |            |                 (2.3)|----Bcast--&gt;|     |
        |     |            |                      |            |     |
        |     |            |&lt;--Assertion Receipt--|(2.4)       |     |
        |     |            |                      |            |     |
      ..|.....|............|......................|............|.....|..
        |     |            |       Stage 3        |            |     |
        |     |            |                      |            |     |
        |     |       (3.1)|----Commit Prepare---&gt;|            |     |
        |     |            |                      |            |     |
        |     |            |                 (3.2)|----Mint---&gt;|     |
        |     |            |                      |            |     |
        |     |            |&lt;--- Commit Ready ----|(3.3)       |     |
        |     |            |                      |            |     |
        |     |&lt;---Burn----|(3.4)                 |            |     |
        |     |            |                      |            |     |
        |     |       (3.5)|---- Commit Final ---&gt;|            |     |
        |     |            |                      |            |     |
        |     |            |                 (3.6)|---Assign--&gt;|     |
        |     |            |                      |            |     |
        |     |            |&lt;-----ACK Final-------|(3.7)       |     |
        |     |            |                      |            |     |
        |     |            |                      |            |     |
        |     |&lt;---Bcast---|(3.8)                 |            |     |
        |     |            |                      |            |     |
        |     |       (3.9)|--Transfer Complete--&gt;|            |     |
      ..|.....|............|......................|............|.....|..
</tt></t>
    </section>
    <section anchor="identity-and-asset-verification-stage-stage-0">
      <name>Identity and Asset Verification Stage (Stage 0)</name>
      <t anchor="satp-Stage0-section">Prior to commencing the asset transfer from the sender gateway (client) to the recipient gateway (server),
both gateways must perform a number of verifications steps.
The types of information required by both the sender and recipient are use-case dependent and asset-type dependent.</t>
      <t>The verifications include, but not limited to, the following:</t>
      <ul spacing="normal">
        <li>
          <t>Verification of the gateway signature public key: The sender gateway and receiver gateway must validate their respective signature public keys that will later be used to sign assertions and claims. This may include validating the X509 certificates of these keys.</t>
        </li>
        <li>
          <t>Gateway owner verification:
This is the verification of the identity (e.g. LEI) of the owners of the gateways.</t>
        </li>
        <li>
          <t>Gateway device and state validation:
This is the device attestation evidence <xref target="RFC9334"/>
that a gateway must collect and convey to each other,
where a verifier is assumed to be available to decode,
parse and appraise the evidence.</t>
        </li>
        <li>
          <t>Originator and beneficiary identity verification:
This is the identity and public-key of the entity (originator)
in the origin network seeking to transfer the asset to
another entity (beneficiary) in the destination network.</t>
        </li>
      </ul>
      <t>These are considered out of scope in the current specifications,
and are assumed to have been successfully completed prior to
the commencement of the transfer initiation flow.
The reader is directed to <xref target="ARCH"/> for further discussion regarding Stage-0.</t>
    </section>
    <section anchor="transfer-initiation-stage-stage-1">
      <name>Transfer Initiation Stage (Stage 1)</name>
      <t anchor="satp-stage1-section">This section describes the transfer initiation stage, where the sender gateway and the receiver gateway prepare for the start of the asset transfer.</t>
      <t>The sender gateway proposes the set of transfer parameters and asset-related artifacts for the transfer to the receiver gateway. These are contained in the Transfer Initiation Claims.</t>
      <t>If the receiver gateway accepts the proposal, it returns a signed receipt message for the proposal indicating it agrees to proceed to the next stage. If the receiver gateway rejects any parameters or artifacts in the proposal, it can provide a counteroffer to the sender gateway by responding with a proposal reject message carrying alternative parameters.</t>
      <t>Gateways MUST support the use of the HTTP GET and POST methods
defined in RFC 2616 [RFC2616] for the endpoint.</t>
      <t>Clients (sender gateway) MAY use the HTTP GET or POST methods to send messages
in this stage to the server (recipient gateway).
If using the HTTP GET method, the request parameters may be
serialized using URI Query String Serialization.</t>
      <t>(NOTE: Flows occur over TLS. Nonces are not shown).</t>
      <section anchor="transfer-initialization-claims">
        <name>Transfer Initialization Claims</name>
        <t anchor="satp-stage1-init-claims">This is set of artifacts pertaining to the asset that
must be agreed upon between the client (sender
gateway) and the server (recipient gateway).</t>
        <t>The Transfer Initialization Claims consists of the following:</t>
        <ul spacing="normal">
          <li>
            <t>digitalAssetId REQUIRED: This is the globally unique identifier for the digital asset
located in the origin network.</t>
          </li>
          <li>
            <t>assetProfileId REQUIRED: This is the globally unique identifier for the asset-profile
definition (document) on which the digital asset was issued.</t>
          </li>
          <li>
            <t>verifiedOriginatorEntityId REQUIRED: This is the identity data of the originator entity
(person or organization) in the origin network.
This information must be verified by the sender gateway.</t>
          </li>
          <li>
            <t>verifiedBeneficiaryEntityId REQUIRED: This is the identity data of the beneficiary entity
(person or organization) in the destination network.
This information must be verified by the receiver gateway.</t>
          </li>
          <li>
            <t>originatorPubkey REQUIRED. This is the public key of the asset owner (originator)
in the origin network or system.</t>
          </li>
          <li>
            <t>beneficiaryPubkey REQUIRED. This is the public key of the beneficiary
in the destination network.</t>
          </li>
          <li>
            <t>senderGatewaySignaturePublicKey REQUIRED. This is the public key of the key-pair used by the sender gateway to sign assertions and receipts.</t>
          </li>
          <li>
            <t>receiverGatewaySignaturePublicKey REQUIRED. This is the public key of the key-pair used by the recevier gateway to sign assertions and receipts.</t>
          </li>
          <li>
            <t>senderGatewayId OPTIONAL. This is the identifier of the sender gateway.</t>
          </li>
          <li>
            <t>recipientGatewayId OPTIONAL. This is the identifier of the receiver gateway.</t>
          </li>
          <li>
            <t>senderGatewayNetworkId REQUIRED. This is the identifier of the
origin network or system behind the client.</t>
          </li>
          <li>
            <t>recipientGatewayNetworkId REQUIRED. This is the identifier of the destination
network or system behind the server.</t>
          </li>
          <li>
            <t>senderGatewayDeviceIdentityPubkey OPTIONAL. The device public key of the sender gateway (client).</t>
          </li>
          <li>
            <t>receiverGatewayDeviceIdentityPubkey OPTIONAL. The device public key of the receiver gateway</t>
          </li>
          <li>
            <t>senderGatewayOwnerId OPTIONAL: This is the identity information of the owner or operator
of the sender gateway.</t>
          </li>
          <li>
            <t>receiverGatewayOwnerId OPTIONAL: This is the identity information of the owner or operator
of the recipient gateway.</t>
          </li>
        </ul>
        <t>Here is an example representation in JSON format:</t>
        <t><tt>json
{
  "digitalAssetId": "2c949e3c-5edb-4a2c-9ef4-20de64b9960d",
  "assetProfileId": "38561",
  "verifiedOriginatorEntityId": "CN=Alice, OU=Example Org Unit, O=Example, L=New York, C=US",
  "verifiedBeneficiaryEntityId": "CN=Bob, OU=Case Org Unit, O=Case, L=San Francisco, C=US",
  "originatorPubkey": "0304b9f34d3898b27f85b3d88fa069a879abe14db5060dde466dd1e4a31ff75e44",
  "beneficiaryPubkey": "02a7bc058e1c6f3a79601d046069c9b6d0cb8ea5afc99e6074a5997284756fc9ae",
  "senderGatewaySignaturePublicKey": "02a7bc058e1c6f3a79601d046069c9b6d0cb8ea5afc99e6074a5997284756fc9ae",
  "receiverGatewaySignaturePublicKey": "0243b12ada6515ada3bf99a7da32e84f00383b5765fd7701528e660449ba5ef260",
  "senderGatewayId": "GW1",
  "recipientGatewayId": "GW2",
  "senderGatewayNetworkId": "1",
  "recipientGatewayNetworkId": "43114",
  "senderGatewayDeviceIdentityPubkey": "0245785e34b4a7b457dd4683a297ea3d78bab35f8b2583df55d9df8c69604d0e73",
  "receiverGatewayDeviceIdentityPubkey": "03763f0bc48ff154cff45ea533a9d8a94349d65a45573e4de6ad6495b6e834312b",
  "senderGatewayOwnerId": "CN=GatewayOps, OU=GatewayOps Systems, O=GatewayOps LTD, L=Austin, C=US",
  "receiverGatewayOwnerId": "CN=BridgeSolutions, OU=BridgeSolutions Engineering, O=BridgeSolutions LTD, L=Austin, C=US"
}
</tt></t>
      </section>
      <section anchor="conveyance-of-gateway-and-network-capabilities">
        <name>Conveyance of Gateway and Network Capabilities</name>
        <t anchor="satp-stage1-conveyance">This is set of parameters pertaining to the origin network and the destination network, and the technical capabilities supported by the peer gateways.</t>
        <t>Some of network-specific parameters regarding the origin network may be relevant for a receiver gateways to evaluate its ability to process the proposed transfer.</t>
        <t>For example, the average duration of time of a lock to be held by a sender gateway may inform the receiver gateway about delay expectations.</t>
        <t>The network capabilities list is as follows:</t>
        <ul spacing="normal">
          <li>
            <t>gatewayDefaultSignatureAlgorithm REQUIRED: The default digital signature algorithm (algorithm-id) used by a gateway to sign claims.</t>
          </li>
          <li>
            <t>gatewaySupportedSignatureAlgorithms OPTIONAL: The list of other digital signature algorithm (algorithm-id) supported by a gateway to sign claims</t>
          </li>
          <li>
            <t>networkLockType REQUIRED: The default locking mechanism used by a network. These can be (i) timelock, (ii) hashlock, (iii) hashtimelock, and so on (TBD).</t>
          </li>
          <li>
            <t>networkLockExpirationTime REQUIRED: The duration of time (in seconds) for a lock to expire in the network.</t>
          </li>
          <li>
            <t>gatewayCredentialProfile REQUIRED: Specify type of auth (e.g., SAML, OAuth, X.509).</t>
          </li>
          <li>
            <t>gatewayLoggingProfile REQUIRED: contains the profile regarding the logging procedure. Default is local store</t>
          </li>
          <li>
            <t>gatewayAccessControlProfile REQUIRED: the profile regarding the confidentiality of the log entries being stored. Default is only the gateway that created the logs can access them.</t>
          </li>
        </ul>
        <t>Here is an example representation in JSON format:</t>
        <t><tt>json
{
  "gatewayDefaultSignatureAlgorithm": "ECDSA",
  "gatewaySupportedSignatureAlgorithms": ["ECDSA", "RSA"],
  "networkLockType": "HASH_TIME_LOCK",
  "networkLockExpirationTime": 120,
  "gatewayCredentialProfile": "OAUTH",
  "gatewayLoggingProfile": "LOCAL_STORE",
  "gatewayAccessControlProfile": "RBAC"
}
</tt></t>
      </section>
      <section anchor="transfer-proposal-message">
        <name>Transfer Proposal Message</name>
        <t anchor="satp-stage1-init-transfer-proposal">The purpose of this message is for the sender gateway as the client to initiate an asset transfer session with the receiver gateway as the server.</t>
        <t>The client transmits a proposal message that carries the claims related to the asset to be transferred. This message must be signed by the client.</t>
        <t>This message is sent from the client to the Transfer Initialization Endpoint at the server.</t>
        <t>The parameters of this message consists of the following:</t>
        <ul spacing="normal">
          <li>
            <t>version REQUIRED: SAT protocol Version (major, minor).</t>
          </li>
          <li>
            <t>messageType REQUIRED: urn:ietf:satp:msgtype:transfer-proposal-msg .</t>
          </li>
          <li>
            <t>sessionId REQUIRED: A unique identifier (e.g. UUIDv4) chosen by the
client to identify the current session.</t>
          </li>
          <li>
            <t>transferContextId REQUIRED: A unique identifier (e.g. UUIDv4) used to identify
the current transfer session at the application layer.</t>
          </li>
          <li>
            <t>transferInitClaims REQUIRED: The set of artifacts and parameters as the basis
for the current transfer.</t>
          </li>
          <li>
            <t>transferInitClaimsFormat REQUIRED: The format of the transfer initialization claims.</t>
          </li>
          <li>
            <t>networkCapabilitiesList REQUIRED: The set of origin network parameters reported by the client to the server.</t>
          </li>
          <li>
            <t>multipleClaimsAllowed OPTIONAL: true/false.</t>
          </li>
          <li>
            <t>multipleCancelsAllowed OPTIONAL: true/false.</t>
          </li>
          <li>
            <t>clientSignature REQUIRED: The client's signature over the message.</t>
          </li>
        </ul>
        <t>Here is an example of the message request body:</t>
        <t><tt>json
{
  "version": "1.0",
  "messageType": "urn:ietf:satp:msgtype:transfer-proposal-msg",
  "sessionId": "d66a567c-11f2-4729-a0e9-17ce1faf47c1",
  "transferContextId": "89e04e71-bba2-4363-933c-262f42ec07a0",
  "transferInitClaims": {
      "digitalAssetId": "2c949e3c-5edb-4a2c-9ef4-20de64b9960d",
      "assetProfileId": "38561",
      "verifiedOriginatorEntityId": "CN=Alice, OU=Example Org Unit, O=Example, L=New York, C=US",
      "verifiedBeneficiaryEntityId": "CN=Bob, OU=Case Org Unit, O=Case, L=San Francisco, C=US",
      "originatorPubkey": "0304b9f34d3898b27f85b3d88fa069a879abe14db5060dde466dd1e4a31ff75e44",
      "beneficiaryPubkey": "02a7bc058e1c6f3a79601d046069c9b6d0cb8ea5afc99e6074a5997284756fc9ae",
      "senderGatewaySignaturePublicKey": "02a7bc058e1c6f3a79601d046069c9b6d0cb8ea5afc99e6074a5997284756fc9ae",
      "receiverGatewaySignaturePublicKey": "0243b12ada6515ada3bf99a7da32e84f00383b5765fd7701528e660449ba5ef260",
      "senderGatewayId": "GW1",
      "recipientGatewayId": "GW2",
      "senderGatewayNetworkId": "1",
      "recipientGatewayNetworkId": "43114",
      "senderGatewayDeviceIdentityPubkey": "0245785e34b4a7b457dd4683a297ea3d78bab35f8b2583df55d9df8c69604d0e73",
      "receiverGatewayDeviceIdentityPubkey": "03763f0bc48ff154cff45ea533a9d8a94349d65a45573e4de6ad6495b6e834312b",
      "senderGatewayOwnerId": "CN=GatewayOps, OU=GatewayOps Systems, O=GatewayOps LTD, L=Austin, C=US",
      "receiverGatewayOwnerId": "CN=BridgeSolutions, OU=BridgeSolutions Engineering, O=BridgeSolutions LTD, L=Austin, C=US"
  },
  "transferInitClaimsFormat": "JSON",
  "networkCapabilitiesList": [], // TODO: is the network capabilities list the same as the conveyance of network capabilities, or more?
  "multipleClaimsAllowed":false,
  "multipleCancelsAllowed": false,
  "clientSignature": "428848dcc8bf7d2a9aa81a06a2a316f0b0b5e65eb7e1af9aa36a7028414b88ec584375281508254be946e32da6edbea6b4c794cd50c830753f9b134def087470de4df82000094000000004f564c2054657374204d657373616765c001a0ff92315970206155d9ffa29deb57d71b4aa51ebd9bbe1e8033df54522035303c323b869475d4e7549304f88883a"
}
</tt></t>
      </section>
      <section anchor="transfer-proposal-receipt-message">
        <name>Transfer Proposal Receipt Message</name>
        <t anchor="satp-stage1-init-receipt">The purpose of this message is for the server to indicate explicit
acceptance of the parameters in the claims part of the transfer proposal message.</t>
        <t>The message must be signed by the server.</t>
        <t>The message is sent from the server to the Transfer Proposal Endpoint at the client.</t>
        <t>The parameters of this message consists of the following:</t>
        <ul spacing="normal">
          <li>
            <t>version REQUIRED: SAT protocol Version (major, minor).</t>
          </li>
          <li>
            <t>messageType REQUIRED: urn:ietf:satp:msgtype:proposal-receipt-msg.</t>
          </li>
          <li>
            <t>sessionId REQUIRED: A unique identifier (e.g. UUIDv4) chosen by the
client to identify the current session.</t>
          </li>
          <li>
            <t>transferContextId REQUIRED: A unique identifier (e.g. UUIDv4) used to identify
the current transfer session at the application layer.</t>
          </li>
          <li>
            <t>hashTransferInitClaims REQUIRED: Hash of the Transfer Initialization Claims
received in the Transfer Proposal Message.</t>
          </li>
          <li>
            <t>timestamp REQUIRED: timestamp referring to when
the Initialization Request Message was received.</t>
          </li>
        </ul>
        <t>Here is an example of the message request body:</t>
        <t><tt>json
{
  "version": "1.0",
  "messageType": "urn:ietf:satp:msgtype:proposal-receipt-msg",
  "sessionId": "d66a567c-11f2-4729-a0e9-17ce1faf47c1",
  "transferContextId": "89e04e71-bba2-4363-933c-262f42ec07a0",
  "hashTransferInitClaims": "154dfaf0406038641e7e59509febf41d9d5d80f367db96198690151f4758ca6e",
  "timestamp": "2024-10-03T12:02+00Z"
  // TODO: shouldn't we have a signature field? Or would we solely rely on the TLS sig?
}
</tt></t>
      </section>
      <section anchor="transfer-proposal-reject-message">
        <name>Transfer Proposal Reject Message</name>
        <t anchor="satp-stage1-init-reject">The purpose of this message is for the server to indicate explicit
rejection of the Transfer Initialization Claims
in the transfer proposal message.
A reject message is taken to mean an immediate termination of the session.</t>
        <t>The message must be signed by the server.</t>
        <t>The message is sent from the server to the Transfer Proposal Endpoint at the client.</t>
        <t>The parameters of this message consists of the following:</t>
        <ul spacing="normal">
          <li>
            <t>version REQUIRED: SAT protocol Version (major, minor).</t>
          </li>
          <li>
            <t>messageType REQUIRED: urn:ietf:satp:msgtype:proposal-reject-msg.</t>
          </li>
          <li>
            <t>sessionId REQUIRED: A unique identifier (e.g. UUIDv4) chosen by the
client to identify the current session.</t>
          </li>
          <li>
            <t>transferContextId REQUIRED: A unique identifier (e.g. UUIDv4) used to identify
the current transfer session at the application layer.</t>
          </li>
          <li>
            <t>hashTransferInitClaims REQUIRED: Hash of the Transfer Initialization Claims
received in the Transfer Proposal Message.</t>
          </li>
          <li>
            <t>timestamp REQUIRED: timestamp referring to when
the Initialization Request Message was received.</t>
          </li>
        </ul>
        <t>Here is an example of the message request body:</t>
        <t><tt>json
{
  "version": "1.0",
  "messageType": "urn:ietf:satp:msgtype:proposal-reject-msg",
  "sessionId": "d66a567c-11f2-4729-a0e9-17ce1faf47c1",
  "transferContextId": "89e04e71-bba2-4363-933c-262f42ec07a0",
  "hashTransferInitClaims": "154dfaf0406038641e7e59509febf41d9d5d80f367db96198690151f4758ca6e",
  "timestamp": "2024-10-03T12:02+00Z"
  // TODO: shouldn't we have a signature field? Or would we solely rely on the TLS sig?
}
</tt></t>
      </section>
      <section anchor="transfer-commence-message">
        <name>Transfer Commence Message</name>
        <t anchor="satp-transfer-commence-sec">The purpose of this message is for the client to signal to
the server that the client is ready to start the transfer of the
digital asset. This message must be signed by the client.</t>
        <t>This message is sent by the client as a response to the Transfer Proposal Receipt Message previously
received from the server.</t>
        <t>This message is sent by the client to the Transfer Commence Endpoint at the server.</t>
        <t>The parameters of this message consists of the following:</t>
        <ul spacing="normal">
          <li>
            <t>messageType REQUIRED. MUST be the value urn:ietf:satp:msgtype:transfer-commence-msg.</t>
          </li>
          <li>
            <t>sessionId REQUIRED: A unique identifier (e.g. UUIDv4) chosen earlier
by the client in the Initialization Request Message.</t>
          </li>
          <li>
            <t>transferContextId REQUIRED: A unique identifier (e.g. UUIDv4)
used to identify the current transfer session at the application layer.</t>
          </li>
          <li>
            <t>hashTransferInitClaims REQUIRED: Hash of the Transfer Initialization Claims
in the Transfer Proposal message.</t>
          </li>
          <li>
            <t>hashPrevMessage REQUIRED. The hash of the last message, in this case the
Transfer Proposal Receipt message.</t>
          </li>
          <li>
            <t>clientSignature REQUIRED. The digital signature of the client.</t>
          </li>
        </ul>
        <t>For example, the client makes the following HTTP request using TLS:</t>
        <t><tt>json
{
    "messageType": "urn:ietf:satp:msgtype:transfer-commence-msg",
    "sessionId": "d66a567c-11f2-4729-a0e9-17ce1faf47c1",
    "transferContextId": "89e04e71-bba2-4363-933c-262f42ec07a0",
    "hashTransferInitClaims": "154dfaf0406038641e7e59509febf41d9d5d80f367db96198690151f4758ca6e",
    "hashPrevMessage": "0b0aecc2680e0d8a86bece6b54c454fba67068799484f477cdf2f87e6541db66",
    "clientSignature": "9b134def087470de4df82000094000000004f564c2508254be946e32da6edbea6b4c794cd50c830753f054657374204d657373616765c001a0ff92315970206155d9ffa29deb57d71b4aa51ebd9bbe1e8033df5452203530428848dcc8bf7d2a9aa81a04b88ec5843752813c323b869475d4e7549304f88883a6a2a316f0b0b5e65eb7e1af9aa36a702841"
}
</tt></t>
      </section>
      <section anchor="transfer-commence-sec-example">
        <name>Commence Response Message (ACK-Commence)</name>
        <t anchor="satp-transfer-commence-resp-sec">The purpose of this message is for the server to indicate agreement
to proceed with the asset transfer, based on the artifacts
found in the previous Transfer Proposal Message.</t>
        <t>This message is sent by the server to the Transfer Commence Endpoint at the client.</t>
        <t>The message must be signed by the server.</t>
        <t>The parameters of this message consist of the following:</t>
        <ul spacing="normal">
          <li>
            <t>messageType REQUIRED urn:ietf:satp:msgtype:ack-commence-msg</t>
          </li>
          <li>
            <t>sessionId REQUIRED: A unique identifier (e.g. UUIDv4) chosen earlier
by client in the Initialization Request Message.</t>
          </li>
          <li>
            <t>transferContextId REQUIRED: A unique identifier (e.g. UUIDv4)
used to identify the current transfer session at the application layer.</t>
          </li>
          <li>
            <t>hashPrevMessage REQUIRED.The hash of the last message, in this case the
the Transfer Commence Message.</t>
          </li>
          <li>
            <t>serverSignature REQUIRED. The digital signature of the server.</t>
          </li>
        </ul>
        <t>An example of a success response could be as follows: (TBD).</t>
      </section>
    </section>
    <section anchor="lock-assertion-stage-stage-2">
      <name>Lock Assertion Stage (Stage 2)</name>
      <t anchor="satp-stage2-section">The messages in this stage pertain to the sender gateway providing
the recipient gateway with a signed assertion that the asset in the origin asset network
has been locked or disabled and under the control of the sender gateway.</t>
      <t>In the following, the sender gateway takes the role of the client
while the recipient gateway takes the role of the server.</t>
      <t>The flow follows a request-response model.
The client makes a request (POST) to the Lock-Assertion Endpoint at the server.</t>
      <t>Gateways MUST support the use of the HTTP GET and POST methods
defined in RFC 2616 [RFC2616] for the endpoint.</t>
      <t>Clients MAY use the HTTP GET or POST methods to send messages in this stage to the server.
If using the HTTP GET method, the request parameters may be serialized
using URI Query String Serialization.</t>
      <t>(NOTE: Flows occur over TLS. Nonces are not shown).</t>
      <section anchor="lock-assertion-message">
        <name>Lock Assertion Message</name>
        <t anchor="satp-lock-assertion-message-sec">The purpose of this message is for the client (sender gateway) to
convey a signed claim to the server (receiver gateway) declaring that the asset in
question has been locked or escrowed by the client in the origin
network (e.g. to prevent double spending).</t>
        <t>The format of the claim is dependent on the network or system
of the client and is outside the scope of this specification.</t>
        <t>This message is sent from the client to the Lock Assertion Endpoint at the server.</t>
        <t>The server must validate the claims (payload)
in this message prior to the next step.</t>
        <t>The message must be signed by the client.</t>
        <t>The parameters of this message consists of the following:</t>
        <ul spacing="normal">
          <li>
            <t>messageType REQUIRED urn:ietf:satp:msgtype:lock-assert-msg.</t>
          </li>
          <li>
            <t>sessionId REQUIRED: A unique identifier (e.g. UUIDv4) chosen earlier
by client in the Initialization Request Message.</t>
          </li>
          <li>
            <t>transferContextId REQUIRED: A unique identifier (e.g. UUIDv4)
used to identify the current transfer session at the application layer.</t>
          </li>
          <li>
            <t>lock_assertion_claim REQUIRED. The lock assertion claim or statement by the client.</t>
          </li>
          <li>
            <t>lock_assertion_claim_format REQUIRED. The format of the claim.</t>
          </li>
          <li>
            <t>lock_assertion_expiration REQUIRED. The duration of time of the lock or escrow upon the asset.</t>
          </li>
          <li>
            <t>hashPrevMessage REQUIRED. The hash of the previous message.</t>
          </li>
          <li>
            <t>clientSignature REQUIRED. The digital signature of the client.</t>
          </li>
        </ul>
      </section>
      <section anchor="lock-assertion-receipt-message">
        <name>Lock Assertion Receipt Message</name>
        <t anchor="satp-lock-assertion-receipt-section">The purpose of this message is for the server (receiver gateway)
to indicate acceptance of the claim(s) in the lock-assertion message
delivered by the client (sender gateway) in the previous message.</t>
        <t>This message is sent from the server to the Assertion Receipt Endpoint
at the client.</t>
        <t>The message must be signed by the server.</t>
        <t>The parameters of this message consists of the following:</t>
        <ul spacing="normal">
          <li>
            <t>messageType REQUIRED urn:ietf:satp:msgtype:assertion-receipt-msg.</t>
          </li>
          <li>
            <t>sessionId REQUIRED: A unique identifier (e.g. UUIDv4) chosen earlier
by client in the Initialization Request Message.</t>
          </li>
          <li>
            <t>transferContextId REQUIRED: A unique identifier (e.g. UUIDv4)
used to identify the current transfer session at the application layer.</t>
          </li>
          <li>
            <t>hashPrevMessage REQUIRED. The hash of previous message.</t>
          </li>
          <li>
            <t>serverSignature REQUIRED. The digital signature of the server.</t>
          </li>
        </ul>
      </section>
    </section>
    <section anchor="commitment-preparation-and-finalization-stage-3">
      <name>Commitment Preparation and Finalization (Stage 3)</name>
      <t anchor="satp-phase3-sec">This section describes the transfer commitment agreement between the
client (sender gateway) and the server (receiver gateway).</t>
      <t>This stage must be completed within the time specified
in the lock_assertion_expiration value in the lock-assertion message.</t>
      <t>In the following, the sender gateway takes the role of the client
while the recipient gateway takes the role of the server.</t>
      <t>The flow follows a request-response model.
The client makes a request (POST) to the Transfer Commitment endpoint at the server.</t>
      <t>Gateways MUST support the use of the HTTP GET and POST methods
defined in RFC 2616 [RFC2616] for the endpoint.</t>
      <t>Clients MAY use the HTTP GET or POST methods to send messages in this stage to the server.
If using the HTTP GET method, the request parameters maybe serialized
using URI Query String Serialization.</t>
      <t>The client and server may be required to sign certain messages
in order to provide standalone proof (for non-repudiation) independent of the
secure channel between the client and server.
This proof maybe required for audit verifications post-event.</t>
      <t>(NOTE: Flows occur over TLS. Nonces are not shown).</t>
      <section anchor="commit-preparation-message-commit-prepare">
        <name>Commit Preparation Message (Commit-Prepare)</name>
        <t anchor="satp-commit-preparation-message-sec">The purpose of this message is for the client to indicate
its readiness to begin the commitment of the transfer.</t>
        <t>This message is sent from the client to the Commit Prepare Endpoint at the server.</t>
        <t>The message must be signed by the client.</t>
        <t>The parameters of this message consists of the following:</t>
        <ul spacing="normal">
          <li>
            <t>messageType REQUIRED. It MUST be the value urn:ietf:satp:msgtype:commit-prepare-msg</t>
          </li>
          <li>
            <t>sessionId REQUIRED: A unique identifier (e.g. UUIDv4) chosen earlier
by client in the Initialization Request Message.</t>
          </li>
          <li>
            <t>transferContextId REQUIRED: A unique identifier (e.g. UUIDv4)
used to identify the current transfer session at the application layer.</t>
          </li>
          <li>
            <t>hashPrevMessage REQUIRED. The hash of previous message.</t>
          </li>
          <li>
            <t>clientSignature REQUIRED. The digital signature of the client.</t>
          </li>
        </ul>
      </section>
      <section anchor="commit-ready-message-commit-ready">
        <name>Commit Ready Message (Commit-Ready)</name>
        <t anchor="satp-commit-ready-section">The purpose The purpose of this message is for the server to indicate to the client that:
(i) the server has created (minted) an equivalent asset in the destination
network;
(ii) that the newly minted asset has been self-assigned to the server;
and (iii) that the server is ready to proceed to the next step.</t>
        <t>This message is sent from the server to the Commit Ready Endpoint at the client.</t>
        <t>The message must be signed by the server.</t>
        <t>The parameters of this message consists of the following:</t>
        <ul spacing="normal">
          <li>
            <t>messageType REQUIRED. It MUST be the value urn:ietf:satp:msgtype:commit-ready-msg.</t>
          </li>
          <li>
            <t>sessionId REQUIRED: A unique identifier (e.g. UUIDv4) chosen earlier
by client in the Initialization Request Message.</t>
          </li>
          <li>
            <t>transferContextId REQUIRED: A unique identifier (e.g. UUIDv4)
used to identify the current transfer session at the application layer.</t>
          </li>
          <li>
            <t>mintAssertionClaims REQUIRED. The mint assertion claim or statement by the server.</t>
          </li>
          <li>
            <t>mintAssertionFormat OPTIONAL. The format of the assertion payload.</t>
          </li>
          <li>
            <t>hashPrevMessage REQUIRED. The hash of previous message.</t>
          </li>
          <li>
            <t>serverSignature REQUIRED. The digital signature of the server.</t>
          </li>
        </ul>
      </section>
      <section anchor="commit-final-assertion-message-commit-final">
        <name>Commit Final Assertion Message (Commit-Final)</name>
        <t anchor="satp-commit-final-message-section">The purpose of this message is for the client to indicate to the server
that the client (sender gateway) has completed the extinguishment (burn)
of the asset in the origin network.</t>
        <t>The message must contain standalone claims related
to the extinguishment of the asset by the client.
The standalone claim must be signed by the client.</t>
        <t>This message is sent from the client to the Commit Final Assertion Endpoint at the server.</t>
        <t>The message must be signed by the server.</t>
        <t>The parameters of this message consists of the following:</t>
        <ul spacing="normal">
          <li>
            <t>messageType REQUIRED. It MUST be the value urn:ietf:satp:msgtype:commit-final-msg.</t>
          </li>
          <li>
            <t>sessionId REQUIRED: A unique identifier (e.g. UUIDv4) chosen earlier
by client in the Initialization Request Message.</t>
          </li>
          <li>
            <t>transferContextId REQUIRED: A unique identifier (e.g. UUIDv4)
used to identify the current transfer session at the application layer.</t>
          </li>
          <li>
            <t>burnAssertionClaim REQUIRED. The burn assertion signed claim or statement by the client.</t>
          </li>
          <li>
            <t>burnAssertionClaimFormat OPTIONAL. The format of the claim.</t>
          </li>
          <li>
            <t>hashPrevMessage REQUIRED. The hash of previous message.</t>
          </li>
          <li>
            <t>clientSignature REQUIRED. The digital signature of the client.</t>
          </li>
        </ul>
      </section>
      <section anchor="commit-final-acknowledgement-receipt-message-ack-final-receipt">
        <name>Commit-Final Acknowledgement Receipt Message (ACK-Final-Receipt)</name>
        <t anchor="satp--final-ack-section">The purpose of this message is to indicate to the client that the server has
completed the assignment of the newly minted asset to
the intended beneficiary at the destination network.</t>
        <t>This message is sent from the server to the Commit Final Receipt Endpoint at the client.</t>
        <t>The message must be signed by the server.</t>
        <t>The parameters of this message consists of the following:</t>
        <ul spacing="normal">
          <li>
            <t>messageType REQUIRED. It MUST be the value urn:ietf:satp:msgtype:ack-commit-final-msg.</t>
          </li>
          <li>
            <t>sessionId REQUIRED: A unique identifier (e.g. UUIDv4) chosen earlier
by client in the Initialization Request Message.</t>
          </li>
          <li>
            <t>transferContextId REQUIRED: A unique identifier (e.g. UUIDv4)
used to identify the current transfer session at the application layer.</t>
          </li>
          <li>
            <t>assignmentAssertionClaim REQUIRED. The claim or statement by the server
that the asset has been assigned by the server to the intended beneficiary.</t>
          </li>
          <li>
            <t>assignmentAssertionClaimFormat OPTIONAL. The format of the claim.</t>
          </li>
          <li>
            <t>hashPrevMessage REQUIRED. The hash of previous message.</t>
          </li>
          <li>
            <t>serverSignature REQUIRED. The digital signature of the server.</t>
          </li>
        </ul>
      </section>
      <section anchor="transfer-complete-message">
        <name>Transfer Complete Message</name>
        <t anchor="satp-transfer-complete-message-section">The purpose of this message is for the client to indicate to the server that
the asset transer session (identified by sessionId)
has been completed and that no further messages are to be
expected from the client in regards to this transfer instance.</t>
        <t>The message closes the first message of Stage 2 (Transfer Commence Message).</t>
        <t>This message is sent from the client to the Transfer Complete Endpoint at the server.</t>
        <t>The message must be signed by the client.</t>
        <t>The parameters of this message consists of the following:</t>
        <ul spacing="normal">
          <li>
            <t>messageType REQUIRED. It MUST be the value urn:ietf:satp:msgtype:commit-transfer-complete-msg.</t>
          </li>
          <li>
            <t>sessionId REQUIRED: A unique identifier (e.g. UUIDv4) chosen earlier
by client in the Initialization Request Message.</t>
          </li>
          <li>
            <t>transferContextId REQUIRED: A unique identifier (e.g. UUIDv4)
used to identify the current transfer session at the application layer.</t>
          </li>
          <li>
            <t>hashPrevMessage REQUIRED. The hash of previous message.</t>
          </li>
          <li>
            <t>hashTransferCommence REQUIRED. The hash of the Transfer Commence message
at the start of Stage 2.</t>
          </li>
          <li>
            <t>clientSignature REQUIRED. The digital signature of the client.</t>
          </li>
        </ul>
      </section>
    </section>
    <section anchor="satp-session-resumption">
      <name>SATP Session Resumption</name>
      <t anchor="satp-session-resume-section">This section answers the question how can a backup gateway build trust
with the counter party gateway to resume the execution of the protocol,
in the presence of errors and crashes?</t>
      <t>Gateways may enter faulty state at any time while execution the protocol.
The faulty state can manifest itself by incorrect behavior,
leading to gateways emitting alerts and errors.</t>
      <t>In some instances, gateways may crash.
We employ either the primary-backup or self-healing paradigm,
meaning that the crashed gateway will eventually be replaced
by a functioning one, or recover, respectively.</t>
      <t>When a crash occurs, we initiate a recovery procedure by
the backup gateway or the recovered gateway, as defined in the
crash recovery draft <xref target="I-D.draft-belchior-satp-gateway-recovery"/>.
In either case, if the recovery happenswithin a time period defined as max_timeout (in Stage 2), the recovered gateway triggers a session resumption.
The schema and order of the recovered messages is specified in the crash recovery draft.</t>
      <t>In the case where there is no answer from the gateway within the specified max_timeout,
the counter-party gateway rollbacks the process until that stage.
Upon recovery, the crashed gateway learns that the counterparty gateway
has initated a rollback, and it proceeds accordingly (by also initating a rollback).
Note that rollbacks can also happen in case of unresolved errors.</t>
      <t>The non-crashed gateway that conducts the rollback tries to communicate
with the crashed gateway from time to time (self healing) or to contact
the backup gateways (primary-backup).
In any case, and upon the completion of a rollback,
the non-crashed gateway sends a ROLLBACK message
to the recovered gateway to notify that a rollback happened.
The recovered gateway should answer with ROLLBACK-ACK.</t>
      <t>Since the self-healing recovery process does not require
changes to the protocol (since from the counterparty gateway perspective,
the sender gateway is just taking longer than normal;
there are no new actions done or logs recorded),
we focus on the primary-backup paradigm.</t>
      <section anchor="primary-backup-session-resumption">
        <name>Primary-Backup Session Resumption</name>
        <t anchor="satp-session-resume-section-pb">Upon a gateway recovering using primary-backup,
a new gateway (recovered gateway) takes over the crashed gateway.
The counter-party gateway assures that the recovered gateway
is legitimate (according to the crash recovery specification).</t>
        <t>After the recovery, the gateways exchange information about
their current view of the protocol, since the crashed gateway
may have been in the middle of executing the protocol when it crashed.</t>
        <t>After that, the gateways agree on the current state of the protocol.</t>
      </section>
      <section anchor="recovery-messages">
        <name>Recovery Messages</name>
        <t anchor="satp-session-resume-recovery-msg">We have omitted the logging procedure (only focusing the different messages).
As defined in the crash recovery draft <xref target="I-D.draft-belchior-satp-gateway-recovery"/>,
there are a set of messages that are exchanged between the recovered
gateway and counterparty gateway:</t>
        <ul spacing="normal">
          <li>
            <t>RECOVER: when a gateway crashes and recovers,
it sends a RECOVER message to the counterparty gateway,
informing them of its most recent state.
The message contains various parameters such as the session ID,
message type, SATP stage, sequence number,
a flag indicating if the sender is a backup gateway,
the new public key if the sender is a backup,
the timestamp of the last known log entry, and the sender's digital signature.</t>
          </li>
          <li>
            <t>RECOVER-UPDATE: Upon receiving the RECOVER message,
the counterparty gateway sends a RECOVER-UPDATE message.
This message carries the difference between the log entry
corresponding to the received sequence number from the
recovered gateway and the latest sequence number
(corresponding to the latest log entry).
The message includes parameters such as the session ID, message type,
the hash of the previous message, the list of log messages that
the recovered gateway needs to update, and the sender's digital signature.</t>
          </li>
          <li>
            <t>RECOVER-SUCCESS: The recovered gateway responds with
a RECOVER-SUCCESS message if its logs have been successfully updated.
If there are inconsistencies detected,
the recovered gateway initiates a dispute with a RECOVER-DISPUTE message.
The message parameters include session ID, message type,
the hash of the previous message, a boolean indicating success,
a list of hashes of log entries that were appended to the
recovered gateway log, and the sender's digital signature.</t>
          </li>
        </ul>
        <t>In case the recovery procedure has failed and a rollback process
is needed, the following messages are used:</t>
        <ul spacing="normal">
          <li>
            <t>ROLLBACK: A gateway that initiates a rollback sends a ROLLBACK message.
The message parameters include session ID, message type,
a boolean indicating success, a list of actions performed
to rollback a state (e.g., UNLOCK, BURN), a list of proofs
specific to the DLT [SATP], and the sender's digital signature.</t>
          </li>
          <li>
            <t>ROLLBACK-ACK: Upon successful rollback, the counterparty
gateway sends a ROLLBACK-ACK message to the recovered gateway acknowledging
that the rollback has been performed successfully.
The message parameters are similar to those of the ROLLBACK message.</t>
          </li>
        </ul>
      </section>
    </section>
    <section anchor="error-messages">
      <name>Error Messages</name>
      <t anchor="satp-alert-error-messages">SATP distinguishes between
application driven closures (terminations) and
those caused by errors at the SATP protocol level.</t>
      <t>The list of errors and desciption can be found in the Appendix.</t>
      <t>```
enum { sessionClosure(1), nonfatalError (2) fatalError(3), (255) } AlertLevel;</t>
      <t>enum {
 closeNotify(0),
 badCertificate(42),
 unsupportedCertificate(43),
 certificateRevoked(44),
 certificateExpired(45),
 certificateUnknown(46),
 illegalParameter(47),
 TBD
 (255)
} AlertDescription;</t>
      <t>struct {
 AlertLevel level;
 AlertDescription description;
} Alert;
```</t>
      <section anchor="fig-error-format">
        <name>Closure Alerts</name>
        <t anchor="satp-closure-alerts-section">The SATP client and server (gateways) must share knowledge that
the transfer connection is ending in order to avoid third party attacks.</t>
        <t>(a) closeNotify: This alert notifies the recipient that the sender gateway
will not send any more messages on this transfer connection.
Any data received after a closure alert has been received MUST be ignored.</t>
        <t>(b) userCanceled: This alert notifies the recipient that the sender gateway
is canceling the transfer connection for some reason unrelated to a protocol failure.</t>
      </section>
      <section anchor="error-alerts">
        <name>Error Alerts</name>
        <t anchor="error-alerts-section">When an error is detected by a SATP gateway, the detecting gateway sends a message to its peer.</t>
        <t>Upon transmission or receipt of a fatal alert message, both gateways MUST immediately close the connection.
Whenever a SATP implementation encounters a fatal error condition,
it SHOULD send an appropriate fatal alert and
MUST close the connection without sending or receiving any additional data.</t>
        <t>The following error alerts are defined:</t>
        <ul spacing="normal">
          <li>
            <t>connectionError: There is an error in the TLS session establishment
(TLS error codes should be reported-up to gateway level)</t>
          </li>
          <li>
            <t>badCertificate: The gateway certificate was corrupt, contained signatures,
that did not verify correctly, etc.
(Some common TLS level errors: unsupported_certificate,
certificate_revoked, certificate_expired, certificate_unknown, unknown_ca).</t>
          </li>
          <li>
            <t>protocolVersionError: The SATP protocol version the peer
has attempted to negotiate is recognized but not supported.</t>
          </li>
          <li>
            <t>(Others TBD)</t>
          </li>
        </ul>
      </section>
    </section>
    <section anchor="security-consideration">
      <name>Security Consideration</name>
      <t anchor="satp-Security-Consideration">Gateways are of particular interest to attackers because
they are a kind of end-to-end pipeline that enable the transferral of
digital assets to external networks or systems.
Thus, attacking a gateway may be attractive to attackers instead of
the network behind a gateway.</t>
      <t>As such, hardware hardening technologies and
tamper-resistant crypto-processors (e.g. TPM, Secure Enclaves, SGX)
should be considered for implementations of gateways.</t>
    </section>
    <section anchor="iana-consideration">
      <name>IANA Consideration</name>
      <t anchor="satp-iana-Consideration">(TBD)</t>
    </section>
    <section anchor="appendix-error-types">
      <name>Appendix: Error Types</name>
      <t anchor="error-types-section">The following lists the error associated with each message in SATP.</t>
      <t>(Note: these have been laid out for convenience, and may be grouped together more efficiently later).</t>
      <section anchor="transfer-commence-and-response-errors">
        <name>Transfer Commence and Response errors</name>
        <t anchor="errors-transfer-commence">The following are the list of errors related to Transfer Commence and Response:</t>
        <ul spacing="normal">
          <li>
            <t>err_2.1: Badly formed message.</t>
          </li>
          <li>
            <t>err_2.2: Incorrect parameter.</t>
          </li>
          <li>
            <t>err_2.3: ACK mismatch.</t>
          </li>
        </ul>
      </section>
      <section anchor="lock-assertion-errors">
        <name>Lock Assertion errors</name>
        <t anchor="errors-lock-assertion">The following are the list of errors related to Lock Assertion:</t>
        <ul spacing="normal">
          <li>
            <t>err_2.4.1: Badly formed message: badly formed Claim.</t>
          </li>
          <li>
            <t>err_2.4.2: Badly formed message: bad signature.</t>
          </li>
          <li>
            <t>err_2.4.3: Badly formed message: wrong transaction ID.</t>
          </li>
          <li>
            <t>err_2.4.4: Badly formed message: Mismatch hash values.</t>
          </li>
          <li>
            <t>err_2.4.5: Expired signing-key certificate.</t>
          </li>
          <li>
            <t>err_2.4.6: Expired Claim.</t>
          </li>
        </ul>
      </section>
      <section anchor="lock-assertion-receipt-errors">
        <name>Lock Assertion Receipt errors</name>
        <t anchor="errors-lock-assertion-receipt">The following are the list of errors related to Lock Assertion Receipt:</t>
        <ul spacing="normal">
          <li>
            <t>err_2.6.1: Badly formed message: badly formed Claim.</t>
          </li>
          <li>
            <t>err_2.6.2: Badly formed message: bad signature.</t>
          </li>
          <li>
            <t>err_2.6.3: Badly formed message: wrong transaction ID.</t>
          </li>
          <li>
            <t>err_2.6.4: Badly formed message: Mismatch hash values.</t>
          </li>
          <li>
            <t>err_2.6.5: Expired signing-key certificate.</t>
          </li>
          <li>
            <t>err_2.6.6: Expired Claim.</t>
          </li>
        </ul>
      </section>
      <section anchor="commit-preparation-errors">
        <name>Commit Preparation errors</name>
        <t anchor="errors-commit-prepare">The following are the list of errors related to Commit Preparation:</t>
        <ul spacing="normal">
          <li>
            <t>err_3.1.1: Badly formed message: wrong transaction ID.</t>
          </li>
          <li>
            <t>err_3.1.2: Badly formed message: mismatch hash value (i.e. from msg 2.6).</t>
          </li>
          <li>
            <t>err_3.1.3: Incorrect parameter.</t>
          </li>
          <li>
            <t>err_3.1.4: Message out of sequence.</t>
          </li>
        </ul>
      </section>
      <section anchor="commit-preparation-acknowledgement-errors">
        <name>Commit Preparation Acknowledgement errors</name>
        <t anchor="errors-commit-prepare-ack">The following are the list of errors related to Commit Preparation Acknowledgement:</t>
        <ul spacing="normal">
          <li>
            <t>err_3.2.1: Badly formed message: wrong transaction ID.</t>
          </li>
          <li>
            <t>err_3.2.2: Badly formed message: mismatch hash value.</t>
          </li>
          <li>
            <t>err_3.2.3: Incorrect parameter.</t>
          </li>
          <li>
            <t>err_3.2.4: Message out of sequence.</t>
          </li>
        </ul>
      </section>
      <section anchor="commit-ready-errors">
        <name>Commit Ready errors</name>
        <t anchor="errors-commit-ready">The following are the list of errors related to Commit Ready:</t>
        <ul spacing="normal">
          <li>
            <t>err_3.4.1: Badly formed message: wrong transaction ID.</t>
          </li>
          <li>
            <t>err_3.4.2: Badly formed message: mismatch hash value.</t>
          </li>
          <li>
            <t>err_3.4.3: Incorrect parameter.</t>
          </li>
          <li>
            <t>err_3.4.4: Message out of sequence (ACK mismatch).</t>
          </li>
        </ul>
      </section>
      <section anchor="commit-final-assertion-errors">
        <name>Commit Final Assertion errors</name>
        <t anchor="errors-commit-final-assertion">The following are the list of errors related to Commit Final Assertion:</t>
        <ul spacing="normal">
          <li>
            <t>err_3.6.1: Badly formed message: badly formed Claim.</t>
          </li>
          <li>
            <t>err_3.6.2: Badly formed message: bad signature.</t>
          </li>
          <li>
            <t>err_3.6.3: Badly formed message: wrong transaction ID.</t>
          </li>
          <li>
            <t>err_3.6.4: Badly formed message: Mismatch hash values.</t>
          </li>
          <li>
            <t>err_3.6.5: Expired signing-key certificate.</t>
          </li>
          <li>
            <t>err_3.6.6: Expired Claim.</t>
          </li>
        </ul>
      </section>
    </section>
  </middle>
  <back>
    <references anchor="sec-combined-references">
      <name>References</name>
      <references anchor="sec-normative-references">
        <name>Normative References</name>
        <reference anchor="JWT">
          <front>
            <title>JSON Web Token (JWT)</title>
            <author fullname="M. Jones" initials="M." surname="Jones"/>
            <author fullname="J. Bradley" initials="J." surname="Bradley"/>
            <author fullname="N. Sakimura" initials="N." surname="Sakimura"/>
            <date month="May" year="2015"/>
            <abstract>
              <t>JSON Web Token (JWT) is a compact, URL-safe means of representing claims to be transferred between two parties. The claims in a JWT are encoded as a JSON object that is used as the payload of a JSON Web Signature (JWS) structure or as the plaintext of a JSON Web Encryption (JWE) structure, enabling the claims to be digitally signed or integrity protected with a Message Authentication Code (MAC) and/or encrypted.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7519"/>
          <seriesInfo name="DOI" value="10.17487/RFC7519"/>
        </reference>
        <reference anchor="REQ-LEVEL">
          <front>
            <title>Key words for use in RFCs to Indicate Requirement Levels</title>
            <author fullname="S. Bradner" initials="S." surname="Bradner"/>
            <date month="March" year="1997"/>
            <abstract>
              <t>In many standards track documents several words are used to signify the requirements in the specification. These words are often capitalized. This document defines these words as they should be interpreted in IETF documents. This document specifies an Internet Best Current Practices for the Internet Community, and requests discussion and suggestions for improvements.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="2119"/>
          <seriesInfo name="DOI" value="10.17487/RFC2119"/>
        </reference>
      </references>
      <references anchor="sec-informative-references">
        <name>Informative References</name>
        <reference anchor="NIST" target="https://doi.org/10.6028/NIST.IR.8202">
          <front>
            <title>NIST Blockchain Technology Overview (NISTR-8202)</title>
            <author initials="D." surname="Yaga">
              <organization/>
            </author>
            <author initials="P." surname="Mell">
              <organization/>
            </author>
            <author initials="N." surname="Roby">
              <organization/>
            </author>
            <author initials="K." surname="Scarfone">
              <organization/>
            </author>
            <date year="2018" month="October"/>
          </front>
        </reference>
        <reference anchor="MICA" target="https://www.esma.europa.eu/esmas-activities/digital-finance-and-innovation/markets-crypto-assets-regulation-mica">
          <front>
            <title>EU Directive on Markets in Crypto-Assets Regulation (MiCA)</title>
            <author initials="" surname="European Commission">
              <organization/>
            </author>
            <date year="2023" month="June"/>
          </front>
        </reference>
        <reference anchor="ARCH" target="https://datatracker.ietf.org/doc/draft-ietf-satp-architecture/">
          <front>
            <title>Secure Asset Transfer (SAT) Interoperability Architecture</title>
            <author initials="T." surname="Hardjono">
              <organization/>
            </author>
            <author initials="M." surname="Hargreaves">
              <organization/>
            </author>
            <author initials="N." surname="Smith">
              <organization/>
            </author>
            <author initials="V." surname="Ramakrishna">
              <organization/>
            </author>
            <date year="2024" month="June"/>
          </front>
        </reference>
        <reference anchor="RFC5939" target="https://www.rfc-editor.org/info/rfc5939">
          <front>
            <title>Session Description Protocol (SDP) Capability Negotiation</title>
            <author initials="F." surname="Andreasen">
              <organization/>
            </author>
            <date year="2010" month="September"/>
          </front>
        </reference>
        <reference anchor="RFC9334" target="https://www.rfc-editor.org/info/rfc9334">
          <front>
            <title>Remote Attestation Procedures Architecture (RATS)</title>
            <author initials="H." surname="Birkholz">
              <organization/>
            </author>
            <author initials="D." surname="Thaler">
              <organization/>
            </author>
            <author initials="M." surname="Richardson">
              <organization/>
            </author>
            <author initials="N." surname="Smith">
              <organization/>
            </author>
            <author initials="W." surname="Pan">
              <organization/>
            </author>
            <date year="2023" month="January"/>
          </front>
        </reference>
        <reference anchor="I-D.draft-belchior-satp-gateway-recovery">
          <front>
            <title>Secure Asset Transfer Protocol (SATP) Gateway Crash Recovery Mechanism</title>
            <author fullname="Rafael Belchior" initials="R." surname="Belchior">
              <organization>INESC-ID, Técnico Lisboa, Blockdaemon</organization>
            </author>
            <author fullname="Miguel Correia" initials="M." surname="Correia">
              <organization>INESC-ID, Técnico Lisboa</organization>
            </author>
            <author fullname="Andre Augusto" initials="A." surname="Augusto">
              <organization>INESC-ID, Técnico Lisboa</organization>
            </author>
            <author fullname="Thomas Hardjono" initials="T." surname="Hardjono">
              <organization>MIT</organization>
            </author>
            <date day="22" month="July" year="2024"/>
            <abstract>
              <t>   This memo describes the crash recovery mechanism for the Secure Asset
   Transfer Protocol (SATP).  The goal of this draft is to specify the
   message flow that implements a crash recovery mechanism.  The
   mechanism assures that gateways running SATP are able to recover
   faults, enforcing ACID properties for asset transfers across ledgers
   (i.e., double spend does not occur).

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-belchior-satp-gateway-recovery-02"/>
        </reference>
      </references>
    </references>
  </back>
  <!-- ##markdown-source:
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
5X04tPN5A4sOw5Cik63/B95mgbWK8QAA

-->

</rfc>
