<?xml version="1.0" encoding="UTF-8"?>
  <?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?>
  <!-- generated by https://github.com/cabo/kramdown-rfc2629 version 1.2.12 -->

<!DOCTYPE rfc SYSTEM "rfc2629.dtd" [
]>

<?rfc toc="yes"?>
<?rfc sortrefs="yes"?>
<?rfc symrefs="yes"?>

<rfc ipr="trust200902" docName="draft-olteanu-intarea-socks-6-08" category="exp">

  <front>
    <title abbrev="SOCKS 6">SOCKS Protocol Version 6</title>

    <author initials="V." surname="Olteanu" fullname="Vladimir Olteanu">
      <organization>University Politehnica of Bucharest</organization>
      <address>
        <postal>
          <street>313 Splaiul Independentei, Sector 6</street>
          <city>Bucharest</city>
          <country>Romania</country>
        </postal>
        <email>vladimir.olteanu@cs.pub.ro</email>
      </address>
    </author>
    <author initials="D." surname="Niculescu" fullname="Dragos Niculescu">
      <organization>University Politehnica of Bucharest</organization>
      <address>
        <postal>
          <street>313 Splaiul Independentei, Sector 6</street>
          <city>Bucharest</city>
          <country>Romania</country>
        </postal>
        <email>dragos.niculescu@cs.pub.ro</email>
      </address>
    </author>

    <date year="2019" month="November" day="04"/>

    <area>Internet</area>
    <workgroup>Internet Area Working Group</workgroup>
    <keyword>Internet-Draft</keyword>

    <abstract>


<t>The SOCKS protocol is used primarily to proxy TCP connections to
arbitrary destinations via the use of a proxy server. Under the
latest version of the protocol (version 5), it takes 2 RTTs (or 3, if
authentication is used) before data can flow between the client and
the server.</t>

<t>This memo proposes SOCKS version 6, which reduces the number of RTTs
used, takes full advantage of TCP Fast Open, and adds support for
0-RTT authentication.</t>



    </abstract>


  </front>

  <middle>


<section anchor="intro" title="Introduction">

<t>Versions 4 and 5 <xref target="RFC1928"/> of the SOCKS protocol were developed
two decades ago and are in widespread use for
circuit level gateways or as circumvention tools, and enjoy wide support and usage
from various software, such as web browsers, SSH clients, and
proxifiers. However, their design needs an update in order to
take advantage of the new features of transport protocols, such as TCP
Fast Open <xref target="RFC7413"/>, or to better assist newer transport protocols, such
as MPTCP <xref target="RFC6824"/>.</t>

<t>One of the main issues faced by SOCKS version 5 is that, when taking into account 
the TCP handshake, method negotiation, authentication, connection request and grant, 
it may take up to 5 RTTs for a data exchange to take place at the 
application layer. This is especially costly in networks with a large 
delay at the access layer, such as 3G, 4G, or satelite.</t>

<t>The desire to reduce the number of RTTs manifests itself in
the design of newer security protocols. TLS version 1.3
<xref target="RFC8446"/> defines a zero round trip (0-RTT) handshake mode
for connections if the client and server had previously communicated.</t>

<t>TCP Fast Open <xref target="RFC7413"/> is a TCP option that allows TCP to send data
in the SYN and receive a response in the first ACK, and aims at obtaining a data 
response in one RTT. The SOCKS protocol needs to concern itself with at 
least two TFO deployment scenarios: First, when TFO is available end-to-end 
(at the client, at the proxy, and at the server); second,
when TFO is active between the client and 
the proxy, but not at the server.</t>

<t>This document describes the SOCKS protocol version 6. The key improvements over SOCKS version 5 are:</t>

<t><list style="symbols">
  <t>The client sends as much information upfront as possible, and does not wait for the authentication process to conclude before requesting the creation of a socket.</t>
  <t>The connection request also mimics the semantics of TCP Fast Open <xref target="RFC7413"/>. As part of the connection request, the client can supply the potential payload for the initial SYN that is sent out to the server.</t>
  <t>The protocol can be extended via options without breaking backward-compatibility.</t>
  <t>The protocol can leverage the aforementioned options to support 0-RTT authentication schemes.</t>
</list></t>

<section anchor="revision-log" title="Revision log">

<t>Typos and minor clarifications are not listed.</t>

<t>draft-08</t>

<t><list style="symbols">
  <t>Removed Address Resolution options</t>
  <t>Happy Eyeballs options</t>
  <t>DNS provided by SOCKS</t>
</list></t>

<t>draft-07</t>

<t><list style="symbols">
  <t>All fields are now alignned.</t>
  <t>Eliminated version minors</t>
  <t>Lots of changes to options
  <list style="symbols">
      <t>2-byte option kinds</t>
      <t>Flattened option kinds/types/reply codes; also renamed some options</t>
      <t>Socket options
      <list style="symbols">
          <t>Proxies MUST always answer them (Clients can probe for support)</t>
          <t>MPTCP Options: expanded functionality (“please do/don’t do MPTCP on my behalf”)</t>
          <t>MPTCP Scheduler options removed</t>
          <t>Listen Backlog options: code changed to 0x03</t>
        </list></t>
      <t>Revamped Idempotence options</t>
      <t>Auth data options limited to one per method</t>
    </list></t>
  <t>Authentication Reply: all authentication-related information is now in the options
  <list style="symbols">
      <t>Authentication replies no longer have a field indicating the chosen auth. method</t>
      <t>Method that must proceed (or whereby authentication succeeded) indicated in options</t>
      <t>Username/password authentication: proxy now sends reply in option</t>
    </list></t>
  <t>Removed requirements w.r.t. caching authentication methods by multihomed clients</t>
  <t>UDP: 8-byte association IDs</t>
  <t>Sessions
  <list style="symbols">
      <t>The proxy is now free to terminate ongoing connections along with the session.</t>
      <t>The session-terminating request is not part of the session that it terminated.</t>
    </list></t>
  <t>Address Resolution options</t>
</list></t>

<t>draft-06</t>

<t><list style="symbols">
  <t>Session options</t>
  <t>Options now have a 2-byte length field.</t>
  <t>Stack options
  <list style="symbols">
      <t>Stack options can no longer contain duplicate information.</t>
      <t>TFO: Better payload size semantics</t>
      <t>TOS: Added missing code field.</t>
      <t>MPTCP Scheduler options:
      <list style="symbols">
          <t>Removed support for round-robin</t>
          <t>“Default” renamed to “Lowest latency first”</t>
        </list></t>
      <t>Listen Backlog options: now tied to sessions, instead of an authenticated user</t>
    </list></t>
  <t>Idempotence options
  <list style="symbols">
      <t>Now used in the context of a session (no longer tied to an authenticated user)</t>
      <t>Idempotence options have a different codepoint: 0x05. (Was 0x04.)</t>
      <t>Clarified that implementations that support Idempotence Options must support all Idempotence Option Types.</t>
      <t>Shifted Idempotence Option Types by 1. (Makes implementation easier.)</t>
    </list></t>
  <t>Shrunk vendor-specific option range to 32 (down from 64).</t>
  <t>Removed reference to dropping initial data. (It could no longer be done as of -05.)</t>
  <t>Initial data size capped at 16KB.</t>
  <t>Application data is never encrypted by SOCKS 6. (It can still be encrypted by the TLS layer under SOCKS.)</t>
  <t>Messages now carry the total length of the options, rather than the number of options. Limited options length to 16KB.</t>
  <t>Security Considerations
  <list style="symbols">
      <t>Updated the section to reflect the smaller maximum message size.</t>
      <t>Added a subsection on resource exhaustion.</t>
    </list></t>
</list></t>

<t>draft-05</t>

<t><list style="symbols">
  <t>Limited the “slow” authentication negociations to one (and Authentication Replies to 2)</t>
  <t>Revamped the handling of the first bytes in the application data stream
  <list style="symbols">
      <t>False starts are now recommended. (Added the “False Start” section.)</t>
      <t>Initial data is only available to clients willing to do “slow” authentication. Moved the “Initial data size” field from Requests to Authentication Method options.</t>
      <t>Initial data size capped at 2^13. Initial data can no longer be dropped by the proxy.</t>
      <t>The TFO option can hint at the desired SYN payload size.</t>
    </list></t>
  <t>Request: clarified the meaning of the Address and Port fields.</t>
  <t>Better reverse TCP proxy support: optional listen backlog for TCP BIND</t>
  <t>TFO options can no longer be placed inside Operation Replies.</t>
  <t>IP TOS stack option</t>
  <t>Suggested a range for vendor-specific options.</t>
  <t>Revamped UDP functionality
  <list style="symbols">
      <t>Now using fixed UDP ports</t>
      <t>DTLS support</t>
    </list></t>
  <t>Stack options: renamed Proxy-Server leg to Proxy-Remote leg</t>
</list></t>

<t>draft-04</t>

