<?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;">

]>


<rfc ipr="trust200902" docName="draft-salter-ipsecme-sha3-00" category="std" consensus="true" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true">
  <front>
    <title abbrev="SHA-3 in IKEv2 and IPsec">Use of SHA-3 in the Internet Key Exchange Protocol Version 2 (IKEv2) and IPsec</title>

    <author fullname="Ben Salter">
      <organization>UK National Cyber Security Centre</organization>
      <address>
        <email>Ben.S3@ncsc.gov.uk</email>
      </address>
    </author>
    <author fullname="Adam Raine">
      <organization>UK National Cyber Security Centre</organization>
      <address>
        <email>Adam.R@ncsc.gov.uk</email>
      </address>
    </author>
    <author fullname="Jonathan Cruickshanks">
      <organization>UK National Cyber Security Centre</organization>
      <address>
        <email>Jonathan.C@ncsc.gov.uk</email>
      </address>
    </author>

    <date year="2024" month="October" day="04"/>

    <area>Security</area>
    <workgroup>IPSECME</workgroup>
    <keyword>ipsec</keyword> <keyword>sha-3</keyword> <keyword>ikev2</keyword> <keyword>kmac</keyword>

    <abstract>


<?line 161?>

<t>This document specifies the use of HMAC-SHA3-256, HMAC-SHA3-384, HMAC-SHA3-512, KMAC128 and KMAC256 within the Internet Key Exchange Version 2 (IKEv2), Encapsulating Security Payload (ESP), and Authentication Header (AH) protocols.
These algorithms can be used as integrity protection algorithms for ESP, AH and IKEv2, and as Pseudo-Random Functions (PRFs) for IKEv2.
Requirements for supporting signature algorithms in IKEv2 that use SHA3-224, SHA3-256, SHA3-384 and SHA3-512 are also specified.</t>



    </abstract>



  </front>

  <middle>


<?line 167?>

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

<t><xref target="FIPS-202"/> specifies both the SHA3-256, SHA3-384 and SHA3-512 cryptographic hash functions, and the SHAKE eXtendable-output functions (XOFs).
HMAC <xref target="RFC2104"/> can be used with cryptographic hash functions to generate message authentication codes (MACs) that can be used for integrity protection for IKEv2 or IPsec, or as a PRF for IKEv2.
<xref target="SP-800-185"/> specifies KMAC128 and KMAC256, which use variants of SHAKE128 and SHAKE256 respectively to create a MAC.
Like the output of SHAKE, the MAC output of KMAC can be of any length required by the application.</t>

<t>This document specifies how to use HMAC-SHA3-256, HMAC-SHA3-384, HMAC-SHA3-512, KMAC128, and KMAC256 with IKEv2 and IPsec.
It also allocates values used for announcing support of SHA3-224, SHA3-256, SHA3-384, SHA3-512, SHAKE128, and SHAKE256 when generating and validating signatures in IKEv2.</t>

<t>EDNOTE: HMAC-SHA3-224 has been ignored as it doesn't have an equivalent in RFC 4868.
draft-ietf-lamps-cms-sha3-hash includes support for SHA3-224 with ECDSA, hence its inclusion in the hash functions registry.
Should SHA3-224/HMAC-SHA3-224 be specified for use in IKEv2/IPsec?
Can/should the output be truncated safely for auth/integrity protection?</t>

</section>
<section anchor="conventions-and-definitions"><name>Conventions and Definitions</name>

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

<?line -18?>

<t>Additionally, this document uses several terms to collectively refer to sets of algorithms.</t>

<t>The term "SHA-3 cryptographic hash functions" is used to collectively refer to SHA3-256, SHA3-384 and SHA3-512.</t>

<t>The term "HMAC" is used to refer to the Keyed-Hash Message Authentication Code algorithm generally, independent of specific cryptographic hash functions.</t>

<t>The term "HMAC-SHA3" is used to collectively refer to HMAC-SHA3-256, HMAC-SHA3-384 and HMAC-SHA3-512.</t>

<t>The term "KMAC" is used to collectively refer to KMAC-128 and KMAC-256.</t>

<t>The term "SHA-3" (without any other qualifiers) is used to collectively refer to the cryptographic algorithms defined in <xref target="FIPS-202"/> and <xref target="SP-800-185"/>.</t>

<t>The term "SHA-2" (without any other qualifiers) is used to collectively refer to SHA-224, SHA-256, SHA-384 and SHA-512.</t>

<t>The term "SHAKE" is used to collectively refer to SHAKE128 and SHAKE256.</t>

</section>
<section anchor="sha-3-and-keccak"><name>SHA-3 and Keccak</name>

<t>SHA-3 is a collection of cryptographic algorithms that all utilise the Keccak sponge construction.
<xref target="FIPS-202"/> describes the SHA-3 cryptographic hash functions, which produce a fixed length digest for any length of input.
These hash functions are intended to be used in the same manner and contexts as other traditional hash functions such as SHA-2.
<xref target="FIPS-202"/> also describes the SHAKE XOFs.
An XOF differs from a traditional hash function in that the length of the XOF's output can be chosen by the application that uses it.
<xref target="SP-800-185"/> describes cSHAKE, a customisable version of SHAKE, and KMAC, which is a PRF and keyed hash function that utilises cSHAKE.
Like SHAKE and cSHAKE, the length of KMAC's output is application-dependent.</t>

<t>SHA-3 was specified to provide applications with an alternative to SHA-2, which is based on the Merkle-Damgård construction.
Use of the Merkle-Damgård construction in SHA-2 means that length extension attacks are possible if SHA-2 isn't used correctly.
At the time of writing, use of SHA-2 in IPsec is believed to be secure, and hence there is no security motivation to migrate away from SHA-2 to SHA-3 in this context.
However, in the event that a significant attack on SHA-2 is discovered, SHA-3 will be an immediately viable alternative.</t>

<t>Migration to use of post-quantum algorithms in IKEv2 may make use of SHA-3 more appealing for minimal implementations of IPsec, as <xref target="ML-KEM"/>, <xref target="ML-DSA"/>, <xref target="SLH-DSA"/> and <xref target="FALCON"/> all make use of SHA-3 internally.
Since support for SHA-3 is required to implement these algorithms, some implementers may find it preferable to implement SHA-3, and only SHA-3, if interoperability with general-purpose IKEv2 and IPsec implementations is not required.</t>

<t>KMAC is more efficient than HMAC-SHA3, as it directly uses the Keccak sponge function to produce a MAC, rather than treating Keccak as a traditional cryptographic hash function, and then feeding that hash function into a separate MAC algorithm.
This would imply that use of KMAC is strictly preferred over HMAC-SHA3 and that HMAC-SHA3 shouldn't be implemented.
However, as HMAC doesn't produce variable-length output and is widely utilised in IPsec implementations already, upgrading these implementations to support HMAC-SHA3 may be a simpler task than upgrading them to support KMAC.</t>

</section>
<section anchor="apis-for-sha-3"><name>APIs for SHA-3</name>

<t>To make it easier to compare HMAC and KMAC, basic APIs for each are defined below.
The symbols used in these APIs broadly conform to those described in <xref target="SP-800-185"/>.
KMAC and HMAC implementations used in IKEv2 and IPsec do not need to conform to these APIs exactly, they're merely used in this document for illustrative purposes.</t>

<t>For the purposes of this document, the API for HMAC is defined as:</t>

<t>HMAC(K, X) -&gt; Z</t>

<t>Each input and output is a bit string, where:</t>

<t><list style="symbols">
  <t>K is the key.
It can be of any length, including zero.</t>
  <t>X is the input string.
It can be of any length, including zero.</t>
  <t>Z is the output string of HMAC, which is a message authentication code.
The size of Z is fixed for each HMAC algorithm, and is the same size as the digest produced by the hash function used by that algorithm.</t>
</list></t>

<t>For the purposes of this document, the API for KMAC is defined as:</t>

<t>KMAC(K, X, L, S) -&gt; Z</t>

<t>where:</t>

<t><list style="symbols">
  <t>K is the key.
It is a bit string of any length, including zero, up to but not including 2^2040 bits.</t>
  <t>X is the input string.
It is a bit string of any length, including zero.</t>
  <t>L is an integer representing the requested output length in bits.
This parameter is typically fixed in the context of IKEv2, except when extracting key material using prf+ in IKEv2, where it depends on the length of key material needed by the negotiated cipher suite.</t>
  <t>S is an optional customization string.
It is a bit string of any length, including zero, up to but not including 2^2040 bits.</t>
  <t>Z is the output string of KMAC, which is a message authentication code.
It is a bit string of length L.</t>
</list></t>

<t>EDNOTE: the symbols chosen above mostly match those in SP 800-15.
They also match draft-ietf-lamps-cms-sha3-hash.
However, RFC 7296 uses S for the prf+ input string.
Would it be better use change X to S, and change S to C?</t>

</section>
<section anchor="constraints-on-sha-3-inputs-and-outputs"><name>Constraints on SHA-3 inputs and outputs</name>

<t>Per <xref target="SP-800-185"/>, the length of the K input to KMAC <bcp14>MUST</bcp14> be less than 2^2040 bits.
In the context of IKEv2 and IPsec, there is no situation where a key that long would be expected.
Initiator and Responder nonces Ni and Nr are used as inputs to IKE PRF calls, although the length of these nonces combined cannot exceed 4096 bits.
Shared secrets used for authentication in IKEv2 are used as keys with PRFs negotiated by IKE, and have no upper bound on their length.
Therefore, KMAC and HMAC-SHA3 implementations used with IKEv2 <bcp14>MUST</bcp14> at minimum accept K inputs up to and including 4096 bits in length.
Implementations <bcp14>MAY</bcp14> restrict the size of pre-shared key inputs such that they do not exceed 4096 bits.</t>

<t>There is no algorithm-defined minimum size for the key inputs to KMAC and HMAC-SHA3, but <xref target="prf-key-size-and-output-length"/> and <xref target="auth-key-size-and-output-length"/> describe the size of keys to be used with IKEv2 and IPsec, aligned to the security strength of each algorithm.
Using a key smaller than the security strength of the chosen KMAC or HMAC-SHA3 algorithm undermines the security properties of that algorithm.
Where IKEv2 is used to create security associations, the size of most PRF keys is automatically managed at the protocol level, and there is no risk of selecting an undersized key in these cases.
However, the size of keys used for PRFs in IKE cannot always be controlled.
In the case of pre-shared keys used for authentication or protection against a quantum computer, those secrets are used as the key input to a PRF negotiated by IKE.
That shared secret could be arbitrarily chosen by a user rather than securely generated, or derived from a password, even though <xref target="RFC7296"/> strongly discourages this practice.
IKEv2 implementations following the recommendation laid out in <xref target="RFC7296"/> can impose constraints on suitable pre-shared keys.
Additionally, Ni and Nr are variable length and are used as the key for KMAC or HMAC-SHA3.
<xref target="RFC7296"/> states that each of these nonces <bcp14>MUST</bcp14> be at least 128 bits in size, and <bcp14>MUST</bcp14> be at least half the preferred key size for the negotiated PRF.
If an IKE peer sends an undersized nonce, the message containing that nonce can be rejected in the same way as any malformed IKE message would be.
Conformant KMAC and HMAC-SHA3 implementations <bcp14>SHOULD</bcp14> reject keys that do not meet the security strength of the corresponding algorithm.</t>

<t>The input string X can be a variety of lengths in practice, but will always be a multiple of eight.
Similarly, KMAC's output length parameter L will always be a multiple of eight.
Since the length of output required from KMAC is always known in advance, KMAC with arbitrary-length output as described in Section 4.3.1 of <xref target="SP-800-185"/> is never used, and thus L is never set to 0.</t>

<t>KMAC's customization string S is fixed to a specific value depending on the context in which KMAC is used.
Future specifications may define additional customization strings, but the set of valid strings used by KMAC in IKEv2 and IPsec will always be fixed-length context-dependent strings specified in IETF RFCs rather than dynamically created, e.g. via random data.</t>

</section>
<section anchor="padding"><name>Padding</name>

<t>Since the length of the input string X for both HMAC-SHA3 and KMAC varies, and both HMAC-SHA3 and KMAC operate on fixed-size input blocks, padding is required to use HMAC-SHA3 and KMAC in IKEv2 and IPsec.
The padding scheme for the SHA-3 cryptographic hash functions is specified in <xref target="FIPS-202"/>, and the padding scheme for KMAC is specified in <xref target="SP-800-185"/>.
An HMAC-SHA3 or KMAC implementation conformant to those documents is sufficient; no additional padding is required to use these algorithms in IKEv2 or IPsec.</t>

<t>When KMAC or HMAC-SHA3 are used as the PRF for an IKE SA, the size of the key input K is variable.
HMAC and KMAC both permit use of variable key sizes, but handle these keys differently.</t>

<section anchor="hmac-key-padding"><name>HMAC Key Padding</name>

<t>When HMAC is invoked, unless K is the same as the input block size for the cryptographic hash function being used, K is padded or compressed to match that block size.
The "rate" of a sponge function is the number of input bits processed or output bits generated per invocation of that function, and serves as the input block size for HMAC.
The rates, and hence input block sizes, for each SHA-3 cryptographic hash function when used with HMAC are described in <xref target="FIPS-202"/> and repeated below.</t>

<texttable title="SHA-3 rate values" anchor="rates">
      <ttcol align='left'>Algorithm Name</ttcol>
      <ttcol align='left'>Rate (bytes)</ttcol>
      <c>SHA3-256</c>
      <c>136</c>
      <c>SHA3-384</c>
      <c>104</c>
      <c>SHA3-512</c>
      <c>72</c>
</texttable>

<t><list style="symbols">
  <t>Keys that match the rate of the relevant SHA-3 cryptographic hash function are used as-is.</t>
  <t>Keys that are shorter than the rate are right-padded up to the rate of the hash function using zero bits.
Note that this is required for the majority of keys used with HMAC-SHA3 in IKEv2 or IPsec.</t>
  <t>Keys that are longer than the rate are hashed using the relevant SHA-3 cryptographic hash function.
The resulting digest is then right-padded up to the rate of the hash function using zero bits.</t>
</list></t>

<t>The padding described above is that required by <xref target="RFC2104"/>.
Any HMAC implementation conformant with that RFC is suitable for use in IKEv2 and IPsec, no protocol-specific additional padding of keys is required.</t>

</section>
<section anchor="kmac-key-padding"><name>KMAC Key Padding</name>

<t>Unlike HMAC, if the size of a KMAC key is greater than the recommended key size, the key is used in its entirety without any kind of shortening or truncation.
As described in <xref target="SP-800-185"/>, keys are always padded up to a multiple of the rate of the underlying Keccak sponge function; that is, 168 bytes and 136 bytes for KMAC-128 and KMAC-256 respectively.
Any KMAC implementation conformant with <xref target="SP-800-185"/> is suitable for use in IKEv2 and IPsec, no protocol-specific additional padding of keys is required.</t>

</section>
</section>
<section anchor="parameters-and-security-strengths-for-sha-3-algorithms"><name>Parameters and security strengths for SHA-3 algorithms</name>

<t><xref target="output-length-and-security"/> describes the general properties of the SHA-3 algorithms, with the SHA-2 algorithms also listed for comparison purposes.
The maximum security strengths listed are taken from <xref target="SP-800-57"/>.
Note that these are maximum security strengths.
Using keys that are shorter than the maximum security strength will constrain the maximum security strength of the chosen algorithm to be no higher than the length of that key.
Keys that contain insufficient entropy to meet the maximum security strength constrain the maximum security of the chosen algorithm to be no higher than the bits of entropy represented in the key.</t>

<texttable title="SHA-3 output length and security strength values" anchor="output-length-and-security">
      <ttcol align='left'>Algorithm Name</ttcol>
      <ttcol align='left'>Output Length (bits)</ttcol>
      <ttcol align='left'>Maximum Security Strength (bits)</ttcol>
      <c>HMAC-SHA-256</c>
      <c>256</c>
      <c>&gt;=256</c>
      <c>HMAC-SHA-384</c>
      <c>384</c>
      <c>&gt;=256</c>
      <c>HMAC-SHA-512</c>
      <c>512</c>
      <c>&gt;=256</c>
      <c>HMAC-SHA3-256</c>
      <c>256</c>
      <c>&gt;=256</c>
      <c>HMAC-SHA3-384</c>
      <c>384</c>
      <c>&gt;=256</c>
      <c>HMAC-SHA3-512</c>
      <c>512</c>
      <c>&gt;=256</c>
      <c>KMAC128</c>
      <c>Variable</c>
      <c>128</c>
      <c>KMAC256</c>
      <c>Variable</c>
      <c>&gt;=256</c>
</texttable>

<t><xref target="prf-key-size-and-output-length"/> describes the parameters of the SHA-3 algorithms as used as a PRF in IKEv2, with the SHA-2 algorithms also listed for comparison purposes.</t>

<texttable title="SHA-3 preferred key sizes and output lengths for use as a PRF" anchor="prf-key-size-and-output-length">
      <ttcol align='left'>Algorithm Name</ttcol>
      <ttcol align='left'>PRF variant</ttcol>
      <ttcol align='left'>Preferred Key Size (bits)</ttcol>
      <ttcol align='left'>Output Length (bits)</ttcol>
      <c>HMAC-SHA-256</c>
      <c>PRF_HMAC_SHA2_256</c>
      <c>256</c>
      <c>256</c>
      <c>HMAC-SHA-384</c>
      <c>PRF_HMAC_SHA2_384</c>
      <c>384</c>
      <c>384</c>
      <c>HMAC-SHA-512</c>
      <c>PRF_HMAC_SHA2_512</c>
      <c>512</c>
      <c>512</c>
      <c>HMAC-SHA3-256</c>
      <c>PRF_HMAC_SHA3_256</c>
      <c>256</c>
      <c>256</c>
      <c>HMAC-SHA3-384</c>
      <c>PRF_HMAC_SHA3_384</c>
      <c>384</c>
      <c>384</c>
      <c>HMAC-SHA3-512</c>
      <c>PRF_HMAC_SHA3_512</c>
      <c>512</c>
      <c>512</c>
      <c>KMAC128</c>
      <c>PRF_KMAC_128</c>
      <c>128</c>
      <c>256, or length of output required for prf+</c>
      <c>KMAC256</c>
      <c>PRF_KMAC_256</c>
      <c>256</c>
      <c>512, or length of output required for prf+</c>
