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


<!DOCTYPE rfc  [
  <!ENTITY nbsp    "&#160;">
  <!ENTITY zwsp   "&#8203;">
  <!ENTITY nbhy   "&#8209;">
  <!ENTITY wj     "&#8288;">

<!ENTITY RFC2119 SYSTEM "https://bib.ietf.org/public/rfc/bibxml/reference.RFC.2119.xml">
<!ENTITY RFC8174 SYSTEM "https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8174.xml">
<!ENTITY RFC4303 SYSTEM "https://bib.ietf.org/public/rfc/bibxml/reference.RFC.4303.xml">
<!ENTITY RFC4301 SYSTEM "https://bib.ietf.org/public/rfc/bibxml/reference.RFC.4301.xml">
<!ENTITY RFC8724 SYSTEM "https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8724.xml">
<!ENTITY RFC8376 SYSTEM "https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8376.xml">
<!ENTITY RFC7296 SYSTEM "https://bib.ietf.org/public/rfc/bibxml/reference.RFC.7296.xml">
<!ENTITY I-D.mglt-ipsecme-ikev2-diet-esp-extension SYSTEM "https://bib.ietf.org/public/rfc/bibxml3/reference.I-D.mglt-ipsecme-ikev2-diet-esp-extension.xml">
<!ENTITY RFC8750 SYSTEM "https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8750.xml">
<!ENTITY I-D.mglt-ipsecme-ts-dscp SYSTEM "https://bib.ietf.org/public/rfc/bibxml3/reference.I-D.mglt-ipsecme-ts-dscp.xml">
<!ENTITY RFC9333 SYSTEM "https://bib.ietf.org/public/rfc/bibxml/reference.RFC.9333.xml">
<!ENTITY RFC4309 SYSTEM "https://bib.ietf.org/public/rfc/bibxml/reference.RFC.4309.xml">
]>


<rfc ipr="trust200902" docName="draft-ietf-ipsecme-diet-esp-01" category="std" consensus="true" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true">
  <front>
    <title abbrev="EHCP">ESP Header Compression Profile</title>

    <author initials="D." surname="Migault" fullname="Daniel Migault">
      <organization>Ericsson</organization>
      <address>
        <email>daniel.migault@ericsson.com</email>
      </address>
    </author>
    <author initials="M." surname="Hatami" fullname="Maryam Hatami">
      <organization>Concordia University</organization>
      <address>
        <email>maryam.hatami@mail.concordia.ca</email>
      </address>
    </author>
    <author initials="S." surname="Céspedes" fullname="Sandra Cespedes">
      <organization>Concordia University</organization>
      <address>
        <email>sandra.cespedes@concordia.ca</email>
      </address>
    </author>
    <author initials="W." surname="Atwood" fullname="J. William Atwood">
      <organization>Concordia University</organization>
      <address>
        <email>william.atwood@concordia.ca</email>
      </address>
    </author>
    <author initials="T." surname="Guggemos" fullname="Tobias Guggemos">
      <organization>LMU</organization>
      <address>
        <email>guggemos@nm.ifi.lmu.de</email>
      </address>
    </author>
    <author initials="C." surname="Bormann" fullname="Carsten Bormann">
      <organization>Universitaet Bremen TZI</organization>
      <address>
        <email>cabo@tzi.org</email>
      </address>
    </author>
    <author initials="D." surname="Schinazi" fullname="David Schinazi">
      <organization>Google LLC</organization>
      <address>
        <email>dschinazi.ietf@gmail.com</email>
      </address>
    </author>

    <date year="2024" month="July" day="08"/>

    <area>Security</area>
    <workgroup>IPsecme</workgroup>
    <keyword>Internet-Draft</keyword>

    <abstract>


<?line 55?>

<t>This document defines how to compress/decompress communications protected with IPsec/ESP using Static Context Header Compression and fragmentation (SCHC). SCHC uses static information from IPv6 headers to reduce redundancy and size of packets on the wire. This specification provides guidelines on the application of SCHC to compress/decompress at different levels of the ESP/IPv6 protected packets, leveraging the information already shared by the peers.</t>



    </abstract>



  </front>

  <middle>


<?line 59?>

<section anchor="requirements-notation"><name>Requirements notation</name>

<t>The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL
NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED",
"MAY", and "OPTIONAL" in this document are to be interpreted as
described in BCP 14 <xref target="RFC2119"/> <xref target="RFC8174"/> when, and only when, they
appear in all capitals, as shown here.
<?line -6?></t>

</section>
<section anchor="introduction"><name>Introduction</name>

<t>The Encapsulating Security Payload (ESP) <xref target="RFC4303"/> protocol can provide confidentiality, data origin authentication, integrity, anti-replay, and traffic flow confidentiality. The set of services ESP provides depends on the Security Association (SA) parameters negotiated between devices.</t>

<t>ESP has two modes: Tunnel and Transport. Tunnel mode is commonly used for VPNs, with the ESP header placed after the outer IP header and before the inner IP packet headers. In Transport mode, the ESP Payload Data consists of the IP Payload, with the ESP header placed after the inner IP packet header and any IP extensions headers.</t>

<t>This document defines the ESP Header Compression profile (EHCP) for compression/decompression (C/D) of IPsec/ESP <xref target="RFC4301"/> / <xref target="RFC4303"/> packets, represented by the structure shown in <xref target="fig-esp"/>, using Static Context Header Compression and fragmentation (SCHC) <xref target="RFC8724"/>. Compression with SCHC is based on using a set of Rules, which constitutes the Context of SCHC C/D, to compress or decompress headers. The motivation is to avoid sending information that has already been shared by the peers, thus reducing the ESP packet size on the wire. To better understand ESP, the reader might be interested in reading Minimal ESP <xref target="RFC9333"/>, a simplified version of ESP.</t>

<figure title="Top-Level Format of an ESP Packet" anchor="fig-esp"><artwork align="center"><![CDATA[
 0                   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
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ ----
|               Security Parameters Index (SPI)                 | ^Int.
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |Cov-
|                      Sequence Number                          | |ered
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | ----
|                    Payload Data* (variable)                   | |   ^
~                                                               ~ |   |
|                                                               | |Conf.
+               +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |Cov-
|               |     Padding (0-255 bytes)                     | |ered*
+-+-+-+-+-+-+-+-+               +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |   |
|                               |  Pad Length   | Next Header   | v   v
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ ------
|         Integrity Check Value-ICV   (variable)                |
~                                                               ~
|                                                               |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
]]></artwork></figure>

<t>This document provides the ESP Header Compression profile (EHCP) architecture with the integration of SCHC into various levels of the IPsec stack. The three levels of compression are defined below:</t>

<t><list style="numbers">
  <t>Inner IP Compression (IIPC): This level happens directly on the inner IP packet. For example, in the case of a UDP packet with ports determined by the SA, fields such as UDP ports and checksums are typically compressed. If no compression of the inner packet is possible, the resulting SCHC packet contains the uncompressed IP packet, as per <xref section="7.2" sectionFormat="comma" target="RFC8724"/>.</t>
  <t>Clear Text ESP Compression (CTEC): This level compresses fields of the ESP payload right before being encrypted.</t>
  <t>Encrypted ESP Compression (EEC): This level compresses ESP fields that remain after encryption, that is, the ESP header.</t>
</list></t>

<t>Note that the descriptions of the three levels of compression provided in this document meet the general purpose of ESP. It is possible that in some specific deployments, SCHC contexts from different levels can be merged. Typically, a specific implementation may merge IIPC and CTEC.</t>

<t>For each compressor/decompressor level, it defines the ESP fields to be considered in the rules of its corresponding SCHC context. In addition, it defines how the SCHC contexts are initialized from the SA and provides the corresponding SCHC rules (RuleID, SCHC MAX_PACKET_SIZE, new SCHC Compression/Decompression Actions (CDA), and fragmentation). The appendix provides illustrative examples of applications of EHC using an implementation in openschc.</t>