<t><list style="symbols">
  <t>Moved Token Expenditure Replies to the Authentication Reply.</t>
  <t>Shifted the Initial Data Size field in the Request, in order to make it easier to parse.</t>
</list></t>

<t>draft-03</t>

<t><list style="symbols">
  <t>Shifted some fields in the Operation Reply to make it easier to parse.</t>
  <t>Added connection attempt timeout response code to Operation Replies.</t>
  <t>Proxies send an additional Authentication Reply after the authentication phase. (Useful for token window advertisements.)</t>
  <t>Renamed the section “Connection Requests” to “Requests”</t>
  <t>Clarified the fact that proxies don’t need to support any command in particular.</t>
  <t>Added the section “TCP Fast Open on the Client-Proxy Leg”</t>
  <t>Options:
  <list style="symbols">
      <t>Added constants for option kinds</t>
      <t>Salt options removed, along with the relevant section from Security Considerations. (TLS 1.3 Makes AEAD mandatory.)</t>
      <t>Limited Authentication Data options to one per method.</t>
      <t>Relaxed proxy requirements with regard to handling multiple Authentication Data options. (When the client violates the above bullet point.)</t>
      <t>Removed interdependence between Authentication Method and Authentication Data options.</t>
      <t>Clients SHOULD omit advertising the “No authentication required” option. (Was MAY.)</t>
      <t>Idempotence options:
      <list style="symbols">
          <t>Token Window Advertisements are now part of successful Authentication Replies (so that the proxy-server RTT has no impact on their timeliness).</t>
          <t>Proxies can’t advetise token windows of size 0.</t>
          <t>Tweaked token expenditure response codes.</t>
          <t>Support no longer mandatory on the proxy side.</t>
        </list></t>
      <t>Revamped Socket options
      <list style="symbols">
          <t>Renamed Socket options to Stack options.</t>
          <t>Banned contradictory socket options.</t>
          <t>Added socket level for generic IP. Removed the “socket” socket level.</t>
          <t>Stack options no longer use option codes from setsockopt().</t>
          <t>Changed MPTCP Scheduler constants.</t>
        </list></t>
    </list></t>
</list></t>

<t>draft-02</t>

<t><list style="symbols">
  <t>Made support for Idempotence options mandatory for proxies.</t>
  <t>Clarified what happens when proxies can not or will not issue tokens.</t>
  <t>Limited token windows to 2^31 - 1.</t>
  <t>Fixed definition of “less than” for tokens.</t>
  <t>NOOP commands now trigger Operation Replies.</t>
  <t>Renamed Authentication options to Authentication Data options.</t>
  <t>Authentication Data options are no longer mandatory.</t>
  <t>Authentication methods are now advertised via options.</t>
  <t>Shifted some Request fields.</t>
  <t>Option range for vendor-specific options.</t>
  <t>Socket options.</t>
  <t>Password authentication.</t>
  <t>Salt options.</t>
</list></t>

<t>draft-01</t>

<t><list style="symbols">
  <t>Added this section.</t>
  <t>Support for idempotent commands.</t>
  <t>Removed version numbers from operation replies.</t>
  <t>Request port number for SOCKS over TLS. Deprecate encryption/encapsulation within SOCKS.</t>
  <t>Added Version Mismatch Replies.</t>
  <t>Renamed the AUTH command to NOOP.</t>
  <t>Shifted some fields to make requests and operation replies easier to parse.</t>
</list></t>

</section>
</section>
<section anchor="requirements-language" title="Requirements language">

<t>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 <xref target="RFC2119"/>.</t>

</section>
<section anchor="op" title="Mode of operation">

<figure title="The SOCKS version 6 protocol message exchange" anchor="fig-socks6-topview"><artwork><![CDATA[
  
 CLIENT                                                        PROXY 

         +------------------------+ 
         | Authentication methods | Request
 --------> Command code           +------------------------------>
         | Address                |         
         | Port                   |         
         | Options                |         
         +------------------------+
         
         +------------------------+
 --------> Initial data           +------------------------------>
         +------------------------+

                                     +-----------------------+
                Authentication Reply | Type                  |
  <----------------------------------+ Options               <-----
                                     +-----------------------+    
     
  <-------------------(Authentication protocol)------------------>

  
                                     +-----------------------+
                Authentication Reply | Type = Success        |
  <----------------------------------+ Options               <-----
                                     +-----------------------+    
  
                       +-----------------------+
     Operation Reply   | Reply code            |
  <--------------------+ Bind address          <------------------
                       | Bind port             |
                       | Options               |
                       +-----------------------+

]]></artwork></figure>

<t>When a TCP-based client wishes to establish a connection to a server,
it must open a TCP connection to the appropriate SOCKS port on the
SOCKS proxy. The client then enters a negotiation phase, by
sending the request in <xref target="fig-socks6-topview"/>, that 
contains, in addition to fields present in SOCKS 5 <xref target="RFC1928"/>, fields 
that facilitate low RTT usage and faster authentication negotiation.</t>

<t>Next, the server sends an authentication reply. If the request did not contain the necessary 
authentication information, the proxy indicates an authentication method that must proceed. This 
may trigger a longer authentication sequence
that could include tokens for ulterior faster authentications. The part labeled 
“Authentication protocol” is specific to the authentication 
method employed and is not expected to be employed for every connection between a
client and its proxy server. The authentication protocol typically takes up 1 RTT or more.</t>

<t>If the authentication is successful, an operation reply is generated by the proxy.
It indicates whether the proxy was successful in creating the requested socket or not.</t>

<t>In the fast case, when authentication is properly set up, the proxy attempts to create the socket
immediately after the receipt of the request, thus achieving an operational conection 
in one RTT (provided TFO functionality is available at the client, proxy, and server).</t>

</section>
<section anchor="req" title="Requests">

<t>The client starts by sending a request to the proxy.</t>

<figure title="SOCKS 6 Request" anchor="fig-req"><artwork><![CDATA[
                     1                   2                   3
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+---------------+---------------+-------------------------------+
|  Version = 6  | Command Code  |        Options Length         |
+---------------+---------------+---------------+---------------+
|             Port              |  Padding = 0  | Address Type  |
+-------------------------------+---------------+---------------+
|                                                             ...
...                 Address (variable length)                 ...
...                                                             |
+---------------------------------------------------------------+
|                                                             ...
...                 Options (variable length)                 ...
...                                                             |
+---------------------------------------------------------------+

]]></artwork></figure>

<t><list style="symbols">
  <t>Version: 6</t>
  <t>Command Code:
  <list style="symbols">
      <t>0x00 NOOP: does nothing.</t>
      <t>0x01 CONNECT: requests the establishment of a TCP connection. TFO MUST NOT be used unless explicitly requested.</t>
      <t>0x02 BIND: requests the establishment of a TCP port binding.</t>
      <t>0x03 UDP ASSOCIATE: requests a UDP port association.</t>
    </list></t>
  <t>Address Type:
  <list style="symbols">
      <t>0x01: IPv4</t>
      <t>0x03: Domain Name</t>
      <t>0x04: IPv6</t>
    </list></t>
  <t>Address: this field’s format depends on the address type:
  <list style="symbols">
      <t>IPv4: a 4-byte IPv4 address</t>
      <t>Domain Name: one byte that contains the length of the FQDN, followed by the FQDN itself. The string is not NUL-terminated, but padded by NUL characters, if needed.</t>
      <t>IPv6: a 16-byte IPv6 address</t>
    </list></t>
  <t>Port: the port in network byte order.</t>
  <t>Padding: set to 0</t>
  <t>Options Length: the total size of the SOCKS options that appear in the Options field. MUST NOT exceed 16KB.</t>
  <t>Options: see <xref target="opts"/>.</t>
</list></t>

<t>The Address and Port fields have different meanings based on the Command Code:</t>

<t><list style="symbols">
  <t>NOOP: The fields have no meaning. The Address Type field MUST be either 0x01 (IPv4) or 0x04 (IPv6). The Address and Port fields MUST be 0.</t>
  <t>CONNECT: The fields signify the address and port to which the client wishes to connect.</t>
  <t>BIND, UDP ASSOCIATE: The fields indicate the desired bind address and port. If the client does not require a certain address, it can set the Address Type field to 0x01 (IPv4) or 0x04 (IPv6), and the Address field to 0. Likewise, if the client does not require a certain port, it can set the Port field to 0.</t>
</list></t>

<t>Clients can advertise their supported authentication methods by including an Authentication Method Advertisement option (see <xref target="opts-auth-method"/>).</t>

</section>
<section anchor="version-mismatch-replies" title="Version Mismatch Replies">

<t>Upon receipt of a request starting with a version number other than 6,
the proxy sends the following response:</t>

<figure title="SOCKS 6 Version Mismatch Reply" anchor="fig-vrep"><artwork><![CDATA[
                 
 0 1 2 3 4 5 6 7 
+---------------+
|  Version = 6  |
+---------------+
 
]]></artwork></figure>

<t><list style="symbols">
  <t>Version: 6</t>
