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


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

]>


<rfc ipr="trust200902" docName="draft-ietf-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="2025" month="November" day="13"/>

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

    <abstract>


<t>This document specifies the use of 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-256, SHA3-384, SHA3-512, SHAKE128 and SHAKE256 are also specified.</t>



    </abstract>



  </front>

  <middle>


<section anchor="changes-in-version-01"><name>Changes in version -01</name>

<t><list style="symbols">
  <t>Removed support for HMAC-SHA3. The draft now only covers KMAC as a PRF and integrity protection transform, and SHA3 and SHAKE for use with the Digital Signature authentication method.</t>
  <t>Corrected several test vector errors.</t>
  <t>Added notes about draft-smyslov-ipsecme-ikev2-prf-plus.</t>
  <t>Changed API symbols to better align with RFC 7296.</t>
  <t>Several wording changes for clarity, error corrections, etc.</t>
  <t>Added section about considerations for implementers and future IKEv2 documents.</t>
</list></t>

</section>
<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).
<xref target="SP-800-185"/> specifies KMAC128 and KMAC256, which use variants of SHAKE128 and SHAKE256 respectively to create a message authentication code (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 KMAC128 and KMAC256 with IKEv2 and IPsec for integrity protection, and as a PRF for IKEv2.
It also allocates values used for announcing support for SHA3-256, SHA3-384, SHA3-512, SHAKE128, and SHAKE256 when generating and validating signatures in IKEv2.</t>

<t>EDNOTE: Support for SHA3-224 is not included, though draft-ietf-lamps-cms-sha3-hash includes support for SHA3-224 with ECDSA.</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>

<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 "KMAC" is used to collectively refer to KMAC128 and KMAC256.</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-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>SHA-2 is used with HMAC in IKEv2 and IPsec.
Whilst SHA-3 can be used with HMAC, KMAC is more efficient 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.
Therefore, this document only specifies use of KMAC, and not of HMAC-SHA3.</t>

</section>
<section anchor="kmac-api"><name>KMAC API</name>

<t>The basic API for KMAC is defined below.
The symbols used in this API description conform to those used for prf+ in <xref target="RFC7296"/>, which clash with the API described in <xref target="SP-800-185"/>.
<xref target="RFC7296"/> uses S to describe the input string to prf+, whereas <xref target="SP-800-185"/> uses that symbol for the optional customization string.
KMAC implementations used in IKEv2 and IPsec do not need to conform to these APIs exactly; they are merely used in this document for illustrative purposes.</t>

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

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

<t>where:</t>

<t><list style="symbols">
  <t>K is the key.
It is a bit string of length between zero and (2^2040)-1 bits, inclusively.</t>
  <t>S 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 IPsec, 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>C is an optional customization string.
It is a bit string of length between zero and (2^2040)-1 bits, inclusively.</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>

</section>
<section anchor="constraints-on-kmac-inputs-and-outputs"><name>Constraints on KMAC inputs and outputs</name>

<t>Per <xref target="SP-800-185"/>, the length of the key input 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 IKEv2 PRF calls, although the length of these nonces combined cannot exceed 4096 bits.
Pre-shared keys used for authentication in IKEv2 are used as keys with PRFs negotiated by IKEv2, and have no upper bound on their length.
Therefore, KMAC implementations used with IKEv2 <bcp14>MUST</bcp14> at minimum accept values of K 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 input to KMAC, but <xref target="prf-key-size-and-output-length"/> and <xref target="auth-key-size-and-output-length"/> list the recommended key sizes to be used within the context of IKEv2 and IPsec, aligned to the security strength of each algorithm.
Using a key smaller than the security strength of the chosen KMAC 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 IKEv2 cannot always be controlled.</t>

<t>As an example, in the case of pre-shared keys used for authentication or protection against a quantum computer as in <xref target="RFC8784"/>, those secrets are used as the key input to a PRF negotiated by IKEv2.
Those pre-shared keys could be arbitrarily chosen by a user or derived from a password rather than securely generated, even though <xref target="RFC7296"/> strongly discourages this practice.
Keys chosen in this manner may be shorter than any recommended key size.
IKEv2 implementations following the recommendation laid out in <xref target="RFC7296"/> can impose constraints on suitable pre-shared keys.</t>

<t>Additionally, Ni and Nr are variable length and are used as the key for KMAC.
<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 IKEv2 peer sends an undersized nonce, the message containing that nonce can be rejected in the same way as any malformed IKEv2 message would be.
Conformant KMAC implementations <bcp14>SHOULD</bcp14> reject keys that do not meet the security strength of the corresponding algorithm.</t>

<t>The input string S can be a variety of lengths in practice, but in the context of IKE and IPsec the length will always be a multiple of eight, as IKE and IPsec only operate on entire octets.
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 C 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>

<t>EDNOTE: The customization string isn'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.
Note that <xref target="I-D.smyslov-ipsecme-ikev2-prf-plus"/> specifies the customization string be set to the empty string.
Whatever decision is made, we should ensure the two documents align in the end.</t>

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

<t>Since the length of the input string S for KMAC varies, and KMAC operates on fixed-size input blocks, padding is required to use KMAC in IKEv2 and IPsec.
The padding scheme for KMAC is specified in <xref target="SP-800-185"/>.
A KMAC implementation conformant to that document is sufficient; no additional padding is required to use these algorithms in IKEv2 or IPsec.</t>

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

<t>When KMAC is used as the PRF for an IKE SA, the size of the key input K is variable.
If the size of a KMAC key is greater than the preferred key size as shown in <xref target="prf-key-size-and-output-length"/>, 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-kmac"><name>Parameters and security strengths for KMAC</name>

<t><xref target="output-length-and-security"/> describes the general properties of KMAC, with the HMAC-SHA2 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="KMAC output length and security strength values, compared with HMAC-SHA2" 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>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"/> presents the parameters of KMAC when it is used as a PRF in IKEv2, with the HMAC-SHA2 algorithms also listed for comparison purposes.</t>

<texttable title="KMAC preferred key sizes and output lengths for use as a PRF, compared with HMAC-SHA2" 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>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>The security strength of these algorithms is equal to the maximum security strength indicated for that algorithm in <xref target="output-length-and-security"/>, unless the entropy of the supplied key is insufficient to meet that strength.</t>

<t>When key material is extracted from IKEv2's prf+ Key Derivation Function (KDF) for use with KMAC as a PRF 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"/> presents the parameters of KMAC when it is used for data origin authentication and integrity protection in IKEv2 and IPsec, with the HMAC-SHA2 algorithms also listed for comparison purposes.</t>

<texttable title="KMAC key sizes and output lengths for use as an Integrity Algorithm Transform, compared with HMAC-SHA2" 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>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, 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 KMAC for data origin 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="kmac-as-a-prf-in-ikev2"><name>KMAC as a PRF in IKEv2</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).
KMAC can act as the PRF for an IKE SA, but it is treated slightly differently to existing PRFs as it is capable of producing different output lengths depending on the context in which it is used.</t>