</section>
<section anchor="terminology"><name>Terminology</name>

<dl>
  <dt>ESP Header Compression Profile (EHCP):</dt>
  <dd>
    <t>A method to reduce the size of ESP headers using predefined compression rules and contexts to improve efficiency.</t>
  </dd>
  <dt>Inner IP C/D (IIPC):</dt>
  <dd>
    <t>Expressed via the SCHC framework, IIPC compresses/decompresses the inner IP packet headers.</t>
  </dd>
  <dt>Clear Text ESP C/D (CTEC):</dt>
  <dd>
    <t>Expressed via the SCHC framework, CTEC compresses/decompresses all fields that will later be encrypted by ESP.</t>
  </dd>
  <dt>Encrypted ESP C/D (EEC):</dt>
  <dd>
    <t>Expressed via the SCHC framework, EEC compresses/decompresses ESP fields that will not be encrypted by ESP.</t>
  </dd>
  <dt>Security Parameters Index (SPI):</dt>
  <dd>
    <t>As defined in <xref section="4.1" sectionFormat="comma" target="RFC4301"/>.</t>
  </dd>
  <dt>Sequence Number (SN):</dt>
  <dd>
    <t>As defined in <xref section="2.2" sectionFormat="comma" target="RFC4303"/>.</t>
  </dd>
  <dt>Static Context Header Compression (SCHC):</dt>
  <dd>
    <t>A framework for header compression designed for LPWANs, as defined in <xref target="RFC8724"/>.</t>
  </dd>
  <dt>Static Context Header Compression Rules (SCHC Rules):</dt>
  <dd>
    <t>As defined in <xref target="RFC8724"/>, Section 5.</t>
  </dd>
  <dt>RuleID:</dt>
  <dd>
    <t>A unique identifier for each SCHC rule, as defined in <xref target="RFC8724"/>, Section 5.1.</t>
  </dd>
  <dt>SCHC Context:</dt>
  <dd>
    <t>The set of parameters and rules shared between communicating entities, as defined in <xref target="RFC8724"/>, Section 5.3.</t>
  </dd>
</dl>

<t>It is assumed that the reader is familiar with other SCHC terminology defined in <xref target="RFC8376"/> and <xref target="RFC8724"/>.</t>

</section>
<section anchor="schc-integration-into-the-ipsec-stack"><name>SCHC Integration into the IPsec Stack</name>

<t>The main principle of the ESP Header Compression Profile (EHCP) is to avoid sending information that has already been shared by the peers. Different profiles and technologies, such as those defined by <xref target="RFC4301"/> and <xref target="RFC4303"/>, ensure that ESP can be tailored to various network requirements and security policies. However, ESP is not optimized for bandwidth efficiency because it has been designed as a general-purpose protocol. EHCP aims to address this by leveraging a profile, expressed via the SCHC framework, to optimize the ESP header sizes for better efficiency in constrained environments.</t>

<t>Profiles for compression are derived from parameters associated with the Security Association (SA) and agreed upon via IKEv2 <xref target="RFC7296"/>, as well as specific compression parameters defined in IKEv2 <xref target="I-D.mglt-ipsecme-ikev2-diet-esp-extension"/>. As depicted in <xref target="fig-arch"/>, this document defines three levels of compression, as previously described: IIPC, CTEC, and EEC. The terminology of "levels" is used consistently throughout the document for clarity.</t>

<t>The <xref target="fig-arch"/> illustrates the integration of SCHC into the IPsec stack, detailing the different levels and components involved in the compression and decompression processes. The diagram is divided into two entities, each representing an endpoint of a communication link.</t>

<t>While the scope of this compression profile currently does not extend beyond the transport layer (i.e., UDP), there will eventually be a need to compress the application layer as well.</t>

<t>The decompression of the inbound packet follows a reverse process. First, the Encrypted ESP C/D (EEC) decompresses the encrypted ESP header fields. After the ESP packet is decrypted, the Clear Text ESP C/D (CTEC) decompresses the Clear Text fields of the ESP packet.</t>

<t>Note that implementations MAY differ from the architectural description but it is assumed the outputs will be the same.</t>

<figure title="SCHC Integration into the IPsec Stack. Packets are described for the tunnel mode and C designates the Compressed header for the fields inside. IIP designates the Inner IP packet, EH and ET respectively  the ESP Header and the ESP Trailer" anchor="fig-arch"><artwork align="center"><![CDATA[
                      +--------------------------------+ 
                      | ESP Header Compression Context |
                      |   - Security Association       |
                      |   - Additional Parameters      |
                      +--------------------------------+    
                                |        
Endpoint                        |                    Endpoint
                                |
+----------------+              |                    +----------------+
| Inner IP packet|              |                    | Inner IP packet|
+----------------+              |                    +----------------+
| SCHC           |+---------IIPC level--------------+| SCHC           |
+----------------+           C {IIP}                 +----------------+
| ESP            |              |                    | ESP            |
| (encapsulation)|              |                    | (unwrapping)   |
+----------------+              v                    +----------------+
| SCHC           |+---------CTEC level--------------+| SCHC           |
+----------------+      EH, C {C {IIP}, ET}          +----------------+
| ESP            |              |                    | ESP            |
| (encryption)   |              |                    | (decryption)   |
+----------------+              v                    +----------------+ 
| SCHC           |+-----------EEC level-------------+| SCHC           |    
+----------------+   IP, C {EH, C {C {IIP},  ET}}    +----------------+
| IPv6 + ESP     |                                   | IPv6 + ESP     |    
+----------------+                                   +----------------+
|  L2            |                                   |  L2            |
+----------------+                                   +----------------+
]]></artwork></figure>

</section>
<section anchor="schc-parameters"><name>SCHC parameters</name>

<t>If ESP incorporates SCHC, it is essential that these scenarios use the SCHC header compression <xref target="RFC8724"/> capability to optimize data transmission.</t>

<t>In order to work properly, the different levels of C/D need to be configured similarly with the same SCHC Context Initialization. This involves defining variables such as SCHC MAX_PACKET_SIZE or Fragmentation that are invariants in our case, as well as SCHC Rules that are expected to be set on a per SA basis.</t>

<t>The EHCP Context provides the necessary information to generate the SCHC Rules.
Most pieces of information are already available from the negotiated SA <xref target="RFC4301"/>.
Other pieces of information need to be specifically configured or agreed via other mechanisms, such as <xref target="I-D.mglt-ipsecme-ikev2-diet-esp-extension"/>.</t>

<t>The reference column in <xref target="tab-ehc-ctx-esp"/> indicates how the information is defined. The C/D column specifies in which of the compression levels the parameter is being used.</t>

<t>Note that additional Compression might be performed especially on the inner IP packet - for example, including the TCP layer.
However, this profiles limits the scope of the compression to the inner IP header, and possibly UDP headers. We believe this is a reasonable scope for ESP to address both IoT UDP packets as well as large VPN traffic.
If further compression is needed, this should be achieved by sending an IP packet with a SCHC payload, where the expected compression is achieved outside ESP.</t>

<section anchor="schc-context-initialization"><name>SCHC Context Initialization</name>

<t>SCHC Context Initialization involves setting up the initial parameters and values that will be used for compressing and decompressing ESP headers. This includes defining the static context, which contains all the rules and parameters necessary for the SCHC operations. The context is shared between the sender and receiver to ensure consistent compression and decompression processes. Initialization ensures that both ends have a common understanding of the fields, their possible values, and how to handle them during communication.</t>

</section>
<section anchor="schc-rules"><name>SCHC Rules</name>

<t>SCHC Rules are predefined sets of instructions that specify how to compress and decompress the header fields of an ESP packet. Each rule is designed to handle specific patterns and variations in the header fields, allowing for efficient compression by eliminating redundancy and leveraging the static context. Rules are identified by RuleIDs and are crucial for mapping the fields correctly during the compression and decompression processes.</t>

