<?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.22 (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 RFC7296 SYSTEM "https://bib.ietf.org/public/rfc/bibxml/reference.RFC.7296.xml">
<!ENTITY I-D.ietf-ipsecme-ikev2-diet-esp-extension SYSTEM "https://bib.ietf.org/public/rfc/bibxml3/reference.I-D.ietf-ipsecme-ikev2-diet-esp-extension.xml">
<!ENTITY I-D.mglt-ipsecme-dscp-np SYSTEM "https://bib.ietf.org/public/rfc/bibxml3/reference.I-D.mglt-ipsecme-dscp-np.xml">
<!ENTITY RFC8750 SYSTEM "https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8750.xml">
<!ENTITY RFC6437 SYSTEM "https://bib.ietf.org/public/rfc/bibxml/reference.RFC.6437.xml">
<!ENTITY RFC8221 SYSTEM "https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8221.xml">
<!ENTITY RFC9333 SYSTEM "https://bib.ietf.org/public/rfc/bibxml/reference.RFC.9333.xml">
<!ENTITY RFC8376 SYSTEM "https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8376.xml">
<!ENTITY I-D.ietf-schc-architecture SYSTEM "https://bib.ietf.org/public/rfc/bibxml3/reference.I-D.ietf-schc-architecture.xml">
<!ENTITY RFC4302 SYSTEM "https://bib.ietf.org/public/rfc/bibxml/reference.RFC.4302.xml">
<!ENTITY RFC6438 SYSTEM "https://bib.ietf.org/public/rfc/bibxml/reference.RFC.6438.xml">
]>


<rfc ipr="trust200902" docName="draft-ietf-ipsecme-diet-esp-06" category="std" consensus="true" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true">
  <front>
    <title abbrev="EHCP">ESP Header Compression with Diet-ESP</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 Céspedes">
      <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="D." surname="Liu" fullname="Daiying Liu">
      <organization>Ericsson</organization>
      <address>
        <email>harold.liu@ericsson.com</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="2025" month="March" day="16"/>

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

    <abstract>


<?line 66?>

<t>This document specifies Diet-ESP, a compression mechanism for control information in IPsec/ESP communications. The compression is expressed through the Static Context Header Compression architecture.</t>



    </abstract>



  </front>

  <middle>


<?line 74?>

<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 is part of the IPsec <xref target="RFC4301"/> suite of protocols and 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>An ESP packet is composed of the ESP Header, the ESP Payload Data, the ESP Trailer, and the Integrity Check Value (ICV). ESP has two modes of operation: Transport and Tunnel. In Transport mode, the ESP Payload Data consists of the payload of the original IP packet; the ESP Header is inserted after the original IP packet header. In Tunnel mode, commonly used for VPNs, the ESP Header is placed after an outer IP header and before the inner IP packet headers of the original datagram. This ensures both the original IP headers and payload are protected. Consequently, the ESP Data Payload field contains either the payload from the original IP packet or the fully-encapsulated IP packet, in transport mode or tunnel mode, respectively.</t>

<t>The ESP Trailer, placed at the end of the ESP Payload Data, includes fields such as Padding and Pad Length to ensure proper alignment, and Next Header to indicate the protocol following the ESP header. The ICV, calculated over the ESP Header, ESP Data Payload, and ESP Trailer, is appended after the ESP Trailer to ensure packet integrity. For a simplified overview of ESP, readers are referred to Minimal ESP <xref target="RFC9333"/>.</t>

<t>While ESP is effective in securing traffic, compression can reduce packet sizes, enhancing performance in networks with limited bandwidth. In such environments, reducing the size of transmitted packets is essential to improve efficiency. This document defines Diet-ESP, a protocol that includes compression/decompression (C/D) of the various structures processed by ESP. These C/D are expressed through the Static Context Header Compression and Fragmentation (SCHC) framework <xref target="RFC8724"/>. The structure of the ESP packet to be compressed is shown in <xref target="fig-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 Parameter Index (SPI)                  | ^Auth.
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |Cove-
|                      Sequence Number                          | |rage
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | ----
|                 ESP Data Payload (variable)                   | |   ^
~  Higher Layer Message (transport) or IP datagram (tunnel)     ~ |   |
|                                                               | |Encr.
+               +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |Cove-
|               |     ESP Padding (0-255 bytes)                 | |rage
+-+-+-+-+-+-+-+-+               +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |   |
|                               |  Pad Length   | Next Header   | v   v
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ ------
|         Integrity Check Value-ICV   (variable)                |
~                                                               ~
|                                                               |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
]]></artwork></figure>

<section anchor="sec-3c"><name>The Three compressors described in this specification</name>

<t>The document outlines the three compressors utilized in Diet-ESP, which are detailed as follows:</t>

<t><list style="numbers" type="1">
  <t>Inner IP Compression (IIPC): This process pertains to the compression and decompression of the Header of the Inner IP packet (IIP), i.e., the original packet to be protected by ESP. For outbound packets, after IIPC, ESP incorporates the compressed Header and the Payload into the ESP Data Payload of a Clear Text ESP packet (CTE) (refer to <xref target="fig-esp"/>). In the case of inbound packets, decompression occurs after the compressed Header is retrieved from the ESP Payload Data within the CTE.</t>
  <t>Clear Text ESP Compression (CTEC): This process pertains to the compression and decompression of the segment of the ESP packet that is destined for encryption. This encompasses the ESP Data Payload and the ESP Trailer, which includes the Padding, Pad Length, and Next Header fields, as illustrated in <xref target="fig-esp"/>. At this stage, only the latter fields are eligible for compression. For outbound packets, ESP subsequently encrypts the compressed CTE packet. For inbound packets, decompression takes place following the decryption process of the ESP.</t>
  <t>Encrypted ESP Compression (EEC): This process pertains to the compression and decompression of the Encrypted ESP packet (EE), which consists of the ESP Header, the encrypted payload, and the Integrity Check Value (ICV). Since neither the encrypted payload nor the ICV can be compressed, only the ESP Header, specifically the SPI and SN fields, are subject to compression.</t>
</list></t>

</section>
<section anchor="the-scope-of-schc-in-this-specification"><name>The scope of SCHC in this specification</name>

<t>SCHC <xref target="RFC8724"/> offers a mechanism for header compression as well as an optional fragmentation feature. SCHC facilitates the compression and decompression of headers by utilizing a common context that may encompass multiple Rules. Each Rule is designed to correspond with specific values or ranges of values within the header fields. When a Rule is successfully matched, the corresponding header fields are substituted with the Rule ID and the Compression Residue. The Compression Residue for the packet header is the concatenation of the non-empty residues for each field of the header. The Compression Residue is directly followed by the packet payload and an optional padding to ensure byte alignment.</t>

<t>This document utilizes SCHC as a practical means to illustrate the capability to compress and decompress a structured payload. It is important to note that any elements of SCHC that pertain to aspects other than compression or decompression, such as fragmentation, fall outside the purview of this document. The reference to SCHC herein is solely for descriptive purposes related to compression and decompression, and it is not anticipated that the general SCHC framework will be integrated into the ESP implementation. The structured payloads addressed in this specification pertain to internal structures managed by ESP for the processing of an IP packet. Consequently, the compression and decompression processes outlined in this document represent supplementary steps for the ESP stack in handling the ESP packet.</t>

</section>
<section anchor="diet-esp-rules-and-context"><name>Diet-ESP Rules and Context</name>

<t>In IPsec, the process of encryption or decryption between IPsec peers necessitates a common context known as a Security Association (SA). More broadly, the SA encompasses all essential parameters required by the ESP to handle both inbound and outbound packets. SAs are unidirectional. Furthermore, IPsec can link both outbound and inbound IP packets to the SA through Traffic Selectors (TS) or Security Parameter Index (SPI). This capability allows IPsec to uniquely associate outbound and inbound packets with a specific context (SA), which contains all pertinent information for IPsec processing.</t>

<t>This document adopts a comparable methodology for compression and decompression, ensuring that the SA includes all necessary parameters to create the unique Rule applicable for compressing or decompressing each structured payload. This guarantees that each SA in Diet-ESP is linked to a single Rule, thereby allowing the Rule ID in Diet-ESP to be empty. If future implementations support differentiated compression for multiple flows over the same SA, the Rule ID may not be omitted. The Rule associated with each structured payload is generated based on specific parameters referred to in this document as Attributes for Rule Generation (AfRG) (see <xref target="sec-afrg"/> for a more detailed description). These AfRGs are negotiated through IKEv2 <xref target="RFC7296"/>, and in such cases, they are likely already included in the SA. Any additional missing AfRGs are negotiated via <xref target="I-D.ietf-ipsecme-ikev2-diet-esp-extension"/>.</t>

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

<dl>
  <dt>ESP Header Compression:</dt>
  <dd>
    <t>A method to reduce the size of ESP headers and trailer using predefined compression rules and contexts to improve efficiency.</t>
  </dd>
  <dt>ESP Trailer:</dt>
  <dd>
    <t>A set of fields added at the end of the ESP payload, including Padding, Pad Length, and Next Header, used to ensure alignment and indicate the next protocol.</t>
  </dd>
  <dt>Inner IP C/D (IIPC):</dt>
  <dd>
    <t>Process that compresses/decompresses the inner IP packet headers.</t>
  </dd>
  <dt>Clear Text ESP C/D (CTEC):</dt>
  <dd>
    <t>Process that compresses/decompresses all fields that will later be encrypted by ESP, which include the ESP Data Payload and ESP Trailer.</t>
  </dd>
  <dt>Encrypted ESP C/D (EEC):</dt>
  <dd>
    <t>Process that compresses/decompresses ESP fields not encrypted by ESP.</t>
  </dd>
  <dt>Security Parameter 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"/></t>
  </dd>
  <dt>RuleID:</dt>
  <dd>
    <t>A unique identifier for each Rule part of the Diet-ESP context.</t>
  </dd>
  <dt>SCHC Parameters:</dt>
  <dd>
    <t>A set of predefined values used for SCHC compression and decompression, ensuring byte alignment and proper packet formatting based on the SCHC profile.</t>
  </dd>
  <dt>Traffic Selector (TS):</dt>
  <dd>
    <t>A set of parameters (e.g., IP address range, port range, and protocol) used to define which traffic should be protected by a specific Security Association (SA).</t>
  </dd>
</dl>

<t>It is assumed that the reader is familiar with other SCHC terminology defined in <xref target="RFC8376"/>, <xref target="RFC8724"/>, and eventually <xref target="I-D.ietf-schc-architecture"/>.</t>

</section>
<section anchor="sec-schc-ipsec-integration"><name>Diet-ESP Integration into the IPsec Stack</name>

<t><xref target="fig-arch"/> depicts the incorporation of Diet-ESP within the IPsec framework.</t>

<t>IPsec requires that both endpoints agree on a shared context known as the Security Association (SA). This SA is established via IKEv2 and encompasses all Attributes for Rule Generation (AfRG) (refer to <xref target="sec-afrg"/>) essential for formulating the Rules for each compressor defined in <xref target="sec-3c"/>, specifically the Inner IP packet Compressor (IIPC), the Clear Text ESP Compressor (CTEC), and the Encrypted ESP Compressor (EEC).</t>

<t>When an Inner IP packet (IIP) is received, IPsec identifies the SA linked to that packet. Upon the ESP  determining the IIPC Rule from the AfRG contained within the SA, the IIPC separates the IIP into Header and Payload, and compresses the Header. The compressed Header is composed of RuleID, Compressed Residue, and an optional padding field. The original payload of the IIP is then appended after the compressed header (IIPC: C{Header}, Payload). Subsequently, ESP constructs the Clear Text ESP packet (CTE). The CTEC Rule is derived from the AfRG of the SA, allowing for the compression of the CTE (CTEC: C {C{Header}, Payload, ET}, where ET represents the ESP Trailer). Then, ESP encrypts the ESP Data Payload, computes the Integrity Check Value (ICV), and forms the Encrypted ESP packet (EE). The EE Rule is derived from the AfRG of the SA, and then utilized to compress the EE (C {EH, C{C{Header}, Payload, ET}}, ICV}, where EH represents the ESP Header). The resulting compressed ESP extension is integrated into an IP packet and transmitted as outbound traffic.</t>

<t>For inbound traffic, the endpoint extracts the Security Parameter Index (SPI) from the compressed EE, along with any other selectors from the packet, to conduct a lookup for the SA. As outlined in <xref target="sec-sec"/>, since the SPI is derived from a potentially compressed ESP Header, there may be instances where the endpoint must explore multiple options, potentially leading to several lookups or, in the worst-case scenario, multiple signature verifications (see <xref target="sec-sec"/> for a more detailed discussion).</t>

<t>Once the SA is retrieved, the ESP accesses the AfRG to ascertain the EEC Rule and proceeds to decompress the EE. The ESP verifies the signature prior to decryption. Following this, the CTEC Rule is derived from the AfRG of the SA, allowing for the subsequent decompression. Finally, ESP extracts the Data Payload from the CTE packet, retrieves the IIPC Rule from the AfRG of the SA, and decompresses the Header.</t>

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