</list></t>

<t>A client MUST close the connection after receiving such a reply.</t>

</section>
<section anchor="irep" title="Authentication Replies">

<t>Upon receipt of a valid request, the proxy sends an Authentication Reply:</t>

<figure title="SOCKS 6 Authentication Reply" anchor="fig-irep"><artwork><![CDATA[
                     1                   2                   3
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+---------------+---------------+-------------------------------+
|  Version = 6  |     Type      |        Options Length         |
+---------------+---------------+-------------------------------+
|                                                             ...
...                 Options (variable length)                 ...
...                                                             |
+---------------------------------------------------------------+
 
]]></artwork></figure>

<t><list style="symbols">
  <t>Version: 6</t>
  <t>Type:
  <list style="symbols">
      <t>0x00: authentication successful.</t>
      <t>0x01: authentication failed.</t>
    </list></t>
  <t>Options Length: the total size of the SOCKS options that appear in the Options field. MUST NOT exceed 16KB.</t>
  <t>Options: see <xref target="opts"/>.</t>
</list></t>

<t>If the server signals that the authentication has failed and does not signal that any authentication negotiation can continue (via an Authentication Method Selection option), the client MUST close the connection.</t>

<t>The client and proxy begin a method-specific negotiation.
During such negotiations, the proxy MAY supply information that allows the client to authenticate a future request using an Authentication Data option.
Application data is not subject to any encryption negotiated during this phase.
Descriptions of such negotiations are beyond the scope of this memo.</t>

<t>When the negotiation is complete (either successfully or unsuccessfully), the proxy sends a second Authentication Reply.
The second Authentication Reply MUST NOT allow for further negotiations.</t>

</section>
<section anchor="frep" title="Operation Replies">

<t>After the authentication negotiations are complete, the proxy sends an Operation Reply:</t>

<figure title="SOCKS 6 Operation Reply" anchor="fig-frep"><artwork><![CDATA[
                     1                   2                   3
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+---------------+---------------+-------------------------------+
|  Version = 6  |  Reply Code   |        Options Length         |
+---------------+---------------+---------------+---------------+
|           Bind Port           |  Padding = 0  | Address Type  |
+-------------------------------+---------------+---------------+
|                                                             ...
...              Bind Address (variable length)               ...
...                                                             |
+---------------------------------------------------------------+
|                                                             ...
...                 Options (variable length)                 ...
...                                                             |
+---------------------------------------------------------------+
 
]]></artwork></figure>

<t><list style="symbols">
  <t>Version: 6</t>
  <t>Reply Code:
  <list style="symbols">
      <t>0x00: Succes</t>
      <t>0x01: General SOCKS server failure</t>
      <t>0x02: Connection not allowed by ruleset</t>
      <t>0x03: Network unreachable</t>
      <t>0x04: Host unreachable</t>
      <t>0x05: Connection refused</t>
      <t>0x06: TTL expired</t>
      <t>0x07: Command not supported</t>
      <t>0x08: Address type not supported</t>
      <t>0x09: Connection attempt timed out</t>
    </list></t>
  <t>Bind Port: the proxy bound port in network byte order.</t>
  <t>Padding: set to 0</t>
  <t>Address Type:
  <list style="symbols">
      <t>0x01: IPv4</t>
      <t>0x03: Domain Name</t>
      <t>0x04: IPv6</t>
    </list></t>
  <t>Bind Address: the proxy bound address in the following format:
  <list style="symbols">
      <t>IPv4: a 4-byte IPv4 address</t>
      <t>Domain Name: one byte that contains the length of the FQDN, followed by the FQDN itself. The string is not NUL-terminated, but padded by NUL characters, if needed.</t>
      <t>IPv6: a 16-byte IPv6 address</t>
    </list></t>
  <t>Options Length: the total size of the SOCKS options that appear in the Options field. MUST NOT exceed 16KB.</t>
  <t>Options: see <xref target="opts"/>.</t>
</list></t>

<t>Proxy implementations MAY support any subset of the client commands listed in <xref target="req"/>.</t>

<t>If the proxy returns a reply code other than “Success”, the client MUST close the connection.</t>

<t>If the client issued an NOOP command, the client MUST close the connection after receiving the Operation Reply.</t>

<section anchor="handling-connect" title="Handling CONNECT">

<t>In case the client has issued a CONNECT request, data can now pass.</t>

</section>
<section anchor="handling-bind" title="Handling BIND">

<t>In case the client has issued a BIND request, it must wait for a second Operation reply from the proxy, which signifies that a host has connected to the bound port.
The Bind Address and Bind Port fields contain the address and port of the connecting host. Afterwards, application data may pass.</t>

</section>
<section anchor="udp-assoc" title="Handling UDP ASSOCIATE">

<t>Proxies offering UDP functionality must be configured with a UDP port used for relaying UDP datagrams to and from the client, and/or a port used for relaying datagrams over DTLS.</t>

<t>Following a successful Operation Reply, the proxy sends a UDP Association Initialization message:</t>

<figure title="UDP Association Initialization" anchor="fig-udp-assoc-init"><artwork><![CDATA[
                     1                   2                   3
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+---------------------------------------------------------------+
|                        Association ID                         |
|                           (8 bytes)                           |
+---------------------------------------------------------------+

]]></artwork></figure>

<t><list style="symbols">
  <t>Association ID: the identifier of the UDP association</t>
</list></t>

<t>Proxy implementations SHOULD generate Association IDs randomly or pseudo-randomly.</t>

<t>Clients may start sending UDP datagrams to the proxy either in plaintext, or over an established DTLS session, using the proxy’s configured UDP ports.
A client’s datagrams are prefixed by a SOCKS Datagram Header, indicating the remote host’s address and port:</t>

<figure title="SOCKS 6 Datagram Header" anchor="fig-dgram-hdr"><artwork><![CDATA[
                     1                   2                   3
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+---------------+---------------+-------------------------------+
|  Version = 6  | Address Type  |             Port              |
+---------------+---------------+-------------------------------+
|                        Association ID                         |
|                           (8 bytes)                           |
+---------------------------------------------------------------+
|                                                             ...
...                 Address (variable length)                 ...
...                                                             |
+---------------------------------------------------------------+

]]></artwork></figure>

<t><list style="symbols">
  <t>Version: 0x06</t>
  <t>Association ID: the identifier of the UDP association</t>
  <t>Address Type:
  <list style="symbols">
      <t>0x01: IPv4</t>
      <t>0x03: Domain Name</t>
      <t>0x04: IPv6</t>
    </list></t>
  <t>Address: this field’s format depends on the address type:
  <list style="symbols">
      <t>IPv4: a 4-byte IPv4 address</t>
      <t>Domain Name: one byte that contains the length of the FQDN, followed by the FQDN itself. The string is not NUL-terminated.</t>
      <t>IPv6: a 16-byte IPv6 address</t>
    </list></t>
  <t>Port: the port in network byte order.</t>
</list></t>

<t>Following the receipt of the first datagram from the client, the proxy makes a one-way mapping between the Association ID and:</t>

<t><list style="symbols">
  <t>the 5-tuple of the UDP conversation, if the datagram was received over plain UDP, or</t>
  <t>the DTLS connection, if the datagram was received over DTLS. The DTLS connection is identified either by its 5-tuple, or some other mechanism, like <xref target="I-D.ietf-tls-dtls-connection-id"/>.</t>
</list></t>

<t>Further datagrams carrying the same Association ID, but not matching the established mapping, are silently dropped.</t>

<t>The proxy then sends an UDP Association Confirmation message over the TCP connection with the client:</t>

<figure title="UDP Association Confirmation" anchor="fig-udp-assoc-confirm"><artwork><![CDATA[
                 
 0 1 2 3 4 5 6 7 
+---------------+
|  Status = 0   |
+---------------+

]]></artwork></figure>

<t><list style="symbols">
  <t>Status: MUST be 0x00</t>
</list></t>

<t>Following the confirmation message, UDP packets bound for the proxy’s bind address and port are relayed to the client, also prefixed by a Datagram Header.</t>

<t>The UDP association remains active for as long as the TCP connection between the client and the proxy is kept open.</t>

<section anchor="proxying-udp-servers" title="Proxying UDP servers">

<t>Under some circumstances (e.g. when hosting a server), the SOCKS client expects the remote host to send UDP datagrams first.
As such, the SOCKS client must trigger a UDP Association Confirmation without having the proxy relay any datagrams on its behalf.</t>

<t>To that end, it sends an empty datagram prefixed by a Datagram Header with an IP address and port consisting of zeroes.
The client SHOULD resend the empty datagram if an UDP Association Confirmation is not received after a timeout.</t>

</section>
<section anchor="proxying-multicast-traffic" title="Proxying multicast traffic">

<t>The use of multicast addessses is permitted for UDP traffic only.</t>

</section>
</section>
</section>
<section anchor="opts" title="SOCKS Options">