</texttable>

<t>Like their SHA-2 equivalents, the output of HMAC-SHA3 algorithms used in IKEv2 is used in its entirety without truncation.
The security strength of these algorithms is the same as the maximum security strength for that algorithm, unless the entropy in the supplied key is insufficient to meet that strength.</t>

<t>When key material is extracted from IKEv2's prf+ KDF for use with SHA-3 in IKEv2, the length of keys extracted <bcp14>MUST</bcp14> conform to the preferred key sizes listed in <xref target="prf-key-size-and-output-length"/>.</t>

<t>EDNOTE: The KMAC output lengths have been aligned with HMAC, but if we're not depending on collision resistance, it seems like they could be reduced to 128/256 bits respectively?
That would also mean that the PRF output would be suitable for use as a PRF key without requiring further modification, like HMAC.</t>

<t><xref target="auth-key-size-and-output-length"/> describes the parameters of the SHA-3 algorithms as used for authentication and integrity protection in IKEv2 and IPsec, with the SHA-2 algorithms also listed for comparison purposes.</t>

<texttable title="SHA-3 preferred key sizes and output lengths for use as an Integrity Algorithm Transform" anchor="auth-key-size-and-output-length">
      <ttcol align='left'>Algorithm Name</ttcol>
      <ttcol align='left'>Integrity variant</ttcol>
      <ttcol align='left'>Key Size (bits)</ttcol>
      <ttcol align='left'>Output Length (bits)</ttcol>
      <c>HMAC-SHA-256</c>
      <c>AUTH_HMAC_SHA2_256_128</c>
      <c>256</c>
      <c>128</c>
      <c>HMAC-SHA-384</c>
      <c>AUTH_HMAC_SHA2_384_192</c>
      <c>384</c>
      <c>192</c>
      <c>HMAC-SHA-512</c>
      <c>AUTH_HMAC_SHA2_512_256</c>
      <c>512</c>
      <c>256</c>
      <c>HMAC-SHA3-256</c>
      <c>AUTH_HMAC_SHA3_256_128</c>
      <c>256</c>
      <c>128</c>
      <c>HMAC-SHA3-384</c>
      <c>AUTH_HMAC_SHA3_384_192</c>
      <c>384</c>
      <c>192</c>
      <c>HMAC-SHA3-512</c>
      <c>AUTH_HMAC_SHA3_512_256</c>
      <c>512</c>
      <c>256</c>
      <c>KMAC128</c>
      <c>AUTH_KMAC_128</c>
      <c>128</c>
      <c>128</c>
      <c>KMAC256</c>
      <c>AUTH_KMAC_256</c>
      <c>256</c>
      <c>256</c>
</texttable>

<t>When used for authentication and integrity protection, HMAC-SHA3 message authentication codes are truncated, and KMAC message authentication codes are produced using a smaller value for the "requested output length" parameter L.
In this case, the security strength of each given algorithm is constrained by its output length.</t>

<t>When key material is extracted from IKEv2's prf+ KDF for use with SHA-3 for authentication and integrity protection in IKEv2 or IPsec, the length of keys extracted <bcp14>MUST</bcp14> conform to the key sizes listed in <xref target="auth-key-size-and-output-length"/>.</t>

</section>
<section anchor="sha-3-as-a-prf-in-ikev2"><name>SHA-3 as a PRF in IKEv2</name>

<section anchor="overview"><name>Overview</name>

<t>IKEv2 Security Associations (SAs) make use of a PRF for authentication purposes, and as a part of the prf+ Key Derivation Function (KDF).
HMAC-SHA3 and KMAC can both act as the PRF for an IKE SA, but KMAC is treated slightly differently to other PRFs as it is capable of producing different output lengths depending on the context in which it's used.</t>

<t>For both HMAC-SHA3 and KMAC, key K is either a fixed length key (such as SK_d) that is the same size as the output produced by that SHA-3 algorithm, or the length of K is dependent on other factors.
For example, when used with the IKE SA keys SK_d, SK_pi or SK_pr, these keys are always 256 bits in length when the IKE SA's PRF is HMAC-SHA3-256.
When the PRF is used with nonce inputs as the key K (e.g. when generating SKEYSEED), or when the PRF is used with a pre-shared key as the HMAC key K, the length of the key K depends on implementation-specific details, user configuration options, etc.</t>

</section>
<section anchor="hmac-sha3"><name>HMAC-SHA3</name>

<t>When used as a PRF in IKEv2, the full output of each HMAC-SHA3 algorithm is used, rather than the truncated variants described below for integrity protection in IPsec.
Since the output length of HMAC is fixed, prf+ is used as described in <xref target="RFC7296"/>.</t>

</section>
<section anchor="kmac"><name>KMAC</name>

<t>A notable difference to HMAC is that when KMAC is used as the PRF for an IKE SA, its "requested output length" parameter L and "customization string" parameter S are populated differently depending on whether KMAC is being used as a part of the prf+ KDF or not.
The context string S is also populated differently depending on whether KMAC is used in prf+ or not.
This process is described in more detail below.</t>

<t>EDNOTE: The customization string differences aren't strictly necessary and may make implementation a bit harder, but they seem valuable in that we're placing a clear divide between two places with different rules on how KMAC is used.</t>

<section anchor="kmac-as-a-prf"><name>KMAC as a PRF</name>

<t>When used in IKEv2, KMAC's output length L is 128 for KMAC-128, and 256 for KMAC-256.
That is, the output length is the same size as the security strength and preferred key size of the given KMAC algorithm.
The only exception to this is when KMAC is used in prf+, as described below.</t>

<t>When KMAC is used outside the context of prf+, the customization string S is set to the ASCII character string "ikev2 prf", without null termination.</t>

</section>
<section anchor="kmac-in-prf"><name>KMAC in prf+</name>

<t>When KMAC is used in prf+, L is set to the length of the keying material required.
That is, prf (K, S | 0x01) is the only step of the prf+ function that is ever required, as KMAC can produce a pseudorandom stream without the need to iteratively call prf as described in <xref target="RFC7296"/>.</t>

<t>EDNOTE: the intent here is to keep prf+ (sort of) the same for KMAC, it's just that only one iteration is ever needed.
Would this actually be more annoying from an implementer's point of view than just replacing prf+, though?
The extra 0x01 is easy to forget if you simply redirect prf+ calls to KMAC instead.</t>

<t>When KMAC is used in prf+, the customization string S is set to the ASCII character string "ikev2 kdf", without null termination.</t>

</section>
</section>
</section>
<section anchor="sha-3-for-authentication-and-integrity-protection-in-esp-ah-and-ikev2"><name>SHA-3 for authentication and integrity protection in ESP, AH and IKEv2</name>

<t>IPsec SAs can make use of an integrity protection algorithm to provide data origin authentication and integrity protection services.
KMAC and HMAC-SHA3 can be used to provide these services.
As described in <xref target="RFC8221"/>, Authenticated Encryption with Associated Data (AEAD) ciphers are the fastest and most modern approach to providing these services in conjunction with confidentiality protection.
KMAC and HMAC-SHA3 <bcp14>MUST NOT</bcp14> be negotiated in IKEv2 in conjunction with an AEAD cipher.</t>

<t>HMAC-SHA3 and KMAC <bcp14>MAY</bcp14> be used as an integrity protection algorithm with:</t>

<t><list style="symbols">
  <t>ESP in conjunction with a non-AEAD cipher</t>
  <t>ESP and null encryption (ENCR_NULL)</t>
  <t>IKEv2 in conjunction with a non-AEAD cipher</t>
  <t>AH</t>
</list></t>

<t>EDNOTE: You really should use ENCR-NULL over AH here. RFC 8221 recommends use of ENCR_NULL over AH - would it be worth reiterating that here?</t>

<section anchor="hmac-sha3-1"><name>HMAC-SHA3</name>

<t>When HMAC-SHA3 is used for authentication and integrity protection in ESP, AH, and IKEv2, the HMAC key K is 256 bits in length for HMAC-SHA3-256, 384 bits in length for HMAC-SHA3-384, and 512 bits in length for HMAC-SHA3-512.</t>

<t>The output string Z of HMAC is truncated such that the output length is halved.
As described in <xref target="RFC2104"/>, the left-most bits are retained, and the right-most bits are discarded.
The output string is truncated for the same reasons described in <xref target="RFC4868"/> for HMAC-SHA2.
Truncating the output of HMAC reduces the size expansion created by integrity protection offered by ESP and AH, and reduces the size of IKE messages.
The output length is halved to match the birthday attack bound for HMAC.</t>

</section>
<section anchor="kmac-1"><name>KMAC</name>

<t>When using KMAC, the L input parameter is always set to the same value as the key size and security strength of the chosen KMAC algorithm.
That is, the output length of KMAC128 is always set to 128 bits, and the output length of KMAC256 is always set to 256 bits.</t>

<t>When used with ESP or AH, the "customization string" parameter S is set to the ASCII character string "ipsec", without null termination.
When used with IKEv2 for authentication and integrity protection, the "customization string" parameter S is set to the ASCII character string "ikev2 auth", without null termination.</t>

<t>EDNOTE: Again, the customization string differences probably aren't strictly necessary, but placing IPsec and IKEv2 integrity/prf/prf+ into different domains seems like a good thing to do.</t>

</section>
</section>
<section anchor="shake-and-sha-3-in-ikev2"><name>SHAKE and SHA-3 in IKEv2</name>

<t>SHAKE and the SHA-3 cryptographic hash functions can generate digests for use with signature algorithms.
For instance, <xref target="RFC8692"/> specifies algorithm identifiers for using RSASSA-PSS and ECDSA with SHAKE, and NIST have assigned OIDs for using RSA PKCS #1 v1.5 signatures with SHA-3 <xref target="NISTOIDS"/>.</t>

<t><xref target="RFC7427"/> specifies the "Digital Signature" (14) authentication method, that allows IKEv2 to support any signature algorithm without the need to specify an authentication method for every new combination of signature algorithm and hash function.
The Digital Signature authentication method is the only way to utilise SHA-3 with signatures in IKEv2, so if a peer uses SHA-3 in this context, it <bcp14>MUST</bcp14> specify the Digital Signature authentication method in its corresponding AUTH payload.</t>

<t>The Digital Signature authentication method specifies use of a SIGNATURE_HASH_ALGORITHMS notification by each IKE peer to announce the hash functions it supports for use with signatures.
This specification defines values for announcing support for SHA-3 algorithms in the SIGNATURE_HASH_ALGORITHMS notification.
When an IKEv2 implementation supports SHA-3 in this context, and local policy permits use of SHA-3 to generate or verify signatures, it <bcp14>MUST</bcp14> include the corresponding values in its SIGNATURE_HASH_ALGORITHMS notification.</t>

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

<t>SHA-3 and SHA-2 are both believed to be secure at time of writing.
Views on the security of cryptographic algorithms evolves over time, so implementers should pay attention to IETF RFCs reporting on recommendations for use of cryptographic algorithms in IKEv2 and IPsec, such as any documents that update <xref target="RFC8221"/> and <xref target="RFC8247"/>.</t>

<t>Quantum computing has a significant impact on the security of all IETF security protocols, as a cryptographically-relevant quantum computer (CRQC) could use Shor's algorithm to break many traditional asymmetric cryptographic algorithms.
A CRQC can also attack hash functions, including SHA-3 and SHA-2, using Grover's algorithm.
However, the impact of Grover's algorithm is less dramatic than the impact of Shor's Algorithm.
The worst-case impact of Grover's algorithm is a reduction in security strength by a factor of two; using algorithms with a greater maximum security strength is sufficient to mitigate this.
Grover's algorithm is likely to be difficult to parallelise, so the security reduction for SHA-3 and SHA-2 created by Grover's algorithm may be smaller in practice.
See <xref target="GROVER"/> for a discussion on the practical cost of using Grover's algorithm to recover AES keys.</t>

<t>EDNOTE: More references would be helpful here, especially if they relate to hash functions specifically.</t>

<t>The security properties offered by both HMAC-SHA3 and KMAC depend on limiting access to the keys used with those algorithms.
Since both algorithms depend on a symmetric key, the key must be known by at least two parties in order to be useful.
Sharing the key beyond two parties may erode the security offered by these algorithms.
In the case of IKEv2 and IPsec, this typically means that access to keys must be limited to the peers participating in the security association that uses those keys.
IKEv2 can be used to enforce this for IPsec SAs and most keys used in IKE SAs, but pre-shared keys are a notable exception here.
Providing more than two peers with access to a single pre-shared key may undermine the security offered by that pre-shared key, and hence the security offered by HMAC or KMAC.</t>

<t>When IKEv2 is used to create IPsec SAs, the keys for HMAC-SHA3 and KMAC are all ultimately derived from an ephemeral shared secret produced using one or more negotiated key exchange algorithms, with the exception of static pre-shared keys used in IKE for authentication and/or protection against quantum computers.
If the negotiated key exchange algorithm offers few bits of security than the negotiated PRF, this effectively caps the bits of security offered by the PRF as well.
Negotiating a key exchange algorithm that offers more bits of security than the negotiated PRF does not improve the security offered by that PRF.
Similarly, using an encryption algorithm whose security level does not align to the negotiated PRF will undermine the security offered by either the encryption algorithm or the PRF.
As such, it is important to ensure that IKE peers configure algorithm policies such that every algorithm negotiated always meets an acceptable minimum security level.
Where static keys are used with HMAC-SHA3 and KMAC, these <bcp14>MUST</bcp14> contain at least as much entropy as the security level of the chosen algorithm, and <bcp14>SHOULD</bcp14> be generated using a random number generator capable suitable for use with cryptography.</t>

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

<t>For negotiating use of HMAC-SHA3 and KMAC as PRFs for IKEv2, IANA is requested to assign five Transform IDs in the "Transform Type 2 - Pseudorandom Function Transform IDs" registry:</t>

<texttable title="SHA-3 PRF Transform IDs" anchor="prf-transforms">
      <ttcol align='left'>Number</ttcol>
      <ttcol align='left'>Name</ttcol>
      <ttcol align='left'>Status</ttcol>
      <ttcol align='left'>Reference</ttcol>
      <c>TBD</c>
      <c>PRF_HMAC_SHA3_256</c>
      <c>&#160;</c>
      <c>[This draft]</c>
      <c>TBD</c>
      <c>PRF_HMAC_SHA3_384</c>
      <c>&#160;</c>
      <c>[This draft]</c>
      <c>TBD</c>
      <c>PRF_HMAC_SHA3_512</c>
      <c>&#160;</c>
      <c>[This draft]</c>
      <c>TBD</c>
      <c>PRF_KMAC_128</c>
      <c>&#160;</c>
      <c>[This draft]</c>
      <c>TBD</c>
      <c>PRF_KMAC_256</c>
      <c>&#160;</c>
      <c>[This draft]</c>
</texttable>

<t>For negotiating use of HMAC-SHA3 and KMAC for integrity protection in  IKEv2 and IPsec protocols, IANA is requested to assign five Transform IDs in the "Transform Type 3 - Integrity Algorithm Transform IDs" registry:</t>

<texttable title="SHA-3 Integrity Algorithm Transform IDs" anchor="auth-transforms">
      <ttcol align='left'>Number</ttcol>
      <ttcol align='left'>Name</ttcol>
      <ttcol align='left'>Status</ttcol>
      <ttcol align='left'>Reference</ttcol>
      <c>TBD</c>
      <c>AUTH_HMAC_SHA3_256_128</c>
      <c>&#160;</c>
      <c>[This draft]</c>
      <c>TBD</c>
      <c>AUTH_HMAC_SHA3_384_192</c>
      <c>&#160;</c>
      <c>[This draft]</c>
      <c>TBD</c>
      <c>AUTH_HMAC_SHA3_512_256</c>
      <c>&#160;</c>
      <c>[This draft]</c>
      <c>TBD</c>
      <c>AUTH_KMAC_128</c>
      <c>&#160;</c>
      <c>[This draft]</c>
      <c>TBD</c>
      <c>AUTH_KMAC_256</c>
      <c>&#160;</c>
      <c>[This draft]</c>
</texttable>

<t>For indicating support for the SHA-3 cryptographic hash functions and SHAKE XOFs in conjunction with a signature algorithm, IANA is requested to assign six Transform IDs in the "IKEv2 Hash Algorithms" registry:</t>

<texttable title="SHA-3 Hash Algorithm IDs" anchor="hash-transforms">
      <ttcol align='left'>Value</ttcol>
      <ttcol align='left'>Hash Algorithm</ttcol>
      <ttcol align='left'>Reference</ttcol>
      <c>TBD</c>
      <c>SHA3_224</c>
      <c>[This draft]</c>
      <c>TBD</c>
      <c>SHA3_256</c>
      <c>[This draft]</c>
      <c>TBD</c>
      <c>SHA3_384</c>
      <c>[This draft]</c>
      <c>TBD</c>
      <c>SHA3_512</c>
      <c>[This draft]</c>
      <c>TBD</c>
      <c>SHAKE_128</c>
      <c>[This draft]</c>
      <c>TBD</c>
      <c>SHAKE_256</c>
      <c>[This draft]</c>
</texttable>

</section>


  </middle>

  <back>


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