<t>With KMAC, the key K is either a fixed-length key (such as SK_d) that is the preferred key size for the variant of KMAC being used, or the length of K is dependent on other factors.
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 input key K, the length of K depends on implementation-specific details, user configuration options, etc.</t>

<t>When KMAC is used as the PRF for an IKE SA, its "requested output length" parameter L and "customization string" parameter C are populated differently depending on whether KMAC is being used as a part of the prf+ construction in the IKEv2 KDF or not.
This process is described in more detail in <xref target="kmac-as-prf"/> and <xref target="kmac-in-prf-plus"/>.</t>

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

<t>When used in IKEv2 as a PRF outside the prf+ construction, KMAC's output length L is 128 for KMAC128, and 256 for KMAC256.
That is, the output length is the same size as the security strength and preferred key size of the given KMAC algorithm.
Note that the situation is different when KMAC is used within the prf+ construction, as described in <xref target="kmac-in-prf-plus"/>.</t>

<t>When KMAC is used as a PRF outside the prf+ construction, the customization string C is set to the ASCII character string "ikev2 prf", without null termination.</t>

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

<t>When KMAC is used in the prf+ construction, 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.
<xref target="I-D.smyslov-ipsecme-ikev2-prf-plus"/> suggests the alternative approach of replacing prf+ with a KMAC output of the required length.
This could be simpler to implement, but does mean that if 128/256 bits are requested from prf+(K, S), these will be the same as prf(K, S), which isn't currently true for other PRFs in IKEv2.
Use of context separators for prf and prf+ calls as suggested in this document would prevent that.</t>

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

</section>
</section>
<section anchor="kmac-for-integrity-protection-in-esp-ah-and-ikev2"><name>KMAC for integrity protection in ESP, AH and IKEv2</name>