</section>
<section anchor="rule-id"><name>Rule ID</name>

<t>The RuleID is a unique identifier for each SCHC rule, included in packets to ensure the receiver applies the correct decompression rule, maintaining consistency in packet processing. Note that the Rule ID does not need to be explicitly agreed upon and can be defined independently by each party.</t>

</section>
<section anchor="schc-maxpacketsize"><name>SCHC MAX_PACKET_SIZE</name>

<t>This field defines the largest size of a compressed ESP packet that can be handled. It ensures packets fit within network limits, optimizing transmission and avoiding unnecessary fragmentation. Note that the SCHC MAX_PACKET_SIZE varies based on the packet because it is not specific to any particular lower-layer (LL) technology. This flexibility allows SCHC to be adapted to various network environments and constraints.</t>

</section>
<section anchor="fragmentation"><name>Fragmentation</name>

<t>The resulting IP/ESP packet size is variable. In some networks, the packet will require fragmentation before transmission over the wire. Fragmentation is out of the scope of this document since it is dependant on the layer 2 technology.</t>

</section>
<section anchor="schc-parameterization-for-esp"><name>SCHC parameterization for ESP</name>

<t>The following attributes are considered in the EHCP Context.
Implementations may consider different expressions of the parameters but their behavior is expected to remain compatible with this specification.</t>

<t>SCHC Context parameterization:</t>

<figure title="EHCP related parameters" anchor="tab-ehc-ctx-esp"><artwork align="center"><![CDATA[
+===================+==========================+===========+=======+
| EHC Context       | Possible Values          | Reference | C / D |
+===================+==========================+===========+=======+
| alignment         | "8 bit", "32 bit"        | ThisRFC   | CTEC  |
| ipsec_mode        | "Tunnel", "Transport"    | RFC4301   | CTEC  | 
| tunnel_ip         | IPv4, IPv6 address       | RFC4301   | CTEC  |
| esp_spi           | ESP SPI                  | RFC4301   | EEC   |
| esp_spi_lsb       | 0, 1, 2, 3, 4*           | ThisRFC   | EEC   |
| esp_sn            | ESP Sequence Number      | RFC4301   | EEC   |
| esp_sn_lsb        | 0, 1, 2, 3, 4*           | ThisRFC   | EEC   |
| esp_encr          | ESP Encryption Algorithm | RFC4301   | CTEC  |
| ts_flow_label     | True, False              | ThisRFC   | CTEC  | 
| ts_ip_version     | 4, 6                     | ThisRFC   | CTEC  |
| ts_ip_src_start   | IP4 or IPv6 address      | ThisRFC   | CTEC  |
| ts_ip_src_end     | IP4 or IPv6 address      | ThisRFC   | CTEC  |
| ts_ip_dst_start   | IPv4 or IPv6 address     | ThisRFC   | CTEC  |
| ts_ip_dst_end     | IPv4 or IPv6 address     | ThisRFC   | CTEC  |
| ts_proto_list     | TCP, UDP, ..., 0         | ThisRFC   | CTEC  |
| ts_port_src_start | Port number              | ThisRFC   | CTEC  |
| ts_port_src_end   | Port number              | ThisRFC   | CTEC  |
| ts_port_dst_start | Port number              | ThisRFC   | CTEC  |
| ts_port_dst_end   | Port number              | ThisRFC   | CTEC  |
| ts_dsp_list       | DSCP number              | RFCYYYY   | CTEC  |
+-------------------+--------------------------+-----------+-------+
]]></artwork></figure>

<dl>
  <dt>alignment:</dt>
  <dd>
    <t>indicates the byte alignement supported by the OS for the ESP extension. By default, the alignement is 32 bit for IPv6, but some systems may also support an 8 bit alignement. Note that when a block cipher such as AES-CCM is used, an 8 bit alignment is overwritten by the block size.</t>
  </dd>
  <dt>ipsec_mode:</dt>
  <dd>
    <t>designates the IPsec mode defined in <xref target="RFC4301"/>. In this document, the possible values are "tunnel" for the Tunnel mode and "transport" for the Transport mode.</t>
  </dd>
  <dt>tunnel_ip:</dt>
  <dd>
    <t>designates the IP address of the tunnel defined in <xref target="RFC4301"/>.
This field is only applicable when the Tunnel mode is used.
That IP address can be an IPv4 or IPv6 address.</t>
  </dd>
  <dt>esp_spi:</dt>
  <dd>
    <t>designates the Security Policy Index defined in <xref target="RFC4301"/>.</t>
  </dd>
  <dt>esp_spi_lsb:</dt>
  <dd>
    <t>designates the LSB to be considered for the compressed SPI. This parameter is defined by this specification and can take the following values 0, 1, 2, 4 respectively meaning that the compressed SPI will consist of the esp_spi_lsb LSB bytes of the original SPI.
A value of 4 for esp_spi_lsb will leave the SPI unchanged.</t>
  </dd>
  <dt>esp_sn:</dt>
  <dd>
    <t>designates the Sequence Number (SN) field defined in <xref target="RFC4301"/>.</t>
  </dd>
  <dt>esp_sn_lsb:</dt>
  <dd>
    <t>designates the LSB to be considered for the compressed SN and is defined by this specification. It works similarly to esp_spi_lsb.</t>
  </dd>
  <dt>esp_encr:</dt>
  <dd>
    <t>designates the encryption algorithm used. For the purpose of compression it is RECOMMENDED to use <xref target="RFC8750"/>.</t>
  </dd>
  <dt>ts_ *:</dt>
  <dd>
    <t>Any parameter starting with "ts_". These parameters are associated with the Traffic Selectors of the SA and are introduced by this specification.
This specification limits the expression of the Traffic Selector to be of the form (IP source range, IP destination range, Port source range, Port destination range, Protocol ID list, DSCP list).
This limits the original flexibility of the expression of TS, but we believe that it provides sufficient flexibility. Following shows detail information of these parameters.</t>
  </dd>
  <dt>ts_flow_label:</dt>
  <dd>
    <t>indicates the Flow Label field of the inner IPv6 packet or the Identification field of the inner IPv4 packet is copied from the outer IP address.</t>
  </dd>
  <dt>ts_ip_version:</dt>
  <dd>
    <t>designates the IP version of the Traffic Selectors and its value is set to 4 when only IPv4 IP addresses are considered and to 6 when only IPv6 addresses are considered.
Practically, when IKEv2 is used, it means that the agreed TSi or TSr results only in a mutually exclusive combination of TS_IPv4_ADDR_RANGE or TS_IPV6_ADDR_RANGE payloads.
When the traffic selectors result in a combination of IPv4 and IPv6 addresses, ts_ip_version is undefined.</t>
  </dd>
  <dt>ts_ip_src_start:</dt>
  <dd>
    <t>designates the starting value range of source IP addresses of the inner packet and has the same meaning as the Starting Address field of the Traffic Selector payload defined in <xref section="3.13" sectionFormat="comma" target="RFC7296"/>.
Note however that in this specification, ts_ip_src_start applies for all agreed Traffic Selector payloads.
When the IP addresses cannot be expressed as a range, that can be exactly expressed as [ ts_ip_src_start, ts_ip_src_end ], ts_ip_src_start is undefined.</t>
  </dd>
  <dt>ts_ip_src_end:</dt>
  <dd>
    <t>designates the high end value range of source IP addresses of the inner packet and has the same meaning as the Ending Address field of the Traffic Selector payload defined in <xref section="3.13" sectionFormat="comma" target="RFC7296"/>.