<t>SOCKS options have the following format:</t>

<figure title="SOCKS 6 Option" anchor="fig-opt"><artwork><![CDATA[
                     1                   2                   3
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-------------------------------+-------------------------------+
|             Kind              |            Length             |
+-------------------------------+-------------------------------+
|                                                             ...
...               Option Data (variable length)               ...
...                                                             |
+---------------------------------------------------------------+
 
]]></artwork></figure>

<t><list style="symbols">
  <t>Kind: Allocated by IANA. (See <xref target="iana"/>.)</t>
  <t>Length: The total length of the option. MUST be a multiple of 4.</t>
  <t>Option Data: The contents are specific to each option kind.</t>
</list></t>

<t>Unless otherwise noted, client and proxy implementations MAY omit supporting any of the options described in this document.
Upon encountering an unsupported option, a SOCKS endpoint MUST silently ignore it.</t>

<section anchor="opts-stack" title="Stack options">

<t>Stack options can be used by clients to alter the behavior of the protocols on top of which SOCKS is running,
as well the protcols used by the proxy to communicate with the remote host (i.e. IP, TCP, UDP).
A Stack option can affect either the proxy’s protocol on the client-proxy leg or on the proxy-remote leg.
Clients can only place Stack options inside SOCKS Requests.</t>

<t>Proxies MAY choose not to honor any Stack options sent by the client.</t>

<t>Proxies include Stack options in their Operation Replies to signal their behavior, and MUST do so for every supported Stack option sent by the client.
Said options MAY also be unsolicited, i. e. the proxy MAY send them to signal behaviour that was not explicitly
requested by the client.</t>

<t>If a particular Stack option is unsupported, the proxy MUST silently ignore it.</t>

<t>In case of UDP ASSOCIATE, the stack options refer to the UDP traffic relayed by the proxy.</t>

<t>Stack options that are part of the same message MUST NOT contradict one another or contain duplicate information.</t>

<figure title="Stack Option" anchor="fig-opt-stack"><artwork><![CDATA[
                     1                   2                   3
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-------------------------------+-------------------------------+
|           Kind = 1            |            Length             |
+---+-----------+---------------+-------------------------------+
|Leg|   Level   |     Code      |                             ...
+---+-----------+---------------+                             ...
...                                                           ...
...               Option Data (variable length)               ...
...                                                             |
+---------------------------------------------------------------+
 
]]></artwork></figure>

<t><list style="symbols">
  <t>Leg:
  <list style="symbols">
      <t>1: Client-Proxy Leg</t>
      <t>2: Proxy-Remote Leg</t>
      <t>3: Both Legs</t>
    </list></t>
  <t>Level:
  <list style="symbols">
      <t>1: IP: options that apply to either IPv4 or IPv6</t>
      <t>2: IPv4</t>
      <t>3: IPv6</t>
      <t>4: TCP</t>
      <t>5: UDP</t>
    </list></t>
  <t>Code: Option code</t>
  <t>Option Data: Option-specific data</t>
</list></t>

<section anchor="ip-tos-options" title="IP TOS options">

<figure title="IP TOS Option" anchor="fig-opt-stack-tos"><artwork><![CDATA[
                     1                   2                   3
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-------------------------------+-------------------------------+
|           Kind = 1            |          Length = 8           |
+---+-----------+---------------+---------------+---------------+
|Leg| Level = 1 |   Code = 1    |      TOS      |  Padding = 0  |
+---+-----------+---------------+---------------+---------------+
 
]]></artwork></figure>

<t><list style="symbols">
  <t>TOS: The IP TOS code</t>
</list></t>

<t>The client can use IP TOS options to request that the proxy use a certain value for the IP TOS field.
Likewise, the proxy can use IP TOS options to advertise the TOS values being used.</t>

</section>
<section anchor="happy-eyeballs-options" title="Happy Eyeballs options">

<figure title="Happy Eyeballs Option" anchor="fig-opt-stack-eyeball"><artwork><![CDATA[
                     1                   2                   3
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-------------------------------+-------------------------------+
|           Kind = 1            |          Length = 8           |
+---+-----------+---------------+-------------------------------+
| 2 | Level = 1 |   Code = 2    |          Padding = 0          |
+---+-----------+---------------+-------------------------------+
 
]]></artwork></figure>

<t>This memo provides enough features for clients to implement a mechanism analogous to Happy Eyeballs <xref target="RFC8305"/> over SOCKS.
However, when the delay between the client and the proxy, or the proxy’s vantage point, is high, doing so can become impractical or inefficient.</t>

<t>In such cases, the client can instruct the proxy to employ the Happy Eyeballs technique on its behalf when connecting to a remote host.</t>

<t>The client MUST supply a Domain Name as part of its Request. Otherwise, the proxy MUST silently ignore the option.</t>

<t>TODO: Figure out which knobs to include.</t>

</section>
<section anchor="tfo-options" title="TFO options">

<figure title="TFO Option" anchor="fig-opt-stack-tfo"><artwork><![CDATA[
                     1                   2                   3
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-------------------------------+-------------------------------+
|           Kind = 1            |          Length = 8           |
+---+-----------+---------------+-------------------------------+
| 2 | Level = 4 |   Code = 1    |         Payload Size          |
+---+-----------+---------------+-------------------------------+
 
]]></artwork></figure>

<t><list style="symbols">
  <t>Payload Size: The desired payload size of the TFO SYN. Ignored in case of a BIND command.</t>
</list></t>

<t>If a SOCKS Request contains a TFO option, the proxy SHOULD attempt to use TFO in case of a CONNECT command, or accept TFO in case of a BIND command.
Otherwise, the proxy MUST NOT attempt to use TFO in case of a CONNECT command, or accept TFO in case of a BIND command.</t>

<t>In case of a CONNECT command, the client can indicate the desired payload size of the SYN. If the field is 0, the proxy can use an arbitrary payload size.
If the field is non-zero, the proxy MUST NOT use a payload size larger than the one indicated. The proxy MAY use a smaller payload size than the one indicated.</t>

</section>
<section anchor="multipath-options" title="Multipath options">

<t>In case of a CONNECT or BIND command, the client can inform the proxy whether MPTCP is desired on the proxy-remote leg by sending a Multipath option.</t>

<t>Conversely, the proxy can use a Multipath option to convey the following information:
 * whether or not the connection uses MPTCP or not, when replying to a CONNECT command, or in the second Operation reply to a BIND command, or
 * whether an MPTCP connection will be accepted, when first replying to a BIND command.</t>

<figure title="Multipath Option" anchor="fig-opt-stack-mp"><artwork><![CDATA[
                     1                   2                   3
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-------------------------------+-------------------------------+
|           Kind = 1            |          Length = 8           |
+---+-----------+---------------+---------------+---------------+
| 2 | Level = 4 |   Code = 2    | Availability  |  Padding = 0  |
+---+-----------+---------------+---------------+---------------+
 
]]></artwork></figure>

<t><list style="symbols">
  <t>Availability:
  <list style="symbols">
      <t>0x01: MPTCP is not desired or available</t>
      <t>0x02: MPTCP is desired or available</t>
    </list></t>
</list></t>

<t>In the absence of such an option, the proxy SHOULD NOT enable MPTCP.</t>

</section>
<section anchor="listen-backlog-options" title="Listen Backlog options">

<figure title="Listen Backlog Option" anchor="fig-opt-stack-backlog"><artwork><![CDATA[
                     1                   2                   3
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-------------------------------+-------------------------------+
|           Kind = 1            |          Length = 8           |
+---+-----------+---------------+-------------------------------+
| 2 | Level = 4 |   Code = 3    |            Backlog            |
+---+-----------+---------------+-------------------------------+
 
]]></artwork></figure>

<t><list style="symbols">
  <t>Backlog: The length of the listen backlog.</t>
</list></t>

<t>The default behavior of the BIND does not allow a client to simultaneously handle multiple connections to the same bind address.
A client can alter BIND’s behavior by adding a TCP Listen Backlog Option to a BIND Request, provided that the Request is part of a Session.</t>

<t>In response, the proxy sends a TCP Listen Backlog Option as part of the Operation Reply, with the Backlog field signalling the actual backlog used.
The proxy SHOULD NOT use a backlog longer than requested.</t>

<t>Following the successful negotiation of a backlog, the proxy listens for incoming connections for as long as the initial connection stays open.
The initial connection is not used to relay data between the client and a remote host.</t>

<t>To accept connections, the client issues further BIND Requests using the bind address and port supplied by the proxy in the initial Operation Reply. Said BIND requests must belong to the same Session as the original Request.</t>

<t>If no backlog is issued, the proxy signals a backlog length of 0, and BIND’s behavior remains unaffected.</t>

</section>
</section>
<section anchor="opts-auth-method" title="Authentication Method options">

<t>A client that is willing to go through the authentication phase MUST include an Authentication Method Advertisement option in its Request.
In case of a CONNECT Request, the option is also used to specify the amount of initial data supplied before any method-specific authentication negotiations take place.</t>