<t>IKE and IPsec SAs can make use of an integrity protection algorithm to provide data origin authentication and integrity protection services.
KMAC 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 <bcp14>MUST NOT</bcp14> be negotiated in IKEv2 in conjunction with an AEAD cipher.</t>

<t>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>

<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 C is set to the ASCII character string "ipsec integ", without null termination.
When used with IKEv2 for integrity protection, the "customization string" parameter C is set to the ASCII character string "ikev2 integ", 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 anchor="use-of-sha-3-in-the-digital-signature-authentication-method-in-ikev2"><name>Use of SHA-3 in the Digital Signature authentication method 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 has 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 IKEv2 peer to announce the hash functions it supports for use with signatures.
This specification defines values in <xref target="hash-transforms"/> 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="considerations-for-implementers-and-for-future-ipsec-documents"><name>Considerations for implementers and for future IPsec documents</name>

<t>KMAC's API differs from most PRF and Integrity Algorithm transforms as described in <xref target="kmac-api"/>.
Care should be taken with the output length parameter L in particular, as its behavior can be counter-intuitive when compared to other integrity algorithms where a truncated output is used as an authenticator value.
Unlike SHAKE, KMAC outputs of different lengths are not related.
That is, the value of L is factored into the calculation of the output value, and thus all bits of the output value are affected.
This means that implementations cannot simply discard a portion of a KMAC output as a substitute for requesting the correct value for L.
For example, a KMAC256 implementation used as the PRF transform for IKEv2 cannot be used as an Integrity transform simply by discarding bits from that implementation's output; a different value of L must be supplied.
<xref target="truncation-example"/> shows an example for the case where the key, input and (in the case of KMAC) customization string are all the empty string.</t>

<texttable title="KMAC with different output lengths, as compared to truncated HMAC values" anchor="truncation-example">
      <ttcol align='left'>Transform Name</ttcol>
      <ttcol align='left'>Output Length (bits)</ttcol>
      <ttcol align='left'>Output (hex)</ttcol>
      <c>PRF_HMAC_SHA2_256</c>
      <c>256</c>
      <c>b613679a0814d9ec772f95d778c35fc5...</c>
      <c>AUTH_HMAC_SHA2_256_128</c>
      <c>128</c>
      <c>b613679a0814d9ec772f95d778c35fc5</c>
      <c>PRF_KMAC_128</c>
      <c>256</c>
      <c>5c135c615152fb4d9784dd1155f9b603...</c>
      <c>AUTH_KMAC_128</c>
      <c>128</c>
      <c>e6aff27fef95903eb939bc3745730d34</c>
</texttable>

<t>This is also true for prf+ when used with KMAC.
Typically prf+ is used iteratively to obtain at least as much key material as is required, and the amount of key material obtained will be a multiple of the output size of the negotiated PRF.
This process will often produce more key material than required, and the excess is simply discarded.
When KMAC is used, the amount of key material required is supplied to the PRF, and exactly the right amount of key material will be returned.
Requesting more key material than required and discarding any excess will produce different keys, and interoperability will not be possible.</t>

<t>Future authors of IPsec documents should be careful to consider whether related outputs from a PRF are required for their specification, and if so, describe how to handle KMAC and similar PRFs.</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 evolve over time, so implementers should pay attention to IETF RFCs reporting on recommendations for the 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 theoretically also attack hash functions, including SHA-3 and SHA-2, using Grover's algorithm.
However, the impact of Grover's algorithm is significantly less dramatic than the impact of Shor's Algorithm.
The worst-case impact of Grover's algorithm would be a reduction in security strength by a factor of two.
However, since Grover's algorithm is difficult to parallelise, the security reduction for SHA-3 and SHA-2 caused by Grover's algorithm is expected to be far less significant in practice.
See <xref target="GROVER"/> for a discussion on the practical cost of using Grover's algorithm to attack hash functions.</t>

<t>The security properties offered by 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 KMAC.</t>

<t>When IKEv2 is used to create IPsec SAs, the keys for 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 IKEv2 for authentication and/or protection against quantum computers.
If the negotiated key exchange algorithm or encryption algorithm offers fewer 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 or encryption algorithm that offers more bits of security than the negotiated PRF does not improve the security offered by that PRF.
As such, it is important to ensure that IKEv2 peers configure algorithm policies such that every algorithm negotiated always meets an acceptable minimum security strength.
Where static keys are used with KMAC, these <bcp14>MUST</bcp14> contain at least as much entropy as the security strength of the chosen algorithm, and <bcp14>SHOULD</bcp14> be generated using a random number generator suitable for use with cryptography.</t>

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