<reference anchor="RFC7296">
  <front>
    <title>Internet Key Exchange Protocol Version 2 (IKEv2)</title>
    <author fullname="C. Kaufman" initials="C." surname="Kaufman"/>
    <author fullname="P. Hoffman" initials="P." surname="Hoffman"/>
    <author fullname="Y. Nir" initials="Y." surname="Nir"/>
    <author fullname="P. Eronen" initials="P." surname="Eronen"/>
    <author fullname="T. Kivinen" initials="T." surname="Kivinen"/>
    <date month="October" year="2014"/>
    <abstract>
      <t>This document describes version 2 of the Internet Key Exchange (IKE) protocol. IKE is a component of IPsec used for performing mutual authentication and establishing and maintaining Security Associations (SAs). This document obsoletes RFC 5996, and includes all of the errata for it. It advances IKEv2 to be an Internet Standard.</t>
    </abstract>
  </front>
  <seriesInfo name="STD" value="79"/>
  <seriesInfo name="RFC" value="7296"/>
  <seriesInfo name="DOI" value="10.17487/RFC7296"/>
</reference>

<reference anchor="FIPS-202">
  <front>
    <title>SHA-3 standard :: permutation-based hash and extendable-output functions</title>
    <author>
      <organization/>
    </author>
    <date year="2015"/>
  </front>
  <seriesInfo name="DOI" value="10.6028/nist.fips.202"/>
<refcontent>National Institute of Standards and Technology (U.S.)</refcontent></reference>

<reference anchor="SP-800-185">
  <front>
    <title>SHA-3 derived functions: cSHAKE, KMAC, TupleHash and ParallelHash</title>
    <author fullname="John Kelsey" initials="J." surname="Kelsey">
      <organization/>
    </author>
    <author fullname="Shu-jen Change" initials="S." surname="Change">
      <organization/>
    </author>
    <author fullname="Ray Perlner" initials="R." surname="Perlner">
      <organization/>
    </author>
    <date month="December" year="2016"/>
  </front>
  <seriesInfo name="DOI" value="10.6028/nist.sp.800-185"/>
<refcontent>National Institute of Standards and Technology</refcontent></reference>

<reference anchor="RFC2119">
  <front>
    <title>Key words for use in RFCs to Indicate Requirement Levels</title>
    <author fullname="S. Bradner" initials="S." surname="Bradner"/>
    <date month="March" year="1997"/>
    <abstract>
      <t>In many standards track documents several words are used to signify the requirements in the specification. These words are often capitalized. This document defines these words as they should be interpreted in IETF documents. This document specifies an Internet Best Current Practices for the Internet Community, and requests discussion and suggestions for improvements.</t>
    </abstract>
  </front>
  <seriesInfo name="BCP" value="14"/>
  <seriesInfo name="RFC" value="2119"/>
  <seriesInfo name="DOI" value="10.17487/RFC2119"/>
</reference>

<reference anchor="RFC8174">
  <front>
    <title>Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words</title>
    <author fullname="B. Leiba" initials="B." surname="Leiba"/>
    <date month="May" year="2017"/>
    <abstract>
      <t>RFC 2119 specifies common key words that may be used in protocol specifications. This document aims to reduce the ambiguity by clarifying that only UPPERCASE usage of the key words have the defined special meanings.</t>
    </abstract>
  </front>
  <seriesInfo name="BCP" value="14"/>
  <seriesInfo name="RFC" value="8174"/>
  <seriesInfo name="DOI" value="10.17487/RFC8174"/>
</reference>




    </references>

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



<reference anchor="ML-KEM">
  <front>
    <title>Module-Lattice-Based Key-Encapsulation Mechanism Standard</title>
    <author>
      <organization/>
    </author>
    <date month="August" year="2024"/>
  </front>
  <seriesInfo name="DOI" value="10.6028/nist.fips.203"/>
<refcontent>National Institute of Standards and Technology</refcontent></reference>

<reference anchor="ML-DSA">
  <front>
    <title>Module-Lattice-Based Digital Signature Standard</title>
    <author>
      <organization/>
    </author>
    <date month="August" year="2024"/>
  </front>
  <seriesInfo name="DOI" value="10.6028/nist.fips.204"/>
<refcontent>National Institute of Standards and Technology</refcontent></reference>

<reference anchor="SLH-DSA">
  <front>
    <title>Stateless Hash-Based Digital Signature Standard</title>
    <author>
      <organization/>
    </author>
    <date month="August" year="2024"/>
  </front>
  <seriesInfo name="DOI" value="10.6028/nist.fips.205"/>
<refcontent>National Institute of Standards and Technology</refcontent></reference>


<reference anchor="FALCON" >
  <front>
    <title>Falcon: Fast-Fourier Lattice-based Compact Signatures over NTRU</title>
    <author initials="P.-A." surname="Foque" fullname="Pierre-Alain Foque">
      <organization></organization>
    </author>
    <author initials="J." surname="Hoffstein" fullname="Jeffrey Hoffstein">
      <organization></organization>
    </author>
    <author initials="P." surname="Kirchner" fullname="Paul Kirchner">
      <organization></organization>
    </author>
    <author initials="V." surname="Lyubashevsky" fullname="Vadim Lyubashevsky">
      <organization></organization>
    </author>
    <author initials="T." surname="Pornin" fullname="Thomas Pornin">
      <organization></organization>
    </author>
    <author initials="T." surname="Prest" fullname="Thomas Prest">
      <organization></organization>
    </author>
    <author initials="T." surname="Ricosset" fullname="Thomas Ricosset">
      <organization></organization>
    </author>
    <author initials="G." surname="Seiler" fullname="Gregor Seiler">
      <organization></organization>
    </author>
    <author initials="W." surname="Whyte" fullname="William Whyte">
      <organization></organization>
    </author>
    <author initials="Z." surname="Zhang" fullname="Zhenfei Zhang">
      <organization></organization>
    </author>
    <date year="2020"/>
  </front>
  <format type="PDF" target="https://falcon-sign.info/falcon.pdf"/>
</reference>
<reference anchor="NISTOIDS" target="https://csrc.nist.gov/projects/computer-security-objects-register/algorithm-registration">
  <front>
    <title>Computer Security Objects Register</title>
    <author >
      <organization>National Institute of Standards and Technology</organization>
    </author>
    <date year="2024"/>
  </front>
</reference>


<reference anchor="SP-800-57">
  <front>
    <title>Recommendation for key management:: part 1 - general</title>
    <author fullname="Elaine Barker" initials="E." surname="Barker">
      <organization/>
    </author>
    <date month="May" year="2020"/>
  </front>
  <seriesInfo name="DOI" value="10.6028/nist.sp.800-57pt1r5"/>
<refcontent>National Institute of Standards and Technology</refcontent></reference>


<reference anchor="GROVER" target="https://csrc.nist.gov/Presentations/2024/practical-cost-of-grover-for-aes-key-recovery">
  <front>
    <title>On the practical cost of Grover for AES key recovery</title>
    <author >
      <organization>UK National Cyber Security Centre</organization>
    </author>
    <date year="2024"/>
  </front>
  <format type="PDF" target="https://csrc.nist.gov/csrc/media/Events/2024/fifth-pqc-standardization-conference/documents/papers/on-practical-cost-of-grover.pdf"/>
</reference>


<reference anchor="RFC2104">
  <front>
    <title>HMAC: Keyed-Hashing for Message Authentication</title>
    <author fullname="H. Krawczyk" initials="H." surname="Krawczyk"/>
    <author fullname="M. Bellare" initials="M." surname="Bellare"/>
    <author fullname="R. Canetti" initials="R." surname="Canetti"/>
    <date month="February" year="1997"/>
    <abstract>
      <t>This document describes HMAC, a mechanism for message authentication using cryptographic hash functions. HMAC can be used with any iterative cryptographic hash function, e.g., MD5, SHA-1, in combination with a secret shared key. The cryptographic strength of HMAC depends on the properties of the underlying hash function. This memo provides information for the Internet community. This memo does not specify an Internet standard of any kind</t>
    </abstract>
  </front>
  <seriesInfo name="RFC" value="2104"/>
  <seriesInfo name="DOI" value="10.17487/RFC2104"/>
</reference>

<reference anchor="RFC4868">
  <front>
    <title>Using HMAC-SHA-256, HMAC-SHA-384, and HMAC-SHA-512 with IPsec</title>
    <author fullname="S. Kelly" initials="S." surname="Kelly"/>
    <author fullname="S. Frankel" initials="S." surname="Frankel"/>
    <date month="May" year="2007"/>
    <abstract>
      <t>This specification describes the use of Hashed Message Authentication Mode (HMAC) in conjunction with the SHA-256, SHA-384, and SHA-512 algorithms in IPsec. These algorithms may be used as the basis for data origin authentication and integrity verification mechanisms for the Authentication Header (AH), Encapsulating Security Payload (ESP), Internet Key Exchange Protocol (IKE), and IKEv2 protocols, and also as Pseudo-Random Functions (PRFs) for IKE and IKEv2. Truncated output lengths are specified for the authentication-related variants, with the corresponding algorithms designated as HMAC-SHA-256-128, HMAC-SHA-384-192, and HMAC-SHA-512-256. The PRF variants are not truncated, and are called PRF-HMAC-SHA-256, PRF-HMAC-SHA-384, and PRF-HMAC-SHA-512. [STANDARDS-TRACK]</t>
    </abstract>
  </front>
  <seriesInfo name="RFC" value="4868"/>
  <seriesInfo name="DOI" value="10.17487/RFC4868"/>
</reference>

<reference anchor="RFC8221">
  <front>
    <title>Cryptographic Algorithm Implementation Requirements and Usage Guidance for Encapsulating Security Payload (ESP) and Authentication Header (AH)</title>
    <author fullname="P. Wouters" initials="P." surname="Wouters"/>
    <author fullname="D. Migault" initials="D." surname="Migault"/>
    <author fullname="J. Mattsson" initials="J." surname="Mattsson"/>
    <author fullname="Y. Nir" initials="Y." surname="Nir"/>
    <author fullname="T. Kivinen" initials="T." surname="Kivinen"/>
    <date month="October" year="2017"/>
    <abstract>
      <t>This document replaces RFC 7321, "Cryptographic Algorithm Implementation Requirements and Usage Guidance for Encapsulating Security Payload (ESP) and Authentication Header (AH)". The goal of this document is to enable ESP and AH to benefit from cryptography that is up to date while making IPsec interoperable.</t>
    </abstract>
  </front>
  <seriesInfo name="RFC" value="8221"/>
  <seriesInfo name="DOI" value="10.17487/RFC8221"/>
</reference>

<reference anchor="RFC8247">
  <front>
    <title>Algorithm Implementation Requirements and Usage Guidance for the Internet Key Exchange Protocol Version 2 (IKEv2)</title>
    <author fullname="Y. Nir" initials="Y." surname="Nir"/>
    <author fullname="T. Kivinen" initials="T." surname="Kivinen"/>
    <author fullname="P. Wouters" initials="P." surname="Wouters"/>
    <author fullname="D. Migault" initials="D." surname="Migault"/>
    <date month="September" year="2017"/>
    <abstract>
      <t>The IPsec series of protocols makes use of various cryptographic algorithms in order to provide security services. The Internet Key Exchange (IKE) protocol is used to negotiate the IPsec Security Association (IPsec SA) parameters, such as which algorithms should be used. To ensure interoperability between different implementations, it is necessary to specify a set of algorithm implementation requirements and usage guidance to ensure that there is at least one algorithm that all implementations support. This document updates RFC 7296 and obsoletes RFC 4307 in defining the current algorithm implementation requirements and usage guidance for IKEv2, and does minor cleaning up of the IKEv2 IANA registry. This document does not update the algorithms used for packet encryption using IPsec Encapsulating Security Payload (ESP).</t>
    </abstract>
  </front>
  <seriesInfo name="RFC" value="8247"/>
  <seriesInfo name="DOI" value="10.17487/RFC8247"/>
</reference>

<reference anchor="RFC8692">
  <front>
    <title>Internet X.509 Public Key Infrastructure: Additional Algorithm Identifiers for RSASSA-PSS and ECDSA Using SHAKEs</title>
    <author fullname="P. Kampanakis" initials="P." surname="Kampanakis"/>
    <author fullname="Q. Dang" initials="Q." surname="Dang"/>
    <date month="December" year="2019"/>
    <abstract>
      <t>Digital signatures are used to sign messages, X.509 certificates, and Certificate Revocation Lists (CRLs). This document updates the "Algorithms and Identifiers for the Internet X.509 Public Key Infrastructure Certificate and Certificate Revocation List (CRL) Profile" (RFC 3279) and describes the conventions for using the SHAKE function family in Internet X.509 certificates and revocation lists as one-way hash functions with the RSA Probabilistic signature and Elliptic Curve Digital Signature Algorithm (ECDSA) signature algorithms. The conventions for the associated subject public keys are also described.</t>
    </abstract>
  </front>
  <seriesInfo name="RFC" value="8692"/>
  <seriesInfo name="DOI" value="10.17487/RFC8692"/>
</reference>

<reference anchor="RFC7427">
  <front>
    <title>Signature Authentication in the Internet Key Exchange Version 2 (IKEv2)</title>
    <author fullname="T. Kivinen" initials="T." surname="Kivinen"/>
    <author fullname="J. Snyder" initials="J." surname="Snyder"/>
    <date month="January" year="2015"/>
    <abstract>
      <t>The Internet Key Exchange Version 2 (IKEv2) protocol has limited support for the Elliptic Curve Digital Signature Algorithm (ECDSA). The current version only includes support for three Elliptic Curve groups, and there is a fixed hash algorithm tied to each group. This document generalizes IKEv2 signature support to allow any signature method supported by PKIX and also adds signature hash algorithm negotiation. This is a generic mechanism and is not limited to ECDSA; it can also be used with other signature algorithms.</t>
    </abstract>
  </front>
  <seriesInfo name="RFC" value="7427"/>
  <seriesInfo name="DOI" value="10.17487/RFC7427"/>
</reference>




    </references>


<?line 566?>

<section anchor="test-vectors"><name>Test Vectors</name>

<t>The following test cases include inputs and outputs for scenarios where HMAC-SHA3 and KMAC are used in IKEv2 and IPsec.</t>

<t>A key, input, and output are always supplied, these correspond to the K, X and Z parameters described in <xref target="apis-for-sha-3"/>.
For KMAC, a customization string input is also supplied, which corresponds to the L parameter.
Note that in each context, the customization string is fixed.</t>

<t>All inputs and outputs are encoded in hexadecimal.
KMAC Customization strings also have an ASCII character string representation.
Data supplied to KMAC does not include quotation marks or null terminators.</t>

<t>In some cases a description is supplied, which describes the case being tested in more detail.
These descriptions are test vector metada, and are not ever supplied to the relevant algorithm.</t>

<section anchor="prf-test-vectors"><name>PRF Test Vectors</name>

<t>These test cases correspond to use of HMAC-SHA3 or KMAC as the PRF transform for an IKEv2 SA.</t>

<section anchor="hmac-sha3-256-prf-test-vectors"><name>HMAC-SHA3-256 PRF Test Vectors</name>

<figure><sourcecode type="test-vectors"><![CDATA[
~~ Test Case HMAC-SHA3-256-PRF-1 ~~

Description:
Preferred key size

Key (hex):
000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f

Input (hex):
fffefdfcfbfaf9f8f7f6f5f4f3f2f1f0efeeedecebeae9e8e7e6e5e4e3e2e1e0

Output (hex):
10ae5299b538c806177afcfbd50a78cca7869b183d0f405af0fb4ffbec65ffc9

~~ Test Case HMAC-SHA3-256-PRF-2 ~~

Description:
Smaller key size

Key (hex):
000102030405060708090a0b0c0d0e0f

Input (hex):
fffefdfcfbfaf9f8f7f6f5f4f3f2f1f0efeeedecebeae9e8e7e6e5e4e3e2e1e0

Output (hex):
30bf304d335b068b999b3c8053583921f98bd603661ce68d9bb481702656f3a8

~~ Test Case HMAC-SHA3-256-PRF-3 ~~

Description:
Larger key size

Key (hex):
000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f
202122232425262728292a2b2c2d2e2f

Input (hex):
fffefdfcfbfaf9f8f7f6f5f4f3f2f1f0efeeedecebeae9e8e7e6e5e4e3e2e1e0

Output (hex):
9cc1974f3329ec6ae380e16b5df6068e2c954652a06e359aada1def787d9e298

]]></sourcecode></figure>

</section>
<section anchor="hmac-sha3-384-prf-test-vectors"><name>HMAC-SHA3-384 PRF Test Vectors</name>

<figure><sourcecode type="test-vectors"><![CDATA[
~~ Test Case HMAC-SHA3-384-PRF-1 ~~

Description:
Preferred key size

Key (hex):
000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f
202122232425262728292a2b2c2d2e2f

Input (hex):
fffefdfcfbfaf9f8f7f6f5f4f3f2f1f0efeeedecebeae9e8e7e6e5e4e3e2e1e0

Output (hex):
c412ca3549716fafa30b7cc1f8333ec80875f7f42b1bd02e2467b01baf24bab5
37e030688caebcf14c2db2523e16bfc2

~~ Test Case HMAC-SHA3-384-PRF-2 ~~

Description:
Smaller key size

Key (hex):
000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f

Input (hex):
fffefdfcfbfaf9f8f7f6f5f4f3f2f1f0efeeedecebeae9e8e7e6e5e4e3e2e1e0

Output (hex):
beab6eed7c624690e25b84b66616192178fa06607e6971c4068d25df5944b6bc
21d374875260c9dedbc36914763da390

~~ Test Case HMAC-SHA3-384-PRF-3 ~~

Description:
Larger key size

Key (hex):
000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f
202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f

Input (hex):
fffefdfcfbfaf9f8f7f6f5f4f3f2f1f0efeeedecebeae9e8e7e6e5e4e3e2e1e0

Output (hex):
39719a89ebd05084f39e67c2ab349b8283198b30da01b30ea532bf6c3beee012
c148a0feff45ff4a243f664311beecca

]]></sourcecode></figure>

</section>
<section anchor="hmac-sha3-512-prf-test-vectors"><name>HMAC-SHA3-512 PRF Test Vectors</name>