<figure title="Authentication Method Advertisement Option" anchor="fig-opt-auth-method-advert"><artwork><![CDATA[
                     1                   2                   3
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-------------------------------+-------------------------------+
|           Kind = 2            |            Length             |
+-------------------------------+-------------------------------+
|      Initial Data Length      |                             ...
+-------------------------------+                             ...
...                                                           ...
...                 Methods (variable length)                 ...
...                                                           ...
...             +-----------------------------------------------+
...             |   Padding = 0 (variable length, 0-3 bytes)    |
+---------------+-----------------------------------------------+
 
]]></artwork></figure>

<t><list style="symbols">
  <t>Initial Data Size: A two-byte number in network byte order. In case of CONNECT, this is the number of bytes of initial data that are supplied by the client immediately following the Request. This number MUST NOT be larger than 2^14.</t>
  <t>Methods: One byte per advertised method. Method numbers are assigned by IANA.</t>
  <t>Padding: A minimally-sized sequence of zeroes, such that the option length is a multiple of 4. Note that 0 coincides with the value for “No Authentication Required”.</t>
</list></t>

<t>Clients MUST support the “No authentication required” method. Clients SHOULD omit advertising the “No authentication required” option.</t>

<t>The proxy indicates which authentication method must proceed by sending an Authentication Method Selection option in the corresponding Authentication Reply:</t>

<figure title="Authentication Method Selection Option" anchor="fig-opt-auth-method-select"><artwork><![CDATA[
                     1                   2                   3
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-------------------------------+-------------------------------+
|           Kind = 3            |          Length = 8           |
+---------------+---------------+-------------------------------+
|    Method     |                  Padding = 0                  |
+---------------+-----------------------------------------------+

]]></artwork></figure>

<t><list style="symbols">
  <t>Method: The selected method.</t>
</list></t>

<t>If the proxy selects “No Acceptable Methods”, the client MUST close the connection.</t>

<t>If authentication is successful via some other means, or not required at all, the proxy silently ignores the Authentication Method Advertisement option.</t>

</section>
<section anchor="opts-auth-data" title="Authentication Data options">

<t>Authentication Data options carry method-specific authentication data. They can be part of SOCKS Requests and Authentication Replies.</t>

<t>Authentication Data options have the following format:</t>

<figure title="Authentication Data Option" anchor="fig-opt-auth-data"><artwork><![CDATA[
                     1                   2                   3
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-------------------------------+-------------------------------+
|           Kind = 4            |            Length             |
+---------------+---------------+-------------------------------+
|    Method     |                                             ...
+---------------+                                             ...
...                                                           ...
...           Authentication Data (variable length)           ...
...                                                             |
+---------------------------------------------------------------+
 
]]></artwork></figure>

<t><list style="symbols">
  <t>Method: The number of the authentication method. These numbers are assigned by IANA.</t>
  <t>Authentication Data: The contents are specific to each method.</t>
</list></t>

<t>Clients MUST only place one Authentication Data option per authentication method.</t>

</section>
<section anchor="opts-session" title="Session options">

<t>Clients and proxies can establish SOCKS sessions, which span one or more Requests.
All session-related negotiations are done via Session Options, which are placed in Requests and  Authentication Replies by the client and, respectively, by the proxy.</t>

<t>Client and proxy implementations MUST either support all Session Option Types, or none.</t>

<section anchor="session-initiation" title="Session initiation">

<t>A client can initiate a session by sending a Session Request Option:</t>

<figure title="Session Request Option" anchor="fig-opt-session-req"><artwork><![CDATA[
                     1                   2                   3
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-------------------------------+-------------------------------+
|           Kind = 5            |          Length = 4           |
+-------------------------------+-------------------------------+
 
]]></artwork></figure>

<t>The proxy then replies with a Session ID Option in the successful Operation Reply:</t>

<figure title="Session ID Option" anchor="fig-opt-session-id"><artwork><![CDATA[
                     1                   2                   3
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-------------------------------+-------------------------------+
|           Kind = 6            |            Length             |
+-------------------------------+-------------------------------+
|                                                             ...
...               Session ID (variable length)                ...
...                                                             |
+---------------------------------------------------------------+
 
]]></artwork></figure>

<t><list style="symbols">
  <t>Session ID: An opaque sequence of bytes specific to the session. The size MUST be a multiple of 4. MUST NOT be empty.</t>
</list></t>

<t>The Session ID serves to identify the session and is opaque to the client.</t>

<t>The credentials, or lack thereof, used to initiate the session are tied to the session. If authentication is to be performed for further Requests, the session is deemed “untrusted”, and the proxy also places a Session Untrusted option in the Authentication Reply:</t>

<figure title="Session Untrusted Option" anchor="fig-opt-session-untrusted"><artwork><![CDATA[
                     1                   2                   3
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-------------------------------+-------------------------------+
|           Kind = 7            |          Length = 4           |
+-------------------------------+-------------------------------+
 
]]></artwork></figure>

<t>The SOCKS Request that initiated the session is considered part of the session. A client MUST NOT attempt to initiate a session from within a different session.</t>

<t>If the proxy can not or will not honor the Session Request, it does so silently.</t>

</section>
<section anchor="further-socks-requests" title="Further SOCKS Requests">

<t>Any further SOCKS Requests that are part of the session MUST include a Session ID Option (as seen in  <xref target="fig-opt-session-id"/>).</t>

<t>The authentication procedure is altered based on the Session ID’s validity and whether or not the Session is untrusted.</t>

<t>For valid Session IDs:</t>

<t><list style="symbols">
  <t>If the session is untrusted, the proxy MUST reject clients that do not authenticate using the same method and credentials that were used to initiate the session.</t>
  <t>Otherwise, the proxy MUST silently ignore any authentication attempt in the Request, and MUST NOT require any authentication.</t>
</list></t>

<t>The proxy then replies by placing a Session OK option in the successful Authentication Reply:</t>

<figure title="Session OK Option" anchor="fig-opt-session-ok"><artwork><![CDATA[
                     1                   2                   3
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-------------------------------+-------------------------------+
|           Kind = 8            |          Length = 4           |
+-------------------------------+-------------------------------+
 
]]></artwork></figure>

<t>If the ticket is invalid, the first Authentication Reply MUST signal that authentication failed and can not continue (by setting the Type field to 0x01). Further, it SHALL contain a Session Invalid option:</t>

<figure title="Session Invalid Option" anchor="fig-opt-session-reject"><artwork><![CDATA[
                     1                   2                   3
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-------------------------------+-------------------------------+
|           Kind = 9            |          Length = 4           |
+-------------------------------+-------------------------------+
 
]]></artwork></figure>

</section>
<section anchor="tearing-down-the-session" title="Tearing down the session">

<t>Proxies can, at their discretion, tear down a session and free all associated state. Proxy implementations SHOULD feature a timeout mechanism that destroys sessions after a period of inactivity.
When a session is terminated, the proxy MAY close all connections associated with said session.</t>

<t>Clients can signal that a session is no longer needed, and can be torn down, by sending a Session Teardown option in addition to the Session ID option:</t>

<figure title="Session Teardown Option" anchor="fig-opt-session-teardown"><artwork><![CDATA[
                     1                   2                   3
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-------------------------------+-------------------------------+
|           Kind = 10           |          Length = 4           |
+-------------------------------+-------------------------------+
 
]]></artwork></figure>

<t>After sending such an option, the client MUST assume that the session is no longer valid. The proxy MUST treat the connection-terminating request as if it were not part of any session.</t>

</section>
</section>
<section anchor="opts-idempotent" title="Idempotence options">

<t>To protect against duplicate SOCKS Requests, clients can request, and then spend, idempotence tokens.
A token can only be spent on a single SOCKS request.</t>

<t>Tokens are 4-byte unsigned integers in a modular 4-byte space. Therefore, if x and y are tokens, x is less than y if 0 &lt; (y - x) &lt; 2^31 in unsigned 32-bit arithmetic.</t>

<t>Proxies grant contiguous ranges of tokens called token windows. Token windows are defined by their base (the first token in the range) and size.</t>

<t>All token-related operations are done via Idempotence options.</t>

<t>Idempotence options are only valid in the context of a SOCKS Session. If a SOCKS Request is not part of a Session (either by supplying a valid Session ID or successfully initiating one via a Session Request), the proxy MUST silently ignore any Idempotence options.</t>

<t>Token windows are tracked by the proxy on a per-session basis. There can be at most one token window for every session and its tokens can only be spent from within said session.</t>

<t>Client and proxy implementations MUST either support all Idempotence Option Types, or none.</t>

<section anchor="requesting-a-token-window" title="Requesting a token window">

<t>A client can obtain a window of tokens by sending an Idempotence Request option as part of a SOCKS Request:</t>