<t>For negotiating use of KMAC as a PRF for IKEv2, IANA is requested to assign two 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_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 KMAC for integrity protection in IKEv2 and IPsec protocols, IANA is requested to assign two 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_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 five 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_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'>



<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='National Institute of Standards and Technology (U.S.)' value='report'/>
  <seriesInfo name='DOI' value='10.6028/nist.fips.202'/>
</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='National Institute of Standards and Technology' value='report'/>
  <seriesInfo name='DOI' value='10.6028/nist.sp.800-185'/>
</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'>



<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='National Institute of Standards and Technology (U.S.)' value='report'/>
  <seriesInfo name='DOI' value='10.6028/nist.fips.203'/>
</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='National Institute of Standards and Technology (U.S.)' value='report'/>
  <seriesInfo name='DOI' value='10.6028/nist.fips.204'/>
</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='National Institute of Standards and Technology (U.S.)' value='report'/>
  <seriesInfo name='DOI' value='10.6028/nist.fips.205'/>
</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='National Institute of Standards and Technology' value='report'/>
  <seriesInfo name='DOI' value='10.6028/nist.sp.800-57pt1r5'/>
</reference>


<reference anchor="GROVER" target="https://www.etsi.org/deliver/etsi_tr/103900_103999/103967/01.01.01_60/tr_103967v010101p.pdf">
  <front>
    <title>Impact of Quantum Computing on Symmetric Cryptography</title>
    <author >
      <organization>European Telecommunications Standards Institute</organization>
    </author>
    <date year="2025"/>
  </front>
  <seriesInfo name="ETSI TR 103 967" value=""/>
  <format type="PDF" target="https://www.etsi.org/deliver/etsi_tr/103900_103999/103967/01.01.01_60/tr_103967v010101p.pdf"/>
</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='RFC8784'>
  <front>
    <title>Mixing Preshared Keys in the Internet Key Exchange Protocol Version 2 (IKEv2) for Post-quantum Security</title>
    <author fullname='S. Fluhrer' initials='S.' surname='Fluhrer'/>
    <author fullname='P. Kampanakis' initials='P.' surname='Kampanakis'/>
    <author fullname='D. McGrew' initials='D.' surname='McGrew'/>
    <author fullname='V. Smyslov' initials='V.' surname='Smyslov'/>
    <date month='June' year='2020'/>
    <abstract>
      <t>The possibility of quantum computers poses a serious challenge to cryptographic algorithms deployed widely today. The Internet Key Exchange Protocol Version 2 (IKEv2) is one example of a cryptosystem that could be broken; someone storing VPN communications today could decrypt them at a later time when a quantum computer is available. It is anticipated that IKEv2 will be extended to support quantum-secure key exchange algorithms; however, that is not likely to happen in the near term. To address this problem before then, this document describes an extension of IKEv2 to allow it to be resistant to a quantum computer by using preshared keys.</t>
    </abstract>
  </front>
  <seriesInfo name='RFC' value='8784'/>
  <seriesInfo name='DOI' value='10.17487/RFC8784'/>
</reference>


<reference anchor='I-D.smyslov-ipsecme-ikev2-prf-plus'>
   <front>
      <title>Use of Variable-Length Output Preudo-Random Functions (PRFs) in the Internet Key Exchange Protocol Version 2 (IKEv2)</title>
      <author fullname='Valery Smyslov' initials='V.' surname='Smyslov'>
         <organization>ELVIS-PLUS</organization>
      </author>
      <date day='8' month='April' year='2025'/>
      <abstract>
	 <t>   This document specifies the use of variable-length output Preudo-
   Random Functions (PRFs) in the Internet Key Exchange Protocol Version
   2 (IKEv2).  Current IKEv2 specification relies on traditional PRFs
   with fixed output length for key derivation and uses iterative
   application of a PRF (called &quot;prf+&quot;) in cases when longer output is
   required.  Appearance of PRFs that can output as much bits as
   requested allows to streamline the key derivation functions of IKEv2.

   This document updates RFCs 5723, 6617, 6631, 7296, 8784, 9370 for the
   cases when variable-length output Preudo-Random Functions are used in
   IKEv2 and its extensions.

	 </t>
      </abstract>
   </front>
   <seriesInfo name='Internet-Draft' value='draft-smyslov-ipsecme-ikev2-prf-plus-01'/>
   