<figure><sourcecode type="test-vectors"><![CDATA[
~~ Test Case HMAC-SHA3-512-PRF-1 ~~

Description:
Preferred key size

Key (hex):
000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f
202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f

Input (hex):
fffefdfcfbfaf9f8f7f6f5f4f3f2f1f0efeeedecebeae9e8e7e6e5e4e3e2e1e0

Output (hex):
dd3900c31efb5ca7f8cc457a2343c09177c76c81f0650e026d72e50878d70b70
c2b3330e0d72c2dccccad98bf39d8a2283d9c6c3ec05edee08d9b6702745b103

~~ Test Case HMAC-SHA3-512-PRF-2 ~~

Description:
Smaller key size

Key (hex):
000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f
202122232425262728292a2b2c2d2e2f

Input (hex):
fffefdfcfbfaf9f8f7f6f5f4f3f2f1f0efeeedecebeae9e8e7e6e5e4e3e2e1e0

Output (hex):
d31020b9deed7f237dacb5963c21d6a2fbd1f34497ad0a2ddef2aa0339e8f238
d8b5d56a53be7ac1612352c98a3905851bcb2c3a681ba273e15deff307710fe1

~~ Test Case HMAC-SHA3-512-PRF-3 ~~

Description:
Larger key size

Key (hex):
000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f
202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f
404142434445464748494a4b4c4d4e4f

Input (hex):
fffefdfcfbfaf9f8f7f6f5f4f3f2f1f0efeeedecebeae9e8e7e6e5e4e3e2e1e0

Output (hex):
5f08ded1ad2757d9ebf55a3b05276edeb1d25db8a280c01f3e631eaa2c9d15b9
99f0c0aa60178bcd26df3d9da9b65a823564a7c34e096140a769e15bc47d5c30

]]></sourcecode></figure>

</section>
<section anchor="kmac128-prf-test-vectors"><name>KMAC128 PRF Test Vectors</name>

<figure><sourcecode type="test-vectors"><![CDATA[
~~ Test Case KMAC128-PRF-1 ~~

Description:
Preferred key size

Key (hex):
000102030405060708090a0b0c0d0e0f

Input (hex):
fffefdfcfbfaf9f8f7f6f5f4f3f2f1f0efeeedecebeae9e8e7e6e5e4e3e2e1e0

Customization String (string):
"ikev2 prf"

Customization String (hex):
696b65763220707266

Output (hex):
942d56a4597c0d104497dc1c62be940a70198b32bfde8e2a5f57f55ec3fe5cef

~~ Test Case KMAC128-PRF-2 ~~

Description:
Smaller key size

Key (hex):
0001020304050607

Input (hex):
fffefdfcfbfaf9f8f7f6f5f4f3f2f1f0efeeedecebeae9e8e7e6e5e4e3e2e1e0

Customization String (string):
"ikev2 prf"

Customization String (hex):
696b65763220707266

Output (hex):
b050dd45ec09370cd2fe4b7c2a009618c5a426e81a4f11f6c538cf17027dbee3

~~ Test Case KMAC128-PRF-3 ~~

Description:
Larger key size

Key (hex):
000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f

Input (hex):
fffefdfcfbfaf9f8f7f6f5f4f3f2f1f0efeeedecebeae9e8e7e6e5e4e3e2e1e0

Customization String (string):
"ikev2 prf"

Customization String (hex):
696b65763220707266

Output (hex):
3a8d2a5ead5cd4db448b76a241b078fb444e1faf36eef8e195e275778a169b5f

]]></sourcecode></figure>

</section>
<section anchor="kmac256-prf-test-vectors"><name>KMAC256 PRF Test Vectors</name>

<figure><sourcecode type="test-vectors"><![CDATA[
~~ Test Case KMAC256-PRF-1 ~~

Description:
Preferred key size

Key (hex):
000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f

Input (hex):
fffefdfcfbfaf9f8f7f6f5f4f3f2f1f0efeeedecebeae9e8e7e6e5e4e3e2e1e0

Customization String (string):
"ikev2 prf"

Customization String (hex):
696b65763220707266

Output (hex):
3a8d2a5ead5cd4db448b76a241b078fb444e1faf36eef8e195e275778a169b5f

~~ Test Case KMAC256-PRF-2 ~~

Description:
Smaller key size

Key (hex):
000102030405060708090a0b0c0d0e0f

Input (hex):
fffefdfcfbfaf9f8f7f6f5f4f3f2f1f0efeeedecebeae9e8e7e6e5e4e3e2e1e0

Customization String (string):
"ikev2 prf"

Customization String (hex):
696b65763220707266

Output (hex):
942d56a4597c0d104497dc1c62be940a70198b32bfde8e2a5f57f55ec3fe5cef

~~ Test Case KMAC256-PRF-3 ~~

Description:
Larger key size

Key (hex):
000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f
202122232425262728292a2b2c2d2e2f

Input (hex):
fffefdfcfbfaf9f8f7f6f5f4f3f2f1f0efeeedecebeae9e8e7e6e5e4e3e2e1e0

Customization String (string):
"ikev2 prf"

Customization String (hex):
696b65763220707266

Output (hex):
beff64f08357a691290c7f67f6344a485941edd6d923bc554f8e4655702b090f

]]></sourcecode></figure>

</section>
</section>
<section anchor="kdf-test-vectors"><name>KDF Test Vectors</name>

<t>These test cases correspond to use of HMAC-SHA3 or KMAC with IKEv2's prf+ function.</t>

<section anchor="hmac-sha3-256-kdf-test-vectors"><name>HMAC-SHA3-256 KDF Test Vectors</name>

<figure><sourcecode type="test-vectors"><![CDATA[
~~ Test Case HMAC-SHA3-256-KDF-1 ~~

Description:
IKEv2 KDF request single PRF output

Key (hex):
000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f

Input (hex):
fffefdfcfbfaf9f8f7f6f5f4f3f2f1f0efeeedecebeae9e8e7e6e5e4e3e2e1e0

Number of output bits requested (integer):
256

Output (hex):
6aefdb97d1645cafec3590cd8a35366e67a7887b153c042b4eb609cc60391f97

~~ Test Case HMAC-SHA3-256-KDF-2 ~~

Description:
IKEv2 KDF request multiple PRF output

Key (hex):
000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f

Input (hex):
fffefdfcfbfaf9f8f7f6f5f4f3f2f1f0efeeedecebeae9e8e7e6e5e4e3e2e1e0

Number of output bits requested (integer):
512

Output (hex):
6aefdb97d1645cafec3590cd8a35366e67a7887b153c042b4eb609cc60391f97
d43335b5856ed1f2dd67c2c35853069ce7ae354df11b90b7dfea743890cf281a

~~ Test Case HMAC-SHA3-256-KDF-3 ~~

Description:
IKE SA key material
ENCR=AES-128-GCM
PRF=HMAC-SHA3-256
SK_d = 256 bits
SK_a[i|r] = nil
SK_e[i|r] = 160*2 bits
SK_p[i|r] = 256*2 bits

Key (hex):
000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f

Input (hex):
fffefdfcfbfaf9f8f7f6f5f4f3f2f1f0efeeedecebeae9e8e7e6e5e4e3e2e1e0
dfdedddcdbdad9d8d7d6d5d4d3d2d1d0

Number of output bits requested (integer):
1088

Output (hex):
553bc362cfd6286855545b1222ee5d6e2946930c584951d2aa047f14318de527
9c58cf057348463823a445a82106b16de3e9c9db06602ede34f1bbe4910e042d
ddddc5cc48a13ce8716b99d6522e03ee765f0549f1985f7e8c96e91246295b0b
0a9bdb6039e47f880d4d690ff6cd95376353f03635812f93ab417b8388d94f57
b9b731b554b0a269

~~ Test Case HMAC-SHA3-256-KDF-4 ~~

Description:
IKE SA key material
ENCR=AES-256-CBC
INTEG=HMAC-SHA3-256
PRF=HMAC-SHA3-256
SK_d = 256 bits
SK_a[i|r] = 256*2 bits
SK_e[i|r] = 256*2 bits
SK_p[i|r] = 256*2 bits

Key (hex):
000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f

Input (hex):
fffefdfcfbfaf9f8f7f6f5f4f3f2f1f0efeeedecebeae9e8e7e6e5e4e3e2e1e0
dfdedddcdbdad9d8d7d6d5d4d3d2d1d0

Number of output bits requested (integer):
1792

Output (hex):
553bc362cfd6286855545b1222ee5d6e2946930c584951d2aa047f14318de527
9c58cf057348463823a445a82106b16de3e9c9db06602ede34f1bbe4910e042d
ddddc5cc48a13ce8716b99d6522e03ee765f0549f1985f7e8c96e91246295b0b
0a9bdb6039e47f880d4d690ff6cd95376353f03635812f93ab417b8388d94f57
b9b731b554b0a269264abec3d7cbb3f43cb94c2b0bcaa9133358633ddbd4fe72
517b1de586599c5451b596953fc71ace7c4f6431f980327e21b02cb3298ec154
b526a14e5e6461fea32829d9de1c40a8c9d919e0b8e0d2132d663507d764ce32

~~ Test Case HMAC-SHA3-256-KDF-5 ~~

Description:
ESP key material
ENCR=AES-256-CBC
INTEG=HMAC-SHA3-256
KEYMAT=(256*2) + (256*2) bits

Key (hex):
000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f

Input (hex):
fffefdfcfbfaf9f8f7f6f5f4f3f2f1f0efeeedecebeae9e8e7e6e5e4e3e2e1e0

Number of output bits requested (integer):
1024

Output (hex):
6aefdb97d1645cafec3590cd8a35366e67a7887b153c042b4eb609cc60391f97
d43335b5856ed1f2dd67c2c35853069ce7ae354df11b90b7dfea743890cf281a
010bbf134b8f2d7d12c8eafbb0d4be0f8d0971357ea4e179b50e0d4316b56e80
51da1fd2be02168550150d40e6a36a3fbacdf9d639c1b00cdc58cb9af11dab7c

]]></sourcecode></figure>

</section>
<section anchor="hmac-sha3-384-kdf-test-vectors"><name>HMAC-SHA3-384 KDF Test Vectors</name>

<figure><sourcecode type="test-vectors"><![CDATA[
~~ Test Case HMAC-SHA3-384-KDF-1 ~~

Description:
IKEv2 KDF request single PRF output

Key (hex):
000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f
202122232425262728292a2b2c2d2e2f

Input (hex):
fffefdfcfbfaf9f8f7f6f5f4f3f2f1f0efeeedecebeae9e8e7e6e5e4e3e2e1e0

Number of output bits requested (integer):
384

Output (hex):
2c41a30906e2809b86e9cd75fdf055a46534664e49b0979ff067508d522f441f
cf47d15477119ba2e9b9e85399bff5d4

~~ Test Case HMAC-SHA3-384-KDF-2 ~~

Description:
IKEv2 KDF request multiple PRF output

Key (hex):
000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f
202122232425262728292a2b2c2d2e2f

Input (hex):
fffefdfcfbfaf9f8f7f6f5f4f3f2f1f0efeeedecebeae9e8e7e6e5e4e3e2e1e0

Number of output bits requested (integer):
768

Output (hex):
2c41a30906e2809b86e9cd75fdf055a46534664e49b0979ff067508d522f441f
cf47d15477119ba2e9b9e85399bff5d4a1d827ea5b485abf569b2e83585e720e
b7d7c50c4c90eadd1d9aeeaaf6921eae1f64d40a4efa56ef2cb02c1fe5d6b440

~~ Test Case HMAC-SHA3-384-KDF-3 ~~

Description:
IKE SA key material
ENCR=AES-128-GCM
PRF=HMAC-SHA3-384
SK_d = 384 bits
SK_a[i|r] = nil
SK_e[i|r] = 160*2 bits
SK_p[i|r] = 384*2 bits

Key (hex):
000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f
202122232425262728292a2b2c2d2e2f

Input (hex):
fffefdfcfbfaf9f8f7f6f5f4f3f2f1f0efeeedecebeae9e8e7e6e5e4e3e2e1e0
dfdedddcdbdad9d8d7d6d5d4d3d2d1d0

Number of output bits requested (integer):
1472

Output (hex):
73c5fc441670ce4766b1cbe9e17e1bd18e50903efcd49359c46cbb21da80c833
fe1a29789e0995c9fa58cd0759d3fb1765119115c72dad463a1d8b736b94dbd4
c1b6b31c40972eee5752ec22b12d4b42e8102358c7f7025313654ff909b4b87d
7357dfbbfaf2e2baf2d89e6575a9140484e8ef3681986bfe255a3bf5a1233a24
145336b7e192c9316967d809b14b1bc5986765010aa945c727ec4e3d63ec88dd
116994b90ffb2afd60e4c22ee85705aa1b57f50f878c21f3

~~ Test Case HMAC-SHA3-384-KDF-4 ~~

Description:
IKE SA key material
ENCR=AES-256-CBC
INTEG=HMAC-SHA3-384
PRF=HMAC-SHA3-384
SK_d = 384 bits
SK_a[i|r] = 384*2 bits
SK_e[i|r] = 256*2 bits
SK_p[i|r] = 384*2 bits

Key (hex):
000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f
202122232425262728292a2b2c2d2e2f

Input (hex):
fffefdfcfbfaf9f8f7f6f5f4f3f2f1f0efeeedecebeae9e8e7e6e5e4e3e2e1e0
dfdedddcdbdad9d8d7d6d5d4d3d2d1d0

Number of output bits requested (integer):
2432

Output (hex):
73c5fc441670ce4766b1cbe9e17e1bd18e50903efcd49359c46cbb21da80c833
fe1a29789e0995c9fa58cd0759d3fb1765119115c72dad463a1d8b736b94dbd4
c1b6b31c40972eee5752ec22b12d4b42e8102358c7f7025313654ff909b4b87d
7357dfbbfaf2e2baf2d89e6575a9140484e8ef3681986bfe255a3bf5a1233a24
145336b7e192c9316967d809b14b1bc5986765010aa945c727ec4e3d63ec88dd
116994b90ffb2afd60e4c22ee85705aa1b57f50f878c21f397ecf391e856e338
6969f3f0e74d09534e9bdbbc752eaad53b2c4aba329ef06036d55ff0c9885cb9
ac6e9ff4057c9f4f591103ad4cb04894d1193a9ad434407c54b285acc3576298
7ce8a0aca60afea4f9879f62085be44e638543ee66c41c8d5db02f2ae08b4d0b
b3b906c5c568e718921a205a02a8356f

~~ Test Case HMAC-SHA3-384-KDF-5 ~~

Description:
ESP key material
ENCR=AES-256-CBC
INTEG=HMAC-SHA3-384
KEYMAT=(256*2) + (384*2) bits

Key (hex):
000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f
202122232425262728292a2b2c2d2e2f

Input (hex):
fffefdfcfbfaf9f8f7f6f5f4f3f2f1f0efeeedecebeae9e8e7e6e5e4e3e2e1e0

Number of output bits requested (integer):
1280

Output (hex):
2c41a30906e2809b86e9cd75fdf055a46534664e49b0979ff067508d522f441f
cf47d15477119ba2e9b9e85399bff5d4a1d827ea5b485abf569b2e83585e720e
b7d7c50c4c90eadd1d9aeeaaf6921eae1f64d40a4efa56ef2cb02c1fe5d6b440
a2970d7be7d4b61a8b1fdde0850eac6848cfd46a28e3206465fce4cd030a7a8a
8398671e9b9b41dfd7eee81e37f4303f8055cb3ef2dae1b3723a49eda4c83077

]]></sourcecode></figure>

</section>
<section anchor="hmac-sha3-512-kdf-test-vectors"><name>HMAC-SHA3-512 KDF Test Vectors</name>