<figure title="SCHC Integration into the IPsec Stack. Packets are described for IPsec in tunnel mode. C designates the Compressed header for the fields inside. IIP refers to the Inner IP packet, EH refers to the ESP Header, and ET refers to the ESP Trailer. IIPC, CTEC and EEC respectively designate the Inner IP Compressor, the Clear Text ESP Compressor, and the Encrypted ESP Compressor." anchor="fig-arch"><artwork align="center"><![CDATA[
Endpoint                                 Endpoint
+------------------------+               +------------------------+
| Inner IP packet        |               | Inner IP packet        | 
+------------------------+               +------------------------+
========|=================================================^========
IPsec   |                                                 |
+------------------------+                                |
| SA lookup              |                                |
+------------------------+                                |
========|=================================================|========
ESP     |                                                 |
        |       +-------------------------------------+   |
        |       | Security Association                |   |                           
        |       |   - Attributes for Rule Generation  |   |
        |       +-------------------------------------+   | 
        |       |  Generation of the IIPC Rule,       |   |
        |       |   CTEC Rule, and EEC Rule           |   |
        |       +-------------------------------------+   | 
        |                                                 |
        v                                                 |            
+------------------------+               +------------------------+
| IIPC:                  |               | IIPC:                  |
| C{Header},Payload      |               | D{Header},Payload      |
+------------------------+               +------------------------+ 
| Formation of           |               | Extraction of          |
| Clear Text ESP         |               | Data Payload           |
+------------------------+               +------------------------+
| CTEC:                  |               | CTEC:                  |
| C{C{Header},           |               | DC{{C{Header},         |     
|   Payload,ET}          |               |   Payload,ET}          |
+------------------------+               +------------------------+
| Encryption             |               | Decryption             |
+------------------------+               +------------------------+
| Formation of           |               | Parsing                |
| Encrypted ESP          |               | Encrypted ESP          |
+------------------------+               +------------------------+
| EEC:                   |               | EEC:                   |  
| C{EH,C{C{Header},      |               | D{EH,C{{Header},       |
|   Payload,ET},ICV}     |               |   Payload,ET},ICV}     |
+------------------------+               +------------------------+
        |                                | SA lookup              |
        |                                +------------------------+
========|=================================================^========
        |                                                 |
        v                                                 | 
Outbound Traffic                                  Inbound Traffic 
]]></artwork></figure>

<section anchor="schc-parameters-for-diet-esp"><name>SCHC Parameters for Diet-ESP</name>

<t>The SCHC Packet <xref target="RFC8724"/> is always in the form:</t>

<figure title="SCHC Packet" anchor="fig-schc-compressed-packet-format"><artwork align="center"><![CDATA[
0 1 2 3 4 5 6 7
+-+-+-+-+-+-+-+---------...----------+~~~~~~~~~+---------------+
|   RuleID    | Compression Residue  | Payload | SCHC padding  | 
+-+-+-+-+-+-+-+---------...----------+~~~~~~~~~+---------------+
|-------- Compressed Header ---------|         |-- as needed --|
]]></artwork></figure>

<t>The RuleID is a unique identifier for each SCHC Rule. It is 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. Furthermore, <xref target="RFC8724"/> indicates that the way the RuleID is sent is left open to the profile specification. The RuleID in Diet-ESP is expressed as 1 byte but it can be elided as there is a unique Rule determined for the compressors. The 1 byte may be used in future implementations to support multiple flows over the same SA.</t>

<t>SCHC padding in SCHC serves the purpose of aligning data to a designated boundary, which is typically byte-aligned or aligned to 8 bits. This document presumes that this field is not utilized in CET and EEC. This document outlines a simpler form of padding for byte-alignment, as detailed in section <xref target="sec-iipc"/>. Such alignment is essential to ensure that encryption is applied to data that is byte-aligned. The rationale for employing a padding method other than SCHC Padding is to accommodate the length of the compressed ESP Payload Data.</t>

<t>Another variable required for the C/D in Diet-ESP is the Maximum Packet Size (MAX_PACKET_SIZE) determined by the specific IPsec ESP configuration and the underlying transport, but it is typically aligned with the network’s MTU. The size constraints are optimized based on the available link capacity and negotiated parameters between endpoints.</t>

</section>
<section anchor="sec-afrg"><name>Attributes for Rule Generation</name>

<t>The list of attributes for the Rule Generation (AfRG) is shown in <xref target="tab-ehc-ctx-esp"/>. These attributes are used to express the various compressions that operate at the IIPC, CTEC, and EEC.</t>

<t>As outlined in <xref target="sec-schc-ipsec-integration"/>, this specification does not detail the process by which the AfRG are established between peers. Instead, such negotiations are addressed in <xref target="I-D.ietf-ipsecme-ikev2-diet-esp-extension"/>. However, the AfRG can be classified into two distinct categories. The first category encompasses AfRG that are negotiated through a specific IKEv2 extension tailored for the negotiation of AfRG linked to a particular profile, the Diet-ESP profile in this context. The AfRG referenced in <xref target="tab-ehc-ctx-esp"/> in this category are: the DSCP Compression/Decompression Action (CDA) dscp_cda, the ECN CDA ecn_cda, the Flow Label CDA flow_label_cda, the ESP alignment alignment, the ESP SPI Least Significant Bits (LSB) esp_spi_lsb, and the ESP Sequence Number LSB esp_sn_lsb.</t>

<t>The second category pertains to AfRG that are negotiated through IKEv2 exchanges or extensions that are not specifically designed for compression purposes. This category includes AfRG associated with TS, as identified in <xref target="tab-ehc-ctx-esp"/>, which are the TS IP Version ts_ip_version, the TS IP Source Start ts_ip_src_start, the TS IP Source End ts_ip_src_end, the TS IP Destination Start ts_ip_dst_start, the TS IP Destination End ts_ip_dst_end, the TS Protocol ts_proto, the TS Port Source Start ts_port_src_start, the TS Port Source End ts_port_src_end, the TS Port Destination Start ts_port_dst_start, and the  TS Port Destination End ts_port_dst_end. These AfRG are derived from the Traffic Selectors established through TSi/TSr payloads during the IKEv2 CREATE_CHILD_SA exchange, as described in <xref section="3.13" sectionFormat="comma" target="RFC7296"/>. The AfRG IPsec Mode designated as ipsec_mode in <xref target="tab-ehc-ctx-esp"/> is determined by the presence or absence of the USE_TRANSPORT_MODE Notify Payload during the CREATE_CHILD_SA exchange, as detailed in <xref section="1.3.1" sectionFormat="comma" target="RFC7296"/>. The AfRG Tunnel IP designated as tunnel_ip in <xref target="tab-ehc-ctx-esp"/> is obtained from the IP address of the IKE messages exchanged during the CREATE_CHILD_SA process, as noted in <xref section="1.1.3" sectionFormat="comma" target="RFC7296"/>. The AfRGs designated as ESP Encryption Algorithm esp_encr and ESP Security Parameter Index (SPI) esp_spi in <xref target="tab-ehc-ctx-esp"/> are established through the SAi2/SAr2 payloads during the CREATE_CHILD_SA exchange, while the AfRG designated as ESP Sequence Number esp_sn in <xref target="tab-ehc-ctx-esp"/> is initialized upon the creation of the Child SA and incremented for each subsequent ESP message. The DSCP values identified as dscp_list in <xref target="tab-ehc-ctx-esp"/> are established through the DSCP Notify Payload <xref target="I-D.mglt-ipsecme-dscp-np"/>.</t>

<t>The ability to derive the IIP Compressor Rules for the internal IP packet from the agreed Traffic Selectors is indicated by the variable iipc_profile.</t>

<texttable title="Attributes for Rule Generation (AfRG) to generate IIPC, CTEC and EEC Rules in Diet-ESP" anchor="tab-ehc-ctx-esp">
      <ttcol align='left'>Variable</ttcol>
      <ttcol align='left'>Possible Values</ttcol>
      <ttcol align='left'>Reference</ttcol>
      <ttcol align='left'>Compressor</ttcol>
      <c>iipc_profile</c>
      <c>"iipc_diet-esp", "iipc_not_compressed"</c>
      <c>ThisRFC</c>
      <c>N/A</c>
      <c>dscp_cda</c>
      <c>"not_compressed", "lower", "sa"</c>
      <c>ThisRFC</c>
      <c>IIPC</c>
      <c>ecn_cda</c>
      <c>"not_compressed", "lower"</c>
      <c>ThisRFC</c>
      <c>IIPC</c>
      <c>flow_label_cda</c>
      <c>"not_compressed", "lower", "generated", "zero"</c>
      <c>ThisRFC</c>
      <c>IIPC</c>
      <c>ts_ip_version</c>
      <c>"IPv4-only", "IPv6-only"</c>
      <c>RFC7296</c>
      <c>IIPC</c>
      <c>ts_ip_src_start</c>
      <c>IPv4 or IPv6 address</c>
      <c>RFC7296</c>
      <c>IIPC</c>
      <c>ts_ip_src_end</c>
      <c>IPv4 or IPv6 address</c>
      <c>RFC7296</c>
      <c>IIPC</c>
      <c>ts_ip_dst_start</c>
      <c>IPv4 or IPv6 address</c>
      <c>RFC7296</c>
      <c>IIPC</c>
      <c>ts_ip_dst_end</c>
      <c>IPv4 or IPv6 address</c>
      <c>RFC7296</c>
      <c>IIPC</c>
      <c>ts_proto</c>
      <c>TCP, UDP, UDP-Lite, SCTP, ANY, ...</c>
      <c>RFC7296</c>
      <c>IIPC</c>
      <c>ts_port_src_start</c>
      <c>Port number</c>
      <c>RFC7296</c>
      <c>IIPC</c>
      <c>ts_port_src_end</c>
      <c>Port number</c>
      <c>RFC7296</c>
      <c>IIPC</c>
      <c>ts_port_dst_start</c>
      <c>Port number</c>
      <c>RFC7296</c>
      <c>IIPC</c>
      <c>ts_port_dst_end</c>
      <c>Port number</c>
      <c>RFC7296</c>
      <c>IIPC</c>
      <c>dscp_list</c>
      <c>list of DSCP numbers</c>
      <c>RFCYYYY</c>
      <c>IIPC</c>
      <c>alignment</c>
      <c>"8 bit", "16 bit", "32 bit", "64 bit"</c>
      <c>ThisRFC</c>
      <c>CTEC</c>
      <c>esp_trailer</c>
      <c>"Mandatory", "Optional"</c>
      <c>ThisRFC</c>
      <c>CTEC</c>
      <c>ipsec_mode</c>
      <c>"Tunnel", "Transport"</c>
      <c>RFC4301</c>
      <c>CTEC</c>
      <c>tunnel_ip</c>
      <c>IPv4 or IPv6 address</c>
      <c>RFC4301</c>
      <c>CTEC</c>
      <c>esp_encr</c>
      <c>ESP Encryption Algorithm</c>
      <c>RFC4301</c>
      <c>CTEC</c>
      <c>esp_spi</c>
      <c>ESP SPI</c>
      <c>RFC4301</c>
      <c>EEC</c>
      <c>esp_spi_lsb</c>
      <c>0-32</c>
      <c>ThisRFC</c>
      <c>EEC</c>
      <c>esp_sn</c>
      <c>ESP Sequence Number</c>
      <c>RFC4301</c>
      <c>EEC</c>
      <c>esp_sn_lsb</c>
      <c>0-32</c>
      <c>ThisRFC</c>
      <c>EEC</c>
</texttable>

<t>Any variable starting with "ts_" is associated with the Traffic Selectors (TSi/TSr) of the SA. 
The notation is introduced by this specification but the definitions of the variables are in <xref target="RFC4301"/> and <xref target="RFC7296"/>.</t>

<t>The Traffic Selectors may result in a quite complex expression, and this specification restricts that complexity. 
This specification restricts the resulting TSi/TSr to a single type of IP address (IPv4 or IPv6), a single protocol (e.g., UDP, TCP, or ANY), a single port range for source and destination. This specification presumes that the Traffic Selectors can be articulated as a result of CREATE_CHILD_SA with only one Traffic Selector <xref section="3.13.1" sectionFormat="comma" target="RFC7296"/> in both TSi and TSr payloads (as described in <xref section="3.13" sectionFormat="comma" target="RFC7296"/>). The TS Type MUST be either TS_IPV4_ADDR_RANGE or TS_IPV6_ADDR_RANGE.</t>

<t>Let the resulting Traffic Selectors TSi/TSr be expressed via the Traffic Selector structure defined in <xref section="3.13.1" sectionFormat="comma" target="RFC7296"/>. We designate the local TS the TS - either TSi or TSr - sent by the local peer. Conversely we designate as remote TS the TS - either TSi or TSr - sent by the remote peer.</t>

<t>The details of each parameter are the following:</t>

<dl>
  <dt>iipc_profile:</dt>
  <dd>
    <t>designates the behavior of the IIPC layer. When set to "iipc_not_compressed" IIPC is not performed. This specification describes IIPC that corresponds to the "iipc_diet-esp" profile.</t>
  </dd>
  <dt>flow_label_cda:</dt>
  <dd>
    <t>indicates the Flow Label CDA, that is how the Flow Label field of the inner IPv6 packet or the Identification field of the inner IPv4 packet is compressed / decompressed - See <xref target="sec-cda"/> for more information. In a nutshell, "not_compressed" indicates that Flow Label (resp. Identification) is not compressed. "lower" (using compute-*) indicates the value is read from the outer IP header - eventually with some adaptations when inner IP packet and outer IP packets have different versions. "generated" indicates that the field is generated by the receiving party. In that case, the decompressed value may take a different value compared to its original value. "zero" indicates the field is set to zero.</t>
  </dd>
  <dt>dscp_cda:</dt>
  <dd>
    <t>indicates the DSCP CDA, that is how the DSCP values of the inner IP packet are compressed / decompressed - See <xref target="sec-cda"/> for more information. In a nutshell, "not_compressed" indicates that DSCP are not compressed. "lower" (using compute-*) indicates the value is read from the outer IP header - eventually with some adaptations when inner IP packet and outer IP packets have different versions.  "sa" indicates, compression is performed according to the DSCP values agreed by the SA (dscp_list).</t>
  </dd>
  <dt>ecn_cda:</dt>
  <dd>
    <t>indicates ECN CDA, that is how the ECN values of the inner IP packet are compressed / decompressed - See <xref target="sec-cda"/> for more information. In a nutshell, "not_compressed" indicates that DSCP are not compressed. "lower" (using compute-*) indicates the value is read from the outer IP header - eventually with some adaptations when inner IP packet and outer IP packets have different versions.</t>
  </dd>
  <dt>ts_ip_version:</dt>
  <dd>
    <t>designates the TS IP version. Its value is set  to "IPv4-only" when only IPv4 IP addresses are considered and to "IPv6-only" 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. If TS Type of the resulting TSi/TSr is set to TS_IPV4_ADDR_RANGE, ts_ip_version takes the value "IPv4-only". Respectively, if TS Type is set to TS_IPV6_ADDR_RANGE, ts_ip_version is set to "IPv6-only".</t>
  </dd>
  <dt>ts_ip_src_start:</dt>
  <dd>
    <t>designates the TS IP Source Start, that is the starting value range of source IP addresses of the inner packet and has the same meaning as the Starting Address field of the local TS.</t>
  </dd>
  <dt>ts_ip_src_end:</dt>
  <dd>
    <t>designates TS IP Source End, that is 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 local TS.</t>
  </dd>
  <dt>ts_ip_dst_start:</dt>
  <dd>
    <t>designates the TS IP Destination Start, that is the starting value range of destination IP addresses of the inner packet and has the same meaning as the Starting Address field of the remote TS.</t>
  </dd>
  <dt>ts_ip_dst_end:</dt>
  <dd>
    <t>designates the TS IP Destination End, that is the high end value range of destination IP addresses of the inner packet and has the same meaning as the Ending Address field of the remote TS.</t>
  </dd>
  <dt>ts_proto:</dt>
  <dd>
    <t>designates the TS Protocol, that is the Protocol ID of the resulting TSi/TSr. This profile considers the specific protocol values "TCP", "UDP", "UDP-Lite", "SCTP", and "ANY". The representation of "ANY" is given in <xref section="4.4.4.2" sectionFormat="comma" target="RFC4301"/>.</t>
  </dd>
  <dt>ts_port_src_start:</dt>
  <dd>
    <t>designates the TS Port Source Start, that is the the starting value of the source port range of the inner packet and has the same meaning as the Start Port field of the local TS.</t>
  </dd>
  <dt>ts_port_src_end:</dt>
  <dd>
    <t>designates the TS Port Source End, that is the high end value range of the source port range of the inner packet and has the same meaning as the End Port field of the local TS.</t>
  </dd>
  <dt>ts_port_dst_start:</dt>
  <dd>
    <t>designates TS Port Destination Start, that is the starting value of the destination port range of the inner packet and has the same meaning as the Start Port field of the remote TS.</t>
  </dd>
  <dt>ts_port_dst_end:</dt>
  <dd>
    <t>designates TS Port Destination End, that is the high end value range of the destination port range of the inner packet and has the same meaning as the End Port field of the remote TS.</t>
  </dd>
</dl>

<t>IP addresses and ports are defined as a range and compressed using the Least Significant Bits (LSB).
For a range defined by start and end values, msb( start, end ) is defined as the function that returns the Most Significant Bits (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>

<dl>
  <dt>dscp_list:</dt>
  <dd>
    <t>designates the list of DSCP values associated to the inner traffic - see for example <xref target="I-D.mglt-ipsecme-dscp-np"/>. These are not Traffic Selectors, but the compression mandates that the packets take one of these listed DSCP values.</t>
  </dd>
  <dt>alignment:</dt>
  <dd>
    <t>designates the ESP alignment as defined by <xref target="RFC4303"/>.</t>
  </dd>
  <dt>esp_trailer:</dt>
  <dd>
    <t>When configured to "Mandatory," it signifies that the implementation requires the ESP Trailer to include a Next Header and a Pad Len field, as outlined in <xref target="RFC4303"/>. This requirement primarily aims to ensure compatibility with current hardware implementations of ESP, as detailed in <xref target="RFC4303"/>. Conversely, if set to "Optional," it indicates that the implementation is capable of supporting the compression of the ESP Trailer.</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 Tunnel 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_encr:</dt>
  <dd>
    <t>designates the ESP Encryption Algorithm - also designated as Transform 1 in <xref section="3.3.2" sectionFormat="comma" target="RFC7296"/>. The algorithm is needed to determine whether the ESP Payload Data needs to be aligned to some predefined block size and if the ESP Pad Length and Padding fields can be compressed.  For the purpose of compression it is RECOMMENDED to use algorithms that already compressed their IV <xref target="RFC8750"/>.</t>
  </dd>
  <dt>esp_spi:</dt>
  <dd>
    <t>designates the Security Parameter 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. A value of 32 for esp_spi_lsb will leave the SPI unchanged.</t>
  </dd>
  <dt>esp_sn:</dt>
  <dd>
    <t>designates the ESP 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. It works similarly to ESP SPI LSB (see esp_spi_lsb).</t>
  </dd>
</dl>

<section anchor="sec-cda"><name>Diet-ESP SCHC Rule Table</name>

<t><xref target="tab-cda"/> defines the SCHC compression rules for Diet-ESP in IPsec using specific Compression/Decompression Actions (CDAs) for this profile in addition to the ones defined in <xref section="7.4" sectionFormat="comma" target="RFC8724"/>. These CDAs are either a refinement of the compute-* CDA or the result of a combined CDA. It specifies how various IPv6, UDP/TCP, and ESP header fields are compressed and decompressed.</t>

<texttable title="Specific compute-* CDAs used in Diet-ESP" anchor="tab-cda">
      <ttcol align='left'>Field</ttcol>
      <ttcol align='left'>FL</ttcol>
      <ttcol align='left'>FP</ttcol>
      <ttcol align='left'>DI</ttcol>
      <ttcol align='left'>TV</ttcol>
      <ttcol align='left'>MO</ttcol>
      <ttcol align='left'>CDA</ttcol>
      <c>Version</c>
      <c>3</c>
      <c>1</c>
      <c>Bi</c>
      <c>ts_ipversion</c>
      <c>equal</c>
      <c>not-sent</c>
      <c>DSCP</c>
      <c>6</c>
      <c>1</c>
      <c>Dw</c>
      <c>—</c>
      <c>ignore</c>
      <c>value-sent</c>
      <c>ECN</c>
      <c>2</c>
      <c>1</c>
      <c>Dw</c>
      <c>—</c>
      <c>ignore</c>
      <c>value-sent</c>
      <c>Flow Label</c>
      <c>20</c>
      <c>1</c>
      <c>Dw</c>
      <c>—</c>
      <c>ignore</c>
      <c>compute-*</c>
      <c>Payload Length</c>
      <c>16</c>
      <c>1</c>
      <c>Bi</c>
      <c>—</c>
      <c>ignore</c>
      <c>compute-*</c>
      <c>Next Header</c>
      <c>8</c>
      <c>1</c>
      <c>Bi</c>
      <c>ts_proto</c>
      <c>equal</c>
      <c>not-sent</c>
      <c>Hop Limit</c>
      <c>8</c>
      <c>1</c>
      <c>Dw</c>
      <c>—</c>
      <c>elided</c>
      <c>compute-*</c>
      <c>Source Address</c>
      <c>128</c>
      <c>1</c>
      <c>Bi</c>
      <c>msb(src_start, src_end)</c>
      <c>MSB</c>
      <c>LSB</c>
      <c>Destination Address</c>
      <c>128</c>
      <c>1</c>
      <c>Bi</c>
      <c>msb(dst_start, dst_end)</c>
      <c>MSB</c>
      <c>LSB</c>
      <c>Source Port (UDP/TCP)</c>
      <c>16</c>
      <c>1</c>
      <c>Bi</c>
      <c>msb(src_port_start, end)</c>
      <c>MSB</c>
      <c>LSB</c>
      <c>Destination Port (UDP/TCP)</c>
      <c>16</c>
      <c>1</c>
      <c>Bi</c>
      <c>msb(dst_port_start, end)</c>
      <c>MSB</c>
      <c>LSB</c>
      <c>Checksum</c>
      <c>16</c>
      <c>1</c>
      <c>Bi</c>
      <c>—</c>
      <c>ignore</c>
      <c>compute-*</c>
      <c>UDP Length</c>
      <c>16</c>
      <c>1</c>
      <c>Bi</c>
      <c>—</c>
      <c>ignore</c>
      <c>compute-*</c>
      <c>ESP Padding</c>
      <c>-</c>
      <c>-</c>
      <c>-</c>
      <c>—</c>
      <c>compute-*</c>
      <c>elided</c>
      <c>Byte Alignment</c>
      <c>8</c>
      <c>1</c>
      <c>Bi</c>
      <c>—</c>
      <c>compute-*</c>
      <c>send</c>
      <c>SPI</c>
      <c>32</c>
      <c>1</c>
      <c>Dw</c>
      <c>—</c>
      <c>MSB(4 - esp_spi_lsb)</c>
      <c>LSB</c>
      <c>SN</c>
      <c>32</c>
      <c>1</c>
      <c>Dw</c>
      <c>—</c>
      <c>MSB(4 - esp_sn_lsb)</c>
      <c>LSB</c>
</texttable>

<t>Here are a few key features from the table:</t>

<t>The IPv6 Header Compression includes the following fields: Version, DSCP, ECN, Flow Label, etc.</t>

<t>The UDP/TCP Header Compression includes the following fields: Ports, Checksum, Length.</t>

<t>The ESP Header Compression fields include the following: Padding, Sequence Number (SN), SPI.</t>

<t>The Byte Alignment Padding is maintained to comply with the byte-aligned ESP Payload requirement.</t>

<t>Here are the additional CDAs defined in this profile:</t>

</section>
</section>
</section>
<section anchor="diet-esp-for-ipsec-in-tunnel-mode"><name>Diet-ESP for IPsec in Tunnel mode</name>

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

<t>When iipc_profile is set to "iipc_not_compressed", the packet is not compressed. When iipc_profile is set to "iipc_diet-esp", IIPC proceeds to the compression of the inner IP Packet composed of Header and Payload. In the latter case, the Header is compressed when ipsec_mode is set to "Tunnel" and not compressed otherwise. ts_ip_version determines how the IPv6 Header (resp. the IPv4 header) is compressed - see <xref target="sec-inner-ip6"/> (resp. <xref target="sec-inner-ip4"/>).</t>

<t>The SCHC packet illustrated in <xref target="fig-schc-compressed-packet-format"/> appends the padding at the end of the SCHC Packet. This approach presents notable challenges, including handling a Payload that lacks byte alignment. Furthermore, the absence of a specified Payload length would necessitate the inclusion of the padding length within the padding itself, which would require a particular padding construction akin to that utilized by the Padding ESP, thereby posing difficulties for hardware implementations.</t>

<t>To address these issues, IIPC uses a pre-processing phase where the IIP is divided into two segments: the Header, which is subject to compression, and the Payload, which is not. Following this, the compression process applies the defined rule to the Header, resulting in a SCHC Packet (refer to <xref target="fig-schc-compressed-packet-format"/>) that features an empty SCHC Payload field, with a padding field positioned after the Compression Residue. Ultimately, a post-processing phase merges the SCHC Packet with the Payload, allowing the compressor to produce an IIPC packet in the format outlined in <xref target="fig-diet-esp-compressed-header-format"/>.</t>

<figure title="Packet format after IIPC compression" anchor="fig-diet-esp-compressed-header-format"><artwork align="center"><![CDATA[
 0 1 2 3 4 5 6 7|<---- s bits ------->|<-0..7 bits->|<---n bytes--->|
+-+-+-+-+-+-+-+-+---------...---------+~~~~~~~~~~~~~+---------------+
|   RuleID      | Compression Residue |   padding   | Payload       |
+-+-+-+-+-+-+-+-+---------...---------+~~~~~~~~~~~~~+---------------+
|-------- Compressed Header ----------|--as needed--|
]]></artwork></figure>

<t>It is important to observe that the resulting packet is byte-aligned. Additionally, the division between Header and Payload can only occur because all the Header fields are of a fixed size.</t>

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

<t>This section describes the compression of the inner IP Payload. The compression described herein only affects UDP, UDP-Lite, TCP or SCTP segments. The type of segment is specified in the IP Header.</t>

<t>For UDP, UDP-Lite, TCP and SCTP segments, source ports, destination ports, and checksums are compressed. 
For source port (resp. destination port) only the least significant bits are sent. FL is set to 16 bits,  TV is set to msb( ts_port_src_start, ts_port_src_end ) ( resp. ts_port_dst_start, ts_port_dst_end ), MO is set to "MSB" and CDA to "LSB". 
The checksum is elided, FL is set to 16 bits, 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>For UDP or UDP-Lite the length field is elided. FL is set to 16, TV is not set, MO is set to "ignore".</t>

</section>
<section anchor="sec-inner-ip6"><name>Inner IPv6 packet Headers Compression</name>

<t>The version field is elided, FL is set to 3, TV is set to ts_ipversion, MO is set to "equal" and CDA is set to "not-sent".</t>

<t>Traffic Class is composed of the 6 bit DSCP and 2 bit ECN.
The compression of DSCP and ECN are defined independently.</t>

<t>DSCP values are compressed according to the dscp_cda value:</t>

<t><list style="symbols">
  <t>If dscp_cda is set to "not_compressed", the DSCP values are included in the inner IP header. FL is set to 6 bits, TV is not set, MO is set to "ignore", CDA is set to "sent-value".</t>
  <t>If dscp_cda is set to "lower", the DSCP field is elided and its value is copied from the Tunnel IP header. FL is set to 6 bits, TV is not set, MO is set to "ignore", CDA is set to "lower".</t>
  <t>If dscp_cda is set to "sa", DSCP is compressed according to the DSCP values of the SA. If dscp_list contains a single element, the DSCP is elided, FL is set to 6 bits, TV is set to dscp_list[0], MO is set to "equal" and CDA is set to "not-sent". If dscp_list contains more than one DSCP value, FL is set to 6 bits, TV is set to dscp_list, MO is set to "match-mapping" and the CDA is set to "mapping-sent". 
For ECN, FL is set to 2 bits, TV is not set, MO is set to ignore and CDA is set to "value-sent".</t>
</list></t>

<t>ECN values are compressed according to the ecn_cda value:</t>

<t><list style="symbols">
  <t>If ecn_cda is set to "not_compressed", the ECN field is included in the inner IP header. FL is set to 2 bits, TV is not set, MO is set to "ignore", CDA is set to "sent-value".</t>
  <t>If ecn_cda is set to "lower", the ECN value is elided and the ECN value is copied in the outer IP header. FL is set to 2 bits, TV is not set, MO is set to "ignore", CDA is set to "lower".</t>
</list></t>

<t>Flow label is compressed according to the flow_label_cda value:</t>

<t><list style="symbols">
  <t>If flow_label_cda is set to "not_compressed", the Flow label is included in the IPv6 Header. FL is set to 20 bits, TV is not set, MO is set to "ignore", and CDA is set to "sent-value".</t>
  <t>If flow_label_cda is set to "lower", the Flow Label is elided and read from the outer IP Header (using compute-*(See <xref target="sec-cda"/>)). FL is set to 20 bits, TV is not set, MO is set to "ignore", and CDA is set to "lower". If the outer IP header is an IPv4 header, only the 16 LSB of the Flow Label are inserted into the IPv4 Header. At the decompression, the 4 MSB of the Flow Label are set to 0.</t>
  <t>If flow_label_cda is set to "generated", the Flow Label is elided and the Flow Label is then re-generated (using compute-*) at the decompression (See <xref target="sec-cda"/>). The resulting Flow Label differs from the initial value. FL is set to 20, TV is not set, MO is set to "ignore" and CDA is set to "generated".</t>
  <t>If flow_label_cda is set to "zero", the Flow Label is elided and set to 0 at decompression. A 0 value indicates no flow label is present. Fl is set to 20 bits, TV is set to 0, MO is set to "equal" and CDA is set to "not-sent".</t>
</list></t>

<t>Payload Length is elided and determined from the Tunnel IP Header Payload Length as well as the decompressed Payload. FL is set to 16 bits, TV is not set, MO is set to "ignore", CDA is set to "lower".</t>

<t>Next Header is compressed according to ts_proto:</t>

<t><list style="symbols">
  <t>If ts_proto is the single value 0, Next Header is not compressed. FL is set to 8 bits, TV is not set, MO is set to "ignore", CDA is set to "sent-value".</t>
  <t>If ts_proto is a single non zero value, Next Header is compressed. FL is set to 8 bits, TV is set to ts_proto, MO is set to "equal" and CDA is set to "not-sent".</t>
</list></t>

<t>The IPv6 Hop Limit is read from the Tunnel IP Header Hop Limit. FL is set to 8 bits, TV is not set, MO is set to "ignore" and CDA is set to "lower."</t>

<t>The source and destination IPv6 addresses are compressed using MSB. 
In both cases, FL is set to 128, TV is respectively set to  msb(ts_ip_src_start, ts_ip_src_ed) or msb(ts_ip_dst_start, ts_ip_dst_end), the MO is set to "MSB," and the CDA is set to "LSB."</t>

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

<t>The fields Version, DSCP, ECN, Source Address and Destination Address are compressed as described for IPv6 in <xref target="sec-inner-ip6"/>.
The field Total Length (16 bits) is compressed similarly to the IPv6 field Payload Length. The field Identification (16 bits) is compressed similarly to the IPv6 field Flow Label. If the tunnel IP Header is an IPv6 Header, the Identification is placed as the LSB of the IPv6 Header and the 4 remaining MSB are set to 0.  The field Time to Live is compressed similarly to the IPv6 Hop Limit field. The Protocol field is compressed similarly to the last IPv6 Next Header field.</t>

<t>The Internet Header Length (IHL) is not compressed, FL is set to 4 bits, TV is not set, MO is set to ignore and CDA is set to "value-sent".</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>

</section>
</section>
<section anchor="sec-ctec"><name>Clear Text ESP Compression (CTEC)</name>

<t>Once the Inner IP Packet has undergone compression as outlined in <xref target="sec-iipc"/>, the resulting compressed packet comprises a specific number of bytes. To construct the Clear Text ESP Packet, it is necessary to ascertain the ESP Payload Data, the Next Header, the ESP Pad Length, and the ESP Padding fields.</t>

<t>When esp_trailer is set to "Mandatory", the Next Header and the ESP Pad Length fields are present. Such requirement is usually expected to remain compatible with hardware implementations of ESP. The ESP Pad Length value is determined to meet the required alignment. When alignment is set to "8bit", Pad Length is set to 0 and the Padding field is empty.</t>

<t>Conversely, when esp_trailer is set to "Optional", the Next Header Pad Length and Padding are generated as follows:</t>

<t>In transport mode, the IP header of the inner packet remains not compressed during the IIPC phase, and the ESP Payload Data is derived from the inner packet. Conversely, in tunnel mode, the ESP Payload Data encompasses the entirety of the packet generated by the IIPC.</t>

<t>In transport mode, the Next Header field is obtained from either the inner IP Header or the Security Association, as specified in <xref target="sec-inner-ip4"/> or <xref target="sec-inner-ip6"/>. In tunnel mode, the Next Header is elided, as it is determined by ts_ip_version. FL is set to 8 bit, TV is set to IPv4 or IPv6 depending on ts_ip_version, MO is set to "equal" and CDA is set to "not-sent".</t>

<t>The ESP Pad Length and ESP Padding fields are omitted only when ESP alignment has been selected to "8bit" and esp_encr does not necessitate a specific block size alignment, or if that block size is one byte. This is represented by setting FL to (Pad Length + 1) * 8 bits, leaving TV unset, configuring MO to "ignore," and designating CDA as padding. The ESP Padding and ESP Pad Length may vary from their decompressed counterparts. However, since the IPsec process removes the padding, these variations do not affect packet processing. When esp_encr requires a specific block size, the ESP Pad Length and ESP Padding fields remain not compressed.</t>

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

<t>Once the Clear Text Packet has undergone compression as outlined in <xref target="sec-iipc"/>, the resulting CTEC is encrypted. The header fields once the encrypted ESP packet is formed are the SPI and SN. To facilitate the processes of compression and decompression, this specification requires that the compressed ESP Header is byte-aligned. This requirement is satisfied by ensuring that the sum of esp_spi_lsb and esp_sn_lsb MUST be a multiple of 8.</t>

<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>SN is 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_sn_lsb)" and CDA is set to "LSB".</t>

</section>
</section>
<section anchor="diet-esp-compression-for-ipsec-in-transport-mode"><name>Diet-ESP Compression for IPsec in Transport mode</name>

<t>The transport mode mostly differs from the Tunnel mode in that the IP header of the packet is not encrypted. As a result, the IP Payload is compressed as described in <xref target="sec-payload"/>. The IP header is not compressed. The byte alignment of the Compressed Payload is performed as described in <xref target="sec-iipc"/>. The Clear Text ESP Compression is performed as described in <xref target="sec-ctec"/> except for the Next Header Field, which is compressed as described in <xref target="sec-inner-ip6"/>.</t>

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

<t>We request the IANA to create a new registry for the IIPC Profile</t>

<figure><artwork><![CDATA[
| IIPC Profile value    | Reference |
+-----------------------+-----------+
| "iipc_not_compressed" | ThisRFC   |
| "iipc_diet-esp"       | ThisRFC   |
]]></artwork></figure>

<t>We request IANA to create the following registries for the "diet-esp" IIPC Profile.</t>

<figure><artwork><![CDATA[
| Flow Label CDA Value | Reference |
+----------------------+-----------+
| "not_compressed"     | ThisRFC   |
| "generated"          | ThisRFC   |
| "lower"              | ThisRFC   |
| "zero"               | ThisRFC   |
]]></artwork></figure>

<figure><artwork><![CDATA[
| DSCP CDA Value       | Reference |
+----------------------+-----------+
| "not_compressed"     | ThisRFC   |
| "lower"              | ThisRFC   |
| "sa"                 | ThisRFC   |
]]></artwork></figure>

<figure><artwork><![CDATA[
| ECN CDA Value       | Reference |
+---------------------+-----------+
| "not_compressed"    | ThisRFC   |
| "lower"             | ThisRFC   |
]]></artwork></figure>

<figure><artwork><![CDATA[
| Alignment            | Reference |
+----------------------+-----------+
| "8 bit"              | ThisRFC   |
| "16 bit"             | ThisRFC   |
| "32 bit"             | ThisRFC   |
| "64 bit"             | ThisRFC   |
]]></artwork></figure>

<figure><artwork><![CDATA[
| IPsec mode Value     | Reference |
+----------------------+-----------+
| "Tunnel"             | ThisRFC   |
| "Transport"          | ThisRFC   |
]]></artwork></figure>

</section>
<section anchor="sec-sec"><name>Security Considerations</name>

<t>The security considerations encompass those outlined in ESP <xref target="RFC4303"/> as well as those pertaining to SCHC <xref target="RFC8724"/>.</t>

<t>When employing ESP <xref target="RFC4303"/> in Tunnel Mode, the complete inner IP packet is safeguarded against man-in-the-middle attacks through cryptographic means, rendering it virtually impossible for an attacker to alter any fields associated with either the inner IP header or the inner IP payload. This level of protection is achieved by configuring the Flow Label CDA Value to "not_compressed", the DSCP CDA Value to either "not_compressed" or "sa", and the ECN CDA Value to "not_compressed".</t>

<t>However, this protection is compromised if the Flow Label CDA Value, DSCP CDA Value, or ECN CDA Values are set to "lower." In such cases, the values from the inner packet for the respective fields will be derived from the outer IP header, leaving these fields unprotected. It is important to note that even the Authentication Header <xref target="RFC4302"/> does not provide protection for these fields. When associated with a CDA value of "lower," the level of protection is akin to that provided in Transport mode. This vulnerability could be exploited by an attacker within an untrusted domain, potentially disrupting load balancing strategies that rely on the Flow Label <xref target="RFC6438"/><xref target="RFC6437"/>. More broadly, when the Flow Label CDA Value is set to "lower," the relevant Flow Label Security Considerations from <xref target="RFC6437"/> apply. Additionally, an attacker may manipulate the DSCP values to diminish the priority of specific packets, resulting in packets from the same flow having varying priorities, traversing different paths, and introducing additional latency to applications, thereby facilitating DDoS attacks. Consequently, these fields remain unprotected and are susceptible to modification during transmission, which may also be regarded as an acceptable risk.</t>

<t>When the Flow Label CDA Value is designated as "generated" or "zero," an attacker is unable to exploit the Flow Label field in any manner. The inner packet received is anticipated to possess a Flow Label distinct from that of the original encapsulated packet. However, the Flow Label is assigned by the receiving gateway. When the value is set to "zero," it is known, whereas when it is designated as "generated," it must be produced in accordance with the specifications outlined in <xref target="RFC6437"/>.</t>

<t>The DSCP CDA Value is assigned as "sa" when DSCP values are linked to Security Associations (SAs), but it should not be utilized when all DSCP values are encompassed within a single SA. In such instances, "not_compressed" is recommended.</t>

<t>The encryption algorithm must adhere to the guidelines provided in <xref target="RFC8221"/> to guarantee contemporary cryptographic protection.</t>

<t>The least significant bits (LSB) of the ESP Security Parameter Index (SPI) determine the number of bits allocated to the SPI. An acceptable quantity of LSB must ensure that the peer possesses a sufficient number of SPIs, which is contingent upon the implementation of the SA lookup employed. If a peer relies solely on the SPI fields for SA lookup, then the number of LSB to consider must be sufficiently large to include the number of SPIs. 
A peer may compress its SPIs differently, in which case a incoming packet may have its SPI compressed to X bits while another packet may have its SPI compressed to Y bits. The operator must be cognizant that if multiple LSB values are permissible for each type of SA lookup, then multiple SA lookups and signature verifications may be required. It is advisable for a peer to ascertain the LSB associated with an incoming packet in a deterministic manner.</t>

<t>The ESP SN LSB must be established in a manner that allows the receiving peer to clearly ascertain the sequence number of the IPsec packet. If this requirement is not met, it will lead to an invalid signature verification, resulting in the rejection of the packet. Furthermore, the LSB should have the capacity to accommodate the maximum number of packets that may be in transit simultaneously. This approach will guarantee that the last packet received is correctly linked to the corresponding sequence number.</t>

<t>The ESP extension for IPv6 (and similarly for IPv4) requires a 64-bit (or 32-bit) alignment. Choosing alternative alignment values may result in a packet that fails to comply with this alignment requirement, potentially leading to rejection. The necessity for such alignment in IPv6 extensions arises from the fact that the length field in an IPv6 header extension is defined in terms of 64-bit words, making proper alignment essential for accurate packet parsing. Parsing of ESP does not present complications, as it is compatible with IPv6; the ESP extension is processed exclusively by the terminal IPsec peers and not by intermediary nodes. Furthermore, the ESP extension lacks a dedicated length field. Instead, its length is determined by the IPv6 Header Length field, which is measured in bytes, along with the starting position of the ESP header extension. Consequently, it remains entirely feasible to parse an ESP extension that is not aligned to 64 bits. The same principle is applicable to IPv4.</t>

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

<t>We extend our gratitude to Laurent Toutain, Ana Carolina Minaburo, Pascal Thubert, and Alexandre Pelov for their guidance on SCHC and their valuable insights concerning the implementation of OpenSCHC <xref target="OpenSCHC"/>. Additionally, we express our appreciation to Robert Moskowitz for his inspiration in coining the term "Diet-ESP," derived from Diet-HIP, as well as to Samita Chakrabart, Tero Kivinen, Michael Richardson, and Valery Smyslov for their enduring support. The authors also wish to acknowledge the assistance provided by Mitacs through the Mitacs Accelerate program.</t>

</section>


  </middle>

  <back>


<references title='References' anchor="sec-combined-references">

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

&RFC2119;
&RFC8174;
&RFC4303;
&RFC4301;
&RFC8724;
&RFC7296;
&I-D.ietf-ipsecme-ikev2-diet-esp-extension;
&I-D.mglt-ipsecme-dscp-np;
&RFC8750;
&RFC6437;
&RFC8221;


    </references>

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

<reference anchor="OpenSCHC" target="https://github.com/openschc">
  <front>
    <title>OpenSCHC a Python open-source implementation of SCHC (Static Context Header Compression)</title>
    <author >
      <organization></organization>
    </author>
    <date year="n.d."/>
  </front>
</reference>
&RFC9333;
&RFC8376;
&I-D.ietf-schc-architecture;
&RFC4302;
&RFC6438;


    </references>

</references>


<?line 643?>

<section anchor="appendix"><name>Appendix</name>

<t>This appendix provides the details of the SCHC rules defined for Diet-ESP compression, alongside an explanation and illustrative examples for both Tunnel and Transport modes.</t>

<section anchor="illustrative-examples-of-diet-esp-in-tunnel-mode"><name>Illustrative Examples of Diet-ESP in Tunnel Mode</name>

<t>This section provides a structured example of how Diet-ESP operates in Tunnel Mode. The example includes Attributes for Rule Generation (AfRG), SCHC rules, the Inner IP packet (IIP), the compression process, and the decompression process.</t>

<section anchor="json-representation-in-tunnel-mode"><name>Json representation in Tunnel mode</name>

<t>In Tunnel Mode, the full inner IP packet is compressed before encryption, making it more efficient for VPN scenarios. The "iipc_diet-esp" profile is used to indicate compression of the inner packet. The IPv6 Source and Destination Addresses are compressed using "MSB", sending only the variable parts while keeping the most significant bits. UDP Source and Destination Ports are compressed with "LSB", reducing their size. "compute-length" removes the UDP Length field, and "checksum" omits the UDP checksum, which is recalculated at decompression. ESP SPI and Sequence Number are compressed using "LSB" with an MSB mask. The "not-sent" CDA is used for Next Header fields in both IPv6 and ESP, as their values are predictable.</t>

<figure><sourcecode type="json"><![CDATA[
{
  "compressed": [
    {
      "FID": "ts_ip_src_start",
      "FL": 128,
      "TV": "2001:db8::1234",
      "MO": "MSB",
      "CDA": "LSB"
    },
    {
      "FID": "ts_ip_dst_start",
      "FL": 128,
      "TV": "2001:db8::5678",
      "MO": "MSB",
      "CDA": "LSB"
    },
    {
      "FID": "IPv6.NextHeader",
      "FL": 8,
      "TV": 17,
      "MO": "equal",
      "CDA": "not-sent"
    },
    {
      "FID": "ts_port_dst_start",
      "FL": 16,
      "TV": 5001,
      "MO": "MSB",
      "CDA": "LSB"
    },
    {
      "FID": "ts_port_dst_start",
      "FL": 16,
      "TV": 4500,
      "MO": "MSB",
      "CDA": "LSB"
    },
    {
      "FID": "UDP.Length",
      "FL": 16,
      "TV": null,
      "MO": "ignore",
      "CDA": "compute-length"
    },
    {
      "FID": "UDP.Checksum",
      "FL": 16,
      "TV": null,
      "MO": "ignore",
      "CDA": "compute-checksum"
    },
    {
      "FID": "esp_spi",
      "FL": 32,
      "TV": null,
      "MO": "MSB(4 - esp_spi_lsb)",
      "CDA": "LSB"
    },
    {
      "FID": "esp_sn",
      "FL": 32,
      "TV": null,
      "MO": "MSB(4 - esp_sn_lsb)",
      "CDA": "LSB"
    },
    {
      "FID": "ESP.Padding",
      "FL": 8,
      "TV": null,
      "MO": "ignore",
      "CDA": "padding"
    }, 
    {
      "FID": "alignment",
      "FL": 8,
      "TV": "64 bit",
      "MO": "equal",
      "CDA": "not-sent"
    }
  ]
}
]]></sourcecode></figure>

</section>
<section anchor="attributes-for-rule-generation-afrg"><name>Attributes for Rule Generation (AfRG)</name>

<t>The SCHC rules for Tunnel Mode are derived from the following AfRG:</t>

<t><list style="symbols">
  <t>IPsec Mode: Tunnel</t>
  <t>Traffic Selector IP Version: IPv6-only</t>
  <t>Traffic Selector Source Address: 2001:db8::1234</t>
  <t>Traffic Selector Destination Address: 2001:db8::5678</t>
  <t>DSCP CDA: Lower</t>
  <t>ECN CDA: Lower</t>
  <t>ESP SPI Compression: LSB</t>
  <t>ESP SN Compression: LSB</t>
</list></t>

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

<t>The rules for the IIPC, CTEC, and EEC layers are defined as IIPC to compress IPv6 headers and UDP headers, CTEC to compress ESP Trailer fields, and EEC to compress ESP SPI and Sequence Number.</t>

<t>The IIPC original packet before compression consists of:</t>

<t><list style="symbols">
  <t>IPv6 Source Address: 2001:db8::1234</t>
  <t>IPv6 Destination Address: 2001:db8::5678</t>
  <t>UDP Source Port: 5001</t>
  <t>UDP Destination Port: 4500</t>
  <t>UDP Length: 16 bytes</t>
  <t>ESP Payload Data</t>
</list></t>

<t>Each compressor applies the rule selected by the SA as follows:</t>

<t><list style="numbers" type="1">
  <t>IIPC: UDP Header Compression
  <list style="symbols">
      <t>UDP ports are compressed using the LSB technique.</t>
      <t>UDP Length is removed (computed at decompression).</t>
      <t>UDP Checksum is omitted.</t>
    </list></t>
  <t>IIPC: IPv6 Header Compression
  <list style="symbols">
      <t>Source and Destination Addresses are compressed using MSB.</t>
      <t>Next Header field is omitted.</t>
    </list></t>
  <t>CTEC: ESP Trailer Compression
  <list style="symbols">
      <t>Pad Length and Padding are omitted.</t>
      <t>Next Header is omitted.</t>
    </list></t>
  <t>EEC: ESP Header Compression
  <list style="symbols">
      <t>SPI and SN are compressed using LSB.</t>
      <t>Compressed Packet Output</t>
    </list></t>
</list></t>

<t>The final compressed packet consists of the compressed ESP header, IIPC compressed data, and payload.</t>

</section>
<section anchor="diet-esp-decompression"><name>Diet-ESP Decompression</name>

<t>The decompression process reverses these steps:</t>

<t><list style="numbers" type="1">
  <t>EEC: ESP Header Decompression
  <list style="symbols">
      <t>SPI and SN are reconstructed using the LSB values.</t>
    </list></t>
  <t>CTEC: ESP Trailer Decompression (Optional)</t>
  <t>IIPC: IPv6 Header Decompression
  <list style="symbols">
      <t>ESP Next Header and Padding fields are restored.</t>
      <t>IPv6 Source and Destination Addresses are restored.</t>
    </list></t>
  <t>IIPC: UDP Header Decompression
  <list style="symbols">
      <t>UDP ports are restored using the decompressed LSB values.</t>
      <t>UDP Length and Checksum are recalculated.</t>
    </list></t>
</list></t>

</section>
</section>
<section anchor="illustrative-examples-of-diet-esp-in-transport-mode"><name>Illustrative Examples of Diet-ESP in Transport Mode</name>

<t>This section follows the same structure as Tunnel Mode but applies to Transport Mode, where the IP header remains not compressed.</t>

<section anchor="json-representation-in-transport-mode"><name>Json representation in Transport mode</name>

<t>In Transport Mode, since the IP header remains not compressed, only the UDP payload and ESP fields are compressed. The new IANA-defined CDAs are applied as follows: "checksum" is used for the UDP checksum, meaning it is recalculated at decompression rather than transmitted. "compute-length" eliminates the UDP Length field, as it can be inferred from the payload size. "padding" ensures ESP padding aligns with 8-bit boundaries. "not-sent" is applied to the IPv6 and ESP Next Header fields because their values are predictable. The UDP Source and Destination Ports use "LSB" compression, reducing overhead by sending only the least significant bits. The ESP SPI and Sequence Number are compressed similarly using "LSB" with an MSB mask. Since the IP header is retained, the Source and Destination IPv6 Addresses are fully transmitted using "sent-value".</t>

<figure><sourcecode type="json"><![CDATA[
[
  {
  "ipsec_mode": "Transport",
  "ts_ip_version": "IPv6-only",
  "compressed_fields": [
    {
      "FID": "ts_ip_src_start",
      "FL": 128,
      "TV": "2001:db8::1001",
      "MO": "equal",
      "CDA": "sent-value"
    },
    {
      "FID": "ts_ip_dst_start",
      "FL": 128,
      "TV": "2001:db8::2002",
      "MO": "equal",
      "CDA": "sent-value"
    },
    {
      "FID": "IPv6.NextHeader",
      "FL": 8,
      "TV": 17,
      "MO": "equal",
      "CDA": "not-sent"
    },
    {
      "FID": "ts_port_src_start",
      "FL": 16,
      "TV": 1234,
      "MO": "MSB",
      "CDA": "LSB"
    },
    {
      "FID": "ts_port_dst_start",
      "FL": 16,
      "TV": 5678,
      "MO": "MSB",
      "CDA": "LSB"
    },
    {
      "FID": "UDP.Length",
      "FL": 16,
      "TV": null,
      "MO": "ignore",
      "CDA": "compute-length"
    },
    {
      "FID": "UDP.Checksum",
      "FL": 16,
      "TV": null,
      "MO": "ignore",
      "CDA": "checksum"
    },
    {
      "FID": "esp_spi",
      "FL": 32,
      "TV": null,
      "MO": "MSB(4 - esp_spi_lsb)",
      "CDA": "LSB"
    },
    {
      "FID": "esp_sn",
      "FL": 32,
      "TV": null,
      "MO": "MSB(4 - esp_sn_lsb)",
      "CDA": "LSB"
    },
    {
      "FID": "ESP.Padding",
      "FL": 8,
      "TV": null,
      "MO": "ignore",
      "CDA": "padding"
    },
    {
      "FID": "ESP.NextHeader",
      "FL": 8,
      "TV": 17,
      "MO": "equal",
      "CDA": "not-sent"
    }, 
    {
      "FID": "alignment",
      "FL": 8,
      "TV": "64 bit",
      "MO": "equal",
      "CDA": "not-sent"
    }
]
  }
    ]
]]></sourcecode></figure>

</section>
<section anchor="attributes-for-rule-generation-afrg-1"><name>Attributes for Rule Generation (AfRG)</name>

<t>The SCHC rules for Transport Mode are derived from the following AfRG:</t>

<t><list style="symbols">
  <t>IPsec Mode: Transport</t>
  <t>Traffic Selector IP Version: IPv6-only</t>
  <t>Traffic Selector Source Address: 2001:db8::1001</t>
  <t>Traffic Selector Destination Address: 2001:db8::2002</t>
  <t>DSCP CDA: Lower</t>
  <t>ECN CDA: Lower</t>
  <t>ESP SPI Compression: LSB</t>
  <t>ESP SN Compression: LSB</t>
</list></t>

</section>
<section anchor="inner-ip-packet-iip"><name>Inner IP Packet (IIP)</name>

<t>The original packet before compression consists of:</t>

<t><list style="symbols">
  <t>IPv6 Source Address: 2001:db8::1001</t>
  <t>IPv6 Destination Address: 2001:db8::2002</t>
  <t>UDP Source Port: 1234</t>
  <t>UDP Destination Port: 5678</t>
  <t>UDP Length: 18 bytes</t>
  <t>ESP Payload Data</t>
</list></t>

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

<t><list style="numbers" type="1">
  <t>IIPC: UDP Header Compression
  <list style="symbols">
      <t>UDP ports are compressed using the LSB technique.</t>
      <t>UDP Length is removed (computed at decompression).</t>
      <t>UDP Checksum is omitted.</t>
    </list></t>
  <t>CTEC: ESP Trailer Compression
  <list style="symbols">
      <t>Pad Length and Padding are omitted.</t>
      <t>Next Header is omitted.</t>
    </list></t>
  <t>EEC: ESP Header Compression
  <list style="symbols">
      <t>SPI and SN are compressed using LSB.</t>
    </list></t>
  <t>Compressed Packet Output</t>
</list></t>

<t>The final compressed packet consists of the compressed ESP header, IIPC compressed data, and payload.</t>

</section>
<section anchor="diet-esp-decompression-1"><name>Diet-ESP Decompression</name>

<t>The decompression process mirrors the compression steps, restoring SPI, SN, UDP headers, ESP Next Header, and Padding fields.</t>

</section>
<section anchor="github-repository-diet-esp-schc-implementation"><name>GitHub Repository: Diet-ESP SCHC Implementation</name>

<t>The source code for the implementation of the Diet-ESP profile, including the compression and decompression logic using the SCHC rules, is available on GitHub. Access the code at the following link:</t>

<t>GitHub Repository: <eref target="https://github.com/mglt/pyesp/tree/master/examples/draft-diet-esp.py">Diet-ESP SCHC Implementation</eref></t>

<t>This repository contains the rule definitions, examples, and source code for implementing and testing the Diet-ESP profile. Refer to the README file for setup instructions and usage guidelines.</t>

</section>
</section>
</section>


  </back>

<!-- ##markdown-source:
H4sIAAAAAAAAA+1923bcyJHge30Flv1C2lUliZLVMmc8NptkWxxTEldkt8fj
tXXAKpCFURVQA6BIsSX1mY/Yl33b1/2N3T+ZL9m4ZkYmgGJJosZnzhn6WE0C
ibxERsY9Ikej0aDJm3m2lxydnSbPs3SaVclBuVhWWV3nZZHc5M0sOcyzZgQN
BunFRZVdQ+PnB6eDaTkp0gV8Oq3Sy2YEbS5H+bLOJotsNMUvsno5evh0kC+r
vaSpVnWz+/Dhrx/uDtIqS/eSs2yyqvLmdnBztZccn9J3g7c38HvRZFUB3x9i
v4NJ2uwldTMd1A18t4D3R+ffDwbLfG+QJE052Utusxp+rcsKGlzW7u/bhf9z
kK6aWVnhJ/gzkv8mSV5Ai8Pxi/wqXc0b95gXdpgWeTZP4pdlBTM+qvJJXZeF
e5ot0nwOwKBvxgv+5neZNBtPykX34C/GyfO0SRd5NPiLtLpNF/E7GvugLCZl
Nc3T5Iciv86qGsEYzWNBn49n9Pnv8BlMQT4bT9LuuZyNk4P/93/qZTYlENrp
nKUF7HPH641nVFMP40nGHfzu7ukkfxwn+81NWU6jyfzjOPljPp/nAJ/o/caz
ueHvxyl9v8FkDsfJSb5qYUh+mxdXwZu16DFLq3I+Hc/z1QaocT5Ofr+6usoW
Zbwb5+VFntbttzT2yYsf4mGvpOHvisU4v8zH88VqPM2S7mEPxsl3ZbVIiyIa
9SCt6iYrWm9pVAfqNGuS76psAQ3P//k4nskkvSh/1/yUj+Gjnl0HSJ9NZnmR
/hSfCYD3dT5tv6UJ/L4sr+ZZcnJy0DqTtXwwRiL1uys5DYvBIC8ucS0NTB1p
w6tlVpwdPD9gOmFpRpNWVxkQolnTLOu9Bw+ugC6uLrCTByV8BANMuB1TU+0o
SZPTW+ilSLDVqC5X1SRL8sVyjvBpYGB8dZlQ2+0zfDBB9G2yd00HOd4ZDAaj
0ShJL4AYppNmMDif5XUClHiF3SVwsiawvVntSPYQZjAx9HyRTWZAoepFAguH
N0UD+Jg4MECLvGBq/AA5Any6WBX5hF7V4+R8lgXdweDZO/ormybNrCpXVzP4
b5bcuZQkrWBTmmzSrKpsPKAfXNoin07n2WDwTZK8zv51lRMiNXVSlAwtXHKW
vM1ukxs4r3Wy9eKHs/OtIf83efmKfn999N9/OH59dIi/nz3fPzlxvwykxdnz
Vz+cHPrf/JcHr168OHp5yB/D0yR4NNh6sf8neAO0LNl6dXp+/Orl/skWAq0J
dgJ4HDCn5AI2G9kZrLoBCKX1ACjfpMov4A/45ruD0//7vx89Sd6//2+vvz/Y
ffTo1x8/yh/PHn37BP64mWUFj1YW81v5EwB8O0iXyyytsJd0PodjtYSTN6+h
bZ3Us/KmSGYZAvbvfzvPiywZPf3tPyCIv0H2WpXT1cQD86iAr+vVHOALpEz5
cnKa3s7LdJpsAyLsyKyePH74GGa1rErgvIg4dbJMqwZRGHedEMc3fQRN6xVs
Mr7Xb2pazSQt8AmcZkSo4hL+WzR5OoeBh8BDmxTOdH6Fi4NDiK8YBYcEzquK
mqXweFRly3l6yyCCM3F5CVh3OS9v4l4Zd+uM5lpn1XUOjIikHpkGbF4GZxRQ
qiwYhRUQ+0ClJzmfju2z/R1cMpAj2FZAy+yqhBFwcy+y5iYDojfNqO/xIBns
FzxCOnkLAwOw8OyUeFYEYF7qGrq/Fe6HAAX/9LwCooXNaKEIawVEcjDLJm+T
H9P5Kku2jw9+3BnTFzPABGBuyaLExcGAQIIqWsUe9lbUS5CYqLvzVVGAzAJd
mhf4WfekELR1Xje1rmIpL+VP3rl0DuggS/+7aLEICqD1WUWH4hIg2fMhIDG2
56nRLGVeSJjoRKwQmkjLfjx9WQ87xgH0mLhRAOvKFf4CI3DXBICLDHrI6OMc
BqlaE6hba0McvQI0QLxCKljUQMfq5KJsZq21aB84lMIKCQQeCSCA2XSMhLIG
cgfoOr/1qyBoK+iBrs+nRLJTgF2SAQcSuGmfl1W56ANkyU0vV/P57ShzJx4g
49oMiYwFCECfWbhXKL1NkF/ObxHDz2P0VHA3NFxWBKgeonZeTOYrxE1aGZCt
1WSG5Os0nU6REiG44PfkJCuuEKqlQBnhtsSdm+dXBVJbPhQvDaOBtnkxRaLB
u+oI1mU5B+KAveucFMNwJXB4ALXS+URAU14LhO05jTeGRw+AAAiB5LmYBuht
mtjFCHHQ4zxOvgegp0mNUgIyc57GdZ7dICiJp1eKUPA9KDlZVSH7LUFTKfIF
bDuO9P79b4EK//rxYyDYuFN/nMHA9AbR9fKSdxG3vCZChyBh+jkMWDxSauh+
NXFTrfOfMjhqWQGSxAS/g80g+aGYUH+guwFvfluz8jjPFzmRR4DSTT5tZnSY
aa+z4jqvStrCesiD6M7gGIQ5iI7QAfbAw9c0fxA4iLLTTi+QhGe4qHySA27f
yqF03HiaXQITDKUihxIN6EgeF83SH0wzC4jtgweHO4rN12mVlyvAWVBsSYSp
scMJC0IXtwhnQqk6S+Az2qjPFpQAu76v0isvMG6juLgDxx24EEJaRYZvd0Fk
EEan87LHT/aP5RJdGkoiKjLA5r1/f5lfoeqOPQ0GP//88yB5mLR/HnU82+14
9hg/fwSvHidPkl8lT5Nvk2fJrz/l2eCXoy/8XwKC5WjwIZqZEXSEnQNiTrN3
AN7T4532Sj4kf90HYWR8D/P5cAD42p6RmxgyAjhLL1eLC5hV78+H5APgRXYf
E+oGUdLmQtuI+enFPOuAEE4I/v3r4OckeZ5fIXs6SW/h3xeAZzDRZNtxlx3k
LMB5lI3CK2Iz3OvP1M+HPgBt/APzAeG2gi2LXtzbln1wUFKutf1wtPurXwEN
aLK6DaPeLfvUCW4IIXhvWCj+bdkk/n0N/17f0xkLUKhTQB0Bi4V3/Vj0AZHn
i35+/nK0+XJwEOF8v5d8I9QUOAAxxREJLb/ZmmSoFm6xveA3W+flcnSSgVCF
zB8UcaTaaSF4hUR76yPobt8QaT+fVZkn32WFiovRKUkPFUMAK03J+2+AxY8e
Tz4mrPA5vgiy8JwYI3KIptXvqsnnwIepW886b2Y5ymnAWqZZg9IM6rUiWNV7
g8EjZPAiRFs+tn18fHqws8esWZglig4szgJTaiLjAjK+kAULLxPsVaUzkthx
nB2QwcbZeBhKwwH/c8K3Y9codwFELspV4YSNochvOHcW/XI0FAIJAwGxDqYM
PT33KgW+UZoJsl3ZLdPjNicHc1Tkz/FcGi69fXB+tJNsk3iHUzaMeYdEKBo7
rYnD50U06whuE2B1tRFF23OGPamypsoBCY0i0VL9UKTLeWyY33gw2B3H8w/2
HBrdz57X2RWjbFucIfmNTkEDyMzaIPDP6naJ2O8UNOw0hSXX3VuhmxYI8ozr
TjjkTSU6PzR0ta1/sEZDxph8Pl+hta7hcxTIV/uNHFdggqBckUKLY4D20bhe
WHgEspEDvRSznQNPH9biKurVhdMpFSAtlIUNkq+4qzswqUnfZqJTR7oUtBOI
u432ewWI8niMhiZskk3beHJ0T2gSDqFH6ehoR/cytl3EFpjMdbC06t2dFpez
HCW2wmjlrZ6SQpRw5IGoVgVSuNl+OydHyefyEoRTmtHZS49lgCCw2f8C5AyB
ZdFj4NhGPQGl2dmaOxnFYEDvrDYBH1ySphlZjsV4EuwJKHzZfI7/RTMLoQIQ
3ctAdbnMUjL48iwu0wlwmKZFSnu3WC0pQLKZOZGdQKxBZBvBQ0gUYZHe+kOf
LFbzJl/C+Xm9mmc1oGIKuIC/C+UApswqNBB3tHGUMDqprwog0Phgt2sUW0GG
vWKLmjwzRHFmz/84+eMsg5W4gUDrRdQmIwxMsJnMcN955TosrijoRbcXqFuz
QnSieeFH1O3xoUNQe6Jew5qmq4y1wY4XtItsPDJ2LpwkT6dA20nhHBT4sCiL
UbZYAv5X3EfNpBZBycYpaWhNKl1DI8jzCrAVoMBEhLmwmc7SUGWLTUuRsr39
BAVtbwoaxy4RkWFqRjjETSAw6QQNynPA6ZTpiyfSwlaX6QVi5q09TxFKoo1G
tWx3xoEzEzPKF6jlpAUdyKKkflO0tgJSzsWloWeR3gi1w+YpmdjgvZCStAgO
BoA8OBdDZzgLjtoQThecRmANNRrZCbYrZ0YKvBW8UyRpkN4Jc6CJoQchJydP
Xc4z2qxKhM0lGY+gQzRno+jABrOQ+rTPMBPTnEAEUCET/iRf8rczMRpeZSDQ
we4wiXBGDvTYqkPlSvmpEaxCr1pkBnEbBNs2nardo1NaNjtBvhtEO2PmWaQF
MGuVGv0xYq6FuMmyuxNIu4y76wmdWpJqFdCnbQdTlWFzcvqtlrrw6hZmmi1r
NysSAxqYBnYAiDSdW9OnzI9YhMr3TCBpUmKTGgyOxSU4tCvFZXopS7BS/1Jf
CDuElhm7SghATO1bNPttgQYoOp+9jpdx8gLN9BcV7KNC8mw/EO0Q5b1x0Dhq
KnYmOjqDS4UdJphkbLZX0Ye8bZFEBQxrnynxqsiZeBFBAqFpVeE5XcDMhrJe
5O0A6LfcreuKUF/GcNjhxBtYiNoFz8WPdQakYtKgJrZ9fkYWk/U2KxF1DfVK
SSmTacFAMHnAQzjJqYA2656ezo1YTeqZoO4W7oaRqFhOQ9jj4QGELZrAp3xJ
xh5CBXdMWpQ6nZYon7K/GpaH0i4scVZOy3l5dRtLvl3EhVgCY7jQEoCqk95x
foyEeFAMbiDVqjIl/gwjZq4pHC2gCy3BG095QIbhAfHBLo5Ay7xawXgAPJJ0
YHLUmmbnjx40Q7RhOooegOJKJBbC9Sq7kB3VQ6wCgO2EtVvi08CMLpPLFZmB
Q+pYE9VAL880vySyL05MC2BcsZObLgmRnEOkBtjB9IfBNFDkQqoO45dss2cq
zKBUjBMBpgdcCARmAOw0IGdp4TEwONLe89F2wNegXYE+e7FqRE6hWfyeuyaK
sn/5+vegYddZBiIvWkjSy+oKRN5L8r/ggfYWDsf1ymJHDfv4PdME4wXWM3z8
h6PrXRGlv9399dOPH4X3ie8DNXf2V95SF/P8LZ3LOfp2bhVphfAjqEFbBOEB
xR8RhRY5413nNK7zFAc/Hh2Og8A8GOV614fnwVmGMwP9oY9oAIoCELK8oPNG
4SyD7rDAvWSwl+zL6UTwi4PIem68b61W5zx5vlY0aeiJnTIhylWO+QilqXsc
PIOB0dNlOuLcV6l5Ou31QzrVjsGME9pErR+yt9nLnk7slK01HscCP1Mf0xh5
qJrEHhw6UxhM+1S4KREFpw3WxvckulGPYxq6ju0vOIDYXTYdAEmjwI3akayF
Il1FxMRpsiz0RHaRfnuK2SPcsVD9x2kefdIsSd7iWSKZiacFQ6znj4wndaKY
R+YYjVUZInMlwvBk/IiOQ+yH2T57ubaLx76L3fEud3Gnd499eYLBXtjt0bGd
porvT07/uP+SjUyt6YgvcJMZsMBH8+Df+xfJvQ4G2Oz4UCYt/JJjbWB7Kq8V
Esm1AUKOS8nxHovJwW1XHZ5lQyZE13bxHvTdpvJAqCRyIAYHEchpYlmFAqAc
zyG6i6NA00vA4bHEFQ5i+YzEs2jink1tZ+OrMYqGqnmwAWGYEP+V32VGRC12
HJnhtctp0+imelau5tOWCdtIaf0CNNAh0r2AGQObNDpX5dT/y3QBsiMQFOLS
rIOymup5Q4gZGGfw7PG3xOIsnvCqsmuA+IrMV9DUMSSMmBzZGEDC1oFRRI5F
z+OgRJGSWYo8I5WG3RrUEbG3Ue6/ACRlSysOATx9mi3zSaOUVC34YtxwQxpD
Dg/kDiRCjp6IHiGUigR8YC7LMkeNPr1CFwriIuxSWmXTtnqzNrJMZEUUCzHG
oQHBM69nws5ZoiCQRgrPhoKOcSV4aWfHqEv4MR4EDQVU2c7Yebx7KMQBcTB9
7DBYxv6ZA98F80EWInu8CNiKmJm3w3abkbEhshPYKba6Fd2eIfZ0TLL8Gm1v
vKmOdtWqNHg5nK0zosn/sBS6gCOjdEhnQmGFq2HoOwcKgl41JJF8nUQ39B/V
GRIMNYPCI8Z4408Kgo0i0eC5sbd1enZs2CHT7qGDGzwVu9yw19pGTJf7N860
IOiP5kzTKbpin8y0hK3R3u8lB+95mh+HukQ0phvPBfsy0GxPukLdhSzWZSZm
R0AZY9+t8sCtRbsiE8d9cEqV2k06PAvoKCFMhDkn79vThnmef0TJCLQp+NUb
aLy/SUQhnmLBCwv8Mu3QMpzIyuFFvwOC9w4Pb73eD8LgOTr6BODwsSu8O9ja
RBvubRtgcvQcsKoPMvAnzNMD6HkXgPjLHbVH1qh8wq4Y5CGQqdLCYaShNdBa
3lTvcBFkae3NHcJOgVxYt5cLgROtgQg7jog244h6d8cNOTjaWR8hjpWwFDao
gCLHjLV2Fh73mcZiEpALDNQGbjIvy7erpUNP0gZD6yCTYPg/0WByRqm3KN7k
FCSPhkk+kOgIuMYXBtuEGj2ZXIEXFRgwzbsXAGexqhFCyzkqzM5ewDSkHgZj
walV630NcgEaeXll6FcZqq4L/LZuRuTaridZgZF2Q98xCsDkQ0qgA2e1ra0e
T1DoVuPzerLiVArY+FcOSvuB/9sH4KaTiSezdDDIPj9REzEhvxAaEeEmWTat
WXiLDokcPeiWZy7d+gUtYaWVfOq8198bL2suEc5fSN28YzgUmGEwJO1KcwOs
D0ORdSjvPR468Dke1skLI8LSUnOFlw0GL53TJDZdvdj/k5itfN9GksTgbG+t
SUAuEodDS+iF8wPE1TkW1K415rDHI0Xwu3604eCXo56fdnRXX8PBh5bUokFJ
cZBSf8N7mchv5OfDbz7156/6i4jM7bnf/fNh8zV0fPuBRDimmRHQvuq4nw8z
9wXZtTaaasf48TJ719JaWPvbD91qSjzmHTPt6DZJRndpLBLc+AXL6RzYjOCl
1gMxsJv1dE7a0VyJ91cKHMHifie9+Y8f+PrTv7V/3BcVI+l+/VD0d19D6MOL
ksp4evo47Gl4H2tJYCLfO08W4M26xRwxy4xb0mJClaW/j4DT2j7uZ2NYhWnD
u/V3X0PaGCPlr+vj8OB9V1NuSHG6qiOAirCuo76G9wSUI+/IXg+Uw6y74T3N
Y2NEA92D/CjxC78WkefX9NHX8L5g2ok+XfPobUioBmplG9+6aAA1jJHtQ4xl
Q1RDe/roa3gvEOkDQMfC+6SXzfv4yoLdxvNoL+6L+NTglarvaoO/8+e4CD8I
IvNRbbgjNJ9s33fZoscSpl9LXLzG4/vAB9QWfSLlODkQX44z+h20LGSqronL
C5TwHL9ESxuZcl3oSKQIDNm6YltYzZ6kl/OOBuqpk2B3EnhU1LF5n37m4eje
EnuHRfduU+4Y8x0wLCnyDhFMXDkazmaQJqQCBaGrqPLNb9LbWg0LaB7bI+Uu
RJFBlHnWSv/Qn/F4bE7Sz/oTH7ZfEs1hQyvjbVcUJFFx5vIfxM8k5lZW4b50
CvqrxSwxCbtm/vx+wLISGKSVoeEW3gTnhJws3lI0YkQbsddskwPks1h40wQ4
uEXrHIjOKeniKk1chAmgEn88e7LItl9x7I4LLK4wZCuKs6tIml+kOZnn2dJI
0eEYYuBHsEFLiTdL2MiXaZmxTxrhpyE47zB2KMcgV/ILTZPVUtyUEvztPShc
eoAj9S9uee3oN72N4stC/JZ4g9rPB7DdzYvBSyGCGFiUXTZUhERPvDg1w+BH
H68TRRUFhT4ATx6xS1WMK7KebJ5P+TVbD+3uEqTUYSKU0VpJy0rKi0jPYnlc
SZxmTxQTGhIlkOmOSCX1NOsZgz7pbywFIUgi0awUv4mYjM2oFAVFYzmiN02I
oaTVrYuDgO9vl+LywtnzSUB/i2SpM1I8Sy7ypo6Tk3H58JvbxVwS4jVG1mZh
HQDhFpIcd+NyuSR1nI/Rgp3R4saB6fjpSeZ87a2jnAvOKWNkSM3z5QTzVM4o
wNi5z+MEbHf60saGhHIW/DwXXzZBUnJ1LJDE2p+yz4kD7TJYQHnLwf06e4k2
MlHRQllkQwkb0gnFlU6VOc058VHU/cjWbTOb0Pm8X3Dnmpzog0YVWzFoJToW
+PhF+i5frBbKhc4wBGr7xf4/vTndP/jD0fmbs+N/Ptqx2C9BqM5jzzKCOLqA
4K5E1lA+CfiWVfNbSdLnFNqhMW169FN0c0kCko3/7//2v+rkxfkPEheNM2Sf
Wsqe64pN9gvCtCAEIr0G7CBwUEwrRpdOKLYU5mYizkzEg0b/Osc4hxjfYfRh
dz55pZlHzIES02EMv3N0t+3iDhPZm/RilCHfat5pwhUH7pkOKaJXg7reeWu9
5vcbdiEHlKuoZBpZ5mUlZxfiOJFBt4OmO1rh4zDpiER3XIVPqJJtCpS6uNWw
ELWsU5qYiRnQXaDoa8wYBL6GzjgKP9SNo3Xhl0FU/CdGDibPyxt05wyNy1vS
m+YpwI6KWLDYfFOiD6YBNo5cAwBQVnkmlP8yr2r39DaIcmDXC2VQdIdbmugX
jpPwTkIEXWkPsVk7ohf1beNukfHmWAKkUiY5DIOXlHVq0KkGM9EqqDuXSzHt
QUX/rS4XFrbHw5wdBMlxDw4DoWWfCfT2weH+DlY2W76ZTLVO0MHLBB4n2aTw
D7/HYkgn6QVoHvgOueObOf5pvkNPlw+O8sxBX6IX8SRLayRtwBcRQaHhd8DM
ku2Ts+8whmT5pl7mb+b1hRHu8csohg5ac+MC2475oAOClSQVCShs5t+dO6/b
jdlpV5yg5fa+Nl+WTRiaEoTSBdkXktTioullVi6OnE9bFM58fsbZnirE9m28
zZ9GIJ2foer0I1bOQ1yt3+TLN9f819A0OOPKcaBsgqjDrepq8qbGvzvaHeEW
uFZAh22bQ0qUZfy3HU7rpt2hbex7xaa211NXTKV+Q2Fs/g3KZvHskX11zN+2
lbFcy2A0bNe5Cmpu1qGo2PmVHUIWZEO7RZWPnKvt3AxLc10Gx1n+4Pys8klH
U81LyARhD14f7Z8fvTl4fnxy+AaTWASBRSIzCf0+htzHlz4eP3qspV5orixA
vMCSTUZQRYRE8v2Gajn1UaK6QzLh0IwJFYBKL+RXFqJ+ODt6c/56/+XZ6avX
529evDo8QqUov/QV48xi71imFzy7Vvlo/JhCcf0ypQYYFg4JVsmmFcDMNYss
LyQIy+2lCclUf9AfjkDOpGIltZvr2gUJP6b1YJ7fmsXAcuxi6mgNSC6NHXp/
jryxmS2IXqJY7UKq74hAEWLcB4pYTgiqEe3nuw/O9qvdTszt38wbKi7luH97
YTEfYB6wZrdAH6fKfT+p3kzyO2bp2JgsGHaK1lIOv59wsUih6Zxg4kMdcBqy
t7wJxGglrNjQbURMZKskfn4GDKnb6ESIQLW4mje+RjIMMiqWFPeK0zEZp0x1
VL60IY4+HBNfuvxEHwTgIyLY5tCmVwRcthy44+40HtT43mi8czJIBoMPyY/6
0hhiT0tglvjsR4ZfaKZ97VJJP9jJf/BGKWuq6jNVt97q72hfsxPVYbfooYqo
WL+THsCxfOM1vy1ui7wdzij9/vLBfsKeApWn7GK2ou+hW8xYrvCXOt2K+iKP
MhrwPqgYlmzUmWvR01kot909M5dDhX/8lFXlVk/n0HcgdehEj0+vn4ywJAF2
AH885T/8HjOB6+zKsXZ+Cz1xuafrp47gJht3hLk7yZd25GSCOzu6u5/NJrSm
H5KQLFacH5wOkx8O+Z/RSd4AST07OIe/91/+aZiMx+P1/QXiFJ1O+E/RXT1s
k354hV/Wj4f4l/fzJfPxtNy3VMsCkWruL9y3P8FP2M+9ES6vaPkRt8gyiAft
0VP97fGu/vb0Cf0WHV9yz9AKkZdqdp3r8QWwxBToPR3fVxLQvaX41tmPERV9
PyxxYSeuNGxAAzB1yvaDtMpLY76jO49K3JEsjAQf00+vlNTfz71tnQpW8XxQ
Pe76CeeDbjS/LtGWXcuHo8dd5RM7NizqpwhbdglbG82nMNP5vPncE5zR5xRJ
XOpK2izRBWircr8uVyaLUMaKi14pzK11QhCRrVyjtbeAEm1J/Gig8nerg9ui
++34UNcx18nVEuYStk5VuFUEa9n+0LaLX5OPKGc7nak9ivNkw12QxIiiaTEN
0o5FumxPFD0sHGNPRcSTf6VK3ShOzEGVEGOoq9nRMUV4D9vBAcKStQlfUglb
Tu3vb26j+1VXtjnvzS3XKjIa2ralIJjvoG1dIVdJtCM+ShwVGgP/DNq6lDtC
IKnHz4HIzjAghp+oKkjkpemCqBg91Xwo6k+qUIb1xBoU59hh3aeyaPfYq/qj
VoybRulnAD+u4m3tDdubWxEk3eL8LDlHqFMdfXTmcSWr87M3x6c/Pnmzf3j4
+g1o/b8/QrDy06fmKRaLPcmaeG9bMNLdvrAFcTG9rQukpoxtKxe1Gyrj5I9Z
FJ8wL7HUDyxPrEcjv7Sc11LBM/KTijbEX6DdnGq3oGCMYQ83tucU8wUW6Az+
lJ7lE+paajGSDYSrqYjXV1R6tRC6Mmt7g4HVevYGe3EMyUU2S68xh8CGt86x
BKuUoqq5/GG3XkStxekoJZ2zaedhUMyq+Rs5/lrBygWVRPqYyaMdhOoMLsV6
s2Or9dA5DmfwOHoflJ7SLHkQMsLC58ei4MsKuj96EpXqF/R8YNMUprClZy7V
BCYvqSaUaGKKnlCNxhSky6aeZfP5sKWtxf57s6RthOQ4mvOO7o3vY+y0x20u
qyDpYqNf7ETwJDMHJ7kEheKjYvgjm67L9c/KBTqH0qW63PEKilYxAimZY5/B
XqXXma8vkoh+WY+tctoVxOC836YOiB4fjO2g+hEcHEFlMBH50lqcNMFO8aqR
0WHdQnTi+9nQKy41IyVEsOSWZjfS67FqziEs3fzkNGEbOM1qO2gjM3t0utDY
mqAiZHSgrbL/eFykeanb5D89vrGdxk0wrG+f157YUfhApSlq8QaJRU1wEbj3
ttMtd5D9ib0n3H/xybW3Hl/8185/5Z0fDALbVgfLZC+XvMcos9qvAM83sUtv
C+NJkcRG/MILqCKOUwQZLDCTirJlYDwLvn7a++l4cKo1CucUZYSl1MhtlHMF
jCHGfUj1QiWbavD1sgfLYTUPSDL+YiUQz95N5rCR14RhF7kv9LipvOdETSoy
pcKjYHJbuPfUsj3AMDJAco1Zj0sG/GOMnnSBqAAFP3Q8wtM1I/i2ZnPGiizO
ktaLLtaf6U82RfSo6shTZ1UDbxziLwJ0CY69Qe+ZlImgyDXcZIqDkuRj7X9f
1KJAkFFRN1hKVkyjhcSu4nAJs/yKalp8rSUccY3T9QtwJ9eZEXs3o+UI3mxH
jML3tbfFKQpju6r2vvR63TfboHtd0bpd8uvhbSINvHstGhgQrsCFCxwf9pKM
sasGTS4eJY4yY1cOTnsSVroFij8aK3841P+QOZ0uejs4P9Wb2/Zf/mlLqwxI
FQJHAekliZ9AZIr+IlH4P67y1DLB98AiDoUIgdKBrFr7nL8xxovPxlGexLoz
Z50Ad69jY+S8v3Vg2MZmq+ijHb0hJGsphwxkT9lX2pHW+TJ+kA2W8kl7co/L
6d6YYDGDUF7CignwgWbNsIWHTWY0i6DWzVRKB2Kn64LRxgO+QIu70F4vbnk/
pYCS1hMbJov6YjuRcCF8vsMBMW4upPGtCj71BNUqa1ZVIZG/Zec8XmBQnDRe
UCgb9CDBJD5Wgrcjuy7nGIKu8ZrBNMeDs3yRz9MKpZ35F00VQ+9YWZZIuU+b
SDJwxSHmWbGdvPvE4cVtB1hxkfvy+/A7bH4FGvo7jMB2ClUH5QmcdqqSeZO8
KGyMsVorDa1vElH+LkXz9B2RGBogLPpPy3w5dHZ5q0IuyNdmTRguNQXNDmja
5eXWvAqYrVkEnQvnFexYeBSeWVucttdykg7qfYHYExn9NKScgeQ9g8Mt1CJq
Rl47++h+WlPyrHWJnZaATIPrL6iOlFbSZHIwlOI783bZRIZ77mo0S1ZEvkir
HCPa84XN8SGTTZNLsAxpjpNVRXrfLK2mN2lHmojem9cZc6ZT8JZe0itUQVDf
KUOrw1wVQUsLMM9ZaObsFKVbXTdWBDUyvQ+2AxGCIL+OEpa4iuOoEK7U7NZw
HT03AKQtdtNuuWgic8EmS0mN9/i6NsH1kMSf1NnbJSy4cL0ozk5SIftWwe4j
Z2cj/dWUYiZ9OJ6xaMb4LWyMGVK9MkWnD1oPDfqZe85ep7t5BEeyLqNIN4IO
Zd086ndUPCapkYTP1HWXu9Q7Cv+ScExcaaP3ibTu4im00tBFZrOMyI5iCmde
gGj0ljM+KEzOXsfpbgaTuzZ9tbe6fUPJOKEbYgiffKpUYEsjkcNcmEw1x2uz
UI3IljLHhrlDtzlszY8ux+1XD0m4Fmd5x970hkH2Hg7XG/q6qWBn1CXxSLke
0dlx4lQ1eHR2ejxO9r1g+HiXmYxx7HMJ3Sy99oW4nAygy+oySHU58LHyrByH
3iMz8F78jl43XthLyrTk+ztrFT3wU5cHAD1RrS2zWDJ/Dr6x1wi4zM3knM4s
Z/egoRIrc6J/n42WejUnwSgu6Vq5aEefcaWXCrAw6BTBuxImasqYqHdk0Uaz
RMOYVNVWIaIssp7qt/4gfzt+4gUG7JqDQtkBiD5f/NpeWaUW0//xC0rEENh7
33AqpjgYEt7TNvj73NFqrDlJSL7Izf2AvNwaFdy+NMbsa1RrCzEQy00QSvXE
eHx/Qv+eYm2FYwr6+LEvIATfvnjV9RRXGj7pjBNxPx/8v+bXO5rf/RSjXH40
8Y2teT6mfx/hP9/l+C/Zaa67P/mQwPkEbTN+CiLjqDaRXTgqCXp9MHvqRz28
wX///d/+Zz+M4T0caTTwR0+JDJmRqQrIwcv+bna/3rjGi9kx7sN7Gdf5HvTJ
wKfSu5su7QePnka7e3/jhtdpRh88S9pYFQV/2uabY9Xzcpmc4MXKXd2YUTeD
suRtb7BasfrsR7G3/MGj3WfhalG1Nlk+YlTakeagI3fM5SR6SmfI2Cj249DB
zlFNCpDYTT59VFkrWTS2hdruuFFjjNK1svnM6eg7X7LWaOieUXGBXzoq1ZOt
V4tW8698emBtXSf2q49rL+xtdTPSf/XXu8aNR+Cn8anCcb/D0gb7rQhg/qBF
LT5v3Frj0824fRGq9AEGen4SvQC82n6CHlwjAfacoV4m9MXjkqS704nPGkGK
iRJahMTfYKQwI5lN60vYWNDnWLuCcqKTy+wmeZvd6rWFpkwv5v6Ajk4xXKRP
dtysENwb6m/LZAltTwWSIckIQ+TYQ8M+4SA3EwkSExLwGWMgCamH7nwP5bRJ
v923u/iCQ/56Dx+E5m9K6dJShqQace8RsptCDVpyxdeS1iAAsgnaChpW6zX2
obHZJnJ++3txaF+N8G6F/b1BeMdAUJ/JWBOoXsGaW4xFnaH6GFJvPkhIMg7m
rlC7oTESdkV13d2hSXKiEDxbeLjH0OQiKaRKhS0K3y40764YlrtofYRVWFZe
9AuO1TC5pn6+kkHA9SKChXItj5u8zsaRg95ZQHy8jD1kEh8nj5+I6rMTzYmN
v1LJBBc/ypdPQeWUr8MXTygQ1lSU0t3pur53bTkkjMGmAvhSVUbQvn0TkSmM
JAZQ+K4qKQpUK6NjzDiqz5NZOsdaJuix8JcWuRv9fMFIMq/ModM6vhkzrCRE
h8Yn9rr6CZnDAK2dckPXjZjb+wSbKIDEo5euU7/yNx24kjtNnc0vNQGeu5Uj
HVVdkA9c0X8qhfI2L9x9DK4mjgRjKW0hK28jV6UBdlMJnxxt+OhcFltCn5kY
yVbpzIZsrs/rmrxEdMhW5LTCzRmZ6x6XM6xU7gujy00I0/w6n9q6F3KDdb1n
TpGpINR9ga9PYXfF9N0XgBvd5cE77pIMqmEpcUTzihIMnY/3w1PAkC2uFt9F
fscpEAeYY51pwbfSaZ9SSpydA3LRYHDhBG0g7kxmb5LoKKU2Tn6AKcOgZLvH
8vZ1096hRVZdWUOTrMqxHX/Dhr1iz1x4AgtfctIGGZOJ7AqR8PXl0ibyciCk
XNUUAy2mWQ5aaJBpF6ZLosp0H/4erRlJzT40MW78Azx9OB5/Sw/pr9GooNNf
09tWLbnuanK+mNwmNe3IuNNR1Q5buTp2idfLVTa7p7nor+uK26EdyJW0iyva
3bkld1S1O7X3Rgl6EkqYw7eVfNQLl4L7gMsLqjrmXUj+0HmZICyRte/kG734
FOkLQV7dtW0eTiZ8zi6ZTFaYczFJ2Ro/t5zcWAyJE1zm7wCa6DAYs1H32EsO
3K/deJaEJBrwo1zqqWXEfKLA3UKJuy0zbOizWOQ6YvYGXV7SHclR0iwKyXQ3
2Pmpo7fcpWYUydPE5zSolEihbe76AfR0dHRON6/b3oc2qgX+iuMparmxRwTw
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
AxMq0xbr+wAA

-->

</rfc>