</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>


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

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

<t>A key, input, customization string, and output are always supplied.
These correspond to the K, S, C, and Z parameters described in <xref target="kmac-api"/>.
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 metadata, 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 KMAC as the PRF transform for an IKE SA.</t>

<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):
922d6a5ea665e5418974b218d84d3e9946163563e2208f33a4beac7091ae363c
f54d998ff215d1a66357b8e3c5d8a083dfba20f4bfac697fcd134faf8db1c051

~~ 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):
7379097e0e2812e4b9a342ffb68e1b50028e87536006cbcf3e4bbff74bdef6e5
86fd2cbfb3baf59f0c63969da28ba6506e826c1a74e045d9d511929b4d6bfb51

~~ 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):
923efa870d85a6f31253f14c661d622951efcc729770dae1bd01cc8174fd27b6
93be6869aaeff4cb89d1a355629c2525555c959d39217c8a8b8d0a7420eed96c

]]></sourcecode></figure>

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

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

<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):
8226d67fdc4d2cc013a401461d21d6f17b4121f3a300972f6b163c8e4a4192be

~~ 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):
ea9f5defe875dcdc9c1b4db30bb1950f21838601af2e1f8f41beefe18e7b779c
2a25ae188d6cafc6546574110c94d8b0a67740ed63ba5dfb07316b1473498156

~~ Test Case KMAC128-KDF-3 ~~

Description:
IKE SA key material
ENCR=ENCR_AES_GCM_16 with 128-bit key
PRF=PRF_KMAC_128
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):
6be4bbda1483209cb64de61c306ebc8b0357ff661f419b298eb8f78deb6a47a4
5a5a1d16bc00e46926e04cd53d4d843d4d2526cf275c3422d08aab7c610ff88d
11a50de2e6c021dde966c18111d40c6e57a798e8ce13a007

~~ Test Case KMAC128-KDF-4 ~~

Description:
IKE SA key material
ENCR=ENCR_AES_CBC with 128-bit key
INTEG=AUTH_KMAC_128
PRF=PRF_KMAC_128
SK_d = 128 bits
SK_a[i|r] = 128*2 bits
SK_e[i|r] = 128*2 bits
SK_p[i|r] = 128*2 bits

Key (hex):
000102030405060708090a0b0c0d0e0f

Input (hex):
fffefdfcfbfaf9f8f7f6f5f4f3f2f1f0efeeedecebeae9e8e7e6e5e4e3e2e1e0
dfdedddcdbdad9d8d7d6d5d4d3d2d1d0

Number of output bits requested (integer):
896

Customization String (string):
"ikev2 kdf"

Customization String (hex):
696b657632206b6466

Output (hex):
3ef21c2736e603449ca86869be92ff6a4a116198a69364950456a0b3ee0fb63c
98e20830e703a8f1ee9a7b2c39ad19410b6e2b97026b408b706c4c393304710f
961f55d1e7fc8805ebb5c6190db0f8f2d47032e3f12115156fa5296d7afc6d1e
cf6af577aeeaa289f0a2b73287637ff9

~~ Test Case KMAC128-KDF-5 ~~

Description:
ESP key material
ENCR=ENCR_AES_CBC with 128-bit key
INTEG=AUTH_KMAC_128
KEYMAT=(128*2) + (128*2) bits

Key (hex):
000102030405060708090a0b0c0d0e0f

Input (hex):
fffefdfcfbfaf9f8f7f6f5f4f3f2f1f0efeeedecebeae9e8e7e6e5e4e3e2e1e0

Number of output bits requested (integer):
512

Customization String (string):
"ikev2 kdf"

Customization String (hex):
696b657632206b6466

Output (hex):
ea9f5defe875dcdc9c1b4db30bb1950f21838601af2e1f8f41beefe18e7b779c
2a25ae188d6cafc6546574110c94d8b0a67740ed63ba5dfb07316b1473498156

]]></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):
cf0a2cca4eb61bf2f2d1c840e445f8f83da66c5a04603b67c4f5e5421ea7df56
28ffae929fbaa418af3fb1982873359d85e550e31f8d23893d3db1cf2652e353