<figure><sourcecode type="test-vectors"><![CDATA[
~~ Test Case HMAC-SHA3-512-KDF-1 ~~

Description:
IKEv2 KDF request single PRF output

Key (hex):
000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f
202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f

Input (hex):
fffefdfcfbfaf9f8f7f6f5f4f3f2f1f0efeeedecebeae9e8e7e6e5e4e3e2e1e0

Number of output bits requested (integer):
512

Output (hex):
399c608d085a547c072ace5dfd9881791178026f318e695b7c6b3dec968e24be
3a55003dd481ddf021d762beb3736747f1af27abb432e489f545400968b2150a

~~ Test Case HMAC-SHA3-512-KDF-2 ~~

Description:
IKEv2 KDF request multiple PRF output

Key (hex):
000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f
202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f

Input (hex):
fffefdfcfbfaf9f8f7f6f5f4f3f2f1f0efeeedecebeae9e8e7e6e5e4e3e2e1e0

Number of output bits requested (integer):
1024

Output (hex):
399c608d085a547c072ace5dfd9881791178026f318e695b7c6b3dec968e24be
3a55003dd481ddf021d762beb3736747f1af27abb432e489f545400968b2150a
42af3f427186715cab4c97d47e3f7c25aa701030b51d74744c262aa2675d5d1f
27e35f99d4eeef1d07d19c9656c804b396b7f2761ea65a2653b4711340e2986f

~~ Test Case HMAC-SHA3-512-KDF-3 ~~

Description:
IKE SA key material
ENCR=AES-128-GCM
PRF=HMAC-SHA3-512
SK_d = 512 bits
SK_a[i|r] = nil
SK_e[i|r] = 160*2 bits
SK_p[i|r] = 512*2 bits

Key (hex):
000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f
202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f

Input (hex):
fffefdfcfbfaf9f8f7f6f5f4f3f2f1f0efeeedecebeae9e8e7e6e5e4e3e2e1e0
dfdedddcdbdad9d8d7d6d5d4d3d2d1d0

Number of output bits requested (integer):
1856

Output (hex):
9c7d3c211a5ab9c7ac70c688aa44df6d213dcdc339a667d68766b9bf77591879
a60247a979b02edcdc7bd3a3584a4faf8ecd7d02a91671d8a51523e4d9425a5c
11e2cd1bfa8bf9d8a81bd63d4b16f897f768d7065ae2fa0392f30815c0010d9a
229953a8d7878d4ff5ddafb41303652d30a2e9eaa3578f1b735db7043a6ac1c8
cdeccaf15970c7c7279319944ccaf4607fab77280c982e653adf6bad77298877
7b7602e022a51a7358b7827059879b37bc8d86f1dc6f915aa1bfd0241bc5d2fe
2cacd8f8705a1a247a2b476f75d5c31753863140f7a48f13c7d935c6e21f5f49
b95f791cf7a4c2d5

~~ Test Case HMAC-SHA3-512-KDF-4 ~~

Description:
IKE SA key material
ENCR=AES-256-CBC
INTEG=HMAC-SHA3-512
PRF=HMAC-SHA3-512
SK_d = 512 bits
SK_a[i|r] = 512*2 bits
SK_e[i|r] = 256*2 bits
SK_p[i|r] = 512*2 bits

Key (hex):
000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f
202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f

Input (hex):
fffefdfcfbfaf9f8f7f6f5f4f3f2f1f0efeeedecebeae9e8e7e6e5e4e3e2e1e0
dfdedddcdbdad9d8d7d6d5d4d3d2d1d0

Number of output bits requested (integer):
3072

Output (hex):
9c7d3c211a5ab9c7ac70c688aa44df6d213dcdc339a667d68766b9bf77591879
a60247a979b02edcdc7bd3a3584a4faf8ecd7d02a91671d8a51523e4d9425a5c
11e2cd1bfa8bf9d8a81bd63d4b16f897f768d7065ae2fa0392f30815c0010d9a
229953a8d7878d4ff5ddafb41303652d30a2e9eaa3578f1b735db7043a6ac1c8
cdeccaf15970c7c7279319944ccaf4607fab77280c982e653adf6bad77298877
7b7602e022a51a7358b7827059879b37bc8d86f1dc6f915aa1bfd0241bc5d2fe
2cacd8f8705a1a247a2b476f75d5c31753863140f7a48f13c7d935c6e21f5f49
b95f791cf7a4c2d55f65eac34b24d6b7612f2c09f00e02a6dd99d1d5caf2632c
2a4f3d83570837cb9c31a7c4440950ca5afbc17f6f1b9123fb02da95ca37540c
6ea9ecdfe1f6662ead42a2d1f14dbe13c91e5d6dfd697e729eee26f86976e0b2
f2e844beb7134bca666fb9207a01e90fff02336f1656b57b86d0ab84545392a9
82cc5b3b3f52b2ddb28de585fa8c7cfafd18d8f66ac4394c8ec7db5364c494be

~~ Test Case HMAC-SHA3-512-KDF-5 ~~

Description:
ESP key material
ENCR=AES-256-CBC
INTEG=HMAC-SHA3-512
KEYMAT=(256*2) + (512*2) bits

Key (hex):
000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f
202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f

Input (hex):
fffefdfcfbfaf9f8f7f6f5f4f3f2f1f0efeeedecebeae9e8e7e6e5e4e3e2e1e0

Number of output bits requested (integer):
1536

Output (hex):
399c608d085a547c072ace5dfd9881791178026f318e695b7c6b3dec968e24be
3a55003dd481ddf021d762beb3736747f1af27abb432e489f545400968b2150a
42af3f427186715cab4c97d47e3f7c25aa701030b51d74744c262aa2675d5d1f
27e35f99d4eeef1d07d19c9656c804b396b7f2761ea65a2653b4711340e2986f
b500b7744b1c2cf5cfffef372b6c535c21897ee40b44589407936390ef44122d
7ed64063b04d9c0105b84220c9038379ffc861820e4c3ab9972a20ce31d6c468

]]></sourcecode></figure>

</section>
<section anchor="kmac128-kdf-test-vectors"><name>KMAC128 KDF Test Vectors</name>

<figure><sourcecode type="test-vectors"><![CDATA[
~~ Test Case KMAC128-KDF-1 ~~

Description:
IKEv2 KDF request single PRF output

Key (hex):
000102030405060708090a0b0c0d0e0f

Input (hex):
fffefdfcfbfaf9f8f7f6f5f4f3f2f1f0efeeedecebeae9e8e7e6e5e4e3e2e1e0

Number of output bits requested (integer):
256

Customization String (string):
"ikev2 kdf"

Customization String (hex):
696b657632206b6466

Output (hex):
364f2231443775dcdd1879fd4aa54f1adadaf0ac58e90285c5d95d3e2bbbc216

~~ Test Case KMAC128-KDF-2 ~~

Description:
IKEv2 KDF request multiple PRF output

Key (hex):
000102030405060708090a0b0c0d0e0f

Input (hex):
fffefdfcfbfaf9f8f7f6f5f4f3f2f1f0efeeedecebeae9e8e7e6e5e4e3e2e1e0

Number of output bits requested (integer):
512

Customization String (string):
"ikev2 kdf"

Customization String (hex):
696b657632206b6466

Output (hex):
4603b8e26567ccbb4e0498bdbc96ccad685849371efc9c3f34ee681b88bd2dc0
95e2c5745769f73873e4787228bde59d73567fc81a865f2d14208355fbd0e7b1

~~ Test Case KMAC128-KDF-3 ~~

Description:
IKE SA key material
ENCR=AES-128-GCM
PRF=KMAC128
SK_d = 128 bits
SK_a[i|r] = nil
SK_e[i|r] = 160*2 bits
SK_p[i|r] = 128*2 bits

Key (hex):
000102030405060708090a0b0c0d0e0f

Input (hex):
fffefdfcfbfaf9f8f7f6f5f4f3f2f1f0efeeedecebeae9e8e7e6e5e4e3e2e1e0
dfdedddcdbdad9d8d7d6d5d4d3d2d1d0

Number of output bits requested (integer):
704

Customization String (string):
"ikev2 kdf"

Customization String (hex):
696b657632206b6466

Output (hex):
cd4f184a2868ee2b4f44d28a1e543a72489767f621c23f6645e477a7668c7d1d
9a7c143b5258d4258ded00fe78ea280033f4f52832876a61747358b759f135d3
f2b8908571defe8d0cbe497a8f7daf09710d1eac6ae6cd33

~~ Test Case KMAC128-KDF-4 ~~

Description:
IKE SA key material
ENCR=AES-256-CBC
INTEG=KMAC128
PRF=KMAC128
SK_d = 128 bits
SK_a[i|r] = 128*2 bits
SK_e[i|r] = 256*2 bits
SK_p[i|r] = 128*2 bits

Key (hex):
000102030405060708090a0b0c0d0e0f

Input (hex):
fffefdfcfbfaf9f8f7f6f5f4f3f2f1f0efeeedecebeae9e8e7e6e5e4e3e2e1e0
dfdedddcdbdad9d8d7d6d5d4d3d2d1d0

Number of output bits requested (integer):
1152

Customization String (string):
"ikev2 kdf"

Customization String (hex):
696b657632206b6466

Output (hex):
5346031edd514606a1faf3269571e9d0cfa632e9640f09499457276a2ec39c25
d042401ac90c6f53ee93a50913a4664f5c1e71469739d729a1f57d2f78832cb7
695a471756b1c27500267047985007c901575e6f43bd22c452d7b92ed5cb0328
d4a9ecccba37c28d5e1859291d256dd40ff346583532c75c80a13391b22815ae
7a2768d5c8b8a9f3283f11e7b7c1c627

~~ Test Case KMAC128-KDF-5 ~~

Description:
ESP key material
ENCR=AES-256-CBC
INTEG=KMAC128
KEYMAT=(256*2) + (128*2) bits

Key (hex):
000102030405060708090a0b0c0d0e0f

Input (hex):
fffefdfcfbfaf9f8f7f6f5f4f3f2f1f0efeeedecebeae9e8e7e6e5e4e3e2e1e0

Number of output bits requested (integer):
768

Customization String (string):
"ikev2 kdf"

Customization String (hex):
696b657632206b6466

Output (hex):
1ad3efce20c5ea7dc9ea91ab19aa05b6bb29cb81c3eeb9db4eab962f43772306
c33b221a3e244e2537d591631daf5c2ce3ae0e58ed8e5580cedbe7538d1727d1
d49a7b8a93f3d4c698e608e0b0534e51c871686308b1085031ae3765a29abb3c

]]></sourcecode></figure>

</section>
<section anchor="kmac256-kdf-test-vectors"><name>KMAC256 KDF Test Vectors</name>

<figure><sourcecode type="test-vectors"><![CDATA[
~~ Test Case KMAC256-KDF-1 ~~

Description:
IKEv2 KDF request single PRF output

Key (hex):
000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f

Input (hex):
fffefdfcfbfaf9f8f7f6f5f4f3f2f1f0efeeedecebeae9e8e7e6e5e4e3e2e1e0

Number of output bits requested (integer):
512

Customization String (string):
"ikev2 kdf"

Customization String (hex):
696b657632206b6466

Output (hex):
918fcc9584938feadca44878aff97466df6de641863bfa2ff92e8d4f28109195
316a4786d33a7a3e7de2cf483d9750f0d5f1f2551b59992a621d44850fb4b730

~~ Test Case KMAC256-KDF-2 ~~

Description:
IKEv2 KDF request multiple PRF output

Key (hex):
000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f

Input (hex):
fffefdfcfbfaf9f8f7f6f5f4f3f2f1f0efeeedecebeae9e8e7e6e5e4e3e2e1e0

Number of output bits requested (integer):
1024

Customization String (string):
"ikev2 kdf"

Customization String (hex):
696b657632206b6466

Output (hex):
e5414718d74f02f7032c926d777e7553d5c74f073d622317b341ec2e8d7eeb13
77bb38ae552900eb5b075dbf7185cddbfe216a16e2692d313598dca7c6df8453
73eaa2d9623a07e6333706bd4655180b4b750af8bcdefa053a5601d25f808e41
ad07734f1b65201ae9e639893ea76ec8bb8b004b43ad48a9687cddda3ecf665c

~~ Test Case KMAC256-KDF-3 ~~

Description:
IKE SA key material
ENCR=AES-128-GCM
PRF=KMAC256
SK_d = 256 bits
SK_a[i|r] = nil
SK_e[i|r] = 160*2 bits
SK_p[i|r] = 256*2 bits

Key (hex):
000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f

Input (hex):
fffefdfcfbfaf9f8f7f6f5f4f3f2f1f0efeeedecebeae9e8e7e6e5e4e3e2e1e0
dfdedddcdbdad9d8d7d6d5d4d3d2d1d0

Number of output bits requested (integer):
1088

Customization String (string):
"ikev2 kdf"

Customization String (hex):
696b657632206b6466

Output (hex):
e22f0bf22b2a3f595c4af083b9ae7abb1102c22b10da628a569a005d71cb0f5c
69ddb319c9365c25e1f8ff9ec5b3a71f7cf96490ed7b835feea6c6331d25c0cc
94f562316504d02a16339a4b2bcbf57c4729ede14bfa334ea9bf3de2208c1176
0bad9e5e4b5623edd9a221fb8d1fba02b8bd64b63422c9e0bb2e2a6b0434c88b
fb63a52f8eee6436

~~ Test Case KMAC256-KDF-4 ~~

Description:
IKE SA key material
ENCR=AES-256-CBC
INTEG=KMAC256
PRF=KMAC256
SK_d = 256 bits
SK_a[i|r] = 256*2 bits
SK_e[i|r] = 256*2 bits
SK_p[i|r] = 256*2 bits

Key (hex):
000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f

Input (hex):
fffefdfcfbfaf9f8f7f6f5f4f3f2f1f0efeeedecebeae9e8e7e6e5e4e3e2e1e0
dfdedddcdbdad9d8d7d6d5d4d3d2d1d0

Number of output bits requested (integer):
1792

Customization String (string):
"ikev2 kdf"

Customization String (hex):
696b657632206b6466

Output (hex):
7cecf177da25eca206b2bd9b1d17710f08d6e09d8361f053116be41aaa583bd2
7ab4bb9ca8d5019787fac7227ed8ce01fa250a9ab4b638f98a4365dd84004b11
2c4810eeeb36d8493922f1fe8b75609d9f6d4c08aa1f16039b164600d8748913
bd0736b742eef9d7038df42ea748798b58e4d716d669a677115926c490ea46fa
948f2f0eee211e2200d401fffad14f05c82aa388b701ad83b576053c22a3f1f8
2966af987f37dae321ccc5867e50f19d9a7a07946e5ddd58ecf9668bbbbfa30c
78568cc0b5de273a8773ca15a2cc299da3331437850dd9dc5f126e76cbd0fcd7

~~ Test Case KMAC256-KDF-5 ~~

Description:
ESP key material
ENCR=AES-256-CBC
INTEG=KMAC256
KEYMAT=(256*2) + (256*2) bits

Key (hex):
000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f

Input (hex):
fffefdfcfbfaf9f8f7f6f5f4f3f2f1f0efeeedecebeae9e8e7e6e5e4e3e2e1e0

Number of output bits requested (integer):
1024

Customization String (string):
"ikev2 kdf"

Customization String (hex):
696b657632206b6466

Output (hex):
e5414718d74f02f7032c926d777e7553d5c74f073d622317b341ec2e8d7eeb13
77bb38ae552900eb5b075dbf7185cddbfe216a16e2692d313598dca7c6df8453
73eaa2d9623a07e6333706bd4655180b4b750af8bcdefa053a5601d25f808e41
ad07734f1b65201ae9e639893ea76ec8bb8b004b43ad48a9687cddda3ecf665c

]]></sourcecode></figure>

</section>
</section>
<section anchor="hmac-sha3-ikev2-and-ipsec-integrity-protection-test-vectors"><name>HMAC-SHA3 IKEv2 and IPsec Integrity Protection Test Vectors</name>

<t>These test cases correspond to use of HMAC-SHA3 as the integrity protection transform for an IKEv2 SA or an IPsec SA.</t>

<section anchor="hmac-sha3-256-ikev2-and-ipsec-integrity-protection-test-vectors"><name>HMAC-SHA3-256 IKEv2 and IPsec Integrity Protection Test Vectors</name>

<figure><sourcecode type="test-vectors"><![CDATA[
~~ Test Case HMAC-SHA3-256-IKEV2+IPSEC-INTEG-1 ~~

Key (hex):
000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f

Input (hex):
fffefdfcfbfaf9f8f7f6f5f4f3f2f1f0efeeedecebeae9e8e7e6e5e4e3e2e1e0

Output (hex):
10ae5299b538c806177afcfbd50a78cc

]]></sourcecode></figure>

</section>
<section anchor="hmac-sha3-384-ikev2-and-ipsec-integrity-protection-test-vectors"><name>HMAC-SHA3-384 IKEv2 and IPsec Integrity Protection Test Vectors</name>

<figure><sourcecode type="test-vectors"><![CDATA[
~~ Test Case HMAC-SHA3-384-IKEV2+IPSEC-INTEG-1 ~~

Key (hex):
000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f
202122232425262728292a2b2c2d2e2f

Input (hex):
fffefdfcfbfaf9f8f7f6f5f4f3f2f1f0efeeedecebeae9e8e7e6e5e4e3e2e1e0

Output (hex):
c412ca3549716fafa30b7cc1f8333ec80875f7f42b1bd02e

]]></sourcecode></figure>

</section>
<section anchor="hmac-sha3-512-ikev2-and-ipsec-integrity-protection-test-vectors"><name>HMAC-SHA3-512 IKEv2 and IPsec Integrity Protection Test Vectors</name>

<figure><sourcecode type="test-vectors"><![CDATA[
~~ Test Case HMAC-SHA3-512-IKEV2+IPSEC-INTEG-1 ~~

Key (hex):
000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f
202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f

Input (hex):
fffefdfcfbfaf9f8f7f6f5f4f3f2f1f0efeeedecebeae9e8e7e6e5e4e3e2e1e0

Output (hex):
dd3900c31efb5ca7f8cc457a2343c09177c76c81f0650e026d72e50878d70b70

]]></sourcecode></figure>

</section>
</section>
<section anchor="kmac-ikev2-integrity-protection-test-vectors"><name>KMAC IKEv2 Integrity Protection Test Vectors</name>

<t>These test cases correspond to use of KMAC as the integrity protection transform for an IKEv2 SA.
Note that, since different customization strings are used for integrity protection in IKEv2 and IPsec, different outputs are produced, so two sets of test vectors are supplied.</t>

<section anchor="kmac128-ikev2-integrity-protection-test-vectors"><name>KMAC128 IKEv2 Integrity Protection Test Vectors</name>

<figure><sourcecode type="test-vectors"><![CDATA[
~~ Test Case KMAC128-IKEV2-INTEG-1 ~~

Key (hex):
000102030405060708090a0b0c0d0e0f

Input (hex):
fffefdfcfbfaf9f8f7f6f5f4f3f2f1f0efeeedecebeae9e8e7e6e5e4e3e2e1e0

Customization String (string):
"ikev2 auth"

Customization String (hex):
696b6576322061757468

Output (hex):
535c4f72ea7967ddae5dc95732625801

]]></sourcecode></figure>

</section>
<section anchor="kmac256-ikev2-integrity-protection-test-vectors"><name>KMAC256 IKEv2 Integrity Protection Test Vectors</name>

<figure><sourcecode type="test-vectors"><![CDATA[
~~ Test Case KMAC256-IKEV2-INTEG-1 ~~

Key (hex):
000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f

Input (hex):
fffefdfcfbfaf9f8f7f6f5f4f3f2f1f0efeeedecebeae9e8e7e6e5e4e3e2e1e0

Customization String (string):
"ikev2 auth"

Customization String (hex):
696b6576322061757468

Output (hex):
06215b3864e0e977bd45267a8e70c9ce

]]></sourcecode></figure>

</section>
</section>
<section anchor="kmac-ipsec-integrity-protection-test-vectors"><name>KMAC IPsec Integrity Protection Test Vectors</name>