<figure title="Token Request" anchor="fig-opt-idem-req"><artwork><![CDATA[
                     1                   2                   3
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-------------------------------+-------------------------------+
|           Kind = 11           |          Length = 8           |
+-------------------------------+-------------------------------+
|                          Window Size                          |
+---------------------------------------------------------------+
 
]]></artwork></figure>

<t><list style="symbols">
  <t>Window Size: The requested window size.</t>
</list></t>

<t>Once a token window is issued, the proxy MUST include an Idempotence Window option in all subsequent successful Authentication Replies:</t>

<figure title="Idempotence Window" anchor="fig-opt-idem-advert"><artwork><![CDATA[
                     1                   2                   3
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-------------------------------+-------------------------------+
|           Kind = 12           |          Length = 12          |
+-------------------------------+-------------------------------+
|                          Window Base                          |
+---------------------------------------------------------------+
|                          Window Size                          |
+---------------------------------------------------------------+
 
]]></artwork></figure>

<t><list style="symbols">
  <t>Window Base: The first token in the window.</t>
  <t>Window Size: The window size. This value MAY differ from the requested window size. Window sizes MUST be less than 2^31. Window sizes MUST NOT be 0.</t>
</list></t>

<t>If no token window is issued, the proxy MUST silently ignore the Token Request.
If there is already a token window associated with the session, the proxy MUST NOT issue a new window.</t>

</section>
<section anchor="spending-a-token" title="Spending a token">

<t>The client can attempt to spend a token by including a Idempotence Expenditure option in its SOCKS request:</t>

<figure title="Idempotence Expenditure" anchor="fig-opt-idem-spend"><artwork><![CDATA[
                     1                   2                   3
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-------------------------------+-------------------------------+
|           Kind = 13           |          Length = 4           |
+-------------------------------+-------------------------------+
|                             Token                             |
+---------------------------------------------------------------+
 
]]></artwork></figure>

<t><list style="symbols">
  <t>Kind: 13 (Idempotence Expenditure option)</t>
  <t>Length: 8</t>
  <t>Token: The token being spent.</t>
</list></t>

<t>Clients SHOULD prioritize spending the smaller tokens.</t>

<t>The proxy responds by sending either an Idempotence Accepted or Rejected option as part of the Authentication Reply:</t>

<figure title="Idempotence Accepted" anchor="fig-opt-idem-spend-accept"><artwork><![CDATA[
                     1                   2                   3
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-------------------------------+-------------------------------+
|           Kind = 14           |          Length = 4           |
+-------------------------------+-------------------------------+
 
]]></artwork></figure>

<figure title="Idempotence Rejected" anchor="fig-opt-idem-spend-reject"><artwork><![CDATA[
                     1                   2                   3
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-------------------------------+-------------------------------+
|           Kind = 15           |          Length = 4           |
+-------------------------------+-------------------------------+
 
]]></artwork></figure>

<t>If eligible, the token is spent before attempting to honor the Request.
If the token is not eligible for spending, the Authentication Reply MUST indicate failure.</t>

</section>
<section anchor="shifting-windows" title="Shifting windows">

<t>Windows can be shifted (i. e. have their base increased, while retaining their size) unilaterally by the proxy.</t>

<t>Proxy implementations SHOULD shift the window:
 * as soon as the lowest-order token in the window is spent and
 * when a sufficiently high-order token is spent.</t>

<t>Proxy implementations SHOULD NOT shift the window’s base beyond the highest unspent token.</t>

</section>
<section anchor="out-of-order-window-advertisements" title="Out-of-order Window Advertisements">

<t>Even though the proxy increases the window’s base monotonically, there is no mechanism whereby a SOCKS client can receive the Token Window Advertisements in order.
As such, clients SHOULD disregard Token Window Advertisements with a Window Base less than the previously known value.</t>

</section>
</section>
</section>
<section anchor="usernamepassword-authentication" title="Username/Password Authentication">

<t>Username/Password authentication is carried out as in <xref target="RFC1929"/>.</t>

<t>Clients can also attempt to authenticate by placing the Username/Password
request in an Authentication Data Option.</t>

<figure title="Password authentication via a SOCKS Option" anchor="fig-passwd-req"><artwork><![CDATA[
                     1                   2                   3
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-------------------------------+-------------------------------+
|           Kind = 4            |            Length             |
+---------------+---------------+---------------+---------------+
|  Method = 2   |                                             ...
+---------------+                                             ...
...                                                           ...
...                 Username/Password Request                 ...
...                                                           ...
...             +-----------------------------------------------+
...             |   Padding = 0 (variable length, 0-3 bytes)    |
+---------------+-----------------------------------------------+
 
]]></artwork></figure>

<t><list style="symbols">
  <t>Username/Password Request: The Username/Password Request, as described in <xref target="RFC1929"/>.</t>
</list></t>

<t>Proxies reply by including a Authentication Data Option in the next Authentication Reply which contains the Username/Password reply:</t>

<figure title="Reply to password authentication via a SOCKS Option" anchor="fig-passwd-reply"><artwork><![CDATA[
                     1                   2                   3
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-------------------------------+-------------------------------+
|           Kind = 4            |          Length = 8           |
+---------------+---------------+---------------+---------------+
|  Method = 2   |    Username/Password Reply    |  Padding = 0  |
+---------------+-------------------------------+---------------+
 
]]></artwork></figure>

<t><list style="symbols">
  <t>Username/Password Reply: The Username/Password Reply, as described in <xref target="RFC1929"/>.</t>
</list></t>

</section>
<section anchor="tcp-fast-open-on-the-client-proxy-leg" title="TCP Fast Open on the Client-Proxy Leg">

<t>TFO breaks TCP semantics, causing replays of the data in the SYN’s payload under certain rare circumstances <xref target="RFC7413"/>.
A replayed SOCKS Request could itself result in a replayed connection on behalf of the client.</t>

<t>As such, client implementations SHOULD NOT use TFO on the client-proxy leg unless:</t>

<t><list style="symbols">
  <t>The protocol running on top of SOCKS tolerates the risks of TFO, or</t>
  <t>The SYN’s payload does not contain any application data (so that no data is replayed to the server, even though duplicate connections are still possible), or</t>
  <t>The client uses Idempotence Options, making replays very unlikely, or</t>
  <t>SOCKS is running on top of TLS and Early Data is not used.</t>
</list></t>

</section>
<section anchor="false-starts" title="False Starts">

<t>In case of CONNECT Requests, the client MAY start sending application data as soon as possible, as long as doing so does not incur the risk of breaking the SOCKS protocol.</t>

<t>Clients must work around the authentication phase by doing any of the following:</t>

<t><list style="symbols">
  <t>If the Request does not contain an Authentication Method Advertisement option, the authentication phase is guaranteed not to happen. In this case, application data MAY be sent immediately after the Request.</t>
  <t>Application data MAY be sent immediately after receiving an Authentication Reply indicating success.</t>
  <t>When performing a method-specific authentication sequence, application data MAY be sent immediately after the last client message.</t>
</list></t>

</section>
<section anchor="dns-provided-by-socks" title="DNS provided by SOCKS">

<t>Clients may require information typically obtained from DNS servers, albeit from the proxy’s vantage point.</t>

<t>While the CONNECT command can work with domain names, some clients’ workflows require that addresses be resolved as a separate step prior to connecting.
Moreover, the SOCKS Datagram Header, as described in <xref target="udp-assoc"/>, can be reduced in size by providing the resolved destination IP address, rather than the FQDN.</t>

<t>Emerging techniques may also make use of DNS to deliver server-specific information to clients.
For example, Encrypted SNI <xref target="I-D.ietf-tls-esni"/> relies on DNS to publish encryption keys.</t>

<t>Proxy implementations MAY provide a default plaintext DNS service.
A client looking to make use of it issues a CONNECT Request to IP address 0.0.0.0 or 0:0:0:0:0:0:0:0 on port 53.
Following successful authentication, the Operation Reply indicates an unspecified bind address (0.0.0.0 or ::) and port (0).
The client and proxy then behave as per <xref target="RFC7766"/>.</t>

<t>The service itself can be provided directly by the proxy daemon, or by proxying the client’s request to a pre-configured DNS server.</t>

<t>If the proxy does not implement such functionality, it MAY return an error code signalling “Connection refused”.</t>

</section>
<section anchor="security-considerations" title="Security Considerations">

<section anchor="large-requests" title="Large requests">

<t>Given the format of the request message, a malicious client could craft a request that is in excess of 16 KB and proxies could be prone to DDoS attacks.</t>

<t>To mitigate such attacks, proxy implementations SHOULD be able to incrementally parse the requests. Proxies MAY close the connection to the client if:</t>

<t><list style="symbols">
  <t>the request is not fully received after a certain timeout, or</t>
  <t>the number of options or their size exceeds an imposed hard cap.</t>
</list></t>

</section>
<section anchor="replay-attacks" title="Replay attacks">

<t>In TLS 1.3, early data (which is likely to contain a full SOCKS request) is prone to replay attacks.</t>