~~ 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):
977a3b6d7ca5350b715330312375f5e291738dbd87504493b521164cd82ed09c
83f955d3a9475902809e20cf9217addb49126fff9e3bde68f7b7062ff336a69f
aae8cb5b3486870031f9bc4df5bcda12384bfb096f67953c93c2eeb0a62a0353
728f8e2227c1f6c750207e75ccbecf0a25640f2d24795d4a83b3cf482721d249

~~ Test Case KMAC256-KDF-3 ~~

Description:
IKE SA key material
ENCR=ENCR_AES_GCM_16 with 256-bit key
PRF=PRF_KMAC_256
SK_d = 256 bits
SK_a[i|r] = nil
SK_e[i|r] = 288*2 bits
SK_p[i|r] = 256*2 bits

Key (hex):
000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f

Input (hex):
fffefdfcfbfaf9f8f7f6f5f4f3f2f1f0efeeedecebeae9e8e7e6e5e4e3e2e1e0
dfdedddcdbdad9d8d7d6d5d4d3d2d1d0

Number of output bits requested (integer):
1344

Customization String (string):
"ikev2 kdf"

Customization String (hex):
696b657632206b6466

Output (hex):
67c1d3627a0249c0722646ae7904b376a41ee36bdd8beceed7d7a2651610fae6
cdd494f7e46b8a9ec531c9f8849960b98d938a021960b40bec88103d24a166a4
5d7c09fc52b8071ca129f29f3d0ce0b8e923424618c4e0b361e142efd154ebdd
65e344509c44b8ed082a8ec3d11aa32b0d9968013c9071d9a99d748710fcfb5a
974ff991216239cc639b2be413d08e7097225eb1c0eb642584eac86f7923a199
e59a008352f6cf70

~~ Test Case KMAC256-KDF-4 ~~

Description:
IKE SA key material
ENCR=ENCR_AES_CBC with 256-bit key
INTEG=AUTH_KMAC_256
PRF=PRF_KMAC_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

Customization String (string):
"ikev2 kdf"

Customization String (hex):
696b657632206b6466

Output (hex):
836772bd1139dc8e5fa303e4cff1d75ad3a9c699335a5bfba6de4900e0072cb1
6a66260202ee96c51d14e8b335f9a683d18d703770be23658d74942d15ac1393
f84f849081505f95e69a18123552d12497f59032d6fa5bf2b8c35bd788dc4f60
a1f47e3859163c8929a8cc11c2103f2507549d4e78ad5848eec92271522b5607
38bb30ed7a90070124e685f41929c750a8ccfc1d8fe4288e701e316ed0e25852
0609d157ef05d99efe3db9f9b3ce042c87b8e37dfe194ff4df4b4ff5a07aa56b
e6bbc2470e5b6fc72177596064bb48c63e6730737aff6f6d32ed28d64dd37d3b

~~ Test Case KMAC256-KDF-5 ~~

Description:
ESP key material
ENCR=ENCR_AES_CBC with 256-bit key
INTEG=AUTH_KMAC_256
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):
977a3b6d7ca5350b715330312375f5e291738dbd87504493b521164cd82ed09c
83f955d3a9475902809e20cf9217addb49126fff9e3bde68f7b7062ff336a69f
aae8cb5b3486870031f9bc4df5bcda12384bfb096f67953c93c2eeb0a62a0353
728f8e2227c1f6c750207e75ccbecf0a25640f2d24795d4a83b3cf482721d249

]]></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 IKE 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 integ"

Customization String (hex):
696b65763220696e746567

Output (hex):
4d75b6e6bdf3021df40241b9ecc083e8

]]></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 integ"

Customization String (hex):
696b65763220696e746567

Output (hex):
d4e085d2434827192490ea96a205c24a8a471417e8d7bdbb33a76f7a2e9bbe54

]]></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-ipsec-integrity-protection-test-vectors"><name>KMAC128 IPsec 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 integ"

Customization String (hex):
697073656320696e746567

Output (hex):
cb53465b0191416d555424f155a48079

]]></sourcecode></figure>

</section>
<section anchor="kmac256-ipsec-integrity-protection-test-vectors"><name>KMAC256 IPsec 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 integ"

Customization String (hex):
697073656320696e746567

Output (hex):
2c890f94cb12e2b90fa9f8b3ea5ce53be91f1540619ae33dcc021083e9069e86

]]></sourcecode></figure>

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

<t>TODO</t>