<t>These test cases correspond to use of KMAC as the integrity protection transform for an IPsec SA.
Note that, since different customization strings are used for integrity protection in IKEv2 and IPsec, different outputs are produced, so two sets of test vectors are supplied.</t>

<section anchor="kmac128-ikev2-integrity-protection-test-vectors-1"><name>KMAC128 IKEv2 Integrity Protection Test Vectors</name>

<figure><sourcecode type="test-vectors"><![CDATA[
~~ Test Case KMAC128-IPSEC-INTEG-1 ~~

Key (hex):
000102030405060708090a0b0c0d0e0f

Input (hex):
fffefdfcfbfaf9f8f7f6f5f4f3f2f1f0efeeedecebeae9e8e7e6e5e4e3e2e1e0

Customization String (string):
"ipsec auth"

Customization String (hex):
69707365632061757468

Output (hex):
d78075faf484002a8bca0272dcc169ac

]]></sourcecode></figure>

</section>
<section anchor="kmac256-ikev2-integrity-protection-test-vectors-1"><name>KMAC256 IKEv2 Integrity Protection Test Vectors</name>

<figure><sourcecode type="test-vectors"><![CDATA[
~~ Test Case KMAC256-IPSEC-INTEG-1 ~~

Key (hex):
000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f

Input (hex):
fffefdfcfbfaf9f8f7f6f5f4f3f2f1f0efeeedecebeae9e8e7e6e5e4e3e2e1e0

Customization String (string):
"ipsec auth"

Customization String (hex):
69707365632061757468

Output (hex):
6baa9313bbd91f81876301d2a4b9af34

]]></sourcecode></figure>

</section>
</section>
</section>
<section anchor="acknowledgments"><name>Acknowledgments</name>

<t>TODO</t>

</section>


  </back>