Similarly to ts_ip_src_end, when the IP addresses cannot be expressed as a range, ts_ip_src_end is undefined.</t>
  </dd>
  <dt>ts_port_src_start:</dt>
  <dd>
    <t>designates the starting value of the port range of the inner packet and has the same meaning as the Start Port field of the Traffic Selector payload defined in <xref section="3.13" sectionFormat="comma" target="RFC7296"/>.</t>
  </dd>
  <dt>ts_port_src_end:</dt>
  <dd>
    <t>designates the starting value of the port range of the inner packet and has the same meaning as the End Port field of the Traffic Selector payload defined in <xref section="3.13" sectionFormat="comma" target="RFC7296"/>.</t>
  </dd>
  <dt>ts_proto_list:</dt>
  <dd>
    <t>designates the list of Protocol ID field, whose meaning is defined in <xref section="3.13" sectionFormat="comma" target="RFC7296"/>.</t>
  </dd>
  <dt>ts_dscp_list:</dt>
  <dd>
    <t>designates the list of DSCP values used by the Traffic Selector and has the same meaning as the List of DSCP Values defined in <xref target="I-D.mglt-ipsecme-ts-dscp"/>.</t>
  </dd>
</dl>

<t>IP addresses and ports are defined as a range and compressed using the LSB.
For a range defined by start and end values, msb( start, end ) is defined as the function that returns the MSB that remains unchanged while the value evolves between start and end.
Similarly, lsb( start, end ) is defined as the function that returns the LSB that changes while the value evolves between start and end. 
Finally, len( x ) is defined as the function that returns the number of bits of the bit array x.</t>

<t>Protocol IDs and DSP are defined as lists of non consecutive values. 
A target value is defined when the list contains a single element.</t>

</section>
<section anchor="new-schc-cda"><name>New SCHC CDA</name>

<t>In addition to the Compression / Decompression Actions defined in <xref section="7.4" sectionFormat="comma" target="RFC8724"/>, this specification uses the CDA as presented in <xref target="tab-cda"/>.
These CDA are either a refinement of the compute- * CDA or the result of combined CDA.</t>

<figure title="EHCP ESP related parameter" anchor="tab-cda"><artwork align="center"><![CDATA[
+=================+=====================+=============================+
| Action          | Compression         | Decompression               |
+=================+=====================+=============================+
| lower           | elided              | Get from lower layer        |
| checksum        | elided              | Compute checksum            |
| padding         | elided              | Compute padding             |
+-----------------+---------------------+-----------------------------+
]]></artwork></figure>

<t>More specifically, when the list contains 0 or a single element, that value can be decompressed without ambiguity and as such an index does not need to be sent. 
When more than one value is present in the list, the index needs to be sent.</t>

</section>
</section>
<section anchor="inner-ip-compression-iipc"><name>Inner IP Compression (IIPC)</name>

<t>When ts_ip_src/dst range is defined and ts_ipversion is set to "IPv6," IPv6 addresses of the inner IP packet are compressed. This inner packet compression always occurs.
FL is set to 128, TV to msb(ip_src) or msb(ip_dst), the MO is set to "MSB," and the CDA is set to "LSB."</t>

<t>The IPv6 Hop Limit is compressed/decompressed.
FL is set to 8 bits, TV is omitted, MO is set to "ignore," and CDA is set to "lower."</t>

<t>The last Next Header with a transport protocol value is compressed/decompressed.
FL is set to 8 bits. If ts_proto_list contains the value 0, TV is not set, MO is set to "ignore," and CDA is set to "value-sent."
If "proto_id" does not contain 0 and the list contains one or fewer values, TV is set to that value, MO is set to "equal," and CDA is set to "not-sent."
In any other case, TV is set to the proto_list, MO is set to "match-mapping," and CDA is set to "mapping-sent."</t>

<t>The IPv6 Total Length is compressed/decompressed.
FL is set to 16 bits, TV is not set, MO is set to "ignore," and CDA is set to "lower."</t>

<t>Traffic Class is compressed/decompressed similarly to the DSP and ECN fields.
FL is set to 8 bits. When the DSP and ECN are defined by the SA via <xref target="I-D.mglt-ipsecme-ts-dscp"/> and ts_dsp_list contains a single element, TV is set to that element, MO is set to "equal," and CDA is set to "not-sent."
When the DSP and ECN are defined by the SA via <xref target="I-D.mglt-ipsecme-ts-dscp"/> and ts_dsp_list contains more than one element, TV is set to the list, MO is set to "match-mapping," and CDA is set to "mapping-sent."
When the DSP and ECN are not defined by the SA, MO is set to "ignore," and the CDA is set to "lower."</t>

<t>When ts_ip_version can be inferred from the ts, the IP version is elided.
FL is set to 4 bits, TV is set to ts_ip_version, MO is set to "equal," and CDA to "not-sent."</t>

<t>When the inner IP address has the same version as the outer_ip and ts_traffic_flow is defined and set to True, the Identification field of the IPv4 inner packet or the Traffic Flow field of the IPv6 packet is elided and read from the outer IP address field.
For IPv6, FL is set to 20 bits, TV is ignored, MO is set to "ignore," and CDA is set to "lower."</t>

<t>When the inner IP is IPv6 and the outer IP is IPv4 and ts_traffic_flow is set to True, the LSB 16 bits of the inner Traffic Flow fields are set to the outer Identification field and the remaining 4 MSB bits are set to 0.
Such compression is not lossless and needs to be considered cautiously.
Note that the Flow Label of the inner packet arriving at the destination may have another value than the initial Flow Label. However, the Flow Label value set at the source ends up with the same value at the destination, with, of course, a lower entropy.</t>

<section anchor="sec-inner-ip4"><name>Inner IPv4 Compression</name>

<t>The compression/decompression of IPv4 fields are similar to IPv6, with some differences. IPv4 addresses are compressed/decompressed similarly to IPv6 addresses except that FL is set to 32.</t>

<t>The IPv4 Header checksum is elided.
FL is set to 16, TV is omitted, MO is set to "ignore," and CDA is set to "checksum."</t>

<t>The IPv4 TTL field is derived from the IPv4 TTL field of the outer IPv4 address or the IPv6 Hop Limit.
FL is set to 8 bits, TV is omitted, MO is set to "ignore," and CDA is set to "lower."</t>

<t>The IPv4 Total Length is elided.
FL is set to 16 bits, TV is not set, MO is set to "ignore," and CDA is set to "lower."</t>

</section>
</section>
<section anchor="clear-text-esp-compression-ctec"><name>Clear Text ESP Compression (CTEC)</name>

<t>The Clear Text ESP Compression is performed on the ESP fields not yet encrypted, that is the ESP Payload Data, the ESP padding field, the Pad Length field as well as the Next Header field, which indicates the type of the inner packet.</t>

<t>When ipsec_mode is set to "Transport", the Clear Text ESP packet that corresponds to an IPv4 packet will have the Payload Data set to the IPv4 Payload and the Next Header set to the Protocol ID - that is typically UDP, TCP or SCHC when the payload results from an SCHC compression.
The Clear Text ESP packet that corresponds to an IPv6 packet will have the Payload Data set may include some IPv6 extensions that precede the IP payload. In that case, the Next Header will have the value that corresponds to that first IPv6 extension being encrypted.</t>

<t>When ipsec_mode is set to "Tunnel", the Clear Text ESP packet has the Payload Data set to the IP packet with the Next Header field indicating whether this is an IPv4, an IPv6 or an SCHC packet.</t>

<t>SA are unidirectional and the Direction Indicator (DI) reflects that direction and is set to Up for outbound SA and Down for inbound SA. 
Fields that are not compressed have no Target Value (TV), their Matching Operator (MO) is set to ignore and Compression/Decompression Actions (CDA) to "value-sent".
Unless specified the Field Position (FP) is set to 1.</t>

<t>Note that for both the IP payload and the IP header, some fields are Compressed / Decompressed independently of the value of Traffic Selectors EHC Context, while some other fields require the Traffic Selectors to be expressed under a specific format.</t>

<section anchor="sec-payload"><name>Inner Packet Payload Compression</name>

