<?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-01" 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="July" day="03"/>

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

    <abstract>


<?line 159?>

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


<?line 165?>

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

<?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 "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' 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 (U.S.)</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 (U.S.)</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 (U.S.)</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://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>


<?line 516?>

<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
ZW49f9vI7GiiiBcDtyPyPf1bMqDzsqpvH4NRQTd6Bx7rTW/EHLNPyxXuBXs3
V8LTWz1pNumibGju9e0KDzw/u3hqWZ9ZYt5UmLFc5nIl8Z/l+ujYOiJeqGow
LX15fvIH/CFKfP7u4ilxtrXcLFJZ06dcyR1ipgYo3TSPrXW9wSWsw5uAwMRj
61yCfsr17aQlRMz/9vzs9NXZ5IO8xdX88WQytRhu/AXcU4++f5DXLv5+WIiM
5riWyw1PpsfQ62TS5UV9jfGJ176g3+nyQpRz0NrXX/yzJk+iM6YqUWdXPSrs
/fzo6y/4DkWYj60vz8/ePXp39vYNXVTY3PPgy5OLs/MLPAwBAHHzeGJZU/zf
siBH5mqf/iCX1jnvEv9Q1ZdiWf4HZEW1xEwvrNf8EcLy9BYIbjFnnWJjasnP
SLUojDQ79/55mTXZ7LK6nm0+jEx3kouF9U6US/mp09FIs3d3TPdHjLUGxVun
9abMPmAflx+aT53ZDDo7Hcw+WTKzlteS8Pzu6WnkJiF9fArSmrq2+9h68ub5
zLFnoe3Gj14/P7+Y0U8z/IS7zt9OY9ueOnEwct/525n+cTIpl0V/olcvpy/O
Xu0f21P3PDk/2X+PT/O/fHb4poCWcvLy9M3rx4wNI3SeinlGOHwqmvX0KYR8
CfS9FGuoGzlNBUnz02qxEtnaOi8vgbpNDeFbQXJbry/efXnEg3UESv9M9V8L
Igf8+3Z6MoPi/ttGttfV9r7FVLWcnsxBUIMbtgb448x6VhVFs5blcmuIP8qi
qCEZt3/fBmFmvSjBoUvNJz0YBHTy1m9bD381s17eboCKK3ndfLjdGuArkZeL
sRu2RrmYWW+rermzgosr6PZm+NvIozUJ3fEnez/tPviuzKoGtsL4s1u/bj3+
xQx8BPW2jbMvatIZw9+2Hv16Zn19dbve3vGvYdWUECH937ae/MvM+gspua0n
/3Ill4Use7+RpnhsgftsJTWYqwwJvn3y9LFlZGrBJD5tQL4zYj99YbbKC9xO
TPLm+ZNzzRaihtnaPZs1dTZbls2a5MQjGLh/ldm6eQTxvNqQbmy0oJlWKf8y
BW5wt6wfiTmQBJm/0JdqllB93jvVg3TS6o0aBCa3GmS4UH+E1yAIH3fC7/my
wdgYk+2INRS9qGFMksK/kCDxal5d3nbSKoj2C6sgWq2dmqTGF+/efHX2biA1
niuBgEn+tBHL9Wah10LKEtbI+e1iIdd1mUFw367W1WUtVle3o/i9ubmZyXVT
zrCQR7C6IRbrR3Th/bp+5NheYtvv6U+S8LcwemQ7M/73fWg/Wtfv1dVr26H/
rfSe9pAW7EPa2aauVlKQuzOX2M/FZgkLmxDZ9FDXYvQuIvvPWkgjIZEbIluA
fHH+3Lp4Z+FWC/cqPRW7rvPYfPQj8zGK/ccT2JmT6XRqiZToL4PtyoY0zLzN
gizaZiWzEh5Hw7bmRtmfL16dnDpuzFRDn90ghDsC9++QRbpjiB5bZ8tMrJoN
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
vEXStvpr2iPpd0JJ6+nlGXvXdTxL3lAjNh0S6c77GV0ytNo1W0kOkpj6lpUK
OuyMMWRfZQ+C5OQcQuG1HrZr9fUDQFfFLQp+3qv7gq8KMPgdFgvKQ99By+ym
nKimbse6YJTaHtVr3eyg7Q6Bm7twcdMWMPYXw0HSUvZbxKn4f3dLD1idUKSj
QCrIxi3tmMPb3nDbWtg0LtP01wqHoeNo6khMpfK4e2iOLO2tqdtzSNk02+dm
QqnsmmC19ea6ekq9ZdT8XtW7Z2JUAUDvnWXqzTonr092bH2KkC17FNVrrjvy
IpZjNYj2eFURCwk/TkqxcOxCQJSf0lL/qLsK11tarjXVL6qqh++pGj5+ZOlX
zt0+pujSa7Xub4fBJR2SOMfObRp8eCd1ZnMnfHTwIOjOjxQXufjDEzX62MnD
dup/+1f1bhx6lcu//bs1/mAvuLT/QXMesBcD19ESZbfRXgwx9N3hHTxUn7Pd
p6fnU/wkm+xhkw+e5PhhW/xp+/xDNntvNOxeO773ZM3hbeczDfv2/W40ajrQ
Jy+3k133TIN3bzqjt0DsKaIZSbAeJpiCkifjFKNI8BlB0S5smyS+4jA40Da8
7RM5fbBl1DO8t1uH95dv7g6J3ePm7vDXnTe/OOtLmLtv7kmVUaraSokOqWoL
oZqMgBwrhbfFryunirSv+BV1+hVSvZ6H9Bu3zGzTj7sdh9V7BTO5hB9TmbTY
dinjTqOlyUkvQXE8moc47p8i6/Xf6TIkF6qnZ5sNNc6J6u2tO8f/pX+Y80Cu
sStpx0+c4m5zuXtrbEwTN1rPfD6GHIIb9Fvlasor+Y2ghloLMTfViWPt2FQY
hQ/zUjneeMlQ28dEZ3S59LAfl1V+cWvT6R3826bSObGFqD80fHyiX2XEZ2fI
f+T3MKjdF4Nu+L3wr6moHbbkYa9TnepYt1WwvRMYZud6g+oqyd77ErFjgqo/
j9t2l9wrmJvsbQWf20BYv6/iZ58pXbpN343s0/WQeLYso/FkYXuChif5rC2S
253t+++/57mm1/oKvvMdp6J7ld4Uz00d6/vvJ5MnHT4eT97uHMmYUJ8dlUl7
PLFt27Fd27N9O7BDO7JjO7GFndqZndvSLmgL28Tb40kB473Ii6xIC1EkRVxE
RVgEhV94hVs4hY25qOY9k6kUMpGxjGQoA+lLT7rSkfZkcjog1HNFgw8ULWKC
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
6DD4XOaXulfaxZsnbyb/DwvpNU3SsAAA

-->

</rfc>