</section>


  </back>

<!-- ##markdown-source:
H4sIAAAAAAAAA+19637jxpHvdz4FjvwhM1mRg/tlEieraDSeyVwzku1NdvfM
rwE0JGRIggFIydqx/Szny3mRc17s/Ku6GxcSpGSP13H2rONYJAh0V1fXvaoL
0+l0Mvnss8/wH+v5ci3rpVxPn9SiWFuvRP0hr26W1oVcrOZiLXEP3fZOLsVC
WuursrGKci6toq4WVk7PTNdVXk1vq01Nt0xXdbWusmo+W+TWurIu5dpq1qJe
y5zGUbPwWEVVL8TawoBHapzfmjF+N/3tTVV/uKyrzQqf+RKGO9KwPK1qq1yW
61LMrUauN6tjC09a1XJ+ay2l5GllXq4BLWYp62ZtpfMq+2BVBb7Ked7QKG/o
9qN1uZ7LI36soedSaWVXYnkp899YuZzLtbSORJrW8vrIKguap7b4GYK7uarq
NY11sry1KsxWW1kFfC7XViaWNBaBIfNjK92seWhRy2Izt5bVmiYrl+u6yjcZ
7qvrqmawzitCDUNp3ZTzOT2GRVpis66ArjITc8Cdb+pyealWT3Bh7lsLg1ub
pQZf4+pJtfwVcLzM5pscS5na9pEF9B1NaW+bNRa11Gia8w7TMy9FKudN+wu2
ybrHBukRFRQNdiG9pcFoiHVVzRm7WD1whA90NdvUNaHqWtZNWS1/g9UAwrzK
aLgjmteS3whQoaHBCyK+taZLmqOxPtRiQeQ6rYvssfXbq/V61Tx+9OiyXF9t
0llWLR5lIq0e9W/7HQ31Z9ALbVEtMVgmGR7AUtYKE3qrrZUCWFh5WeADQauo
lsY4ZUS32AOw2HlaCS0Q92RXLf5A5g9m3yzmvKh/efXy2JLrbDabPVQrI05k
onpsHX3ZSKLT82cnU89sgeFR6wV2+ewbtcPWW81o1lcKgZZrPXj+4uzafWiJ
ZW49f9vI7GiiiBcDtyPyPf1bMqDzsqpvH4NRQTd6Bx7rTS/lupiWK9wJ5m6u
hAcamjSbdFE2NOv6doVbn59dPLWszywxbyrMVS5zuZL4z3J9dGwdERdUNdiV
vjw/+QP+EA0+f3fxlHjaWm4WqazpU64kDrFRA2RumsfWut7gElbgTUBa4rF1
LkE55fp20pIg5n97fnb66mzyQd7iav54MplaDDP+AuapR98/yGsXfz8sREZz
XMvlhifTY+g1MtHyor7G+MRlX9DvdHkhyjmo7Osv/lkTJlEY05Oos6se/fV+
fvT1F3yHIsnH1pfnZ+8evTt7+4YuKpbZ8+DLk4uz8ws8DNaHoHk8sawp/m9Z
kCBztUN/kEvrXMxBHfxDVV+KZfkfkBLVEjO9sF7zR4jJ01sguMWcdYqNqSU/
I9WiMNLs3PvnZdZks8vqerb5MDLdSS4W1jtRLuWnTkcjzd7dMd0fMdYatG6d
1psy+4B9XH5oPnVmM+jsdDD7ZMlsWl5LwvO7p6eRm4T08SlIa+ra7mPryZvn
M8eehbYbP3r9/PxiRj/N8BPuOn87jW176sTByH3nb2f6x8mkXBb9iV69nL44
e7V/bE/d8+T8ZP89Ps3/8tnhmwJaysnL0zevHzM2jLh5KuYZ4fCpaNbTpxDv
JdD3UqyhaOQ0FSTHT6vFSmRr67y8BOo2NcRuBZltvb549+URD9YRKP0z1X8t
CBvw79vpyQwq+28b2V5X2/sWU9VyejIHQQ1u2BrgjzPrWVUUzVqWy60h/iiL
ooZM3P59G4SZ9aIEhy41n/RgENDGW79tPfzVzHp5uwEqruR18+F2a4CvRF4u
xm7YGuViZr2t6uXOCi6uoNWb4W8jjwLp6z1P9n7affBdmVUNrITxZ7d+3Xr8
ixn4CIptG2df1KQthr9tPfr1zPr66na9veNfw54pIUL6v209+ZeZ9RdSb1tP
/uVKLgtZ9n4jTfHYAvfZSmowVxkSfPvk6WPLyNSCSXzagHxnxH76wmyVF7id
mOTN8yfnmi1EDYO1ezZr6my2LJs1yYlHMG3/KrN18wjiebWB1J02WtBMq5R/
mQI3uFvWj8QcSILMX+hLNUuoPu+d6kE6afVGDQJjWw0yXKg/wmsQhI874fd8
2WBsjMkWxBoqXtQwI0nVX0iQeDWvLm87aRVE+4VVEK3WTk1S44t3b746ezeQ
Gs+VQMAkf9qI5Xqz0GshZQk75Px2sZDruswguG9X6+qyFqur21H83tzczOS6
KWdYyCPY2xCL9SO68H5dP3JsL7Ht9/QnSfhbGD2ynRn/+z60H63r9+rqte3Q
/1Z6T3tIC/Yh7WxTVyspyNGZS+znYrOEbU2IbHqoazF6F5H9Zy2kkZDIDZEt
QL44f25dvLNwq4V7lZ6KXdd5bD76kfkYxf7jCSzMyXQ6tURK9JfBamUTGgbe
ZkG2bLOSWQlfo2Erc6MszxevTk4dN2aqoc9uEMIRgeN3yBbdMUGPrbNlJlbN
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
5Rl713U8S95QIzYdEunO+xldMrTaNVtJDpKY+paVCjrsjDFkX2UPguTkHELh
tR62a/X1A0BXxS0Kft6r+4KvCjD4tRULykPfQcvsppyopm7HumCU2h7Va93s
oO0OgZu7cHHTFjD2F8NB0lL2W8Sp+H93Sw9YnVCko0AqyMYt7ZjD295w21rY
NC7T9NcKh6HjaOpITKXyuHtojiztranbc0jZNNvnZkKp7JpgtfXmunpKvVjU
/F7Vu2diVAFA7zVl6mU6J69Pdmx9ipAtexTVa6478u6VYzWI9nhVEQsJP05K
sXDsQkCUn9JS/6i7CtdbWq411e+mqoevpho+fmTpt8zdPqbo0mu17m+HwSUd
kjjHzm0afHgndWZzJ3x08CDozo8UF7n4wxM1+tjJw3bqf/tX9TocenvLv/27
Nf5gL7i0/0FzHrAXA9fREmW30V4MMfTd4R08VJ+z3aen51P8JJvsYZMPnuT4
YVv8afv8QzZ7bzTsXju+92TN4W3nMw379v1uNGo60Ccvt5Nd90yDdy83o7dA
7CmiGUmwHiaYgpIn4xSjSPAZQdEubJskvuIwONA2vO0TOX2wZdQzvLdbh/eX
b+4Oid3j5u7w1503vzjrS5i7b+5JlVGq2kqJDqlqC6GajIAcK4W3xe8mp4q0
r/itdPqtUb2eh/Qbt8xs04+7HYfVqwQzuYQfU5m02HYp406jpclJL0FxPJqH
OO6fIuv13+kyJBeqp2ebDTXOiertrTvH/6V/mPNArrEracdPnOJuc7l7a2xM
Ezdaz3w+hhyCG/Rb5WrKK/mNoIZaCzE31Ylj7dhUGIUP81I53njJUNvHRGd0
ufSwH5dVfnFr0+kd/Num0jmxhag/NHx8ol9lxGdnyH/k9zCo3ReDbvi98K+p
qB225GGvU53qWLdVsL0TGGbneoPqKsneKxKxY4KqP4/bdpfcK5ib7G0Fn9tA
WL+v4mefKV26Td+N7NP1kHi2LKPxZGF7goYn+awtktud7fvvv+e5ptf6Cr7z
Haeie3veFM9NHev77yeTJx0+Hk/e7hzJmFCfHZVJezyxbduxXduzfTuwQzuy
YzuxhZ3amZ3b0i5oC9vE2+NJAeO9yIusSAtRJEVcREVYBIVfeIVbOIWNuajm
PZOpFDKRsYxkKAPpS0+60pH2ZHI6INRzRYMPFC1igt7ZiH33KkjCJEzDIAo9
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
/w8883E5v7AAAA==

-->

</rfc>