<t>An SCHC payload is not compressed.</t>

<t>If the inner IP payload is an UDP or TCP packet the checksum is elided. 
For both TCP or UDP, FL is set to 16 bit, TV is not set, MO is set to "ignore" and CDA is set to "checksum". 
This may result in decompressing a zero-checksum UDP packet with a valid checksum, but this has no impact as a valid checksum is universally accepted.</t>

<t>If the inner packet is an UDP or UDP-Lite the length field is elided.
FL is set to 16, TV is not set, MO is set to "ignore" and CDA is set to "lower" as the length field of the decompressed UDP packet is expressed in bytes and is  derived from the length of the compressed UDP packet by adding the 16 bit UDP Checksum, the 16 bit UDP Length field as well as the respective length of the respective source MSB port and destination MSB ports.</t>

<figure><artwork><![CDATA[
UDP.Length = ( len( compressed UDP) + 16 + 16 + len( lsb( port_src ) ) \
               + len( lsb( port_src ) ) ) / 8
]]></artwork></figure>

<t>Note that for each SA, LSB and MSB are of fixed length.
When the port has a single value this is equivalent to TV containing the port value, MO is set to "equal" and CDA set to not_sent.</t>

</section>
<section anchor="esp-compression"><name>ESP Compression</name>

<t>When ipsec_mode is set to "Tunnel" and ts_ip_version can be determined, the Next Header Field is elided. 
FL is set to 8 bits, TV is set to IPv4 or IPv6 depending on the ts_ip_version, MO is set to "equal" and CDA is set to "not-sent".</t>

<t>If the esp_encr does not require a specific block size, Padding and Pad Length are elided.
FL is defined by the type that is to (Pad Length + 1 ) * 8 bits, TV is unset, MO is set to "ignore" and CDA is set to padding.</t>