<t>While Token Expenditure options can be used to mitigate replay attacks, anything prior to the initial Token Request is still vulnerable.
As such, client implementations SHOULD NOT make use of TLS early data unless the Request attempts to spend a token.</t>

</section>
<section anchor="resource-exhaustion" title="Resource exhaustion">

<t>Malicious clients can issue a large number of Session Requests, forcing the proxy to keep large amounts of state.</t>

<t>To mitigate this, the proxy MAY implement policies restricting the number of concurrent sessions on a per-IP or per-user basis, or barring unauthenticated clients from establishing sessions.</t>

</section>
</section>
<section anchor="iana" title="IANA Considerations">

<t>This document requests that IANA allocate 2-byte option kinds for SOCKS 6 options. Further, this document requests the following option kinds:</t>

<t><list style="symbols">
  <t>Unassigned: 0</t>
  <t>Stack: 1</t>
  <t>Authentication Method Advertisement: 2</t>
  <t>Authentication Method Selection: 3</t>
  <t>Authentication Data: 4</t>
  <t>Session Request: 5</t>
  <t>Session ID: 6</t>
  <t>Session Untrusted: 7</t>
  <t>Session OK: 8</t>
  <t>Session Invalid: 9</t>
  <t>Session Teardown: 10</t>
  <t>Idempotence Request: 11</t>
  <t>Idempotence Window: 12</t>
  <t>Idempotence Expenditure: 13</t>
  <t>Idempotence Accepted: 14</t>
  <t>Idempotence Rejected: 15</t>
  <t>Resolution Request: 16</t>
  <t>IPv4 Resolution: 17</t>
  <t>IPv6 Resolution: 18</t>
  <t>Vendor-specific: 64512-0xFFFF</t>
</list></t>

<t>This document also requests that IANA allocate a TCP and UDP port for SOCKS over TLS and DTLS, respectively.</t>

</section>
<section anchor="acknowledgements" title="Acknowledgements">

<t>The protocol described in this draft builds upon and is a direct continuation of SOCKS 5 <xref target="RFC1928"/>.</t>

</section>


  </middle>

  <back>

    <references title='Normative References'>





<reference  anchor="RFC2119" target='https://www.rfc-editor.org/info/rfc2119'>
<front>
<title>Key words for use in RFCs to Indicate Requirement Levels</title>
<author initials='S.' surname='Bradner' fullname='S. Bradner'><organization /></author>
<date year='1997' month='March' />
<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="RFC1929" target='https://www.rfc-editor.org/info/rfc1929'>
<front>
<title>Username/Password Authentication for SOCKS V5</title>
<author initials='M.' surname='Leech' fullname='M. Leech'><organization /></author>
<date year='1996' month='March' />
<abstract><t>The protocol specification for SOCKS Version 5 specifies a generalized framework for the use of arbitrary authentication protocols in the initial socks connection setup. This document describes one of those protocols, as it fits into the SOCKS Version 5 authentication &quot;subnegotiation&quot;.  [STANDARDS-TRACK]</t></abstract>
</front>
<seriesInfo name='RFC' value='1929'/>
<seriesInfo name='DOI' value='10.17487/RFC1929'/>
</reference>



<reference  anchor="RFC8305" target='https://www.rfc-editor.org/info/rfc8305'>
<front>
<title>Happy Eyeballs Version 2: Better Connectivity Using Concurrency</title>
<author initials='D.' surname='Schinazi' fullname='D. Schinazi'><organization /></author>
<author initials='T.' surname='Pauly' fullname='T. Pauly'><organization /></author>
<date year='2017' month='December' />
<abstract><t>Many communication protocols operating over the modern Internet use hostnames.  These often resolve to multiple IP addresses, each of which may have different performance and connectivity characteristics.  Since specific addresses or address families (IPv4 or IPv6) may be blocked, broken, or sub-optimal on a network, clients that attempt multiple connections in parallel have a chance of establishing a connection more quickly.  This document specifies requirements for algorithms that reduce this user-visible delay and provides an example algorithm, referred to as &quot;Happy Eyeballs&quot;.  This document obsoletes the original algorithm description in RFC 6555.</t></abstract>
</front>
<seriesInfo name='RFC' value='8305'/>
<seriesInfo name='DOI' value='10.17487/RFC8305'/>
</reference>



<reference  anchor="RFC7766" target='https://www.rfc-editor.org/info/rfc7766'>
<front>
<title>DNS Transport over TCP - Implementation Requirements</title>
<author initials='J.' surname='Dickinson' fullname='J. Dickinson'><organization /></author>
<author initials='S.' surname='Dickinson' fullname='S. Dickinson'><organization /></author>
<author initials='R.' surname='Bellis' fullname='R. Bellis'><organization /></author>
<author initials='A.' surname='Mankin' fullname='A. Mankin'><organization /></author>
<author initials='D.' surname='Wessels' fullname='D. Wessels'><organization /></author>
<date year='2016' month='March' />
<abstract><t>This document specifies the requirement for support of TCP as a transport protocol for DNS implementations and provides guidelines towards DNS-over-TCP performance on par with that of DNS-over-UDP. This document obsoletes RFC 5966 and therefore updates RFC 1035 and RFC 1123.</t></abstract>
</front>
<seriesInfo name='RFC' value='7766'/>
<seriesInfo name='DOI' value='10.17487/RFC7766'/>
</reference>




    </references>

    <references title='Informative References'>





<reference  anchor="RFC1928" target='https://www.rfc-editor.org/info/rfc1928'>
<front>
<title>SOCKS Protocol Version 5</title>
<author initials='M.' surname='Leech' fullname='M. Leech'><organization /></author>
<author initials='M.' surname='Ganis' fullname='M. Ganis'><organization /></author>
<author initials='Y.' surname='Lee' fullname='Y. Lee'><organization /></author>
<author initials='R.' surname='Kuris' fullname='R. Kuris'><organization /></author>
<author initials='D.' surname='Koblas' fullname='D. Koblas'><organization /></author>
<author initials='L.' surname='Jones' fullname='L. Jones'><organization /></author>
<date year='1996' month='March' />
<abstract><t>This memo describes a protocol that is an evolution of the previous version of the protocol, version 4 [1]. This new protocol stems from active discussions and prototype implementations.  [STANDARDS-TRACK]</t></abstract>
</front>
<seriesInfo name='RFC' value='1928'/>
<seriesInfo name='DOI' value='10.17487/RFC1928'/>
</reference>



<reference  anchor="RFC7413" target='https://www.rfc-editor.org/info/rfc7413'>
<front>
<title>TCP Fast Open</title>
<author initials='Y.' surname='Cheng' fullname='Y. Cheng'><organization /></author>
<author initials='J.' surname='Chu' fullname='J. Chu'><organization /></author>
<author initials='S.' surname='Radhakrishnan' fullname='S. Radhakrishnan'><organization /></author>
<author initials='A.' surname='Jain' fullname='A. Jain'><organization /></author>
<date year='2014' month='December' />
<abstract><t>This document describes an experimental TCP mechanism called TCP Fast Open (TFO).  TFO allows data to be carried in the SYN and SYN-ACK packets and consumed by the receiving end during the initial connection handshake, and saves up to one full round-trip time (RTT) compared to the standard TCP, which requires a three-way handshake (3WHS) to complete before data can be exchanged.  However, TFO deviates from the standard TCP semantics, since the data in the SYN could be replayed to an application in some rare circumstances.  Applications should not use TFO unless they can tolerate this issue, as detailed in the Applicability section.</t></abstract>
</front>
<seriesInfo name='RFC' value='7413'/>
<seriesInfo name='DOI' value='10.17487/RFC7413'/>
</reference>



<reference  anchor="RFC6824" target='https://www.rfc-editor.org/info/rfc6824'>
<front>
<title>TCP Extensions for Multipath Operation with Multiple Addresses</title>
<author initials='A.' surname='Ford' fullname='A. Ford'><organization /></author>
<author initials='C.' surname='Raiciu' fullname='C. Raiciu'><organization /></author>
<author initials='M.' surname='Handley' fullname='M. Handley'><organization /></author>
<author initials='O.' surname='Bonaventure' fullname='O. Bonaventure'><organization /></author>
<date year='2013' month='January' />
<abstract><t>TCP/IP communication is currently restricted to a single path per connection, yet multiple paths often exist between peers.  The simultaneous use of these multiple paths for a TCP/IP session would improve resource usage within the network and, thus, improve user experience through higher throughput and improved resilience to network failure.</t><t>Multipath TCP provides the ability to simultaneously use multiple paths between peers.  This document presents a set of extensions to traditional TCP to support multipath operation.  The protocol offers the same type of service to applications as TCP (i.e., reliable bytestream), and it provides the components necessary to establish and use multiple TCP flows across potentially disjoint paths.  This  document defines an Experimental Protocol for the Internet community.</t></abstract>
</front>
<seriesInfo name='RFC' value='6824'/>
<seriesInfo name='DOI' value='10.17487/RFC6824'/>
</reference>