<!-- ##markdown-source:
H4sIAAAAAAAAA+19aXsbR5Lmd/yKWvlDS9MEVfehPrxsibI0OkeU7e6emfWT
mZVFVgsE0ChAMkd2/5b9sn9k94/tG5GZdQEgqcOy3ON+Ziyijjwi43gjMjJq
Op1OJl988QX+4z2cr/VqrtfTeytRrb0nYvWqXLyZey/1+XIm1hrP0GMv9Fyc
a299VjdeVc+0V60W515J70zXi3IxvVhsVvTIdLlarBdqMTs8L731wjvVa69Z
i9Val9SO6YXbqharc7H20OAN087vXRt/nP7+zWL16nS12CzxN19CczfsWO4v
Vl49r9e1mHmNXm+WBx7e9Bbz2YU315q71WW9xmjRS71q1p6cLdQrb1Hhp56V
DbXyjB6/sa7XM32DX2voPak9dSbmp7r8nVfqmV5r74aQcqVf3/DqivpZefwO
jbs5W6zW1NbR/MJboLeVpxag53ztKTGntmgYujzw5GbNTYuVrjYzb75YU2f1
fL1alBuF51arxYqHdbIg0vAovTf1bEavYZKe2KwXIFetxAzjLjeren5qZk/j
Qt8XHhr3NnM7fEure4v5b0DjuZptSkxl6vs3PJDvxpTWtlljUnNLphmvML3z
WEg9a9o7WCbvGgtkWzSjaLAK8oIaoybWi8WMqYvZg0b4g66qzWpFpHqtV029
mP8Os8EIy4Wi5m5Qv57+XoALHQ++JOZbW76kPhrv1UqcE7tOV5W64/3+bL1e
Nndu3z6t12cbeagW57eVkIvb/cf+SE39BfxCS7TSaExpHg/GUq8MJexSe0sz
YOGVdYU/aLSGa6mNu0zolnoYLFaeZkITxDPqrKUf2Pzm4ffnM57Un588PvD0
Wh0eHt4yMyNJZKa64934utHEpycPjqaRWwIno94jrPLx92aFvedW0LxvDAG9
0Lv58NHx6/CWJ+al9/B5o9WNiWFeNNy2yM/0H1Eg5+lidXEHggq+sStwxy56
I2bofVov8SzEuzkTkV3qSbOR53VDfa8vlnjh4fHL+573hSdmzQI91vNSLzX+
M1/fOPBukCwsVhBa+vHw6E/4hzjx4YuX90myvfnmXOoV/VUavUPC1ICkm+aO
t15tcAnziCZgMHHHO9Hgn3p9MWkZEf0/Pzm+++R48kpf4Gp5ZzKZejxu/Itx
TyP6/Uq/DvHvq3OhqI/Xer7hzmwbdp7Mujypb9E+ydpXdJ8un4t6Bl779qv/
admT+Iy5SqzUWY8Le7dvf/sVP2EY84739cnxi9svjp8/o4uGmntefHz08vjk
JV6GAoC6uTPxvCn+3/OgR2Zmnf6k594JrxLfWKxOxbz+L+iKxRw9PfKe8p9Q
lncvQOCWct5dLMxK8zvaTAotHZ5E/3OuGnV4unh9uHm1o7ujUpx7L0Q91x/a
HbV0+OKK7v4Vba3B8d7d1aZWr7CO81fNh/bsGj28O+h9MmdhrV9rovOL+3ez
sEjpz/tgrWnoh3e8e88eHgb+YeqH+e2nD09eHtKtQ9zCUyfPp7nvT4M82fHc
yfNDe3MyqedVv6Mnj6ePjp/sbzsyz9w7Odr/TEz9P35w+UMJTeXo8d1nT+8w
NZzSuS9mimh4XzTr6X0o+RrkeyzWMDd6KgVp87uL86VQa++kPgXpNiso3wU0
t/f05Yuvb3BjHYPS/6b2Xw8qB/L7fHp0CMP9941ur5vlfY6uVnp6NANDDR4Y
NfCvh96DRVU1a13PR038q66qFTTj+P54CIfeoxoSOrdy0huDgE0e3Ru9/M2h
9/hiA1Kc6dfNq4tRA9+Isj7f9cColZeH3vPFar41g5dnsO3N8N6OV1ekdHe/
2bu1/eKLWi0aYIXd747ujl7/6hByBPM2ptlXK7IZw3ujV7899L49u1iPV/xb
oJoaKqR/b/TmXw+9v5KRG7351zM9r3Tdu0eW4o4H6fON1mCpciz4/N79O57T
qRWz+LQB+x6S+NkLh8uywuMkJM8e3juxYiFWgK3du6pZqcN53axJT9wGwP2b
VuvmNtTzckO2sbGKZrqQfGcK2uBpvbotZiASdP65vbRiDdWXvbu2kU5bPTON
AHKbRoYTjXfIGhThnU75PZw3aBttMo5Yw9CLFcAkGfyXGiy+mC1OLzptlWT7
lVWSLdfBirTGVy+efXP8YqA1nhlwslxBLRAshbkG/EOfsJSkGQjrHB2feLDG
wFmKrl1cg7zEytDXPJvmNs34dtvFlLqYLqrpKXcxRRdToZspupgOuviiRYYh
IB+6N6h5oRuCwzOAAA/+wRvwk7fUC9ha70y8BtCGoZ+xB0A9Yg6NwbvNgdcs
vIe/wSMrfY5uShjclThjoj6Hk7D6TcM82vCsiSznwPHz9aWKkZftemZrtPyX
8PmQmPTr9jmQl7h9DKSztgSt6mp9Nl3+XU0byx/WjILAcwa6St8GDtyc8ztL
sQTEvI3b+1bCihEsZhj4sTWecZ7m9s88DIP2zzi7MwH4nUynU09IEgoFQM3o
3vXpNUutarhBDRNzY0DxgydHd6fAsdE0TNKD3s8oj/s/kyA88B7hZxDmvET0
N16BQwUH9jJMvQWlD7zjuRLLZgOQRiiwXZzn4mK2EKV38/jkOZ6iXo6wzuRE
KCal90CLEst58+jBLc85xc0h5gn+9lrF0DhXkX0mQW4X0Dh3QS9BE1BbvceJ
wdDngXf0wIB4GqcZABmCRm/gjb/AT/jn9+EOshx5N5+/uN/c4pf5hcPJC/33
DfwdXmG+3myWS/iz7Fc6I9/vuHUdAJzWvCRmKULQvlsUtx48ILca7BSSV9Cu
a3k44fU/r8uSHTxaEHaGWUFO3r51kOvHH3vMIOFl8/Jd1aFaXSzXi9OVWJ7V
CsLdnAFSWmIYYtlWHh17+s9w3EohZ3q62KyhjbtHvZt/fga6HU6Iuby3by2D
Y0z9VSO2urRHEwgBuCDHFVqiEeA1MWQXtSgxwZvoB+vEJO53UXHMYwdntCtK
zhQ7dOxWgRWEhzXvr/jbtx1AHVB1h6gcQDnW8GBpmV8LeG3EJcYvfXTsnuUf
JFdQ2Usaz2sNLYu5KihczFR4aOxw8pjULZHbUtc1c8AXibDdDereTRw/xfzC
m+n5Kei7MvxKcQV+TyyXM0u7w/3a42zxhgZE03gf7XGwpT7G7vPh5OHasDZM
zIJc6QYEm23wT7twYj5fgBVYsoyQWRrslZ4DrxuKI/nBkOZsvCxTUct0Ex3X
pRiKcCe4INPxvafPXh7f6dMijIlZQW80h3cWK6uG1q25ZNOIJaEFQA9EYDQJ
UfBIwx9OTJyg1utqOoPj2kzVeWPiBCwFNvjUtHMnkrR9M02P78JtOfDOyO6g
58a8w5rYquuRPFk0dXE4OTlbbGZl297t4cwoeOY0DvdLjODocZsX8MvJXTG/
3ZhmelyKV9crdIgVLb1GVMTavJgQ29u7RPFLDgot5mRneZC0Ivd0xaFK/CYm
1YyGKDjReDeefH3ykmIh9K+HdaG/Xxz/29cPXxzfo78xi8eP2z8m9omTB8++
fnyv+6t78+6zJ0+On94zL+OqN7g0ufHk6C83DBPdePb85cNnT48e2/hfX3ZI
VZtAKE1ytVzpNXPEBEuoVrXED7zzp7vP/+//DmKoxP/BOjEooFHMjzzISEES
f5reODBrflKccgLJ1YLUGYkMhH1ZryFAB8R1WIY3c/DBSoNZ/+XfiTL/ecf7
vVTLIP6jvUATHlx0NBtcZJptX9l62RBxx6Ud3bTUHFwfUXo43qO/DH47uvcu
/v7LWT3XHpTyl3+cTCZHZVkbODi7OBgtDYc8Gw28BbCItTlnwwJYMWuVbxth
hUPHCrsz4IeGAek9Fw28zGbdoAg3q7C9fVxhhAcdklwOmhzEggHCdDl9QAN4
Ys3jCE3dhXnsJmMVH9OoF2akCVt5V5dObmtorDKuMeXLjAhPfmBHBt08GlNg
dw/02LRvjamn7bW74d0k1QllxUbS7D78fQMDAF23AoS4siOOwQ9o1AN7Jekt
I+oDKEaDGuKIraGFHz40bsZaxpbB+vy1RVw2i9dj2W38csgbLywRTHStlHg1
mdiIOSEp1xgYESy2l2oM20ipbdb1rG605W1qDny5IA+DYtqwK8rglgFtnYJt
HDa9QkIdRlvaTSThVfX3mLwFTGV9SvsxBoC0MArDr+ewb84RGRlW0v6k9yFO
pTUDTFBrhhvauDsHnqFdEZCKt7u+h6aB7jbrDG/OKbBx280Gg8WDvKijuTOC
2iIAwDnh78PJ0Zz+sNswjdl8FPv7MsMVZgewmzj9QjPw1a2Nt0BTnS0aoJ9t
YNm6OoSHtgB0N1xl8SwYZdOsF+d1Q96E29nqAV4n027pagfT6cYrUoKjiZgB
GG5y/VhEbejDq9CD091sqZ9uqtRTN7FpqzIPHZ+/IfPbYiUsPdjqdV0O6NEY
uCbIcpP7zBHsVmB7kzIx44Vhmid69Qq+1T1xfvr//s+qHImA3fC66kFaUu4F
/pOYW1Gzk+123sR6LdQrw8bLRdPU0mzmmTdrhrPMz2qxWkGgZ0CQR4ZN1vU5
D+QNZBkA+sAFHeyrcwP3eXJ6VuvXrXxw9E+btTUIlgSBN4jnC8/FBr3zBYhl
uWoBv/eUnUHxRlwYdjb9WFpGLS6zEgYPdPGGLP+BE0VNONNqHEb7ZPQEATim
ARHfzRpy03BwjLai7WrbrWUsZX3OAaI16cnXNTNub3XBH094rHbglipLCv9A
p8/Xm/OdQYJzzOtcvNJ9MkYgwooZSsMYwEkh3XQOfHwOAa5py+u8jfzRO9ad
BWO+fWv2SH788cD8DX/B/G33PFrTZLY3WKPMdgyAMS2DK7gONS3WyCsxGr91
NmmX3g2MyD4I3VBUEEzTPkCqieYN01mSA2W2j5mig3a4mx42tr/rygxvsaSX
IPLgGpY3C3amy80KdNdjF3SLdMx563YSWEJ2q3GZ6a8rcEptuWfeIZYD5/fV
RjSM4ts2YZ1yWvRsD2s18AkbAWp3TUEAWmX7Nock+ir7EtvWhmjmXqXBnWiF
OX2s5TECML9eChYmmmS7OocmJvCG/Tqi0EUXuHKBBsrhWK9qnqxZLFpzjl63
VLEjwZvdJeMtkjKR/eUve1KK2XLMyDnRjlAcTKFQk1PURj1TJzRaKFwivFH4
ZU/tjJZYzEDdEuh3szwlkjKBiDvHD5IrYDm8Gz8xKQk/9AY9jgUTzSuzaoP2
zvuvP+JgDmW7PH/YdOICFLYwggbW0aKpDdCizRHSwkyEzuzBMGCt2xa0IEiA
xxzehG5dvGFs4jUX55LyRnr4A/PjV+VqIUrQiaLVlJ7CaJYkY+CjjnHqIzcU
HtOYUK6bsXCVCxYml1g06LIdkP5eEBMZB/c3KwryrbSRoHLbxeZg3my2MftB
sKBWsMktuW/3D9wlYxt7bxszj165mQeWjR39RHNnwsHKm48OvD/f8qZ/9P46
mRwTmRn2GaXTQQJP1muWAbJ4b8hucdbEI7q5NuEKjnDtCskd2NAOMct/QW0d
4sU/uxdNb6bld2rhr64FO0rThAv/D4DTJZFUy0L1f3GP3KYBxy3XPRhoiwMn
gS3K5XeFuWChtJXhNgQ51EY26ck5Aa0aetclfbRrSR+5JT3wHsOGu4W9ZMVG
q3s54UmPMJwBwYnbu7vh/wr92KeGmsvX9536o6Ye8ytzE9aG0ljppdn6s8qH
7RfIrluGtSoT8mSGwwqedP85bcHxyC6WNkPOrLbFShZEMaYw2yX6e6WXdgcQ
d3hbC91SdO4cpoTSlLCgdGm5qn7b6gUrI2wlGUE3DuR2uHvQBqmNjmHm+hQo
kCOKql6e8QZjvdZEjRNLjcXSWUfjSZh9ufcm9LUXdr/Ybfkrl4rd7gFa6jzu
haDXPRVvHTAhYXqBURqyxy6DbmEitifPPVblCUv2hXEYzTOXx597NplC1pTR
Y4DNSbtXa5e4z9DfGtjABl7qNbEXAQe7TfhnxulGZ9hLJ3TprosBk2avectk
3gJPNN/01G8zmTxHq0MjNfbhGHzZodnYkMcxUElPNY2x2YOlfLib5TuLdjD0
T+r1xqyf4WzB/Gu8K6A9i58olfV72uIhjPOQc2/XCxMCeKEJFtJO53wBPN14
T2u+/nTVpYLytibPH5PAcNjlJTmlqO+MQkWnZ9szB71tkwATknWhoq2UNUsv
fsU+1tLM+uRMEHTD9FYU+Oy2XoY82tn33tAwYevY0iZpX0ghtg+d2867ICAY
0BDmKhebuXNw65UdN7MmYOSC3MEB2jCwayfk6G0q8cqC8OwSkV+lWEk9csQz
osyGqhXjlgY0NzeMh6OOnhz9hfboGOoawbOGERqXJIVIR8tu++FAjYufXDgE
tE10M13LSF2qizNcbhrcmZO1XjeOoQdEMrnSb99CJjmtg16e4gm7NWthc+vu
0fpe/pyDhIN585L3wlu7dvaINeFWG9jHLztXHoRs+dQg2M7af81Gw0hRA792
1rpD+1pgaTUKkMmxGDgfbcR7QzIGklqXrG1qyf7iuna4Ygg+vuUVMjPrB0fN
Bm3biGiahaqFDSv2KUXamMWVSUaqfZCIfi7mMAWlZ2NtLs8BnPhaz1ovrmWS
Vd1wGn6jOZzK25ZmZtSfY0Ir/EowJG7V99YCtlLOcmtk26kIMXsjLhqO7i0o
swALUXbKUTQ72H+/2sCVfjLGKXQ7Zbp7LgDiMsEOrL1yaqivZQbMz3LMZN3S
NqREQM2mr9DQgdXCYgXRW8GHJO+nDVsK6mU18L5NVApPubyDkvMCQOmaQlc2
grrEwtNu5AGHkzyriTnPgQwlZQmAdvNTSp6iGNJmhdVuDHq1uUBk8w17jZRO
BZov3nRgDkQ6pzwLpuFM1GwIjZ/Wdac4IMVRDjU0o4SUOJQyWrTD0ZbZ0Pw4
d9tZFk6T2bEqLfDuSx9FfPuU4M19ljCW+rGVcoaZA5MCDEL7DE41E+Maedh6
7EzMKis9LgTB2qOvNntsAq4ByQn0Mb8vNcFIhqJDWeJRGalxiI1EAQRtwyn8
iPPMVvpvbOAHsX4KT1LgZk6iPiPPV3PKUdukwweHk7vGM6YQ5DVsn91kNZ1a
fUxDssbmXOv1FSqTIrgMPViN9PytlyP3BHDNTlEwP2i01mJSXhzHysb4cGy0
0x8AvJvZuqYkQdL39enZmmKH5/VMrIjhhnF2y2edV/L4mu3ZwHEPAtkW21gk
y6zzDm17r+a0YU5b6eVrwevND5gwvdUVF+NYUzOMk5xYvRYfRocBdTza5yDV
TRqYhcbp9E1jHDhzh04oQaX5NtQIcuxyX4yTYzwzE7lze7WcMWNdKnYZhiC2
nlv/w82eRnI4ub/hHDXXiuUsCm4ZCAKidMHGHeNpzHobNmOozAk07m7r0Zte
t0NDo4XliTla26F3Gy1tq90mCzVJR2agY5qB8i4v5uLcWlhjqklDH54eUoAe
T3JyHzSp4Hjcc5rm/HSyk4nGvjqEgXQKJ9INY5w8S5YPmyG37xmOT1N68dxO
mTWV6YQP2uH9pRnTOJY+yMPqWtymrYnfuFYadabPO2V49dYoR3b7dO5vNnb5
fzvab+PCw7eHkcSjXtTca18aaDgXKCR12IUnXUot97BxcfjfMX7uePUS4o23
IDrSufQ/sMS3Z7ux5MjuufRAa0goA6sPsYaAheNLzprafMh2/ZhTlgRP2/h6
a3idKbPCBvYuZ24erPbbs3W0JzP54gsTmaO03JaxeUIu1FnPXy9ekUBs5uwC
PxqE7UQ/PGWOfQ4M6SVcAxkmqhstx63SQlD4acUID+bGwmcXmxD9LgzL3iDR
uMFBma39EjtOc9Ct3Yk3EAH4Upn20ZtLQaMbLX4jAvPkHSi1aH+4ZwIc+Fo3
l5LhAQfyabDUbtPfuRw/j5ttwPRKqTPRtM6fMjyy2orKj9JJVtCQBv+a2P/k
B++o9Xqe0pr+4L0gfXNTXmC4t7wfJj9MR//77fAnnmiTk2yy/Q9eELm/6ad7
gpJK2if8eMcTlE7snshCr//E2zveFyuDCulMxB9sWhVrR5MEeuNHDs628KY7
F2pUaGXBMfwl4XYGL6VxT4inNUfuusbpHp9J7vucZpsZd1aENKaWpU0oYTyO
cUDbRRGtv/8ULpCLC9TNQD21xx7E3xYM1wY+WssOFgtu66zxNCj2tHMWNEQa
f9M5FtelneV53RD8wts2qm+kcv4R6DOwWR3Tm7BmbWfXz2PuJZSTUbnYtTPV
NyRMR26FQplsQ6xTNM5t7Ycx5ovWL5+2iGuHuXFL1ltXo5AfbSnkr+d8hsbs
yJjz563dEOZ5Nh1QXwxf+ivpHMGem3PQGZtuI46UnzmTbffBXULZK9pepyAC
szp7M8R9JlmX1/mouWwn8MBM05xJYPA2WPQhPh+zADtYs4vevvZIy//OLFAN
1Rmk8P9IZ/FqkP4xvxzO2ErzGyTSG464AlowR2zj9U/BF+AG6+M01vKMPLXe
JnEPsdDZjkGMjqN27uWtNDib+7AV5tJbDR848dA28aWHkni3YFbzZlJlzTkA
SgNidnuvL1l/fW9iltuTsa9zfrR4RZkJ5I+1tE8yEuK+imSktrqsTRcufHW5
Ct/bgPFA2kDJFQ8PY41dZNHEQcENZ9CA/X77XoRYm53FTk3bYAKd2GyRLAks
FooPgbQu/P4RXTHydx4wAyZyqu0o2i3FLqrBk9gFMZ4ZzPXYjOwmNQWo4T2x
g2oPfp24wbtHrkQjV1weAxdnJy14+cHrQEwffHh//MPOG0ME0zZmcM4PXod3
PqAxA4l+8Dpo9P6NWZD2caZp8dzHmaaFfh82TXe2qn3rG+cYDRvrPXN5Y70+
9zZ2jZERdN2vhod4dhja2qnre3D3Gns3QxW/7OzIHtVO7ozzXE3YvLch/2FK
f5cqoA7sobeWpM/b2CwBoRPCOlYBePuUx951vI5iuFxZXEOVXKFUMMfv6OJ3
uBh+R1f3SGBLgStYajTHbc0z7JGu7hHTtsfL7l7Wo1NPwx7p6h5Zbnu87O4l
PbY6rN9j9FNStVV0wx5/Qqq22nDY409A1S2VST3Sxe/aq5frS6Yqb3ddEkzn
Pb3qt7v1attje/WqdeSjmtftkZTv5UpyqIC3N4b6mSTtToYD+05LkjZ2h2/r
lVWQ3SlOu9PbHb7dse08zou8yj/re2EvL9m+GQUxtwN4+0GjCTX0t7nbUCC9
6LCf28Xa0PEFt7XcDNFqh1LFuu3ABVAHeVx149LE3EYM0+M3jVnSR/fut9Rn
g9Qm8VsrtZUi1m+PdwSHiaU7l9zaMnZor7KxvUwrWodHvWPWjl04o4XP/bpE
hzZOY2K1cOzfaMpmpR25weYMnYeq+cQF8HVNRSRo64lSvrQ+b0yBDc4daTeu
MRNOncT0ILq3SZgYrfc93i/N1rfZUjQJXlr0TvKQXbZzaNOStjzdFiLwSVvL
lkYI+cjBZsX7LOeLst0zOvDaaMYh4ZfrJ5W8M4DZkVxg8nl2HO3f5bP/BGjn
Ydv3APP8sAV09vlI13aAdt3Y8+hOzHL09csHQ9DCFmFbNe8xDzthyahRXP4u
KMIddhKNFrv8gF3IY9QoLlswMDaF+9yeXeBi0Gj0YdNv8cOo0Q+afgsRRo2+
1/S3UAA3OoQBuyd7yfS3DH3X6GAgu2i6Z6Rky69QGB9szOc9Ie3k9+VKzBuy
GWTnv233Xt5BxfQOMF9eloSDXq4aQneM8eqX2pT5jc2LczlxZsffbRvc2JPr
faOfSGHTt+hQnGhszHh/Tt5p/XoQNDJn6Uy4yUTfOVjU7+0jWv730vNdBZd3
hgu7QcKVhqx/8nnsWnPo/9lrvXpd6zcTm+TVhsGOehmD3s2TIxiC/mm7rvjM
iArOFrUViygJzRREaVOxyfDco0Q184qrYuTdBLFtLZ5RAgHn99AmNJUo3L+9
TaDGbfCvTV6F18xo34cT3Np9aKKqOc7MmYXmWBzz3ZKxBqcOEmObbSRXG3Yk
wVens9Tr37hcFj4lsifjgjcszI60rnlYo6PedPtme7z60XflLbcJ0eHq/nkW
O9DheRaxHsMWdmiGrPjInExp6y3MLZ0qEH6xAsK435XtPRhvCFNTZikMS9NI
D+i/y5p6oj9MmqdLDeht0bSAsU1zNq13bYKUzL7N0HIeGpl2HFH3tyRN/ptL
ze+yAR95NznbZlxj5+TR8V9Ojo/v3WLKvNnbrhgnVtu2H7iNsUe7Ev1Nz71z
JcNtn26PptRrUVPuPGd9kiaoTzf2iK45P9KYCsNtOgVTo28kdgTSaAhUdrXn
ELYHpcbJyHa2owOfZ/2SOW3VqG4njjf495eycocd+9lww9Cj9VHbLLIDe3Sj
iw6Otv3a7M1uI3MyOSJ/huXYia7SrrZHu037ps2h6bW+R60QW17LgpniO7tS
0fqPndjj60sqOof2+oppoFMwRqa+G2aXv7JPscJYLeighin/0Cqkfnoe+xHv
0bkLC3BHXSd1m9piNEdvefgwsuHlNvej77PuTCHslozVAx2tbY/wzjX1I1YX
TOf2BPpo99ScTYJslpSwbRMAL9hzZVTCnOEKSBj/l4qEG/iiZlS6qKy5MoLU
6zfkPq/fLPgRbY+RdBZhtZlpFmWqQzZMXqSy3zZR1spiXz47sdyZXsqpl4Ry
+1vJxqSSomyvsv576fajtwVqn4HYhlXU9I78ZMtdBmw9GhypNCzGB9zNaTt7
ZNzljmxLmOWeg6EgO9b4dut5zKWhdejbVjbN1MZ6Hwcxl9uEVXro6OTuw4f9
mp/msRtcKZwau3HQxhHmpB/XfA7DVZ5rl9GOftdA24k9HvW9ZQCo5xZ6drvt
7RKiGY/OgZ7AIfG/94Nb7bE9ojPUz3Ig8MM6IoQfXvNJS9MuE7rFT91R/iUX
kbRppsQB4rwL8HEyugnk1GttDjBTmirVW6DRXa6E+6f/avOpBHc8BA2+0hg/
D/xmY6rk3er40zH1gYFNf8Pammnx1Bdz7cZjMu14pub4pTvOx5yHRd5wYq3U
thzFfL5gupszEfN+PQdC+YvaFJYiGGwMHXdtPh3gTojyyY/N6dmXzPSM1Xl9
eCSiYUSJCdDXMOy3BRpTkwDLwOUWzLT5TFx7MIpOmWhR7uT9lqU+Ep+/Kq/i
8/fzbLZKlcKT4ORpuAzMdgOvYX5F+dN+XRrKf4ahqU8p+/2aA6LsyFpRJGzH
EYV+vc1ePwaPdm9uJxfZAreUWdSrWoa7x3NOR+PcSDIMzmnCrXs0+ptHx0f3
btmzwNbLJhQmGvMpDbJidP7qHP70ak6FU1YLgmTt6Lq6D258NCLowr+1OZm1
ybOoagLs0CpDiuwkhKuyx1kW3cGTbhNgRxegHU3GzuVwsstLo2OIvUq3V682
tcyn28FFu3slCD/tdWyfpS6Zh3W3AjePn9598d3Trx8/voWnLpnJjjaPHnSq
i74dYgtK26qRxL3U+JQaN+VDwPFcxZAT9Yg5ury3xnF7O572lakrV8Lnjt9A
BVLdU6vW2hooaPfLnci+l2H5fuFmK6wH/cLCQ7+FWt7hirm04l5pPIofXvoU
lzmljigoeOmTXbG34eH0v/Ydgl6xzv7x1W3AcyZmr8km7JRjk4zpvLNqPWX5
49FxDi2h1Xl3CsZl1Q6foqNyBC/Lwx2DHgzVxb/YwIGpGoqmbI+K6qz++OOA
KqDIS7vXZhNhh/t4dsOl6VIz9fdLYapk2SMlHAPbxQkLhq983wmTY4qtVs35
chcIbAYzHtN8+GEcWYO9SzpfZgpWmSPVXYJ657BZWMw5lwwA6PXHNll9UP/B
Bgt6Vo8pa4KNPQffYN2diSw7TuQOIO1eLG1LJRAq3xqJOwnY8c3Od0mytt51
4nbY9w9M2VwsDhXZf2CGcw3H8pqIgL6BcykaGA3EKNN3Cjx/3AEzhKG+L8cw
ToUf0QneS6BT38nEoCVcwov93qZxIh0aNOimVaDd9G8Dr922pSYwn85JBMqm
A8X9vVPhnS4WDFhJuPHwwiEwW/JvuL/MNfzsnW778dIDUgR22pLkJhO+GQay
dxWBN/E9wqVmx/ft2y8J/KTFsEx7L1DEqIPrftrWaUYvTo5OTo6mz09OeMhc
/rmNnruCC/QhClt7umnM/vSzh/dGzXjPH9098b4IvNfBYdIvet2Lxb996z7v
wS6IGXMWh9lgzMyQ94Am1/C82q/c3PBuBvGtMVuDO88W5YFLQ4B/2rja+F29
LEpV30HDnZ6UGcYFV1bc1ZU5hUOft8Arb2w9jPYY0K5eTMmKrdMPWxPc01/f
q6QzwHT8zNY0dQUE+yzSnUPjL2XUtAHAB5NNpZVdFQ05XYCRppv8+l3GZ/JP
hoeAaTMP2oM/zGABw3Xb6/ig3cA4efjV06OXX784/u7B0cmD744ef/XsxcOX
D56cUGirzR0gI8lh0vYsNpfo4ILvBs2PTyauHYfskzdX2WhwrtUeaW2Ly++p
K78r496lwlxvQla5ixbsD6Nn7dj3LCrxHdXBn8FxntXqwh4LbOlqXut/DwEj
BmMTA3QU6JjDfbrQxHj6q20JYTnhupMjLdp+YAXrAQVlYgaNK4Tq1KspEsNb
MjsrfnLNi2HR0MPJN7V+09aE6iey760ZrF8vZq/d17SoPSNB/ZqS1s1YGqxk
ystzJZ3u8LB2n+7glJx+qYWOyy4bxa5cE7ehRIqsO7lqiigu6Ys0fdfX1mOx
H3hhRftvg+oYNLgzDnX2i5XW5qtiOwhG8SSeYL/SifmIyoEJmQ4mQ/7YtD0L
Ni7M4d28++Lf7t6y6Uj87ZKzBUV3hocKgItfUUmTi0GdStFcgJxk9vfSD96E
Rz2wWTVfgzCgdlyxuSvcM2K2A2vTzMeT+iMbVUBxFKt2PEpqmxPhSiAoqtHS
bcx0r9mZHw3jtHA2m/WUC6Nc1YMwXoBzGrchNFckMTuCDKffLH7n9v87jrO+
tjsftj/fb3BU2tTOXdenYm2+Rns42UMGwCizkSvNPk+tNjN+neDlbKbJlrGo
DRivm1lPk7YKoec47ejVVtV0GQ69uhKHkxNN0mK+omU9OcF+4qYxJaL3fUxr
H1eYEvrKRA7MV7aaHsJ9smBvtUWxbb7cmZ4t6RO0FEU48Dj5ruZYhvuKLGSI
abvYKt/tzBEXzx1mdw5OZ7XO474CAmYfieY8q89rUwZI8RZRl83Q3041h+f7
0mY2CM2Of79ovWtXeJ3MorHufOE5hW5BBlM3gxjVVWHhTRxh5lBTyZ/S2HIT
sALJTJEx521TY1JfLAhx994kHtCrhTVYPX3WEmU9Sn7dKkq0o1zboLJhr/51
RzWmmJscU7WrW0WopDEjVPXSBAzqkcLtFYDyuqLnhvCGtcywRjFSTUkoyn0X
2uWvcGy3DV52i1m7LVNbC2Bcfom3+9vN2W7TyHwP5Hkb8eSwvdFsRHqenlEn
LT2E+5bbaCOe1qetpHXJGonx6Eb1vXe+9sCWXLCVchlH7Su91RLqoOP4QdSr
ExeTBTHz6FTquanTPSzjNPf0kgpY0DnJYd2oUfoVbZJQyW2iXy+wS4TR7hNo
Ow9UdmtB7saaTcvO4ll2iXeHAm7vrqM1NtYNlzcy7tEVYzTUB+XgFLnDf90Z
Jmf7hsWTrEBpvKnazatlY2NSozaGgmtK9YPZ9Azq4Klttiv4tmOAZofKjJLp
ft1hcuVoU7PznIL9V3ArV4XqVSWy9nbej4D3fFBXpsw0xtXaug45Hdxpj9Go
+MTp1RJk85SYd3YNwMY9edRHpuLggU2yovJfq7Wtm0Kff17ZE7XOw2ralJc+
odndqHW/eqFxmLtHelOxITbK/ueNCFNqkfVOW7ZwQB1XSs8yf6uvdtU36PK2
jLJ3CXt8XLY1OIIUNobqDiyMt97Nouw5A+s+BsZFtKTuVQlxiZZ2+9YWG7H3
KS/c5rBtJc6Pv2LH1Vi8h0dPj7YcJQoCzXvcP/4+Y093NSaFrv0M3YFp0Z4l
NwkzpK85xONVVA27zWv1KNxjLdWN7urLi6X2Qm9qP3ZoJ9pmCQ5ev9F+KuwO
Jb8/NdT4weS+jxJ8T7C0m4aqjTjc1CYOX5at/tu9Nynj+OWf7pnWdx0Na7v+
j383H7CjSrb/8Z/eJS+aE17v8aI5qHXtF8fnrd7txd6xqf0vulNQa7dgozIq
pG6Gi/nju7DeZXlmW6W8er7lx+HPCPx5adL2u3Hnh7Hou/Dp3lMG1+KAvccJ
3uft7tzA9d/edUDgHd8enQS4nIE5xXofB1/NAJaj63lZ2628fiTvmrH89ltW
/LWkPZvaO4LEl/N6U3+/h9WN8PDX2tp5jXn5G95yA9WGj32gdh2smOHPML7W
8rZa99oP9ytDXflwv0jUFQ8/Ou7r1asf7unSnRxIzLCXA0fUtywHSnpSqFdk
4F9Spsk3mtO3jVffK9xK97gMbxuH3a5jbj4erPQczvGisWXE97gxez6ycUhJ
uexkcfMH/fMwvRxwd5bT4aouHtx+R/DA+zO//Nf+obzRhrpY1g1/OhzeyzSi
UOX9NrVM7N4QNFvNLju2G4dJ4+/G0UYwHnf994vCoH/eLGjD5Xu3IF2KM5EG
iHsH2YkwEKNFaeZ1pr8XpVb0LSWb1HN3V8lLMwP3Sdc9G6pt3RQbNOdkpfYk
rUtP6xwUyxt/3yzsLsG5WL1qOAu4vwnLBwQo3MGfTTJ8JezqLF3e3pi4w6OW
HCQxec5r7Q669BKJ3Wfteo3avCpi5dfM5rTnI0px0BYD5urmXMa0N0VO7nDx
5H552S++MMhkLDeN7svLkDe3UIorGtlLKm9FuJdeTidujmyS6fA84PYQ/vGP
f/AApq/tFfzmJ+6K8dePp3h7Gnj/+Mdkcq8j1J3J860E3wkV/PFugrlu3Zn4
vh/4oR/5sZ/4qZ/5uV/4wpe+8ktf+1XgB0EQBlEQB0mQBlmQB0UgAhmooAx0
UNHakxzZ5iq4i1VZqUpWoiqqvMqqtEqquIqqsAoqH2Oh9E2lpRa60LnOdKoT
HetIhzrQ/mRiz6Pa9gJf6CQsCplEucp9DCAT1HqZ+CLLlcJ/0kIGeVT6FWYg
Kr+ScVVJrdKkqlQxuYpi4TbFTmyw973o9RPTI/Jlhb7LKEqkn+ayAGkiECaJ
kjwqwqAqclmmfpSmgdJpXhZSxnmQ+WGapFUk8ivpEW3T47FYnb4vOa5kn9AP
gzAMozAOkzANszAPi1CEMlRhGerwp6ZnoVRQZHg9CgvwjNBR7usglUlZpaCv
DlWRxGkSCj/VUVII6Jig1FWWZ2Whw4Lp+Y+xLBPKeH9Zxts/lyz/zIuh4iBU
IkriIgtSNCnA7RkWqMqjKNLg8jxL0EccykCWPgYUp5n0AymqMJZCJpMo05h9
mudKaKmqIMa4JaYS0ZJWKtzL/Y7mH1sb/MzaE4/JFG9kKgWtCl+HicxjmUI7
pHDhgiyvwNgYt05BchWDdGUI1k+KGE9JNQmDMspikD1MfVUAlUgVpUUQZ2lU
iqjwryTo56ZOIj8KohDsFEdJlEZZBK0ZiQg6NCojHf3k6htkLkReaPBv4udo
p9BppkIho7iQeZhHARR45JcCbB35WiRRKKtURRL9+EE4UUGcCx+DqmLYt1iE
cVSlaRwFAZ6AOdypj8iReX99hLc/V330M69mWUIEfBUFupIJoEgFQBInmQgx
HuUXwCoqS1WOltME8w3TMgs1lj3LywyazZ+oUGLwuIUbmJLC/0QJBgBblLkI
wQ5lobD6WvkJBqZ9MugprHkWJzLwo73i59bsk+uzn9mClBENX0JTQelVYZSV
QsmkSCMFTZaKEMAxqKIYBkaUvghLmPJQCD+CGOZ4PJ+UOUx/kkLupM6EwhzD
KAEIyEnbJXkSSIW5RCLNYXbCDIYlQRtgxCwLIJbBlSvyi1OIsR8HMdRMHMdA
QjGsQVzEIpaxistYxz/1iiYVmF6XgSjDLCHQJaskwfj8JMxSNCQDslgS0pKD
JlhcnUIehcCalUEii0lRVLghROrD3ElVQgoriFUpIEmJyLG8aSwyFcXaL9Ig
hluRFlhVqeKsTFTk9zSqSwV/V11q3/uJtOhHX4BhjOHEhA9umjACOugdotz3
rBlJWqQgMaBCGGLUWZimW+g7DknY4qTIMJnAJ8EsVQC0InVBS+GzOYQJLDHQ
UCRVkmH5tYoqnShdTfbT+UM13y+YqpANvyxjkMkvoswHy1c6loQyfGLxXCUi
DlOdByKuggDognzripzErASKGFuVPlU/tfb65S4CfO0SDKsFlEgZlzKOc5nB
AsWB9AG78TvGBEUVAZ9XuQ6KRJOCy3IRpIVMqpHaeZ/wkH3vnyUw9Mtauz3r
8NmHm37Ryv+/TRDrExoToNs0BgiL4NjA9Q8LX2G4+D8gQhHnSREHuizTsggj
qZIkhkDEaZLAmkhQsdNjXKjk4wTYu/NprmJXdyBmR1h9u+N3Cavj7V3a0wTy
qWm7z+qSE7uClp+3On3afrGo/2WibtP4pv2GNzoDGcZskQp0LyGwQRrD9a0g
lQk4A14ruRGpTjOR5XkmgwSecBzKWMvUL5RK/agIqiK7NA5NJN+hKLdJ3n7U
45+Q6HAYPzrRyziijQP4sXCdggr+LwWf0EqeRH5aKLi8OkriErBQFr7MykqL
LI5ydFKFwItXrtoOxdsVB2uLoEzolPwfjo5PqMLN9Ku7TyZYvz8MWptQHTHv
D+1BWfot/r3+YfWfuDivZ/Rbu99B6v9L2D62dJfxrrv8OTNFCftWlqUqZSng
l+ZlBm2aAHdEZVgG5btxTeDn+ZYLnUQUtg1VVaZhnuYJtHQiyWBpnZSpDos4
LSJfJfDsE7jTQvhxVgVxFMDzhps9KXBLVX6SRXD+0wg+s4hj8p0DP5VBWmIq
BdxtSaHkEHON4FdIqeMiAD1h5SclzS9RKgZCipTOsyCVRVGmCYbgR1pnKdz8
JC4qWPykynSuilTD1sRpWCTSlxMf3nopiY81hpbnPsiTwrrAeSmLJIIBS6LK
j/BPHoRVEQkZB5nMozwvixi4YSILmUWBxMylL8L08n1B4uT4HTmZ3rv7p7uT
h09fHn814uV34+4e2/aZfHj5vzeTZ8WWbvyVybeZPExjIWEkykxJGVVxpGQR
K+AyqYQoArIFeRpFJRYlrnQWwubAeIAceZoUoEecBBQ8Rd+VygIB86DiijYb
qiL3ozDTIRyiUAGjF7lWQRJPJOCvCGIsfRqnAaxHRFAYC65pd0lgymURFNqX
ufZLsF9YppiOn5VZGisd7d+gc2KZbIslVUx4d5l8dPyXJ0cv/3CT5eeW91vP
/fXZi9K7mYMw/vxQBOgpZRVEsczxNgYSqlyLSkpwvARF89IvsgAOhxZwtDO4
1LRFAr5LJbrMffBpKYKqhKMIx4tk3Q8SPODrVET4v0oKVVYQvahQ4FDMjWRb
FgIjKoXM1N5d+/d3FWjD83NxFT65O/oOHAk6jRkyVHEgIswRWhpTlTnUoiqz
BGPyk0TAm4ziNI2hauFRZkVV+WmW+HkJxVrFMearqhhMlMRZFgSFFKEuJIaZ
REUhqwpG5tJd6s/H2ficly1Lt2DlT75sIihzGBmRyDhPhKyStJChzknPwFj5
egLVkqnEV7EqfC1K4IhCaC1EBdMXYNIBjBW0ApRIJaA4KpgqmCuYJQACGceX
Zy98PHeGWN4CPldA633cGbz7kyC9T812HxcKxtkWFMwilVQKLJZmvgKUSoHf
lMRYgkwHsgxynYBEka5UGRewfSpOgY9CmIbcV3kUTSodiLDIcgCVokhUAe7J
VelnSVHCtgQAcmDYIEhUFmIKAIvEqYBewHsxYakJrE4qI4I8RQb8qZMsCbUK
Q+BRWLgYTIwlAx+rrMr8MImCKE3iqiogRbCJWYkpJDCbkkiMJaAEpxKjSdEO
cFvsA6GCsFWUYi3zVFY65D3RKhFBGEUCNj+IkwjjwYSLUBWwnEWalSSlQSwD
qRK8hmmAcwAEY5pIphWWCCZTK+DJchLglSKWBD9lKACqfQ3oiMnkSeYnAgxE
0VjY6ixXYVDtT0VwsvSxHCqSpneTr57gXMOh+lXMdkUA4+hXMfscxKxAA/hv
oAl8R1FOEfwCPOHrLAZqhsnV5ERKRaQQooRXDDstpKD8VlhguI9lksAWqyLP
E2DiiVCw2xUlT2dYAviRILkfgd4wlnEOSmMRIlHgQgSTCXsbyxDmWAHvZyll
wGbwdYUvlEh9OBMihnMIa5+Gfp7APY41fOkkhv+bpgAMCvYfPnRYhUL7ucSY
5URGmH8K1zlJwcZBDuMtQkzeDwWMfTre6NlWLR/FKSQtsu0Usjb4KZzCzxns
AcZs5eH8E6A9UjZ+mUmdQTukgcglfMgSbAj3ElKQx7mqoGZEmOso9FNMqYJe
g0aKfJGJXEzyiOQ5oJHLOICCzUD0PNBRVsWRH1U5KKEkNB70FVRglFEMqdCl
iKHv/Czbm5z5/m4npZX9UtzOT56t+WG7LeBMlYKDwR8CbKv8LBQKzFSVUJ1B
BjWZ5X6YVhEsXVokMlMwRhhPQccGYqknkUgS34/KMs6DEmIC05fR5jYYI0oz
ij7C4GRCShhXDVVbJXESU4pODiuZ+Pt3W9yi/zLc1s952XfFx37+dY+BBKIq
DkFrqJtECQmdB6WVgVqZCgELMqxZ5MsELcdZDMSQhkKE0LiwrrQkeDKpiqKM
QasKYA+at8AAk1TlfiyjApAFQ0ihNtME7wElxFDLUezTmZZLLK7jvI/jGJPQ
WeDu6kW/j2OMd38WxP6pGfvjOs759qZ+obKSMqUDAQOMH0IB2ad5LkQcl1VK
AXv0rqKoEClwbpoT5of5zgDZA4C+CSBgGGcC9l/SHgmezWQJkiR5DFwoqlwD
MpTAdQWcBth7kQR0OCcuC5BYJApwWIeqDEChXFaUA5/Dk0gj2OsgrfICOD6l
3HkwLegv/KigVcghIrTWwAOTMIQrQflbGWXZx4QsSlHBWmOx0iQsYcqBPIAa
gF7zKoA3ATia+XEkUqGATieqpGMUVZAAK6iMEDtgPSB6TFdjsFElZJZRsnGR
h3AVgJSrVIoS16AeYOMzmdEGkR+GmJ1A+3BZAGz8hGAxVIAEBIaIBaVKqyJg
iF+BJDG5C5SpCaQlVJkD8QMCAwiDniGkM61IuFUUZEmUp2Bav8pEjClEWDS4
V0Dx8A/ATsVEFkkFNaXoAbBqcqU0fyzXnOT53SS8J7rXcM1/FfT3EHQAzy1o
86ug/1MKelKlCTyZCB56DJ8H9h1+tvKLyqfTRyItS0CCoKRNvzCNQjUJsVhR
Sal9fh5lCqwQYSYqhrdUwNMCd1RSBcS+gSyCMKqw2qUo0ECUAbKoSapFgaWu
yPlK0xBuGbALeLQK4lJqDLkIyP0CQ6dFBjeuAOcDOuX4lWpfhpMKLl4M0CQz
2g5UYLe0kkXoZ8KHn+VDlHwIHvoHdpFJBrez9IXMAZjgOYK9JnmoVCIhi1UC
gS1LGdJ+fp6AsbCqYMUywDJgdELFUQFHTIOMEmIcq7ggtHaVcvwowQXSg9vB
BdZnP0dw4bOG5BjRr5B8G5JLTAAKCcISqFBVieJVibJQ0gGOBNocalPr2Jdx
nORF7EOfpVGBxYljMEM5yXSZxn4aSR9qWGG0dBY4DKHffKw/hWxUngZ5SBHI
CGahAJFxV0dBmao4zXcchHrXuIU7SvKJIhY/e87s9dK06TNd10/Txl/xjiML
aVxB4IM4jmCkYZBLstNVGQsIDLgbQEJUvlBJDq0a5glMUJFA1kMpJVgn3XPm
55NFGX722M+nWypgi0hCL0H0M6WgcrQfU9UOCW1A53/TnHLUoizQlYJBriJo
DDpumuOZsFT+hI6bqCSL0UtRQXdnAFZAQWGIB3RSlIAiaQZhDkSeJhWscRxS
+n5SSZA6k+Mzqv21/hC/3rbj8L77PM77ePR4932A/meNw4E9PyWXKWDiAGic
ciGBuWQMM1CGuQAeAwbOQhi5jE5xhLAmXEIAE88yAaAP3ITJTQoAwSCOZBIm
wNf0H136fqWzXNNZWz+KaLMozKMQ3oEACokNBE4KQFWoFkA7mRew2BkVTNEw
3oqyJTOBdSBdVGQA8gEF3oVOVRntO3b44Q6qY8zrMmmP+67hlP4z8moAb+1T
MivtHQGSYgJJgL9SwafrQkA52m0B51QCb+sC+AWME8NLS+CvpfDwVFQAfU1K
Pw5jPxDAMvC2kkhr4NnEL4JI0K4U0FKgMzRdZBH0Y1iggySDE5bl4F8lM4wx
EcBbWUKb2GEGrAXo5sdZkePPDM0GSZbotIJAlGGoYniYGfwUDWdK+hCBCSwt
PCHoc7hGCj5IooM8KcKCjqfD8cLAocjTBHoYHWYJQJ8I4F8HEmobzqGewPsj
nxd3ZC4KzD6PKnjJ8DL5TNz4xExfPD7ARXHysO2cMF+/h3Pys2epfTq2Bayi
9AYNlAy/OytVAXc4EDIohAC6TqUMCyXzQIEfZVHC0gNWp2FFGC2M/HSiogjr
HwjMNY51mERZmRQBnH4oSCB6YG+hfXizusx1kuQA4/CqKS5QBuD/MgDXQU0T
vwAmlLFKC/g/fg7P2qdMgCRQlIWep5Gfy4D2OeHe6ygjB6OAsxOpHaeM3wfT
/3pO7ucAkkWQV0oVjBbzSotSiTjOs1xUVZHheYrk6TSGxxph9iGuhppCZVA4
0IxFMomCFEovT2F8RQYmzEoAyyqmqjPQgJVfJiBRmPApgKIIBcBCiR4SqrEn
s2icP9nnhM9ja/Jn31n8dMwAWBfAgMHux5UPwwajpAqqOJRl0BhJBMNCd7Ko
TMlPzGQUB1oRQ2RQTkE0yTIohFxAz4SF72uZSB+OpKzQZgJ3krKfwC5Bqulg
SRkB4xU5OC5T4LM8TtBARGVXSii4SFBFsSiKMgy2pNPAQe4TyyS+qKgGi66g
H2GgU5/MY5VDZcXBRJR+lvGxmjQJYcyxBmlU5AXazVINuyhz6fuxjCk7CTov
zTMMrATjKgDYRF3Cjh/q1/x6IvEDTyR+QkEIw8qXVRjKUERVUiQqFnR8XRZC
U4QvAKk5R9AvodByMGEhfD8pswBIDlYXXYDbIwrORWCqEEAOJKwA7hIJNRlU
maoARAtfl3T4KgExRarA7cTKyldqQoexIARBmvgx7YHAoEeFiGUolQTsVDHF
wUsdxFifCGZaFBLWG+P2cxUEWTrxJchOKyKpHSxFIYASKgmzX0nhw6+SZRrL
NIoBRek0lQw1tLP04yhWeS4nFe6JJKzg+cEARLuiOx/nnKOTjevKya9nG693
tvHTiUumNNX+gUsOTleCHgtlWUiQikua+XmZah+zilLQIomCIIUbHwgh4MvA
F4LfAs0uCyXgu/hBkeVZJVQWhhlAq9I+PLkQar+gp1LAlCIXYMikLPOYdHkQ
UGYhAAloLKO0JCxThER3TbGEFD0XgDGx8nMBpy2gQ2gywER8v8yzOIeHN5Gw
G5SEG4daV3DvfODjCj8EVa4scgn8HEO80zKFqKeUfwjHLFUkwvAOKwGBzbHU
NISQ9iVDn86SBeALUQawmXDJQiEiCFYGqwRKSFAUpIAWgYaBdpiERZoKynut
qOKcjsIAnmCSp5kGVgowBcArPyti8A0YBeMhFZLCoFHqceSrSZYnaa6ULxPo
gSwSOQyhEvALQ6XCooCNg36B25BTZaeiVABmYaqzVGHulSp3OYcf4cSkk+j/
Tmclf0VsnxixmeIwXZGX8Vdcuu9tPO8+9/JhdWRsgfadH5LZW7Hdsz/tN952
Vpp5j7G/SykaNP9N+NuHz0+O705ZQq3D/TkL4LuVc997MPcnpCydIvgUlP2F
Fdfem6z+Ey4F5Vx8DkvxS68r3NXconJZZsE+mh7tf+Pi3VRo76spBxQGVOYr
vvTloPXOL6b0Psd32Ze/tr6u2rXa/7CK+3Cm+ULwm4XXaPPZxt53RMyT7psh
h8N0h2sT8npZEMzp78vjP1NJOfo01rsgnyBLsnj77DglrMRVRhidTswBMyel
KpIsgjQmuR/siEt/ROK3tvQXY0U/6eL4aRgkQJZprH1dAGWWMbRkJjAuXxVK
j9XLx4Vp76FeWkj2q3rpq5cPMaGfnoOXtIjX4uCM3P0kjfZzcJnlcIUw1Jii
DKGAByN8mPkSeCctxK5tr4+tXn5RIP2TLk4qhSiAr6QsC6DPIIc2Iq9SxFSh
J4rd4nhHir7oPtPl6TlkjRTIs3vPJv8frJPAren2AAA=

-->

</rfc>