<t>Encryption may require require the clear text to respect a given size block.
In addition, IP networking may also require a special alignment which is 32 bits by default for IPv6 Extensions, but may also be overwritten by the EHC Context.
The Padding is defined by pad_value and pad_size appended to the clear text payload - similarly to what ESP does with Padding and Pad Len. 
An 8 bit alignment is interpreted by SCHC as a Word of 8 bits, and a 32 bit alignment is interpreted as a Word of 32 bits. 
The padding size pad_size is defined by the alignment and set to 3 bits for an 8 bit alignment (23) and 5 bits for 32 bit alignment (2**5).
If pad designates the number of bits to be padded, the pad value is set to pad_value = ( pad + len( pad_size ) % Word.
This results in an additional pad_value + pad_size bits.</t>

</section>
</section>
<section anchor="encrypted-esp-compression-eec"><name>Encrypted ESP Compression (EEC)</name>

<t>SPI is compressed to its LSB.
FL is set to 32 bits, TV is not set, MO is set to "MSB( 4 - esp_spi_lsb)" and CDA is set to "LSB".</t>

<t>If the esp_encr considers implicit IV <xref target="RFC8750"/>, Sequence Numbers are not compressed. Otherwise, SN are compressed to their LSB similarly to the SPI. 
FL is set to 32 bits, TV is not set, MO is set to "MSB( 4 - esp_spi_lsb)" and CDA is set to "LSB".</t>

<t>Note that the use of implicit IV always result in a better compression as a 64 bit IV to be sent while compression of the SN alone results at best in a reduction of 32 bits.</t>

<t>The IPv6 Next Header field or the IPv4 Protocol that contains the "ESP" value is changed to "SCHC".</t>

</section>
<section anchor="iana-considerations"><name>IANA Considerations</name>

<t>There are no IANA parameters to be registered.</t>

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

<t>There is no specific considerations associated with the profile other than the security considerations of ESP <xref target="RFC4303"/> and those of SCHC <xref target="RFC8724"/>.</t>

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

<t>We would like to thank Laurent Toutain for its guidance on SCHC. Robert Moskowitz for 
inspiring the name "Diet-ESP" from Diet-HIP.</t>

</section>


  </middle>

  <back>


    <references title='Normative References' anchor="sec-normative-references">

&RFC2119;
&RFC8174;
&RFC4303;
&RFC4301;
&RFC8724;
&RFC8376;
&RFC7296;
&I-D.mglt-ipsecme-ikev2-diet-esp-extension;
&RFC8750;
&I-D.mglt-ipsecme-ts-dscp;


    </references>

    <references title='Informative References' anchor="sec-informative-references">

&RFC9333;
&RFC4309;


    </references>


<?line 493?>

<section anchor="illustrative-example"><name>Illustrative Example</name>

<section anchor="sec-iot-udp"><name>Single UDP Session IoT VPN</name>

<t>This section considers a IoT IPv6 probe hosting a UDP application.
The probe is dedicated to a single application and establishes a single UDP session with a server, and sets a VPN to connect its secure domain - like a home gateway.
The home gateway will be responsible to decompress the compress packet and provides interoperability with standard application server.</t>

<t>The EHC Context is defined as mentioned below:</t>

<t><list style="symbols">
  <t>alignment is set to 8 bits</t>
  <t>ipsec_mode is set to "Tunnel"</t>
  <t>tunnel_ip_srct is set to the IPv6_m, the IPv6 address of the mote.</t>
  <t>tunnel_ip_dst is set to IPv6_gw, the IPv6 of the security gateway.</t>
  <t>esp_spi is agreed by the IKEv2.</t>
  <t>esp_spi_lsb is set to 0 as IPv6_m provides sufficient context to associate the right SA.</t>
  <t>esp_sn results from the standard IPsec, and not impacted.</t>
  <t>esp_sn_lsb is set to 2 even though we are considering  AES-CCM_8_IIV <xref target="RFC8750"/> which uses the ESP Sequence Number to generated the IV.
This results in a 8 bytes reduction compared to the AES-CCM_8 <xref target="RFC4309"/>.</t>
  <t>esp_encr is configured with AES-CCM_8_IIV <xref target="RFC8750"/>. This cipher suite does not require a block size and so no padding is required and does not support SN compression.</t>
  <t>ts_flow_label As the inner traffic and the encrypted traffic are very correlated, it makes sense to re-use the flow label and ts_flow_label is set to True.</t>
  <t>ts_ip_version is set to IPv6.</t>
  <t>ts_ip_src_start is set to IPv6_m. In this example, the SA is associated to messages sent by the mote to the application server (IPv6_server)</t>
  <t>ts_ip_src_end is set to IPv6_m</t>
  <t>ts_ip_dst_end the IPv6 address of the application server (IPv6_server).</t>
  <t>ts_ip_dst_end IPv6_server</t>
  <t>ts_proto_list [ UDP ], in the case of a very constraint mote, only UDP messages are considered.</t>
  <t>ts_port_src_start port_m. The mote and the application server are using dedicated ports.</t>
  <t>ts_port_src_end port_m. The mote and the application server are using dedicated ports. The use of a specific single port enables their elision.</t>
  <t>ts_port_dst_end port_server</t>
  <t>ts_port_dst_end port_server</t>
  <t>ts_dsp_list [ 0 ] the default standard value, we MAY assume that value has been negotiated via IKEv2 or that it as been set as the default value left to the lower layers.</t>
</list></t>

<t><xref target="fig-std-udp-tunnel"/> illustrates an UDP packet being protected by ESP in the tunnel mode using AES-CCM_8_IIV.
This packet is compressed as depicted in <xref target="fig-comp-udp-tunnel"/>.<br />
EHC reduces the packet size by 53 bytes.</t>

<figure title="Standard ESP packet for IoT UDP in Tunnel mode more with AES-CCM_8_IIV" anchor="fig-std-udp-tunnel"><artwork align="center"><![CDATA[
  0                   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
-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+---
E|               Security Parameters Index (SPI)                 |  ^
S+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+  |
P|                      Sequence Number (SN)                     |  |
 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+  |
I|version| traffic class |               flow label              |^ |
P+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+| |
v|         payload length        |  next header  |   hop limit   || |
6+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+| |
 |                                                               || a
 |                      inner source IP                          || u
 |                                                               |e t
 |                                                               |n h
 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+c e
 |                                                               |r n
 |                    inner destination IP                       |y t
 |                                                               |p i
 |                                                               |t c
-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+e a
U|          source port          |           dest port           |d t
D+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+| e
P|             length            |            checksum           || d
 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+| |
 |                                                               || |
 ~                        APPLICATION DATA                       ~| |
 |                                                               || |
-|                                               +-+-+-+-+-+-+-+-+| |
E|                                               |    Padding    || |
S+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+| |
P|     Padding (continue)        |  Pad Length   | Next Header   |v v
-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+---
 |         Integrity Check Value-ICV   (variable)                |
 |                                                               |
 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
]]></artwork></figure>

<figure title="EHC ESP packet for IoT UDP in Tunnel mode more with AES-CCM_8_IIV" anchor="fig-comp-udp-tunnel"><artwork align="center"><![CDATA[
 0                   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
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+--
|      Sequence Number          |                               | ^
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+                               | aut
|                                                               | hen
~                        APPLICATION DATA                       ~ tic
|                          (encrypted)                          | ate
|               +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-|
|               |                                               | V
+-+-+-+-+-+-+-+-+                                               |--
|         Integrity Check Value-ICV   (variable)                |
|               +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|               |
+-+-+-+-+-+-+-+-+
]]></artwork></figure>

</section>
<section anchor="single-tcp-session-iot-vpn"><name>Single TCP session IoT VPN</name>

<t>This section is very similar to <xref target="sec-iot-udp"/> except that a TCP session is used instead.</t>

<t>The compression on the TCP payload is very limited, and in a case where the TCP end point is the same as the ESP end point additionnal compression could be performed.
Additional fields such as TCP options, urgent pointers, the SN and ACK Number could be compressed by a specific profile agreed at the TCP level as opposed to the ESP level.</t>

<t>The ESP encapsulated TCP packet described in <xref target="fig-std-tcp-tunnel"/> is compressed by EHCP using th esam eEHCP context as in <xref target="sec-iot-udp"/> and EHCP reduces that packet by 55 bytes, as depicted in <xref target="fig-comp-udp-tunnel"/>.</t>

<figure title="Standard ESP packet for IoT TCP in Tunnel mode more with AES-CCM_8_IIV" anchor="fig-std-tcp-tunnel"><artwork align="center"><![CDATA[
  0                   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
-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+---
E|               Security Parameters Index (SPI)                 |  ^
S+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+  |
P|                      Sequence Number (SN)                     |  |
 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+  |
I|version| traffic class |               flow label              |^ |
P+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+| |
v|         payload length        |  next header  |   hop limit   || |
6+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+| |
 |                                                               || a
 |                      inner source IP                          || u
 |                                                               |e t
 |                                                               |n h
 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+c e
 |                                                               |r n
 |                    inner destination IP                       |y t
 |                                                               |p i
 |                                                               |t c
-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+e a
T|          source port          |           dest port           |d t
C+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+| e
P|                      Sequence Number (SN)                     || d
 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+| |
 |                     ACK Sequence Number                       || |
 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+| |
 |Off. | Rserv |      Flags      |         Window Size           || |
 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+| |
 |             Checksum          |      Urgent Pointer           || |
 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+| |
 |                                                               || |
 ~                        APPLICATION DATA                       ~| |
 |                                                               || |
 |                                               +-+-+-+-+-+-+-+-+| |
E|                                               |    Padding    || |
S+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+| |
P|     Padding (continue)        |  Pad Length   | Next Header   |V V
-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+---
 |         Integrity Check Value-ICV   (variable)                |
 |                                                               |
 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
]]></artwork></figure>

<figure title="EHC ESP packet for IoT TCP in Tunnel mode more with AES-CCM_8_IIV" anchor="fig-comp-tcp-tunnel"><artwork align="center"><![CDATA[
 0                   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
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+---
|  Sequence Number (SN) (ESP)   |          Sequence Number      ~   ^
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+- |
~       (SN) (TCP)              |                ACK            ~^ | 
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+| a
~      Sequence Number          |Off. | Rserv |      Flags      || u
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+e t
|         Window Size           |      Urgent Pointer           |n h
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+c |
|      Urgent Pointer           |                               |r |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+                               |y |
|                                                               ~p |
~                        APPLICATION DATA                       |t | 
|                                                               || |
|               +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+| |
|               |                                               |v v
+-+-+-+-+-+-+-+-+                                               |---
|         Integrity Check Value-ICV   (variable)                |
|               +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|               |
+-+-+-+-+-+-+-+-+
]]></artwork></figure>

</section>
<section anchor="traditional-vpn"><name>Traditional VPN</name>

<t>This section illustrates the case of an company VPN that allows web browsing. 
The VPN is typically set by a remote host that forwards all its traffic to the
security gateway.<br />
In this case, the SA does not specify the protocol (TCP and UDP packet can be sent), nor the ports. 
Regarding ports it could be possible to restrict the user to only use high range ports (0  - 2 ** 10) - especially if the VPN is only supporting web browsing - but we did not consider this in this example. 
The destination IP address is also expect to take any value, while the IPv6 source in the case of a road warrior scenarios us expected to take a single value.
We consider the VPN client is using an IPv4 or an IPv6 address. 
Regarding ESP, we considered the VPN client is using AES-GCM_16, though AES-GCM_IIV would be the RECOMMENDED transform.
The VPN client is also expected to have a reasonably low throughput which enables the SN to be coded over 16 bits as opposed to 32 bits. 
Similarly, the number of connection is expected to remain sufficiently low so that a 16 bit SPI remains sufficient.</t>

<t>The EHC Context is defined as mentioned below:</t>

<t><list style="symbols">
  <t>alignment is set to 8 bits</t>
  <t>ipsec_mode is set to "Tunnel"</t>
  <t>tunnel_ip_src is set to the IPv6_user, the IPv6 address of the mote.</t>
  <t>tunnel_ip_dst is set to IPv6_gw, the IPv6 of the security gateway.</t>
  <t>esp_spi: is agreed by the IKEv2.</t>
  <t>esp_spi_lsb: is set to 2 bytes.</t>
  <t>esp_sn: results from the standard IPsec, and not impacted.</t>
  <t>esp_sn_lsb: is set to 16 bits. Note that such compression is possible since AES-GCM_16 is used instead of AES-GCM_16_IIV. 
While this results in better performances for EHC, it is not an optimal choice as IIV transforms results always in better comprehensions.</t>
  <t>esp_encr: is configured with AES-GCM_16 <xref target="RFC8750"/>.</t>
  <t>ts_flow_label: is set to True, note as the outer IP address is IPv6, the compression is lossless.</t>
  <t>ts_ip_version: is set not set as the VPN user can use either an IPv4 or an IPv6 address.</t>
  <t>ts_ip_src_start: is set to IPv6_user or IPv4_user. Note that the version can be inferred by the Next Header, and the version can deterministically determine the IP in use.</t>
  <t>ts_ip_src_end: is set to IPv6_user or IPv4_user</t>
  <t>ts_ip_dst_end: IP destination is set to take any value, so the range is unspecified and the start/ end addresses are undefined.</t>
  <t>ts_ip_dst_end: undefined.</t>
  <t>ts_proto_list: undefined</t>
  <t>ts_port_src_start: undefined.</t>
  <t>ts_port_src_end: undefined.</t>
  <t>ts_port_dst_end: undefined</t>
  <t>ts_port_dst_end: undefined</t>
  <t>ts_dsp_list: [ 0 ] the default standard value, we MAY assume that value has been negotiated via IKEv2 or that it as been set as the default value left to the lower layers.</t>
</list></t>

</section>
<section anchor="ipv6-in-ipv6"><name>IPv6 in IPv6</name>

<t><xref target="fig-std-vpn-tunnel-66"/> represents the original ESP TCP packet with IPv6 inner IP addresses and <xref target="fig-comp-vpn-tunnel-66"/> represents the corresponding packet compressed with EHC.</t>

<t>The compression with Diet-ESP results in a reduction of 32 bytes.</t>

<figure title="Standard ESP packet for VPN traffic mode with AES-GCM_16" anchor="fig-std-vpn-tunnel-66"><artwork align="center"><![CDATA[
  0                   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
-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+---
E|               Security Parameters Index (SPI)                 |  ^
S+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+  |
P|                      Sequence Number (SN)                     |  |
 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+  |
 |                                                               |  |
 |                             IV                                |  |
-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+- |
I|version| traffic class |               flow label              |^ |
P+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+| |
v|         payload length        |  next header  |   hop limit   || |
6+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+| |
 |                                                               || a
 |                      inner source IP                          || u
 |                                                               |e t
 |                                                               |n h
 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+c e
 |                                                               |r n
 |                    inner destination IP                       |y t
 |                                                               |p i
 |                                                               |t c
-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+e a
T|          source port          |           dest port           |d t
C+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+| e
P|                      Sequence Number (SN)                     || d
 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+| |
 |                     ACK Sequence Number                       || |
 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+| |
 |Off. | Rserv |      Flags      |         Window Size           || |
 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+| |
 |             Checksum          |      Urgent Pointer           || |
 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+| |
 |                                                               || |
 ~                        APPLICATION DATA                       ~| |
 |                                                               || |
-|                                               +-+-+-+-+-+-+-+-+| |
E|                                               |    Padding    || |
S+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+| |
P|     Padding (continue)        |  Pad Length   | Next Header   |V V
-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+---
 |                                                               |
 |         Integrity Check Value-ICV   (variable)                |
 |                                                               |
 |                                                               |
 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
]]></artwork></figure>

<figure title="Compressed IPv6 in IPv6 ESP packet for VPN traffic mode with AES-GCM_16" anchor="fig-comp-vpn-tunnel-66"><artwork align="center"><![CDATA[
 0                   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
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+---
|             SPI               |              SN               |  ^
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+  |
|                                                               |  |
|                             IV                                |  |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+--|
|  Next Header  |                                               |^ |
+-+-+-+-+-+-+-+-+                                               || |
|                                                               || |
|                    inner destination IP                       || |
|                                                               || |a
|               +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+| |u
|               |          source port          |  destination  ~|e|t
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+|n|h
~ port          |     TCP Sequence Number (SN)                  ~|c|e
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+|r|n
~  (continue)   |    ACK Sequence Number (SN)                   ~|y|t
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+|p|i
~  (continue)   |Off. | Rserv |      Flags      |    Window     ~|t|c
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+|e|a
~   Size        |   Urgent   Pointer            |               ~|d|t
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+| |e
|                                                               || |d
~                        APPLICATION DATA                       ~| |
|                                                               || |
|                             +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ || |
|                             |  Next Header    | Integrity     ~v v
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+               +---
|                                                               |
|         Integrity Check Value-ICV   (variable)                |
|                                               +-+-+-+-+-+-+-+-+
|                                               |                              
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
]]></artwork></figure>

</section>
</section>
<section anchor="json-format-context"><name>JSON format Context</name>

<t>The JSON file defines a set of rules within the SCHC_Context that are used for compressing and decompressing ESP headers. Each rule has a RuleID, a Description, and a set of Fields. Each field specifies how a particular part of the packet should be handled during compression or decompression. Note that the RuleID can be set by the user in any numeric order.</t>

<t>Rule 1: Clear Text ESP Compression
Rule 1 compresses the fields of the ESP packet before encryption. The Payload Data field, which is variable in length, is not sent during compression (CDA: "not-sent"). This means that the data payload itself is excluded from the compressed packet and will be handled separately. The Padding field, also variable in length, is computed during decompression to meet alignment requirements (CDA: "padding"). The Pad Length field is an 8-bit field indicating the length of the padding, and it is sent as-is (CDA: "value-sent"). The Next Header field, which indicates the type of the next protocol header, is also an 8-bit field sent without modification (CDA: "value-sent").</t>

<t>Rule 2: Encrypted ESP Compression
Rule 2 focuses on compressing fields of the ESP packet after encryption. The SPI (Security Parameters Index) is a 32-bit field that is compressed using the Most Significant Bits (MSB) technique based on the number of least significant bytes to be considered (MO: "MSB(4 - esp_spi_lsb)", CDA: "LSB"). Similarly, the Sequence Number, another 32-bit field, is compressed using the MSB technique, reducing its size by only sending the least significant bits as defined in the context (MO: "MSB(4 - esp_sn_lsb)", CDA: "LSB"). This rule ensures that only the necessary parts of these large fields are transmitted, reducing the overall packet size.</t>

<t>Rule 3: Clear Text ESP Decompression
Rule 3 handles the decompression of the clear text fields of the ESP packet after decryption. The Payload Data field, which is variable in length and was not sent during compression, is restored in its original form (CDA: "not-sent"). The Padding field, also variable, is recalculated to ensure correct alignment as per the network requirements (CDA: "padding"). The Pad Length field, an 8-bit indicator of padding length, is received as-is (CDA: "value-sent"). Similarly, the Next Header field, which specifies the next protocol header, is decompressed directly from the received value (CDA: "value-sent"). This rule ensures that the original structure of the ESP packet is accurately reconstructed.</t>

<t>Rule 4: Inner Packet Compression
Rule 4 is responsible for compressing the IP source and destination addresses of the inner packet. The IP Source field is compressed using the MSB technique, where only the most significant bits that change are sent (MO: "MSB", CDA: "LSB"). This reduces the amount of data transmitted by leveraging the static context of the IP addresses. Similarly, the IP Destination field is compressed using the same MSB technique, ensuring efficient compression of the IP addresses (MO: "MSB", CDA: "LSB"). By focusing on the most significant bits, this rule minimizes the data needed to represent the IP addresses.</t>

<t>Rule 5: Inner Packet Decompression
Rule 5 decompresses the IP source and destination addresses of the inner packet. The IP Source field, which was compressed using the MSB technique, is decompressed by reconstructing the full address from the received least significant bits (MO: "MSB", CDA: "LSB"). The same process applies to the IP Destination field, where the original address is reconstructed from the compressed data (MO: "MSB", CDA: "LSB"). This rule ensures that the IP addresses in the inner packet are accurately restored to their original form, maintaining the integrity of the packet structure.</t>

<figure><artwork><![CDATA[
removed as it is basic and can be found in SCHC RFC8724:

## Detailed Field Explanation
Each field in the rules has the following properties:

- FieldID: The identifier of the field.
- FL: Field length, which can be fixed (e.g., 8, 32 bits) or variable.
- FP: Field position in the packet.
- DI: Direction indicator (Up for outbound, Down for inbound).
- TV: Target value, used for matching during compression/decompression.
- MO: Matching operator, which specifies how to match the field (ignore, MSB, etc.).
- CDA: Compression/Decompression action, which defines what to do with the field (e.g., not-sent, padding, value-sent, LSB).
]]></artwork></figure>

<t>Alignment: Ensures that the length of the compressed data plus padding aligns correctly according to network requirements.
Padding and Pad Length: Handled dynamically based on alignment and the length of the payload data.</t>

<t>For Rule 1, ignoring PadLen and Padding is an optimal choice when possible, but it is not always feasible as IPv6 typically requires ESP to have a 32-bit alignment. The alignment is determined by the network's requirements. We have:</t>

<t>len(Payload Data) + len(Padding) + len(Pad Length) + len(Next Header) = 0 mod ALIGN</t>

<t><list style="symbols">
  <t><spanx style="verb">len(Next Header) = 1</spanx> or <spanx style="verb">0</spanx> if compressed. It can be compressed if the type of inner packet is known. For example, in Tunnel mode, the IP range determines if it is an IPv6 or IPv4 packet. In Transport mode, the upper layer protocol type (TCP or UDP) determines this.</t>
  <t>Payload Data has been compressed by IIPC.</t>
  <t><spanx style="verb">len(Padding) = Pad Length</spanx></t>
</list></t>

<t>If alignment is set to 8 bits:</t>

<t>len(Padding) = Pad Length = 0
len(Pad Length) = 0</t>

<t>Otherwise:
- If Compressed Payload Data has a fixed size:</t>

<t>len(Pad Length) = 0
len(Padding) = Pad Length = ALIGN - len(Payload Data) - len(Next Header) mod ALIGN</t>

<t><list style="symbols">
  <t>Otherwise:</t>
</list></t>

<t>len(Pad Length) = 1
len(Padding) = Pad Length = ALIGN - len(Payload Data) - 1 - len(Next Header) mod ALIGN</t>

<t>Overall, this means that the SCHC_Context is dynamically generated from the EHCP Context. Additionally, a rule is required to compress the inner packet. IP source and IP destination should be compressed using LSB.</t>

<figure><artwork><![CDATA[
{
  "SCHC_Context": {
    "Rules": [
      {
        "RuleID": 1,
        "Description": "Clear Text ESP Compression",
        "Fields": [
          {
            "FieldID": "Payload Data",
            "FL": "variable",
            "FP": 1,
            "DI": "Up",
            "TV": null,
            "MO": "ignore",
            "CDA": "not-sent"
          },
          {
            "FieldID": "Padding",
            "FL": "variable",
            "FP": 2,
            "DI": "Up",
            "TV": null,
            "MO": "ignore",
            "CDA": "padding"
          },
          {
            "FieldID": "Pad Length",
            "FL": 8,
            "FP": 3,
            "DI": "Up",
            "TV": null,
            "MO": "ignore",
            "CDA": "value-sent"
          },
          {
            "FieldID": "Next Header",
            "FL": 8,
            "FP": 4,
            "DI": "Up",
            "TV": null,
            "MO": "ignore",
            "CDA": "value-sent"
          }
        ]
      },
      {
        "RuleID": 2,
        "Description": "Encrypted ESP Compression",
        "Fields": [
          {
            "FieldID": "SPI",
            "FL": 32,
            "FP": 1,
            "DI": "Up",
            "TV": null,
            "MO": "MSB(4 - esp_spi_lsb)",
            "CDA": "LSB"
          },
          {
            "FieldID": "Sequence Number",
            "FL": 32,
            "FP": 2,
            "DI": "Up",
            "TV": null,
            "MO": "MSB(4 - esp_sn_lsb)",
            "CDA": "LSB"
          }
        ]
      },
      {
        "RuleID": 3,
        "Description": "Clear Text ESP Decompression",
        "Fields": [
          {
            "FieldID": "Payload Data",
            "FL": "variable",
            "FP": 1,
            "DI": "Down",
            "TV": null,
            "MO": "ignore",
            "CDA": "not-sent"
          },
          {
            "FieldID": "Padding",
            "FL": "variable",
            "FP": 2,
            "DI": "Down",
            "TV": null,
            "MO": "ignore",
            "CDA": "padding"
          },
          {
            "FieldID": "Pad Length",
            "FL": 8,
            "FP": 3,
            "DI": "Down",
            "TV": null,
            "MO": "ignore",
            "CDA": "value-sent"
          },
          {
            "FieldID": "Next Header",
            "FL": 8,
            "FP": 4,
            "DI": "Down",
            "TV": null,
            "MO": "ignore",
            "CDA": "value-sent"
          }
        ]
      },
      {
        "RuleID": 4,
        "Description": "Inner Packet Compression",
        "Fields": [
          {
            "FieldID": "IP Source",
            "FL": "variable",
            "FP": 1,
            "DI": "Up",
            "TV": "msb(ip_src)",
            "MO": "MSB",
            "CDA": "LSB"
          },
          {
            "FieldID": "IP Destination",
            "FL": "variable",
            "FP": 2,
            "DI": "Up",
            "TV": "msb(ip_dst)",
            "MO": "MSB",
            "CDA": "LSB"
          }
        ]
      },
      {
        "RuleID": 5,
        "Description": "Inner Packet Decompression",
        "Fields": [
          {
            "FieldID": "IP Source",
            "FL": "variable",
            "FP": 1,
            "DI": "Down",
            "TV": "msb(ip_src)",
            "MO": "MSB",
            "CDA": "LSB"
          },
          {
            "FieldID": "IP Destination",
            "FL": "variable",
            "FP": 2,
            "DI": "Down",
            "TV": "msb(ip_dst)",
            "MO": "MSB",
            "CDA": "LSB"
          }
        ]
      }
    ]
  }
}

]]></artwork></figure>

</section>


  </back>

<!-- ##markdown-source:
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
uc2P5KYc4D0G+IVu/3OyR15x2ztRq+6OYKK9y0FLYo80RUHU+umbDV3l9hyt
BkTES6riQ0ifv9xwoGGmyCxxuf6igem/1ote56T96HJcxhJBjon+7NJef3rs
TruJaLZ6EPU2K2RDLf0alDtlrXQGHHHvtAZwfeSNAiZhaiZ618zMcAoVOhK+
oMlYtZIpdVVLW8hKq302pjrlYkhbAsSJMBiMIPnxlfbicX8EQ/ZNlUgwAgrR
Xu7VvmqB5/oT0BkT+OjMs0DtWL2LORj7DptK2lQTRRYDbYxwSOKWLbJ3KdF7
q86y1pNO4sjwbJqHXwYbq9+SsugaUMMO2jHub2obYnekcCZlGy+nFrDxoOao
nv8sh7np0i0SDPEAFbsmOq39ZVEJ/3SPUqn7z1wxvFjPuzvKSFlZ05Ldm06o
3NNeHSRxzZA5H5I6KfypqRzK0EHRuT/k+UyJNoLPMDXQ9/tmD4IvblNTbHJo
MLnzhRgmaKRJ1vTQs4r0F5XEmCKYtCeTfq/WOcDoL2ZDfY0Qyv/oAQqH6pwA
tQH//c+wPdXcJzeAFX1LUwc8jgtH9zpkzCLcCCtyMVjlKH2XDGXVTi4NLZHa
d2ofmJbTLNGQH8EnGEBAc/mN9jbpHaH357tPLYHJx0COZ+QxiSjMQNZaoNcu
I+RtYCH0Ctn+9k2F5GlwZtRt9oV86OVWM8enom9JIVvoMbrVNbhmT7+pLDK+
bS0LHP5uk+k75g4OHN5RzymI6rGEwBdHOrhRVAu17rwMFArU9SDAxDS/EwMR
88E2fta+BL0gV8gNSE+j6j2qMqRjiO1R4SjmXBhKi+65EWzKb5XSUESBqXQI
UIZalSlPEHtEV05QN1WprzBVFOrQKL7M283ImHHbLG5wZDqr6XpTfLQDRs7E
pUE9EYZntDBumM6xvAAXWqJ2fefAte5uS0RCMqmFDDCLoLU8w72TDsAiOU9H
/+eiJOau953ij7rEZO4Q3quC1R5brdqEpHWaBTeJ0Y7tODi3eX9GrDyH61jf
2ua2sI/tYw1I17cePHi8Qf1BJpTZ5CULBekcrFYhyJpp4DthBq3dROTy+IQw
aLO8DfWfCR2SH60NO8wmzd22L3akr+3LhDwKvC64PwLLa4/7friFVG2YijOF
fDfRMr4LkBPrageozcnh32jlXDBDG9PSrsiKOmxiBwDVf+Ml5XfCwoaqxeLo
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

-->

</rfc>