<reference  anchor="RFC8446" target='https://www.rfc-editor.org/info/rfc8446'>
<front>
<title>The Transport Layer Security (TLS) Protocol Version 1.3</title>
<author initials='E.' surname='Rescorla' fullname='E. Rescorla'><organization /></author>
<date year='2018' month='August' />
<abstract><t>This document specifies version 1.3 of the Transport Layer Security (TLS) protocol.  TLS allows client/server applications to communicate over the Internet in a way that is designed to prevent eavesdropping, tampering, and message forgery.</t><t>This document updates RFCs 5705 and 6066, and obsoletes RFCs 5077, 5246, and 6961.  This document also specifies new requirements for TLS 1.2 implementations.</t></abstract>
</front>
<seriesInfo name='RFC' value='8446'/>
<seriesInfo name='DOI' value='10.17487/RFC8446'/>
</reference>



<reference anchor="I-D.ietf-tls-dtls-connection-id">
<front>
<title>Connection Identifiers for DTLS 1.2</title>

<author initials='E' surname='Rescorla' fullname='Eric Rescorla'>
    <organization />
</author>

<author initials='H' surname='Tschofenig' fullname='Hannes Tschofenig'>
    <organization />
</author>

<author initials='T' surname='Fossati' fullname='Thomas Fossati'>
    <organization />
</author>

<date month='October' day='21' year='2019' />

<abstract><t>This document specifies the Connection ID (CID) construct for the Datagram Transport Layer Security (DTLS) protocol version 1.2.  A CID is an identifier carried in the record layer header that gives the recipient additional information for selecting the appropriate security association.  In "classical" DTLS, selecting a security association of an incoming DTLS record is accomplished with the help of the 5-tuple.  If the source IP address and/or source port changes during the lifetime of an ongoing DTLS session then the receiver will be unable to locate the correct security context.</t></abstract>

</front>

<seriesInfo name='Internet-Draft' value='draft-ietf-tls-dtls-connection-id-07' />
<format type='TXT'
        target='http://www.ietf.org/internet-drafts/draft-ietf-tls-dtls-connection-id-07.txt' />
</reference>



<reference anchor="I-D.ietf-tls-esni">
<front>
<title>Encrypted Server Name Indication for TLS 1.3</title>

<author initials='E' surname='Rescorla' fullname='Eric Rescorla'>
    <organization />
</author>

<author initials='K' surname='Oku' fullname='Kazuho Oku'>
    <organization />
</author>

<author initials='N' surname='Sullivan' fullname='Nick Sullivan'>
    <organization />
</author>

<author initials='C' surname='Wood' fullname='Christopher Wood'>
    <organization />
</author>

<date month='July' day='8' year='2019' />

<abstract><t>This document defines a simple mechanism for encrypting the Server Name Indication for TLS 1.3.</t></abstract>

</front>

<seriesInfo name='Internet-Draft' value='draft-ietf-tls-esni-04' />
<format type='TXT'
        target='http://www.ietf.org/internet-drafts/draft-ietf-tls-esni-04.txt' />
</reference>




    </references>



  </back>

<!-- ##markdown-source:
H4sIAKeLwF0AA+1963PbRpbvd/wVKOVDpAzJ6GErCXezdRXLnqhiW15LmblT
Wzu3QKIpYQ0CvAAomZv4/u33/M453egGQEmecTKZrJSZRCKBfp73czweR03W
5GYaX5w/++EiflOVTTkv8/hPpqqzsoiPo2Q2q8yNfeA4Sst5kSzpjbRKFs24
zBuTFOtxVjRJZZJxXc7f1ePj8f7XUZo09Njh/sE344OD8f6TaE4fXJXVZhqb
96soirJVNY2bal03h/v73+wfRhhhGp8VjakK00S3ZfXuqirXq/az+IQeif9M
X2TFVfxHfBm9Mxt6Mm0fGp9iaVFUN0mR/p8kLwtax8bU0Sqbxv9BGxzFdVk1
lVnU9NtmiV/+M4qSdXNdVtMoHkdxnBX1NP7TJD6X/dEnsus/5UmaLbPK+6Ks
rpIi+++koQObxj8W2Q0Or9nEb8o8a8x1kc2TuFzE363n17TDuqF3aprdNNP4
6OAovljlSbbOafmpWRn6F20jG8UXZt6UFZ14HM9ptGnw/rxcFw1O8m25pMkT
+sgskyyfxje6wInezP+a15PVejapSm9jp5P4dTZf56aet1ujU7sq6+CL39bW
Ul7gpLAL9LYWRUVZLWmdN4YuMH774tnhwcE3+uvBN4f216+P9p/qr199dXw8
JSAsFp036fGv7TNPDo701+OvD5/YQZ48OcavZ+PTSWaaxbjJ63GKf83LoqC9
0WmNs7T3iKmLjGYcj8dxMqNjSuYEpJfXRnFrZZEvq+N1bVL6IFsmVZZv4qbE
t+838eWzN3E7SU1fENLMMhqr2sQpHWBWJPLNTZbEDY1NI+GGEh2gNhXd4YTu
MjUVHohywsq6iW8U4+lZvOYWs2u/eLo3irMmbpJ3po4P47eXl3W8S7d4RB8v
GHnodgkeML3dwl48M3S8JiZakMTzpIgXeXlLHza3xhQ80TzP6L2YMDXCn7o+
nAuNsTRL3vmqrGlSOSa7nuNRfHudza/jyqTrOX2N14v1ckb7ok1gfRHWMNIl
L9Z5HifpTUKU6orPBIf5IqG9nxNsjrAE+j6t43q9WhF9iGnl0f6YBorD3U3k
DpdZmuYmiojsVCUtgTf+02cZ/vwQfev9RJHS0zp+wtM8jX/6SSHtwwd75B0o
uDU4N3Nj8nJl6HBuS/prntAlx4QGslp6Iivi24w+XBFhTPm2sex5Vs3XdFs5
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
sdEgKURXLO8tzvwobXQ5nM/pWdb4Nlz/w6QNf56/wfL50lz9zMOjipid85mr
4XC3NAJZ4d413DvC3ydt/J4lHmGjTu7hP3yphy5PjH0H015JSP78cBpWLLWf
H03j7whx8XfN49Dtu5HO3kx7cQ1SCVT5GtsSy0rslDqNM2weTdvPn0y5lRV+
fToFWeLsxdRM7f0g3qArT8kfbRwuNwBi9UpLx7oi9I8UpQNBH0FRlJ58S7N3
ofhjKMqAeYopitATTI85mZ7oWnQNuEi7pjBW8hOsYRsmjZuyttikwOSjEzcF
gDiv3zF0+pYEyF/Q4UNAlILhWg4gqHfJD7eJYjdJvjbODKaDaMeBNu+sfXv7
dEH+GH/JY8PugoOEkAt7AZBmS/OZR+TpAe6vjjxDaziMtyDPYWcNAdJ8yjVs
RR4jMGQRqANYLSIF3TBRraMmNbJcX123DRC5u1yr7zlNl9Mw1OtAsmWSl1fo
4EiPdGaT3nZH+0/RktJ1GJtErl3jrU1BkJZ99xl0pbGip6/Z9o2s/Y4gv19n
V9cjUlU4D6RU7XUOwy76ncG0PCcNAtUmCwPR26oFhSRRQJSve4290MGjWs+b
UB+Vyjb8WWffDZ1OkRGtCQ2tsl0vLIvrQXkabJj8IjqHpKokvieQW6ypDoDR
VY2cxOfWWnGv6uKZUGjO89NztL9D0AW3IRNd/V1RzuTiRZlU86lXWv6RPg3Q
ht8afXqyjbkzeZIGBly3/tehT82idIXXCJJ8zu6vRli8zUoPegSp5ou3L/7y
ehKfMUizIc1q4hrLqZGsVu0PjC6t/zzxQNpHHPVIuLjxktk8d2/0Z7JxqS5s
Ftaa+Rx+p96z4aq2oysnP/1i8/o2i4FxesRvoEzA0IXIZVivPvdAqOP9IVEJ
NjjXYzpsotF9vyAlA96iwSMSwS1YC7eA9XrRwPzhOpRNvI5eMC7J+7Z1TDDO
lgFUXHvFtuakuW4p4eCZ0pX4Rz9wtrC9eFuzlcSkTHdWuwPfYnUMy111l4Vw
PglxMGH8qruI3itaROLGbDr+KM9MNEV1CbtSqVzWjQpfw1umXfz4AeX1HDDt
WN8QCGtQ85ZQa34tPNKy8pdDG5NpgxABaYMk2AHDHq9FIk/CFXUQ5ZG99VjL
r83ehkIrtrI3Fb9PpMIcNzz9lXXXpcvnajHL53H+0vyQM4fwQCaH9FVbLM/L
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
ROy4NHj0/wGcc9fzY+YAAA==

-->

</rfc>

